From 5024f807d549d79463387fc8631ac4683a2533b8 Mon Sep 17 00:00:00 2001 From: Srinivas Karre Date: Wed, 6 May 2026 06:20:33 +0530 Subject: [PATCH 01/19] feat: add organization session policy SDK methods and generate local proto target Adds get_organization_session_policy and update_organization_session_policy wrapper methods, regenerates gRPC stubs from local protos, and adds generate-local Makefile target. --- Makefile | 24 +- scalekit/organization.py | 76 ++++ scalekit/v1/auditlogs/auditlogs_pb2.py | 27 +- scalekit/v1/auditlogs/auditlogs_pb2.pyi | 1 + scalekit/v1/auth/auth_pb2.py | 84 ++-- scalekit/v1/auth/auth_pb2.pyi | 20 +- scalekit/v1/auth/totp_pb2.py | 61 +-- scalekit/v1/auth/totp_pb2.pyi | 1 + scalekit/v1/clients/clients_pb2.py | 200 ++++----- scalekit/v1/clients/clients_pb2.pyi | 30 +- scalekit/v1/commons/commons_pb2.py | 4 +- scalekit/v1/commons/commons_pb2.pyi | 11 + .../connected_accounts_pb2.py | 152 ++++--- .../connected_accounts_pb2.pyi | 54 ++- .../connected_accounts_pb2_grpc.py | 136 ++++++ scalekit/v1/connections/connections_pb2.py | 278 +++++++------ scalekit/v1/connections/connections_pb2.pyi | 50 ++- .../v1/connections/connections_pb2_grpc.py | 66 +++ scalekit/v1/directories/directories_pb2.py | 40 +- scalekit/v1/directories/directories_pb2.pyi | 24 ++ .../v1/directories/directories_pb2_grpc.py | 66 +++ scalekit/v1/domains/domains_pb2.py | 26 +- scalekit/v1/domains/domains_pb2.pyi | 6 +- scalekit/v1/emails/emails_pb2.py | 197 ++++----- scalekit/v1/emails/emails_pb2.pyi | 1 + scalekit/v1/environments/environments_pb2.py | 367 ++++++++++------- scalekit/v1/environments/environments_pb2.pyi | 137 ++++++- .../v1/environments/environments_pb2_grpc.py | 168 ++++++++ scalekit/v1/errdetails/errdetails_pb2.py | 49 ++- scalekit/v1/errdetails/errdetails_pb2.pyi | 3 + scalekit/v1/errdetails/errdetails_pb2_grpc.py | 63 +++ scalekit/v1/keys/__init__.py | 0 scalekit/v1/keys/keys_pb2.py | 111 +++++ scalekit/v1/keys/keys_pb2.pyi | 178 ++++++++ scalekit/v1/keys/keys_pb2_grpc.py | 386 ++++++++++++++++++ scalekit/v1/members/members_pb2.py | 85 ++-- scalekit/v1/members/members_pb2.pyi | 1 + scalekit/v1/migrations/migrations_pb2.py | 68 +-- scalekit/v1/migrations/migrations_pb2.pyi | 12 + scalekit/v1/migrations/migrations_pb2_grpc.py | 33 ++ scalekit/v1/options/options_pb2.py | 4 +- scalekit/v1/options/options_pb2.pyi | 16 + .../v1/organizations/organizations_pb2.py | 246 ++++++----- .../v1/organizations/organizations_pb2.pyi | 137 +++---- .../organizations/organizations_pb2_grpc.py | 151 +++---- scalekit/v1/providers/providers_pb2.py | 114 ++++-- scalekit/v1/providers/providers_pb2.pyi | 75 +++- scalekit/v1/providers/providers_pb2_grpc.py | 99 +++++ scalekit/v1/roles/roles_pb2.py | 6 +- scalekit/v1/tools/tools_pb2.py | 82 ++-- scalekit/v1/tools/tools_pb2.pyi | 34 +- scalekit/v1/tools/tools_pb2_grpc.py | 33 ++ scalekit/v1/users/users_pb2.py | 170 ++++---- scalekit/v1/workspaces/workspaces_pb2.py | 272 ++++++------ scalekit/v1/workspaces/workspaces_pb2.pyi | 50 ++- scalekit/v1/workspaces/workspaces_pb2_grpc.py | 133 ++++++ 56 files changed, 3574 insertions(+), 1344 deletions(-) create mode 100644 scalekit/v1/keys/__init__.py create mode 100644 scalekit/v1/keys/keys_pb2.py create mode 100644 scalekit/v1/keys/keys_pb2.pyi create mode 100644 scalekit/v1/keys/keys_pb2_grpc.py diff --git a/Makefile b/Makefile index 3cb6f92..41a78e0 100644 --- a/Makefile +++ b/Makefile @@ -14,6 +14,7 @@ VENV_PIP := $(VENV_PYTHON) -m pip PROTO_REPO_URL := https://github.com/scalekit-inc/scalekit.git PROTO_REF ?= v0.1.103 PROTO_SUBDIR := proto +LOCAL_PROTO_DIR ?= ../scalekit/proto TEMP_DIR := temp_scalekit SCALEKIT_DIR := scalekit @@ -22,7 +23,7 @@ GOOGLE_DIR := google PROTO_DIR := proto PROTOC_DIR := protoc_gen_openapiv2 -.PHONY: setup generate lint test tools-check create-venv prepare buf_generate restore generate_init_files cleanup copy_proto_dir +.PHONY: setup generate generate-local lint test tools-check create-venv prepare buf_generate restore generate_init_files cleanup copy_proto_dir setup: create-venv @echo "Installing SDK dependencies in $(VENV_DIR)..." @@ -99,6 +100,27 @@ cleanup: rm -rf $(GOOGLE_DIR) $(PROTO_DIR) $(PROTOC_DIR) rm -f .dirpath +generate-local: tools-check + @echo "Using local proto sources from $(LOCAL_PROTO_DIR)..." + @set -euo pipefail; \ + prepared=0; \ + rollback_if_needed() { \ + if [ "$$prepared" -eq 1 ] && [ -d "$(TEMP_DIR)" ]; then \ + echo "Generation failed; restoring $(SCALEKIT_DIR) from $(TEMP_DIR)..."; \ + rsync -a "$(TEMP_DIR)/" "$(SCALEKIT_DIR)/"; \ + fi; \ + }; \ + trap 'rollback_if_needed' EXIT; \ + echo "Step 1: Syncing proto files from $(LOCAL_PROTO_DIR)"; \ + mkdir -p proto; \ + rsync -av "$(LOCAL_PROTO_DIR)/" proto/; \ + $(MAKE) prepare; prepared=1; \ + buf generate ../scalekit; \ + $(MAKE) restore; prepared=0; \ + $(MAKE) generate_init_files; \ + $(MAKE) cleanup + @echo "Code generation complete." + lint: create-venv @echo "Running static checks..." $(VENV_PYTHON) -m compileall -q scalekit tests diff --git a/scalekit/organization.py b/scalekit/organization.py index 95952d4..d023989 100644 --- a/scalekit/organization.py +++ b/scalekit/organization.py @@ -20,7 +20,12 @@ UpdateOrganizationSettingsRequest, OrganizationUserManagementSettings, UpsertUserManagementSettingsRequest, + OrganizationSessionPolicySettings, + GetOrganizationSessionPolicyRequest, + UpdateOrganizationSessionPolicyRequest, + SessionPolicySource, ) +from scalekit.v1.commons.commons_pb2 import TimeUnit from scalekit.v1.organizations.organizations_pb2_grpc import OrganizationServiceStub @@ -219,3 +224,74 @@ def upsert_user_management_settings(self, organization_id: str, max_allowed_user ) ) return response[0].settings + + def get_organization_session_policy(self, organization_id: str) -> OrganizationSessionPolicySettings: + """ + Get the session policy for an organization. + + :param organization_id: Organization id + :type organization_id : ``` str ``` + :returns: + OrganizationSessionPolicySettings + """ + response = self.core_client.grpc_exec( + self.organization_service.GetOrganizationSessionPolicy.with_call, + GetOrganizationSessionPolicyRequest(organization_id=organization_id), + ) + return response[0].policy + + def update_organization_session_policy( + self, + organization_id: str, + policy_source: SessionPolicySource, + absolute_session_timeout: Optional[int] = None, + absolute_session_timeout_unit: Optional[TimeUnit] = None, + idle_session_timeout_enabled: Optional[bool] = None, + idle_session_timeout: Optional[int] = None, + idle_session_timeout_unit: Optional[TimeUnit] = None, + ) -> OrganizationSessionPolicySettings: + """ + Set a custom session policy for an organization or revert to application defaults. + + :param organization_id: Organization id + :type organization_id: ``` str ``` + :param policy_source: SessionPolicySource.APPLICATION or SessionPolicySource.CUSTOM + :type policy_source: ``` SessionPolicySource ``` + :param absolute_session_timeout: Absolute session timeout value (optional) + :type absolute_session_timeout: ``` int | None ``` + :param absolute_session_timeout_unit: Unit for absolute timeout (optional) + :type absolute_session_timeout_unit: ``` TimeUnit | None ``` + :param idle_session_timeout_enabled: Whether idle session timeout is enabled (optional) + :type idle_session_timeout_enabled: ``` bool | None ``` + :param idle_session_timeout: Idle session timeout value (optional) + :type idle_session_timeout: ``` int | None ``` + :param idle_session_timeout_unit: Unit for idle timeout (optional) + :type idle_session_timeout_unit: ``` TimeUnit | None ``` + :returns: + OrganizationSessionPolicySettings + """ + policy = OrganizationSessionPolicySettings(policy_source=policy_source) + if absolute_session_timeout is not None: + policy.absolute_session_timeout.CopyFrom( + wrappers_pb2.Int32Value(value=absolute_session_timeout) + ) + if absolute_session_timeout_unit is not None: + policy.absolute_session_timeout_unit = absolute_session_timeout_unit + if idle_session_timeout_enabled is not None: + policy.idle_session_timeout_enabled.CopyFrom( + wrappers_pb2.BoolValue(value=idle_session_timeout_enabled) + ) + if idle_session_timeout is not None: + policy.idle_session_timeout.CopyFrom( + wrappers_pb2.Int32Value(value=idle_session_timeout) + ) + if idle_session_timeout_unit is not None: + policy.idle_session_timeout_unit = idle_session_timeout_unit + response = self.core_client.grpc_exec( + self.organization_service.UpdateOrganizationSessionPolicy.with_call, + UpdateOrganizationSessionPolicyRequest( + organization_id=organization_id, + policy=policy, + ), + ) + return response[0].policy diff --git a/scalekit/v1/auditlogs/auditlogs_pb2.py b/scalekit/v1/auditlogs/auditlogs_pb2.py index 9417e8c..58d34a5 100644 --- a/scalekit/v1/auditlogs/auditlogs_pb2.py +++ b/scalekit/v1/auditlogs/auditlogs_pb2.py @@ -14,12 +14,13 @@ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 +from google.api import visibility_pb2 as google_dot_api_dot_visibility__pb2 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 from protoc_gen_openapiv2.options import annotations_pb2 as protoc__gen__openapiv2_dot_options_dot_annotations__pb2 from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%scalekit/v1/auditlogs/auditlogs.proto\x12\x15scalekit.v1.auditlogs\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\xb0\x03\n\x12ListAuthLogRequest\x12\x1b\n\tpage_size\x18\x01 \x01(\rR\x08pageSize\x12\x1d\n\npage_token\x18\x02 \x01(\tR\tpageToken\x12\x14\n\x05\x65mail\x18\x03 \x01(\tR\x05\x65mail\x12\x16\n\x06status\x18\x04 \x03(\tR\x06status\x12\x39\n\nstart_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartTime\x12\x35\n\x08\x65nd_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x65ndTime\x12\x1f\n\x0bresource_id\x18\x07 \x01(\tR\nresourceId\x12@\n\x1c\x63onnected_account_identifier\x18\x08 \x01(\tR\x1a\x63onnectedAccountIdentifier\x12[\n\tclient_id\x18\t \x01(\tB>\x92\x41;2\'Filter authentication logs by client IDJ\x10\"skc_1234567890\"R\x08\x63lientId\"\xcf\x01\n\x13ListAuthLogResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12&\n\x0fprev_page_token\x18\x02 \x01(\tR\rprevPageToken\x12\x1d\n\ntotal_size\x18\x03 \x01(\rR\ttotalSize\x12I\n\x0c\x61uthRequests\x18\x04 \x03(\x0b\x32%.scalekit.v1.auditlogs.AuthLogRequestR\x0c\x61uthRequests\"\xc5\x07\n\x0e\x41uthLogRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12%\n\x0e\x65nvironment_id\x18\x02 \x01(\tR\renvironmentId\x12#\n\rconnection_id\x18\x03 \x01(\tR\x0c\x63onnectionId\x12&\n\x0f\x61uth_request_id\x18\x04 \x01(\tR\rauthRequestId\x12\x14\n\x05\x65mail\x18\x05 \x01(\tR\x05\x65mail\x12\'\n\x0f\x63onnection_type\x18\x06 \x01(\tR\x0e\x63onnectionType\x12/\n\x13\x63onnection_provider\x18\x07 \x01(\tR\x12\x63onnectionProvider\x12\x16\n\x06status\x18\x08 \x01(\tR\x06status\x12\x38\n\ttimestamp\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ttimestamp\x12W\n\x12\x63onnection_details\x18\n \x03(\x0b\x32(.scalekit.v1.auditlogs.ConnectionDetailsR\x11\x63onnectionDetails\x12\x1a\n\x08workflow\x18\x0b \x01(\tR\x08workflow\x12\x1f\n\x0bresource_id\x18\x0c \x01(\tR\nresourceId\x12#\n\rresource_name\x18\r \x01(\tR\x0cresourceName\x12#\n\rresource_type\x18\x0e \x01(\tR\x0cresourceType\x12@\n\x1c\x63onnected_account_identifier\x18\x0f \x01(\tR\x1a\x63onnectedAccountIdentifier\x12}\n\tclient_id\x18\x10 \x01(\tB`\x92\x41]2IUnique identifier of the client associated with this authentication eventJ\x10\"skc_1234567890\"R\x08\x63lientId\x12K\n\x0b\x63lient_name\x18\x11 \x01(\tB*\x92\x41\'2\x1a\x44isplay name of the clientJ\t\"Default\"R\nclientName\x12\x66\n\x0b\x63lient_type\x18\x12 \x01(\tBE\x92\x41\x42\x32\x39Type of the client application (e.g., WEB, NTV, SPA, M2M)J\x05\"WEB\"R\nclientType\"\xbb\x01\n\x11\x43onnectionDetails\x12#\n\rconnection_id\x18\x01 \x01(\tR\x0c\x63onnectionId\x12\'\n\x0forganization_id\x18\x02 \x01(\tR\x0eorganizationId\x12\'\n\x0f\x63onnection_type\x18\x03 \x01(\tR\x0e\x63onnectionType\x12/\n\x13\x63onnection_provider\x18\x04 \x01(\tR\x12\x63onnectionProvider2\xb2\x01\n\x10\x41uditLogsService\x12\x9d\x01\n\x10ListAuthRequests\x12).scalekit.v1.auditlogs.ListAuthLogRequest\x1a*.scalekit.v1.auditlogs.ListAuthLogResponse\"2\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02&\x12$/api/v1/logs/authentication/requestsB5Z3github.com/scalekit-inc/scalekit/pkg/grpc/auditlogsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%scalekit/v1/auditlogs/auditlogs.proto\x12\x15scalekit.v1.auditlogs\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\xb0\x03\n\x12ListAuthLogRequest\x12\x1b\n\tpage_size\x18\x01 \x01(\rR\x08pageSize\x12\x1d\n\npage_token\x18\x02 \x01(\tR\tpageToken\x12\x14\n\x05\x65mail\x18\x03 \x01(\tR\x05\x65mail\x12\x16\n\x06status\x18\x04 \x03(\tR\x06status\x12\x39\n\nstart_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartTime\x12\x35\n\x08\x65nd_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x65ndTime\x12\x1f\n\x0bresource_id\x18\x07 \x01(\tR\nresourceId\x12@\n\x1c\x63onnected_account_identifier\x18\x08 \x01(\tR\x1a\x63onnectedAccountIdentifier\x12[\n\tclient_id\x18\t \x01(\tB>\x92\x41;2\'Filter authentication logs by client IDJ\x10\"skc_1234567890\"R\x08\x63lientId\"\xcf\x01\n\x13ListAuthLogResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12&\n\x0fprev_page_token\x18\x02 \x01(\tR\rprevPageToken\x12\x1d\n\ntotal_size\x18\x03 \x01(\rR\ttotalSize\x12I\n\x0c\x61uthRequests\x18\x04 \x03(\x0b\x32%.scalekit.v1.auditlogs.AuthLogRequestR\x0c\x61uthRequests\"\xc5\x07\n\x0e\x41uthLogRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12%\n\x0e\x65nvironment_id\x18\x02 \x01(\tR\renvironmentId\x12#\n\rconnection_id\x18\x03 \x01(\tR\x0c\x63onnectionId\x12&\n\x0f\x61uth_request_id\x18\x04 \x01(\tR\rauthRequestId\x12\x14\n\x05\x65mail\x18\x05 \x01(\tR\x05\x65mail\x12\'\n\x0f\x63onnection_type\x18\x06 \x01(\tR\x0e\x63onnectionType\x12/\n\x13\x63onnection_provider\x18\x07 \x01(\tR\x12\x63onnectionProvider\x12\x16\n\x06status\x18\x08 \x01(\tR\x06status\x12\x38\n\ttimestamp\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ttimestamp\x12W\n\x12\x63onnection_details\x18\n \x03(\x0b\x32(.scalekit.v1.auditlogs.ConnectionDetailsR\x11\x63onnectionDetails\x12\x1a\n\x08workflow\x18\x0b \x01(\tR\x08workflow\x12\x1f\n\x0bresource_id\x18\x0c \x01(\tR\nresourceId\x12#\n\rresource_name\x18\r \x01(\tR\x0cresourceName\x12#\n\rresource_type\x18\x0e \x01(\tR\x0cresourceType\x12@\n\x1c\x63onnected_account_identifier\x18\x0f \x01(\tR\x1a\x63onnectedAccountIdentifier\x12}\n\tclient_id\x18\x10 \x01(\tB`\x92\x41]2IUnique identifier of the client associated with this authentication eventJ\x10\"skc_1234567890\"R\x08\x63lientId\x12K\n\x0b\x63lient_name\x18\x11 \x01(\tB*\x92\x41\'2\x1a\x44isplay name of the clientJ\t\"Default\"R\nclientName\x12\x66\n\x0b\x63lient_type\x18\x12 \x01(\tBE\x92\x41\x42\x32\x39Type of the client application (e.g., ENV, NTV, SPA, M2M)J\x05\"ENV\"R\nclientType\"\xbb\x01\n\x11\x43onnectionDetails\x12#\n\rconnection_id\x18\x01 \x01(\tR\x0c\x63onnectionId\x12\'\n\x0forganization_id\x18\x02 \x01(\tR\x0eorganizationId\x12\'\n\x0f\x63onnection_type\x18\x03 \x01(\tR\x0e\x63onnectionType\x12/\n\x13\x63onnection_provider\x18\x04 \x01(\tR\x12\x63onnectionProvider2\xc1\x01\n\x10\x41uditLogsService\x12\xac\x01\n\x10ListAuthRequests\x12).scalekit.v1.auditlogs.ListAuthLogRequest\x1a*.scalekit.v1.auditlogs.ListAuthLogResponse\"A\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02&\x12$/api/v1/logs/authentication/requestsB5Z3github.com/scalekit-inc/scalekit/pkg/grpc/auditlogsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -34,17 +35,17 @@ _globals['_AUTHLOGREQUEST'].fields_by_name['client_name']._loaded_options = None _globals['_AUTHLOGREQUEST'].fields_by_name['client_name']._serialized_options = b'\222A\'2\032Display name of the clientJ\t\"Default\"' _globals['_AUTHLOGREQUEST'].fields_by_name['client_type']._loaded_options = None - _globals['_AUTHLOGREQUEST'].fields_by_name['client_type']._serialized_options = b'\222AB29Type of the client application (e.g., WEB, NTV, SPA, M2M)J\005\"WEB\"' + _globals['_AUTHLOGREQUEST'].fields_by_name['client_type']._serialized_options = b'\222AB29Type of the client application (e.g., ENV, NTV, SPA, M2M)J\005\"ENV\"' _globals['_AUDITLOGSSERVICE'].methods_by_name['ListAuthRequests']._loaded_options = None - _globals['_AUDITLOGSSERVICE'].methods_by_name['ListAuthRequests']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002&\022$/api/v1/logs/authentication/requests' - _globals['_LISTAUTHLOGREQUEST']._serialized_start=240 - _globals['_LISTAUTHLOGREQUEST']._serialized_end=672 - _globals['_LISTAUTHLOGRESPONSE']._serialized_start=675 - _globals['_LISTAUTHLOGRESPONSE']._serialized_end=882 - _globals['_AUTHLOGREQUEST']._serialized_start=885 - _globals['_AUTHLOGREQUEST']._serialized_end=1850 - _globals['_CONNECTIONDETAILS']._serialized_start=1853 - _globals['_CONNECTIONDETAILS']._serialized_end=2040 - _globals['_AUDITLOGSSERVICE']._serialized_start=2043 - _globals['_AUDITLOGSSERVICE']._serialized_end=2221 + _globals['_AUDITLOGSSERVICE'].methods_by_name['ListAuthRequests']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002&\022$/api/v1/logs/authentication/requests' + _globals['_LISTAUTHLOGREQUEST']._serialized_start=269 + _globals['_LISTAUTHLOGREQUEST']._serialized_end=701 + _globals['_LISTAUTHLOGRESPONSE']._serialized_start=704 + _globals['_LISTAUTHLOGRESPONSE']._serialized_end=911 + _globals['_AUTHLOGREQUEST']._serialized_start=914 + _globals['_AUTHLOGREQUEST']._serialized_end=1879 + _globals['_CONNECTIONDETAILS']._serialized_start=1882 + _globals['_CONNECTIONDETAILS']._serialized_end=2069 + _globals['_AUDITLOGSSERVICE']._serialized_start=2072 + _globals['_AUDITLOGSSERVICE']._serialized_end=2265 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/auditlogs/auditlogs_pb2.pyi b/scalekit/v1/auditlogs/auditlogs_pb2.pyi index ad034a0..184d0ed 100644 --- a/scalekit/v1/auditlogs/auditlogs_pb2.pyi +++ b/scalekit/v1/auditlogs/auditlogs_pb2.pyi @@ -1,5 +1,6 @@ from buf.validate import validate_pb2 as _validate_pb2 from google.api import annotations_pb2 as _annotations_pb2 +from google.api import visibility_pb2 as _visibility_pb2 from google.protobuf import timestamp_pb2 as _timestamp_pb2 from protoc_gen_openapiv2.options import annotations_pb2 as _annotations_pb2_1 from scalekit.v1.options import options_pb2 as _options_pb2 diff --git a/scalekit/v1/auth/auth_pb2.py b/scalekit/v1/auth/auth_pb2.py index 17fef01..f7dfa04 100644 --- a/scalekit/v1/auth/auth_pb2.py +++ b/scalekit/v1/auth/auth_pb2.py @@ -25,7 +25,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bscalekit/v1/auth/auth.proto\x12\x10scalekit.v1.auth\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a)scalekit/v1/connections/connections.proto\x1a!scalekit/v1/options/options.proto\"0\n\x16ListAuthMethodsRequest\x12\x16\n\x06intent\x18\x01 \x01(\tR\x06intent\"Z\n\x17ListAuthMethodsResponse\x12?\n\x0c\x61uth_methods\x18\x01 \x03(\x0b\x32\x1c.scalekit.v1.auth.AuthMethodR\x0b\x61uthMethods\"\x89\t\n\nAuthMethod\x12}\n\rconnection_id\x18\x01 \x01(\tBX\x92\x41L22Unique identifier for the connection to be toggledJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\x12P\n\x0f\x63onnection_type\x18\x02 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeR\x0e\x63onnectionType\x12\x1a\n\x08provider\x18\x03 \x01(\tR\x08provider\x12\x93\x01\n\x13\x61uth_initiation_uri\x18\x04 \x01(\tBc\x92\x41V2\x1eURI to initiate the connectionJ4\"https://sso.acmecorp.com/sso/v1/oidc/conn_123/init\"\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x11\x61uthInitiationUri\x12z\n\x11passwordless_type\x18\x05 \x01(\x0e\x32).scalekit.v1.connections.PasswordlessTypeB\x1d\x92\x41\x1a\x32\x11Passwordless typeJ\x05\"OTP\"H\x00R\x10passwordlessType\x88\x01\x01\x12W\n\x15\x63ode_challenge_length\x18\x06 \x01(\rB\x1e\x92\x41\x1b\x32\x16Length of the OTP codeJ\x01\x36H\x01R\x13\x63odeChallengeLength\x88\x01\x01\x12\xa3\x01\n!enable_webauthn_auto_registration\x18\x07 \x01(\x08\x42S\x92\x41P2GIndicates if WebAuthn auto-registration is enabled for this auth method:\x05\x66\x61lseH\x02R\x1e\x65nableWebauthnAutoRegistration\x88\x01\x01\x12\x63\n\x13show_passkey_button\x18\x08 \x01(\x08\x42.\x92\x41+2#Show passkey button on login screen:\x04trueH\x03R\x11showPasskeyButton\x88\x01\x01\x12\x83\x01\n!enable_webauthn_conditional_login\x18\t \x01(\x08\x42\x33\x92\x41\x30\x32(Allow autofill of passkeys in login page:\x04trueH\x04R\x1e\x65nableWebauthnConditionalLogin\x88\x01\x01\x42\x14\n\x12_passwordless_typeB\x18\n\x16_code_challenge_lengthB$\n\"_enable_webauthn_auto_registrationB\x16\n\x14_show_passkey_buttonB$\n\"_enable_webauthn_conditional_login\"m\n\x1a\x44iscoveryAuthMethodRequest\x12O\n\x11\x64iscovery_request\x18\x02 \x01(\x0b\x32\".scalekit.v1.auth.DiscoveryRequestR\x10\x64iscoveryRequest\"\xb3\x01\n\x10\x44iscoveryRequest\x12\x63\n\x05\x65mail\x18\x01 \x01(\tBM\x92\x41\x41\x32*user identifier like email or phone numberJ\x13\"john@acmecorp.com\"\xbaH\x06r\x04\x10\x03\x18\x64R\x05\x65mail\x12:\n\x06intent\x18\x02 \x01(\x0e\x32\x18.scalekit.v1.auth.IntentB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x06intent\"\\\n\x1b\x44iscoveryAuthMethodResponse\x12=\n\x0b\x61uth_method\x18\x01 \x01(\x0b\x32\x1c.scalekit.v1.auth.AuthMethodR\nauthMethod\"\x1e\n\x1cGetAuthCustomizationsRequest\"\xab\x01\n\x0ePortalSettings\x12\x98\x01\n\x0f\x63ustom_branding\x18\x01 \x01(\x08\x42o\x92\x41l2dIndicates whether custom portal branding is enabled for this workspace based on billing subscriptionJ\x04trueR\x0e\x63ustomBranding\"\xb2\x01\n\x1dGetAuthCustomizationsResponse\x12N\n\x16\x63ustomization_settings\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\x15\x63ustomizationSettings\x12\x41\n\x08settings\x18\x03 \x01(\x0b\x32 .scalekit.v1.auth.PortalSettingsB\x03\xe0\x41\x03R\x08settings\"N\n\x17GetAuthFeaturesResponse\x12\x33\n\x08\x66\x65\x61tures\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x08\x66\x65\x61tures\"U\n\x1cVerifyPasswordLessOtpRequest\x12\x35\n\x07otp_req\x18\x02 \x01(\x0b\x32\x1c.scalekit.v1.auth.OTPRequestR\x06otpReq\"\x1f\n\x1dVerifyPasswordLessOtpResponse\"i\n\nOTPRequest\x12[\n\x0e\x63ode_challenge\x18\x01 \x01(\tB4\x92\x41(2\x1cOTP sent to the user\'s emailJ\x08\"123456\"\xbaH\x06r\x04\x10\x05\x18\x06R\rcodeChallenge\"\xd4\x01\n\x1dListUserOrganizationsResponse\x12\x44\n\rorganizations\x18\x01 \x03(\x0b\x32\x1e.scalekit.v1.auth.OrganizationR\rorganizations\x12\x31\n\x04user\x18\x02 \x01(\x0b\x32\x1d.scalekit.v1.auth.UserDetailsR\x04user\x12:\n\x06intent\x18\x03 \x01(\x0e\x32\x18.scalekit.v1.auth.IntentB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x06intent\"\x8b\x04\n\x0cOrganization\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12+\n\x11membership_status\x18\x03 \x01(\tR\x10membershipStatus\x12=\n\x18invitation_inviter_email\x18\x04 \x01(\tH\x00R\x16invitationInviterEmail\x88\x01\x01\x12U\n\x16invitation_accepted_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\x14invitationAcceptedAt\x88\x01\x01\x12S\n\x15invitation_created_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02R\x13invitationCreatedAt\x88\x01\x01\x12S\n\x15invitation_expires_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x03R\x13invitationExpiresAt\x88\x01\x01\x42\x1b\n\x19_invitation_inviter_emailB\x19\n\x17_invitation_accepted_atB\x18\n\x16_invitation_created_atB\x18\n\x16_invitation_expires_at\"_\n\x0bUserDetails\x12\x14\n\x05\x65mail\x18\x01 \x01(\tR\x05\x65mail\x12\x1d\n\nfirst_name\x18\x02 \x01(\tR\tfirstName\x12\x1b\n\tlast_name\x18\x03 \x01(\tR\x08lastName\"\xc4\x01\n\x19SignupOrganizationRequest\x12+\n\x11organization_name\x18\x01 \x01(\tR\x10organizationName\x12\x1d\n\nfirst_name\x18\x02 \x01(\tR\tfirstName\x12\x1b\n\tlast_name\x18\x03 \x01(\tR\x08lastName\x12\x1b\n\tfull_name\x18\x04 \x01(\tR\x08\x66ullName\x12!\n\x0cphone_number\x18\x05 \x01(\tR\x0bphoneNumber\"r\n\x1aSignupOrganizationResponse\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12+\n\x11organization_name\x18\x02 \x01(\tR\x10organizationName\"\xd6\x02\n\x1dUpdateLoginUserDetailsRequest\x12v\n\rconnection_id\x18\x01 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\x12\x90\x01\n\x10login_request_id\x18\x02 \x01(\tBf\x92\x41]2BLogin Request ID that was shared as part of authorization initiateJ\x17\"lri_73415099636808061\"\xbaH\x03\xc8\x01\x01R\x0eloginRequestId\x12*\n\x04user\x18\x03 \x01(\x0b\x32\x16.scalekit.v1.auth.UserR\x04user\"\xe1\r\n\x04User\x12\x83\x01\n\x03sub\x18\x01 \x01(\tBq\x92\x41g2WSubject identifier for the user (typically a unique user ID from the identity provider)J\x0c\"1234567890\"\xbaH\x04r\x02\x10\x01R\x03sub\x12R\n\x05\x65mail\x18\x02 \x01(\tB<\x92\x41\x32\x32\x1cUser\'s primary email addressJ\x12\"user@example.com\"\xbaH\x04r\x02\x10\x01R\x05\x65mail\x12=\n\ngiven_name\x18\x03 \x01(\tB\x1e\x92\x41\x1b\x32\x11User\'s first nameJ\x06\"John\"R\tgivenName\x12=\n\x0b\x66\x61mily_name\x18\x04 \x01(\tB\x1c\x92\x41\x19\x32\x10User\'s last nameJ\x05\"Doe\"R\nfamilyName\x12\x88\x01\n\x0e\x65mail_verified\x18\x05 \x01(\x08\x42\x61\x92\x41^2VIndicates whether the user\'s email address has been verified by the identity provider.J\x04trueR\remailVerified\x12\x63\n\x0cphone_number\x18\x06 \x01(\tB@\x92\x41=2,User\'s primary phone number in E.164 format.J\r\"+1234567890\"R\x0bphoneNumber\x12\x95\x01\n\x15phone_number_verified\x18\x07 \x01(\x08\x42\x61\x92\x41^2UIndicates whether the user\'s phone number has been verified by the identity provider.J\x05\x66\x61lseR\x13phoneNumberVerified\x12\x42\n\x04name\x18\x08 \x01(\tB.\x92\x41+2\x1d\x46ull display name of the userJ\n\"John Doe\"R\x04name\x12\x62\n\x12preferred_username\x18\t \x01(\tB3\x92\x41\x30\x32#User\'s preferred username or handleJ\t\"johndoe\"R\x11preferredUsername\x12\x62\n\x07picture\x18\n \x01(\tBH\x92\x41\x45\x32!URL to the user\'s profile pictureJ \"https://example.com/avatar.jpg\"R\x07picture\x12X\n\x06gender\x18\x0b \x01(\tB@\x92\x41=23User\'s gender as reported by the identity provider.J\x06\"male\"R\x06gender\x12\x65\n\x06locale\x18\x0c \x01(\tBM\x92\x41J2?User\'s locale or language preference (IETF BCP 47 language tag)J\x07\"en-US\"R\x06locale\x12\x66\n\x06groups\x18\r \x03(\tBN\x92\x41K2/List of group names or IDs the user belongs to.J\x18[\"admins\", \"developers\"]R\x06groups\x12\xf2\x01\n\x11\x63ustom_attributes\x18\x0e \x01(\x0b\x32\x17.google.protobuf.StructB\xab\x01\x92\x41\xa7\x01\x32mCustom attributes for the user, represented as a key-value map. Used for additional identity provider claims.J6{\"department\": \"Engineering\", \"employee_id\": \"E12345\"}R\x10\x63ustomAttributes\x12\xb1\x01\n\x18organization_external_id\x18\x0f \x01(\tBr\x92\x41o2EIdentifier for the user\xe2\x80\x99s organization within the identity providerJ&\"132d085d-d89d-4a2e-95bb-49bde680d14f\"H\x00R\x16organizationExternalId\x88\x01\x01\x42\x1b\n\x19_organization_external_id\"\x85\x01\n\x14GetAuthStateResponse\x12:\n\nauth_state\x18\x01 \x01(\x0e\x32\x1b.scalekit.v1.auth.AuthStateR\tauthState\x12\x31\n\x04user\x18\x02 \x01(\x0b\x32\x1d.scalekit.v1.auth.UserDetailsR\x04user\"\x8c\x01\n\x13GetAuthErrorRequest\x12u\n\x08\x65rror_id\x18\x01 \x01(\tBZ\x92\x41H2.Unique identifier for the authentication errorJ\x16\"err_1234567890abcdef\"\xbaH\x0cr\n\x10\x01\x18@:\x04\x65rr_R\x07\x65rrorId\"Y\n\x14GetAuthErrorResponse\x12\x14\n\x05\x65rror\x18\x01 \x01(\tR\x05\x65rror\x12+\n\x11\x65rror_description\x18\x02 \x01(\tR\x10\x65rrorDescription*:\n\x06Intent\x12\x16\n\x12INTENT_UNSPECIFIED\x10\x00\x12\x0b\n\x07sign_in\x10\x01\x12\x0b\n\x07sign_up\x10\x02*\xb4\x04\n\tAuthState\x12\x1a\n\x16\x41UTH_STATE_UNSPECIFIED\x10\x00\x12\x1e\n\x1a\x41UTHENTICATION_IN_PROGRESS\x10\x01\x12\x19\n\x15ORGANIZATION_SWITCHER\x10\x02\x12\x19\n\x15ORGANIZATION_SELECTED\x10\x03\x12\x17\n\x13ORGANIZATION_SIGNUP\x10\x04\x12 \n\x1cORGANIZATION_SWITCHER_SIGNUP\x10\x05\x12\x1c\n\x18OTP_VERIFICATION_PENDING\x10\x06\x12\x13\n\x0fMAGIC_LINK_SENT\x10\x07\x12&\n\"LINK_SENT_OTP_VERIFICATION_PENDING\x10\x08\x12\x10\n\x0cOTP_VERIFIED\x10\t\x12\x11\n\rLINK_VERIFIED\x10\n\x12\x15\n\x11SSO_AUTHENTICATED\x10\x0b\x12\x14\n\x10ORG_USER_CREATED\x10\x0c\x12\x1c\n\x18\x41UTHENTICATION_COMPLETED\x10\r\x12\x19\n\x15\x41UTHENTICATION_FAILED\x10\x0e\x12\x15\n\x11WEBAUTHN_VERIFIED\x10\x0f\x12 \n\x1cVERIFICATION_MAGIC_LINK_SENT\x10\x10\x12$\n VERIFICATION_MAGIC_LINK_OTP_SENT\x10\x11\x12\x19\n\x15VERIFICATION_OTP_SENT\x10\x12\x12\x1a\n\x16VERIFICATION_COMPLETED\x10\x13\x32\xa7\x10\n\x0b\x41uthService\x12\x98\x01\n\x0fListAuthMethods\x12(.scalekit.v1.auth.ListAuthMethodsRequest\x1a).scalekit.v1.auth.ListAuthMethodsResponse\"0\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\x12\x13/api/v1/authmethods\x12\xba\x01\n\x13\x44iscoveryAuthMethod\x12,.scalekit.v1.auth.DiscoveryAuthMethodRequest\x1a-.scalekit.v1.auth.DiscoveryAuthMethodResponse\"F\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02+\"\x16/api/v1/auth:discovery:\x11\x64iscovery_request\x12\xc0\x01\n\x15VerifyPasswordLessOtp\x12..scalekit.v1.auth.VerifyPasswordLessOtpRequest\x1a/.scalekit.v1.auth.VerifyPasswordLessOtpResponse\"F\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02+\" /api/v1/auth/passwordless:verify:\x07otp_req\x12\x83\x01\n\x12ResendPasswordless\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"=\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\"\" /api/v1/auth/passwordless:resend\x12\x99\x01\n\x15ListUserOrganizations\x12\x16.google.protobuf.Empty\x1a/.scalekit.v1.auth.ListUserOrganizationsResponse\"7\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/auth:organizations\x12\xa4\x01\n\x12SignupOrganization\x12+.scalekit.v1.auth.SignupOrganizationRequest\x1a,.scalekit.v1.auth.SignupOrganizationResponse\"3\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x18\"\x13/api/v1/auth:signup:\x01*\x12\x7f\n\x0cGetAuthState\x12\x16.google.protobuf.Empty\x1a&.scalekit.v1.auth.GetAuthStateResponse\"/\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x14\x12\x12/api/v1/auth/state\x12\xb6\x01\n\x0cGetAuthError\x12%.scalekit.v1.auth.GetAuthErrorRequest\x1a&.scalekit.v1.auth.GetAuthErrorResponse\"W\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02<\x12\x19/api/v1/errors/{error_id}Z\x1f\x12\x1d/api/v1/auth/error/{error_id}\x12j\n\x06Logout\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"0\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\"\x13/api/v1/auth/logout\x12\xb2\x01\n\x15GetAuthCustomizations\x12..scalekit.v1.auth.GetAuthCustomizationsRequest\x1a/.scalekit.v1.auth.GetAuthCustomizationsResponse\"8\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1d\x12\x1b/api/v1/auth:customizations\x12\x88\x01\n\x0fGetAuthFeatures\x12\x16.google.protobuf.Empty\x1a).scalekit.v1.auth.GetAuthFeaturesResponse\"2\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x17\x12\x15/api/v1/auth:features\x12\xcd\x02\n\x16UpdateLoginUserDetails\x12/.scalekit.v1.auth.UpdateLoginUserDetailsRequest\x1a\x16.google.protobuf.Empty\"\xe9\x01\x92\x41z\n\x0b\x43onnections\x12%Update User Details for login request\x1a%Update User Details for login requestJ\x1d\n\x03\x32\x30\x30\x12\x16\n\x14\x44\x65leted Successfully\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02Q\"I/api/v1/connections/{connection_id}/auth-requests/{login_request_id}/user:\x04userB0Z.github.com/scalekit-inc/scalekit/pkg/grpc/authb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bscalekit/v1/auth/auth.proto\x12\x10scalekit.v1.auth\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a)scalekit/v1/connections/connections.proto\x1a!scalekit/v1/options/options.proto\"0\n\x16ListAuthMethodsRequest\x12\x16\n\x06intent\x18\x01 \x01(\tR\x06intent\"Z\n\x17ListAuthMethodsResponse\x12?\n\x0c\x61uth_methods\x18\x01 \x03(\x0b\x32\x1c.scalekit.v1.auth.AuthMethodR\x0b\x61uthMethods\"\x89\t\n\nAuthMethod\x12}\n\rconnection_id\x18\x01 \x01(\tBX\x92\x41L22Unique identifier for the connection to be toggledJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\x12P\n\x0f\x63onnection_type\x18\x02 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeR\x0e\x63onnectionType\x12\x1a\n\x08provider\x18\x03 \x01(\tR\x08provider\x12\x93\x01\n\x13\x61uth_initiation_uri\x18\x04 \x01(\tBc\x92\x41V2\x1eURI to initiate the connectionJ4\"https://sso.acmecorp.com/sso/v1/oidc/conn_123/init\"\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x11\x61uthInitiationUri\x12z\n\x11passwordless_type\x18\x05 \x01(\x0e\x32).scalekit.v1.connections.PasswordlessTypeB\x1d\x92\x41\x1a\x32\x11Passwordless typeJ\x05\"OTP\"H\x00R\x10passwordlessType\x88\x01\x01\x12W\n\x15\x63ode_challenge_length\x18\x06 \x01(\rB\x1e\x92\x41\x1b\x32\x16Length of the OTP codeJ\x01\x36H\x01R\x13\x63odeChallengeLength\x88\x01\x01\x12\xa3\x01\n!enable_webauthn_auto_registration\x18\x07 \x01(\x08\x42S\x92\x41P2GIndicates if WebAuthn auto-registration is enabled for this auth method:\x05\x66\x61lseH\x02R\x1e\x65nableWebauthnAutoRegistration\x88\x01\x01\x12\x63\n\x13show_passkey_button\x18\x08 \x01(\x08\x42.\x92\x41+2#Show passkey button on login screen:\x04trueH\x03R\x11showPasskeyButton\x88\x01\x01\x12\x83\x01\n!enable_webauthn_conditional_login\x18\t \x01(\x08\x42\x33\x92\x41\x30\x32(Allow autofill of passkeys in login page:\x04trueH\x04R\x1e\x65nableWebauthnConditionalLogin\x88\x01\x01\x42\x14\n\x12_passwordless_typeB\x18\n\x16_code_challenge_lengthB$\n\"_enable_webauthn_auto_registrationB\x16\n\x14_show_passkey_buttonB$\n\"_enable_webauthn_conditional_login\"m\n\x1a\x44iscoveryAuthMethodRequest\x12O\n\x11\x64iscovery_request\x18\x02 \x01(\x0b\x32\".scalekit.v1.auth.DiscoveryRequestR\x10\x64iscoveryRequest\"\xb3\x01\n\x10\x44iscoveryRequest\x12\x63\n\x05\x65mail\x18\x01 \x01(\tBM\x92\x41\x41\x32*user identifier like email or phone numberJ\x13\"john@acmecorp.com\"\xbaH\x06r\x04\x10\x03\x18\x64R\x05\x65mail\x12:\n\x06intent\x18\x02 \x01(\x0e\x32\x18.scalekit.v1.auth.IntentB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x06intent\"\\\n\x1b\x44iscoveryAuthMethodResponse\x12=\n\x0b\x61uth_method\x18\x01 \x01(\x0b\x32\x1c.scalekit.v1.auth.AuthMethodR\nauthMethod\"\x1e\n\x1cGetAuthCustomizationsRequest\"\x8f\x03\n\x0ePortalSettings\x12\x98\x01\n\x0f\x63ustom_branding\x18\x01 \x01(\x08\x42o\x92\x41l2dIndicates whether custom portal branding is enabled for this workspace based on billing subscriptionJ\x04trueR\x0e\x63ustomBranding\x12\xc5\x01\n\x17new_self_serve_sso_scim\x18\x02 \x01(\x08\x42\x89\x01\x92\x41\x85\x01\x32|Indicates whether the new self-serve SSO/SCIM flow should be shown in the hosted pages (rollout-driven, not billing-derived)J\x05\x66\x61lseH\x00R\x13newSelfServeSsoScim\x88\x01\x01\x42\x1a\n\x18_new_self_serve_sso_scim\"\xb2\x01\n\x1dGetAuthCustomizationsResponse\x12N\n\x16\x63ustomization_settings\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\x15\x63ustomizationSettings\x12\x41\n\x08settings\x18\x03 \x01(\x0b\x32 .scalekit.v1.auth.PortalSettingsB\x03\xe0\x41\x03R\x08settings\"N\n\x17GetAuthFeaturesResponse\x12\x33\n\x08\x66\x65\x61tures\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x08\x66\x65\x61tures\"U\n\x1cVerifyPasswordLessOtpRequest\x12\x35\n\x07otp_req\x18\x02 \x01(\x0b\x32\x1c.scalekit.v1.auth.OTPRequestR\x06otpReq\"\x1f\n\x1dVerifyPasswordLessOtpResponse\"i\n\nOTPRequest\x12[\n\x0e\x63ode_challenge\x18\x01 \x01(\tB4\x92\x41(2\x1cOTP sent to the user\'s emailJ\x08\"123456\"\xbaH\x06r\x04\x10\x05\x18\x06R\rcodeChallenge\"\xd4\x01\n\x1dListUserOrganizationsResponse\x12\x44\n\rorganizations\x18\x01 \x03(\x0b\x32\x1e.scalekit.v1.auth.OrganizationR\rorganizations\x12\x31\n\x04user\x18\x02 \x01(\x0b\x32\x1d.scalekit.v1.auth.UserDetailsR\x04user\x12:\n\x06intent\x18\x03 \x01(\x0e\x32\x18.scalekit.v1.auth.IntentB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x06intent\"\x8b\x04\n\x0cOrganization\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12+\n\x11membership_status\x18\x03 \x01(\tR\x10membershipStatus\x12=\n\x18invitation_inviter_email\x18\x04 \x01(\tH\x00R\x16invitationInviterEmail\x88\x01\x01\x12U\n\x16invitation_accepted_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\x14invitationAcceptedAt\x88\x01\x01\x12S\n\x15invitation_created_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02R\x13invitationCreatedAt\x88\x01\x01\x12S\n\x15invitation_expires_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x03R\x13invitationExpiresAt\x88\x01\x01\x42\x1b\n\x19_invitation_inviter_emailB\x19\n\x17_invitation_accepted_atB\x18\n\x16_invitation_created_atB\x18\n\x16_invitation_expires_at\"_\n\x0bUserDetails\x12\x14\n\x05\x65mail\x18\x01 \x01(\tR\x05\x65mail\x12\x1d\n\nfirst_name\x18\x02 \x01(\tR\tfirstName\x12\x1b\n\tlast_name\x18\x03 \x01(\tR\x08lastName\"\xc4\x01\n\x19SignupOrganizationRequest\x12+\n\x11organization_name\x18\x01 \x01(\tR\x10organizationName\x12\x1d\n\nfirst_name\x18\x02 \x01(\tR\tfirstName\x12\x1b\n\tlast_name\x18\x03 \x01(\tR\x08lastName\x12\x1b\n\tfull_name\x18\x04 \x01(\tR\x08\x66ullName\x12!\n\x0cphone_number\x18\x05 \x01(\tR\x0bphoneNumber\"r\n\x1aSignupOrganizationResponse\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12+\n\x11organization_name\x18\x02 \x01(\tR\x10organizationName\"\xd6\x02\n\x1dUpdateLoginUserDetailsRequest\x12v\n\rconnection_id\x18\x01 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\x12\x90\x01\n\x10login_request_id\x18\x02 \x01(\tBf\x92\x41]2BLogin Request ID that was shared as part of authorization initiateJ\x17\"lri_73415099636808061\"\xbaH\x03\xc8\x01\x01R\x0eloginRequestId\x12*\n\x04user\x18\x03 \x01(\x0b\x32\x16.scalekit.v1.auth.UserR\x04user\"\x95\x10\n\x04User\x12\x83\x01\n\x03sub\x18\x01 \x01(\tBq\x92\x41g2WSubject identifier for the user (typically a unique user ID from the identity provider)J\x0c\"1234567890\"\xbaH\x04r\x02\x10\x01R\x03sub\x12R\n\x05\x65mail\x18\x02 \x01(\tB<\x92\x41\x32\x32\x1cUser\'s primary email addressJ\x12\"user@example.com\"\xbaH\x04r\x02\x10\x01R\x05\x65mail\x12=\n\ngiven_name\x18\x03 \x01(\tB\x1e\x92\x41\x1b\x32\x11User\'s first nameJ\x06\"John\"R\tgivenName\x12=\n\x0b\x66\x61mily_name\x18\x04 \x01(\tB\x1c\x92\x41\x19\x32\x10User\'s last nameJ\x05\"Doe\"R\nfamilyName\x12\x88\x01\n\x0e\x65mail_verified\x18\x05 \x01(\x08\x42\x61\x92\x41^2VIndicates whether the user\'s email address has been verified by the identity provider.J\x04trueR\remailVerified\x12\x63\n\x0cphone_number\x18\x06 \x01(\tB@\x92\x41=2,User\'s primary phone number in E.164 format.J\r\"+1234567890\"R\x0bphoneNumber\x12\x95\x01\n\x15phone_number_verified\x18\x07 \x01(\x08\x42\x61\x92\x41^2UIndicates whether the user\'s phone number has been verified by the identity provider.J\x05\x66\x61lseR\x13phoneNumberVerified\x12\x42\n\x04name\x18\x08 \x01(\tB.\x92\x41+2\x1d\x46ull display name of the userJ\n\"John Doe\"R\x04name\x12\x62\n\x12preferred_username\x18\t \x01(\tB3\x92\x41\x30\x32#User\'s preferred username or handleJ\t\"johndoe\"R\x11preferredUsername\x12\x62\n\x07picture\x18\n \x01(\tBH\x92\x41\x45\x32!URL to the user\'s profile pictureJ \"https://example.com/avatar.jpg\"R\x07picture\x12X\n\x06gender\x18\x0b \x01(\tB@\x92\x41=23User\'s gender as reported by the identity provider.J\x06\"male\"R\x06gender\x12\x65\n\x06locale\x18\x0c \x01(\tBM\x92\x41J2?User\'s locale or language preference (IETF BCP 47 language tag)J\x07\"en-US\"R\x06locale\x12\x66\n\x06groups\x18\r \x03(\tBN\x92\x41K2/List of group names or IDs the user belongs to.J\x18[\"admins\", \"developers\"]R\x06groups\x12\xf2\x01\n\x11\x63ustom_attributes\x18\x0e \x01(\x0b\x32\x17.google.protobuf.StructB\xab\x01\x92\x41\xa7\x01\x32mCustom attributes for the user, represented as a key-value map. Used for additional identity provider claims.J6{\"department\": \"Engineering\", \"employee_id\": \"E12345\"}R\x10\x63ustomAttributes\x12\xb1\x01\n\x18organization_external_id\x18\x0f \x01(\tBr\x92\x41o2EIdentifier for the user\xe2\x80\x99s organization within the identity providerJ&\"132d085d-d89d-4a2e-95bb-49bde680d14f\"H\x00R\x16organizationExternalId\x88\x01\x01\x12S\n\x05roles\x18\x10 \x03(\tB=\x92\x41:2#List of roles assigned to the user.J\x13[\"admin\", \"editor\"]R\x05roles\x12\xbd\x01\n\x1aorganization_external_name\x18\x11 \x01(\tBz\x92\x41o2`Name of the organization the user is authenticating into. Used to display on the consent screen.J\x0b\"Acme Corp\"\xbaH\x05r\x03\x18\xc8\x01H\x01R\x18organizationExternalName\x88\x01\x01\x42\x1b\n\x19_organization_external_idB\x1d\n\x1b_organization_external_name\"\xb1\x02\n\x14GetAuthStateResponse\x12:\n\nauth_state\x18\x01 \x01(\x0e\x32\x1b.scalekit.v1.auth.AuthStateR\tauthState\x12\x31\n\x04user\x18\x02 \x01(\x0b\x32\x1d.scalekit.v1.auth.UserDetailsR\x04user\x12\xa9\x01\n\nlogin_hint\x18\x03 \x01(\tB\x89\x01\x92\x41\x85\x01\x32oLogin hint from the original authorize request. Typically an email address used to pre-fill the login UI input.J\x12\"user@example.com\"R\tloginHint\"\x8c\x01\n\x13GetAuthErrorRequest\x12u\n\x08\x65rror_id\x18\x01 \x01(\tBZ\x92\x41H2.Unique identifier for the authentication errorJ\x16\"err_1234567890abcdef\"\xbaH\x0cr\n\x10\x01\x18@:\x04\x65rr_R\x07\x65rrorId\"Y\n\x14GetAuthErrorResponse\x12\x14\n\x05\x65rror\x18\x01 \x01(\tR\x05\x65rror\x12+\n\x11\x65rror_description\x18\x02 \x01(\tR\x10\x65rrorDescription*:\n\x06Intent\x12\x16\n\x12INTENT_UNSPECIFIED\x10\x00\x12\x0b\n\x07sign_in\x10\x01\x12\x0b\n\x07sign_up\x10\x02*\xb4\x04\n\tAuthState\x12\x1a\n\x16\x41UTH_STATE_UNSPECIFIED\x10\x00\x12\x1e\n\x1a\x41UTHENTICATION_IN_PROGRESS\x10\x01\x12\x19\n\x15ORGANIZATION_SWITCHER\x10\x02\x12\x19\n\x15ORGANIZATION_SELECTED\x10\x03\x12\x17\n\x13ORGANIZATION_SIGNUP\x10\x04\x12 \n\x1cORGANIZATION_SWITCHER_SIGNUP\x10\x05\x12\x1c\n\x18OTP_VERIFICATION_PENDING\x10\x06\x12\x13\n\x0fMAGIC_LINK_SENT\x10\x07\x12&\n\"LINK_SENT_OTP_VERIFICATION_PENDING\x10\x08\x12\x10\n\x0cOTP_VERIFIED\x10\t\x12\x11\n\rLINK_VERIFIED\x10\n\x12\x15\n\x11SSO_AUTHENTICATED\x10\x0b\x12\x14\n\x10ORG_USER_CREATED\x10\x0c\x12\x1c\n\x18\x41UTHENTICATION_COMPLETED\x10\r\x12\x19\n\x15\x41UTHENTICATION_FAILED\x10\x0e\x12\x15\n\x11WEBAUTHN_VERIFIED\x10\x0f\x12 \n\x1cVERIFICATION_MAGIC_LINK_SENT\x10\x10\x12$\n VERIFICATION_MAGIC_LINK_OTP_SENT\x10\x11\x12\x19\n\x15VERIFICATION_OTP_SENT\x10\x12\x12\x1a\n\x16VERIFICATION_COMPLETED\x10\x13\x32\xa7\x10\n\x0b\x41uthService\x12\x98\x01\n\x0fListAuthMethods\x12(.scalekit.v1.auth.ListAuthMethodsRequest\x1a).scalekit.v1.auth.ListAuthMethodsResponse\"0\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\x12\x13/api/v1/authmethods\x12\xba\x01\n\x13\x44iscoveryAuthMethod\x12,.scalekit.v1.auth.DiscoveryAuthMethodRequest\x1a-.scalekit.v1.auth.DiscoveryAuthMethodResponse\"F\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02+\"\x16/api/v1/auth:discovery:\x11\x64iscovery_request\x12\xc0\x01\n\x15VerifyPasswordLessOtp\x12..scalekit.v1.auth.VerifyPasswordLessOtpRequest\x1a/.scalekit.v1.auth.VerifyPasswordLessOtpResponse\"F\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02+\" /api/v1/auth/passwordless:verify:\x07otp_req\x12\x83\x01\n\x12ResendPasswordless\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"=\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\"\" /api/v1/auth/passwordless:resend\x12\x99\x01\n\x15ListUserOrganizations\x12\x16.google.protobuf.Empty\x1a/.scalekit.v1.auth.ListUserOrganizationsResponse\"7\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/auth:organizations\x12\xa4\x01\n\x12SignupOrganization\x12+.scalekit.v1.auth.SignupOrganizationRequest\x1a,.scalekit.v1.auth.SignupOrganizationResponse\"3\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x18\"\x13/api/v1/auth:signup:\x01*\x12\x7f\n\x0cGetAuthState\x12\x16.google.protobuf.Empty\x1a&.scalekit.v1.auth.GetAuthStateResponse\"/\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x14\x12\x12/api/v1/auth/state\x12\xb6\x01\n\x0cGetAuthError\x12%.scalekit.v1.auth.GetAuthErrorRequest\x1a&.scalekit.v1.auth.GetAuthErrorResponse\"W\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02<\x12\x19/api/v1/errors/{error_id}Z\x1f\x12\x1d/api/v1/auth/error/{error_id}\x12j\n\x06Logout\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"0\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\"\x13/api/v1/auth/logout\x12\xb2\x01\n\x15GetAuthCustomizations\x12..scalekit.v1.auth.GetAuthCustomizationsRequest\x1a/.scalekit.v1.auth.GetAuthCustomizationsResponse\"8\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1d\x12\x1b/api/v1/auth:customizations\x12\x88\x01\n\x0fGetAuthFeatures\x12\x16.google.protobuf.Empty\x1a).scalekit.v1.auth.GetAuthFeaturesResponse\"2\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x17\x12\x15/api/v1/auth:features\x12\xcd\x02\n\x16UpdateLoginUserDetails\x12/.scalekit.v1.auth.UpdateLoginUserDetailsRequest\x1a\x16.google.protobuf.Empty\"\xe9\x01\x92\x41z\n\x0b\x43onnections\x12%Update User Details for login request\x1a%Update User Details for login requestJ\x1d\n\x03\x32\x30\x30\x12\x16\n\x14\x44\x65leted Successfully\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02Q\"I/api/v1/connections/{connection_id}/auth-requests/{login_request_id}/user:\x04userB0Z.github.com/scalekit-inc/scalekit/pkg/grpc/authb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -53,6 +53,8 @@ _globals['_DISCOVERYREQUEST'].fields_by_name['intent']._serialized_options = b'\272H\005\202\001\002\020\001' _globals['_PORTALSETTINGS'].fields_by_name['custom_branding']._loaded_options = None _globals['_PORTALSETTINGS'].fields_by_name['custom_branding']._serialized_options = b'\222Al2dIndicates whether custom portal branding is enabled for this workspace based on billing subscriptionJ\004true' + _globals['_PORTALSETTINGS'].fields_by_name['new_self_serve_sso_scim']._loaded_options = None + _globals['_PORTALSETTINGS'].fields_by_name['new_self_serve_sso_scim']._serialized_options = b'\222A\205\0012|Indicates whether the new self-serve SSO/SCIM flow should be shown in the hosted pages (rollout-driven, not billing-derived)J\005false' _globals['_GETAUTHCUSTOMIZATIONSRESPONSE'].fields_by_name['settings']._loaded_options = None _globals['_GETAUTHCUSTOMIZATIONSRESPONSE'].fields_by_name['settings']._serialized_options = b'\340A\003' _globals['_OTPREQUEST'].fields_by_name['code_challenge']._loaded_options = None @@ -93,6 +95,12 @@ _globals['_USER'].fields_by_name['custom_attributes']._serialized_options = b'\222A\247\0012mCustom attributes for the user, represented as a key-value map. Used for additional identity provider claims.J6{\"department\": \"Engineering\", \"employee_id\": \"E12345\"}' _globals['_USER'].fields_by_name['organization_external_id']._loaded_options = None _globals['_USER'].fields_by_name['organization_external_id']._serialized_options = b'\222Ao2EIdentifier for the user\342\200\231s organization within the identity providerJ&\"132d085d-d89d-4a2e-95bb-49bde680d14f\"' + _globals['_USER'].fields_by_name['roles']._loaded_options = None + _globals['_USER'].fields_by_name['roles']._serialized_options = b'\222A:2#List of roles assigned to the user.J\023[\"admin\", \"editor\"]' + _globals['_USER'].fields_by_name['organization_external_name']._loaded_options = None + _globals['_USER'].fields_by_name['organization_external_name']._serialized_options = b'\222Ao2`Name of the organization the user is authenticating into. Used to display on the consent screen.J\013\"Acme Corp\"\272H\005r\003\030\310\001' + _globals['_GETAUTHSTATERESPONSE'].fields_by_name['login_hint']._loaded_options = None + _globals['_GETAUTHSTATERESPONSE'].fields_by_name['login_hint']._serialized_options = b'\222A\205\0012oLogin hint from the original authorize request. Typically an email address used to pre-fill the login UI input.J\022\"user@example.com\"' _globals['_GETAUTHERRORREQUEST'].fields_by_name['error_id']._loaded_options = None _globals['_GETAUTHERRORREQUEST'].fields_by_name['error_id']._serialized_options = b'\222AH2.Unique identifier for the authentication errorJ\026\"err_1234567890abcdef\"\272H\014r\n\020\001\030@:\004err_' _globals['_AUTHSERVICE'].methods_by_name['ListAuthMethods']._loaded_options = None @@ -119,10 +127,10 @@ _globals['_AUTHSERVICE'].methods_by_name['GetAuthFeatures']._serialized_options = b'\202\265\030\002\030\001\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\027\022\025/api/v1/auth:features' _globals['_AUTHSERVICE'].methods_by_name['UpdateLoginUserDetails']._loaded_options = None _globals['_AUTHSERVICE'].methods_by_name['UpdateLoginUserDetails']._serialized_options = b'\222Az\n\013Connections\022%Update User Details for login request\032%Update User Details for login requestJ\035\n\003200\022\026\n\024Deleted Successfully\202\265\030\002\030\004\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002Q\"I/api/v1/connections/{connection_id}/auth-requests/{login_request_id}/user:\004user' - _globals['_INTENT']._serialized_start=6442 - _globals['_INTENT']._serialized_end=6500 - _globals['_AUTHSTATE']._serialized_start=6503 - _globals['_AUTHSTATE']._serialized_end=7067 + _globals['_INTENT']._serialized_start=7150 + _globals['_INTENT']._serialized_end=7208 + _globals['_AUTHSTATE']._serialized_start=7211 + _globals['_AUTHSTATE']._serialized_end=7775 _globals['_LISTAUTHMETHODSREQUEST']._serialized_start=423 _globals['_LISTAUTHMETHODSREQUEST']._serialized_end=471 _globals['_LISTAUTHMETHODSRESPONSE']._serialized_start=473 @@ -138,37 +146,37 @@ _globals['_GETAUTHCUSTOMIZATIONSREQUEST']._serialized_start=2116 _globals['_GETAUTHCUSTOMIZATIONSREQUEST']._serialized_end=2146 _globals['_PORTALSETTINGS']._serialized_start=2149 - _globals['_PORTALSETTINGS']._serialized_end=2320 - _globals['_GETAUTHCUSTOMIZATIONSRESPONSE']._serialized_start=2323 - _globals['_GETAUTHCUSTOMIZATIONSRESPONSE']._serialized_end=2501 - _globals['_GETAUTHFEATURESRESPONSE']._serialized_start=2503 - _globals['_GETAUTHFEATURESRESPONSE']._serialized_end=2581 - _globals['_VERIFYPASSWORDLESSOTPREQUEST']._serialized_start=2583 - _globals['_VERIFYPASSWORDLESSOTPREQUEST']._serialized_end=2668 - _globals['_VERIFYPASSWORDLESSOTPRESPONSE']._serialized_start=2670 - _globals['_VERIFYPASSWORDLESSOTPRESPONSE']._serialized_end=2701 - _globals['_OTPREQUEST']._serialized_start=2703 - _globals['_OTPREQUEST']._serialized_end=2808 - _globals['_LISTUSERORGANIZATIONSRESPONSE']._serialized_start=2811 - _globals['_LISTUSERORGANIZATIONSRESPONSE']._serialized_end=3023 - _globals['_ORGANIZATION']._serialized_start=3026 - _globals['_ORGANIZATION']._serialized_end=3549 - _globals['_USERDETAILS']._serialized_start=3551 - _globals['_USERDETAILS']._serialized_end=3646 - _globals['_SIGNUPORGANIZATIONREQUEST']._serialized_start=3649 - _globals['_SIGNUPORGANIZATIONREQUEST']._serialized_end=3845 - _globals['_SIGNUPORGANIZATIONRESPONSE']._serialized_start=3847 - _globals['_SIGNUPORGANIZATIONRESPONSE']._serialized_end=3961 - _globals['_UPDATELOGINUSERDETAILSREQUEST']._serialized_start=3964 - _globals['_UPDATELOGINUSERDETAILSREQUEST']._serialized_end=4306 - _globals['_USER']._serialized_start=4309 - _globals['_USER']._serialized_end=6070 - _globals['_GETAUTHSTATERESPONSE']._serialized_start=6073 - _globals['_GETAUTHSTATERESPONSE']._serialized_end=6206 - _globals['_GETAUTHERRORREQUEST']._serialized_start=6209 - _globals['_GETAUTHERRORREQUEST']._serialized_end=6349 - _globals['_GETAUTHERRORRESPONSE']._serialized_start=6351 - _globals['_GETAUTHERRORRESPONSE']._serialized_end=6440 - _globals['_AUTHSERVICE']._serialized_start=7070 - _globals['_AUTHSERVICE']._serialized_end=9157 + _globals['_PORTALSETTINGS']._serialized_end=2548 + _globals['_GETAUTHCUSTOMIZATIONSRESPONSE']._serialized_start=2551 + _globals['_GETAUTHCUSTOMIZATIONSRESPONSE']._serialized_end=2729 + _globals['_GETAUTHFEATURESRESPONSE']._serialized_start=2731 + _globals['_GETAUTHFEATURESRESPONSE']._serialized_end=2809 + _globals['_VERIFYPASSWORDLESSOTPREQUEST']._serialized_start=2811 + _globals['_VERIFYPASSWORDLESSOTPREQUEST']._serialized_end=2896 + _globals['_VERIFYPASSWORDLESSOTPRESPONSE']._serialized_start=2898 + _globals['_VERIFYPASSWORDLESSOTPRESPONSE']._serialized_end=2929 + _globals['_OTPREQUEST']._serialized_start=2931 + _globals['_OTPREQUEST']._serialized_end=3036 + _globals['_LISTUSERORGANIZATIONSRESPONSE']._serialized_start=3039 + _globals['_LISTUSERORGANIZATIONSRESPONSE']._serialized_end=3251 + _globals['_ORGANIZATION']._serialized_start=3254 + _globals['_ORGANIZATION']._serialized_end=3777 + _globals['_USERDETAILS']._serialized_start=3779 + _globals['_USERDETAILS']._serialized_end=3874 + _globals['_SIGNUPORGANIZATIONREQUEST']._serialized_start=3877 + _globals['_SIGNUPORGANIZATIONREQUEST']._serialized_end=4073 + _globals['_SIGNUPORGANIZATIONRESPONSE']._serialized_start=4075 + _globals['_SIGNUPORGANIZATIONRESPONSE']._serialized_end=4189 + _globals['_UPDATELOGINUSERDETAILSREQUEST']._serialized_start=4192 + _globals['_UPDATELOGINUSERDETAILSREQUEST']._serialized_end=4534 + _globals['_USER']._serialized_start=4537 + _globals['_USER']._serialized_end=6606 + _globals['_GETAUTHSTATERESPONSE']._serialized_start=6609 + _globals['_GETAUTHSTATERESPONSE']._serialized_end=6914 + _globals['_GETAUTHERRORREQUEST']._serialized_start=6917 + _globals['_GETAUTHERRORREQUEST']._serialized_end=7057 + _globals['_GETAUTHERRORRESPONSE']._serialized_start=7059 + _globals['_GETAUTHERRORRESPONSE']._serialized_end=7148 + _globals['_AUTHSERVICE']._serialized_start=7778 + _globals['_AUTHSERVICE']._serialized_end=9865 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/auth/auth_pb2.pyi b/scalekit/v1/auth/auth_pb2.pyi index 33fa9cc..06084bc 100644 --- a/scalekit/v1/auth/auth_pb2.pyi +++ b/scalekit/v1/auth/auth_pb2.pyi @@ -128,10 +128,12 @@ class GetAuthCustomizationsRequest(_message.Message): def __init__(self) -> None: ... class PortalSettings(_message.Message): - __slots__ = ("custom_branding",) + __slots__ = ("custom_branding", "new_self_serve_sso_scim") CUSTOM_BRANDING_FIELD_NUMBER: _ClassVar[int] + NEW_SELF_SERVE_SSO_SCIM_FIELD_NUMBER: _ClassVar[int] custom_branding: bool - def __init__(self, custom_branding: bool = ...) -> None: ... + new_self_serve_sso_scim: bool + def __init__(self, custom_branding: bool = ..., new_self_serve_sso_scim: bool = ...) -> None: ... class GetAuthCustomizationsResponse(_message.Message): __slots__ = ("customization_settings", "settings") @@ -234,7 +236,7 @@ class UpdateLoginUserDetailsRequest(_message.Message): def __init__(self, connection_id: _Optional[str] = ..., login_request_id: _Optional[str] = ..., user: _Optional[_Union[User, _Mapping]] = ...) -> None: ... class User(_message.Message): - __slots__ = ("sub", "email", "given_name", "family_name", "email_verified", "phone_number", "phone_number_verified", "name", "preferred_username", "picture", "gender", "locale", "groups", "custom_attributes", "organization_external_id") + __slots__ = ("sub", "email", "given_name", "family_name", "email_verified", "phone_number", "phone_number_verified", "name", "preferred_username", "picture", "gender", "locale", "groups", "custom_attributes", "organization_external_id", "roles", "organization_external_name") SUB_FIELD_NUMBER: _ClassVar[int] EMAIL_FIELD_NUMBER: _ClassVar[int] GIVEN_NAME_FIELD_NUMBER: _ClassVar[int] @@ -250,6 +252,8 @@ class User(_message.Message): GROUPS_FIELD_NUMBER: _ClassVar[int] CUSTOM_ATTRIBUTES_FIELD_NUMBER: _ClassVar[int] ORGANIZATION_EXTERNAL_ID_FIELD_NUMBER: _ClassVar[int] + ROLES_FIELD_NUMBER: _ClassVar[int] + ORGANIZATION_EXTERNAL_NAME_FIELD_NUMBER: _ClassVar[int] sub: str email: str given_name: str @@ -265,15 +269,19 @@ class User(_message.Message): groups: _containers.RepeatedScalarFieldContainer[str] custom_attributes: _struct_pb2.Struct organization_external_id: str - def __init__(self, sub: _Optional[str] = ..., email: _Optional[str] = ..., given_name: _Optional[str] = ..., family_name: _Optional[str] = ..., email_verified: bool = ..., phone_number: _Optional[str] = ..., phone_number_verified: bool = ..., name: _Optional[str] = ..., preferred_username: _Optional[str] = ..., picture: _Optional[str] = ..., gender: _Optional[str] = ..., locale: _Optional[str] = ..., groups: _Optional[_Iterable[str]] = ..., custom_attributes: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., organization_external_id: _Optional[str] = ...) -> None: ... + roles: _containers.RepeatedScalarFieldContainer[str] + organization_external_name: str + def __init__(self, sub: _Optional[str] = ..., email: _Optional[str] = ..., given_name: _Optional[str] = ..., family_name: _Optional[str] = ..., email_verified: bool = ..., phone_number: _Optional[str] = ..., phone_number_verified: bool = ..., name: _Optional[str] = ..., preferred_username: _Optional[str] = ..., picture: _Optional[str] = ..., gender: _Optional[str] = ..., locale: _Optional[str] = ..., groups: _Optional[_Iterable[str]] = ..., custom_attributes: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., organization_external_id: _Optional[str] = ..., roles: _Optional[_Iterable[str]] = ..., organization_external_name: _Optional[str] = ...) -> None: ... class GetAuthStateResponse(_message.Message): - __slots__ = ("auth_state", "user") + __slots__ = ("auth_state", "user", "login_hint") AUTH_STATE_FIELD_NUMBER: _ClassVar[int] USER_FIELD_NUMBER: _ClassVar[int] + LOGIN_HINT_FIELD_NUMBER: _ClassVar[int] auth_state: AuthState user: UserDetails - def __init__(self, auth_state: _Optional[_Union[AuthState, str]] = ..., user: _Optional[_Union[UserDetails, _Mapping]] = ...) -> None: ... + login_hint: str + def __init__(self, auth_state: _Optional[_Union[AuthState, str]] = ..., user: _Optional[_Union[UserDetails, _Mapping]] = ..., login_hint: _Optional[str] = ...) -> None: ... class GetAuthErrorRequest(_message.Message): __slots__ = ("error_id",) diff --git a/scalekit/v1/auth/totp_pb2.py b/scalekit/v1/auth/totp_pb2.py index db94313..d8eacf1 100644 --- a/scalekit/v1/auth/totp_pb2.py +++ b/scalekit/v1/auth/totp_pb2.py @@ -15,6 +15,7 @@ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2 +from google.api import visibility_pb2 as google_dot_api_dot_visibility__pb2 from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 @@ -23,7 +24,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bscalekit/v1/auth/totp.proto\x12\x15scalekit.v1.auth.totp\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"t\n\x17TOTPRegistrationRequest\x12Y\n\x11totp_registration\x18\x01 \x01(\x0b\x32\'.scalekit.v1.auth.totp.TOTPRegistrationB\x03\xbaH\x00R\x10totpRegistration\"u\n\x18TOTPRegistrationResponse\x12Y\n\x11totp_registration\x18\x01 \x01(\x0b\x32\'.scalekit.v1.auth.totp.TOTPRegistrationB\x03\xbaH\x00R\x10totpRegistration\"\x84\x07\n\x10TOTPRegistration\x12{\n\x02id\x18\x01 \x01(\tBk\x92\x41h2MUnique scalekit-generated identifier that uniquely references an organizationJ\x17\"org_59615193906282635\"R\x02id\x12\x8c\x01\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBO\x92\x41I2+Timestamp when the organization was createdJ\x1a\"2025-02-15T06:23:44.560Z\"\xe0\x41\x02R\ncreateTime\x12\x8e\x01\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBQ\x92\x41N20Timestamp when the organization was last updatedJ\x1a\"2025-02-15T06:23:44.560Z\"R\nupdateTime\x12y\n\x07user_id\x18\x04 \x01(\tB^\x92\x41L21The user ID associated with the TOTP registrationJ\x17\"usr_59615193906282635\"\xbaH\x0cr\n\x10\x01\x18 :\x04usr_H\x00R\x06userId\x12|\n\x0c\x61\x63\x63ount_name\x18\x05 \x01(\tBW\x92\x41J26The account name associated with the TOTP registrationJ\x10\"me@example.com\"\xbaH\x07r\x05\x10\x01\x18\xe3\x02H\x00R\x0b\x61\x63\x63ountName\x12\xb2\x01\n\x0bqr_code_uri\x18\x06 \x01(\tB\x8c\x01\x92\x41|2+The URI for the QR code used to set up TOTPJM\"otpauth://totp/Scalekit:usr_59615193906282635?secret=ABC123&issuer=Scalekit\"\xe0\x41\x03\xbaH\x07r\x05\x10\x01\x18\x80\x08H\x01R\tqrCodeUri\x88\x01\x01\x42\x15\n\x13UserIdOrAccountNameB\x0e\n\x0c_qr_code_uri\"l\n\x1d\x45nableRegistrationTOTPRequest\x12/\n\x0fregistration_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x0eregistrationId\x12\x1a\n\x04\x63ode\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x04\x63ode\"[\n\x1e\x45nableRegistrationTOTPResponse\x12\x16\n\x02id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x02id\x12!\n\x0c\x62\x61\x63kup_codes\x18\x03 \x03(\tR\x0b\x62\x61\x63kupCodes\"m\n\x1e\x44isableRegistrationTOTPRequest\x12/\n\x0fregistration_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x0eregistrationId\x12\x1a\n\x04\x63ode\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x04\x63ode\"\x87\x01\n\x15GenerateQRCodeRequest\x12-\n\x0e\x65nvironment_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\renvironmentId\x12&\n\nidentifier\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\nidentifier\x12\x17\n\x07is_user\x18\x03 \x01(\x08R\x06isUser\"1\n\x16GenerateQRCodeResponse\x12\x17\n\x07qr_code\x18\x01 \x01(\tR\x06qrCode\"T\n\x15VerifyUserCodeRequest\x12\x1f\n\x07user_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x06userId\x12\x1a\n\x04\x63ode\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x04\x63ode\"*\n\x12VerifyCodeResponse\x12\x14\n\x05valid\x18\x01 \x01(\x08R\x05valid\"l\n\x1dVerifyRegistrationCodeRequest\x12/\n\x0fregistration_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x0eregistrationId\x12\x1a\n\x04\x63ode\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x04\x63ode2\xdc\x06\n\x0bTOTPService\x12\xab\x01\n\x0cRegisterTOTP\x12..scalekit.v1.auth.totp.TOTPRegistrationRequest\x1a/.scalekit.v1.auth.totp.TOTPRegistrationResponse\":\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02.\"\x19/api/v1/totp/registration:\x11totp_registration\x12\xb1\x01\n\nEnableTOTP\x12\x34.scalekit.v1.auth.totp.EnableRegistrationTOTPRequest\x1a\x35.scalekit.v1.auth.totp.EnableRegistrationTOTPResponse\"6\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02*\"%/api/v1/totp/{registration_id}/enable:\x01*\x12\x9e\x01\n\x0eVerifyUserCode\x12,.scalekit.v1.auth.totp.VerifyUserCodeRequest\x1a).scalekit.v1.auth.totp.VerifyCodeResponse\"3\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\'\"\"/api/v1/user/{user_id}/totp:verify:\x01*\x12\xb1\x01\n\x16VerifyRegistrationCode\x12\x34.scalekit.v1.auth.totp.VerifyRegistrationCodeRequest\x1a).scalekit.v1.auth.totp.VerifyCodeResponse\"6\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02*\"%/api/v1/totp/{registration_id}/verify:\x01*\x12\x95\x01\n\x0b\x44isableTOTP\x12\x35.scalekit.v1.auth.totp.DisableRegistrationTOTPRequest\x1a\x16.google.protobuf.Empty\"7\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02+\"&/api/v1/totp/{registration_id}/disable:\x01*B5Z3github.com/scalekit-inc/scalekit/pkg/grpc/auth/totpb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bscalekit/v1/auth/totp.proto\x12\x15scalekit.v1.auth.totp\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"t\n\x17TOTPRegistrationRequest\x12Y\n\x11totp_registration\x18\x01 \x01(\x0b\x32\'.scalekit.v1.auth.totp.TOTPRegistrationB\x03\xbaH\x00R\x10totpRegistration\"u\n\x18TOTPRegistrationResponse\x12Y\n\x11totp_registration\x18\x01 \x01(\x0b\x32\'.scalekit.v1.auth.totp.TOTPRegistrationB\x03\xbaH\x00R\x10totpRegistration\"\x84\x07\n\x10TOTPRegistration\x12{\n\x02id\x18\x01 \x01(\tBk\x92\x41h2MUnique scalekit-generated identifier that uniquely references an organizationJ\x17\"org_59615193906282635\"R\x02id\x12\x8c\x01\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBO\x92\x41I2+Timestamp when the organization was createdJ\x1a\"2025-02-15T06:23:44.560Z\"\xe0\x41\x02R\ncreateTime\x12\x8e\x01\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBQ\x92\x41N20Timestamp when the organization was last updatedJ\x1a\"2025-02-15T06:23:44.560Z\"R\nupdateTime\x12y\n\x07user_id\x18\x04 \x01(\tB^\x92\x41L21The user ID associated with the TOTP registrationJ\x17\"usr_59615193906282635\"\xbaH\x0cr\n\x10\x01\x18 :\x04usr_H\x00R\x06userId\x12|\n\x0c\x61\x63\x63ount_name\x18\x05 \x01(\tBW\x92\x41J26The account name associated with the TOTP registrationJ\x10\"me@example.com\"\xbaH\x07r\x05\x10\x01\x18\xe3\x02H\x00R\x0b\x61\x63\x63ountName\x12\xb2\x01\n\x0bqr_code_uri\x18\x06 \x01(\tB\x8c\x01\x92\x41|2+The URI for the QR code used to set up TOTPJM\"otpauth://totp/Scalekit:usr_59615193906282635?secret=ABC123&issuer=Scalekit\"\xe0\x41\x03\xbaH\x07r\x05\x10\x01\x18\x80\x08H\x01R\tqrCodeUri\x88\x01\x01\x42\x15\n\x13UserIdOrAccountNameB\x0e\n\x0c_qr_code_uri\"l\n\x1d\x45nableRegistrationTOTPRequest\x12/\n\x0fregistration_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x0eregistrationId\x12\x1a\n\x04\x63ode\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x04\x63ode\"[\n\x1e\x45nableRegistrationTOTPResponse\x12\x16\n\x02id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x02id\x12!\n\x0c\x62\x61\x63kup_codes\x18\x03 \x03(\tR\x0b\x62\x61\x63kupCodes\"m\n\x1e\x44isableRegistrationTOTPRequest\x12/\n\x0fregistration_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x0eregistrationId\x12\x1a\n\x04\x63ode\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x04\x63ode\"\x87\x01\n\x15GenerateQRCodeRequest\x12-\n\x0e\x65nvironment_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\renvironmentId\x12&\n\nidentifier\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\nidentifier\x12\x17\n\x07is_user\x18\x03 \x01(\x08R\x06isUser\"1\n\x16GenerateQRCodeResponse\x12\x17\n\x07qr_code\x18\x01 \x01(\tR\x06qrCode\"T\n\x15VerifyUserCodeRequest\x12\x1f\n\x07user_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x06userId\x12\x1a\n\x04\x63ode\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x04\x63ode\"*\n\x12VerifyCodeResponse\x12\x14\n\x05valid\x18\x01 \x01(\x08R\x05valid\"l\n\x1dVerifyRegistrationCodeRequest\x12/\n\x0fregistration_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x0eregistrationId\x12\x1a\n\x04\x63ode\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x04\x63ode2\xa7\x07\n\x0bTOTPService\x12\xba\x01\n\x0cRegisterTOTP\x12..scalekit.v1.auth.totp.TOTPRegistrationRequest\x1a/.scalekit.v1.auth.totp.TOTPRegistrationResponse\"I\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02.\"\x19/api/v1/totp/registration:\x11totp_registration\x12\xc0\x01\n\nEnableTOTP\x12\x34.scalekit.v1.auth.totp.EnableRegistrationTOTPRequest\x1a\x35.scalekit.v1.auth.totp.EnableRegistrationTOTPResponse\"E\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02*\"%/api/v1/totp/{registration_id}/enable:\x01*\x12\xad\x01\n\x0eVerifyUserCode\x12,.scalekit.v1.auth.totp.VerifyUserCodeRequest\x1a).scalekit.v1.auth.totp.VerifyCodeResponse\"B\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\'\"\"/api/v1/user/{user_id}/totp:verify:\x01*\x12\xc0\x01\n\x16VerifyRegistrationCode\x12\x34.scalekit.v1.auth.totp.VerifyRegistrationCodeRequest\x1a).scalekit.v1.auth.totp.VerifyCodeResponse\"E\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02*\"%/api/v1/totp/{registration_id}/verify:\x01*\x12\xa4\x01\n\x0b\x44isableTOTP\x12\x35.scalekit.v1.auth.totp.DisableRegistrationTOTPRequest\x1a\x16.google.protobuf.Empty\"F\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02+\"&/api/v1/totp/{registration_id}/disable:\x01*B5Z3github.com/scalekit-inc/scalekit/pkg/grpc/auth/totpb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -70,37 +71,37 @@ _globals['_VERIFYREGISTRATIONCODEREQUEST'].fields_by_name['code']._loaded_options = None _globals['_VERIFYREGISTRATIONCODEREQUEST'].fields_by_name['code']._serialized_options = b'\272H\003\310\001\001' _globals['_TOTPSERVICE'].methods_by_name['RegisterTOTP']._loaded_options = None - _globals['_TOTPSERVICE'].methods_by_name['RegisterTOTP']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002.\"\031/api/v1/totp/registration:\021totp_registration' + _globals['_TOTPSERVICE'].methods_by_name['RegisterTOTP']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002.\"\031/api/v1/totp/registration:\021totp_registration' _globals['_TOTPSERVICE'].methods_by_name['EnableTOTP']._loaded_options = None - _globals['_TOTPSERVICE'].methods_by_name['EnableTOTP']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002*\"%/api/v1/totp/{registration_id}/enable:\001*' + _globals['_TOTPSERVICE'].methods_by_name['EnableTOTP']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002*\"%/api/v1/totp/{registration_id}/enable:\001*' _globals['_TOTPSERVICE'].methods_by_name['VerifyUserCode']._loaded_options = None - _globals['_TOTPSERVICE'].methods_by_name['VerifyUserCode']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\'\"\"/api/v1/user/{user_id}/totp:verify:\001*' + _globals['_TOTPSERVICE'].methods_by_name['VerifyUserCode']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\'\"\"/api/v1/user/{user_id}/totp:verify:\001*' _globals['_TOTPSERVICE'].methods_by_name['VerifyRegistrationCode']._loaded_options = None - _globals['_TOTPSERVICE'].methods_by_name['VerifyRegistrationCode']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002*\"%/api/v1/totp/{registration_id}/verify:\001*' + _globals['_TOTPSERVICE'].methods_by_name['VerifyRegistrationCode']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002*\"%/api/v1/totp/{registration_id}/verify:\001*' _globals['_TOTPSERVICE'].methods_by_name['DisableTOTP']._loaded_options = None - _globals['_TOTPSERVICE'].methods_by_name['DisableTOTP']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002+\"&/api/v1/totp/{registration_id}/disable:\001*' - _globals['_TOTPREGISTRATIONREQUEST']._serialized_start=356 - _globals['_TOTPREGISTRATIONREQUEST']._serialized_end=472 - _globals['_TOTPREGISTRATIONRESPONSE']._serialized_start=474 - _globals['_TOTPREGISTRATIONRESPONSE']._serialized_end=591 - _globals['_TOTPREGISTRATION']._serialized_start=594 - _globals['_TOTPREGISTRATION']._serialized_end=1494 - _globals['_ENABLEREGISTRATIONTOTPREQUEST']._serialized_start=1496 - _globals['_ENABLEREGISTRATIONTOTPREQUEST']._serialized_end=1604 - _globals['_ENABLEREGISTRATIONTOTPRESPONSE']._serialized_start=1606 - _globals['_ENABLEREGISTRATIONTOTPRESPONSE']._serialized_end=1697 - _globals['_DISABLEREGISTRATIONTOTPREQUEST']._serialized_start=1699 - _globals['_DISABLEREGISTRATIONTOTPREQUEST']._serialized_end=1808 - _globals['_GENERATEQRCODEREQUEST']._serialized_start=1811 - _globals['_GENERATEQRCODEREQUEST']._serialized_end=1946 - _globals['_GENERATEQRCODERESPONSE']._serialized_start=1948 - _globals['_GENERATEQRCODERESPONSE']._serialized_end=1997 - _globals['_VERIFYUSERCODEREQUEST']._serialized_start=1999 - _globals['_VERIFYUSERCODEREQUEST']._serialized_end=2083 - _globals['_VERIFYCODERESPONSE']._serialized_start=2085 - _globals['_VERIFYCODERESPONSE']._serialized_end=2127 - _globals['_VERIFYREGISTRATIONCODEREQUEST']._serialized_start=2129 - _globals['_VERIFYREGISTRATIONCODEREQUEST']._serialized_end=2237 - _globals['_TOTPSERVICE']._serialized_start=2240 - _globals['_TOTPSERVICE']._serialized_end=3100 + _globals['_TOTPSERVICE'].methods_by_name['DisableTOTP']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002+\"&/api/v1/totp/{registration_id}/disable:\001*' + _globals['_TOTPREGISTRATIONREQUEST']._serialized_start=385 + _globals['_TOTPREGISTRATIONREQUEST']._serialized_end=501 + _globals['_TOTPREGISTRATIONRESPONSE']._serialized_start=503 + _globals['_TOTPREGISTRATIONRESPONSE']._serialized_end=620 + _globals['_TOTPREGISTRATION']._serialized_start=623 + _globals['_TOTPREGISTRATION']._serialized_end=1523 + _globals['_ENABLEREGISTRATIONTOTPREQUEST']._serialized_start=1525 + _globals['_ENABLEREGISTRATIONTOTPREQUEST']._serialized_end=1633 + _globals['_ENABLEREGISTRATIONTOTPRESPONSE']._serialized_start=1635 + _globals['_ENABLEREGISTRATIONTOTPRESPONSE']._serialized_end=1726 + _globals['_DISABLEREGISTRATIONTOTPREQUEST']._serialized_start=1728 + _globals['_DISABLEREGISTRATIONTOTPREQUEST']._serialized_end=1837 + _globals['_GENERATEQRCODEREQUEST']._serialized_start=1840 + _globals['_GENERATEQRCODEREQUEST']._serialized_end=1975 + _globals['_GENERATEQRCODERESPONSE']._serialized_start=1977 + _globals['_GENERATEQRCODERESPONSE']._serialized_end=2026 + _globals['_VERIFYUSERCODEREQUEST']._serialized_start=2028 + _globals['_VERIFYUSERCODEREQUEST']._serialized_end=2112 + _globals['_VERIFYCODERESPONSE']._serialized_start=2114 + _globals['_VERIFYCODERESPONSE']._serialized_end=2156 + _globals['_VERIFYREGISTRATIONCODEREQUEST']._serialized_start=2158 + _globals['_VERIFYREGISTRATIONCODEREQUEST']._serialized_end=2266 + _globals['_TOTPSERVICE']._serialized_start=2269 + _globals['_TOTPSERVICE']._serialized_end=3204 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/auth/totp_pb2.pyi b/scalekit/v1/auth/totp_pb2.pyi index 7b8d52d..7a8b6b8 100644 --- a/scalekit/v1/auth/totp_pb2.pyi +++ b/scalekit/v1/auth/totp_pb2.pyi @@ -1,6 +1,7 @@ from buf.validate import validate_pb2 as _validate_pb2 from google.api import annotations_pb2 as _annotations_pb2 from google.api import field_behavior_pb2 as _field_behavior_pb2 +from google.api import visibility_pb2 as _visibility_pb2 from google.protobuf import empty_pb2 as _empty_pb2 from google.protobuf import struct_pb2 as _struct_pb2 from google.protobuf import timestamp_pb2 as _timestamp_pb2 diff --git a/scalekit/v1/clients/clients_pb2.py b/scalekit/v1/clients/clients_pb2.py index 087dc72..55fdcfe 100644 --- a/scalekit/v1/clients/clients_pb2.py +++ b/scalekit/v1/clients/clients_pb2.py @@ -29,7 +29,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/clients/clients.proto\x12\x13scalekit.v1.clients\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a)scalekit/v1/connections/connections.proto\x1a!scalekit/v1/options/options.proto\"\x8a\x01\n\x15\x43reateResourceRequest\x12q\n\x08resource\x18\x01 \x01(\x0b\x32#.scalekit.v1.clients.CreateResourceB0\x92\x41\'2%Details of the resource to be created\xbaH\x03\xc8\x01\x01R\x08resource\"\x8e\r\n\x0e\x43reateResource\x12|\n\rresource_type\x18\x01 \x01(\x0e\x32!.scalekit.v1.clients.ResourceTypeB4\x92\x41+2\"Type of the resource to be createdJ\x05\"WEB\"\xbaH\x03\xc8\x01\x01R\x0cresourceType\x12K\n\x04name\x18\x02 \x01(\tB7\x92\x41)2\x14Name of the resourceJ\x11\"My API Resource\"\xbaH\x08r\x03\x18\x80\x01\xc8\x01\x01R\x04name\x12\x86\x01\n\x0b\x64\x65scription\x18\x03 \x01(\tBd\x92\x41Y2\x1b\x44\x65scription of the resourceJ:\"Resource for accessing your organization\'s API resources\"\xbaH\x05r\x03\x18\x80\x04R\x0b\x64\x65scription\x12\xab\x01\n\x0cresource_uri\x18\x04 \x01(\tB\x87\x01\x92\x41\x83\x01\x32\x61Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"R\x0bresourceUri\x12g\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x05 \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30R\x11\x61\x63\x63\x65ssTokenExpiry\x12k\n\x14refresh_token_expiry\x18\x06 \x01(\x03\x42\x39\x92\x41\x36\x32-Expiry time in seconds for the refresh token.J\x05\x38\x36\x34\x30\x30R\x12refreshTokenExpiry\x12\x9f\x01\n#disable_dynamic_client_registration\x18\x07 \x01(\x08\x42P\x92\x41M2EIndicates if dynamic client registration is allowed for this resourceJ\x04trueR disableDynamicClientRegistration\x12\x61\n\x08logo_uri\x18\x08 \x01(\tBF\x92\x41;2\x19Logo URI for the resourceJ\x1e\"https://example.com/logo.png\"\xbaH\x05r\x03\x18\x80\x04R\x07logoUri\x12X\n\x08provider\x18\t \x01(\tB<\x92\x41\x31\x32$Connection provider for the resourceJ\t\"DESCOPE\"\xbaH\x05r\x03\x18\x80\x04R\x08provider\x12\xa9\x01\n\x0bresource_id\x18\n \x01(\tB\x87\x01\x92\x41\x83\x01\x32\x61Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"R\nresourceId\x12i\n\x06scopes\x18\x0b \x03(\tBQ\x92\x41N21List of OAuth scopes associated with the resourceJ\x19[\"usr:read\", \"usr:write\"]R\x06scopes\x12\xac\x01\n intersect_scopes_user_permission\x18\x0c \x01(\x08\x42\x63\x92\x41`2XIndicates if the scopes should be intersected with user permissions for granular controlJ\x04trueR\x1dintersectScopesUserPermission\x12\x7f\n\x0b\x65nable_cimd\x18\r \x01(\x08\x42^\x92\x41[2RSpecifies whether Client ID Metadata Document (CIMD) is activated for the resourceJ\x05\x66\x61lseR\nenableCimd\"\x8c\x06\n\x0eResourceClient\x12\x44\n\x04name\x18\x01 \x01(\tB0\x92\x41%2\x12Name of the clientJ\x0f\"My API Client\"\xbaH\x05r\x03\x18\x80\x01R\x04name\x12\x82\x01\n\x0b\x64\x65scription\x18\x02 \x01(\tB`\x92\x41U2\x19\x44\x65scription of the clientJ8\"Client for accessing your organization\'s API resources\"\xbaH\x05r\x03\x18\x80\x04R\x0b\x64\x65scription\x12\x38\n\x06scopes\x18\x03 \x03(\tB \x92\x41\x1d\x32\x1bOAuth scopes for the clientR\x06scopes\x12\x62\n\x08\x61udience\x18\x04 \x03(\tBF\x92\x41\x43\x32$OAuth audience values for the clientJ\x1b[\"https://api.example.com\"]R\x08\x61udience\x12\xc6\x01\n\rcustom_claims\x18\x05 \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\x7f\x92\x41|2zCustom claims to be included in access tokens. Please keep this to the essentials as this increases the size of the token.R\x0c\x63ustomClaims\x12_\n\x06\x65xpiry\x18\x06 \x01(\x03\x42G\x92\x41\x44\x32\"https://example.com/.well-known/oauth-protected-resource/mcp\"R\x14protectedMetadataUri\x12\xb2\x01\n\x0bresource_id\x18\x0f \x01(\tB\x90\x01\x92\x41\x84\x01\x32\x62Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"\xbaH\x05r\x03\x18\x80\x04R\nresourceId\x12\xfb\x01\n\x06scopes\x18\x10 \x03(\x0b\x32\x1a.scalekit.v1.clients.ScopeB\xc6\x01\x92\x41\xc2\x01\x32OList of OAuth scopes associated with the resource with enabled or disabled flagJo[{\"id\": \"perm_\", \"name\": \"usr:read\", \"description\": \"Reading basic information of the users\", \"enabled\": true}]R\x06scopes\x12\xc3\x01\n\x12\x63onnection_details\x18\x11 \x01(\x0b\x32\'.scalekit.v1.clients.ResourceConnectionBk\x92\x41\x65\x32\x63\x44\x65tails of the own auth connection if any. For full stack this field will be empty or not populated\xe0\x41\x03R\x11\x63onnectionDetails\x12\x91\x01\n\x1a\x64isallow_connection_update\x18\x12 \x01(\x08\x42S\x92\x41M2DIndicates if updating the connection is disallowed for this resourceJ\x05\x66\x61lse\xe0\x41\x03R\x18\x64isallowConnectionUpdate\x12\xac\x01\n intersect_scopes_user_permission\x18\x13 \x01(\x08\x42\x63\x92\x41`2XIndicates if the scopes should be intersected with user permissions for granular controlJ\x04trueR\x1dintersectScopesUserPermission\x12\x7f\n\x0b\x65nable_cimd\x18\x14 \x01(\x08\x42^\x92\x41[2RSpecifies whether Client ID Metadata Document (CIMD) is activated for the resourceJ\x05\x66\x61lseR\nenableCimd\"\xf2\x01\n\x15RegisterClientRequest\x12i\n\x06res_id\x18\x01 \x01(\tBR\x92\x41\x43\x32(Unique identifier of the client resourceJ\x17\"app_69388798466720005\"\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x05resId\x12n\n\x06\x63lient\x18\x02 \x01(\x0b\x32#.scalekit.v1.clients.RegisterClientB1\x92\x41(2&Details of the client to be registered\xbaH\x03\xc8\x01\x01R\x06\x63lient\"\x96\x06\n\x0eRegisterClient\x12Q\n\x0b\x63lient_name\x18\x01 \x01(\tB0\x92\x41%2\x12Name of the clientJ\x0f\"My API Client\"\xbaH\x05r\x03\x18\x80\x01R\nclientName\x12\x82\x01\n\x0b\x64\x65scription\x18\x02 \x01(\tB`\x92\x41U2\x19\x44\x65scription of the clientJ8\"Client for accessing your organization\'s API resources\"\xbaH\x05r\x03\x18\x80\x04R\x0b\x64\x65scription\x12g\n\rredirect_uris\x18\x03 \x03(\tBB\x92\x41?2\x1bRedirect URI for the clientJ [\"https://example.com/callback\"]R\x0credirectUris\x12Y\n\x05scope\x18\x04 \x01(\tBC\x92\x41@2\x1bOAuth scopes for the clientJ![\"read:users\", \"write:resources\"]R\x05scope\x12T\n\nclient_uri\x18\x05 \x01(\tB5\x92\x41\x32\x32\x19\x43lient URI for the clientJ\x15\"https://example.com\"R\tclientUri\x12W\n\x08logo_uri\x18\x06 \x01(\tB<\x92\x41\x39\x32\x17Logo URI for the clientJ\x1e\"https://example.com/logo.png\"R\x07logoUri\x12\\\n\x07tos_uri\x18\x07 \x01(\tBC\x92\x41@2#Terms of Service URI for the clientJ\x19\"https://example.com/tos\"R\x06tosUri\x12[\n\npolicy_uri\x18\x08 \x01(\tB<\x92\x41\x39\x32\x19Policy URI for the clientJ\x1c\"https://example.com/policy\"R\tpolicyUri\"\xb9\x17\n\x16RegisterClientResponse\x12\xfc\x01\n\tclient_id\x18\x01 \x01(\tB\xde\x01\x92\x41\xda\x01\x32\xbc\x01The unique identifier for this M2M client. This ID is used to identify the client in API requests and logs. It is automatically generated when the client is created and cannot be modified.J\x19\"m2morg_1231234233424344\"R\x08\x63lientId\x12\xb3\x02\n\x07secrets\x18\x02 \x03(\x0b\x32!.scalekit.v1.clients.ClientSecretB\xf5\x01\x92\x41\xf1\x01\x32\xee\x01List of client secrets associated with this client. Each secret can be used for authentication, but only the most recently created secret is typically active. Secrets are stored securely and their values are never returned after creation.R\x07secrets\x12\xa2\x01\n\x04name\x18\x03 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32\x62The display name of the M2M client. This name helps identify the client in the dashboard and logs.J#\"GitHub Actions Deployment Service\"R\x04name\x12\xda\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tB\xb7\x01\x92\x41\xb3\x01\x32{A detailed description of the client\'s purpose and usage. This helps administrators understand what the client is used for.J4\"Service account for automated deployment processes\"R\x0b\x64\x65scription\x12\xd5\x01\n\x0b\x63reate_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x97\x01\x92\x41\x93\x01\x32uThe timestamp when this M2M client was created. This field is automatically set by the server and cannot be modified.J\x1a\"2024-01-05T14:48:00.000Z\"R\ncreateTime\x12\xf4\x01\n\x0bupdate_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xb6\x01\x92\x41\xb2\x01\x32\x93\x01The timestamp when this M2M client was last updated. This field is automatically updated by the server whenever the client\'s configuration changes.J\x1a\"2024-01-05T14:48:00.000Z\"R\nupdateTime\x12\xbe\x01\n\x06scopes\x18\x07 \x03(\tB\xa5\x01\x92\x41\xa1\x01\x32uThe OAuth 2.0 scopes granted to this client. These scopes determine what resources and actions the client can access.J([\"deploy:resources\", \"read:deployments\"]R\x06scopes\x12\xc7\x01\n\x08\x61udience\x18\x08 \x03(\tB\xaa\x01\x92\x41\xa6\x01\x32\x86\x01The intended recipients of access tokens issued to this client. Each audience value should be a URI that identifies an API or service.J\x1b[\"https://api.example.com\"]R\x08\x61udience\x12\xec\x01\n\rcustom_claims\x18\t \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\xa4\x01\x92\x41\xa0\x01\x32\x9d\x01\x41\x64\x64itional claims included in access tokens issued to this client. These claims provide context about the client and can be used for authorization decisions.R\x0c\x63ustomClaims\x12\xb2\x01\n\x06\x65xpiry\x18\n \x01(\x03\x42\x99\x01\x92\x41\x95\x01\x32\x8c\x01The lifetime of access tokens issued to this client, in seconds. This determines how long a token remains valid before it must be refreshed.J\x04\x33\x36\x30\x30R\x06\x65xpiry\x12\xc4\x01\n\x0bresource_id\x18\x0b \x01(\tB\xa2\x01\x92\x41\x9e\x01\x32\x83\x01The ID of the resource associated with this M2M client. This field is used to link the client to a specific resource in the system.J\x16\"app_1231234233424344\"R\nresourceId\x12\xd1\x01\n\rredirect_uris\x18\x0c \x03(\tB\xab\x01\x92\x41\xa7\x01\x32\x82\x01The redirect URI for this M2M client. This URI is used in the OAuth 2.0 authorization flow to redirect users after authentication.J [\"https://example.com/callback\"]R\x0credirectUris\x12~\n\rclient_secret\x18\r \x01(\tBY\x92\x41V24Client secret value (only returned once at creation)J\x1e\"CdExsdErfccxDDssddfffgfeFHH1\"R\x0c\x63lientSecret\x12\xce\x01\n\x18\x63lient_secret_expires_at\x18\x0e \x01(\x05\x42\x94\x01\x92\x41\x90\x01\x32rClient secret expiry time in RFC3339 format. If the client secret does not expire, this field will be set to null.J\x1a\"2024-12-31T23:59:59.000Z\"R\x15\x63lientSecretExpiresAt\"\xdd\x02\n\x14ListResourcesRequest\x12r\n\rresource_type\x18\x01 \x01(\x0e\x32!.scalekit.v1.clients.ResourceTypeB*\x92\x41!2\x18\x46ilter resources by typeJ\x05\"WEB\"\xbaH\x03\xc8\x01\x01R\x0cresourceType\x12]\n\npage_token\x18\x02 \x01(\tB>\x92\x41;2\"Token for the next page of resultsJ\x15\"next_page_token_123\"R\tpageToken\x12r\n\tpage_size\x18\x03 \x01(\rBU\x92\x41K2ENumber of resources to return per page. Maximum is 30. Default is 10.J\x02\x32\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\"\xdb\x02\n\x15ListResourcesResponse\x12G\n\ntotal_size\x18\x01 \x01(\rB(\x92\x41%2#Total number of resources availableR\ttotalSize\x12O\n\x0fnext_page_token\x18\x02 \x01(\tB\'\x92\x41$2\"Token for the next page of resultsR\rnextPageToken\x12S\n\tresources\x18\x03 \x03(\x0b\x32\x1d.scalekit.v1.clients.ResourceB\x16\x92\x41\x13\x32\x11List of resourcesR\tresources\x12S\n\x0fprev_page_token\x18\x04 \x01(\tB+\x92\x41(2&Token for the previous page of resultsR\rprevPageToken\"\xaf\x02\n\x15UpdateResourceRequest\x12s\n\x0bresource_id\x18\x01 \x01(\tBR\x92\x41\x46\x32+Unique identifier of the resource to updateJ\x17\"app_69388798466720005\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\x12\x64\n\x08resource\x18\x02 \x01(\x0b\x32#.scalekit.v1.clients.UpdateResourceB#\x92\x41\x1a\x32\x18Updated resource details\xbaH\x03\xc8\x01\x01R\x08resource\x12;\n\x0bupdate_mask\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskR\nupdateMask\"\xa1\x0e\n\x0eUpdateResource\x12P\n\x04name\x18\x01 \x01(\tB<\x92\x41\x31\x32\x14Name of the resourceJ\x19\"My Updated API Resource\"\xbaH\x05r\x03\x18\x80\x01R\x04name\x12\x8e\x01\n\x0b\x64\x65scription\x18\x02 \x01(\tBl\x92\x41\x61\x32\x1b\x44\x65scription of the resourceJB\"Updated resource for accessing your organization\'s API resources\"\xbaH\x05r\x03\x18\x80\x04R\x0b\x64\x65scription\x12\xab\x01\n\x0cresource_uri\x18\x03 \x01(\tB\x87\x01\x92\x41\x83\x01\x32\x61Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"R\x0bresourceUri\x12g\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x04 \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30R\x11\x61\x63\x63\x65ssTokenExpiry\x12k\n\x14refresh_token_expiry\x18\x05 \x01(\x03\x42\x39\x92\x41\x36\x32-Expiry time in seconds for the refresh token.J\x05\x38\x36\x34\x30\x30R\x12refreshTokenExpiry\x12\xbb\x01\n#disable_dynamic_client_registration\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBP\x92\x41M2EIndicates if dynamic client registration is allowed for this resourceJ\x04trueR disableDynamicClientRegistration\x12\x61\n\x08logo_uri\x18\x07 \x01(\tBF\x92\x41;2\x19Logo URI for the resourceJ\x1e\"https://example.com/logo.png\"\xbaH\x05r\x03\x18\x80\x04R\x07logoUri\x12X\n\x08provider\x18\n \x01(\tB<\x92\x41\x31\x32$Connection provider for the resourceJ\t\"DESCOPE\"\xbaH\x05r\x03\x18\x80\x04R\x08provider\x12\xa9\x01\n\x0bresource_id\x18\x0b \x01(\tB\x87\x01\x92\x41\x83\x01\x32\x61Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"R\nresourceId\x12i\n\x06scopes\x18\x0c \x03(\tBQ\x92\x41N21List of OAuth scopes associated with the resourceJ\x19[\"usr:read\", \"usr:write\"]R\x06scopes\x12\xa7\x01\n\x1a\x63ustom_connection_settings\x18\r \x01(\x0b\x32\x35.scalekit.v1.clients.ResourceCustomConnectionSettingsB0\x92\x41-2+Custom connection settings for the resourceH\x00R\x18\x63ustomConnectionSettings\x12\xc8\x01\n intersect_scopes_user_permission\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueBc\x92\x41`2XIndicates if the scopes should be intersected with user permissions for granular controlJ\x04trueR\x1dintersectScopesUserPermission\x12\x94\x01\n\x0b\x65nable_cimd\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueBW\x92\x41T2KIndicates if CIMD (Client ID Metadata Document) is enabled for the resourceJ\x05\x66\x61lseR\nenableCimdB\n\n\x08settings\"y\n\x16UpdateResourceResponse\x12_\n\x08resource\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.clients.ResourceB$\x92\x41!2\x1f\x44\x65tails of the updated resourceR\x08resource\"\xfc\x01\n\x1b\x43reateResourceClientRequest\x12p\n\x0bresource_id\x18\x01 \x01(\tBO\x92\x41\x43\x32(Unique identifier of the client resourceJ\x17\"app_69388798466720005\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\x12k\n\x06\x63lient\x18\x02 \x01(\x0b\x32#.scalekit.v1.clients.ResourceClientB.\x92\x41%2#Details of the client to be created\xbaH\x03\xc8\x01\x01R\x06\x63lient\"\xf8\x01\n\x1c\x43reateResourceClientResponse\x12Z\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1e.scalekit.v1.clients.M2MClientB\"\x92\x41\x1f\x32\x1d\x44\x65tails of the created clientR\x06\x63lient\x12|\n\x0cplain_secret\x18\x02 \x01(\tBY\x92\x41V24Client secret value (only returned once at creation)J\x1e\"CdExsdErfccxDDssddfffgfeFHH1\"R\x0bplainSecret\"\xc7\x03\n\x1bUpdateResourceClientRequest\x12i\n\x0bresource_id\x18\x01 \x01(\tBH\x92\x41<2!Unique identifier of the resourceJ\x17\"res_69388798466720005\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\x12\x63\n\tclient_id\x18\x02 \x01(\tBF\x92\x41:2\x1fUnique identifier of the clientJ\x17\"m2m_12345678901234567\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\x12\x66\n\x06\x63lient\x18\x03 \x01(\x0b\x32#.scalekit.v1.clients.ResourceClientB)\x92\x41 2\x1e\x46ields of the client to update\xbaH\x03\xc8\x01\x01R\x06\x63lient\x12p\n\x0bupdate_mask\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB3\x92\x41\x30\x32.Mask specifying which fields should be updatedR\nupdateMask\"s\n\x1cUpdateResourceClientResponse\x12S\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1e.scalekit.v1.clients.M2MClientB\x1b\x92\x41\x18\x32\x16Updated client detailsR\x06\x63lient\"\x96\x02\n\x18GetResourceClientRequest\x12u\n\x0bresource_id\x18\x01 \x01(\tBT\x92\x41H24Unique identifier of the client resource to retrieveJ\x10\"skc_1234567890\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\x12\x82\x01\n\tclient_id\x18\x02 \x01(\tBe\x92\x41Y2\x92\x41;2.Case-insensitive search over external user IDsJ\t\"usr_123\"R\x06search\x12[\n\tpage_size\x18\x03 \x01(\rB>\x92\x41\x34\x32.Number of consents to return per page (max 30)J\x02\x32\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\x63\n\npage_token\x18\x04 \x01(\tBD\x92\x41\x41\x32\x33Pagination token to fetch the next or previous pageJ\n\">:abc123\"R\tpageToken\"\x8c\x03\n ListResourceUserConsentsResponse\x12V\n\ntotal_size\x18\x01 \x01(\rB7\x92\x41\x34\x32\x32Total number of user consents matching the requestR\ttotalSize\x12T\n\x0fnext_page_token\x18\x02 \x01(\tB,\x92\x41)2\'Pagination token to fetch the next pageR\rnextPageToken\x12`\n\x08\x63onsents\x18\x03 \x03(\x0b\x32(.scalekit.v1.clients.ResourceUserConsentB\x1a\x92\x41\x17\x32\x15List of user consentsR\x08\x63onsents\x12X\n\x0fprev_page_token\x18\x04 \x01(\tB0\x92\x41-2+Pagination token to fetch the previous pageR\rprevPageToken\"\xdc\x04\n\x13ResourceUserConsent\x12X\n\x02id\x18\x01 \x01(\tBH\x92\x41\x45\x32%Unique identifier of the user consentJ\x1c\"usrcnst_102709535608668163\"R\x02id\x12r\n\x10\x65xternal_user_id\x18\x02 \x01(\tBH\x92\x41\x45\x32*External identifier of the consenting userJ\x17\"usr_83562895790637841\"R\x0e\x65xternalUserId\x12`\n\tclient_id\x18\x03 \x01(\tBC\x92\x41@2-Client identifier associated with the consentJ\x0f\"m2m_123123123\"R\x08\x63lientId\x12\x44\n\x0b\x63lient_name\x18\x04 \x01(\tB#\x92\x41 2\x14Readable client nameJ\x08\"MCPJam\"R\nclientName\x12O\n\x06scopes\x18\x05 \x03(\tB7\x92\x41\x34\x32\x1dScopes granted in the consentJ\x13[\"openid\", \"email\"]R\x06scopes\x12~\n\ngranted_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampBC\x92\x41@2\"Timestamp when consent was grantedJ\x1a\"2025-12-09T13:27:29.810Z\"R\tgrantedAt\"\xa0\x01\n\x1aListResourceClientsRequest\x12\x81\x01\n\x0bresource_id\x18\x01 \x01(\tB`\x92\x41T2@Unique identifier of the resource whose clients are to be listedJ\x10\"skc_1234567890\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\"\xf0\x02\n\x1bListResourceClientsResponse\x12k\n\x07\x63lients\x18\x02 \x03(\x0b\x32\x1e.scalekit.v1.clients.M2MClientB1\x92\x41.2,List of clients associated with the resourceR\x07\x63lients\x12i\n\x11total_dcr_clients\x18\x03 \x01(\x05\x42=\x92\x41:28Total number of DCR clients associated with the resourceR\x0ftotalDcrClients\x12s\n\x14total_static_clients\x18\x04 \x01(\x05\x42\x41\x92\x41>2\"R\tpageToken:\xec\x01\x92\x41\xe8\x01\n\xa8\x01*!List Organization Clients Request2\x82\x01Request message for listing API clients within a specific organization. Supports pagination for handling large numbers of clients.*;\n\x11\x41PI Documentation\x12&https://docs.scalekit.com/m2m/overview\"\xa5\x06\n\x1fListOrganizationClientsResponse\x12\x97\x01\n\x0fnext_page_token\x18\x01 \x01(\tBo\x92\x41l2UPagination token for the next page of results. Use this token to fetch the next page.J\x13\"\"R\rnextPageToken\x12X\n\ntotal_size\x18\x02 \x01(\rB9\x92\x41\x36\x32\x30Total number of API clients in the organization.J\x02\x33\x30R\ttotalSize\x12\xe0\x01\n\x07\x63lients\x18\x03 \x03(\x0b\x32\x1e.scalekit.v1.clients.M2MClientB\xa5\x01\x92\x41\xa1\x01\x32\x9e\x01List of API client objects for the organization. Each client includes its configuration, metadata, and active secrets (without exposing actual secret values).R\x07\x63lients\x12\x9f\x01\n\x0fprev_page_token\x18\x04 \x01(\tBw\x92\x41t2]Pagination token for the previous page of results. Use this token to fetch the previous page.J\x13\"\"R\rprevPageToken:\x88\x01\x92\x41\x84\x01\n\x81\x01*\"List Organization Clients Response2[Response message containing a paginated list of API clients for the specified organization.\"\x83\x03\n\x1f\x44\x65leteOrganizationClientRequest\x12\xb0\x01\n\x0forganization_id\x18\x01 \x01(\tB\x86\x01\x92\x41t2ZUnique identifier of the organization that owns the client. Must start with \'org_\' prefix.J\x16\"org_1231234233424344\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xac\x01\n\tclient_id\x18\x02 \x01(\tB\x8e\x01\x92\x41y2\\Unique identifier of the API client to permanently delete. Must start with \'m2morg_\' prefix.J\x19\"m2morg_1231234233424344\"\xbaH\x0fr\r\x10\x01\x18 :\x07m2morg_R\x08\x63lientId\"\xa5\x01\n\x10GetClientRequest\x12\x90\x01\n\tclient_id\x18\x01 \x01(\tBs\x92\x41g2SUnique identifier of the client resource to retrieve. Must be 1-32 characters long.J\x10\"skc_1234567890\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\"\xf5\x01\n\x11GetClientResponse\x12\xdf\x01\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.clients.ClientB\xa9\x01\x92\x41\xa5\x01\x32\xa2\x01\x43omplete client configuration including authentication settings, redirect URIs, and secrets. This contains all current settings for the requested client resource.R\x06\x63lient\"\xeb\x06\n\x12ListClientsRequest\x12\xf2\x01\n\x14include_plain_secret\x18\x01 \x01(\x08\x42\xbf\x01\x92\x41\xbb\x01\x32\xb1\x01Whether to include plain secret values in the response. Enable only during initial client creation, then store secrets securely. Not available when filtering by ALL client typesJ\x05\x66\x61lseR\x12includePlainSecret\x12\x8a\x01\n\x06\x66ilter\x18\x03 \x01(\x0b\x32..scalekit.v1.clients.ListClientsRequest.FilterBB\x92\x41?2=Filters clients by type: WEB, ENV, WEB_APP, NTV, SPA, or ALL.R\x06\x66ilter\x12]\n\npage_token\x18\x04 \x01(\tB>\x92\x41;2\"Token for the next page of resultsJ\x15\"next_page_token_123\"R\tpageToken\x12\x64\n\tpage_size\x18\x05 \x01(\rBG\x92\x41=27Number of clients per page. Defaults to 10, maximum 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x1a\x87\x02\n\x06\x46ilter\x12\xfc\x01\n\x0b\x63lient_type\x18\x01 \x03(\tB\xda\x01\x92\x41\xd6\x01\x32\xd3\x01\x46ilters clients by type. Valid values: WEB, ENV, WEB_APP, NTV, SPA, ALL. Defaults to WEB. ALL takes precedence and other types are ignored. For resource-specific clients (e.g., M2M), use ListResourceClients API.R\nclientTypeJ\x04\x08\x02\x10\x03\"\xf1\x03\n\x13ListClientsResponse\x12Z\n\ntotal_size\x18\x01 \x01(\rB;\x92\x41\x38\x32\x32Total number of client resources in the workspace.J\x02\x31\x32R\ttotalSize\x12\xc1\x01\n\x07\x63lients\x18\x02 \x03(\x0b\x32\x1b.scalekit.v1.clients.ClientB\x89\x01\x92\x41\x85\x01\x32\x82\x01List of client resource configurations matching the query criteria. Each client includes its metadata and authentication settings.R\x07\x63lients\x12\x65\n\x0fnext_page_token\x18\x03 \x01(\tB=\x92\x41:28Pagination token that retrieves the next page of resultsR\rnextPageToken\x12S\n\x0fprev_page_token\x18\x04 \x01(\tB+\x92\x41(2&Token for the previous page of resultsR\rprevPageToken\"\xed\x01\n\x13\x43reateClientRequest\x12\xd5\x01\n\x06\x63lient\x18\x01 \x01(\x0b\x32!.scalekit.v1.clients.CreateClientB\x99\x01\x92\x41\x8f\x01\x32\x1b\x43lient parameters to createJp{\"post_login_uris\": [\"https://app.example.com/callback\"], \"initiate_login_uri\": \"https://app.example.com/login\"}\xbaH\x03\xc8\x01\x01R\x06\x63lient\"\xc8\x17\n\x0c\x43reateClient\x12\xde\x01\n\x04name\x18\x01 \x01(\tB\xc9\x01\x92\x41\xba\x01\x32\x9e\x01\x41 descriptive name for the API client that helps identify its purpose. This name is displayed in the dashboard and logs. Must be between 1 and 128 characters.J\x17\"My Application Client\"\xbaH\x08r\x03\x18\x80\x01\xc8\x01\x01R\x04name\x12\xd6\x01\n\x0b\x63lient_type\x18\x02 \x01(\tB\xb4\x01\x92\x41\xa5\x01\x32\x99\x01\x43lient application type. Valid values: WEB_APP (web applications), SPA (single-page applications), NTV (native applications including mobile and desktop)J\x07WEB_APP\xbaH\x08r\x03\x18\x80\x01\xc8\x01\x01R\nclientType\x12\xb6\x02\n\x18\x62\x61\x63k_channel_logout_uris\x18\x03 \x03(\tB\xfc\x01\x92\x41\xe9\x01\x32wHTTPS endpoints that receive back-channel logout notifications for application-initiated logout and session management.Jn[\"https://app.example.com/backchannel-logout-internal\", \"https://app.example.com/backchannel-logout-external\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\x15\x62\x61\x63kChannelLogoutUris\x12\xb6\x02\n\x19post_logout_redirect_uris\x18\x04 \x03(\tB\xfa\x01\x92\x41\xe7\x01\x32\x9c\x01\x41llowed URIs for post-logout redirection. These URIs are used when a user is redirected after logout. Must use HTTPS and conform to security specifications.JF[\"https://app.example.com/logged-out\", \"https://app.example.com/home\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\x16postLogoutRedirectUris\x12\xff\x01\n\x12initiate_login_uri\x18\x05 \x01(\tB\xcb\x01\x92\x41\xc7\x01\x32\xa3\x01Pre-configured URI for initiating login flows. This URI is used to start authentication flows programmatically. Must use HTTPS protocol and contain a valid domain.J\x1f\"https://app.example.com/login\"H\x00R\x10initiateLoginUri\x88\x01\x01\x12\xf9\x01\n\x0fpost_login_uris\x18\x06 \x03(\tB\xd0\x01\x92\x41\xbd\x01\x32uList of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\rpostLoginUris\x12g\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x07 \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30R\x11\x61\x63\x63\x65ssTokenExpiry\x12\xb3\x01\n\x06scopes\x18\x08 \x03(\tB\x9a\x01\x92\x41\x96\x01\x32wList of scopes to be attached to this client. These scopes must be a subset of the scopes available in the environment.J\x1b[\"data:read\", \"data:write\"]R\x06scopes\x12\xc6\x01\n\rcustom_claims\x18\t \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\x7f\x92\x41|2zCustom claims to be included in access tokens. Please keep this to the essentials as this increases the size of the token.R\x0c\x63ustomClaims\x12\xf0\x01\n\x1c\x64isallow_scalekit_api_access\x18\n \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x92\x01\x92\x41\x8e\x01\x32\x85\x01If set to true, the client will be restricted from accessing Scalekit APIs directly, enhancing security by limiting its capabilities.J\x04trueR\x19\x64isallowScalekitApiAccess\x12\xe0\x01\n\x0bgrant_types\x18\x0b \x03(\tB\xbe\x01\x92\x41\xba\x01\x32yList of OAuth 2.0 grant types that the client is authorized to use. This defines how the client can obtain access tokens.J=[\"authorization_code\", \"refresh_token\", \"client_credentials\"]R\ngrantTypes\x12\xe1\x01\n\x0c\x65nforce_pkce\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xa1\x01\x92\x41\x9d\x01\x32\x94\x01Whether Proof Key for Code Exchange (PKCE) is required. PKCE mitigates authorization code interception attacks. Defaults to true for public clients.J\x04trueR\x0b\x65nforcePkce:\xd4\x01\x92\x41\xd0\x01\n\x9c\x01*\rCreate Client2\x8a\x01Request message for creating a new API client with specified configuration parameters including redirect URIs and authentication settings.*/\n\x11\x41PI Documentation\x12\x1ahttps://docs.scalekit.com/B\x15\n\x13_initiate_login_uri\"\x8c\x01\n\x14\x43reateClientResponse\x12t\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.clients.ClientB?\x92\x41<2:Created client with all settings reflected in the responseR\x06\x63lient\"\xfa\x03\n\x13UpdateClientRequest\x12}\n\tclient_id\x18\x01 \x01(\tB`\x92\x41T2:Unique identifier of the registered application to update.J\x16\"skc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\x12\x9f\x02\n\x06\x63lient\x18\x02 \x01(\x0b\x32!.scalekit.v1.clients.UpdateClientB\xe3\x01\x92\x41\xd9\x01\x32\x62\x41pplication configuration parameters to update. Contains redirect URIs and authentication settingsJs{\"redirect_uris\": [\"https://app.example.com/callback\"], \"default_redirect_uri\": \"https://app.example.com/callback\"}\xbaH\x03\xc8\x01\x01R\x06\x63lient\x12\x42\n\x04mask\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB\x12\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\x04mask\"\xa0\x1b\n\x0cUpdateClient\x12\x9e\x02\n\rredirect_uris\x18\x02 \x03(\tB\xf8\x01\x92\x41\xe5\x01\x32\x9c\x01List of allowed redirect URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTPS in production environments. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\x0credirectUris\x12\x9b\x02\n\x14\x64\x65\x66\x61ult_redirect_uri\x18\x03 \x01(\tB\xe3\x01\x92\x41\xa7\x01\x32\x80\x01Primary redirect URI used when none is specified in authorization requests. Must exactly match one of the URIs in redirect_uris.J\"\"https://app.example.com/callback\"\xbaH5\xba\x01\x32\n\tvalid_uri\x12\x17uri must be a valid URI\x1a\x0cthis.isUri()H\x00R\x12\x64\x65\x66\x61ultRedirectUri\x88\x01\x01\x12\xc3\x02\n\x18\x62\x61\x63k_channel_logout_uris\x18\x04 \x03(\tB\x89\x02\x92\x41\xf6\x01\x32\x95\x01HTTPS endpoints for receiving back-channel logout notifications. Required for implementing application-initiated logout flows and session management.J\\[\"https://app.example.com/backchannel-logout\", \"https://app.example.com/backchannel-logout\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\x15\x62\x61\x63kChannelLogoutUris\x12\xb6\x02\n\x19post_logout_redirect_uris\x18\x05 \x03(\tB\xfa\x01\x92\x41\xe7\x01\x32\x9c\x01\x41llowed URIs for post-logout redirection. These URIs are used when a user is redirected after logout. Must use HTTPS and conform to security specifications.JF[\"https://app.example.com/logged-out\", \"https://app.example.com/home\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\x16postLogoutRedirectUris\x12\xff\x01\n\x12initiate_login_uri\x18\x06 \x01(\tB\xcb\x01\x92\x41\xc7\x01\x32\xa3\x01Pre-configured URI for initiating login flows. This URI is used to start authentication flows programmatically. Must use HTTPS protocol and contain a valid domain.J\x1f\"https://app.example.com/login\"H\x01R\x10initiateLoginUri\x88\x01\x01\x12\xa3\x02\n\x0fpost_login_uris\x18\x07 \x03(\tB\xfa\x01\x92\x41\xe7\x01\x32\x9e\x01List of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTPS in production environments. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\rpostLoginUris\x12\xd3\x01\n\x04name\x18\x08 \x01(\tB\xbe\x01\x92\x41\xba\x01\x32\x9e\x01\x41 descriptive name for the API client that helps identify its purpose. This name is displayed in the dashboard and logs. Must be between 1 and 128 characters.J\x17\"My Application Client\"R\x04name\x12g\n\x13\x61\x63\x63\x65ss_token_expiry\x18\t \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30R\x11\x61\x63\x63\x65ssTokenExpiry\x12\xb3\x01\n\x06scopes\x18\x0b \x03(\tB\x9a\x01\x92\x41\x96\x01\x32wList of scopes to be attached to this client. These scopes must be a subset of the scopes available in the environment.J\x1b[\"data:read\", \"data:write\"]R\x06scopes\x12\xc6\x01\n\rcustom_claims\x18\x0c \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\x7f\x92\x41|2zCustom claims to be included in access tokens. Please keep this to the essentials as this increases the size of the token.R\x0c\x63ustomClaims\x12\xf0\x01\n\x1c\x64isallow_scalekit_api_access\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x92\x01\x92\x41\x8e\x01\x32\x85\x01If set to true, the client will be restricted from accessing Scalekit APIs directly, enhancing security by limiting its capabilities.J\x04trueR\x19\x64isallowScalekitApiAccess\x12\xe0\x01\n\x0bgrant_types\x18\x0e \x03(\tB\xbe\x01\x92\x41\xba\x01\x32yList of OAuth 2.0 grant types that the client is authorized to use. This defines how the client can obtain access tokens.J=[\"authorization_code\", \"refresh_token\", \"client_credentials\"]R\ngrantTypes\x12\xe1\x01\n\x0c\x65nforce_pkce\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xa1\x01\x92\x41\x9d\x01\x32\x94\x01Whether Proof Key for Code Exchange (PKCE) is required. PKCE mitigates authorization code interception attacks. Defaults to true for public clients.J\x04trueR\x0b\x65nforcePkce:\x81\x02\x92\x41\xfd\x01\n\xbd\x01*\x1bUpdate Client Configuration2\x9d\x01Parameters for updating an API client application\'s configuration. This allows modification of redirect URIs, logout settings, and other security parameters.*;\n\x11\x41PI Documentation\x12&https://docs.scalekit.com/m2m/overviewB\x17\n\x15_default_redirect_uriB\x15\n\x13_initiate_login_uri\"\xa8\x01\n\x14UpdateClientResponse\x12\x8f\x01\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.clients.ClientBZ\x92\x41W2UUpdated application configuration with all current settings reflected in the responseR\x06\x63lient\"\xae\x01\n\x19\x43reateClientSecretRequest\x12\x90\x01\n\tclient_id\x18\x01 \x01(\tBs\x92\x41g2MUnique identifier of the client application for which to create a new secret.J\x16\"skc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\"\xad\x03\n\x1a\x43reateClientSecretResponse\x12\xc6\x01\n\x0cplain_secret\x18\x01 \x01(\tB\xa2\x01\x92\x41\x9e\x01\x32\x84\x01Plaintext secret value. This value is only returned once at creation time and must be stored securely. It cannot be retrieved again.J\x15\"sec_plaintext123456\"R\x0bplainSecret\x12\xc5\x01\n\x06secret\x18\x02 \x01(\x0b\x32!.scalekit.v1.clients.ClientSecretB\x89\x01\x92\x41\x85\x01\x32\x82\x01Metadata about the newly created secret, including its ID, creation time, and status. Does not include the plaintext secret value.R\x06secret\"\x83\x05\n\x19UpdateClientSecretRequest\x12\x8f\x01\n\tclient_id\x18\x01 \x01(\tBr\x92\x41\x66\x32LUnique identifier of the client application containing the secret to update.J\x16\"skc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\x12\xab\x01\n\tsecret_id\x18\x02 \x01(\tB\x8d\x01\x92\x41\x80\x01\x32\x66Unique identifier of the client secret to update. This references a specific secret within the client.J\x16\"sec_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08secretId\x12\xb0\x01\n\x06secret\x18\x03 \x01(\x0b\x32\'.scalekit.v1.clients.UpdateClientSecretBo\x92\x41\x66\x32\x64Updated settings for the secret. Currently supports modifying the secret\'s status (active/inactive).\xbaH\x03\xc8\x01\x01R\x06secret\x12s\n\x04mask\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskBC\x92\x41@2>Specifies which fields to update. System-controlled parameter.R\x04mask\"\xec\x01\n\x12UpdateClientSecret\x12\xd5\x01\n\x06status\x18\x01 \x01(\x0e\x32\'.scalekit.v1.clients.ClientSecretStatusB\x93\x01\x92\x41\x8f\x01\x32\x82\x01Status to set for the client secret. Set to ACTIVE to enable the secret for authentication, or INACTIVE to temporarily disable it.J\x08INACTIVER\x06status\"\xe7\x01\n\x1aUpdateClientSecretResponse\x12\xc8\x01\n\x06secret\x18\x01 \x01(\x0b\x32!.scalekit.v1.clients.ClientSecretB\x8c\x01\x92\x41\x88\x01\x32\x85\x01Updated secret metadata, reflecting the changes made by the update operation. Note that the plaintext secret value is never returned.R\x06secret\"\x85\x01\n\x13\x44\x65leteClientRequest\x12n\n\tclient_id\x18\x01 \x01(\tBQ\x92\x41\x45\x32*Unique identifier of the client to delete.J\x17\"webc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\"\xb3\x02\n\x19\x44\x65leteClientSecretRequest\x12q\n\tclient_id\x18\x01 \x01(\tBT\x92\x41H2.Identifier of the client containing the secretJ\x16\"skc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\x12\xa2\x01\n\tsecret_id\x18\x02 \x01(\tB\x84\x01\x92\x41x2^Unique identifier of the client secret to permanently delete. This operation cannot be undone.J\x16\"sec_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08secretId\"\xd7\"\n\x06\x43lient\x12\xe2\x01\n\x02id\x18\x01 \x01(\tB\xd1\x01\x92\x41\xcd\x01\x32\xb2\x01Unique identifier for the client application. This ID is automatically generated when the client is created and cannot be modified. Used in API requests and authentication flows.J\x16\"skc_1234abcd5678efgh\"R\x02id\x12\xd7\x01\n\x05keyId\x18\x02 \x01(\tB\xc0\x01\x92\x41\xbc\x01\x32\xa1\x01Identifier for the cryptographic key pair used to sign tokens. This key is used for JWT signing operations. Keys can be rotated by generating new client secrets.J\x16\"key_9876zyxw5432vuts\"R\x05keyId\x12\xf0\x01\n\x0b\x63reate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xb2\x01\x92\x41\xae\x01\x32\x8f\x01Timestamp indicating when the client configuration was initially created. This field is automatically set by the server and cannot be modified.J\x1a\"2024-01-05T14:48:00.000Z\"R\ncreateTime\x12\x81\x02\n\x0bupdate_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xc3\x01\x92\x41\xbf\x01\x32\xa0\x01Timestamp of the last modification to the client configuration. This field is automatically updated by the server whenever any aspect of the client is modified.J\x1a\"2024-01-10T09:12:00.000Z\"R\nupdateTime\x12\xd5\x02\n\rredirect_uris\x18\x05 \x03(\tB\xaf\x02\x92\x41\xab\x02\x32\xdb\x01List of allowed redirect URIs for OAuth 2.0 authorization flows. These URIs must use HTTPS protocol in production environments and comply with RFC 6749. Users will be redirected to one of these URIs after authorization.JK[\"https://auth.your-app.com/callback\", \"https://scalekit.example.org/auth\"]R\x0credirectUris\x12\x80\x02\n\x14\x64\x65\x66\x61ult_redirect_uri\x18\x06 \x01(\tB\xcd\x01\x92\x41\xc9\x01\x32\xa0\x01Primary redirect URI used when none is explicitly specified in authorization requests. This URI must exactly match one of the entries in the redirect_uris list.J$\"https://auth.your-app.com/callback\"R\x12\x64\x65\x66\x61ultRedirectUri\x12\xa5\x02\n\x07secrets\x18\x07 \x03(\x0b\x32!.scalekit.v1.clients.ClientSecretB\xe7\x01\x92\x41\xe3\x01\x32\xe0\x01List of client secrets used for authentication. Each secret is stored securely using one-way hashing (bcrypt). The plaintext secret values are only displayed during initial creation and must be stored securely by the client.R\x07secrets\x12\xa3\x02\n\x19post_logout_redirect_uris\x18\x08 \x03(\tB\xe7\x01\x92\x41\xe3\x01\x32\xba\x01\x41llowed URIs for post-logout redirection. These URIs are used when a user is redirected after signing out. Must use HTTPS and conform to OpenID Connect Session Management specifications.J$[\"https://auth.your-app.com/logout\"]R\x16postLogoutRedirectUris\x12\xc9\x02\n\x18\x62\x61\x63k_channel_logout_uris\x18\t \x03(\tB\x8f\x02\x92\x41\x8b\x02\x32\xd8\x01HTTPS endpoint for receiving back-channel logout notifications. This URI is called by the authentication server when a session expires or is terminated. Required for implementing relying party-initiated logout flows.J.\"https://auth.your-app.com/backchannel-logout\"R\x15\x62\x61\x63kChannelLogoutUris\x12\xa0\x02\n\x12initiate_login_uri\x18\n \x01(\tB\xf1\x01\x92\x41\xed\x01\x32\xbf\x01Pre-configured URI for initiating login flows programmatically. This URI must use the HTTPS scheme and contain a valid domain. Used for starting authentication flows without user interaction.J)\"https://auth.your-app.com/initiate-auth\"R\x10initiateLoginUri\x12\xab\x02\n\x0fpost_login_uris\x18\x0b \x03(\tB\x82\x02\x92\x41\xfe\x01\x32\xb3\x01List of allowed redirect URIs for OAuth 2.0 authorization flows. These URIs must use HTTPS protocol in production environments and comply with RFC 6749. Maximum of 5 URIs allowed.JF[\"https://auth.your-app.com/callback\", \"https://dev.example.com/auth\"]R\rpostLoginUris\x12t\n\x04name\x18\x0c \x01(\tB`\x92\x41]2BA descriptive name for the client that helps identify its purpose.J\x17\"My Application Client\"R\x04name\x12l\n\x13\x61\x63\x63\x65ss_token_expiry\x18\r \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30H\x00R\x11\x61\x63\x63\x65ssTokenExpiry\x88\x01\x01\x12g\n\x06scopes\x18\x0e \x03(\tBO\x92\x41L2-List of scopes to be attached to this client.J\x1b[\"data:read\", \"data:write\"]R\x06scopes\x12\xc6\x01\n\rcustom_claims\x18\x0f \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\x7f\x92\x41|2zCustom claims to be included in access tokens. Please keep this to the essentials as this increases the size of the token.R\x0c\x63ustomClaims\x12\x8f\x01\n\x1c\x64isallow_scalekit_api_access\x18\x10 \x01(\x08\x42N\x92\x41K2CIf true, the client will be restricted from accessing Scalekit APIsJ\x04trueR\x19\x64isallowScalekitApiAccess\x12\xaa\x01\n\x0bgrant_types\x18\x11 \x03(\tB\x88\x01\x92\x41\x84\x01\x32\x43List of OAuth 2.0 grant types that the client is authorized to use.J=[\"authorization_code\", \"refresh_token\", \"client_credentials\"]R\ngrantTypes\x12\x66\n\x0b\x63lient_type\x18\x12 \x01(\tBE\x92\x41\x42\x32\x39Type of client. Valid values: WEB, ENV, WEB_APP, NTV, SPAJ\x05\"WEB\"R\nclientType\x12\xc5\x01\n\x0c\x65nforce_pkce\x18\x13 \x01(\x08\x42\xa1\x01\x92\x41\x9d\x01\x32\x94\x01Whether Proof Key for Code Exchange (PKCE) is required. PKCE mitigates authorization code interception attacks. Defaults to true for public clients.J\x04trueR\x0b\x65nforcePkce:\xb3\x01\x92\x41\xaf\x01\n\xac\x01*\x12\x43lient Application2\x95\x01\x43onfiguration for an API client application registered with Scalekit. Contains authentication settings, redirect URIs, and other security parameters.B\x16\n\x14_access_token_expiry\"\xc1\x13\n\x0c\x43lientSecret\x12\xd5\x01\n\x02id\x18\x01 \x01(\tB\xc4\x01\x92\x41\xc0\x01\x32\xa5\x01The unique identifier for this client secret. This ID is used to reference the secret in API requests for management operations like updating or deleting the secret.J\x16\"sec_1234abcd5678efgh\"R\x02id\x12\xd1\x01\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x93\x01\x92\x41\x8f\x01\x32qThe timestamp when this secret was created. This field is automatically set by the server and cannot be modified.J\x1a\"2024-01-05T14:48:00.000Z\"R\ncreateTime\x12\x86\x02\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xc8\x01\x92\x41\xc4\x01\x32\xa5\x01The timestamp when this secret was last updated. This field is automatically updated by the server when the secret\'s status changes or other properties are modified.J\x1a\"2024-01-10T09:12:00.000Z\"R\nupdateTime\x12\x82\x02\n\rsecret_suffix\x18\x04 \x01(\tB\xdc\x01\x92\x41\xd8\x01\x32\xcd\x01\x41 suffix that helps identify this secret. This is the last few characters of the full secret value but is not sufficient for authentication. Helps identify which secret is being used in logs and debugging.J\x06\"xyzw\"R\x0csecretSuffix\x12\xc9\x01\n\ncreated_by\x18\x05 \x01(\tB\xa4\x01\x92\x41\xa0\x01\x32\x8f\x01The identifier of the user or system that created this secret. This field helps track who created the secret for audit and compliance purposes.J\x0c\"user_12345\"H\x00R\tcreatedBy\x88\x01\x01\x12\x86\x02\n\x06status\x18\x06 \x01(\x0e\x32\'.scalekit.v1.clients.ClientSecretStatusB\xc4\x01\x92\x41\xc0\x01\x32\xb1\x01The current status of this secret. A secret must be ACTIVE to be used for authentication. INACTIVE secrets cannot be used for authentication but are retained for audit purposes.J\n\"INACTIVE\"R\x06status\x12\x8c\x02\n\x0b\x65xpire_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xce\x01\x92\x41\xca\x01\x32\xab\x01The timestamp when this secret will expire. After this time, the secret cannot be used for authentication regardless of its status. If not set, the secret does not expire.J\x1a\"2025-01-05T14:48:00.000Z\"R\nexpireTime\x12\xa6\x02\n\x0elast_used_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xe3\x01\x92\x41\xdf\x01\x32\xc0\x01The timestamp when this secret was last used for authentication. This field helps track secret usage for security monitoring and identifying unused secrets that may be candidates for rotation.J\x1a\"2024-02-15T10:30:00.000Z\"R\x0clastUsedTime\x12\xb3\x02\n\x0cplain_secret\x18\t \x01(\tB\x8a\x02\x92\x41\x86\x02\x32\xd7\x01The full plaintext secret value. This field is only populated when the secret is first created and is never stored by the server. It must be securely stored by the client application as it cannot be retrieved again.J*\"sec_1234567890abcdefghijklmnopqrstuvwxyz\"H\x01R\x0bplainSecret\x88\x01\x01:\x93\x01\x92\x41\x8f\x01\n\x8c\x01*\rClient Secret2{A secure credential used for authenticating an API client. Each client can have multiple secrets for key rotation purposes.B\r\n\x0b_created_byB\x0f\n\r_plain_secret\"\xb8\x02\n\x05Scope\x12\xa8\x01\n\x02id\x18\x01 \x01(\tB\x97\x01\x92\x41\x8a\x01\x32tUnique identifier for the scope resource. Must be between 1 and 100 characters long and match the specified pattern.J\x12\"scope_1234567890\"\xbaH\x06r\x04\x10\x01\x18\x64R\x02id\x12\x36\n\x04name\x18\x02 \x01(\tB\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9:]{1,64}$\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\x12 \n\x07\x65nabled\x18\x04 \x01(\x08\x42\x06\xbaH\x03\xc8\x01\x01R\x07\x65nabled\"q\n\x0b\x43reateScope\x12\x36\n\x04name\x18\x01 \x01(\tB\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9:]{1,64}$\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\"\xf3\x01\n\x12\x43reateScopeRequest\x12>\n\x05scope\x18\x01 \x01(\x0b\x32 .scalekit.v1.clients.CreateScopeB\x06\xbaH\x03\xc8\x01\x01R\x05scope\x12\x9c\x01\n\x06\x65nv_id\x18\x02 \x01(\tB\x84\x01\x92\x41x2dUnique identifier of the environment where the scope will be created. Must start with \'env_\' prefix.J\x10\"env_1234567890\"\xbaH\x06r\x04\x10\x00\x18 R\x05\x65nvId\"G\n\x13\x43reateScopeResponse\x12\x30\n\x05scope\x18\x01 \x01(\x0b\x32\x1a.scalekit.v1.clients.ScopeR\x05scope\"\xaa\x01\n\x11ListScopesRequest\x12\x94\x01\n\x06\x65nv_id\x18\x01 \x01(\tB}\x92\x41q2]Unique identifier of the environment for which to list scopes. Must start with \'env_\' prefix.J\x10\"env_1234567890\"\xbaH\x06r\x04\x10\x00\x18 R\x05\x65nvId\"H\n\x12ListScopesResponse\x12\x32\n\x06scopes\x18\x01 \x03(\x0b\x32\x1a.scalekit.v1.clients.ScopeR\x06scopes\"o\n\x12UpdateScopeRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18\x64R\x02id\x12>\n\x05scope\x18\x02 \x01(\x0b\x32 .scalekit.v1.clients.UpdateScopeB\x06\xbaH\x03\xc8\x01\x01R\x05scope\"o\n\x0bUpdateScope\x12*\n\x0b\x64\x65scription\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\x12\x34\n\x07\x65nabled\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x07\x65nabled\"G\n\x13UpdateScopeResponse\x12\x30\n\x05scope\x18\x01 \x01(\x0b\x32\x1a.scalekit.v1.clients.ScopeR\x05scope\"1\n\x12\x44\x65leteScopeRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06:\x04scp_R\x02id\"\xdc\x04\n\x19GetConsentDetailsResponse\x12\x61\n\x08resource\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.clients.ResourceB&\x92\x41#2!Details of the requested resourceR\x08resource\x12[\n\x04user\x18\x02 \x01(\x0b\x32\x19.scalekit.v1.clients.UserB,\x92\x41)2\'Details of the user who granted consentR\x04user\x12r\n\x06\x63lient\x18\x03 \x01(\x0b\x32\".scalekit.v1.clients.ConsentClientB6\x92\x41\x33\x32\x31\x44\x65tails of the client resource requesting consentR\x06\x63lient\x12\x9b\x01\n\x06scopes\x18\x04 \x03(\x0b\x32!.scalekit.v1.clients.ConsentScopeB`\x92\x41]2[List of scopes for which consent was granted. Each scope includes its name and description.R\x06scopes\x12m\n\x0b\x61pplication\x18\x05 \x01(\x0b\x32 .scalekit.v1.clients.ApplicationB)\x92\x41&2$Details of the requested applicationR\x0b\x61pplication\"\xba\x05\n\rConsentClient\x12R\n\x04name\x18\x01 \x01(\tB>\x92\x41;2.Name of the client resource requesting consentJ\t\"VS Code\"R\x04name\x12x\n\x0bprivacy_uri\x18\x02 \x01(\tBW\x92\x41M2,Privacy policy URI of the client applicationJ\x1d\"https://yourapp.com/privacy\"\xbaH\x04r\x02\x18\x64R\nprivacyUri\x12q\n\x07tos_uri\x18\x03 \x01(\tBX\x92\x41M2.Terms of service URI of the client applicationJ\x1b\"https://yourapp.com/terms\"\xbaH\x05r\x03\x18\xd0\x0fR\x06tosUri\x12o\n\tclient_id\x18\x04 \x01(\tBR\x92\x41O2;Unique identifier of the client resource requesting consentJ\x10\"m2m_1234567890\"R\x08\x63lientId\x12\x8e\x01\n\x0cmetadata_uri\x18\x05 \x01(\tBk\x92\x41h2AMetadata URI of the client application - applicable for CIMD onlyJ#\"https://example.com/metadata.json\"R\x0bmetadataUri\x12\x66\n\x08logo_uri\x18\x06 \x01(\tBK\x92\x41H2\"Logo URI of the client applicationJ\"\"https://cdn.example.com/logo.png\"R\x07logoUri\"\\\n\x0c\x43onsentScope\x12 \n\x04name\x18\x01 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\"r\n\x04User\x12j\n\x05\x65mail\x18\x01 \x01(\tBT\x92\x41Q28Email address of the user. Must be a valid email format.J\x15\x61lice.doe@example.comR\x05\x65mail\"\xa2\x02\n\x18RevokeUserConsentRequest\x12\x87\x01\n\tclient_id\x18\x01 \x01(\tBj\x92\x41X2DUnique identifier of the client resource for which to revoke consentJ\x10\"m2m_1234567890\"\xbaH\x0cr\n\x10\x01\x18 :\x04m2m_R\x08\x63lientId\x12|\n\nconsent_id\x18\x02 \x01(\tB]\x92\x41G2/Unique identifier of the user consent to revokeJ\x14\"usrcnst_1234567890\"\xbaH\x10r\x0e\x10\x01\x18 :\x08usrcnst_R\tconsentId\"\x1b\n\x19RevokeUserConsentResponse\"\x9f\x01\n\x1f\x45nsureResourceConnectionRequest\x12|\n\x0bresource_id\x18\x01 \x01(\tB[\x92\x41O24Unique identifier of the client resource to retrieveJ\x17\"app_69388798466720005\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\"\xd4\x01\n EnsureResourceConnectionResponse\x12\xaf\x01\n\nconnection\x18\x01 \x01(\x0b\x32\'.scalekit.v1.clients.ResourceConnectionBf\x92\x41]2[Details of the connection resource. Contains configuration settings and status information.\xbaH\x03\xc8\x01\x01R\nconnection\"\xb0\x07\n\x12ResourceConnection\x12T\n\x02id\x18\x01 \x01(\tBD\x92\x41\x41\x32,Unique identifier of the connection resourceJ\x11\"conn_1234567890\"R\x02id\x12\xa1\x01\n\x04type\x18\x02 \x01(\x0e\x32+.scalekit.v1.clients.ResourceConnectionTypeB`\x92\x41]2QType of connection. Determines the authentication method used for the connection.J\x08\"CUSTOM\"R\x04type\x12\x94\x01\n\x06status\x18\x03 \x01(\tB|\x92\x41y2mCurrent status of the connection. Indicates whether the connection is active, inactive, or in an error state.J\x08\"ACTIVE\"R\x06status\x12\x89\x01\n\x07\x65nabled\x18\x04 \x01(\x08\x42o\x92\x41l2dIndicates whether the connection is enabled. Disabled connections cannot be used for authentication.J\x04trueR\x07\x65nabled\x12\xe7\x01\n\x08settings\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructB\xb1\x01\x92\x41\xad\x01\x32kConfiguration settings for the connection. The structure of this field varies based on the connection type.J>{\"api_key\": \"abcd1234\", \"endpoint\": \"https://api.example.com\"}R\x08settings\x12\x92\x01\n\x08provider\x18\x06 \x01(\tBv\x92\x41s2^The provider of the connection. Indicates the service or platform that manages the connection.J\x11\"custom_provider\"R\x08provider\"\xdc\x01\n ResourceCustomConnectionSettings\x12\xb7\x01\n\rauthorize_uri\x18\x01 \x01(\tB\x91\x01\x92\x41\x83\x01\x32[The URI where users are redirected to authorize the application. Must be a valid HTTPS URL.J$\"https://auth.example.com/authorize\"\xbaH\x07r\x05\x10\x01\x88\x01\x01R\x0c\x61uthorizeUri*k\n\x0cResourceType\x12\x1d\n\x19RESOURCE_TYPE_UNSPECIFIED\x10\x00\x12\x07\n\x03WEB\x10\x01\x12\n\n\x06MOBILE\x10\x02\x12\x0b\n\x07\x44\x45SKTOP\x10\x03\x12\n\n\x06SERVER\x10\x04\x12\x0e\n\nMCP_SERVER\x10\x05*.\n\x12\x43lientSecretStatus\x12\n\n\x06\x41\x43TIVE\x10\x00\x12\x0c\n\x08INACTIVE\x10\x01*1\n\x16ResourceConnectionType\x12\x0b\n\x07INVALID\x10\x00\x12\n\n\x06\x43USTOM\x10\x01\x32\xb9\x8a\x01\n\rClientService\x12\xa0\x03\n\nListClient\x12\'.scalekit.v1.clients.ListClientsRequest\x1a(.scalekit.v1.clients.ListClientsResponse\"\xbe\x02\x92\x41\x8e\x02\n\x08\x41PI Auth\x12\x10List API clients\x1a\x90\x01Retrieves a paginated list of API client applications in the environment. Returns only environment-level clients, not resource-specific clients.J]\n\x03\x32\x30\x30\x12V\n&List of clients returned successfully.\x12,\n*\x1a(.scalekit.v1.clients.ListClientsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x11\x12\x0f/api/v1/clients\x12\xb4\x03\n\x0c\x43reateClient\x12(.scalekit.v1.clients.CreateClientRequest\x1a).scalekit.v1.clients.CreateClientResponse\"\xce\x02\x92\x41\x96\x02\n\x06\x43lient\x12\rCreate Client\x1a\x81\x01\x43reates an OAuth client with properties including post-login URIs, scopes, and custom claims. Required fields: name, client_type.Jy\n\x03\x32\x30\x30\x12r\nAClient created successfully. Returns the created client resource.\x12-\n+\x1a).scalekit.v1.clients.CreateClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\"\x0f/api/v1/clients:\x06\x63lient\x12\xd0\x04\n\tGetClient\x12%.scalekit.v1.clients.GetClientRequest\x1a&.scalekit.v1.clients.GetClientResponse\"\xf3\x03\x92\x41\xb7\x03\n\x0e\x43lient Configs\x12\x18Get Client Configuration\x1a\xc5\x01Retrieves complete client configuration including scopes, custom claims, redirect URIs, and access token expiration time. Use this endpoint to view or verify client settings and security parametersJ\xc2\x01\n\x03\x32\x30\x30\x12\xba\x01\n\x8b\x01\x43lient configuration retrieved successfully. Returns full client metadata including scopes, audience, custom claims, and security settings.\x12*\n(\x1a&.scalekit.v1.clients.GetClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1d\x12\x1b/api/v1/clients/{client_id}\x12\xc3\x05\n\x0cUpdateClient\x12(.scalekit.v1.clients.UpdateClientRequest\x1a).scalekit.v1.clients.UpdateClientResponse\"\xdd\x04\x92\x41\x99\x04\n\x0e\x43lient Configs\x12\x1bUpdate Client Configuration\x1a\xb0\x02Updates the configuration settings for an M2M client. This endpoint allows you to modify client properties such as redirect URIs, scopes, audience, and custom claims. Required fields include redirect_uris and default_redirect_uri. Note that client_id and create_time are immutable and cannot be modified.J\xb6\x01\n\x03\x32\x30\x31\x12\xae\x01\n}Client configuration updated successfully. Returns the updated client resource with new update_time and all current settings.\x12-\n+\x1a).scalekit.v1.clients.UpdateClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%2\x1b/api/v1/clients/{client_id}:\x06\x63lient\x12\x9a\x03\n\x0c\x44\x65leteClient\x12(.scalekit.v1.clients.DeleteClientRequest\x1a\x16.google.protobuf.Empty\"\xc7\x02\x92\x41\x8b\x02\n\x06\x43lient\x12\rDelete Client\x1a\xb2\x01Permanently deletes a client and associated secrets. This operation cannot be undone. Supports WEB_APP, NTV, and SPA client types only. Cannot delete default environment clients.J=\n\x03\x32\x30\x30\x12\x36\n4Client successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1d*\x1b/api/v1/clients/{client_id}\x12\xa4\x05\n\x12\x43reateClientSecret\x12..scalekit.v1.clients.CreateClientSecretRequest\x1a/.scalekit.v1.clients.CreateClientSecretResponse\"\xac\x04\x92\x41\xe8\x03\n\x0e\x43lient Configs\x12\x14\x43reate Client Secret\x1a\x82\x02Generates a new client secret for an API client. This endpoint creates a secure credential that can be used for OAuth 2.0 client credentials flow. The plain secret is only returned once during creation and should be stored securely by the client application.J\xba\x01\n\x03\x32\x30\x31\x12\xb2\x01\n{Client secret created successfully. Returns the new secret ID and the plain secret value (only available at creation time).\x12\x33\n1\x1a/.scalekit.v1.clients.CreateClientSecretResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\"#/api/v1/clients/{client_id}/secrets\x12\xca\x05\n\x12UpdateClientSecret\x12..scalekit.v1.clients.UpdateClientSecretRequest\x1a/.scalekit.v1.clients.UpdateClientSecretResponse\"\xd2\x04\x92\x41\xbf\x03\n\x0e\x43lient Configs\x12\x14Update Client Secret\x1a\xfd\x01Updates the status of a client secret. This endpoint allows you to activate or deactivate a client secret. Use this to rotate secrets or revoke access for compromised credentials. The secret value itself cannot be modified - create a new secret instead.J\x96\x01\n\x03\x32\x30\x30\x12\x8e\x01\nWClient secret updated successfully. Returns the updated secret with its current status.\x12\x33\n1\x1a/.scalekit.v1.clients.UpdateClientSecretResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02t\x1a//api/v1/clients/{client_id}/secrets/{secret_id}:\x06secretZ92//api/v1/clients/{client_id}/secrets/{secret_id}:\x06secret\x12\xe3\x03\n\x12\x44\x65leteClientSecret\x12..scalekit.v1.clients.DeleteClientSecretRequest\x1a\x16.google.protobuf.Empty\"\x84\x03\x92\x41\xb4\x02\n\x0e\x43lient Configs\x12\x14\x44\x65lete Client Secret\x1a\xc5\x01Permanently deletes a client secret. This operation cannot be undone. Use this endpoint to remove compromised or unused secrets. After deletion, the secret can no longer be used for authentication.JD\n\x03\x32\x30\x30\x12=\n;Client secret successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31*//api/v1/clients/{client_id}/secrets/{secret_id}\x12\x92\x05\n\x18\x43reateOrganizationClient\x12\x34.scalekit.v1.clients.CreateOrganizationClientRequest\x1a\x35.scalekit.v1.clients.CreateOrganizationClientResponse\"\x88\x04\x92\x41\xbf\x03\n\x08\x41PI Auth\x12\x1e\x43reate organization API client\x1arCreates a new API client for an organization. Returns the client details and a plain secret (available only once).J\x9e\x02\n\x03\x32\x30\x31\x12\x96\x02\n\xd8\x01\x41PI client created successfully. Returns the client ID and plain secret (only available at creation time). The client can be configured with scopes, audience values, and custom claims for fine-grained access control.\x12\x39\n7\x1a\x35.scalekit.v1.clients.CreateOrganizationClientResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x39\"//api/v1/organizations/{organization_id}/clients:\x06\x63lient\x12\xb5\x04\n\x15GetOrganizationClient\x12\x31.scalekit.v1.clients.GetOrganizationClientRequest\x1a\x32.scalekit.v1.clients.GetOrganizationClientResponse\"\xb4\x03\x92\x41\xe7\x02\n\x08\x41PI Auth\x12\x1bGet organization API client\x1a>Retrieves details of a specific API client in an organization.J\xfd\x01\n\x03\x32\x30\x30\x12\xf5\x01\n\xba\x01Returns the complete API client configuration, including all current settings and a list of active secrets. Note that secret values are not included in the response for security reasons.\x12\x36\n4\x1a\x32.scalekit.v1.clients.GetOrganizationClientResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02=\x12;/api/v1/organizations/{organization_id}/clients/{client_id}\x12\x89\x05\n\x1e\x43reateOrganizationClientSecret\x12:.scalekit.v1.clients.CreateOrganizationClientSecretRequest\x1a;.scalekit.v1.clients.CreateOrganizationClientSecretResponse\"\xed\x03\x92\x41\x98\x03\n\x08\x41PI Auth\x12%Create organization API client secret\x1a\x64\x43reates a new secret for an organization API client. Returns the plain secret (available only once).J\xfe\x01\n\x03\x32\x30\x31\x12\xf6\x01\n\xb2\x01\x43lient secret created successfully. Returns the new secret ID and the plain secret value (only available at creation time). The secret can be used immediately for authentication.\x12?\n=\x1a;.scalekit.v1.clients.CreateOrganizationClientSecretResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x45\"C/api/v1/organizations/{organization_id}/clients/{client_id}/secrets\x12\xaf\x03\n\x1e\x44\x65leteOrganizationClientSecret\x12:.scalekit.v1.clients.DeleteOrganizationClientSecretRequest\x1a\x16.google.protobuf.Empty\"\xb8\x02\x92\x41\xd7\x01\n\x08\x41PI Auth\x12%Delete organization API client secret\x1a^Permanently deletes a secret from an organization API client. This operation cannot be undone.JD\n\x03\x32\x30\x30\x12=\n;Client secret successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02Q*O/api/v1/organizations/{organization_id}/clients/{client_id}/secrets/{secret_id}\x12\xc2\x04\n\x18UpdateOrganizationClient\x12\x34.scalekit.v1.clients.UpdateOrganizationClientRequest\x1a\x35.scalekit.v1.clients.UpdateOrganizationClientResponse\"\xb8\x03\x92\x41\xe3\x02\n\x08\x41PI Auth\x12\x1eUpdate organization API client\x1aPUpdates an existing organization API client. Only specified fields are modified.J\xe4\x01\n\x03\x32\x30\x30\x12\xdc\x01\n\x9e\x01Returns the updated organization API client with all current details reflected in the response, including modified scopes, audience values, and custom claims.\x12\x39\n7\x1a\x35.scalekit.v1.clients.UpdateOrganizationClientResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x45\x32;/api/v1/organizations/{organization_id}/clients/{client_id}:\x06\x63lient\x12\xa3\x04\n\x18\x44\x65leteOrganizationClient\x12\x34.scalekit.v1.clients.DeleteOrganizationClientRequest\x1a\x16.google.protobuf.Empty\"\xb8\x03\x92\x41\xeb\x02\n\x08\x41PI Auth\x12\x1e\x44\x65lete organization API client\x1a\xee\x01Permanently deletes an API client from an organization. This operation cannot be undone and will revoke all access for the client. All associated secrets will also be invalidated. Use this endpoint to remove unused or compromised clients.JN\n\x03\x32\x30\x30\x12G\nEOrganization API client successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02=*;/api/v1/organizations/{organization_id}/clients/{client_id}\x12\xe8\x04\n\x17ListOrganizationClients\x12\x33.scalekit.v1.clients.ListOrganizationClientsRequest\x1a\x34.scalekit.v1.clients.ListOrganizationClientsResponse\"\xe1\x03\x92\x41\xa0\x03\n\x08\x41PI Auth\x12\x1dList organization API clients\x1a\xb9\x01Retrieves a paginated list of API clients for a specific organization. Returns client details including metadata, scopes, and secret information (without exposing actual secret values).J\xb8\x01\n\x03\x32\x30\x30\x12\xb0\x01\ntList of organization API clients returned successfully. Each client includes its configuration details and metadata.\x12\x38\n6\x1a\x34.scalekit.v1.clients.ListOrganizationClientsResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x31\x12//api/v1/organizations/{organization_id}/clients\x12\x95\x03\n\x0e\x43reateResource\x12*.scalekit.v1.clients.CreateResourceRequest\x1a+.scalekit.v1.clients.CreateResourceResponse\"\xa9\x02\x92\x41\xed\x01\n\x08\x41PI Auth\x12\x0f\x43reate Resource\x1aXCreates a new client resource. The response includes the resource ID and other metadata.Jv\n\x03\x32\x30\x31\x12o\nResource details retrieved successfully. Returns the resource.\x12,\n*\x1a(.scalekit.v1.clients.GetResourceResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\x12\x1f/api/v1/resources/{resource_id}\x12\xd3\x02\n\rListResources\x12).scalekit.v1.clients.ListResourcesRequest\x1a*.scalekit.v1.clients.ListResourcesResponse\"\xea\x01\x92\x41\xb8\x01\n\x08\x41PI Auth\x12\x11List applications\x1a\x36Retrieves a paginated list of API client applications.Ja\n\x03\x32\x30\x30\x12Z\n(List of resources returned successfully.\x12.\n,\x1a*.scalekit.v1.clients.ListResourcesResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x13\x12\x11/api/v1/resources\x12\x93\x03\n\x0eUpdateResource\x12*.scalekit.v1.clients.UpdateResourceRequest\x1a+.scalekit.v1.clients.UpdateResourceResponse\"\xa7\x02\x92\x41\xdd\x01\n\x08\x41PI Auth\x12\x0fUpdate Resource\x1aHUpdates an existing client resource. Only specified fields are modified.Jv\n\x03\x32\x30\x30\x12o\nResource details retrieved successfully. Returns the resource.\x12,\n*\x1a(.scalekit.v1.clients.GetResourceResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\x1a//api/v1/resources/{resource_id}/provider:delete\x12\xf5\x03\n\x14\x43reateResourceClient\x12\x30.scalekit.v1.clients.CreateResourceClientRequest\x1a\x31.scalekit.v1.clients.CreateResourceClientResponse\"\xf7\x02\x92\x41\xa7\x02\n\x08\x41PI Auth\x12\x16\x43reate Resource Client\x1apCreates a new API client under the specified resource. Returns client details and the plain secret (shown once).J\x90\x01\n\x03\x32\x30\x31\x12\x88\x01\nOClient created successfully. Returns the client configuration and plain secret.\x12\x35\n3\x1a\x31.scalekit.v1.clients.CreateResourceClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\"\'/api/v1/resources/{resource_id}/clients:\x06\x63lient\x12\xcf\x03\n\x14UpdateResourceClient\x12\x30.scalekit.v1.clients.UpdateResourceClientRequest\x1a\x31.scalekit.v1.clients.UpdateResourceClientResponse\"\xd1\x02\x92\x41\xf5\x01\n\x08\x41PI Auth\x12\x16Update Resource Client\x1aHUpdates the configuration of an API client under the specified resource.J\x86\x01\n\x03\x32\x30\x30\x12\x7f\nFClient updated successfully. Returns the updated client configuration.\x12\x35\n3\x1a\x31.scalekit.v1.clients.UpdateResourceClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02=23/api/v1/resources/{resource_id}/clients/{client_id}:\x06\x63lient\x12\xce\x03\n\x11GetResourceClient\x12-.scalekit.v1.clients.GetResourceClientRequest\x1a..scalekit.v1.clients.GetResourceClientResponse\"\xd9\x02\x92\x41\x85\x02\n\x08\x41PI Auth\x12\x17Get Resource API Client\x1aJRetrieves details of a specific API client associated with an application.J\x93\x01\n\x03\x32\x30\x30\x12\x8b\x01\nUClient details retrieved successfully. Returns the resource and client configuration.\x12\x32\n0\x1a..scalekit.v1.clients.GetResourceClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x35\x12\x33/api/v1/resources/{resource_id}/clients/{client_id}\x12\xe7\x03\n\x13ListResourceClients\x12/.scalekit.v1.clients.ListResourceClientsRequest\x1a\x30.scalekit.v1.clients.ListResourceClientsResponse\"\xec\x02\x92\x41\xa4\x02\n\x08\x41PI Auth\x12\x19List Resource API Clients\x1aPRetrieves a list of API clients associated with a specific application resource.J\xaa\x01\n\x03\x32\x30\x30\x12\xa2\x01\njList of clients retrieved successfully. Returns the resource details and associated client configurations.\x12\x34\n2\x1a\x30.scalekit.v1.clients.ListResourceClientsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)\x12\'/api/v1/resources/{resource_id}/clients\x12\xcb\x03\n\x18ListResourceUserConsents\x12\x34.scalekit.v1.clients.ListResourceUserConsentsRequest\x1a\x35.scalekit.v1.clients.ListResourceUserConsentsResponse\"\xc1\x02\x92\x41\x8b\x02\n\x08\x41PI Auth\x12!List user consents for a resource\x1ajRetrieves a paginated list of user consents for a given resource, with optional search by external user IDJp\n\x03\x32\x30\x30\x12i\n,List of user consents retrieved successfully\x12\x39\n7\x1a\x35.scalekit.v1.clients.ListResourceUserConsentsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x17\x12\x15/api/v1/user_consents\x12\x87\x03\n\x14\x44\x65leteResourceClient\x12\x30.scalekit.v1.clients.DeleteResourceClientRequest\x1a\x31.scalekit.v1.clients.DeleteResourceClientResponse\"\x89\x02\x92\x41\xb5\x01\n\x08\x41PI Auth\x12\x16\x44\x65lete Resource Client\x1a\x33\x44\x65letes an API client under the specified resource.J\\\n\x03\x32\x30\x30\x12U\n\x1c\x43lient deleted successfully.\x12\x35\n3\x1a\x31.scalekit.v1.clients.DeleteResourceClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x35*3/api/v1/resources/{resource_id}/clients/{client_id}\x12\x82\x04\n\x0eRegisterClient\x12*.scalekit.v1.clients.RegisterClientRequest\x1a+.scalekit.v1.clients.RegisterClientResponse\"\x96\x03\x92\x41\xc2\x02\n\x08\x41PI Auth\x12\x13Register API client\x1a\x84\x01Registers a new API client under an existing resource using dynamic client registration. Returns the created client and its secrets.J\x99\x01\n\x03\x32\x30\x31\x12\x91\x01\n^Client registered successfully. Returns client details and plain secret (available only once).\x12/\n-\x1a+.scalekit.v1.clients.RegisterClientResponse\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x35\"+/api/v1/resources/{res_id}/clients:register:\x06\x63lient\x12\xb6\x05\n\x0b\x43reateScope\x12\'.scalekit.v1.clients.CreateScopeRequest\x1a(.scalekit.v1.clients.CreateScopeResponse\"\xd3\x04\x88\x02\x01\x92\x41\xeb\x03\x12\x19\x43reate scope (Deprecated)\x1a\xa1\x02\x44\x45PRECATED: Use permission management APIs instead. Creates a new OAuth scope for API authorization. Scopes define the level of access granted to API clients. Reserved OpenID Connect scopes (profile, email, address, phone) cannot be created as they are automatically managed by the system.J\xa9\x01\n\x03\x32\x30\x31\x12\xa1\x01\nqOAuth scope created successfully. Returns the newly created scope with its name, description, and enabled status.\x12,\n*\x1a(.scalekit.v1.clients.CreateScopeResponse\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x46\"\x0e/api/v1/scopes:\x05scopeZ-\"$/api/v1/environments/{env_id}/scopes:\x05scope\x12\xe9\x03\n\nListScopes\x12&.scalekit.v1.clients.ListScopesRequest\x1a\'.scalekit.v1.clients.ListScopesResponse\"\x89\x03\x92\x41\xb2\x02\x12\x0bList scopes\x1a\x7fRetrieves all OAuth scopes configured for the environment. Returns both custom scopes and system-managed OpenID Connect scopes.J\xa1\x01\n\x03\x32\x30\x30\x12\x99\x01\njList of OAuth scopes returned successfully. Each scope includes its name, description, and enabled status.\x12+\n)\x1a\'.scalekit.v1.clients.ListScopesResponse\x82\xb5\x18\x02\x18`\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x38\x12\x0e/api/v1/scopesZ&\x12$/api/v1/environments/{env_id}/scopes\x12\xaf\x04\n\x0bUpdateScope\x12\'.scalekit.v1.clients.UpdateScopeRequest\x1a(.scalekit.v1.clients.UpdateScopeResponse\"\xcc\x03\x88\x02\x01\x92\x41\x8e\x03\x12\x19Update scope (Deprecated)\x1a\xe0\x01\x44\x45PRECATED: Use permission management APIs instead. Updates an existing OAuth scope\'s description and enabled status. Reserved OpenID Connect scopes (profile, email, address, phone) cannot be modified through this endpoint.J\x8d\x01\n\x03\x32\x30\x30\x12\x85\x01\nUOAuth scope updated successfully. Returns the updated scope with all current details.\x12,\n*\x1a(.scalekit.v1.clients.UpdateScopeResponse\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1c\x32\x13/api/v1/scopes/{id}:\x05scope\x12\xe0\x03\n\x0b\x44\x65leteScope\x12\'.scalekit.v1.clients.DeleteScopeRequest\x1a\x16.google.protobuf.Empty\"\x8f\x03\x88\x02\x01\x92\x41\xd8\x02\x12\x19\x44\x65lete scope (Deprecated)\x1a\xf6\x01\x44\x45PRECATED: Use permission management APIs instead. Permanently deletes an OAuth scope from the environment. This operation cannot be undone. Reserved OpenID Connect scopes (profile, email, address, phone) cannot be deleted through this endpoint.JB\n\x03\x32\x30\x30\x12;\n9OAuth scope successfully deleted and no longer accessible\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15*\x13/api/v1/scopes/{id}\x12\x97\x01\n\x11GetConsentDetails\x12\x16.google.protobuf.Empty\x1a..scalekit.v1.clients.GetConsentDetailsResponse\":\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1f\x12\x1d/api/v1/oauth/consent/details\x12\xc2\x01\n\x11RevokeUserConsent\x12-.scalekit.v1.clients.RevokeUserConsentRequest\x1a..scalekit.v1.clients.RevokeUserConsentResponse\"N\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x33*1/api/v1/clients/{client_id}/consents/{consent_id}\x12\xea\x03\n\x18\x45nsureResourceConnection\x12\x34.scalekit.v1.clients.EnsureResourceConnectionRequest\x1a\x35.scalekit.v1.clients.EnsureResourceConnectionResponse\"\xe0\x02\x92\x41\x91\x02\n\x08\x41PI Auth\x12!Get or Create Resource Connection\x1aSRetrieves an existing resource connection or creates a new one if it doesn\'t exist.J\x8c\x01\n\x03\x32\x30\x30\x12\x84\x01\nBReturns the existing or newly created resource connection details.\x12>\n<\x1a:.scalekit.v1.clients.GetOrCreateResourceConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x30\"+/api/v1/resources/{resource_id}/connections:\x01*\x1a\xb8\x03\x92\x41\xb4\x03\n\x08\x41PI Auth\x12\xfd\x02\x45ndpoints for managing API client applications. API clients enable secure, automated interactions between software systems without human intervention. Each client is uniquely identified by a `client_id` and can be configured with authentication settings, redirect URIs, and security parameters. Use these endpoints to create, manage, and configure API clients for your API clients.\x1a(\x12&https://docs.scalekit.com/m2m/overviewB3Z1github.com/scalekit-inc/scalekit/pkg/grpc/clientsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/clients/clients.proto\x12\x13scalekit.v1.clients\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a)scalekit/v1/connections/connections.proto\x1a!scalekit/v1/options/options.proto\"\x8a\x01\n\x15\x43reateResourceRequest\x12q\n\x08resource\x18\x01 \x01(\x0b\x32#.scalekit.v1.clients.CreateResourceB0\x92\x41\'2%Details of the resource to be created\xbaH\x03\xc8\x01\x01R\x08resource\"\x8e\r\n\x0e\x43reateResource\x12|\n\rresource_type\x18\x01 \x01(\x0e\x32!.scalekit.v1.clients.ResourceTypeB4\x92\x41+2\"Type of the resource to be createdJ\x05\"WEB\"\xbaH\x03\xc8\x01\x01R\x0cresourceType\x12K\n\x04name\x18\x02 \x01(\tB7\x92\x41)2\x14Name of the resourceJ\x11\"My API Resource\"\xbaH\x08r\x03\x18\x80\x01\xc8\x01\x01R\x04name\x12\x86\x01\n\x0b\x64\x65scription\x18\x03 \x01(\tBd\x92\x41Y2\x1b\x44\x65scription of the resourceJ:\"Resource for accessing your organization\'s API resources\"\xbaH\x05r\x03\x18\x80\x04R\x0b\x64\x65scription\x12\xab\x01\n\x0cresource_uri\x18\x04 \x01(\tB\x87\x01\x92\x41\x83\x01\x32\x61Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"R\x0bresourceUri\x12g\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x05 \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30R\x11\x61\x63\x63\x65ssTokenExpiry\x12k\n\x14refresh_token_expiry\x18\x06 \x01(\x03\x42\x39\x92\x41\x36\x32-Expiry time in seconds for the refresh token.J\x05\x38\x36\x34\x30\x30R\x12refreshTokenExpiry\x12\x9f\x01\n#disable_dynamic_client_registration\x18\x07 \x01(\x08\x42P\x92\x41M2EIndicates if dynamic client registration is allowed for this resourceJ\x04trueR disableDynamicClientRegistration\x12\x61\n\x08logo_uri\x18\x08 \x01(\tBF\x92\x41;2\x19Logo URI for the resourceJ\x1e\"https://example.com/logo.png\"\xbaH\x05r\x03\x18\x80\x04R\x07logoUri\x12X\n\x08provider\x18\t \x01(\tB<\x92\x41\x31\x32$Connection provider for the resourceJ\t\"DESCOPE\"\xbaH\x05r\x03\x18\x80\x04R\x08provider\x12\xa9\x01\n\x0bresource_id\x18\n \x01(\tB\x87\x01\x92\x41\x83\x01\x32\x61Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"R\nresourceId\x12i\n\x06scopes\x18\x0b \x03(\tBQ\x92\x41N21List of OAuth scopes associated with the resourceJ\x19[\"usr:read\", \"usr:write\"]R\x06scopes\x12\xac\x01\n intersect_scopes_user_permission\x18\x0c \x01(\x08\x42\x63\x92\x41`2XIndicates if the scopes should be intersected with user permissions for granular controlJ\x04trueR\x1dintersectScopesUserPermission\x12\x7f\n\x0b\x65nable_cimd\x18\r \x01(\x08\x42^\x92\x41[2RSpecifies whether Client ID Metadata Document (CIMD) is activated for the resourceJ\x05\x66\x61lseR\nenableCimd\"\x8c\x06\n\x0eResourceClient\x12\x44\n\x04name\x18\x01 \x01(\tB0\x92\x41%2\x12Name of the clientJ\x0f\"My API Client\"\xbaH\x05r\x03\x18\x80\x01R\x04name\x12\x82\x01\n\x0b\x64\x65scription\x18\x02 \x01(\tB`\x92\x41U2\x19\x44\x65scription of the clientJ8\"Client for accessing your organization\'s API resources\"\xbaH\x05r\x03\x18\x80\x04R\x0b\x64\x65scription\x12\x38\n\x06scopes\x18\x03 \x03(\tB \x92\x41\x1d\x32\x1bOAuth scopes for the clientR\x06scopes\x12\x62\n\x08\x61udience\x18\x04 \x03(\tBF\x92\x41\x43\x32$OAuth audience values for the clientJ\x1b[\"https://api.example.com\"]R\x08\x61udience\x12\xc6\x01\n\rcustom_claims\x18\x05 \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\x7f\x92\x41|2zCustom claims to be included in access tokens. Please keep this to the essentials as this increases the size of the token.R\x0c\x63ustomClaims\x12_\n\x06\x65xpiry\x18\x06 \x01(\x03\x42G\x92\x41\x44\x32\"https://example.com/.well-known/oauth-protected-resource/mcp\"R\x14protectedMetadataUri\x12\xb2\x01\n\x0bresource_id\x18\x0f \x01(\tB\x90\x01\x92\x41\x84\x01\x32\x62Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"\xbaH\x05r\x03\x18\x80\x04R\nresourceId\x12\xfb\x01\n\x06scopes\x18\x10 \x03(\x0b\x32\x1a.scalekit.v1.clients.ScopeB\xc6\x01\x92\x41\xc2\x01\x32OList of OAuth scopes associated with the resource with enabled or disabled flagJo[{\"id\": \"perm_\", \"name\": \"usr:read\", \"description\": \"Reading basic information of the users\", \"enabled\": true}]R\x06scopes\x12\xc3\x01\n\x12\x63onnection_details\x18\x11 \x01(\x0b\x32\'.scalekit.v1.clients.ResourceConnectionBk\x92\x41\x65\x32\x63\x44\x65tails of the own auth connection if any. For full stack this field will be empty or not populated\xe0\x41\x03R\x11\x63onnectionDetails\x12\x91\x01\n\x1a\x64isallow_connection_update\x18\x12 \x01(\x08\x42S\x92\x41M2DIndicates if updating the connection is disallowed for this resourceJ\x05\x66\x61lse\xe0\x41\x03R\x18\x64isallowConnectionUpdate\x12\xac\x01\n intersect_scopes_user_permission\x18\x13 \x01(\x08\x42\x63\x92\x41`2XIndicates if the scopes should be intersected with user permissions for granular controlJ\x04trueR\x1dintersectScopesUserPermission\x12\x7f\n\x0b\x65nable_cimd\x18\x14 \x01(\x08\x42^\x92\x41[2RSpecifies whether Client ID Metadata Document (CIMD) is activated for the resourceJ\x05\x66\x61lseR\nenableCimd\"\xf2\x01\n\x15RegisterClientRequest\x12i\n\x06res_id\x18\x01 \x01(\tBR\x92\x41\x43\x32(Unique identifier of the client resourceJ\x17\"app_69388798466720005\"\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x05resId\x12n\n\x06\x63lient\x18\x02 \x01(\x0b\x32#.scalekit.v1.clients.RegisterClientB1\x92\x41(2&Details of the client to be registered\xbaH\x03\xc8\x01\x01R\x06\x63lient\"\x96\x06\n\x0eRegisterClient\x12Q\n\x0b\x63lient_name\x18\x01 \x01(\tB0\x92\x41%2\x12Name of the clientJ\x0f\"My API Client\"\xbaH\x05r\x03\x18\x80\x01R\nclientName\x12\x82\x01\n\x0b\x64\x65scription\x18\x02 \x01(\tB`\x92\x41U2\x19\x44\x65scription of the clientJ8\"Client for accessing your organization\'s API resources\"\xbaH\x05r\x03\x18\x80\x04R\x0b\x64\x65scription\x12g\n\rredirect_uris\x18\x03 \x03(\tBB\x92\x41?2\x1bRedirect URI for the clientJ [\"https://example.com/callback\"]R\x0credirectUris\x12Y\n\x05scope\x18\x04 \x01(\tBC\x92\x41@2\x1bOAuth scopes for the clientJ![\"read:users\", \"write:resources\"]R\x05scope\x12T\n\nclient_uri\x18\x05 \x01(\tB5\x92\x41\x32\x32\x19\x43lient URI for the clientJ\x15\"https://example.com\"R\tclientUri\x12W\n\x08logo_uri\x18\x06 \x01(\tB<\x92\x41\x39\x32\x17Logo URI for the clientJ\x1e\"https://example.com/logo.png\"R\x07logoUri\x12\\\n\x07tos_uri\x18\x07 \x01(\tBC\x92\x41@2#Terms of Service URI for the clientJ\x19\"https://example.com/tos\"R\x06tosUri\x12[\n\npolicy_uri\x18\x08 \x01(\tB<\x92\x41\x39\x32\x19Policy URI for the clientJ\x1c\"https://example.com/policy\"R\tpolicyUri\"\xb9\x17\n\x16RegisterClientResponse\x12\xfc\x01\n\tclient_id\x18\x01 \x01(\tB\xde\x01\x92\x41\xda\x01\x32\xbc\x01The unique identifier for this M2M client. This ID is used to identify the client in API requests and logs. It is automatically generated when the client is created and cannot be modified.J\x19\"m2morg_1231234233424344\"R\x08\x63lientId\x12\xb3\x02\n\x07secrets\x18\x02 \x03(\x0b\x32!.scalekit.v1.clients.ClientSecretB\xf5\x01\x92\x41\xf1\x01\x32\xee\x01List of client secrets associated with this client. Each secret can be used for authentication, but only the most recently created secret is typically active. Secrets are stored securely and their values are never returned after creation.R\x07secrets\x12\xa2\x01\n\x04name\x18\x03 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32\x62The display name of the M2M client. This name helps identify the client in the dashboard and logs.J#\"GitHub Actions Deployment Service\"R\x04name\x12\xda\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tB\xb7\x01\x92\x41\xb3\x01\x32{A detailed description of the client\'s purpose and usage. This helps administrators understand what the client is used for.J4\"Service account for automated deployment processes\"R\x0b\x64\x65scription\x12\xd5\x01\n\x0b\x63reate_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x97\x01\x92\x41\x93\x01\x32uThe timestamp when this M2M client was created. This field is automatically set by the server and cannot be modified.J\x1a\"2024-01-05T14:48:00.000Z\"R\ncreateTime\x12\xf4\x01\n\x0bupdate_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xb6\x01\x92\x41\xb2\x01\x32\x93\x01The timestamp when this M2M client was last updated. This field is automatically updated by the server whenever the client\'s configuration changes.J\x1a\"2024-01-05T14:48:00.000Z\"R\nupdateTime\x12\xbe\x01\n\x06scopes\x18\x07 \x03(\tB\xa5\x01\x92\x41\xa1\x01\x32uThe OAuth 2.0 scopes granted to this client. These scopes determine what resources and actions the client can access.J([\"deploy:resources\", \"read:deployments\"]R\x06scopes\x12\xc7\x01\n\x08\x61udience\x18\x08 \x03(\tB\xaa\x01\x92\x41\xa6\x01\x32\x86\x01The intended recipients of access tokens issued to this client. Each audience value should be a URI that identifies an API or service.J\x1b[\"https://api.example.com\"]R\x08\x61udience\x12\xec\x01\n\rcustom_claims\x18\t \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\xa4\x01\x92\x41\xa0\x01\x32\x9d\x01\x41\x64\x64itional claims included in access tokens issued to this client. These claims provide context about the client and can be used for authorization decisions.R\x0c\x63ustomClaims\x12\xb2\x01\n\x06\x65xpiry\x18\n \x01(\x03\x42\x99\x01\x92\x41\x95\x01\x32\x8c\x01The lifetime of access tokens issued to this client, in seconds. This determines how long a token remains valid before it must be refreshed.J\x04\x33\x36\x30\x30R\x06\x65xpiry\x12\xc4\x01\n\x0bresource_id\x18\x0b \x01(\tB\xa2\x01\x92\x41\x9e\x01\x32\x83\x01The ID of the resource associated with this M2M client. This field is used to link the client to a specific resource in the system.J\x16\"app_1231234233424344\"R\nresourceId\x12\xd1\x01\n\rredirect_uris\x18\x0c \x03(\tB\xab\x01\x92\x41\xa7\x01\x32\x82\x01The redirect URI for this M2M client. This URI is used in the OAuth 2.0 authorization flow to redirect users after authentication.J [\"https://example.com/callback\"]R\x0credirectUris\x12~\n\rclient_secret\x18\r \x01(\tBY\x92\x41V24Client secret value (only returned once at creation)J\x1e\"CdExsdErfccxDDssddfffgfeFHH1\"R\x0c\x63lientSecret\x12\xce\x01\n\x18\x63lient_secret_expires_at\x18\x0e \x01(\x05\x42\x94\x01\x92\x41\x90\x01\x32rClient secret expiry time in RFC3339 format. If the client secret does not expire, this field will be set to null.J\x1a\"2024-12-31T23:59:59.000Z\"R\x15\x63lientSecretExpiresAt\"\xdd\x02\n\x14ListResourcesRequest\x12r\n\rresource_type\x18\x01 \x01(\x0e\x32!.scalekit.v1.clients.ResourceTypeB*\x92\x41!2\x18\x46ilter resources by typeJ\x05\"WEB\"\xbaH\x03\xc8\x01\x01R\x0cresourceType\x12]\n\npage_token\x18\x02 \x01(\tB>\x92\x41;2\"Token for the next page of resultsJ\x15\"next_page_token_123\"R\tpageToken\x12r\n\tpage_size\x18\x03 \x01(\rBU\x92\x41K2ENumber of resources to return per page. Maximum is 30. Default is 10.J\x02\x32\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\"\xdb\x02\n\x15ListResourcesResponse\x12G\n\ntotal_size\x18\x01 \x01(\rB(\x92\x41%2#Total number of resources availableR\ttotalSize\x12O\n\x0fnext_page_token\x18\x02 \x01(\tB\'\x92\x41$2\"Token for the next page of resultsR\rnextPageToken\x12S\n\tresources\x18\x03 \x03(\x0b\x32\x1d.scalekit.v1.clients.ResourceB\x16\x92\x41\x13\x32\x11List of resourcesR\tresources\x12S\n\x0fprev_page_token\x18\x04 \x01(\tB+\x92\x41(2&Token for the previous page of resultsR\rprevPageToken\"\xaf\x02\n\x15UpdateResourceRequest\x12s\n\x0bresource_id\x18\x01 \x01(\tBR\x92\x41\x46\x32+Unique identifier of the resource to updateJ\x17\"app_69388798466720005\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\x12\x64\n\x08resource\x18\x02 \x01(\x0b\x32#.scalekit.v1.clients.UpdateResourceB#\x92\x41\x1a\x32\x18Updated resource details\xbaH\x03\xc8\x01\x01R\x08resource\x12;\n\x0bupdate_mask\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskR\nupdateMask\"\xa1\x0e\n\x0eUpdateResource\x12P\n\x04name\x18\x01 \x01(\tB<\x92\x41\x31\x32\x14Name of the resourceJ\x19\"My Updated API Resource\"\xbaH\x05r\x03\x18\x80\x01R\x04name\x12\x8e\x01\n\x0b\x64\x65scription\x18\x02 \x01(\tBl\x92\x41\x61\x32\x1b\x44\x65scription of the resourceJB\"Updated resource for accessing your organization\'s API resources\"\xbaH\x05r\x03\x18\x80\x04R\x0b\x64\x65scription\x12\xab\x01\n\x0cresource_uri\x18\x03 \x01(\tB\x87\x01\x92\x41\x83\x01\x32\x61Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"R\x0bresourceUri\x12g\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x04 \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30R\x11\x61\x63\x63\x65ssTokenExpiry\x12k\n\x14refresh_token_expiry\x18\x05 \x01(\x03\x42\x39\x92\x41\x36\x32-Expiry time in seconds for the refresh token.J\x05\x38\x36\x34\x30\x30R\x12refreshTokenExpiry\x12\xbb\x01\n#disable_dynamic_client_registration\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBP\x92\x41M2EIndicates if dynamic client registration is allowed for this resourceJ\x04trueR disableDynamicClientRegistration\x12\x61\n\x08logo_uri\x18\x07 \x01(\tBF\x92\x41;2\x19Logo URI for the resourceJ\x1e\"https://example.com/logo.png\"\xbaH\x05r\x03\x18\x80\x04R\x07logoUri\x12X\n\x08provider\x18\n \x01(\tB<\x92\x41\x31\x32$Connection provider for the resourceJ\t\"DESCOPE\"\xbaH\x05r\x03\x18\x80\x04R\x08provider\x12\xa9\x01\n\x0bresource_id\x18\x0b \x01(\tB\x87\x01\x92\x41\x83\x01\x32\x61Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"R\nresourceId\x12i\n\x06scopes\x18\x0c \x03(\tBQ\x92\x41N21List of OAuth scopes associated with the resourceJ\x19[\"usr:read\", \"usr:write\"]R\x06scopes\x12\xa7\x01\n\x1a\x63ustom_connection_settings\x18\r \x01(\x0b\x32\x35.scalekit.v1.clients.ResourceCustomConnectionSettingsB0\x92\x41-2+Custom connection settings for the resourceH\x00R\x18\x63ustomConnectionSettings\x12\xc8\x01\n intersect_scopes_user_permission\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueBc\x92\x41`2XIndicates if the scopes should be intersected with user permissions for granular controlJ\x04trueR\x1dintersectScopesUserPermission\x12\x94\x01\n\x0b\x65nable_cimd\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueBW\x92\x41T2KIndicates if CIMD (Client ID Metadata Document) is enabled for the resourceJ\x05\x66\x61lseR\nenableCimdB\n\n\x08settings\"y\n\x16UpdateResourceResponse\x12_\n\x08resource\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.clients.ResourceB$\x92\x41!2\x1f\x44\x65tails of the updated resourceR\x08resource\"\xfc\x01\n\x1b\x43reateResourceClientRequest\x12p\n\x0bresource_id\x18\x01 \x01(\tBO\x92\x41\x43\x32(Unique identifier of the client resourceJ\x17\"app_69388798466720005\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\x12k\n\x06\x63lient\x18\x02 \x01(\x0b\x32#.scalekit.v1.clients.ResourceClientB.\x92\x41%2#Details of the client to be created\xbaH\x03\xc8\x01\x01R\x06\x63lient\"\xf8\x01\n\x1c\x43reateResourceClientResponse\x12Z\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1e.scalekit.v1.clients.M2MClientB\"\x92\x41\x1f\x32\x1d\x44\x65tails of the created clientR\x06\x63lient\x12|\n\x0cplain_secret\x18\x02 \x01(\tBY\x92\x41V24Client secret value (only returned once at creation)J\x1e\"CdExsdErfccxDDssddfffgfeFHH1\"R\x0bplainSecret\"\xc7\x03\n\x1bUpdateResourceClientRequest\x12i\n\x0bresource_id\x18\x01 \x01(\tBH\x92\x41<2!Unique identifier of the resourceJ\x17\"res_69388798466720005\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\x12\x63\n\tclient_id\x18\x02 \x01(\tBF\x92\x41:2\x1fUnique identifier of the clientJ\x17\"m2m_12345678901234567\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\x12\x66\n\x06\x63lient\x18\x03 \x01(\x0b\x32#.scalekit.v1.clients.ResourceClientB)\x92\x41 2\x1e\x46ields of the client to update\xbaH\x03\xc8\x01\x01R\x06\x63lient\x12p\n\x0bupdate_mask\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB3\x92\x41\x30\x32.Mask specifying which fields should be updatedR\nupdateMask\"s\n\x1cUpdateResourceClientResponse\x12S\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1e.scalekit.v1.clients.M2MClientB\x1b\x92\x41\x18\x32\x16Updated client detailsR\x06\x63lient\"\x96\x02\n\x18GetResourceClientRequest\x12u\n\x0bresource_id\x18\x01 \x01(\tBT\x92\x41H24Unique identifier of the client resource to retrieveJ\x10\"skc_1234567890\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\x12\x82\x01\n\tclient_id\x18\x02 \x01(\tBe\x92\x41Y2\x92\x41;2.Case-insensitive search over external user IDsJ\t\"usr_123\"R\x06search\x12[\n\tpage_size\x18\x03 \x01(\rB>\x92\x41\x34\x32.Number of consents to return per page (max 30)J\x02\x32\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\x63\n\npage_token\x18\x04 \x01(\tBD\x92\x41\x41\x32\x33Pagination token to fetch the next or previous pageJ\n\">:abc123\"R\tpageToken\"\x8c\x03\n ListResourceUserConsentsResponse\x12V\n\ntotal_size\x18\x01 \x01(\rB7\x92\x41\x34\x32\x32Total number of user consents matching the requestR\ttotalSize\x12T\n\x0fnext_page_token\x18\x02 \x01(\tB,\x92\x41)2\'Pagination token to fetch the next pageR\rnextPageToken\x12`\n\x08\x63onsents\x18\x03 \x03(\x0b\x32(.scalekit.v1.clients.ResourceUserConsentB\x1a\x92\x41\x17\x32\x15List of user consentsR\x08\x63onsents\x12X\n\x0fprev_page_token\x18\x04 \x01(\tB0\x92\x41-2+Pagination token to fetch the previous pageR\rprevPageToken\"\xdc\x04\n\x13ResourceUserConsent\x12X\n\x02id\x18\x01 \x01(\tBH\x92\x41\x45\x32%Unique identifier of the user consentJ\x1c\"usrcnst_102709535608668163\"R\x02id\x12r\n\x10\x65xternal_user_id\x18\x02 \x01(\tBH\x92\x41\x45\x32*External identifier of the consenting userJ\x17\"usr_83562895790637841\"R\x0e\x65xternalUserId\x12`\n\tclient_id\x18\x03 \x01(\tBC\x92\x41@2-Client identifier associated with the consentJ\x0f\"m2m_123123123\"R\x08\x63lientId\x12\x44\n\x0b\x63lient_name\x18\x04 \x01(\tB#\x92\x41 2\x14Readable client nameJ\x08\"MCPJam\"R\nclientName\x12O\n\x06scopes\x18\x05 \x03(\tB7\x92\x41\x34\x32\x1dScopes granted in the consentJ\x13[\"openid\", \"email\"]R\x06scopes\x12~\n\ngranted_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampBC\x92\x41@2\"Timestamp when consent was grantedJ\x1a\"2025-12-09T13:27:29.810Z\"R\tgrantedAt\"\xa0\x01\n\x1aListResourceClientsRequest\x12\x81\x01\n\x0bresource_id\x18\x01 \x01(\tB`\x92\x41T2@Unique identifier of the resource whose clients are to be listedJ\x10\"skc_1234567890\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\"\xf0\x02\n\x1bListResourceClientsResponse\x12k\n\x07\x63lients\x18\x02 \x03(\x0b\x32\x1e.scalekit.v1.clients.M2MClientB1\x92\x41.2,List of clients associated with the resourceR\x07\x63lients\x12i\n\x11total_dcr_clients\x18\x03 \x01(\x05\x42=\x92\x41:28Total number of DCR clients associated with the resourceR\x0ftotalDcrClients\x12s\n\x14total_static_clients\x18\x04 \x01(\x05\x42\x41\x92\x41>2\"R\tpageToken:\xec\x01\x92\x41\xe8\x01\n\xa8\x01*!List Organization Clients Request2\x82\x01Request message for listing API clients within a specific organization. Supports pagination for handling large numbers of clients.*;\n\x11\x41PI Documentation\x12&https://docs.scalekit.com/m2m/overview\"\xa5\x06\n\x1fListOrganizationClientsResponse\x12\x97\x01\n\x0fnext_page_token\x18\x01 \x01(\tBo\x92\x41l2UPagination token for the next page of results. Use this token to fetch the next page.J\x13\"\"R\rnextPageToken\x12X\n\ntotal_size\x18\x02 \x01(\rB9\x92\x41\x36\x32\x30Total number of API clients in the organization.J\x02\x33\x30R\ttotalSize\x12\xe0\x01\n\x07\x63lients\x18\x03 \x03(\x0b\x32\x1e.scalekit.v1.clients.M2MClientB\xa5\x01\x92\x41\xa1\x01\x32\x9e\x01List of API client objects for the organization. Each client includes its configuration, metadata, and active secrets (without exposing actual secret values).R\x07\x63lients\x12\x9f\x01\n\x0fprev_page_token\x18\x04 \x01(\tBw\x92\x41t2]Pagination token for the previous page of results. Use this token to fetch the previous page.J\x13\"\"R\rprevPageToken:\x88\x01\x92\x41\x84\x01\n\x81\x01*\"List Organization Clients Response2[Response message containing a paginated list of API clients for the specified organization.\"\x83\x03\n\x1f\x44\x65leteOrganizationClientRequest\x12\xb0\x01\n\x0forganization_id\x18\x01 \x01(\tB\x86\x01\x92\x41t2ZUnique identifier of the organization that owns the client. Must start with \'org_\' prefix.J\x16\"org_1231234233424344\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xac\x01\n\tclient_id\x18\x02 \x01(\tB\x8e\x01\x92\x41y2\\Unique identifier of the API client to permanently delete. Must start with \'m2morg_\' prefix.J\x19\"m2morg_1231234233424344\"\xbaH\x0fr\r\x10\x01\x18 :\x07m2morg_R\x08\x63lientId\"\xa5\x01\n\x10GetClientRequest\x12\x90\x01\n\tclient_id\x18\x01 \x01(\tBs\x92\x41g2SUnique identifier of the client resource to retrieve. Must be 1-32 characters long.J\x10\"skc_1234567890\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\"\xf5\x01\n\x11GetClientResponse\x12\xdf\x01\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.clients.ClientB\xa9\x01\x92\x41\xa5\x01\x32\xa2\x01\x43omplete client configuration including authentication settings, redirect URIs, and secrets. This contains all current settings for the requested client resource.R\x06\x63lient\"\xe1\x06\n\x12ListClientsRequest\x12\xf2\x01\n\x14include_plain_secret\x18\x01 \x01(\x08\x42\xbf\x01\x92\x41\xbb\x01\x32\xb1\x01Whether to include plain secret values in the response. Enable only during initial client creation, then store secrets securely. Not available when filtering by ALL client typesJ\x05\x66\x61lseR\x12includePlainSecret\x12\x85\x01\n\x06\x66ilter\x18\x03 \x01(\x0b\x32..scalekit.v1.clients.ListClientsRequest.FilterB=\x92\x41:28Filters clients by type: ENV, WEB_APP, NTV, SPA, or ALL.R\x06\x66ilter\x12]\n\npage_token\x18\x04 \x01(\tB>\x92\x41;2\"Token for the next page of resultsJ\x15\"next_page_token_123\"R\tpageToken\x12\x64\n\tpage_size\x18\x05 \x01(\rBG\x92\x41=27Number of clients per page. Defaults to 10, maximum 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x1a\x82\x02\n\x06\x46ilter\x12\xf7\x01\n\x0b\x63lient_type\x18\x01 \x03(\tB\xd5\x01\x92\x41\xd1\x01\x32\xce\x01\x46ilters clients by type. Valid values: ENV, WEB_APP, NTV, SPA, ALL. Defaults to ENV. ALL takes precedence and other types are ignored. For resource-specific clients (e.g., M2M), use ListResourceClients API.R\nclientTypeJ\x04\x08\x02\x10\x03\"\xf1\x03\n\x13ListClientsResponse\x12Z\n\ntotal_size\x18\x01 \x01(\rB;\x92\x41\x38\x32\x32Total number of client resources in the workspace.J\x02\x31\x32R\ttotalSize\x12\xc1\x01\n\x07\x63lients\x18\x02 \x03(\x0b\x32\x1b.scalekit.v1.clients.ClientB\x89\x01\x92\x41\x85\x01\x32\x82\x01List of client resource configurations matching the query criteria. Each client includes its metadata and authentication settings.R\x07\x63lients\x12\x65\n\x0fnext_page_token\x18\x03 \x01(\tB=\x92\x41:28Pagination token that retrieves the next page of resultsR\rnextPageToken\x12S\n\x0fprev_page_token\x18\x04 \x01(\tB+\x92\x41(2&Token for the previous page of resultsR\rprevPageToken\"\xed\x01\n\x13\x43reateClientRequest\x12\xd5\x01\n\x06\x63lient\x18\x01 \x01(\x0b\x32!.scalekit.v1.clients.CreateClientB\x99\x01\x92\x41\x8f\x01\x32\x1b\x43lient parameters to createJp{\"post_login_uris\": [\"https://app.example.com/callback\"], \"initiate_login_uri\": \"https://app.example.com/login\"}\xbaH\x03\xc8\x01\x01R\x06\x63lient\"\xeb\x17\n\x0c\x43reateClient\x12\xde\x01\n\x04name\x18\x01 \x01(\tB\xc9\x01\x92\x41\xba\x01\x32\x9e\x01\x41 descriptive name for the API client that helps identify its purpose. This name is displayed in the dashboard and logs. Must be between 1 and 128 characters.J\x17\"My Application Client\"\xbaH\x08r\x03\x18\x80\x01\xc8\x01\x01R\x04name\x12\xd6\x01\n\x0b\x63lient_type\x18\x02 \x01(\tB\xb4\x01\x92\x41\xa5\x01\x32\x99\x01\x43lient application type. Valid values: WEB_APP (web applications), SPA (single-page applications), NTV (native applications including mobile and desktop)J\x07WEB_APP\xbaH\x08r\x03\x18\x80\x01\xc8\x01\x01R\nclientType\x12\xb6\x02\n\x18\x62\x61\x63k_channel_logout_uris\x18\x03 \x03(\tB\xfc\x01\x92\x41\xe9\x01\x32wHTTPS endpoints that receive back-channel logout notifications for application-initiated logout and session management.Jn[\"https://app.example.com/backchannel-logout-internal\", \"https://app.example.com/backchannel-logout-external\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\x15\x62\x61\x63kChannelLogoutUris\x12\xb6\x02\n\x19post_logout_redirect_uris\x18\x04 \x03(\tB\xfa\x01\x92\x41\xe7\x01\x32\x9c\x01\x41llowed URIs for post-logout redirection. These URIs are used when a user is redirected after logout. Must use HTTPS and conform to security specifications.JF[\"https://app.example.com/logged-out\", \"https://app.example.com/home\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\x16postLogoutRedirectUris\x12\xff\x01\n\x12initiate_login_uri\x18\x05 \x01(\tB\xcb\x01\x92\x41\xc7\x01\x32\xa3\x01Pre-configured URI for initiating login flows. This URI is used to start authentication flows programmatically. Must use HTTPS protocol and contain a valid domain.J\x1f\"https://app.example.com/login\"H\x00R\x10initiateLoginUri\x88\x01\x01\x12\x9c\x02\n\x0fpost_login_uris\x18\x06 \x03(\tB\xf3\x01\x92\x41\xe7\x01\x32\x9e\x01List of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTPS in production environments. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\xbaH\x05\x92\x01\x02\x18\x01R\rpostLoginUris\x12g\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x07 \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30R\x11\x61\x63\x63\x65ssTokenExpiry\x12\xb3\x01\n\x06scopes\x18\x08 \x03(\tB\x9a\x01\x92\x41\x96\x01\x32wList of scopes to be attached to this client. These scopes must be a subset of the scopes available in the environment.J\x1b[\"data:read\", \"data:write\"]R\x06scopes\x12\xc6\x01\n\rcustom_claims\x18\t \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\x7f\x92\x41|2zCustom claims to be included in access tokens. Please keep this to the essentials as this increases the size of the token.R\x0c\x63ustomClaims\x12\xf0\x01\n\x1c\x64isallow_scalekit_api_access\x18\n \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x92\x01\x92\x41\x8e\x01\x32\x85\x01If set to true, the client will be restricted from accessing Scalekit APIs directly, enhancing security by limiting its capabilities.J\x04trueR\x19\x64isallowScalekitApiAccess\x12\xe0\x01\n\x0bgrant_types\x18\x0b \x03(\tB\xbe\x01\x92\x41\xba\x01\x32yList of OAuth 2.0 grant types that the client is authorized to use. This defines how the client can obtain access tokens.J=[\"authorization_code\", \"refresh_token\", \"client_credentials\"]R\ngrantTypes\x12\xe1\x01\n\x0c\x65nforce_pkce\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xa1\x01\x92\x41\x9d\x01\x32\x94\x01Whether Proof Key for Code Exchange (PKCE) is required. PKCE mitigates authorization code interception attacks. Defaults to true for public clients.J\x04trueR\x0b\x65nforcePkce:\xd4\x01\x92\x41\xd0\x01\n\x9c\x01*\rCreate Client2\x8a\x01Request message for creating a new API client with specified configuration parameters including redirect URIs and authentication settings.*/\n\x11\x41PI Documentation\x12\x1ahttps://docs.scalekit.com/B\x15\n\x13_initiate_login_uri\"\x8c\x01\n\x14\x43reateClientResponse\x12t\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.clients.ClientB?\x92\x41<2:Created client with all settings reflected in the responseR\x06\x63lient\"\xc3\x03\n\x13UpdateClientRequest\x12}\n\tclient_id\x18\x01 \x01(\tB`\x92\x41T2:Unique identifier of the registered application to update.J\x16\"skc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\x12\xe8\x01\n\x06\x63lient\x18\x02 \x01(\x0b\x32!.scalekit.v1.clients.UpdateClientB\xac\x01\x92\x41\xa2\x01\x32\x65\x41pplication configuration parameters to update. Contains post_login_uris and authentication settings.J9{\"post_login_uris\": [\"https://app.example.com/callback\"]}\xbaH\x03\xc8\x01\x01R\x06\x63lient\x12\x42\n\x04mask\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB\x12\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\x04mask\"\xf4\x16\n\x0cUpdateClient\x12\xc3\x02\n\x18\x62\x61\x63k_channel_logout_uris\x18\x04 \x03(\tB\x89\x02\x92\x41\xf6\x01\x32\x95\x01HTTPS endpoints for receiving back-channel logout notifications. Required for implementing application-initiated logout flows and session management.J\\[\"https://app.example.com/backchannel-logout\", \"https://app.example.com/backchannel-logout\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\x15\x62\x61\x63kChannelLogoutUris\x12\xb6\x02\n\x19post_logout_redirect_uris\x18\x05 \x03(\tB\xfa\x01\x92\x41\xe7\x01\x32\x9c\x01\x41llowed URIs for post-logout redirection. These URIs are used when a user is redirected after logout. Must use HTTPS and conform to security specifications.JF[\"https://app.example.com/logged-out\", \"https://app.example.com/home\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\x16postLogoutRedirectUris\x12\xff\x01\n\x12initiate_login_uri\x18\x06 \x01(\tB\xcb\x01\x92\x41\xc7\x01\x32\xa3\x01Pre-configured URI for initiating login flows. This URI is used to start authentication flows programmatically. Must use HTTPS protocol and contain a valid domain.J\x1f\"https://app.example.com/login\"H\x00R\x10initiateLoginUri\x88\x01\x01\x12\x9c\x02\n\x0fpost_login_uris\x18\x07 \x03(\tB\xf3\x01\x92\x41\xe7\x01\x32\x9e\x01List of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTPS in production environments. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\xbaH\x05\x92\x01\x02\x18\x01R\rpostLoginUris\x12\xd3\x01\n\x04name\x18\x08 \x01(\tB\xbe\x01\x92\x41\xba\x01\x32\x9e\x01\x41 descriptive name for the API client that helps identify its purpose. This name is displayed in the dashboard and logs. Must be between 1 and 128 characters.J\x17\"My Application Client\"R\x04name\x12g\n\x13\x61\x63\x63\x65ss_token_expiry\x18\t \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30R\x11\x61\x63\x63\x65ssTokenExpiry\x12\xb3\x01\n\x06scopes\x18\x0b \x03(\tB\x9a\x01\x92\x41\x96\x01\x32wList of scopes to be attached to this client. These scopes must be a subset of the scopes available in the environment.J\x1b[\"data:read\", \"data:write\"]R\x06scopes\x12\xc6\x01\n\rcustom_claims\x18\x0c \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\x7f\x92\x41|2zCustom claims to be included in access tokens. Please keep this to the essentials as this increases the size of the token.R\x0c\x63ustomClaims\x12\xf0\x01\n\x1c\x64isallow_scalekit_api_access\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x92\x01\x92\x41\x8e\x01\x32\x85\x01If set to true, the client will be restricted from accessing Scalekit APIs directly, enhancing security by limiting its capabilities.J\x04trueR\x19\x64isallowScalekitApiAccess\x12\xe0\x01\n\x0bgrant_types\x18\x0e \x03(\tB\xbe\x01\x92\x41\xba\x01\x32yList of OAuth 2.0 grant types that the client is authorized to use. This defines how the client can obtain access tokens.J=[\"authorization_code\", \"refresh_token\", \"client_credentials\"]R\ngrantTypes\x12\xe1\x01\n\x0c\x65nforce_pkce\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xa1\x01\x92\x41\x9d\x01\x32\x94\x01Whether Proof Key for Code Exchange (PKCE) is required. PKCE mitigates authorization code interception attacks. Defaults to true for public clients.J\x04trueR\x0b\x65nforcePkce:\x83\x02\x92\x41\xff\x01\n\xbf\x01*\x1bUpdate Client Configuration2\x9f\x01Parameters for updating an API client application\'s configuration. This allows modification of post_login_uris, logout settings, and other security parameters.*;\n\x11\x41PI Documentation\x12&https://docs.scalekit.com/m2m/overviewB\x15\n\x13_initiate_login_uriJ\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04R\rredirect_urisR\x14\x64\x65\x66\x61ult_redirect_uri\"\xa8\x01\n\x14UpdateClientResponse\x12\x8f\x01\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.clients.ClientBZ\x92\x41W2UUpdated application configuration with all current settings reflected in the responseR\x06\x63lient\"\xae\x01\n\x19\x43reateClientSecretRequest\x12\x90\x01\n\tclient_id\x18\x01 \x01(\tBs\x92\x41g2MUnique identifier of the client application for which to create a new secret.J\x16\"skc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\"\xad\x03\n\x1a\x43reateClientSecretResponse\x12\xc6\x01\n\x0cplain_secret\x18\x01 \x01(\tB\xa2\x01\x92\x41\x9e\x01\x32\x84\x01Plaintext secret value. This value is only returned once at creation time and must be stored securely. It cannot be retrieved again.J\x15\"sec_plaintext123456\"R\x0bplainSecret\x12\xc5\x01\n\x06secret\x18\x02 \x01(\x0b\x32!.scalekit.v1.clients.ClientSecretB\x89\x01\x92\x41\x85\x01\x32\x82\x01Metadata about the newly created secret, including its ID, creation time, and status. Does not include the plaintext secret value.R\x06secret\"\x83\x05\n\x19UpdateClientSecretRequest\x12\x8f\x01\n\tclient_id\x18\x01 \x01(\tBr\x92\x41\x66\x32LUnique identifier of the client application containing the secret to update.J\x16\"skc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\x12\xab\x01\n\tsecret_id\x18\x02 \x01(\tB\x8d\x01\x92\x41\x80\x01\x32\x66Unique identifier of the client secret to update. This references a specific secret within the client.J\x16\"sec_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08secretId\x12\xb0\x01\n\x06secret\x18\x03 \x01(\x0b\x32\'.scalekit.v1.clients.UpdateClientSecretBo\x92\x41\x66\x32\x64Updated settings for the secret. Currently supports modifying the secret\'s status (active/inactive).\xbaH\x03\xc8\x01\x01R\x06secret\x12s\n\x04mask\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskBC\x92\x41@2>Specifies which fields to update. System-controlled parameter.R\x04mask\"\xec\x01\n\x12UpdateClientSecret\x12\xd5\x01\n\x06status\x18\x01 \x01(\x0e\x32\'.scalekit.v1.clients.ClientSecretStatusB\x93\x01\x92\x41\x8f\x01\x32\x82\x01Status to set for the client secret. Set to ACTIVE to enable the secret for authentication, or INACTIVE to temporarily disable it.J\x08INACTIVER\x06status\"\xe7\x01\n\x1aUpdateClientSecretResponse\x12\xc8\x01\n\x06secret\x18\x01 \x01(\x0b\x32!.scalekit.v1.clients.ClientSecretB\x8c\x01\x92\x41\x88\x01\x32\x85\x01Updated secret metadata, reflecting the changes made by the update operation. Note that the plaintext secret value is never returned.R\x06secret\"\x85\x01\n\x13\x44\x65leteClientRequest\x12n\n\tclient_id\x18\x01 \x01(\tBQ\x92\x41\x45\x32*Unique identifier of the client to delete.J\x17\"webc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\"\xb3\x02\n\x19\x44\x65leteClientSecretRequest\x12q\n\tclient_id\x18\x01 \x01(\tBT\x92\x41H2.Identifier of the client containing the secretJ\x16\"skc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\x12\xa2\x01\n\tsecret_id\x18\x02 \x01(\tB\x84\x01\x92\x41x2^Unique identifier of the client secret to permanently delete. This operation cannot be undone.J\x16\"sec_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08secretId\"\xa8\x1e\n\x06\x43lient\x12\xe2\x01\n\x02id\x18\x01 \x01(\tB\xd1\x01\x92\x41\xcd\x01\x32\xb2\x01Unique identifier for the client application. This ID is automatically generated when the client is created and cannot be modified. Used in API requests and authentication flows.J\x16\"skc_1234abcd5678efgh\"R\x02id\x12\xd7\x01\n\x05keyId\x18\x02 \x01(\tB\xc0\x01\x92\x41\xbc\x01\x32\xa1\x01Identifier for the cryptographic key pair used to sign tokens. This key is used for JWT signing operations. Keys can be rotated by generating new client secrets.J\x16\"key_9876zyxw5432vuts\"R\x05keyId\x12\xf0\x01\n\x0b\x63reate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xb2\x01\x92\x41\xae\x01\x32\x8f\x01Timestamp indicating when the client configuration was initially created. This field is automatically set by the server and cannot be modified.J\x1a\"2024-01-05T14:48:00.000Z\"R\ncreateTime\x12\x81\x02\n\x0bupdate_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xc3\x01\x92\x41\xbf\x01\x32\xa0\x01Timestamp of the last modification to the client configuration. This field is automatically updated by the server whenever any aspect of the client is modified.J\x1a\"2024-01-10T09:12:00.000Z\"R\nupdateTime\x12\xa5\x02\n\x07secrets\x18\x07 \x03(\x0b\x32!.scalekit.v1.clients.ClientSecretB\xe7\x01\x92\x41\xe3\x01\x32\xe0\x01List of client secrets used for authentication. Each secret is stored securely using one-way hashing (bcrypt). The plaintext secret values are only displayed during initial creation and must be stored securely by the client.R\x07secrets\x12\xa3\x02\n\x19post_logout_redirect_uris\x18\x08 \x03(\tB\xe7\x01\x92\x41\xe3\x01\x32\xba\x01\x41llowed URIs for post-logout redirection. These URIs are used when a user is redirected after signing out. Must use HTTPS and conform to OpenID Connect Session Management specifications.J$[\"https://auth.your-app.com/logout\"]R\x16postLogoutRedirectUris\x12\xc9\x02\n\x18\x62\x61\x63k_channel_logout_uris\x18\t \x03(\tB\x8f\x02\x92\x41\x8b\x02\x32\xd8\x01HTTPS endpoint for receiving back-channel logout notifications. This URI is called by the authentication server when a session expires or is terminated. Required for implementing relying party-initiated logout flows.J.\"https://auth.your-app.com/backchannel-logout\"R\x15\x62\x61\x63kChannelLogoutUris\x12\xa0\x02\n\x12initiate_login_uri\x18\n \x01(\tB\xf1\x01\x92\x41\xed\x01\x32\xbf\x01Pre-configured URI for initiating login flows programmatically. This URI must use the HTTPS scheme and contain a valid domain. Used for starting authentication flows without user interaction.J)\"https://auth.your-app.com/initiate-auth\"R\x10initiateLoginUri\x12\xab\x02\n\x0fpost_login_uris\x18\x0b \x03(\tB\x82\x02\x92\x41\xfe\x01\x32\xb3\x01List of allowed redirect URIs for OAuth 2.0 authorization flows. These URIs must use HTTPS protocol in production environments and comply with RFC 6749. Maximum of 5 URIs allowed.JF[\"https://auth.your-app.com/callback\", \"https://dev.example.com/auth\"]R\rpostLoginUris\x12t\n\x04name\x18\x0c \x01(\tB`\x92\x41]2BA descriptive name for the client that helps identify its purpose.J\x17\"My Application Client\"R\x04name\x12l\n\x13\x61\x63\x63\x65ss_token_expiry\x18\r \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30H\x00R\x11\x61\x63\x63\x65ssTokenExpiry\x88\x01\x01\x12g\n\x06scopes\x18\x0e \x03(\tBO\x92\x41L2-List of scopes to be attached to this client.J\x1b[\"data:read\", \"data:write\"]R\x06scopes\x12\xc6\x01\n\rcustom_claims\x18\x0f \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\x7f\x92\x41|2zCustom claims to be included in access tokens. Please keep this to the essentials as this increases the size of the token.R\x0c\x63ustomClaims\x12\x8f\x01\n\x1c\x64isallow_scalekit_api_access\x18\x10 \x01(\x08\x42N\x92\x41K2CIf true, the client will be restricted from accessing Scalekit APIsJ\x04trueR\x19\x64isallowScalekitApiAccess\x12\xaa\x01\n\x0bgrant_types\x18\x11 \x03(\tB\x88\x01\x92\x41\x84\x01\x32\x43List of OAuth 2.0 grant types that the client is authorized to use.J=[\"authorization_code\", \"refresh_token\", \"client_credentials\"]R\ngrantTypes\x12\x61\n\x0b\x63lient_type\x18\x12 \x01(\tB@\x92\x41=24Type of client. Valid values: ENV, WEB_APP, NTV, SPAJ\x05\"ENV\"R\nclientType\x12\xc5\x01\n\x0c\x65nforce_pkce\x18\x13 \x01(\x08\x42\xa1\x01\x92\x41\x9d\x01\x32\x94\x01Whether Proof Key for Code Exchange (PKCE) is required. PKCE mitigates authorization code interception attacks. Defaults to true for public clients.J\x04trueR\x0b\x65nforcePkce:\xb3\x01\x92\x41\xaf\x01\n\xac\x01*\x12\x43lient Application2\x95\x01\x43onfiguration for an API client application registered with Scalekit. Contains authentication settings, redirect URIs, and other security parameters.B\x16\n\x14_access_token_expiryJ\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07R\rredirect_urisR\x14\x64\x65\x66\x61ult_redirect_uri\"\xc1\x13\n\x0c\x43lientSecret\x12\xd5\x01\n\x02id\x18\x01 \x01(\tB\xc4\x01\x92\x41\xc0\x01\x32\xa5\x01The unique identifier for this client secret. This ID is used to reference the secret in API requests for management operations like updating or deleting the secret.J\x16\"sec_1234abcd5678efgh\"R\x02id\x12\xd1\x01\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x93\x01\x92\x41\x8f\x01\x32qThe timestamp when this secret was created. This field is automatically set by the server and cannot be modified.J\x1a\"2024-01-05T14:48:00.000Z\"R\ncreateTime\x12\x86\x02\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xc8\x01\x92\x41\xc4\x01\x32\xa5\x01The timestamp when this secret was last updated. This field is automatically updated by the server when the secret\'s status changes or other properties are modified.J\x1a\"2024-01-10T09:12:00.000Z\"R\nupdateTime\x12\x82\x02\n\rsecret_suffix\x18\x04 \x01(\tB\xdc\x01\x92\x41\xd8\x01\x32\xcd\x01\x41 suffix that helps identify this secret. This is the last few characters of the full secret value but is not sufficient for authentication. Helps identify which secret is being used in logs and debugging.J\x06\"xyzw\"R\x0csecretSuffix\x12\xc9\x01\n\ncreated_by\x18\x05 \x01(\tB\xa4\x01\x92\x41\xa0\x01\x32\x8f\x01The identifier of the user or system that created this secret. This field helps track who created the secret for audit and compliance purposes.J\x0c\"user_12345\"H\x00R\tcreatedBy\x88\x01\x01\x12\x86\x02\n\x06status\x18\x06 \x01(\x0e\x32\'.scalekit.v1.clients.ClientSecretStatusB\xc4\x01\x92\x41\xc0\x01\x32\xb1\x01The current status of this secret. A secret must be ACTIVE to be used for authentication. INACTIVE secrets cannot be used for authentication but are retained for audit purposes.J\n\"INACTIVE\"R\x06status\x12\x8c\x02\n\x0b\x65xpire_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xce\x01\x92\x41\xca\x01\x32\xab\x01The timestamp when this secret will expire. After this time, the secret cannot be used for authentication regardless of its status. If not set, the secret does not expire.J\x1a\"2025-01-05T14:48:00.000Z\"R\nexpireTime\x12\xa6\x02\n\x0elast_used_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xe3\x01\x92\x41\xdf\x01\x32\xc0\x01The timestamp when this secret was last used for authentication. This field helps track secret usage for security monitoring and identifying unused secrets that may be candidates for rotation.J\x1a\"2024-02-15T10:30:00.000Z\"R\x0clastUsedTime\x12\xb3\x02\n\x0cplain_secret\x18\t \x01(\tB\x8a\x02\x92\x41\x86\x02\x32\xd7\x01The full plaintext secret value. This field is only populated when the secret is first created and is never stored by the server. It must be securely stored by the client application as it cannot be retrieved again.J*\"sec_1234567890abcdefghijklmnopqrstuvwxyz\"H\x01R\x0bplainSecret\x88\x01\x01:\x93\x01\x92\x41\x8f\x01\n\x8c\x01*\rClient Secret2{A secure credential used for authenticating an API client. Each client can have multiple secrets for key rotation purposes.B\r\n\x0b_created_byB\x0f\n\r_plain_secret\"\xb8\x02\n\x05Scope\x12\xa8\x01\n\x02id\x18\x01 \x01(\tB\x97\x01\x92\x41\x8a\x01\x32tUnique identifier for the scope resource. Must be between 1 and 100 characters long and match the specified pattern.J\x12\"scope_1234567890\"\xbaH\x06r\x04\x10\x01\x18\x64R\x02id\x12\x36\n\x04name\x18\x02 \x01(\tB\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9:]{1,64}$\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\x12 \n\x07\x65nabled\x18\x04 \x01(\x08\x42\x06\xbaH\x03\xc8\x01\x01R\x07\x65nabled\"q\n\x0b\x43reateScope\x12\x36\n\x04name\x18\x01 \x01(\tB\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9:]{1,64}$\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\"\xf3\x01\n\x12\x43reateScopeRequest\x12>\n\x05scope\x18\x01 \x01(\x0b\x32 .scalekit.v1.clients.CreateScopeB\x06\xbaH\x03\xc8\x01\x01R\x05scope\x12\x9c\x01\n\x06\x65nv_id\x18\x02 \x01(\tB\x84\x01\x92\x41x2dUnique identifier of the environment where the scope will be created. Must start with \'env_\' prefix.J\x10\"env_1234567890\"\xbaH\x06r\x04\x10\x00\x18 R\x05\x65nvId\"G\n\x13\x43reateScopeResponse\x12\x30\n\x05scope\x18\x01 \x01(\x0b\x32\x1a.scalekit.v1.clients.ScopeR\x05scope\"\xaa\x01\n\x11ListScopesRequest\x12\x94\x01\n\x06\x65nv_id\x18\x01 \x01(\tB}\x92\x41q2]Unique identifier of the environment for which to list scopes. Must start with \'env_\' prefix.J\x10\"env_1234567890\"\xbaH\x06r\x04\x10\x00\x18 R\x05\x65nvId\"H\n\x12ListScopesResponse\x12\x32\n\x06scopes\x18\x01 \x03(\x0b\x32\x1a.scalekit.v1.clients.ScopeR\x06scopes\"o\n\x12UpdateScopeRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18\x64R\x02id\x12>\n\x05scope\x18\x02 \x01(\x0b\x32 .scalekit.v1.clients.UpdateScopeB\x06\xbaH\x03\xc8\x01\x01R\x05scope\"o\n\x0bUpdateScope\x12*\n\x0b\x64\x65scription\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\x12\x34\n\x07\x65nabled\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x07\x65nabled\"G\n\x13UpdateScopeResponse\x12\x30\n\x05scope\x18\x01 \x01(\x0b\x32\x1a.scalekit.v1.clients.ScopeR\x05scope\"1\n\x12\x44\x65leteScopeRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06:\x04scp_R\x02id\"\xdd\x05\n\x19GetConsentDetailsResponse\x12\x61\n\x08resource\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.clients.ResourceB&\x92\x41#2!Details of the requested resourceR\x08resource\x12[\n\x04user\x18\x02 \x01(\x0b\x32\x19.scalekit.v1.clients.UserB,\x92\x41)2\'Details of the user who granted consentR\x04user\x12r\n\x06\x63lient\x18\x03 \x01(\x0b\x32\".scalekit.v1.clients.ConsentClientB6\x92\x41\x33\x32\x31\x44\x65tails of the client resource requesting consentR\x06\x63lient\x12\x9b\x01\n\x06scopes\x18\x04 \x03(\x0b\x32!.scalekit.v1.clients.ConsentScopeB`\x92\x41]2[List of scopes for which consent was granted. Each scope includes its name and description.R\x06scopes\x12m\n\x0b\x61pplication\x18\x05 \x01(\x0b\x32 .scalekit.v1.clients.ApplicationB)\x92\x41&2$Details of the requested applicationR\x0b\x61pplication\x12\x7f\n\x0corganization\x18\x06 \x01(\x0b\x32(.scalekit.v1.clients.ConsentOrganizationB1\x92\x41.2,Organization context for the consent screen.R\x0corganization\"\xf7\x02\n\x13\x43onsentOrganization\x12\x99\x01\n\x11organization_name\x18\x01 \x01(\tBg\x92\x41\x64\x32UName of the organization the user is authenticating into. Omitted when not available.J\x0b\"Acme Corp\"H\x00R\x10organizationName\x88\x01\x01\x12\xad\x01\n\x16organization_meta_name\x18\x02 \x01(\tBw\x92\x41t2bEnvironment-level label for what an organization is called (e.g. Workspace, Team). Always present.J\x0e\"Organization\"R\x14organizationMetaNameB\x14\n\x12_organization_name\"\xba\x05\n\rConsentClient\x12R\n\x04name\x18\x01 \x01(\tB>\x92\x41;2.Name of the client resource requesting consentJ\t\"VS Code\"R\x04name\x12x\n\x0bprivacy_uri\x18\x02 \x01(\tBW\x92\x41M2,Privacy policy URI of the client applicationJ\x1d\"https://yourapp.com/privacy\"\xbaH\x04r\x02\x18\x64R\nprivacyUri\x12q\n\x07tos_uri\x18\x03 \x01(\tBX\x92\x41M2.Terms of service URI of the client applicationJ\x1b\"https://yourapp.com/terms\"\xbaH\x05r\x03\x18\xd0\x0fR\x06tosUri\x12o\n\tclient_id\x18\x04 \x01(\tBR\x92\x41O2;Unique identifier of the client resource requesting consentJ\x10\"m2m_1234567890\"R\x08\x63lientId\x12\x8e\x01\n\x0cmetadata_uri\x18\x05 \x01(\tBk\x92\x41h2AMetadata URI of the client application - applicable for CIMD onlyJ#\"https://example.com/metadata.json\"R\x0bmetadataUri\x12\x66\n\x08logo_uri\x18\x06 \x01(\tBK\x92\x41H2\"Logo URI of the client applicationJ\"\"https://cdn.example.com/logo.png\"R\x07logoUri\"\\\n\x0c\x43onsentScope\x12 \n\x04name\x18\x01 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\"r\n\x04User\x12j\n\x05\x65mail\x18\x01 \x01(\tBT\x92\x41Q28Email address of the user. Must be a valid email format.J\x15\x61lice.doe@example.comR\x05\x65mail\"\xa2\x02\n\x18RevokeUserConsentRequest\x12\x87\x01\n\tclient_id\x18\x01 \x01(\tBj\x92\x41X2DUnique identifier of the client resource for which to revoke consentJ\x10\"m2m_1234567890\"\xbaH\x0cr\n\x10\x01\x18 :\x04m2m_R\x08\x63lientId\x12|\n\nconsent_id\x18\x02 \x01(\tB]\x92\x41G2/Unique identifier of the user consent to revokeJ\x14\"usrcnst_1234567890\"\xbaH\x10r\x0e\x10\x01\x18 :\x08usrcnst_R\tconsentId\"\x1b\n\x19RevokeUserConsentResponse\"\x9f\x01\n\x1f\x45nsureResourceConnectionRequest\x12|\n\x0bresource_id\x18\x01 \x01(\tB[\x92\x41O24Unique identifier of the client resource to retrieveJ\x17\"app_69388798466720005\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\"\xd4\x01\n EnsureResourceConnectionResponse\x12\xaf\x01\n\nconnection\x18\x01 \x01(\x0b\x32\'.scalekit.v1.clients.ResourceConnectionBf\x92\x41]2[Details of the connection resource. Contains configuration settings and status information.\xbaH\x03\xc8\x01\x01R\nconnection\"\xb0\x07\n\x12ResourceConnection\x12T\n\x02id\x18\x01 \x01(\tBD\x92\x41\x41\x32,Unique identifier of the connection resourceJ\x11\"conn_1234567890\"R\x02id\x12\xa1\x01\n\x04type\x18\x02 \x01(\x0e\x32+.scalekit.v1.clients.ResourceConnectionTypeB`\x92\x41]2QType of connection. Determines the authentication method used for the connection.J\x08\"CUSTOM\"R\x04type\x12\x94\x01\n\x06status\x18\x03 \x01(\tB|\x92\x41y2mCurrent status of the connection. Indicates whether the connection is active, inactive, or in an error state.J\x08\"ACTIVE\"R\x06status\x12\x89\x01\n\x07\x65nabled\x18\x04 \x01(\x08\x42o\x92\x41l2dIndicates whether the connection is enabled. Disabled connections cannot be used for authentication.J\x04trueR\x07\x65nabled\x12\xe7\x01\n\x08settings\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructB\xb1\x01\x92\x41\xad\x01\x32kConfiguration settings for the connection. The structure of this field varies based on the connection type.J>{\"api_key\": \"abcd1234\", \"endpoint\": \"https://api.example.com\"}R\x08settings\x12\x92\x01\n\x08provider\x18\x06 \x01(\tBv\x92\x41s2^The provider of the connection. Indicates the service or platform that manages the connection.J\x11\"custom_provider\"R\x08provider\"\xdc\x01\n ResourceCustomConnectionSettings\x12\xb7\x01\n\rauthorize_uri\x18\x01 \x01(\tB\x91\x01\x92\x41\x83\x01\x32[The URI where users are redirected to authorize the application. Must be a valid HTTPS URL.J$\"https://auth.example.com/authorize\"\xbaH\x07r\x05\x10\x01\x88\x01\x01R\x0c\x61uthorizeUri*k\n\x0cResourceType\x12\x1d\n\x19RESOURCE_TYPE_UNSPECIFIED\x10\x00\x12\x07\n\x03WEB\x10\x01\x12\n\n\x06MOBILE\x10\x02\x12\x0b\n\x07\x44\x45SKTOP\x10\x03\x12\n\n\x06SERVER\x10\x04\x12\x0e\n\nMCP_SERVER\x10\x05*.\n\x12\x43lientSecretStatus\x12\n\n\x06\x41\x43TIVE\x10\x00\x12\x0c\n\x08INACTIVE\x10\x01*1\n\x16ResourceConnectionType\x12\x0b\n\x07INVALID\x10\x00\x12\n\n\x06\x43USTOM\x10\x01\x32\xc3\x8a\x01\n\rClientService\x12\xa0\x03\n\nListClient\x12\'.scalekit.v1.clients.ListClientsRequest\x1a(.scalekit.v1.clients.ListClientsResponse\"\xbe\x02\x92\x41\x8e\x02\n\x08\x41PI Auth\x12\x10List API clients\x1a\x90\x01Retrieves a paginated list of API client applications in the environment. Returns only environment-level clients, not resource-specific clients.J]\n\x03\x32\x30\x30\x12V\n&List of clients returned successfully.\x12,\n*\x1a(.scalekit.v1.clients.ListClientsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x11\x12\x0f/api/v1/clients\x12\xb4\x03\n\x0c\x43reateClient\x12(.scalekit.v1.clients.CreateClientRequest\x1a).scalekit.v1.clients.CreateClientResponse\"\xce\x02\x92\x41\x96\x02\n\x06\x43lient\x12\rCreate Client\x1a\x81\x01\x43reates an OAuth client with properties including post-login URIs, scopes, and custom claims. Required fields: name, client_type.Jy\n\x03\x32\x30\x30\x12r\nAClient created successfully. Returns the created client resource.\x12-\n+\x1a).scalekit.v1.clients.CreateClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\"\x0f/api/v1/clients:\x06\x63lient\x12\xd0\x04\n\tGetClient\x12%.scalekit.v1.clients.GetClientRequest\x1a&.scalekit.v1.clients.GetClientResponse\"\xf3\x03\x92\x41\xb7\x03\n\x0e\x43lient Configs\x12\x18Get Client Configuration\x1a\xc5\x01Retrieves complete client configuration including scopes, custom claims, redirect URIs, and access token expiration time. Use this endpoint to view or verify client settings and security parametersJ\xc2\x01\n\x03\x32\x30\x30\x12\xba\x01\n\x8b\x01\x43lient configuration retrieved successfully. Returns full client metadata including scopes, audience, custom claims, and security settings.\x12*\n(\x1a&.scalekit.v1.clients.GetClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1d\x12\x1b/api/v1/clients/{client_id}\x12\xcd\x05\n\x0cUpdateClient\x12(.scalekit.v1.clients.UpdateClientRequest\x1a).scalekit.v1.clients.UpdateClientResponse\"\xe7\x04\x92\x41\xa3\x04\n\x0e\x43lient Configs\x12\x1bUpdate Client Configuration\x1a\xba\x02Updates the configuration settings for a client. Only fields included in the request are modified. Updatable fields include post_login_uris, post_logout_redirect_uris, back_channel_logout_uris, initiate_login_uri, scopes, audience, and custom claims. client_id and create_time are immutable and cannot be modified.J\xb6\x01\n\x03\x32\x30\x31\x12\xae\x01\n}Client configuration updated successfully. Returns the updated client resource with new update_time and all current settings.\x12-\n+\x1a).scalekit.v1.clients.UpdateClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%2\x1b/api/v1/clients/{client_id}:\x06\x63lient\x12\x9a\x03\n\x0c\x44\x65leteClient\x12(.scalekit.v1.clients.DeleteClientRequest\x1a\x16.google.protobuf.Empty\"\xc7\x02\x92\x41\x8b\x02\n\x06\x43lient\x12\rDelete Client\x1a\xb2\x01Permanently deletes a client and associated secrets. This operation cannot be undone. Supports WEB_APP, NTV, and SPA client types only. Cannot delete default environment clients.J=\n\x03\x32\x30\x30\x12\x36\n4Client successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1d*\x1b/api/v1/clients/{client_id}\x12\xa4\x05\n\x12\x43reateClientSecret\x12..scalekit.v1.clients.CreateClientSecretRequest\x1a/.scalekit.v1.clients.CreateClientSecretResponse\"\xac\x04\x92\x41\xe8\x03\n\x0e\x43lient Configs\x12\x14\x43reate Client Secret\x1a\x82\x02Generates a new client secret for an API client. This endpoint creates a secure credential that can be used for OAuth 2.0 client credentials flow. The plain secret is only returned once during creation and should be stored securely by the client application.J\xba\x01\n\x03\x32\x30\x31\x12\xb2\x01\n{Client secret created successfully. Returns the new secret ID and the plain secret value (only available at creation time).\x12\x33\n1\x1a/.scalekit.v1.clients.CreateClientSecretResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\"#/api/v1/clients/{client_id}/secrets\x12\xca\x05\n\x12UpdateClientSecret\x12..scalekit.v1.clients.UpdateClientSecretRequest\x1a/.scalekit.v1.clients.UpdateClientSecretResponse\"\xd2\x04\x92\x41\xbf\x03\n\x0e\x43lient Configs\x12\x14Update Client Secret\x1a\xfd\x01Updates the status of a client secret. This endpoint allows you to activate or deactivate a client secret. Use this to rotate secrets or revoke access for compromised credentials. The secret value itself cannot be modified - create a new secret instead.J\x96\x01\n\x03\x32\x30\x30\x12\x8e\x01\nWClient secret updated successfully. Returns the updated secret with its current status.\x12\x33\n1\x1a/.scalekit.v1.clients.UpdateClientSecretResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02t\x1a//api/v1/clients/{client_id}/secrets/{secret_id}:\x06secretZ92//api/v1/clients/{client_id}/secrets/{secret_id}:\x06secret\x12\xe3\x03\n\x12\x44\x65leteClientSecret\x12..scalekit.v1.clients.DeleteClientSecretRequest\x1a\x16.google.protobuf.Empty\"\x84\x03\x92\x41\xb4\x02\n\x0e\x43lient Configs\x12\x14\x44\x65lete Client Secret\x1a\xc5\x01Permanently deletes a client secret. This operation cannot be undone. Use this endpoint to remove compromised or unused secrets. After deletion, the secret can no longer be used for authentication.JD\n\x03\x32\x30\x30\x12=\n;Client secret successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31*//api/v1/clients/{client_id}/secrets/{secret_id}\x12\x92\x05\n\x18\x43reateOrganizationClient\x12\x34.scalekit.v1.clients.CreateOrganizationClientRequest\x1a\x35.scalekit.v1.clients.CreateOrganizationClientResponse\"\x88\x04\x92\x41\xbf\x03\n\x08\x41PI Auth\x12\x1e\x43reate organization API client\x1arCreates a new API client for an organization. Returns the client details and a plain secret (available only once).J\x9e\x02\n\x03\x32\x30\x31\x12\x96\x02\n\xd8\x01\x41PI client created successfully. Returns the client ID and plain secret (only available at creation time). The client can be configured with scopes, audience values, and custom claims for fine-grained access control.\x12\x39\n7\x1a\x35.scalekit.v1.clients.CreateOrganizationClientResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x39\"//api/v1/organizations/{organization_id}/clients:\x06\x63lient\x12\xb5\x04\n\x15GetOrganizationClient\x12\x31.scalekit.v1.clients.GetOrganizationClientRequest\x1a\x32.scalekit.v1.clients.GetOrganizationClientResponse\"\xb4\x03\x92\x41\xe7\x02\n\x08\x41PI Auth\x12\x1bGet organization API client\x1a>Retrieves details of a specific API client in an organization.J\xfd\x01\n\x03\x32\x30\x30\x12\xf5\x01\n\xba\x01Returns the complete API client configuration, including all current settings and a list of active secrets. Note that secret values are not included in the response for security reasons.\x12\x36\n4\x1a\x32.scalekit.v1.clients.GetOrganizationClientResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02=\x12;/api/v1/organizations/{organization_id}/clients/{client_id}\x12\x89\x05\n\x1e\x43reateOrganizationClientSecret\x12:.scalekit.v1.clients.CreateOrganizationClientSecretRequest\x1a;.scalekit.v1.clients.CreateOrganizationClientSecretResponse\"\xed\x03\x92\x41\x98\x03\n\x08\x41PI Auth\x12%Create organization API client secret\x1a\x64\x43reates a new secret for an organization API client. Returns the plain secret (available only once).J\xfe\x01\n\x03\x32\x30\x31\x12\xf6\x01\n\xb2\x01\x43lient secret created successfully. Returns the new secret ID and the plain secret value (only available at creation time). The secret can be used immediately for authentication.\x12?\n=\x1a;.scalekit.v1.clients.CreateOrganizationClientSecretResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x45\"C/api/v1/organizations/{organization_id}/clients/{client_id}/secrets\x12\xaf\x03\n\x1e\x44\x65leteOrganizationClientSecret\x12:.scalekit.v1.clients.DeleteOrganizationClientSecretRequest\x1a\x16.google.protobuf.Empty\"\xb8\x02\x92\x41\xd7\x01\n\x08\x41PI Auth\x12%Delete organization API client secret\x1a^Permanently deletes a secret from an organization API client. This operation cannot be undone.JD\n\x03\x32\x30\x30\x12=\n;Client secret successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02Q*O/api/v1/organizations/{organization_id}/clients/{client_id}/secrets/{secret_id}\x12\xc2\x04\n\x18UpdateOrganizationClient\x12\x34.scalekit.v1.clients.UpdateOrganizationClientRequest\x1a\x35.scalekit.v1.clients.UpdateOrganizationClientResponse\"\xb8\x03\x92\x41\xe3\x02\n\x08\x41PI Auth\x12\x1eUpdate organization API client\x1aPUpdates an existing organization API client. Only specified fields are modified.J\xe4\x01\n\x03\x32\x30\x30\x12\xdc\x01\n\x9e\x01Returns the updated organization API client with all current details reflected in the response, including modified scopes, audience values, and custom claims.\x12\x39\n7\x1a\x35.scalekit.v1.clients.UpdateOrganizationClientResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x45\x32;/api/v1/organizations/{organization_id}/clients/{client_id}:\x06\x63lient\x12\xa3\x04\n\x18\x44\x65leteOrganizationClient\x12\x34.scalekit.v1.clients.DeleteOrganizationClientRequest\x1a\x16.google.protobuf.Empty\"\xb8\x03\x92\x41\xeb\x02\n\x08\x41PI Auth\x12\x1e\x44\x65lete organization API client\x1a\xee\x01Permanently deletes an API client from an organization. This operation cannot be undone and will revoke all access for the client. All associated secrets will also be invalidated. Use this endpoint to remove unused or compromised clients.JN\n\x03\x32\x30\x30\x12G\nEOrganization API client successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02=*;/api/v1/organizations/{organization_id}/clients/{client_id}\x12\xe8\x04\n\x17ListOrganizationClients\x12\x33.scalekit.v1.clients.ListOrganizationClientsRequest\x1a\x34.scalekit.v1.clients.ListOrganizationClientsResponse\"\xe1\x03\x92\x41\xa0\x03\n\x08\x41PI Auth\x12\x1dList organization API clients\x1a\xb9\x01Retrieves a paginated list of API clients for a specific organization. Returns client details including metadata, scopes, and secret information (without exposing actual secret values).J\xb8\x01\n\x03\x32\x30\x30\x12\xb0\x01\ntList of organization API clients returned successfully. Each client includes its configuration details and metadata.\x12\x38\n6\x1a\x34.scalekit.v1.clients.ListOrganizationClientsResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x31\x12//api/v1/organizations/{organization_id}/clients\x12\x95\x03\n\x0e\x43reateResource\x12*.scalekit.v1.clients.CreateResourceRequest\x1a+.scalekit.v1.clients.CreateResourceResponse\"\xa9\x02\x92\x41\xed\x01\n\x08\x41PI Auth\x12\x0f\x43reate Resource\x1aXCreates a new client resource. The response includes the resource ID and other metadata.Jv\n\x03\x32\x30\x31\x12o\nResource details retrieved successfully. Returns the resource.\x12,\n*\x1a(.scalekit.v1.clients.GetResourceResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\x12\x1f/api/v1/resources/{resource_id}\x12\xd3\x02\n\rListResources\x12).scalekit.v1.clients.ListResourcesRequest\x1a*.scalekit.v1.clients.ListResourcesResponse\"\xea\x01\x92\x41\xb8\x01\n\x08\x41PI Auth\x12\x11List applications\x1a\x36Retrieves a paginated list of API client applications.Ja\n\x03\x32\x30\x30\x12Z\n(List of resources returned successfully.\x12.\n,\x1a*.scalekit.v1.clients.ListResourcesResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x13\x12\x11/api/v1/resources\x12\x93\x03\n\x0eUpdateResource\x12*.scalekit.v1.clients.UpdateResourceRequest\x1a+.scalekit.v1.clients.UpdateResourceResponse\"\xa7\x02\x92\x41\xdd\x01\n\x08\x41PI Auth\x12\x0fUpdate Resource\x1aHUpdates an existing client resource. Only specified fields are modified.Jv\n\x03\x32\x30\x30\x12o\nResource details retrieved successfully. Returns the resource.\x12,\n*\x1a(.scalekit.v1.clients.GetResourceResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\x1a//api/v1/resources/{resource_id}/provider:delete\x12\xf5\x03\n\x14\x43reateResourceClient\x12\x30.scalekit.v1.clients.CreateResourceClientRequest\x1a\x31.scalekit.v1.clients.CreateResourceClientResponse\"\xf7\x02\x92\x41\xa7\x02\n\x08\x41PI Auth\x12\x16\x43reate Resource Client\x1apCreates a new API client under the specified resource. Returns client details and the plain secret (shown once).J\x90\x01\n\x03\x32\x30\x31\x12\x88\x01\nOClient created successfully. Returns the client configuration and plain secret.\x12\x35\n3\x1a\x31.scalekit.v1.clients.CreateResourceClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\"\'/api/v1/resources/{resource_id}/clients:\x06\x63lient\x12\xcf\x03\n\x14UpdateResourceClient\x12\x30.scalekit.v1.clients.UpdateResourceClientRequest\x1a\x31.scalekit.v1.clients.UpdateResourceClientResponse\"\xd1\x02\x92\x41\xf5\x01\n\x08\x41PI Auth\x12\x16Update Resource Client\x1aHUpdates the configuration of an API client under the specified resource.J\x86\x01\n\x03\x32\x30\x30\x12\x7f\nFClient updated successfully. Returns the updated client configuration.\x12\x35\n3\x1a\x31.scalekit.v1.clients.UpdateResourceClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02=23/api/v1/resources/{resource_id}/clients/{client_id}:\x06\x63lient\x12\xce\x03\n\x11GetResourceClient\x12-.scalekit.v1.clients.GetResourceClientRequest\x1a..scalekit.v1.clients.GetResourceClientResponse\"\xd9\x02\x92\x41\x85\x02\n\x08\x41PI Auth\x12\x17Get Resource API Client\x1aJRetrieves details of a specific API client associated with an application.J\x93\x01\n\x03\x32\x30\x30\x12\x8b\x01\nUClient details retrieved successfully. Returns the resource and client configuration.\x12\x32\n0\x1a..scalekit.v1.clients.GetResourceClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x35\x12\x33/api/v1/resources/{resource_id}/clients/{client_id}\x12\xe7\x03\n\x13ListResourceClients\x12/.scalekit.v1.clients.ListResourceClientsRequest\x1a\x30.scalekit.v1.clients.ListResourceClientsResponse\"\xec\x02\x92\x41\xa4\x02\n\x08\x41PI Auth\x12\x19List Resource API Clients\x1aPRetrieves a list of API clients associated with a specific application resource.J\xaa\x01\n\x03\x32\x30\x30\x12\xa2\x01\njList of clients retrieved successfully. Returns the resource details and associated client configurations.\x12\x34\n2\x1a\x30.scalekit.v1.clients.ListResourceClientsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)\x12\'/api/v1/resources/{resource_id}/clients\x12\xcb\x03\n\x18ListResourceUserConsents\x12\x34.scalekit.v1.clients.ListResourceUserConsentsRequest\x1a\x35.scalekit.v1.clients.ListResourceUserConsentsResponse\"\xc1\x02\x92\x41\x8b\x02\n\x08\x41PI Auth\x12!List user consents for a resource\x1ajRetrieves a paginated list of user consents for a given resource, with optional search by external user IDJp\n\x03\x32\x30\x30\x12i\n,List of user consents retrieved successfully\x12\x39\n7\x1a\x35.scalekit.v1.clients.ListResourceUserConsentsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x17\x12\x15/api/v1/user_consents\x12\x87\x03\n\x14\x44\x65leteResourceClient\x12\x30.scalekit.v1.clients.DeleteResourceClientRequest\x1a\x31.scalekit.v1.clients.DeleteResourceClientResponse\"\x89\x02\x92\x41\xb5\x01\n\x08\x41PI Auth\x12\x16\x44\x65lete Resource Client\x1a\x33\x44\x65letes an API client under the specified resource.J\\\n\x03\x32\x30\x30\x12U\n\x1c\x43lient deleted successfully.\x12\x35\n3\x1a\x31.scalekit.v1.clients.DeleteResourceClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x35*3/api/v1/resources/{resource_id}/clients/{client_id}\x12\x82\x04\n\x0eRegisterClient\x12*.scalekit.v1.clients.RegisterClientRequest\x1a+.scalekit.v1.clients.RegisterClientResponse\"\x96\x03\x92\x41\xc2\x02\n\x08\x41PI Auth\x12\x13Register API client\x1a\x84\x01Registers a new API client under an existing resource using dynamic client registration. Returns the created client and its secrets.J\x99\x01\n\x03\x32\x30\x31\x12\x91\x01\n^Client registered successfully. Returns client details and plain secret (available only once).\x12/\n-\x1a+.scalekit.v1.clients.RegisterClientResponse\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x35\"+/api/v1/resources/{res_id}/clients:register:\x06\x63lient\x12\xb6\x05\n\x0b\x43reateScope\x12\'.scalekit.v1.clients.CreateScopeRequest\x1a(.scalekit.v1.clients.CreateScopeResponse\"\xd3\x04\x88\x02\x01\x92\x41\xeb\x03\x12\x19\x43reate scope (Deprecated)\x1a\xa1\x02\x44\x45PRECATED: Use permission management APIs instead. Creates a new OAuth scope for API authorization. Scopes define the level of access granted to API clients. Reserved OpenID Connect scopes (profile, email, address, phone) cannot be created as they are automatically managed by the system.J\xa9\x01\n\x03\x32\x30\x31\x12\xa1\x01\nqOAuth scope created successfully. Returns the newly created scope with its name, description, and enabled status.\x12,\n*\x1a(.scalekit.v1.clients.CreateScopeResponse\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x46\"\x0e/api/v1/scopes:\x05scopeZ-\"$/api/v1/environments/{env_id}/scopes:\x05scope\x12\xe9\x03\n\nListScopes\x12&.scalekit.v1.clients.ListScopesRequest\x1a\'.scalekit.v1.clients.ListScopesResponse\"\x89\x03\x92\x41\xb2\x02\x12\x0bList scopes\x1a\x7fRetrieves all OAuth scopes configured for the environment. Returns both custom scopes and system-managed OpenID Connect scopes.J\xa1\x01\n\x03\x32\x30\x30\x12\x99\x01\njList of OAuth scopes returned successfully. Each scope includes its name, description, and enabled status.\x12+\n)\x1a\'.scalekit.v1.clients.ListScopesResponse\x82\xb5\x18\x02\x18`\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x38\x12\x0e/api/v1/scopesZ&\x12$/api/v1/environments/{env_id}/scopes\x12\xaf\x04\n\x0bUpdateScope\x12\'.scalekit.v1.clients.UpdateScopeRequest\x1a(.scalekit.v1.clients.UpdateScopeResponse\"\xcc\x03\x88\x02\x01\x92\x41\x8e\x03\x12\x19Update scope (Deprecated)\x1a\xe0\x01\x44\x45PRECATED: Use permission management APIs instead. Updates an existing OAuth scope\'s description and enabled status. Reserved OpenID Connect scopes (profile, email, address, phone) cannot be modified through this endpoint.J\x8d\x01\n\x03\x32\x30\x30\x12\x85\x01\nUOAuth scope updated successfully. Returns the updated scope with all current details.\x12,\n*\x1a(.scalekit.v1.clients.UpdateScopeResponse\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1c\x32\x13/api/v1/scopes/{id}:\x05scope\x12\xe0\x03\n\x0b\x44\x65leteScope\x12\'.scalekit.v1.clients.DeleteScopeRequest\x1a\x16.google.protobuf.Empty\"\x8f\x03\x88\x02\x01\x92\x41\xd8\x02\x12\x19\x44\x65lete scope (Deprecated)\x1a\xf6\x01\x44\x45PRECATED: Use permission management APIs instead. Permanently deletes an OAuth scope from the environment. This operation cannot be undone. Reserved OpenID Connect scopes (profile, email, address, phone) cannot be deleted through this endpoint.JB\n\x03\x32\x30\x30\x12;\n9OAuth scope successfully deleted and no longer accessible\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15*\x13/api/v1/scopes/{id}\x12\x97\x01\n\x11GetConsentDetails\x12\x16.google.protobuf.Empty\x1a..scalekit.v1.clients.GetConsentDetailsResponse\":\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1f\x12\x1d/api/v1/oauth/consent/details\x12\xc2\x01\n\x11RevokeUserConsent\x12-.scalekit.v1.clients.RevokeUserConsentRequest\x1a..scalekit.v1.clients.RevokeUserConsentResponse\"N\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x33*1/api/v1/clients/{client_id}/consents/{consent_id}\x12\xea\x03\n\x18\x45nsureResourceConnection\x12\x34.scalekit.v1.clients.EnsureResourceConnectionRequest\x1a\x35.scalekit.v1.clients.EnsureResourceConnectionResponse\"\xe0\x02\x92\x41\x91\x02\n\x08\x41PI Auth\x12!Get or Create Resource Connection\x1aSRetrieves an existing resource connection or creates a new one if it doesn\'t exist.J\x8c\x01\n\x03\x32\x30\x30\x12\x84\x01\nBReturns the existing or newly created resource connection details.\x12>\n<\x1a:.scalekit.v1.clients.GetOrCreateResourceConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x30\"+/api/v1/resources/{resource_id}/connections:\x01*\x1a\xb8\x03\x92\x41\xb4\x03\n\x08\x41PI Auth\x12\xfd\x02\x45ndpoints for managing API client applications. API clients enable secure, automated interactions between software systems without human intervention. Each client is uniquely identified by a `client_id` and can be configured with authentication settings, redirect URIs, and security parameters. Use these endpoints to create, manage, and configure API clients for your API clients.\x1a(\x12&https://docs.scalekit.com/m2m/overviewB3Z1github.com/scalekit-inc/scalekit/pkg/grpc/clientsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -430,11 +430,11 @@ _globals['_GETCLIENTRESPONSE'].fields_by_name['client']._loaded_options = None _globals['_GETCLIENTRESPONSE'].fields_by_name['client']._serialized_options = b'\222A\245\0012\242\001Complete client configuration including authentication settings, redirect URIs, and secrets. This contains all current settings for the requested client resource.' _globals['_LISTCLIENTSREQUEST_FILTER'].fields_by_name['client_type']._loaded_options = None - _globals['_LISTCLIENTSREQUEST_FILTER'].fields_by_name['client_type']._serialized_options = b'\222A\326\0012\323\001Filters clients by type. Valid values: WEB, ENV, WEB_APP, NTV, SPA, ALL. Defaults to WEB. ALL takes precedence and other types are ignored. For resource-specific clients (e.g., M2M), use ListResourceClients API.' + _globals['_LISTCLIENTSREQUEST_FILTER'].fields_by_name['client_type']._serialized_options = b'\222A\321\0012\316\001Filters clients by type. Valid values: ENV, WEB_APP, NTV, SPA, ALL. Defaults to ENV. ALL takes precedence and other types are ignored. For resource-specific clients (e.g., M2M), use ListResourceClients API.' _globals['_LISTCLIENTSREQUEST'].fields_by_name['include_plain_secret']._loaded_options = None _globals['_LISTCLIENTSREQUEST'].fields_by_name['include_plain_secret']._serialized_options = b'\222A\273\0012\261\001Whether to include plain secret values in the response. Enable only during initial client creation, then store secrets securely. Not available when filtering by ALL client typesJ\005false' _globals['_LISTCLIENTSREQUEST'].fields_by_name['filter']._loaded_options = None - _globals['_LISTCLIENTSREQUEST'].fields_by_name['filter']._serialized_options = b'\222A?2=Filters clients by type: WEB, ENV, WEB_APP, NTV, SPA, or ALL.' + _globals['_LISTCLIENTSREQUEST'].fields_by_name['filter']._serialized_options = b'\222A:28Filters clients by type: ENV, WEB_APP, NTV, SPA, or ALL.' _globals['_LISTCLIENTSREQUEST'].fields_by_name['page_token']._loaded_options = None _globals['_LISTCLIENTSREQUEST'].fields_by_name['page_token']._serialized_options = b'\222A;2\"Token for the next page of resultsJ\025\"next_page_token_123\"' _globals['_LISTCLIENTSREQUEST'].fields_by_name['page_size']._loaded_options = None @@ -460,7 +460,7 @@ _globals['_CREATECLIENT'].fields_by_name['initiate_login_uri']._loaded_options = None _globals['_CREATECLIENT'].fields_by_name['initiate_login_uri']._serialized_options = b'\222A\307\0012\243\001Pre-configured URI for initiating login flows. This URI is used to start authentication flows programmatically. Must use HTTPS protocol and contain a valid domain.J\037\"https://app.example.com/login\"' _globals['_CREATECLIENT'].fields_by_name['post_login_uris']._loaded_options = None - _globals['_CREATECLIENT'].fields_by_name['post_login_uris']._serialized_options = b'\222A\275\0012uList of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\272H\014\222\001\t\030\001\"\005r\003\210\001\001' + _globals['_CREATECLIENT'].fields_by_name['post_login_uris']._serialized_options = b'\222A\347\0012\236\001List of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTPS in production environments. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\272H\005\222\001\002\030\001' _globals['_CREATECLIENT'].fields_by_name['access_token_expiry']._loaded_options = None _globals['_CREATECLIENT'].fields_by_name['access_token_expiry']._serialized_options = b'\222A42,Expiry time in seconds for the access token.J\0043600' _globals['_CREATECLIENT'].fields_by_name['scopes']._loaded_options = None @@ -480,13 +480,9 @@ _globals['_UPDATECLIENTREQUEST'].fields_by_name['client_id']._loaded_options = None _globals['_UPDATECLIENTREQUEST'].fields_by_name['client_id']._serialized_options = b'\222AT2:Unique identifier of the registered application to update.J\026\"skc_01H9XPQR7ZY2AJKL\"\272H\006r\004\020\001\030 ' _globals['_UPDATECLIENTREQUEST'].fields_by_name['client']._loaded_options = None - _globals['_UPDATECLIENTREQUEST'].fields_by_name['client']._serialized_options = b'\222A\331\0012bApplication configuration parameters to update. Contains redirect URIs and authentication settingsJs{\"redirect_uris\": [\"https://app.example.com/callback\"], \"default_redirect_uri\": \"https://app.example.com/callback\"}\272H\003\310\001\001' + _globals['_UPDATECLIENTREQUEST'].fields_by_name['client']._serialized_options = b'\222A\242\0012eApplication configuration parameters to update. Contains post_login_uris and authentication settings.J9{\"post_login_uris\": [\"https://app.example.com/callback\"]}\272H\003\310\001\001' _globals['_UPDATECLIENTREQUEST'].fields_by_name['mask']._loaded_options = None _globals['_UPDATECLIENTREQUEST'].fields_by_name['mask']._serialized_options = b'\340A\003\372\322\344\223\002\t\022\007PREVIEW' - _globals['_UPDATECLIENT'].fields_by_name['redirect_uris']._loaded_options = None - _globals['_UPDATECLIENT'].fields_by_name['redirect_uris']._serialized_options = b'\222A\345\0012\234\001List of allowed redirect URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTPS in production environments. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\272H\014\222\001\t\030\001\"\005r\003\210\001\001' - _globals['_UPDATECLIENT'].fields_by_name['default_redirect_uri']._loaded_options = None - _globals['_UPDATECLIENT'].fields_by_name['default_redirect_uri']._serialized_options = b'\222A\247\0012\200\001Primary redirect URI used when none is specified in authorization requests. Must exactly match one of the URIs in redirect_uris.J\"\"https://app.example.com/callback\"\272H5\272\0012\n\tvalid_uri\022\027uri must be a valid URI\032\014this.isUri()' _globals['_UPDATECLIENT'].fields_by_name['back_channel_logout_uris']._loaded_options = None _globals['_UPDATECLIENT'].fields_by_name['back_channel_logout_uris']._serialized_options = b'\222A\366\0012\225\001HTTPS endpoints for receiving back-channel logout notifications. Required for implementing application-initiated logout flows and session management.J\\[\"https://app.example.com/backchannel-logout\", \"https://app.example.com/backchannel-logout\"]\272H\014\222\001\t\030\001\"\005r\003\210\001\001' _globals['_UPDATECLIENT'].fields_by_name['post_logout_redirect_uris']._loaded_options = None @@ -494,7 +490,7 @@ _globals['_UPDATECLIENT'].fields_by_name['initiate_login_uri']._loaded_options = None _globals['_UPDATECLIENT'].fields_by_name['initiate_login_uri']._serialized_options = b'\222A\307\0012\243\001Pre-configured URI for initiating login flows. This URI is used to start authentication flows programmatically. Must use HTTPS protocol and contain a valid domain.J\037\"https://app.example.com/login\"' _globals['_UPDATECLIENT'].fields_by_name['post_login_uris']._loaded_options = None - _globals['_UPDATECLIENT'].fields_by_name['post_login_uris']._serialized_options = b'\222A\347\0012\236\001List of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTPS in production environments. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\272H\014\222\001\t\030\001\"\005r\003\210\001\001' + _globals['_UPDATECLIENT'].fields_by_name['post_login_uris']._serialized_options = b'\222A\347\0012\236\001List of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTPS in production environments. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\272H\005\222\001\002\030\001' _globals['_UPDATECLIENT'].fields_by_name['name']._loaded_options = None _globals['_UPDATECLIENT'].fields_by_name['name']._serialized_options = b'\222A\272\0012\236\001A descriptive name for the API client that helps identify its purpose. This name is displayed in the dashboard and logs. Must be between 1 and 128 characters.J\027\"My Application Client\"' _globals['_UPDATECLIENT'].fields_by_name['access_token_expiry']._loaded_options = None @@ -510,7 +506,7 @@ _globals['_UPDATECLIENT'].fields_by_name['enforce_pkce']._loaded_options = None _globals['_UPDATECLIENT'].fields_by_name['enforce_pkce']._serialized_options = b'\222A\235\0012\224\001Whether Proof Key for Code Exchange (PKCE) is required. PKCE mitigates authorization code interception attacks. Defaults to true for public clients.J\004true' _globals['_UPDATECLIENT']._loaded_options = None - _globals['_UPDATECLIENT']._serialized_options = b'\222A\375\001\n\275\001*\033Update Client Configuration2\235\001Parameters for updating an API client application\'s configuration. This allows modification of redirect URIs, logout settings, and other security parameters.*;\n\021API Documentation\022&https://docs.scalekit.com/m2m/overview' + _globals['_UPDATECLIENT']._serialized_options = b'\222A\377\001\n\277\001*\033Update Client Configuration2\237\001Parameters for updating an API client application\'s configuration. This allows modification of post_login_uris, logout settings, and other security parameters.*;\n\021API Documentation\022&https://docs.scalekit.com/m2m/overview' _globals['_UPDATECLIENTRESPONSE'].fields_by_name['client']._loaded_options = None _globals['_UPDATECLIENTRESPONSE'].fields_by_name['client']._serialized_options = b'\222AW2UUpdated application configuration with all current settings reflected in the response' _globals['_CREATECLIENTSECRETREQUEST'].fields_by_name['client_id']._loaded_options = None @@ -545,10 +541,6 @@ _globals['_CLIENT'].fields_by_name['create_time']._serialized_options = b'\222A\256\0012\217\001Timestamp indicating when the client configuration was initially created. This field is automatically set by the server and cannot be modified.J\032\"2024-01-05T14:48:00.000Z\"' _globals['_CLIENT'].fields_by_name['update_time']._loaded_options = None _globals['_CLIENT'].fields_by_name['update_time']._serialized_options = b'\222A\277\0012\240\001Timestamp of the last modification to the client configuration. This field is automatically updated by the server whenever any aspect of the client is modified.J\032\"2024-01-10T09:12:00.000Z\"' - _globals['_CLIENT'].fields_by_name['redirect_uris']._loaded_options = None - _globals['_CLIENT'].fields_by_name['redirect_uris']._serialized_options = b'\222A\253\0022\333\001List of allowed redirect URIs for OAuth 2.0 authorization flows. These URIs must use HTTPS protocol in production environments and comply with RFC 6749. Users will be redirected to one of these URIs after authorization.JK[\"https://auth.your-app.com/callback\", \"https://scalekit.example.org/auth\"]' - _globals['_CLIENT'].fields_by_name['default_redirect_uri']._loaded_options = None - _globals['_CLIENT'].fields_by_name['default_redirect_uri']._serialized_options = b'\222A\311\0012\240\001Primary redirect URI used when none is explicitly specified in authorization requests. This URI must exactly match one of the entries in the redirect_uris list.J$\"https://auth.your-app.com/callback\"' _globals['_CLIENT'].fields_by_name['secrets']._loaded_options = None _globals['_CLIENT'].fields_by_name['secrets']._serialized_options = b'\222A\343\0012\340\001List of client secrets used for authentication. Each secret is stored securely using one-way hashing (bcrypt). The plaintext secret values are only displayed during initial creation and must be stored securely by the client.' _globals['_CLIENT'].fields_by_name['post_logout_redirect_uris']._loaded_options = None @@ -572,7 +564,7 @@ _globals['_CLIENT'].fields_by_name['grant_types']._loaded_options = None _globals['_CLIENT'].fields_by_name['grant_types']._serialized_options = b'\222A\204\0012CList of OAuth 2.0 grant types that the client is authorized to use.J=[\"authorization_code\", \"refresh_token\", \"client_credentials\"]' _globals['_CLIENT'].fields_by_name['client_type']._loaded_options = None - _globals['_CLIENT'].fields_by_name['client_type']._serialized_options = b'\222AB29Type of client. Valid values: WEB, ENV, WEB_APP, NTV, SPAJ\005\"WEB\"' + _globals['_CLIENT'].fields_by_name['client_type']._serialized_options = b'\222A=24Type of client. Valid values: ENV, WEB_APP, NTV, SPAJ\005\"ENV\"' _globals['_CLIENT'].fields_by_name['enforce_pkce']._loaded_options = None _globals['_CLIENT'].fields_by_name['enforce_pkce']._serialized_options = b'\222A\235\0012\224\001Whether Proof Key for Code Exchange (PKCE) is required. PKCE mitigates authorization code interception attacks. Defaults to true for public clients.J\004true' _globals['_CLIENT']._loaded_options = None @@ -633,6 +625,12 @@ _globals['_GETCONSENTDETAILSRESPONSE'].fields_by_name['scopes']._serialized_options = b'\222A]2[List of scopes for which consent was granted. Each scope includes its name and description.' _globals['_GETCONSENTDETAILSRESPONSE'].fields_by_name['application']._loaded_options = None _globals['_GETCONSENTDETAILSRESPONSE'].fields_by_name['application']._serialized_options = b'\222A&2$Details of the requested application' + _globals['_GETCONSENTDETAILSRESPONSE'].fields_by_name['organization']._loaded_options = None + _globals['_GETCONSENTDETAILSRESPONSE'].fields_by_name['organization']._serialized_options = b'\222A.2,Organization context for the consent screen.' + _globals['_CONSENTORGANIZATION'].fields_by_name['organization_name']._loaded_options = None + _globals['_CONSENTORGANIZATION'].fields_by_name['organization_name']._serialized_options = b'\222Ad2UName of the organization the user is authenticating into. Omitted when not available.J\013\"Acme Corp\"' + _globals['_CONSENTORGANIZATION'].fields_by_name['organization_meta_name']._loaded_options = None + _globals['_CONSENTORGANIZATION'].fields_by_name['organization_meta_name']._serialized_options = b'\222At2bEnvironment-level label for what an organization is called (e.g. Workspace, Team). Always present.J\016\"Organization\"' _globals['_CONSENTCLIENT'].fields_by_name['name']._loaded_options = None _globals['_CONSENTCLIENT'].fields_by_name['name']._serialized_options = b'\222A;2.Name of the client resource requesting consentJ\t\"VS Code\"' _globals['_CONSENTCLIENT'].fields_by_name['privacy_uri']._loaded_options = None @@ -682,7 +680,7 @@ _globals['_CLIENTSERVICE'].methods_by_name['GetClient']._loaded_options = None _globals['_CLIENTSERVICE'].methods_by_name['GetClient']._serialized_options = b'\222A\267\003\n\016Client Configs\022\030Get Client Configuration\032\305\001Retrieves complete client configuration including scopes, custom claims, redirect URIs, and access token expiration time. Use this endpoint to view or verify client settings and security parametersJ\302\001\n\003200\022\272\001\n\213\001Client configuration retrieved successfully. Returns full client metadata including scopes, audience, custom claims, and security settings.\022*\n(\032&.scalekit.v1.clients.GetClientResponse\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\035\022\033/api/v1/clients/{client_id}' _globals['_CLIENTSERVICE'].methods_by_name['UpdateClient']._loaded_options = None - _globals['_CLIENTSERVICE'].methods_by_name['UpdateClient']._serialized_options = b'\222A\231\004\n\016Client Configs\022\033Update Client Configuration\032\260\002Updates the configuration settings for an M2M client. This endpoint allows you to modify client properties such as redirect URIs, scopes, audience, and custom claims. Required fields include redirect_uris and default_redirect_uri. Note that client_id and create_time are immutable and cannot be modified.J\266\001\n\003201\022\256\001\n}Client configuration updated successfully. Returns the updated client resource with new update_time and all current settings.\022-\n+\032).scalekit.v1.clients.UpdateClientResponse\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002%2\033/api/v1/clients/{client_id}:\006client' + _globals['_CLIENTSERVICE'].methods_by_name['UpdateClient']._serialized_options = b'\222A\243\004\n\016Client Configs\022\033Update Client Configuration\032\272\002Updates the configuration settings for a client. Only fields included in the request are modified. Updatable fields include post_login_uris, post_logout_redirect_uris, back_channel_logout_uris, initiate_login_uri, scopes, audience, and custom claims. client_id and create_time are immutable and cannot be modified.J\266\001\n\003201\022\256\001\n}Client configuration updated successfully. Returns the updated client resource with new update_time and all current settings.\022-\n+\032).scalekit.v1.clients.UpdateClientResponse\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002%2\033/api/v1/clients/{client_id}:\006client' _globals['_CLIENTSERVICE'].methods_by_name['DeleteClient']._loaded_options = None _globals['_CLIENTSERVICE'].methods_by_name['DeleteClient']._serialized_options = b'\222A\213\002\n\006Client\022\rDelete Client\032\262\001Permanently deletes a client and associated secrets. This operation cannot be undone. Supports WEB_APP, NTV, and SPA client types only. Cannot delete default environment clients.J=\n\003200\0226\n4Client successfully deleted and no longer accessible\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\035*\033/api/v1/clients/{client_id}' _globals['_CLIENTSERVICE'].methods_by_name['CreateClientSecret']._loaded_options = None @@ -745,12 +743,12 @@ _globals['_CLIENTSERVICE'].methods_by_name['RevokeUserConsent']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\0023*1/api/v1/clients/{client_id}/consents/{consent_id}' _globals['_CLIENTSERVICE'].methods_by_name['EnsureResourceConnection']._loaded_options = None _globals['_CLIENTSERVICE'].methods_by_name['EnsureResourceConnection']._serialized_options = b'\222A\221\002\n\010API Auth\022!Get or Create Resource Connection\032SRetrieves an existing resource connection or creates a new one if it doesn\'t exist.J\214\001\n\003200\022\204\001\nBReturns the existing or newly created resource connection details.\022>\n<\032:.scalekit.v1.clients.GetOrCreateResourceConnectionResponse\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\0020\"+/api/v1/resources/{resource_id}/connections:\001*' - _globals['_RESOURCETYPE']._serialized_start=52841 - _globals['_RESOURCETYPE']._serialized_end=52948 - _globals['_CLIENTSECRETSTATUS']._serialized_start=52950 - _globals['_CLIENTSECRETSTATUS']._serialized_end=52996 - _globals['_RESOURCECONNECTIONTYPE']._serialized_start=52998 - _globals['_RESOURCECONNECTIONTYPE']._serialized_end=53047 + _globals['_RESOURCETYPE']._serialized_start=52203 + _globals['_RESOURCETYPE']._serialized_end=52310 + _globals['_CLIENTSECRETSTATUS']._serialized_start=52312 + _globals['_CLIENTSECRETSTATUS']._serialized_end=52358 + _globals['_RESOURCECONNECTIONTYPE']._serialized_start=52360 + _globals['_RESOURCECONNECTIONTYPE']._serialized_end=52409 _globals['_CREATERESOURCEREQUEST']._serialized_start=558 _globals['_CREATERESOURCEREQUEST']._serialized_end=696 _globals['_CREATERESOURCE']._serialized_start=699 @@ -850,81 +848,83 @@ _globals['_GETCLIENTRESPONSE']._serialized_start=29794 _globals['_GETCLIENTRESPONSE']._serialized_end=30039 _globals['_LISTCLIENTSREQUEST']._serialized_start=30042 - _globals['_LISTCLIENTSREQUEST']._serialized_end=30917 - _globals['_LISTCLIENTSREQUEST_FILTER']._serialized_start=30648 - _globals['_LISTCLIENTSREQUEST_FILTER']._serialized_end=30911 - _globals['_LISTCLIENTSRESPONSE']._serialized_start=30920 - _globals['_LISTCLIENTSRESPONSE']._serialized_end=31417 - _globals['_CREATECLIENTREQUEST']._serialized_start=31420 - _globals['_CREATECLIENTREQUEST']._serialized_end=31657 - _globals['_CREATECLIENT']._serialized_start=31660 - _globals['_CREATECLIENT']._serialized_end=34676 - _globals['_CREATECLIENTRESPONSE']._serialized_start=34679 - _globals['_CREATECLIENTRESPONSE']._serialized_end=34819 - _globals['_UPDATECLIENTREQUEST']._serialized_start=34822 - _globals['_UPDATECLIENTREQUEST']._serialized_end=35328 - _globals['_UPDATECLIENT']._serialized_start=35331 - _globals['_UPDATECLIENT']._serialized_end=38819 - _globals['_UPDATECLIENTRESPONSE']._serialized_start=38822 - _globals['_UPDATECLIENTRESPONSE']._serialized_end=38990 - _globals['_CREATECLIENTSECRETREQUEST']._serialized_start=38993 - _globals['_CREATECLIENTSECRETREQUEST']._serialized_end=39167 - _globals['_CREATECLIENTSECRETRESPONSE']._serialized_start=39170 - _globals['_CREATECLIENTSECRETRESPONSE']._serialized_end=39599 - _globals['_UPDATECLIENTSECRETREQUEST']._serialized_start=39602 - _globals['_UPDATECLIENTSECRETREQUEST']._serialized_end=40245 - _globals['_UPDATECLIENTSECRET']._serialized_start=40248 - _globals['_UPDATECLIENTSECRET']._serialized_end=40484 - _globals['_UPDATECLIENTSECRETRESPONSE']._serialized_start=40487 - _globals['_UPDATECLIENTSECRETRESPONSE']._serialized_end=40718 - _globals['_DELETECLIENTREQUEST']._serialized_start=40721 - _globals['_DELETECLIENTREQUEST']._serialized_end=40854 - _globals['_DELETECLIENTSECRETREQUEST']._serialized_start=40857 - _globals['_DELETECLIENTSECRETREQUEST']._serialized_end=41164 - _globals['_CLIENT']._serialized_start=41167 - _globals['_CLIENT']._serialized_end=45606 - _globals['_CLIENTSECRET']._serialized_start=45609 - _globals['_CLIENTSECRET']._serialized_end=48106 - _globals['_SCOPE']._serialized_start=48109 - _globals['_SCOPE']._serialized_end=48421 - _globals['_CREATESCOPE']._serialized_start=48423 - _globals['_CREATESCOPE']._serialized_end=48536 - _globals['_CREATESCOPEREQUEST']._serialized_start=48539 - _globals['_CREATESCOPEREQUEST']._serialized_end=48782 - _globals['_CREATESCOPERESPONSE']._serialized_start=48784 - _globals['_CREATESCOPERESPONSE']._serialized_end=48855 - _globals['_LISTSCOPESREQUEST']._serialized_start=48858 - _globals['_LISTSCOPESREQUEST']._serialized_end=49028 - _globals['_LISTSCOPESRESPONSE']._serialized_start=49030 - _globals['_LISTSCOPESRESPONSE']._serialized_end=49102 - _globals['_UPDATESCOPEREQUEST']._serialized_start=49104 - _globals['_UPDATESCOPEREQUEST']._serialized_end=49215 - _globals['_UPDATESCOPE']._serialized_start=49217 - _globals['_UPDATESCOPE']._serialized_end=49328 - _globals['_UPDATESCOPERESPONSE']._serialized_start=49330 - _globals['_UPDATESCOPERESPONSE']._serialized_end=49401 - _globals['_DELETESCOPEREQUEST']._serialized_start=49403 - _globals['_DELETESCOPEREQUEST']._serialized_end=49452 - _globals['_GETCONSENTDETAILSRESPONSE']._serialized_start=49455 - _globals['_GETCONSENTDETAILSRESPONSE']._serialized_end=50059 - _globals['_CONSENTCLIENT']._serialized_start=50062 - _globals['_CONSENTCLIENT']._serialized_end=50760 - _globals['_CONSENTSCOPE']._serialized_start=50762 - _globals['_CONSENTSCOPE']._serialized_end=50854 - _globals['_USER']._serialized_start=50856 - _globals['_USER']._serialized_end=50970 - _globals['_REVOKEUSERCONSENTREQUEST']._serialized_start=50973 - _globals['_REVOKEUSERCONSENTREQUEST']._serialized_end=51263 - _globals['_REVOKEUSERCONSENTRESPONSE']._serialized_start=51265 - _globals['_REVOKEUSERCONSENTRESPONSE']._serialized_end=51292 - _globals['_ENSURERESOURCECONNECTIONREQUEST']._serialized_start=51295 - _globals['_ENSURERESOURCECONNECTIONREQUEST']._serialized_end=51454 - _globals['_ENSURERESOURCECONNECTIONRESPONSE']._serialized_start=51457 - _globals['_ENSURERESOURCECONNECTIONRESPONSE']._serialized_end=51669 - _globals['_RESOURCECONNECTION']._serialized_start=51672 - _globals['_RESOURCECONNECTION']._serialized_end=52616 - _globals['_RESOURCECUSTOMCONNECTIONSETTINGS']._serialized_start=52619 - _globals['_RESOURCECUSTOMCONNECTIONSETTINGS']._serialized_end=52839 - _globals['_CLIENTSERVICE']._serialized_start=53051 - _globals['_CLIENTSERVICE']._serialized_end=70772 + _globals['_LISTCLIENTSREQUEST']._serialized_end=30907 + _globals['_LISTCLIENTSREQUEST_FILTER']._serialized_start=30643 + _globals['_LISTCLIENTSREQUEST_FILTER']._serialized_end=30901 + _globals['_LISTCLIENTSRESPONSE']._serialized_start=30910 + _globals['_LISTCLIENTSRESPONSE']._serialized_end=31407 + _globals['_CREATECLIENTREQUEST']._serialized_start=31410 + _globals['_CREATECLIENTREQUEST']._serialized_end=31647 + _globals['_CREATECLIENT']._serialized_start=31650 + _globals['_CREATECLIENT']._serialized_end=34701 + _globals['_CREATECLIENTRESPONSE']._serialized_start=34704 + _globals['_CREATECLIENTRESPONSE']._serialized_end=34844 + _globals['_UPDATECLIENTREQUEST']._serialized_start=34847 + _globals['_UPDATECLIENTREQUEST']._serialized_end=35298 + _globals['_UPDATECLIENT']._serialized_start=35301 + _globals['_UPDATECLIENT']._serialized_end=38233 + _globals['_UPDATECLIENTRESPONSE']._serialized_start=38236 + _globals['_UPDATECLIENTRESPONSE']._serialized_end=38404 + _globals['_CREATECLIENTSECRETREQUEST']._serialized_start=38407 + _globals['_CREATECLIENTSECRETREQUEST']._serialized_end=38581 + _globals['_CREATECLIENTSECRETRESPONSE']._serialized_start=38584 + _globals['_CREATECLIENTSECRETRESPONSE']._serialized_end=39013 + _globals['_UPDATECLIENTSECRETREQUEST']._serialized_start=39016 + _globals['_UPDATECLIENTSECRETREQUEST']._serialized_end=39659 + _globals['_UPDATECLIENTSECRET']._serialized_start=39662 + _globals['_UPDATECLIENTSECRET']._serialized_end=39898 + _globals['_UPDATECLIENTSECRETRESPONSE']._serialized_start=39901 + _globals['_UPDATECLIENTSECRETRESPONSE']._serialized_end=40132 + _globals['_DELETECLIENTREQUEST']._serialized_start=40135 + _globals['_DELETECLIENTREQUEST']._serialized_end=40268 + _globals['_DELETECLIENTSECRETREQUEST']._serialized_start=40271 + _globals['_DELETECLIENTSECRETREQUEST']._serialized_end=40578 + _globals['_CLIENT']._serialized_start=40581 + _globals['_CLIENT']._serialized_end=44461 + _globals['_CLIENTSECRET']._serialized_start=44464 + _globals['_CLIENTSECRET']._serialized_end=46961 + _globals['_SCOPE']._serialized_start=46964 + _globals['_SCOPE']._serialized_end=47276 + _globals['_CREATESCOPE']._serialized_start=47278 + _globals['_CREATESCOPE']._serialized_end=47391 + _globals['_CREATESCOPEREQUEST']._serialized_start=47394 + _globals['_CREATESCOPEREQUEST']._serialized_end=47637 + _globals['_CREATESCOPERESPONSE']._serialized_start=47639 + _globals['_CREATESCOPERESPONSE']._serialized_end=47710 + _globals['_LISTSCOPESREQUEST']._serialized_start=47713 + _globals['_LISTSCOPESREQUEST']._serialized_end=47883 + _globals['_LISTSCOPESRESPONSE']._serialized_start=47885 + _globals['_LISTSCOPESRESPONSE']._serialized_end=47957 + _globals['_UPDATESCOPEREQUEST']._serialized_start=47959 + _globals['_UPDATESCOPEREQUEST']._serialized_end=48070 + _globals['_UPDATESCOPE']._serialized_start=48072 + _globals['_UPDATESCOPE']._serialized_end=48183 + _globals['_UPDATESCOPERESPONSE']._serialized_start=48185 + _globals['_UPDATESCOPERESPONSE']._serialized_end=48256 + _globals['_DELETESCOPEREQUEST']._serialized_start=48258 + _globals['_DELETESCOPEREQUEST']._serialized_end=48307 + _globals['_GETCONSENTDETAILSRESPONSE']._serialized_start=48310 + _globals['_GETCONSENTDETAILSRESPONSE']._serialized_end=49043 + _globals['_CONSENTORGANIZATION']._serialized_start=49046 + _globals['_CONSENTORGANIZATION']._serialized_end=49421 + _globals['_CONSENTCLIENT']._serialized_start=49424 + _globals['_CONSENTCLIENT']._serialized_end=50122 + _globals['_CONSENTSCOPE']._serialized_start=50124 + _globals['_CONSENTSCOPE']._serialized_end=50216 + _globals['_USER']._serialized_start=50218 + _globals['_USER']._serialized_end=50332 + _globals['_REVOKEUSERCONSENTREQUEST']._serialized_start=50335 + _globals['_REVOKEUSERCONSENTREQUEST']._serialized_end=50625 + _globals['_REVOKEUSERCONSENTRESPONSE']._serialized_start=50627 + _globals['_REVOKEUSERCONSENTRESPONSE']._serialized_end=50654 + _globals['_ENSURERESOURCECONNECTIONREQUEST']._serialized_start=50657 + _globals['_ENSURERESOURCECONNECTIONREQUEST']._serialized_end=50816 + _globals['_ENSURERESOURCECONNECTIONRESPONSE']._serialized_start=50819 + _globals['_ENSURERESOURCECONNECTIONRESPONSE']._serialized_end=51031 + _globals['_RESOURCECONNECTION']._serialized_start=51034 + _globals['_RESOURCECONNECTION']._serialized_end=51978 + _globals['_RESOURCECUSTOMCONNECTIONSETTINGS']._serialized_start=51981 + _globals['_RESOURCECUSTOMCONNECTIONSETTINGS']._serialized_end=52201 + _globals['_CLIENTSERVICE']._serialized_start=52413 + _globals['_CLIENTSERVICE']._serialized_end=70144 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/clients/clients_pb2.pyi b/scalekit/v1/clients/clients_pb2.pyi index 314b43f..f3f99f8 100644 --- a/scalekit/v1/clients/clients_pb2.pyi +++ b/scalekit/v1/clients/clients_pb2.pyi @@ -716,9 +716,7 @@ class UpdateClientRequest(_message.Message): def __init__(self, client_id: _Optional[str] = ..., client: _Optional[_Union[UpdateClient, _Mapping]] = ..., mask: _Optional[_Union[_field_mask_pb2.FieldMask, _Mapping]] = ...) -> None: ... class UpdateClient(_message.Message): - __slots__ = ("redirect_uris", "default_redirect_uri", "back_channel_logout_uris", "post_logout_redirect_uris", "initiate_login_uri", "post_login_uris", "name", "access_token_expiry", "scopes", "custom_claims", "disallow_scalekit_api_access", "grant_types", "enforce_pkce") - REDIRECT_URIS_FIELD_NUMBER: _ClassVar[int] - DEFAULT_REDIRECT_URI_FIELD_NUMBER: _ClassVar[int] + __slots__ = ("back_channel_logout_uris", "post_logout_redirect_uris", "initiate_login_uri", "post_login_uris", "name", "access_token_expiry", "scopes", "custom_claims", "disallow_scalekit_api_access", "grant_types", "enforce_pkce") BACK_CHANNEL_LOGOUT_URIS_FIELD_NUMBER: _ClassVar[int] POST_LOGOUT_REDIRECT_URIS_FIELD_NUMBER: _ClassVar[int] INITIATE_LOGIN_URI_FIELD_NUMBER: _ClassVar[int] @@ -730,8 +728,6 @@ class UpdateClient(_message.Message): DISALLOW_SCALEKIT_API_ACCESS_FIELD_NUMBER: _ClassVar[int] GRANT_TYPES_FIELD_NUMBER: _ClassVar[int] ENFORCE_PKCE_FIELD_NUMBER: _ClassVar[int] - redirect_uris: _containers.RepeatedScalarFieldContainer[str] - default_redirect_uri: str back_channel_logout_uris: _containers.RepeatedScalarFieldContainer[str] post_logout_redirect_uris: _containers.RepeatedScalarFieldContainer[str] initiate_login_uri: str @@ -743,7 +739,7 @@ class UpdateClient(_message.Message): disallow_scalekit_api_access: _wrappers_pb2.BoolValue grant_types: _containers.RepeatedScalarFieldContainer[str] enforce_pkce: _wrappers_pb2.BoolValue - def __init__(self, redirect_uris: _Optional[_Iterable[str]] = ..., default_redirect_uri: _Optional[str] = ..., back_channel_logout_uris: _Optional[_Iterable[str]] = ..., post_logout_redirect_uris: _Optional[_Iterable[str]] = ..., initiate_login_uri: _Optional[str] = ..., post_login_uris: _Optional[_Iterable[str]] = ..., name: _Optional[str] = ..., access_token_expiry: _Optional[int] = ..., scopes: _Optional[_Iterable[str]] = ..., custom_claims: _Optional[_Iterable[_Union[CustomClaim, _Mapping]]] = ..., disallow_scalekit_api_access: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., grant_types: _Optional[_Iterable[str]] = ..., enforce_pkce: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ...) -> None: ... + def __init__(self, back_channel_logout_uris: _Optional[_Iterable[str]] = ..., post_logout_redirect_uris: _Optional[_Iterable[str]] = ..., initiate_login_uri: _Optional[str] = ..., post_login_uris: _Optional[_Iterable[str]] = ..., name: _Optional[str] = ..., access_token_expiry: _Optional[int] = ..., scopes: _Optional[_Iterable[str]] = ..., custom_claims: _Optional[_Iterable[_Union[CustomClaim, _Mapping]]] = ..., disallow_scalekit_api_access: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., grant_types: _Optional[_Iterable[str]] = ..., enforce_pkce: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ...) -> None: ... class UpdateClientResponse(_message.Message): __slots__ = ("client",) @@ -804,13 +800,11 @@ class DeleteClientSecretRequest(_message.Message): def __init__(self, client_id: _Optional[str] = ..., secret_id: _Optional[str] = ...) -> None: ... class Client(_message.Message): - __slots__ = ("id", "keyId", "create_time", "update_time", "redirect_uris", "default_redirect_uri", "secrets", "post_logout_redirect_uris", "back_channel_logout_uris", "initiate_login_uri", "post_login_uris", "name", "access_token_expiry", "scopes", "custom_claims", "disallow_scalekit_api_access", "grant_types", "client_type", "enforce_pkce") + __slots__ = ("id", "keyId", "create_time", "update_time", "secrets", "post_logout_redirect_uris", "back_channel_logout_uris", "initiate_login_uri", "post_login_uris", "name", "access_token_expiry", "scopes", "custom_claims", "disallow_scalekit_api_access", "grant_types", "client_type", "enforce_pkce") ID_FIELD_NUMBER: _ClassVar[int] KEYID_FIELD_NUMBER: _ClassVar[int] CREATE_TIME_FIELD_NUMBER: _ClassVar[int] UPDATE_TIME_FIELD_NUMBER: _ClassVar[int] - REDIRECT_URIS_FIELD_NUMBER: _ClassVar[int] - DEFAULT_REDIRECT_URI_FIELD_NUMBER: _ClassVar[int] SECRETS_FIELD_NUMBER: _ClassVar[int] POST_LOGOUT_REDIRECT_URIS_FIELD_NUMBER: _ClassVar[int] BACK_CHANNEL_LOGOUT_URIS_FIELD_NUMBER: _ClassVar[int] @@ -828,8 +822,6 @@ class Client(_message.Message): keyId: str create_time: _timestamp_pb2.Timestamp update_time: _timestamp_pb2.Timestamp - redirect_uris: _containers.RepeatedScalarFieldContainer[str] - default_redirect_uri: str secrets: _containers.RepeatedCompositeFieldContainer[ClientSecret] post_logout_redirect_uris: _containers.RepeatedScalarFieldContainer[str] back_channel_logout_uris: _containers.RepeatedScalarFieldContainer[str] @@ -843,7 +835,7 @@ class Client(_message.Message): grant_types: _containers.RepeatedScalarFieldContainer[str] client_type: str enforce_pkce: bool - def __init__(self, id: _Optional[str] = ..., keyId: _Optional[str] = ..., create_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., update_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., redirect_uris: _Optional[_Iterable[str]] = ..., default_redirect_uri: _Optional[str] = ..., secrets: _Optional[_Iterable[_Union[ClientSecret, _Mapping]]] = ..., post_logout_redirect_uris: _Optional[_Iterable[str]] = ..., back_channel_logout_uris: _Optional[_Iterable[str]] = ..., initiate_login_uri: _Optional[str] = ..., post_login_uris: _Optional[_Iterable[str]] = ..., name: _Optional[str] = ..., access_token_expiry: _Optional[int] = ..., scopes: _Optional[_Iterable[str]] = ..., custom_claims: _Optional[_Iterable[_Union[CustomClaim, _Mapping]]] = ..., disallow_scalekit_api_access: bool = ..., grant_types: _Optional[_Iterable[str]] = ..., client_type: _Optional[str] = ..., enforce_pkce: bool = ...) -> None: ... + def __init__(self, id: _Optional[str] = ..., keyId: _Optional[str] = ..., create_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., update_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., secrets: _Optional[_Iterable[_Union[ClientSecret, _Mapping]]] = ..., post_logout_redirect_uris: _Optional[_Iterable[str]] = ..., back_channel_logout_uris: _Optional[_Iterable[str]] = ..., initiate_login_uri: _Optional[str] = ..., post_login_uris: _Optional[_Iterable[str]] = ..., name: _Optional[str] = ..., access_token_expiry: _Optional[int] = ..., scopes: _Optional[_Iterable[str]] = ..., custom_claims: _Optional[_Iterable[_Union[CustomClaim, _Mapping]]] = ..., disallow_scalekit_api_access: bool = ..., grant_types: _Optional[_Iterable[str]] = ..., client_type: _Optional[str] = ..., enforce_pkce: bool = ...) -> None: ... class ClientSecret(_message.Message): __slots__ = ("id", "create_time", "update_time", "secret_suffix", "created_by", "status", "expire_time", "last_used_time", "plain_secret") @@ -942,18 +934,28 @@ class DeleteScopeRequest(_message.Message): def __init__(self, id: _Optional[str] = ...) -> None: ... class GetConsentDetailsResponse(_message.Message): - __slots__ = ("resource", "user", "client", "scopes", "application") + __slots__ = ("resource", "user", "client", "scopes", "application", "organization") RESOURCE_FIELD_NUMBER: _ClassVar[int] USER_FIELD_NUMBER: _ClassVar[int] CLIENT_FIELD_NUMBER: _ClassVar[int] SCOPES_FIELD_NUMBER: _ClassVar[int] APPLICATION_FIELD_NUMBER: _ClassVar[int] + ORGANIZATION_FIELD_NUMBER: _ClassVar[int] resource: Resource user: User client: ConsentClient scopes: _containers.RepeatedCompositeFieldContainer[ConsentScope] application: Application - def __init__(self, resource: _Optional[_Union[Resource, _Mapping]] = ..., user: _Optional[_Union[User, _Mapping]] = ..., client: _Optional[_Union[ConsentClient, _Mapping]] = ..., scopes: _Optional[_Iterable[_Union[ConsentScope, _Mapping]]] = ..., application: _Optional[_Union[Application, _Mapping]] = ...) -> None: ... + organization: ConsentOrganization + def __init__(self, resource: _Optional[_Union[Resource, _Mapping]] = ..., user: _Optional[_Union[User, _Mapping]] = ..., client: _Optional[_Union[ConsentClient, _Mapping]] = ..., scopes: _Optional[_Iterable[_Union[ConsentScope, _Mapping]]] = ..., application: _Optional[_Union[Application, _Mapping]] = ..., organization: _Optional[_Union[ConsentOrganization, _Mapping]] = ...) -> None: ... + +class ConsentOrganization(_message.Message): + __slots__ = ("organization_name", "organization_meta_name") + ORGANIZATION_NAME_FIELD_NUMBER: _ClassVar[int] + ORGANIZATION_META_NAME_FIELD_NUMBER: _ClassVar[int] + organization_name: str + organization_meta_name: str + def __init__(self, organization_name: _Optional[str] = ..., organization_meta_name: _Optional[str] = ...) -> None: ... class ConsentClient(_message.Message): __slots__ = ("name", "privacy_uri", "tos_uri", "client_id", "metadata_uri", "logo_uri") diff --git a/scalekit/v1/commons/commons_pb2.py b/scalekit/v1/commons/commons_pb2.py index 3c27a16..ebe06b5 100644 --- a/scalekit/v1/commons/commons_pb2.py +++ b/scalekit/v1/commons/commons_pb2.py @@ -23,7 +23,7 @@ from protoc_gen_openapiv2.options import annotations_pb2 as protoc__gen__openapiv2_dot_options_dot_annotations__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/commons/commons.proto\x12\x13scalekit.v1.commons\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\"\xf4\x12\n\x16OrganizationMembership\x12\x86\x01\n\x0forganization_id\x18\x01 \x01(\tB]\x92\x41Z2@Unique identifier for the organization. Immutable and read-only.J\x16\"org_1234abcd5678efgh\"R\x0eorganizationId\x12\x89\x01\n\tjoin_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBP\x92\x41M2KTimestamp when the membership was created. Automatically set by the server.R\x08joinTime\x12R\n\x11membership_status\x18\x03 \x01(\x0e\x32%.scalekit.v1.commons.MembershipStatusR\x10membershipStatus\x12/\n\x05roles\x18\x04 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleR\x05roles\x12\x9a\x01\n\x04name\x18\x05 \x01(\tB\x80\x01\x92\x41}2oOrganization name. This field stores the formal organization name used for identification and display purposes.J\n\"AcmeCorp\"H\x00R\x04name\x88\x01\x01\x12\x94\x02\n\x08metadata\x18\x07 \x03(\x0b\x32\x39.scalekit.v1.commons.OrganizationMembership.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xea\x01\n\x0c\x64isplay_name\x18\t \x01(\tB\xc1\x01\x92\x41\xbd\x01\x32\xa6\x01Organization display name. This field stores a user-friendly name for the organization that may be different from the formal name, often used for UI display purposes.J\x12\"Acme Corporation\"H\x01R\x0b\x64isplayName\x88\x01\x01\x12T\n\rinviter_email\x18\n \x01(\tB*\x92\x41\'2%ID of the user who invited this user.H\x02R\x0cinviterEmail\x88\x01\x01\x12o\n\ncreated_at\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampB/\x92\x41,2*Timestamp when the invitation was created.H\x03R\tcreatedAt\x88\x01\x01\x12w\n\x0b\x61\x63\x63\x65pted_at\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.TimestampB5\x92\x41\x32\x32\x30Timestamp when the user accepted the invitation.H\x04R\nacceptedAt\x88\x01\x01\x12k\n\nexpires_at\x18\r \x01(\x0b\x32\x1a.google.protobuf.TimestampB+\x92\x41(2&Timestamp when the invitation expired.H\x05R\texpiresAt\x88\x01\x01\x12\xa8\x03\n\x13provisioning_method\x18\x0e \x01(\tB\xf1\x02\x92\x41\xed\x02\x32\xea\x02How the user was provisioned. \nPossible values: \n- `jit_using_sso` (Just-in-time provisioning during SSO login)\n- `allowed_email_domain` (User joined via allowed email domain matching)\n- `org_creator` (User created the organization)\n- `direct_provision` (User was directly provisioned via API or SCIM)\n- `invitation` (User was invited and accepted an invitation)H\x06R\x12provisioningMethod\x88\x01\x01\x12\x97\x02\n\x0bpermissions\x18\x0f \x03(\tB\xf4\x01\x92\x41\xf0\x01\x32\xbb\x01\x45\x66\x66\x65\x63tive permissions granted to the user within the organization (including inherited permissions from assigned roles). Lists the specific actions and access rights the user can perform.J0[\"read_projects\", \"write_tasks\", \"manage_users\"]R\x0bpermissions\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x07\n\x05_nameB\x0f\n\r_display_nameB\x10\n\x0e_inviter_emailB\r\n\x0b_created_atB\x0e\n\x0c_accepted_atB\r\n\x0b_expires_atB\x16\n\x14_provisioning_method\"\xdf\x02\n\x04Role\x12\x39\n\x02id\x18\x01 \x01(\tB)\x92\x41#2\x07Role IDJ\x18\"role_79643236410327240\"\xe0\x41\x03R\x02id\x12\xc5\x01\n\x04name\x18\x02 \x01(\tB\xb0\x01\x92\x41\xac\x01\x32\x9d\x01\x41ttribute name/identifier for the role used in system operations and API calls. This should be a machine-readable identifier that follows naming conventions.J\n\"team_dev\"R\x04name\x12T\n\x0c\x64isplay_name\x18\x03 \x01(\tB1\x92\x41.2 Human-readable name for the roleJ\n\"Dev Team\"R\x0b\x64isplayName\"\xe7\x30\n\x0bUserProfile\x12\x89\x01\n\x02id\x18\x01 \x01(\tBy\x92\x41s2QUnique system-generated identifier for the user profile. Immutable and read-only.J\x1e\"usr_profile_1234abcd5678efgh\"\xe0\x41\x03R\x02id\x12\xeb\x02\n\ngiven_name\x18\x02 \x01(\tB\xcb\x02\x92\x41\xbf\x02\x32\xb4\x02The user\'s given name (first name). This field stores the user\'s first name and is used for personalization, display purposes, and when generating the full display name. The given name appears in user interfaces, formal communications, and user listings throughout the system. Maximum 255 characters allowed.J\x06\"John\"\xbaH\x05r\x03\x18\xff\x01R\tgivenName\x12\xe9\x02\n\x0b\x66\x61mily_name\x18\x03 \x01(\tB\xc7\x02\x92\x41\xbb\x02\x32\xb1\x02The user\'s family name (last name or surname). This field stores the user\'s last name and is combined with the given name to create the full display name. The family name is used in formal communications, user listings, and organizational directories throughout the system. Maximum 255 characters allowed.J\x05\"Doe\"\xbaH\x05r\x03\x18\xff\x01R\nfamilyName\x12\xeb\x03\n\x04name\x18\x04 \x01(\tB\xd6\x03\x92\x41\xd2\x03\x32\xbb\x03The user\'s complete display name in formatted form. This field stores the full name as a single string and is typically used when you want to set the complete name rather than using separate given and family names. This name appears in user interfaces, reports, directory listings, and anywhere a formatted display name is needed. This field serves as a formatted display name that complements the individual given_name and family_name fields.J\x12\"John Michael Doe\"R\x04name\x12\x9a\x03\n\x06locale\x18\x05 \x01(\tB\x81\x03\x92\x41\xfd\x02\x32\xf1\x02The user\'s preferred language and region settings using BCP-47 format codes. This field customizes the user\'s experience with localized content, date formats, number formatting, and UI language throughout the system. When not specified, the user inherits the organization\'s default locale settings. Common values include `en-US`, `en-GB`, `fr-FR`, `de-DE`, and `es-ES`.J\x07\"en-US\"R\x06locale\x12\x92\x01\n\x0e\x65mail_verified\x18\x06 \x01(\x08\x42k\x92\x41\x65\x32]Indicates if the user\'s email address has been verified. Automatically updated by the system.J\x04true\xe0\x41\x03R\remailVerified\x12\xd4\x02\n\x0cphone_number\x18\x07 \x01(\tB\xb0\x02\x92\x41\xac\x02\x32\x99\x02The user\'s phone number in E.164 international format. This field stores the phone number for user contact and identification purposes. The phone number must include the country code and be formatted according to E.164 standards (e.g., `+1` for US numbers). This field is optional.J\x0e\"+14155552671\"R\x0bphoneNumber\x12\xa0\x05\n\x08metadata\x18\x08 \x03(\x0b\x32..scalekit.v1.commons.UserProfile.MetadataEntryB\xd3\x04\x92\x41\xb6\x04\x32\xde\x03Raw attributes received from identity providers during authentication. This field stores the original user profile data as received from external IdP systems (SAML, OIDC, etc.) including provider-specific claims and attributes. These fields preserve the complete set of attributes received from the identity source and are used for mapping, synchronization, and audit purposes. Keys must be 3-25 characters, values must be 1-256 characters, with a maximum of 20 key-value pairs.JS{\"idp_user_id\": \"12345\", \"department\": \"engineering\", \"employee_type\": \"full-time\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xdc\x05\n\x11\x63ustom_attributes\x18\t \x03(\x0b\x32\x36.scalekit.v1.commons.UserProfile.CustomAttributesEntryB\xf6\x04\x92\x41\xd9\x04\x32\x97\x04\x43ustom attributes for extended user profile data and application-specific information. This field stores business-specific user data like department, job title, security clearances, project assignments, or any other organizational attributes your application requires. Unlike system metadata, these attributes are typically managed by administrators or applications and are visible to end users for personalization and business logic. Keys must be 3-25 characters, values must be 1-256 characters, with a maximum of 20 key-value pairs.J={\"department\": \"engineering\", \"security_clearance\": \"level2\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x10\x63ustomAttributes\x12\x94\x01\n\nfirst_name\x18\x15 \x01(\tBu\x18\x01\x92\x41Y2O[DEPRECATED] Use given_name instead. User\'s given name. Maximum 255 characters.J\x06\"John\"\xbaH\x05r\x03\x18\xff\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\tfirstName\x12\x93\x01\n\tlast_name\x18\x16 \x01(\tBv\x18\x01\x92\x41Z2Q[DEPRECATED] Use family_name instead. User\'s family name. Maximum 255 characters.J\x05\"Doe\"\xbaH\x05r\x03\x18\xff\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\x08lastName\x12\xab\x03\n\x12preferred_username\x18\x0c \x01(\tB\xfb\x02\x92\x41\xef\x02\x32\xe1\x02The user\'s preferred username for display and identification purposes. This field stores a custom username that the user prefers to be known by, which may differ from their email or formal name. This username appears in user interfaces, mentions, informal communications, and collaborative features throughout the system. Maximum 512 characters allowed.J\t\"johndoe\"\xbaH\x05r\x03\x18\x80\x04R\x11preferredUsername\x12\x9e\x01\n\x15phone_number_verified\x18\r \x01(\x08\x42j\x92\x41\x64\x32\\Indicates if the user\'s phone number has been verified. Automatically updated by the system.J\x04true\xe0\x41\x03R\x13phoneNumberVerified\x12\xe4\x03\n\x07picture\x18\x0e \x01(\tB\xc9\x03\x92\x41\xc5\x03\x32\xa0\x03The URL to the user\'s profile picture or avatar image. This field stores the location of the user\'s profile photo that appears in user interfaces, directory listings, and collaborative features throughout the system. The URL should point to a publicly accessible image file. Supported formats typically include JPEG, PNG, and GIF. This image is used for visual identification and personalization across the platform.J \"https://example.com/avatar.jpg\"R\x07picture\x12\xc7\x03\n\x06groups\x18\x0f \x03(\tB\xae\x03\x92\x41\xaa\x03\x32\x8f\x03The list of group names the user belongs to within the organization. This field stores the user\'s group memberships for role-based access control, team assignments, and organizational structure. Groups are typically used for permission management, collaborative access, and organizational hierarchy. Each group name represents a distinct organizational unit or team that the user is associated with.J\x16[\"admin\", \"developer\"]R\x06groups\x12\x9f\x03\n\x06gender\x18\x10 \x01(\tB\x86\x03\x92\x41\x82\x03\x32\xf7\x02The user\'s gender identity information. This field stores the user\'s gender identity for personalization, compliance reporting, or organizational analytics purposes. This field supports any string value to accommodate diverse gender identities and should be handled with appropriate privacy considerations according to your organization\'s policies and applicable regulations.J\x06\"male\"R\x06gender\x12\xa7\x01\n\x13\x65xternal_identities\x18\n \x03(\x0b\x32%.scalekit.v1.commons.ExternalIdentityBO\x92\x41I2GList of external identity connections associated with the user profile.\xe0\x41\x03R\x12\x65xternalIdentities\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a\x43\n\x15\x43ustomAttributesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xa4\n\n\x10\x45xternalIdentity\x12\x96\x01\n\rconnection_id\x18\x01 \x01(\tBq\x92\x41k2PUnique identifier for the external identity connection. Immutable and read-only.J\x17\"conn_1234abcd5678efgh\"\xe0\x41\x03R\x0c\x63onnectionId\x12\x63\n\x0f\x63onnection_type\x18\x02 \x01(\tB:\x92\x41\x34\x32)Name of the external identity connection.J\x07\"OAUTH\"\xe0\x41\x03R\x0e\x63onnectionType\x12\x8c\x01\n\x13\x63onnection_provider\x18\x03 \x01(\x0e\x32).scalekit.v1.commons.IdentityProviderTypeB0\x92\x41*2\x1eType of the identity provider.J\x08\"GOOGLE\"\xe0\x41\x03R\x12\x63onnectionProvider\x12\xa9\x01\n\x12\x63onnection_user_id\x18\x04 \x01(\tB{\x92\x41u2aUnique identifier for the user in the external identity provider system. Immutable and read-only.J\x10\"ext_user_12345\"\xe0\x41\x03R\x10\x63onnectionUserId\x12\x9b\x01\n\tis_social\x18\x05 \x01(\x08\x42~\x92\x41x2pIndicates if the identity provider is a social provider (true) or enterprise/custom provider (false). Read-only.J\x04true\xe0\x41\x03R\x08isSocial\x12\xc3\x01\n\x0flast_login_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x7f\x92\x41y2wTimestamp of the user\'s last successful login via this external identity provider. Automatically updated by the system.\xe0\x41\x03R\rlastLoginTime\x12\xa3\x01\n\x0c\x63reated_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampBd\x92\x41^2\\Timestamp when this external identity connection was first created. Immutable and read-only.\xe0\x41\x03R\x0b\x63reatedTime\x12\xcc\x01\n\x10last_synced_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x85\x01\x92\x41\x7f\x32}Timestamp of the last data synchronization for this external identity from the provider. Automatically updated by the system.\xe0\x41\x03R\x0elastSyncedTime*9\n\nRegionCode\x12\x1b\n\x17REGION_CODE_UNSPECIFIED\x10\x00\x12\x06\n\x02US\x10\x01\x12\x06\n\x02\x45U\x10\x02*E\n\x0f\x45nvironmentType\x12 \n\x1c\x45NVIRONMENT_TYPE_UNSPECIFIED\x10\x00\x12\x07\n\x03PRD\x10\x01\x12\x07\n\x03\x44\x45V\x10\x02*w\n\x10MembershipStatus\x12!\n\x1dMembership_Status_UNSPECIFIED\x10\x00\x12\n\n\x06\x41\x43TIVE\x10\x01\x12\x0c\n\x08INACTIVE\x10\x02\x12\x12\n\x0ePENDING_INVITE\x10\x03\x12\x12\n\x0eINVITE_EXPIRED\x10\x04*\x98\x02\n\x14IdentityProviderType\x12!\n\x1dIDENTITY_PROVIDER_UNSPECIFIED\x10\x00\x12\x08\n\x04OKTA\x10\x01\x12\n\n\x06GOOGLE\x10\x02\x12\x10\n\x0cMICROSOFT_AD\x10\x03\x12\t\n\x05\x41UTH0\x10\x04\x12\x0c\n\x08ONELOGIN\x10\x05\x12\x11\n\rPING_IDENTITY\x10\x06\x12\r\n\tJUMPCLOUD\x10\x07\x12\n\n\x06\x43USTOM\x10\x08\x12\n\n\x06GITHUB\x10\t\x12\n\n\x06GITLAB\x10\n\x12\x0c\n\x08LINKEDIN\x10\x0b\x12\x0e\n\nSALESFORCE\x10\x0c\x12\r\n\tMICROSOFT\x10\r\x12\x11\n\rIDP_SIMULATOR\x10\x0e\x12\x0c\n\x08SCALEKIT\x10\x0f\x12\x08\n\x04\x41\x44\x46S\x10\x10*`\n\x12\x41uthenticationMode\x12#\n\x1f\x41UTHENTICATION_MODE_UNSPECIFIED\x10\x00\x12\x10\n\x0cMODULAR_AUTH\x10\x01\x12\x13\n\x0f\x46ULL_STACK_AUTH\x10\x02\x42\x33Z1github.com/scalekit-inc/scalekit/pkg/grpc/commonsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/commons/commons.proto\x12\x13scalekit.v1.commons\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\"\xf4\x12\n\x16OrganizationMembership\x12\x86\x01\n\x0forganization_id\x18\x01 \x01(\tB]\x92\x41Z2@Unique identifier for the organization. Immutable and read-only.J\x16\"org_1234abcd5678efgh\"R\x0eorganizationId\x12\x89\x01\n\tjoin_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBP\x92\x41M2KTimestamp when the membership was created. Automatically set by the server.R\x08joinTime\x12R\n\x11membership_status\x18\x03 \x01(\x0e\x32%.scalekit.v1.commons.MembershipStatusR\x10membershipStatus\x12/\n\x05roles\x18\x04 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleR\x05roles\x12\x9a\x01\n\x04name\x18\x05 \x01(\tB\x80\x01\x92\x41}2oOrganization name. This field stores the formal organization name used for identification and display purposes.J\n\"AcmeCorp\"H\x00R\x04name\x88\x01\x01\x12\x94\x02\n\x08metadata\x18\x07 \x03(\x0b\x32\x39.scalekit.v1.commons.OrganizationMembership.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xea\x01\n\x0c\x64isplay_name\x18\t \x01(\tB\xc1\x01\x92\x41\xbd\x01\x32\xa6\x01Organization display name. This field stores a user-friendly name for the organization that may be different from the formal name, often used for UI display purposes.J\x12\"Acme Corporation\"H\x01R\x0b\x64isplayName\x88\x01\x01\x12T\n\rinviter_email\x18\n \x01(\tB*\x92\x41\'2%ID of the user who invited this user.H\x02R\x0cinviterEmail\x88\x01\x01\x12o\n\ncreated_at\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampB/\x92\x41,2*Timestamp when the invitation was created.H\x03R\tcreatedAt\x88\x01\x01\x12w\n\x0b\x61\x63\x63\x65pted_at\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.TimestampB5\x92\x41\x32\x32\x30Timestamp when the user accepted the invitation.H\x04R\nacceptedAt\x88\x01\x01\x12k\n\nexpires_at\x18\r \x01(\x0b\x32\x1a.google.protobuf.TimestampB+\x92\x41(2&Timestamp when the invitation expired.H\x05R\texpiresAt\x88\x01\x01\x12\xa8\x03\n\x13provisioning_method\x18\x0e \x01(\tB\xf1\x02\x92\x41\xed\x02\x32\xea\x02How the user was provisioned. \nPossible values: \n- `jit_using_sso` (Just-in-time provisioning during SSO login)\n- `allowed_email_domain` (User joined via allowed email domain matching)\n- `org_creator` (User created the organization)\n- `direct_provision` (User was directly provisioned via API or SCIM)\n- `invitation` (User was invited and accepted an invitation)H\x06R\x12provisioningMethod\x88\x01\x01\x12\x97\x02\n\x0bpermissions\x18\x0f \x03(\tB\xf4\x01\x92\x41\xf0\x01\x32\xbb\x01\x45\x66\x66\x65\x63tive permissions granted to the user within the organization (including inherited permissions from assigned roles). Lists the specific actions and access rights the user can perform.J0[\"read_projects\", \"write_tasks\", \"manage_users\"]R\x0bpermissions\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x07\n\x05_nameB\x0f\n\r_display_nameB\x10\n\x0e_inviter_emailB\r\n\x0b_created_atB\x0e\n\x0c_accepted_atB\r\n\x0b_expires_atB\x16\n\x14_provisioning_method\"\xdf\x02\n\x04Role\x12\x39\n\x02id\x18\x01 \x01(\tB)\x92\x41#2\x07Role IDJ\x18\"role_79643236410327240\"\xe0\x41\x03R\x02id\x12\xc5\x01\n\x04name\x18\x02 \x01(\tB\xb0\x01\x92\x41\xac\x01\x32\x9d\x01\x41ttribute name/identifier for the role used in system operations and API calls. This should be a machine-readable identifier that follows naming conventions.J\n\"team_dev\"R\x04name\x12T\n\x0c\x64isplay_name\x18\x03 \x01(\tB1\x92\x41.2 Human-readable name for the roleJ\n\"Dev Team\"R\x0b\x64isplayName\"\xe7\x30\n\x0bUserProfile\x12\x89\x01\n\x02id\x18\x01 \x01(\tBy\x92\x41s2QUnique system-generated identifier for the user profile. Immutable and read-only.J\x1e\"usr_profile_1234abcd5678efgh\"\xe0\x41\x03R\x02id\x12\xeb\x02\n\ngiven_name\x18\x02 \x01(\tB\xcb\x02\x92\x41\xbf\x02\x32\xb4\x02The user\'s given name (first name). This field stores the user\'s first name and is used for personalization, display purposes, and when generating the full display name. The given name appears in user interfaces, formal communications, and user listings throughout the system. Maximum 255 characters allowed.J\x06\"John\"\xbaH\x05r\x03\x18\xff\x01R\tgivenName\x12\xe9\x02\n\x0b\x66\x61mily_name\x18\x03 \x01(\tB\xc7\x02\x92\x41\xbb\x02\x32\xb1\x02The user\'s family name (last name or surname). This field stores the user\'s last name and is combined with the given name to create the full display name. The family name is used in formal communications, user listings, and organizational directories throughout the system. Maximum 255 characters allowed.J\x05\"Doe\"\xbaH\x05r\x03\x18\xff\x01R\nfamilyName\x12\xeb\x03\n\x04name\x18\x04 \x01(\tB\xd6\x03\x92\x41\xd2\x03\x32\xbb\x03The user\'s complete display name in formatted form. This field stores the full name as a single string and is typically used when you want to set the complete name rather than using separate given and family names. This name appears in user interfaces, reports, directory listings, and anywhere a formatted display name is needed. This field serves as a formatted display name that complements the individual given_name and family_name fields.J\x12\"John Michael Doe\"R\x04name\x12\x9a\x03\n\x06locale\x18\x05 \x01(\tB\x81\x03\x92\x41\xfd\x02\x32\xf1\x02The user\'s preferred language and region settings using BCP-47 format codes. This field customizes the user\'s experience with localized content, date formats, number formatting, and UI language throughout the system. When not specified, the user inherits the organization\'s default locale settings. Common values include `en-US`, `en-GB`, `fr-FR`, `de-DE`, and `es-ES`.J\x07\"en-US\"R\x06locale\x12\x92\x01\n\x0e\x65mail_verified\x18\x06 \x01(\x08\x42k\x92\x41\x65\x32]Indicates if the user\'s email address has been verified. Automatically updated by the system.J\x04true\xe0\x41\x03R\remailVerified\x12\xd4\x02\n\x0cphone_number\x18\x07 \x01(\tB\xb0\x02\x92\x41\xac\x02\x32\x99\x02The user\'s phone number in E.164 international format. This field stores the phone number for user contact and identification purposes. The phone number must include the country code and be formatted according to E.164 standards (e.g., `+1` for US numbers). This field is optional.J\x0e\"+14155552671\"R\x0bphoneNumber\x12\xa0\x05\n\x08metadata\x18\x08 \x03(\x0b\x32..scalekit.v1.commons.UserProfile.MetadataEntryB\xd3\x04\x92\x41\xb6\x04\x32\xde\x03Raw attributes received from identity providers during authentication. This field stores the original user profile data as received from external IdP systems (SAML, OIDC, etc.) including provider-specific claims and attributes. These fields preserve the complete set of attributes received from the identity source and are used for mapping, synchronization, and audit purposes. Keys must be 3-25 characters, values must be 1-256 characters, with a maximum of 20 key-value pairs.JS{\"idp_user_id\": \"12345\", \"department\": \"engineering\", \"employee_type\": \"full-time\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xdc\x05\n\x11\x63ustom_attributes\x18\t \x03(\x0b\x32\x36.scalekit.v1.commons.UserProfile.CustomAttributesEntryB\xf6\x04\x92\x41\xd9\x04\x32\x97\x04\x43ustom attributes for extended user profile data and application-specific information. This field stores business-specific user data like department, job title, security clearances, project assignments, or any other organizational attributes your application requires. Unlike system metadata, these attributes are typically managed by administrators or applications and are visible to end users for personalization and business logic. Keys must be 3-25 characters, values must be 1-256 characters, with a maximum of 20 key-value pairs.J={\"department\": \"engineering\", \"security_clearance\": \"level2\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x10\x63ustomAttributes\x12\x94\x01\n\nfirst_name\x18\x15 \x01(\tBu\x18\x01\x92\x41Y2O[DEPRECATED] Use given_name instead. User\'s given name. Maximum 255 characters.J\x06\"John\"\xbaH\x05r\x03\x18\xff\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\tfirstName\x12\x93\x01\n\tlast_name\x18\x16 \x01(\tBv\x18\x01\x92\x41Z2Q[DEPRECATED] Use family_name instead. User\'s family name. Maximum 255 characters.J\x05\"Doe\"\xbaH\x05r\x03\x18\xff\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\x08lastName\x12\xab\x03\n\x12preferred_username\x18\x0c \x01(\tB\xfb\x02\x92\x41\xef\x02\x32\xe1\x02The user\'s preferred username for display and identification purposes. This field stores a custom username that the user prefers to be known by, which may differ from their email or formal name. This username appears in user interfaces, mentions, informal communications, and collaborative features throughout the system. Maximum 512 characters allowed.J\t\"johndoe\"\xbaH\x05r\x03\x18\x80\x04R\x11preferredUsername\x12\x9e\x01\n\x15phone_number_verified\x18\r \x01(\x08\x42j\x92\x41\x64\x32\\Indicates if the user\'s phone number has been verified. Automatically updated by the system.J\x04true\xe0\x41\x03R\x13phoneNumberVerified\x12\xe4\x03\n\x07picture\x18\x0e \x01(\tB\xc9\x03\x92\x41\xc5\x03\x32\xa0\x03The URL to the user\'s profile picture or avatar image. This field stores the location of the user\'s profile photo that appears in user interfaces, directory listings, and collaborative features throughout the system. The URL should point to a publicly accessible image file. Supported formats typically include JPEG, PNG, and GIF. This image is used for visual identification and personalization across the platform.J \"https://example.com/avatar.jpg\"R\x07picture\x12\xc7\x03\n\x06groups\x18\x0f \x03(\tB\xae\x03\x92\x41\xaa\x03\x32\x8f\x03The list of group names the user belongs to within the organization. This field stores the user\'s group memberships for role-based access control, team assignments, and organizational structure. Groups are typically used for permission management, collaborative access, and organizational hierarchy. Each group name represents a distinct organizational unit or team that the user is associated with.J\x16[\"admin\", \"developer\"]R\x06groups\x12\x9f\x03\n\x06gender\x18\x10 \x01(\tB\x86\x03\x92\x41\x82\x03\x32\xf7\x02The user\'s gender identity information. This field stores the user\'s gender identity for personalization, compliance reporting, or organizational analytics purposes. This field supports any string value to accommodate diverse gender identities and should be handled with appropriate privacy considerations according to your organization\'s policies and applicable regulations.J\x06\"male\"R\x06gender\x12\xa7\x01\n\x13\x65xternal_identities\x18\n \x03(\x0b\x32%.scalekit.v1.commons.ExternalIdentityBO\x92\x41I2GList of external identity connections associated with the user profile.\xe0\x41\x03R\x12\x65xternalIdentities\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a\x43\n\x15\x43ustomAttributesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xa4\n\n\x10\x45xternalIdentity\x12\x96\x01\n\rconnection_id\x18\x01 \x01(\tBq\x92\x41k2PUnique identifier for the external identity connection. Immutable and read-only.J\x17\"conn_1234abcd5678efgh\"\xe0\x41\x03R\x0c\x63onnectionId\x12\x63\n\x0f\x63onnection_type\x18\x02 \x01(\tB:\x92\x41\x34\x32)Name of the external identity connection.J\x07\"OAUTH\"\xe0\x41\x03R\x0e\x63onnectionType\x12\x8c\x01\n\x13\x63onnection_provider\x18\x03 \x01(\x0e\x32).scalekit.v1.commons.IdentityProviderTypeB0\x92\x41*2\x1eType of the identity provider.J\x08\"GOOGLE\"\xe0\x41\x03R\x12\x63onnectionProvider\x12\xa9\x01\n\x12\x63onnection_user_id\x18\x04 \x01(\tB{\x92\x41u2aUnique identifier for the user in the external identity provider system. Immutable and read-only.J\x10\"ext_user_12345\"\xe0\x41\x03R\x10\x63onnectionUserId\x12\x9b\x01\n\tis_social\x18\x05 \x01(\x08\x42~\x92\x41x2pIndicates if the identity provider is a social provider (true) or enterprise/custom provider (false). Read-only.J\x04true\xe0\x41\x03R\x08isSocial\x12\xc3\x01\n\x0flast_login_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x7f\x92\x41y2wTimestamp of the user\'s last successful login via this external identity provider. Automatically updated by the system.\xe0\x41\x03R\rlastLoginTime\x12\xa3\x01\n\x0c\x63reated_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampBd\x92\x41^2\\Timestamp when this external identity connection was first created. Immutable and read-only.\xe0\x41\x03R\x0b\x63reatedTime\x12\xcc\x01\n\x10last_synced_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x85\x01\x92\x41\x7f\x32}Timestamp of the last data synchronization for this external identity from the provider. Automatically updated by the system.\xe0\x41\x03R\x0elastSyncedTime*9\n\nRegionCode\x12\x1b\n\x17REGION_CODE_UNSPECIFIED\x10\x00\x12\x06\n\x02US\x10\x01\x12\x06\n\x02\x45U\x10\x02*E\n\x0f\x45nvironmentType\x12 \n\x1c\x45NVIRONMENT_TYPE_UNSPECIFIED\x10\x00\x12\x07\n\x03PRD\x10\x01\x12\x07\n\x03\x44\x45V\x10\x02*w\n\x10MembershipStatus\x12!\n\x1dMembership_Status_UNSPECIFIED\x10\x00\x12\n\n\x06\x41\x43TIVE\x10\x01\x12\x0c\n\x08INACTIVE\x10\x02\x12\x12\n\x0ePENDING_INVITE\x10\x03\x12\x12\n\x0eINVITE_EXPIRED\x10\x04*\x98\x02\n\x14IdentityProviderType\x12!\n\x1dIDENTITY_PROVIDER_UNSPECIFIED\x10\x00\x12\x08\n\x04OKTA\x10\x01\x12\n\n\x06GOOGLE\x10\x02\x12\x10\n\x0cMICROSOFT_AD\x10\x03\x12\t\n\x05\x41UTH0\x10\x04\x12\x0c\n\x08ONELOGIN\x10\x05\x12\x11\n\rPING_IDENTITY\x10\x06\x12\r\n\tJUMPCLOUD\x10\x07\x12\n\n\x06\x43USTOM\x10\x08\x12\n\n\x06GITHUB\x10\t\x12\n\n\x06GITLAB\x10\n\x12\x0c\n\x08LINKEDIN\x10\x0b\x12\x0e\n\nSALESFORCE\x10\x0c\x12\r\n\tMICROSOFT\x10\r\x12\x11\n\rIDP_SIMULATOR\x10\x0e\x12\x0c\n\x08SCALEKIT\x10\x0f\x12\x08\n\x04\x41\x44\x46S\x10\x10*`\n\x12\x41uthenticationMode\x12#\n\x1f\x41UTHENTICATION_MODE_UNSPECIFIED\x10\x00\x12\x10\n\x0cMODULAR_AUTH\x10\x01\x12\x13\n\x0f\x46ULL_STACK_AUTH\x10\x02*O\n\x08TimeUnit\x12!\n\x1dSESSION_TIME_UNIT_UNSPECIFIED\x10\x00\x12\x0b\n\x07MINUTES\x10\x01\x12\t\n\x05HOURS\x10\x02\x12\x08\n\x04\x44\x41YS\x10\x03\x42\x33Z1github.com/scalekit-inc/scalekit/pkg/grpc/commonsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -125,6 +125,8 @@ _globals['_IDENTITYPROVIDERTYPE']._serialized_end=11226 _globals['_AUTHENTICATIONMODE']._serialized_start=11228 _globals['_AUTHENTICATIONMODE']._serialized_end=11324 + _globals['_TIMEUNIT']._serialized_start=11326 + _globals['_TIMEUNIT']._serialized_end=11405 _globals['_ORGANIZATIONMEMBERSHIP']._serialized_start=349 _globals['_ORGANIZATIONMEMBERSHIP']._serialized_end=2769 _globals['_ORGANIZATIONMEMBERSHIP_METADATAENTRY']._serialized_start=2596 diff --git a/scalekit/v1/commons/commons_pb2.pyi b/scalekit/v1/commons/commons_pb2.pyi index 5303f08..2a041b7 100644 --- a/scalekit/v1/commons/commons_pb2.pyi +++ b/scalekit/v1/commons/commons_pb2.pyi @@ -60,6 +60,13 @@ class AuthenticationMode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): AUTHENTICATION_MODE_UNSPECIFIED: _ClassVar[AuthenticationMode] MODULAR_AUTH: _ClassVar[AuthenticationMode] FULL_STACK_AUTH: _ClassVar[AuthenticationMode] + +class TimeUnit(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + SESSION_TIME_UNIT_UNSPECIFIED: _ClassVar[TimeUnit] + MINUTES: _ClassVar[TimeUnit] + HOURS: _ClassVar[TimeUnit] + DAYS: _ClassVar[TimeUnit] REGION_CODE_UNSPECIFIED: RegionCode US: RegionCode EU: RegionCode @@ -91,6 +98,10 @@ ADFS: IdentityProviderType AUTHENTICATION_MODE_UNSPECIFIED: AuthenticationMode MODULAR_AUTH: AuthenticationMode FULL_STACK_AUTH: AuthenticationMode +SESSION_TIME_UNIT_UNSPECIFIED: TimeUnit +MINUTES: TimeUnit +HOURS: TimeUnit +DAYS: TimeUnit class OrganizationMembership(_message.Message): __slots__ = ("organization_id", "join_time", "membership_status", "roles", "name", "metadata", "display_name", "inviter_email", "created_at", "accepted_at", "expires_at", "provisioning_method", "permissions") diff --git a/scalekit/v1/connected_accounts/connected_accounts_pb2.py b/scalekit/v1/connected_accounts/connected_accounts_pb2.py index f4f95f9..d5b1d54 100644 --- a/scalekit/v1/connected_accounts/connected_accounts_pb2.py +++ b/scalekit/v1/connected_accounts/connected_accounts_pb2.py @@ -22,7 +22,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n7scalekit/v1/connected_accounts/connected_accounts.proto\x12\x1escalekit.v1.connected_accounts\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\x95\x0c\n\x1cListConnectedAccountsRequest\x12\xb1\x01\n\x0forganization_id\x18\x01 \x01(\tB\x82\x01\x92\x41v2]Filter by organization ID. Returns only connected accounts associated with this organization.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12\x91\x01\n\x07user_id\x18\x02 \x01(\tBs\x92\x41g2MFilter by user ID. Returns only connected accounts associated with this user.J\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12\xdb\x01\n\tconnector\x18\x03 \x01(\tB\xb7\x01\x92\x41\x98\x01\x32\x8b\x01\x46ilter by connector type. Connector identifier such as \'notion\', \'slack\', \'google\', etc. Alphanumeric with hyphens and underscores allowed.J\x08\"notion\"\xbaH\x18r\x16\x10\x00\x18\x32\x32\x10^[a-zA-Z0-9_-]*$H\x02R\tconnector\x88\x01\x01\x12\xdb\x01\n\nidentifier\x18\x04 \x01(\tB\xb5\x01\x92\x41\xa8\x01\x32\x91\x01\x46ilter by account identifier. The unique identifier for the connected account within the third-party service (e.g., email address, workspace ID).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12\x9d\x01\n\x08provider\x18\x05 \x01(\tB\x80\x01\x92\x41t2hFilter by OAuth provider. The authentication provider name such as \'google\', \'microsoft\', \'github\', etc.J\x08\"google\"\xbaH\x06r\x04\x10\x00\x18\x32R\x08provider\x12\x9b\x01\n\tpage_size\x18\x06 \x01(\rB~\x92\x41r2lMaximum number of connected accounts to return per page. Must be between 0 and 100. Default is typically 10.J\x02\x31\x30\xbaH\x06*\x04\x10\x64(\x00R\x08pageSize\x12\xcb\x01\n\npage_token\x18\x07 \x01(\tB\xab\x01\x92\x41\x9e\x01\x32\x83\x01Pagination token from a previous response. Use the next_page_token value from ListConnectedAccountsResponse to fetch the next page.J\x16\"eyJvZmZzZXQiOjEwfQ==\"\xbaH\x06r\x04\x10\x00\x18\x64R\tpageToken\x12\xa7\x01\n\x05query\x18\x08 \x01(\tB\x90\x01\x92\x41\x83\x01\x32qText search query to filter connected accounts by name, identifier, or other searchable fields. Case-insensitive.J\x0e\"john@example\"\xbaH\x06r\x04\x10\x00\x18\x64R\x05queryB\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifier\"\xbb\x06\n\x1dListConnectedAccountsResponse\x12\xdc\x01\n\x12\x63onnected_accounts\x18\x01 \x03(\x0b\x32\x37.scalekit.v1.connected_accounts.ConnectedAccountForListBt\x92\x41q2oList of connected accounts matching the filter criteria. Excludes sensitive authorization details for security.R\x11\x63onnectedAccounts\x12\x99\x01\n\ntotal_size\x18\x02 \x01(\rBz\x92\x41w2pTotal count of connected accounts matching the filter criteria across all pages. Use for calculating pagination.J\x03\x31\x30\x30R\ttotalSize\x12\xd2\x01\n\x0fnext_page_token\x18\x03 \x01(\tB\xa9\x01\x92\x41\x9c\x01\x32\x81\x01Pagination token for retrieving the next page. Empty if this is the last page. Pass this value to page_token in the next request.J\x16\"eyJvZmZzZXQiOjIwfQ==\"\xbaH\x06r\x04\x10\x00\x18 R\rnextPageToken\x12\xc9\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\xa0\x01\x92\x41\x93\x01\x32}Pagination token for retrieving the previous page. Empty if this is the first page. Pass this value to page_token to go back.J\x12\"eyJvZmZzZXQiOjB9\"\xbaH\x06r\x04\x10\x00\x18 R\rprevPageToken\"\xe0\x06\n\x1eSearchConnectedAccountsRequest\x12\xb9\x01\n\x05query\x18\x01 \x01(\tB\xa2\x01\x92\x41\x91\x01\x32\x86\x01Search term to match against connected account identifiers, providers, or connectors. Must be at least 3 characters. Case insensitive.J\x06google\xbaH\nr\x05\x10\x03\x18\xc8\x01\xc8\x01\x01R\x05query\x12\x85\x01\n\tpage_size\x18\x02 \x01(\rBh\x92\x41^2XMaximum number of connected accounts to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x03 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\x12i\n\rconnection_id\x18\x04 \x01(\tBD\x92\x41\x38\x32*Connection ID to filter connected accountsJ\n\"conn_123\"\xbaH\x06r\x04\x10\x00\x18 R\x0c\x63onnectionId:\xe6\x01\x92\x41\xe2\x01\n\x9c\x01*\x19Search Connected Accounts2\x7fSearch for connected accounts in your environment using a text query that matches against identifiers, providers, or connectors2Aquery=google&page_size=30&page_token=eyJwYWdlIjoyLCJsaW1pdCI6MzB9\"\x87\x05\n\x1fSearchConnectedAccountsResponse\x12\xcc\x01\n\x12\x63onnected_accounts\x18\x01 \x03(\x0b\x32\x37.scalekit.v1.connected_accounts.ConnectedAccountForListBd\x92\x41\x61\x32_List of connected accounts matching the search query. Excludes sensitive authorization details.R\x11\x63onnectedAccounts\x12l\n\ntotal_size\x18\x02 \x01(\rBM\x92\x41J2CTotal count of accounts matching the search query across all pages.J\x03\x31\x30\x30R\ttotalSize\x12\x91\x01\n\x0fnext_page_token\x18\x03 \x01(\tBi\x92\x41]2CPagination token for the next page. Empty if this is the last page.J\x16\"eyJvZmZzZXQiOjMwfQ==\"\xbaH\x06r\x04\x10\x00\x18 R\rnextPageToken\x12\x92\x01\n\x0fprev_page_token\x18\x04 \x01(\tBj\x92\x41^2HPagination token for the previous page. Empty if this is the first page.J\x12\"eyJvZmZzZXQiOjB9\"\xbaH\x06r\x04\x10\x00\x18 R\rprevPageToken\"\xa5\x07\n\x1d\x43reateConnectedAccountRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12\x61\n\tconnector\x18\x03 \x01(\tB>\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x18r\x16\x10\x00\x18\x32\x32\x10^[a-zA-Z0-9_-]*$H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12\xbd\x02\n\x11\x63onnected_account\x18\x05 \x01(\x0b\x32\x36.scalekit.v1.connected_accounts.CreateConnectedAccountB\xd7\x01\x92\x41\xcd\x01\x32*Details of the connected account to createJ\x9e\x01{ \"authorization_type\": \"OAUTH2\", \"authorization_details\": { \"oauth_token\": { \"access_token\": \"...\", \"refresh_token\": \"...\", \"scopes\": [\"read\", \"write\"] } } }\xbaH\x03\xc8\x01\x01R\x10\x63onnectedAccountB\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifier\"\x8d\x02\n\x1e\x43reateConnectedAccountResponse\x12\xea\x01\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountB\x8a\x01\x92\x41\x86\x01\x32\x83\x01The newly created connected account with its unique identifier, status, and complete authorization details including access tokens.R\x10\x63onnectedAccount\"\x83\x08\n\x1dUpdateConnectedAccountRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12O\n\tconnector\x18\x03 \x01(\tB,\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x06r\x04\x10\x00\x18\x32H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12g\n\x02id\x18\x06 \x01(\tBR\x92\x41\x41\x32\x35Unique identifier for the connected account to updateJ\x08\"ca_123\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_H\x04R\x02id\x88\x01\x01\x12\xbd\x02\n\x11\x63onnected_account\x18\x05 \x01(\x0b\x32\x36.scalekit.v1.connected_accounts.UpdateConnectedAccountB\xd7\x01\x92\x41\xcd\x01\x32*Details of the connected account to updateJ\x9e\x01{ \"authorization_type\": \"OAUTH2\", \"authorization_details\": { \"oauth_token\": { \"access_token\": \"...\", \"refresh_token\": \"...\", \"scopes\": [\"read\", \"write\"] } } }\xbaH\x03\xc8\x01\x01R\x10\x63onnectedAccountB\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifierB\x05\n\x03_id\"\xf7\x01\n\x1eUpdateConnectedAccountResponse\x12\xd4\x01\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountBu\x92\x41r2pThe updated connected account with refreshed credentials, new token expiry, and modified configuration settings.R\x10\x63onnectedAccount\"\xd5\x05\n\x1d\x44\x65leteConnectedAccountRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12\x61\n\tconnector\x18\x03 \x01(\tB>\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x18r\x16\x10\x00\x18\x32\x32\x10^[a-zA-Z0-9_-]*$H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12g\n\x02id\x18\x05 \x01(\tBR\x92\x41\x41\x32\x35Unique identifier for the connected account to deleteJ\x08\"ca_123\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_H\x04R\x02id\x88\x01\x01\x42\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifierB\x05\n\x03_id\" \n\x1e\x44\x65leteConnectedAccountResponse\"\xc2\x05\n&GetMagicLinkForConnectedAccountRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12O\n\tconnector\x18\x03 \x01(\tB,\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x06r\x04\x10\x00\x18\x32H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12]\n\x02id\x18\x05 \x01(\tBH\x92\x41\x37\x32+Unique identifier for the connected accountJ\x08\"ca_123\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_H\x04R\x02id\x88\x01\x01\x42\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifierB\x05\n\x03_id\"\x9c\x02\n\'GetMagicLinkForConnectedAccountResponse\x12r\n\x04link\x18\x01 \x01(\tB^\x92\x41[2%Authentication link for the connectorJ2\"https://notion.com/oauth/authorize?client_id=...\"R\x04link\x12}\n\x06\x65xpiry\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBI\x92\x41\x46\x32,Expiry timestamp for the authentication linkJ\x16\"2024-03-20T15:04:05Z\"R\x06\x65xpiry\"\xc2\x05\n&GetConnectedAccountByIdentifierRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12O\n\tconnector\x18\x03 \x01(\tB,\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x06r\x04\x10\x00\x18\x32H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12]\n\x02id\x18\x05 \x01(\tBH\x92\x41\x37\x32+Unique identifier for the connected accountJ\x08\"ca_123\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_H\x04R\x02id\x88\x01\x01\x42\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifierB\x05\n\x03_id\"\xbe\x02\n\'GetConnectedAccountByIdentifierResponse\x12\x92\x02\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountB\xb2\x01\x92\x41\xae\x01\x32\xab\x01The connected account with complete details including sensitive authorization credentials (access tokens, refresh tokens, scopes). Handle with appropriate access controls.R\x10\x63onnectedAccount\"\xbc\x13\n\x10\x43onnectedAccount\x12\xbc\x01\n\nidentifier\x18\x01 \x01(\tB\x9b\x01\x92\x41\x97\x01\x32\x80\x01The unique identifier for this account in the third-party service. Typically an email address, user ID, or workspace identifier.J\x12\"user@example.com\"R\nidentifier\x12\xaa\x01\n\x08provider\x18\x02 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32}OAuth provider name (e.g., \'google\', \'microsoft\', \'github\'). Identifies which authentication service manages this connection.J\x08\"google\"R\x08provider\x12\xbd\x01\n\x06status\x18\x03 \x01(\x0e\x32/.scalekit.v1.connected_accounts.ConnectorStatusBt\x92\x41q2oCurrent status of the connected account. Indicates if the account is active, expired, or pending authorization.R\x06status\x12\xe9\x01\n\x12\x61uthorization_type\x18\x04 \x01(\x0e\x32-.scalekit.v1.connected_accounts.ConnectorTypeB\x8a\x01\x92\x41\x86\x01\x32\x83\x01Type of authorization mechanism used. Specifies whether this connection uses OAuth, API keys, bearer tokens, or other auth methods.R\x11\x61uthorizationType\x12\x81\x02\n\x15\x61uthorization_details\x18\x05 \x01(\x0b\x32\x34.scalekit.v1.connected_accounts.AuthorizationDetailsB\x95\x01\x92\x41\x91\x01\x32\x8e\x01Sensitive authentication credentials including access tokens, refresh tokens, and scopes. Contains either OAuth tokens or static auth details.R\x14\x61uthorizationDetails\x12\xce\x01\n\x10token_expires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x87\x01\x92\x41\x83\x01\x32iExpiration timestamp for the access token. After this time, the token must be refreshed or re-authorized.J\x16\"2024-12-31T23:59:59Z\"R\x0etokenExpiresAt\x12\xc9\x01\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x8d\x01\x92\x41\x89\x01\x32oTimestamp when this connected account was last modified. Updated whenever credentials or configuration changes.J\x16\"2024-03-20T15:04:05Z\"R\tupdatedAt\x12\xae\x01\n\tconnector\x18\x08 \x01(\tB\x8f\x01\x92\x41\x8b\x01\x32\x7f\x43onnector identifier (e.g., \'notion\', \'slack\', \'salesforce\'). Indicates which third-party application this account connects to.J\x08\"notion\"R\tconnector\x12\xcd\x01\n\x0clast_used_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x8e\x01\x92\x41\x8a\x01\x32pTimestamp when this connected account was last used to make an API call. Useful for tracking active connections.J\x16\"2024-03-20T14:30:00Z\"R\nlastUsedAt\x12\x98\x01\n\x02id\x18\n \x01(\tB\x87\x01\x92\x41v2\\Unique Scalekit-generated identifier for this connected account. Always prefixed with \'ca_\'.J\x16\"ca_24834495392086178\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_R\x02id\x12\xc6\x01\n\rconnection_id\x18\x0b \x01(\tB\xa0\x01\x92\x41\x93\x01\x32wReference to the parent connection configuration. Links this account to a specific connector setup in your environment.J\x18\"conn_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x0c\x63onnectionId\x12\x89\x02\n\napi_config\x18\x0c \x01(\x0b\x32\x17.google.protobuf.StructB\xd0\x01\x92\x41\xcc\x01\x32xOptional JSON configuration for connector-specific API settings such as rate limits, custom endpoints, or feature flags.JP{\"rate_limit\": 1000, \"timeout\": 30, \"base_url\": \"https://api.custom-domain.com\"}R\tapiConfig\"\x8a\x06\n\x16\x43reateConnectedAccount\x12\x9e\x03\n\x15\x61uthorization_details\x18\x05 \x01(\x0b\x32\x34.scalekit.v1.connected_accounts.AuthorizationDetailsB\xb2\x02\x92\x41\xa8\x02\x32\xb7\x01Required authentication credentials for the connected account. Must include either OAuth tokens (access_token, refresh_token, scopes) or static auth details (API keys, bearer tokens).Jl{\"oauth_token\": {\"access_token\": \"ya29.a0...\", \"refresh_token\": \"1//0g...\", \"scopes\": [\"email\", \"profile\"]}}\xbaH\x03\xc8\x01\x01R\x14\x61uthorizationDetails\x12\x98\x02\n\napi_config\x18\x0b \x01(\x0b\x32\x17.google.protobuf.StructB\xdf\x01\x92\x41\xdb\x01\x32\x86\x01Optional JSON configuration for connector-specific API settings such as rate limits, custom API endpoints, timeouts, or feature flags.JP{\"rate_limit\": 1000, \"timeout\": 30, \"base_url\": \"https://api.custom-domain.com\"}R\tapiConfigJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08J\x04\x08\x08\x10\tJ\x04\x08\t\x10\nJ\x04\x08\n\x10\x0b\"\xbc\x05\n\x16UpdateConnectedAccount\x12\x8d\x03\n\x15\x61uthorization_details\x18\x05 \x01(\x0b\x32\x34.scalekit.v1.connected_accounts.AuthorizationDetailsB\xa1\x02\x92\x41\x9d\x02\x32\x99\x01Updated authentication credentials. Provide new OAuth tokens (e.g., after refresh) or updated static auth details. Only included fields will be modified.J\x7f{\"oauth_token\": {\"access_token\": \"ya29.new_token...\", \"refresh_token\": \"1//0g...\", \"scopes\": [\"email\", \"profile\", \"calendar\"]}}R\x14\x61uthorizationDetails\x12\xe1\x01\n\napi_config\x18\n \x01(\x0b\x32\x17.google.protobuf.StructB\xa8\x01\x92\x41\xa4\x01\x32}Updated JSON configuration for API-specific settings. Merges with existing configuration - only provided fields are modified.J#{\"rate_limit\": 2000, \"timeout\": 60}R\tapiConfigJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08J\x04\x08\x08\x10\tJ\x04\x08\t\x10\n\"\xe0\x08\n\x17\x43onnectedAccountForList\x12{\n\nidentifier\x18\x01 \x01(\tB[\x92\x41X2BThe unique identifier for this account in the third-party service.J\x12\"user@example.com\"R\nidentifier\x12]\n\x08provider\x18\x02 \x01(\tBA\x92\x41>22OAuth provider name (e.g., \'google\', \'microsoft\').J\x08\"google\"R\x08provider\x12h\n\x06status\x18\x03 \x01(\x0e\x32/.scalekit.v1.connected_accounts.ConnectorStatusB\x1f\x92\x41\x1c\x32\x1a\x43urrent connection status.R\x06status\x12\x80\x01\n\x12\x61uthorization_type\x18\x04 \x01(\x0e\x32-.scalekit.v1.connected_accounts.ConnectorTypeB\"\x92\x41\x1f\x32\x1d\x41uthorization mechanism type.R\x11\x61uthorizationType\x12~\n\x10token_expires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB8\x92\x41\x35\x32\x1bToken expiration timestamp.J\x16\"2024-12-31T23:59:59Z\"R\x0etokenExpiresAt\x12t\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB9\x92\x41\x36\x32\x1cLast modification timestamp.J\x16\"2024-03-20T15:04:05Z\"R\tupdatedAt\x12\x42\n\tconnector\x18\x08 \x01(\tB$\x92\x41!2\x15\x43onnector identifier.J\x08\"notion\"R\tconnector\x12p\n\x0clast_used_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampB2\x92\x41/2\x15Last usage timestamp.J\x16\"2024-03-20T14:30:00Z\"R\nlastUsedAt\x12Q\n\x02id\x18\n \x01(\tBA\x92\x41>2$Unique connected account identifier.J\x16\"ca_24834495392086178\"R\x02id\x12w\n\rconnection_id\x18\x0b \x01(\tBR\x92\x41\x46\x32*Parent connection configuration reference.J\x18\"conn_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x0c\x63onnectionIdJ\x04\x08\x05\x10\x06\"\xbf\x01\n\x14\x41uthorizationDetails\x12M\n\x0boauth_token\x18\x01 \x01(\x0b\x32*.scalekit.v1.connected_accounts.OauthTokenH\x00R\noauthToken\x12M\n\x0bstatic_auth\x18\x02 \x01(\x0b\x32*.scalekit.v1.connected_accounts.StaticAuthH\x00R\nstaticAuthB\t\n\x07\x64\x65tails\"\xdc\x05\n\nOauthToken\x12\xa0\x01\n\x0c\x61\x63\x63\x65ss_token\x18\x01 \x01(\tB}\x92\x41z2bOAuth access token for API requests. Typically short-lived and must be refreshed after expiration.J\x14\"ya29.a0AfH6SMBx...\"R\x0b\x61\x63\x63\x65ssToken\x12\xae\x01\n\rrefresh_token\x18\x02 \x01(\tB\x88\x01\x92\x41\x84\x01\x32nOAuth refresh token for obtaining new access tokens. Long-lived and used to maintain persistent authorization.J\x12\"1//0gHJxZ-Lb2...\"R\x0crefreshToken\x12\xe1\x01\n\x06scopes\x18\x03 \x03(\tB\xc8\x01\x92\x41\xc4\x01\x32\\List of granted OAuth scopes defining the permissions and access levels for this connection.Jd[\"https://www.googleapis.com/auth/drive.readonly\", \"https://www.googleapis.com/auth/userinfo.email\"]R\x06scopes\x12\x95\x01\n\x06\x64omain\x18\x04 \x01(\tB}\x92\x41z2iAssociated domain for workspace or organization-scoped OAuth connections (e.g., Google Workspace domain).J\r\"example.com\"R\x06\x64omain\"\xf4\x01\n\nStaticAuth\x12\xe5\x01\n\x07\x64\x65tails\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\xb1\x01\x92\x41\xad\x01\x32zFlexible JSON structure containing static credentials. Format varies by connector type (API key, username/password, etc.).J/{\"api_key\": \"sk_live_...\", \"api_secret\": \"...\"}R\x07\x64\x65tails*_\n\x0f\x43onnectorStatus\x12!\n\x1d\x43ONNECTION_STATUS_UNSPECIFIED\x10\x00\x12\n\n\x06\x41\x43TIVE\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x12\x10\n\x0cPENDING_AUTH\x10\x03*\x81\x01\n\rConnectorType\x12\x1f\n\x1b\x43ONNECTION_TYPE_UNSPECIFIED\x10\x00\x12\t\n\x05OAUTH\x10\x01\x12\x0b\n\x07\x41PI_KEY\x10\x02\x12\x0e\n\nBASIC_AUTH\x10\x03\x12\x10\n\x0c\x42\x45\x41RER_TOKEN\x10\x04\x12\n\n\x06\x43USTOM\x10\x05\x12\t\n\x05\x42\x41SIC\x10\x06\x32\xba\x34\n\x17\x43onnectedAccountService\x12\xde\x06\n\x15ListConnectedAccounts\x12<.scalekit.v1.connected_accounts.ListConnectedAccountsRequest\x1a=.scalekit.v1.connected_accounts.ListConnectedAccountsResponse\"\xc7\x05\x92\x41\x9b\x05\n\x12\x43onnected Accounts\x12\x17List connected accounts\x1a\x9a\x02Retrieves a paginated list of connected accounts for third-party integrations. Filter by organization, user, connector type, provider, or identifier. Returns OAuth tokens, API keys, and connection status for each account. Use pagination tokens to navigate through large result sets.J\xaf\x01\n\x03\x32\x30\x30\x12\xa7\x01\nbSuccessfully retrieved the list of connected accounts with their authentication details and status\x12\x41\n?\x1a=.scalekit.v1.connected_accounts.ListConnectedAccountsResponseJY\n\x03\x34\x30\x30\x12R\nPInvalid request - occurs when query parameters are malformed or validation failsJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/connected_accounts\x12\xe0\x06\n\x17SearchConnectedAccounts\x12>.scalekit.v1.connected_accounts.SearchConnectedAccountsRequest\x1a?.scalekit.v1.connected_accounts.SearchConnectedAccountsResponse\"\xc3\x05\x92\x41\x90\x05\n\x12\x43onnected Accounts\x12\x19Search connected accounts\x1a\x99\x02Search for connected accounts in your environment using a text query that matches against identifiers, providers, or connectors. The search performs case-insensitive matching across account details. Returns paginated results with account status and authentication type information.J\x99\x01\n\x03\x32\x30\x30\x12\x91\x01\nJSuccessfully retrieved matching connected accounts with pagination support\x12\x43\nA\x1a?.scalekit.v1.connected_accounts.SearchConnectedAccountsResponseJc\n\x03\x34\x30\x30\x12\\\nZInvalid request - query parameter is too short (minimum 3 characters) or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02#\x12!/api/v1/connected_accounts:search\x12\xfe\x07\n\x16\x43reateConnectedAccount\x12=.scalekit.v1.connected_accounts.CreateConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.CreateConnectedAccountResponse\"\xe4\x06\x92\x41\xb5\x06\n\x12\x43onnected Accounts\x12\x1a\x43reate a connected account\x1a\xdf\x02\x43reates a new connected account with OAuth tokens or API credentials for third-party service integration. Supply authorization details including access tokens, refresh tokens, scopes, and optional API configuration. The account can be scoped to an organization or user. Returns the created account with its unique identifier and authentication status.J\xa4\x01\n\x03\x32\x30\x31\x12\x9c\x01\nVConnected account created successfully with authentication credentials stored securely\x12\x42\n@\x1a>.scalekit.v1.connected_accounts.CreateConnectedAccountResponseJg\n\x03\x34\x30\x30\x12`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJM\n\x03\x34\x30\x39\x12\x46\nDConflict - connected account with the same identifier already exists\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1f\"\x1a/api/v1/connected_accounts:\x01*\x12\xef\x07\n\x16UpdateConnectedAccount\x12=.scalekit.v1.connected_accounts.UpdateConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.UpdateConnectedAccountResponse\"\xd5\x06\x92\x41\xa6\x06\n\x12\x43onnected Accounts\x12$Update connected account credentials\x1a\xd2\x02Updates authentication credentials and configuration for an existing connected account. Modify OAuth tokens, refresh tokens, access scopes, or API configuration settings. Specify the account by ID, or by combination of organization/user, connector, and identifier. Returns the updated account with new token expiry and status information.J\x9a\x01\n\x03\x32\x30\x30\x12\x92\x01\nLConnected account updated successfully with new credentials or configuration\x12\x42\n@\x1a>.scalekit.v1.connected_accounts.UpdateConnectedAccountResponseJg\n\x03\x34\x30\x30\x12`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJK\n\x03\x34\x30\x34\x12\x44\nBConnected account not found - the specified account does not exist\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1f\x1a\x1a/api/v1/connected_accounts:\x01*\x12\xc6\x06\n\x16\x44\x65leteConnectedAccount\x12=.scalekit.v1.connected_accounts.DeleteConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.DeleteConnectedAccountResponse\"\xac\x05\x92\x41\xf6\x04\n\x12\x43onnected Accounts\x12\x1a\x44\x65lete a connected account\x1a\x9f\x02Permanently removes a connected account and revokes all associated authentication credentials. Identify the account by ID, or by combination of organization/user, connector, and identifier. This action cannot be undone. All OAuth tokens and API keys for this account will be invalidated.JK\n\x03\x32\x30\x30\x12\x44\nBConnected account deleted successfully and all credentials revokedJD\n\x03\x34\x30\x30\x12=\n;Invalid request - malformed parameters or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJK\n\x03\x34\x30\x34\x12\x44\nBConnected account not found - the specified account does not exist\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02&\"!/api/v1/connected_accounts:delete:\x01*\x12\xff\x06\n\x1fGetMagicLinkForConnectedAccount\x12\x46.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountRequest\x1aG.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountResponse\"\xca\x05\x92\x41\x90\x05\n\x12\x43onnected Accounts\x12\"Generate authentication magic link\x1a\xa2\x02\x43reates a time-limited magic link for connecting or re-authorizing a third-party account. The link directs users to the OAuth authorization flow for the specified connector. Returns the generated link URL and expiration timestamp. Links typically expire after a short duration for security.J\x9f\x01\n\x03\x32\x30\x30\x12\x97\x01\nHMagic link generated successfully with authorization URL and expiry time\x12K\nI\x1aG.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountResponseJK\n\x03\x34\x30\x30\x12\x44\nBInvalid request - missing required parameters or invalid connectorJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02*\"%/api/v1/connected_accounts/magic_link:\x01*\x12\xb6\x07\n\x17GetConnectedAccountAuth\x12\x46.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierRequest\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponse\"\x89\x06\x92\x41\xd8\x05\n\x12\x43onnected Accounts\x12\x1dGet connected account details\x1a\xab\x02Retrieves complete authentication details for a connected account including OAuth tokens, refresh tokens, scopes, and API configuration. Query by account ID or by combination of organization/user, connector, and identifier. Returns sensitive credential information - use appropriate access controls.J\xa0\x01\n\x03\x32\x30\x30\x12\x98\x01\nISuccessfully retrieved connected account with full authentication details\x12K\nI\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponseJ<\n\x03\x34\x30\x30\x12\x35\n3Invalid request - missing required query parametersJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJP\n\x03\x34\x30\x34\x12I\nGConnected account not found - no account matches the specified criteria\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02!\x12\x1f/api/v1/connected_accounts/auth\x1a\xe3\x01\x92\x41\xdf\x01\n\x12\x43onnected Accounts\x12\xc8\x01Manage connected accounts for third-party integrations and OAuth connections. Connected accounts represent authenticated access to external services like Google, Notion, Slack, and other applications.B\xa4\x02Z22OAuth provider name (e.g., \'google\', \'microsoft\').J\x08\"google\"R\x08provider\x12h\n\x06status\x18\x03 \x01(\x0e\x32/.scalekit.v1.connected_accounts.ConnectorStatusB\x1f\x92\x41\x1c\x32\x1a\x43urrent connection status.R\x06status\x12\x80\x01\n\x12\x61uthorization_type\x18\x04 \x01(\x0e\x32-.scalekit.v1.connected_accounts.ConnectorTypeB\"\x92\x41\x1f\x32\x1d\x41uthorization mechanism type.R\x11\x61uthorizationType\x12~\n\x10token_expires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB8\x92\x41\x35\x32\x1bToken expiration timestamp.J\x16\"2024-12-31T23:59:59Z\"R\x0etokenExpiresAt\x12t\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB9\x92\x41\x36\x32\x1cLast modification timestamp.J\x16\"2024-03-20T15:04:05Z\"R\tupdatedAt\x12\x42\n\tconnector\x18\x08 \x01(\tB$\x92\x41!2\x15\x43onnector identifier.J\x08\"notion\"R\tconnector\x12p\n\x0clast_used_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampB2\x92\x41/2\x15Last usage timestamp.J\x16\"2024-03-20T14:30:00Z\"R\nlastUsedAt\x12Q\n\x02id\x18\n \x01(\tBA\x92\x41>2$Unique connected account identifier.J\x16\"ca_24834495392086178\"R\x02id\x12w\n\rconnection_id\x18\x0b \x01(\tBR\x92\x41\x46\x32*Parent connection configuration reference.J\x18\"conn_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x0c\x63onnectionIdJ\x04\x08\x05\x10\x06\"\xbf\x01\n\x14\x41uthorizationDetails\x12M\n\x0boauth_token\x18\x01 \x01(\x0b\x32*.scalekit.v1.connected_accounts.OauthTokenH\x00R\noauthToken\x12M\n\x0bstatic_auth\x18\x02 \x01(\x0b\x32*.scalekit.v1.connected_accounts.StaticAuthH\x00R\nstaticAuthB\t\n\x07\x64\x65tails\"\xdc\x05\n\nOauthToken\x12\xa0\x01\n\x0c\x61\x63\x63\x65ss_token\x18\x01 \x01(\tB}\x92\x41z2bOAuth access token for API requests. Typically short-lived and must be refreshed after expiration.J\x14\"ya29.a0AfH6SMBx...\"R\x0b\x61\x63\x63\x65ssToken\x12\xae\x01\n\rrefresh_token\x18\x02 \x01(\tB\x88\x01\x92\x41\x84\x01\x32nOAuth refresh token for obtaining new access tokens. Long-lived and used to maintain persistent authorization.J\x12\"1//0gHJxZ-Lb2...\"R\x0crefreshToken\x12\xe1\x01\n\x06scopes\x18\x03 \x03(\tB\xc8\x01\x92\x41\xc4\x01\x32\\List of granted OAuth scopes defining the permissions and access levels for this connection.Jd[\"https://www.googleapis.com/auth/drive.readonly\", \"https://www.googleapis.com/auth/userinfo.email\"]R\x06scopes\x12\x95\x01\n\x06\x64omain\x18\x04 \x01(\tB}\x92\x41z2iAssociated domain for workspace or organization-scoped OAuth connections (e.g., Google Workspace domain).J\r\"example.com\"R\x06\x64omain\"\xf4\x01\n\nStaticAuth\x12\xe5\x01\n\x07\x64\x65tails\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\xb1\x01\x92\x41\xad\x01\x32zFlexible JSON structure containing static credentials. Format varies by connector type (API key, username/password, etc.).J/{\"api_key\": \"sk_live_...\", \"api_secret\": \"...\"}R\x07\x64\x65tails\"\x83\x02\n\x1aGetConnectedAccountRequest\x12\xe4\x01\n\x02id\x18\x01 \x01(\tB\xd3\x01\x92\x41\xc6\x01\x32\xab\x01Unique identifier for the connected account. Always prefixed with \'ca_\'. If omitted (via the /this path), the connected account is resolved from the current token context.J\x16\"ca_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x02id\"\xc5\x01\n\x1bGetConnectedAccountResponse\x12\xa5\x01\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountBF\x92\x41\x43\x32\x41The connected account with its details and authentication status.R\x10\x63onnectedAccount\"\xb2\x01\n!DisconnectConnectedAccountRequest\x12\x8c\x01\n\x02id\x18\x01 \x01(\tB|\x92\x41p2VUnique identifier for the connected account to disconnect. Always prefixed with \'ca_\'.J\x16\"ca_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x02id\"\xc6\x01\n\"DisconnectConnectedAccountResponse\x12\x9f\x01\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountB@\x92\x41=2;The connected account with its updated DISCONNECTED status.R\x10\x63onnectedAccount*\x8b\x01\n\x0f\x43onnectorStatus\x12!\n\x1d\x43ONNECTION_STATUS_UNSPECIFIED\x10\x00\x12\n\n\x06\x41\x43TIVE\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x12\x10\n\x0cPENDING_AUTH\x10\x03\x12\x18\n\x14PENDING_VERIFICATION\x10\x04\x12\x10\n\x0c\x44ISCONNECTED\x10\x05*\xa3\x01\n\rConnectorType\x12\x1f\n\x1b\x43ONNECTION_TYPE_UNSPECIFIED\x10\x00\x12\t\n\x05OAUTH\x10\x01\x12\x0b\n\x07\x41PI_KEY\x10\x02\x12\x0e\n\nBASIC_AUTH\x10\x03\x12\x10\n\x0c\x42\x45\x41RER_TOKEN\x10\x04\x12\n\n\x06\x43USTOM\x10\x05\x12\t\n\x05\x42\x41SIC\x10\x06\x12\r\n\tOAUTH_M2M\x10\x07\x12\x11\n\rTRELLO_OAUTH1\x10\x08\x32\xf8N\n\x17\x43onnectedAccountService\x12\xde\x06\n\x15ListConnectedAccounts\x12<.scalekit.v1.connected_accounts.ListConnectedAccountsRequest\x1a=.scalekit.v1.connected_accounts.ListConnectedAccountsResponse\"\xc7\x05\x92\x41\x9b\x05\n\x12\x43onnected Accounts\x12\x17List connected accounts\x1a\x9a\x02Retrieves a paginated list of connected accounts for third-party integrations. Filter by organization, user, connector type, provider, or identifier. Returns OAuth tokens, API keys, and connection status for each account. Use pagination tokens to navigate through large result sets.J\xaf\x01\n\x03\x32\x30\x30\x12\xa7\x01\nbSuccessfully retrieved the list of connected accounts with their authentication details and status\x12\x41\n?\x1a=.scalekit.v1.connected_accounts.ListConnectedAccountsResponseJY\n\x03\x34\x30\x30\x12R\nPInvalid request - occurs when query parameters are malformed or validation failsJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/connected_accounts\x12\xe0\x06\n\x17SearchConnectedAccounts\x12>.scalekit.v1.connected_accounts.SearchConnectedAccountsRequest\x1a?.scalekit.v1.connected_accounts.SearchConnectedAccountsResponse\"\xc3\x05\x92\x41\x90\x05\n\x12\x43onnected Accounts\x12\x19Search connected accounts\x1a\x99\x02Search for connected accounts in your environment using a text query that matches against identifiers, providers, or connectors. The search performs case-insensitive matching across account details. Returns paginated results with account status and authentication type information.J\x99\x01\n\x03\x32\x30\x30\x12\x91\x01\nJSuccessfully retrieved matching connected accounts with pagination support\x12\x43\nA\x1a?.scalekit.v1.connected_accounts.SearchConnectedAccountsResponseJc\n\x03\x34\x30\x30\x12\\\nZInvalid request - query parameter is too short (minimum 3 characters) or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02#\x12!/api/v1/connected_accounts:search\x12\xfe\x07\n\x16\x43reateConnectedAccount\x12=.scalekit.v1.connected_accounts.CreateConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.CreateConnectedAccountResponse\"\xe4\x06\x92\x41\xb5\x06\n\x12\x43onnected Accounts\x12\x1a\x43reate a connected account\x1a\xdf\x02\x43reates a new connected account with OAuth tokens or API credentials for third-party service integration. Supply authorization details including access tokens, refresh tokens, scopes, and optional API configuration. The account can be scoped to an organization or user. Returns the created account with its unique identifier and authentication status.J\xa4\x01\n\x03\x32\x30\x31\x12\x9c\x01\nVConnected account created successfully with authentication credentials stored securely\x12\x42\n@\x1a>.scalekit.v1.connected_accounts.CreateConnectedAccountResponseJg\n\x03\x34\x30\x30\x12`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJM\n\x03\x34\x30\x39\x12\x46\nDConflict - connected account with the same identifier already exists\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1f\"\x1a/api/v1/connected_accounts:\x01*\x12\xf0\x07\n\x16UpdateConnectedAccount\x12=.scalekit.v1.connected_accounts.UpdateConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.UpdateConnectedAccountResponse\"\xd6\x06\x92\x41\xa6\x06\n\x12\x43onnected Accounts\x12$Update connected account credentials\x1a\xd2\x02Updates authentication credentials and configuration for an existing connected account. Modify OAuth tokens, refresh tokens, access scopes, or API configuration settings. Specify the account by ID, or by combination of organization/user, connector, and identifier. Returns the updated account with new token expiry and status information.J\x9a\x01\n\x03\x32\x30\x30\x12\x92\x01\nLConnected account updated successfully with new credentials or configuration\x12\x42\n@\x1a>.scalekit.v1.connected_accounts.UpdateConnectedAccountResponseJg\n\x03\x34\x30\x30\x12`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJK\n\x03\x34\x30\x34\x12\x44\nBConnected account not found - the specified account does not exist\x82\xb5\x18\x03\x18\xc4\x01\x82\xd3\xe4\x93\x02\x1f\x1a\x1a/api/v1/connected_accounts:\x01*\x12\xc6\x06\n\x16\x44\x65leteConnectedAccount\x12=.scalekit.v1.connected_accounts.DeleteConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.DeleteConnectedAccountResponse\"\xac\x05\x92\x41\xf6\x04\n\x12\x43onnected Accounts\x12\x1a\x44\x65lete a connected account\x1a\x9f\x02Permanently removes a connected account and revokes all associated authentication credentials. Identify the account by ID, or by combination of organization/user, connector, and identifier. This action cannot be undone. All OAuth tokens and API keys for this account will be invalidated.JK\n\x03\x32\x30\x30\x12\x44\nBConnected account deleted successfully and all credentials revokedJD\n\x03\x34\x30\x30\x12=\n;Invalid request - malformed parameters or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJK\n\x03\x34\x30\x34\x12\x44\nBConnected account not found - the specified account does not exist\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02&\"!/api/v1/connected_accounts:delete:\x01*\x12\xff\x06\n\x1fGetMagicLinkForConnectedAccount\x12\x46.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountRequest\x1aG.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountResponse\"\xca\x05\x92\x41\x90\x05\n\x12\x43onnected Accounts\x12\"Generate authentication magic link\x1a\xa2\x02\x43reates a time-limited magic link for connecting or re-authorizing a third-party account. The link directs users to the OAuth authorization flow for the specified connector. Returns the generated link URL and expiration timestamp. Links typically expire after a short duration for security.J\x9f\x01\n\x03\x32\x30\x30\x12\x97\x01\nHMagic link generated successfully with authorization URL and expiry time\x12K\nI\x1aG.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountResponseJK\n\x03\x34\x30\x30\x12\x44\nBInvalid request - missing required parameters or invalid connectorJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02*\"%/api/v1/connected_accounts/magic_link:\x01*\x12\xf6\x05\n\x13GetConnectedAccount\x12:.scalekit.v1.connected_accounts.GetConnectedAccountRequest\x1a;.scalekit.v1.connected_accounts.GetConnectedAccountResponse\"\xe5\x04\x92\x41\x90\x04\n\x12\x43onnected Accounts\x12\x17Get a connected account\x1a\xb8\x01Retrieves a connected account by its unique ID. Use the path \'/this\' (e.g. /api/v1/connected_accounts/this) to retrieve the connected account associated with the current token context.Jv\n\x03\x32\x30\x30\x12o\n,Successfully retrieved the connected account\x12?\n=\x1a;.scalekit.v1.connected_accounts.GetConnectedAccountResponseJD\n\x03\x34\x30\x30\x12=\n;Invalid request - missing or malformed connected account IDJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJ$\n\x03\x34\x30\x34\x12\x1d\n\x1b\x43onnected account not found\x82\xb5\x18\x03\x18\xc4\x01\x82\xd3\xe4\x93\x02\x44\x12\x1f/api/v1/connected_accounts/thisZ!\x12\x1f/api/v1/connected_accounts/{id}\x12\x86\x06\n\x1a\x44isconnectConnectedAccount\x12\x41.scalekit.v1.connected_accounts.DisconnectConnectedAccountRequest\x1a\x42.scalekit.v1.connected_accounts.DisconnectConnectedAccountResponse\"\xe0\x04\x92\x41\xf2\x03\n\x12\x43onnected Accounts\x12\x1e\x44isconnect a connected account\x1a\x88\x01\x44isconnects a connected account by setting its status to DISCONNECTED. The account record is retained but is marked as no longer active.J\x80\x01\n\x03\x32\x30\x30\x12y\n/Successfully disconnected the connected account\x12\x46\nD\x1a\x42.scalekit.v1.connected_accounts.DisconnectConnectedAccountResponseJD\n\x03\x34\x30\x30\x12=\n;Invalid request - missing or malformed connected account IDJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJ$\n\x03\x34\x30\x34\x12\x1d\n\x1b\x43onnected account not found\x82\xb5\x18\x03\x18\xc4\x01\x82\xd3\xe4\x93\x02]\"*/api/v1/connected_accounts/{id}:disconnect:\x01*Z,\"\'/api/v1/connected_accounts/-:disconnect:\x01*\x12\xb6\x07\n\x17GetConnectedAccountAuth\x12\x46.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierRequest\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponse\"\x89\x06\x92\x41\xd8\x05\n\x12\x43onnected Accounts\x12\x1dGet connected account details\x1a\xab\x02Retrieves complete authentication details for a connected account including OAuth tokens, refresh tokens, scopes, and API configuration. Query by account ID or by combination of organization/user, connector, and identifier. Returns sensitive credential information - use appropriate access controls.J\xa0\x01\n\x03\x32\x30\x30\x12\x98\x01\nISuccessfully retrieved connected account with full authentication details\x12K\nI\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponseJ<\n\x03\x34\x30\x30\x12\x35\n3Invalid request - missing required query parametersJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJP\n\x03\x34\x30\x34\x12I\nGConnected account not found - no account matches the specified criteria\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02!\x12\x1f/api/v1/connected_accounts/auth\x12\xfa\x06\n\x1aGetConnectedAccountDetails\x12\x46.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierRequest\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponse\"\xca\x05\x92\x41\x96\x05\n\x12\x43onnected Accounts\x12\x1dGet connected account details\x1a\x83\x02Returns metadata for a connected account including status, connector type, provider, and configuration without exposing stored authorization credentials. Look up by account ID, or by a combination of organization (or user), connector, and external identifier.J\x86\x01\n\x03\x32\x30\x30\x12\x7f\n0Successfully retrieved connected account details\x12K\nI\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponseJ<\n\x03\x34\x30\x30\x12\x35\n3Invalid request - missing required query parametersJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJP\n\x03\x34\x30\x34\x12I\nGConnected account not found - no account matches the specified criteria\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02$\x12\"/api/v1/connected_accounts/details\x12\xbb\x07\n\x1aVerifyConnectedAccountUser\x12\x41.scalekit.v1.connected_accounts.VerifyConnectedAccountUserRequest\x1a\x42.scalekit.v1.connected_accounts.VerifyConnectedAccountUserResponse\"\x95\x06\x92\x41\xda\x05\n\x12\x43onnected Accounts\x12\x1dVerify connected account user\x1a\xa4\x02\x43onfirms the user assertion and activates the connected account after the user completes third-party OAuth. Called by the B2B app server with auth_request_id and identifier. Validates that the asserted identifier matches the one stored on the auth request and promotes pending tokens to live.J\x8a\x01\n\x03\x32\x30\x30\x12\x82\x01\n8Verification successful; connected account is now ACTIVE\x12\x46\nD\x1a\x42.scalekit.v1.connected_accounts.VerifyConnectedAccountUserResponseJ6\n\x03\x34\x30\x30\x12/\n-Invalid request - missing or malformed fieldsJ7\n\x03\x34\x30\x31\x12\x30\n.Unauthorized - invalid or missing access tokenJ(\n\x03\x34\x30\x33\x12!\n\x1f\x46orbidden - identifier mismatchJV\n\x03\x34\x30\x34\x12O\nMNot found - no pending flow for the given auth_request_id or already consumed\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02+\"&/api/v1/connected_accounts/user/verify:\x01*\x1a\xe3\x01\x92\x41\xdf\x01\n\x12\x43onnected Accounts\x12\xc8\x01Manage connected accounts for third-party integrations and OAuth connections. Connected accounts represent authenticated access to external services like Google, Notion, Slack, and other applications.B\xa4\x02Z.scalekit.v1.connected_accounts.CreateConnectedAccountResponseJg\n\003400\022`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\003401\022;\n9Authentication required - missing or invalid access tokenJM\n\003409\022F\nDConflict - connected account with the same identifier already exists\202\265\030\002\030D\202\323\344\223\002\037\"\032/api/v1/connected_accounts:\001*' _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['UpdateConnectedAccount']._loaded_options = None - _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['UpdateConnectedAccount']._serialized_options = b'\222A\246\006\n\022Connected Accounts\022$Update connected account credentials\032\322\002Updates authentication credentials and configuration for an existing connected account. Modify OAuth tokens, refresh tokens, access scopes, or API configuration settings. Specify the account by ID, or by combination of organization/user, connector, and identifier. Returns the updated account with new token expiry and status information.J\232\001\n\003200\022\222\001\nLConnected account updated successfully with new credentials or configuration\022B\n@\032>.scalekit.v1.connected_accounts.UpdateConnectedAccountResponseJg\n\003400\022`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\003401\022;\n9Authentication required - missing or invalid access tokenJK\n\003404\022D\nBConnected account not found - the specified account does not exist\202\265\030\002\030D\202\323\344\223\002\037\032\032/api/v1/connected_accounts:\001*' + _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['UpdateConnectedAccount']._serialized_options = b'\222A\246\006\n\022Connected Accounts\022$Update connected account credentials\032\322\002Updates authentication credentials and configuration for an existing connected account. Modify OAuth tokens, refresh tokens, access scopes, or API configuration settings. Specify the account by ID, or by combination of organization/user, connector, and identifier. Returns the updated account with new token expiry and status information.J\232\001\n\003200\022\222\001\nLConnected account updated successfully with new credentials or configuration\022B\n@\032>.scalekit.v1.connected_accounts.UpdateConnectedAccountResponseJg\n\003400\022`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\003401\022;\n9Authentication required - missing or invalid access tokenJK\n\003404\022D\nBConnected account not found - the specified account does not exist\202\265\030\003\030\304\001\202\323\344\223\002\037\032\032/api/v1/connected_accounts:\001*' _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['DeleteConnectedAccount']._loaded_options = None _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['DeleteConnectedAccount']._serialized_options = b'\222A\366\004\n\022Connected Accounts\022\032Delete a connected account\032\237\002Permanently removes a connected account and revokes all associated authentication credentials. Identify the account by ID, or by combination of organization/user, connector, and identifier. This action cannot be undone. All OAuth tokens and API keys for this account will be invalidated.JK\n\003200\022D\nBConnected account deleted successfully and all credentials revokedJD\n\003400\022=\n;Invalid request - malformed parameters or validation failedJB\n\003401\022;\n9Authentication required - missing or invalid access tokenJK\n\003404\022D\nBConnected account not found - the specified account does not exist\202\265\030\002\030D\202\323\344\223\002&\"!/api/v1/connected_accounts:delete:\001*' _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['GetMagicLinkForConnectedAccount']._loaded_options = None _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['GetMagicLinkForConnectedAccount']._serialized_options = b'\222A\220\005\n\022Connected Accounts\022\"Generate authentication magic link\032\242\002Creates a time-limited magic link for connecting or re-authorizing a third-party account. The link directs users to the OAuth authorization flow for the specified connector. Returns the generated link URL and expiration timestamp. Links typically expire after a short duration for security.J\237\001\n\003200\022\227\001\nHMagic link generated successfully with authorization URL and expiry time\022K\nI\032G.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountResponseJK\n\003400\022D\nBInvalid request - missing required parameters or invalid connectorJB\n\003401\022;\n9Authentication required - missing or invalid access token\202\265\030\002\030D\202\323\344\223\002*\"%/api/v1/connected_accounts/magic_link:\001*' + _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['GetConnectedAccount']._loaded_options = None + _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['GetConnectedAccount']._serialized_options = b'\222A\220\004\n\022Connected Accounts\022\027Get a connected account\032\270\001Retrieves a connected account by its unique ID. Use the path \'/this\' (e.g. /api/v1/connected_accounts/this) to retrieve the connected account associated with the current token context.Jv\n\003200\022o\n,Successfully retrieved the connected account\022?\n=\032;.scalekit.v1.connected_accounts.GetConnectedAccountResponseJD\n\003400\022=\n;Invalid request - missing or malformed connected account IDJB\n\003401\022;\n9Authentication required - missing or invalid access tokenJ$\n\003404\022\035\n\033Connected account not found\202\265\030\003\030\304\001\202\323\344\223\002D\022\037/api/v1/connected_accounts/thisZ!\022\037/api/v1/connected_accounts/{id}' + _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['DisconnectConnectedAccount']._loaded_options = None + _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['DisconnectConnectedAccount']._serialized_options = b'\222A\362\003\n\022Connected Accounts\022\036Disconnect a connected account\032\210\001Disconnects a connected account by setting its status to DISCONNECTED. The account record is retained but is marked as no longer active.J\200\001\n\003200\022y\n/Successfully disconnected the connected account\022F\nD\032B.scalekit.v1.connected_accounts.DisconnectConnectedAccountResponseJD\n\003400\022=\n;Invalid request - missing or malformed connected account IDJB\n\003401\022;\n9Authentication required - missing or invalid access tokenJ$\n\003404\022\035\n\033Connected account not found\202\265\030\003\030\304\001\202\323\344\223\002]\"*/api/v1/connected_accounts/{id}:disconnect:\001*Z,\"\'/api/v1/connected_accounts/-:disconnect:\001*' _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['GetConnectedAccountAuth']._loaded_options = None _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['GetConnectedAccountAuth']._serialized_options = b'\222A\330\005\n\022Connected Accounts\022\035Get connected account details\032\253\002Retrieves complete authentication details for a connected account including OAuth tokens, refresh tokens, scopes, and API configuration. Query by account ID or by combination of organization/user, connector, and identifier. Returns sensitive credential information - use appropriate access controls.J\240\001\n\003200\022\230\001\nISuccessfully retrieved connected account with full authentication details\022K\nI\032G.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponseJ<\n\003400\0225\n3Invalid request - missing required query parametersJB\n\003401\022;\n9Authentication required - missing or invalid access tokenJP\n\003404\022I\nGConnected account not found - no account matches the specified criteria\202\265\030\002\030D\202\323\344\223\002!\022\037/api/v1/connected_accounts/auth' - _globals['_CONNECTORSTATUS']._serialized_start=15819 - _globals['_CONNECTORSTATUS']._serialized_end=15914 - _globals['_CONNECTORTYPE']._serialized_start=15917 - _globals['_CONNECTORTYPE']._serialized_end=16046 + _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['GetConnectedAccountDetails']._loaded_options = None + _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['GetConnectedAccountDetails']._serialized_options = b'\222A\226\005\n\022Connected Accounts\022\035Get connected account details\032\203\002Returns metadata for a connected account including status, connector type, provider, and configuration without exposing stored authorization credentials. Look up by account ID, or by a combination of organization (or user), connector, and external identifier.J\206\001\n\003200\022\177\n0Successfully retrieved connected account details\022K\nI\032G.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponseJ<\n\003400\0225\n3Invalid request - missing required query parametersJB\n\003401\022;\n9Authentication required - missing or invalid access tokenJP\n\003404\022I\nGConnected account not found - no account matches the specified criteria\202\265\030\002\030D\202\323\344\223\002$\022\"/api/v1/connected_accounts/details' + _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['VerifyConnectedAccountUser']._loaded_options = None + _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['VerifyConnectedAccountUser']._serialized_options = b'\222A\332\005\n\022Connected Accounts\022\035Verify connected account user\032\244\002Confirms the user assertion and activates the connected account after the user completes third-party OAuth. Called by the B2B app server with auth_request_id and identifier. Validates that the asserted identifier matches the one stored on the auth request and promotes pending tokens to live.J\212\001\n\003200\022\202\001\n8Verification successful; connected account is now ACTIVE\022F\nD\032B.scalekit.v1.connected_accounts.VerifyConnectedAccountUserResponseJ6\n\003400\022/\n-Invalid request - missing or malformed fieldsJ7\n\003401\0220\n.Unauthorized - invalid or missing access tokenJ(\n\003403\022!\n\037Forbidden - identifier mismatchJV\n\003404\022O\nMNot found - no pending flow for the given auth_request_id or already consumed\202\265\030\002\030D\202\323\344\223\002+\"&/api/v1/connected_accounts/user/verify:\001*' + _globals['_CONNECTORSTATUS']._serialized_start=17728 + _globals['_CONNECTORSTATUS']._serialized_end=17867 + _globals['_CONNECTORTYPE']._serialized_start=17870 + _globals['_CONNECTORTYPE']._serialized_end=18033 _globals['_LISTCONNECTEDACCOUNTSREQUEST']._serialized_start=359 - _globals['_LISTCONNECTEDACCOUNTSREQUEST']._serialized_end=1916 - _globals['_LISTCONNECTEDACCOUNTSRESPONSE']._serialized_start=1919 - _globals['_LISTCONNECTEDACCOUNTSRESPONSE']._serialized_end=2746 - _globals['_SEARCHCONNECTEDACCOUNTSREQUEST']._serialized_start=2749 - _globals['_SEARCHCONNECTEDACCOUNTSREQUEST']._serialized_end=3613 - _globals['_SEARCHCONNECTEDACCOUNTSRESPONSE']._serialized_start=3616 - _globals['_SEARCHCONNECTEDACCOUNTSRESPONSE']._serialized_end=4263 - _globals['_CREATECONNECTEDACCOUNTREQUEST']._serialized_start=4266 - _globals['_CREATECONNECTEDACCOUNTREQUEST']._serialized_end=5199 - _globals['_CREATECONNECTEDACCOUNTRESPONSE']._serialized_start=5202 - _globals['_CREATECONNECTEDACCOUNTRESPONSE']._serialized_end=5471 - _globals['_UPDATECONNECTEDACCOUNTREQUEST']._serialized_start=5474 - _globals['_UPDATECONNECTEDACCOUNTREQUEST']._serialized_end=6501 - _globals['_UPDATECONNECTEDACCOUNTRESPONSE']._serialized_start=6504 - _globals['_UPDATECONNECTEDACCOUNTRESPONSE']._serialized_end=6751 - _globals['_DELETECONNECTEDACCOUNTREQUEST']._serialized_start=6754 - _globals['_DELETECONNECTEDACCOUNTREQUEST']._serialized_end=7479 - _globals['_DELETECONNECTEDACCOUNTRESPONSE']._serialized_start=7481 - _globals['_DELETECONNECTEDACCOUNTRESPONSE']._serialized_end=7513 - _globals['_GETMAGICLINKFORCONNECTEDACCOUNTREQUEST']._serialized_start=7516 - _globals['_GETMAGICLINKFORCONNECTEDACCOUNTREQUEST']._serialized_end=8222 - _globals['_GETMAGICLINKFORCONNECTEDACCOUNTRESPONSE']._serialized_start=8225 - _globals['_GETMAGICLINKFORCONNECTEDACCOUNTRESPONSE']._serialized_end=8509 - _globals['_GETCONNECTEDACCOUNTBYIDENTIFIERREQUEST']._serialized_start=8512 - _globals['_GETCONNECTEDACCOUNTBYIDENTIFIERREQUEST']._serialized_end=9218 - _globals['_GETCONNECTEDACCOUNTBYIDENTIFIERRESPONSE']._serialized_start=9221 - _globals['_GETCONNECTEDACCOUNTBYIDENTIFIERRESPONSE']._serialized_end=9539 - _globals['_CONNECTEDACCOUNT']._serialized_start=9542 - _globals['_CONNECTEDACCOUNT']._serialized_end=12034 - _globals['_CREATECONNECTEDACCOUNT']._serialized_start=12037 - _globals['_CREATECONNECTEDACCOUNT']._serialized_end=12815 - _globals['_UPDATECONNECTEDACCOUNT']._serialized_start=12818 - _globals['_UPDATECONNECTEDACCOUNT']._serialized_end=13518 - _globals['_CONNECTEDACCOUNTFORLIST']._serialized_start=13521 - _globals['_CONNECTEDACCOUNTFORLIST']._serialized_end=14641 - _globals['_AUTHORIZATIONDETAILS']._serialized_start=14644 - _globals['_AUTHORIZATIONDETAILS']._serialized_end=14835 - _globals['_OAUTHTOKEN']._serialized_start=14838 - _globals['_OAUTHTOKEN']._serialized_end=15570 - _globals['_STATICAUTH']._serialized_start=15573 - _globals['_STATICAUTH']._serialized_end=15817 - _globals['_CONNECTEDACCOUNTSERVICE']._serialized_start=16049 - _globals['_CONNECTEDACCOUNTSERVICE']._serialized_end=22763 + _globals['_LISTCONNECTEDACCOUNTSREQUEST']._serialized_end=1936 + _globals['_LISTCONNECTEDACCOUNTSRESPONSE']._serialized_start=1939 + _globals['_LISTCONNECTEDACCOUNTSRESPONSE']._serialized_end=2766 + _globals['_SEARCHCONNECTEDACCOUNTSREQUEST']._serialized_start=2769 + _globals['_SEARCHCONNECTEDACCOUNTSREQUEST']._serialized_end=3633 + _globals['_SEARCHCONNECTEDACCOUNTSRESPONSE']._serialized_start=3636 + _globals['_SEARCHCONNECTEDACCOUNTSRESPONSE']._serialized_end=4283 + _globals['_CREATECONNECTEDACCOUNTREQUEST']._serialized_start=4286 + _globals['_CREATECONNECTEDACCOUNTREQUEST']._serialized_end=5222 + _globals['_CREATECONNECTEDACCOUNTRESPONSE']._serialized_start=5225 + _globals['_CREATECONNECTEDACCOUNTRESPONSE']._serialized_end=5494 + _globals['_UPDATECONNECTEDACCOUNTREQUEST']._serialized_start=5497 + _globals['_UPDATECONNECTEDACCOUNTREQUEST']._serialized_end=6525 + _globals['_UPDATECONNECTEDACCOUNTRESPONSE']._serialized_start=6528 + _globals['_UPDATECONNECTEDACCOUNTRESPONSE']._serialized_end=6775 + _globals['_DELETECONNECTEDACCOUNTREQUEST']._serialized_start=6778 + _globals['_DELETECONNECTEDACCOUNTREQUEST']._serialized_end=7506 + _globals['_DELETECONNECTEDACCOUNTRESPONSE']._serialized_start=7508 + _globals['_DELETECONNECTEDACCOUNTRESPONSE']._serialized_end=7540 + _globals['_GETMAGICLINKFORCONNECTEDACCOUNTREQUEST']._serialized_start=7543 + _globals['_GETMAGICLINKFORCONNECTEDACCOUNTREQUEST']._serialized_end=8650 + _globals['_GETMAGICLINKFORCONNECTEDACCOUNTRESPONSE']._serialized_start=8653 + _globals['_GETMAGICLINKFORCONNECTEDACCOUNTRESPONSE']._serialized_end=8937 + _globals['_VERIFYCONNECTEDACCOUNTUSERREQUEST']._serialized_start=8940 + _globals['_VERIFYCONNECTEDACCOUNTUSERREQUEST']._serialized_end=9303 + _globals['_VERIFYCONNECTEDACCOUNTUSERRESPONSE']._serialized_start=9306 + _globals['_VERIFYCONNECTEDACCOUNTUSERRESPONSE']._serialized_end=9517 + _globals['_GETCONNECTEDACCOUNTBYIDENTIFIERREQUEST']._serialized_start=9520 + _globals['_GETCONNECTEDACCOUNTBYIDENTIFIERREQUEST']._serialized_end=10227 + _globals['_GETCONNECTEDACCOUNTBYIDENTIFIERRESPONSE']._serialized_start=10230 + _globals['_GETCONNECTEDACCOUNTBYIDENTIFIERRESPONSE']._serialized_end=10548 + _globals['_CONNECTEDACCOUNT']._serialized_start=10551 + _globals['_CONNECTEDACCOUNT']._serialized_end=13082 + _globals['_CREATECONNECTEDACCOUNT']._serialized_start=13085 + _globals['_CREATECONNECTEDACCOUNT']._serialized_end=13879 + _globals['_UPDATECONNECTEDACCOUNT']._serialized_start=13882 + _globals['_UPDATECONNECTEDACCOUNT']._serialized_end=14582 + _globals['_CONNECTEDACCOUNTFORLIST']._serialized_start=14585 + _globals['_CONNECTEDACCOUNTFORLIST']._serialized_end=15705 + _globals['_AUTHORIZATIONDETAILS']._serialized_start=15708 + _globals['_AUTHORIZATIONDETAILS']._serialized_end=15899 + _globals['_OAUTHTOKEN']._serialized_start=15902 + _globals['_OAUTHTOKEN']._serialized_end=16634 + _globals['_STATICAUTH']._serialized_start=16637 + _globals['_STATICAUTH']._serialized_end=16881 + _globals['_GETCONNECTEDACCOUNTREQUEST']._serialized_start=16884 + _globals['_GETCONNECTEDACCOUNTREQUEST']._serialized_end=17143 + _globals['_GETCONNECTEDACCOUNTRESPONSE']._serialized_start=17146 + _globals['_GETCONNECTEDACCOUNTRESPONSE']._serialized_end=17343 + _globals['_DISCONNECTCONNECTEDACCOUNTREQUEST']._serialized_start=17346 + _globals['_DISCONNECTCONNECTEDACCOUNTREQUEST']._serialized_end=17524 + _globals['_DISCONNECTCONNECTEDACCOUNTRESPONSE']._serialized_start=17527 + _globals['_DISCONNECTCONNECTEDACCOUNTRESPONSE']._serialized_end=17725 + _globals['_CONNECTEDACCOUNTSERVICE']._serialized_start=18036 + _globals['_CONNECTEDACCOUNTSERVICE']._serialized_end=28140 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/connected_accounts/connected_accounts_pb2.pyi b/scalekit/v1/connected_accounts/connected_accounts_pb2.pyi index 9cdc6a3..1e10adb 100644 --- a/scalekit/v1/connected_accounts/connected_accounts_pb2.pyi +++ b/scalekit/v1/connected_accounts/connected_accounts_pb2.pyi @@ -20,6 +20,8 @@ class ConnectorStatus(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): ACTIVE: _ClassVar[ConnectorStatus] EXPIRED: _ClassVar[ConnectorStatus] PENDING_AUTH: _ClassVar[ConnectorStatus] + PENDING_VERIFICATION: _ClassVar[ConnectorStatus] + DISCONNECTED: _ClassVar[ConnectorStatus] class ConnectorType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): __slots__ = () @@ -30,10 +32,14 @@ class ConnectorType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): BEARER_TOKEN: _ClassVar[ConnectorType] CUSTOM: _ClassVar[ConnectorType] BASIC: _ClassVar[ConnectorType] + OAUTH_M2M: _ClassVar[ConnectorType] + TRELLO_OAUTH1: _ClassVar[ConnectorType] CONNECTION_STATUS_UNSPECIFIED: ConnectorStatus ACTIVE: ConnectorStatus EXPIRED: ConnectorStatus PENDING_AUTH: ConnectorStatus +PENDING_VERIFICATION: ConnectorStatus +DISCONNECTED: ConnectorStatus CONNECTION_TYPE_UNSPECIFIED: ConnectorType OAUTH: ConnectorType API_KEY: ConnectorType @@ -41,6 +47,8 @@ BASIC_AUTH: ConnectorType BEARER_TOKEN: ConnectorType CUSTOM: ConnectorType BASIC: ConnectorType +OAUTH_M2M: ConnectorType +TRELLO_OAUTH1: ConnectorType class ListConnectedAccountsRequest(_message.Message): __slots__ = ("organization_id", "user_id", "connector", "identifier", "provider", "page_size", "page_token", "query") @@ -159,18 +167,22 @@ class DeleteConnectedAccountResponse(_message.Message): def __init__(self) -> None: ... class GetMagicLinkForConnectedAccountRequest(_message.Message): - __slots__ = ("organization_id", "user_id", "connector", "identifier", "id") + __slots__ = ("organization_id", "user_id", "connector", "identifier", "id", "state", "user_verify_url") ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] USER_ID_FIELD_NUMBER: _ClassVar[int] CONNECTOR_FIELD_NUMBER: _ClassVar[int] IDENTIFIER_FIELD_NUMBER: _ClassVar[int] ID_FIELD_NUMBER: _ClassVar[int] + STATE_FIELD_NUMBER: _ClassVar[int] + USER_VERIFY_URL_FIELD_NUMBER: _ClassVar[int] organization_id: str user_id: str connector: str identifier: str id: str - def __init__(self, organization_id: _Optional[str] = ..., user_id: _Optional[str] = ..., connector: _Optional[str] = ..., identifier: _Optional[str] = ..., id: _Optional[str] = ...) -> None: ... + state: str + user_verify_url: str + def __init__(self, organization_id: _Optional[str] = ..., user_id: _Optional[str] = ..., connector: _Optional[str] = ..., identifier: _Optional[str] = ..., id: _Optional[str] = ..., state: _Optional[str] = ..., user_verify_url: _Optional[str] = ...) -> None: ... class GetMagicLinkForConnectedAccountResponse(_message.Message): __slots__ = ("link", "expiry") @@ -180,6 +192,20 @@ class GetMagicLinkForConnectedAccountResponse(_message.Message): expiry: _timestamp_pb2.Timestamp def __init__(self, link: _Optional[str] = ..., expiry: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ... +class VerifyConnectedAccountUserRequest(_message.Message): + __slots__ = ("auth_request_id", "identifier") + AUTH_REQUEST_ID_FIELD_NUMBER: _ClassVar[int] + IDENTIFIER_FIELD_NUMBER: _ClassVar[int] + auth_request_id: str + identifier: str + def __init__(self, auth_request_id: _Optional[str] = ..., identifier: _Optional[str] = ...) -> None: ... + +class VerifyConnectedAccountUserResponse(_message.Message): + __slots__ = ("post_user_verify_redirect_url",) + POST_USER_VERIFY_REDIRECT_URL_FIELD_NUMBER: _ClassVar[int] + post_user_verify_redirect_url: str + def __init__(self, post_user_verify_redirect_url: _Optional[str] = ...) -> None: ... + class GetConnectedAccountByIdentifierRequest(_message.Message): __slots__ = ("organization_id", "user_id", "connector", "identifier", "id") ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] @@ -293,3 +319,27 @@ class StaticAuth(_message.Message): DETAILS_FIELD_NUMBER: _ClassVar[int] details: _struct_pb2.Struct def __init__(self, details: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... + +class GetConnectedAccountRequest(_message.Message): + __slots__ = ("id",) + ID_FIELD_NUMBER: _ClassVar[int] + id: str + def __init__(self, id: _Optional[str] = ...) -> None: ... + +class GetConnectedAccountResponse(_message.Message): + __slots__ = ("connected_account",) + CONNECTED_ACCOUNT_FIELD_NUMBER: _ClassVar[int] + connected_account: ConnectedAccount + def __init__(self, connected_account: _Optional[_Union[ConnectedAccount, _Mapping]] = ...) -> None: ... + +class DisconnectConnectedAccountRequest(_message.Message): + __slots__ = ("id",) + ID_FIELD_NUMBER: _ClassVar[int] + id: str + def __init__(self, id: _Optional[str] = ...) -> None: ... + +class DisconnectConnectedAccountResponse(_message.Message): + __slots__ = ("connected_account",) + CONNECTED_ACCOUNT_FIELD_NUMBER: _ClassVar[int] + connected_account: ConnectedAccount + def __init__(self, connected_account: _Optional[_Union[ConnectedAccount, _Mapping]] = ...) -> None: ... diff --git a/scalekit/v1/connected_accounts/connected_accounts_pb2_grpc.py b/scalekit/v1/connected_accounts/connected_accounts_pb2_grpc.py index 98b85dc..53109b7 100644 --- a/scalekit/v1/connected_accounts/connected_accounts_pb2_grpc.py +++ b/scalekit/v1/connected_accounts/connected_accounts_pb2_grpc.py @@ -44,11 +44,31 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetMagicLinkForConnectedAccountRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetMagicLinkForConnectedAccountResponse.FromString, ) + self.GetConnectedAccount = channel.unary_unary( + '/scalekit.v1.connected_accounts.ConnectedAccountService/GetConnectedAccount', + request_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountResponse.FromString, + ) + self.DisconnectConnectedAccount = channel.unary_unary( + '/scalekit.v1.connected_accounts.ConnectedAccountService/DisconnectConnectedAccount', + request_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.DisconnectConnectedAccountRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.DisconnectConnectedAccountResponse.FromString, + ) self.GetConnectedAccountAuth = channel.unary_unary( '/scalekit.v1.connected_accounts.ConnectedAccountService/GetConnectedAccountAuth', request_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierResponse.FromString, ) + self.GetConnectedAccountDetails = channel.unary_unary( + '/scalekit.v1.connected_accounts.ConnectedAccountService/GetConnectedAccountDetails', + request_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierResponse.FromString, + ) + self.VerifyConnectedAccountUser = channel.unary_unary( + '/scalekit.v1.connected_accounts.ConnectedAccountService/VerifyConnectedAccountUser', + request_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.VerifyConnectedAccountUserRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.VerifyConnectedAccountUserResponse.FromString, + ) class ConnectedAccountServiceServicer(object): @@ -96,6 +116,20 @@ def GetMagicLinkForConnectedAccount(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def GetConnectedAccount(self, request, context): + """Get Connected Account by ID + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DisconnectConnectedAccount(self, request, context): + """Disconnect a Connected Account + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def GetConnectedAccountAuth(self, request, context): """Get Connected Account Authentication Details """ @@ -103,6 +137,20 @@ def GetConnectedAccountAuth(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def GetConnectedAccountDetails(self, request, context): + """Get Connected Account Details (without auth credentials) + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def VerifyConnectedAccountUser(self, request, context): + """Verify connected account user after OAuth callback + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def add_ConnectedAccountServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -136,11 +184,31 @@ def add_ConnectedAccountServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetMagicLinkForConnectedAccountRequest.FromString, response_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetMagicLinkForConnectedAccountResponse.SerializeToString, ), + 'GetConnectedAccount': grpc.unary_unary_rpc_method_handler( + servicer.GetConnectedAccount, + request_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountRequest.FromString, + response_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountResponse.SerializeToString, + ), + 'DisconnectConnectedAccount': grpc.unary_unary_rpc_method_handler( + servicer.DisconnectConnectedAccount, + request_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.DisconnectConnectedAccountRequest.FromString, + response_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.DisconnectConnectedAccountResponse.SerializeToString, + ), 'GetConnectedAccountAuth': grpc.unary_unary_rpc_method_handler( servicer.GetConnectedAccountAuth, request_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierRequest.FromString, response_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierResponse.SerializeToString, ), + 'GetConnectedAccountDetails': grpc.unary_unary_rpc_method_handler( + servicer.GetConnectedAccountDetails, + request_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierRequest.FromString, + response_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierResponse.SerializeToString, + ), + 'VerifyConnectedAccountUser': grpc.unary_unary_rpc_method_handler( + servicer.VerifyConnectedAccountUser, + request_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.VerifyConnectedAccountUserRequest.FromString, + response_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.VerifyConnectedAccountUserResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'scalekit.v1.connected_accounts.ConnectedAccountService', rpc_method_handlers) @@ -253,6 +321,40 @@ def GetMagicLinkForConnectedAccount(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod + def GetConnectedAccount(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.connected_accounts.ConnectedAccountService/GetConnectedAccount', + scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountRequest.SerializeToString, + scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def DisconnectConnectedAccount(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.connected_accounts.ConnectedAccountService/DisconnectConnectedAccount', + scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.DisconnectConnectedAccountRequest.SerializeToString, + scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.DisconnectConnectedAccountResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod def GetConnectedAccountAuth(request, target, @@ -269,3 +371,37 @@ def GetConnectedAccountAuth(request, scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def GetConnectedAccountDetails(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.connected_accounts.ConnectedAccountService/GetConnectedAccountDetails', + scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierRequest.SerializeToString, + scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def VerifyConnectedAccountUser(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.connected_accounts.ConnectedAccountService/VerifyConnectedAccountUser', + scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.VerifyConnectedAccountUserRequest.SerializeToString, + scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.VerifyConnectedAccountUserResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/connections/connections_pb2.py b/scalekit/v1/connections/connections_pb2.py index 40e1d20..dffbca0 100644 --- a/scalekit/v1/connections/connections_pb2.py +++ b/scalekit/v1/connections/connections_pb2.py @@ -28,7 +28,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n)scalekit/v1/connections/connections.proto\x12\x17scalekit.v1.connections\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a\x1fscalekit/v1/auth/webauthn.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/domains/domains.proto\x1a!scalekit/v1/options/options.proto\"\xc4\x01\n AssignDomainsToConnectionRequest\x12;\n\x0forganization_id\x18\x01 \x01(\tB\x12\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\x12\x38\n\rconnection_id\x18\x02 \x01(\tB\x13\xbaH\x10r\x0b\x10\x01\x18 :\x05\x63onn_\xc8\x01\x01R\x0c\x63onnectionId\x12)\n\ndomain_ids\x18\x03 \x03(\tB\n\xbaH\x07\x92\x01\x04\x08\x00\x10\x32R\tdomainIds\"\xe6\x03\n!AssignDomainsToConnectionResponse\x12\xc0\x03\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\xfa\x02\x92\x41\xf6\x02\x32 Connection with assigned domainsJ\xd1\x02{\n \"id\": \"conn_1234567890\",\n \"provider\": \"OKTA\",\n \"type\": \"OIDC\",\n \"status\": \"CONFIGURED\",\n \"enabled\": true,\n \"debug_enabled\": false,\n \"organization_id\": \"org_1234567890\",\n \"ui_button_title\": \"Login with SSO\",\n \"configuration_type\": \"MANUAL\",\n \"test_connection_uri\": \"https://auth.example.com/test-connection/conn_1234567890\"\n}R\nconnection\"\x15\n\x13GetProvidersRequest\"W\n\x14GetProvidersResponse\x12?\n\tproviders\x18\x01 \x03(\x0b\x32!.scalekit.v1.connections.ProviderR\tproviders\"\xf3\x01\n\x08Provider\x12\x35\n\x06key_id\x18\x01 \x01(\tB\x1e\x92\x41\x1b\x32\x0fProvider Key IDJ\x08\"google\"R\x05keyId\x12G\n\x0c\x64isplay_name\x18\x02 \x01(\tB$\x92\x41!2\x15Provider Display NameJ\x08\"Google\"R\x0b\x64isplayName\x12W\n\x0b\x64\x65scription\x18\x03 \x01(\tB0\x92\x41-2\x14Provider DescriptionJ\x15\"Sign In With Google\"H\x00R\x0b\x64\x65scription\x88\x01\x01\x42\x0e\n\x0c_description\"\xae\x02\n\"CreateEnvironmentConnectionRequest\x12Q\n\nconnection\x18\x01 \x01(\x0b\x32).scalekit.v1.connections.CreateConnectionB\x06\xbaH\x03\xc8\x01\x01R\nconnection\x12\xaa\x01\n\x05\x66lags\x18\x02 \x01(\x0b\x32\x1e.scalekit.v1.connections.FlagsBo\x92\x41l2SOptional flags to control connection creation behavior, such as enabling debug modeJ\x15{ \"is_social\": true }H\x00R\x05\x66lags\x88\x01\x01\x42\x08\n\x06_flags\"\xe4\x02\n\x17\x43reateConnectionRequest\x12\x9a\x01\n\x0forganization_id\x18\x01 \x01(\tBq\x92\x41\x65\x32JUnique identifier of the organization for which the connection is created.J\x17\"org_12362474900684814\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\xa5\x01\n\nconnection\x18\x03 \x01(\x0b\x32).scalekit.v1.connections.CreateConnectionBZ\xbaHW\xba\x01Q\x12\x36OAUTH, PASSWORDLESS and WEBAUTHN are not supported yet\x1a\x17!(this.type in [4,5,9])\xc8\x01\x01R\nconnectionJ\x04\x08\x02\x10\x03\"\xf7\x05\n\x10\x43reateConnection\x12\xcb\x01\n\x08provider\x18\x01 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderB\x81\x01\x92\x41v2lIdentity provider service that handles authentication (such as OKTA, Google, Azure AD, or a custom provider)J\x06\"OKTA\"\xbaH\x05\x82\x01\x02\x10\x01R\x08provider\x12\x45\n\x04type\x18\x02 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04type\x12\x98\x01\n\x0cprovider_key\x18\x03 \x01(\tBu\x92\x41r2fKey ID of the identity provider. This is used to identify the specific configuration for the provider.J\x08\"google\"R\x0bproviderKey\x12\x1a\n\x06key_id\x18\x04 \x01(\tH\x00R\x05keyId\x88\x01\x01:\x8b\x02\xbaH\x87\x02\x1aT\x12$provider or provider_key is required\x1a,has(this.provider_key) || this.provider != 0\x1a`\x12\x1einvalid value for provider_key\x1a>this.provider == 15 ? this.provider_key in [\'SCALEKIT\'] : true\x1aM\x12\x18invalid value for key_id\x1a\x31this.type == 9 ? this.key_id == \'WEBAUTHN\' : trueB\t\n\x07_key_id\"\xcb \n\nConnection\x12\x8d\x01\n\x02id\x18\x01 \x01(\tB}\x92\x41z2_Unique identifier for this connection. Used in API calls to reference this specific connection.J\x17\"conn_2123312131125533\"R\x02id\x12\xc2\x01\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderBy\x92\x41v2lIdentity provider service that handles authentication (such as OKTA, Google, Azure AD, or a custom provider)J\x06\"OKTA\"R\x08provider\x12\xb4\x01\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeBw\x92\x41t2jAuthentication protocol used by this connection. Can be OIDC (OpenID Connect), SAML, OAUTH, or MAGIC_LINK.J\x06\"OIDC\"R\x04type\x12\xc6\x01\n\x06status\x18\x04 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusB\x82\x01\x92\x41|2kCurrent configuration status of the connection. Possible values include IN_PROGRESS, CONFIGURED, and ERROR.J\r\"IN_PROGRESS\"\xe0\x41\x03R\x06status\x12\xab\x01\n\x07\x65nabled\x18\x05 \x01(\x08\x42\x90\x01\x92\x41\x8c\x01\x32\x82\x01\x43ontrols whether users can sign in using this connection. When false, the connection exists but cannot be used for authentication.J\x05\x66\x61lseR\x07\x65nabled\x12\xb0\x01\n\rdebug_enabled\x18\x06 \x01(\x08\x42\x8a\x01\x92\x41\x86\x01\x32~Enables testing mode that allows non-HTTPS endpoints. Should only be enabled in development environments, never in production.J\x04trueR\x0c\x64\x65\x62ugEnabled\x12\xc1\x01\n\x0forganization_id\x18\x07 \x01(\tB\x92\x01\x92\x41\x8e\x01\x32tIdentifier of the organization that owns this connection. Connections are typically scoped to a single organization.J\x16\"org_2123312131125533\"H\x01R\x0eorganizationId\x88\x01\x01\x12\xbd\x01\n\x0fui_button_title\x18\x08 \x01(\tB\x94\x01\x92\x41\x81\x01\x32mCustom text shown on the login button in the user interface. Helps users identify which SSO option to select.J\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12\xd5\x01\n\x12\x63onfiguration_type\x18\t \x01(\x0e\x32*.scalekit.v1.connections.ConfigurationTypeBz\x92\x41w2kHow the connection was configured: DISCOVERY (automatic configuration) or MANUAL (administrator configured)J\x08\"MANUAL\"R\x11\x63onfigurationType\x12\xdf\x01\n\x13test_connection_uri\x18\x0c \x01(\tB\xae\x01\x92\x41\xaa\x01\x32\x66URI that can be used to test this connection. Visit this URL to verify the connection works correctly.J@\"https://auth.example.com/test-connection/conn_2123312131125533\"R\x11testConnectionUri\x12\x81\x02\n\x11\x61ttribute_mapping\x18\x0f \x03(\x0b\x32\x39.scalekit.v1.connections.Connection.AttributeMappingEntryB\x98\x01\x92\x41|2zMaps identity provider attributes to user profile fields. For example, {\'email\': \'user.mail\', \'name\': \'user.displayName\'}.\xbaH\x16\x9a\x01\x13\x10\x1e\"\x06r\x04\x10\x01\x18\x64*\x07r\x05\x10\x01\x18\x80\x02R\x10\x61ttributeMapping\x12\xb1\x01\n\x0b\x63reate_time\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.TimestampBt\x92\x41_2EWhen this connection was first created. Format is RFC 3339 timestamp.J\x16\"2023-01-15T14:30:00Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ncreateTime\x12\xb1\x01\n\x0bupdate_time\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.TimestampBt\x92\x41_2EWhen this connection was last modified. Format is RFC 3339 timestamp.J\x16\"2023-02-20T09:15:30Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\nupdateTime\x12\xb3\x01\n\x0boidc_config\x18\x12 \x01(\x0b\x32-.scalekit.v1.connections.OIDCConnectionConfigBa\x92\x41^2\\Configuration details for OpenID Connect (OIDC) connections. Present only when type is OIDC.H\x00R\noidcConfig\x12\xaa\x01\n\x0bsaml_config\x18\x13 \x01(\x0b\x32\x35.scalekit.v1.connections.SAMLConnectionConfigResponseBP\x92\x41M2KConfiguration details for SAML connections. Present only when type is SAML.H\x00R\nsamlConfig\x12\xa7\x01\n\x0coauth_config\x18\x14 \x01(\x0b\x32..scalekit.v1.connections.OAuthConnectionConfigBR\x92\x41O2MConfiguration details for OAuth connections. Present only when type is OAUTH.H\x00R\x0boauthConfig\x12\xbf\x01\n\x13passwordless_config\x18\x16 \x01(\x0b\x32+.scalekit.v1.connections.PasswordLessConfigB_\x92\x41\\2ZConfiguration details for Magic Link authentication. Present only when type is MAGIC_LINK.H\x00R\x12passwordlessConfig\x12\xc0\x01\n\rstatic_config\x18\x1a \x01(\x0b\x32).scalekit.v1.connections.StaticAuthConfigBn\x92\x41k2iStatic configuration for custom connections. Present only when type is BASIC, BEARER, API_KEY, or custom.H\x00R\x0cstaticConfig\x12\xb1\x01\n\x0fwebauthn_config\x18\x1b \x01(\x0b\x32-.scalekit.v1.connections.WebAuthConfigurationBW\x92\x41T2RConfiguration details for WebAuthn (passkeys). Present only when type is WEBAUTHN.H\x00R\x0ewebauthnConfig\x12}\n\x06key_id\x18\x19 \x01(\tBa\x92\x41^2\\Alternative identifier for this connection, typically used in frontend applications or URLs.H\x02R\x05keyId\x88\x01\x01\x12u\n\x0cprovider_key\x18\x17 \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x12\xaa\x01\n\x07\x64omains\x18\x18 \x03(\x0b\x32\x1b.scalekit.v1.domains.DomainBs\x92\x41p2SDomain associated with this connection, used for domain-based authentication flows.J\x19[{\"name\": \"example.com\"}]R\x07\x64omains\x1a\x43\n\x15\x41ttributeMappingEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\n\n\x08settingsB\x12\n\x10_organization_idB\t\n\x07_key_idJ\x04\x08\r\x10\x0f\"w\n\x18\x43reateConnectionResponse\x12[\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\x16\x92\x41\x13\x32\x11\x43onnection DetailR\nconnection\"\xa8\x02\n\"UpdateEnvironmentConnectionRequest\x12~\n\rconnection_id\x18\x01 \x01(\tBY\x92\x41M2+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xca>\x05\xfa\x02\x02id\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\x12\x81\x01\n\nconnection\x18\x03 \x01(\x0b\x32).scalekit.v1.connections.UpdateConnectionB6\x92\x41-2#Connection properties to be updated\xca>\x05\xfa\x02\x02id\xbaH\x03\xc8\x01\x01R\nconnection\"\xce\x03\n\x17UpdateConnectionRequest\x12q\n\x0forganization_id\x18\x01 \x01(\tBH\x92\x41<2#Organization ID for the Connection.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\x61\n\x02id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02id\x12\xd6\x01\n\nconnection\x18\x04 \x01(\x0b\x32).scalekit.v1.connections.UpdateConnectionB\x8a\x01\x92\x41-2#Connection properties to be updated\xca>\x05\xfa\x02\x02id\xbaHW\xba\x01Q\x12\x36OAUTH, PASSWORDLESS and WEBAUTHN are not supported yet\x1a\x17!(this.type in [4,5,9])\xc8\x01\x01R\nconnectionJ\x04\x08\x02\x10\x03\"\xca\x11\n\x10UpdateConnection\x12w\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderB.\x92\x41#2\x17SSO Connection ProviderJ\x08\"CUSTOM\"\xbaH\x05\x82\x01\x02\x10\x01R\x08provider\x12r\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB5\x92\x41*2 Connection Protocol OIDC / SAML J\x06\"OIDC\"\xbaH\x05\x82\x01\x02\x10\x01R\x04type\x12\xae\x01\n\rdebug_enabled\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBm\x92\x41j2bDebug mode for the connection. Debug would allow non HTTPS endpoint to be used with the connectionJ\x04trueR\x0c\x64\x65\x62ugEnabled\x12\x8d\x01\n\x0fui_button_title\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueBG\x92\x41\x35\x32!Display name for the Login ButtonJ\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12~\n\x12\x63onfiguration_type\x18\x0b \x01(\x0e\x32*.scalekit.v1.connections.ConfigurationTypeB#\x92\x41 2\x14\x43onfiguration Type. J\x08\"MANUAL\"R\x11\x63onfigurationType\x12\x9d\x01\n\x11\x61ttribute_mapping\x18\x0f \x03(\x0b\x32?.scalekit.v1.connections.UpdateConnection.AttributeMappingEntryB/\x92\x41\x13\x32\x11\x41ttribute Mapping\xbaH\x16\x9a\x01\x13\x10\x1e\"\x06r\x04\x10\x01\x18\x64*\x07r\x05\x10\x01\x18\x80\x02R\x10\x61ttributeMapping\x12\x83\x01\n\x0boidc_config\x18\x10 \x01(\x0b\x32-.scalekit.v1.connections.OIDCConnectionConfigB1\x92\x41.2,OIDC Configuration if ConnectionType == OIDCH\x00R\noidcConfig\x12\x8a\x01\n\x0bsaml_config\x18\x11 \x01(\x0b\x32\x34.scalekit.v1.connections.SAMLConnectionConfigRequestB1\x92\x41.2,SAML Configuration if ConnectionType == SAMLH\x00R\nsamlConfig\x12\x88\x01\n\x0coauth_config\x18\x12 \x01(\x0b\x32..scalekit.v1.connections.OAuthConnectionConfigB3\x92\x41\x30\x32.OAuth Configuration if ConnectionType == OAUTHH\x00R\x0boauthConfig\x12\x9d\x01\n\x13passwordless_config\x18\x14 \x01(\x0b\x32+.scalekit.v1.connections.PasswordLessConfigB=\x92\x41:28Magic Link Configuration if ConnectionType == MAGIC_LINKH\x00R\x12passwordlessConfig\x12P\n\rstatic_config\x18\x17 \x01(\x0b\x32).scalekit.v1.connections.StaticAuthConfigH\x00R\x0cstaticConfig\x12\xb1\x01\n\x0fwebauthn_config\x18\x18 \x01(\x0b\x32-.scalekit.v1.connections.WebAuthConfigurationBW\x92\x41T2RConfiguration details for WebAuthn (passkeys). Present only when type is WEBAUTHN.H\x00R\x0ewebauthnConfig\x12%\n\x06key_id\x18\x16 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18 H\x01R\x05keyId\x88\x01\x01\x12u\n\x0cprovider_key\x18\x15 \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x1a\x43\n\x15\x41ttributeMappingEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01:\x8b\x02\xbaH\x87\x02\x1aT\x12$provider or provider_key is required\x1a,has(this.provider_key) || this.provider != 0\x1a`\x12\x1einvalid value for provider_key\x1a>this.provider == 15 ? this.provider_key in [\'SCALEKIT\'] : true\x1aM\x12\x18invalid value for key_id\x1a\x31this.type == 9 ? this.key_id == \'WEBAUTHN\' : trueB\n\n\x08settingsB\t\n\x07_key_idJ\x04\x08\x01\x10\x02J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06J\x04\x08\t\x10\x0bJ\x04\x08\x0c\x10\x0f\"\x80\x01\n\x18UpdateConnectionResponse\x12\x64\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\x1f\x92\x41\x1c\x32\x1aUpdated Connection detailsR\nconnection\"\x9c\x01\n\"DeleteEnvironmentConnectionRequest\x12v\n\rconnection_id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\xf5\x01\n\x17\x44\x65leteConnectionRequest\x12q\n\x0forganization_id\x18\x01 \x01(\tBH\x92\x41<2#Organization ID for the Connection.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\x61\n\x02id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\x92\x01\n\x1fGetEnvironmentConnectionRequest\x12o\n\rconnection_id\x18\x01 \x01(\tBJ\x92\x41>2$Unique identifier for the ConnectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\xfc\x02\n\x14GetConnectionRequest\x12\xba\x01\n\x0forganization_id\x18\x01 \x01(\tB\x90\x01\x92\x41\x83\x01\x32jOrganization identifier (required). Specifies which organization owns the connection you want to retrieve.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\xa0\x01\n\x02id\x18\x03 \x01(\tB\x8f\x01\x92\x41\x82\x01\x32hConnection identifier (required). Specifies which specific connection to retrieve from the organization.J\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\x9a\x02\n\x15GetConnectionResponse\x12\x80\x02\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\xba\x01\x92\x41\xb6\x01\x32\xb3\x01\x43omplete connection details including provider configuration, protocol settings, status, and all metadata. Contains everything needed to understand the connection\'s current state.R\nconnection\"\x96\x04\n\x16ListConnectionsRequest\x12\x80\x01\n\x0forganization_id\x18\x01 \x01(\tBR\x92\x41\x46\x32-Filter connections by organization identifierJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12\x7f\n\x06\x64omain\x18\x03 \x01(\tBb\x92\x41V2CFilter connections by email domain associated with the organizationJ\x0f\"hero-saas.app\"\xbaH\x06r\x04\x10\x01\x18 H\x01R\x06\x64omain\x88\x01\x01\x12\xc6\x01\n\x07include\x18\x04 \x01(\tB\xa6\x01\x92\x41\xa2\x01\x32\x9f\x01\x46ilter connections by status. Use \'all\' to include all connections regardless of status. Default behavior shows only active (completed and enabled) connectionsH\x02R\x07include\x88\x01\x01\x42\x12\n\x10_organization_idB\t\n\x07_domainB\n\n\x08_includeJ\x04\x08\x02\x10\x03\"\x9d\x01\n\x17ListConnectionsResponse\x12\x81\x01\n\x0b\x63onnections\x18\x01 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB6\x92\x41\x33\x32\x31List of connections matching the request criteriaR\x0b\x63onnections\"\xfa\x0b\n\x0eListConnection\x12Q\n\x02id\x18\x01 \x01(\tBA\x92\x41>2#Unique identifier of the connectionJ\x17\"conn_2123312131125533\"R\x02id\x12\x8d\x01\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderBD\x92\x41\x41\x32\x35Identity provider type (e.g., OKTA, Google, Azure AD)J\x08\"CUSTOM\"R\x08provider\x12x\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB;\x92\x41\x38\x32.Authentication protocol used by the connectionJ\x06\"OIDC\"R\x04type\x12\x88\x01\n\x06status\x18\x04 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusBE\x92\x41?2.Current configuration status of the connectionJ\r\"IN_PROGRESS\"\xe0\x41\x03R\x06status\x12g\n\x07\x65nabled\x18\x05 \x01(\x08\x42M\x92\x41J2AWhether the connection is currently active for organization usersJ\x05\x66\x61lseR\x07\x65nabled\x12\x85\x01\n\x0forganization_id\x18\x06 \x01(\tB\\\x92\x41Y2?Unique identifier of the organization that owns this connectionJ\x16\"org_2123312131125533\"R\x0eorganizationId\x12\x88\x01\n\x0fui_button_title\x18\x07 \x01(\tB`\x92\x41N2:Text displayed on the SSO login button for this connectionJ\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12t\n\x07\x64omains\x18\x08 \x03(\tBZ\x92\x41W2/List of domains configured with this connectionJ$[\"yourapp.com\", \"yourworkspace.com\"]R\x07\x64omains\x12q\n\x11organization_name\x18\t \x01(\tBD\x92\x41\x41\x32*Name of the organization of the connectionJ\x13\"Your Organization\"R\x10organizationName\x12u\n\x0cprovider_key\x18\n \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x12\x90\x01\n\x06key_id\x18\x0b \x01(\tBy\x92\x41v2[Alternative identifier for this connection, typically used in frontend applications or URLsJ\x17\"conn_2123312131125533\"R\x05keyId\x12\x90\x01\n\ncreated_at\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.TimestampBU\x92\x41@2&When this connection was first createdJ\x16\"2023-01-15T14:30:00Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\tcreatedAt\"\xcf\x02\n\"ListOrganizationConnectionsRequest\x12\x80\x01\n\tpage_size\x18\x01 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x02 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\x97\x02\n#ListOrganizationConnectionsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12&\n\x0fprev_page_token\x18\x03 \x01(\tR\rprevPageToken\x12\x80\x01\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB5\x92\x41\x32\x32\x30List of connections matching the filter criteriaR\x0b\x63onnections\"\xa2\x07\n$SearchOrganizationConnectionsRequest\x12l\n\x05query\x18\x01 \x01(\tBQ\x92\x41G2-Search query Connection ID or Organization IDJ\x16\"conn_121312434123312\"\xbaH\x04r\x02\x18\x64H\x00R\x05query\x88\x01\x01\x12@\n\x08provider\x18\x02 \x01(\tB\x1f\x92\x41\x1c\x32\x12\x46ilter by providerJ\x06\"OKTA\"H\x01R\x08provider\x88\x01\x01\x12}\n\x06status\x18\x03 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusB5\x92\x41*2\x1b\x46ilter by connection statusJ\x0b\"COMPLETED\"\xbaH\x05\x82\x01\x02\x10\x01H\x02R\x06status\x88\x01\x01\x12\x8c\x01\n\x0f\x63onnection_type\x18\x04 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB5\x92\x41*2\x1b\x46ilter by connection statusJ\x0b\"COMPLETED\"\xbaH\x05\x82\x01\x02\x10\x01H\x03R\x0e\x63onnectionType\x88\x01\x01\x12O\n\x07\x65nabled\x18\x07 \x01(\x08\x42\x30\x92\x41-2#Filter by connection enabled statusJ\x06\"true\"H\x04R\x07\x65nabled\x88\x01\x01\x12\x80\x01\n\tpage_size\x18\x05 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x06 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageTokenB\x08\n\x06_queryB\x0b\n\t_providerB\t\n\x07_statusB\x12\n\x10_connection_typeB\n\n\x08_enabled\"\x99\x02\n%SearchOrganizationConnectionsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12&\n\x0fprev_page_token\x18\x03 \x01(\tR\rprevPageToken\x12\x80\x01\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB5\x92\x41\x32\x32\x30List of connections matching the filter criteriaR\x0b\x63onnections\"\x9c\x01\n\"ToggleEnvironmentConnectionRequest\x12v\n\rconnection_id\x18\x02 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\x9e\x02\n\x17ToggleConnectionRequest\x12\x92\x01\n\x0forganization_id\x18\x01 \x01(\tBi\x92\x41]2DUnique identifier of the organization associated with the connectionJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12h\n\x02id\x18\x03 \x01(\tBX\x92\x41L22Unique identifier for the connection to be toggledJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\xbc\x02\n\x18ToggleConnectionResponse\x12\xa9\x01\n\x07\x65nabled\x18\x01 \x01(\x08\x42\x8e\x01\x92\x41\x8a\x01\x32\x81\x01\x43urrent state of the connection after the operation. True means the connection is now enabled and can be used for authentication.J\x04trueR\x07\x65nabled\x12\x62\n\rerror_message\x18\x02 \x01(\tB8\x92\x41\x35\x32$Error message if the operation failsJ\r\"placeholder\"H\x00R\x0c\x65rrorMessage\x88\x01\x01\x42\x10\n\x0e_error_message\"\xa0\x12\n\x14OIDCConnectionConfig\x12j\n\x06issuer\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB4\x92\x41\x31\x32\nIssuer URLJ#\"https://youridp.com/service/oauth\"R\x06issuer\x12\xaa\x01\n\x12\x64iscovery_endpoint\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB]\x92\x41Z2\x12\x44iscovery EndpointJD\"https://youridp.com/service/oauth/.well-known/openid-configuration\"R\x11\x64iscoveryEndpoint\x12\x84\x01\n\rauthorize_uri\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValueBA\x92\x41>2\rAuthorize URIJ-\"https://youridp.com/service/oauth/authorize\"R\x0c\x61uthorizeUri\x12t\n\ttoken_uri\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueB9\x92\x41\x36\x32\tToken URIJ)\"https://youridp.com/service/oauth/token\"R\x08tokenUri\x12\x82\x01\n\ruser_info_uri\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB@\x92\x41=2\rUser Info URIJ,\"https://youridp.com/service/oauth/userinfo\"R\x0buserInfoUri\x12p\n\x08jwks_uri\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValueB7\x92\x41\x34\x32\x08JWKS URIJ(\"https://youridp.com/service/oauth/jwks\"R\x07jwksUri\x12\\\n\tclient_id\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB!\x92\x41\x1e\x32\tClient IDJ\x11\"oauth_client_id\"R\x08\x63lientId\x12l\n\rclient_secret\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB)\x92\x41&2\rClient SecretJ\x15\"oauth_client_secret\"R\x0c\x63lientSecret\x12\x63\n\x06scopes\x18\n \x03(\x0e\x32\".scalekit.v1.connections.OIDCScopeB\'\x92\x41$2\x0bOIDC ScopesJ\x15[\"openid\", \"profile\"]R\x06scopes\x12r\n\x0ftoken_auth_type\x18\x0b \x01(\x0e\x32&.scalekit.v1.connections.TokenAuthTypeB\"\x92\x41\x1f\x32\x0fToken Auth TypeJ\x0c\"URL_PARAMS\"R\rtokenAuthType\x12j\n\x0credirect_uri\x18\x0c \x01(\tBG\x92\x41\x44\x32\x0cRedirect URIJ4\"https://yourapp.com/sso/v1/oidc/conn_1234/callback\"R\x0bredirectUri\x12V\n\x0cpkce_enabled\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x17\x92\x41\x14\x32\x0cPKCE EnabledJ\x04trueR\x0bpkceEnabled\x12h\n\x13idp_logout_required\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1c\x92\x41\x19\x32\x11\x45nable IDP logoutJ\x04trueR\x11idpLogoutRequired\x12\xb4\x01\n\x18post_logout_redirect_uri\x18\x0f \x01(\x0b\x32\x1c.google.protobuf.StringValueB]\x92\x41W2\x18post logout redirect uriJ;\"https://yourapp.com/sso/v1/oidc/conn_1234/logout/callback\"\xe0\x41\x03R\x15postLogoutRedirectUri\x12\xea\x01\n\x1f\x62\x61\x63kchannel_logout_redirect_uri\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x84\x01\x92\x41~2\"https://yourapp.com/sso/v1/oidc/conn_1234/backchannel-logout\"\xe0\x41\x03R\x1c\x62\x61\x63kchannelLogoutRedirectUri\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\x12\xba\x01\n!jit_provisioning_with_sso_enabled\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBT\x92\x41Q2IIndicates if Just In Time user provisioning is enabled for the connectionJ\x04trueR\x1djitProvisioningWithSsoEnabled\"\xbe\x0b\n\x15OAuthConnectionConfig\x12\x84\x01\n\rauthorize_uri\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValueBA\x92\x41>2\rAuthorize URIJ-\"https://youridp.com/service/oauth/authorize\"R\x0c\x61uthorizeUri\x12t\n\ttoken_uri\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueB9\x92\x41\x36\x32\tToken URIJ)\"https://youridp.com/service/oauth/token\"R\x08tokenUri\x12\x82\x01\n\ruser_info_uri\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB@\x92\x41=2\rUser Info URIJ,\"https://youridp.com/service/oauth/userinfo\"R\x0buserInfoUri\x12\\\n\tclient_id\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB!\x92\x41\x1e\x32\tClient IDJ\x11\"oauth_client_id\"R\x08\x63lientId\x12l\n\rclient_secret\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB)\x92\x41&2\rClient SecretJ\x15\"oauth_client_secret\"R\x0c\x63lientSecret\x12?\n\x06scopes\x18\n \x03(\tB\'\x92\x41$2\x0bOIDC ScopesJ\x15[\"openid\", \"profile\"]R\x06scopes\x12\x62\n\x0credirect_uri\x18\x0c \x01(\tB?\x92\x41<2\x0cRedirect URIJ,\"https://yourapp.com/service/oauth/redirect\"R\x0bredirectUri\x12V\n\x0cpkce_enabled\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x17\x92\x41\x14\x32\x0cPKCE EnabledJ\x04trueR\x0bpkceEnabled\x12V\n\x06prompt\x18\x0e \x01(\x0b\x32\x1c.google.protobuf.StringValueB \x92\x41\x1d\x32\x13Prompt for the userJ\x06\"none\"R\x06prompt\x12m\n\x12use_platform_creds\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueB#\x92\x41 2\x18Use Scalekit credentialsJ\x04trueR\x10usePlatformCreds\x12Z\n\x0b\x61\x63\x63\x65ss_type\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1b\x92\x41\x18\x32\x0b\x41\x63\x63\x65ss TypeJ\t\"offline\"R\naccessType\x12n\n\x11\x63ustom_scope_name\x18\x11 \x01(\x0b\x32\x1c.google.protobuf.StringValueB$\x92\x41!2\x11\x43ustom Scope NameJ\x0c\"user_scope\"R\x0f\x63ustomScopeName\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\"\xf4\x07\n\x12PasswordLessConfig\x12]\n\x04type\x18\x01 \x01(\x0e\x32).scalekit.v1.connections.PasswordlessTypeB\x1e\x92\x41\x1b\x32\x11Passwordless TypeJ\x06\"LINK\"R\x04type\x12W\n\tfrequency\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x16\x92\x41\x13\x32\x0eLink FrequencyJ\x01\x31H\x00R\tfrequency\x88\x01\x01\x12\x61\n\x08validity\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\"\x92\x41\x1f\x32\x18Link Validity in SecondsJ\x03\x36\x30\x30H\x01R\x08validity\x88\x01\x01\x12\x86\x01\n\x1b\x65nforce_same_browser_origin\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB&\x92\x41#2\x1b\x45nforce Same Browser OriginJ\x04trueH\x02R\x18\x65nforceSameBrowserOrigin\x88\x01\x01\x12t\n\x15\x63ode_challenge_length\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x1d\x92\x41\x1a\x32\x15\x43ode Challenge LengthJ\x01\x36H\x03R\x13\x63odeChallengeLength\x88\x01\x01\x12\x84\x01\n\x13\x63ode_challenge_type\x18\x06 \x01(\x0e\x32*.scalekit.v1.connections.CodeChallengeTypeB#\x92\x41 2\x13\x43ode Challenge TypeJ\t\"NUMERIC\"H\x04R\x11\x63odeChallengeType\x88\x01\x01\x12\x9d\x01\n-regenerate_passwordless_credentials_on_resend\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1a\x92\x41\x17\x32\x0fRegenerate the J\x04trueH\x05R)regeneratePasswordlessCredentialsOnResend\x88\x01\x01\x42\x0c\n\n_frequencyB\x0b\n\t_validityB\x1e\n\x1c_enforce_same_browser_originB\x18\n\x16_code_challenge_lengthB\x16\n\x14_code_challenge_typeB0\n._regenerate_passwordless_credentials_on_resend\"P\n\x10StaticAuthConfig\x12<\n\rstatic_config\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x0cstaticConfig\"\xc4\"\n\x14WebAuthConfiguration\x12@\n\x02rp\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connections.WebAuthConfiguration.RpR\x02rp\x12[\n\x0b\x61ttestation\x18\x02 \x01(\x0b\x32\x39.scalekit.v1.connections.WebAuthConfiguration.AttestationR\x0b\x61ttestation\x12\x64\n\x0e\x61uthenticators\x18\x03 \x01(\x0b\x32<.scalekit.v1.connections.WebAuthConfiguration.AuthenticatorsR\x0e\x61uthenticators\x12}\n\x17\x61uthenticator_selection\x18\x04 \x01(\x0b\x32\x44.scalekit.v1.connections.WebAuthConfiguration.AuthenticatorSelectionR\x16\x61uthenticatorSelection\x12O\n\x07timeout\x18\x05 \x01(\x0b\x32\x35.scalekit.v1.connections.WebAuthConfiguration.TimeoutR\x07timeout\x12\x64\n\x18\x65nable_auto_registration\x18\x06 \x01(\x08\x42*\x92\x41\'2%Enable auto registration for WebAuthnR\x16\x65nableAutoRegistration\x12X\n\x13show_passkey_button\x18\x07 \x01(\x08\x42(\x92\x41%2#Show passkey button on login screenR\x11showPasskeyButton\x12g\n\x18\x65nable_conditional_login\x18\x08 \x01(\x08\x42-\x92\x41*2(Allow autofill of passkeys in login pageR\x16\x65nableConditionalLogin\x1aH\n\x02Rp\x12\x1c\n\x03ids\x18\x01 \x03(\tB\n\xbaH\x07\x92\x01\x04\x08\x01\x10\nR\x03ids\x12$\n\x07origins\x18\x02 \x03(\tB\n\xbaH\x07\x92\x01\x04\x08\x01\x10\nR\x07origins\x1a\xc1\x01\n\x0b\x41ttestation\x12p\n\x15\x63onveyance_preference\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1d\xbaH\x1ar\x18R\x04noneR\x08indirectR\x06\x64irectR\x14\x63onveyancePreference\x12@\n\x17\x65nterprise_approved_ids\x18\x02 \x03(\tB\x08\xbaH\x05\x92\x01\x02\x10\x32R\x15\x65nterpriseApprovedIds\x1a\xf0\x13\n\x0e\x41uthenticators\x12\xdb\x02\n\x0evalidate_entry\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x97\x02\x92\x41\x93\x02\x1a\x1a.google.protobuf.BoolValue2\xf4\x01requires that the provided metadata has an entry for the given authenticator to be considered valid. By default an AAGUID which has a zero value should fail validation if validate_entry_permit_zero_aaguid is not provided with the value of true.R\rvalidateEntry\x12\x8f\x02\n!validate_entry_permit_zero_aaguid\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xa8\x01\x92\x41\xa4\x01\x32\xa1\x01is an option that permits a zero\'d AAGUID from an attestation statement to automatically pass metadata validations. Generally helpful to use with validate_entry.R\x1dvalidateEntryPermitZeroAaguid\x12\xc6\x01\n\x10validate_anchors\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x7f\x92\x41|2zwhen set to true enables the validation of the attestation statement against the trust anchor from the metadata statement.R\x0fvalidateAnchors\x12\xbe\x01\n\x0fvalidate_status\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBy\x92\x41v2twhen set to true enables the validation of the attestation statements AAGUID against the desired and undesired listsR\x0evalidateStatus\x12\xe1\x01\n\x19validate_attestation_type\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x88\x01\x92\x41\x84\x01\x32\x81\x01when set to true enables the validation of the attestation statements type against the known types the authenticator can produce.R\x17validateAttestationType\x12\xbb\x04\n\x1c\x64\x65sired_authenticator_status\x18\x06 \x03(\tB\xf8\x03\x92\x41\x9d\x01\x32\x96\x01provides the list of statuses which are considered undesirable for status report validation purposes. Should be used with validate_status set to true.:\x02[]\xbaH\xd3\x02\x92\x01\xcf\x02\x10\n\"\xca\x02r\xc7\x02R\x12NOT_FIDO_CERTIFIEDR\x0e\x46IDO_CERTIFIEDR\x18USER_VERIFICATION_BYPASSR\x1a\x41TTESTATION_KEY_COMPROMISER\x1aUSER_KEY_REMOTE_COMPROMISER\x1cUSER_KEY_PHYSICAL_COMPROMISER\x10UPDATE_AVAILABLER\x07REVOKEDR\x18SELF_ASSERTION_SUBMITTEDR\x11\x46IDO_CERTIFIED_L1R\x15\x46IDO_CERTIFIED_L1plusR\x11\x46IDO_CERTIFIED_L2R\x15\x46IDO_CERTIFIED_L2plusR\x11\x46IDO_CERTIFIED_L3R\x15\x46IDO_CERTIFIED_L3plusR\x1a\x64\x65siredAuthenticatorStatus\x12\xc1\x05\n\x1eundesired_authenticator_status\x18\x07 \x03(\tB\xfa\x04\x92\x41\x9f\x02\x32\x96\x01provides the list of statuses which are considered undesirable for status report validation purposes. Should be used with validate_status set to true.:\x83\x01[\'ATTESTATION_KEY_COMPROMISE\', \'USER_VERIFICATION_BYPASS\', \'USER_KEY_REMOTE_COMPROMISE\', \'USER_KEY_PHYSICAL_COMPROMISE\', \'REVOKED\']\xbaH\xd3\x02\x92\x01\xcf\x02\x10\n\"\xca\x02r\xc7\x02R\x12NOT_FIDO_CERTIFIEDR\x0e\x46IDO_CERTIFIEDR\x18USER_VERIFICATION_BYPASSR\x1a\x41TTESTATION_KEY_COMPROMISER\x1aUSER_KEY_REMOTE_COMPROMISER\x1cUSER_KEY_PHYSICAL_COMPROMISER\x10UPDATE_AVAILABLER\x07REVOKEDR\x18SELF_ASSERTION_SUBMITTEDR\x11\x46IDO_CERTIFIED_L1R\x15\x46IDO_CERTIFIED_L1plusR\x11\x46IDO_CERTIFIED_L2R\x15\x46IDO_CERTIFIED_L2plusR\x11\x46IDO_CERTIFIED_L3R\x15\x46IDO_CERTIFIED_L3plusR\x1cundesiredAuthenticatorStatus\x1a\x86\x02\n\x16\x41uthenticatorSelection\x12r\n\x11user_verification\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\'\xbaH$r\"R\x08requiredR\tpreferredR\x0b\x64iscouragedR\x10userVerification\x12x\n\x18\x61uthenticator_attachment\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1f\xbaH\x1cr\x1aR\x08platformR\x0e\x63ross-platformR\x17\x61uthenticatorAttachment\x1a\xa3\x04\n\x07Timeout\x12x\n\x0cregistration\x18\x01 \x01(\x0b\x32\x19.google.protobuf.DurationB9\x92\x41\'2\x1dRegistration timeout duration:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x0cregistration\x12\xa5\x01\n\x10registration_uvd\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationB_\x92\x41M2CRegistration timeout duration when user verification is discouraged:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x0fregistrationUvd\x12\x63\n\x05login\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationB2\x92\x41 2\x16Login timeout duration:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x05login\x12\x90\x01\n\tlogin_uvd\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationBX\x92\x41\x46\x322\x0fSP Metadata URLJ+\"https://youridp.com/service/saml/metadata\"R\rspMetadataUrl\x12\x8a\x01\n\x10idp_metadata_url\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueBB\x92\x41?2\x10IDP Metadata URLJ+\"https://youridp.com/service/saml/metadata\"R\x0eidpMetadataUrl\x12x\n\ridp_entity_id\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB6\x92\x41\x33\x32\rIDP Entity IDJ\"\"https://youridp.com/service/saml\"R\x0bidpEntityId\x12v\n\x0bidp_sso_url\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValueB8\x92\x41\x35\x32\x0bIDP SSO URLJ&\"https://youridp.com/service/saml/sso\"R\tidpSsoUrl\x12i\n\x10idp_certificates\x18\x07 \x03(\x0b\x32\'.scalekit.v1.connections.IDPCertificateB\x15\x92\x41\x12\x32\x10IDP CertificatesR\x0fidpCertificates\x12v\n\x0bidp_slo_url\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB8\x92\x41\x35\x32\x0bIDP SLO URLJ&\"https://youridp.com/service/saml/slo\"R\tidpSloUrl\x12l\n\x0fui_button_title\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB&\x92\x41#2\x0fUI Button TitleJ\x10\"Login with SSO\"R\ruiButtonTitle\x12t\n\x12idp_name_id_format\x18\n \x01(\x0e\x32%.scalekit.v1.connections.NameIdFormatB \x92\x41\x1d\x32\x12IDP Name ID FormatJ\x07\"EMAIL\"R\x0fidpNameIdFormat\x12\x89\x01\n\x17idp_sso_request_binding\x18\x0b \x01(\x0e\x32\'.scalekit.v1.connections.RequestBindingB)\x92\x41&2\x17IDP SSO Request BindingJ\x0b\"HTTP_POST\"R\x14idpSsoRequestBinding\x12\x89\x01\n\x17idp_slo_request_binding\x18\x0c \x01(\x0e\x32\'.scalekit.v1.connections.RequestBindingB)\x92\x41&2\x17IDP SLO Request BindingJ\x0b\"HTTP_POST\"R\x14idpSloRequestBinding\x12\x93\x01\n\x13saml_signing_option\x18\r \x01(\x0e\x32+.scalekit.v1.connections.SAMLSigningOptionsB6\x92\x41\x33\x32\x13SAML Signing OptionJ\x1c\"SAML_ONLY_RESPONSE_SIGNING\"R\x11samlSigningOption\x12{\n\x19\x61llow_idp_initiated_login\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueB$\x92\x41!2\x19\x41llow IDP Initiated LoginJ\x04trueR\x16\x61llowIdpInitiatedLogin\x12S\n\x0b\x66orce_authn\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x16\x92\x41\x13\x32\x0b\x46orce AuthnJ\x04trueR\nforceAuthn\x12\x96\x01\n\x14\x64\x65\x66\x61ult_redirect_uri\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueBF\x92\x41\x43\x32\x14\x44\x65\x66\x61ult Redirect URIJ+\"https://yourapp.com/service/saml/redirect\"R\x12\x64\x65\x66\x61ultRedirectUri\x12k\n\x13\x61ssertion_encrypted\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1e\x92\x41\x1b\x32\x13\x41ssertion EncryptedJ\x04trueR\x12\x61ssertionEncrypted\x12j\n\x13want_request_signed\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1e\x92\x41\x1b\x32\x13Want Request SignedJ\x04trueR\x11wantRequestSigned\x12q\n\x0e\x63\x65rtificate_id\x18\x13 \x01(\x0b\x32\x1c.google.protobuf.StringValueB,\x92\x41)2\x0e\x43\x65rtificate IDJ\x17\"cer_35585423166144613\"R\rcertificateId\x12\x62\n\x10idp_slo_required\x18\x14 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1c\x92\x41\x19\x32\x11\x45nable IDP logoutJ\x04trueR\x0eidpSloRequired\x12\x96\x01\n\nsp_slo_url\x18\x15 \x01(\x0b\x32\x1c.google.protobuf.StringValueBZ\x92\x41T2\x18Service Provider SLO urlJ8\"https://yourapp.com/sso/v1/saml/conn_1234/slo/callback\"\xe0\x41\x03R\x08spSloUrl\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x16 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\x12\xba\x01\n!jit_provisioning_with_sso_enabled\x18\x17 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBT\x92\x41Q2IIndicates if Just In Time user provisioning is enabled for the connectionJ\x04trueR\x1djitProvisioningWithSsoEnabled\"\xbf\x03\n\x0eIDPCertificate\x12\x36\n\x0b\x63\x65rtificate\x18\x01 \x01(\tB\x14\x92\x41\x11\x32\x0fIDP CertificateR\x0b\x63\x65rtificate\x12s\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB6\x92\x41\x33\x32\x19\x43\x65rtificate Creation TimeJ\x16\"2021-09-01T00:00:00Z\"R\ncreateTime\x12q\n\x0b\x65xpiry_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB4\x92\x41\x31\x32\x17\x43\x65rtificate Expiry TimeJ\x16\"2021-09-01T00:00:00Z\"R\nexpiryTime\x12\x38\n\x02id\x18\x04 \x01(\tB(\x92\x41%2\x0e\x43\x65rtificate IDJ\x13\"cert_123123123123\"R\x02id\x12S\n\x06issuer\x18\x05 \x01(\tB;\x92\x41\x38\x32\x12\x43\x65rtificate IssuerJ\"\"https://youridp.com/service/saml\"R\x06issuer\"b\n\x16GetOIDCMetadataRequest\x12H\n\x08metadata\x18\x01 \x01(\x0b\x32,.scalekit.v1.connections.OIDCMetadataRequestR\x08metadata\"9\n\x13OIDCMetadataRequest\x12\"\n\x06issuer\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x06issuer\"\xd7\x01\n\x17GetOIDCMetadataResponse\x12\x16\n\x06issuer\x18\x01 \x01(\tR\x06issuer\x12\x35\n\x16\x61uthorization_endpoint\x18\x02 \x01(\tR\x15\x61uthorizationEndpoint\x12%\n\x0etoken_endpoint\x18\x03 \x01(\tR\rtokenEndpoint\x12+\n\x11userinfo_endpoint\x18\x04 \x01(\tR\x10userinfoEndpoint\x12\x19\n\x08jwks_uri\x18\x05 \x01(\tR\x07jwksUri\"b\n\x16GetSAMLMetadataRequest\x12H\n\x08metadata\x18\x01 \x01(\x0b\x32,.scalekit.v1.connections.SAMLMetadataRequestR\x08metadata\"D\n\x13SAMLMetadataRequest\x12-\n\x0cmetadata_url\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0bmetadataUrl\"\xb4\x02\n\x17GetSAMLMetadataResponse\x12\"\n\ridp_entity_id\x18\x01 \x01(\tR\x0bidpEntityId\x12\x1e\n\x0bidp_sso_url\x18\x02 \x01(\tR\tidpSsoUrl\x12\x1e\n\x0bidp_slo_url\x18\x03 \x01(\tR\tidpSloUrl\x12)\n\x10idp_certificates\x18\x04 \x03(\tR\x0fidpCertificates\x12+\n\x12idp_name_id_format\x18\x05 \x01(\tR\x0fidpNameIdFormat\x12\'\n\x0frequest_binding\x18\x06 \x01(\tR\x0erequestBinding\x12\x34\n\x16want_assertions_signed\x18\x07 \x01(\x08R\x14wantAssertionsSigned\"u\n GetSAMLCertificateDetailsRequest\x12Q\n\x0b\x63\x65rtificate\x18\x01 \x01(\x0b\x32/.scalekit.v1.connections.SAMLCertificateRequestR\x0b\x63\x65rtificate\"5\n\x16SAMLCertificateRequest\x12\x1b\n\x04text\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04text\"\xa5\x01\n!GetSAMLCertificateDetailsResponse\x12\x12\n\x04text\x18\x01 \x01(\tR\x04text\x12\x1b\n\tnot_after\x18\x02 \x01(\x03R\x08notAfter\x12\x1d\n\nnot_before\x18\x03 \x01(\x03R\tnotBefore\x12\x18\n\x07subject\x18\x04 \x01(\tR\x07subject\x12\x16\n\x06issuer\x18\x05 \x01(\tR\x06issuer\"\x86\x01\n\x1eGetConnectionTestResultRequest\x12,\n\rconnection_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0c\x63onnectionId\x12\x36\n\x0ftest_request_id\x18\x02 \x01(\tB\x0e\xbaH\x0br\t\x10\x01:\x05test_R\rtestRequestId\"\xbd\x02\n\x1fGetConnectionTestResultResponse\x12\x41\n\x06status\x18\x01 \x01(\x0e\x32).scalekit.v1.connections.TestResultStatusR\x06status\x12 \n\tuser_info\x18\x02 \x01(\tH\x00R\x08userInfo\x88\x01\x01\x12\x19\n\x05\x65rror\x18\x03 \x01(\tH\x01R\x05\x65rror\x88\x01\x01\x12\x30\n\x11\x65rror_description\x18\x04 \x01(\tH\x02R\x10\x65rrorDescription\x88\x01\x01\x12(\n\rerror_details\x18\x05 \x01(\tH\x03R\x0c\x65rrorDetails\x88\x01\x01\x42\x0c\n\n_user_infoB\x08\n\x06_errorB\x14\n\x12_error_descriptionB\x10\n\x0e_error_details\"\x1a\n\x18PasswordConnectionConfig\"9\n\x05\x46lags\x12\x19\n\x08is_login\x18\x01 \x01(\x08R\x07isLogin\x12\x15\n\x06is_app\x18\x02 \x01(\x08R\x05isApp\"\xaa\x03\n\x19ListAppConnectionsRequest\x12\x80\x01\n\tpage_size\x18\x01 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x02 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\x12U\n\x08provider\x18\x03 \x01(\tB4\x92\x41(2\x1e\x46ilter connections by providerJ\x06\"OKTA\"\xbaH\x06r\x04\x10\x01\x18\x32H\x00R\x08provider\x88\x01\x01\x42\x0b\n\t_provider\"\xea\x03\n\x1aListAppConnectionsResponse\x12\x81\x01\n\x0b\x63onnections\x18\x01 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB6\x92\x41\x33\x32\x31List of connections matching the request criteriaR\x0b\x63onnections\x12o\n\x0fnext_page_token\x18\x02 \x01(\tBG\x92\x41\x44\x32\"Token for the next page of resultsJ\x1e\"eyJwYWdlIjoyLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12s\n\x0fprev_page_token\x18\x03 \x01(\tBK\x92\x41H2&Token for the previous page of resultsJ\x1e\"eyJwYWdlIjoyLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12\x62\n\ntotal_size\x18\x04 \x01(\rBC\x92\x41@29Total number of connections matching the request criteriaJ\x03\x31\x30\x30R\ttotalSize*W\n\x11\x43odeChallengeType\x12#\n\x1f\x43ODE_CHALLENGE_TYPE_UNSPECIFIED\x10\x00\x12\x0b\n\x07NUMERIC\x10\x01\x12\x10\n\x0c\x41LPHANUMERIC\x10\x02*R\n\x11\x43onfigurationType\x12\"\n\x1e\x43ONFIGURATION_TYPE_UNSPECIFIED\x10\x00\x12\r\n\tDISCOVERY\x10\x01\x12\n\n\x06MANUAL\x10\x02*a\n\x0cNameIdFormat\x12\x16\n\x12NAME_ID_FORMAT_NIL\x10\x00\x12\x0f\n\x0bUNSPECIFIED\x10\x01\x12\t\n\x05\x45MAIL\x10\x02\x12\r\n\tTRANSIENT\x10\x03\x12\x0e\n\nPERSISTENT\x10\x04*U\n\x10PasswordlessType\x12 \n\x1cPasswordlessType_UNSPECIFIED\x10\x00\x12\x08\n\x04LINK\x10\x01\x12\x07\n\x03OTP\x10\x02\x12\x0c\n\x08LINK_OTP\x10\x03*9\n\x10TestResultStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0b\n\x07SUCCESS\x10\x01\x12\x0b\n\x07\x46\x41ILURE\x10\x02*\xd8\x01\n\x12SAMLSigningOptions\x12$\n SAML_SIGNING_OPTIONS_UNSPECIFIED\x10\x00\x12\x0e\n\nNO_SIGNING\x10\x01\x12\x1e\n\x1aSAML_ONLY_RESPONSE_SIGNING\x10\x02\x12\x1f\n\x1bSAML_ONLY_ASSERTION_SIGNING\x10\x03\x12#\n\x1fSAML_RESPONSE_ASSERTION_SIGNING\x10\x04\x12&\n\"SAML_RESPONSE_OR_ASSERTION_SIGNING\x10\x05*S\n\x0eRequestBinding\x12\x1f\n\x1bREQUEST_BINDING_UNSPECIFIED\x10\x00\x12\r\n\tHTTP_POST\x10\x01\x12\x11\n\rHTTP_REDIRECT\x10\x02*P\n\rTokenAuthType\x12\x1f\n\x1bTOKEN_AUTH_TYPE_UNSPECIFIED\x10\x00\x12\x0e\n\nURL_PARAMS\x10\x01\x12\x0e\n\nBASIC_AUTH\x10\x02*c\n\tOIDCScope\x12\x1a\n\x16OIDC_SCOPE_UNSPECIFIED\x10\x00\x12\n\n\x06openid\x10\x01\x12\x0b\n\x07profile\x10\x02\x12\t\n\x05\x65mail\x10\x03\x12\x0b\n\x07\x61\x64\x64ress\x10\x04\x12\t\n\x05phone\x10\x05*\x8e\x01\n\x0e\x43onnectionType\x12\x0b\n\x07INVALID\x10\x00\x12\x08\n\x04OIDC\x10\x01\x12\x08\n\x04SAML\x10\x02\x12\x0c\n\x08PASSWORD\x10\x03\x12\t\n\x05OAUTH\x10\x04\x12\x10\n\x0cPASSWORDLESS\x10\x05\x12\t\n\x05\x42\x41SIC\x10\x06\x12\n\n\x06\x42\x45\x41RER\x10\x07\x12\x0b\n\x07\x41PI_KEY\x10\x08\x12\x0c\n\x08WEBAUTHN\x10\t*`\n\x10\x43onnectionStatus\x12!\n\x1d\x43ONNECTION_STATUS_UNSPECIFIED\x10\x00\x12\t\n\x05\x44RAFT\x10\x01\x12\x0f\n\x0bIN_PROGRESS\x10\x02\x12\r\n\tCOMPLETED\x10\x03*\x98\x02\n\x12\x43onnectionProvider\x12#\n\x1f\x43ONNECTION_PROVIDER_UNSPECIFIED\x10\x00\x12\x08\n\x04OKTA\x10\x01\x12\n\n\x06GOOGLE\x10\x02\x12\x10\n\x0cMICROSOFT_AD\x10\x03\x12\t\n\x05\x41UTH0\x10\x04\x12\x0c\n\x08ONELOGIN\x10\x05\x12\x11\n\rPING_IDENTITY\x10\x06\x12\r\n\tJUMPCLOUD\x10\x07\x12\n\n\x06\x43USTOM\x10\x08\x12\n\n\x06GITHUB\x10\t\x12\n\n\x06GITLAB\x10\n\x12\x0c\n\x08LINKEDIN\x10\x0b\x12\x0e\n\nSALESFORCE\x10\x0c\x12\r\n\tMICROSOFT\x10\r\x12\x11\n\rIDP_SIMULATOR\x10\x0e\x12\x0c\n\x08SCALEKIT\x10\x0f\x12\x08\n\x04\x41\x44\x46S\x10\x10\x32\x92>\n\x11\x43onnectionService\x12\x91\x03\n\x1b\x43reateEnvironmentConnection\x12;.scalekit.v1.connections.CreateEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\"\x81\x02\x92\x41\xc1\x01\n\x0b\x43onnections\x12\x17\x43reate a new connection\x1a\x38\x45stablish a new connection for the specified environmentJ_\n\x03\x32\x30\x31\x12X\n\x1f\x43onnection created successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\"\x13/api/v1/connections:\nconnection\x12\xb3\x03\n\x10\x43reateConnection\x12\x30.scalekit.v1.connections.CreateConnectionRequest\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\"\xb9\x02\x92\x41\xc6\x01\n\x0b\x43onnections\x12\x17\x43reate a new connection\x1a=Establish a new SSO connection for the specified organizationJ_\n\x03\x32\x30\x31\x12X\n\x1f\x43onnection created successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x41\"3/api/v1/organizations/{organization_id}/connections:\nconnection\x12\xcd\x04\n\x19\x41ssignDomainsToConnection\x12\x39.scalekit.v1.connections.AssignDomainsToConnectionRequest\x1a:.scalekit.v1.connections.AssignDomainsToConnectionResponse\"\xb8\x03\x92\x41\xb6\x02\n\x0b\x43onnections\x12\x1e\x41ssign domains to a connection\x1a\x9e\x01\x41ssigns one or more domains to a specific connection within an organization. This allows the connection to be used for authentication on the specified domainsJf\n\x03\x32\x30\x30\x12_\n\x1d\x44omains assigned successfully\x12>\n<\x1a:.scalekit.v1.connections.AssignDomainsToConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02P\x1aK/api/v1/organizations/{organization_id}/connections/{connection_id}/domains:\x01*\x12\xb2\x03\n\x18GetEnvironmentConnection\x12\x38.scalekit.v1.connections.GetEnvironmentConnectionRequest\x1a..scalekit.v1.connections.GetConnectionResponse\"\xab\x02\x92\x41\xe7\x01\n\x0b\x43onnections\x12\x1bRetrieve connection details\x1aSObtain detailed information about a specific connection using its unique identifierJf\n\x03\x32\x30\x30\x12_\n)Successfully retrieved connection details\x12\x32\n0\x1a..scalekit.v1.connections.GetConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\x12#/api/v1/connections/{connection_id}\x12\xce\x04\n\rGetConnection\x12-.scalekit.v1.connections.GetConnectionRequest\x1a..scalekit.v1.connections.GetConnectionResponse\"\xdd\x03\x92\x41\x81\x03\n\x0b\x43onnections\x12\x16Get connection details\x1a\xd1\x01Retrieves the complete configuration and status details for a specific connection by its ID within an organization. Returns all connection properties including provider settings, protocols, and current status.J\x85\x01\n\x03\x32\x30\x30\x12~\nHSuccessfully retrieved connection details for the specified organization\x12\x32\n0\x1a..scalekit.v1.connections.GetConnectionResponse\x82\xb5\x18\x14\n\x10\x63onnections_read\x18t\x82\xd3\xe4\x93\x02:\x12\x38/api/v1/organizations/{organization_id}/connections/{id}\x12\xe4\x02\n\x0fListConnections\x12/.scalekit.v1.connections.ListConnectionsRequest\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\"\xed\x01\x92\x41\xb6\x01\n\x0b\x43onnections\x12\x10List connections\x1a\x32Retrieves a list of connections in the environmentJa\n\x03\x32\x30\x30\x12Z\n\"Successfully retrieved connections\x12\x34\n2\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\x82\xb5\x18\x14\n\x10\x63onnections_read\x18t\x82\xd3\xe4\x93\x02\x15\x12\x13/api/v1/connections\x12\xb5\x03\n\x1bListOrganizationConnections\x12;.scalekit.v1.connections.ListOrganizationConnectionsRequest\x1a<.scalekit.v1.connections.ListOrganizationConnectionsResponse\"\x9a\x02\x92\x41\xd6\x01\n\x0b\x43onnections\x12\x1dList organization connections\x1a\x39Retrieves a list of connections for all the organizationsJm\n\x03\x32\x30\x30\x12\x66\n\"Successfully retrieved connections\x12@\n>\x1a<.scalekit.v1.connections.ListOrganizationConnectionsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\x12#/api/v1/organizations/-/connections\x12\xcd\x03\n\x1dSearchOrganizationConnections\x12=.scalekit.v1.connections.SearchOrganizationConnectionsRequest\x1a>.scalekit.v1.connections.SearchOrganizationConnectionsResponse\"\xac\x02\x92\x41\xe1\x01\n\x0b\x43onnections\x12\x1fSearch organization connections\x1a\x44Search with query or filters provided and return list of connectionsJk\n\x03\x32\x30\x30\x12\x64\n\x1eSuccessfully found connections\x12\x42\n@\x1a>.scalekit.v1.connections.SearchOrganizationConnectionsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02,\x12*/api/v1/organizations/-/connections:search\x12\xf1\x02\n\x1bUpdateEnvironmentConnection\x12;.scalekit.v1.connections.UpdateEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\"\xe1\x01\x92\x41\x91\x01\n\x0b\x43onnections\x12\x13Update a connection\x1a\x17Update a SSO ConnectionJT\n\x03\x32\x30\x30\x12M\n\x14Updated Successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\x32#/api/v1/connections/{connection_id}:\nconnection\x12\x94\x03\n\x10UpdateConnection\x12\x30.scalekit.v1.connections.UpdateConnectionRequest\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\"\x9a\x02\x92\x41\xa2\x01\n\x0b\x43onnections\x12$Update a connection for organization\x1a\x17Update a SSO ConnectionJT\n\x03\x32\x30\x30\x12M\n\x14Updated Successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x46\x32\x38/api/v1/organizations/{organization_id}/connections/{id}:\nconnection\x12\x92\x02\n\x1b\x44\x65leteEnvironmentConnection\x12;.scalekit.v1.connections.DeleteEnvironmentConnectionRequest\x1a\x16.google.protobuf.Empty\"\x9d\x01\x92\x41Z\n\x0b\x43onnections\x12\x13\x44\x65lete a connection\x1a\x17\x44\x65lete a SSO ConnectionJ\x1d\n\x03\x32\x30\x30\x12\x16\n\x14\x44\x65leted Successfully\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%*#/api/v1/connections/{connection_id}\x12\xa2\x02\n\x10\x44\x65leteConnection\x12\x30.scalekit.v1.connections.DeleteConnectionRequest\x1a\x16.google.protobuf.Empty\"\xc3\x01\x92\x41k\n\x0b\x43onnections\x12$Delete a connection for organization\x1a\x17\x44\x65lete a SSO ConnectionJ\x1d\n\x03\x32\x30\x30\x12\x16\n\x14\x44\x65leted Successfully\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02:*8/api/v1/organizations/{organization_id}/connections/{id}\x12\xdf\x02\n\x1b\x45nableEnvironmentConnection\x12;.scalekit.v1.connections.ToggleEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xcf\x01\x92\x41\x84\x01\n\x0b\x43onnections\x12\x13\x45nable a connection\x1a\x17\x45nable a SSO ConnectionJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02,2*/api/v1/connections/{connection_id}:enable\x12\xdd\x04\n\x10\x45nableConnection\x12\x30.scalekit.v1.connections.ToggleConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xe3\x03\x92\x41\xff\x02\n\x0b\x43onnections\x12\x1e\x45nable organization connection\x1a\xee\x01\x41\x63tivate an existing connection for the specified organization. When enabled, users can authenticate using this connection. This endpoint changes the connection state from disabled to enabled without modifying other configuration settingsJ_\n\x03\x32\x30\x30\x12X\n\x1f\x43onnection enabled successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\x82\xd3\xe4\x93\x02\x41\x32?/api/v1/organizations/{organization_id}/connections/{id}:enable\x12\xe3\x02\n\x1c\x44isableEnvironmentConnection\x12;.scalekit.v1.connections.ToggleEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xd2\x01\x92\x41\x86\x01\n\x0b\x43onnections\x12\x14\x44isable a connection\x1a\x18\x44isable a SSO ConnectionJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02-2+/api/v1/connections/{connection_id}:disable\x12\xe7\x04\n\x11\x44isableConnection\x12\x30.scalekit.v1.connections.ToggleConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xec\x03\x92\x41\x87\x03\n\x0b\x43onnections\x12\x1f\x44isable organization connection\x1a\xf4\x01\x44\x65\x61\x63tivate an existing connection for the specified organization. When disabled, users cannot authenticate using this connection. This endpoint changes the connection state from enabled to disabled without modifying other configuration settingsJ`\n\x03\x32\x30\x30\x12Y\n Connection disabled successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\x82\xd3\xe4\x93\x02\x42\x32@/api/v1/organizations/{organization_id}/connections/{id}:disable\x12\x80\x03\n\x17GetConnectionTestResult\x12\x37.scalekit.v1.connections.GetConnectionTestResultRequest\x1a\x38.scalekit.v1.connections.GetConnectionTestResultResponse\"\xf1\x01\x92\x41\x8d\x01\n\x0b\x43onnections\x12\x16Test connection result\x1a\x16\x43onnection test resultJN\n\x03\x32\x30\x30\x12G\n\x07Success\x12<\n:\x1a\x38.scalekit.v1.connections.GetConnectionTestResultResponse\x82\xb5\x18\x02\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x45\x12\x43/api/v1/connections/{connection_id}/test-requests/{test_request_id}\x12\xf6\x02\n\x12ListAppConnections\x12\x32.scalekit.v1.connections.ListAppConnectionsRequest\x1a\x33.scalekit.v1.connections.ListAppConnectionsResponse\"\xf6\x01\x92\x41\xbe\x01\n\x0b\x43onnections\x12\x14List App connections\x1a\x36Retrieves a list of app connections in the environmentJa\n\x03\x32\x30\x30\x12Z\n\"Successfully retrieved connections\x12\x34\n2\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\x12\x17/api/v1/connections/app\x1a\x9a\x01\x92\x41\x96\x01\n\x0b\x43onnections\x12\x86\x01Manage enterprise connections for your Scalekit environment. This service provides endpoints for retrieving, and updating connections.B7Z5github.com/scalekit-inc/scalekit/pkg/grpc/connectionsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n)scalekit/v1/connections/connections.proto\x12\x17scalekit.v1.connections\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a\x1fscalekit/v1/auth/webauthn.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/domains/domains.proto\x1a!scalekit/v1/options/options.proto\"\xc4\x01\n AssignDomainsToConnectionRequest\x12;\n\x0forganization_id\x18\x01 \x01(\tB\x12\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\x12\x38\n\rconnection_id\x18\x02 \x01(\tB\x13\xbaH\x10r\x0b\x10\x01\x18 :\x05\x63onn_\xc8\x01\x01R\x0c\x63onnectionId\x12)\n\ndomain_ids\x18\x03 \x03(\tB\n\xbaH\x07\x92\x01\x04\x08\x00\x10\x32R\tdomainIds\"\xe6\x03\n!AssignDomainsToConnectionResponse\x12\xc0\x03\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\xfa\x02\x92\x41\xf6\x02\x32 Connection with assigned domainsJ\xd1\x02{\n \"id\": \"conn_1234567890\",\n \"provider\": \"OKTA\",\n \"type\": \"OIDC\",\n \"status\": \"CONFIGURED\",\n \"enabled\": true,\n \"debug_enabled\": false,\n \"organization_id\": \"org_1234567890\",\n \"ui_button_title\": \"Login with SSO\",\n \"configuration_type\": \"MANUAL\",\n \"test_connection_uri\": \"https://auth.example.com/test-connection/conn_1234567890\"\n}R\nconnection\"\x15\n\x13GetProvidersRequest\"W\n\x14GetProvidersResponse\x12?\n\tproviders\x18\x01 \x03(\x0b\x32!.scalekit.v1.connections.ProviderR\tproviders\"\xf3\x01\n\x08Provider\x12\x35\n\x06key_id\x18\x01 \x01(\tB\x1e\x92\x41\x1b\x32\x0fProvider Key IDJ\x08\"google\"R\x05keyId\x12G\n\x0c\x64isplay_name\x18\x02 \x01(\tB$\x92\x41!2\x15Provider Display NameJ\x08\"Google\"R\x0b\x64isplayName\x12W\n\x0b\x64\x65scription\x18\x03 \x01(\tB0\x92\x41-2\x14Provider DescriptionJ\x15\"Sign In With Google\"H\x00R\x0b\x64\x65scription\x88\x01\x01\x42\x0e\n\x0c_description\"\xae\x02\n\"CreateEnvironmentConnectionRequest\x12Q\n\nconnection\x18\x01 \x01(\x0b\x32).scalekit.v1.connections.CreateConnectionB\x06\xbaH\x03\xc8\x01\x01R\nconnection\x12\xaa\x01\n\x05\x66lags\x18\x02 \x01(\x0b\x32\x1e.scalekit.v1.connections.FlagsBo\x92\x41l2SOptional flags to control connection creation behavior, such as enabling debug modeJ\x15{ \"is_social\": true }H\x00R\x05\x66lags\x88\x01\x01\x42\x08\n\x06_flags\"\xe4\x02\n\x17\x43reateConnectionRequest\x12\x9a\x01\n\x0forganization_id\x18\x01 \x01(\tBq\x92\x41\x65\x32JUnique identifier of the organization for which the connection is created.J\x17\"org_12362474900684814\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\xa5\x01\n\nconnection\x18\x03 \x01(\x0b\x32).scalekit.v1.connections.CreateConnectionBZ\xbaHW\xba\x01Q\x12\x36OAUTH, PASSWORDLESS and WEBAUTHN are not supported yet\x1a\x17!(this.type in [4,5,9])\xc8\x01\x01R\nconnectionJ\x04\x08\x02\x10\x03\"\xf7\x05\n\x10\x43reateConnection\x12\xcb\x01\n\x08provider\x18\x01 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderB\x81\x01\x92\x41v2lIdentity provider service that handles authentication (such as OKTA, Google, Azure AD, or a custom provider)J\x06\"OKTA\"\xbaH\x05\x82\x01\x02\x10\x01R\x08provider\x12\x45\n\x04type\x18\x02 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04type\x12\x98\x01\n\x0cprovider_key\x18\x03 \x01(\tBu\x92\x41r2fKey ID of the identity provider. This is used to identify the specific configuration for the provider.J\x08\"google\"R\x0bproviderKey\x12\x1a\n\x06key_id\x18\x04 \x01(\tH\x00R\x05keyId\x88\x01\x01:\x8b\x02\xbaH\x87\x02\x1aT\x12$provider or provider_key is required\x1a,has(this.provider_key) || this.provider != 0\x1a`\x12\x1einvalid value for provider_key\x1a>this.provider == 15 ? this.provider_key in [\'SCALEKIT\'] : true\x1aM\x12\x18invalid value for key_id\x1a\x31this.type == 9 ? this.key_id == \'WEBAUTHN\' : trueB\t\n\x07_key_id\"\xcb \n\nConnection\x12\x8d\x01\n\x02id\x18\x01 \x01(\tB}\x92\x41z2_Unique identifier for this connection. Used in API calls to reference this specific connection.J\x17\"conn_2123312131125533\"R\x02id\x12\xc2\x01\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderBy\x92\x41v2lIdentity provider service that handles authentication (such as OKTA, Google, Azure AD, or a custom provider)J\x06\"OKTA\"R\x08provider\x12\xb4\x01\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeBw\x92\x41t2jAuthentication protocol used by this connection. Can be OIDC (OpenID Connect), SAML, OAUTH, or MAGIC_LINK.J\x06\"OIDC\"R\x04type\x12\xc6\x01\n\x06status\x18\x04 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusB\x82\x01\x92\x41|2kCurrent configuration status of the connection. Possible values include IN_PROGRESS, CONFIGURED, and ERROR.J\r\"IN_PROGRESS\"\xe0\x41\x03R\x06status\x12\xab\x01\n\x07\x65nabled\x18\x05 \x01(\x08\x42\x90\x01\x92\x41\x8c\x01\x32\x82\x01\x43ontrols whether users can sign in using this connection. When false, the connection exists but cannot be used for authentication.J\x05\x66\x61lseR\x07\x65nabled\x12\xb0\x01\n\rdebug_enabled\x18\x06 \x01(\x08\x42\x8a\x01\x92\x41\x86\x01\x32~Enables testing mode that allows non-HTTPS endpoints. Should only be enabled in development environments, never in production.J\x04trueR\x0c\x64\x65\x62ugEnabled\x12\xc1\x01\n\x0forganization_id\x18\x07 \x01(\tB\x92\x01\x92\x41\x8e\x01\x32tIdentifier of the organization that owns this connection. Connections are typically scoped to a single organization.J\x16\"org_2123312131125533\"H\x01R\x0eorganizationId\x88\x01\x01\x12\xbd\x01\n\x0fui_button_title\x18\x08 \x01(\tB\x94\x01\x92\x41\x81\x01\x32mCustom text shown on the login button in the user interface. Helps users identify which SSO option to select.J\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12\xd5\x01\n\x12\x63onfiguration_type\x18\t \x01(\x0e\x32*.scalekit.v1.connections.ConfigurationTypeBz\x92\x41w2kHow the connection was configured: DISCOVERY (automatic configuration) or MANUAL (administrator configured)J\x08\"MANUAL\"R\x11\x63onfigurationType\x12\xdf\x01\n\x13test_connection_uri\x18\x0c \x01(\tB\xae\x01\x92\x41\xaa\x01\x32\x66URI that can be used to test this connection. Visit this URL to verify the connection works correctly.J@\"https://auth.example.com/test-connection/conn_2123312131125533\"R\x11testConnectionUri\x12\x81\x02\n\x11\x61ttribute_mapping\x18\x0f \x03(\x0b\x32\x39.scalekit.v1.connections.Connection.AttributeMappingEntryB\x98\x01\x92\x41|2zMaps identity provider attributes to user profile fields. For example, {\'email\': \'user.mail\', \'name\': \'user.displayName\'}.\xbaH\x16\x9a\x01\x13\x10\x1e\"\x06r\x04\x10\x01\x18\x64*\x07r\x05\x10\x01\x18\x80\x02R\x10\x61ttributeMapping\x12\xb1\x01\n\x0b\x63reate_time\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.TimestampBt\x92\x41_2EWhen this connection was first created. Format is RFC 3339 timestamp.J\x16\"2023-01-15T14:30:00Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ncreateTime\x12\xb1\x01\n\x0bupdate_time\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.TimestampBt\x92\x41_2EWhen this connection was last modified. Format is RFC 3339 timestamp.J\x16\"2023-02-20T09:15:30Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\nupdateTime\x12\xb3\x01\n\x0boidc_config\x18\x12 \x01(\x0b\x32-.scalekit.v1.connections.OIDCConnectionConfigBa\x92\x41^2\\Configuration details for OpenID Connect (OIDC) connections. Present only when type is OIDC.H\x00R\noidcConfig\x12\xaa\x01\n\x0bsaml_config\x18\x13 \x01(\x0b\x32\x35.scalekit.v1.connections.SAMLConnectionConfigResponseBP\x92\x41M2KConfiguration details for SAML connections. Present only when type is SAML.H\x00R\nsamlConfig\x12\xa7\x01\n\x0coauth_config\x18\x14 \x01(\x0b\x32..scalekit.v1.connections.OAuthConnectionConfigBR\x92\x41O2MConfiguration details for OAuth connections. Present only when type is OAUTH.H\x00R\x0boauthConfig\x12\xbf\x01\n\x13passwordless_config\x18\x16 \x01(\x0b\x32+.scalekit.v1.connections.PasswordLessConfigB_\x92\x41\\2ZConfiguration details for Magic Link authentication. Present only when type is MAGIC_LINK.H\x00R\x12passwordlessConfig\x12\xc0\x01\n\rstatic_config\x18\x1a \x01(\x0b\x32).scalekit.v1.connections.StaticAuthConfigBn\x92\x41k2iStatic configuration for custom connections. Present only when type is BASIC, BEARER, API_KEY, or custom.H\x00R\x0cstaticConfig\x12\xb1\x01\n\x0fwebauthn_config\x18\x1b \x01(\x0b\x32-.scalekit.v1.connections.WebAuthConfigurationBW\x92\x41T2RConfiguration details for WebAuthn (passkeys). Present only when type is WEBAUTHN.H\x00R\x0ewebauthnConfig\x12}\n\x06key_id\x18\x19 \x01(\tBa\x92\x41^2\\Alternative identifier for this connection, typically used in frontend applications or URLs.H\x02R\x05keyId\x88\x01\x01\x12u\n\x0cprovider_key\x18\x17 \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x12\xaa\x01\n\x07\x64omains\x18\x18 \x03(\x0b\x32\x1b.scalekit.v1.domains.DomainBs\x92\x41p2SDomain associated with this connection, used for domain-based authentication flows.J\x19[{\"name\": \"example.com\"}]R\x07\x64omains\x1a\x43\n\x15\x41ttributeMappingEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\n\n\x08settingsB\x12\n\x10_organization_idB\t\n\x07_key_idJ\x04\x08\r\x10\x0f\"w\n\x18\x43reateConnectionResponse\x12[\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\x16\x92\x41\x13\x32\x11\x43onnection DetailR\nconnection\"\xa8\x02\n\"UpdateEnvironmentConnectionRequest\x12~\n\rconnection_id\x18\x01 \x01(\tBY\x92\x41M2+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xca>\x05\xfa\x02\x02id\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\x12\x81\x01\n\nconnection\x18\x03 \x01(\x0b\x32).scalekit.v1.connections.UpdateConnectionB6\x92\x41-2#Connection properties to be updated\xca>\x05\xfa\x02\x02id\xbaH\x03\xc8\x01\x01R\nconnection\"\xce\x03\n\x17UpdateConnectionRequest\x12q\n\x0forganization_id\x18\x01 \x01(\tBH\x92\x41<2#Organization ID for the Connection.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\x61\n\x02id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02id\x12\xd6\x01\n\nconnection\x18\x04 \x01(\x0b\x32).scalekit.v1.connections.UpdateConnectionB\x8a\x01\x92\x41-2#Connection properties to be updated\xca>\x05\xfa\x02\x02id\xbaHW\xba\x01Q\x12\x36OAUTH, PASSWORDLESS and WEBAUTHN are not supported yet\x1a\x17!(this.type in [4,5,9])\xc8\x01\x01R\nconnectionJ\x04\x08\x02\x10\x03\"\xcb\x11\n\x10UpdateConnection\x12w\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderB.\x92\x41#2\x17SSO Connection ProviderJ\x08\"CUSTOM\"\xbaH\x05\x82\x01\x02\x10\x01R\x08provider\x12r\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB5\x92\x41*2 Connection Protocol OIDC / SAML J\x06\"OIDC\"\xbaH\x05\x82\x01\x02\x10\x01R\x04type\x12\xae\x01\n\rdebug_enabled\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBm\x92\x41j2bDebug mode for the connection. Debug would allow non HTTPS endpoint to be used with the connectionJ\x04trueR\x0c\x64\x65\x62ugEnabled\x12\x8d\x01\n\x0fui_button_title\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueBG\x92\x41\x35\x32!Display name for the Login ButtonJ\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12~\n\x12\x63onfiguration_type\x18\x0b \x01(\x0e\x32*.scalekit.v1.connections.ConfigurationTypeB#\x92\x41 2\x14\x43onfiguration Type. J\x08\"MANUAL\"R\x11\x63onfigurationType\x12\x9d\x01\n\x11\x61ttribute_mapping\x18\x0f \x03(\x0b\x32?.scalekit.v1.connections.UpdateConnection.AttributeMappingEntryB/\x92\x41\x13\x32\x11\x41ttribute Mapping\xbaH\x16\x9a\x01\x13\x10\x1e\"\x06r\x04\x10\x01\x18\x64*\x07r\x05\x10\x01\x18\x80\x02R\x10\x61ttributeMapping\x12\x83\x01\n\x0boidc_config\x18\x10 \x01(\x0b\x32-.scalekit.v1.connections.OIDCConnectionConfigB1\x92\x41.2,OIDC Configuration if ConnectionType == OIDCH\x00R\noidcConfig\x12\x8a\x01\n\x0bsaml_config\x18\x11 \x01(\x0b\x32\x34.scalekit.v1.connections.SAMLConnectionConfigRequestB1\x92\x41.2,SAML Configuration if ConnectionType == SAMLH\x00R\nsamlConfig\x12\x88\x01\n\x0coauth_config\x18\x12 \x01(\x0b\x32..scalekit.v1.connections.OAuthConnectionConfigB3\x92\x41\x30\x32.OAuth Configuration if ConnectionType == OAUTHH\x00R\x0boauthConfig\x12\x9d\x01\n\x13passwordless_config\x18\x14 \x01(\x0b\x32+.scalekit.v1.connections.PasswordLessConfigB=\x92\x41:28Magic Link Configuration if ConnectionType == MAGIC_LINKH\x00R\x12passwordlessConfig\x12P\n\rstatic_config\x18\x17 \x01(\x0b\x32).scalekit.v1.connections.StaticAuthConfigH\x00R\x0cstaticConfig\x12\xb1\x01\n\x0fwebauthn_config\x18\x18 \x01(\x0b\x32-.scalekit.v1.connections.WebAuthConfigurationBW\x92\x41T2RConfiguration details for WebAuthn (passkeys). Present only when type is WEBAUTHN.H\x00R\x0ewebauthnConfig\x12&\n\x06key_id\x18\x16 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xac\x02H\x01R\x05keyId\x88\x01\x01\x12u\n\x0cprovider_key\x18\x15 \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x1a\x43\n\x15\x41ttributeMappingEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01:\x8b\x02\xbaH\x87\x02\x1aT\x12$provider or provider_key is required\x1a,has(this.provider_key) || this.provider != 0\x1a`\x12\x1einvalid value for provider_key\x1a>this.provider == 15 ? this.provider_key in [\'SCALEKIT\'] : true\x1aM\x12\x18invalid value for key_id\x1a\x31this.type == 9 ? this.key_id == \'WEBAUTHN\' : trueB\n\n\x08settingsB\t\n\x07_key_idJ\x04\x08\x01\x10\x02J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06J\x04\x08\t\x10\x0bJ\x04\x08\x0c\x10\x0f\"\x80\x01\n\x18UpdateConnectionResponse\x12\x64\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\x1f\x92\x41\x1c\x32\x1aUpdated Connection detailsR\nconnection\"\x9c\x01\n\"DeleteEnvironmentConnectionRequest\x12v\n\rconnection_id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\xf5\x01\n\x17\x44\x65leteConnectionRequest\x12q\n\x0forganization_id\x18\x01 \x01(\tBH\x92\x41<2#Organization ID for the Connection.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\x61\n\x02id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\x92\x01\n\x1fGetEnvironmentConnectionRequest\x12o\n\rconnection_id\x18\x01 \x01(\tBJ\x92\x41>2$Unique identifier for the ConnectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\xfc\x02\n\x14GetConnectionRequest\x12\xba\x01\n\x0forganization_id\x18\x01 \x01(\tB\x90\x01\x92\x41\x83\x01\x32jOrganization identifier (required). Specifies which organization owns the connection you want to retrieve.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\xa0\x01\n\x02id\x18\x03 \x01(\tB\x8f\x01\x92\x41\x82\x01\x32hConnection identifier (required). Specifies which specific connection to retrieve from the organization.J\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\x9a\x02\n\x15GetConnectionResponse\x12\x80\x02\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\xba\x01\x92\x41\xb6\x01\x32\xb3\x01\x43omplete connection details including provider configuration, protocol settings, status, and all metadata. Contains everything needed to understand the connection\'s current state.R\nconnection\"\x96\x04\n\x16ListConnectionsRequest\x12\x80\x01\n\x0forganization_id\x18\x01 \x01(\tBR\x92\x41\x46\x32-Filter connections by organization identifierJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12\x7f\n\x06\x64omain\x18\x03 \x01(\tBb\x92\x41V2CFilter connections by email domain associated with the organizationJ\x0f\"hero-saas.app\"\xbaH\x06r\x04\x10\x01\x18 H\x01R\x06\x64omain\x88\x01\x01\x12\xc6\x01\n\x07include\x18\x04 \x01(\tB\xa6\x01\x92\x41\xa2\x01\x32\x9f\x01\x46ilter connections by status. Use \'all\' to include all connections regardless of status. Default behavior shows only active (completed and enabled) connectionsH\x02R\x07include\x88\x01\x01\x42\x12\n\x10_organization_idB\t\n\x07_domainB\n\n\x08_includeJ\x04\x08\x02\x10\x03\"\x9d\x01\n\x17ListConnectionsResponse\x12\x81\x01\n\x0b\x63onnections\x18\x01 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB6\x92\x41\x33\x32\x31List of connections matching the request criteriaR\x0b\x63onnections\"\xfa\x0b\n\x0eListConnection\x12Q\n\x02id\x18\x01 \x01(\tBA\x92\x41>2#Unique identifier of the connectionJ\x17\"conn_2123312131125533\"R\x02id\x12\x8d\x01\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderBD\x92\x41\x41\x32\x35Identity provider type (e.g., OKTA, Google, Azure AD)J\x08\"CUSTOM\"R\x08provider\x12x\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB;\x92\x41\x38\x32.Authentication protocol used by the connectionJ\x06\"OIDC\"R\x04type\x12\x88\x01\n\x06status\x18\x04 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusBE\x92\x41?2.Current configuration status of the connectionJ\r\"IN_PROGRESS\"\xe0\x41\x03R\x06status\x12g\n\x07\x65nabled\x18\x05 \x01(\x08\x42M\x92\x41J2AWhether the connection is currently active for organization usersJ\x05\x66\x61lseR\x07\x65nabled\x12\x85\x01\n\x0forganization_id\x18\x06 \x01(\tB\\\x92\x41Y2?Unique identifier of the organization that owns this connectionJ\x16\"org_2123312131125533\"R\x0eorganizationId\x12\x88\x01\n\x0fui_button_title\x18\x07 \x01(\tB`\x92\x41N2:Text displayed on the SSO login button for this connectionJ\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12t\n\x07\x64omains\x18\x08 \x03(\tBZ\x92\x41W2/List of domains configured with this connectionJ$[\"yourapp.com\", \"yourworkspace.com\"]R\x07\x64omains\x12q\n\x11organization_name\x18\t \x01(\tBD\x92\x41\x41\x32*Name of the organization of the connectionJ\x13\"Your Organization\"R\x10organizationName\x12u\n\x0cprovider_key\x18\n \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x12\x90\x01\n\x06key_id\x18\x0b \x01(\tBy\x92\x41v2[Alternative identifier for this connection, typically used in frontend applications or URLsJ\x17\"conn_2123312131125533\"R\x05keyId\x12\x90\x01\n\ncreated_at\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.TimestampBU\x92\x41@2&When this connection was first createdJ\x16\"2023-01-15T14:30:00Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\tcreatedAt\"\xcf\x02\n\"ListOrganizationConnectionsRequest\x12\x80\x01\n\tpage_size\x18\x01 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x02 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\x97\x02\n#ListOrganizationConnectionsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12&\n\x0fprev_page_token\x18\x03 \x01(\tR\rprevPageToken\x12\x80\x01\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB5\x92\x41\x32\x32\x30List of connections matching the filter criteriaR\x0b\x63onnections\"\xa2\x07\n$SearchOrganizationConnectionsRequest\x12l\n\x05query\x18\x01 \x01(\tBQ\x92\x41G2-Search query Connection ID or Organization IDJ\x16\"conn_121312434123312\"\xbaH\x04r\x02\x18\x64H\x00R\x05query\x88\x01\x01\x12@\n\x08provider\x18\x02 \x01(\tB\x1f\x92\x41\x1c\x32\x12\x46ilter by providerJ\x06\"OKTA\"H\x01R\x08provider\x88\x01\x01\x12}\n\x06status\x18\x03 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusB5\x92\x41*2\x1b\x46ilter by connection statusJ\x0b\"COMPLETED\"\xbaH\x05\x82\x01\x02\x10\x01H\x02R\x06status\x88\x01\x01\x12\x8c\x01\n\x0f\x63onnection_type\x18\x04 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB5\x92\x41*2\x1b\x46ilter by connection statusJ\x0b\"COMPLETED\"\xbaH\x05\x82\x01\x02\x10\x01H\x03R\x0e\x63onnectionType\x88\x01\x01\x12O\n\x07\x65nabled\x18\x07 \x01(\x08\x42\x30\x92\x41-2#Filter by connection enabled statusJ\x06\"true\"H\x04R\x07\x65nabled\x88\x01\x01\x12\x80\x01\n\tpage_size\x18\x05 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x06 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageTokenB\x08\n\x06_queryB\x0b\n\t_providerB\t\n\x07_statusB\x12\n\x10_connection_typeB\n\n\x08_enabled\"\x99\x02\n%SearchOrganizationConnectionsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12&\n\x0fprev_page_token\x18\x03 \x01(\tR\rprevPageToken\x12\x80\x01\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB5\x92\x41\x32\x32\x30List of connections matching the filter criteriaR\x0b\x63onnections\"\x9c\x01\n\"ToggleEnvironmentConnectionRequest\x12v\n\rconnection_id\x18\x02 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\x9e\x02\n\x17ToggleConnectionRequest\x12\x92\x01\n\x0forganization_id\x18\x01 \x01(\tBi\x92\x41]2DUnique identifier of the organization associated with the connectionJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12h\n\x02id\x18\x03 \x01(\tBX\x92\x41L22Unique identifier for the connection to be toggledJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\xbc\x02\n\x18ToggleConnectionResponse\x12\xa9\x01\n\x07\x65nabled\x18\x01 \x01(\x08\x42\x8e\x01\x92\x41\x8a\x01\x32\x81\x01\x43urrent state of the connection after the operation. True means the connection is now enabled and can be used for authentication.J\x04trueR\x07\x65nabled\x12\x62\n\rerror_message\x18\x02 \x01(\tB8\x92\x41\x35\x32$Error message if the operation failsJ\r\"placeholder\"H\x00R\x0c\x65rrorMessage\x88\x01\x01\x42\x10\n\x0e_error_message\"\xa0\x12\n\x14OIDCConnectionConfig\x12j\n\x06issuer\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB4\x92\x41\x31\x32\nIssuer URLJ#\"https://youridp.com/service/oauth\"R\x06issuer\x12\xaa\x01\n\x12\x64iscovery_endpoint\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB]\x92\x41Z2\x12\x44iscovery EndpointJD\"https://youridp.com/service/oauth/.well-known/openid-configuration\"R\x11\x64iscoveryEndpoint\x12\x84\x01\n\rauthorize_uri\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValueBA\x92\x41>2\rAuthorize URIJ-\"https://youridp.com/service/oauth/authorize\"R\x0c\x61uthorizeUri\x12t\n\ttoken_uri\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueB9\x92\x41\x36\x32\tToken URIJ)\"https://youridp.com/service/oauth/token\"R\x08tokenUri\x12\x82\x01\n\ruser_info_uri\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB@\x92\x41=2\rUser Info URIJ,\"https://youridp.com/service/oauth/userinfo\"R\x0buserInfoUri\x12p\n\x08jwks_uri\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValueB7\x92\x41\x34\x32\x08JWKS URIJ(\"https://youridp.com/service/oauth/jwks\"R\x07jwksUri\x12\\\n\tclient_id\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB!\x92\x41\x1e\x32\tClient IDJ\x11\"oauth_client_id\"R\x08\x63lientId\x12l\n\rclient_secret\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB)\x92\x41&2\rClient SecretJ\x15\"oauth_client_secret\"R\x0c\x63lientSecret\x12\x63\n\x06scopes\x18\n \x03(\x0e\x32\".scalekit.v1.connections.OIDCScopeB\'\x92\x41$2\x0bOIDC ScopesJ\x15[\"openid\", \"profile\"]R\x06scopes\x12r\n\x0ftoken_auth_type\x18\x0b \x01(\x0e\x32&.scalekit.v1.connections.TokenAuthTypeB\"\x92\x41\x1f\x32\x0fToken Auth TypeJ\x0c\"URL_PARAMS\"R\rtokenAuthType\x12j\n\x0credirect_uri\x18\x0c \x01(\tBG\x92\x41\x44\x32\x0cRedirect URIJ4\"https://yourapp.com/sso/v1/oidc/conn_1234/callback\"R\x0bredirectUri\x12V\n\x0cpkce_enabled\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x17\x92\x41\x14\x32\x0cPKCE EnabledJ\x04trueR\x0bpkceEnabled\x12h\n\x13idp_logout_required\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1c\x92\x41\x19\x32\x11\x45nable IDP logoutJ\x04trueR\x11idpLogoutRequired\x12\xb4\x01\n\x18post_logout_redirect_uri\x18\x0f \x01(\x0b\x32\x1c.google.protobuf.StringValueB]\x92\x41W2\x18post logout redirect uriJ;\"https://yourapp.com/sso/v1/oidc/conn_1234/logout/callback\"\xe0\x41\x03R\x15postLogoutRedirectUri\x12\xea\x01\n\x1f\x62\x61\x63kchannel_logout_redirect_uri\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x84\x01\x92\x41~2\"https://yourapp.com/sso/v1/oidc/conn_1234/backchannel-logout\"\xe0\x41\x03R\x1c\x62\x61\x63kchannelLogoutRedirectUri\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\x12\xba\x01\n!jit_provisioning_with_sso_enabled\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBT\x92\x41Q2IIndicates if Just In Time user provisioning is enabled for the connectionJ\x04trueR\x1djitProvisioningWithSsoEnabled\"\xce\x13\n\x15OAuthConnectionConfig\x12\x84\x01\n\rauthorize_uri\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValueBA\x92\x41>2\rAuthorize URIJ-\"https://youridp.com/service/oauth/authorize\"R\x0c\x61uthorizeUri\x12t\n\ttoken_uri\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueB9\x92\x41\x36\x32\tToken URIJ)\"https://youridp.com/service/oauth/token\"R\x08tokenUri\x12\x82\x01\n\ruser_info_uri\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB@\x92\x41=2\rUser Info URIJ,\"https://youridp.com/service/oauth/userinfo\"R\x0buserInfoUri\x12\\\n\tclient_id\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB!\x92\x41\x1e\x32\tClient IDJ\x11\"oauth_client_id\"R\x08\x63lientId\x12l\n\rclient_secret\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB)\x92\x41&2\rClient SecretJ\x15\"oauth_client_secret\"R\x0c\x63lientSecret\x12?\n\x06scopes\x18\n \x03(\tB\'\x92\x41$2\x0bOIDC ScopesJ\x15[\"openid\", \"profile\"]R\x06scopes\x12\x62\n\x0credirect_uri\x18\x0c \x01(\tB?\x92\x41<2\x0cRedirect URIJ,\"https://yourapp.com/service/oauth/redirect\"R\x0bredirectUri\x12V\n\x0cpkce_enabled\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x17\x92\x41\x14\x32\x0cPKCE EnabledJ\x04trueR\x0bpkceEnabled\x12V\n\x06prompt\x18\x0e \x01(\x0b\x32\x1c.google.protobuf.StringValueB \x92\x41\x1d\x32\x13Prompt for the userJ\x06\"none\"R\x06prompt\x12m\n\x12use_platform_creds\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueB#\x92\x41 2\x18Use Scalekit credentialsJ\x04trueR\x10usePlatformCreds\x12Z\n\x0b\x61\x63\x63\x65ss_type\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1b\x92\x41\x18\x32\x0b\x41\x63\x63\x65ss TypeJ\t\"offline\"R\naccessType\x12n\n\x11\x63ustom_scope_name\x18\x11 \x01(\x0b\x32\x1c.google.protobuf.StringValueB$\x92\x41!2\x11\x43ustom Scope NameJ\x0c\"user_scope\"R\x0f\x63ustomScopeName\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\x12k\n\x11token_access_type\x18\x13 \x01(\x0b\x32\x1c.google.protobuf.StringValueB!\x92\x41\x1e\x32\x11Token Access TypeJ\t\"offline\"R\x0ftokenAccessType\x12\x84\x02\n\ttenant_id\x18\x14 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\xc8\x01\x92\x41\xc4\x01\x32\x99\x01Microsoft Entra tenant ID. Required when using a single-tenant or multi-tenant app registered in Microsoft Entra. Leave empty to use the common endpoint.J&\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"R\x08tenantId\x12\xc7\x01\n\x07is_cimd\x18\x15 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x91\x01\x92\x41\x8a\x01\x32\x81\x01Indicates whether this connection was registered using Client ID Metadata Document (CIMD) instead of Dynamic Client Registration.J\x04true\xe0\x41\x03R\x06isCimd\x12\xbe\x01\n\x08\x61pp_name\x18\x16 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x84\x01\x92\x41\x80\x01\x32mApplication name used by providers that require it as an authorize query parameter (e.g., Trello\'s app_name).J\x0f\"My Trello App\"R\x07\x61ppName\x12\xfa\x01\n\x0foptional_scopes\x18\x17 \x01(\x0b\x32\'.scalekit.v1.connections.OptionalScopesB\xa2\x01\x92\x41\x9e\x01\x32\x9b\x01Optional scopes configuration for identity providers that support or require additional scopes to be sent in a custom field during authentication requests.H\x00R\x0eoptionalScopes\x88\x01\x01\x42\x12\n\x10_optional_scopes\"\xa6\x03\n\x0eOptionalScopes\x12v\n\x06scopes\x18\x01 \x03(\tB^\x92\x41[2CList of optional scopes that can be requested during authenticationJ\x14[\"scope1\", \"scope2\"]R\x06scopes\x12\x9b\x02\n\nfield_name\x18\x02 \x01(\tB\xfb\x01\x92\x41\xf7\x01\x32\xd5\x01Name of the field in which scope should be sent in the authentication request. This is required by some identity providers that expect scopes to be sent in a custom field instead of the standard \'scope\' parameter.J\x1d\"optional_scope or bot_scope\"R\tfieldName\"\xf4\x07\n\x12PasswordLessConfig\x12]\n\x04type\x18\x01 \x01(\x0e\x32).scalekit.v1.connections.PasswordlessTypeB\x1e\x92\x41\x1b\x32\x11Passwordless TypeJ\x06\"LINK\"R\x04type\x12W\n\tfrequency\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x16\x92\x41\x13\x32\x0eLink FrequencyJ\x01\x31H\x00R\tfrequency\x88\x01\x01\x12\x61\n\x08validity\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\"\x92\x41\x1f\x32\x18Link Validity in SecondsJ\x03\x36\x30\x30H\x01R\x08validity\x88\x01\x01\x12\x86\x01\n\x1b\x65nforce_same_browser_origin\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB&\x92\x41#2\x1b\x45nforce Same Browser OriginJ\x04trueH\x02R\x18\x65nforceSameBrowserOrigin\x88\x01\x01\x12t\n\x15\x63ode_challenge_length\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x1d\x92\x41\x1a\x32\x15\x43ode Challenge LengthJ\x01\x36H\x03R\x13\x63odeChallengeLength\x88\x01\x01\x12\x84\x01\n\x13\x63ode_challenge_type\x18\x06 \x01(\x0e\x32*.scalekit.v1.connections.CodeChallengeTypeB#\x92\x41 2\x13\x43ode Challenge TypeJ\t\"NUMERIC\"H\x04R\x11\x63odeChallengeType\x88\x01\x01\x12\x9d\x01\n-regenerate_passwordless_credentials_on_resend\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1a\x92\x41\x17\x32\x0fRegenerate the J\x04trueH\x05R)regeneratePasswordlessCredentialsOnResend\x88\x01\x01\x42\x0c\n\n_frequencyB\x0b\n\t_validityB\x1e\n\x1c_enforce_same_browser_originB\x18\n\x16_code_challenge_lengthB\x16\n\x14_code_challenge_typeB0\n._regenerate_passwordless_credentials_on_resend\"P\n\x10StaticAuthConfig\x12<\n\rstatic_config\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x0cstaticConfig\"\xc4\"\n\x14WebAuthConfiguration\x12@\n\x02rp\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connections.WebAuthConfiguration.RpR\x02rp\x12[\n\x0b\x61ttestation\x18\x02 \x01(\x0b\x32\x39.scalekit.v1.connections.WebAuthConfiguration.AttestationR\x0b\x61ttestation\x12\x64\n\x0e\x61uthenticators\x18\x03 \x01(\x0b\x32<.scalekit.v1.connections.WebAuthConfiguration.AuthenticatorsR\x0e\x61uthenticators\x12}\n\x17\x61uthenticator_selection\x18\x04 \x01(\x0b\x32\x44.scalekit.v1.connections.WebAuthConfiguration.AuthenticatorSelectionR\x16\x61uthenticatorSelection\x12O\n\x07timeout\x18\x05 \x01(\x0b\x32\x35.scalekit.v1.connections.WebAuthConfiguration.TimeoutR\x07timeout\x12\x64\n\x18\x65nable_auto_registration\x18\x06 \x01(\x08\x42*\x92\x41\'2%Enable auto registration for WebAuthnR\x16\x65nableAutoRegistration\x12X\n\x13show_passkey_button\x18\x07 \x01(\x08\x42(\x92\x41%2#Show passkey button on login screenR\x11showPasskeyButton\x12g\n\x18\x65nable_conditional_login\x18\x08 \x01(\x08\x42-\x92\x41*2(Allow autofill of passkeys in login pageR\x16\x65nableConditionalLogin\x1aH\n\x02Rp\x12\x1c\n\x03ids\x18\x01 \x03(\tB\n\xbaH\x07\x92\x01\x04\x08\x01\x10\nR\x03ids\x12$\n\x07origins\x18\x02 \x03(\tB\n\xbaH\x07\x92\x01\x04\x08\x01\x10\nR\x07origins\x1a\xc1\x01\n\x0b\x41ttestation\x12p\n\x15\x63onveyance_preference\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1d\xbaH\x1ar\x18R\x04noneR\x08indirectR\x06\x64irectR\x14\x63onveyancePreference\x12@\n\x17\x65nterprise_approved_ids\x18\x02 \x03(\tB\x08\xbaH\x05\x92\x01\x02\x10\x32R\x15\x65nterpriseApprovedIds\x1a\xf0\x13\n\x0e\x41uthenticators\x12\xdb\x02\n\x0evalidate_entry\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x97\x02\x92\x41\x93\x02\x1a\x1a.google.protobuf.BoolValue2\xf4\x01requires that the provided metadata has an entry for the given authenticator to be considered valid. By default an AAGUID which has a zero value should fail validation if validate_entry_permit_zero_aaguid is not provided with the value of true.R\rvalidateEntry\x12\x8f\x02\n!validate_entry_permit_zero_aaguid\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xa8\x01\x92\x41\xa4\x01\x32\xa1\x01is an option that permits a zero\'d AAGUID from an attestation statement to automatically pass metadata validations. Generally helpful to use with validate_entry.R\x1dvalidateEntryPermitZeroAaguid\x12\xc6\x01\n\x10validate_anchors\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x7f\x92\x41|2zwhen set to true enables the validation of the attestation statement against the trust anchor from the metadata statement.R\x0fvalidateAnchors\x12\xbe\x01\n\x0fvalidate_status\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBy\x92\x41v2twhen set to true enables the validation of the attestation statements AAGUID against the desired and undesired listsR\x0evalidateStatus\x12\xe1\x01\n\x19validate_attestation_type\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x88\x01\x92\x41\x84\x01\x32\x81\x01when set to true enables the validation of the attestation statements type against the known types the authenticator can produce.R\x17validateAttestationType\x12\xbb\x04\n\x1c\x64\x65sired_authenticator_status\x18\x06 \x03(\tB\xf8\x03\x92\x41\x9d\x01\x32\x96\x01provides the list of statuses which are considered undesirable for status report validation purposes. Should be used with validate_status set to true.:\x02[]\xbaH\xd3\x02\x92\x01\xcf\x02\x10\n\"\xca\x02r\xc7\x02R\x12NOT_FIDO_CERTIFIEDR\x0e\x46IDO_CERTIFIEDR\x18USER_VERIFICATION_BYPASSR\x1a\x41TTESTATION_KEY_COMPROMISER\x1aUSER_KEY_REMOTE_COMPROMISER\x1cUSER_KEY_PHYSICAL_COMPROMISER\x10UPDATE_AVAILABLER\x07REVOKEDR\x18SELF_ASSERTION_SUBMITTEDR\x11\x46IDO_CERTIFIED_L1R\x15\x46IDO_CERTIFIED_L1plusR\x11\x46IDO_CERTIFIED_L2R\x15\x46IDO_CERTIFIED_L2plusR\x11\x46IDO_CERTIFIED_L3R\x15\x46IDO_CERTIFIED_L3plusR\x1a\x64\x65siredAuthenticatorStatus\x12\xc1\x05\n\x1eundesired_authenticator_status\x18\x07 \x03(\tB\xfa\x04\x92\x41\x9f\x02\x32\x96\x01provides the list of statuses which are considered undesirable for status report validation purposes. Should be used with validate_status set to true.:\x83\x01[\'ATTESTATION_KEY_COMPROMISE\', \'USER_VERIFICATION_BYPASS\', \'USER_KEY_REMOTE_COMPROMISE\', \'USER_KEY_PHYSICAL_COMPROMISE\', \'REVOKED\']\xbaH\xd3\x02\x92\x01\xcf\x02\x10\n\"\xca\x02r\xc7\x02R\x12NOT_FIDO_CERTIFIEDR\x0e\x46IDO_CERTIFIEDR\x18USER_VERIFICATION_BYPASSR\x1a\x41TTESTATION_KEY_COMPROMISER\x1aUSER_KEY_REMOTE_COMPROMISER\x1cUSER_KEY_PHYSICAL_COMPROMISER\x10UPDATE_AVAILABLER\x07REVOKEDR\x18SELF_ASSERTION_SUBMITTEDR\x11\x46IDO_CERTIFIED_L1R\x15\x46IDO_CERTIFIED_L1plusR\x11\x46IDO_CERTIFIED_L2R\x15\x46IDO_CERTIFIED_L2plusR\x11\x46IDO_CERTIFIED_L3R\x15\x46IDO_CERTIFIED_L3plusR\x1cundesiredAuthenticatorStatus\x1a\x86\x02\n\x16\x41uthenticatorSelection\x12r\n\x11user_verification\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\'\xbaH$r\"R\x08requiredR\tpreferredR\x0b\x64iscouragedR\x10userVerification\x12x\n\x18\x61uthenticator_attachment\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1f\xbaH\x1cr\x1aR\x08platformR\x0e\x63ross-platformR\x17\x61uthenticatorAttachment\x1a\xa3\x04\n\x07Timeout\x12x\n\x0cregistration\x18\x01 \x01(\x0b\x32\x19.google.protobuf.DurationB9\x92\x41\'2\x1dRegistration timeout duration:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x0cregistration\x12\xa5\x01\n\x10registration_uvd\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationB_\x92\x41M2CRegistration timeout duration when user verification is discouraged:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x0fregistrationUvd\x12\x63\n\x05login\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationB2\x92\x41 2\x16Login timeout duration:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x05login\x12\x90\x01\n\tlogin_uvd\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationBX\x92\x41\x46\x322\x0fSP Metadata URLJ+\"https://youridp.com/service/saml/metadata\"R\rspMetadataUrl\x12\x8a\x01\n\x10idp_metadata_url\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueBB\x92\x41?2\x10IDP Metadata URLJ+\"https://youridp.com/service/saml/metadata\"R\x0eidpMetadataUrl\x12x\n\ridp_entity_id\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB6\x92\x41\x33\x32\rIDP Entity IDJ\"\"https://youridp.com/service/saml\"R\x0bidpEntityId\x12v\n\x0bidp_sso_url\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValueB8\x92\x41\x35\x32\x0bIDP SSO URLJ&\"https://youridp.com/service/saml/sso\"R\tidpSsoUrl\x12i\n\x10idp_certificates\x18\x07 \x03(\x0b\x32\'.scalekit.v1.connections.IDPCertificateB\x15\x92\x41\x12\x32\x10IDP CertificatesR\x0fidpCertificates\x12v\n\x0bidp_slo_url\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB8\x92\x41\x35\x32\x0bIDP SLO URLJ&\"https://youridp.com/service/saml/slo\"R\tidpSloUrl\x12l\n\x0fui_button_title\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB&\x92\x41#2\x0fUI Button TitleJ\x10\"Login with SSO\"R\ruiButtonTitle\x12t\n\x12idp_name_id_format\x18\n \x01(\x0e\x32%.scalekit.v1.connections.NameIdFormatB \x92\x41\x1d\x32\x12IDP Name ID FormatJ\x07\"EMAIL\"R\x0fidpNameIdFormat\x12\x89\x01\n\x17idp_sso_request_binding\x18\x0b \x01(\x0e\x32\'.scalekit.v1.connections.RequestBindingB)\x92\x41&2\x17IDP SSO Request BindingJ\x0b\"HTTP_POST\"R\x14idpSsoRequestBinding\x12\x89\x01\n\x17idp_slo_request_binding\x18\x0c \x01(\x0e\x32\'.scalekit.v1.connections.RequestBindingB)\x92\x41&2\x17IDP SLO Request BindingJ\x0b\"HTTP_POST\"R\x14idpSloRequestBinding\x12\x93\x01\n\x13saml_signing_option\x18\r \x01(\x0e\x32+.scalekit.v1.connections.SAMLSigningOptionsB6\x92\x41\x33\x32\x13SAML Signing OptionJ\x1c\"SAML_ONLY_RESPONSE_SIGNING\"R\x11samlSigningOption\x12{\n\x19\x61llow_idp_initiated_login\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueB$\x92\x41!2\x19\x41llow IDP Initiated LoginJ\x04trueR\x16\x61llowIdpInitiatedLogin\x12S\n\x0b\x66orce_authn\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x16\x92\x41\x13\x32\x0b\x46orce AuthnJ\x04trueR\nforceAuthn\x12\x96\x01\n\x14\x64\x65\x66\x61ult_redirect_uri\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueBF\x92\x41\x43\x32\x14\x44\x65\x66\x61ult Redirect URIJ+\"https://yourapp.com/service/saml/redirect\"R\x12\x64\x65\x66\x61ultRedirectUri\x12k\n\x13\x61ssertion_encrypted\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1e\x92\x41\x1b\x32\x13\x41ssertion EncryptedJ\x04trueR\x12\x61ssertionEncrypted\x12j\n\x13want_request_signed\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1e\x92\x41\x1b\x32\x13Want Request SignedJ\x04trueR\x11wantRequestSigned\x12q\n\x0e\x63\x65rtificate_id\x18\x13 \x01(\x0b\x32\x1c.google.protobuf.StringValueB,\x92\x41)2\x0e\x43\x65rtificate IDJ\x17\"cer_35585423166144613\"R\rcertificateId\x12\x62\n\x10idp_slo_required\x18\x14 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1c\x92\x41\x19\x32\x11\x45nable IDP logoutJ\x04trueR\x0eidpSloRequired\x12\x96\x01\n\nsp_slo_url\x18\x15 \x01(\x0b\x32\x1c.google.protobuf.StringValueBZ\x92\x41T2\x18Service Provider SLO urlJ8\"https://yourapp.com/sso/v1/saml/conn_1234/slo/callback\"\xe0\x41\x03R\x08spSloUrl\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x16 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\x12\xba\x01\n!jit_provisioning_with_sso_enabled\x18\x17 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBT\x92\x41Q2IIndicates if Just In Time user provisioning is enabled for the connectionJ\x04trueR\x1djitProvisioningWithSsoEnabled\"\xbf\x03\n\x0eIDPCertificate\x12\x36\n\x0b\x63\x65rtificate\x18\x01 \x01(\tB\x14\x92\x41\x11\x32\x0fIDP CertificateR\x0b\x63\x65rtificate\x12s\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB6\x92\x41\x33\x32\x19\x43\x65rtificate Creation TimeJ\x16\"2021-09-01T00:00:00Z\"R\ncreateTime\x12q\n\x0b\x65xpiry_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB4\x92\x41\x31\x32\x17\x43\x65rtificate Expiry TimeJ\x16\"2021-09-01T00:00:00Z\"R\nexpiryTime\x12\x38\n\x02id\x18\x04 \x01(\tB(\x92\x41%2\x0e\x43\x65rtificate IDJ\x13\"cert_123123123123\"R\x02id\x12S\n\x06issuer\x18\x05 \x01(\tB;\x92\x41\x38\x32\x12\x43\x65rtificate IssuerJ\"\"https://youridp.com/service/saml\"R\x06issuer\"b\n\x16GetOIDCMetadataRequest\x12H\n\x08metadata\x18\x01 \x01(\x0b\x32,.scalekit.v1.connections.OIDCMetadataRequestR\x08metadata\"9\n\x13OIDCMetadataRequest\x12\"\n\x06issuer\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x06issuer\"\xd7\x01\n\x17GetOIDCMetadataResponse\x12\x16\n\x06issuer\x18\x01 \x01(\tR\x06issuer\x12\x35\n\x16\x61uthorization_endpoint\x18\x02 \x01(\tR\x15\x61uthorizationEndpoint\x12%\n\x0etoken_endpoint\x18\x03 \x01(\tR\rtokenEndpoint\x12+\n\x11userinfo_endpoint\x18\x04 \x01(\tR\x10userinfoEndpoint\x12\x19\n\x08jwks_uri\x18\x05 \x01(\tR\x07jwksUri\"b\n\x16GetSAMLMetadataRequest\x12H\n\x08metadata\x18\x01 \x01(\x0b\x32,.scalekit.v1.connections.SAMLMetadataRequestR\x08metadata\"D\n\x13SAMLMetadataRequest\x12-\n\x0cmetadata_url\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0bmetadataUrl\"\xb4\x02\n\x17GetSAMLMetadataResponse\x12\"\n\ridp_entity_id\x18\x01 \x01(\tR\x0bidpEntityId\x12\x1e\n\x0bidp_sso_url\x18\x02 \x01(\tR\tidpSsoUrl\x12\x1e\n\x0bidp_slo_url\x18\x03 \x01(\tR\tidpSloUrl\x12)\n\x10idp_certificates\x18\x04 \x03(\tR\x0fidpCertificates\x12+\n\x12idp_name_id_format\x18\x05 \x01(\tR\x0fidpNameIdFormat\x12\'\n\x0frequest_binding\x18\x06 \x01(\tR\x0erequestBinding\x12\x34\n\x16want_assertions_signed\x18\x07 \x01(\x08R\x14wantAssertionsSigned\"u\n GetSAMLCertificateDetailsRequest\x12Q\n\x0b\x63\x65rtificate\x18\x01 \x01(\x0b\x32/.scalekit.v1.connections.SAMLCertificateRequestR\x0b\x63\x65rtificate\"5\n\x16SAMLCertificateRequest\x12\x1b\n\x04text\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04text\"\xa5\x01\n!GetSAMLCertificateDetailsResponse\x12\x12\n\x04text\x18\x01 \x01(\tR\x04text\x12\x1b\n\tnot_after\x18\x02 \x01(\x03R\x08notAfter\x12\x1d\n\nnot_before\x18\x03 \x01(\x03R\tnotBefore\x12\x18\n\x07subject\x18\x04 \x01(\tR\x07subject\x12\x16\n\x06issuer\x18\x05 \x01(\tR\x06issuer\"\x86\x01\n\x1eGetConnectionTestResultRequest\x12,\n\rconnection_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0c\x63onnectionId\x12\x36\n\x0ftest_request_id\x18\x02 \x01(\tB\x0e\xbaH\x0br\t\x10\x01:\x05test_R\rtestRequestId\"\xbd\x02\n\x1fGetConnectionTestResultResponse\x12\x41\n\x06status\x18\x01 \x01(\x0e\x32).scalekit.v1.connections.TestResultStatusR\x06status\x12 \n\tuser_info\x18\x02 \x01(\tH\x00R\x08userInfo\x88\x01\x01\x12\x19\n\x05\x65rror\x18\x03 \x01(\tH\x01R\x05\x65rror\x88\x01\x01\x12\x30\n\x11\x65rror_description\x18\x04 \x01(\tH\x02R\x10\x65rrorDescription\x88\x01\x01\x12(\n\rerror_details\x18\x05 \x01(\tH\x03R\x0c\x65rrorDetails\x88\x01\x01\x42\x0c\n\n_user_infoB\x08\n\x06_errorB\x14\n\x12_error_descriptionB\x10\n\x0e_error_details\"\x1a\n\x18PasswordConnectionConfig\"9\n\x05\x46lags\x12\x19\n\x08is_login\x18\x01 \x01(\x08R\x07isLogin\x12\x15\n\x06is_app\x18\x02 \x01(\x08R\x05isApp\"\xaa\x03\n\x19ListAppConnectionsRequest\x12\x80\x01\n\tpage_size\x18\x01 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x02 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\x12U\n\x08provider\x18\x03 \x01(\tB4\x92\x41(2\x1e\x46ilter connections by providerJ\x06\"OKTA\"\xbaH\x06r\x04\x10\x01\x18\x32H\x00R\x08provider\x88\x01\x01\x42\x0b\n\t_provider\"\xea\x03\n\x1aListAppConnectionsResponse\x12\x81\x01\n\x0b\x63onnections\x18\x01 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB6\x92\x41\x33\x32\x31List of connections matching the request criteriaR\x0b\x63onnections\x12o\n\x0fnext_page_token\x18\x02 \x01(\tBG\x92\x41\x44\x32\"Token for the next page of resultsJ\x1e\"eyJwYWdlIjoyLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12s\n\x0fprev_page_token\x18\x03 \x01(\tBK\x92\x41H2&Token for the previous page of resultsJ\x1e\"eyJwYWdlIjoyLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12\x62\n\ntotal_size\x18\x04 \x01(\rBC\x92\x41@29Total number of connections matching the request criteriaJ\x03\x31\x30\x30R\ttotalSize\"\x8b\x01\n\x1bGetConnectionContextRequest\x12\x38\n\rconnection_id\x18\x01 \x01(\tB\x13\xbaH\x10r\x0b\x10\x01\x18 :\x05\x63onn_\xc8\x01\x01R\x0c\x63onnectionId\x12\x32\n\x0forganization_id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\"Q\n\x1cGetConnectionContextResponse\x12\x31\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext\"\xc1\x01\n\x1eUpdateConnectionContextRequest\x12\x38\n\rconnection_id\x18\x01 \x01(\tB\x13\xbaH\x10r\x0b\x10\x01\x18 :\x05\x63onn_\xc8\x01\x01R\x0c\x63onnectionId\x12\x32\n\x0forganization_id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x31\n\x07\x63ontext\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext*W\n\x11\x43odeChallengeType\x12#\n\x1f\x43ODE_CHALLENGE_TYPE_UNSPECIFIED\x10\x00\x12\x0b\n\x07NUMERIC\x10\x01\x12\x10\n\x0c\x41LPHANUMERIC\x10\x02*R\n\x11\x43onfigurationType\x12\"\n\x1e\x43ONFIGURATION_TYPE_UNSPECIFIED\x10\x00\x12\r\n\tDISCOVERY\x10\x01\x12\n\n\x06MANUAL\x10\x02*a\n\x0cNameIdFormat\x12\x16\n\x12NAME_ID_FORMAT_NIL\x10\x00\x12\x0f\n\x0bUNSPECIFIED\x10\x01\x12\t\n\x05\x45MAIL\x10\x02\x12\r\n\tTRANSIENT\x10\x03\x12\x0e\n\nPERSISTENT\x10\x04*U\n\x10PasswordlessType\x12 \n\x1cPasswordlessType_UNSPECIFIED\x10\x00\x12\x08\n\x04LINK\x10\x01\x12\x07\n\x03OTP\x10\x02\x12\x0c\n\x08LINK_OTP\x10\x03*9\n\x10TestResultStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0b\n\x07SUCCESS\x10\x01\x12\x0b\n\x07\x46\x41ILURE\x10\x02*\xd8\x01\n\x12SAMLSigningOptions\x12$\n SAML_SIGNING_OPTIONS_UNSPECIFIED\x10\x00\x12\x0e\n\nNO_SIGNING\x10\x01\x12\x1e\n\x1aSAML_ONLY_RESPONSE_SIGNING\x10\x02\x12\x1f\n\x1bSAML_ONLY_ASSERTION_SIGNING\x10\x03\x12#\n\x1fSAML_RESPONSE_ASSERTION_SIGNING\x10\x04\x12&\n\"SAML_RESPONSE_OR_ASSERTION_SIGNING\x10\x05*S\n\x0eRequestBinding\x12\x1f\n\x1bREQUEST_BINDING_UNSPECIFIED\x10\x00\x12\r\n\tHTTP_POST\x10\x01\x12\x11\n\rHTTP_REDIRECT\x10\x02*P\n\rTokenAuthType\x12\x1f\n\x1bTOKEN_AUTH_TYPE_UNSPECIFIED\x10\x00\x12\x0e\n\nURL_PARAMS\x10\x01\x12\x0e\n\nBASIC_AUTH\x10\x02*c\n\tOIDCScope\x12\x1a\n\x16OIDC_SCOPE_UNSPECIFIED\x10\x00\x12\n\n\x06openid\x10\x01\x12\x0b\n\x07profile\x10\x02\x12\t\n\x05\x65mail\x10\x03\x12\x0b\n\x07\x61\x64\x64ress\x10\x04\x12\t\n\x05phone\x10\x05*\xb0\x01\n\x0e\x43onnectionType\x12\x0b\n\x07INVALID\x10\x00\x12\x08\n\x04OIDC\x10\x01\x12\x08\n\x04SAML\x10\x02\x12\x0c\n\x08PASSWORD\x10\x03\x12\t\n\x05OAUTH\x10\x04\x12\x10\n\x0cPASSWORDLESS\x10\x05\x12\t\n\x05\x42\x41SIC\x10\x06\x12\n\n\x06\x42\x45\x41RER\x10\x07\x12\x0b\n\x07\x41PI_KEY\x10\x08\x12\x0c\n\x08WEBAUTHN\x10\t\x12\r\n\tOAUTH_M2M\x10\n\x12\x11\n\rTRELLO_OAUTH1\x10\x0b*`\n\x10\x43onnectionStatus\x12!\n\x1d\x43ONNECTION_STATUS_UNSPECIFIED\x10\x00\x12\t\n\x05\x44RAFT\x10\x01\x12\x0f\n\x0bIN_PROGRESS\x10\x02\x12\r\n\tCOMPLETED\x10\x03*\x98\x02\n\x12\x43onnectionProvider\x12#\n\x1f\x43ONNECTION_PROVIDER_UNSPECIFIED\x10\x00\x12\x08\n\x04OKTA\x10\x01\x12\n\n\x06GOOGLE\x10\x02\x12\x10\n\x0cMICROSOFT_AD\x10\x03\x12\t\n\x05\x41UTH0\x10\x04\x12\x0c\n\x08ONELOGIN\x10\x05\x12\x11\n\rPING_IDENTITY\x10\x06\x12\r\n\tJUMPCLOUD\x10\x07\x12\n\n\x06\x43USTOM\x10\x08\x12\n\n\x06GITHUB\x10\t\x12\n\n\x06GITLAB\x10\n\x12\x0c\n\x08LINKEDIN\x10\x0b\x12\x0e\n\nSALESFORCE\x10\x0c\x12\r\n\tMICROSOFT\x10\r\x12\x11\n\rIDP_SIMULATOR\x10\x0e\x12\x0c\n\x08SCALEKIT\x10\x0f\x12\x08\n\x04\x41\x44\x46S\x10\x10\x32\x92G\n\x11\x43onnectionService\x12\x91\x03\n\x1b\x43reateEnvironmentConnection\x12;.scalekit.v1.connections.CreateEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\"\x81\x02\x92\x41\xc1\x01\n\x0b\x43onnections\x12\x17\x43reate a new connection\x1a\x38\x45stablish a new connection for the specified environmentJ_\n\x03\x32\x30\x31\x12X\n\x1f\x43onnection created successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\"\x13/api/v1/connections:\nconnection\x12\xb3\x03\n\x10\x43reateConnection\x12\x30.scalekit.v1.connections.CreateConnectionRequest\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\"\xb9\x02\x92\x41\xc6\x01\n\x0b\x43onnections\x12\x17\x43reate a new connection\x1a=Establish a new SSO connection for the specified organizationJ_\n\x03\x32\x30\x31\x12X\n\x1f\x43onnection created successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x41\"3/api/v1/organizations/{organization_id}/connections:\nconnection\x12\xcd\x04\n\x19\x41ssignDomainsToConnection\x12\x39.scalekit.v1.connections.AssignDomainsToConnectionRequest\x1a:.scalekit.v1.connections.AssignDomainsToConnectionResponse\"\xb8\x03\x92\x41\xb6\x02\n\x0b\x43onnections\x12\x1e\x41ssign domains to a connection\x1a\x9e\x01\x41ssigns one or more domains to a specific connection within an organization. This allows the connection to be used for authentication on the specified domainsJf\n\x03\x32\x30\x30\x12_\n\x1d\x44omains assigned successfully\x12>\n<\x1a:.scalekit.v1.connections.AssignDomainsToConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02P\x1aK/api/v1/organizations/{organization_id}/connections/{connection_id}/domains:\x01*\x12\xb3\x03\n\x18GetEnvironmentConnection\x12\x38.scalekit.v1.connections.GetEnvironmentConnectionRequest\x1a..scalekit.v1.connections.GetConnectionResponse\"\xac\x02\x92\x41\xe7\x01\n\x0b\x43onnections\x12\x1bRetrieve connection details\x1aSObtain detailed information about a specific connection using its unique identifierJf\n\x03\x32\x30\x30\x12_\n)Successfully retrieved connection details\x12\x32\n0\x1a..scalekit.v1.connections.GetConnectionResponse\x82\xb5\x18\x03\x18\xc4\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\x12#/api/v1/connections/{connection_id}\x12\xcf\x04\n\rGetConnection\x12-.scalekit.v1.connections.GetConnectionRequest\x1a..scalekit.v1.connections.GetConnectionResponse\"\xde\x03\x92\x41\x81\x03\n\x0b\x43onnections\x12\x16Get connection details\x1a\xd1\x01Retrieves the complete configuration and status details for a specific connection by its ID within an organization. Returns all connection properties including provider settings, protocols, and current status.J\x85\x01\n\x03\x32\x30\x30\x12~\nHSuccessfully retrieved connection details for the specified organization\x12\x32\n0\x1a..scalekit.v1.connections.GetConnectionResponse\x82\xb5\x18\x15\n\x10\x63onnections_read\x18\xf4\x01\x82\xd3\xe4\x93\x02:\x12\x38/api/v1/organizations/{organization_id}/connections/{id}\x12\xe4\x02\n\x0fListConnections\x12/.scalekit.v1.connections.ListConnectionsRequest\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\"\xed\x01\x92\x41\xb6\x01\n\x0b\x43onnections\x12\x10List connections\x1a\x32Retrieves a list of connections in the environmentJa\n\x03\x32\x30\x30\x12Z\n\"Successfully retrieved connections\x12\x34\n2\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\x82\xb5\x18\x14\n\x10\x63onnections_read\x18t\x82\xd3\xe4\x93\x02\x15\x12\x13/api/v1/connections\x12\xb5\x03\n\x1bListOrganizationConnections\x12;.scalekit.v1.connections.ListOrganizationConnectionsRequest\x1a<.scalekit.v1.connections.ListOrganizationConnectionsResponse\"\x9a\x02\x92\x41\xd6\x01\n\x0b\x43onnections\x12\x1dList organization connections\x1a\x39Retrieves a list of connections for all the organizationsJm\n\x03\x32\x30\x30\x12\x66\n\"Successfully retrieved connections\x12@\n>\x1a<.scalekit.v1.connections.ListOrganizationConnectionsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\x12#/api/v1/organizations/-/connections\x12\xcd\x03\n\x1dSearchOrganizationConnections\x12=.scalekit.v1.connections.SearchOrganizationConnectionsRequest\x1a>.scalekit.v1.connections.SearchOrganizationConnectionsResponse\"\xac\x02\x92\x41\xe1\x01\n\x0b\x43onnections\x12\x1fSearch organization connections\x1a\x44Search with query or filters provided and return list of connectionsJk\n\x03\x32\x30\x30\x12\x64\n\x1eSuccessfully found connections\x12\x42\n@\x1a>.scalekit.v1.connections.SearchOrganizationConnectionsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02,\x12*/api/v1/organizations/-/connections:search\x12\xf1\x02\n\x1bUpdateEnvironmentConnection\x12;.scalekit.v1.connections.UpdateEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\"\xe1\x01\x92\x41\x91\x01\n\x0b\x43onnections\x12\x13Update a connection\x1a\x17Update a SSO ConnectionJT\n\x03\x32\x30\x30\x12M\n\x14Updated Successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\x32#/api/v1/connections/{connection_id}:\nconnection\x12\x94\x03\n\x10UpdateConnection\x12\x30.scalekit.v1.connections.UpdateConnectionRequest\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\"\x9a\x02\x92\x41\xa2\x01\n\x0b\x43onnections\x12$Update a connection for organization\x1a\x17Update a SSO ConnectionJT\n\x03\x32\x30\x30\x12M\n\x14Updated Successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x46\x32\x38/api/v1/organizations/{organization_id}/connections/{id}:\nconnection\x12\x92\x02\n\x1b\x44\x65leteEnvironmentConnection\x12;.scalekit.v1.connections.DeleteEnvironmentConnectionRequest\x1a\x16.google.protobuf.Empty\"\x9d\x01\x92\x41Z\n\x0b\x43onnections\x12\x13\x44\x65lete a connection\x1a\x17\x44\x65lete a SSO ConnectionJ\x1d\n\x03\x32\x30\x30\x12\x16\n\x14\x44\x65leted Successfully\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%*#/api/v1/connections/{connection_id}\x12\xf7\x03\n\x10\x44\x65leteConnection\x12\x30.scalekit.v1.connections.DeleteConnectionRequest\x1a\x16.google.protobuf.Empty\"\x98\x03\x92\x41\xce\x02\n\x0b\x43onnections\x12\x15\x44\x65lete SSO connection\x1a\xf9\x01\x44\x65letes an SSO connection from the specified organization by connection ID. Use this endpoint when an identity provider integration is no longer needed for the organization. Returns an empty response after the SSO connection is deleted successfully.J,\n\x03\x32\x30\x30\x12%\n#SSO connection deleted successfully\x82\xb5\x18\x02\x18\x64\x82\xd3\xe4\x93\x02:*8/api/v1/organizations/{organization_id}/connections/{id}\x12\xdf\x02\n\x1b\x45nableEnvironmentConnection\x12;.scalekit.v1.connections.ToggleEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xcf\x01\x92\x41\x84\x01\n\x0b\x43onnections\x12\x13\x45nable a connection\x1a\x17\x45nable a SSO ConnectionJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02,2*/api/v1/connections/{connection_id}:enable\x12\xd4\x04\n\x10\x45nableConnection\x12\x30.scalekit.v1.connections.ToggleConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xda\x03\x92\x41\xf6\x02\n\x0b\x43onnections\x12\x15\x45nable SSO connection\x1a\xee\x01\x41\x63tivate an existing connection for the specified organization. When enabled, users can authenticate using this connection. This endpoint changes the connection state from disabled to enabled without modifying other configuration settingsJ_\n\x03\x32\x30\x30\x12X\n\x1f\x43onnection enabled successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\x82\xd3\xe4\x93\x02\x41\x32?/api/v1/organizations/{organization_id}/connections/{id}:enable\x12\xe3\x02\n\x1c\x44isableEnvironmentConnection\x12;.scalekit.v1.connections.ToggleEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xd2\x01\x92\x41\x86\x01\n\x0b\x43onnections\x12\x14\x44isable a connection\x1a\x18\x44isable a SSO ConnectionJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02-2+/api/v1/connections/{connection_id}:disable\x12\xde\x04\n\x11\x44isableConnection\x12\x30.scalekit.v1.connections.ToggleConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xe3\x03\x92\x41\xfe\x02\n\x0b\x43onnections\x12\x16\x44isable SSO connection\x1a\xf4\x01\x44\x65\x61\x63tivate an existing connection for the specified organization. When disabled, users cannot authenticate using this connection. This endpoint changes the connection state from enabled to disabled without modifying other configuration settingsJ`\n\x03\x32\x30\x30\x12Y\n Connection disabled successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\x82\xd3\xe4\x93\x02\x42\x32@/api/v1/organizations/{organization_id}/connections/{id}:disable\x12\x80\x03\n\x17GetConnectionTestResult\x12\x37.scalekit.v1.connections.GetConnectionTestResultRequest\x1a\x38.scalekit.v1.connections.GetConnectionTestResultResponse\"\xf1\x01\x92\x41\x8d\x01\n\x0b\x43onnections\x12\x16Test connection result\x1a\x16\x43onnection test resultJN\n\x03\x32\x30\x30\x12G\n\x07Success\x12<\n:\x1a\x38.scalekit.v1.connections.GetConnectionTestResultResponse\x82\xb5\x18\x02\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x45\x12\x43/api/v1/connections/{connection_id}/test-requests/{test_request_id}\x12\xf6\x02\n\x12ListAppConnections\x12\x32.scalekit.v1.connections.ListAppConnectionsRequest\x1a\x33.scalekit.v1.connections.ListAppConnectionsResponse\"\xf6\x01\x92\x41\xbe\x01\n\x0b\x43onnections\x12\x14List App connections\x1a\x36Retrieves a list of app connections in the environmentJa\n\x03\x32\x30\x30\x12Z\n\"Successfully retrieved connections\x12\x34\n2\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\x12\x17/api/v1/connections/app\x12\xd1\x03\n\x14GetConnectionContext\x12\x34.scalekit.v1.connections.GetConnectionContextRequest\x1a\x35.scalekit.v1.connections.GetConnectionContextResponse\"\xcb\x02\x92\x41\xad\x01\n\x0b\x43onnections\x12\x16Get connection context\x1a\n<\032:.scalekit.v1.connections.AssignDomainsToConnectionResponse\202\265\030\025\n\021connections_write\030t\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002P\032K/api/v1/organizations/{organization_id}/connections/{connection_id}/domains:\001*' _globals['_CONNECTIONSERVICE'].methods_by_name['GetEnvironmentConnection']._loaded_options = None - _globals['_CONNECTIONSERVICE'].methods_by_name['GetEnvironmentConnection']._serialized_options = b'\222A\347\001\n\013Connections\022\033Retrieve connection details\032SObtain detailed information about a specific connection using its unique identifierJf\n\003200\022_\n)Successfully retrieved connection details\0222\n0\032..scalekit.v1.connections.GetConnectionResponse\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002%\022#/api/v1/connections/{connection_id}' + _globals['_CONNECTIONSERVICE'].methods_by_name['GetEnvironmentConnection']._serialized_options = b'\222A\347\001\n\013Connections\022\033Retrieve connection details\032SObtain detailed information about a specific connection using its unique identifierJf\n\003200\022_\n)Successfully retrieved connection details\0222\n0\032..scalekit.v1.connections.GetConnectionResponse\202\265\030\003\030\304\001\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002%\022#/api/v1/connections/{connection_id}' _globals['_CONNECTIONSERVICE'].methods_by_name['GetConnection']._loaded_options = None - _globals['_CONNECTIONSERVICE'].methods_by_name['GetConnection']._serialized_options = b'\222A\201\003\n\013Connections\022\026Get connection details\032\321\001Retrieves the complete configuration and status details for a specific connection by its ID within an organization. Returns all connection properties including provider settings, protocols, and current status.J\205\001\n\003200\022~\nHSuccessfully retrieved connection details for the specified organization\0222\n0\032..scalekit.v1.connections.GetConnectionResponse\202\265\030\024\n\020connections_read\030t\202\323\344\223\002:\0228/api/v1/organizations/{organization_id}/connections/{id}' + _globals['_CONNECTIONSERVICE'].methods_by_name['GetConnection']._serialized_options = b'\222A\201\003\n\013Connections\022\026Get connection details\032\321\001Retrieves the complete configuration and status details for a specific connection by its ID within an organization. Returns all connection properties including provider settings, protocols, and current status.J\205\001\n\003200\022~\nHSuccessfully retrieved connection details for the specified organization\0222\n0\032..scalekit.v1.connections.GetConnectionResponse\202\265\030\025\n\020connections_read\030\364\001\202\323\344\223\002:\0228/api/v1/organizations/{organization_id}/connections/{id}' _globals['_CONNECTIONSERVICE'].methods_by_name['ListConnections']._loaded_options = None _globals['_CONNECTIONSERVICE'].methods_by_name['ListConnections']._serialized_options = b'\222A\266\001\n\013Connections\022\020List connections\0322Retrieves a list of connections in the environmentJa\n\003200\022Z\n\"Successfully retrieved connections\0224\n2\0320.scalekit.v1.connections.ListConnectionsResponse\202\265\030\024\n\020connections_read\030t\202\323\344\223\002\025\022\023/api/v1/connections' _globals['_CONNECTIONSERVICE'].methods_by_name['ListOrganizationConnections']._loaded_options = None @@ -495,43 +517,47 @@ _globals['_CONNECTIONSERVICE'].methods_by_name['DeleteEnvironmentConnection']._loaded_options = None _globals['_CONNECTIONSERVICE'].methods_by_name['DeleteEnvironmentConnection']._serialized_options = b'\222AZ\n\013Connections\022\023Delete a connection\032\027Delete a SSO ConnectionJ\035\n\003200\022\026\n\024Deleted Successfully\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002%*#/api/v1/connections/{connection_id}' _globals['_CONNECTIONSERVICE'].methods_by_name['DeleteConnection']._loaded_options = None - _globals['_CONNECTIONSERVICE'].methods_by_name['DeleteConnection']._serialized_options = b'\222Ak\n\013Connections\022$Delete a connection for organization\032\027Delete a SSO ConnectionJ\035\n\003200\022\026\n\024Deleted Successfully\202\265\030\002\030d\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002:*8/api/v1/organizations/{organization_id}/connections/{id}' + _globals['_CONNECTIONSERVICE'].methods_by_name['DeleteConnection']._serialized_options = b'\222A\316\002\n\013Connections\022\025Delete SSO connection\032\371\001Deletes an SSO connection from the specified organization by connection ID. Use this endpoint when an identity provider integration is no longer needed for the organization. Returns an empty response after the SSO connection is deleted successfully.J,\n\003200\022%\n#SSO connection deleted successfully\202\265\030\002\030d\202\323\344\223\002:*8/api/v1/organizations/{organization_id}/connections/{id}' _globals['_CONNECTIONSERVICE'].methods_by_name['EnableEnvironmentConnection']._loaded_options = None _globals['_CONNECTIONSERVICE'].methods_by_name['EnableEnvironmentConnection']._serialized_options = b'\222A\204\001\n\013Connections\022\023Enable a connection\032\027Enable a SSO ConnectionJG\n\003200\022@\n\007Success\0225\n3\0321.scalekit.v1.connections.ToggleConnectionResponse\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002,2*/api/v1/connections/{connection_id}:enable' _globals['_CONNECTIONSERVICE'].methods_by_name['EnableConnection']._loaded_options = None - _globals['_CONNECTIONSERVICE'].methods_by_name['EnableConnection']._serialized_options = b'\222A\377\002\n\013Connections\022\036Enable organization connection\032\356\001Activate an existing connection for the specified organization. When enabled, users can authenticate using this connection. This endpoint changes the connection state from disabled to enabled without modifying other configuration settingsJ_\n\003200\022X\n\037Connection enabled successfully\0225\n3\0321.scalekit.v1.connections.ToggleConnectionResponse\202\265\030\025\n\021connections_write\030t\202\323\344\223\002A2?/api/v1/organizations/{organization_id}/connections/{id}:enable' + _globals['_CONNECTIONSERVICE'].methods_by_name['EnableConnection']._serialized_options = b'\222A\366\002\n\013Connections\022\025Enable SSO connection\032\356\001Activate an existing connection for the specified organization. When enabled, users can authenticate using this connection. This endpoint changes the connection state from disabled to enabled without modifying other configuration settingsJ_\n\003200\022X\n\037Connection enabled successfully\0225\n3\0321.scalekit.v1.connections.ToggleConnectionResponse\202\265\030\025\n\021connections_write\030t\202\323\344\223\002A2?/api/v1/organizations/{organization_id}/connections/{id}:enable' _globals['_CONNECTIONSERVICE'].methods_by_name['DisableEnvironmentConnection']._loaded_options = None _globals['_CONNECTIONSERVICE'].methods_by_name['DisableEnvironmentConnection']._serialized_options = b'\222A\206\001\n\013Connections\022\024Disable a connection\032\030Disable a SSO ConnectionJG\n\003200\022@\n\007Success\0225\n3\0321.scalekit.v1.connections.ToggleConnectionResponse\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002-2+/api/v1/connections/{connection_id}:disable' _globals['_CONNECTIONSERVICE'].methods_by_name['DisableConnection']._loaded_options = None - _globals['_CONNECTIONSERVICE'].methods_by_name['DisableConnection']._serialized_options = b'\222A\207\003\n\013Connections\022\037Disable organization connection\032\364\001Deactivate an existing connection for the specified organization. When disabled, users cannot authenticate using this connection. This endpoint changes the connection state from enabled to disabled without modifying other configuration settingsJ`\n\003200\022Y\n Connection disabled successfully\0225\n3\0321.scalekit.v1.connections.ToggleConnectionResponse\202\265\030\025\n\021connections_write\030t\202\323\344\223\002B2@/api/v1/organizations/{organization_id}/connections/{id}:disable' + _globals['_CONNECTIONSERVICE'].methods_by_name['DisableConnection']._serialized_options = b'\222A\376\002\n\013Connections\022\026Disable SSO connection\032\364\001Deactivate an existing connection for the specified organization. When disabled, users cannot authenticate using this connection. This endpoint changes the connection state from enabled to disabled without modifying other configuration settingsJ`\n\003200\022Y\n Connection disabled successfully\0225\n3\0321.scalekit.v1.connections.ToggleConnectionResponse\202\265\030\025\n\021connections_write\030t\202\323\344\223\002B2@/api/v1/organizations/{organization_id}/connections/{id}:disable' _globals['_CONNECTIONSERVICE'].methods_by_name['GetConnectionTestResult']._loaded_options = None _globals['_CONNECTIONSERVICE'].methods_by_name['GetConnectionTestResult']._serialized_options = b'\222A\215\001\n\013Connections\022\026Test connection result\032\026Connection test resultJN\n\003200\022G\n\007Success\022<\n:\0328.scalekit.v1.connections.GetConnectionTestResultResponse\202\265\030\002\030t\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002E\022C/api/v1/connections/{connection_id}/test-requests/{test_request_id}' _globals['_CONNECTIONSERVICE'].methods_by_name['ListAppConnections']._loaded_options = None _globals['_CONNECTIONSERVICE'].methods_by_name['ListAppConnections']._serialized_options = b'\222A\276\001\n\013Connections\022\024List App connections\0326Retrieves a list of app connections in the environmentJa\n\003200\022Z\n\"Successfully retrieved connections\0224\n2\0320.scalekit.v1.connections.ListConnectionsResponse\202\265\030\002\030d\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\031\022\027/api/v1/connections/app' - _globals['_CODECHALLENGETYPE']._serialized_start=34710 - _globals['_CODECHALLENGETYPE']._serialized_end=34797 - _globals['_CONFIGURATIONTYPE']._serialized_start=34799 - _globals['_CONFIGURATIONTYPE']._serialized_end=34881 - _globals['_NAMEIDFORMAT']._serialized_start=34883 - _globals['_NAMEIDFORMAT']._serialized_end=34980 - _globals['_PASSWORDLESSTYPE']._serialized_start=34982 - _globals['_PASSWORDLESSTYPE']._serialized_end=35067 - _globals['_TESTRESULTSTATUS']._serialized_start=35069 - _globals['_TESTRESULTSTATUS']._serialized_end=35126 - _globals['_SAMLSIGNINGOPTIONS']._serialized_start=35129 - _globals['_SAMLSIGNINGOPTIONS']._serialized_end=35345 - _globals['_REQUESTBINDING']._serialized_start=35347 - _globals['_REQUESTBINDING']._serialized_end=35430 - _globals['_TOKENAUTHTYPE']._serialized_start=35432 - _globals['_TOKENAUTHTYPE']._serialized_end=35512 - _globals['_OIDCSCOPE']._serialized_start=35514 - _globals['_OIDCSCOPE']._serialized_end=35613 - _globals['_CONNECTIONTYPE']._serialized_start=35616 - _globals['_CONNECTIONTYPE']._serialized_end=35758 - _globals['_CONNECTIONSTATUS']._serialized_start=35760 - _globals['_CONNECTIONSTATUS']._serialized_end=35856 - _globals['_CONNECTIONPROVIDER']._serialized_start=35859 - _globals['_CONNECTIONPROVIDER']._serialized_end=36139 + _globals['_CONNECTIONSERVICE'].methods_by_name['GetConnectionContext']._loaded_options = None + _globals['_CONNECTIONSERVICE'].methods_by_name['GetConnectionContext']._serialized_options = b'\222A\255\001\n\013Connections\022\026Get connection context\032 None: ... class OAuthConnectionConfig(_message.Message): - __slots__ = ("authorize_uri", "token_uri", "user_info_uri", "client_id", "client_secret", "scopes", "redirect_uri", "pkce_enabled", "prompt", "use_platform_creds", "access_type", "custom_scope_name", "sync_user_profile_on_login") + __slots__ = ("authorize_uri", "token_uri", "user_info_uri", "client_id", "client_secret", "scopes", "redirect_uri", "pkce_enabled", "prompt", "use_platform_creds", "access_type", "custom_scope_name", "sync_user_profile_on_login", "token_access_type", "tenant_id", "is_cimd", "app_name", "optional_scopes") AUTHORIZE_URI_FIELD_NUMBER: _ClassVar[int] TOKEN_URI_FIELD_NUMBER: _ClassVar[int] USER_INFO_URI_FIELD_NUMBER: _ClassVar[int] @@ -581,6 +585,11 @@ class OAuthConnectionConfig(_message.Message): ACCESS_TYPE_FIELD_NUMBER: _ClassVar[int] CUSTOM_SCOPE_NAME_FIELD_NUMBER: _ClassVar[int] SYNC_USER_PROFILE_ON_LOGIN_FIELD_NUMBER: _ClassVar[int] + TOKEN_ACCESS_TYPE_FIELD_NUMBER: _ClassVar[int] + TENANT_ID_FIELD_NUMBER: _ClassVar[int] + IS_CIMD_FIELD_NUMBER: _ClassVar[int] + APP_NAME_FIELD_NUMBER: _ClassVar[int] + OPTIONAL_SCOPES_FIELD_NUMBER: _ClassVar[int] authorize_uri: _wrappers_pb2.StringValue token_uri: _wrappers_pb2.StringValue user_info_uri: _wrappers_pb2.StringValue @@ -594,7 +603,20 @@ class OAuthConnectionConfig(_message.Message): access_type: _wrappers_pb2.StringValue custom_scope_name: _wrappers_pb2.StringValue sync_user_profile_on_login: _wrappers_pb2.BoolValue - def __init__(self, authorize_uri: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., token_uri: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., user_info_uri: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., client_id: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., client_secret: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., scopes: _Optional[_Iterable[str]] = ..., redirect_uri: _Optional[str] = ..., pkce_enabled: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., prompt: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., use_platform_creds: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., access_type: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., custom_scope_name: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., sync_user_profile_on_login: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ...) -> None: ... + token_access_type: _wrappers_pb2.StringValue + tenant_id: _wrappers_pb2.StringValue + is_cimd: _wrappers_pb2.BoolValue + app_name: _wrappers_pb2.StringValue + optional_scopes: OptionalScopes + def __init__(self, authorize_uri: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., token_uri: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., user_info_uri: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., client_id: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., client_secret: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., scopes: _Optional[_Iterable[str]] = ..., redirect_uri: _Optional[str] = ..., pkce_enabled: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., prompt: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., use_platform_creds: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., access_type: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., custom_scope_name: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., sync_user_profile_on_login: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., token_access_type: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., tenant_id: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., is_cimd: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., app_name: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., optional_scopes: _Optional[_Union[OptionalScopes, _Mapping]] = ...) -> None: ... + +class OptionalScopes(_message.Message): + __slots__ = ("scopes", "field_name") + SCOPES_FIELD_NUMBER: _ClassVar[int] + FIELD_NAME_FIELD_NUMBER: _ClassVar[int] + scopes: _containers.RepeatedScalarFieldContainer[str] + field_name: str + def __init__(self, scopes: _Optional[_Iterable[str]] = ..., field_name: _Optional[str] = ...) -> None: ... class PasswordLessConfig(_message.Message): __slots__ = ("type", "frequency", "validity", "enforce_same_browser_origin", "code_challenge_length", "code_challenge_type", "regenerate_passwordless_credentials_on_resend") @@ -936,3 +958,27 @@ class ListAppConnectionsResponse(_message.Message): prev_page_token: str total_size: int def __init__(self, connections: _Optional[_Iterable[_Union[ListConnection, _Mapping]]] = ..., next_page_token: _Optional[str] = ..., prev_page_token: _Optional[str] = ..., total_size: _Optional[int] = ...) -> None: ... + +class GetConnectionContextRequest(_message.Message): + __slots__ = ("connection_id", "organization_id") + CONNECTION_ID_FIELD_NUMBER: _ClassVar[int] + ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] + connection_id: str + organization_id: str + def __init__(self, connection_id: _Optional[str] = ..., organization_id: _Optional[str] = ...) -> None: ... + +class GetConnectionContextResponse(_message.Message): + __slots__ = ("context",) + CONTEXT_FIELD_NUMBER: _ClassVar[int] + context: _struct_pb2.Struct + def __init__(self, context: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... + +class UpdateConnectionContextRequest(_message.Message): + __slots__ = ("connection_id", "organization_id", "context") + CONNECTION_ID_FIELD_NUMBER: _ClassVar[int] + ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] + CONTEXT_FIELD_NUMBER: _ClassVar[int] + connection_id: str + organization_id: str + context: _struct_pb2.Struct + def __init__(self, connection_id: _Optional[str] = ..., organization_id: _Optional[str] = ..., context: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... diff --git a/scalekit/v1/connections/connections_pb2_grpc.py b/scalekit/v1/connections/connections_pb2_grpc.py index ba04339..feede75 100644 --- a/scalekit/v1/connections/connections_pb2_grpc.py +++ b/scalekit/v1/connections/connections_pb2_grpc.py @@ -105,6 +105,16 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.ListAppConnectionsRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.ListAppConnectionsResponse.FromString, ) + self.GetConnectionContext = channel.unary_unary( + '/scalekit.v1.connections.ConnectionService/GetConnectionContext', + request_serializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.GetConnectionContextRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.GetConnectionContextResponse.FromString, + ) + self.UpdateConnectionContext = channel.unary_unary( + '/scalekit.v1.connections.ConnectionService/UpdateConnectionContext', + request_serializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.UpdateConnectionContextRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + ) class ConnectionServiceServicer(object): @@ -218,6 +228,18 @@ def ListAppConnections(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def GetConnectionContext(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def UpdateConnectionContext(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def add_ConnectionServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -311,6 +333,16 @@ def add_ConnectionServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.ListAppConnectionsRequest.FromString, response_serializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.ListAppConnectionsResponse.SerializeToString, ), + 'GetConnectionContext': grpc.unary_unary_rpc_method_handler( + servicer.GetConnectionContext, + request_deserializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.GetConnectionContextRequest.FromString, + response_serializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.GetConnectionContextResponse.SerializeToString, + ), + 'UpdateConnectionContext': grpc.unary_unary_rpc_method_handler( + servicer.UpdateConnectionContext, + request_deserializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.UpdateConnectionContextRequest.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'scalekit.v1.connections.ConnectionService', rpc_method_handlers) @@ -626,3 +658,37 @@ def ListAppConnections(request, scalekit_dot_v1_dot_connections_dot_connections__pb2.ListAppConnectionsResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def GetConnectionContext(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.connections.ConnectionService/GetConnectionContext', + scalekit_dot_v1_dot_connections_dot_connections__pb2.GetConnectionContextRequest.SerializeToString, + scalekit_dot_v1_dot_connections_dot_connections__pb2.GetConnectionContextResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def UpdateConnectionContext(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.connections.ConnectionService/UpdateConnectionContext', + scalekit_dot_v1_dot_connections_dot_connections__pb2.UpdateConnectionContextRequest.SerializeToString, + google_dot_protobuf_dot_empty__pb2.Empty.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/directories/directories_pb2.py b/scalekit/v1/directories/directories_pb2.py index 9ea60be..3853f1f 100644 --- a/scalekit/v1/directories/directories_pb2.py +++ b/scalekit/v1/directories/directories_pb2.py @@ -25,7 +25,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n)scalekit/v1/directories/directories.proto\x12\x17scalekit.v1.directories\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"\xdb\x01\n\x13GetDirectoryRequest\x12S\n\x02id\x18\x01 \x01(\tBC\x92\x41\x37\x32\"Unique identifier of the directoryJ\x11\"dir_12131243412\"\xbaH\x06r\x04\x10\x01\x18 R\x02id\x12o\n\x0forganization_id\x18\x02 \x01(\tBF\x92\x41:2%Unique identifier of the organizationJ\x11\"org_12131243412\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\"\x91\x01\n\x14GetDirectoryResponse\x12y\n\tdirectory\x18\x01 \x01(\x0b\x32\".scalekit.v1.directories.DirectoryB7\x92\x41\x34\x32\x32\x44\x65tailed information about the requested directoryR\tdirectory\"\xf7\x01\n\x16\x43reateDirectoryRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41?2$Unique identifier to an OrganizationJ\x17\"org_12362474900684814\"\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x0eorganizationId\x12\x64\n\tdirectory\x18\x02 \x01(\x0b\x32(.scalekit.v1.directories.CreateDirectoryB\x1c\x92\x41\x13\x32\x11\x44irectory Details\xbaH\x03\xc8\x01\x01R\tdirectory\"\xf7\x01\n\x0f\x43reateDirectory\x12k\n\x0e\x64irectory_type\x18\x01 \x01(\x0e\x32&.scalekit.v1.directories.DirectoryTypeB\x1c\x92\x41\x0e\x32\x04TypeJ\x06\"SCIM\"\xbaH\x08\x82\x01\x02\x10\x01\xc8\x01\x01R\rdirectoryType\x12w\n\x12\x64irectory_provider\x18\x02 \x01(\x0e\x32*.scalekit.v1.directories.DirectoryProviderB\x1c\x92\x41\x11\x32\x07ProvideJ\x06\"OKTA\"\xbaH\x05\x82\x01\x02\x10\x01R\x11\x64irectoryProvider\"y\n\x17\x43reateDirectoryResponse\x12^\n\tdirectory\x18\x01 \x01(\x0b\x32\".scalekit.v1.directories.DirectoryB\x1c\x92\x41\x13\x32\x11\x44irectory Details\xbaH\x03\xc8\x01\x01R\tdirectory\"\xd9\x01\n\x16UpdateDirectoryRequest\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02id\x12\x38\n\x0forganization_id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x64\n\tdirectory\x18\x03 \x01(\x0b\x32(.scalekit.v1.directories.UpdateDirectoryB\x1c\x92\x41\x13\x32\x11\x44irectory Details\xbaH\x03\xc8\x01\x01R\tdirectory\"\x9a\x06\n\x0fUpdateDirectory\x12\x33\n\x04name\x18\x02 \x01(\tB\x1f\x92\x41\x12\x32\x04NameJ\n\"Azure AD\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x04name\x12h\n\x0e\x64irectory_type\x18\x03 \x01(\x0e\x32&.scalekit.v1.directories.DirectoryTypeB\x19\x92\x41\x0e\x32\x04TypeJ\x06\"SCIM\"\xbaH\x05\x82\x01\x02\x10\x01R\rdirectoryType\x12+\n\x07\x65nabled\x18\x07 \x01(\x08\x42\x11\x92\x41\x0e\x32\x06StatusJ\x04trueR\x07\x65nabled\x12\xec\x01\n\x12\x64irectory_provider\x18\x08 \x01(\x0e\x32*.scalekit.v1.directories.DirectoryProviderB\x90\x01\x92\x41\x84\x01\x32-Identity provider connected to this directoryJS\"OKTA\", \"GOOGLE\", \"MICROSOFT_AD\", \"AUTH0\", \"ONELOGIN\", \"JUMPCLOUD\", \"PING_IDENTITY\"\xbaH\x05\x82\x01\x02\x10\x01R\x11\x64irectoryProvider\x12h\n\x06status\x18\t \x01(\x0e\x32(.scalekit.v1.directories.DirectoryStatusB&\x92\x41\x1b\x32\x0cSetup StatusJ\x0b\"COMPLETED\"\xbaH\x05\x82\x01\x02\x10\x01R\x06status\x12\x45\n\x08mappings\x18\n \x03(\x0b\x32).scalekit.v1.directories.DirectoryMappingR\x08mappings\x12q\n\x06groups\x18\x0f \x03(\x0b\x32&.scalekit.v1.directories.ExternalGroupB1\x92\x41.2,List of groups associated with the directoryR\x06groupsJ\x04\x08\x01\x10\x02J\x04\x08\x04\x10\x05J\x04\x08\x06\x10\x07J\x04\x08\x0b\x10\x0cJ\x04\x08\x0c\x10\rJ\x04\x08\r\x10\x0eJ\x04\x08\x0e\x10\x0f\"y\n\x17UpdateDirectoryResponse\x12^\n\tdirectory\x18\x01 \x01(\x0b\x32\".scalekit.v1.directories.DirectoryB\x1c\x92\x41\x13\x32\x11\x44irectory Details\xbaH\x03\xc8\x01\x01R\tdirectory\"\xdf\x01\n\x1f\x41ssignGroupsForDirectoryRequest\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02id\x12\x38\n\x0forganization_id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x61\n\x0c\x65xternal_ids\x18\x03 \x03(\tB>\x92\x41\x35\x32\x33\x65xternal_ids of groups to be tracked during polling\xbaH\x03\xc8\x01\x01R\x0b\x65xternalIds\"\x92\x01\n\x16ListDirectoriesRequest\x12x\n\x0forganization_id\x18\x01 \x01(\tBO\x92\x41=2%Unique identifier of the organizationJ\x14\"org_12362474900684\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\"\xa1\x01\n\x17ListDirectoriesResponse\x12\x85\x01\n\x0b\x64irectories\x18\x01 \x03(\x0b\x32\".scalekit.v1.directories.DirectoryB?\x92\x41\x36\x32\x34List of directories associated with the organization\xbaH\x03\xc8\x01\x01R\x0b\x64irectories\"\xd6\t\n\x19ListDirectoryUsersRequest\x12x\n\x0forganization_id\x18\x01 \x01(\tBO\x92\x41=2%Unique identifier of the organizationJ\x14\"org_12131243412331\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x87\x01\n\x0c\x64irectory_id\x18\x02 \x01(\tBd\x92\x41R2:Unique identifier of the directory within the organizationJ\x14\"dir_12131243412331\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\x12\x86\x01\n\tpage_size\x18\x03 \x01(\rBi\x92\x41_2YNumber of users to return per page. Maximum value is 30. If not specified, defaults to 10J\x02\x31\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xb0\x01\n\npage_token\x18\x04 \x01(\tB\x90\x01\x92\x41\x8c\x01\x32\x89\x01Token for pagination. Use the value returned in the \'next_page_token\' field of the previous response to retrieve the next page of resultsR\tpageToken\x12\xe1\x01\n\x0einclude_detail\x18\x05 \x01(\x08\x42\xb4\x01\x92\x41\xb0\x01\x32\xa7\x01If set to true, the response will include the full user payload with all available details. If false or not specified, only essential user information will be returnedJ\x04trueH\x00R\rincludeDetail\x88\x01\x01\x12\xa1\x01\n\x12\x64irectory_group_id\x18\x06 \x01(\tBn\x92\x41W2>Filter users by their membership in a specific directory groupJ\x15\"dirgroup_1213124341\"\xbaH\x11r\x0f\x10\x01\x18%:\tdirgroup_H\x01R\x10\x64irectoryGroupId\x88\x01\x01\x12\xb4\x01\n\rupdated_after\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampBn\x92\x41k2QFilter users that were updated after the specified timestamp. Use ISO 8601 formatJ\x16\"2021-01-01T00:00:00Z\"H\x02R\x0cupdatedAfter\x88\x01\x01\x42\x11\n\x0f_include_detailB\x15\n\x13_directory_group_idB\x10\n\x0e_updated_after\"\xe1\x04\n\x1aListDirectoryUsersResponse\x12\x81\x01\n\x05users\x18\x01 \x03(\x0b\x32&.scalekit.v1.directories.DirectoryUserBC\x92\x41@2>List of directory users retrieved from the specified directoryR\x05users\x12t\n\ntotal_size\x18\x02 \x01(\rBU\x92\x41R2PTotal number of users available in the directory that match the request criteriaR\ttotalSize\x12\xa5\x01\n\x0fnext_page_token\x18\x03 \x01(\tB}\x92\x41z2xToken for pagination. Use this token in the \'page_token\' field of the next request to fetch the subsequent page of usersR\rnextPageToken\x12\xa0\x01\n\x0fprev_page_token\x18\x04 \x01(\tBx\x92\x41u2sToken for pagination. Use this token in the \'page_token\' field of the next request to fetch the prior page of usersR\rprevPageToken\"\xb6\x08\n\x1aListDirectoryGroupsRequest\x12y\n\x0forganization_id\x18\x01 \x01(\tBP\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12p\n\x0c\x64irectory_id\x18\x02 \x01(\tBM\x92\x41;2\"Unique identifier of the directoryJ\x15\"dir_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\x12\x87\x01\n\tpage_size\x18\x03 \x01(\rBj\x92\x41`2ZNumber of groups to return per page. Maximum value is 30. If not specified, defaults to 10J\x02\x31\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\x88\x01\n\npage_token\x18\x04 \x01(\tBi\x92\x41\x66\x32\x64Token for pagination. Use the value returned in the \'next_page_token\' field of the previous responseR\tpageToken\x12\xa2\x01\n\rupdated_after\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\\\x92\x41Y2?Filter groups updated after this timestamp. Use ISO 8601 formatJ\x16\"2021-01-01T00:00:00Z\"H\x00R\x0cupdatedAfter\x88\x01\x01\x12\x96\x01\n\x0einclude_detail\x18\x06 \x01(\x08\x42j\x92\x41g2_If true, includes full group details. If false or not specified, returns basic information onlyJ\x04trueH\x01R\rincludeDetail\x88\x01\x01\x12\x96\x01\n\x17include_external_groups\x18\x07 \x01(\x08\x42Y\x92\x41V2NIf true, returns group and its details from external provider (default: false)J\x04trueH\x02R\x15includeExternalGroups\x88\x01\x01\x42\x10\n\x0e_updated_afterB\x11\n\x0f_include_detailB\x1a\n\x18_include_external_groups\"\xcd\x04\n\x1bListDirectoryGroupsResponse\x12\x85\x01\n\x06groups\x18\x01 \x03(\x0b\x32\'.scalekit.v1.directories.DirectoryGroupBD\x92\x41\x41\x32?List of directory groups retrieved from the specified directoryR\x06groups\x12r\n\ntotal_size\x18\x02 \x01(\rBS\x92\x41P2NTotal number of groups matching the request criteria, regardless of paginationR\ttotalSize\x12\x95\x01\n\x0fnext_page_token\x18\x03 \x01(\tBm\x92\x41j2hToken to retrieve the next page of results. Use this token in the \'page_token\' field of the next requestR\rnextPageToken\x12\x99\x01\n\x0fprev_page_token\x18\x04 \x01(\tBq\x92\x41n2lToken to retrieve the previous page of results. Use this token in the \'page_token\' field of the next requestR\rprevPageToken\"\x90\x02\n!ListDirectoryGroupsSummaryRequest\x12y\n\x0forganization_id\x18\x01 \x01(\tBP\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12p\n\x0c\x64irectory_id\x18\x02 \x01(\tBM\x92\x41;2\"Unique identifier of the directoryJ\x15\"dir_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\"\x94\x13\n\tDirectory\x12]\n\x02id\x18\x01 \x01(\tBM\x92\x41;2\"Unique identifier of the directoryJ\x15\"dir_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02id\x12}\n\x04name\x18\x02 \x01(\tBi\x92\x41\\2NName of the directory, typically representing the connected Directory providerJ\n\"Azure AD\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x04name\x12\xb7\x01\n\x0e\x64irectory_type\x18\x03 \x01(\x0e\x32&.scalekit.v1.directories.DirectoryTypeBh\x92\x41]2SType of the directory, indicating the protocol or standard used for synchronizationJ\x06\"SCIM\"\xbaH\x05\x82\x01\x02\x10\x01R\rdirectoryType\x12\x98\x01\n\x0forganization_id\x18\x04 \x01(\tBo\x92\x41]2DUnique identifier of the organization to which the directory belongsJ\x15\"org_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x85\x01\n\x07\x65nabled\x18\x05 \x01(\x08\x42k\x92\x41h2`Indicates whether the directory is currently enabled and actively synchronizing users and groupsJ\x04trueR\x07\x65nabled\x12\x9d\x01\n\x12\x64irectory_provider\x18\x06 \x01(\x0e\x32*.scalekit.v1.directories.DirectoryProviderBB\x92\x41\x37\x32-Identity provider connected to this directoryJ\x06\"OKTA\"\xbaH\x05\x82\x01\x02\x10\x01R\x11\x64irectoryProvider\x12\xbf\x01\n\x0elast_synced_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB}\x92\x41z2`Timestamp of the last successful synchronization of users and groups from the Directory ProviderJ\x16\"2024-10-01T00:00:00Z\"R\x0clastSyncedAt\x12\xed\x01\n\x12\x64irectory_endpoint\x18\x08 \x01(\tB\xbd\x01\x92\x41\xaf\x01\x32\x65The endpoint URL generated by Scalekit for synchronizing users and groups from the Directory ProviderJF\"https://yourapp.scalekit.com/api/v1/directoies/dir_123212312/scim/v2\"\xbaH\x07r\x05\x10\x01\x18\xd0\x0fR\x11\x64irectoryEndpoint\x12P\n\x0btotal_users\x18\t \x01(\x05\x42/\x92\x41,2&Total number of users in the directoryJ\x02\x31\x30R\ntotalUsers\x12S\n\x0ctotal_groups\x18\n \x01(\x05\x42\x30\x92\x41-2\'Total number of groups in the directoryJ\x02\x31\x30R\x0btotalGroups\x12\x95\x01\n\x07secrets\x18\x0b \x03(\x0b\x32\x1f.scalekit.v1.directories.SecretBZ\x92\x41W2UList of secrets used for authenticating and synchronizing with the Directory ProviderR\x07secrets\x12\x9b\x01\n\x05stats\x18\x0c \x01(\x0b\x32\x1e.scalekit.v1.directories.StatsBe\x92\x41\x62\x32`Statistics and metrics related to the directory, such as synchronization status and error countsR\x05stats\x12\xaf\x01\n\x10role_assignments\x18\r \x01(\x0b\x32(.scalekit.v1.directories.RoleAssignmentsBZ\x92\x41W2URole assignments associated with the directory, defining group based role assignmentsR\x0froleAssignments\x12\xac\x01\n\x12\x61ttribute_mappings\x18\x0e \x01(\x0b\x32*.scalekit.v1.directories.AttributeMappingsBQ\x92\x41N2LMappings between directory attributes and Scalekit user and group attributesR\x11\x61ttributeMappings\x12\x44\n\x06status\x18\x0f \x01(\tB,\x92\x41!2\x10\x44irectory StatusJ\r\"IN_PROGRESS\"\xbaH\x05\x82\x01\x02\x10\x01R\x06status\x12~\n\x05\x65mail\x18\x10 \x01(\tBh\x92\x41\x65\x32HEmail Id associated with Directory whose access will be used for pollingJ\x19\"john.doe@scalekit.cloud\"R\x05\x65mail\x12v\n\x0egroups_tracked\x18\x11 \x01(\tBO\x92\x41L2CIt indicates if all groups are tracked or select groups are trackedJ\x05\"ALL\"R\rgroupsTracked\"\xaf\x03\n\x16ToggleDirectoryRequest\x12\xc8\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9e\x01\x92\x41\x8b\x01\x32rA unique identifier for the organization. The value must begin with \'org_\' and be between 1 and 32 characters longJ\x15\"org_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xc3\x01\n\x02id\x18\x03 \x01(\tB\xb2\x01\x92\x41\x9f\x01\x32\x85\x01\x41 unique identifier for a directory within the organization. The value must begin with \'dir_\' and be between 1 and 32 characters longJ\x15\"dir_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02idJ\x04\x08\x02\x10\x03\"\xac\x04\n\x17ToggleDirectoryResponse\x12\x96\x02\n\x07\x65nabled\x18\x01 \x01(\x08\x42\xfb\x01\x92\x41\xf7\x01\x32\xee\x01Specifies the directory\'s state after the toggle operation. A value of `true` indicates that the directory is enabled and actively synchronizing users and groups. A value of `false` means the directory is disabled, halting synchronizationJ\x04trueR\x07\x65nabled\x12\xe5\x01\n\rerror_message\x18\x02 \x01(\tB\xba\x01\x92\x41\xb6\x01\x32\x8f\x01\x43ontains a human-readable error message if the toggle operation encountered an issue. If the operation was successful, this field will be emptyJ\"\"The directory is already enabled\"H\x00R\x0c\x65rrorMessage\x88\x01\x01\x42\x10\n\x0e_error_message\"z\n\x10\x44irectoryMapping\x12\x1e\n\x03key\x18\x01 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x03key\x12#\n\x06map_to\x18\x02 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x05mapTo\x12!\n\x0c\x64isplay_name\x18\x03 \x01(\tR\x0b\x64isplayName\"\xae\x05\n\rDirectoryUser\x12J\n\x02id\x18\x01 \x01(\tB:\x92\x41$2\x07User IDJ\x19\"diruser_121312434123312\"\xbaH\x10r\x0e\x10\x01\x18$:\x08\x64iruser_R\x02id\x12\x35\n\x05\x65mail\x18\x02 \x01(\tB\x1f\x92\x41\x12\x32\x05\x45mailJ\t\"johndoe\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x05\x65mail\x12[\n\x12preferred_username\x18\x03 \x01(\tB,\x92\x41\x1f\x32\x12Preferred UsernameJ\t\"johndoe\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x11preferredUsername\x12@\n\ngiven_name\x18\x04 \x01(\tB!\x92\x41\x14\x32\nFirst NameJ\x06\"John\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\tgivenName\x12@\n\x0b\x66\x61mily_name\x18\x05 \x01(\tB\x1f\x92\x41\x12\x32\tLast NameJ\x05\"Doe\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\nfamilyName\x12\x62\n\nupdated_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\'\x92\x41$2\nUpdated AtJ\x16\"2024-10-01T00:00:00Z\"R\tupdatedAt\x12#\n\x06\x65mails\x18\x10 \x03(\tB\x0b\x92\x41\x08\x32\x06\x45mailsR\x06\x65mails\x12L\n\x06groups\x18\x11 \x03(\x0b\x32\'.scalekit.v1.directories.DirectoryGroupB\x0b\x92\x41\x08\x32\x06GroupsR\x06groups\x12\\\n\x0buser_detail\x18\x12 \x01(\x0b\x32\x17.google.protobuf.StructB\"\x92\x41\x1f\x32\x1d\x43omplete User Details PayloadR\nuserDetailJ\x04\x08\x07\x10\x10\"\xf3\x01\n\rExternalGroup\x12T\n\x0b\x65xternal_id\x18\x01 \x01(\tB3\x92\x41&2\x11\x45xternal Group IDJ\x11\"02y3w247124ccqi\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\nexternalId\x12H\n\x0c\x64isplay_name\x18\x02 \x01(\tB%\x92\x41\x18\x32\x0c\x44isplay NameJ\x08\"Admins\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x0b\x64isplayName\x12\x42\n\x05\x65mail\x18\x03 \x01(\tB,\x92\x41\x1f\x32\x05\x45mailJ\x16\"johndoe@scalekit.com\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x05\x65mail\"\xb2\x03\n\x0e\x44irectoryGroup\x12M\n\x02id\x18\x01 \x01(\tB=\x92\x41&2\x08Group IDJ\x1a\"dirgroup_121312434123312\"\xbaH\x11r\x0f\x10\x01\x18$:\tdirgroup_R\x02id\x12H\n\x0c\x64isplay_name\x18\x02 \x01(\tB%\x92\x41\x18\x32\x0c\x44isplay NameJ\x08\"Admins\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x0b\x64isplayName\x12\x42\n\x0btotal_users\x18\x03 \x01(\x05\x42!\x92\x41\x1e\x32\x18Total Users in the GroupJ\x02\x31\x30R\ntotalUsers\x12\x62\n\nupdated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\'\x92\x41$2\nUpdated AtJ\x16\"2024-10-01T00:00:00Z\"R\tupdatedAt\x12_\n\x0cgroup_detail\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructB#\x92\x41 2\x1e\x43omplete Group Details PayloadR\x0bgroupDetail\"\xb9\x01\n\x1c\x43reateDirectorySecretRequest\x12\x65\n\x0forganization_id\x18\x01 \x01(\tB<\x92\x41*2\x0fOrganization IDJ\x17\"org_12362474900684814\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x32\n\x0c\x64irectory_id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\"\xa4\x02\n\x1d\x43reateDirectorySecretResponse\x12\xb4\x01\n\x0cplain_secret\x18\x01 \x01(\tB\x90\x01\x92\x41\x8c\x01\x32VPlain Secret. This is only returned in Plain Text as response to the Creation Request.J2\"dXNlcm5hbWU6cGFzc3dvcmQ6c2VjcmV0a2V5MTIzNDU2Nzg5\"R\x0bplainSecret\x12L\n\x06secret\x18\x02 \x01(\x0b\x32\x1f.scalekit.v1.directories.SecretB\x13\x92\x41\x10\x32\x0eSecret DetailsR\x06secret\"\x90\x01\n RegenerateDirectorySecretRequest\x12\x38\n\x0forganization_id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x32\n\x0c\x64irectory_id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\"\xa8\x02\n!RegenerateDirectorySecretResponse\x12\xb4\x01\n\x0cplain_secret\x18\x01 \x01(\tB\x90\x01\x92\x41\x8c\x01\x32VPlain Secret. This is only returned in Plain Text as response to the Creation Request.J2\"dXNlcm5hbWU6cGFzc3dvcmQ6c2VjcmV0a2V5MTIzNDU2Nzg5\"R\x0bplainSecret\x12L\n\x06secret\x18\x02 \x01(\x0b\x32\x1f.scalekit.v1.directories.SecretB\x13\x92\x41\x10\x32\x0eSecret DetailsR\x06secret\"\xe6\x04\n\x06Secret\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04sec_R\x02id\x12g\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB*\x92\x41\'2\rCreation TimeJ\x16\"2024-10-01T00:00:00Z\"R\ncreateTime\x12?\n\rsecret_suffix\x18\x04 \x01(\tB\x1a\x92\x41\x17\x32\rSecret SuffixJ\x06\"Nzg5\"R\x0csecretSuffix\x12]\n\x06status\x18\x05 \x01(\x0e\x32%.scalekit.v1.directories.SecretStatusB\x1e\x92\x41\x1b\x32\rSecret StatusJ\n\"INACTIVE\"R\x06status\x12\x65\n\x0b\x65xpire_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB(\x92\x41%2\x0b\x45xpiry TimeJ\x16\"2025-10-01T00:00:00Z\"R\nexpireTime\x12m\n\x0elast_used_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB+\x92\x41(2\x0eLast Used TimeJ\x16\"2024-10-01T00:00:00Z\"R\x0clastUsedTime\x12\\\n\x0c\x64irectory_id\x18\t \x01(\tB9\x92\x41\'2\x0c\x44irectory IDJ\x17\"dir_12362474900684814\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\"\xb7\x03\n\x05Stats\x12\x46\n\x0btotal_users\x18\x01 \x01(\x05\x42%\x92\x41\"2\x1cTotal Users in the DirectoryJ\x02\x31\x30R\ntotalUsers\x12I\n\x0ctotal_groups\x18\x02 \x01(\x05\x42&\x92\x41#2\x1dTotal Groups in the DirectoryJ\x02\x31\x30R\x0btotalGroups\x12\x8d\x01\n\x10group_updated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBG\x92\x41\x44\x32*Max time of Group Updated At for DirectoryJ\x16\"2024-10-01T00:00:00Z\"R\x0egroupUpdatedAt\x12\x8a\x01\n\x0fuser_updated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampBF\x92\x41\x43\x32)Max time of User Updated At for DirectoryJ\x16\"2024-10-01T00:00:00Z\"R\ruserUpdatedAt\"\xb8\x01\n\x12\x41ssignRolesRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\x19\n\x02id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18 R\x02id\x12S\n\x10role_assignments\x18\x03 \x01(\x0b\x32(.scalekit.v1.directories.RoleAssignmentsR\x0froleAssignments\"\\\n\x0fRoleAssignments\x12I\n\x0b\x61ssignments\x18\x01 \x03(\x0b\x32\'.scalekit.v1.directories.RoleAssignmentR\x0b\x61ssignments\"j\n\x13\x41ssignRolesResponse\x12S\n\x10role_assignments\x18\x01 \x01(\x0b\x32(.scalekit.v1.directories.RoleAssignmentsR\x0froleAssignments\"\x99\x02\n\x0eRoleAssignment\x12_\n\x08group_id\x18\x01 \x01(\tBD\x92\x41\x38\x32\x1dgroup ID for the role mappingJ\x17\"dirgroup_121312434123\"\xbaH\x06r\x04\x10\x01\x18 R\x07groupId\x12?\n\trole_name\x18\x02 \x01(\tB\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\x65\n\x07role_id\x18\x03 \x01(\tBL\x92\x41\x33\x32\x1crole ID for the role mappingJ\x13\"role_121312434123\"\xbaH\x04r\x02\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\x06roleId\"\xcd\x01\n\x17UpdateAttributesRequest\x12\x38\n\x0forganization_id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x1f\n\x02id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02id\x12W\n\x11\x61ttribute_mapping\x18\x03 \x01(\x0b\x32*.scalekit.v1.directories.AttributeMappingsR\x10\x61ttributeMapping\"^\n\x11\x41ttributeMappings\x12I\n\nattributes\x18\x01 \x03(\x0b\x32).scalekit.v1.directories.AttributeMappingR\nattributes\"W\n\x10\x41ttributeMapping\x12\x1e\n\x03key\x18\x01 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x03key\x12#\n\x06map_to\x18\x02 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x05mapTo\"u\n\x18UpdateAttributesResponse\x12Y\n\x12\x61ttribute_mappings\x18\x01 \x01(\x0b\x32*.scalekit.v1.directories.AttributeMappingsR\x11\x61ttributeMappings\"y\n\x16\x44\x65leteDirectoryRequest\x12\x38\n\x0forganization_id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x1f\n\x02id\x18\x03 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02idJ\x04\x08\x02\x10\x03\"\xfb\x01\n\x1bTriggerDirectorySyncRequest\x12h\n\x0c\x64irectory_id\x18\x01 \x01(\tBE\x92\x41\x39\x32 Unique identifier of a DirectoryJ\x15\"dir_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0b\x64irectoryId\x12r\n\x0forganization_id\x18\x02 \x01(\tBI\x92\x41=2$Unique identifier to an OrganizationJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId*M\n\rDirectoryType\x12\x1e\n\x1a\x44IRECTORY_TYPE_UNSPECIFIED\x10\x00\x12\x08\n\x04SCIM\x10\x01\x12\x08\n\x04LDAP\x10\x02\x12\x08\n\x04POLL\x10\x03*\x9a\x01\n\x11\x44irectoryProvider\x12\"\n\x1e\x44IRECTORY_PROVIDER_UNSPECIFIED\x10\x00\x12\x08\n\x04OKTA\x10\x01\x12\n\n\x06GOOGLE\x10\x02\x12\x10\n\x0cMICROSOFT_AD\x10\x03\x12\t\n\x05\x41UTH0\x10\x04\x12\x0c\n\x08ONELOGIN\x10\x05\x12\r\n\tJUMPCLOUD\x10\x06\x12\x11\n\rPING_IDENTITY\x10\x07*^\n\x0f\x44irectoryStatus\x12 \n\x1c\x44IRECTORY_STATUS_UNSPECIFIED\x10\x00\x12\t\n\x05\x44RAFT\x10\x01\x12\x0f\n\x0bIN_PROGRESS\x10\x02\x12\r\n\tCOMPLETED\x10\x03*(\n\x0cSecretStatus\x12\n\n\x06\x41\x43TIVE\x10\x00\x12\x0c\n\x08INACTIVE\x10\x01\x32\xeb\x31\n\x10\x44irectoryService\x12\xe4\x01\n\x0f\x43reateDirectory\x12/.scalekit.v1.directories.CreateDirectoryRequest\x1a\x30.scalekit.v1.directories.CreateDirectoryResponse\"n\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02@\"3/api/v1/organizations/{organization_id}/directories:\tdirectory\x12\x9e\x02\n\x0f\x44\x65leteDirectory\x12/.scalekit.v1.directories.DeleteDirectoryRequest\x1a\x16.google.protobuf.Empty\"\xc1\x01\x92\x41i\n\tDirectory\x12\x12\x44\x65lete a directory\x1a)Delete a Directory within an organizationJ\x1d\n\x03\x32\x30\x30\x12\x16\n\x14\x44\x65leted Successfully\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02:*8/api/v1/organizations/{organization_id}/directories/{id}\x12\xe9\x01\n\x0fUpdateDirectory\x12/.scalekit.v1.directories.UpdateDirectoryRequest\x1a\x30.scalekit.v1.directories.UpdateDirectoryResponse\"s\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x45\x32\x38/api/v1/organizations/{organization_id}/directories/{id}:\tdirectory\x12\xe7\x01\n\x18\x41ssignGroupsForDirectory\x12\x38.scalekit.v1.directories.AssignGroupsForDirectoryRequest\x1a\x16.google.protobuf.Empty\"y\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02K\x1a\x46/api/v1/organizations/{organization_id}/directories/{id}/groups:assign:\x01*\x12\xfb\x01\n\x0b\x41ssignRoles\x12+.scalekit.v1.directories.AssignRolesRequest\x1a,.scalekit.v1.directories.AssignRolesResponse\"\x90\x01\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x62\x1aN/api/v1/organizations/{organization_id}/directories/{id}/groups/-/roles:assign:\x10role_assignments\x12\x80\x02\n\x10UpdateAttributes\x12\x30.scalekit.v1.directories.UpdateAttributesRequest\x1a\x31.scalekit.v1.directories.UpdateAttributesResponse\"\x86\x01\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02X\x1a\x43/api/v1/organizations/{organization_id}/directories/{id}/attributes:\x11\x61ttribute_mapping\x12\xa4\x03\n\x0cGetDirectory\x12,.scalekit.v1.directories.GetDirectoryRequest\x1a-.scalekit.v1.directories.GetDirectoryResponse\"\xb6\x02\x92\x41\xda\x01\n\tDirectory\x12\x15Get directory details\x1aPRetrieves detailed information about a specific directory within an organizationJd\n\x03\x32\x30\x30\x12]\n(Successfully retrieved directory details\x12\x31\n/\x1a-.scalekit.v1.directories.GetDirectoryResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\x82\xd3\xe4\x93\x02:\x12\x38/api/v1/organizations/{organization_id}/directories/{id}\x12\xfd\x02\n\x0fListDirectories\x12/.scalekit.v1.directories.ListDirectoriesRequest\x1a\x30.scalekit.v1.directories.ListDirectoriesResponse\"\x86\x02\x92\x41\xaf\x01\n\tDirectory\x12\x1dList organization directoriesJ\x82\x01\n\x03\x32\x30\x30\x12{\nCSuccessfully retrieved the list of directories for the organization\x12\x34\n2\x1a\x30.scalekit.v1.directories.ListDirectoriesResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\x82\xd3\xe4\x93\x02\x35\x12\x33/api/v1/organizations/{organization_id}/directories\x12\xc3\x03\n\x0f\x45nableDirectory\x12/.scalekit.v1.directories.ToggleDirectoryRequest\x1a\x30.scalekit.v1.directories.ToggleDirectoryResponse\"\xcc\x02\x92\x41\xe8\x01\n\tDirectory\x12\x12\x45nable a directory\x1a\x7f\x41\x63tivates a directory within an organization, allowing it to synchronize users and groups with the connected Directory providerJF\n\x03\x32\x30\x30\x12?\n\x07Success\x12\x34\n2\x1a\x30.scalekit.v1.directories.ToggleDirectoryResponse\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\x82\xd3\xe4\x93\x02\x41\x32?/api/v1/organizations/{organization_id}/directories/{id}:enable\x12\x8e\x04\n\x10\x44isableDirectory\x12/.scalekit.v1.directories.ToggleDirectoryRequest\x1a\x30.scalekit.v1.directories.ToggleDirectoryResponse\"\x96\x03\x92\x41\xb1\x02\n\tDirectory\x12\x13\x44isable a directory\x1a\xaa\x01Stops synchronization of users and groups from a specified directory within an organization. This operation prevents further updates from the connected Directory providerJb\n\x03\x32\x30\x30\x12[\n#Successfully disabled the directory\x12\x34\n2\x1a\x30.scalekit.v1.directories.ToggleDirectoryResponse\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\x82\xd3\xe4\x93\x02\x42\x32@/api/v1/organizations/{organization_id}/directories/{id}:disable\x12\xcd\x04\n\x12ListDirectoryUsers\x12\x32.scalekit.v1.directories.ListDirectoryUsersRequest\x1a\x33.scalekit.v1.directories.ListDirectoryUsersResponse\"\xcd\x03\x92\x41\xe1\x02\n\tDirectory\x12\x14List directory users\x1a\xb2\x01Retrieves a list of all users within a specified directory for an organization. This endpoint allows you to view user accounts associated with your connected Directory Providers.J\x88\x01\n\x03\x32\x30\x30\x12\x80\x01\nESuccessfully retrieved the list of users from the specified directory\x12\x37\n5\x1a\x33.scalekit.v1.directories.ListDirectoryUsersResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\x82\xd3\xe4\x93\x02J\x12H/api/v1/organizations/{organization_id}/directories/{directory_id}/users\x12\xa4\x04\n\x13ListDirectoryGroups\x12\x33.scalekit.v1.directories.ListDirectoryGroupsRequest\x1a\x34.scalekit.v1.directories.ListDirectoryGroupsResponse\"\xa1\x03\x92\x41\xb4\x02\n\tDirectory\x12\x15List directory groups\x1a\x82\x01Retrieves all groups from a specified directory. Use this endpoint to view group structures from your connected identity provider.J\x8a\x01\n\x03\x32\x30\x30\x12\x82\x01\nFSuccessfully retrieved the list of groups from the specified directory\x12\x38\n6\x1a\x34.scalekit.v1.directories.ListDirectoryGroupsResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\x82\xd3\xe4\x93\x02K\x12I/api/v1/organizations/{organization_id}/directories/{directory_id}/groups\x12\xd3\x04\n\x1aListDirectoryGroupsSummary\x12:.scalekit.v1.directories.ListDirectoryGroupsSummaryRequest\x1a\x34.scalekit.v1.directories.ListDirectoryGroupsResponse\"\xc2\x03\x92\x41\xbe\x02\n\tDirectory\x12\x1dList directory groups summary\x1a\x84\x01Retrieves all groups from a specified directory. This is not a paginated api. It gives a summary view with id and name of the group.J\x8a\x01\n\x03\x32\x30\x30\x12\x82\x01\nFSuccessfully retrieved the list of groups from the specified directory\x12\x38\n6\x1a\x34.scalekit.v1.directories.ListDirectoryGroupsResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02S\x12Q/api/v1/organizations/{organization_id}/directories/{directory_id}/groups/summary\x12\xfe\x02\n\x15\x43reateDirectorySecret\x12\x35.scalekit.v1.directories.CreateDirectorySecretRequest\x1a\x36.scalekit.v1.directories.CreateDirectorySecretResponse\"\xf5\x01\x92\x41x\n\tDirectory\x12\x1d\x43reate secret for a directoryJL\n\x03\x32\x30\x30\x12\x45\n\x07Success\x12:\n8\x1a\x36.scalekit.v1.directories.CreateDirectorySecretResponse\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02L\"J/api/v1/organizations/{organization_id}/directories/{directory_id}/secrets\x12\x9e\x03\n\x19RegenerateDirectorySecret\x12\x39.scalekit.v1.directories.RegenerateDirectorySecretRequest\x1a:.scalekit.v1.directories.RegenerateDirectorySecretResponse\"\x89\x02\x92\x41\x80\x01\n\tDirectory\x12!Regenerate secret for a directoryJP\n\x03\x32\x30\x30\x12I\n\x07Success\x12>\n<\x1a:.scalekit.v1.directories.RegenerateDirectorySecretResponse\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02W\"U/api/v1/organizations/{organization_id}/directories/{directory_id}/secrets:regenerate\x12\xdd\x01\n\x14TriggerDirectorySync\x12\x34.scalekit.v1.directories.TriggerDirectorySyncRequest\x1a\x16.google.protobuf.Empty\"w\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02I\x12G/api/v1/organizations/{organization_id}/directories/{directory_id}:sync\x1a\xaa\x02\x92\x41\xa6\x02\n\tDirectory\x12\x98\x02\x44irectory management for viewing and controlling external identity provider connections in your Scalekit environment. This service provides endpoints for retrieving directory information, listing directories and their contents, and enabling or disabling directory synchronization.B7Z5github.com/scalekit-inc/scalekit/pkg/grpc/directoriesb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n)scalekit/v1/directories/directories.proto\x12\x17scalekit.v1.directories\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"\xdb\x01\n\x13GetDirectoryRequest\x12S\n\x02id\x18\x01 \x01(\tBC\x92\x41\x37\x32\"Unique identifier of the directoryJ\x11\"dir_12131243412\"\xbaH\x06r\x04\x10\x01\x18 R\x02id\x12o\n\x0forganization_id\x18\x02 \x01(\tBF\x92\x41:2%Unique identifier of the organizationJ\x11\"org_12131243412\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\"\x91\x01\n\x14GetDirectoryResponse\x12y\n\tdirectory\x18\x01 \x01(\x0b\x32\".scalekit.v1.directories.DirectoryB7\x92\x41\x34\x32\x32\x44\x65tailed information about the requested directoryR\tdirectory\"\xf7\x01\n\x16\x43reateDirectoryRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41?2$Unique identifier to an OrganizationJ\x17\"org_12362474900684814\"\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x0eorganizationId\x12\x64\n\tdirectory\x18\x02 \x01(\x0b\x32(.scalekit.v1.directories.CreateDirectoryB\x1c\x92\x41\x13\x32\x11\x44irectory Details\xbaH\x03\xc8\x01\x01R\tdirectory\"\xf7\x01\n\x0f\x43reateDirectory\x12k\n\x0e\x64irectory_type\x18\x01 \x01(\x0e\x32&.scalekit.v1.directories.DirectoryTypeB\x1c\x92\x41\x0e\x32\x04TypeJ\x06\"SCIM\"\xbaH\x08\x82\x01\x02\x10\x01\xc8\x01\x01R\rdirectoryType\x12w\n\x12\x64irectory_provider\x18\x02 \x01(\x0e\x32*.scalekit.v1.directories.DirectoryProviderB\x1c\x92\x41\x11\x32\x07ProvideJ\x06\"OKTA\"\xbaH\x05\x82\x01\x02\x10\x01R\x11\x64irectoryProvider\"y\n\x17\x43reateDirectoryResponse\x12^\n\tdirectory\x18\x01 \x01(\x0b\x32\".scalekit.v1.directories.DirectoryB\x1c\x92\x41\x13\x32\x11\x44irectory Details\xbaH\x03\xc8\x01\x01R\tdirectory\"\xd9\x01\n\x16UpdateDirectoryRequest\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02id\x12\x38\n\x0forganization_id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x64\n\tdirectory\x18\x03 \x01(\x0b\x32(.scalekit.v1.directories.UpdateDirectoryB\x1c\x92\x41\x13\x32\x11\x44irectory Details\xbaH\x03\xc8\x01\x01R\tdirectory\"\x9a\x06\n\x0fUpdateDirectory\x12\x33\n\x04name\x18\x02 \x01(\tB\x1f\x92\x41\x12\x32\x04NameJ\n\"Azure AD\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x04name\x12h\n\x0e\x64irectory_type\x18\x03 \x01(\x0e\x32&.scalekit.v1.directories.DirectoryTypeB\x19\x92\x41\x0e\x32\x04TypeJ\x06\"SCIM\"\xbaH\x05\x82\x01\x02\x10\x01R\rdirectoryType\x12+\n\x07\x65nabled\x18\x07 \x01(\x08\x42\x11\x92\x41\x0e\x32\x06StatusJ\x04trueR\x07\x65nabled\x12\xec\x01\n\x12\x64irectory_provider\x18\x08 \x01(\x0e\x32*.scalekit.v1.directories.DirectoryProviderB\x90\x01\x92\x41\x84\x01\x32-Identity provider connected to this directoryJS\"OKTA\", \"GOOGLE\", \"MICROSOFT_AD\", \"AUTH0\", \"ONELOGIN\", \"JUMPCLOUD\", \"PING_IDENTITY\"\xbaH\x05\x82\x01\x02\x10\x01R\x11\x64irectoryProvider\x12h\n\x06status\x18\t \x01(\x0e\x32(.scalekit.v1.directories.DirectoryStatusB&\x92\x41\x1b\x32\x0cSetup StatusJ\x0b\"COMPLETED\"\xbaH\x05\x82\x01\x02\x10\x01R\x06status\x12\x45\n\x08mappings\x18\n \x03(\x0b\x32).scalekit.v1.directories.DirectoryMappingR\x08mappings\x12q\n\x06groups\x18\x0f \x03(\x0b\x32&.scalekit.v1.directories.ExternalGroupB1\x92\x41.2,List of groups associated with the directoryR\x06groupsJ\x04\x08\x01\x10\x02J\x04\x08\x04\x10\x05J\x04\x08\x06\x10\x07J\x04\x08\x0b\x10\x0cJ\x04\x08\x0c\x10\rJ\x04\x08\r\x10\x0eJ\x04\x08\x0e\x10\x0f\"y\n\x17UpdateDirectoryResponse\x12^\n\tdirectory\x18\x01 \x01(\x0b\x32\".scalekit.v1.directories.DirectoryB\x1c\x92\x41\x13\x32\x11\x44irectory Details\xbaH\x03\xc8\x01\x01R\tdirectory\"\xdf\x01\n\x1f\x41ssignGroupsForDirectoryRequest\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02id\x12\x38\n\x0forganization_id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x61\n\x0c\x65xternal_ids\x18\x03 \x03(\tB>\x92\x41\x35\x32\x33\x65xternal_ids of groups to be tracked during polling\xbaH\x03\xc8\x01\x01R\x0b\x65xternalIds\"\x92\x01\n\x16ListDirectoriesRequest\x12x\n\x0forganization_id\x18\x01 \x01(\tBO\x92\x41=2%Unique identifier of the organizationJ\x14\"org_12362474900684\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\"\xa1\x01\n\x17ListDirectoriesResponse\x12\x85\x01\n\x0b\x64irectories\x18\x01 \x03(\x0b\x32\".scalekit.v1.directories.DirectoryB?\x92\x41\x36\x32\x34List of directories associated with the organization\xbaH\x03\xc8\x01\x01R\x0b\x64irectories\"\xd6\t\n\x19ListDirectoryUsersRequest\x12x\n\x0forganization_id\x18\x01 \x01(\tBO\x92\x41=2%Unique identifier of the organizationJ\x14\"org_12131243412331\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x87\x01\n\x0c\x64irectory_id\x18\x02 \x01(\tBd\x92\x41R2:Unique identifier of the directory within the organizationJ\x14\"dir_12131243412331\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\x12\x86\x01\n\tpage_size\x18\x03 \x01(\rBi\x92\x41_2YNumber of users to return per page. Maximum value is 30. If not specified, defaults to 10J\x02\x31\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xb0\x01\n\npage_token\x18\x04 \x01(\tB\x90\x01\x92\x41\x8c\x01\x32\x89\x01Token for pagination. Use the value returned in the \'next_page_token\' field of the previous response to retrieve the next page of resultsR\tpageToken\x12\xe1\x01\n\x0einclude_detail\x18\x05 \x01(\x08\x42\xb4\x01\x92\x41\xb0\x01\x32\xa7\x01If set to true, the response will include the full user payload with all available details. If false or not specified, only essential user information will be returnedJ\x04trueH\x00R\rincludeDetail\x88\x01\x01\x12\xa1\x01\n\x12\x64irectory_group_id\x18\x06 \x01(\tBn\x92\x41W2>Filter users by their membership in a specific directory groupJ\x15\"dirgroup_1213124341\"\xbaH\x11r\x0f\x10\x01\x18%:\tdirgroup_H\x01R\x10\x64irectoryGroupId\x88\x01\x01\x12\xb4\x01\n\rupdated_after\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampBn\x92\x41k2QFilter users that were updated after the specified timestamp. Use ISO 8601 formatJ\x16\"2021-01-01T00:00:00Z\"H\x02R\x0cupdatedAfter\x88\x01\x01\x42\x11\n\x0f_include_detailB\x15\n\x13_directory_group_idB\x10\n\x0e_updated_after\"\xe1\x04\n\x1aListDirectoryUsersResponse\x12\x81\x01\n\x05users\x18\x01 \x03(\x0b\x32&.scalekit.v1.directories.DirectoryUserBC\x92\x41@2>List of directory users retrieved from the specified directoryR\x05users\x12t\n\ntotal_size\x18\x02 \x01(\rBU\x92\x41R2PTotal number of users available in the directory that match the request criteriaR\ttotalSize\x12\xa5\x01\n\x0fnext_page_token\x18\x03 \x01(\tB}\x92\x41z2xToken for pagination. Use this token in the \'page_token\' field of the next request to fetch the subsequent page of usersR\rnextPageToken\x12\xa0\x01\n\x0fprev_page_token\x18\x04 \x01(\tBx\x92\x41u2sToken for pagination. Use this token in the \'page_token\' field of the next request to fetch the prior page of usersR\rprevPageToken\"\xb6\x08\n\x1aListDirectoryGroupsRequest\x12y\n\x0forganization_id\x18\x01 \x01(\tBP\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12p\n\x0c\x64irectory_id\x18\x02 \x01(\tBM\x92\x41;2\"Unique identifier of the directoryJ\x15\"dir_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\x12\x87\x01\n\tpage_size\x18\x03 \x01(\rBj\x92\x41`2ZNumber of groups to return per page. Maximum value is 30. If not specified, defaults to 10J\x02\x31\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\x88\x01\n\npage_token\x18\x04 \x01(\tBi\x92\x41\x66\x32\x64Token for pagination. Use the value returned in the \'next_page_token\' field of the previous responseR\tpageToken\x12\xa2\x01\n\rupdated_after\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\\\x92\x41Y2?Filter groups updated after this timestamp. Use ISO 8601 formatJ\x16\"2021-01-01T00:00:00Z\"H\x00R\x0cupdatedAfter\x88\x01\x01\x12\x96\x01\n\x0einclude_detail\x18\x06 \x01(\x08\x42j\x92\x41g2_If true, includes full group details. If false or not specified, returns basic information onlyJ\x04trueH\x01R\rincludeDetail\x88\x01\x01\x12\x96\x01\n\x17include_external_groups\x18\x07 \x01(\x08\x42Y\x92\x41V2NIf true, returns group and its details from external provider (default: false)J\x04trueH\x02R\x15includeExternalGroups\x88\x01\x01\x42\x10\n\x0e_updated_afterB\x11\n\x0f_include_detailB\x1a\n\x18_include_external_groups\"\xcd\x04\n\x1bListDirectoryGroupsResponse\x12\x85\x01\n\x06groups\x18\x01 \x03(\x0b\x32\'.scalekit.v1.directories.DirectoryGroupBD\x92\x41\x41\x32?List of directory groups retrieved from the specified directoryR\x06groups\x12r\n\ntotal_size\x18\x02 \x01(\rBS\x92\x41P2NTotal number of groups matching the request criteria, regardless of paginationR\ttotalSize\x12\x95\x01\n\x0fnext_page_token\x18\x03 \x01(\tBm\x92\x41j2hToken to retrieve the next page of results. Use this token in the \'page_token\' field of the next requestR\rnextPageToken\x12\x99\x01\n\x0fprev_page_token\x18\x04 \x01(\tBq\x92\x41n2lToken to retrieve the previous page of results. Use this token in the \'page_token\' field of the next requestR\rprevPageToken\"\x90\x02\n!ListDirectoryGroupsSummaryRequest\x12y\n\x0forganization_id\x18\x01 \x01(\tBP\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12p\n\x0c\x64irectory_id\x18\x02 \x01(\tBM\x92\x41;2\"Unique identifier of the directoryJ\x15\"dir_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\"\x94\x13\n\tDirectory\x12]\n\x02id\x18\x01 \x01(\tBM\x92\x41;2\"Unique identifier of the directoryJ\x15\"dir_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02id\x12}\n\x04name\x18\x02 \x01(\tBi\x92\x41\\2NName of the directory, typically representing the connected Directory providerJ\n\"Azure AD\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x04name\x12\xb7\x01\n\x0e\x64irectory_type\x18\x03 \x01(\x0e\x32&.scalekit.v1.directories.DirectoryTypeBh\x92\x41]2SType of the directory, indicating the protocol or standard used for synchronizationJ\x06\"SCIM\"\xbaH\x05\x82\x01\x02\x10\x01R\rdirectoryType\x12\x98\x01\n\x0forganization_id\x18\x04 \x01(\tBo\x92\x41]2DUnique identifier of the organization to which the directory belongsJ\x15\"org_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x85\x01\n\x07\x65nabled\x18\x05 \x01(\x08\x42k\x92\x41h2`Indicates whether the directory is currently enabled and actively synchronizing users and groupsJ\x04trueR\x07\x65nabled\x12\x9d\x01\n\x12\x64irectory_provider\x18\x06 \x01(\x0e\x32*.scalekit.v1.directories.DirectoryProviderBB\x92\x41\x37\x32-Identity provider connected to this directoryJ\x06\"OKTA\"\xbaH\x05\x82\x01\x02\x10\x01R\x11\x64irectoryProvider\x12\xbf\x01\n\x0elast_synced_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB}\x92\x41z2`Timestamp of the last successful synchronization of users and groups from the Directory ProviderJ\x16\"2024-10-01T00:00:00Z\"R\x0clastSyncedAt\x12\xed\x01\n\x12\x64irectory_endpoint\x18\x08 \x01(\tB\xbd\x01\x92\x41\xaf\x01\x32\x65The endpoint URL generated by Scalekit for synchronizing users and groups from the Directory ProviderJF\"https://yourapp.scalekit.com/api/v1/directoies/dir_123212312/scim/v2\"\xbaH\x07r\x05\x10\x01\x18\xd0\x0fR\x11\x64irectoryEndpoint\x12P\n\x0btotal_users\x18\t \x01(\x05\x42/\x92\x41,2&Total number of users in the directoryJ\x02\x31\x30R\ntotalUsers\x12S\n\x0ctotal_groups\x18\n \x01(\x05\x42\x30\x92\x41-2\'Total number of groups in the directoryJ\x02\x31\x30R\x0btotalGroups\x12\x95\x01\n\x07secrets\x18\x0b \x03(\x0b\x32\x1f.scalekit.v1.directories.SecretBZ\x92\x41W2UList of secrets used for authenticating and synchronizing with the Directory ProviderR\x07secrets\x12\x9b\x01\n\x05stats\x18\x0c \x01(\x0b\x32\x1e.scalekit.v1.directories.StatsBe\x92\x41\x62\x32`Statistics and metrics related to the directory, such as synchronization status and error countsR\x05stats\x12\xaf\x01\n\x10role_assignments\x18\r \x01(\x0b\x32(.scalekit.v1.directories.RoleAssignmentsBZ\x92\x41W2URole assignments associated with the directory, defining group based role assignmentsR\x0froleAssignments\x12\xac\x01\n\x12\x61ttribute_mappings\x18\x0e \x01(\x0b\x32*.scalekit.v1.directories.AttributeMappingsBQ\x92\x41N2LMappings between directory attributes and Scalekit user and group attributesR\x11\x61ttributeMappings\x12\x44\n\x06status\x18\x0f \x01(\tB,\x92\x41!2\x10\x44irectory StatusJ\r\"IN_PROGRESS\"\xbaH\x05\x82\x01\x02\x10\x01R\x06status\x12~\n\x05\x65mail\x18\x10 \x01(\tBh\x92\x41\x65\x32HEmail Id associated with Directory whose access will be used for pollingJ\x19\"john.doe@scalekit.cloud\"R\x05\x65mail\x12v\n\x0egroups_tracked\x18\x11 \x01(\tBO\x92\x41L2CIt indicates if all groups are tracked or select groups are trackedJ\x05\"ALL\"R\rgroupsTracked\"\xaf\x03\n\x16ToggleDirectoryRequest\x12\xc8\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9e\x01\x92\x41\x8b\x01\x32rA unique identifier for the organization. The value must begin with \'org_\' and be between 1 and 32 characters longJ\x15\"org_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xc3\x01\n\x02id\x18\x03 \x01(\tB\xb2\x01\x92\x41\x9f\x01\x32\x85\x01\x41 unique identifier for a directory within the organization. The value must begin with \'dir_\' and be between 1 and 32 characters longJ\x15\"dir_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02idJ\x04\x08\x02\x10\x03\"\xac\x04\n\x17ToggleDirectoryResponse\x12\x96\x02\n\x07\x65nabled\x18\x01 \x01(\x08\x42\xfb\x01\x92\x41\xf7\x01\x32\xee\x01Specifies the directory\'s state after the toggle operation. A value of `true` indicates that the directory is enabled and actively synchronizing users and groups. A value of `false` means the directory is disabled, halting synchronizationJ\x04trueR\x07\x65nabled\x12\xe5\x01\n\rerror_message\x18\x02 \x01(\tB\xba\x01\x92\x41\xb6\x01\x32\x8f\x01\x43ontains a human-readable error message if the toggle operation encountered an issue. If the operation was successful, this field will be emptyJ\"\"The directory is already enabled\"H\x00R\x0c\x65rrorMessage\x88\x01\x01\x42\x10\n\x0e_error_message\"z\n\x10\x44irectoryMapping\x12\x1e\n\x03key\x18\x01 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x03key\x12#\n\x06map_to\x18\x02 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x05mapTo\x12!\n\x0c\x64isplay_name\x18\x03 \x01(\tR\x0b\x64isplayName\"\xae\x05\n\rDirectoryUser\x12J\n\x02id\x18\x01 \x01(\tB:\x92\x41$2\x07User IDJ\x19\"diruser_121312434123312\"\xbaH\x10r\x0e\x10\x01\x18$:\x08\x64iruser_R\x02id\x12\x35\n\x05\x65mail\x18\x02 \x01(\tB\x1f\x92\x41\x12\x32\x05\x45mailJ\t\"johndoe\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x05\x65mail\x12[\n\x12preferred_username\x18\x03 \x01(\tB,\x92\x41\x1f\x32\x12Preferred UsernameJ\t\"johndoe\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x11preferredUsername\x12@\n\ngiven_name\x18\x04 \x01(\tB!\x92\x41\x14\x32\nFirst NameJ\x06\"John\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\tgivenName\x12@\n\x0b\x66\x61mily_name\x18\x05 \x01(\tB\x1f\x92\x41\x12\x32\tLast NameJ\x05\"Doe\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\nfamilyName\x12\x62\n\nupdated_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\'\x92\x41$2\nUpdated AtJ\x16\"2024-10-01T00:00:00Z\"R\tupdatedAt\x12#\n\x06\x65mails\x18\x10 \x03(\tB\x0b\x92\x41\x08\x32\x06\x45mailsR\x06\x65mails\x12L\n\x06groups\x18\x11 \x03(\x0b\x32\'.scalekit.v1.directories.DirectoryGroupB\x0b\x92\x41\x08\x32\x06GroupsR\x06groups\x12\\\n\x0buser_detail\x18\x12 \x01(\x0b\x32\x17.google.protobuf.StructB\"\x92\x41\x1f\x32\x1d\x43omplete User Details PayloadR\nuserDetailJ\x04\x08\x07\x10\x10\"\xf3\x01\n\rExternalGroup\x12T\n\x0b\x65xternal_id\x18\x01 \x01(\tB3\x92\x41&2\x11\x45xternal Group IDJ\x11\"02y3w247124ccqi\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\nexternalId\x12H\n\x0c\x64isplay_name\x18\x02 \x01(\tB%\x92\x41\x18\x32\x0c\x44isplay NameJ\x08\"Admins\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x0b\x64isplayName\x12\x42\n\x05\x65mail\x18\x03 \x01(\tB,\x92\x41\x1f\x32\x05\x45mailJ\x16\"johndoe@scalekit.com\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x05\x65mail\"\xb2\x03\n\x0e\x44irectoryGroup\x12M\n\x02id\x18\x01 \x01(\tB=\x92\x41&2\x08Group IDJ\x1a\"dirgroup_121312434123312\"\xbaH\x11r\x0f\x10\x01\x18$:\tdirgroup_R\x02id\x12H\n\x0c\x64isplay_name\x18\x02 \x01(\tB%\x92\x41\x18\x32\x0c\x44isplay NameJ\x08\"Admins\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x0b\x64isplayName\x12\x42\n\x0btotal_users\x18\x03 \x01(\x05\x42!\x92\x41\x1e\x32\x18Total Users in the GroupJ\x02\x31\x30R\ntotalUsers\x12\x62\n\nupdated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\'\x92\x41$2\nUpdated AtJ\x16\"2024-10-01T00:00:00Z\"R\tupdatedAt\x12_\n\x0cgroup_detail\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructB#\x92\x41 2\x1e\x43omplete Group Details PayloadR\x0bgroupDetail\"\xb9\x01\n\x1c\x43reateDirectorySecretRequest\x12\x65\n\x0forganization_id\x18\x01 \x01(\tB<\x92\x41*2\x0fOrganization IDJ\x17\"org_12362474900684814\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x32\n\x0c\x64irectory_id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\"\xa4\x02\n\x1d\x43reateDirectorySecretResponse\x12\xb4\x01\n\x0cplain_secret\x18\x01 \x01(\tB\x90\x01\x92\x41\x8c\x01\x32VPlain Secret. This is only returned in Plain Text as response to the Creation Request.J2\"dXNlcm5hbWU6cGFzc3dvcmQ6c2VjcmV0a2V5MTIzNDU2Nzg5\"R\x0bplainSecret\x12L\n\x06secret\x18\x02 \x01(\x0b\x32\x1f.scalekit.v1.directories.SecretB\x13\x92\x41\x10\x32\x0eSecret DetailsR\x06secret\"\x90\x01\n RegenerateDirectorySecretRequest\x12\x38\n\x0forganization_id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x32\n\x0c\x64irectory_id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\"\xa8\x02\n!RegenerateDirectorySecretResponse\x12\xb4\x01\n\x0cplain_secret\x18\x01 \x01(\tB\x90\x01\x92\x41\x8c\x01\x32VPlain Secret. This is only returned in Plain Text as response to the Creation Request.J2\"dXNlcm5hbWU6cGFzc3dvcmQ6c2VjcmV0a2V5MTIzNDU2Nzg5\"R\x0bplainSecret\x12L\n\x06secret\x18\x02 \x01(\x0b\x32\x1f.scalekit.v1.directories.SecretB\x13\x92\x41\x10\x32\x0eSecret DetailsR\x06secret\"\xe6\x04\n\x06Secret\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04sec_R\x02id\x12g\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB*\x92\x41\'2\rCreation TimeJ\x16\"2024-10-01T00:00:00Z\"R\ncreateTime\x12?\n\rsecret_suffix\x18\x04 \x01(\tB\x1a\x92\x41\x17\x32\rSecret SuffixJ\x06\"Nzg5\"R\x0csecretSuffix\x12]\n\x06status\x18\x05 \x01(\x0e\x32%.scalekit.v1.directories.SecretStatusB\x1e\x92\x41\x1b\x32\rSecret StatusJ\n\"INACTIVE\"R\x06status\x12\x65\n\x0b\x65xpire_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB(\x92\x41%2\x0b\x45xpiry TimeJ\x16\"2025-10-01T00:00:00Z\"R\nexpireTime\x12m\n\x0elast_used_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB+\x92\x41(2\x0eLast Used TimeJ\x16\"2024-10-01T00:00:00Z\"R\x0clastUsedTime\x12\\\n\x0c\x64irectory_id\x18\t \x01(\tB9\x92\x41\'2\x0c\x44irectory IDJ\x17\"dir_12362474900684814\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\"\xb7\x03\n\x05Stats\x12\x46\n\x0btotal_users\x18\x01 \x01(\x05\x42%\x92\x41\"2\x1cTotal Users in the DirectoryJ\x02\x31\x30R\ntotalUsers\x12I\n\x0ctotal_groups\x18\x02 \x01(\x05\x42&\x92\x41#2\x1dTotal Groups in the DirectoryJ\x02\x31\x30R\x0btotalGroups\x12\x8d\x01\n\x10group_updated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBG\x92\x41\x44\x32*Max time of Group Updated At for DirectoryJ\x16\"2024-10-01T00:00:00Z\"R\x0egroupUpdatedAt\x12\x8a\x01\n\x0fuser_updated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampBF\x92\x41\x43\x32)Max time of User Updated At for DirectoryJ\x16\"2024-10-01T00:00:00Z\"R\ruserUpdatedAt\"\xb8\x01\n\x12\x41ssignRolesRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\x19\n\x02id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18 R\x02id\x12S\n\x10role_assignments\x18\x03 \x01(\x0b\x32(.scalekit.v1.directories.RoleAssignmentsR\x0froleAssignments\"\\\n\x0fRoleAssignments\x12I\n\x0b\x61ssignments\x18\x01 \x03(\x0b\x32\'.scalekit.v1.directories.RoleAssignmentR\x0b\x61ssignments\"j\n\x13\x41ssignRolesResponse\x12S\n\x10role_assignments\x18\x01 \x01(\x0b\x32(.scalekit.v1.directories.RoleAssignmentsR\x0froleAssignments\"\x99\x02\n\x0eRoleAssignment\x12_\n\x08group_id\x18\x01 \x01(\tBD\x92\x41\x38\x32\x1dgroup ID for the role mappingJ\x17\"dirgroup_121312434123\"\xbaH\x06r\x04\x10\x01\x18 R\x07groupId\x12?\n\trole_name\x18\x02 \x01(\tB\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\x65\n\x07role_id\x18\x03 \x01(\tBL\x92\x41\x33\x32\x1crole ID for the role mappingJ\x13\"role_121312434123\"\xbaH\x04r\x02\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\x06roleId\"\xcd\x01\n\x17UpdateAttributesRequest\x12\x38\n\x0forganization_id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x1f\n\x02id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02id\x12W\n\x11\x61ttribute_mapping\x18\x03 \x01(\x0b\x32*.scalekit.v1.directories.AttributeMappingsR\x10\x61ttributeMapping\"^\n\x11\x41ttributeMappings\x12I\n\nattributes\x18\x01 \x03(\x0b\x32).scalekit.v1.directories.AttributeMappingR\nattributes\"W\n\x10\x41ttributeMapping\x12\x1e\n\x03key\x18\x01 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x03key\x12#\n\x06map_to\x18\x02 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x05mapTo\"u\n\x18UpdateAttributesResponse\x12Y\n\x12\x61ttribute_mappings\x18\x01 \x01(\x0b\x32*.scalekit.v1.directories.AttributeMappingsR\x11\x61ttributeMappings\"y\n\x16\x44\x65leteDirectoryRequest\x12\x38\n\x0forganization_id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x1f\n\x02id\x18\x03 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02idJ\x04\x08\x02\x10\x03\"\xfb\x01\n\x1bTriggerDirectorySyncRequest\x12h\n\x0c\x64irectory_id\x18\x01 \x01(\tBE\x92\x41\x39\x32 Unique identifier of a DirectoryJ\x15\"dir_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0b\x64irectoryId\x12r\n\x0forganization_id\x18\x02 \x01(\tBI\x92\x41=2$Unique identifier to an OrganizationJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\"\x90\x01\n\x1aGetDirectoryContextRequest\x12\x35\n\x0c\x64irectory_id\x18\x01 \x01(\tB\x12\xbaH\x0fr\n\x10\x01\x18 :\x04\x64ir_\xc8\x01\x01R\x0b\x64irectoryId\x12;\n\x0forganization_id\x18\x02 \x01(\tB\x12\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\"P\n\x1bGetDirectoryContextResponse\x12\x31\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext\"\xc6\x01\n\x1dUpdateDirectoryContextRequest\x12\x35\n\x0c\x64irectory_id\x18\x01 \x01(\tB\x12\xbaH\x0fr\n\x10\x01\x18 :\x04\x64ir_\xc8\x01\x01R\x0b\x64irectoryId\x12;\n\x0forganization_id\x18\x02 \x01(\tB\x12\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\x12\x31\n\x07\x63ontext\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext*M\n\rDirectoryType\x12\x1e\n\x1a\x44IRECTORY_TYPE_UNSPECIFIED\x10\x00\x12\x08\n\x04SCIM\x10\x01\x12\x08\n\x04LDAP\x10\x02\x12\x08\n\x04POLL\x10\x03*\x9a\x01\n\x11\x44irectoryProvider\x12\"\n\x1e\x44IRECTORY_PROVIDER_UNSPECIFIED\x10\x00\x12\x08\n\x04OKTA\x10\x01\x12\n\n\x06GOOGLE\x10\x02\x12\x10\n\x0cMICROSOFT_AD\x10\x03\x12\t\n\x05\x41UTH0\x10\x04\x12\x0c\n\x08ONELOGIN\x10\x05\x12\r\n\tJUMPCLOUD\x10\x06\x12\x11\n\rPING_IDENTITY\x10\x07*^\n\x0f\x44irectoryStatus\x12 \n\x1c\x44IRECTORY_STATUS_UNSPECIFIED\x10\x00\x12\t\n\x05\x44RAFT\x10\x01\x12\x0f\n\x0bIN_PROGRESS\x10\x02\x12\r\n\tCOMPLETED\x10\x03*(\n\x0cSecretStatus\x12\n\n\x06\x41\x43TIVE\x10\x00\x12\x0c\n\x08INACTIVE\x10\x01\x32\xa9\x38\n\x10\x44irectoryService\x12\xe4\x01\n\x0f\x43reateDirectory\x12/.scalekit.v1.directories.CreateDirectoryRequest\x1a\x30.scalekit.v1.directories.CreateDirectoryResponse\"n\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02@\"3/api/v1/organizations/{organization_id}/directories:\tdirectory\x12\x9e\x02\n\x0f\x44\x65leteDirectory\x12/.scalekit.v1.directories.DeleteDirectoryRequest\x1a\x16.google.protobuf.Empty\"\xc1\x01\x92\x41i\n\tDirectory\x12\x12\x44\x65lete a directory\x1a)Delete a Directory within an organizationJ\x1d\n\x03\x32\x30\x30\x12\x16\n\x14\x44\x65leted Successfully\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02:*8/api/v1/organizations/{organization_id}/directories/{id}\x12\xe9\x01\n\x0fUpdateDirectory\x12/.scalekit.v1.directories.UpdateDirectoryRequest\x1a\x30.scalekit.v1.directories.UpdateDirectoryResponse\"s\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x45\x32\x38/api/v1/organizations/{organization_id}/directories/{id}:\tdirectory\x12\xe7\x01\n\x18\x41ssignGroupsForDirectory\x12\x38.scalekit.v1.directories.AssignGroupsForDirectoryRequest\x1a\x16.google.protobuf.Empty\"y\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02K\x1a\x46/api/v1/organizations/{organization_id}/directories/{id}/groups:assign:\x01*\x12\xfb\x01\n\x0b\x41ssignRoles\x12+.scalekit.v1.directories.AssignRolesRequest\x1a,.scalekit.v1.directories.AssignRolesResponse\"\x90\x01\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x62\x1aN/api/v1/organizations/{organization_id}/directories/{id}/groups/-/roles:assign:\x10role_assignments\x12\x80\x02\n\x10UpdateAttributes\x12\x30.scalekit.v1.directories.UpdateAttributesRequest\x1a\x31.scalekit.v1.directories.UpdateAttributesResponse\"\x86\x01\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02X\x1a\x43/api/v1/organizations/{organization_id}/directories/{id}/attributes:\x11\x61ttribute_mapping\x12\xa4\x03\n\x0cGetDirectory\x12,.scalekit.v1.directories.GetDirectoryRequest\x1a-.scalekit.v1.directories.GetDirectoryResponse\"\xb6\x02\x92\x41\xda\x01\n\tDirectory\x12\x15Get directory details\x1aPRetrieves detailed information about a specific directory within an organizationJd\n\x03\x32\x30\x30\x12]\n(Successfully retrieved directory details\x12\x31\n/\x1a-.scalekit.v1.directories.GetDirectoryResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\x82\xd3\xe4\x93\x02:\x12\x38/api/v1/organizations/{organization_id}/directories/{id}\x12\xfd\x02\n\x0fListDirectories\x12/.scalekit.v1.directories.ListDirectoriesRequest\x1a\x30.scalekit.v1.directories.ListDirectoriesResponse\"\x86\x02\x92\x41\xaf\x01\n\tDirectory\x12\x1dList organization directoriesJ\x82\x01\n\x03\x32\x30\x30\x12{\nCSuccessfully retrieved the list of directories for the organization\x12\x34\n2\x1a\x30.scalekit.v1.directories.ListDirectoriesResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\x82\xd3\xe4\x93\x02\x35\x12\x33/api/v1/organizations/{organization_id}/directories\x12\xc3\x03\n\x0f\x45nableDirectory\x12/.scalekit.v1.directories.ToggleDirectoryRequest\x1a\x30.scalekit.v1.directories.ToggleDirectoryResponse\"\xcc\x02\x92\x41\xe8\x01\n\tDirectory\x12\x12\x45nable a directory\x1a\x7f\x41\x63tivates a directory within an organization, allowing it to synchronize users and groups with the connected Directory providerJF\n\x03\x32\x30\x30\x12?\n\x07Success\x12\x34\n2\x1a\x30.scalekit.v1.directories.ToggleDirectoryResponse\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\x82\xd3\xe4\x93\x02\x41\x32?/api/v1/organizations/{organization_id}/directories/{id}:enable\x12\x8e\x04\n\x10\x44isableDirectory\x12/.scalekit.v1.directories.ToggleDirectoryRequest\x1a\x30.scalekit.v1.directories.ToggleDirectoryResponse\"\x96\x03\x92\x41\xb1\x02\n\tDirectory\x12\x13\x44isable a directory\x1a\xaa\x01Stops synchronization of users and groups from a specified directory within an organization. This operation prevents further updates from the connected Directory providerJb\n\x03\x32\x30\x30\x12[\n#Successfully disabled the directory\x12\x34\n2\x1a\x30.scalekit.v1.directories.ToggleDirectoryResponse\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\x82\xd3\xe4\x93\x02\x42\x32@/api/v1/organizations/{organization_id}/directories/{id}:disable\x12\xcd\x04\n\x12ListDirectoryUsers\x12\x32.scalekit.v1.directories.ListDirectoryUsersRequest\x1a\x33.scalekit.v1.directories.ListDirectoryUsersResponse\"\xcd\x03\x92\x41\xe1\x02\n\tDirectory\x12\x14List directory users\x1a\xb2\x01Retrieves a list of all users within a specified directory for an organization. This endpoint allows you to view user accounts associated with your connected Directory Providers.J\x88\x01\n\x03\x32\x30\x30\x12\x80\x01\nESuccessfully retrieved the list of users from the specified directory\x12\x37\n5\x1a\x33.scalekit.v1.directories.ListDirectoryUsersResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\x82\xd3\xe4\x93\x02J\x12H/api/v1/organizations/{organization_id}/directories/{directory_id}/users\x12\xa4\x04\n\x13ListDirectoryGroups\x12\x33.scalekit.v1.directories.ListDirectoryGroupsRequest\x1a\x34.scalekit.v1.directories.ListDirectoryGroupsResponse\"\xa1\x03\x92\x41\xb4\x02\n\tDirectory\x12\x15List directory groups\x1a\x82\x01Retrieves all groups from a specified directory. Use this endpoint to view group structures from your connected identity provider.J\x8a\x01\n\x03\x32\x30\x30\x12\x82\x01\nFSuccessfully retrieved the list of groups from the specified directory\x12\x38\n6\x1a\x34.scalekit.v1.directories.ListDirectoryGroupsResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\x82\xd3\xe4\x93\x02K\x12I/api/v1/organizations/{organization_id}/directories/{directory_id}/groups\x12\xd3\x04\n\x1aListDirectoryGroupsSummary\x12:.scalekit.v1.directories.ListDirectoryGroupsSummaryRequest\x1a\x34.scalekit.v1.directories.ListDirectoryGroupsResponse\"\xc2\x03\x92\x41\xbe\x02\n\tDirectory\x12\x1dList directory groups summary\x1a\x84\x01Retrieves all groups from a specified directory. This is not a paginated api. It gives a summary view with id and name of the group.J\x8a\x01\n\x03\x32\x30\x30\x12\x82\x01\nFSuccessfully retrieved the list of groups from the specified directory\x12\x38\n6\x1a\x34.scalekit.v1.directories.ListDirectoryGroupsResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02S\x12Q/api/v1/organizations/{organization_id}/directories/{directory_id}/groups/summary\x12\xfe\x02\n\x15\x43reateDirectorySecret\x12\x35.scalekit.v1.directories.CreateDirectorySecretRequest\x1a\x36.scalekit.v1.directories.CreateDirectorySecretResponse\"\xf5\x01\x92\x41x\n\tDirectory\x12\x1d\x43reate secret for a directoryJL\n\x03\x32\x30\x30\x12\x45\n\x07Success\x12:\n8\x1a\x36.scalekit.v1.directories.CreateDirectorySecretResponse\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02L\"J/api/v1/organizations/{organization_id}/directories/{directory_id}/secrets\x12\x9e\x03\n\x19RegenerateDirectorySecret\x12\x39.scalekit.v1.directories.RegenerateDirectorySecretRequest\x1a:.scalekit.v1.directories.RegenerateDirectorySecretResponse\"\x89\x02\x92\x41\x80\x01\n\tDirectory\x12!Regenerate secret for a directoryJP\n\x03\x32\x30\x30\x12I\n\x07Success\x12>\n<\x1a:.scalekit.v1.directories.RegenerateDirectorySecretResponse\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02W\"U/api/v1/organizations/{organization_id}/directories/{directory_id}/secrets:regenerate\x12\xdd\x01\n\x14TriggerDirectorySync\x12\x34.scalekit.v1.directories.TriggerDirectorySyncRequest\x1a\x16.google.protobuf.Empty\"w\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02I\x12G/api/v1/organizations/{organization_id}/directories/{directory_id}:sync\x12\x96\x03\n\x13GetDirectoryContext\x12\x33.scalekit.v1.directories.GetDirectoryContextRequest\x1a\x34.scalekit.v1.directories.GetDirectoryContextResponse\"\x93\x02\x92\x41\xa7\x01\n\tDirectory\x12\x15Get directory context\x1a;Retrieves the custom context data for a specific directory.J\'\n\x03\x32\x30\x30\x12 \n\x1eReturns the directory context.J\x1d\n\x03\x34\x30\x34\x12\x16\n\x14\x44irectory not found.\x82\xb5\x18\x02\x18p\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02M\x12K/api/v1/organizations/{organization_id}/directories/{directory_id}/contexts\x12\xa2\x03\n\x16UpdateDirectoryContext\x12\x36.scalekit.v1.directories.UpdateDirectoryContextRequest\x1a\x16.google.protobuf.Empty\"\xb7\x02\x92\x41\xc2\x01\n\tDirectory\x12\x18Update directory context\x1a\x39Updates the custom context data for a specific directory.J&\n\x03\x32\x30\x30\x12\x1f\n\x1d\x43ontext updated successfully.J\x19\n\x03\x34\x30\x30\x12\x12\n\x10Invalid request.J\x1d\n\x03\x34\x30\x34\x12\x16\n\x14\x44irectory not found.\x82\xb5\x18\x02\x18p\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02V\x1aK/api/v1/organizations/{organization_id}/directories/{directory_id}/contexts:\x07\x63ontext\x1a\xaa\x02\x92\x41\xa6\x02\n\tDirectory\x12\x98\x02\x44irectory management for viewing and controlling external identity provider connections in your Scalekit environment. This service provides endpoints for retrieving directory information, listing directories and their contents, and enabling or disabling directory synchronization.B7Z5github.com/scalekit-inc/scalekit/pkg/grpc/directoriesb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -271,6 +271,14 @@ _globals['_TRIGGERDIRECTORYSYNCREQUEST'].fields_by_name['directory_id']._serialized_options = b'\222A92 Unique identifier of a DirectoryJ\025\"dir_121312434123312\"\272H\006r\004\020\001\030 ' _globals['_TRIGGERDIRECTORYSYNCREQUEST'].fields_by_name['organization_id']._loaded_options = None _globals['_TRIGGERDIRECTORYSYNCREQUEST'].fields_by_name['organization_id']._serialized_options = b'\222A=2$Unique identifier to an OrganizationJ\025\"org_121312434123312\"\272H\006r\004\020\001\030 ' + _globals['_GETDIRECTORYCONTEXTREQUEST'].fields_by_name['directory_id']._loaded_options = None + _globals['_GETDIRECTORYCONTEXTREQUEST'].fields_by_name['directory_id']._serialized_options = b'\272H\017r\n\020\001\030 :\004dir_\310\001\001' + _globals['_GETDIRECTORYCONTEXTREQUEST'].fields_by_name['organization_id']._loaded_options = None + _globals['_GETDIRECTORYCONTEXTREQUEST'].fields_by_name['organization_id']._serialized_options = b'\272H\017r\n\020\001\030 :\004org_\310\001\001' + _globals['_UPDATEDIRECTORYCONTEXTREQUEST'].fields_by_name['directory_id']._loaded_options = None + _globals['_UPDATEDIRECTORYCONTEXTREQUEST'].fields_by_name['directory_id']._serialized_options = b'\272H\017r\n\020\001\030 :\004dir_\310\001\001' + _globals['_UPDATEDIRECTORYCONTEXTREQUEST'].fields_by_name['organization_id']._loaded_options = None + _globals['_UPDATEDIRECTORYCONTEXTREQUEST'].fields_by_name['organization_id']._serialized_options = b'\272H\017r\n\020\001\030 :\004org_\310\001\001' _globals['_DIRECTORYSERVICE']._loaded_options = None _globals['_DIRECTORYSERVICE']._serialized_options = b'\222A\246\002\n\tDirectory\022\230\002Directory management for viewing and controlling external identity provider connections in your Scalekit environment. This service provides endpoints for retrieving directory information, listing directories and their contents, and enabling or disabling directory synchronization.' _globals['_DIRECTORYSERVICE'].methods_by_name['CreateDirectory']._loaded_options = None @@ -305,14 +313,18 @@ _globals['_DIRECTORYSERVICE'].methods_by_name['RegenerateDirectorySecret']._serialized_options = b'\222A\200\001\n\tDirectory\022!Regenerate secret for a directoryJP\n\003200\022I\n\007Success\022>\n<\032:.scalekit.v1.directories.RegenerateDirectorySecretResponse\202\265\030\025\n\021directories_write\030t\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002W\"U/api/v1/organizations/{organization_id}/directories/{directory_id}/secrets:regenerate' _globals['_DIRECTORYSERVICE'].methods_by_name['TriggerDirectorySync']._loaded_options = None _globals['_DIRECTORYSERVICE'].methods_by_name['TriggerDirectorySync']._serialized_options = b'\202\265\030\025\n\021directories_write\030t\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002I\022G/api/v1/organizations/{organization_id}/directories/{directory_id}:sync' - _globals['_DIRECTORYTYPE']._serialized_start=15400 - _globals['_DIRECTORYTYPE']._serialized_end=15477 - _globals['_DIRECTORYPROVIDER']._serialized_start=15480 - _globals['_DIRECTORYPROVIDER']._serialized_end=15634 - _globals['_DIRECTORYSTATUS']._serialized_start=15636 - _globals['_DIRECTORYSTATUS']._serialized_end=15730 - _globals['_SECRETSTATUS']._serialized_start=15732 - _globals['_SECRETSTATUS']._serialized_end=15772 + _globals['_DIRECTORYSERVICE'].methods_by_name['GetDirectoryContext']._loaded_options = None + _globals['_DIRECTORYSERVICE'].methods_by_name['GetDirectoryContext']._serialized_options = b'\222A\247\001\n\tDirectory\022\025Get directory context\032;Retrieves the custom context data for a specific directory.J\'\n\003200\022 \n\036Returns the directory context.J\035\n\003404\022\026\n\024Directory not found.\202\265\030\002\030p\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002M\022K/api/v1/organizations/{organization_id}/directories/{directory_id}/contexts' + _globals['_DIRECTORYSERVICE'].methods_by_name['UpdateDirectoryContext']._loaded_options = None + _globals['_DIRECTORYSERVICE'].methods_by_name['UpdateDirectoryContext']._serialized_options = b'\222A\302\001\n\tDirectory\022\030Update directory context\0329Updates the custom context data for a specific directory.J&\n\003200\022\037\n\035Context updated successfully.J\031\n\003400\022\022\n\020Invalid request.J\035\n\003404\022\026\n\024Directory not found.\202\265\030\002\030p\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002V\032K/api/v1/organizations/{organization_id}/directories/{directory_id}/contexts:\007context' + _globals['_DIRECTORYTYPE']._serialized_start=15830 + _globals['_DIRECTORYTYPE']._serialized_end=15907 + _globals['_DIRECTORYPROVIDER']._serialized_start=15910 + _globals['_DIRECTORYPROVIDER']._serialized_end=16064 + _globals['_DIRECTORYSTATUS']._serialized_start=16066 + _globals['_DIRECTORYSTATUS']._serialized_end=16160 + _globals['_SECRETSTATUS']._serialized_start=16162 + _globals['_SECRETSTATUS']._serialized_end=16202 _globals['_GETDIRECTORYREQUEST']._serialized_start=434 _globals['_GETDIRECTORYREQUEST']._serialized_end=653 _globals['_GETDIRECTORYRESPONSE']._serialized_start=656 @@ -391,6 +403,12 @@ _globals['_DELETEDIRECTORYREQUEST']._serialized_end=15144 _globals['_TRIGGERDIRECTORYSYNCREQUEST']._serialized_start=15147 _globals['_TRIGGERDIRECTORYSYNCREQUEST']._serialized_end=15398 - _globals['_DIRECTORYSERVICE']._serialized_start=15775 - _globals['_DIRECTORYSERVICE']._serialized_end=22154 + _globals['_GETDIRECTORYCONTEXTREQUEST']._serialized_start=15401 + _globals['_GETDIRECTORYCONTEXTREQUEST']._serialized_end=15545 + _globals['_GETDIRECTORYCONTEXTRESPONSE']._serialized_start=15547 + _globals['_GETDIRECTORYCONTEXTRESPONSE']._serialized_end=15627 + _globals['_UPDATEDIRECTORYCONTEXTREQUEST']._serialized_start=15630 + _globals['_UPDATEDIRECTORYCONTEXTREQUEST']._serialized_end=15828 + _globals['_DIRECTORYSERVICE']._serialized_start=16205 + _globals['_DIRECTORYSERVICE']._serialized_end=23414 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/directories/directories_pb2.pyi b/scalekit/v1/directories/directories_pb2.pyi index 6949d63..7b8a8b3 100644 --- a/scalekit/v1/directories/directories_pb2.pyi +++ b/scalekit/v1/directories/directories_pb2.pyi @@ -474,3 +474,27 @@ class TriggerDirectorySyncRequest(_message.Message): directory_id: str organization_id: str def __init__(self, directory_id: _Optional[str] = ..., organization_id: _Optional[str] = ...) -> None: ... + +class GetDirectoryContextRequest(_message.Message): + __slots__ = ("directory_id", "organization_id") + DIRECTORY_ID_FIELD_NUMBER: _ClassVar[int] + ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] + directory_id: str + organization_id: str + def __init__(self, directory_id: _Optional[str] = ..., organization_id: _Optional[str] = ...) -> None: ... + +class GetDirectoryContextResponse(_message.Message): + __slots__ = ("context",) + CONTEXT_FIELD_NUMBER: _ClassVar[int] + context: _struct_pb2.Struct + def __init__(self, context: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... + +class UpdateDirectoryContextRequest(_message.Message): + __slots__ = ("directory_id", "organization_id", "context") + DIRECTORY_ID_FIELD_NUMBER: _ClassVar[int] + ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] + CONTEXT_FIELD_NUMBER: _ClassVar[int] + directory_id: str + organization_id: str + context: _struct_pb2.Struct + def __init__(self, directory_id: _Optional[str] = ..., organization_id: _Optional[str] = ..., context: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... diff --git a/scalekit/v1/directories/directories_pb2_grpc.py b/scalekit/v1/directories/directories_pb2_grpc.py index c91991d..b744f6c 100644 --- a/scalekit/v1/directories/directories_pb2_grpc.py +++ b/scalekit/v1/directories/directories_pb2_grpc.py @@ -95,6 +95,16 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_directories_dot_directories__pb2.TriggerDirectorySyncRequest.SerializeToString, response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, ) + self.GetDirectoryContext = channel.unary_unary( + '/scalekit.v1.directories.DirectoryService/GetDirectoryContext', + request_serializer=scalekit_dot_v1_dot_directories_dot_directories__pb2.GetDirectoryContextRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_directories_dot_directories__pb2.GetDirectoryContextResponse.FromString, + ) + self.UpdateDirectoryContext = channel.unary_unary( + '/scalekit.v1.directories.DirectoryService/UpdateDirectoryContext', + request_serializer=scalekit_dot_v1_dot_directories_dot_directories__pb2.UpdateDirectoryContextRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + ) class DirectoryServiceServicer(object): @@ -196,6 +206,18 @@ def TriggerDirectorySync(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def GetDirectoryContext(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def UpdateDirectoryContext(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def add_DirectoryServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -279,6 +301,16 @@ def add_DirectoryServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_directories_dot_directories__pb2.TriggerDirectorySyncRequest.FromString, response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, ), + 'GetDirectoryContext': grpc.unary_unary_rpc_method_handler( + servicer.GetDirectoryContext, + request_deserializer=scalekit_dot_v1_dot_directories_dot_directories__pb2.GetDirectoryContextRequest.FromString, + response_serializer=scalekit_dot_v1_dot_directories_dot_directories__pb2.GetDirectoryContextResponse.SerializeToString, + ), + 'UpdateDirectoryContext': grpc.unary_unary_rpc_method_handler( + servicer.UpdateDirectoryContext, + request_deserializer=scalekit_dot_v1_dot_directories_dot_directories__pb2.UpdateDirectoryContextRequest.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'scalekit.v1.directories.DirectoryService', rpc_method_handlers) @@ -560,3 +592,37 @@ def TriggerDirectorySync(request, google_dot_protobuf_dot_empty__pb2.Empty.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def GetDirectoryContext(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.directories.DirectoryService/GetDirectoryContext', + scalekit_dot_v1_dot_directories_dot_directories__pb2.GetDirectoryContextRequest.SerializeToString, + scalekit_dot_v1_dot_directories_dot_directories__pb2.GetDirectoryContextResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def UpdateDirectoryContext(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.directories.DirectoryService/UpdateDirectoryContext', + scalekit_dot_v1_dot_directories_dot_directories__pb2.UpdateDirectoryContextRequest.SerializeToString, + google_dot_protobuf_dot_empty__pb2.Empty.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/domains/domains_pb2.py b/scalekit/v1/domains/domains_pb2.py index 5945d7e..9a297a9 100644 --- a/scalekit/v1/domains/domains_pb2.py +++ b/scalekit/v1/domains/domains_pb2.py @@ -23,7 +23,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/domains/domains.proto\x12\x13scalekit.v1.domains\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\x8a\x06\n\x13\x43reateDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\xba\x01\n\rconnection_id\x18\x03 \x01(\tB\x8f\x01\x92\x41}2iOptional identity provider connection ID to associate with this domain for enterprise SSO configurations.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12x\n\x06\x64omain\x18\x04 \x01(\x0b\x32!.scalekit.v1.domains.CreateDomainB=\x92\x41:28Domain configuration including the domain name and type.R\x06\x64omainB\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\xb3\x01\n\x14\x43reateDomainResponse\x12\x9a\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBe\x92\x41\x62\x32`The newly created domain object with all configuration details and system-generated identifiers.R\x06\x64omain\"\xe6\x04\n\x0c\x43reateDomain\x12\xf6\x01\n\x06\x64omain\x18\x01 \x01(\tB\xdd\x01\x92\x41\xcc\x01\x32\xb3\x01The domain name to be configured. Must be a valid business domain you control. Public and disposable domains (gmail.com, outlook.com, etc.) are automatically blocked for security.J\x14\"customerdomain.com\"\xbaH\nr\x05\x10\x04\x18\xff\x01\xc8\x01\x01R\x06\x64omain\x12\xdc\x02\n\x0b\x64omain_type\x18\x02 \x01(\x0e\x32\x1f.scalekit.v1.domains.DomainTypeB\x99\x02\x92\x41\x95\x02\x32\xfb\x01The domain type.\n- ALLOWED_EMAIL_DOMAIN: trusted domain used to suggest the organization in the organization switcher during sign-in/sign-up.\n- ORGANIZATION_DOMAIN: SSO discovery domain used to route users to the correct SSO provider and enforce SSO.\nJ\x15\"ORGANIZATION_DOMAIN\"R\ndomainType\"\x84\x07\n\x13UpdateDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x9f\x01\n\rconnection_id\x18\x03 \x01(\tBu\x92\x41\x63\x32OOptional updated identity provider connection ID to associate with this domain.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12o\n\x02id\x18\x04 \x01(\tB_\x92\x41\\2AScalekit-generated unique identifier of the domain to be updated.J\x17\"dom_88351643129225005\"R\x02id\x12\x9b\x01\n\x06\x64omain\x18\x05 \x01(\x0b\x32!.scalekit.v1.domains.UpdateDomainB`\x92\x41]2[Domain update configuration. Currently empty as domain name cannot be changed once created.R\x06\x64omainB\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\x0e\n\x0cUpdateDomain\"\xa5\x01\n\x14UpdateDomainResponse\x12\x8c\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBW\x92\x41T2RThe updated domain object reflecting all changes made to the domain configuration.R\x06\x64omain\"\xad\x04\n\x10GetDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12m\n\x02id\x18\x03 \x01(\tB]\x92\x41Z2?Scalekit-generated unique identifier of the domain to retrieve.J\x17\"dom_88351643129225005\"R\x02idB\x0c\n\nidentities\"\xb6\x01\n\x11GetDomainResponse\x12\xa0\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBk\x92\x41h2fThe requested domain object with complete details including domain type, timestamps and configuration.R\x06\x64omain\"\xeb\x05\n\x13\x44\x65leteDomainRequest\x12{\n\x02id\x18\x01 \x01(\tBk\x92\x41h2MScalekit-generated unique identifier of the domain to be permanently deleted.J\x17\"dom_88351643129225005\"R\x02id\x12\xcb\x01\n\x0forganization_id\x18\x02 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x03 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x98\x01\n\rconnection_id\x18\x04 \x01(\tBn\x92\x41\\2HOptional connection ID for additional validation during domain deletion.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x42\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\xac\x0b\n\x11ListDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\xa8\x01\n\rconnection_id\x18\x03 \x01(\tB~\x92\x41l2XOptional filter to list domains associated with a specific identity provider connection.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12\xab\x01\n\x07include\x18\x04 \x01(\tB\x8b\x01\x92\x41\x87\x01\x32mOptional comma-separated list of additional fields to include in the response (e.g., \'verification_details\').J\x16\"verification_details\"H\x02R\x07include\x88\x01\x01\x12\x8f\x01\n\tpage_size\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueBU\x92\x41R2LMaximum number of domains to return per page. Default is 30, maximum is 100.J\x02\x33\x30R\x08pageSize\x12\x82\x01\n\x0bpage_number\x18\x06 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueBD\x92\x41\x41\x3224/api/v1/organizations/{organization_id}/domains/{id}:\x06\x64omain\x12\xea\x06\n\x0cVerifyDomain\x12(.scalekit.v1.domains.VerifyDomainRequest\x1a\x1a.google.protobuf.BoolValue\"\x93\x06\x92\x41\xb7\x05\n\x07\x44omains\x12\rVerify Domain\x1a\x9e\x04Initiates domain ownership verification by checking the DNS TXT record that should be added to the domain\'s DNS configuration.\n\nUse this endpoint to manually trigger verification for domains that are in PENDING status. The system will check for the required TXT record and update the verification status accordingly.\n\nFor automatically verified domains, this endpoint will return true immediately. For domains requiring manual verification, ensure the TXT record has been properly configured in your DNS settings before calling this endpoint.J|\n\x03\x32\x30\x30\x12u\nSDomain verification result. Returns true if verification succeeds, false otherwise.\x12\x1e\n\x1c\x1a\x1a.google.protobuf.BoolValue\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02=2;/api/v1/organizations/{organization_id}/domains/{id}:verify\x12\x9a\x03\n\tGetDomain\x12%.scalekit.v1.domains.GetDomainRequest\x1a&.scalekit.v1.domains.GetDomainResponse\"\xbd\x02\x92\x41\xe3\x01\n\x07\x44omains\x12\nGet Domain\x1akRetrieves complete details for a domain including domain type, timestamps, and configuration information.\n\nJ_\n\x03\x32\x30\x30\x12X\n*Successfully retrieved the domain details.\x12*\n(\x1a&.scalekit.v1.domains.GetDomainResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x36\x12\x34/api/v1/organizations/{organization_id}/domains/{id}\x12\xe4\x03\n\x0c\x44\x65leteDomain\x12(.scalekit.v1.domains.DeleteDomainRequest\x1a\x16.google.protobuf.Empty\"\x91\x03\x92\x41\xb6\x02\n\x07\x44omains\x12\rDelete Domain\x1a\xf4\x01Permanently removes a domain record from an organization.\n\n- Deleting an ORGANIZATION_DOMAIN disables SSO routing/enforcement for that domain.\n- Deleting an ALLOWED_EMAIL_DOMAIN stops organization suggestions for users with that email domain.\n\nJ%\n\x03\x32\x30\x30\x12\x1e\n\x1c\x44omain successfully deleted.\x82\xb5\x18\x17\n\x13organizations_write\x18t\x82\xd3\xe4\x93\x02\x36*4/api/v1/organizations/{organization_id}/domains/{id}\x12\x9b\x05\n\x0bListDomains\x12&.scalekit.v1.domains.ListDomainRequest\x1a\'.scalekit.v1.domains.ListDomainResponse\"\xba\x04\x92\x41\xe5\x03\n\x07\x44omains\x12\x0cList Domains\x1a\xe8\x02Retrieves a paginated list of all domains configured for the specified organization.\n\nDomain types:\n- ALLOWED_EMAIL_DOMAIN: Trusted domains used to suggest the organization in the organization switcher during sign-in/sign-up (auth-method agnostic).\n- ORGANIZATION_DOMAIN: SSO discovery domains used to route users to the correct SSO provider and enforce SSO.\n\nJa\n\x03\x32\x30\x30\x12Z\n+Successfully retrieved the list of domains.\x12+\n)\x1a\'.scalekit.v1.domains.ListDomainResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x31\x12//api/v1/organizations/{organization_id}/domains\x12\x90\x05\n\x15ListAuthorizedDomains\x12\x30.scalekit.v1.domains.ListAuthorizedDomainRequest\x1a\x31.scalekit.v1.domains.ListAuthorizedDomainResponse\"\x91\x04\x92\x41\xd8\x03\n\x07\x44omains\x12\x17List Authorized Domains\x1a\xbb\x02Retrieves a list of domains that are authorized for use with the specified origin URL.\n\nUse this endpoint to validate whether a particular domain is allowed for authentication or other domain-restricted operations.\n\nThis is commonly used by frontend applications to verify domain allowlists and CORS configurations.Jv\n\x03\x32\x30\x30\x12o\n6Successfully retrieved the list of authorized domains.\x12\x35\n3\x1a\x31.scalekit.v1.domains.ListAuthorizedDomainResponse\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1a\x12\x18/api/v1/domains/{origin}\x1a\xf8\x03\x92\x41\xf4\x03\n\x07\x44omains\x12\xe8\x03Manage organization-level domains. Scalekit supports two domain types:\n\n- ORGANIZATION_DOMAIN: Used for SSO domain discovery. When a user signs in with a matching email domain, Scalekit routes them to the organization\xe2\x80\x99s SSO provider and enforces SSO.\n- ALLOWED_EMAIL_DOMAIN: Used to mark trusted email domains for an organization. When a user signs in or signs up with a matching domain, Scalekit suggests the organization in the organization switcher (authentication-method agnostic).\nB3Z1github.com/scalekit-inc/scalekit/pkg/grpc/domainsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/domains/domains.proto\x12\x13scalekit.v1.domains\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\x8a\x06\n\x13\x43reateDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\xba\x01\n\rconnection_id\x18\x03 \x01(\tB\x8f\x01\x92\x41}2iOptional identity provider connection ID to associate with this domain for enterprise SSO configurations.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12x\n\x06\x64omain\x18\x04 \x01(\x0b\x32!.scalekit.v1.domains.CreateDomainB=\x92\x41:28Domain configuration including the domain name and type.R\x06\x64omainB\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\xb3\x01\n\x14\x43reateDomainResponse\x12\x9a\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBe\x92\x41\x62\x32`The newly created domain object with all configuration details and system-generated identifiers.R\x06\x64omain\"\xe6\x04\n\x0c\x43reateDomain\x12\xf6\x01\n\x06\x64omain\x18\x01 \x01(\tB\xdd\x01\x92\x41\xcc\x01\x32\xb3\x01The domain name to be configured. Must be a valid business domain you control. Public and disposable domains (gmail.com, outlook.com, etc.) are automatically blocked for security.J\x14\"customerdomain.com\"\xbaH\nr\x05\x10\x04\x18\xff\x01\xc8\x01\x01R\x06\x64omain\x12\xdc\x02\n\x0b\x64omain_type\x18\x02 \x01(\x0e\x32\x1f.scalekit.v1.domains.DomainTypeB\x99\x02\x92\x41\x95\x02\x32\xfb\x01The domain type.\n- ALLOWED_EMAIL_DOMAIN: trusted domain used to suggest the organization in the organization switcher during sign-in/sign-up.\n- ORGANIZATION_DOMAIN: SSO discovery domain used to route users to the correct SSO provider and enforce SSO.\nJ\x15\"ORGANIZATION_DOMAIN\"R\ndomainType\"\x84\x07\n\x13UpdateDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x9f\x01\n\rconnection_id\x18\x03 \x01(\tBu\x92\x41\x63\x32OOptional updated identity provider connection ID to associate with this domain.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12o\n\x02id\x18\x04 \x01(\tB_\x92\x41\\2AScalekit-generated unique identifier of the domain to be updated.J\x17\"dom_88351643129225005\"R\x02id\x12\x9b\x01\n\x06\x64omain\x18\x05 \x01(\x0b\x32!.scalekit.v1.domains.UpdateDomainB`\x92\x41]2[Domain update configuration. Currently empty as domain name cannot be changed once created.R\x06\x64omainB\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\x0e\n\x0cUpdateDomain\"\xa5\x01\n\x14UpdateDomainResponse\x12\x8c\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBW\x92\x41T2RThe updated domain object reflecting all changes made to the domain configuration.R\x06\x64omain\"\xad\x04\n\x10GetDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12m\n\x02id\x18\x03 \x01(\tB]\x92\x41Z2?Scalekit-generated unique identifier of the domain to retrieve.J\x17\"dom_88351643129225005\"R\x02idB\x0c\n\nidentities\"\xb6\x01\n\x11GetDomainResponse\x12\xa0\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBk\x92\x41h2fThe requested domain object with complete details including domain type, timestamps and configuration.R\x06\x64omain\"\xeb\x05\n\x13\x44\x65leteDomainRequest\x12{\n\x02id\x18\x01 \x01(\tBk\x92\x41h2MScalekit-generated unique identifier of the domain to be permanently deleted.J\x17\"dom_88351643129225005\"R\x02id\x12\xcb\x01\n\x0forganization_id\x18\x02 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x03 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x98\x01\n\rconnection_id\x18\x04 \x01(\tBn\x92\x41\\2HOptional connection ID for additional validation during domain deletion.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x42\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\xac\x0b\n\x11ListDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\xa8\x01\n\rconnection_id\x18\x03 \x01(\tB~\x92\x41l2XOptional filter to list domains associated with a specific identity provider connection.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12\xab\x01\n\x07include\x18\x04 \x01(\tB\x8b\x01\x92\x41\x87\x01\x32mOptional comma-separated list of additional fields to include in the response (e.g., \'verification_details\').J\x16\"verification_details\"H\x02R\x07include\x88\x01\x01\x12\x8f\x01\n\tpage_size\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueBU\x92\x41R2LMaximum number of domains to return per page. Default is 30, maximum is 100.J\x02\x33\x30R\x08pageSize\x12\x82\x01\n\x0bpage_number\x18\x06 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueBD\x92\x41\x41\x3224/api/v1/organizations/{organization_id}/domains/{id}:\x06\x64omain\x12\xea\x06\n\x0cVerifyDomain\x12(.scalekit.v1.domains.VerifyDomainRequest\x1a\x1a.google.protobuf.BoolValue\"\x93\x06\x92\x41\xb7\x05\n\x07\x44omains\x12\rVerify Domain\x1a\x9e\x04Initiates domain ownership verification by checking the DNS TXT record that should be added to the domain\'s DNS configuration.\n\nUse this endpoint to manually trigger verification for domains that are in PENDING status. The system will check for the required TXT record and update the verification status accordingly.\n\nFor automatically verified domains, this endpoint will return true immediately. For domains requiring manual verification, ensure the TXT record has been properly configured in your DNS settings before calling this endpoint.J|\n\x03\x32\x30\x30\x12u\nSDomain verification result. Returns true if verification succeeds, false otherwise.\x12\x1e\n\x1c\x1a\x1a.google.protobuf.BoolValue\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02=2;/api/v1/organizations/{organization_id}/domains/{id}:verify\x12\x9a\x03\n\tGetDomain\x12%.scalekit.v1.domains.GetDomainRequest\x1a&.scalekit.v1.domains.GetDomainResponse\"\xbd\x02\x92\x41\xe3\x01\n\x07\x44omains\x12\nGet Domain\x1akRetrieves complete details for a domain including domain type, timestamps, and configuration information.\n\nJ_\n\x03\x32\x30\x30\x12X\n*Successfully retrieved the domain details.\x12*\n(\x1a&.scalekit.v1.domains.GetDomainResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x36\x12\x34/api/v1/organizations/{organization_id}/domains/{id}\x12\xe4\x03\n\x0c\x44\x65leteDomain\x12(.scalekit.v1.domains.DeleteDomainRequest\x1a\x16.google.protobuf.Empty\"\x91\x03\x92\x41\xb6\x02\n\x07\x44omains\x12\rDelete Domain\x1a\xf4\x01Permanently removes a domain record from an organization.\n\n- Deleting an ORGANIZATION_DOMAIN disables SSO routing/enforcement for that domain.\n- Deleting an ALLOWED_EMAIL_DOMAIN stops organization suggestions for users with that email domain.\n\nJ%\n\x03\x32\x30\x30\x12\x1e\n\x1c\x44omain successfully deleted.\x82\xb5\x18\x17\n\x13organizations_write\x18t\x82\xd3\xe4\x93\x02\x36*4/api/v1/organizations/{organization_id}/domains/{id}\x12\x9b\x05\n\x0bListDomains\x12&.scalekit.v1.domains.ListDomainRequest\x1a\'.scalekit.v1.domains.ListDomainResponse\"\xba\x04\x92\x41\xe5\x03\n\x07\x44omains\x12\x0cList Domains\x1a\xe8\x02Retrieves a paginated list of all domains configured for the specified organization.\n\nDomain types:\n- ALLOWED_EMAIL_DOMAIN: Trusted domains used to suggest the organization in the organization switcher during sign-in/sign-up (auth-method agnostic).\n- ORGANIZATION_DOMAIN: SSO discovery domains used to route users to the correct SSO provider and enforce SSO.\n\nJa\n\x03\x32\x30\x30\x12Z\n+Successfully retrieved the list of domains.\x12+\n)\x1a\'.scalekit.v1.domains.ListDomainResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x31\x12//api/v1/organizations/{organization_id}/domains\x12\x90\x05\n\x15ListAuthorizedDomains\x12\x30.scalekit.v1.domains.ListAuthorizedDomainRequest\x1a\x31.scalekit.v1.domains.ListAuthorizedDomainResponse\"\x91\x04\x92\x41\xd8\x03\n\x07\x44omains\x12\x17List Authorized Domains\x1a\xbb\x02Retrieves a list of domains that are authorized for use with the specified origin URL.\n\nUse this endpoint to validate whether a particular domain is allowed for authentication or other domain-restricted operations.\n\nThis is commonly used by frontend applications to verify domain allowlists and CORS configurations.Jv\n\x03\x32\x30\x30\x12o\n6Successfully retrieved the list of authorized domains.\x12\x35\n3\x1a\x31.scalekit.v1.domains.ListAuthorizedDomainResponse\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1a\x12\x18/api/v1/domains/{origin}\x1a\xf8\x03\x92\x41\xf4\x03\n\x07\x44omains\x12\xe8\x03Manage organization-level domains. Scalekit supports two domain types:\n\n- ORGANIZATION_DOMAIN: Used for SSO domain discovery. When a user signs in with a matching email domain, Scalekit routes them to the organization\xe2\x80\x99s SSO provider and enforces SSO.\n- ALLOWED_EMAIL_DOMAIN: Used to mark trusted email domains for an organization. When a user signs in or signs up with a matching domain, Scalekit suggests the organization in the organization switcher (authentication-method agnostic).\nB3Z1github.com/scalekit-inc/scalekit/pkg/grpc/domainsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -101,6 +101,8 @@ _globals['_LISTDOMAINRESPONSE'].fields_by_name['domains']._serialized_options = b'\222Ah2fArray of domain objects containing all domain details including verification status and configuration.' _globals['_LISTAUTHORIZEDDOMAINREQUEST'].fields_by_name['origin']._loaded_options = None _globals['_LISTAUTHORIZEDDOMAINREQUEST'].fields_by_name['origin']._serialized_options = b'\222Af2OThe origin URL to check for authorized domains (e.g., https://app.example.com).J\023\"https://myapp.com\"' + _globals['_LISTAUTHORIZEDDOMAINREQUEST'].fields_by_name['link_id']._loaded_options = None + _globals['_LISTAUTHORIZEDDOMAINREQUEST'].fields_by_name['link_id']._serialized_options = b'\222A\344\0012\271\001Optional link key UUID used to resolve organization-specific template redirect URI origins for pre-authentication CSP evaluation. Scope suffixes (e.g. \'_pc\') are stripped automatically.J&\"a1b2c3d4-e5f6-7890-abcd-ef1234567890\"' _globals['_LISTAUTHORIZEDDOMAINRESPONSE'].fields_by_name['domains']._loaded_options = None _globals['_LISTAUTHORIZEDDOMAINRESPONSE'].fields_by_name['domains']._serialized_options = b'\222Ar2LArray of domain names that are authorized for use with the specified origin.J\"[\"example.com\", \"app.example.com\"]' _globals['_DOMAIN'].fields_by_name['id']._loaded_options = None @@ -139,10 +141,10 @@ _globals['_DOMAINSERVICE'].methods_by_name['ListDomains']._serialized_options = b'\222A\345\003\n\007Domains\022\014List Domains\032\350\002Retrieves a paginated list of all domains configured for the specified organization.\n\nDomain types:\n- ALLOWED_EMAIL_DOMAIN: Trusted domains used to suggest the organization in the organization switcher during sign-in/sign-up (auth-method agnostic).\n- ORGANIZATION_DOMAIN: SSO discovery domains used to route users to the correct SSO provider and enforce SSO.\n\nJa\n\003200\022Z\n+Successfully retrieved the list of domains.\022+\n)\032\'.scalekit.v1.domains.ListDomainResponse\202\265\030\026\n\022organizations_read\030t\202\323\344\223\0021\022//api/v1/organizations/{organization_id}/domains' _globals['_DOMAINSERVICE'].methods_by_name['ListAuthorizedDomains']._loaded_options = None _globals['_DOMAINSERVICE'].methods_by_name['ListAuthorizedDomains']._serialized_options = b'\222A\330\003\n\007Domains\022\027List Authorized Domains\032\273\002Retrieves a list of domains that are authorized for use with the specified origin URL.\n\nUse this endpoint to validate whether a particular domain is allowed for authentication or other domain-restricted operations.\n\nThis is commonly used by frontend applications to verify domain allowlists and CORS configurations.Jv\n\003200\022o\n6Successfully retrieved the list of authorized domains.\0225\n3\0321.scalekit.v1.domains.ListAuthorizedDomainResponse\202\265\030\002\030\001\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\032\022\030/api/v1/domains/{origin}' - _globals['_VERIFICATIONSTATUS']._serialized_start=9130 - _globals['_VERIFICATIONSTATUS']._serialized_end=9245 - _globals['_DOMAINTYPE']._serialized_start=9247 - _globals['_DOMAINTYPE']._serialized_end=9339 + _globals['_VERIFICATIONSTATUS']._serialized_start=9391 + _globals['_VERIFICATIONSTATUS']._serialized_end=9506 + _globals['_DOMAINTYPE']._serialized_start=9508 + _globals['_DOMAINTYPE']._serialized_end=9600 _globals['_CREATEDOMAINREQUEST']._serialized_start=357 _globals['_CREATEDOMAINREQUEST']._serialized_end=1135 _globals['_CREATEDOMAINRESPONSE']._serialized_start=1138 @@ -168,11 +170,11 @@ _globals['_LISTDOMAINRESPONSE']._serialized_start=6582 _globals['_LISTDOMAINRESPONSE']._serialized_end=6936 _globals['_LISTAUTHORIZEDDOMAINREQUEST']._serialized_start=6939 - _globals['_LISTAUTHORIZEDDOMAINREQUEST']._serialized_end=7100 - _globals['_LISTAUTHORIZEDDOMAINRESPONSE']._serialized_start=7103 - _globals['_LISTAUTHORIZEDDOMAINRESPONSE']._serialized_end=7279 - _globals['_DOMAIN']._serialized_start=7282 - _globals['_DOMAIN']._serialized_end=9128 - _globals['_DOMAINSERVICE']._serialized_start=9342 - _globals['_DOMAINSERVICE']._serialized_end=14767 + _globals['_LISTAUTHORIZEDDOMAINREQUEST']._serialized_end=7361 + _globals['_LISTAUTHORIZEDDOMAINRESPONSE']._serialized_start=7364 + _globals['_LISTAUTHORIZEDDOMAINRESPONSE']._serialized_end=7540 + _globals['_DOMAIN']._serialized_start=7543 + _globals['_DOMAIN']._serialized_end=9389 + _globals['_DOMAINSERVICE']._serialized_start=9603 + _globals['_DOMAINSERVICE']._serialized_end=15028 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/domains/domains_pb2.pyi b/scalekit/v1/domains/domains_pb2.pyi index acaa766..eb10967 100644 --- a/scalekit/v1/domains/domains_pb2.pyi +++ b/scalekit/v1/domains/domains_pb2.pyi @@ -154,10 +154,12 @@ class ListDomainResponse(_message.Message): def __init__(self, page_size: _Optional[int] = ..., page_number: _Optional[int] = ..., domains: _Optional[_Iterable[_Union[Domain, _Mapping]]] = ...) -> None: ... class ListAuthorizedDomainRequest(_message.Message): - __slots__ = ("origin",) + __slots__ = ("origin", "link_id") ORIGIN_FIELD_NUMBER: _ClassVar[int] + LINK_ID_FIELD_NUMBER: _ClassVar[int] origin: str - def __init__(self, origin: _Optional[str] = ...) -> None: ... + link_id: str + def __init__(self, origin: _Optional[str] = ..., link_id: _Optional[str] = ...) -> None: ... class ListAuthorizedDomainResponse(_message.Message): __slots__ = ("domains",) diff --git a/scalekit/v1/emails/emails_pb2.py b/scalekit/v1/emails/emails_pb2.py index f0ceb15..55389ad 100644 --- a/scalekit/v1/emails/emails_pb2.py +++ b/scalekit/v1/emails/emails_pb2.py @@ -15,6 +15,7 @@ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2 +from google.api import visibility_pb2 as google_dot_api_dot_visibility__pb2 from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 from google.protobuf import field_mask_pb2 as google_dot_protobuf_dot_field__mask__pb2 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 @@ -24,7 +25,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fscalekit/v1/emails/emails.proto\x12\x12scalekit.v1.emails\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"`\n\x16GetPlaceholdersRequest\x12\x46\n\x08use_case\x18\x01 \x01(\x0e\x32#.scalekit.v1.emails.TemplateUsecaseB\x06\xbaH\x03\xc8\x01\x01R\x07useCase\"B\n\x17GetPlaceholdersResponse\x12\'\n\x0cplaceholders\x18\x01 \x03(\tB\x03\xe0\x41\x03R\x0cplaceholders\"t\n\x1bGetTemplateUseCasesResponse\x12U\n\tuse_cases\x18\x01 \x03(\x0b\x32\x33.scalekit.v1.emails.TemplateUsecaseWithPlaceholdersB\x03\xe0\x41\x03R\x08useCases\"\xeb\x02\n\x1fTemplateUsecaseWithPlaceholders\x12\x46\n\x08use_case\x18\x01 \x01(\x0e\x32#.scalekit.v1.emails.TemplateUsecaseB\x06\xbaH\x03\xc8\x01\x01R\x07useCase\x12 \n\x05title\x18\x02 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x05title\x12,\n\x0b\x64\x65scription\x18\x03 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x0b\x64\x65scription\x12H\n\x0cplaceholders\x18\x04 \x03(\x0b\x32\x1f.scalekit.v1.emails.PlaceholderB\x03\xe0\x41\x03R\x0cplaceholders\x12\x18\n\x07\x64isplay\x18\x05 \x01(\x08R\x07\x64isplay\x12L\n\x10\x64\x65\x66\x61ult_template\x18\x06 \x01(\x0b\x32\x1c.scalekit.v1.emails.TemplateB\x03\xe0\x41\x03R\x0f\x64\x65\x66\x61ultTemplate\"\xe0\x01\n\x0bPlaceholder\x12\x1e\n\x04name\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x04name\x12 \n\x05title\x18\x02 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x05title\x12,\n\x0b\x64\x65scription\x18\x03 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x0b\x64\x65scription\x12\x18\n\x07\x64isplay\x18\x04 \x01(\x08R\x07\x64isplay\x12\x1a\n\x08\x63\x61tegory\x18\x05 \x01(\tR\x08\x63\x61tegory\x12+\n\x11\x63\x61tegory_priority\x18\x06 \x01(\x05R\x10\x63\x61tegoryPriority\"\xea\x02\n\x08Template\x12>\n\nupdated_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03R\tupdatedAt\x12\x13\n\x02id\x18\x02 \x01(\tB\x03\xe0\x41\x03R\x02id\x12>\n\x08use_case\x18\x03 \x01(\x0e\x32#.scalekit.v1.emails.TemplateUsecaseR\x07useCase\x12\x18\n\x07\x65nabled\x18\x04 \x01(\x08R\x07\x65nabled\x12$\n\x07subject\x18\x05 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x07subject\x12.\n\x0chtml_content\x18\x06 \x01(\tB\x0b\xbaH\x08r\x06\x10\x01(\x80\x80@R\x0bhtmlContent\x12\x30\n\rplain_content\x18\x07 \x01(\tB\x0b\xbaH\x08r\x06\x10\x01(\x80\x80@R\x0cplainContent\x12\'\n\x0cplaceholders\x18\x08 \x03(\tB\x03\xe0\x41\x03R\x0cplaceholders\"\xc8\x02\n\x13\x43reateEmailTemplate\x12>\n\nupdated_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03R\tupdatedAt\x12\x13\n\x02id\x18\x02 \x01(\tB\x03\xe0\x41\x03R\x02id\x12K\n\x08use_case\x18\x03 \x01(\x0e\x32#.scalekit.v1.emails.TemplateUsecaseB\x0b\xbaH\x08\x82\x01\x02\x10\x01\xc8\x01\x01R\x07useCase\x12\'\n\x07subject\x18\x04 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x07subject\x12\x31\n\x0chtml_content\x18\x05 \x01(\tB\x0e\xbaH\x0br\x06\x10\x01(\x80\x80@\xc8\x01\x01R\x0bhtmlContent\x12\x33\n\rplain_content\x18\x06 \x01(\tB\x0e\xbaH\x0br\x06\x10\x01(\x80\x80@\xc8\x01\x01R\x0cplainContent\"\x9d\x01\n\x1a\x43reateEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12K\n\x08template\x18\x02 \x01(\x0b\x32\'.scalekit.v1.emails.CreateEmailTemplateB\x06\xbaH\x03\xc8\x01\x01R\x08template\"_\n\x1b\x43reateEmailTemplateResponse\x12@\n\x08template\x18\x01 \x01(\x0b\x32\x1c.scalekit.v1.emails.TemplateB\x06\xbaH\x03\xc8\x01\x01R\x08template\"\x84\x01\n\x1a\x45nableEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\"\xde\x01\n\x1b\x45nableEmailTemplateResponse\x12Z\n\x12\x61\x63tive_template_id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03tplR\x10\x61\x63tiveTemplateId\x12\x63\n\x17last_active_template_id\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03tplR\x14lastActiveTemplateId\"\x85\x01\n\x1b\x44isableEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\"\x81\x01\n\x17GetEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\"T\n\x18GetEmailTemplateResponse\x12\x38\n\x08template\x18\x01 \x01(\x0b\x32\x1c.scalekit.v1.emails.TemplateR\x08template\"N\n\x18ListEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\"W\n\x19ListEmailTemplateResponse\x12:\n\ttemplates\x18\x01 \x03(\x0b\x32\x1c.scalekit.v1.emails.TemplateR\ttemplates\"\x90\x03\n\x0eUpdateTemplate\x12)\n\x07subject\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01H\x00R\x07subject\x88\x01\x01\x12\x33\n\x0chtml_content\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\x10\x01(\x80\x80@H\x01R\x0bhtmlContent\x88\x01\x01\x12\x35\n\rplain_content\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\x10\x01(\x80\x80@H\x02R\x0cplainContent\x88\x01\x01:\xb7\x01\xbaH\xb3\x01\x1a\xb0\x01\n\x1b\x61t_least_one_field_required\x12IAt least one of \'subject\', \'html_content\', or \'plain_content\' must be set\x1a\x46has(this.subject) || has(this.html_content) || has(this.plain_content)B\n\n\x08_subjectB\x0f\n\r_html_contentB\x10\n\x0e_plain_content\"\x96\x03\n\x1dGetEmailConfigurationResponse\x12i\n\x11\x64\x65\x66\x61ult_from_name\x18\x01 \x01(\tB=\x92\x41:28Default email from name when using scalekit email serverR\x0f\x64\x65\x66\x61ultFromName\x12x\n\x14\x64\x65\x66\x61ult_from_address\x18\x02 \x01(\tBF\x92\x41=2;Default email from address when using scalekit email server\xbaH\x03\xc8\x01\x01R\x12\x64\x65\x66\x61ultFromAddress\x12W\n\x15\x65mail_server_selected\x18\x03 \x01(\x0e\x32#.scalekit.v1.emails.EmailServerTypeR\x13\x65mailServerSelected\x12\x37\n\x06server\x18\x04 \x01(\x0b\x32\x1f.scalekit.v1.emails.EmailServerR\x06server\"\x99\x01\n\x1fUpsertEmailConfigurationRequest\x12*\n\x11\x64\x65\x66\x61ult_from_name\x18\x01 \x01(\tR\x0f\x64\x65\x66\x61ultFromName\x12J\n\x06server\x18\x02 \x01(\x0b\x32\x32.scalekit.v1.emails.UpsertEmailConfigurationServerR\x06server\"\x9f\x02\n\x1eUpsertEmailConfigurationServer\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12K\n\x08provider\x18\x02 \x01(\x0e\x32\'.scalekit.v1.emails.EmailServerProviderB\x06\xbaH\x03\xc8\x01\x01R\x08provider\x12<\n\x07\x65nabled\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x06\xbaH\x03\xc8\x01\x01R\x07\x65nabled\x12\x62\n\x08settings\x18\x04 \x01(\x0b\x32>.scalekit.v1.emails.UpsertEmailConfigurationSMTPServerSettingsB\x06\xbaH\x03\xc8\x01\x01R\x08settings\"\x8c\x02\n*UpsertEmailConfigurationSMTPServerSettings\x12!\n\x04host\x18\x01 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x04host\x12\x1a\n\x04port\x18\x02 \x01(\x03\x42\x06\xbaH\x03\xc8\x01\x01R\x04port\x12)\n\x08username\x18\x03 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08username\x12\x1a\n\x08password\x18\x04 \x01(\tR\x08password\x12,\n\nfrom_email\x18\x05 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\tfromEmail\x12*\n\tfrom_name\x18\x06 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08\x66romName\"\x92\x02\n UpsertEmailConfigurationResponse\x12*\n\x11\x64\x65\x66\x61ult_from_name\x18\x01 \x01(\tR\x0f\x64\x65\x66\x61ultFromName\x12\x30\n\x14\x64\x65\x66\x61ult_from_address\x18\x02 \x01(\tR\x12\x64\x65\x66\x61ultFromAddress\x12W\n\x15\x65mail_server_selected\x18\x03 \x01(\x0e\x32#.scalekit.v1.emails.EmailServerTypeR\x13\x65mailServerSelected\x12\x37\n\x06server\x18\x04 \x01(\x0b\x32\x1f.scalekit.v1.emails.EmailServerR\x06server\"\x88\x02\n\x19PatchEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\x12\x46\n\x08template\x18\x04 \x01(\x0b\x32\".scalekit.v1.emails.UpdateTemplateB\x06\xbaH\x03\xc8\x01\x01R\x08template\x12;\n\x0bupdate_mask\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskR\nupdateMask\"\x84\x01\n\x1a\x44\x65leteEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\"\xac\x02\n\x0b\x45mailServer\x12>\n\nupdated_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03R\tupdatedAt\x12\x13\n\x02id\x18\x02 \x01(\tB\x03\xe0\x41\x03R\x02id\x12K\n\x08provider\x18\x03 \x01(\x0e\x32\'.scalekit.v1.emails.EmailServerProviderB\x06\xbaH\x03\xc8\x01\x01R\x08provider\x12\x18\n\x07\x65nabled\x18\x04 \x01(\x08R\x07\x65nabled\x12U\n\rsmtp_settings\x18\x05 \x01(\x0b\x32&.scalekit.v1.emails.SMTPServerSettingsB\x06\xbaH\x03\xc8\x01\x01H\x00R\x0csmtpSettingsB\n\n\x08settings\"\x86\x02\n\x12SMTPServerSettings\x12!\n\x04host\x18\x01 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x04host\x12\x1a\n\x04port\x18\x02 \x01(\x03\x42\x06\xbaH\x03\xc8\x01\x01R\x04port\x12)\n\x08username\x18\x03 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08username\x12,\n\x08password\x18\x04 \x01(\tB\x10\xe0\x41\x04\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08password\x12,\n\nfrom_email\x18\x05 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\tfromEmail\x12*\n\tfrom_name\x18\x06 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08\x66romName\"\xfe\x01\n\x17PatchSMTPServerSettings\x12!\n\x04host\x18\x01 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x04host\x12\x1a\n\x04port\x18\x02 \x01(\x03\x42\x06\xbaH\x03\xc8\x01\x01R\x04port\x12)\n\x08username\x18\x03 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08username\x12\x1f\n\x08password\x18\x04 \x01(\tB\x03\xe0\x41\x04R\x08password\x12,\n\nfrom_email\x18\x05 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\tfromEmail\x12*\n\tfrom_name\x18\x06 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08\x66romName\"\xab\x01\n\x18\x43reateEmailServerRequest\x12K\n\x08provider\x18\x01 \x01(\x0e\x32\'.scalekit.v1.emails.EmailServerProviderB\x06\xbaH\x03\xc8\x01\x01R\x08provider\x12\x42\n\x08settings\x18\x02 \x01(\x0b\x32&.scalekit.v1.emails.SMTPServerSettingsR\x08settings\"\\\n\x19\x43reateEmailServerResponse\x12?\n\x06server\x18\x01 \x01(\x0b\x32\x1f.scalekit.v1.emails.EmailServerB\x06\xbaH\x03\xc8\x01\x01R\x06server\"G\n\x15GetEmailServerRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId\"Q\n\x16GetEmailServerResponse\x12\x37\n\x06server\x18\x01 \x01(\x0b\x32\x1f.scalekit.v1.emails.EmailServerR\x06server\"J\n\x18\x45nableEmailServerRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId\"\xd4\x01\n\x19\x45nableEmailServerResponse\x12V\n\x10\x61\x63tive_server_id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65srR\x0e\x61\x63tiveServerId\x12_\n\x15last_active_server_id\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65srR\x12lastActiveServerId\"K\n\x19\x44isableEmailServerRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId\"T\n\x17ListEmailServerResponse\x12\x39\n\x07servers\x18\x01 \x03(\x0b\x32\x1f.scalekit.v1.emails.EmailServerR\x07servers\"\xa2\x01\n\x1fPatchEmailServerSettingsRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId\x12O\n\x08settings\x18\x02 \x01(\x0b\x32+.scalekit.v1.emails.PatchSMTPServerSettingsB\x06\xbaH\x03\xc8\x01\x01R\x08settings\"J\n\x18\x44\x65leteEmailServerRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId*\x94\x02\n\x0fTemplateUsecase\x12 \n\x1cTEMPLATE_USECASE_UNSPECIFIED\x10\x00\x12\t\n\x05LOGIN\x10\x01\x12\r\n\tOTP_LOGIN\x10\x02\x12\x11\n\rMEMBER_INVITE\x10\x03\x12\x0f\n\x0bUSER_INVITE\x10\x04\x12\x0e\n\nUSER_LOGIN\x10\x05\x12\n\n\x06SIGNUP\x10\x06\x12\x12\n\x0eUSER_LOGIN_OTP\x10\x07\x12\x13\n\x0fUSER_LOGIN_LINK\x10\x08\x12\x17\n\x13USER_LOGIN_LINK_OTP\x10\t\x12\x13\n\x0fUSER_SIGNUP_OTP\x10\n\x12\x14\n\x10USER_SIGNUP_LINK\x10\x0b\x12\x18\n\x14USER_SIGNUP_LINK_OTP\x10\x0c*=\n\x0f\x45mailServerType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07INHOUSE\x10\x01\x12\x0c\n\x08\x43USTOMER\x10\x02*Z\n\x13\x45mailServerProvider\x12\x1c\n\x18\x45MAIL_SERVER_UNSPECIFIED\x10\x00\x12\x0c\n\x08SENDGRID\x10\x01\x12\x0c\n\x08POSTMARK\x10\x02\x12\t\n\x05OTHER\x10\x03\x32\xd5\x1b\n\x0c\x45mailService\x12\xa6\x01\n\x17GetTemplatePlaceholders\x12*.scalekit.v1.emails.GetPlaceholdersRequest\x1a+.scalekit.v1.emails.GetPlaceholdersResponse\"2\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02&\x12$/api/v1/email/templates/placeholders\x12\x8e\x01\n\x13GetTemplateUseCases\x12\x16.google.protobuf.Empty\x1a/.scalekit.v1.emails.GetTemplateUseCasesResponse\".\x82\xb5\x18\x02\x18\x01\x82\xd3\xe4\x93\x02\"\x12 /api/v1/email/templates/usecases\x12\xfd\x01\n\x13\x43reateEmailTemplate\x12..scalekit.v1.emails.CreateEmailTemplateRequest\x1a/.scalekit.v1.emails.CreateEmailTemplateResponse\"\x84\x01\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02x\"7/api/v1/organizations/{organization_id}/email/templates:\x08templateZ3\"\'/api/v1/organizations/-/email/templates:\x08template\x12\x96\x02\n\x13UpdateEmailTemplate\x12-.scalekit.v1.emails.PatchEmailTemplateRequest\x1a,.scalekit.v1.emails.GetEmailTemplateResponse\"\xa1\x01\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x94\x01\x32\x45/api/v1/organizations/{organization_id}/email/templates/{template_id}:\x08templateZA25/api/v1/organizations/-/email/templates/{template_id}:\x08template\x12\x8e\x01\n\x15GetEmailConfiguration\x12\x16.google.protobuf.Empty\x1a\x31.scalekit.v1.emails.GetEmailConfigurationResponse\"*\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x1e\x12\x1c/api/v1/emails/configuration\x12\xb4\x01\n\x18UpsertEmailConfiguration\x12\x33.scalekit.v1.emails.UpsertEmailConfigurationRequest\x1a\x34.scalekit.v1.emails.UpsertEmailConfigurationResponse\"-\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02!\"\x1c/api/v1/emails/configuration:\x01*\x12\x94\x02\n\x13\x45nableEmailTemplate\x12..scalekit.v1.emails.EnableEmailTemplateRequest\x1a/.scalekit.v1.emails.EnableEmailTemplateResponse\"\x9b\x01\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x8e\x01\x32L/api/v1/organizations/{organization_id}/email/templates/{template_id}:enableZ>2\n\nupdated_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03R\tupdatedAt\x12\x13\n\x02id\x18\x02 \x01(\tB\x03\xe0\x41\x03R\x02id\x12>\n\x08use_case\x18\x03 \x01(\x0e\x32#.scalekit.v1.emails.TemplateUsecaseR\x07useCase\x12\x18\n\x07\x65nabled\x18\x04 \x01(\x08R\x07\x65nabled\x12$\n\x07subject\x18\x05 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x07subject\x12.\n\x0chtml_content\x18\x06 \x01(\tB\x0b\xbaH\x08r\x06\x10\x01(\x80\x80@R\x0bhtmlContent\x12\x30\n\rplain_content\x18\x07 \x01(\tB\x0b\xbaH\x08r\x06\x10\x01(\x80\x80@R\x0cplainContent\x12\'\n\x0cplaceholders\x18\x08 \x03(\tB\x03\xe0\x41\x03R\x0cplaceholders\"\xc8\x02\n\x13\x43reateEmailTemplate\x12>\n\nupdated_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03R\tupdatedAt\x12\x13\n\x02id\x18\x02 \x01(\tB\x03\xe0\x41\x03R\x02id\x12K\n\x08use_case\x18\x03 \x01(\x0e\x32#.scalekit.v1.emails.TemplateUsecaseB\x0b\xbaH\x08\x82\x01\x02\x10\x01\xc8\x01\x01R\x07useCase\x12\'\n\x07subject\x18\x04 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x07subject\x12\x31\n\x0chtml_content\x18\x05 \x01(\tB\x0e\xbaH\x0br\x06\x10\x01(\x80\x80@\xc8\x01\x01R\x0bhtmlContent\x12\x33\n\rplain_content\x18\x06 \x01(\tB\x0e\xbaH\x0br\x06\x10\x01(\x80\x80@\xc8\x01\x01R\x0cplainContent\"\x9d\x01\n\x1a\x43reateEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12K\n\x08template\x18\x02 \x01(\x0b\x32\'.scalekit.v1.emails.CreateEmailTemplateB\x06\xbaH\x03\xc8\x01\x01R\x08template\"_\n\x1b\x43reateEmailTemplateResponse\x12@\n\x08template\x18\x01 \x01(\x0b\x32\x1c.scalekit.v1.emails.TemplateB\x06\xbaH\x03\xc8\x01\x01R\x08template\"\x84\x01\n\x1a\x45nableEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\"\xde\x01\n\x1b\x45nableEmailTemplateResponse\x12Z\n\x12\x61\x63tive_template_id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03tplR\x10\x61\x63tiveTemplateId\x12\x63\n\x17last_active_template_id\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03tplR\x14lastActiveTemplateId\"\x85\x01\n\x1b\x44isableEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\"\x81\x01\n\x17GetEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\"T\n\x18GetEmailTemplateResponse\x12\x38\n\x08template\x18\x01 \x01(\x0b\x32\x1c.scalekit.v1.emails.TemplateR\x08template\"N\n\x18ListEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\"W\n\x19ListEmailTemplateResponse\x12:\n\ttemplates\x18\x01 \x03(\x0b\x32\x1c.scalekit.v1.emails.TemplateR\ttemplates\"\x90\x03\n\x0eUpdateTemplate\x12)\n\x07subject\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01H\x00R\x07subject\x88\x01\x01\x12\x33\n\x0chtml_content\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\x10\x01(\x80\x80@H\x01R\x0bhtmlContent\x88\x01\x01\x12\x35\n\rplain_content\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\x10\x01(\x80\x80@H\x02R\x0cplainContent\x88\x01\x01:\xb7\x01\xbaH\xb3\x01\x1a\xb0\x01\n\x1b\x61t_least_one_field_required\x12IAt least one of \'subject\', \'html_content\', or \'plain_content\' must be set\x1a\x46has(this.subject) || has(this.html_content) || has(this.plain_content)B\n\n\x08_subjectB\x0f\n\r_html_contentB\x10\n\x0e_plain_content\"\x96\x03\n\x1dGetEmailConfigurationResponse\x12i\n\x11\x64\x65\x66\x61ult_from_name\x18\x01 \x01(\tB=\x92\x41:28Default email from name when using scalekit email serverR\x0f\x64\x65\x66\x61ultFromName\x12x\n\x14\x64\x65\x66\x61ult_from_address\x18\x02 \x01(\tBF\x92\x41=2;Default email from address when using scalekit email server\xbaH\x03\xc8\x01\x01R\x12\x64\x65\x66\x61ultFromAddress\x12W\n\x15\x65mail_server_selected\x18\x03 \x01(\x0e\x32#.scalekit.v1.emails.EmailServerTypeR\x13\x65mailServerSelected\x12\x37\n\x06server\x18\x04 \x01(\x0b\x32\x1f.scalekit.v1.emails.EmailServerR\x06server\"\x99\x01\n\x1fUpsertEmailConfigurationRequest\x12*\n\x11\x64\x65\x66\x61ult_from_name\x18\x01 \x01(\tR\x0f\x64\x65\x66\x61ultFromName\x12J\n\x06server\x18\x02 \x01(\x0b\x32\x32.scalekit.v1.emails.UpsertEmailConfigurationServerR\x06server\"\x9f\x02\n\x1eUpsertEmailConfigurationServer\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12K\n\x08provider\x18\x02 \x01(\x0e\x32\'.scalekit.v1.emails.EmailServerProviderB\x06\xbaH\x03\xc8\x01\x01R\x08provider\x12<\n\x07\x65nabled\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x06\xbaH\x03\xc8\x01\x01R\x07\x65nabled\x12\x62\n\x08settings\x18\x04 \x01(\x0b\x32>.scalekit.v1.emails.UpsertEmailConfigurationSMTPServerSettingsB\x06\xbaH\x03\xc8\x01\x01R\x08settings\"\x8c\x02\n*UpsertEmailConfigurationSMTPServerSettings\x12!\n\x04host\x18\x01 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x04host\x12\x1a\n\x04port\x18\x02 \x01(\x03\x42\x06\xbaH\x03\xc8\x01\x01R\x04port\x12)\n\x08username\x18\x03 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08username\x12\x1a\n\x08password\x18\x04 \x01(\tR\x08password\x12,\n\nfrom_email\x18\x05 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\tfromEmail\x12*\n\tfrom_name\x18\x06 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08\x66romName\"\x92\x02\n UpsertEmailConfigurationResponse\x12*\n\x11\x64\x65\x66\x61ult_from_name\x18\x01 \x01(\tR\x0f\x64\x65\x66\x61ultFromName\x12\x30\n\x14\x64\x65\x66\x61ult_from_address\x18\x02 \x01(\tR\x12\x64\x65\x66\x61ultFromAddress\x12W\n\x15\x65mail_server_selected\x18\x03 \x01(\x0e\x32#.scalekit.v1.emails.EmailServerTypeR\x13\x65mailServerSelected\x12\x37\n\x06server\x18\x04 \x01(\x0b\x32\x1f.scalekit.v1.emails.EmailServerR\x06server\"\x88\x02\n\x19PatchEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\x12\x46\n\x08template\x18\x04 \x01(\x0b\x32\".scalekit.v1.emails.UpdateTemplateB\x06\xbaH\x03\xc8\x01\x01R\x08template\x12;\n\x0bupdate_mask\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskR\nupdateMask\"\x84\x01\n\x1a\x44\x65leteEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\"\xac\x02\n\x0b\x45mailServer\x12>\n\nupdated_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03R\tupdatedAt\x12\x13\n\x02id\x18\x02 \x01(\tB\x03\xe0\x41\x03R\x02id\x12K\n\x08provider\x18\x03 \x01(\x0e\x32\'.scalekit.v1.emails.EmailServerProviderB\x06\xbaH\x03\xc8\x01\x01R\x08provider\x12\x18\n\x07\x65nabled\x18\x04 \x01(\x08R\x07\x65nabled\x12U\n\rsmtp_settings\x18\x05 \x01(\x0b\x32&.scalekit.v1.emails.SMTPServerSettingsB\x06\xbaH\x03\xc8\x01\x01H\x00R\x0csmtpSettingsB\n\n\x08settings\"\x86\x02\n\x12SMTPServerSettings\x12!\n\x04host\x18\x01 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x04host\x12\x1a\n\x04port\x18\x02 \x01(\x03\x42\x06\xbaH\x03\xc8\x01\x01R\x04port\x12)\n\x08username\x18\x03 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08username\x12,\n\x08password\x18\x04 \x01(\tB\x10\xe0\x41\x04\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08password\x12,\n\nfrom_email\x18\x05 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\tfromEmail\x12*\n\tfrom_name\x18\x06 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08\x66romName\"\xfe\x01\n\x17PatchSMTPServerSettings\x12!\n\x04host\x18\x01 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x04host\x12\x1a\n\x04port\x18\x02 \x01(\x03\x42\x06\xbaH\x03\xc8\x01\x01R\x04port\x12)\n\x08username\x18\x03 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08username\x12\x1f\n\x08password\x18\x04 \x01(\tB\x03\xe0\x41\x04R\x08password\x12,\n\nfrom_email\x18\x05 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\tfromEmail\x12*\n\tfrom_name\x18\x06 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08\x66romName\"\xab\x01\n\x18\x43reateEmailServerRequest\x12K\n\x08provider\x18\x01 \x01(\x0e\x32\'.scalekit.v1.emails.EmailServerProviderB\x06\xbaH\x03\xc8\x01\x01R\x08provider\x12\x42\n\x08settings\x18\x02 \x01(\x0b\x32&.scalekit.v1.emails.SMTPServerSettingsR\x08settings\"\\\n\x19\x43reateEmailServerResponse\x12?\n\x06server\x18\x01 \x01(\x0b\x32\x1f.scalekit.v1.emails.EmailServerB\x06\xbaH\x03\xc8\x01\x01R\x06server\"G\n\x15GetEmailServerRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId\"Q\n\x16GetEmailServerResponse\x12\x37\n\x06server\x18\x01 \x01(\x0b\x32\x1f.scalekit.v1.emails.EmailServerR\x06server\"J\n\x18\x45nableEmailServerRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId\"\xd4\x01\n\x19\x45nableEmailServerResponse\x12V\n\x10\x61\x63tive_server_id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65srR\x0e\x61\x63tiveServerId\x12_\n\x15last_active_server_id\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65srR\x12lastActiveServerId\"K\n\x19\x44isableEmailServerRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId\"T\n\x17ListEmailServerResponse\x12\x39\n\x07servers\x18\x01 \x03(\x0b\x32\x1f.scalekit.v1.emails.EmailServerR\x07servers\"\xa2\x01\n\x1fPatchEmailServerSettingsRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId\x12O\n\x08settings\x18\x02 \x01(\x0b\x32+.scalekit.v1.emails.PatchSMTPServerSettingsB\x06\xbaH\x03\xc8\x01\x01R\x08settings\"J\n\x18\x44\x65leteEmailServerRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId*\x94\x02\n\x0fTemplateUsecase\x12 \n\x1cTEMPLATE_USECASE_UNSPECIFIED\x10\x00\x12\t\n\x05LOGIN\x10\x01\x12\r\n\tOTP_LOGIN\x10\x02\x12\x11\n\rMEMBER_INVITE\x10\x03\x12\x0f\n\x0bUSER_INVITE\x10\x04\x12\x0e\n\nUSER_LOGIN\x10\x05\x12\n\n\x06SIGNUP\x10\x06\x12\x12\n\x0eUSER_LOGIN_OTP\x10\x07\x12\x13\n\x0fUSER_LOGIN_LINK\x10\x08\x12\x17\n\x13USER_LOGIN_LINK_OTP\x10\t\x12\x13\n\x0fUSER_SIGNUP_OTP\x10\n\x12\x14\n\x10USER_SIGNUP_LINK\x10\x0b\x12\x18\n\x14USER_SIGNUP_LINK_OTP\x10\x0c*=\n\x0f\x45mailServerType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07INHOUSE\x10\x01\x12\x0c\n\x08\x43USTOMER\x10\x02*Z\n\x13\x45mailServerProvider\x12\x1c\n\x18\x45MAIL_SERVER_UNSPECIFIED\x10\x00\x12\x0c\n\x08SENDGRID\x10\x01\x12\x0c\n\x08POSTMARK\x10\x02\x12\t\n\x05OTHER\x10\x03\x32\xb7\x1d\n\x0c\x45mailService\x12\xb5\x01\n\x17GetTemplatePlaceholders\x12*.scalekit.v1.emails.GetPlaceholdersRequest\x1a+.scalekit.v1.emails.GetPlaceholdersResponse\"A\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02&\x12$/api/v1/email/templates/placeholders\x12\x8e\x01\n\x13GetTemplateUseCases\x12\x16.google.protobuf.Empty\x1a/.scalekit.v1.emails.GetTemplateUseCasesResponse\".\x82\xb5\x18\x02\x18\x01\x82\xd3\xe4\x93\x02\"\x12 /api/v1/email/templates/usecases\x12\x8c\x02\n\x13\x43reateEmailTemplate\x12..scalekit.v1.emails.CreateEmailTemplateRequest\x1a/.scalekit.v1.emails.CreateEmailTemplateResponse\"\x93\x01\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02x\"7/api/v1/organizations/{organization_id}/email/templates:\x08templateZ3\"\'/api/v1/organizations/-/email/templates:\x08template\x12\xa5\x02\n\x13UpdateEmailTemplate\x12-.scalekit.v1.emails.PatchEmailTemplateRequest\x1a,.scalekit.v1.emails.GetEmailTemplateResponse\"\xb0\x01\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x94\x01\x32\x45/api/v1/organizations/{organization_id}/email/templates/{template_id}:\x08templateZA25/api/v1/organizations/-/email/templates/{template_id}:\x08template\x12\x8e\x01\n\x15GetEmailConfiguration\x12\x16.google.protobuf.Empty\x1a\x31.scalekit.v1.emails.GetEmailConfigurationResponse\"*\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x1e\x12\x1c/api/v1/emails/configuration\x12\xb4\x01\n\x18UpsertEmailConfiguration\x12\x33.scalekit.v1.emails.UpsertEmailConfigurationRequest\x1a\x34.scalekit.v1.emails.UpsertEmailConfigurationResponse\"-\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02!\"\x1c/api/v1/emails/configuration:\x01*\x12\xa3\x02\n\x13\x45nableEmailTemplate\x12..scalekit.v1.emails.EnableEmailTemplateRequest\x1a/.scalekit.v1.emails.EnableEmailTemplateResponse\"\xaa\x01\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x8e\x01\x32L/api/v1/organizations/{organization_id}/email/templates/{template_id}:enableZ>2\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02#\x12!/api/v1/email/servers/{server_id}\x12\x8b\x01\n\x10ListEmailServers\x12\x16.google.protobuf.Empty\x1a+.scalekit.v1.emails.ListEmailServerResponse\"2\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x17\x12\x15/api/v1/email/servers\x12\x99\x01\n\x11\x44\x65leteEmailServer\x12,.scalekit.v1.emails.DeleteEmailServerRequest\x1a\x16.google.protobuf.Empty\">\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02#*!/api/v1/email/servers/{server_id}B2Z0github.com/scalekit-inc/scalekit/pkg/grpc/emailsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -193,121 +194,121 @@ _globals['_DELETEEMAILSERVERREQUEST'].fields_by_name['server_id']._loaded_options = None _globals['_DELETEEMAILSERVERREQUEST'].fields_by_name['server_id']._serialized_options = b'\272H\016r\t\020\001\030 :\003esr\310\001\001' _globals['_EMAILSERVICE'].methods_by_name['GetTemplatePlaceholders']._loaded_options = None - _globals['_EMAILSERVICE'].methods_by_name['GetTemplatePlaceholders']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002&\022$/api/v1/email/templates/placeholders' + _globals['_EMAILSERVICE'].methods_by_name['GetTemplatePlaceholders']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002&\022$/api/v1/email/templates/placeholders' _globals['_EMAILSERVICE'].methods_by_name['GetTemplateUseCases']._loaded_options = None _globals['_EMAILSERVICE'].methods_by_name['GetTemplateUseCases']._serialized_options = b'\202\265\030\002\030\001\202\323\344\223\002\"\022 /api/v1/email/templates/usecases' _globals['_EMAILSERVICE'].methods_by_name['CreateEmailTemplate']._loaded_options = None - _globals['_EMAILSERVICE'].methods_by_name['CreateEmailTemplate']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002x\"7/api/v1/organizations/{organization_id}/email/templates:\010templateZ3\"\'/api/v1/organizations/-/email/templates:\010template' + _globals['_EMAILSERVICE'].methods_by_name['CreateEmailTemplate']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002x\"7/api/v1/organizations/{organization_id}/email/templates:\010templateZ3\"\'/api/v1/organizations/-/email/templates:\010template' _globals['_EMAILSERVICE'].methods_by_name['UpdateEmailTemplate']._loaded_options = None - _globals['_EMAILSERVICE'].methods_by_name['UpdateEmailTemplate']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\224\0012E/api/v1/organizations/{organization_id}/email/templates/{template_id}:\010templateZA25/api/v1/organizations/-/email/templates/{template_id}:\010template' + _globals['_EMAILSERVICE'].methods_by_name['UpdateEmailTemplate']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\224\0012E/api/v1/organizations/{organization_id}/email/templates/{template_id}:\010templateZA25/api/v1/organizations/-/email/templates/{template_id}:\010template' _globals['_EMAILSERVICE'].methods_by_name['GetEmailConfiguration']._loaded_options = None _globals['_EMAILSERVICE'].methods_by_name['GetEmailConfiguration']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002\036\022\034/api/v1/emails/configuration' _globals['_EMAILSERVICE'].methods_by_name['UpsertEmailConfiguration']._loaded_options = None _globals['_EMAILSERVICE'].methods_by_name['UpsertEmailConfiguration']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002!\"\034/api/v1/emails/configuration:\001*' _globals['_EMAILSERVICE'].methods_by_name['EnableEmailTemplate']._loaded_options = None - _globals['_EMAILSERVICE'].methods_by_name['EnableEmailTemplate']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\216\0012L/api/v1/organizations/{organization_id}/email/templates/{template_id}:enableZ>22\"*/api/v1/environments/{id}/session-settings:\x10session_settings\x12\xf9\x01\n\x1f\x43reateEnvironmentUserManagement\x12@.scalekit.v1.environments.CreateEnvironmentUserManagementRequest\x1a\x41.scalekit.v1.environments.CreateEnvironmentUserManagementResponse\"Q\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x45\"2/api/v1/environments/{id}/settings/user-management:\x0fuser_management\x12\xda\x01\n\x1dGetEnvironmentSessionSettings\x12>.scalekit.v1.environments.GetEnvironmentSessionSettingsRequest\x1a?.scalekit.v1.environments.GetEnvironmentSessionSettingsResponse\"8\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02,\x12*/api/v1/environments/{id}/session-settings\x12\xdf\x01\n\x1cGetEnvironmentUserManagement\x12=.scalekit.v1.environments.GetEnvironmentUserManagementRequest\x1a>.scalekit.v1.environments.GetEnvironmentUserManagementResponse\"@\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x34\x12\x32/api/v1/environments/{id}/settings/user-management\x12\xf5\x01\n UpdateEnvironmentSessionSettings\x12\x41.scalekit.v1.environments.UpdateEnvironmentSessionSettingsRequest\x1a\x42.scalekit.v1.environments.UpdateEnvironmentSessionSettingsResponse\"J\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02>2*/api/v1/environments/{id}/session-settings:\x10session_settings\x12\xf9\x01\n\x1fUpdateEnvironmentUserManagement\x12@.scalekit.v1.environments.UpdateEnvironmentUserManagementRequest\x1a\x41.scalekit.v1.environments.UpdateEnvironmentUserManagementResponse\"Q\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x45\x32\x32/api/v1/environments/{id}/settings/user-management:\x0fuser_management\x12\xa5\x01\n\nGetContext\x12+.scalekit.v1.environments.GetContextRequest\x1a,.scalekit.v1.environments.GetContextResponse\"<\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x30\x12./api/v1/environments/{environment_id}/contexts\x12\x9e\x01\n\rUpdateContext\x12..scalekit.v1.environments.UpdateContextRequest\x1a\x16.google.protobuf.Empty\"E\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x39\x1a./api/v1/environments/{environment_id}/contexts:\x07\x63ontext\x12\xee\x01\n\x11GetCurrentSession\x12\x32.scalekit.v1.environments.GetCurrentSessionRequest\x1a\x33.scalekit.v1.environments.GetCurrentSessionResponse\"p\x82\xb5\x18\x02\x18p\x82\xd3\xe4\x93\x02\x64\x12%/api/v1/environments/{id}/sessions:meZ$\x12\"/api/v1/environments/-/sessions:meZ\x15\x12\x13/api/v1/sessions:me\x12\xa2\x01\n\x14GetScalekitResources\x12\x31.scalekit.v1.environments.ScalekitResourceRequest\x1a\x32.scalekit.v1.environments.ScalekitResourceResponse\"#\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x17\"\x12/api/v1/fetch:bulk:\x01*B8Z6github.com/scalekit-inc/scalekit/pkg/grpc/environmentsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n+scalekit/v1/environments/environments.proto\x12\x18scalekit.v1.environments\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a)scalekit/v1/connections/connections.proto\x1a!scalekit/v1/options/options.proto\x1a-scalekit/v1/organizations/organizations.proto\"o\n\x19\x43reateCustomDomainRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\x32\n\rcustom_domain\x18\x02 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xfa\x01\xc8\x01\x01R\x0c\x63ustomDomain\"e\n\x1a\x43reateCustomDomainResponse\x12G\n\x0b\x65nvironment\x18\x01 \x01(\x0b\x32%.scalekit.v1.environments.EnvironmentR\x0b\x65nvironment\"j\n\x14GetDNSRecordsRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\x32\n\rcustom_domain\x18\x02 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xfa\x01\xc8\x01\x01R\x0c\x63ustomDomain\"^\n\x15GetDNSRecordsResponse\x12\x45\n\x0b\x64ns_records\x18\x01 \x03(\x0b\x32$.scalekit.v1.environments.DNSRecordsR\ndnsRecords\"w\n\nDNSRecords\x12\'\n\thost_name\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xfa\x01R\x08hostName\x12\x1e\n\x04type\x18\x02 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xfa\x01R\x04type\x12 \n\x05value\x18\x03 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xfa\x01R\x05value\"\x92\x04\n\x0b\x45nvironment\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12;\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12;\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nupdateTime\x12-\n\x0c\x64isplay_name\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\"\n\x06\x64omain\x18\x05 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xfa\x01R\x06\x64omain\x12@\n\x0bregion_code\x18\x06 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeR\nregionCode\x12\x38\n\x04type\x18\x07 \x01(\x0e\x32$.scalekit.v1.commons.EnvironmentTypeR\x04type\x12(\n\rcustom_domain\x18\x08 \x01(\tH\x00R\x0c\x63ustomDomain\x88\x01\x01\x12^\n\x14\x63ustom_domain_status\x18\t \x01(\x0e\x32,.scalekit.v1.environments.CustomDomainStatusR\x12\x63ustomDomainStatusB\x10\n\x0e_custom_domain\"\xb1\x03\n\x11\x43reateEnvironment\x12-\n\x0c\x64isplay_name\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\x45\n\x0bregion_code\x18\x06 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeH\x00R\nregionCode\x88\x01\x01\x12=\n\x04type\x18\x07 \x01(\x0e\x32$.scalekit.v1.commons.EnvironmentTypeH\x01R\x04type\x88\x01\x01\x12\xaf\x01\n\x13\x61uthentication_mode\x18\x08 \x01(\x0e\x32\'.scalekit.v1.commons.AuthenticationModeBP\x92\x41M2KThe authentication mode for the environment. The default is FULL_STACK_AUTHH\x02R\x12\x61uthenticationMode\x88\x01\x01\x42\x0e\n\x0c_region_codeB\x07\n\x05_typeB\x16\n\x14_authentication_modeJ\x04\x08\x05\x10\x06\"j\n\x11UpdateEnvironment\x12\x32\n\x0c\x64isplay_name\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xd0\x0fH\x00R\x0b\x64isplayName\x88\x01\x01\x42\x0f\n\r_display_nameJ\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08\"S\n\x17UpdateEnvironmentDomain\x12\'\n\x06\x64omain\x18\x05 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xfa\x01H\x00R\x06\x64omain\x88\x01\x01\x42\t\n\x07_domainJ\x04\x08\x04\x10\x05\"q\n\x18\x43reateEnvironmentRequest\x12U\n\x0b\x65nvironment\x18\x01 \x01(\x0b\x32+.scalekit.v1.environments.CreateEnvironmentB\x06\xbaH\x03\xc8\x01\x01R\x0b\x65nvironment\"d\n\x19\x43reateEnvironmentResponse\x12G\n\x0b\x65nvironment\x18\x01 \x01(\x0b\x32%.scalekit.v1.environments.EnvironmentR\x0b\x65nvironment\"\x91\x01\n\x18UpdateEnvironmentRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12U\n\x0b\x65nvironment\x18\x02 \x01(\x0b\x32+.scalekit.v1.environments.UpdateEnvironmentB\x06\xbaH\x03\xc8\x01\x01R\x0b\x65nvironment\"\x9d\x01\n\x1eUpdateEnvironmentDomainRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12[\n\x0b\x65nvironment\x18\x02 \x01(\x0b\x32\x31.scalekit.v1.environments.UpdateEnvironmentDomainB\x06\xbaH\x03\xc8\x01\x01R\x0b\x65nvironment\"d\n\x19UpdateEnvironmentResponse\x12G\n\x0b\x65nvironment\x18\x01 \x01(\x0b\x32%.scalekit.v1.environments.EnvironmentR\x0b\x65nvironment\"7\n\x15GetEnvironmentRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"a\n\x16GetEnvironmentResponse\x12G\n\x0b\x65nvironment\x18\x01 \x01(\x0b\x32%.scalekit.v1.environments.EnvironmentR\x0b\x65nvironment\"U\n\x17ListEnvironmentsRequest\x12\x1b\n\tpage_size\x18\x01 \x01(\rR\x08pageSize\x12\x1d\n\npage_token\x18\x02 \x01(\tR\tpageToken\"\xac\x01\n\x18ListEnvironmentsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12I\n\x0c\x65nvironments\x18\x03 \x03(\x0b\x32%.scalekit.v1.environments.EnvironmentR\x0c\x65nvironments\":\n\x18\x44\x65leteEnvironmentRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"@\n\x1eGenerateSamlCertificateRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"k\n\x1fGenerateSamlCertificateResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12 \n\x0b\x63\x65rtificate\x18\x02 \x01(\tR\x0b\x63\x65rtificate\x12\x16\n\x06\x65xpiry\x18\x03 \x01(\x03R\x06\x65xpiry\"\x99\x01\n!UpdatePortalCustomizationResponse\x12$\n\renvironmentId\x18\x01 \x01(\tR\renvironmentId\x12N\n\x16\x63ustomization_settings\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\x15\x63ustomizationSettings\"\x9a\x01\n UpdatePortalCustomizationRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12V\n\x16\x63ustomization_settings\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructB\x06\xbaH\x03\xc8\x01\x01R\x15\x63ustomizationSettings\":\n\x1dGetPortalCustomizationRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x02id\"\x9d\x04\n\x0ePortalSettings\x12\x98\x01\n\x0f\x63ustom_branding\x18\x01 \x01(\x08\x42o\x92\x41l2dIndicates whether custom portal branding is enabled for this workspace based on billing subscriptionJ\x04trueR\x0e\x63ustomBranding\x12\xc3\x01\n\x17new_self_serve_sso_scim\x18\x02 \x01(\x08\x42\x8c\x01\x92\x41\x88\x01\x32\x7fIndicates whether the new self-serve SSO/SCIM flow should be shown in the customer portal (rollout-driven, not billing-derived)J\x05\x66\x61lseR\x13newSelfServeSsoScim\x12\xa9\x01\n\x12\x65nable_conn_delete\x18\x03 \x01(\x08\x42{\x92\x41x2oIndicates whether connection deletion is enabled for this environment (rollout-driven by environment allowlist)J\x05\x66\x61lseR\x10\x65nableConnDelete\"\xe6\x01\n\x1eGetPortalCustomizationResponse\x12$\n\renvironmentId\x18\x01 \x01(\tR\renvironmentId\x12S\n\x16\x63ustomization_settings\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructB\x03\xe0\x41\x01R\x15\x63ustomizationSettings\x12I\n\x08settings\x18\x03 \x01(\x0b\x32(.scalekit.v1.environments.PortalSettingsB\x03\xe0\x41\x03R\x08settings\"Z\n\x1c\x43reateAssetUploadUrlResponse\x12\x1d\n\nupload_url\x18\x01 \x01(\tR\tuploadUrl\x12\x1b\n\tfetch_url\x18\x02 \x01(\tR\x08\x66\x65tchUrl\"\x8d\x01\n\x1b\x43reateAssetUploadUrlRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12N\n\x0e\x61sset_settings\x18\x02 \x01(\x0b\x32\'.scalekit.v1.environments.AssetSettingsR\rassetSettings\"\x91\x01\n\rAssetSettings\x12K\n\x08\x63\x61tegory\x18\x01 \x01(\x0e\x32\'.scalekit.v1.environments.AssetCategoryB\x06\xbaH\x03\xc8\x01\x01R\x08\x63\x61tegory\x12\x33\n\textension\x18\x02 \x01(\tB\x15\xbaH\x12r\x10R\x03jpgR\x04jpegR\x03pngR\textension\"\x89\x01\n\x15UpdateFeaturesRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12P\n\x08\x66\x65\x61tures\x18\x02 \x03(\x0b\x32,.scalekit.v1.environments.EnvironmentFeatureB\x06\xbaH\x03\xc8\x01\x01R\x08\x66\x65\x61tures\"2\n\x17\x45nableFSAFeatureRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x02id\":\n\x18\x44isableFSAFeatureRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"7\n\x12GetFeaturesRequest\x12!\n\x02id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65nv\xd0\x01\x01R\x02id\"_\n\x13GetFeaturesResponse\x12H\n\x08\x66\x65\x61tures\x18\x01 \x03(\x0b\x32,.scalekit.v1.environments.EnvironmentFeatureR\x08\x66\x65\x61tures\"`\n\x14\x45nableFeatureRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12(\n\nfeature_id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18 R\tfeatureId\"a\n\x15\x44isableFeatureRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12(\n\nfeature_id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18 R\tfeatureId\"B\n\x12\x45nvironmentFeature\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x18\n\x07\x65nabled\x18\x02 \x01(\x08R\x07\x65nabled\"p\n\'GetHostScopedPublicFeatureFlagsResponse\x12\x45\n\x05\x66lags\x18\x01 \x03(\x0b\x32/.scalekit.v1.environments.PublicHostFeatureFlagR\x05\x66lags\"\x9f\x01\n\x15PublicHostFeatureFlag\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.ValueR\x05value\x12\x18\n\x07variant\x18\x03 \x01(\tR\x07variant\x12\x16\n\x06reason\x18\x04 \x01(\tR\x06reason\x12\x14\n\x05\x65rror\x18\x05 \x01(\tR\x05\x65rror\"F\n$GetEnvironmentSessionSettingsRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"E\n#GetEnvironmentUserManagementRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"}\n%GetEnvironmentSessionSettingsResponse\x12T\n\x10session_settings\x18\x01 \x01(\x0b\x32).scalekit.v1.environments.SessionSettingsR\x0fsessionSettings\"y\n$GetEnvironmentUserManagementResponse\x12Q\n\x0fuser_management\x18\x01 \x01(\x0b\x32(.scalekit.v1.environments.UserManagementR\x0euserManagement\"\xa7\x01\n\'CreateEnvironmentSessionSettingsRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\\\n\x10session_settings\x18\x02 \x01(\x0b\x32).scalekit.v1.environments.SessionSettingsB\x06\xbaH\x03\xc8\x01\x01R\x0fsessionSettings\"\xa3\x01\n&CreateEnvironmentUserManagementRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12Y\n\x0fuser_management\x18\x02 \x01(\x0b\x32(.scalekit.v1.environments.UserManagementB\x06\xbaH\x03\xc8\x01\x01R\x0euserManagement\"\xa7\x01\n(CreateEnvironmentSessionSettingsResponse\x12%\n\x0e\x65nvironment_id\x18\x01 \x01(\tR\renvironmentId\x12T\n\x10session_settings\x18\x02 \x01(\x0b\x32).scalekit.v1.environments.SessionSettingsR\x0fsessionSettings\"\xa3\x01\n\'CreateEnvironmentUserManagementResponse\x12%\n\x0e\x65nvironment_id\x18\x01 \x01(\tR\renvironmentId\x12Q\n\x0fuser_management\x18\x02 \x01(\x0b\x32(.scalekit.v1.environments.UserManagementR\x0euserManagement\"\xa7\x01\n\'UpdateEnvironmentSessionSettingsRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\\\n\x10session_settings\x18\x02 \x01(\x0b\x32).scalekit.v1.environments.SessionSettingsB\x06\xbaH\x03\xc8\x01\x01R\x0fsessionSettings\"\xa3\x01\n&UpdateEnvironmentUserManagementRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12Y\n\x0fuser_management\x18\x02 \x01(\x0b\x32(.scalekit.v1.environments.UserManagementB\x06\xbaH\x03\xc8\x01\x01R\x0euserManagement\"\xa7\x01\n(UpdateEnvironmentSessionSettingsResponse\x12%\n\x0e\x65nvironment_id\x18\x01 \x01(\tR\renvironmentId\x12T\n\x10session_settings\x18\x02 \x01(\x0b\x32).scalekit.v1.environments.SessionSettingsR\x0fsessionSettings\"\xa3\x01\n\'UpdateEnvironmentUserManagementResponse\x12%\n\x0e\x65nvironment_id\x18\x01 \x01(\tR\renvironmentId\x12Q\n\x0fuser_management\x18\x02 \x01(\x0b\x32(.scalekit.v1.environments.UserManagementR\x0euserManagement\"\xf0\x08\n\x0fSessionSettings\x12X\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x0b\xbaH\x08\x1a\x06\x18\xc0\xd1\x02(\x01R\x11\x61\x63\x63\x65ssTokenExpiry\x12\x65\n\x1a\x63lient_access_token_expiry\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x0b\xbaH\x08\x1a\x06\x18\xc0\xd1\x02(\x01R\x17\x63lientAccessTokenExpiry\x12\x62\n\x18\x61\x62solute_session_timeout\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x0b\xbaH\x08\x1a\x06\x18\xa0\x8a (\x01R\x16\x61\x62soluteSessionTimeout\x12X\n\x1asession_management_enabled\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x18sessionManagementEnabled\x12Y\n\x14idle_session_timeout\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\n\xbaH\x07\x1a\x05\x18\xe0N(\x01R\x12idleSessionTimeout\x12L\n\x14idle_session_enabled\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x12idleSessionEnabled\x12g\n\x17\x63ookie_persistence_type\x18\x07 \x01(\x0e\x32/.scalekit.v1.environments.CookiePersistenceTypeR\x15\x63ookiePersistenceType\x12h\n\x18\x63ookie_same_site_setting\x18\x08 \x01(\x0e\x32/.scalekit.v1.environments.CookieSameSiteSettingR\x15\x63ookieSameSiteSetting\x12N\n\x14\x63ookie_custom_domain\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueR\x12\x63ookieCustomDomain\x12V\n\x18\x61\x63\x63\x65ss_token_expiry_unit\x18\n \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitR\x15\x61\x63\x63\x65ssTokenExpiryUnit\x12`\n\x1d\x61\x62solute_session_timeout_unit\x18\x0b \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitR\x1a\x61\x62soluteSessionTimeoutUnit\x12X\n\x19idle_session_timeout_unit\x18\x0c \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitR\x16idleSessionTimeoutUnit\"\xa5\x07\n\x0eUserManagement\x12\x61\n\x1f\x61llow_duplicate_user_identities\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x1c\x61llowDuplicateUserIdentities\x12X\n\x1a\x61llow_multiple_memberships\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x18\x61llowMultipleMemberships\x12V\n\x19\x61llow_organization_signup\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x17\x61llowOrganizationSignup\x12o\n\x15org_user_relationship\x18\x04 \x01(\x0e\x32\x31.scalekit.v1.environments.OrgUserRelationshipTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x13orgUserRelationship\x12O\n\x16\x65nable_max_users_limit\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x13\x65nableMaxUsersLimit\x12P\n\x0fmax_users_limit\x18\x06 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x0b\xbaH\x08\x1a\x06\x18\x9f\x8d\x06(\x01R\rmaxUsersLimit\x12V\n\x11invitation_expiry\x18\x07 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x0b\xbaH\x08*\x06\x18\xc0\xd1\x02(\x01R\x10invitationExpiry\x12_\n\x1e\x62lock_disposable_email_domains\x18\t \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x1b\x62lockDisposableEmailDomains\x12W\n\x1a\x62lock_public_email_domains\x18\n \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x17\x62lockPublicEmailDomains\x12X\n\x1bsync_user_profile_on_signin\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x17syncUserProfileOnSignin\":\n\x11GetContextRequest\x12%\n\x0e\x65nvironment_id\x18\x02 \x01(\tR\renvironmentId\"G\n\x12GetContextResponse\x12\x31\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext\"p\n\x14UpdateContextRequest\x12%\n\x0e\x65nvironment_id\x18\x02 \x01(\tR\renvironmentId\x12\x31\n\x07\x63ontext\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext\"*\n\x18GetCurrentSessionRequest\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\"\x93\x03\n\x19GetCurrentSessionResponse\x12\x46\n\x0esession_expiry\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\rsessionExpiry\x88\x01\x01\x12J\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x11\x61\x63\x63\x65ssTokenExpiry\x12,\n\x0forganization_id\x18\x03 \x01(\tH\x01R\x0eorganizationId\x88\x01\x01\x12\x18\n\x07subject\x18\x04 \x01(\tR\x07subject\x12\x19\n\x05\x65mail\x18\x05 \x01(\tH\x02R\x05\x65mail\x88\x01\x01\x12\x35\n\x14\x63onnected_account_id\x18\x06 \x01(\tH\x03R\x12\x63onnectedAccountId\x88\x01\x01\x42\x11\n\x0f_session_expiryB\x12\n\x10_organization_idB\x08\n\x06_emailB\x17\n\x15_connected_account_id\"\xc5\x01\n\x10ResourceMetadata\x12K\n\x04type\x18\x01 \x01(\x0e\x32\x37.scalekit.v1.environments.ResourceMetadata.ResourceTypeR\x04type\x12 \n\x0bidentifiers\x18\x02 \x03(\tR\x0bidentifiers\"B\n\x0cResourceType\x12\x10\n\x0corganization\x10\x00\x12\x0e\n\nconnection\x10\x01\x12\x10\n\x0c\x61uth_request\x10\x02\"c\n\x17ScalekitResourceRequest\x12H\n\tresources\x18\x01 \x03(\x0b\x32*.scalekit.v1.environments.ResourceMetadataR\tresources\"\xd2\x01\n\x18ScalekitResourceResponse\x12_\n\tresources\x18\x01 \x03(\x0b\x32\x41.scalekit.v1.environments.ScalekitResourceResponse.ResourcesEntryR\tresources\x1aU\n\x0eResourcesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\x05value:\x02\x38\x01\"\x18\n\x16PortalBootstrapRequest\"\xbe\x01\n\x1cPortalCustomizationBootstrap\x12S\n\x16\x63ustomization_settings\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\x03\xe0\x41\x01R\x15\x63ustomizationSettings\x12I\n\x08settings\x18\x02 \x01(\x0b\x32(.scalekit.v1.environments.PortalSettingsB\x03\xe0\x41\x03R\x08settings\"\xed\x02\n\x17PortalBootstrapResponse\x12M\n\x07session\x18\x01 \x01(\x0b\x32\x33.scalekit.v1.environments.GetCurrentSessionResponseR\x07session\x12k\n\x15portal_customizations\x18\x02 \x01(\x0b\x32\x36.scalekit.v1.environments.PortalCustomizationBootstrapR\x14portalCustomizations\x12K\n\x0corganization\x18\x03 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationR\x0corganization\x12I\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionR\x0b\x63onnections\"\x82\x01\n\x12\x41gentActionsConfig\x12l\n\x10user_verify_mode\x18\x01 \x01(\x0e\x32\x38.scalekit.v1.environments.ConnectedAccountUserVerifyModeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0euserVerifyMode\"\xa6\x01\n\x1f\x43reateAgentActionsConfigRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\x63\n\x14\x61gent_actions_config\x18\x02 \x01(\x0b\x32,.scalekit.v1.environments.AgentActionsConfigB\x03\xe0\x41\x02R\x12\x61gentActionsConfig\"\x87\x01\n CreateAgentActionsConfigResponse\x12\x63\n\x14\x61gent_actions_config\x18\x01 \x01(\x0b\x32,.scalekit.v1.environments.AgentActionsConfigB\x03\xe0\x41\x03R\x12\x61gentActionsConfig\">\n\x1cGetAgentActionsConfigRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"\x84\x01\n\x1dGetAgentActionsConfigResponse\x12\x63\n\x14\x61gent_actions_config\x18\x01 \x01(\x0b\x32,.scalekit.v1.environments.AgentActionsConfigB\x03\xe0\x41\x03R\x12\x61gentActionsConfig\"\xa6\x01\n\x1fUpdateAgentActionsConfigRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\x63\n\x14\x61gent_actions_config\x18\x02 \x01(\x0b\x32,.scalekit.v1.environments.AgentActionsConfigB\x03\xe0\x41\x02R\x12\x61gentActionsConfig\"\x87\x01\n UpdateAgentActionsConfigResponse\x12\x63\n\x14\x61gent_actions_config\x18\x01 \x01(\x0b\x32,.scalekit.v1.environments.AgentActionsConfigB\x03\xe0\x41\x03R\x12\x61gentActionsConfig*W\n\x12\x43ustomDomainStatus\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07PENDING\x10\x01\x12\n\n\x06\x41\x43TIVE\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\x12\x0b\n\x07INITIAL\x10\x04*O\n\rAssetCategory\x12\x1e\n\x1a\x41SSET_CATEGORY_UNSPECIFIED\x10\x00\x12\x1e\n\x1aPORTAL_CUSTOMIZATION_IMAGE\x10\x01*w\n\x17OrgUserRelationshipType\x12\'\n#OrgUserRelationshipType_UNSPECIFIED\x10\x00\x12\x17\n\x13SINGLE_ORGANIZATION\x10\x01\x12\x1a\n\x16MULTIPLE_ORGANIZATIONS\x10\x02*[\n\x15\x43ookiePersistenceType\x12%\n!CookiePersistenceType_UNSPECIFIED\x10\x00\x12\x0e\n\nPERSISTENT\x10\x01\x12\x0b\n\x07SESSION\x10\x02*[\n\x15\x43ookieSameSiteSetting\x12%\n!CookieSameSiteSetting_UNSPECIFIED\x10\x00\x12\x0c\n\x08LAX_MODE\x10\x01\x12\r\n\tNONE_MODE\x10\x02*\xb1\x01\n\x1e\x43onnectedAccountUserVerifyMode\x12\x32\n.CONNECTED_ACCOUNT_USER_VERIFY_MODE_UNSPECIFIED\x10\x00\x12\x19\n\x15USER_VERIFY_MODE_NONE\x10\x01\x12\x18\n\x14USER_VERIFY_MODE_B2B\x10\x02\x12&\n\"USER_VERIFY_MODE_SCALEKIT_PLATFORM\x10\x03\x32\xcb\x42\n\x12\x45nvironmentService\x12\xbc\x01\n\x11\x43reateEnvironment\x12\x32.scalekit.v1.environments.CreateEnvironmentRequest\x1a\x33.scalekit.v1.environments.CreateEnvironmentResponse\">\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02#\"\x14/api/v1/environments:\x0b\x65nvironment\x12\xb2\x01\n\x11UpdateEnvironment\x12\x32.scalekit.v1.environments.UpdateEnvironmentRequest\x1a\x33.scalekit.v1.environments.UpdateEnvironmentResponse\"4\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02(2\x19/api/v1/environments/{id}:\x0b\x65nvironment\x12\xc5\x01\n\x17UpdateEnvironmentDomain\x12\x38.scalekit.v1.environments.UpdateEnvironmentDomainRequest\x1a\x33.scalekit.v1.environments.UpdateEnvironmentResponse\";\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02/2 /api/v1/environments/{id}:update:\x0b\x65nvironment\x12\x9c\x01\n\x0eGetEnvironment\x12/.scalekit.v1.environments.GetEnvironmentRequest\x1a\x30.scalekit.v1.environments.GetEnvironmentResponse\"\'\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x1b\x12\x19/api/v1/environments/{id}\x12\x9c\x01\n\x0fListEnvironment\x12\x31.scalekit.v1.environments.ListEnvironmentsRequest\x1a\x32.scalekit.v1.environments.ListEnvironmentsResponse\"\"\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/environments\x12\x86\x01\n\x11\x44\x65leteEnvironment\x12\x32.scalekit.v1.environments.DeleteEnvironmentRequest\x1a\x16.google.protobuf.Empty\"%\x82\xb5\x18\x00\x82\xd3\xe4\x93\x02\x1b*\x19/api/v1/environments/{id}\x12\xa8\x01\n\x15GetRequiredDNSRecords\x12..scalekit.v1.environments.GetDNSRecordsRequest\x1a/.scalekit.v1.environments.GetDNSRecordsResponse\".\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\"\"\x1d/api/v1/environments/{id}/dns:\x01*\x12\x91\x01\n\x10VerifyDNSRecords\x12..scalekit.v1.environments.GetDNSRecordsRequest\x1a\x16.google.protobuf.Empty\"5\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02)\"$/api/v1/environments/{id}/dns:verify:\x01*\x12\xc9\x01\n\x12\x43reateCustomDomain\x12\x33.scalekit.v1.environments.CreateCustomDomainRequest\x1a\x34.scalekit.v1.environments.CreateCustomDomainResponse\"H\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02-\"(/api/v1/environments/{id}/custom-domains:\x01*\x12\xcc\x01\n\x17\x43heckCustomDomainStatus\x12/.scalekit.v1.environments.GetEnvironmentRequest\x1a\x30.scalekit.v1.environments.GetEnvironmentResponse\"N\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x33\"./api/v1/environments/{id}/custom-domains:check:\x01*\x12\xe7\x01\n\x1aGenerateNewSamlCertificate\x12\x38.scalekit.v1.environments.GenerateSamlCertificateRequest\x1a\x39.scalekit.v1.environments.GenerateSamlCertificateResponse\"T\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x39\"4/api/v1/environments/{id}/saml-certificates:generate:\x01*\x12\xc0\x02\n\x19UpdatePortalCustomization\x12:.scalekit.v1.environments.UpdatePortalCustomizationRequest\x1a;.scalekit.v1.environments.UpdatePortalCustomizationResponse\"\xa9\x01\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x8d\x01\x1a//api/v1/environments/{id}/portal_customizations:\x16\x63ustomization_settingsZB\x1a(/api/v1/environments/{id}/customizations:\x16\x63ustomization_settings\x12\xe9\x01\n\x16GetPortalCustomization\x12\x37.scalekit.v1.environments.GetPortalCustomizationRequest\x1a\x38.scalekit.v1.environments.GetPortalCustomizationResponse\"\\\x82\xb5\x18\x03\x18\xe0\x01\x82\xd3\xe4\x93\x02O\x12\x1d/api/v1/portal_customizationsZ.\x12,/api/v1/environments/-/portal_customizations\x12\xc4\x01\n\x14\x43reateAssetUploadURL\x12\x35.scalekit.v1.environments.CreateAssetUploadUrlRequest\x1a\x36.scalekit.v1.environments.CreateAssetUploadUrlResponse\"=\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x31\"\x1f/api/v1/environments/{id}/asset:\x0e\x61sset_settings\x12\xac\x01\n\x0eUpdateFeatures\x12/.scalekit.v1.environments.UpdateFeaturesRequest\x1a-.scalekit.v1.environments.GetFeaturesResponse\":\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02.\x1a\"/api/v1/environments/{id}/features:\x08\x66\x65\x61tures\x12\xcb\x01\n\x10\x45nableFSAFeature\x12\x31.scalekit.v1.environments.EnableFSAFeatureRequest\x1a\x16.google.protobuf.Empty\"l\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02Q\"-/api/v1/environments/{id}/features/fsa/enable:\x01*Z\x1d\"\x1b/api/v1/features/fsa/enable\x12\x81\x01\n\x11\x44isableFSAFeature\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"<\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\"\x1c/api/v1/features/fsa/disable:\x01*\x12\x9d\x01\n\rEnableFeature\x12..scalekit.v1.environments.EnableFeatureRequest\x1a\x16.google.protobuf.Empty\"D\x82\xb5\x18\x02\x18`\x82\xd3\xe4\x93\x02\x38\"6/api/v1/environments/{id}/features/{feature_id}:enable\x12\xa0\x01\n\x0e\x44isableFeature\x12/.scalekit.v1.environments.DisableFeatureRequest\x1a\x16.google.protobuf.Empty\"E\x82\xb5\x18\x02\x18`\x82\xd3\xe4\x93\x02\x39\"7/api/v1/environments/{id}/features/{feature_id}:disable\x12\x8a\x01\n\x0bGetFeatures\x12,.scalekit.v1.environments.GetFeaturesRequest\x1a-.scalekit.v1.environments.GetFeaturesResponse\"\x1e\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x12\x12\x10/api/v1/features\x12\xb9\x04\n\x1fGetHostScopedPublicFeatureFlags\x12\x16.google.protobuf.Empty\x1a\x41.scalekit.v1.environments.GetHostScopedPublicFeatureFlagsResponse\"\xba\x03\x92\x41\xf2\x02\n\x0c\x45nvironments\x12%List host-scoped public feature flags\x1a\xc5\x01Resolves the environment from the request host only (no environment path, query, or header). Returns allowlisted OpenFeature values; no bearer token. 404 if the host does not map to an environment.J2\n\x03\x32\x30\x30\x12+\n)Allowlisted flag keys and resolved valuesJ?\n\x03\x34\x30\x34\x12\x38\n6No environment resolved from host or workspace UI host\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)\x12\'/api/v1/environments:publicFeatureFlags\x12\x84\x02\n CreateEnvironmentSessionSettings\x12\x41.scalekit.v1.environments.CreateEnvironmentSessionSettingsRequest\x1a\x42.scalekit.v1.environments.CreateEnvironmentSessionSettingsResponse\"Y\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02>\"*/api/v1/environments/{id}/session-settings:\x10session_settings\x12\x88\x02\n\x1f\x43reateEnvironmentUserManagement\x12@.scalekit.v1.environments.CreateEnvironmentUserManagementRequest\x1a\x41.scalekit.v1.environments.CreateEnvironmentUserManagementResponse\"`\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x45\"2/api/v1/environments/{id}/settings/user-management:\x0fuser_management\x12\xda\x01\n\x1dGetEnvironmentSessionSettings\x12>.scalekit.v1.environments.GetEnvironmentSessionSettingsRequest\x1a?.scalekit.v1.environments.GetEnvironmentSessionSettingsResponse\"8\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02,\x12*/api/v1/environments/{id}/session-settings\x12\xdf\x01\n\x1cGetEnvironmentUserManagement\x12=.scalekit.v1.environments.GetEnvironmentUserManagementRequest\x1a>.scalekit.v1.environments.GetEnvironmentUserManagementResponse\"@\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x34\x12\x32/api/v1/environments/{id}/settings/user-management\x12\x84\x02\n UpdateEnvironmentSessionSettings\x12\x41.scalekit.v1.environments.UpdateEnvironmentSessionSettingsRequest\x1a\x42.scalekit.v1.environments.UpdateEnvironmentSessionSettingsResponse\"Y\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02>2*/api/v1/environments/{id}/session-settings:\x10session_settings\x12\x88\x02\n\x1fUpdateEnvironmentUserManagement\x12@.scalekit.v1.environments.UpdateEnvironmentUserManagementRequest\x1a\x41.scalekit.v1.environments.UpdateEnvironmentUserManagementResponse\"`\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x45\x32\x32/api/v1/environments/{id}/settings/user-management:\x0fuser_management\x12\x86\x04\n\x18\x43reateAgentActionsConfig\x12\x39.scalekit.v1.environments.CreateAgentActionsConfigRequest\x1a:.scalekit.v1.environments.CreateAgentActionsConfigResponse\"\xf2\x02\x92\x41\x8b\x02\n\x0c\x45nvironments\x12\x1b\x43reate agent actions config\x1a:Creates the agent actions configuration for an environmentJ2\n\x03\x32\x30\x30\x12+\n)Agent actions config created successfullyJN\n\x03\x34\x30\x30\x12G\nEInvalid request - missing or invalid fields, or config already existsJ\x1e\n\x03\x34\x30\x34\x12\x17\n\x15\x45nvironment not found\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02H\"0/api/v1/environments/{id}/settings/agent-actions:\x14\x61gent_actions_config\x12\xa3\x03\n\x15GetAgentActionsConfig\x12\x36.scalekit.v1.environments.GetAgentActionsConfigRequest\x1a\x37.scalekit.v1.environments.GetAgentActionsConfigResponse\"\x98\x02\x92\x41\xc7\x01\n\x0c\x45nvironments\x12\x18Get agent actions config\x1a=Retrieves the agent actions configuration for an environment.J4\n\x03\x32\x30\x30\x12-\n+Agent actions config retrieved successfullyJ(\n\x03\x34\x30\x34\x12!\n\x1f\x45nvironment or config not found\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x32\x12\x30/api/v1/environments/{id}/settings/agent-actions\x12\x96\x04\n\x18UpdateAgentActionsConfig\x12\x39.scalekit.v1.environments.UpdateAgentActionsConfigRequest\x1a:.scalekit.v1.environments.UpdateAgentActionsConfigResponse\"\x82\x03\x92\x41\x9b\x02\n\x0c\x45nvironments\x12\x1bUpdate agent actions config\x1a:Updates the agent actions configuration for an environmentJ2\n\x03\x32\x30\x30\x12+\n)Agent actions config updated successfullyJ^\n\x03\x34\x30\x30\x12W\nUInvalid request - missing or invalid fields, or mode not allowed for this environmentJ\x1e\n\x03\x34\x30\x34\x12\x17\n\x15\x45nvironment not found\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02H20/api/v1/environments/{id}/settings/agent-actions:\x14\x61gent_actions_config\x12\xa5\x01\n\nGetContext\x12+.scalekit.v1.environments.GetContextRequest\x1a,.scalekit.v1.environments.GetContextResponse\"<\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x30\x12./api/v1/environments/{environment_id}/contexts\x12\x9e\x01\n\rUpdateContext\x12..scalekit.v1.environments.UpdateContextRequest\x1a\x16.google.protobuf.Empty\"E\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x39\x1a./api/v1/environments/{environment_id}/contexts:\x07\x63ontext\x12\xef\x01\n\x11GetCurrentSession\x12\x32.scalekit.v1.environments.GetCurrentSessionRequest\x1a\x33.scalekit.v1.environments.GetCurrentSessionResponse\"q\x82\xb5\x18\x03\x18\xf0\x01\x82\xd3\xe4\x93\x02\x64\x12%/api/v1/environments/{id}/sessions:meZ$\x12\"/api/v1/environments/-/sessions:meZ\x15\x12\x13/api/v1/sessions:me\x12\xb1\x01\n\x14GetScalekitResources\x12\x31.scalekit.v1.environments.ScalekitResourceRequest\x1a\x32.scalekit.v1.environments.ScalekitResourceResponse\"2\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x17\"\x12/api/v1/fetch:bulk:\x01*\x12\xd0\x03\n\x0fPortalBootstrap\x12\x30.scalekit.v1.environments.PortalBootstrapRequest\x1a\x31.scalekit.v1.environments.PortalBootstrapResponse\"\xd7\x02\x92\x41\xad\x02\n\x06Portal\x12\x1eRetrieve portal bootstrap data\x1a\x97\x01Returns all data needed to initialize the customer portal in a single request, combining session, portal customizations, organization, and connections.J5\n\x03\x32\x30\x30\x12.\n,Successfully retrieved portal bootstrap dataJ2\n\x03\x34\x30\x31\x12+\n)Unauthorized - invalid or expired session\x82\xb5\x18\x02\x18`\x82\xd3\xe4\x93\x02\x1a\x12\x18/api/v1/portal/bootstrapB8Z6github.com/scalekit-inc/scalekit/pkg/grpc/environmentsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -86,6 +89,12 @@ _globals['_GETPORTALCUSTOMIZATIONREQUEST'].fields_by_name['id']._serialized_options = b'\272H\006r\004\020\000\030 ' _globals['_PORTALSETTINGS'].fields_by_name['custom_branding']._loaded_options = None _globals['_PORTALSETTINGS'].fields_by_name['custom_branding']._serialized_options = b'\222Al2dIndicates whether custom portal branding is enabled for this workspace based on billing subscriptionJ\004true' + _globals['_PORTALSETTINGS'].fields_by_name['new_self_serve_sso_scim']._loaded_options = None + _globals['_PORTALSETTINGS'].fields_by_name['new_self_serve_sso_scim']._serialized_options = b'\222A\210\0012\177Indicates whether the new self-serve SSO/SCIM flow should be shown in the customer portal (rollout-driven, not billing-derived)J\005false' + _globals['_PORTALSETTINGS'].fields_by_name['enable_conn_delete']._loaded_options = None + _globals['_PORTALSETTINGS'].fields_by_name['enable_conn_delete']._serialized_options = b'\222Ax2oIndicates whether connection deletion is enabled for this environment (rollout-driven by environment allowlist)J\005false' + _globals['_GETPORTALCUSTOMIZATIONRESPONSE'].fields_by_name['customization_settings']._loaded_options = None + _globals['_GETPORTALCUSTOMIZATIONRESPONSE'].fields_by_name['customization_settings']._serialized_options = b'\340A\001' _globals['_GETPORTALCUSTOMIZATIONRESPONSE'].fields_by_name['settings']._loaded_options = None _globals['_GETPORTALCUSTOMIZATIONRESPONSE'].fields_by_name['settings']._serialized_options = b'\340A\003' _globals['_CREATEASSETUPLOADURLREQUEST'].fields_by_name['id']._loaded_options = None @@ -148,8 +157,30 @@ _globals['_USERMANAGEMENT'].fields_by_name['invitation_expiry']._serialized_options = b'\272H\010*\006\030\300\321\002(\001' _globals['_SCALEKITRESOURCERESPONSE_RESOURCESENTRY']._loaded_options = None _globals['_SCALEKITRESOURCERESPONSE_RESOURCESENTRY']._serialized_options = b'8\001' + _globals['_PORTALCUSTOMIZATIONBOOTSTRAP'].fields_by_name['customization_settings']._loaded_options = None + _globals['_PORTALCUSTOMIZATIONBOOTSTRAP'].fields_by_name['customization_settings']._serialized_options = b'\340A\001' + _globals['_PORTALCUSTOMIZATIONBOOTSTRAP'].fields_by_name['settings']._loaded_options = None + _globals['_PORTALCUSTOMIZATIONBOOTSTRAP'].fields_by_name['settings']._serialized_options = b'\340A\003' + _globals['_AGENTACTIONSCONFIG'].fields_by_name['user_verify_mode']._loaded_options = None + _globals['_AGENTACTIONSCONFIG'].fields_by_name['user_verify_mode']._serialized_options = b'\272H\005\202\001\002\020\001' + _globals['_CREATEAGENTACTIONSCONFIGREQUEST'].fields_by_name['id']._loaded_options = None + _globals['_CREATEAGENTACTIONSCONFIGREQUEST'].fields_by_name['id']._serialized_options = b'\272H\013r\t\020\001\030 :\003env' + _globals['_CREATEAGENTACTIONSCONFIGREQUEST'].fields_by_name['agent_actions_config']._loaded_options = None + _globals['_CREATEAGENTACTIONSCONFIGREQUEST'].fields_by_name['agent_actions_config']._serialized_options = b'\340A\002' + _globals['_CREATEAGENTACTIONSCONFIGRESPONSE'].fields_by_name['agent_actions_config']._loaded_options = None + _globals['_CREATEAGENTACTIONSCONFIGRESPONSE'].fields_by_name['agent_actions_config']._serialized_options = b'\340A\003' + _globals['_GETAGENTACTIONSCONFIGREQUEST'].fields_by_name['id']._loaded_options = None + _globals['_GETAGENTACTIONSCONFIGREQUEST'].fields_by_name['id']._serialized_options = b'\272H\013r\t\020\001\030 :\003env' + _globals['_GETAGENTACTIONSCONFIGRESPONSE'].fields_by_name['agent_actions_config']._loaded_options = None + _globals['_GETAGENTACTIONSCONFIGRESPONSE'].fields_by_name['agent_actions_config']._serialized_options = b'\340A\003' + _globals['_UPDATEAGENTACTIONSCONFIGREQUEST'].fields_by_name['id']._loaded_options = None + _globals['_UPDATEAGENTACTIONSCONFIGREQUEST'].fields_by_name['id']._serialized_options = b'\272H\013r\t\020\001\030 :\003env' + _globals['_UPDATEAGENTACTIONSCONFIGREQUEST'].fields_by_name['agent_actions_config']._loaded_options = None + _globals['_UPDATEAGENTACTIONSCONFIGREQUEST'].fields_by_name['agent_actions_config']._serialized_options = b'\340A\002' + _globals['_UPDATEAGENTACTIONSCONFIGRESPONSE'].fields_by_name['agent_actions_config']._loaded_options = None + _globals['_UPDATEAGENTACTIONSCONFIGRESPONSE'].fields_by_name['agent_actions_config']._serialized_options = b'\340A\003' _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateEnvironment']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateEnvironment']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002#\"\024/api/v1/environments:\013environment' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateEnvironment']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002#\"\024/api/v1/environments:\013environment' _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironment']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironment']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002(2\031/api/v1/environments/{id}:\013environment' _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironmentDomain']._loaded_options = None @@ -165,183 +196,217 @@ _globals['_ENVIRONMENTSERVICE'].methods_by_name['VerifyDNSRecords']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['VerifyDNSRecords']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002)\"$/api/v1/environments/{id}/dns:verify:\001*' _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateCustomDomain']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateCustomDomain']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002-\"(/api/v1/environments/{id}/custom-domains:\001*' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateCustomDomain']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002-\"(/api/v1/environments/{id}/custom-domains:\001*' _globals['_ENVIRONMENTSERVICE'].methods_by_name['CheckCustomDomainStatus']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['CheckCustomDomainStatus']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\0023\"./api/v1/environments/{id}/custom-domains:check:\001*' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['CheckCustomDomainStatus']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\0023\"./api/v1/environments/{id}/custom-domains:check:\001*' _globals['_ENVIRONMENTSERVICE'].methods_by_name['GenerateNewSamlCertificate']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['GenerateNewSamlCertificate']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\0029\"4/api/v1/environments/{id}/saml-certificates:generate:\001*' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['GenerateNewSamlCertificate']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\0029\"4/api/v1/environments/{id}/saml-certificates:generate:\001*' _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdatePortalCustomization']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdatePortalCustomization']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\215\001\032//api/v1/environments/{id}/portal_customizations:\026customization_settingsZB\032(/api/v1/environments/{id}/customizations:\026customization_settings' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdatePortalCustomization']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\215\001\032//api/v1/environments/{id}/portal_customizations:\026customization_settingsZB\032(/api/v1/environments/{id}/customizations:\026customization_settings' _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetPortalCustomization']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetPortalCustomization']._serialized_options = b'\202\265\030\002\030`\202\323\344\223\002O\022\035/api/v1/portal_customizationsZ.\022,/api/v1/environments/-/portal_customizations' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetPortalCustomization']._serialized_options = b'\202\265\030\003\030\340\001\202\323\344\223\002O\022\035/api/v1/portal_customizationsZ.\022,/api/v1/environments/-/portal_customizations' _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateAssetUploadURL']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateAssetUploadURL']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\0021\"\037/api/v1/environments/{id}/asset:\016asset_settings' _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateFeatures']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateFeatures']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002.\032\"/api/v1/environments/{id}/features:\010features' _globals['_ENVIRONMENTSERVICE'].methods_by_name['EnableFSAFeature']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['EnableFSAFeature']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002Q\"-/api/v1/environments/{id}/features/fsa/enable:\001*Z\035\"\033/api/v1/features/fsa/enable' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['EnableFSAFeature']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002Q\"-/api/v1/environments/{id}/features/fsa/enable:\001*Z\035\"\033/api/v1/features/fsa/enable' _globals['_ENVIRONMENTSERVICE'].methods_by_name['DisableFSAFeature']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['DisableFSAFeature']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002!\"\034/api/v1/features/fsa/disable:\001*' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['DisableFSAFeature']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002!\"\034/api/v1/features/fsa/disable:\001*' _globals['_ENVIRONMENTSERVICE'].methods_by_name['EnableFeature']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['EnableFeature']._serialized_options = b'\202\265\030\002\030`\202\323\344\223\0028\"6/api/v1/environments/{id}/features/{feature_id}:enable' _globals['_ENVIRONMENTSERVICE'].methods_by_name['DisableFeature']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['DisableFeature']._serialized_options = b'\202\265\030\002\030`\202\323\344\223\0029\"7/api/v1/environments/{id}/features/{feature_id}:disable' _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetFeatures']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetFeatures']._serialized_options = b'\202\265\030\002\030T\202\323\344\223\002\022\022\020/api/v1/features' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetHostScopedPublicFeatureFlags']._loaded_options = None + _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetHostScopedPublicFeatureFlags']._serialized_options = b'\222A\362\002\n\014Environments\022%List host-scoped public feature flags\032\305\001Resolves the environment from the request host only (no environment path, query, or header). Returns allowlisted OpenFeature values; no bearer token. 404 if the host does not map to an environment.J2\n\003200\022+\n)Allowlisted flag keys and resolved valuesJ?\n\003404\0228\n6No environment resolved from host or workspace UI host\202\265\030\002\030\001\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002)\022\'/api/v1/environments:publicFeatureFlags' _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateEnvironmentSessionSettings']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateEnvironmentSessionSettings']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002>\"*/api/v1/environments/{id}/session-settings:\020session_settings' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateEnvironmentSessionSettings']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002>\"*/api/v1/environments/{id}/session-settings:\020session_settings' _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateEnvironmentUserManagement']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateEnvironmentUserManagement']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002E\"2/api/v1/environments/{id}/settings/user-management:\017user_management' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateEnvironmentUserManagement']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002E\"2/api/v1/environments/{id}/settings/user-management:\017user_management' _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetEnvironmentSessionSettings']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetEnvironmentSessionSettings']._serialized_options = b'\202\265\030\002\030T\202\323\344\223\002,\022*/api/v1/environments/{id}/session-settings' _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetEnvironmentUserManagement']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetEnvironmentUserManagement']._serialized_options = b'\202\265\030\002\030T\202\323\344\223\0024\0222/api/v1/environments/{id}/settings/user-management' _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironmentSessionSettings']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironmentSessionSettings']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002>2*/api/v1/environments/{id}/session-settings:\020session_settings' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironmentSessionSettings']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002>2*/api/v1/environments/{id}/session-settings:\020session_settings' _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironmentUserManagement']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironmentUserManagement']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002E22/api/v1/environments/{id}/settings/user-management:\017user_management' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironmentUserManagement']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002E22/api/v1/environments/{id}/settings/user-management:\017user_management' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateAgentActionsConfig']._loaded_options = None + _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateAgentActionsConfig']._serialized_options = b'\222A\213\002\n\014Environments\022\033Create agent actions config\032:Creates the agent actions configuration for an environmentJ2\n\003200\022+\n)Agent actions config created successfullyJN\n\003400\022G\nEInvalid request - missing or invalid fields, or config already existsJ\036\n\003404\022\027\n\025Environment not found\202\265\030\002\030@\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002H\"0/api/v1/environments/{id}/settings/agent-actions:\024agent_actions_config' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetAgentActionsConfig']._loaded_options = None + _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetAgentActionsConfig']._serialized_options = b'\222A\307\001\n\014Environments\022\030Get agent actions config\032=Retrieves the agent actions configuration for an environment.J4\n\003200\022-\n+Agent actions config retrieved successfullyJ(\n\003404\022!\n\037Environment or config not found\202\265\030\002\030@\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\0022\0220/api/v1/environments/{id}/settings/agent-actions' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateAgentActionsConfig']._loaded_options = None + _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateAgentActionsConfig']._serialized_options = b'\222A\233\002\n\014Environments\022\033Update agent actions config\032:Updates the agent actions configuration for an environmentJ2\n\003200\022+\n)Agent actions config updated successfullyJ^\n\003400\022W\nUInvalid request - missing or invalid fields, or mode not allowed for this environmentJ\036\n\003404\022\027\n\025Environment not found\202\265\030\002\030@\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002H20/api/v1/environments/{id}/settings/agent-actions:\024agent_actions_config' _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetContext']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetContext']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\0020\022./api/v1/environments/{environment_id}/contexts' _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateContext']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateContext']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\0029\032./api/v1/environments/{environment_id}/contexts:\007context' _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetCurrentSession']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetCurrentSession']._serialized_options = b'\202\265\030\002\030p\202\323\344\223\002d\022%/api/v1/environments/{id}/sessions:meZ$\022\"/api/v1/environments/-/sessions:meZ\025\022\023/api/v1/sessions:me' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetCurrentSession']._serialized_options = b'\202\265\030\003\030\360\001\202\323\344\223\002d\022%/api/v1/environments/{id}/sessions:meZ$\022\"/api/v1/environments/-/sessions:meZ\025\022\023/api/v1/sessions:me' _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetScalekitResources']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetScalekitResources']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\027\"\022/api/v1/fetch:bulk:\001*' - _globals['_CUSTOMDOMAINSTATUS']._serialized_start=10237 - _globals['_CUSTOMDOMAINSTATUS']._serialized_end=10324 - _globals['_ASSETCATEGORY']._serialized_start=10326 - _globals['_ASSETCATEGORY']._serialized_end=10405 - _globals['_TIMEUNIT']._serialized_start=10407 - _globals['_TIMEUNIT']._serialized_end=10486 - _globals['_ORGUSERRELATIONSHIPTYPE']._serialized_start=10488 - _globals['_ORGUSERRELATIONSHIPTYPE']._serialized_end=10607 - _globals['_COOKIEPERSISTENCETYPE']._serialized_start=10609 - _globals['_COOKIEPERSISTENCETYPE']._serialized_end=10700 - _globals['_COOKIESAMESITESETTING']._serialized_start=10702 - _globals['_COOKIESAMESITESETTING']._serialized_end=10793 - _globals['_CREATECUSTOMDOMAINREQUEST']._serialized_start=466 - _globals['_CREATECUSTOMDOMAINREQUEST']._serialized_end=577 - _globals['_CREATECUSTOMDOMAINRESPONSE']._serialized_start=579 - _globals['_CREATECUSTOMDOMAINRESPONSE']._serialized_end=680 - _globals['_GETDNSRECORDSREQUEST']._serialized_start=682 - _globals['_GETDNSRECORDSREQUEST']._serialized_end=788 - _globals['_GETDNSRECORDSRESPONSE']._serialized_start=790 - _globals['_GETDNSRECORDSRESPONSE']._serialized_end=884 - _globals['_DNSRECORDS']._serialized_start=886 - _globals['_DNSRECORDS']._serialized_end=1005 - _globals['_ENVIRONMENT']._serialized_start=1008 - _globals['_ENVIRONMENT']._serialized_end=1538 - _globals['_CREATEENVIRONMENT']._serialized_start=1541 - _globals['_CREATEENVIRONMENT']._serialized_end=1974 - _globals['_UPDATEENVIRONMENT']._serialized_start=1976 - _globals['_UPDATEENVIRONMENT']._serialized_end=2082 - _globals['_UPDATEENVIRONMENTDOMAIN']._serialized_start=2084 - _globals['_UPDATEENVIRONMENTDOMAIN']._serialized_end=2167 - _globals['_CREATEENVIRONMENTREQUEST']._serialized_start=2169 - _globals['_CREATEENVIRONMENTREQUEST']._serialized_end=2282 - _globals['_CREATEENVIRONMENTRESPONSE']._serialized_start=2284 - _globals['_CREATEENVIRONMENTRESPONSE']._serialized_end=2384 - _globals['_UPDATEENVIRONMENTREQUEST']._serialized_start=2387 - _globals['_UPDATEENVIRONMENTREQUEST']._serialized_end=2532 - _globals['_UPDATEENVIRONMENTDOMAINREQUEST']._serialized_start=2535 - _globals['_UPDATEENVIRONMENTDOMAINREQUEST']._serialized_end=2692 - _globals['_UPDATEENVIRONMENTRESPONSE']._serialized_start=2694 - _globals['_UPDATEENVIRONMENTRESPONSE']._serialized_end=2794 - _globals['_GETENVIRONMENTREQUEST']._serialized_start=2796 - _globals['_GETENVIRONMENTREQUEST']._serialized_end=2851 - _globals['_GETENVIRONMENTRESPONSE']._serialized_start=2853 - _globals['_GETENVIRONMENTRESPONSE']._serialized_end=2950 - _globals['_LISTENVIRONMENTSREQUEST']._serialized_start=2952 - _globals['_LISTENVIRONMENTSREQUEST']._serialized_end=3037 - _globals['_LISTENVIRONMENTSRESPONSE']._serialized_start=3040 - _globals['_LISTENVIRONMENTSRESPONSE']._serialized_end=3212 - _globals['_DELETEENVIRONMENTREQUEST']._serialized_start=3214 - _globals['_DELETEENVIRONMENTREQUEST']._serialized_end=3272 - _globals['_GENERATESAMLCERTIFICATEREQUEST']._serialized_start=3274 - _globals['_GENERATESAMLCERTIFICATEREQUEST']._serialized_end=3338 - _globals['_GENERATESAMLCERTIFICATERESPONSE']._serialized_start=3340 - _globals['_GENERATESAMLCERTIFICATERESPONSE']._serialized_end=3447 - _globals['_UPDATEPORTALCUSTOMIZATIONRESPONSE']._serialized_start=3450 - _globals['_UPDATEPORTALCUSTOMIZATIONRESPONSE']._serialized_end=3603 - _globals['_UPDATEPORTALCUSTOMIZATIONREQUEST']._serialized_start=3606 - _globals['_UPDATEPORTALCUSTOMIZATIONREQUEST']._serialized_end=3760 - _globals['_GETPORTALCUSTOMIZATIONREQUEST']._serialized_start=3762 - _globals['_GETPORTALCUSTOMIZATIONREQUEST']._serialized_end=3820 - _globals['_PORTALSETTINGS']._serialized_start=3823 - _globals['_PORTALSETTINGS']._serialized_end=3994 - _globals['_GETPORTALCUSTOMIZATIONRESPONSE']._serialized_start=3997 - _globals['_GETPORTALCUSTOMIZATIONRESPONSE']._serialized_end=4222 - _globals['_CREATEASSETUPLOADURLRESPONSE']._serialized_start=4224 - _globals['_CREATEASSETUPLOADURLRESPONSE']._serialized_end=4314 - _globals['_CREATEASSETUPLOADURLREQUEST']._serialized_start=4317 - _globals['_CREATEASSETUPLOADURLREQUEST']._serialized_end=4458 - _globals['_ASSETSETTINGS']._serialized_start=4461 - _globals['_ASSETSETTINGS']._serialized_end=4606 - _globals['_UPDATEFEATURESREQUEST']._serialized_start=4609 - _globals['_UPDATEFEATURESREQUEST']._serialized_end=4746 - _globals['_ENABLEFSAFEATUREREQUEST']._serialized_start=4748 - _globals['_ENABLEFSAFEATUREREQUEST']._serialized_end=4798 - _globals['_DISABLEFSAFEATUREREQUEST']._serialized_start=4800 - _globals['_DISABLEFSAFEATUREREQUEST']._serialized_end=4858 - _globals['_GETFEATURESREQUEST']._serialized_start=4860 - _globals['_GETFEATURESREQUEST']._serialized_end=4915 - _globals['_GETFEATURESRESPONSE']._serialized_start=4917 - _globals['_GETFEATURESRESPONSE']._serialized_end=5012 - _globals['_ENABLEFEATUREREQUEST']._serialized_start=5014 - _globals['_ENABLEFEATUREREQUEST']._serialized_end=5110 - _globals['_DISABLEFEATUREREQUEST']._serialized_start=5112 - _globals['_DISABLEFEATUREREQUEST']._serialized_end=5209 - _globals['_ENVIRONMENTFEATURE']._serialized_start=5211 - _globals['_ENVIRONMENTFEATURE']._serialized_end=5277 - _globals['_GETENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_start=5279 - _globals['_GETENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_end=5349 - _globals['_GETENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_start=5351 - _globals['_GETENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_end=5420 - _globals['_GETENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_start=5422 - _globals['_GETENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_end=5547 - _globals['_GETENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_start=5549 - _globals['_GETENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_end=5670 - _globals['_CREATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_start=5673 - _globals['_CREATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_end=5840 - _globals['_CREATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_start=5843 - _globals['_CREATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_end=6006 - _globals['_CREATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_start=6009 - _globals['_CREATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_end=6176 - _globals['_CREATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_start=6179 - _globals['_CREATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_end=6342 - _globals['_UPDATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_start=6345 - _globals['_UPDATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_end=6512 - _globals['_UPDATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_start=6515 - _globals['_UPDATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_end=6678 - _globals['_UPDATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_start=6681 - _globals['_UPDATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_end=6848 - _globals['_UPDATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_start=6851 - _globals['_UPDATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_end=7014 - _globals['_SESSIONSETTINGS']._serialized_start=7017 - _globals['_SESSIONSETTINGS']._serialized_end=8168 - _globals['_USERMANAGEMENT']._serialized_start=8171 - _globals['_USERMANAGEMENT']._serialized_end=9104 - _globals['_GETCONTEXTREQUEST']._serialized_start=9106 - _globals['_GETCONTEXTREQUEST']._serialized_end=9164 - _globals['_GETCONTEXTRESPONSE']._serialized_start=9166 - _globals['_GETCONTEXTRESPONSE']._serialized_end=9237 - _globals['_UPDATECONTEXTREQUEST']._serialized_start=9239 - _globals['_UPDATECONTEXTREQUEST']._serialized_end=9351 - _globals['_GETCURRENTSESSIONREQUEST']._serialized_start=9353 - _globals['_GETCURRENTSESSIONREQUEST']._serialized_end=9395 - _globals['_GETCURRENTSESSIONRESPONSE']._serialized_start=9398 - _globals['_GETCURRENTSESSIONRESPONSE']._serialized_end=9721 - _globals['_RESOURCEMETADATA']._serialized_start=9724 - _globals['_RESOURCEMETADATA']._serialized_end=9921 - _globals['_RESOURCEMETADATA_RESOURCETYPE']._serialized_start=9855 - _globals['_RESOURCEMETADATA_RESOURCETYPE']._serialized_end=9921 - _globals['_SCALEKITRESOURCEREQUEST']._serialized_start=9923 - _globals['_SCALEKITRESOURCEREQUEST']._serialized_end=10022 - _globals['_SCALEKITRESOURCERESPONSE']._serialized_start=10025 - _globals['_SCALEKITRESOURCERESPONSE']._serialized_end=10235 - _globals['_SCALEKITRESOURCERESPONSE_RESOURCESENTRY']._serialized_start=10150 - _globals['_SCALEKITRESOURCERESPONSE_RESOURCESENTRY']._serialized_end=10235 - _globals['_ENVIRONMENTSERVICE']._serialized_start=10796 - _globals['_ENVIRONMENTSERVICE']._serialized_end=16617 + _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetScalekitResources']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\027\"\022/api/v1/fetch:bulk:\001*' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['PortalBootstrap']._loaded_options = None + _globals['_ENVIRONMENTSERVICE'].methods_by_name['PortalBootstrap']._serialized_options = b'\222A\255\002\n\006Portal\022\036Retrieve portal bootstrap data\032\227\001Returns all data needed to initialize the customer portal in a single request, combining session, portal customizations, organization, and connections.J5\n\003200\022.\n,Successfully retrieved portal bootstrap dataJ2\n\003401\022+\n)Unauthorized - invalid or expired session\202\265\030\002\030`\202\323\344\223\002\032\022\030/api/v1/portal/bootstrap' + _globals['_CUSTOMDOMAINSTATUS']._serialized_start=12605 + _globals['_CUSTOMDOMAINSTATUS']._serialized_end=12692 + _globals['_ASSETCATEGORY']._serialized_start=12694 + _globals['_ASSETCATEGORY']._serialized_end=12773 + _globals['_ORGUSERRELATIONSHIPTYPE']._serialized_start=12775 + _globals['_ORGUSERRELATIONSHIPTYPE']._serialized_end=12894 + _globals['_COOKIEPERSISTENCETYPE']._serialized_start=12896 + _globals['_COOKIEPERSISTENCETYPE']._serialized_end=12987 + _globals['_COOKIESAMESITESETTING']._serialized_start=12989 + _globals['_COOKIESAMESITESETTING']._serialized_end=13080 + _globals['_CONNECTEDACCOUNTUSERVERIFYMODE']._serialized_start=13083 + _globals['_CONNECTEDACCOUNTUSERVERIFYMODE']._serialized_end=13260 + _globals['_CREATECUSTOMDOMAINREQUEST']._serialized_start=585 + _globals['_CREATECUSTOMDOMAINREQUEST']._serialized_end=696 + _globals['_CREATECUSTOMDOMAINRESPONSE']._serialized_start=698 + _globals['_CREATECUSTOMDOMAINRESPONSE']._serialized_end=799 + _globals['_GETDNSRECORDSREQUEST']._serialized_start=801 + _globals['_GETDNSRECORDSREQUEST']._serialized_end=907 + _globals['_GETDNSRECORDSRESPONSE']._serialized_start=909 + _globals['_GETDNSRECORDSRESPONSE']._serialized_end=1003 + _globals['_DNSRECORDS']._serialized_start=1005 + _globals['_DNSRECORDS']._serialized_end=1124 + _globals['_ENVIRONMENT']._serialized_start=1127 + _globals['_ENVIRONMENT']._serialized_end=1657 + _globals['_CREATEENVIRONMENT']._serialized_start=1660 + _globals['_CREATEENVIRONMENT']._serialized_end=2093 + _globals['_UPDATEENVIRONMENT']._serialized_start=2095 + _globals['_UPDATEENVIRONMENT']._serialized_end=2201 + _globals['_UPDATEENVIRONMENTDOMAIN']._serialized_start=2203 + _globals['_UPDATEENVIRONMENTDOMAIN']._serialized_end=2286 + _globals['_CREATEENVIRONMENTREQUEST']._serialized_start=2288 + _globals['_CREATEENVIRONMENTREQUEST']._serialized_end=2401 + _globals['_CREATEENVIRONMENTRESPONSE']._serialized_start=2403 + _globals['_CREATEENVIRONMENTRESPONSE']._serialized_end=2503 + _globals['_UPDATEENVIRONMENTREQUEST']._serialized_start=2506 + _globals['_UPDATEENVIRONMENTREQUEST']._serialized_end=2651 + _globals['_UPDATEENVIRONMENTDOMAINREQUEST']._serialized_start=2654 + _globals['_UPDATEENVIRONMENTDOMAINREQUEST']._serialized_end=2811 + _globals['_UPDATEENVIRONMENTRESPONSE']._serialized_start=2813 + _globals['_UPDATEENVIRONMENTRESPONSE']._serialized_end=2913 + _globals['_GETENVIRONMENTREQUEST']._serialized_start=2915 + _globals['_GETENVIRONMENTREQUEST']._serialized_end=2970 + _globals['_GETENVIRONMENTRESPONSE']._serialized_start=2972 + _globals['_GETENVIRONMENTRESPONSE']._serialized_end=3069 + _globals['_LISTENVIRONMENTSREQUEST']._serialized_start=3071 + _globals['_LISTENVIRONMENTSREQUEST']._serialized_end=3156 + _globals['_LISTENVIRONMENTSRESPONSE']._serialized_start=3159 + _globals['_LISTENVIRONMENTSRESPONSE']._serialized_end=3331 + _globals['_DELETEENVIRONMENTREQUEST']._serialized_start=3333 + _globals['_DELETEENVIRONMENTREQUEST']._serialized_end=3391 + _globals['_GENERATESAMLCERTIFICATEREQUEST']._serialized_start=3393 + _globals['_GENERATESAMLCERTIFICATEREQUEST']._serialized_end=3457 + _globals['_GENERATESAMLCERTIFICATERESPONSE']._serialized_start=3459 + _globals['_GENERATESAMLCERTIFICATERESPONSE']._serialized_end=3566 + _globals['_UPDATEPORTALCUSTOMIZATIONRESPONSE']._serialized_start=3569 + _globals['_UPDATEPORTALCUSTOMIZATIONRESPONSE']._serialized_end=3722 + _globals['_UPDATEPORTALCUSTOMIZATIONREQUEST']._serialized_start=3725 + _globals['_UPDATEPORTALCUSTOMIZATIONREQUEST']._serialized_end=3879 + _globals['_GETPORTALCUSTOMIZATIONREQUEST']._serialized_start=3881 + _globals['_GETPORTALCUSTOMIZATIONREQUEST']._serialized_end=3939 + _globals['_PORTALSETTINGS']._serialized_start=3942 + _globals['_PORTALSETTINGS']._serialized_end=4483 + _globals['_GETPORTALCUSTOMIZATIONRESPONSE']._serialized_start=4486 + _globals['_GETPORTALCUSTOMIZATIONRESPONSE']._serialized_end=4716 + _globals['_CREATEASSETUPLOADURLRESPONSE']._serialized_start=4718 + _globals['_CREATEASSETUPLOADURLRESPONSE']._serialized_end=4808 + _globals['_CREATEASSETUPLOADURLREQUEST']._serialized_start=4811 + _globals['_CREATEASSETUPLOADURLREQUEST']._serialized_end=4952 + _globals['_ASSETSETTINGS']._serialized_start=4955 + _globals['_ASSETSETTINGS']._serialized_end=5100 + _globals['_UPDATEFEATURESREQUEST']._serialized_start=5103 + _globals['_UPDATEFEATURESREQUEST']._serialized_end=5240 + _globals['_ENABLEFSAFEATUREREQUEST']._serialized_start=5242 + _globals['_ENABLEFSAFEATUREREQUEST']._serialized_end=5292 + _globals['_DISABLEFSAFEATUREREQUEST']._serialized_start=5294 + _globals['_DISABLEFSAFEATUREREQUEST']._serialized_end=5352 + _globals['_GETFEATURESREQUEST']._serialized_start=5354 + _globals['_GETFEATURESREQUEST']._serialized_end=5409 + _globals['_GETFEATURESRESPONSE']._serialized_start=5411 + _globals['_GETFEATURESRESPONSE']._serialized_end=5506 + _globals['_ENABLEFEATUREREQUEST']._serialized_start=5508 + _globals['_ENABLEFEATUREREQUEST']._serialized_end=5604 + _globals['_DISABLEFEATUREREQUEST']._serialized_start=5606 + _globals['_DISABLEFEATUREREQUEST']._serialized_end=5703 + _globals['_ENVIRONMENTFEATURE']._serialized_start=5705 + _globals['_ENVIRONMENTFEATURE']._serialized_end=5771 + _globals['_GETHOSTSCOPEDPUBLICFEATUREFLAGSRESPONSE']._serialized_start=5773 + _globals['_GETHOSTSCOPEDPUBLICFEATUREFLAGSRESPONSE']._serialized_end=5885 + _globals['_PUBLICHOSTFEATUREFLAG']._serialized_start=5888 + _globals['_PUBLICHOSTFEATUREFLAG']._serialized_end=6047 + _globals['_GETENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_start=6049 + _globals['_GETENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_end=6119 + _globals['_GETENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_start=6121 + _globals['_GETENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_end=6190 + _globals['_GETENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_start=6192 + _globals['_GETENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_end=6317 + _globals['_GETENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_start=6319 + _globals['_GETENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_end=6440 + _globals['_CREATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_start=6443 + _globals['_CREATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_end=6610 + _globals['_CREATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_start=6613 + _globals['_CREATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_end=6776 + _globals['_CREATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_start=6779 + _globals['_CREATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_end=6946 + _globals['_CREATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_start=6949 + _globals['_CREATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_end=7112 + _globals['_UPDATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_start=7115 + _globals['_UPDATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_end=7282 + _globals['_UPDATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_start=7285 + _globals['_UPDATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_end=7448 + _globals['_UPDATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_start=7451 + _globals['_UPDATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_end=7618 + _globals['_UPDATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_start=7621 + _globals['_UPDATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_end=7784 + _globals['_SESSIONSETTINGS']._serialized_start=7787 + _globals['_SESSIONSETTINGS']._serialized_end=8923 + _globals['_USERMANAGEMENT']._serialized_start=8926 + _globals['_USERMANAGEMENT']._serialized_end=9859 + _globals['_GETCONTEXTREQUEST']._serialized_start=9861 + _globals['_GETCONTEXTREQUEST']._serialized_end=9919 + _globals['_GETCONTEXTRESPONSE']._serialized_start=9921 + _globals['_GETCONTEXTRESPONSE']._serialized_end=9992 + _globals['_UPDATECONTEXTREQUEST']._serialized_start=9994 + _globals['_UPDATECONTEXTREQUEST']._serialized_end=10106 + _globals['_GETCURRENTSESSIONREQUEST']._serialized_start=10108 + _globals['_GETCURRENTSESSIONREQUEST']._serialized_end=10150 + _globals['_GETCURRENTSESSIONRESPONSE']._serialized_start=10153 + _globals['_GETCURRENTSESSIONRESPONSE']._serialized_end=10556 + _globals['_RESOURCEMETADATA']._serialized_start=10559 + _globals['_RESOURCEMETADATA']._serialized_end=10756 + _globals['_RESOURCEMETADATA_RESOURCETYPE']._serialized_start=10690 + _globals['_RESOURCEMETADATA_RESOURCETYPE']._serialized_end=10756 + _globals['_SCALEKITRESOURCEREQUEST']._serialized_start=10758 + _globals['_SCALEKITRESOURCEREQUEST']._serialized_end=10857 + _globals['_SCALEKITRESOURCERESPONSE']._serialized_start=10860 + _globals['_SCALEKITRESOURCERESPONSE']._serialized_end=11070 + _globals['_SCALEKITRESOURCERESPONSE_RESOURCESENTRY']._serialized_start=10985 + _globals['_SCALEKITRESOURCERESPONSE_RESOURCESENTRY']._serialized_end=11070 + _globals['_PORTALBOOTSTRAPREQUEST']._serialized_start=11072 + _globals['_PORTALBOOTSTRAPREQUEST']._serialized_end=11096 + _globals['_PORTALCUSTOMIZATIONBOOTSTRAP']._serialized_start=11099 + _globals['_PORTALCUSTOMIZATIONBOOTSTRAP']._serialized_end=11289 + _globals['_PORTALBOOTSTRAPRESPONSE']._serialized_start=11292 + _globals['_PORTALBOOTSTRAPRESPONSE']._serialized_end=11657 + _globals['_AGENTACTIONSCONFIG']._serialized_start=11660 + _globals['_AGENTACTIONSCONFIG']._serialized_end=11790 + _globals['_CREATEAGENTACTIONSCONFIGREQUEST']._serialized_start=11793 + _globals['_CREATEAGENTACTIONSCONFIGREQUEST']._serialized_end=11959 + _globals['_CREATEAGENTACTIONSCONFIGRESPONSE']._serialized_start=11962 + _globals['_CREATEAGENTACTIONSCONFIGRESPONSE']._serialized_end=12097 + _globals['_GETAGENTACTIONSCONFIGREQUEST']._serialized_start=12099 + _globals['_GETAGENTACTIONSCONFIGREQUEST']._serialized_end=12161 + _globals['_GETAGENTACTIONSCONFIGRESPONSE']._serialized_start=12164 + _globals['_GETAGENTACTIONSCONFIGRESPONSE']._serialized_end=12296 + _globals['_UPDATEAGENTACTIONSCONFIGREQUEST']._serialized_start=12299 + _globals['_UPDATEAGENTACTIONSCONFIGREQUEST']._serialized_end=12465 + _globals['_UPDATEAGENTACTIONSCONFIGRESPONSE']._serialized_start=12468 + _globals['_UPDATEAGENTACTIONSCONFIGRESPONSE']._serialized_end=12603 + _globals['_ENVIRONMENTSERVICE']._serialized_start=13263 + _globals['_ENVIRONMENTSERVICE']._serialized_end=21786 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/environments/environments_pb2.pyi b/scalekit/v1/environments/environments_pb2.pyi index ca77562..e28fe08 100644 --- a/scalekit/v1/environments/environments_pb2.pyi +++ b/scalekit/v1/environments/environments_pb2.pyi @@ -1,6 +1,7 @@ from buf.validate import validate_pb2 as _validate_pb2 from google.api import annotations_pb2 as _annotations_pb2 from google.api import field_behavior_pb2 as _field_behavior_pb2 +from google.api import visibility_pb2 as _visibility_pb2 from google.protobuf import any_pb2 as _any_pb2 from google.protobuf import duration_pb2 as _duration_pb2 from google.protobuf import empty_pb2 as _empty_pb2 @@ -9,7 +10,9 @@ from google.protobuf import timestamp_pb2 as _timestamp_pb2 from google.protobuf import wrappers_pb2 as _wrappers_pb2 from protoc_gen_openapiv2.options import annotations_pb2 as _annotations_pb2_1 from scalekit.v1.commons import commons_pb2 as _commons_pb2 +from scalekit.v1.connections import connections_pb2 as _connections_pb2 from scalekit.v1.options import options_pb2 as _options_pb2 +from scalekit.v1.organizations import organizations_pb2 as _organizations_pb2 from google.protobuf.internal import containers as _containers from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper from google.protobuf import descriptor as _descriptor @@ -31,13 +34,6 @@ class AssetCategory(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): ASSET_CATEGORY_UNSPECIFIED: _ClassVar[AssetCategory] PORTAL_CUSTOMIZATION_IMAGE: _ClassVar[AssetCategory] -class TimeUnit(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - SESSION_TIME_UNIT_UNSPECIFIED: _ClassVar[TimeUnit] - MINUTES: _ClassVar[TimeUnit] - HOURS: _ClassVar[TimeUnit] - DAYS: _ClassVar[TimeUnit] - class OrgUserRelationshipType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): __slots__ = () OrgUserRelationshipType_UNSPECIFIED: _ClassVar[OrgUserRelationshipType] @@ -55,6 +51,13 @@ class CookieSameSiteSetting(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): CookieSameSiteSetting_UNSPECIFIED: _ClassVar[CookieSameSiteSetting] LAX_MODE: _ClassVar[CookieSameSiteSetting] NONE_MODE: _ClassVar[CookieSameSiteSetting] + +class ConnectedAccountUserVerifyMode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + CONNECTED_ACCOUNT_USER_VERIFY_MODE_UNSPECIFIED: _ClassVar[ConnectedAccountUserVerifyMode] + USER_VERIFY_MODE_NONE: _ClassVar[ConnectedAccountUserVerifyMode] + USER_VERIFY_MODE_B2B: _ClassVar[ConnectedAccountUserVerifyMode] + USER_VERIFY_MODE_SCALEKIT_PLATFORM: _ClassVar[ConnectedAccountUserVerifyMode] UNSPECIFIED: CustomDomainStatus PENDING: CustomDomainStatus ACTIVE: CustomDomainStatus @@ -62,10 +65,6 @@ FAILED: CustomDomainStatus INITIAL: CustomDomainStatus ASSET_CATEGORY_UNSPECIFIED: AssetCategory PORTAL_CUSTOMIZATION_IMAGE: AssetCategory -SESSION_TIME_UNIT_UNSPECIFIED: TimeUnit -MINUTES: TimeUnit -HOURS: TimeUnit -DAYS: TimeUnit OrgUserRelationshipType_UNSPECIFIED: OrgUserRelationshipType SINGLE_ORGANIZATION: OrgUserRelationshipType MULTIPLE_ORGANIZATIONS: OrgUserRelationshipType @@ -75,6 +74,10 @@ SESSION: CookiePersistenceType CookieSameSiteSetting_UNSPECIFIED: CookieSameSiteSetting LAX_MODE: CookieSameSiteSetting NONE_MODE: CookieSameSiteSetting +CONNECTED_ACCOUNT_USER_VERIFY_MODE_UNSPECIFIED: ConnectedAccountUserVerifyMode +USER_VERIFY_MODE_NONE: ConnectedAccountUserVerifyMode +USER_VERIFY_MODE_B2B: ConnectedAccountUserVerifyMode +USER_VERIFY_MODE_SCALEKIT_PLATFORM: ConnectedAccountUserVerifyMode class CreateCustomDomainRequest(_message.Message): __slots__ = ("id", "custom_domain") @@ -269,10 +272,14 @@ class GetPortalCustomizationRequest(_message.Message): def __init__(self, id: _Optional[str] = ...) -> None: ... class PortalSettings(_message.Message): - __slots__ = ("custom_branding",) + __slots__ = ("custom_branding", "new_self_serve_sso_scim", "enable_conn_delete") CUSTOM_BRANDING_FIELD_NUMBER: _ClassVar[int] + NEW_SELF_SERVE_SSO_SCIM_FIELD_NUMBER: _ClassVar[int] + ENABLE_CONN_DELETE_FIELD_NUMBER: _ClassVar[int] custom_branding: bool - def __init__(self, custom_branding: bool = ...) -> None: ... + new_self_serve_sso_scim: bool + enable_conn_delete: bool + def __init__(self, custom_branding: bool = ..., new_self_serve_sso_scim: bool = ..., enable_conn_delete: bool = ...) -> None: ... class GetPortalCustomizationResponse(_message.Message): __slots__ = ("environmentId", "customization_settings", "settings") @@ -364,6 +371,26 @@ class EnvironmentFeature(_message.Message): enabled: bool def __init__(self, name: _Optional[str] = ..., enabled: bool = ...) -> None: ... +class GetHostScopedPublicFeatureFlagsResponse(_message.Message): + __slots__ = ("flags",) + FLAGS_FIELD_NUMBER: _ClassVar[int] + flags: _containers.RepeatedCompositeFieldContainer[PublicHostFeatureFlag] + def __init__(self, flags: _Optional[_Iterable[_Union[PublicHostFeatureFlag, _Mapping]]] = ...) -> None: ... + +class PublicHostFeatureFlag(_message.Message): + __slots__ = ("key", "value", "variant", "reason", "error") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + VARIANT_FIELD_NUMBER: _ClassVar[int] + REASON_FIELD_NUMBER: _ClassVar[int] + ERROR_FIELD_NUMBER: _ClassVar[int] + key: str + value: _struct_pb2.Value + variant: str + reason: str + error: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., variant: _Optional[str] = ..., reason: _Optional[str] = ..., error: _Optional[str] = ...) -> None: ... + class GetEnvironmentSessionSettingsRequest(_message.Message): __slots__ = ("id",) ID_FIELD_NUMBER: _ClassVar[int] @@ -475,10 +502,10 @@ class SessionSettings(_message.Message): cookie_persistence_type: CookiePersistenceType cookie_same_site_setting: CookieSameSiteSetting cookie_custom_domain: _wrappers_pb2.StringValue - access_token_expiry_unit: TimeUnit - absolute_session_timeout_unit: TimeUnit - idle_session_timeout_unit: TimeUnit - def __init__(self, access_token_expiry: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., client_access_token_expiry: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., absolute_session_timeout: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., session_management_enabled: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., idle_session_timeout: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., idle_session_enabled: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., cookie_persistence_type: _Optional[_Union[CookiePersistenceType, str]] = ..., cookie_same_site_setting: _Optional[_Union[CookieSameSiteSetting, str]] = ..., cookie_custom_domain: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., access_token_expiry_unit: _Optional[_Union[TimeUnit, str]] = ..., absolute_session_timeout_unit: _Optional[_Union[TimeUnit, str]] = ..., idle_session_timeout_unit: _Optional[_Union[TimeUnit, str]] = ...) -> None: ... + access_token_expiry_unit: _commons_pb2.TimeUnit + absolute_session_timeout_unit: _commons_pb2.TimeUnit + idle_session_timeout_unit: _commons_pb2.TimeUnit + def __init__(self, access_token_expiry: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., client_access_token_expiry: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., absolute_session_timeout: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., session_management_enabled: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., idle_session_timeout: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., idle_session_enabled: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., cookie_persistence_type: _Optional[_Union[CookiePersistenceType, str]] = ..., cookie_same_site_setting: _Optional[_Union[CookieSameSiteSetting, str]] = ..., cookie_custom_domain: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., access_token_expiry_unit: _Optional[_Union[_commons_pb2.TimeUnit, str]] = ..., absolute_session_timeout_unit: _Optional[_Union[_commons_pb2.TimeUnit, str]] = ..., idle_session_timeout_unit: _Optional[_Union[_commons_pb2.TimeUnit, str]] = ...) -> None: ... class UserManagement(_message.Message): __slots__ = ("allow_duplicate_user_identities", "allow_multiple_memberships", "allow_organization_signup", "org_user_relationship", "enable_max_users_limit", "max_users_limit", "invitation_expiry", "block_disposable_email_domains", "block_public_email_domains", "sync_user_profile_on_signin") @@ -531,18 +558,20 @@ class GetCurrentSessionRequest(_message.Message): def __init__(self, id: _Optional[str] = ...) -> None: ... class GetCurrentSessionResponse(_message.Message): - __slots__ = ("session_expiry", "access_token_expiry", "organization_id", "subject", "email") + __slots__ = ("session_expiry", "access_token_expiry", "organization_id", "subject", "email", "connected_account_id") SESSION_EXPIRY_FIELD_NUMBER: _ClassVar[int] ACCESS_TOKEN_EXPIRY_FIELD_NUMBER: _ClassVar[int] ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] SUBJECT_FIELD_NUMBER: _ClassVar[int] EMAIL_FIELD_NUMBER: _ClassVar[int] + CONNECTED_ACCOUNT_ID_FIELD_NUMBER: _ClassVar[int] session_expiry: _timestamp_pb2.Timestamp access_token_expiry: _timestamp_pb2.Timestamp organization_id: str subject: str email: str - def __init__(self, session_expiry: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., access_token_expiry: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., organization_id: _Optional[str] = ..., subject: _Optional[str] = ..., email: _Optional[str] = ...) -> None: ... + connected_account_id: str + def __init__(self, session_expiry: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., access_token_expiry: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., organization_id: _Optional[str] = ..., subject: _Optional[str] = ..., email: _Optional[str] = ..., connected_account_id: _Optional[str] = ...) -> None: ... class ResourceMetadata(_message.Message): __slots__ = ("type", "identifiers") @@ -578,3 +607,73 @@ class ScalekitResourceResponse(_message.Message): RESOURCES_FIELD_NUMBER: _ClassVar[int] resources: _containers.MessageMap[str, _struct_pb2.Struct] def __init__(self, resources: _Optional[_Mapping[str, _struct_pb2.Struct]] = ...) -> None: ... + +class PortalBootstrapRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class PortalCustomizationBootstrap(_message.Message): + __slots__ = ("customization_settings", "settings") + CUSTOMIZATION_SETTINGS_FIELD_NUMBER: _ClassVar[int] + SETTINGS_FIELD_NUMBER: _ClassVar[int] + customization_settings: _struct_pb2.Struct + settings: PortalSettings + def __init__(self, customization_settings: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., settings: _Optional[_Union[PortalSettings, _Mapping]] = ...) -> None: ... + +class PortalBootstrapResponse(_message.Message): + __slots__ = ("session", "portal_customizations", "organization", "connections") + SESSION_FIELD_NUMBER: _ClassVar[int] + PORTAL_CUSTOMIZATIONS_FIELD_NUMBER: _ClassVar[int] + ORGANIZATION_FIELD_NUMBER: _ClassVar[int] + CONNECTIONS_FIELD_NUMBER: _ClassVar[int] + session: GetCurrentSessionResponse + portal_customizations: PortalCustomizationBootstrap + organization: _organizations_pb2.Organization + connections: _containers.RepeatedCompositeFieldContainer[_connections_pb2.ListConnection] + def __init__(self, session: _Optional[_Union[GetCurrentSessionResponse, _Mapping]] = ..., portal_customizations: _Optional[_Union[PortalCustomizationBootstrap, _Mapping]] = ..., organization: _Optional[_Union[_organizations_pb2.Organization, _Mapping]] = ..., connections: _Optional[_Iterable[_Union[_connections_pb2.ListConnection, _Mapping]]] = ...) -> None: ... + +class AgentActionsConfig(_message.Message): + __slots__ = ("user_verify_mode",) + USER_VERIFY_MODE_FIELD_NUMBER: _ClassVar[int] + user_verify_mode: ConnectedAccountUserVerifyMode + def __init__(self, user_verify_mode: _Optional[_Union[ConnectedAccountUserVerifyMode, str]] = ...) -> None: ... + +class CreateAgentActionsConfigRequest(_message.Message): + __slots__ = ("id", "agent_actions_config") + ID_FIELD_NUMBER: _ClassVar[int] + AGENT_ACTIONS_CONFIG_FIELD_NUMBER: _ClassVar[int] + id: str + agent_actions_config: AgentActionsConfig + def __init__(self, id: _Optional[str] = ..., agent_actions_config: _Optional[_Union[AgentActionsConfig, _Mapping]] = ...) -> None: ... + +class CreateAgentActionsConfigResponse(_message.Message): + __slots__ = ("agent_actions_config",) + AGENT_ACTIONS_CONFIG_FIELD_NUMBER: _ClassVar[int] + agent_actions_config: AgentActionsConfig + def __init__(self, agent_actions_config: _Optional[_Union[AgentActionsConfig, _Mapping]] = ...) -> None: ... + +class GetAgentActionsConfigRequest(_message.Message): + __slots__ = ("id",) + ID_FIELD_NUMBER: _ClassVar[int] + id: str + def __init__(self, id: _Optional[str] = ...) -> None: ... + +class GetAgentActionsConfigResponse(_message.Message): + __slots__ = ("agent_actions_config",) + AGENT_ACTIONS_CONFIG_FIELD_NUMBER: _ClassVar[int] + agent_actions_config: AgentActionsConfig + def __init__(self, agent_actions_config: _Optional[_Union[AgentActionsConfig, _Mapping]] = ...) -> None: ... + +class UpdateAgentActionsConfigRequest(_message.Message): + __slots__ = ("id", "agent_actions_config") + ID_FIELD_NUMBER: _ClassVar[int] + AGENT_ACTIONS_CONFIG_FIELD_NUMBER: _ClassVar[int] + id: str + agent_actions_config: AgentActionsConfig + def __init__(self, id: _Optional[str] = ..., agent_actions_config: _Optional[_Union[AgentActionsConfig, _Mapping]] = ...) -> None: ... + +class UpdateAgentActionsConfigResponse(_message.Message): + __slots__ = ("agent_actions_config",) + AGENT_ACTIONS_CONFIG_FIELD_NUMBER: _ClassVar[int] + agent_actions_config: AgentActionsConfig + def __init__(self, agent_actions_config: _Optional[_Union[AgentActionsConfig, _Mapping]] = ...) -> None: ... diff --git a/scalekit/v1/environments/environments_pb2_grpc.py b/scalekit/v1/environments/environments_pb2_grpc.py index 5119163..acb9184 100644 --- a/scalekit/v1/environments/environments_pb2_grpc.py +++ b/scalekit/v1/environments/environments_pb2_grpc.py @@ -115,6 +115,11 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetFeaturesRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetFeaturesResponse.FromString, ) + self.GetHostScopedPublicFeatureFlags = channel.unary_unary( + '/scalekit.v1.environments.EnvironmentService/GetHostScopedPublicFeatureFlags', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetHostScopedPublicFeatureFlagsResponse.FromString, + ) self.CreateEnvironmentSessionSettings = channel.unary_unary( '/scalekit.v1.environments.EnvironmentService/CreateEnvironmentSessionSettings', request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.CreateEnvironmentSessionSettingsRequest.SerializeToString, @@ -145,6 +150,21 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateEnvironmentUserManagementRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateEnvironmentUserManagementResponse.FromString, ) + self.CreateAgentActionsConfig = channel.unary_unary( + '/scalekit.v1.environments.EnvironmentService/CreateAgentActionsConfig', + request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.CreateAgentActionsConfigRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.CreateAgentActionsConfigResponse.FromString, + ) + self.GetAgentActionsConfig = channel.unary_unary( + '/scalekit.v1.environments.EnvironmentService/GetAgentActionsConfig', + request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetAgentActionsConfigRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetAgentActionsConfigResponse.FromString, + ) + self.UpdateAgentActionsConfig = channel.unary_unary( + '/scalekit.v1.environments.EnvironmentService/UpdateAgentActionsConfig', + request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateAgentActionsConfigRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateAgentActionsConfigResponse.FromString, + ) self.GetContext = channel.unary_unary( '/scalekit.v1.environments.EnvironmentService/GetContext', request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetContextRequest.SerializeToString, @@ -165,6 +185,11 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.ScalekitResourceRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.ScalekitResourceResponse.FromString, ) + self.PortalBootstrap = channel.unary_unary( + '/scalekit.v1.environments.EnvironmentService/PortalBootstrap', + request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.PortalBootstrapRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.PortalBootstrapResponse.FromString, + ) class EnvironmentServiceServicer(object): @@ -290,6 +315,15 @@ def GetFeatures(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def GetHostScopedPublicFeatureFlags(self, request, context): + """Returns allowlisted public feature flags for the environment implied by the request + host (typically HTTP Host). No environment id in path, query, or headers; unauthenticated. + 404 when the host does not resolve to an environment. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def CreateEnvironmentSessionSettings(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -326,6 +360,24 @@ def UpdateEnvironmentUserManagement(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def CreateAgentActionsConfig(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetAgentActionsConfig(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def UpdateAgentActionsConfig(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def GetContext(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -350,6 +402,12 @@ def GetScalekitResources(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def PortalBootstrap(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def add_EnvironmentServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -453,6 +511,11 @@ def add_EnvironmentServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetFeaturesRequest.FromString, response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetFeaturesResponse.SerializeToString, ), + 'GetHostScopedPublicFeatureFlags': grpc.unary_unary_rpc_method_handler( + servicer.GetHostScopedPublicFeatureFlags, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetHostScopedPublicFeatureFlagsResponse.SerializeToString, + ), 'CreateEnvironmentSessionSettings': grpc.unary_unary_rpc_method_handler( servicer.CreateEnvironmentSessionSettings, request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.CreateEnvironmentSessionSettingsRequest.FromString, @@ -483,6 +546,21 @@ def add_EnvironmentServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateEnvironmentUserManagementRequest.FromString, response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateEnvironmentUserManagementResponse.SerializeToString, ), + 'CreateAgentActionsConfig': grpc.unary_unary_rpc_method_handler( + servicer.CreateAgentActionsConfig, + request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.CreateAgentActionsConfigRequest.FromString, + response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.CreateAgentActionsConfigResponse.SerializeToString, + ), + 'GetAgentActionsConfig': grpc.unary_unary_rpc_method_handler( + servicer.GetAgentActionsConfig, + request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetAgentActionsConfigRequest.FromString, + response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetAgentActionsConfigResponse.SerializeToString, + ), + 'UpdateAgentActionsConfig': grpc.unary_unary_rpc_method_handler( + servicer.UpdateAgentActionsConfig, + request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateAgentActionsConfigRequest.FromString, + response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateAgentActionsConfigResponse.SerializeToString, + ), 'GetContext': grpc.unary_unary_rpc_method_handler( servicer.GetContext, request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetContextRequest.FromString, @@ -503,6 +581,11 @@ def add_EnvironmentServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.ScalekitResourceRequest.FromString, response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.ScalekitResourceResponse.SerializeToString, ), + 'PortalBootstrap': grpc.unary_unary_rpc_method_handler( + servicer.PortalBootstrap, + request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.PortalBootstrapRequest.FromString, + response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.PortalBootstrapResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'scalekit.v1.environments.EnvironmentService', rpc_method_handlers) @@ -853,6 +936,23 @@ def GetFeatures(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod + def GetHostScopedPublicFeatureFlags(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.environments.EnvironmentService/GetHostScopedPublicFeatureFlags', + google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + scalekit_dot_v1_dot_environments_dot_environments__pb2.GetHostScopedPublicFeatureFlagsResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod def CreateEnvironmentSessionSettings(request, target, @@ -955,6 +1055,57 @@ def UpdateEnvironmentUserManagement(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod + def CreateAgentActionsConfig(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.environments.EnvironmentService/CreateAgentActionsConfig', + scalekit_dot_v1_dot_environments_dot_environments__pb2.CreateAgentActionsConfigRequest.SerializeToString, + scalekit_dot_v1_dot_environments_dot_environments__pb2.CreateAgentActionsConfigResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def GetAgentActionsConfig(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.environments.EnvironmentService/GetAgentActionsConfig', + scalekit_dot_v1_dot_environments_dot_environments__pb2.GetAgentActionsConfigRequest.SerializeToString, + scalekit_dot_v1_dot_environments_dot_environments__pb2.GetAgentActionsConfigResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def UpdateAgentActionsConfig(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.environments.EnvironmentService/UpdateAgentActionsConfig', + scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateAgentActionsConfigRequest.SerializeToString, + scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateAgentActionsConfigResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod def GetContext(request, target, @@ -1022,3 +1173,20 @@ def GetScalekitResources(request, scalekit_dot_v1_dot_environments_dot_environments__pb2.ScalekitResourceResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def PortalBootstrap(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.environments.EnvironmentService/PortalBootstrap', + scalekit_dot_v1_dot_environments_dot_environments__pb2.PortalBootstrapRequest.SerializeToString, + scalekit_dot_v1_dot_environments_dot_environments__pb2.PortalBootstrapResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/errdetails/errdetails_pb2.py b/scalekit/v1/errdetails/errdetails_pb2.py index 30fbba1..cd5e444 100644 --- a/scalekit/v1/errdetails/errdetails_pb2.py +++ b/scalekit/v1/errdetails/errdetails_pb2.py @@ -12,10 +12,13 @@ _sym_db = _symbol_database.Default() +from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2 +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 +from protoc_gen_openapiv2.options import annotations_pb2 as protoc__gen__openapiv2_dot_options_dot_annotations__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'scalekit/v1/errdetails/errdetails.proto\x12\x16scalekit.v1.errdetails\x1a\x1egoogle/protobuf/duration.proto\"\xfe\x05\n\tErrorInfo\x12\x1d\n\nerror_code\x18\x01 \x01(\tR\terrorCode\x12\x45\n\ndebug_info\x18\x02 \x01(\x0b\x32!.scalekit.v1.errdetails.DebugInfoH\x00R\tdebugInfo\x88\x01\x01\x12\x42\n\thelp_info\x18\x03 \x01(\x0b\x32 .scalekit.v1.errdetails.HelpInfoH\x01R\x08helpInfo\x88\x01\x01\x12g\n\x16localized_message_info\x18\x04 \x01(\x0b\x32,.scalekit.v1.errdetails.LocalizedMessageInfoH\x02R\x14localizedMessageInfo\x88\x01\x01\x12N\n\rresource_info\x18\x05 \x01(\x0b\x32$.scalekit.v1.errdetails.ResourceInfoH\x03R\x0cresourceInfo\x88\x01\x01\x12K\n\x0crequest_info\x18\x06 \x01(\x0b\x32#.scalekit.v1.errdetails.RequestInfoH\x04R\x0brequestInfo\x88\x01\x01\x12\x64\n\x15validation_error_info\x18\x08 \x01(\x0b\x32+.scalekit.v1.errdetails.ValidationErrorInfoH\x05R\x13validationErrorInfo\x88\x01\x01\x12R\n\x0ftool_error_info\x18\t \x01(\x0b\x32%.scalekit.v1.errdetails.ToolErrorInfoH\x06R\rtoolErrorInfo\x88\x01\x01\x42\r\n\x0b_debug_infoB\x0c\n\n_help_infoB\x19\n\x17_localized_message_infoB\x10\n\x0e_resource_infoB\x0f\n\r_request_infoB\x18\n\x16_validation_error_infoB\x12\n\x10_tool_error_info\"H\n\tDebugInfo\x12#\n\rstack_entries\x18\x01 \x03(\tR\x0cstackEntries\x12\x16\n\x06\x64\x65tail\x18\x02 \x01(\tR\x06\x64\x65tail\"\xe6\x01\n\x13ValidationErrorInfo\x12\x65\n\x10\x66ield_violations\x18\x01 \x03(\x0b\x32:.scalekit.v1.errdetails.ValidationErrorInfo.FieldViolationR\x0f\x66ieldViolations\x1ah\n\x0e\x46ieldViolation\x12\x14\n\x05\x66ield\x18\x01 \x01(\tR\x05\x66ield\x12 \n\x0b\x64\x65scription\x18\x02 \x01(\tR\x0b\x64\x65scription\x12\x1e\n\nconstraint\x18\x03 \x01(\tR\nconstraint\"O\n\x0bRequestInfo\x12\x1d\n\nrequest_id\x18\x01 \x01(\tR\trequestId\x12!\n\x0cserving_data\x18\x02 \x01(\tR\x0bservingData\"\xb8\x01\n\x0cResourceInfo\x12#\n\rresource_name\x18\x02 \x01(\tR\x0cresourceName\x12\x14\n\x05owner\x18\x03 \x01(\tR\x05owner\x12 \n\x0b\x64\x65scription\x18\x04 \x01(\tR\x0b\x64\x65scription\x12\x31\n\x14required_permissions\x18\x05 \x03(\tR\x13requiredPermissions\x12\x12\n\x04user\x18\x06 \x01(\tR\x04userJ\x04\x08\x01\x10\x02\"\x83\x01\n\x08HelpInfo\x12;\n\x05links\x18\x01 \x03(\x0b\x32%.scalekit.v1.errdetails.HelpInfo.LinkR\x05links\x1a:\n\x04Link\x12 \n\x0b\x64\x65scription\x18\x01 \x01(\tR\x0b\x64\x65scription\x12\x10\n\x03url\x18\x02 \x01(\tR\x03url\"H\n\x14LocalizedMessageInfo\x12\x16\n\x06locale\x18\x01 \x01(\tR\x06locale\x12\x18\n\x07message\x18\x02 \x01(\tR\x07message\"\x88\x01\n\rToolErrorInfo\x12!\n\x0c\x65xecution_id\x18\x01 \x01(\tR\x0b\x65xecutionId\x12,\n\x12tool_error_message\x18\x02 \x01(\tR\x10toolErrorMessage\x12&\n\x0ftool_error_code\x18\x03 \x01(\tR\rtoolErrorCodeB6Z4github.com/scalekit-inc/scalekit/pkg/grpc/errdetailsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'scalekit/v1/errdetails/errdetails.proto\x12\x16scalekit.v1.errdetails\x1a\x1cgoogle/api/annotations.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\"\xfe\x05\n\tErrorInfo\x12\x1d\n\nerror_code\x18\x01 \x01(\tR\terrorCode\x12\x45\n\ndebug_info\x18\x02 \x01(\x0b\x32!.scalekit.v1.errdetails.DebugInfoH\x00R\tdebugInfo\x88\x01\x01\x12\x42\n\thelp_info\x18\x03 \x01(\x0b\x32 .scalekit.v1.errdetails.HelpInfoH\x01R\x08helpInfo\x88\x01\x01\x12g\n\x16localized_message_info\x18\x04 \x01(\x0b\x32,.scalekit.v1.errdetails.LocalizedMessageInfoH\x02R\x14localizedMessageInfo\x88\x01\x01\x12N\n\rresource_info\x18\x05 \x01(\x0b\x32$.scalekit.v1.errdetails.ResourceInfoH\x03R\x0cresourceInfo\x88\x01\x01\x12K\n\x0crequest_info\x18\x06 \x01(\x0b\x32#.scalekit.v1.errdetails.RequestInfoH\x04R\x0brequestInfo\x88\x01\x01\x12\x64\n\x15validation_error_info\x18\x08 \x01(\x0b\x32+.scalekit.v1.errdetails.ValidationErrorInfoH\x05R\x13validationErrorInfo\x88\x01\x01\x12R\n\x0ftool_error_info\x18\t \x01(\x0b\x32%.scalekit.v1.errdetails.ToolErrorInfoH\x06R\rtoolErrorInfo\x88\x01\x01\x42\r\n\x0b_debug_infoB\x0c\n\n_help_infoB\x19\n\x17_localized_message_infoB\x10\n\x0e_resource_infoB\x0f\n\r_request_infoB\x18\n\x16_validation_error_infoB\x12\n\x10_tool_error_info\"H\n\tDebugInfo\x12#\n\rstack_entries\x18\x01 \x03(\tR\x0cstackEntries\x12\x16\n\x06\x64\x65tail\x18\x02 \x01(\tR\x06\x64\x65tail\"\xe6\x01\n\x13ValidationErrorInfo\x12\x65\n\x10\x66ield_violations\x18\x01 \x03(\x0b\x32:.scalekit.v1.errdetails.ValidationErrorInfo.FieldViolationR\x0f\x66ieldViolations\x1ah\n\x0e\x46ieldViolation\x12\x14\n\x05\x66ield\x18\x01 \x01(\tR\x05\x66ield\x12 \n\x0b\x64\x65scription\x18\x02 \x01(\tR\x0b\x64\x65scription\x12\x1e\n\nconstraint\x18\x03 \x01(\tR\nconstraint\"O\n\x0bRequestInfo\x12\x1d\n\nrequest_id\x18\x01 \x01(\tR\trequestId\x12!\n\x0cserving_data\x18\x02 \x01(\tR\x0bservingData\"\xb8\x01\n\x0cResourceInfo\x12#\n\rresource_name\x18\x02 \x01(\tR\x0cresourceName\x12\x14\n\x05owner\x18\x03 \x01(\tR\x05owner\x12 \n\x0b\x64\x65scription\x18\x04 \x01(\tR\x0b\x64\x65scription\x12\x31\n\x14required_permissions\x18\x05 \x03(\tR\x13requiredPermissions\x12\x12\n\x04user\x18\x06 \x01(\tR\x04userJ\x04\x08\x01\x10\x02\"\x83\x01\n\x08HelpInfo\x12;\n\x05links\x18\x01 \x03(\x0b\x32%.scalekit.v1.errdetails.HelpInfo.LinkR\x05links\x1a:\n\x04Link\x12 \n\x0b\x64\x65scription\x18\x01 \x01(\tR\x0b\x64\x65scription\x12\x10\n\x03url\x18\x02 \x01(\tR\x03url\"H\n\x14LocalizedMessageInfo\x12\x16\n\x06locale\x18\x01 \x01(\tR\x06locale\x12\x18\n\x07message\x18\x02 \x01(\tR\x07message\"\x88\x01\n\rToolErrorInfo\x12!\n\x0c\x65xecution_id\x18\x01 \x01(\tR\x0b\x65xecutionId\x12,\n\x12tool_error_message\x18\x02 \x01(\tR\x10toolErrorMessage\x12&\n\x0ftool_error_code\x18\x03 \x01(\tR\rtoolErrorCode2\x96\x01\n\x05\x44ummy\x12\x8c\x01\n\x0c\x44ummyService\x12\x16.google.protobuf.Empty\x1a!.scalekit.v1.errdetails.ErrorInfo\"A\x92\x41\x30J.\n\x03\x32\x30\x30\x12\'\x12%\n#\x1a!.scalekit.v1.errdetails.ErrorInfo\x82\xd3\xe4\x93\x02\x08\x12\x06/dummyB6Z4github.com/scalekit-inc/scalekit/pkg/grpc/errdetailsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -23,24 +26,28 @@ if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'Z4github.com/scalekit-inc/scalekit/pkg/grpc/errdetails' - _globals['_ERRORINFO']._serialized_start=100 - _globals['_ERRORINFO']._serialized_end=866 - _globals['_DEBUGINFO']._serialized_start=868 - _globals['_DEBUGINFO']._serialized_end=940 - _globals['_VALIDATIONERRORINFO']._serialized_start=943 - _globals['_VALIDATIONERRORINFO']._serialized_end=1173 - _globals['_VALIDATIONERRORINFO_FIELDVIOLATION']._serialized_start=1069 - _globals['_VALIDATIONERRORINFO_FIELDVIOLATION']._serialized_end=1173 - _globals['_REQUESTINFO']._serialized_start=1175 - _globals['_REQUESTINFO']._serialized_end=1254 - _globals['_RESOURCEINFO']._serialized_start=1257 - _globals['_RESOURCEINFO']._serialized_end=1441 - _globals['_HELPINFO']._serialized_start=1444 - _globals['_HELPINFO']._serialized_end=1575 - _globals['_HELPINFO_LINK']._serialized_start=1517 - _globals['_HELPINFO_LINK']._serialized_end=1575 - _globals['_LOCALIZEDMESSAGEINFO']._serialized_start=1577 - _globals['_LOCALIZEDMESSAGEINFO']._serialized_end=1649 - _globals['_TOOLERRORINFO']._serialized_start=1652 - _globals['_TOOLERRORINFO']._serialized_end=1788 + _globals['_DUMMY'].methods_by_name['DummyService']._loaded_options = None + _globals['_DUMMY'].methods_by_name['DummyService']._serialized_options = b'\222A0J.\n\003200\022\'\022%\n#\032!.scalekit.v1.errdetails.ErrorInfo\202\323\344\223\002\010\022\006/dummy' + _globals['_ERRORINFO']._serialized_start=207 + _globals['_ERRORINFO']._serialized_end=973 + _globals['_DEBUGINFO']._serialized_start=975 + _globals['_DEBUGINFO']._serialized_end=1047 + _globals['_VALIDATIONERRORINFO']._serialized_start=1050 + _globals['_VALIDATIONERRORINFO']._serialized_end=1280 + _globals['_VALIDATIONERRORINFO_FIELDVIOLATION']._serialized_start=1176 + _globals['_VALIDATIONERRORINFO_FIELDVIOLATION']._serialized_end=1280 + _globals['_REQUESTINFO']._serialized_start=1282 + _globals['_REQUESTINFO']._serialized_end=1361 + _globals['_RESOURCEINFO']._serialized_start=1364 + _globals['_RESOURCEINFO']._serialized_end=1548 + _globals['_HELPINFO']._serialized_start=1551 + _globals['_HELPINFO']._serialized_end=1682 + _globals['_HELPINFO_LINK']._serialized_start=1624 + _globals['_HELPINFO_LINK']._serialized_end=1682 + _globals['_LOCALIZEDMESSAGEINFO']._serialized_start=1684 + _globals['_LOCALIZEDMESSAGEINFO']._serialized_end=1756 + _globals['_TOOLERRORINFO']._serialized_start=1759 + _globals['_TOOLERRORINFO']._serialized_end=1895 + _globals['_DUMMY']._serialized_start=1898 + _globals['_DUMMY']._serialized_end=2048 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/errdetails/errdetails_pb2.pyi b/scalekit/v1/errdetails/errdetails_pb2.pyi index 547b7ed..8848396 100644 --- a/scalekit/v1/errdetails/errdetails_pb2.pyi +++ b/scalekit/v1/errdetails/errdetails_pb2.pyi @@ -1,4 +1,7 @@ +from google.api import annotations_pb2 as _annotations_pb2 from google.protobuf import duration_pb2 as _duration_pb2 +from google.protobuf import empty_pb2 as _empty_pb2 +from protoc_gen_openapiv2.options import annotations_pb2 as _annotations_pb2_1 from google.protobuf.internal import containers as _containers from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message diff --git a/scalekit/v1/errdetails/errdetails_pb2_grpc.py b/scalekit/v1/errdetails/errdetails_pb2_grpc.py index 2daafff..6ffc6eb 100644 --- a/scalekit/v1/errdetails/errdetails_pb2_grpc.py +++ b/scalekit/v1/errdetails/errdetails_pb2_grpc.py @@ -2,3 +2,66 @@ """Client and server classes corresponding to protobuf-defined services.""" import grpc +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 +from scalekit.v1.errdetails import errdetails_pb2 as scalekit_dot_v1_dot_errdetails_dot_errdetails__pb2 + + +class DummyStub(object): + """Missing associated documentation comment in .proto file.""" + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.DummyService = channel.unary_unary( + '/scalekit.v1.errdetails.Dummy/DummyService', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_errdetails_dot_errdetails__pb2.ErrorInfo.FromString, + ) + + +class DummyServicer(object): + """Missing associated documentation comment in .proto file.""" + + def DummyService(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_DummyServicer_to_server(servicer, server): + rpc_method_handlers = { + 'DummyService': grpc.unary_unary_rpc_method_handler( + servicer.DummyService, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=scalekit_dot_v1_dot_errdetails_dot_errdetails__pb2.ErrorInfo.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'scalekit.v1.errdetails.Dummy', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + # This class is part of an EXPERIMENTAL API. +class Dummy(object): + """Missing associated documentation comment in .proto file.""" + + @staticmethod + def DummyService(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.errdetails.Dummy/DummyService', + google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + scalekit_dot_v1_dot_errdetails_dot_errdetails__pb2.ErrorInfo.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/keys/__init__.py b/scalekit/v1/keys/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/scalekit/v1/keys/keys_pb2.py b/scalekit/v1/keys/keys_pb2.py new file mode 100644 index 0000000..ecdf916 --- /dev/null +++ b/scalekit/v1/keys/keys_pb2.py @@ -0,0 +1,111 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: scalekit/v1/keys/keys.proto +# Protobuf Python Version: 5.26.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 +from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 +from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2 +from google.api import visibility_pb2 as google_dot_api_dot_visibility__pb2 +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 +from protoc_gen_openapiv2.options import annotations_pb2 as protoc__gen__openapiv2_dot_options_dot_annotations__pb2 +from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bscalekit/v1/keys/keys.proto\x12\x10scalekit.v1.keys\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\xb5\x01\n\x10\x43reateDEKRequest\x12<\n\x08key_type\x18\x01 \x01(\x0e\x32\x1c.scalekit.v1.keys.DEKKeyTypeH\x00R\x07keyType\x88\x01\x01\x12\x1f\n\x08provider\x18\x02 \x01(\tH\x01R\x08provider\x88\x01\x01\x12\x1c\n\x07key_ref\x18\x03 \x01(\tH\x02R\x06keyRef\x88\x01\x01\x42\x0b\n\t_key_typeB\x0b\n\t_providerB\n\n\x08_key_ref\"G\n\x11\x43reateDEKResponse\x12\x32\n\x03\x64\x65k\x18\x01 \x01(\x0b\x32 .scalekit.v1.keys.EnvironmentKeyR\x03\x64\x65k\"\x12\n\x10RotateDEKRequest\"G\n\x11RotateDEKResponse\x12\x32\n\x03\x64\x65k\x18\x01 \x01(\x0b\x32 .scalekit.v1.keys.EnvironmentKeyR\x03\x64\x65k\"u\n\x0fListDEKsRequest\x12\x1b\n\x06status\x18\x01 \x01(\tH\x00R\x06status\x88\x01\x01\x12\x1b\n\tpage_size\x18\x02 \x01(\rR\x08pageSize\x12\x1d\n\npage_token\x18\x03 \x01(\tR\tpageTokenB\t\n\x07_status\"\x8f\x01\n\x10ListDEKsResponse\x12\x34\n\x04\x64\x65ks\x18\x01 \x03(\x0b\x32 .scalekit.v1.keys.EnvironmentKeyR\x04\x64\x65ks\x12&\n\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x03 \x01(\rR\ttotalSize\"<\n\x10\x44\x65leteDEKRequest\x12(\n\x0b\x64\x65k_version\x18\x01 \x01(\x05\x42\x07\xbaH\x04\x1a\x02 \x00R\ndekVersion\"\x18\n\x16RotateMasterKeyRequest\"\\\n\x17RotateMasterKeyResponse\x12\x41\n\x0enew_master_key\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.keys.MasterKeyR\x0cnewMasterKey\"\xbb\x02\n\x0e\x45nvironmentKey\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12%\n\x0e\x65nvironment_id\x18\x02 \x01(\tR\renvironmentId\x12\x1f\n\x0b\x64\x65k_version\x18\x03 \x01(\x05R\ndekVersion\x12%\n\x0emaster_version\x18\x04 \x01(\x05R\rmasterVersion\x12\x1c\n\talgorithm\x18\x05 \x01(\tR\talgorithm\x12\x16\n\x06status\x18\x06 \x01(\tR\x06status\x12\x39\n\ncreated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nrotated_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\trotatedAt\"\xf8\x01\n\tMasterKey\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1a\n\x08provider\x18\x02 \x01(\tR\x08provider\x12\x17\n\x07key_ref\x18\x03 \x01(\tR\x06keyRef\x12\x18\n\x07version\x18\x04 \x01(\x05R\x07version\x12\x16\n\x06status\x18\x05 \x01(\tR\x06status\x12\x39\n\ncreated_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nrotated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\trotatedAt\"\xa0\x01\n\x16\x43reateMasterKeyRequest\x12\x39\n\x08provider\x18\x01 \x01(\tB\x1d\xbaH\x1ar\x18R\x03GCPR\x03\x41WSR\x05\x41ZURER\x05LOCALR\x08provider\x12 \n\x07key_ref\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06keyRef\x12\x1d\n\x07version\x18\x03 \x01(\x05H\x00R\x07version\x88\x01\x01\x42\n\n\x08_version\"U\n\x17\x43reateMasterKeyResponse\x12:\n\nmaster_key\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.keys.MasterKeyR\tmasterKey\"?\n\x13SetActiveDEKRequest\x12(\n\x0b\x64\x65k_version\x18\x01 \x01(\x05\x42\x07\xbaH\x04\x1a\x02 \x00R\ndekVersion\"J\n\x14SetActiveDEKResponse\x12\x32\n\x03\x64\x65k\x18\x01 \x01(\x0b\x32 .scalekit.v1.keys.EnvironmentKeyR\x03\x64\x65k\">\n\x19SetActiveMasterKeyRequest\x12!\n\x07version\x18\x01 \x01(\x05\x42\x07\xbaH\x04\x1a\x02 \x00R\x07version\"X\n\x1aSetActiveMasterKeyResponse\x12:\n\nmaster_key\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.keys.MasterKeyR\tmasterKey\"=\n\x11\x44\x65stroyDEKRequest\x12(\n\x0b\x64\x65k_version\x18\x01 \x01(\x05\x42\x07\xbaH\x04\x1a\x02 \x00R\ndekVersion\"<\n\x17\x44\x65stroyMasterKeyRequest\x12!\n\x07version\x18\x01 \x01(\x05\x42\x07\xbaH\x04\x1a\x02 \x00R\x07version*c\n\nDEKKeyType\x12\x1c\n\x18\x44\x45K_KEY_TYPE_UNSPECIFIED\x10\x00\x12\x13\n\x0f\x45NVIRONMENT_KEY\x10\x01\x12\x08\n\x04\x42YOK\x10\x02\x12\x18\n\x14SCALEKIT_MANAGED_KEY\x10\x03\x32\xd1\x1c\n\x14KeyManagementService\x12\xed\x02\n\tCreateDEK\x12\".scalekit.v1.keys.CreateDEKRequest\x1a#.scalekit.v1.keys.CreateDEKResponse\"\x96\x02\x92\x41\xf0\x01\n\x0eKey Management\x12\x10\x43reate a new DEK\x1a\xcb\x01\x43reates a new Data Encryption Key (DEK) for the current environment. If a DEK already exists, this creates a new version. The DEK is automatically wrapped with the current master key and stored securely.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x16\"\x11/api/v1/keys/deks:\x01*\x12\xc2\x02\n\tRotateDEK\x12\".scalekit.v1.keys.RotateDEKRequest\x1a#.scalekit.v1.keys.RotateDEKResponse\"\xeb\x01\x92\x41\xbe\x01\n\x0eKey Management\x12\nRotate DEK\x1a\x9f\x01\x43reates a new DEK version for the environment. Re-encrypts existing data (oidc_client_secrets, connection client_secrets) and deprecates previous DEK versions.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1d\"\x18/api/v1/keys/deks:rotate:\x01*\x12\xd2\x02\n\x08ListDEKs\x12!.scalekit.v1.keys.ListDEKsRequest\x1a\".scalekit.v1.keys.ListDEKsResponse\"\xfe\x01\x92\x41\xdb\x01\n\x0eKey Management\x12\tList DEKs\x1a\xbd\x01Lists Data Encryption Keys (DEKs) for the current environment with pagination. Supports optional status filter (ACTIVE, DEPRECATED). Use page_token from the response to fetch the next page.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x13\x12\x11/api/v1/keys/deks\x12\x9e\x02\n\tDeleteDEK\x12\".scalekit.v1.keys.DeleteDEKRequest\x1a\x16.google.protobuf.Empty\"\xd4\x01\x92\x41\xa3\x01\n\x0eKey Management\x12\nDelete DEK\x1a\x84\x01\x44\x65precates a specific DEK version. Deprecated DEKs can still decrypt existing data but cannot be used for new encryption operations.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02!*\x1f/api/v1/keys/deks/{dek_version}\x12\xe4\x02\n\x0fRotateMasterKey\x12(.scalekit.v1.keys.RotateMasterKeyRequest\x1a).scalekit.v1.keys.RotateMasterKeyResponse\"\xfb\x01\x92\x41\xbd\x01\n\x0eKey Management\x12\x11Rotate Master Key\x1a\x97\x01\x43reates a new master key version, promotes it to primary, and rewraps all DEKs with the new master key. This operation supports zero-downtime rotation.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1f\"\x1a/api/v1/keys/master:rotate:\x01*\x12\x9f\x03\n\x0f\x43reateMasterKey\x12(.scalekit.v1.keys.CreateMasterKeyRequest\x1a).scalekit.v1.keys.CreateMasterKeyResponse\"\xb6\x02\x92\x41\xff\x01\n\x0eKey Management\x12\x11\x43reate Master Key\x1a\xd9\x01\x43reates a new master key version with the specified provider and key reference. The new key is created in CREATED status and is not used for encryption until it is explicitly promoted to ACTIVE via SetActiveMasterKey.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x18\"\x13/api/v1/keys/master:\x01*\x12\xd7\x02\n\x0cSetActiveDEK\x12%.scalekit.v1.keys.SetActiveDEKRequest\x1a&.scalekit.v1.keys.SetActiveDEKResponse\"\xf7\x01\x92\x41\xb9\x01\n\x0eKey Management\x12\x0eSet Active DEK\x1a\x96\x01Sets a specific DEK version as active for the environment and deprecates other versions. This allows switching back to an older DEK version if needed.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02.\")/api/v1/keys/deks/{dek_version}:setactive:\x01*\x12\x80\x03\n\x12SetActiveMasterKey\x12+.scalekit.v1.keys.SetActiveMasterKeyRequest\x1a,.scalekit.v1.keys.SetActiveMasterKeyResponse\"\x8e\x02\x92\x41\xc3\x01\n\x0eKey Management\x12\x15Set Active Master Key\x1a\x99\x01Sets a specific master key version as active and deprecates other versions. This promotes the specified version to primary for new encryption operations.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02,\"\'/api/v1/keys/master/{version}:setactive:\x01*\x12\xd8\x02\n\nDestroyDEK\x12#.scalekit.v1.keys.DestroyDEKRequest\x1a\x16.google.protobuf.Empty\"\x8c\x02\x92\x41\xd3\x01\n\x0eKey Management\x12\x0b\x44\x65stroy DEK\x1a\xb3\x01Permanently deletes a DEK version from the database. WARNING: This operation is irreversible. Any data encrypted with this DEK will become unrecoverable. Use with extreme caution.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02)*\'/api/v1/keys/deks/{dek_version}:destroy\x12\x84\x03\n\x10\x44\x65stroyMasterKey\x12).scalekit.v1.keys.DestroyMasterKeyRequest\x1a\x16.google.protobuf.Empty\"\xac\x02\x92\x41\xe6\x01\n\x0eKey Management\x12\x12\x44\x65stroy Master Key\x1a\xbf\x01Permanently deletes a master key version from the database. WARNING: This operation is irreversible. Any DEKs wrapped with this master key will become unrecoverable. Use with extreme caution.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\'*%/api/v1/keys/master/{version}:destroy\x1a\x46\x92\x41\x43\n\x0eKey Management\x12\x31\x45ncryption key management for envelope encryptionB0Z.github.com/scalekit-inc/scalekit/pkg/grpc/keysb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'scalekit.v1.keys.keys_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'Z.github.com/scalekit-inc/scalekit/pkg/grpc/keys' + _globals['_DELETEDEKREQUEST'].fields_by_name['dek_version']._loaded_options = None + _globals['_DELETEDEKREQUEST'].fields_by_name['dek_version']._serialized_options = b'\272H\004\032\002 \000' + _globals['_CREATEMASTERKEYREQUEST'].fields_by_name['provider']._loaded_options = None + _globals['_CREATEMASTERKEYREQUEST'].fields_by_name['provider']._serialized_options = b'\272H\032r\030R\003GCPR\003AWSR\005AZURER\005LOCAL' + _globals['_CREATEMASTERKEYREQUEST'].fields_by_name['key_ref']._loaded_options = None + _globals['_CREATEMASTERKEYREQUEST'].fields_by_name['key_ref']._serialized_options = b'\272H\004r\002\020\001' + _globals['_SETACTIVEDEKREQUEST'].fields_by_name['dek_version']._loaded_options = None + _globals['_SETACTIVEDEKREQUEST'].fields_by_name['dek_version']._serialized_options = b'\272H\004\032\002 \000' + _globals['_SETACTIVEMASTERKEYREQUEST'].fields_by_name['version']._loaded_options = None + _globals['_SETACTIVEMASTERKEYREQUEST'].fields_by_name['version']._serialized_options = b'\272H\004\032\002 \000' + _globals['_DESTROYDEKREQUEST'].fields_by_name['dek_version']._loaded_options = None + _globals['_DESTROYDEKREQUEST'].fields_by_name['dek_version']._serialized_options = b'\272H\004\032\002 \000' + _globals['_DESTROYMASTERKEYREQUEST'].fields_by_name['version']._loaded_options = None + _globals['_DESTROYMASTERKEYREQUEST'].fields_by_name['version']._serialized_options = b'\272H\004\032\002 \000' + _globals['_KEYMANAGEMENTSERVICE']._loaded_options = None + _globals['_KEYMANAGEMENTSERVICE']._serialized_options = b'\222AC\n\016Key Management\0221Encryption key management for envelope encryption' + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['CreateDEK']._loaded_options = None + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['CreateDEK']._serialized_options = b'\222A\360\001\n\016Key Management\022\020Create a new DEK\032\313\001Creates a new Data Encryption Key (DEK) for the current environment. If a DEK already exists, this creates a new version. The DEK is automatically wrapped with the current master key and stored securely.\202\265\030\002\030D\202\323\344\223\002\026\"\021/api/v1/keys/deks:\001*' + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['RotateDEK']._loaded_options = None + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['RotateDEK']._serialized_options = b'\222A\276\001\n\016Key Management\022\nRotate DEK\032\237\001Creates a new DEK version for the environment. Re-encrypts existing data (oidc_client_secrets, connection client_secrets) and deprecates previous DEK versions.\202\265\030\002\030D\202\323\344\223\002\035\"\030/api/v1/keys/deks:rotate:\001*' + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['ListDEKs']._loaded_options = None + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['ListDEKs']._serialized_options = b'\222A\333\001\n\016Key Management\022\tList DEKs\032\275\001Lists Data Encryption Keys (DEKs) for the current environment with pagination. Supports optional status filter (ACTIVE, DEPRECATED). Use page_token from the response to fetch the next page.\202\265\030\002\030D\202\323\344\223\002\023\022\021/api/v1/keys/deks' + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['DeleteDEK']._loaded_options = None + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['DeleteDEK']._serialized_options = b'\222A\243\001\n\016Key Management\022\nDelete DEK\032\204\001Deprecates a specific DEK version. Deprecated DEKs can still decrypt existing data but cannot be used for new encryption operations.\202\265\030\002\030D\202\323\344\223\002!*\037/api/v1/keys/deks/{dek_version}' + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['RotateMasterKey']._loaded_options = None + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['RotateMasterKey']._serialized_options = b'\222A\275\001\n\016Key Management\022\021Rotate Master Key\032\227\001Creates a new master key version, promotes it to primary, and rewraps all DEKs with the new master key. This operation supports zero-downtime rotation.\202\265\030\002\030\004\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\037\"\032/api/v1/keys/master:rotate:\001*' + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['CreateMasterKey']._loaded_options = None + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['CreateMasterKey']._serialized_options = b'\222A\377\001\n\016Key Management\022\021Create Master Key\032\331\001Creates a new master key version with the specified provider and key reference. The new key is created in CREATED status and is not used for encryption until it is explicitly promoted to ACTIVE via SetActiveMasterKey.\202\265\030\002\030\004\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\030\"\023/api/v1/keys/master:\001*' + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['SetActiveDEK']._loaded_options = None + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['SetActiveDEK']._serialized_options = b'\222A\271\001\n\016Key Management\022\016Set Active DEK\032\226\001Sets a specific DEK version as active for the environment and deprecates other versions. This allows switching back to an older DEK version if needed.\202\265\030\002\030D\202\323\344\223\002.\")/api/v1/keys/deks/{dek_version}:setactive:\001*' + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['SetActiveMasterKey']._loaded_options = None + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['SetActiveMasterKey']._serialized_options = b'\222A\303\001\n\016Key Management\022\025Set Active Master Key\032\231\001Sets a specific master key version as active and deprecates other versions. This promotes the specified version to primary for new encryption operations.\202\265\030\002\030\004\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002,\"\'/api/v1/keys/master/{version}:setactive:\001*' + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['DestroyDEK']._loaded_options = None + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['DestroyDEK']._serialized_options = b'\222A\323\001\n\016Key Management\022\013Destroy DEK\032\263\001Permanently deletes a DEK version from the database. WARNING: This operation is irreversible. Any data encrypted with this DEK will become unrecoverable. Use with extreme caution.\202\265\030\002\030D\202\323\344\223\002)*\'/api/v1/keys/deks/{dek_version}:destroy' + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['DestroyMasterKey']._loaded_options = None + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['DestroyMasterKey']._serialized_options = b'\222A\346\001\n\016Key Management\022\022Destroy Master Key\032\277\001Permanently deletes a master key version from the database. WARNING: This operation is irreversible. Any DEKs wrapped with this master key will become unrecoverable. Use with extreme caution.\202\265\030\002\030\004\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\'*%/api/v1/keys/master/{version}:destroy' + _globals['_DEKKEYTYPE']._serialized_start=2351 + _globals['_DEKKEYTYPE']._serialized_end=2450 + _globals['_CREATEDEKREQUEST']._serialized_start=316 + _globals['_CREATEDEKREQUEST']._serialized_end=497 + _globals['_CREATEDEKRESPONSE']._serialized_start=499 + _globals['_CREATEDEKRESPONSE']._serialized_end=570 + _globals['_ROTATEDEKREQUEST']._serialized_start=572 + _globals['_ROTATEDEKREQUEST']._serialized_end=590 + _globals['_ROTATEDEKRESPONSE']._serialized_start=592 + _globals['_ROTATEDEKRESPONSE']._serialized_end=663 + _globals['_LISTDEKSREQUEST']._serialized_start=665 + _globals['_LISTDEKSREQUEST']._serialized_end=782 + _globals['_LISTDEKSRESPONSE']._serialized_start=785 + _globals['_LISTDEKSRESPONSE']._serialized_end=928 + _globals['_DELETEDEKREQUEST']._serialized_start=930 + _globals['_DELETEDEKREQUEST']._serialized_end=990 + _globals['_ROTATEMASTERKEYREQUEST']._serialized_start=992 + _globals['_ROTATEMASTERKEYREQUEST']._serialized_end=1016 + _globals['_ROTATEMASTERKEYRESPONSE']._serialized_start=1018 + _globals['_ROTATEMASTERKEYRESPONSE']._serialized_end=1110 + _globals['_ENVIRONMENTKEY']._serialized_start=1113 + _globals['_ENVIRONMENTKEY']._serialized_end=1428 + _globals['_MASTERKEY']._serialized_start=1431 + _globals['_MASTERKEY']._serialized_end=1679 + _globals['_CREATEMASTERKEYREQUEST']._serialized_start=1682 + _globals['_CREATEMASTERKEYREQUEST']._serialized_end=1842 + _globals['_CREATEMASTERKEYRESPONSE']._serialized_start=1844 + _globals['_CREATEMASTERKEYRESPONSE']._serialized_end=1929 + _globals['_SETACTIVEDEKREQUEST']._serialized_start=1931 + _globals['_SETACTIVEDEKREQUEST']._serialized_end=1994 + _globals['_SETACTIVEDEKRESPONSE']._serialized_start=1996 + _globals['_SETACTIVEDEKRESPONSE']._serialized_end=2070 + _globals['_SETACTIVEMASTERKEYREQUEST']._serialized_start=2072 + _globals['_SETACTIVEMASTERKEYREQUEST']._serialized_end=2134 + _globals['_SETACTIVEMASTERKEYRESPONSE']._serialized_start=2136 + _globals['_SETACTIVEMASTERKEYRESPONSE']._serialized_end=2224 + _globals['_DESTROYDEKREQUEST']._serialized_start=2226 + _globals['_DESTROYDEKREQUEST']._serialized_end=2287 + _globals['_DESTROYMASTERKEYREQUEST']._serialized_start=2289 + _globals['_DESTROYMASTERKEYREQUEST']._serialized_end=2349 + _globals['_KEYMANAGEMENTSERVICE']._serialized_start=2453 + _globals['_KEYMANAGEMENTSERVICE']._serialized_end=6118 +# @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/keys/keys_pb2.pyi b/scalekit/v1/keys/keys_pb2.pyi new file mode 100644 index 0000000..18b70e8 --- /dev/null +++ b/scalekit/v1/keys/keys_pb2.pyi @@ -0,0 +1,178 @@ +from buf.validate import validate_pb2 as _validate_pb2 +from google.api import annotations_pb2 as _annotations_pb2 +from google.api import field_behavior_pb2 as _field_behavior_pb2 +from google.api import visibility_pb2 as _visibility_pb2 +from google.protobuf import empty_pb2 as _empty_pb2 +from google.protobuf import timestamp_pb2 as _timestamp_pb2 +from protoc_gen_openapiv2.options import annotations_pb2 as _annotations_pb2_1 +from scalekit.v1.options import options_pb2 as _options_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class DEKKeyType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + DEK_KEY_TYPE_UNSPECIFIED: _ClassVar[DEKKeyType] + ENVIRONMENT_KEY: _ClassVar[DEKKeyType] + BYOK: _ClassVar[DEKKeyType] + SCALEKIT_MANAGED_KEY: _ClassVar[DEKKeyType] +DEK_KEY_TYPE_UNSPECIFIED: DEKKeyType +ENVIRONMENT_KEY: DEKKeyType +BYOK: DEKKeyType +SCALEKIT_MANAGED_KEY: DEKKeyType + +class CreateDEKRequest(_message.Message): + __slots__ = ("key_type", "provider", "key_ref") + KEY_TYPE_FIELD_NUMBER: _ClassVar[int] + PROVIDER_FIELD_NUMBER: _ClassVar[int] + KEY_REF_FIELD_NUMBER: _ClassVar[int] + key_type: DEKKeyType + provider: str + key_ref: str + def __init__(self, key_type: _Optional[_Union[DEKKeyType, str]] = ..., provider: _Optional[str] = ..., key_ref: _Optional[str] = ...) -> None: ... + +class CreateDEKResponse(_message.Message): + __slots__ = ("dek",) + DEK_FIELD_NUMBER: _ClassVar[int] + dek: EnvironmentKey + def __init__(self, dek: _Optional[_Union[EnvironmentKey, _Mapping]] = ...) -> None: ... + +class RotateDEKRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class RotateDEKResponse(_message.Message): + __slots__ = ("dek",) + DEK_FIELD_NUMBER: _ClassVar[int] + dek: EnvironmentKey + def __init__(self, dek: _Optional[_Union[EnvironmentKey, _Mapping]] = ...) -> None: ... + +class ListDEKsRequest(_message.Message): + __slots__ = ("status", "page_size", "page_token") + STATUS_FIELD_NUMBER: _ClassVar[int] + PAGE_SIZE_FIELD_NUMBER: _ClassVar[int] + PAGE_TOKEN_FIELD_NUMBER: _ClassVar[int] + status: str + page_size: int + page_token: str + def __init__(self, status: _Optional[str] = ..., page_size: _Optional[int] = ..., page_token: _Optional[str] = ...) -> None: ... + +class ListDEKsResponse(_message.Message): + __slots__ = ("deks", "next_page_token", "total_size") + DEKS_FIELD_NUMBER: _ClassVar[int] + NEXT_PAGE_TOKEN_FIELD_NUMBER: _ClassVar[int] + TOTAL_SIZE_FIELD_NUMBER: _ClassVar[int] + deks: _containers.RepeatedCompositeFieldContainer[EnvironmentKey] + next_page_token: str + total_size: int + def __init__(self, deks: _Optional[_Iterable[_Union[EnvironmentKey, _Mapping]]] = ..., next_page_token: _Optional[str] = ..., total_size: _Optional[int] = ...) -> None: ... + +class DeleteDEKRequest(_message.Message): + __slots__ = ("dek_version",) + DEK_VERSION_FIELD_NUMBER: _ClassVar[int] + dek_version: int + def __init__(self, dek_version: _Optional[int] = ...) -> None: ... + +class RotateMasterKeyRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class RotateMasterKeyResponse(_message.Message): + __slots__ = ("new_master_key",) + NEW_MASTER_KEY_FIELD_NUMBER: _ClassVar[int] + new_master_key: MasterKey + def __init__(self, new_master_key: _Optional[_Union[MasterKey, _Mapping]] = ...) -> None: ... + +class EnvironmentKey(_message.Message): + __slots__ = ("id", "environment_id", "dek_version", "master_version", "algorithm", "status", "created_at", "rotated_at") + ID_FIELD_NUMBER: _ClassVar[int] + ENVIRONMENT_ID_FIELD_NUMBER: _ClassVar[int] + DEK_VERSION_FIELD_NUMBER: _ClassVar[int] + MASTER_VERSION_FIELD_NUMBER: _ClassVar[int] + ALGORITHM_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + CREATED_AT_FIELD_NUMBER: _ClassVar[int] + ROTATED_AT_FIELD_NUMBER: _ClassVar[int] + id: str + environment_id: str + dek_version: int + master_version: int + algorithm: str + status: str + created_at: _timestamp_pb2.Timestamp + rotated_at: _timestamp_pb2.Timestamp + def __init__(self, id: _Optional[str] = ..., environment_id: _Optional[str] = ..., dek_version: _Optional[int] = ..., master_version: _Optional[int] = ..., algorithm: _Optional[str] = ..., status: _Optional[str] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., rotated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ... + +class MasterKey(_message.Message): + __slots__ = ("id", "provider", "key_ref", "version", "status", "created_at", "rotated_at") + ID_FIELD_NUMBER: _ClassVar[int] + PROVIDER_FIELD_NUMBER: _ClassVar[int] + KEY_REF_FIELD_NUMBER: _ClassVar[int] + VERSION_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + CREATED_AT_FIELD_NUMBER: _ClassVar[int] + ROTATED_AT_FIELD_NUMBER: _ClassVar[int] + id: str + provider: str + key_ref: str + version: int + status: str + created_at: _timestamp_pb2.Timestamp + rotated_at: _timestamp_pb2.Timestamp + def __init__(self, id: _Optional[str] = ..., provider: _Optional[str] = ..., key_ref: _Optional[str] = ..., version: _Optional[int] = ..., status: _Optional[str] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., rotated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ... + +class CreateMasterKeyRequest(_message.Message): + __slots__ = ("provider", "key_ref", "version") + PROVIDER_FIELD_NUMBER: _ClassVar[int] + KEY_REF_FIELD_NUMBER: _ClassVar[int] + VERSION_FIELD_NUMBER: _ClassVar[int] + provider: str + key_ref: str + version: int + def __init__(self, provider: _Optional[str] = ..., key_ref: _Optional[str] = ..., version: _Optional[int] = ...) -> None: ... + +class CreateMasterKeyResponse(_message.Message): + __slots__ = ("master_key",) + MASTER_KEY_FIELD_NUMBER: _ClassVar[int] + master_key: MasterKey + def __init__(self, master_key: _Optional[_Union[MasterKey, _Mapping]] = ...) -> None: ... + +class SetActiveDEKRequest(_message.Message): + __slots__ = ("dek_version",) + DEK_VERSION_FIELD_NUMBER: _ClassVar[int] + dek_version: int + def __init__(self, dek_version: _Optional[int] = ...) -> None: ... + +class SetActiveDEKResponse(_message.Message): + __slots__ = ("dek",) + DEK_FIELD_NUMBER: _ClassVar[int] + dek: EnvironmentKey + def __init__(self, dek: _Optional[_Union[EnvironmentKey, _Mapping]] = ...) -> None: ... + +class SetActiveMasterKeyRequest(_message.Message): + __slots__ = ("version",) + VERSION_FIELD_NUMBER: _ClassVar[int] + version: int + def __init__(self, version: _Optional[int] = ...) -> None: ... + +class SetActiveMasterKeyResponse(_message.Message): + __slots__ = ("master_key",) + MASTER_KEY_FIELD_NUMBER: _ClassVar[int] + master_key: MasterKey + def __init__(self, master_key: _Optional[_Union[MasterKey, _Mapping]] = ...) -> None: ... + +class DestroyDEKRequest(_message.Message): + __slots__ = ("dek_version",) + DEK_VERSION_FIELD_NUMBER: _ClassVar[int] + dek_version: int + def __init__(self, dek_version: _Optional[int] = ...) -> None: ... + +class DestroyMasterKeyRequest(_message.Message): + __slots__ = ("version",) + VERSION_FIELD_NUMBER: _ClassVar[int] + version: int + def __init__(self, version: _Optional[int] = ...) -> None: ... diff --git a/scalekit/v1/keys/keys_pb2_grpc.py b/scalekit/v1/keys/keys_pb2_grpc.py new file mode 100644 index 0000000..0c7bedb --- /dev/null +++ b/scalekit/v1/keys/keys_pb2_grpc.py @@ -0,0 +1,386 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc + +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 +from scalekit.v1.keys import keys_pb2 as scalekit_dot_v1_dot_keys_dot_keys__pb2 + + +class KeyManagementServiceStub(object): + """KeyManagementService provides operations for managing encryption keys + including Data Encryption Keys (DEKs) and master key rotation. + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.CreateDEK = channel.unary_unary( + '/scalekit.v1.keys.KeyManagementService/CreateDEK', + request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateDEKRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateDEKResponse.FromString, + ) + self.RotateDEK = channel.unary_unary( + '/scalekit.v1.keys.KeyManagementService/RotateDEK', + request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateDEKRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateDEKResponse.FromString, + ) + self.ListDEKs = channel.unary_unary( + '/scalekit.v1.keys.KeyManagementService/ListDEKs', + request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.ListDEKsRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.ListDEKsResponse.FromString, + ) + self.DeleteDEK = channel.unary_unary( + '/scalekit.v1.keys.KeyManagementService/DeleteDEK', + request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.DeleteDEKRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + ) + self.RotateMasterKey = channel.unary_unary( + '/scalekit.v1.keys.KeyManagementService/RotateMasterKey', + request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateMasterKeyRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateMasterKeyResponse.FromString, + ) + self.CreateMasterKey = channel.unary_unary( + '/scalekit.v1.keys.KeyManagementService/CreateMasterKey', + request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateMasterKeyRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateMasterKeyResponse.FromString, + ) + self.SetActiveDEK = channel.unary_unary( + '/scalekit.v1.keys.KeyManagementService/SetActiveDEK', + request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveDEKRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveDEKResponse.FromString, + ) + self.SetActiveMasterKey = channel.unary_unary( + '/scalekit.v1.keys.KeyManagementService/SetActiveMasterKey', + request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveMasterKeyRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveMasterKeyResponse.FromString, + ) + self.DestroyDEK = channel.unary_unary( + '/scalekit.v1.keys.KeyManagementService/DestroyDEK', + request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.DestroyDEKRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + ) + self.DestroyMasterKey = channel.unary_unary( + '/scalekit.v1.keys.KeyManagementService/DestroyMasterKey', + request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.DestroyMasterKeyRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + ) + + +class KeyManagementServiceServicer(object): + """KeyManagementService provides operations for managing encryption keys + including Data Encryption Keys (DEKs) and master key rotation. + """ + + def CreateDEK(self, request, context): + """CreateDEK creates a new Data Encryption Key (DEK) for an environment. + If a DEK already exists, this will create a new version. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def RotateDEK(self, request, context): + """RotateDEK creates a new DEK version for an environment. + Re-encrypts existing data (oidc_client_secrets, connection client_secrets) and deprecates old DEK versions. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListDEKs(self, request, context): + """ListDEKs lists DEKs for an environment with pagination. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DeleteDEK(self, request, context): + """DeleteDEK deprecates or permanently deletes a DEK version. + Deprecated DEKs can still be used for decryption but not for encryption. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def RotateMasterKey(self, request, context): + """RotateMasterKey rotates the master key and rewraps all DEKs. + This operation is idempotent and supports zero-downtime rotation. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CreateMasterKey(self, request, context): + """CreateMasterKey creates a new master key version (in a non-active state). + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def SetActiveDEK(self, request, context): + """SetActiveDEK sets a specific DEK version as active for an environment. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def SetActiveMasterKey(self, request, context): + """SetActiveMasterKey sets a specific master key version as active. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DestroyDEK(self, request, context): + """DestroyDEK permanently deletes a DEK version. + WARNING: This operation is irreversible and will make data encrypted with this DEK unrecoverable. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DestroyMasterKey(self, request, context): + """DestroyMasterKey permanently deletes a master key version. + WARNING: This operation is irreversible and will make DEKs wrapped with this master key unrecoverable. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_KeyManagementServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'CreateDEK': grpc.unary_unary_rpc_method_handler( + servicer.CreateDEK, + request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateDEKRequest.FromString, + response_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateDEKResponse.SerializeToString, + ), + 'RotateDEK': grpc.unary_unary_rpc_method_handler( + servicer.RotateDEK, + request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateDEKRequest.FromString, + response_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateDEKResponse.SerializeToString, + ), + 'ListDEKs': grpc.unary_unary_rpc_method_handler( + servicer.ListDEKs, + request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.ListDEKsRequest.FromString, + response_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.ListDEKsResponse.SerializeToString, + ), + 'DeleteDEK': grpc.unary_unary_rpc_method_handler( + servicer.DeleteDEK, + request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.DeleteDEKRequest.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), + 'RotateMasterKey': grpc.unary_unary_rpc_method_handler( + servicer.RotateMasterKey, + request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateMasterKeyRequest.FromString, + response_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateMasterKeyResponse.SerializeToString, + ), + 'CreateMasterKey': grpc.unary_unary_rpc_method_handler( + servicer.CreateMasterKey, + request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateMasterKeyRequest.FromString, + response_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateMasterKeyResponse.SerializeToString, + ), + 'SetActiveDEK': grpc.unary_unary_rpc_method_handler( + servicer.SetActiveDEK, + request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveDEKRequest.FromString, + response_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveDEKResponse.SerializeToString, + ), + 'SetActiveMasterKey': grpc.unary_unary_rpc_method_handler( + servicer.SetActiveMasterKey, + request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveMasterKeyRequest.FromString, + response_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveMasterKeyResponse.SerializeToString, + ), + 'DestroyDEK': grpc.unary_unary_rpc_method_handler( + servicer.DestroyDEK, + request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.DestroyDEKRequest.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), + 'DestroyMasterKey': grpc.unary_unary_rpc_method_handler( + servicer.DestroyMasterKey, + request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.DestroyMasterKeyRequest.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'scalekit.v1.keys.KeyManagementService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + # This class is part of an EXPERIMENTAL API. +class KeyManagementService(object): + """KeyManagementService provides operations for managing encryption keys + including Data Encryption Keys (DEKs) and master key rotation. + """ + + @staticmethod + def CreateDEK(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/CreateDEK', + scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateDEKRequest.SerializeToString, + scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateDEKResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def RotateDEK(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/RotateDEK', + scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateDEKRequest.SerializeToString, + scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateDEKResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def ListDEKs(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/ListDEKs', + scalekit_dot_v1_dot_keys_dot_keys__pb2.ListDEKsRequest.SerializeToString, + scalekit_dot_v1_dot_keys_dot_keys__pb2.ListDEKsResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def DeleteDEK(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/DeleteDEK', + scalekit_dot_v1_dot_keys_dot_keys__pb2.DeleteDEKRequest.SerializeToString, + google_dot_protobuf_dot_empty__pb2.Empty.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def RotateMasterKey(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/RotateMasterKey', + scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateMasterKeyRequest.SerializeToString, + scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateMasterKeyResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def CreateMasterKey(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/CreateMasterKey', + scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateMasterKeyRequest.SerializeToString, + scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateMasterKeyResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def SetActiveDEK(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/SetActiveDEK', + scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveDEKRequest.SerializeToString, + scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveDEKResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def SetActiveMasterKey(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/SetActiveMasterKey', + scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveMasterKeyRequest.SerializeToString, + scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveMasterKeyResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def DestroyDEK(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/DestroyDEK', + scalekit_dot_v1_dot_keys_dot_keys__pb2.DestroyDEKRequest.SerializeToString, + google_dot_protobuf_dot_empty__pb2.Empty.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def DestroyMasterKey(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/DestroyMasterKey', + scalekit_dot_v1_dot_keys_dot_keys__pb2.DestroyMasterKeyRequest.SerializeToString, + google_dot_protobuf_dot_empty__pb2.Empty.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/members/members_pb2.py b/scalekit/v1/members/members_pb2.py index 277d8bf..e7f4dd8 100644 --- a/scalekit/v1/members/members_pb2.py +++ b/scalekit/v1/members/members_pb2.py @@ -15,6 +15,7 @@ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2 +from google.api import visibility_pb2 as google_dot_api_dot_visibility__pb2 from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 from protoc_gen_openapiv2.options import annotations_pb2 as protoc__gen__openapiv2_dot_options_dot_annotations__pb2 @@ -23,7 +24,7 @@ from scalekit.v1.users import users_pb2 as scalekit_dot_v1_dot_users_dot_users__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/members/members.proto\x12\x13scalekit.v1.members\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\x1a\x1dscalekit/v1/users/users.proto\"\xba\x07\n\x06Member\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12;\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12;\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nupdateTime\x12!\n\x0cworkspace_id\x18\x04 \x01(\tR\x0bworkspaceId\x12\x33\n\x04role\x18\x05 \x01(\x0e\x32\x1f.scalekit.v1.members.MemberRoleR\x04role\x12,\n\nfirst_name\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\x18\xc8\x01H\x00R\tfirstName\x88\x01\x01\x12*\n\tlast_name\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\x18\xc8\x01H\x01R\x08lastName\x88\x01\x01\x12\x1d\n\x05\x65mail\x18\x08 \x01(\tB\x07\xbaH\x04r\x02`\x01R\x05\x65mail\x12`\n\x08metadata\x18\t \x03(\x0b\x32).scalekit.v1.members.Member.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12V\n\rorganizations\x18\n \x03(\x0b\x32+.scalekit.v1.commons.OrganizationMembershipB\x03\xe0\x41\x03R\rorganizations\x12\x43\n\x0cuser_profile\x18\x0b \x01(\x0b\x32 .scalekit.v1.commons.UserProfileR\x0buserProfile\x12$\n\x0b\x65xternal_id\x18\x0c \x01(\tB\x03\xe0\x41\x03R\nexternalId\x12#\n\rworkspace_ids\x18\r \x03(\tR\x0cworkspaceIds\x12\x8f\x01\n\x1c\x61\x63tive_workspace_external_id\x18\x0e \x01(\tBI\x92\x41\x43\x32(Members session current active workspaceJ\x17\"org_72289897007874151\"\xe0\x41\x03H\x02R\x19\x61\x63tiveWorkspaceExternalId\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\r\n\x0b_first_nameB\x0c\n\n_last_nameB\x1f\n\x1d_active_workspace_external_id\"R\n\x13\x43reateMemberRequest\x12;\n\x06member\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.members.MemberB\x06\xbaH\x03\xc8\x01\x01R\x06member\"K\n\x14\x43reateMemberResponse\x12\x33\n\x06member\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.members.MemberR\x06member\"\x83\x03\n\x0cUpdateMember\x12.\n\nfirst_name\x18\x06 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01H\x00R\tfirstName\x88\x01\x01\x12,\n\tlast_name\x18\x07 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01H\x01R\x08lastName\x88\x01\x01\x12\x66\n\x08metadata\x18\t \x03(\x0b\x32/.scalekit.v1.members.UpdateMember.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12G\n\x0cuser_profile\x18\n \x01(\x0b\x32$.scalekit.v1.users.UpdateUserProfileR\x0buserProfile\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\r\n\x0b_first_nameB\x0c\n\n_last_nameJ\x04\x08\x04\x10\x05J\x04\x08\x08\x10\t\"W\n\x1aUpdateCurrentMemberRequest\x12\x39\n\x06member\x18\x01 \x01(\x0b\x32!.scalekit.v1.members.UpdateMemberR\x06member\"k\n\x13UpdateMemberRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x13\x18\x19R\x02id\x12\x39\n\x06member\x18\x02 \x01(\x0b\x32!.scalekit.v1.members.UpdateMemberR\x06member\"K\n\x14UpdateMemberResponse\x12\x33\n\x06member\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.members.MemberR\x06member\"\x19\n\x17GetCurrentMemberRequest\"-\n\x10GetMemberRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x13\x18\x19R\x02id\"H\n\x11GetMemberResponse\x12\x33\n\x06member\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.members.MemberR\x06member\"O\n\x11ListMemberRequest\x12\x1b\n\tpage_size\x18\x01 \x01(\rR\x08pageSize\x12\x1d\n\npage_token\x18\x02 \x01(\tR\tpageToken\"\x92\x01\n\x12ListMemberResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12\x35\n\x07members\x18\x03 \x03(\x0b\x32\x1b.scalekit.v1.members.MemberR\x07members\"0\n\x13\x44\x65leteMemberRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x13\x18\x19R\x02id*>\n\nMemberRole\x12\x1b\n\x17MEMBER_ROLE_UNSPECIFIED\x10\x00\x12\t\n\x05\x41\x44MIN\x10\x01\x12\x08\n\x04USER\x10\x02\x32\xd3\x07\n\x0eMembersService\x12\x8a\x01\n\x0c\x43reateMember\x12(.scalekit.v1.members.CreateMemberRequest\x1a).scalekit.v1.members.CreateMemberResponse\"%\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x19\"\x0f/api/v1/members:\x06member\x12\x9d\x01\n\x13UpdateCurrentMember\x12/.scalekit.v1.members.UpdateCurrentMemberRequest\x1a).scalekit.v1.members.UpdateMemberResponse\"*\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1e\x32\x14/api/v1/members:this:\x06member\x12\x8f\x01\n\x0cUpdateMember\x12(.scalekit.v1.members.UpdateMemberRequest\x1a).scalekit.v1.members.UpdateMemberResponse\"*\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1e\x32\x14/api/v1/members/{id}:\x06member\x12\x8c\x01\n\x10GetCurrentMember\x12,.scalekit.v1.members.GetCurrentMemberRequest\x1a&.scalekit.v1.members.GetMemberResponse\"\"\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/members:this\x12~\n\tGetMember\x12%.scalekit.v1.members.GetMemberRequest\x1a&.scalekit.v1.members.GetMemberResponse\"\"\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/members/{id}\x12}\n\x0bListMembers\x12&.scalekit.v1.members.ListMemberRequest\x1a\'.scalekit.v1.members.ListMemberResponse\"\x1d\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x11\x12\x0f/api/v1/members\x12t\n\x0c\x44\x65leteMember\x12(.scalekit.v1.members.DeleteMemberRequest\x1a\x16.google.protobuf.Empty\"\"\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x16*\x14/api/v1/members/{id}B3Z1github.com/scalekit-inc/scalekit/pkg/grpc/membersb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/members/members.proto\x12\x13scalekit.v1.members\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\x1a\x1dscalekit/v1/users/users.proto\"\xba\x07\n\x06Member\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12;\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12;\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nupdateTime\x12!\n\x0cworkspace_id\x18\x04 \x01(\tR\x0bworkspaceId\x12\x33\n\x04role\x18\x05 \x01(\x0e\x32\x1f.scalekit.v1.members.MemberRoleR\x04role\x12,\n\nfirst_name\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\x18\xc8\x01H\x00R\tfirstName\x88\x01\x01\x12*\n\tlast_name\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\x18\xc8\x01H\x01R\x08lastName\x88\x01\x01\x12\x1d\n\x05\x65mail\x18\x08 \x01(\tB\x07\xbaH\x04r\x02`\x01R\x05\x65mail\x12`\n\x08metadata\x18\t \x03(\x0b\x32).scalekit.v1.members.Member.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12V\n\rorganizations\x18\n \x03(\x0b\x32+.scalekit.v1.commons.OrganizationMembershipB\x03\xe0\x41\x03R\rorganizations\x12\x43\n\x0cuser_profile\x18\x0b \x01(\x0b\x32 .scalekit.v1.commons.UserProfileR\x0buserProfile\x12$\n\x0b\x65xternal_id\x18\x0c \x01(\tB\x03\xe0\x41\x03R\nexternalId\x12#\n\rworkspace_ids\x18\r \x03(\tR\x0cworkspaceIds\x12\x8f\x01\n\x1c\x61\x63tive_workspace_external_id\x18\x0e \x01(\tBI\x92\x41\x43\x32(Members session current active workspaceJ\x17\"org_72289897007874151\"\xe0\x41\x03H\x02R\x19\x61\x63tiveWorkspaceExternalId\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\r\n\x0b_first_nameB\x0c\n\n_last_nameB\x1f\n\x1d_active_workspace_external_id\"R\n\x13\x43reateMemberRequest\x12;\n\x06member\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.members.MemberB\x06\xbaH\x03\xc8\x01\x01R\x06member\"K\n\x14\x43reateMemberResponse\x12\x33\n\x06member\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.members.MemberR\x06member\"\x83\x03\n\x0cUpdateMember\x12.\n\nfirst_name\x18\x06 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01H\x00R\tfirstName\x88\x01\x01\x12,\n\tlast_name\x18\x07 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01H\x01R\x08lastName\x88\x01\x01\x12\x66\n\x08metadata\x18\t \x03(\x0b\x32/.scalekit.v1.members.UpdateMember.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12G\n\x0cuser_profile\x18\n \x01(\x0b\x32$.scalekit.v1.users.UpdateUserProfileR\x0buserProfile\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\r\n\x0b_first_nameB\x0c\n\n_last_nameJ\x04\x08\x04\x10\x05J\x04\x08\x08\x10\t\"W\n\x1aUpdateCurrentMemberRequest\x12\x39\n\x06member\x18\x01 \x01(\x0b\x32!.scalekit.v1.members.UpdateMemberR\x06member\"k\n\x13UpdateMemberRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x13\x18\x19R\x02id\x12\x39\n\x06member\x18\x02 \x01(\x0b\x32!.scalekit.v1.members.UpdateMemberR\x06member\"K\n\x14UpdateMemberResponse\x12\x33\n\x06member\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.members.MemberR\x06member\"\x19\n\x17GetCurrentMemberRequest\"-\n\x10GetMemberRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x13\x18\x19R\x02id\"H\n\x11GetMemberResponse\x12\x33\n\x06member\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.members.MemberR\x06member\"O\n\x11ListMemberRequest\x12\x1b\n\tpage_size\x18\x01 \x01(\rR\x08pageSize\x12\x1d\n\npage_token\x18\x02 \x01(\tR\tpageToken\"\x92\x01\n\x12ListMemberResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12\x35\n\x07members\x18\x03 \x03(\x0b\x32\x1b.scalekit.v1.members.MemberR\x07members\"0\n\x13\x44\x65leteMemberRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x13\x18\x19R\x02id*>\n\nMemberRole\x12\x1b\n\x17MEMBER_ROLE_UNSPECIFIED\x10\x00\x12\t\n\x05\x41\x44MIN\x10\x01\x12\x08\n\x04USER\x10\x02\x32\xbf\x08\n\x0eMembersService\x12\x99\x01\n\x0c\x43reateMember\x12(.scalekit.v1.members.CreateMemberRequest\x1a).scalekit.v1.members.CreateMemberResponse\"4\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\"\x0f/api/v1/members:\x06member\x12\xac\x01\n\x13UpdateCurrentMember\x12/.scalekit.v1.members.UpdateCurrentMemberRequest\x1a).scalekit.v1.members.UpdateMemberResponse\"9\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\x32\x14/api/v1/members:this:\x06member\x12\x9e\x01\n\x0cUpdateMember\x12(.scalekit.v1.members.UpdateMemberRequest\x1a).scalekit.v1.members.UpdateMemberResponse\"9\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\x32\x14/api/v1/members/{id}:\x06member\x12\x9b\x01\n\x10GetCurrentMember\x12,.scalekit.v1.members.GetCurrentMemberRequest\x1a&.scalekit.v1.members.GetMemberResponse\"1\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/members:this\x12\x8d\x01\n\tGetMember\x12%.scalekit.v1.members.GetMemberRequest\x1a&.scalekit.v1.members.GetMemberResponse\"1\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/members/{id}\x12\x8c\x01\n\x0bListMembers\x12&.scalekit.v1.members.ListMemberRequest\x1a\'.scalekit.v1.members.ListMemberResponse\",\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x11\x12\x0f/api/v1/members\x12\x83\x01\n\x0c\x44\x65leteMember\x12(.scalekit.v1.members.DeleteMemberRequest\x1a\x16.google.protobuf.Empty\"1\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x16*\x14/api/v1/members/{id}B3Z1github.com/scalekit-inc/scalekit/pkg/grpc/membersb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -64,51 +65,51 @@ _globals['_DELETEMEMBERREQUEST'].fields_by_name['id']._loaded_options = None _globals['_DELETEMEMBERREQUEST'].fields_by_name['id']._serialized_options = b'\272H\006r\004\020\023\030\031' _globals['_MEMBERSSERVICE'].methods_by_name['CreateMember']._loaded_options = None - _globals['_MEMBERSSERVICE'].methods_by_name['CreateMember']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\031\"\017/api/v1/members:\006member' + _globals['_MEMBERSSERVICE'].methods_by_name['CreateMember']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\031\"\017/api/v1/members:\006member' _globals['_MEMBERSSERVICE'].methods_by_name['UpdateCurrentMember']._loaded_options = None - _globals['_MEMBERSSERVICE'].methods_by_name['UpdateCurrentMember']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\0362\024/api/v1/members:this:\006member' + _globals['_MEMBERSSERVICE'].methods_by_name['UpdateCurrentMember']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\0362\024/api/v1/members:this:\006member' _globals['_MEMBERSSERVICE'].methods_by_name['UpdateMember']._loaded_options = None - _globals['_MEMBERSSERVICE'].methods_by_name['UpdateMember']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\0362\024/api/v1/members/{id}:\006member' + _globals['_MEMBERSSERVICE'].methods_by_name['UpdateMember']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\0362\024/api/v1/members/{id}:\006member' _globals['_MEMBERSSERVICE'].methods_by_name['GetCurrentMember']._loaded_options = None - _globals['_MEMBERSSERVICE'].methods_by_name['GetCurrentMember']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\026\022\024/api/v1/members:this' + _globals['_MEMBERSSERVICE'].methods_by_name['GetCurrentMember']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\026\022\024/api/v1/members:this' _globals['_MEMBERSSERVICE'].methods_by_name['GetMember']._loaded_options = None - _globals['_MEMBERSSERVICE'].methods_by_name['GetMember']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\026\022\024/api/v1/members/{id}' + _globals['_MEMBERSSERVICE'].methods_by_name['GetMember']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\026\022\024/api/v1/members/{id}' _globals['_MEMBERSSERVICE'].methods_by_name['ListMembers']._loaded_options = None - _globals['_MEMBERSSERVICE'].methods_by_name['ListMembers']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\021\022\017/api/v1/members' + _globals['_MEMBERSSERVICE'].methods_by_name['ListMembers']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\021\022\017/api/v1/members' _globals['_MEMBERSSERVICE'].methods_by_name['DeleteMember']._loaded_options = None - _globals['_MEMBERSSERVICE'].methods_by_name['DeleteMember']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\026*\024/api/v1/members/{id}' - _globals['_MEMBERROLE']._serialized_start=2572 - _globals['_MEMBERROLE']._serialized_end=2634 - _globals['_MEMBER']._serialized_start=362 - _globals['_MEMBER']._serialized_end=1316 - _globals['_MEMBER_METADATAENTRY']._serialized_start=1195 - _globals['_MEMBER_METADATAENTRY']._serialized_end=1254 - _globals['_CREATEMEMBERREQUEST']._serialized_start=1318 - _globals['_CREATEMEMBERREQUEST']._serialized_end=1400 - _globals['_CREATEMEMBERRESPONSE']._serialized_start=1402 - _globals['_CREATEMEMBERRESPONSE']._serialized_end=1477 - _globals['_UPDATEMEMBER']._serialized_start=1480 - _globals['_UPDATEMEMBER']._serialized_end=1867 - _globals['_UPDATEMEMBER_METADATAENTRY']._serialized_start=1195 - _globals['_UPDATEMEMBER_METADATAENTRY']._serialized_end=1254 - _globals['_UPDATECURRENTMEMBERREQUEST']._serialized_start=1869 - _globals['_UPDATECURRENTMEMBERREQUEST']._serialized_end=1956 - _globals['_UPDATEMEMBERREQUEST']._serialized_start=1958 - _globals['_UPDATEMEMBERREQUEST']._serialized_end=2065 - _globals['_UPDATEMEMBERRESPONSE']._serialized_start=2067 - _globals['_UPDATEMEMBERRESPONSE']._serialized_end=2142 - _globals['_GETCURRENTMEMBERREQUEST']._serialized_start=2144 - _globals['_GETCURRENTMEMBERREQUEST']._serialized_end=2169 - _globals['_GETMEMBERREQUEST']._serialized_start=2171 - _globals['_GETMEMBERREQUEST']._serialized_end=2216 - _globals['_GETMEMBERRESPONSE']._serialized_start=2218 - _globals['_GETMEMBERRESPONSE']._serialized_end=2290 - _globals['_LISTMEMBERREQUEST']._serialized_start=2292 - _globals['_LISTMEMBERREQUEST']._serialized_end=2371 - _globals['_LISTMEMBERRESPONSE']._serialized_start=2374 - _globals['_LISTMEMBERRESPONSE']._serialized_end=2520 - _globals['_DELETEMEMBERREQUEST']._serialized_start=2522 - _globals['_DELETEMEMBERREQUEST']._serialized_end=2570 - _globals['_MEMBERSSERVICE']._serialized_start=2637 - _globals['_MEMBERSSERVICE']._serialized_end=3616 + _globals['_MEMBERSSERVICE'].methods_by_name['DeleteMember']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\026*\024/api/v1/members/{id}' + _globals['_MEMBERROLE']._serialized_start=2601 + _globals['_MEMBERROLE']._serialized_end=2663 + _globals['_MEMBER']._serialized_start=391 + _globals['_MEMBER']._serialized_end=1345 + _globals['_MEMBER_METADATAENTRY']._serialized_start=1224 + _globals['_MEMBER_METADATAENTRY']._serialized_end=1283 + _globals['_CREATEMEMBERREQUEST']._serialized_start=1347 + _globals['_CREATEMEMBERREQUEST']._serialized_end=1429 + _globals['_CREATEMEMBERRESPONSE']._serialized_start=1431 + _globals['_CREATEMEMBERRESPONSE']._serialized_end=1506 + _globals['_UPDATEMEMBER']._serialized_start=1509 + _globals['_UPDATEMEMBER']._serialized_end=1896 + _globals['_UPDATEMEMBER_METADATAENTRY']._serialized_start=1224 + _globals['_UPDATEMEMBER_METADATAENTRY']._serialized_end=1283 + _globals['_UPDATECURRENTMEMBERREQUEST']._serialized_start=1898 + _globals['_UPDATECURRENTMEMBERREQUEST']._serialized_end=1985 + _globals['_UPDATEMEMBERREQUEST']._serialized_start=1987 + _globals['_UPDATEMEMBERREQUEST']._serialized_end=2094 + _globals['_UPDATEMEMBERRESPONSE']._serialized_start=2096 + _globals['_UPDATEMEMBERRESPONSE']._serialized_end=2171 + _globals['_GETCURRENTMEMBERREQUEST']._serialized_start=2173 + _globals['_GETCURRENTMEMBERREQUEST']._serialized_end=2198 + _globals['_GETMEMBERREQUEST']._serialized_start=2200 + _globals['_GETMEMBERREQUEST']._serialized_end=2245 + _globals['_GETMEMBERRESPONSE']._serialized_start=2247 + _globals['_GETMEMBERRESPONSE']._serialized_end=2319 + _globals['_LISTMEMBERREQUEST']._serialized_start=2321 + _globals['_LISTMEMBERREQUEST']._serialized_end=2400 + _globals['_LISTMEMBERRESPONSE']._serialized_start=2403 + _globals['_LISTMEMBERRESPONSE']._serialized_end=2549 + _globals['_DELETEMEMBERREQUEST']._serialized_start=2551 + _globals['_DELETEMEMBERREQUEST']._serialized_end=2599 + _globals['_MEMBERSSERVICE']._serialized_start=2666 + _globals['_MEMBERSSERVICE']._serialized_end=3753 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/members/members_pb2.pyi b/scalekit/v1/members/members_pb2.pyi index 23e0f61..beac5a8 100644 --- a/scalekit/v1/members/members_pb2.pyi +++ b/scalekit/v1/members/members_pb2.pyi @@ -1,6 +1,7 @@ from buf.validate import validate_pb2 as _validate_pb2 from google.api import annotations_pb2 as _annotations_pb2 from google.api import field_behavior_pb2 as _field_behavior_pb2 +from google.api import visibility_pb2 as _visibility_pb2 from google.protobuf import empty_pb2 as _empty_pb2 from google.protobuf import timestamp_pb2 as _timestamp_pb2 from protoc_gen_openapiv2.options import annotations_pb2 as _annotations_pb2_1 diff --git a/scalekit/v1/migrations/migrations_pb2.py b/scalekit/v1/migrations/migrations_pb2.py index 386aa80..9eadb56 100644 --- a/scalekit/v1/migrations/migrations_pb2.py +++ b/scalekit/v1/migrations/migrations_pb2.py @@ -21,7 +21,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'scalekit/v1/migrations/migrations.proto\x12\x16scalekit.v1.migrations\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"~\n\x18MigrationServiceResponse\x12\x31\n\x14success_environments\x18\x01 \x01(\x05R\x13successEnvironments\x12/\n\x13\x66\x61iled_environments\x18\x02 \x01(\x05R\x12\x66\x61iledEnvironments\"f\n\x14MigrationSAMLRequest\x12\'\n\x0f\x65nvironment_ids\x18\x01 \x03(\x03R\x0e\x65nvironmentIds\x12%\n\nbatch_size\x18\x02 \x01(\x05\x42\x06\xbaH\x03\xc8\x01\x01R\tbatchSize\"\xad\x01\n\x11MigrateFSARequest\x12\'\n\x0f\x65nvironment_ids\x18\x01 \x03(\x03R\x0e\x65nvironmentIds\x12H\n\tdata_type\x18\x02 \x01(\x0e\x32#.scalekit.v1.migrations.FSADataTypeB\x06\xbaH\x03\xc8\x01\x01R\x08\x64\x61taType\x12%\n\nbatch_size\x18\x03 \x01(\x05\x42\x06\xbaH\x03\xc8\x01\x01R\tbatchSize\"z\n\x14MigrationFSAResponse\x12\x31\n\x14success_environments\x18\x01 \x01(\x05R\x13successEnvironments\x12/\n\x13\x66\x61iled_environments\x18\x02 \x01(\x05R\x12\x66\x61iledEnvironments\"\x91\x01\n\x1dMigrateStripeCustomersRequest\x12p\n\x18migrate_stripe_customers\x18\x01 \x01(\x0b\x32..scalekit.v1.migrations.MigrateStripeCustomersB\x06\xbaH\x03\xc8\x01\x01R\x16migrateStripeCustomers\"\xad\x01\n\x16MigrateStripeCustomers\x12#\n\rworkspace_ids\x18\x01 \x03(\x03R\x0cworkspaceIds\x12\x1b\n\tplan_name\x18\x02 \x01(\tR\x08planName\x12\x1d\n\nbatch_size\x18\x03 \x01(\x05R\tbatchSize\x12\x32\n\x15include_test_accounts\x18\x04 \x01(\x08R\x13includeTestAccounts\"\xc1\x01\n\x1eMigrateStripeCustomersResponse\x12#\n\rsuccess_count\x18\x01 \x01(\x05R\x0csuccessCount\x12!\n\x0c\x66\x61iled_count\x18\x02 \x01(\x05R\x0b\x66\x61iledCount\x12\x30\n\x14\x66\x61iled_workspace_ids\x18\x03 \x03(\x03R\x12\x66\x61iledWorkspaceIds\x12%\n\x0e\x65rror_messages\x18\x04 \x03(\tR\rerrorMessages\"{\n\x15MigrationSAMLResponse\x12\x31\n\x14success_environments\x18\x01 \x01(\x05R\x13successEnvironments\x12/\n\x13\x66\x61iled_environments\x18\x02 \x01(\x05R\x12\x66\x61iledEnvironments\"\x96\x02\n\x1aMigrateWorkspaceFGARequest\x12#\n\rworkspace_ids\x18\x01 \x03(\x03R\x0cworkspaceIds\x12\x14\n\x05\x61sync\x18\x02 \x01(\x08R\x05\x61sync\x12)\n\x10organization_ids\x18\x03 \x03(\x03R\x0forganizationIds\x12#\n\rdirectory_ids\x18\x04 \x03(\x03R\x0c\x64irectoryIds\x12%\n\x0e\x63onnection_ids\x18\x05 \x03(\x03R\rconnectionIds\x12\x1d\n\nclient_ids\x18\x06 \x03(\x03R\tclientIds\x12\'\n\x0f\x65nvironment_ids\x18\x07 \x03(\x03R\x0e\x65nvironmentIds\"2\n\x0ePermissionList\x12 \n\x0bpermissions\x18\x01 \x03(\tR\x0bpermissions\"\xbb\x02\n\x1dMigrateRolePermissionsRequest\x12}\n\x10role_permissions\x18\x01 \x03(\x0b\x32J.scalekit.v1.migrations.MigrateRolePermissionsRequest.RolePermissionsEntryB\x06\xbaH\x03\xc8\x01\x01R\x0frolePermissions\x12/\n\x0f\x65nvironment_ids\x18\x02 \x03(\x03\x42\x06\xbaH\x03\xc8\x01\x01R\x0e\x65nvironmentIds\x1aj\n\x14RolePermissionsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12<\n\x05value\x18\x02 \x01(\x0b\x32&.scalekit.v1.migrations.PermissionListR\x05value:\x02\x38\x01\"\xca\x02\n\x1eMigrateRolePermissionsResponse\x12\x31\n\x14success_environments\x18\x01 \x01(\x05R\x13successEnvironments\x12/\n\x13\x66\x61iled_environments\x18\x02 \x01(\x05R\x12\x66\x61iledEnvironments\x12%\n\x0e\x65rror_messages\x18\x03 \x03(\tR\rerrorMessages\x12#\n\rroles_created\x18\x04 \x01(\x05R\x0crolesCreated\x12/\n\x13permissions_created\x18\x05 \x01(\x05R\x12permissionsCreated\x12G\n role_permission_mappings_created\x18\x06 \x01(\x05R\x1drolePermissionMappingsCreated*\x88\x01\n\x0b\x46SADataType\x12\x1d\n\x19\x46SA_DATA_TYPE_UNSPECIFIED\x10\x00\x12\x1c\n\x18\x46SA_DATA_TYPE_CONNECTION\x10\x01\x12\x19\n\x15\x46SA_DATA_TYPE_SESSION\x10\x02\x12!\n\x1d\x46SA_DATA_TYPE_USER_MANAGEMENT\x10\x03\x32\xf7\x05\n\x10MigrationService\x12\x9c\x01\n\x0eMigrateFSAData\x12).scalekit.v1.migrations.MigrateFSARequest\x1a,.scalekit.v1.migrations.MigrationFSAResponse\"1\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x16\"\x14/migrations/fsa-data\x12\xdc\x01\n\x16MigrateStripeCustomers\x12\x35.scalekit.v1.migrations.MigrateStripeCustomersRequest\x1a\x36.scalekit.v1.migrations.MigrateStripeCustomersResponse\"S\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x38\"\x1c/migrations/stripe-customers:\x18migrate_stripe_customers\x12\x9c\x01\n\x13MigrateWorkspaceFGA\x12\x32.scalekit.v1.migrations.MigrateWorkspaceFGARequest\x1a\x16.google.protobuf.Empty\"9\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\"\x19/migrations/workspace-fga:\x01*\x12\xc5\x01\n\x16MigrateRolePermissions\x12\x35.scalekit.v1.migrations.MigrateRolePermissionsRequest\x1a\x36.scalekit.v1.migrations.MigrateRolePermissionsResponse\"<\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\"\x1c/migrations/role-permissions:\x01*B6Z4github.com/scalekit-inc/scalekit/pkg/grpc/migrationsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'scalekit/v1/migrations/migrations.proto\x12\x16scalekit.v1.migrations\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"@\n\x15MigrateEnvKeysRequest\x12\'\n\x0f\x65nvironment_ids\x18\x01 \x03(\tR\x0e\x65nvironmentIds\"O\n\x16MigrateEnvKeysResponse\x12\x35\n\x16\x65nvironments_processed\x18\x01 \x01(\x05R\x15\x65nvironmentsProcessed\"~\n\x18MigrationServiceResponse\x12\x31\n\x14success_environments\x18\x01 \x01(\x05R\x13successEnvironments\x12/\n\x13\x66\x61iled_environments\x18\x02 \x01(\x05R\x12\x66\x61iledEnvironments\"f\n\x14MigrationSAMLRequest\x12\'\n\x0f\x65nvironment_ids\x18\x01 \x03(\x03R\x0e\x65nvironmentIds\x12%\n\nbatch_size\x18\x02 \x01(\x05\x42\x06\xbaH\x03\xc8\x01\x01R\tbatchSize\"\xad\x01\n\x11MigrateFSARequest\x12\'\n\x0f\x65nvironment_ids\x18\x01 \x03(\x03R\x0e\x65nvironmentIds\x12H\n\tdata_type\x18\x02 \x01(\x0e\x32#.scalekit.v1.migrations.FSADataTypeB\x06\xbaH\x03\xc8\x01\x01R\x08\x64\x61taType\x12%\n\nbatch_size\x18\x03 \x01(\x05\x42\x06\xbaH\x03\xc8\x01\x01R\tbatchSize\"z\n\x14MigrationFSAResponse\x12\x31\n\x14success_environments\x18\x01 \x01(\x05R\x13successEnvironments\x12/\n\x13\x66\x61iled_environments\x18\x02 \x01(\x05R\x12\x66\x61iledEnvironments\"\x91\x01\n\x1dMigrateStripeCustomersRequest\x12p\n\x18migrate_stripe_customers\x18\x01 \x01(\x0b\x32..scalekit.v1.migrations.MigrateStripeCustomersB\x06\xbaH\x03\xc8\x01\x01R\x16migrateStripeCustomers\"\xad\x01\n\x16MigrateStripeCustomers\x12#\n\rworkspace_ids\x18\x01 \x03(\x03R\x0cworkspaceIds\x12\x1b\n\tplan_name\x18\x02 \x01(\tR\x08planName\x12\x1d\n\nbatch_size\x18\x03 \x01(\x05R\tbatchSize\x12\x32\n\x15include_test_accounts\x18\x04 \x01(\x08R\x13includeTestAccounts\"\xc1\x01\n\x1eMigrateStripeCustomersResponse\x12#\n\rsuccess_count\x18\x01 \x01(\x05R\x0csuccessCount\x12!\n\x0c\x66\x61iled_count\x18\x02 \x01(\x05R\x0b\x66\x61iledCount\x12\x30\n\x14\x66\x61iled_workspace_ids\x18\x03 \x03(\x03R\x12\x66\x61iledWorkspaceIds\x12%\n\x0e\x65rror_messages\x18\x04 \x03(\tR\rerrorMessages\"{\n\x15MigrationSAMLResponse\x12\x31\n\x14success_environments\x18\x01 \x01(\x05R\x13successEnvironments\x12/\n\x13\x66\x61iled_environments\x18\x02 \x01(\x05R\x12\x66\x61iledEnvironments\"\x96\x02\n\x1aMigrateWorkspaceFGARequest\x12#\n\rworkspace_ids\x18\x01 \x03(\x03R\x0cworkspaceIds\x12\x14\n\x05\x61sync\x18\x02 \x01(\x08R\x05\x61sync\x12)\n\x10organization_ids\x18\x03 \x03(\x03R\x0forganizationIds\x12#\n\rdirectory_ids\x18\x04 \x03(\x03R\x0c\x64irectoryIds\x12%\n\x0e\x63onnection_ids\x18\x05 \x03(\x03R\rconnectionIds\x12\x1d\n\nclient_ids\x18\x06 \x03(\x03R\tclientIds\x12\'\n\x0f\x65nvironment_ids\x18\x07 \x03(\x03R\x0e\x65nvironmentIds\"2\n\x0ePermissionList\x12 \n\x0bpermissions\x18\x01 \x03(\tR\x0bpermissions\"\xbb\x02\n\x1dMigrateRolePermissionsRequest\x12}\n\x10role_permissions\x18\x01 \x03(\x0b\x32J.scalekit.v1.migrations.MigrateRolePermissionsRequest.RolePermissionsEntryB\x06\xbaH\x03\xc8\x01\x01R\x0frolePermissions\x12/\n\x0f\x65nvironment_ids\x18\x02 \x03(\x03\x42\x06\xbaH\x03\xc8\x01\x01R\x0e\x65nvironmentIds\x1aj\n\x14RolePermissionsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12<\n\x05value\x18\x02 \x01(\x0b\x32&.scalekit.v1.migrations.PermissionListR\x05value:\x02\x38\x01\"\xca\x02\n\x1eMigrateRolePermissionsResponse\x12\x31\n\x14success_environments\x18\x01 \x01(\x05R\x13successEnvironments\x12/\n\x13\x66\x61iled_environments\x18\x02 \x01(\x05R\x12\x66\x61iledEnvironments\x12%\n\x0e\x65rror_messages\x18\x03 \x03(\tR\rerrorMessages\x12#\n\rroles_created\x18\x04 \x01(\x05R\x0crolesCreated\x12/\n\x13permissions_created\x18\x05 \x01(\x05R\x12permissionsCreated\x12G\n role_permission_mappings_created\x18\x06 \x01(\x05R\x1drolePermissionMappingsCreated*\x88\x01\n\x0b\x46SADataType\x12\x1d\n\x19\x46SA_DATA_TYPE_UNSPECIFIED\x10\x00\x12\x1c\n\x18\x46SA_DATA_TYPE_CONNECTION\x10\x01\x12\x19\n\x15\x46SA_DATA_TYPE_SESSION\x10\x02\x12!\n\x1d\x46SA_DATA_TYPE_USER_MANAGEMENT\x10\x03\x32\x8f\n\n\x10MigrationService\x12\x9c\x01\n\x0eMigrateFSAData\x12).scalekit.v1.migrations.MigrateFSARequest\x1a,.scalekit.v1.migrations.MigrationFSAResponse\"1\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x16\"\x14/migrations/fsa-data\x12\xdc\x01\n\x16MigrateStripeCustomers\x12\x35.scalekit.v1.migrations.MigrateStripeCustomersRequest\x1a\x36.scalekit.v1.migrations.MigrateStripeCustomersResponse\"S\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x38\"\x1c/migrations/stripe-customers:\x18migrate_stripe_customers\x12\x9c\x01\n\x13MigrateWorkspaceFGA\x12\x32.scalekit.v1.migrations.MigrateWorkspaceFGARequest\x1a\x16.google.protobuf.Empty\"9\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\"\x19/migrations/workspace-fga:\x01*\x12\xc5\x01\n\x16MigrateRolePermissions\x12\x35.scalekit.v1.migrations.MigrateRolePermissionsRequest\x1a\x36.scalekit.v1.migrations.MigrateRolePermissionsResponse\"<\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\"\x1c/migrations/role-permissions:\x01*\x12\x95\x04\n\x0eMigrateEnvKeys\x12-.scalekit.v1.migrations.MigrateEnvKeysRequest\x1a..scalekit.v1.migrations.MigrateEnvKeysResponse\"\xa3\x03\x92\x41\xeb\x02\n\x0eKey Management\x12&Ensure DEKs for specified environments\x1a\xb0\x02\x45nsures each listed environment has at least one active DEK. Only callable from the Scalekit platform environment. Provide environment_ids (e.g. env_123) in the request. Creates a DEK only for environments that do not have one (idempotent per environment). Use to backfill DEKs for specific environments.\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\"\x14/migrations/env-keys:\x01*B6Z4github.com/scalekit-inc/scalekit/pkg/grpc/migrationsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -51,34 +51,40 @@ _globals['_MIGRATIONSERVICE'].methods_by_name['MigrateWorkspaceFGA']._serialized_options = b'\202\265\030\002\030\001\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\036\"\031/migrations/workspace-fga:\001*' _globals['_MIGRATIONSERVICE'].methods_by_name['MigrateRolePermissions']._loaded_options = None _globals['_MIGRATIONSERVICE'].methods_by_name['MigrateRolePermissions']._serialized_options = b'\202\265\030\002\030\001\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002!\"\034/migrations/role-permissions:\001*' - _globals['_FSADATATYPE']._serialized_start=2464 - _globals['_FSADATATYPE']._serialized_end=2600 - _globals['_MIGRATIONSERVICERESPONSE']._serialized_start=302 - _globals['_MIGRATIONSERVICERESPONSE']._serialized_end=428 - _globals['_MIGRATIONSAMLREQUEST']._serialized_start=430 - _globals['_MIGRATIONSAMLREQUEST']._serialized_end=532 - _globals['_MIGRATEFSAREQUEST']._serialized_start=535 - _globals['_MIGRATEFSAREQUEST']._serialized_end=708 - _globals['_MIGRATIONFSARESPONSE']._serialized_start=710 - _globals['_MIGRATIONFSARESPONSE']._serialized_end=832 - _globals['_MIGRATESTRIPECUSTOMERSREQUEST']._serialized_start=835 - _globals['_MIGRATESTRIPECUSTOMERSREQUEST']._serialized_end=980 - _globals['_MIGRATESTRIPECUSTOMERS']._serialized_start=983 - _globals['_MIGRATESTRIPECUSTOMERS']._serialized_end=1156 - _globals['_MIGRATESTRIPECUSTOMERSRESPONSE']._serialized_start=1159 - _globals['_MIGRATESTRIPECUSTOMERSRESPONSE']._serialized_end=1352 - _globals['_MIGRATIONSAMLRESPONSE']._serialized_start=1354 - _globals['_MIGRATIONSAMLRESPONSE']._serialized_end=1477 - _globals['_MIGRATEWORKSPACEFGAREQUEST']._serialized_start=1480 - _globals['_MIGRATEWORKSPACEFGAREQUEST']._serialized_end=1758 - _globals['_PERMISSIONLIST']._serialized_start=1760 - _globals['_PERMISSIONLIST']._serialized_end=1810 - _globals['_MIGRATEROLEPERMISSIONSREQUEST']._serialized_start=1813 - _globals['_MIGRATEROLEPERMISSIONSREQUEST']._serialized_end=2128 - _globals['_MIGRATEROLEPERMISSIONSREQUEST_ROLEPERMISSIONSENTRY']._serialized_start=2022 - _globals['_MIGRATEROLEPERMISSIONSREQUEST_ROLEPERMISSIONSENTRY']._serialized_end=2128 - _globals['_MIGRATEROLEPERMISSIONSRESPONSE']._serialized_start=2131 - _globals['_MIGRATEROLEPERMISSIONSRESPONSE']._serialized_end=2461 - _globals['_MIGRATIONSERVICE']._serialized_start=2603 - _globals['_MIGRATIONSERVICE']._serialized_end=3362 + _globals['_MIGRATIONSERVICE'].methods_by_name['MigrateEnvKeys']._loaded_options = None + _globals['_MIGRATIONSERVICE'].methods_by_name['MigrateEnvKeys']._serialized_options = b'\222A\353\002\n\016Key Management\022&Ensure DEKs for specified environments\032\260\002Ensures each listed environment has at least one active DEK. Only callable from the Scalekit platform environment. Provide environment_ids (e.g. env_123) in the request. Creates a DEK only for environments that do not have one (idempotent per environment). Use to backfill DEKs for specific environments.\202\265\030\002\030\001\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\031\"\024/migrations/env-keys:\001*' + _globals['_FSADATATYPE']._serialized_start=2611 + _globals['_FSADATATYPE']._serialized_end=2747 + _globals['_MIGRATEENVKEYSREQUEST']._serialized_start=302 + _globals['_MIGRATEENVKEYSREQUEST']._serialized_end=366 + _globals['_MIGRATEENVKEYSRESPONSE']._serialized_start=368 + _globals['_MIGRATEENVKEYSRESPONSE']._serialized_end=447 + _globals['_MIGRATIONSERVICERESPONSE']._serialized_start=449 + _globals['_MIGRATIONSERVICERESPONSE']._serialized_end=575 + _globals['_MIGRATIONSAMLREQUEST']._serialized_start=577 + _globals['_MIGRATIONSAMLREQUEST']._serialized_end=679 + _globals['_MIGRATEFSAREQUEST']._serialized_start=682 + _globals['_MIGRATEFSAREQUEST']._serialized_end=855 + _globals['_MIGRATIONFSARESPONSE']._serialized_start=857 + _globals['_MIGRATIONFSARESPONSE']._serialized_end=979 + _globals['_MIGRATESTRIPECUSTOMERSREQUEST']._serialized_start=982 + _globals['_MIGRATESTRIPECUSTOMERSREQUEST']._serialized_end=1127 + _globals['_MIGRATESTRIPECUSTOMERS']._serialized_start=1130 + _globals['_MIGRATESTRIPECUSTOMERS']._serialized_end=1303 + _globals['_MIGRATESTRIPECUSTOMERSRESPONSE']._serialized_start=1306 + _globals['_MIGRATESTRIPECUSTOMERSRESPONSE']._serialized_end=1499 + _globals['_MIGRATIONSAMLRESPONSE']._serialized_start=1501 + _globals['_MIGRATIONSAMLRESPONSE']._serialized_end=1624 + _globals['_MIGRATEWORKSPACEFGAREQUEST']._serialized_start=1627 + _globals['_MIGRATEWORKSPACEFGAREQUEST']._serialized_end=1905 + _globals['_PERMISSIONLIST']._serialized_start=1907 + _globals['_PERMISSIONLIST']._serialized_end=1957 + _globals['_MIGRATEROLEPERMISSIONSREQUEST']._serialized_start=1960 + _globals['_MIGRATEROLEPERMISSIONSREQUEST']._serialized_end=2275 + _globals['_MIGRATEROLEPERMISSIONSREQUEST_ROLEPERMISSIONSENTRY']._serialized_start=2169 + _globals['_MIGRATEROLEPERMISSIONSREQUEST_ROLEPERMISSIONSENTRY']._serialized_end=2275 + _globals['_MIGRATEROLEPERMISSIONSRESPONSE']._serialized_start=2278 + _globals['_MIGRATEROLEPERMISSIONSRESPONSE']._serialized_end=2608 + _globals['_MIGRATIONSERVICE']._serialized_start=2750 + _globals['_MIGRATIONSERVICE']._serialized_end=4045 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/migrations/migrations_pb2.pyi b/scalekit/v1/migrations/migrations_pb2.pyi index 42ffaf4..720a665 100644 --- a/scalekit/v1/migrations/migrations_pb2.pyi +++ b/scalekit/v1/migrations/migrations_pb2.pyi @@ -24,6 +24,18 @@ FSA_DATA_TYPE_CONNECTION: FSADataType FSA_DATA_TYPE_SESSION: FSADataType FSA_DATA_TYPE_USER_MANAGEMENT: FSADataType +class MigrateEnvKeysRequest(_message.Message): + __slots__ = ("environment_ids",) + ENVIRONMENT_IDS_FIELD_NUMBER: _ClassVar[int] + environment_ids: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, environment_ids: _Optional[_Iterable[str]] = ...) -> None: ... + +class MigrateEnvKeysResponse(_message.Message): + __slots__ = ("environments_processed",) + ENVIRONMENTS_PROCESSED_FIELD_NUMBER: _ClassVar[int] + environments_processed: int + def __init__(self, environments_processed: _Optional[int] = ...) -> None: ... + class MigrationServiceResponse(_message.Message): __slots__ = ("success_environments", "failed_environments") SUCCESS_ENVIRONMENTS_FIELD_NUMBER: _ClassVar[int] diff --git a/scalekit/v1/migrations/migrations_pb2_grpc.py b/scalekit/v1/migrations/migrations_pb2_grpc.py index d5b5796..b039e15 100644 --- a/scalekit/v1/migrations/migrations_pb2_grpc.py +++ b/scalekit/v1/migrations/migrations_pb2_grpc.py @@ -35,6 +35,11 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateRolePermissionsRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateRolePermissionsResponse.FromString, ) + self.MigrateEnvKeys = channel.unary_unary( + '/scalekit.v1.migrations.MigrationService/MigrateEnvKeys', + request_serializer=scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateEnvKeysRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateEnvKeysResponse.FromString, + ) class MigrationServiceServicer(object): @@ -64,6 +69,12 @@ def MigrateRolePermissions(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def MigrateEnvKeys(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def add_MigrationServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -87,6 +98,11 @@ def add_MigrationServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateRolePermissionsRequest.FromString, response_serializer=scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateRolePermissionsResponse.SerializeToString, ), + 'MigrateEnvKeys': grpc.unary_unary_rpc_method_handler( + servicer.MigrateEnvKeys, + request_deserializer=scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateEnvKeysRequest.FromString, + response_serializer=scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateEnvKeysResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'scalekit.v1.migrations.MigrationService', rpc_method_handlers) @@ -164,3 +180,20 @@ def MigrateRolePermissions(request, scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateRolePermissionsResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def MigrateEnvKeys(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.migrations.MigrationService/MigrateEnvKeys', + scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateEnvKeysRequest.SerializeToString, + scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateEnvKeysResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/options/options_pb2.py b/scalekit/v1/options/options_pb2.py index 02373b9..0f7fe0f 100644 --- a/scalekit/v1/options/options_pb2.py +++ b/scalekit/v1/options/options_pb2.py @@ -15,7 +15,7 @@ from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/options/options.proto\x12\x13scalekit.v1.options\x1a google/protobuf/descriptor.proto\"\xbd\x01\n\nAuthOption\x12X\n\x13\x61uthentication_type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.options.AuthenticationTypeR\x12\x61uthenticationType\x12 \n\x0bpermissions\x18\x01 \x03(\tR\x0bpermissions\x12\x33\n\x06policy\x18\x02 \x01(\x0e\x32\x1b.scalekit.v1.options.PolicyR\x06policy**\n\x06Policy\x12\x08\n\x04\x44\x45NY\x10\x00\x12\x0b\n\x07PARTIAL\x10\x01\x12\t\n\x05\x41LLOW\x10\x02*\x8f\x03\n\x12\x41uthenticationType\x12\x0b\n\x07\x42LOCKED\x10\x00\x12\x08\n\x04NONE\x10\x01\x12\r\n\tWORKSPACE\x10@\x12\x13\n\x0f\x43USTOMER_PORTAL\x10 \x12\x0b\n\x07SESSION\x10\x10\x12\x15\n\x11WORKSPACE_SESSION\x10P\x12\x14\n\x10WORKSPACE_CLIENT\x10\x44\x12%\n!WORKSPACE_SESSION_CUSTOMER_PORTAL\x10p\x12,\n(WORKSPACE_SESSION_CUSTOMER_PORTAL_CLIENT\x10t\x12$\n WORKSPACE_CUSTOMER_PORTAL_CLIENT\x10\x64\x12\x1d\n\x19WORKSPACE_CUSTOMER_PORTAL\x10`\x12\x08\n\x04USER\x10\x08\x12\n\n\x06\x43LIENT\x10\x04\x12\x12\n\x0eSESSION_CLIENT\x10\x14\x12\x1c\n\x18WORKSPACE_SESSION_CLIENT\x10T\x12\"\n\x1e\x43USTOMER_PORTAL_SESSION_CLIENT\x10\x34:b\n\x0b\x61uth_option\x12\x1e.google.protobuf.MethodOptions\x18\xd0\x86\x03 \x01(\x0b\x32\x1f.scalekit.v1.options.AuthOptionR\nauthOptionB6Z4github.com/scalekit-inc/scalekit/pkg/grpc/authoptionb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/options/options.proto\x12\x13scalekit.v1.options\x1a google/protobuf/descriptor.proto\"\xbd\x01\n\nAuthOption\x12X\n\x13\x61uthentication_type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.options.AuthenticationTypeR\x12\x61uthenticationType\x12 \n\x0bpermissions\x18\x01 \x03(\tR\x0bpermissions\x12\x33\n\x06policy\x18\x02 \x01(\x0e\x32\x1b.scalekit.v1.options.PolicyR\x06policy**\n\x06Policy\x12\x08\n\x04\x44\x45NY\x10\x00\x12\x0b\n\x07PARTIAL\x10\x01\x12\t\n\x05\x41LLOW\x10\x02*\xd5\x05\n\x12\x41uthenticationType\x12\x0b\n\x07\x42LOCKED\x10\x00\x12\x08\n\x04NONE\x10\x01\x12\r\n\tWORKSPACE\x10@\x12\x13\n\x0f\x43USTOMER_PORTAL\x10 \x12\x0b\n\x07SESSION\x10\x10\x12\x15\n\x11WORKSPACE_SESSION\x10P\x12\x14\n\x10WORKSPACE_CLIENT\x10\x44\x12%\n!WORKSPACE_SESSION_CUSTOMER_PORTAL\x10p\x12,\n(WORKSPACE_SESSION_CUSTOMER_PORTAL_CLIENT\x10t\x12$\n WORKSPACE_CUSTOMER_PORTAL_CLIENT\x10\x64\x12\x1d\n\x19WORKSPACE_CUSTOMER_PORTAL\x10`\x12\x08\n\x04USER\x10\x08\x12\n\n\x06\x43LIENT\x10\x04\x12\x12\n\x0eSESSION_CLIENT\x10\x14\x12\x1c\n\x18WORKSPACE_SESSION_CLIENT\x10T\x12\"\n\x1e\x43USTOMER_PORTAL_SESSION_CLIENT\x10\x34\x12\x10\n\x0cSESSION_USER\x10\x18\x12\x13\n\x0e\x41\x43TIONS_PORTAL\x10\x80\x01\x12\x35\n0WORKSPACE_SESSION_CUSTOMER_PORTAL_ACTIONS_PORTAL\x10\xf0\x01\x12<\n7WORKSPACE_SESSION_CUSTOMER_PORTAL_ACTIONS_PORTAL_CLIENT\x10\xf4\x01\x12\x1d\n\x18WORKSPACE_ACTIONS_PORTAL\x10\xc0\x01\x12$\n\x1fWORKSPACE_ACTIONS_PORTAL_CLIENT\x10\xc4\x01\x12\x34\n/WORKSPACE_ACTIONS_PORTAL_CUSTOMER_PORTAL_CLIENT\x10\xe4\x01\x12-\n(WORKSPACE_CUSTOMER_PORTAL_ACTIONS_PORTAL\x10\xe0\x01:b\n\x0b\x61uth_option\x12\x1e.google.protobuf.MethodOptions\x18\xd0\x86\x03 \x01(\x0b\x32\x1f.scalekit.v1.options.AuthOptionR\nauthOptionB6Z4github.com/scalekit-inc/scalekit/pkg/grpc/authoptionb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -26,7 +26,7 @@ _globals['_POLICY']._serialized_start=284 _globals['_POLICY']._serialized_end=326 _globals['_AUTHENTICATIONTYPE']._serialized_start=329 - _globals['_AUTHENTICATIONTYPE']._serialized_end=728 + _globals['_AUTHENTICATIONTYPE']._serialized_end=1054 _globals['_AUTHOPTION']._serialized_start=93 _globals['_AUTHOPTION']._serialized_end=282 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/options/options_pb2.pyi b/scalekit/v1/options/options_pb2.pyi index 6f4fea7..2017e38 100644 --- a/scalekit/v1/options/options_pb2.pyi +++ b/scalekit/v1/options/options_pb2.pyi @@ -31,6 +31,14 @@ class AuthenticationType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): SESSION_CLIENT: _ClassVar[AuthenticationType] WORKSPACE_SESSION_CLIENT: _ClassVar[AuthenticationType] CUSTOMER_PORTAL_SESSION_CLIENT: _ClassVar[AuthenticationType] + SESSION_USER: _ClassVar[AuthenticationType] + ACTIONS_PORTAL: _ClassVar[AuthenticationType] + WORKSPACE_SESSION_CUSTOMER_PORTAL_ACTIONS_PORTAL: _ClassVar[AuthenticationType] + WORKSPACE_SESSION_CUSTOMER_PORTAL_ACTIONS_PORTAL_CLIENT: _ClassVar[AuthenticationType] + WORKSPACE_ACTIONS_PORTAL: _ClassVar[AuthenticationType] + WORKSPACE_ACTIONS_PORTAL_CLIENT: _ClassVar[AuthenticationType] + WORKSPACE_ACTIONS_PORTAL_CUSTOMER_PORTAL_CLIENT: _ClassVar[AuthenticationType] + WORKSPACE_CUSTOMER_PORTAL_ACTIONS_PORTAL: _ClassVar[AuthenticationType] DENY: Policy PARTIAL: Policy ALLOW: Policy @@ -50,6 +58,14 @@ CLIENT: AuthenticationType SESSION_CLIENT: AuthenticationType WORKSPACE_SESSION_CLIENT: AuthenticationType CUSTOMER_PORTAL_SESSION_CLIENT: AuthenticationType +SESSION_USER: AuthenticationType +ACTIONS_PORTAL: AuthenticationType +WORKSPACE_SESSION_CUSTOMER_PORTAL_ACTIONS_PORTAL: AuthenticationType +WORKSPACE_SESSION_CUSTOMER_PORTAL_ACTIONS_PORTAL_CLIENT: AuthenticationType +WORKSPACE_ACTIONS_PORTAL: AuthenticationType +WORKSPACE_ACTIONS_PORTAL_CLIENT: AuthenticationType +WORKSPACE_ACTIONS_PORTAL_CUSTOMER_PORTAL_CLIENT: AuthenticationType +WORKSPACE_CUSTOMER_PORTAL_ACTIONS_PORTAL: AuthenticationType AUTH_OPTION_FIELD_NUMBER: _ClassVar[int] auth_option: _descriptor.FieldDescriptor diff --git a/scalekit/v1/organizations/organizations_pb2.py b/scalekit/v1/organizations/organizations_pb2.py index 3d21c87..a7e5a5b 100644 --- a/scalekit/v1/organizations/organizations_pb2.py +++ b/scalekit/v1/organizations/organizations_pb2.py @@ -28,7 +28,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n-scalekit/v1/organizations/organizations.proto\x12\x19scalekit.v1.organizations\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"\xaf\x01\n\x19\x43reateOrganizationRequest\x12\x91\x01\n\x0corganization\x18\x01 \x01(\x0b\x32-.scalekit.v1.organizations.CreateOrganizationB>\x92\x41\x35\x32\x33Required parameters for creating a new organization\xbaH\x03\xc8\x01\x01R\x0corganization\"\xb9\x01\n\x1a\x43reateOrganizationResponse\x12\x9a\x01\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationBM\x92\x41J2HThe newly created organization containing its ID, settings, and metadataR\x0corganization\"\xa0\x05\n\x12\x43reateOrganization\x12\x84\x01\n\x0c\x64isplay_name\x18\x04 \x01(\tBa\x92\x41Q2?Name of the organization. Must be between 1 and 200 characters.J\x0e\"Megasoft Inc\"\xe0\x41\x02\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\xa0\x01\n\x0bregion_code\x18\x05 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeB^\x92\x41L2DGeographic region code for the organization. Currently limited to USJ\x04\"US\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\nregionCode\x12\x9e\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBx\x92\x41u2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x0e\"my_unique_id\"H\x00R\nexternalId\x88\x01\x01\x12r\n\x08metadata\x18\x07 \x03(\x0b\x32;.scalekit.v1.organizations.CreateOrganization.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_id\"\xe7\x08\n\x0cOrganization\x12{\n\x02id\x18\x01 \x01(\tBk\x92\x41h2MUnique scalekit-generated identifier that uniquely references an organizationJ\x17\"org_59615193906282635\"R\x02id\x12\x8c\x01\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBO\x92\x41I2+Timestamp when the organization was createdJ\x1a\"2025-02-15T06:23:44.560Z\"\xe0\x41\x02R\ncreateTime\x12\x8e\x01\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBQ\x92\x41N20Timestamp when the organization was last updatedJ\x1a\"2025-02-15T06:23:44.560Z\"R\nupdateTime\x12|\n\x0c\x64isplay_name\x18\x04 \x01(\tBY\x92\x41L2>Name of the organization. Must be between 1 and 200 charactersJ\n\"Megasoft\"\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\x92\x01\n\x0bregion_code\x18\x05 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeBP\x92\x41M2EGeographic region code for the organization. Currently limited to US.J\x04\"US\"R\nregionCode\x12\x9e\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBx\x92\x41u2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x0e\"my_unique_id\"H\x00R\nexternalId\x88\x01\x01\x12l\n\x08metadata\x18\x07 \x03(\x0b\x32\x35.scalekit.v1.organizations.Organization.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12K\n\x08settings\x18\x08 \x01(\x0b\x32/.scalekit.v1.organizations.OrganizationSettingsR\x08settings\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_id\"\xe0\x03\n\x19UpdateOrganizationRequest\x12j\n\x02id\x18\x01 \x01(\tBX\x92\x41L23Unique identifier of the organization to be updatedJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\x85\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tBb\x92\x41I2-External ID of the organization to be updatedJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x83\x01\n\x0corganization\x18\x03 \x01(\x0b\x32-.scalekit.v1.organizations.UpdateOrganizationB0\x92\x41\'2%Organization Parameters to be updated\xbaH\x03\xc8\x01\x01R\x0corganization\x12;\n\x0bupdate_mask\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskR\nupdateMaskB\x0c\n\nidentities\"\xe1\x05\n\x12UpdateOrganization\x12\x9e\x01\n\x0c\x64isplay_name\x18\x04 \x01(\tBv\x92\x41i2SName of the organization to display in the UI. Must be between 1 and 200 charactersJ\x12\"Acme Corporation\"\xbaH\x07r\x05\x10\x01\x18\xc8\x01H\x00R\x0b\x64isplayName\x88\x01\x01\x12\x9d\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBw\x92\x41t2bYour application\'s unique identifier for this organization, used to link Scalekit with your systemJ\x0e\"tenant_12345\"H\x01R\nexternalId\x88\x01\x01\x12\xa5\x02\n\x08metadata\x18\x07 \x03(\x0b\x32;.scalekit.v1.organizations.UpdateOrganization.MetadataEntryB\xcb\x01\x92\x41\xae\x01\x32\x8f\x01\x43ustom key-value pairs to store with the organization. Keys must be 3-25 characters, values must be 1-256 characters. Maximum 10 pairs allowed.J\x1a{\"industry\": \"technology\"}\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0f\n\r_display_nameB\x0e\n\x0c_external_idJ\x04\x08\x05\x10\x06\"\x8c\x01\n\x1aUpdateOrganizationResponse\x12n\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationB!\x92\x41\x1e\x32\x1cUpdated organization detailsR\x0corganization\"\xeb\x02\n\x16GetOrganizationRequest\x12\x84\x01\n\x02id\x18\x01 \x01(\tBr\x92\x41\x66\x32MUnique scalekit-generated identifier that uniquely references an organizationJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\xbb\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\x97\x01\x92\x41~2bUnique identifier that links an Organization Object to your app\'s tenant, stored as an External IDJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalIdB\x0c\n\nidentities\"\x8b\x01\n\x17GetOrganizationResponse\x12p\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationB#\x92\x41 2\x1eThe newly created organizationR\x0corganization\"\xe0\x05\n\x18ListOrganizationsRequest\x12t\n\tpage_size\x18\x01 \x01(\rBW\x92\x41T2NMaximum number of organizations to return per page. Must be between 10 and 100J\x02\x33\x30R\x08pageSize\x12\x8f\x01\n\npage_token\x18\x02 \x01(\tBp\x92\x41m2[Pagination token from the previous response. Use to retrieve the next page of organizationsJ\x0e\"\"R\tpageToken\x12\xa8\x01\n\x0b\x65xternal_id\x18\x03 \x01(\tB\x81\x01\x92\x41~2bYour application\'s unique identifier for this organization, used to link Scalekit with your systemJ\x18\"\"H\x00R\nexternalId\x88\x01\x01:\x80\x02\x92\x41\xfc\x01\n\xab\x01*\x12List Organizations2\x94\x01Retrieves a paginated list of all organizations within the environment. Use the `page_token` from the response to access subsequent pages of results*L\n\x12List Organizations\x12\x36https://docs.scalekit.com/reference/list-organizationsB\x0e\n\x0c_external_id\"\xa4\x04\n\x19ListOrganizationsResponse\x12\x97\x01\n\x0fnext_page_token\x18\x01 \x01(\tBo\x92\x41l2UPagination token for the next page of results. Use this token to fetch the next page.J\x13\"\"R\rnextPageToken\x12Y\n\ntotal_size\x18\x02 \x01(\rB:\x92\x41\x37\x32\x31Total number of organizations in the environment.J\x02\x33\x30R\ttotalSize\x12p\n\rorganizations\x18\x03 \x03(\x0b\x32\'.scalekit.v1.organizations.OrganizationB!\x92\x41\x1e\x32\x1cList of organization objectsR\rorganizations\x12\x9f\x01\n\x0fprev_page_token\x18\x04 \x01(\tBw\x92\x41t2]Pagination token for the previous page of results. Use this token to fetch the previous page.J\x13\"\"R\rprevPageToken\"\xa7\x05\n\x1aSearchOrganizationsRequest\x12\xa5\x01\n\x05query\x18\x01 \x01(\tB\x8e\x01\x92\x41\x7f\x32wSearch term to match against organization names, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\x04\x61\x63me\xbaH\tr\x04\x10\x03\x18\x64\xc8\x01\x01R\x05query\x12\x80\x01\n\tpage_size\x18\x02 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x03 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken:\xb5\x01\x92\x41\xb1\x01\n\x88\x01*\x14Search Organizations2pSearch for organizations in your environment using a text query that matches against names, IDs, or external IDs2$query=acme&page_size=30&page_token=1\"\xdb\x01\n\x1bSearchOrganizationsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12M\n\rorganizations\x18\x03 \x03(\x0b\x32\'.scalekit.v1.organizations.OrganizationR\rorganizations\x12&\n\x0fprev_page_token\x18\x04 \x01(\tR\rprevPageToken\"\xad\x02\n\x19\x44\x65leteOrganizationRequest\x12~\n\x02id\x18\x01 \x01(\tBl\x92\x41`2MUnique scalekit-generated identifier that uniquely references an organizationJ\x0f\"org_123456789\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\x81\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB^\x92\x41\x45\x32)External ID of the organization to deleteJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalIdB\x0c\n\nidentities\"\xcf\x04\n\x19GeneratePortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12(\n\x03sso\x18\x02 \x01(\x08\x42\x11\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\x03sso\x88\x01\x01\x12=\n\x0e\x64irectory_sync\x18\x03 \x01(\x08\x42\x11\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\rdirectorySync\x88\x01\x01\x12\xdd\x02\n\x08\x66\x65\x61tures\x18\x04 \x03(\x0e\x32\".scalekit.v1.organizations.FeatureB\x9c\x02\x92\x41\x98\x02\x32\x95\x02\x46\x65\x61tures to enable in the admin portal link. To enable features, append them as URL parameters:\n\n- Single Sign-On: ?features=sso\n- Directory Sync: ?features=dir_sync\n- Both features: ?features=sso&features=dir_sync\n\nExample URL: https://scalekit.com/portal/lnk_123?features=ssoR\x08\x66\x65\x61turesB\x06\n\x04_ssoB\x11\n\x0f_directory_sync\"f\n\x14GetPortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\"i\n\x17\x44\x65letePortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\"\xbe\x01\n\x1b\x44\x65letePortalLinkByIdRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12O\n\x07link_id\x18\x02 \x01(\tB6\x92\x41!2\x07Link IDJ\x16\"lnk_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04lnk_\xc8\x01\x01R\x06linkId\"\xb5\x03\n\x04Link\x12J\n\x02id\x18\x01 \x01(\tB:\x92\x41\x37\x32\x1eUnique Identifier for the linkJ\x15\"lnk_123123123123123\"R\x02id\x12\xc7\x01\n\x08location\x18\x02 \x01(\tB\xaa\x01\x92\x41\xa6\x01\x32qLocation of the link. This is the URL that can be used to access the Admin portal. The link is valid for 1 minuteJ1\"https://scalekit.com/portal/lnk_123123123123123\"R\x08location\x12\x96\x01\n\x0b\x65xpire_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBY\x92\x41V28Expiry time of the link. The link is valid for 1 minute.J\x1a\"2024-02-06T14:48:00.000Z\"R\nexpireTime\"\x96\x02\n\x1aGeneratePortalLinkResponse\x12\xf7\x01\n\x04link\x18\x01 \x01(\x0b\x32\x1f.scalekit.v1.organizations.LinkB\xc1\x01\x92\x41\xbd\x01\x32\xba\x01\x43ontains the generated admin portal link details. The link URL can be shared with organization administrators to set up: Single Sign-On (SSO) authentication and directory synchronizationR\x04link\"h\n\x16GetPortalLinksResponse\x12N\n\x05links\x18\x01 \x03(\x0b\x32\x1f.scalekit.v1.organizations.LinkB\x17\x92\x41\x14\x32\x12\x41\x64min Portal LinksR\x05links\"\x90\x04\n!UpdateOrganizationSettingsRequest\x12\x97\x01\n\x02id\x18\x01 \x01(\tB\x86\x01\x92\x41q2WUnique identifier of the organization to update settings. Must begin with \'org_\' prefixJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12\xd0\x02\n\x08settings\x18\x02 \x01(\x0b\x32/.scalekit.v1.organizations.OrganizationSettingsB\x82\x02\x92\x41\xf8\x01\x32\x95\x01Settings configuration to apply to the organization. Contains feature toggles for SSO, directory synchronization, and other organization capabilitiesJ^{\"features\": [{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]}\xbaH\x03\xc8\x01\x01R\x08settings\"\xee\x04\n(UpdateOrganizationSessionSettingsRequest\x12\x84\x01\n\x02id\x18\x01 \x01(\tBt\x92\x41\x63\x32HUnique identifier for the organization, beginning with an \'org_\' prefix.J\x17\"org_59615193906282635\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x02id\x12\xf2\x01\n\x0e\x65nvironment_id\x18\x02 \x01(\tB\xca\x01\x92\x41\xb8\x01\x32\x9c\x01Unique identifier for the environment where the organization resides, prefixed with \'env_\'. This specifies the environment context for the session settings.J\x17\"env_59615193906282635\"\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\renvironmentId\x12\xc5\x01\n\x10session_settings\x18\x03 \x01(\x0b\x32\x36.scalekit.v1.organizations.OrganizationSessionSettingsBb\x92\x41Y2WThe session settings to be applied, including absolute and idle timeout configurations.\xbaH\x03\xc8\x01\x01R\x0fsessionSettings\"\x82\x04\n)UpdateOrganizationSessionSettingsResponse\x12\x8f\x01\n\x0e\x65nvironment_id\x18\x01 \x01(\tBh\x92\x41\x65\x32JThe environment ID where the organization\'s session settings were updated.J\x17\"env_59615193906282635\"R\renvironmentId\x12\x95\x01\n\x0forganization_id\x18\x02 \x01(\tBl\x92\x41i2NThe unique identifier of the organization whose session settings were updated.J\x17\"org_59615193906282635\"R\x0eorganizationId\x12\xaa\x01\n\x10session_settings\x18\x03 \x01(\x0b\x32\x36.scalekit.v1.organizations.OrganizationSessionSettingsBG\x92\x41\x44\x32\x42The updated session settings, reflecting the new timeout policies.R\x0fsessionSettings\"\xdc\x02\n\"OrganizationUserManagementSettings\x12\xb5\x02\n\x11max_allowed_users\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xeb\x01\x92\x41\xe7\x01\x32\xdf\x01Maximum number of users allowed in the organization. When nil (not set), there feature is not enabled. When explicitly set to zero, it also means no limit. When set to a positive integer, it enforces the maximum user limit.J\x03\x31\x30\x30R\x0fmaxAllowedUsers\"\xad\x07\n\x1bOrganizationSessionSettings\x12\xfe\x01\n\x18\x61\x62solute_session_timeout\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xa6\x01\x92\x41\xa2\x01\x32\x98\x01The maximum duration in seconds that a session can remain active, regardless of activity. After this time, the user will be required to re-authenticate.J\x05\x38\x36\x34\x30\x30R\x16\x61\x62soluteSessionTimeout\x12\xdd\x01\n\x1asession_management_enabled\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x82\x01\x92\x41\x7f\x32wEnables or disables session management features for the organization. When true, session timeout policies are enforced.J\x04trueR\x18sessionManagementEnabled\x12\xd4\x01\n\x14idle_session_timeout\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x84\x01\x92\x41\x80\x01\x32xThe duration in seconds that a session can remain idle before it is automatically terminated. Activity resets the timer.J\x04\x31\x38\x30\x30R\x12idleSessionTimeout\x12\xd5\x01\n\x14idle_session_enabled\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x86\x01\x92\x41\x82\x01\x32zEnables or disables idle session timeout. If true, inactive sessions will be terminated after the specified idle duration.J\x04trueR\x12idleSessionEnabled\"\x82\x03\n%GetOrganizationSessionSettingsRequest\x12\x92\x01\n\x02id\x18\x01 \x01(\tB\x81\x01\x92\x41p2UThe unique identifier of the organization whose session settings are being requested.J\x17\"org_59615193906282635\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x02id\x12\xc3\x01\n\x0e\x65nvironment_id\x18\x02 \x01(\tB\x9b\x01\x92\x41\x89\x01\x32nThe environment ID to scope the request. This ensures the settings are retrieved from the correct environment.J\x17\"env_59615193906282635\"\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\renvironmentId\"\x89\x03\n(CreateOrganizationSessionSettingsRequest\x12\x8b\x01\n\x02id\x18\x01 \x01(\tB{\x92\x41j2OThe unique identifier of the organization for which to create session settings.J\x17\"org_59615193906282635\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x02id\x12\xce\x01\n\x0e\x65nvironment_id\x18\x02 \x01(\tB\xa6\x01\x92\x41\x94\x01\x32yThe environment ID where the organization exists. This scopes the creation of session settings to a specific environment.J\x17\"env_59615193906282635\"\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\renvironmentId\"\xf4\x03\n)CreateOrganizationSessionSettingsResponse\x12\x80\x01\n\x0e\x65nvironment_id\x18\x01 \x01(\tBY\x92\x41V2;The environment ID where the session settings were created.J\x17\"env_59615193906282635\"R\renvironmentId\x12\x99\x01\n\x0forganization_id\x18\x02 \x01(\tBp\x92\x41m2RThe unique identifier of the organization for which session settings were created.J\x17\"org_59615193906282635\"R\x0eorganizationId\x12\xa7\x01\n\x10session_settings\x18\x03 \x01(\x0b\x32\x36.scalekit.v1.organizations.OrganizationSessionSettingsBD\x92\x41\x41\x32?The newly created session settings, including timeout policies.R\x0fsessionSettings\"\xf1\x03\n&GetOrganizationSessionSettingsResponse\x12\x87\x01\n\x0e\x65nvironment_id\x18\x01 \x01(\tB`\x92\x41]2BThe environment ID from which the session settings were retrieved.J\x17\"env_59615193906282635\"R\renvironmentId\x12\x95\x01\n\x0forganization_id\x18\x02 \x01(\tBl\x92\x41i2NThe unique identifier of the organization whose session settings are returned.J\x17\"org_59615193906282635\"R\x0eorganizationId\x12\xa4\x01\n\x10session_settings\x18\x03 \x01(\x0b\x32\x36.scalekit.v1.organizations.OrganizationSessionSettingsBA\x92\x41>2.scalekit.v1.organizations.UpsertUserManagementSettingsRequest\x1a?.scalekit.v1.organizations.UpsertUserManagementSettingsResponse\"\xb3\x02\x92\x41\xdf\x01\n\rOrganizations\x12 Upsert organization user setting\x1a\x33Upsert user management settings for an organizationJw\n\x03\x32\x30\x30\x12p\n)Returns the updated organization setting.\x12\x43\nA\x1a?.scalekit.v1.organizations.UpsertUserManagementSettingsResponse\x82\xb5\x18\x02\x18\x64\x82\xd3\xe4\x93\x02\x44\x32?/api/v1/organizations/{organization_id}/settings/usermanagement:\x01*\x12\x9f\x04\n$GetOrganizationUserManagementSetting\x12G.scalekit.v1.organizations.GetOrganizationUserManagementSettingsRequest\x1aH.scalekit.v1.organizations.GetOrganizationUserManagementSettingsResponse\"\xe3\x02\x92\x41\x83\x02\n\rOrganizations\x12(Get organization user management setting\x1a\x43Retrieves the user management settings for a specific organization.J\x82\x01\n\x03\x32\x30\x30\x12{\n+Returns the requested organization setting.\x12L\nJ\x1aH.scalekit.v1.organizations.GetOrganizationUserManagementSettingsResponse\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x41\x12?/api/v1/organizations/{organization_id}/settings/usermanagement\x1aX\x92\x41U\n\rOrganizations\x12\x44{{import \"proto/scalekit/v1/organizations/organization_details.md\"}}B\xa9\'Z7github.com/scalekit-inc/scalekit/pkg/grpc/organizations\x92\x41\xec&\x12\x92\"\n\rScalekit APIs\x12\x83!# Introduction\n\nThe Scalekit API is a RESTful API that enables you to manage organizations, users, and authentication settings. All requests must use HTTPS.\nAll API requests use the following base URLs:\n\n```\nhttps://{environment}.scalekit.dev (Development)\nhttps://{environment}.scalekit.com (Production)\nhttps://auth.example.com (Custom domain)\n```\n\nScalekit operates two separate environments: Development and Production. Resources cannot be moved between environments.\n\n# Authentication\n\nThe Scalekit API uses OAuth 2.0 Client Credentials for authentication.\n\nCopy your API credentials from the Scalekit dashboard\'s API Config section and set them as environment variables.\n\n```sh\nSCALEKIT_ENVIRONMENT_URL=\'\'\nSCALEKIT_CLIENT_ID=\'\'\nSCALEKIT_CLIENT_SECRET=\'\'\n```\n\nGetting an access token\n\n1. Get your credentials from the [Scalekit Dashboard](https://app.scalekit.com)\n2. Request an access token:\n\n```sh\ncurl https://{SCALEKIT_ENVIRONMENT_URL}/oauth/token \\\n -X POST \\\n -H \'Content-Type: application/x-www-form-urlencoded\' \\\n -d \'client_id={client_id}\' \\\n -d \'client_secret={client_secret}\' \\\n -d \'grant_type=client_credentials\'\n```\n\n3. Use the access token in API requests:\n\n```sh\ncurl https://{SCALEKIT_ENVIRONMENT_URL}/api/v1/organizations \\\n -H \'Content-Type: application/json\' \\\n -H \'Authorization: Bearer {access_token}\'\n```\n\nThe response includes an access token:\n\n```json\n{\n\t\"access_token\": \"eyJhbGciOiJSUzI1NiIsImtpZCI6InNua181Ok4OTEyMjU2NiIsInR5cCI6IkpXVCJ9...\",\n\t\"token_type\": \"Bearer\",\n\t\"expires_in\": 86399,\n\t\"scope\": \"openid\"\n}\n```\n\n# SDKs\n\nScalekit provides official SDKs for multiple programming languages. Check the changelog at GitHub repositories for the latest updates.\n\n### Node.js\n\n```sh\nnpm install @scalekit-sdk/node\n```\n\nCreate a new Scalekit client instance after initializing the environment variables\n\n```js\nimport { Scalekit } from \"@scalekit-sdk/node\";\n\nexport let scalekit = new Scalekit(\n\tprocess.env.SCALEKIT_ENVIRONMENT_URL,\n\tprocess.env.SCALEKIT_CLIENT_ID,\n\tprocess.env.SCALEKIT_CLIENT_SECRET\n);\n```\n\n[See the Node SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-node/releases)\n\n### Python\n\n```sh\npip install scalekit-sdk-python\n```\n\nCreate a new Scalekit client instance after initializing the environment variables.\n\n```py\nfrom scalekit import ScalekitClient\nimport os\n\nscalekit_client = ScalekitClient(\n os.environ.get(\'SCALEKIT_ENVIRONMENT_URL\'),\n os.environ.get(\'SCALEKIT_CLIENT_ID\'),\n os.environ.get(\'SCALEKIT_CLIENT_SECRET\')\n)\n```\n\n[See the Python SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-python/releases)\n\n### Go\n\n```sh\ngo get -u github.com/scalekit-inc/scalekit-sdk-go\n```\n\nCreate a new Scalekit client instance after initializing the environment variables.\n\n```go\npackage main\n\nimport (\n \"os\"\n \"github.com/scalekit-inc/scalekit-sdk-go\"\n)\n\nscalekitClient := scalekit.NewScalekitClient(\n os.Getenv(\"SCALEKIT_ENVIRONMENT_URL\"),\n os.Getenv(\"SCALEKIT_CLIENT_ID\"),\n os.Getenv(\"SCALEKIT_CLIENT_SECRET\"),\n)\n```\n\n[See the Go SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-go/releases)\n\n### Java\n\n```gradle\n/* Gradle users - add the following to your dependencies in build file */\nimplementation \"com.scalekit:scalekit-sdk-java:2.0.6\"\n```\n\n```xml\n\n\n com.scalekit\n scalekit-sdk-java\n 2.0.6\n\n```\n\n[See the Java SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-java/releases)\n\n# Error handling\n\nThe API uses standard HTTP status codes:\n\n| Code | Description |\n| ----------- | -------------------- |\n| 200/201 | Success |\n| 400 | Invalid request |\n| 401 | Authentication error |\n| 404 | Resource not found |\n| 429 | Rate limit exceeded |\n| 500/501/504 | Server error |\n\nError responses include detailed information:\n\n```json\n{\n\t\"code\": 16,\n\t\"message\": \"Token empty\",\n\t\"details\": [\n\t\t{\n\t\t\t\"@type\": \"type.googleapis.com/scalekit.v1.errdetails.ErrorInfo\",\n\t\t\t\"error_code\": \"UNAUTHENTICATED\"\n\t\t}\n\t]\n}\n```\n\n\":\n\x0cScalekit Inc\x12\x14https://scalekit.com\x1a\x14support@scalekit.com*8\n\nApache 2.0\x12*http://www.apache.org/licenses/LICENSE-2.02\x05\x31.0.0\x1a\x19$SCALEKIT_ENVIRONMENT_URL*\x01\x02\x32\x10\x61pplication/json:\x10\x61pplication/jsonj\x0f\n\rOrganizationsj\xd4\x03\n\x0bPermissions\x12\xc4\x03Permission management for defining and controlling access to system resources. Create, retrieve, update, and delete granular permissions that represent specific actions users can perform. Permissions are the building blocks of role-based access control (RBAC) and can be assigned to roles to grant users the ability to perform specific operations. Use this service to define custom permissions for your application\'s unique access control requirements.r+\n\rScalekit Docs\x12\x1ahttps://docs.scalekit.com/b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n-scalekit/v1/organizations/organizations.proto\x12\x19scalekit.v1.organizations\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"\xaf\x01\n\x19\x43reateOrganizationRequest\x12\x91\x01\n\x0corganization\x18\x01 \x01(\x0b\x32-.scalekit.v1.organizations.CreateOrganizationB>\x92\x41\x35\x32\x33Required parameters for creating a new organization\xbaH\x03\xc8\x01\x01R\x0corganization\"\xb9\x01\n\x1a\x43reateOrganizationResponse\x12\x9a\x01\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationBM\x92\x41J2HThe newly created organization containing its ID, settings, and metadataR\x0corganization\"\xf8\x07\n\x12\x43reateOrganization\x12\x84\x01\n\x0c\x64isplay_name\x18\x04 \x01(\tBa\x92\x41Q2?Name of the organization. Must be between 1 and 200 characters.J\x0e\"Megasoft Inc\"\xe0\x41\x02\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\xa0\x01\n\x0bregion_code\x18\x05 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeB^\x92\x41L2DGeographic region code for the organization. Currently limited to USJ\x04\"US\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\nregionCode\x12\x9e\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBx\x92\x41u2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x0e\"my_unique_id\"H\x00R\nexternalId\x88\x01\x01\x12r\n\x08metadata\x18\x07 \x03(\x0b\x32;.scalekit.v1.organizations.CreateOrganization.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xcc\x02\n\x04slug\x18\t \x01(\tB\xb2\x02\x92\x41\x84\x02\x32\xd2\x01\x44NS-safe slug for dynamic redirect URI resolution (e.g. acme for https://acme.example.com/callback). Lowercase alphanumeric and hyphens, 1-63 chars, must start and end with alphanumeric, unique per environment.J\x06\"acme\"x?\x80\x01\x01\x8a\x01\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$\xbaH\'r%\x10\x01\x18?2\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$H\x01R\x04slug\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idB\x07\n\x05_slug\"\xf8\n\n\x0cOrganization\x12{\n\x02id\x18\x01 \x01(\tBk\x92\x41h2MUnique scalekit-generated identifier that uniquely references an organizationJ\x17\"org_59615193906282635\"R\x02id\x12\x8c\x01\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBO\x92\x41I2+Timestamp when the organization was createdJ\x1a\"2025-02-15T06:23:44.560Z\"\xe0\x41\x02R\ncreateTime\x12\x8e\x01\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBQ\x92\x41N20Timestamp when the organization was last updatedJ\x1a\"2025-02-15T06:23:44.560Z\"R\nupdateTime\x12|\n\x0c\x64isplay_name\x18\x04 \x01(\tBY\x92\x41L2>Name of the organization. Must be between 1 and 200 charactersJ\n\"Megasoft\"\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\x92\x01\n\x0bregion_code\x18\x05 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeBP\x92\x41M2EGeographic region code for the organization. Currently limited to US.J\x04\"US\"R\nregionCode\x12\x9e\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBx\x92\x41u2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x0e\"my_unique_id\"H\x00R\nexternalId\x88\x01\x01\x12l\n\x08metadata\x18\x07 \x03(\x0b\x32\x35.scalekit.v1.organizations.Organization.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12K\n\x08settings\x18\x08 \x01(\x0b\x32/.scalekit.v1.organizations.OrganizationSettingsR\x08settings\x12\x85\x02\n\x04slug\x18\t \x01(\tB\xeb\x01\x92\x41\xe7\x01\x32\xb5\x01\x44NS-safe slug for dynamic redirect URI resolution. Must be 1-63 chars, lowercase alphanumeric and hyphens, must start and end with an alphanumeric character. Unique per environment.J\x06\"acme\"x?\x80\x01\x01\x8a\x01\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$H\x01R\x04slug\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idB\x07\n\x05_slug\"\xe0\x03\n\x19UpdateOrganizationRequest\x12j\n\x02id\x18\x01 \x01(\tBX\x92\x41L23Unique identifier of the organization to be updatedJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\x85\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tBb\x92\x41I2-External ID of the organization to be updatedJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x83\x01\n\x0corganization\x18\x03 \x01(\x0b\x32-.scalekit.v1.organizations.UpdateOrganizationB0\x92\x41\'2%Organization Parameters to be updated\xbaH\x03\xc8\x01\x01R\x0corganization\x12;\n\x0bupdate_mask\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskR\nupdateMaskB\x0c\n\nidentities\"\x87\x08\n\x12UpdateOrganization\x12\x9e\x01\n\x0c\x64isplay_name\x18\x04 \x01(\tBv\x92\x41i2SName of the organization to display in the UI. Must be between 1 and 200 charactersJ\x12\"Acme Corporation\"\xbaH\x07r\x05\x10\x01\x18\xc8\x01H\x00R\x0b\x64isplayName\x88\x01\x01\x12\x9d\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBw\x92\x41t2bYour application\'s unique identifier for this organization, used to link Scalekit with your systemJ\x0e\"tenant_12345\"H\x01R\nexternalId\x88\x01\x01\x12\xa5\x02\n\x08metadata\x18\x07 \x03(\x0b\x32;.scalekit.v1.organizations.UpdateOrganization.MetadataEntryB\xcb\x01\x92\x41\xae\x01\x32\x8f\x01\x43ustom key-value pairs to store with the organization. Keys must be 3-25 characters, values must be 1-256 characters. Maximum 10 pairs allowed.J\x1a{\"industry\": \"technology\"}\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\x9a\x02\n\x04slug\x18\t \x01(\tB\x80\x02\x92\x41\xd2\x01\x32\xa0\x01\x44NS-safe slug for dynamic redirect URI resolution. Lowercase alphanumeric and hyphens, 1-63 chars, must start and end with alphanumeric, unique per environment.J\x06\"acme\"x?\x80\x01\x01\x8a\x01\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$\xbaH\'r%\x10\x01\x18?2\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$H\x02R\x04slug\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0f\n\r_display_nameB\x0e\n\x0c_external_idB\x07\n\x05_slugJ\x04\x08\x05\x10\x06\"\x8c\x01\n\x1aUpdateOrganizationResponse\x12n\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationB!\x92\x41\x1e\x32\x1cUpdated organization detailsR\x0corganization\"\xeb\x02\n\x16GetOrganizationRequest\x12\x84\x01\n\x02id\x18\x01 \x01(\tBr\x92\x41\x66\x32MUnique scalekit-generated identifier that uniquely references an organizationJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\xbb\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\x97\x01\x92\x41~2bUnique identifier that links an Organization Object to your app\'s tenant, stored as an External IDJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalIdB\x0c\n\nidentities\"\x8b\x01\n\x17GetOrganizationResponse\x12p\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationB#\x92\x41 2\x1eThe newly created organizationR\x0corganization\"\xe0\x05\n\x18ListOrganizationsRequest\x12t\n\tpage_size\x18\x01 \x01(\rBW\x92\x41T2NMaximum number of organizations to return per page. Must be between 10 and 100J\x02\x33\x30R\x08pageSize\x12\x8f\x01\n\npage_token\x18\x02 \x01(\tBp\x92\x41m2[Pagination token from the previous response. Use to retrieve the next page of organizationsJ\x0e\"\"R\tpageToken\x12\xa8\x01\n\x0b\x65xternal_id\x18\x03 \x01(\tB\x81\x01\x92\x41~2bYour application\'s unique identifier for this organization, used to link Scalekit with your systemJ\x18\"\"H\x00R\nexternalId\x88\x01\x01:\x80\x02\x92\x41\xfc\x01\n\xab\x01*\x12List Organizations2\x94\x01Retrieves a paginated list of all organizations within the environment. Use the `page_token` from the response to access subsequent pages of results*L\n\x12List Organizations\x12\x36https://docs.scalekit.com/reference/list-organizationsB\x0e\n\x0c_external_id\"\xa4\x04\n\x19ListOrganizationsResponse\x12\x97\x01\n\x0fnext_page_token\x18\x01 \x01(\tBo\x92\x41l2UPagination token for the next page of results. Use this token to fetch the next page.J\x13\"\"R\rnextPageToken\x12Y\n\ntotal_size\x18\x02 \x01(\rB:\x92\x41\x37\x32\x31Total number of organizations in the environment.J\x02\x33\x30R\ttotalSize\x12p\n\rorganizations\x18\x03 \x03(\x0b\x32\'.scalekit.v1.organizations.OrganizationB!\x92\x41\x1e\x32\x1cList of organization objectsR\rorganizations\x12\x9f\x01\n\x0fprev_page_token\x18\x04 \x01(\tBw\x92\x41t2]Pagination token for the previous page of results. Use this token to fetch the previous page.J\x13\"\"R\rprevPageToken\"\xa7\x05\n\x1aSearchOrganizationsRequest\x12\xa5\x01\n\x05query\x18\x01 \x01(\tB\x8e\x01\x92\x41\x7f\x32wSearch term to match against organization names, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\x04\x61\x63me\xbaH\tr\x04\x10\x03\x18\x64\xc8\x01\x01R\x05query\x12\x80\x01\n\tpage_size\x18\x02 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x03 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken:\xb5\x01\x92\x41\xb1\x01\n\x88\x01*\x14Search Organizations2pSearch for organizations in your environment using a text query that matches against names, IDs, or external IDs2$query=acme&page_size=30&page_token=1\"\xdb\x01\n\x1bSearchOrganizationsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12M\n\rorganizations\x18\x03 \x03(\x0b\x32\'.scalekit.v1.organizations.OrganizationR\rorganizations\x12&\n\x0fprev_page_token\x18\x04 \x01(\tR\rprevPageToken\"\xad\x02\n\x19\x44\x65leteOrganizationRequest\x12~\n\x02id\x18\x01 \x01(\tBl\x92\x41`2MUnique scalekit-generated identifier that uniquely references an organizationJ\x0f\"org_123456789\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\x81\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB^\x92\x41\x45\x32)External ID of the organization to deleteJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalIdB\x0c\n\nidentities\"\xcf\x04\n\x19GeneratePortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12(\n\x03sso\x18\x02 \x01(\x08\x42\x11\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\x03sso\x88\x01\x01\x12=\n\x0e\x64irectory_sync\x18\x03 \x01(\x08\x42\x11\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\rdirectorySync\x88\x01\x01\x12\xdd\x02\n\x08\x66\x65\x61tures\x18\x04 \x03(\x0e\x32\".scalekit.v1.organizations.FeatureB\x9c\x02\x92\x41\x98\x02\x32\x95\x02\x46\x65\x61tures to enable in the admin portal link. To enable features, append them as URL parameters:\n\n- Single Sign-On: ?features=sso\n- Directory Sync: ?features=dir_sync\n- Both features: ?features=sso&features=dir_sync\n\nExample URL: https://scalekit.com/portal/lnk_123?features=ssoR\x08\x66\x65\x61turesB\x06\n\x04_ssoB\x11\n\x0f_directory_sync\"f\n\x14GetPortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\"i\n\x17\x44\x65letePortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\"\xbe\x01\n\x1b\x44\x65letePortalLinkByIdRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12O\n\x07link_id\x18\x02 \x01(\tB6\x92\x41!2\x07Link IDJ\x16\"lnk_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04lnk_\xc8\x01\x01R\x06linkId\"\xb5\x03\n\x04Link\x12J\n\x02id\x18\x01 \x01(\tB:\x92\x41\x37\x32\x1eUnique Identifier for the linkJ\x15\"lnk_123123123123123\"R\x02id\x12\xc7\x01\n\x08location\x18\x02 \x01(\tB\xaa\x01\x92\x41\xa6\x01\x32qLocation of the link. This is the URL that can be used to access the Admin portal. The link is valid for 1 minuteJ1\"https://scalekit.com/portal/lnk_123123123123123\"R\x08location\x12\x96\x01\n\x0b\x65xpire_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBY\x92\x41V28Expiry time of the link. The link is valid for 1 minute.J\x1a\"2024-02-06T14:48:00.000Z\"R\nexpireTime\"\x96\x02\n\x1aGeneratePortalLinkResponse\x12\xf7\x01\n\x04link\x18\x01 \x01(\x0b\x32\x1f.scalekit.v1.organizations.LinkB\xc1\x01\x92\x41\xbd\x01\x32\xba\x01\x43ontains the generated admin portal link details. The link URL can be shared with organization administrators to set up: Single Sign-On (SSO) authentication and directory synchronizationR\x04link\"h\n\x16GetPortalLinksResponse\x12N\n\x05links\x18\x01 \x03(\x0b\x32\x1f.scalekit.v1.organizations.LinkB\x17\x92\x41\x14\x32\x12\x41\x64min Portal LinksR\x05links\"\x90\x04\n!UpdateOrganizationSettingsRequest\x12\x97\x01\n\x02id\x18\x01 \x01(\tB\x86\x01\x92\x41q2WUnique identifier of the organization to update settings. Must begin with \'org_\' prefixJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12\xd0\x02\n\x08settings\x18\x02 \x01(\x0b\x32/.scalekit.v1.organizations.OrganizationSettingsB\x82\x02\x92\x41\xf8\x01\x32\x95\x01Settings configuration to apply to the organization. Contains feature toggles for SSO, directory synchronization, and other organization capabilitiesJ^{\"features\": [{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]}\xbaH\x03\xc8\x01\x01R\x08settings\"\x93\x0c\n!OrganizationSessionPolicySettings\x12\x94\x02\n\rpolicy_source\x18\x01 \x01(\x0e\x32..scalekit.v1.organizations.SessionPolicySourceB\xbe\x01\x92\x41\xaf\x01\x32\xa2\x01Policy source. \'environment\' means the organization inherits the application-level session policy. \'custom\' means organization-specific timeout values are active.J\x08\"custom\"\xbaH\x08\x82\x01\x05\x10\x01\"\x01\x00R\x0cpolicySource\x12\xec\x01\n\x18\x61\x62solute_session_timeout\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x94\x01\x92\x41\x90\x01\x32\x88\x01The absolute session timeout value. The unit is specified by absolute_session_timeout_unit. Omitted when policy_source is \'environment\'.J\x03\x33\x36\x30R\x16\x61\x62soluteSessionTimeout\x12\xea\x01\n\x1d\x61\x62solute_session_timeout_unit\x18\x03 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitB\x82\x01\x92\x41\x7f\x32rUnit for absolute_session_timeout. Accepted values: \'minutes\', \'hours\', \'days\'. Responses always return \'minutes\'.J\t\"minutes\"H\x00R\x1a\x61\x62soluteSessionTimeoutUnit\x88\x01\x01\x12\xd3\x01\n\x1cidle_session_timeout_enabled\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBv\x92\x41s2kWhether idle session timeout is enabled for this organization. Omitted when policy_source is \'environment\'.J\x04trueR\x19idleSessionTimeoutEnabled\x12\x84\x02\n\x14idle_session_timeout\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xb4\x01\x92\x41\xb0\x01\x32\xa9\x01The idle session timeout value. The unit is specified by idle_session_timeout_unit. Omitted when idle_session_timeout_enabled is false or policy_source is \'environment\'.J\x02\x38\x34R\x12idleSessionTimeout\x12\xdd\x01\n\x19idle_session_timeout_unit\x18\x06 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitB~\x92\x41{2nUnit for idle_session_timeout. Accepted values: \'minutes\', \'hours\', \'days\'. Responses always return \'minutes\'.J\t\"minutes\"H\x01R\x16idleSessionTimeoutUnit\x88\x01\x01\x42 \n\x1e_absolute_session_timeout_unitB\x1c\n\x1a_idle_session_timeout_unit\"\xd4\x01\n#GetOrganizationSessionPolicyRequest\x12\xac\x01\n\x0forganization_id\x18\x01 \x01(\tB\x82\x01\x92\x41m2RThe unique identifier of the organization whose session policy is being requested.J\x17\"org_59615193906282635\"\xe0\x41\x02\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\"\xac\x01\n$GetOrganizationSessionPolicyResponse\x12\x83\x01\n\x06policy\x18\x01 \x01(\x0b\x32<.scalekit.v1.organizations.OrganizationSessionPolicySettingsB-\x92\x41*2(The session policy for the organization.R\x06policy\"\x95\x03\n&UpdateOrganizationSessionPolicyRequest\x12\xaa\x01\n\x0forganization_id\x18\x01 \x01(\tB\x80\x01\x92\x41k2PThe unique identifier of the organization whose session policy is being updated.J\x17\"org_59615193906282635\"\xe0\x41\x02\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xbd\x01\n\x06policy\x18\x02 \x01(\x0b\x32<.scalekit.v1.organizations.OrganizationSessionPolicySettingsBg\x92\x41\x61\x32_The session policy to apply. Set policy_source=\'APPLICATION\' to revert to application defaults.\xe0\x41\x02R\x06policy\"\xb7\x01\n\'UpdateOrganizationSessionPolicyResponse\x12\x8b\x01\n\x06policy\x18\x01 \x01(\x0b\x32<.scalekit.v1.organizations.OrganizationSessionPolicySettingsB5\x92\x41\x32\x32\x30The updated session policy for the organization.R\x06policy\"\xdc\x02\n\"OrganizationUserManagementSettings\x12\xb5\x02\n\x11max_allowed_users\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xeb\x01\x92\x41\xe7\x01\x32\xdf\x01Maximum number of users allowed in the organization. When nil (not set), there feature is not enabled. When explicitly set to zero, it also means no limit. When set to a positive integer, it enforces the maximum user limit.J\x03\x31\x30\x30R\x0fmaxAllowedUsers\"\xb2\x08\n\x1bOrganizationSessionSettings\x12\xfe\x01\n\x18\x61\x62solute_session_timeout\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xa6\x01\x92\x41\xa2\x01\x32\x98\x01The maximum duration in seconds that a session can remain active, regardless of activity. After this time, the user will be required to re-authenticate.J\x05\x38\x36\x34\x30\x30R\x16\x61\x62soluteSessionTimeout\x12\xd4\x01\n\x14idle_session_timeout\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x84\x01\x92\x41\x80\x01\x32xThe duration in seconds that a session can remain idle before it is automatically terminated. Activity resets the timer.J\x04\x31\x38\x30\x30R\x12idleSessionTimeout\x12\x8e\x02\n\x1cidle_session_timeout_enabled\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xb0\x01\x92\x41\xac\x01\x32\xa3\x01Whether idle session timeout is enabled for this organization. When enabled, sessions expire after the idle timeout duration regardless of the environment setting.J\x04trueR\x19idleSessionTimeoutEnabled\x12\xeb\x01\n\rpolicy_source\x18\x06 \x01(\tB\xc5\x01\x92\x41\xc1\x01\x32\xb4\x01Policy source for this organization. \'environment\' means the organization inherits application-level session policy. \'custom\' means organization-specific timeout values are active.J\x08\"custom\"R\x0cpolicySourceJ\x04\x08\x02\x10\x03J\x04\x08\x04\x10\x05R\x1asession_management_enabledR\x14idle_session_enabled\"\x8e\x04\n\x14OrganizationSettings\x12\xa4\x02\n\x08\x66\x65\x61tures\x18\x01 \x03(\x0b\x32\x36.scalekit.v1.organizations.OrganizationSettingsFeatureB\xcf\x01\x92\x41\xcb\x01\x32wList of feature toggles that control organization capabilities such as SSO authentication and directory synchronizationJP[{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]R\x08\x66\x65\x61tures:\xce\x01\x92\x41\xca\x01\nh*\x15Organization Settings2OConfiguration options that control organization-level features and capabilities2^{\"features\": [{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]}\"\xe1\x03\n\x1bOrganizationSettingsFeature\x12\xd4\x01\n\x04name\x18\x01 \x01(\tB\xbf\x01\x92\x41\xbb\x01\x32\xb1\x01\x46\x65\x61ture identifier. Supported values include: \"sso\" (Single Sign-On), \"directory_sync\" (Directory Synchronization), \"session_policy\" (Organization-level session policy override)J\x05\"sso\"R\x04name\x12t\n\x07\x65nabled\x18\x02 \x01(\x08\x42Z\x92\x41W2OWhether the feature is enabled (true) or disabled (false) for this organizationJ\x04trueR\x07\x65nabled:u\x92\x41r\np*\x1bOrganization Feature Toggle2@Controls the activation state of a specific organization feature\xd2\x01\x04name\xd2\x01\x07\x65nabled\"\x96\x02\n#UpsertUserManagementSettingsRequest\x12W\n\x0forganization_id\x18\x01 \x01(\tB.\x92\x41\x19\x32\x17ID of the organization.\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\x12\x95\x01\n\x08settings\x18\x02 \x01(\x0b\x32=.scalekit.v1.organizations.OrganizationUserManagementSettingsB:\x92\x41\x31\x32/The new values for the setting fields to patch.\xbaH\x03\xc8\x01\x01R\x08settings\"\x9c\x01\n$UpsertUserManagementSettingsResponse\x12t\n\x08settings\x18\x01 \x01(\x0b\x32=.scalekit.v1.organizations.OrganizationUserManagementSettingsB\x19\x92\x41\x16\x32\x14The updated setting.R\x08settings\"\x87\x01\n,GetOrganizationUserManagementSettingsRequest\x12W\n\x0forganization_id\x18\x01 \x01(\tB.\x92\x41\x19\x32\x17ID of the organization.\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\"\xaf\x01\n-GetOrganizationUserManagementSettingsResponse\x12~\n\x08settings\x18\x01 \x01(\x0b\x32=.scalekit.v1.organizations.OrganizationUserManagementSettingsB#\x92\x41 2\x1eList of organization settings.R\x08settings*R\n\x07\x46\x65\x61ture\x12\x17\n\x13\x46\x45\x41TURE_UNSPECIFIED\x10\x00\x12\x13\n\x0bUNSPECIFIED\x10\x00\x1a\x02\x08\x01\x12\x0c\n\x08\x64ir_sync\x10\x01\x12\x07\n\x03sso\x10\x02\x1a\x02\x10\x01*R\n\x13SessionPolicySource\x12\x1e\n\x1aSESSION_POLICY_UNSPECIFIED\x10\x00\x12\x0f\n\x0b\x41PPLICATION\x10\x01\x12\n\n\x06\x43USTOM\x10\x02\x32\xa3J\n\x13OrganizationService\x12\x88\x04\n\x12\x43reateOrganization\x12\x34.scalekit.v1.organizations.CreateOrganizationRequest\x1a\x35.scalekit.v1.organizations.CreateOrganizationResponse\"\x84\x03\x92\x41\xcf\x02\n\rOrganizations\x12\x16\x43reate an organization\x1a\x8f\x01\x43reates a new organization in your environment. Use this endpoint to add a new tenant that can be configured with various settings and metadataJ\x93\x01\n\x03\x32\x30\x31\x12\x8b\x01\nNReturns the newly created organization with its unique identifier and settings\x12\x39\n7\x1a\x35.scalekit.v1.organizations.CreateOrganizationResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02%\"\x15/api/v1/organizations:\x0corganization\x12\xbf\x04\n\x12UpdateOrganization\x12\x34.scalekit.v1.organizations.UpdateOrganizationRequest\x1a\x35.scalekit.v1.organizations.UpdateOrganizationResponse\"\xbb\x03\x92\x41\xec\x02\n\rOrganizations\x12\x1bUpdate organization details\x1a\xa1\x01Updates an organization\'s display name, external ID, or metadata. Requires a valid organization identifier. Region code cannot be modified through this endpoint.J\x99\x01\n\x03\x32\x30\x30\x12\x91\x01\nTReturns the updated organization with all current details reflected in the response.\x12\x39\n7\x1a\x35.scalekit.v1.organizations.UpdateOrganizationResponse\x82\xb5\x18\x17\n\x13organizations_write\x18T\x82\xd3\xe4\x93\x02*2\x1a/api/v1/organizations/{id}:\x0corganization\x12\xde\x03\n\x0fGetOrganization\x12\x31.scalekit.v1.organizations.GetOrganizationRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xe3\x02\x92\x41\xa3\x02\n\rOrganizations\x12\x18Get organization details\x1a]Retrieves organization details by Scalekit ID, including name, region, metadata, and settingsJ\x98\x01\n\x03\x32\x30\x30\x12\x90\x01\nVReturns the complete organization object with ID, display name, settings, and metadata\x12\x36\n4\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/organizations/{id}\x12\xd3\x05\n\x1bGetOrganizationByExternalId\x12\x31.scalekit.v1.organizations.GetOrganizationRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xcc\x04\x92\x41\xfa\x03\n\rOrganizations\x12\'Get organization details by external Id\x1a]Retrieves organization details by External ID, including name, region, metadata, and settingsJ\xa4\x01\n\x03\x32\x30\x30\x12\x9c\x01\nbReturns the complete organization object with ID, display name, settings, external ID and metadata\x12\x36\n4\x1a\x32.scalekit.v1.organizations.GetOrganizationResponseJa\n\x03\x34\x30\x30\x12Z\nXInvalid request - external ID is empty or the caller\'s organization claim does not matchJW\n\x03\x34\x30\x34\x12P\nNOrganization not found - no organization exists with the specified external ID\x82\xb5\x18\x16\n\x12organizations_read\x18\x04\x82\xd3\xe4\x93\x02.\x12,/api/v1/organizations:external/{external_id}\x12\xc2\t\n\x10ListOrganization\x12\x33.scalekit.v1.organizations.ListOrganizationsRequest\x1a\x34.scalekit.v1.organizations.ListOrganizationsResponse\"\xc2\x08\x92\x41\x9b\x08\n\rOrganizations\x12\x12List organizations\x1a\xa0\x01Retrieve a paginated list of organizations within your environment. The response includes a `page_token` that can be used to access subsequent pages of results.Js\n\x03\x32\x30\x30\x12l\n0Successfully retrieved the list of organizations\x12\x38\n6\x1a\x34.scalekit.v1.organizations.ListOrganizationsResponseJ\x1b\n\x03\x34\x30\x30\x12\x14\n\x12Invalid page tokenj\xc0\x05\n\rx-codeSamples\x12\xae\x05\x32\xab\x05\n\x97\x01*\x94\x01\n\x16\n\x05label\x12\r\x1a\x0bNode.js SDK\n\x14\n\x04lang\x12\x0c\x1a\njavascript\nd\n\x06source\x12Z\x1aXconst organizations = await scalekit.organization.listOrganization({\n pageSize: 10,\n});\n\xc0\x01*\xbd\x01\n\x15\n\x05label\x12\x0c\x1a\nPython SDK\n\x10\n\x04lang\x12\x08\x1a\x06python\n\x91\x01\n\x06source\x12\x86\x01\x1a\x83\x01options = ListOrganizationOptions()\noptions.page_size = 10\n\norganizations = sc.organization.list_organizations(\n options=options\n)\n\xaf\x01*\xac\x01\n\x11\n\x05label\x12\x08\x1a\x06Go SDK\n\x0c\n\x04lang\x12\x04\x1a\x02go\n\x88\x01\n\x06source\x12~\x1a|organizations, err := sc.Organization.ListOrganizations(\n ctx,\n &scalekit.ListOrganizationOptions{\n PageSize: 10,\n }\n)\n\x99\x01*\x96\x01\n\x13\n\x05label\x12\n\x1a\x08Java SDK\n\x0e\n\x04lang\x12\x06\x1a\x04java\no\n\x06source\x12\x65\x1a\x63ListOrganizationsResponse organizations = scalekitClient.organizations().listOrganizations(10, \"\");\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x17\x12\x15/api/v1/organizations\x12\xf1\x04\n\x12SearchOrganization\x12\x35.scalekit.v1.organizations.SearchOrganizationsRequest\x1a\x36.scalekit.v1.organizations.SearchOrganizationsResponse\"\xeb\x03\x92\x41\xae\x03\n\rOrganizations\x12\x14Search organizations\x1a\xd4\x01Searches for organizations in your environment using a query string. The query matches against organization name, ID, or external ID. Returns multiple results when more than one organization matches the criteria.J\xaf\x01\n\x03\x32\x30\x30\x12\xa7\x01\niReturns a list of matching organizations and a page token for pagination if there are additional results.\x12:\n8\x1a\x36.scalekit.v1.organizations.SearchOrganizationsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\x12\x1c/api/v1/organizations:search\x12\xcf\x02\n\x12\x44\x65leteOrganization\x12\x34.scalekit.v1.organizations.DeleteOrganizationRequest\x1a\x16.google.protobuf.Empty\"\xea\x01\x92\x41\xbe\x01\n\rOrganizations\x12\x16\x44\x65lete an organization\x1aPRemove an existing organization from the environment using its unique identifierJC\n\x03\x32\x30\x30\x12<\n:Organization successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1c*\x1a/api/v1/organizations/{id}\x12\xe2\x04\n\x12GeneratePortalLink\x12\x34.scalekit.v1.organizations.GeneratePortalLinkRequest\x1a\x35.scalekit.v1.organizations.GeneratePortalLinkResponse\"\xde\x03\x92\x41\xa5\x03\n\rOrganizations\x12\x1aGenerate admin portal link\x1a\xd5\x01\x43reates a single use Admin Portal URL valid for 1 minute. Once the generated admin portal URL is accessed or rendered, a temporary session of 6 hours is created to allow the admin to update SSO/SCIM configuration.J\x9f\x01\n\x03\x32\x30\x30\x12\x97\x01\nZAdmin Portal link generated successfully. Returns the portal URL and expiration timestamp.\x12\x39\n7\x1a\x35.scalekit.v1.organizations.GeneratePortalLinkResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02)\x1a\'/api/v1/organizations/{id}/portal_links\x12\xa0\x02\n\x10\x44\x65letePortalLink\x12\x32.scalekit.v1.organizations.DeletePortalLinkRequest\x1a\x16.google.protobuf.Empty\"\xbf\x01\x92\x41x\n\x0c\x41\x64min Portal\x12\x12\x44\x65lete portal link\x1a)Revokes and deletes an Admin portal link.J)\n\x03\x32\x30\x30\x12\"\n Portal link deleted successfully\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)*\'/api/v1/organizations/{id}/portal_links\x12\x9f\x02\n\x14\x44\x65letePortalLinkByID\x12\x36.scalekit.v1.organizations.DeletePortalLinkByIdRequest\x1a\x16.google.protobuf.Empty\"\xb6\x01\x92\x41\x65\n\x0c\x41\x64min Portal\x12\x18\x44\x65lete admin portal link\x1a)Revokes and deletes an Admin portal link.J\x10\n\x03\x32\x30\x30\x12\t\n\x07Success\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x33*1/api/v1/organizations/{id}/portal_links/{link_id}\x12\x88\x03\n\x0eGetPortalLinks\x12/.scalekit.v1.organizations.GetPortalLinkRequest\x1a\x31.scalekit.v1.organizations.GetPortalLinksResponse\"\x91\x02\x92\x41\xc9\x01\n\x0c\x41\x64min Portal\x12\x0fGet portal link\x1a_Returns the Admin portal link if it exists. Use Generate Portal link to create and fetch a linkJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.organizations.GetPortalLinksResponse\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)\x12\'/api/v1/organizations/{id}/portal_links\x12\xfa\x06\n\x1aUpdateOrganizationSettings\x12<.scalekit.v1.organizations.UpdateOrganizationSettingsRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xe9\x05\x92\x41\xaa\x05\n\rOrganizations\x12\x1cToggle organization settings\x1a\xd3\x01Updates configuration settings for an organization. Supports modifying SSO configuration, directory synchronization settings, and session parameters. Requires organization ID and the specific settings to update.J\xe3\x01\n\x03\x32\x30\x30\x12\xdb\x01\n\xa0\x01Returns the complete organization object with updated settings applied. Contains all organization details including ID, display name, and the modified settings.\x12\x36\n4\x1a\x32.scalekit.v1.organizations.GetOrganizationResponseJp\n\x03\x34\x30\x30\x12i\ngInvalid request - occurs when the settings payload contains invalid values or unsupported configurationJM\n\x03\x34\x30\x34\x12\x46\nDOrganization not found - the specified organization ID doesn\'t exist\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02/2#/api/v1/organizations/{id}/settings:\x08settings\x12\x82\x06\n\x1fUpdateOrganizationSessionPolicy\x12\x41.scalekit.v1.organizations.UpdateOrganizationSessionPolicyRequest\x1a\x42.scalekit.v1.organizations.UpdateOrganizationSessionPolicyResponse\"\xd7\x04\x92\x41\xe9\x03\n\rOrganizations\x12\"Update organization session policy\x1a\xe2\x02Sets a custom session policy for an organization or reverts to application-level settings. Send policy_source=\'APPLICATION\' to revert to application defaults. Send policy_source=\'CUSTOM\' with timeout values to activate a custom policy. Values are accepted as-is; the system applies the stricter of application and organization values at session creation.J-\n\x03\x32\x30\x30\x12&\n$Session policy updated successfully.J \n\x03\x34\x30\x34\x12\x19\n\x17Organization not found.\x82\xb5\x18 \n\x1csk_org_session_policy_manage\x18t\x82\xd3\xe4\x93\x02@26/api/v1/organizations/{organization_id}/session-policy:\x06policy\x12\xf1\x04\n\x1cGetOrganizationSessionPolicy\x12>.scalekit.v1.organizations.GetOrganizationSessionPolicyRequest\x1a?.scalekit.v1.organizations.GetOrganizationSessionPolicyResponse\"\xcf\x03\x92\x41\xeb\x02\n\rOrganizations\x12\x1fGet organization session policy\x1a\xe5\x01Retrieves the session policy for an organization. Returns policy_source=\'APPLICATION\' if the organization inherits the application-level defaults, or policy_source=\'CUSTOM\' with the configured values if a custom policy is active.J/\n\x03\x32\x30\x30\x12(\n&Session policy retrieved successfully.J \n\x03\x34\x30\x34\x12\x19\n\x17Organization not found.\x82\xb5\x18\x1e\n\x1ask_org_session_policy_read\x18t\x82\xd3\xe4\x93\x02\x38\x12\x36/api/v1/organizations/{organization_id}/session-policy\x12\xd5\x03\n\x1cUpsertUserManagementSettings\x12>.scalekit.v1.organizations.UpsertUserManagementSettingsRequest\x1a?.scalekit.v1.organizations.UpsertUserManagementSettingsResponse\"\xb3\x02\x92\x41\xdf\x01\n\rOrganizations\x12 Upsert organization user setting\x1a\x33Upsert user management settings for an organizationJw\n\x03\x32\x30\x30\x12p\n)Returns the updated organization setting.\x12\x43\nA\x1a?.scalekit.v1.organizations.UpsertUserManagementSettingsResponse\x82\xb5\x18\x02\x18\x64\x82\xd3\xe4\x93\x02\x44\x32?/api/v1/organizations/{organization_id}/settings/usermanagement:\x01*\x12\x9f\x04\n$GetOrganizationUserManagementSetting\x12G.scalekit.v1.organizations.GetOrganizationUserManagementSettingsRequest\x1aH.scalekit.v1.organizations.GetOrganizationUserManagementSettingsResponse\"\xe3\x02\x92\x41\x83\x02\n\rOrganizations\x12(Get organization user management setting\x1a\x43Retrieves the user management settings for a specific organization.J\x82\x01\n\x03\x32\x30\x30\x12{\n+Returns the requested organization setting.\x12L\nJ\x1aH.scalekit.v1.organizations.GetOrganizationUserManagementSettingsResponse\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x41\x12?/api/v1/organizations/{organization_id}/settings/usermanagement\x1aX\x92\x41U\n\rOrganizations\x12\x44{{import \"proto/scalekit/v1/organizations/organization_details.md\"}}B\xa9\'Z7github.com/scalekit-inc/scalekit/pkg/grpc/organizations\x92\x41\xec&\x12\x92\"\n\rScalekit APIs\x12\x83!# Introduction\n\nThe Scalekit API is a RESTful API that enables you to manage organizations, users, and authentication settings. All requests must use HTTPS.\nAll API requests use the following base URLs:\n\n```\nhttps://{environment}.scalekit.dev (Development)\nhttps://{environment}.scalekit.com (Production)\nhttps://auth.example.com (Custom domain)\n```\n\nScalekit operates two separate environments: Development and Production. Resources cannot be moved between environments.\n\n# Authentication\n\nThe Scalekit API uses OAuth 2.0 Client Credentials for authentication.\n\nCopy your API credentials from the Scalekit dashboard\'s API Config section and set them as environment variables.\n\n```sh\nSCALEKIT_ENVIRONMENT_URL=\'\'\nSCALEKIT_CLIENT_ID=\'\'\nSCALEKIT_CLIENT_SECRET=\'\'\n```\n\nGetting an access token\n\n1. Get your credentials from the [Scalekit Dashboard](https://app.scalekit.com)\n2. Request an access token:\n\n```sh\ncurl https://{SCALEKIT_ENVIRONMENT_URL}/oauth/token \\\n -X POST \\\n -H \'Content-Type: application/x-www-form-urlencoded\' \\\n -d \'client_id={client_id}\' \\\n -d \'client_secret={client_secret}\' \\\n -d \'grant_type=client_credentials\'\n```\n\n3. Use the access token in API requests:\n\n```sh\ncurl https://{SCALEKIT_ENVIRONMENT_URL}/api/v1/organizations \\\n -H \'Content-Type: application/json\' \\\n -H \'Authorization: Bearer {access_token}\'\n```\n\nThe response includes an access token:\n\n```json\n{\n\t\"access_token\": \"eyJhbGciOiJSUzI1NiIsImtpZCI6InNua181Ok4OTEyMjU2NiIsInR5cCI6IkpXVCJ9...\",\n\t\"token_type\": \"Bearer\",\n\t\"expires_in\": 86399,\n\t\"scope\": \"openid\"\n}\n```\n\n# SDKs\n\nScalekit provides official SDKs for multiple programming languages. Check the changelog at GitHub repositories for the latest updates.\n\n### Node.js\n\n```sh\nnpm install @scalekit-sdk/node\n```\n\nCreate a new Scalekit client instance after initializing the environment variables\n\n```js\nimport { Scalekit } from \"@scalekit-sdk/node\";\n\nexport let scalekit = new Scalekit(\n\tprocess.env.SCALEKIT_ENVIRONMENT_URL,\n\tprocess.env.SCALEKIT_CLIENT_ID,\n\tprocess.env.SCALEKIT_CLIENT_SECRET\n);\n```\n\n[See the Node SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-node/releases)\n\n### Python\n\n```sh\npip install scalekit-sdk-python\n```\n\nCreate a new Scalekit client instance after initializing the environment variables.\n\n```py\nfrom scalekit import ScalekitClient\nimport os\n\nscalekit_client = ScalekitClient(\n os.environ.get(\'SCALEKIT_ENVIRONMENT_URL\'),\n os.environ.get(\'SCALEKIT_CLIENT_ID\'),\n os.environ.get(\'SCALEKIT_CLIENT_SECRET\')\n)\n```\n\n[See the Python SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-python/releases)\n\n### Go\n\n```sh\ngo get -u github.com/scalekit-inc/scalekit-sdk-go\n```\n\nCreate a new Scalekit client instance after initializing the environment variables.\n\n```go\npackage main\n\nimport (\n \"os\"\n \"github.com/scalekit-inc/scalekit-sdk-go\"\n)\n\nscalekitClient := scalekit.NewScalekitClient(\n os.Getenv(\"SCALEKIT_ENVIRONMENT_URL\"),\n os.Getenv(\"SCALEKIT_CLIENT_ID\"),\n os.Getenv(\"SCALEKIT_CLIENT_SECRET\"),\n)\n```\n\n[See the Go SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-go/releases)\n\n### Java\n\n```gradle\n/* Gradle users - add the following to your dependencies in build file */\nimplementation \"com.scalekit:scalekit-sdk-java:2.0.6\"\n```\n\n```xml\n\n\n com.scalekit\n scalekit-sdk-java\n 2.0.6\n\n```\n\n[See the Java SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-java/releases)\n\n# Error handling\n\nThe API uses standard HTTP status codes:\n\n| Code | Description |\n| ----------- | -------------------- |\n| 200/201 | Success |\n| 400 | Invalid request |\n| 401 | Authentication error |\n| 404 | Resource not found |\n| 429 | Rate limit exceeded |\n| 500/501/504 | Server error |\n\nError responses include detailed information:\n\n```json\n{\n\t\"code\": 16,\n\t\"message\": \"Token empty\",\n\t\"details\": [\n\t\t{\n\t\t\t\"@type\": \"type.googleapis.com/scalekit.v1.errdetails.ErrorInfo\",\n\t\t\t\"error_code\": \"UNAUTHENTICATED\"\n\t\t}\n\t]\n}\n```\n\n\":\n\x0cScalekit Inc\x12\x14https://scalekit.com\x1a\x14support@scalekit.com*8\n\nApache 2.0\x12*http://www.apache.org/licenses/LICENSE-2.02\x05\x31.0.0\x1a\x19$SCALEKIT_ENVIRONMENT_URL*\x01\x02\x32\x10\x61pplication/json:\x10\x61pplication/jsonj\x0f\n\rOrganizationsj\xd4\x03\n\x0bPermissions\x12\xc4\x03Permission management for defining and controlling access to system resources. Create, retrieve, update, and delete granular permissions that represent specific actions users can perform. Permissions are the building blocks of role-based access control (RBAC) and can be assigned to roles to grant users the ability to perform specific operations. Use this service to define custom permissions for your application\'s unique access control requirements.r+\n\rScalekit Docs\x12\x1ahttps://docs.scalekit.com/b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -54,6 +54,8 @@ _globals['_CREATEORGANIZATION'].fields_by_name['external_id']._serialized_options = b'\222Au2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\016\"my_unique_id\"' _globals['_CREATEORGANIZATION'].fields_by_name['metadata']._loaded_options = None _globals['_CREATEORGANIZATION'].fields_by_name['metadata']._serialized_options = b'\272H\026\232\001\023\020\n\"\006r\004\020\003\030\031*\007r\005\020\001\030\200\002' + _globals['_CREATEORGANIZATION'].fields_by_name['slug']._loaded_options = None + _globals['_CREATEORGANIZATION'].fields_by_name['slug']._serialized_options = b'\222A\204\0022\322\001DNS-safe slug for dynamic redirect URI resolution (e.g. acme for https://acme.example.com/callback). Lowercase alphanumeric and hyphens, 1-63 chars, must start and end with alphanumeric, unique per environment.J\006\"acme\"x?\200\001\001\212\001\037^[a-z0-9]([a-z0-9]|-[a-z0-9])*$\272H\'r%\020\001\030?2\037^[a-z0-9]([a-z0-9]|-[a-z0-9])*$' _globals['_ORGANIZATION_METADATAENTRY']._loaded_options = None _globals['_ORGANIZATION_METADATAENTRY']._serialized_options = b'8\001' _globals['_ORGANIZATION'].fields_by_name['id']._loaded_options = None @@ -70,6 +72,8 @@ _globals['_ORGANIZATION'].fields_by_name['external_id']._serialized_options = b'\222Au2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\016\"my_unique_id\"' _globals['_ORGANIZATION'].fields_by_name['metadata']._loaded_options = None _globals['_ORGANIZATION'].fields_by_name['metadata']._serialized_options = b'\272H\026\232\001\023\020\n\"\006r\004\020\003\030\031*\007r\005\020\001\030\200\002' + _globals['_ORGANIZATION'].fields_by_name['slug']._loaded_options = None + _globals['_ORGANIZATION'].fields_by_name['slug']._serialized_options = b'\222A\347\0012\265\001DNS-safe slug for dynamic redirect URI resolution. Must be 1-63 chars, lowercase alphanumeric and hyphens, must start and end with an alphanumeric character. Unique per environment.J\006\"acme\"x?\200\001\001\212\001\037^[a-z0-9]([a-z0-9]|-[a-z0-9])*$' _globals['_UPDATEORGANIZATIONREQUEST'].fields_by_name['id']._loaded_options = None _globals['_UPDATEORGANIZATIONREQUEST'].fields_by_name['id']._serialized_options = b'\222AL23Unique identifier of the organization to be updatedJ\025\"org_121312434123312\"\272H\006r\004\020\001\030 ' _globals['_UPDATEORGANIZATIONREQUEST'].fields_by_name['external_id']._loaded_options = None @@ -84,6 +88,8 @@ _globals['_UPDATEORGANIZATION'].fields_by_name['external_id']._serialized_options = b'\222At2bYour application\'s unique identifier for this organization, used to link Scalekit with your systemJ\016\"tenant_12345\"' _globals['_UPDATEORGANIZATION'].fields_by_name['metadata']._loaded_options = None _globals['_UPDATEORGANIZATION'].fields_by_name['metadata']._serialized_options = b'\222A\256\0012\217\001Custom key-value pairs to store with the organization. Keys must be 3-25 characters, values must be 1-256 characters. Maximum 10 pairs allowed.J\032{\"industry\": \"technology\"}\272H\026\232\001\023\020\n\"\006r\004\020\003\030\031*\007r\005\020\001\030\200\002' + _globals['_UPDATEORGANIZATION'].fields_by_name['slug']._loaded_options = None + _globals['_UPDATEORGANIZATION'].fields_by_name['slug']._serialized_options = b'\222A\322\0012\240\001DNS-safe slug for dynamic redirect URI resolution. Lowercase alphanumeric and hyphens, 1-63 chars, must start and end with alphanumeric, unique per environment.J\006\"acme\"x?\200\001\001\212\001\037^[a-z0-9]([a-z0-9]|-[a-z0-9])*$\272H\'r%\020\001\030?2\037^[a-z0-9]([a-z0-9]|-[a-z0-9])*$' _globals['_UPDATEORGANIZATIONRESPONSE'].fields_by_name['organization']._loaded_options = None _globals['_UPDATEORGANIZATIONRESPONSE'].fields_by_name['organization']._serialized_options = b'\222A\0362\034Updated organization details' _globals['_GETORGANIZATIONREQUEST'].fields_by_name['id']._loaded_options = None @@ -150,58 +156,44 @@ _globals['_UPDATEORGANIZATIONSETTINGSREQUEST'].fields_by_name['id']._serialized_options = b'\222Aq2WUnique identifier of the organization to update settings. Must begin with \'org_\' prefixJ\026\"org_1231234233424344\"\272H\017r\n\020\001\030 :\004org_\310\001\001' _globals['_UPDATEORGANIZATIONSETTINGSREQUEST'].fields_by_name['settings']._loaded_options = None _globals['_UPDATEORGANIZATIONSETTINGSREQUEST'].fields_by_name['settings']._serialized_options = b'\222A\370\0012\225\001Settings configuration to apply to the organization. Contains feature toggles for SSO, directory synchronization, and other organization capabilitiesJ^{\"features\": [{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]}\272H\003\310\001\001' - _globals['_UPDATEORGANIZATIONSESSIONSETTINGSREQUEST'].fields_by_name['id']._loaded_options = None - _globals['_UPDATEORGANIZATIONSESSIONSETTINGSREQUEST'].fields_by_name['id']._serialized_options = b'\222Ac2HUnique identifier for the organization, beginning with an \'org_\' prefix.J\027\"org_59615193906282635\"\272H\013r\t\020\001\030 :\003org' - _globals['_UPDATEORGANIZATIONSESSIONSETTINGSREQUEST'].fields_by_name['environment_id']._loaded_options = None - _globals['_UPDATEORGANIZATIONSESSIONSETTINGSREQUEST'].fields_by_name['environment_id']._serialized_options = b'\222A\270\0012\234\001Unique identifier for the environment where the organization resides, prefixed with \'env_\'. This specifies the environment context for the session settings.J\027\"env_59615193906282635\"\272H\013r\t\020\001\030 :\003env' - _globals['_UPDATEORGANIZATIONSESSIONSETTINGSREQUEST'].fields_by_name['session_settings']._loaded_options = None - _globals['_UPDATEORGANIZATIONSESSIONSETTINGSREQUEST'].fields_by_name['session_settings']._serialized_options = b'\222AY2WThe session settings to be applied, including absolute and idle timeout configurations.\272H\003\310\001\001' - _globals['_UPDATEORGANIZATIONSESSIONSETTINGSRESPONSE'].fields_by_name['environment_id']._loaded_options = None - _globals['_UPDATEORGANIZATIONSESSIONSETTINGSRESPONSE'].fields_by_name['environment_id']._serialized_options = b'\222Ae2JThe environment ID where the organization\'s session settings were updated.J\027\"env_59615193906282635\"' - _globals['_UPDATEORGANIZATIONSESSIONSETTINGSRESPONSE'].fields_by_name['organization_id']._loaded_options = None - _globals['_UPDATEORGANIZATIONSESSIONSETTINGSRESPONSE'].fields_by_name['organization_id']._serialized_options = b'\222Ai2NThe unique identifier of the organization whose session settings were updated.J\027\"org_59615193906282635\"' - _globals['_UPDATEORGANIZATIONSESSIONSETTINGSRESPONSE'].fields_by_name['session_settings']._loaded_options = None - _globals['_UPDATEORGANIZATIONSESSIONSETTINGSRESPONSE'].fields_by_name['session_settings']._serialized_options = b'\222AD2BThe updated session settings, reflecting the new timeout policies.' + _globals['_ORGANIZATIONSESSIONPOLICYSETTINGS'].fields_by_name['policy_source']._loaded_options = None + _globals['_ORGANIZATIONSESSIONPOLICYSETTINGS'].fields_by_name['policy_source']._serialized_options = b'\222A\257\0012\242\001Policy source. \'environment\' means the organization inherits the application-level session policy. \'custom\' means organization-specific timeout values are active.J\010\"custom\"\272H\010\202\001\005\020\001\"\001\000' + _globals['_ORGANIZATIONSESSIONPOLICYSETTINGS'].fields_by_name['absolute_session_timeout']._loaded_options = None + _globals['_ORGANIZATIONSESSIONPOLICYSETTINGS'].fields_by_name['absolute_session_timeout']._serialized_options = b'\222A\220\0012\210\001The absolute session timeout value. The unit is specified by absolute_session_timeout_unit. Omitted when policy_source is \'environment\'.J\003360' + _globals['_ORGANIZATIONSESSIONPOLICYSETTINGS'].fields_by_name['absolute_session_timeout_unit']._loaded_options = None + _globals['_ORGANIZATIONSESSIONPOLICYSETTINGS'].fields_by_name['absolute_session_timeout_unit']._serialized_options = b'\222A\1772rUnit for absolute_session_timeout. Accepted values: \'minutes\', \'hours\', \'days\'. Responses always return \'minutes\'.J\t\"minutes\"' + _globals['_ORGANIZATIONSESSIONPOLICYSETTINGS'].fields_by_name['idle_session_timeout_enabled']._loaded_options = None + _globals['_ORGANIZATIONSESSIONPOLICYSETTINGS'].fields_by_name['idle_session_timeout_enabled']._serialized_options = b'\222As2kWhether idle session timeout is enabled for this organization. Omitted when policy_source is \'environment\'.J\004true' + _globals['_ORGANIZATIONSESSIONPOLICYSETTINGS'].fields_by_name['idle_session_timeout']._loaded_options = None + _globals['_ORGANIZATIONSESSIONPOLICYSETTINGS'].fields_by_name['idle_session_timeout']._serialized_options = b'\222A\260\0012\251\001The idle session timeout value. The unit is specified by idle_session_timeout_unit. Omitted when idle_session_timeout_enabled is false or policy_source is \'environment\'.J\00284' + _globals['_ORGANIZATIONSESSIONPOLICYSETTINGS'].fields_by_name['idle_session_timeout_unit']._loaded_options = None + _globals['_ORGANIZATIONSESSIONPOLICYSETTINGS'].fields_by_name['idle_session_timeout_unit']._serialized_options = b'\222A{2nUnit for idle_session_timeout. Accepted values: \'minutes\', \'hours\', \'days\'. Responses always return \'minutes\'.J\t\"minutes\"' + _globals['_GETORGANIZATIONSESSIONPOLICYREQUEST'].fields_by_name['organization_id']._loaded_options = None + _globals['_GETORGANIZATIONSESSIONPOLICYREQUEST'].fields_by_name['organization_id']._serialized_options = b'\222Am2RThe unique identifier of the organization whose session policy is being requested.J\027\"org_59615193906282635\"\340A\002\272H\014r\n\020\001\030 :\004org_' + _globals['_GETORGANIZATIONSESSIONPOLICYRESPONSE'].fields_by_name['policy']._loaded_options = None + _globals['_GETORGANIZATIONSESSIONPOLICYRESPONSE'].fields_by_name['policy']._serialized_options = b'\222A*2(The session policy for the organization.' + _globals['_UPDATEORGANIZATIONSESSIONPOLICYREQUEST'].fields_by_name['organization_id']._loaded_options = None + _globals['_UPDATEORGANIZATIONSESSIONPOLICYREQUEST'].fields_by_name['organization_id']._serialized_options = b'\222Ak2PThe unique identifier of the organization whose session policy is being updated.J\027\"org_59615193906282635\"\340A\002\272H\014r\n\020\001\030 :\004org_' + _globals['_UPDATEORGANIZATIONSESSIONPOLICYREQUEST'].fields_by_name['policy']._loaded_options = None + _globals['_UPDATEORGANIZATIONSESSIONPOLICYREQUEST'].fields_by_name['policy']._serialized_options = b'\222Aa2_The session policy to apply. Set policy_source=\'APPLICATION\' to revert to application defaults.\340A\002' + _globals['_UPDATEORGANIZATIONSESSIONPOLICYRESPONSE'].fields_by_name['policy']._loaded_options = None + _globals['_UPDATEORGANIZATIONSESSIONPOLICYRESPONSE'].fields_by_name['policy']._serialized_options = b'\222A220The updated session policy for the organization.' _globals['_ORGANIZATIONUSERMANAGEMENTSETTINGS'].fields_by_name['max_allowed_users']._loaded_options = None _globals['_ORGANIZATIONUSERMANAGEMENTSETTINGS'].fields_by_name['max_allowed_users']._serialized_options = b'\222A\347\0012\337\001Maximum number of users allowed in the organization. When nil (not set), there feature is not enabled. When explicitly set to zero, it also means no limit. When set to a positive integer, it enforces the maximum user limit.J\003100' _globals['_ORGANIZATIONSESSIONSETTINGS'].fields_by_name['absolute_session_timeout']._loaded_options = None _globals['_ORGANIZATIONSESSIONSETTINGS'].fields_by_name['absolute_session_timeout']._serialized_options = b'\222A\242\0012\230\001The maximum duration in seconds that a session can remain active, regardless of activity. After this time, the user will be required to re-authenticate.J\00586400' - _globals['_ORGANIZATIONSESSIONSETTINGS'].fields_by_name['session_management_enabled']._loaded_options = None - _globals['_ORGANIZATIONSESSIONSETTINGS'].fields_by_name['session_management_enabled']._serialized_options = b'\222A\1772wEnables or disables session management features for the organization. When true, session timeout policies are enforced.J\004true' _globals['_ORGANIZATIONSESSIONSETTINGS'].fields_by_name['idle_session_timeout']._loaded_options = None _globals['_ORGANIZATIONSESSIONSETTINGS'].fields_by_name['idle_session_timeout']._serialized_options = b'\222A\200\0012xThe duration in seconds that a session can remain idle before it is automatically terminated. Activity resets the timer.J\0041800' - _globals['_ORGANIZATIONSESSIONSETTINGS'].fields_by_name['idle_session_enabled']._loaded_options = None - _globals['_ORGANIZATIONSESSIONSETTINGS'].fields_by_name['idle_session_enabled']._serialized_options = b'\222A\202\0012zEnables or disables idle session timeout. If true, inactive sessions will be terminated after the specified idle duration.J\004true' - _globals['_GETORGANIZATIONSESSIONSETTINGSREQUEST'].fields_by_name['id']._loaded_options = None - _globals['_GETORGANIZATIONSESSIONSETTINGSREQUEST'].fields_by_name['id']._serialized_options = b'\222Ap2UThe unique identifier of the organization whose session settings are being requested.J\027\"org_59615193906282635\"\272H\013r\t\020\001\030 :\003org' - _globals['_GETORGANIZATIONSESSIONSETTINGSREQUEST'].fields_by_name['environment_id']._loaded_options = None - _globals['_GETORGANIZATIONSESSIONSETTINGSREQUEST'].fields_by_name['environment_id']._serialized_options = b'\222A\211\0012nThe environment ID to scope the request. This ensures the settings are retrieved from the correct environment.J\027\"env_59615193906282635\"\272H\013r\t\020\001\030 :\003env' - _globals['_CREATEORGANIZATIONSESSIONSETTINGSREQUEST'].fields_by_name['id']._loaded_options = None - _globals['_CREATEORGANIZATIONSESSIONSETTINGSREQUEST'].fields_by_name['id']._serialized_options = b'\222Aj2OThe unique identifier of the organization for which to create session settings.J\027\"org_59615193906282635\"\272H\013r\t\020\001\030 :\003org' - _globals['_CREATEORGANIZATIONSESSIONSETTINGSREQUEST'].fields_by_name['environment_id']._loaded_options = None - _globals['_CREATEORGANIZATIONSESSIONSETTINGSREQUEST'].fields_by_name['environment_id']._serialized_options = b'\222A\224\0012yThe environment ID where the organization exists. This scopes the creation of session settings to a specific environment.J\027\"env_59615193906282635\"\272H\013r\t\020\001\030 :\003env' - _globals['_CREATEORGANIZATIONSESSIONSETTINGSRESPONSE'].fields_by_name['environment_id']._loaded_options = None - _globals['_CREATEORGANIZATIONSESSIONSETTINGSRESPONSE'].fields_by_name['environment_id']._serialized_options = b'\222AV2;The environment ID where the session settings were created.J\027\"env_59615193906282635\"' - _globals['_CREATEORGANIZATIONSESSIONSETTINGSRESPONSE'].fields_by_name['organization_id']._loaded_options = None - _globals['_CREATEORGANIZATIONSESSIONSETTINGSRESPONSE'].fields_by_name['organization_id']._serialized_options = b'\222Am2RThe unique identifier of the organization for which session settings were created.J\027\"org_59615193906282635\"' - _globals['_CREATEORGANIZATIONSESSIONSETTINGSRESPONSE'].fields_by_name['session_settings']._loaded_options = None - _globals['_CREATEORGANIZATIONSESSIONSETTINGSRESPONSE'].fields_by_name['session_settings']._serialized_options = b'\222AA2?The newly created session settings, including timeout policies.' - _globals['_GETORGANIZATIONSESSIONSETTINGSRESPONSE'].fields_by_name['environment_id']._loaded_options = None - _globals['_GETORGANIZATIONSESSIONSETTINGSRESPONSE'].fields_by_name['environment_id']._serialized_options = b'\222A]2BThe environment ID from which the session settings were retrieved.J\027\"env_59615193906282635\"' - _globals['_GETORGANIZATIONSESSIONSETTINGSRESPONSE'].fields_by_name['organization_id']._loaded_options = None - _globals['_GETORGANIZATIONSESSIONSETTINGSRESPONSE'].fields_by_name['organization_id']._serialized_options = b'\222Ai2NThe unique identifier of the organization whose session settings are returned.J\027\"org_59615193906282635\"' - _globals['_GETORGANIZATIONSESSIONSETTINGSRESPONSE'].fields_by_name['session_settings']._loaded_options = None - _globals['_GETORGANIZATIONSESSIONSETTINGSRESPONSE'].fields_by_name['session_settings']._serialized_options = b'\222A>2 None: ... class CreateOrganization(_message.Message): - __slots__ = ("display_name", "region_code", "external_id", "metadata") + __slots__ = ("display_name", "region_code", "external_id", "metadata", "slug") class MetadataEntry(_message.Message): __slots__ = ("key", "value") KEY_FIELD_NUMBER: _ClassVar[int] @@ -56,14 +65,16 @@ class CreateOrganization(_message.Message): REGION_CODE_FIELD_NUMBER: _ClassVar[int] EXTERNAL_ID_FIELD_NUMBER: _ClassVar[int] METADATA_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] display_name: str region_code: _commons_pb2.RegionCode external_id: str metadata: _containers.ScalarMap[str, str] - def __init__(self, display_name: _Optional[str] = ..., region_code: _Optional[_Union[_commons_pb2.RegionCode, str]] = ..., external_id: _Optional[str] = ..., metadata: _Optional[_Mapping[str, str]] = ...) -> None: ... + slug: str + def __init__(self, display_name: _Optional[str] = ..., region_code: _Optional[_Union[_commons_pb2.RegionCode, str]] = ..., external_id: _Optional[str] = ..., metadata: _Optional[_Mapping[str, str]] = ..., slug: _Optional[str] = ...) -> None: ... class Organization(_message.Message): - __slots__ = ("id", "create_time", "update_time", "display_name", "region_code", "external_id", "metadata", "settings") + __slots__ = ("id", "create_time", "update_time", "display_name", "region_code", "external_id", "metadata", "settings", "slug") class MetadataEntry(_message.Message): __slots__ = ("key", "value") KEY_FIELD_NUMBER: _ClassVar[int] @@ -79,6 +90,7 @@ class Organization(_message.Message): EXTERNAL_ID_FIELD_NUMBER: _ClassVar[int] METADATA_FIELD_NUMBER: _ClassVar[int] SETTINGS_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] id: str create_time: _timestamp_pb2.Timestamp update_time: _timestamp_pb2.Timestamp @@ -87,7 +99,8 @@ class Organization(_message.Message): external_id: str metadata: _containers.ScalarMap[str, str] settings: OrganizationSettings - def __init__(self, id: _Optional[str] = ..., create_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., update_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., display_name: _Optional[str] = ..., region_code: _Optional[_Union[_commons_pb2.RegionCode, str]] = ..., external_id: _Optional[str] = ..., metadata: _Optional[_Mapping[str, str]] = ..., settings: _Optional[_Union[OrganizationSettings, _Mapping]] = ...) -> None: ... + slug: str + def __init__(self, id: _Optional[str] = ..., create_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., update_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., display_name: _Optional[str] = ..., region_code: _Optional[_Union[_commons_pb2.RegionCode, str]] = ..., external_id: _Optional[str] = ..., metadata: _Optional[_Mapping[str, str]] = ..., settings: _Optional[_Union[OrganizationSettings, _Mapping]] = ..., slug: _Optional[str] = ...) -> None: ... class UpdateOrganizationRequest(_message.Message): __slots__ = ("id", "external_id", "organization", "update_mask") @@ -102,7 +115,7 @@ class UpdateOrganizationRequest(_message.Message): def __init__(self, id: _Optional[str] = ..., external_id: _Optional[str] = ..., organization: _Optional[_Union[UpdateOrganization, _Mapping]] = ..., update_mask: _Optional[_Union[_field_mask_pb2.FieldMask, _Mapping]] = ...) -> None: ... class UpdateOrganization(_message.Message): - __slots__ = ("display_name", "external_id", "metadata") + __slots__ = ("display_name", "external_id", "metadata", "slug") class MetadataEntry(_message.Message): __slots__ = ("key", "value") KEY_FIELD_NUMBER: _ClassVar[int] @@ -113,10 +126,12 @@ class UpdateOrganization(_message.Message): DISPLAY_NAME_FIELD_NUMBER: _ClassVar[int] EXTERNAL_ID_FIELD_NUMBER: _ClassVar[int] METADATA_FIELD_NUMBER: _ClassVar[int] + SLUG_FIELD_NUMBER: _ClassVar[int] display_name: str external_id: str metadata: _containers.ScalarMap[str, str] - def __init__(self, display_name: _Optional[str] = ..., external_id: _Optional[str] = ..., metadata: _Optional[_Mapping[str, str]] = ...) -> None: ... + slug: str + def __init__(self, display_name: _Optional[str] = ..., external_id: _Optional[str] = ..., metadata: _Optional[_Mapping[str, str]] = ..., slug: _Optional[str] = ...) -> None: ... class UpdateOrganizationResponse(_message.Message): __slots__ = ("organization",) @@ -252,25 +267,47 @@ class UpdateOrganizationSettingsRequest(_message.Message): settings: OrganizationSettings def __init__(self, id: _Optional[str] = ..., settings: _Optional[_Union[OrganizationSettings, _Mapping]] = ...) -> None: ... -class UpdateOrganizationSessionSettingsRequest(_message.Message): - __slots__ = ("id", "environment_id", "session_settings") - ID_FIELD_NUMBER: _ClassVar[int] - ENVIRONMENT_ID_FIELD_NUMBER: _ClassVar[int] - SESSION_SETTINGS_FIELD_NUMBER: _ClassVar[int] - id: str - environment_id: str - session_settings: OrganizationSessionSettings - def __init__(self, id: _Optional[str] = ..., environment_id: _Optional[str] = ..., session_settings: _Optional[_Union[OrganizationSessionSettings, _Mapping]] = ...) -> None: ... +class OrganizationSessionPolicySettings(_message.Message): + __slots__ = ("policy_source", "absolute_session_timeout", "absolute_session_timeout_unit", "idle_session_timeout_enabled", "idle_session_timeout", "idle_session_timeout_unit") + POLICY_SOURCE_FIELD_NUMBER: _ClassVar[int] + ABSOLUTE_SESSION_TIMEOUT_FIELD_NUMBER: _ClassVar[int] + ABSOLUTE_SESSION_TIMEOUT_UNIT_FIELD_NUMBER: _ClassVar[int] + IDLE_SESSION_TIMEOUT_ENABLED_FIELD_NUMBER: _ClassVar[int] + IDLE_SESSION_TIMEOUT_FIELD_NUMBER: _ClassVar[int] + IDLE_SESSION_TIMEOUT_UNIT_FIELD_NUMBER: _ClassVar[int] + policy_source: SessionPolicySource + absolute_session_timeout: _wrappers_pb2.Int32Value + absolute_session_timeout_unit: _commons_pb2.TimeUnit + idle_session_timeout_enabled: _wrappers_pb2.BoolValue + idle_session_timeout: _wrappers_pb2.Int32Value + idle_session_timeout_unit: _commons_pb2.TimeUnit + def __init__(self, policy_source: _Optional[_Union[SessionPolicySource, str]] = ..., absolute_session_timeout: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., absolute_session_timeout_unit: _Optional[_Union[_commons_pb2.TimeUnit, str]] = ..., idle_session_timeout_enabled: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., idle_session_timeout: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., idle_session_timeout_unit: _Optional[_Union[_commons_pb2.TimeUnit, str]] = ...) -> None: ... -class UpdateOrganizationSessionSettingsResponse(_message.Message): - __slots__ = ("environment_id", "organization_id", "session_settings") - ENVIRONMENT_ID_FIELD_NUMBER: _ClassVar[int] +class GetOrganizationSessionPolicyRequest(_message.Message): + __slots__ = ("organization_id",) ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] - SESSION_SETTINGS_FIELD_NUMBER: _ClassVar[int] - environment_id: str organization_id: str - session_settings: OrganizationSessionSettings - def __init__(self, environment_id: _Optional[str] = ..., organization_id: _Optional[str] = ..., session_settings: _Optional[_Union[OrganizationSessionSettings, _Mapping]] = ...) -> None: ... + def __init__(self, organization_id: _Optional[str] = ...) -> None: ... + +class GetOrganizationSessionPolicyResponse(_message.Message): + __slots__ = ("policy",) + POLICY_FIELD_NUMBER: _ClassVar[int] + policy: OrganizationSessionPolicySettings + def __init__(self, policy: _Optional[_Union[OrganizationSessionPolicySettings, _Mapping]] = ...) -> None: ... + +class UpdateOrganizationSessionPolicyRequest(_message.Message): + __slots__ = ("organization_id", "policy") + ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] + POLICY_FIELD_NUMBER: _ClassVar[int] + organization_id: str + policy: OrganizationSessionPolicySettings + def __init__(self, organization_id: _Optional[str] = ..., policy: _Optional[_Union[OrganizationSessionPolicySettings, _Mapping]] = ...) -> None: ... + +class UpdateOrganizationSessionPolicyResponse(_message.Message): + __slots__ = ("policy",) + POLICY_FIELD_NUMBER: _ClassVar[int] + policy: OrganizationSessionPolicySettings + def __init__(self, policy: _Optional[_Union[OrganizationSessionPolicySettings, _Mapping]] = ...) -> None: ... class OrganizationUserManagementSettings(_message.Message): __slots__ = ("max_allowed_users",) @@ -279,60 +316,16 @@ class OrganizationUserManagementSettings(_message.Message): def __init__(self, max_allowed_users: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ...) -> None: ... class OrganizationSessionSettings(_message.Message): - __slots__ = ("absolute_session_timeout", "session_management_enabled", "idle_session_timeout", "idle_session_enabled") + __slots__ = ("absolute_session_timeout", "idle_session_timeout", "idle_session_timeout_enabled", "policy_source") ABSOLUTE_SESSION_TIMEOUT_FIELD_NUMBER: _ClassVar[int] - SESSION_MANAGEMENT_ENABLED_FIELD_NUMBER: _ClassVar[int] IDLE_SESSION_TIMEOUT_FIELD_NUMBER: _ClassVar[int] - IDLE_SESSION_ENABLED_FIELD_NUMBER: _ClassVar[int] + IDLE_SESSION_TIMEOUT_ENABLED_FIELD_NUMBER: _ClassVar[int] + POLICY_SOURCE_FIELD_NUMBER: _ClassVar[int] absolute_session_timeout: _wrappers_pb2.Int32Value - session_management_enabled: _wrappers_pb2.BoolValue idle_session_timeout: _wrappers_pb2.Int32Value - idle_session_enabled: _wrappers_pb2.BoolValue - def __init__(self, absolute_session_timeout: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., session_management_enabled: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., idle_session_timeout: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., idle_session_enabled: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ...) -> None: ... - -class GetOrganizationSessionSettingsRequest(_message.Message): - __slots__ = ("id", "environment_id") - ID_FIELD_NUMBER: _ClassVar[int] - ENVIRONMENT_ID_FIELD_NUMBER: _ClassVar[int] - id: str - environment_id: str - def __init__(self, id: _Optional[str] = ..., environment_id: _Optional[str] = ...) -> None: ... - -class CreateOrganizationSessionSettingsRequest(_message.Message): - __slots__ = ("id", "environment_id") - ID_FIELD_NUMBER: _ClassVar[int] - ENVIRONMENT_ID_FIELD_NUMBER: _ClassVar[int] - id: str - environment_id: str - def __init__(self, id: _Optional[str] = ..., environment_id: _Optional[str] = ...) -> None: ... - -class CreateOrganizationSessionSettingsResponse(_message.Message): - __slots__ = ("environment_id", "organization_id", "session_settings") - ENVIRONMENT_ID_FIELD_NUMBER: _ClassVar[int] - ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] - SESSION_SETTINGS_FIELD_NUMBER: _ClassVar[int] - environment_id: str - organization_id: str - session_settings: OrganizationSessionSettings - def __init__(self, environment_id: _Optional[str] = ..., organization_id: _Optional[str] = ..., session_settings: _Optional[_Union[OrganizationSessionSettings, _Mapping]] = ...) -> None: ... - -class GetOrganizationSessionSettingsResponse(_message.Message): - __slots__ = ("environment_id", "organization_id", "session_settings") - ENVIRONMENT_ID_FIELD_NUMBER: _ClassVar[int] - ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] - SESSION_SETTINGS_FIELD_NUMBER: _ClassVar[int] - environment_id: str - organization_id: str - session_settings: OrganizationSessionSettings - def __init__(self, environment_id: _Optional[str] = ..., organization_id: _Optional[str] = ..., session_settings: _Optional[_Union[OrganizationSessionSettings, _Mapping]] = ...) -> None: ... - -class DeleteOrganizationSessionSettingsRequest(_message.Message): - __slots__ = ("id", "environment_id") - ID_FIELD_NUMBER: _ClassVar[int] - ENVIRONMENT_ID_FIELD_NUMBER: _ClassVar[int] - id: str - environment_id: str - def __init__(self, id: _Optional[str] = ..., environment_id: _Optional[str] = ...) -> None: ... + idle_session_timeout_enabled: _wrappers_pb2.BoolValue + policy_source: str + def __init__(self, absolute_session_timeout: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., idle_session_timeout: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., idle_session_timeout_enabled: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., policy_source: _Optional[str] = ...) -> None: ... class OrganizationSettings(_message.Message): __slots__ = ("features",) diff --git a/scalekit/v1/organizations/organizations_pb2_grpc.py b/scalekit/v1/organizations/organizations_pb2_grpc.py index 031edae..50513b4 100644 --- a/scalekit/v1/organizations/organizations_pb2_grpc.py +++ b/scalekit/v1/organizations/organizations_pb2_grpc.py @@ -30,6 +30,11 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationResponse.FromString, ) + self.GetOrganizationByExternalId = channel.unary_unary( + '/scalekit.v1.organizations.OrganizationService/GetOrganizationByExternalId', + request_serializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationResponse.FromString, + ) self.ListOrganization = channel.unary_unary( '/scalekit.v1.organizations.OrganizationService/ListOrganization', request_serializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.ListOrganizationsRequest.SerializeToString, @@ -70,25 +75,15 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.UpdateOrganizationSettingsRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationResponse.FromString, ) - self.CreateOrganizationSessionSettings = channel.unary_unary( - '/scalekit.v1.organizations.OrganizationService/CreateOrganizationSessionSettings', - request_serializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.CreateOrganizationSessionSettingsRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.CreateOrganizationSessionSettingsResponse.FromString, + self.UpdateOrganizationSessionPolicy = channel.unary_unary( + '/scalekit.v1.organizations.OrganizationService/UpdateOrganizationSessionPolicy', + request_serializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.UpdateOrganizationSessionPolicyRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.UpdateOrganizationSessionPolicyResponse.FromString, ) - self.GetOrganizationSessionSettings = channel.unary_unary( - '/scalekit.v1.organizations.OrganizationService/GetOrganizationSessionSettings', - request_serializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationSessionSettingsRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationSessionSettingsResponse.FromString, - ) - self.UpdateOrganizationSessionSettings = channel.unary_unary( - '/scalekit.v1.organizations.OrganizationService/UpdateOrganizationSessionSettings', - request_serializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.UpdateOrganizationSessionSettingsRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.UpdateOrganizationSessionSettingsResponse.FromString, - ) - self.DeleteOrganizationSessionSettings = channel.unary_unary( - '/scalekit.v1.organizations.OrganizationService/DeleteOrganizationSessionSettings', - request_serializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.DeleteOrganizationSessionSettingsRequest.SerializeToString, - response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + self.GetOrganizationSessionPolicy = channel.unary_unary( + '/scalekit.v1.organizations.OrganizationService/GetOrganizationSessionPolicy', + request_serializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationSessionPolicyRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationSessionPolicyResponse.FromString, ) self.UpsertUserManagementSettings = channel.unary_unary( '/scalekit.v1.organizations.OrganizationService/UpsertUserManagementSettings', @@ -124,6 +119,12 @@ def GetOrganization(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def GetOrganizationByExternalId(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def ListOrganization(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -174,25 +175,13 @@ def UpdateOrganizationSettings(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') - def CreateOrganizationSessionSettings(self, request, context): + def UpdateOrganizationSessionPolicy(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') - def GetOrganizationSessionSettings(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def UpdateOrganizationSessionSettings(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def DeleteOrganizationSessionSettings(self, request, context): + def GetOrganizationSessionPolicy(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') @@ -229,6 +218,11 @@ def add_OrganizationServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationRequest.FromString, response_serializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationResponse.SerializeToString, ), + 'GetOrganizationByExternalId': grpc.unary_unary_rpc_method_handler( + servicer.GetOrganizationByExternalId, + request_deserializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationRequest.FromString, + response_serializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationResponse.SerializeToString, + ), 'ListOrganization': grpc.unary_unary_rpc_method_handler( servicer.ListOrganization, request_deserializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.ListOrganizationsRequest.FromString, @@ -269,25 +263,15 @@ def add_OrganizationServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.UpdateOrganizationSettingsRequest.FromString, response_serializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationResponse.SerializeToString, ), - 'CreateOrganizationSessionSettings': grpc.unary_unary_rpc_method_handler( - servicer.CreateOrganizationSessionSettings, - request_deserializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.CreateOrganizationSessionSettingsRequest.FromString, - response_serializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.CreateOrganizationSessionSettingsResponse.SerializeToString, - ), - 'GetOrganizationSessionSettings': grpc.unary_unary_rpc_method_handler( - servicer.GetOrganizationSessionSettings, - request_deserializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationSessionSettingsRequest.FromString, - response_serializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationSessionSettingsResponse.SerializeToString, + 'UpdateOrganizationSessionPolicy': grpc.unary_unary_rpc_method_handler( + servicer.UpdateOrganizationSessionPolicy, + request_deserializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.UpdateOrganizationSessionPolicyRequest.FromString, + response_serializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.UpdateOrganizationSessionPolicyResponse.SerializeToString, ), - 'UpdateOrganizationSessionSettings': grpc.unary_unary_rpc_method_handler( - servicer.UpdateOrganizationSessionSettings, - request_deserializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.UpdateOrganizationSessionSettingsRequest.FromString, - response_serializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.UpdateOrganizationSessionSettingsResponse.SerializeToString, - ), - 'DeleteOrganizationSessionSettings': grpc.unary_unary_rpc_method_handler( - servicer.DeleteOrganizationSessionSettings, - request_deserializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.DeleteOrganizationSessionSettingsRequest.FromString, - response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + 'GetOrganizationSessionPolicy': grpc.unary_unary_rpc_method_handler( + servicer.GetOrganizationSessionPolicy, + request_deserializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationSessionPolicyRequest.FromString, + response_serializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationSessionPolicyResponse.SerializeToString, ), 'UpsertUserManagementSettings': grpc.unary_unary_rpc_method_handler( servicer.UpsertUserManagementSettings, @@ -360,6 +344,23 @@ def GetOrganization(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod + def GetOrganizationByExternalId(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.organizations.OrganizationService/GetOrganizationByExternalId', + scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationRequest.SerializeToString, + scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod def ListOrganization(request, target, @@ -497,24 +498,7 @@ def UpdateOrganizationSettings(request, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod - def CreateOrganizationSessionSettings(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.organizations.OrganizationService/CreateOrganizationSessionSettings', - scalekit_dot_v1_dot_organizations_dot_organizations__pb2.CreateOrganizationSessionSettingsRequest.SerializeToString, - scalekit_dot_v1_dot_organizations_dot_organizations__pb2.CreateOrganizationSessionSettingsResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - @staticmethod - def GetOrganizationSessionSettings(request, + def UpdateOrganizationSessionPolicy(request, target, options=(), channel_credentials=None, @@ -524,14 +508,14 @@ def GetOrganizationSessionSettings(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.organizations.OrganizationService/GetOrganizationSessionSettings', - scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationSessionSettingsRequest.SerializeToString, - scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationSessionSettingsResponse.FromString, + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.organizations.OrganizationService/UpdateOrganizationSessionPolicy', + scalekit_dot_v1_dot_organizations_dot_organizations__pb2.UpdateOrganizationSessionPolicyRequest.SerializeToString, + scalekit_dot_v1_dot_organizations_dot_organizations__pb2.UpdateOrganizationSessionPolicyResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod - def UpdateOrganizationSessionSettings(request, + def GetOrganizationSessionPolicy(request, target, options=(), channel_credentials=None, @@ -541,26 +525,9 @@ def UpdateOrganizationSessionSettings(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.organizations.OrganizationService/UpdateOrganizationSessionSettings', - scalekit_dot_v1_dot_organizations_dot_organizations__pb2.UpdateOrganizationSessionSettingsRequest.SerializeToString, - scalekit_dot_v1_dot_organizations_dot_organizations__pb2.UpdateOrganizationSessionSettingsResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - @staticmethod - def DeleteOrganizationSessionSettings(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.organizations.OrganizationService/DeleteOrganizationSessionSettings', - scalekit_dot_v1_dot_organizations_dot_organizations__pb2.DeleteOrganizationSessionSettingsRequest.SerializeToString, - google_dot_protobuf_dot_empty__pb2.Empty.FromString, + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.organizations.OrganizationService/GetOrganizationSessionPolicy', + scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationSessionPolicyRequest.SerializeToString, + scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationSessionPolicyResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/providers/providers_pb2.py b/scalekit/v1/providers/providers_pb2.py index 4dcb5cf..ecde0df 100644 --- a/scalekit/v1/providers/providers_pb2.py +++ b/scalekit/v1/providers/providers_pb2.py @@ -23,7 +23,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%scalekit/v1/providers/providers.proto\x12\x15scalekit.v1.providers\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\x89\x03\n\x08Provider\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1e\n\nidentifier\x18\x02 \x01(\tR\nidentifier\x12!\n\x0c\x64isplay_name\x18\x03 \x01(\tR\x0b\x64isplayName\x12 \n\x0b\x64\x65scription\x18\x04 \x01(\tR\x0b\x64\x65scription\x12\x1e\n\ncategories\x18\x05 \x03(\tR\ncategories\x12?\n\rauth_patterns\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.ListValueR\x0c\x61uthPatterns\x12\x19\n\x08icon_src\x18\x07 \x01(\tR\x07iconSrc\x12)\n\x10\x64isplay_priority\x18\x08 \x01(\x05R\x0f\x64isplayPriority\x12\x1f\n\x0b\x63oming_soon\x18\t \x01(\x08R\ncomingSoon\x12\x1b\n\tproxy_url\x18\n \x01(\tR\x08proxyUrl\x12#\n\rproxy_enabled\x18\x0b \x01(\x08R\x0cproxyEnabled\"\x81\n\n\x0e\x43reateProvider\x12\x87\x01\n\nidentifier\x18\x02 \x01(\tBg\x92\x41\x46\x32\x30Unique identifier for the connected app providerJ\x12\"google_workspace\"\xbaH\x1br\x16\x10\x01\x18\x64\x32\x10^[a-zA-Z0-9_-]*$\xc8\x01\x01R\nidentifier\x12t\n\x0c\x64isplay_name\x18\x03 \x01(\tBQ\x92\x41\x41\x32+Display name for the connected app providerJ\x12\"Google Workspace\"\xbaH\nr\x05\x10\x01\x18\xc8\x01\xc8\x01\x01R\x0b\x64isplayName\x12\x92\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tBp\x92\x41m2)Description of the connected app providerJ@\"Connect to Google Workspace for email and calendar integration\"R\x0b\x64\x65scription\x12i\n\ncategories\x18\x05 \x03(\tBI\x92\x41\x46\x32)Categories for the connected app providerJ\x19[\"productivity\", \"email\"]R\ncategories\x12\x82\x01\n\rauth_patterns\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.ListValueBA\x92\x41\x38\x32\x36\x41uthentication patterns for the connected app provider\xbaH\x03\xc8\x01\x01R\x0c\x61uthPatterns\x12\x82\x01\n\x08icon_src\x18\x07 \x01(\tBg\x92\x41\x64\x32/Image source URL for the connected app providerJ1\"https://example.com/images/google_workspace.png\"R\x07iconSrc\x12)\n\x10\x64isplay_priority\x18\x08 \x01(\x05R\x0f\x64isplayPriority\x12\x63\n\x0b\x63oming_soon\x18\t \x01(\x08\x42\x42\x92\x41?26Indicates if the connected app provider is coming soonJ\x05\x66\x61lseR\ncomingSoon\x12k\n\tproxy_url\x18\n \x01(\tBN\x92\x41K2(Proxy URL for the connected app providerJ\x1f\"https://workspace.google.com/\"R\x08proxyUrl\x12\xe1\x01\n\rproxy_enabled\x18\x0b \x01(\x08\x42\xbb\x01\x92\x41\xb7\x01\x32\xae\x01This flag indicates whether proxying is turned on for the connected app provider. When enabled, requests are routed through the provider proxy instead of being sent directly.J\x04trueR\x0cproxyEnabledJ\x04\x08\x01\x10\x02\"\x96\x01\n\x15\x43reateProviderRequest\x12}\n\x08provider\x18\x01 \x01(\x0b\x32%.scalekit.v1.providers.CreateProviderB:\x92\x41\x31\x32/Details of the connected app provider to create\xbaH\x03\xc8\x01\x01R\x08provider\"U\n\x16\x43reateProviderResponse\x12;\n\x08provider\x18\x01 \x01(\x0b\x32\x1f.scalekit.v1.providers.ProviderR\x08provider\"\xb9\x08\n\x0eUpdateProvider\x12t\n\x0c\x64isplay_name\x18\x03 \x01(\tBQ\x92\x41\x41\x32+Display name for the connected app providerJ\x12\"Google Workspace\"\xbaH\nr\x05\x10\x01\x18\xc8\x01\xc8\x01\x01R\x0b\x64isplayName\x12\x92\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tBp\x92\x41m2)Description of the connected app providerJ@\"Connect to Google Workspace for email and calendar integration\"R\x0b\x64\x65scription\x12i\n\ncategories\x18\x05 \x03(\tBI\x92\x41\x46\x32)Categories for the connected app providerJ\x19[\"productivity\", \"email\"]R\ncategories\x12|\n\rauth_patterns\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.ListValueB;\x92\x41\x38\x32\x36\x41uthentication patterns for the connected app providerR\x0c\x61uthPatterns\x12\x82\x01\n\x08icon_src\x18\x07 \x01(\tBg\x92\x41\x64\x32/Image source URL for the connected app providerJ1\"https://example.com/images/google_workspace.png\"R\x07iconSrc\x12)\n\x10\x64isplay_priority\x18\x08 \x01(\x05R\x0f\x64isplayPriority\x12\x7f\n\x0b\x63oming_soon\x18\t \x01(\x0b\x32\x1a.google.protobuf.BoolValueBB\x92\x41?26Indicates if the connected app provider is coming soonJ\x05\x66\x61lseR\ncomingSoon\x12k\n\tproxy_url\x18\n \x01(\tBN\x92\x41K2(Proxy URL for the connected app providerJ\x1f\"https://workspace.google.com/\"R\x08proxyUrl\x12\x88\x01\n\rproxy_enabled\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.BoolValueBG\x92\x41\x44\x32 None: ... + is_custom: bool + is_custom_mcp: bool + def __init__(self, id: _Optional[str] = ..., identifier: _Optional[str] = ..., display_name: _Optional[str] = ..., description: _Optional[str] = ..., categories: _Optional[_Iterable[str]] = ..., auth_patterns: _Optional[_Union[_struct_pb2.ListValue, _Mapping]] = ..., icon_src: _Optional[str] = ..., display_priority: _Optional[int] = ..., coming_soon: bool = ..., proxy_url: _Optional[str] = ..., proxy_enabled: bool = ..., is_custom: bool = ..., is_custom_mcp: bool = ...) -> None: ... class CreateProvider(_message.Message): __slots__ = ("identifier", "display_name", "description", "categories", "auth_patterns", "icon_src", "display_priority", "coming_soon", "proxy_url", "proxy_enabled") @@ -70,6 +84,28 @@ class CreateProviderRequest(_message.Message): provider: CreateProvider def __init__(self, provider: _Optional[_Union[CreateProvider, _Mapping]] = ...) -> None: ... +class CreateCustomProvider(_message.Message): + __slots__ = ("display_name", "description", "auth_patterns", "proxy_url", "proxy_enabled", "icon_src") + DISPLAY_NAME_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + AUTH_PATTERNS_FIELD_NUMBER: _ClassVar[int] + PROXY_URL_FIELD_NUMBER: _ClassVar[int] + PROXY_ENABLED_FIELD_NUMBER: _ClassVar[int] + ICON_SRC_FIELD_NUMBER: _ClassVar[int] + display_name: str + description: str + auth_patterns: _struct_pb2.ListValue + proxy_url: str + proxy_enabled: bool + icon_src: str + def __init__(self, display_name: _Optional[str] = ..., description: _Optional[str] = ..., auth_patterns: _Optional[_Union[_struct_pb2.ListValue, _Mapping]] = ..., proxy_url: _Optional[str] = ..., proxy_enabled: bool = ..., icon_src: _Optional[str] = ...) -> None: ... + +class CreateCustomProviderRequest(_message.Message): + __slots__ = ("provider",) + PROVIDER_FIELD_NUMBER: _ClassVar[int] + provider: CreateCustomProvider + def __init__(self, provider: _Optional[_Union[CreateCustomProvider, _Mapping]] = ...) -> None: ... + class CreateProviderResponse(_message.Message): __slots__ = ("provider",) PROVIDER_FIELD_NUMBER: _ClassVar[int] @@ -106,6 +142,30 @@ class UpdateProviderRequest(_message.Message): provider: UpdateProvider def __init__(self, identifier: _Optional[str] = ..., provider: _Optional[_Union[UpdateProvider, _Mapping]] = ...) -> None: ... +class UpdateCustomProvider(_message.Message): + __slots__ = ("display_name", "description", "auth_patterns", "proxy_url", "proxy_enabled", "icon_src") + DISPLAY_NAME_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + AUTH_PATTERNS_FIELD_NUMBER: _ClassVar[int] + PROXY_URL_FIELD_NUMBER: _ClassVar[int] + PROXY_ENABLED_FIELD_NUMBER: _ClassVar[int] + ICON_SRC_FIELD_NUMBER: _ClassVar[int] + display_name: str + description: str + auth_patterns: _struct_pb2.ListValue + proxy_url: str + proxy_enabled: bool + icon_src: str + def __init__(self, display_name: _Optional[str] = ..., description: _Optional[str] = ..., auth_patterns: _Optional[_Union[_struct_pb2.ListValue, _Mapping]] = ..., proxy_url: _Optional[str] = ..., proxy_enabled: bool = ..., icon_src: _Optional[str] = ...) -> None: ... + +class UpdateCustomProviderRequest(_message.Message): + __slots__ = ("identifier", "provider") + IDENTIFIER_FIELD_NUMBER: _ClassVar[int] + PROVIDER_FIELD_NUMBER: _ClassVar[int] + identifier: str + provider: UpdateCustomProvider + def __init__(self, identifier: _Optional[str] = ..., provider: _Optional[_Union[UpdateCustomProvider, _Mapping]] = ...) -> None: ... + class UpdateProviderResponse(_message.Message): __slots__ = ("provider",) PROVIDER_FIELD_NUMBER: _ClassVar[int] @@ -113,14 +173,21 @@ class UpdateProviderResponse(_message.Message): def __init__(self, provider: _Optional[_Union[Provider, _Mapping]] = ...) -> None: ... class ListProvidersRequest(_message.Message): - __slots__ = ("identifier", "page_size", "page_token") + __slots__ = ("identifier", "page_size", "page_token", "filter") + class Filter(_message.Message): + __slots__ = ("provider_type",) + PROVIDER_TYPE_FIELD_NUMBER: _ClassVar[int] + provider_type: ProviderType + def __init__(self, provider_type: _Optional[_Union[ProviderType, str]] = ...) -> None: ... IDENTIFIER_FIELD_NUMBER: _ClassVar[int] PAGE_SIZE_FIELD_NUMBER: _ClassVar[int] PAGE_TOKEN_FIELD_NUMBER: _ClassVar[int] + FILTER_FIELD_NUMBER: _ClassVar[int] identifier: str page_size: int page_token: str - def __init__(self, identifier: _Optional[str] = ..., page_size: _Optional[int] = ..., page_token: _Optional[str] = ...) -> None: ... + filter: ListProvidersRequest.Filter + def __init__(self, identifier: _Optional[str] = ..., page_size: _Optional[int] = ..., page_token: _Optional[str] = ..., filter: _Optional[_Union[ListProvidersRequest.Filter, _Mapping]] = ...) -> None: ... class ListProvidersResponse(_message.Message): __slots__ = ("providers", "next_page_token", "total_size", "prev_page_token") diff --git a/scalekit/v1/providers/providers_pb2_grpc.py b/scalekit/v1/providers/providers_pb2_grpc.py index 2e78b3c..a64aa76 100644 --- a/scalekit/v1/providers/providers_pb2_grpc.py +++ b/scalekit/v1/providers/providers_pb2_grpc.py @@ -20,16 +20,31 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateProviderRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateProviderResponse.FromString, ) + self.CreateCustomProvider = channel.unary_unary( + '/scalekit.v1.providers.ProviderService/CreateCustomProvider', + request_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateCustomProviderRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateProviderResponse.FromString, + ) self.UpdateProvider = channel.unary_unary( '/scalekit.v1.providers.ProviderService/UpdateProvider', request_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateProviderRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateProviderResponse.FromString, ) + self.UpdateCustomProvider = channel.unary_unary( + '/scalekit.v1.providers.ProviderService/UpdateCustomProvider', + request_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateCustomProviderRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateProviderResponse.FromString, + ) self.DeleteProvider = channel.unary_unary( '/scalekit.v1.providers.ProviderService/DeleteProvider', request_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderResponse.FromString, ) + self.DeleteCustomProvider = channel.unary_unary( + '/scalekit.v1.providers.ProviderService/DeleteCustomProvider', + request_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderResponse.FromString, + ) self.ListProviders = channel.unary_unary( '/scalekit.v1.providers.ProviderService/ListProviders', request_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.ListProvidersRequest.SerializeToString, @@ -47,18 +62,36 @@ def CreateProvider(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def CreateCustomProvider(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def UpdateProvider(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def UpdateCustomProvider(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def DeleteProvider(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def DeleteCustomProvider(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def ListProviders(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -73,16 +106,31 @@ def add_ProviderServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateProviderRequest.FromString, response_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateProviderResponse.SerializeToString, ), + 'CreateCustomProvider': grpc.unary_unary_rpc_method_handler( + servicer.CreateCustomProvider, + request_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateCustomProviderRequest.FromString, + response_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateProviderResponse.SerializeToString, + ), 'UpdateProvider': grpc.unary_unary_rpc_method_handler( servicer.UpdateProvider, request_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateProviderRequest.FromString, response_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateProviderResponse.SerializeToString, ), + 'UpdateCustomProvider': grpc.unary_unary_rpc_method_handler( + servicer.UpdateCustomProvider, + request_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateCustomProviderRequest.FromString, + response_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateProviderResponse.SerializeToString, + ), 'DeleteProvider': grpc.unary_unary_rpc_method_handler( servicer.DeleteProvider, request_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderRequest.FromString, response_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderResponse.SerializeToString, ), + 'DeleteCustomProvider': grpc.unary_unary_rpc_method_handler( + servicer.DeleteCustomProvider, + request_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderRequest.FromString, + response_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderResponse.SerializeToString, + ), 'ListProviders': grpc.unary_unary_rpc_method_handler( servicer.ListProviders, request_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.ListProvidersRequest.FromString, @@ -116,6 +164,23 @@ def CreateProvider(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod + def CreateCustomProvider(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.providers.ProviderService/CreateCustomProvider', + scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateCustomProviderRequest.SerializeToString, + scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateProviderResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod def UpdateProvider(request, target, @@ -133,6 +198,23 @@ def UpdateProvider(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod + def UpdateCustomProvider(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.providers.ProviderService/UpdateCustomProvider', + scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateCustomProviderRequest.SerializeToString, + scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateProviderResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod def DeleteProvider(request, target, @@ -150,6 +232,23 @@ def DeleteProvider(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod + def DeleteCustomProvider(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.providers.ProviderService/DeleteCustomProvider', + scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderRequest.SerializeToString, + scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod def ListProviders(request, target, diff --git a/scalekit/v1/roles/roles_pb2.py b/scalekit/v1/roles/roles_pb2.py index 1520db7..f0dc7e0 100644 --- a/scalekit/v1/roles/roles_pb2.py +++ b/scalekit/v1/roles/roles_pb2.py @@ -26,7 +26,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dscalekit/v1/roles/roles.proto\x12\x11scalekit.v1.roles\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"\x8b\r\n\x04Role\x12y\n\x02id\x18\x01 \x01(\tBi\x92\x41\x63\x32HUnique system-generated identifier for the role. Immutable once created.J\x17\"role_1234abcd5678efgh\"\xe0\x41\x03R\x02id\x12\x95\x01\n\x04name\x18\x02 \x01(\tB\x80\x01\x92\x41q2]Unique name identifier for the role. Must be alphanumeric with underscores, 1-100 characters.J\x10\"content_editor\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x04name\x12\x94\x01\n\x0c\x64isplay_name\x18\x03 \x01(\tBq\x92\x41\x62\x32NHuman-readable display name for the role. Used in user interfaces and reports.J\x10\"Content Editor\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x0b\x64isplayName\x12\xc9\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tB\xa6\x01\x92\x41\xa2\x01\x32UDetailed description of the role\'s purpose and capabilities. Maximum 2000 characters.JI\"Can create, edit, and publish content but cannot delete or manage users\"R\x0b\x64\x65scription\x12}\n\x0f\x64\x65\x66\x61ult_creator\x18\x06 \x01(\x08\x42T\x92\x41Q2IIndicates if this role is the default creator role for new organizations.J\x04trueR\x0e\x64\x65\x66\x61ultCreator\x12r\n\x0e\x64\x65\x66\x61ult_member\x18\x07 \x01(\x08\x42K\x92\x41H2@Indicates if this role is the default member role for new users.J\x04trueR\rdefaultMember\x12\xa6\x01\n\x07\x65xtends\x18\x08 \x01(\tB\x86\x01\x92\x41\x64\x32TName of the base role that this role extends. Enables hierarchical role inheritance.J\x0c\"admin_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x07\x65xtends\x88\x01\x01\x12\xef\x02\n\x0bpermissions\x18\t \x03(\x0b\x32!.scalekit.v1.roles.RolePermissionB\xa9\x02\x92\x41\xa5\x02\x32uList of permissions with role source information. Only included when \'include\' parameter is specified in the request.J\xab\x01[{\"name\": \"read:content\", \"description\": \"Read Content\", \"role_name\": \"admin_role\"}, {\"name\": \"write:content\", \"description\": \"Write Content\", \"role_name\": \"editor_role\"}]R\x0bpermissions\x12\x90\x01\n\x15\x64\x65pendent_roles_count\x18\n \x01(\x05\x42\\\x92\x41Y2TNumber of roles that extend from this role (dependent roles count). Read-only field.J\x01\x33R\x13\x64\x65pendentRolesCount\x12Z\n\x0bis_org_role\x18\x0b \x01(\x08\x42:\x92\x41\x37\x32/Indicates if this role is an organization role.J\x04trueR\tisOrgRoleB\n\n\x08_extendsJ\x04\x08\x05\x10\x06\"\xce\t\n\nCreateRole\x12\xf1\x01\n\x04name\x18\x02 \x01(\tB\xdc\x01\x92\x41\xb6\x01\x32\xa1\x01Unique name identifier for the role. Must be alphanumeric with underscores, 1-64 characters. This name is used in API calls and cannot be changed after creation.J\x10\"content_editor\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x04name\x12\xb2\x01\n\x0c\x64isplay_name\x18\x03 \x01(\tB\x8e\x01\x92\x41\x7f\x32kHuman-readable display name for the role. Used in user interfaces, reports, and user-facing communications.J\x10\"Content Editor\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x0b\x64isplayName\x12\xfb\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tB\xd3\x01\x92\x41\xc7\x01\x32jDetailed description of the role\'s purpose, capabilities, and intended use cases. Maximum 2000 characters.JY\"Can create, edit, and publish content but cannot delete content or manage user accounts\"\xbaH\x05r\x03\x18\xd0\x0fH\x00R\x0b\x64\x65scription\x88\x01\x01\x12\xe0\x01\n\x07\x65xtends\x18\x08 \x01(\tB\xc0\x01\x92\x41\x9d\x01\x32\x90\x01Name of the base role that this role extends. Enables hierarchical role inheritance where this role inherits all permissions from the base role.J\x08\"viewer\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x01R\x07\x65xtends\x88\x01\x01\x12\x87\x02\n\x0bpermissions\x18\t \x03(\tB\xe4\x01\x92\x41\xbe\x01\x32\x85\x01List of permission names to assign to this role. Permissions must exist in the current environment. Maximum 100 permissions per role.J4[\"read:content\", \"write:content\", \"publish:content\"]\xbaH\x1f\x92\x01\x1c\x10\x64\"\x18r\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$R\x0bpermissionsB\x0e\n\x0c_descriptionB\n\n\x08_extendsJ\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08\"\xa4\x06\n\x16\x43reateOrganizationRole\x12t\n\x04name\x18\x02 \x01(\tB`\x92\x41;2&Unique name of the organization\'s roleJ\x11\"org_viewer_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x04name\x12w\n\x0c\x64isplay_name\x18\x03 \x01(\tBT\x92\x41\x45\x32\'Display name of the organization\'s roleJ\x1a\"Organization Viewer Role\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x0b\x64isplayName\x12\xa0\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tBy\x92\x41n2&Description of the organization\'s roleJD\"Organization Viewer Role will be used only for viewing the objects\"\xbaH\x05r\x03\x18\xd0\x0fH\x00R\x0b\x64\x65scription\x88\x01\x01\x12v\n\x07\x65xtends\x18\x08 \x01(\tBW\x92\x41\x35\x32%Base role name for hierarchical rolesJ\x0c\"admin_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x01R\x07\x65xtends\x88\x01\x01\x12\xd1\x01\n\x0bpermissions\x18\t \x03(\tB\xae\x01\x92\x41\x88\x01\x32\x63List of permission names to assign to this role. Permissions must exist in the current environment.J![\"read:users\", \"write:documents\"]\xbaH\x1f\x92\x01\x1c\x10\x64\"\x18r\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$R\x0bpermissionsB\x0e\n\x0c_descriptionB\n\n\x08_extendsJ\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08\"\xdc\x02\n\x11\x43reateRoleRequest\x12\xc0\x02\n\x04role\x18\x02 \x01(\x0b\x32\x1d.scalekit.v1.roles.CreateRoleB\x8c\x02\x92\x41\x82\x02\x32lRole configuration details including name, display name, description, permissions, and inheritance settings.J\x91\x01{\"name\": \"content_editor\", \"display_name\": \"Content Editor\", \"description\": \"Can edit content\", \"permissions\": [\"read:content\", \"write:content\"]}\xbaH\x03\xc8\x01\x01R\x04roleJ\x04\x08\x01\x10\x02\"\x9a\x02\n\x12\x43reateRoleResponse\x12\x83\x02\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\xd5\x01\x92\x41\xd1\x01\x32OThe created role object with system-generated ID and all configuration details.J~{\"id\": \"role_1234abcd5678efgh\", \"name\": \"content_editor\", \"display_name\": \"Content Editor\", \"description\": \"Can edit content\"}R\x04role\"\xe7\x03\n\x0eGetRoleRequest\x12\xbe\x01\n\trole_name\x18\x02 \x01(\tB\xa0\x01\x92\x41{2gUnique name identifier of the role to retrieve. Must be alphanumeric with underscores, 1-64 characters.J\x10\"content_editor\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\x81\x02\n\x07include\x18\x03 \x01(\tB\xe1\x01\x92\x41\xb8\x01\x32\xa6\x01Include additional data in the response. Valid values: \'permissions\' (direct permissions only), \'permissions:all\' (includes inherited permissions from role hierarchy)J\r\"permissions\"\xbaH\"r R\x00R\x0bpermissionsR\x0fpermissions:allH\x00R\x07include\x88\x01\x01\x42\n\n\x08_includeJ\x04\x08\x01\x10\x02\"\xbe\x02\n\x0fGetRoleResponse\x12\xaa\x02\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\xfc\x01\x92\x41\xf8\x01\x32QThe complete role object with all metadata, permissions, and inheritance details.J\xa2\x01{\"id\": \"role_1234abcd5678efgh\", \"name\": \"content_editor\", \"display_name\": \"Content Editor\", \"permissions\": [{\"name\": \"read:content\"}], \"dependent_roles_count\": 2}R\x04role\"\xa8\x02\n\x10ListRolesRequest\x12\x81\x02\n\x07include\x18\x02 \x01(\tB\xe1\x01\x92\x41\xb8\x01\x32\xa6\x01Include additional data in the response. Valid values: \'permissions\' (direct permissions only), \'permissions:all\' (includes inherited permissions from role hierarchy)J\r\"permissions\"\xbaH\"r R\x00R\x0bpermissionsR\x0fpermissions:allH\x00R\x07include\x88\x01\x01\x42\n\n\x08_includeJ\x04\x08\x01\x10\x02\"\xc9\x02\n\x11ListRolesResponse\x12\xb3\x02\n\x05roles\x18\x01 \x03(\x0b\x32\x17.scalekit.v1.roles.RoleB\x83\x02\x92\x41\xff\x01\x32ZList of all roles in the environment with their metadata and optionally their permissions.J\xa0\x01[{\"id\": \"role_1234abcd5678efgh\", \"name\": \"admin\", \"display_name\": \"Administrator\"}, {\"id\": \"role_9876zyxw5432vuts\", \"name\": \"viewer\", \"display_name\": \"Viewer\"}]R\x05roles\"\xdd\x08\n\nUpdateRole\x12\xbc\x01\n\x0c\x64isplay_name\x18\x01 \x01(\tB\x93\x01\x92\x41\x86\x01\x32kHuman-readable display name for the role. Used in user interfaces, reports, and user-facing communications.J\x17\"Senior Content Editor\"\xbaH\x06r\x04\x10\x01\x18\x64H\x00R\x0b\x64isplayName\x88\x01\x01\x12\x84\x02\n\x0b\x64\x65scription\x18\x02 \x01(\tB\xdc\x01\x92\x41\xce\x01\x32jDetailed description of the role\'s purpose, capabilities, and intended use cases. Maximum 2000 characters.J`\"Can create, edit, publish, and approve content. Cannot delete content or manage user accounts.\"\xbaH\x07r\x05\x10\x01\x18\xd0\x0fH\x01R\x0b\x64\x65scription\x88\x01\x01\x12\xe8\x01\n\x07\x65xtends\x18\x06 \x01(\tB\xc8\x01\x92\x41\xa5\x01\x32\x90\x01Name of the base role that this role extends. Enables hierarchical role inheritance where this role inherits all permissions from the base role.J\x10\"content_editor\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x02R\x07\x65xtends\x88\x01\x01\x12\xde\x02\n\x0bpermissions\x18\x07 \x03(\tB\xbb\x02\x92\x41\x95\x02\x32\xc9\x01List of permission names to assign to this role. When provided, this replaces all existing role-permission mappings. Permissions must exist in the current environment. Maximum 100 permissions per role.JG[\"read:content\", \"write:content\", \"publish:content\", \"approve:content\"]\xbaH\x1f\x92\x01\x1c\x10\x64\"\x18r\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$R\x0bpermissionsB\x0f\n\r_display_nameB\x0e\n\x0c_descriptionB\n\n\x08_extendsJ\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06\"\xab\x03\n\x11UpdateRoleRequest\x12\xbc\x01\n\trole_name\x18\x02 \x01(\tB\x9e\x01\x92\x41y2eUnique name identifier of the role to update. Must be alphanumeric with underscores, 1-64 characters.J\x10\"content_editor\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\xd0\x01\n\x04role\x18\x03 \x01(\x0b\x32\x1d.scalekit.v1.roles.UpdateRoleB\x9c\x01\x92\x41\x92\x01\x32>Role fields to update. Only specified fields will be modified.JP{\"display_name\": \"Senior Editor\", \"description\": \"Can edit and approve content\"}\xbaH\x03\xc8\x01\x01R\x04roleJ\x04\x08\x01\x10\x02\"\x96\x02\n\x12UpdateRoleResponse\x12\xff\x01\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\xd1\x01\x92\x41\xcd\x01\x32?The updated role object with all current configuration details.J\x89\x01{\"id\": \"role_1234abcd5678efgh\", \"name\": \"content_editor\", \"display_name\": \"Senior Editor\", \"description\": \"Can edit and approve content\"}R\x04role\"\xba\x04\n\x11\x44\x65leteRoleRequest\x12\xb6\x01\n\trole_name\x18\x02 \x01(\tB\x98\x01\x92\x41s2eUnique name identifier of the role to delete. Must be alphanumeric with underscores, 1-64 characters.J\n\"old_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\x9a\x01\n\x10reassign_role_id\x18\x03 \x01(\tBk\x18\x01\x92\x41G26Role name to reassign users to when deleting this roleJ\r\"member_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x0ereassignRoleId\x88\x01\x01\x12\x9c\x01\n\x12reassign_role_name\x18\x04 \x01(\tBi\x92\x41G26Role name to reassign users to when deleting this roleJ\r\"member_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x01R\x10reassignRoleName\x88\x01\x01\x42\x13\n\x11_reassign_role_idB\x15\n\x13_reassign_role_nameJ\x04\x08\x01\x10\x02\"\xec\x01\n\x1d\x43reateOrganizationRoleRequest\x12\x66\n\x06org_id\x18\x01 \x01(\tBO\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12\x63\n\x04role\x18\x02 \x01(\x0b\x32).scalekit.v1.roles.CreateOrganizationRoleB$\x92\x41\x1b\x32\x19Organization role details\xbaH\x03\xc8\x01\x01R\x04role\"M\n\x1e\x43reateOrganizationRoleResponse\x12+\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleR\x04role\"\xeb\x03\n\x1aGetOrganizationRoleRequest\x12\x66\n\x06org_id\x18\x01 \x01(\tBO\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12i\n\trole_name\x18\x02 \x01(\tBL\x92\x41\'2\x17Unique name of the roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\xed\x01\n\x07include\x18\x03 \x01(\tB\xcd\x01\x92\x41\xa4\x01\x32\x92\x01Include additional data in the response. Valid values: \'permissions\' (direct permissions only), \'permissions:all\' (includes inherited permissions)J\r\"permissions\"\xbaH\"r R\x00R\x0bpermissionsR\x0fpermissions:allH\x00R\x07include\x88\x01\x01\x42\n\n\x08_include\"J\n\x1bGetOrganizationRoleResponse\x12+\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleR\x04role\"\xe2\x04\n\x1cListOrganizationRolesRequest\x12i\n\x06org_id\x18\x01 \x01(\tBR\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0er\t\x10\x01\x18 :\x03org\xc8\x01\x01R\x05orgId\x12\xed\x01\n\x07include\x18\x02 \x01(\tB\xcd\x01\x92\x41\xa4\x01\x32\x92\x01Include additional data in the response. Valid values: \'permissions\' (direct permissions only), \'permissions:all\' (includes inherited permissions)J\r\"permissions\"\xbaH\"r R\x00R\x0bpermissionsR\x0fpermissions:allH\x00R\x07include\x88\x01\x01:\xda\x01\x92\x41\xd6\x01\n\xb0\x01*\x17List organization roles2\x8b\x01Retrieves a paginated list of all roles within the organization. Use the page_token from the response to access subsequent pages of results\xd2\x01\x06org_id2!{\"org_id\" : \"org_8756865685762\" }B\n\n\x08_include\"j\n\x1dListOrganizationRolesResponse\x12I\n\x05roles\x18\x01 \x03(\x0b\x32\x17.scalekit.v1.roles.RoleB\x1a\x92\x41\x17\x32\x15List of roles objectsR\x05roles\"\xcb\x02\n\x1dUpdateOrganizationRoleRequest\x12\x66\n\x06org_id\x18\x01 \x01(\tBO\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12i\n\trole_name\x18\x02 \x01(\tBL\x92\x41\'2\x17Unique name of the roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12W\n\x04role\x18\x03 \x01(\x0b\x32\x1d.scalekit.v1.roles.UpdateRoleB$\x92\x41\x1b\x32\x19Organization role details\xbaH\x03\xc8\x01\x01R\x04role\"M\n\x1eUpdateOrganizationRoleResponse\x12+\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleR\x04role\"\xa8\x03\n\x1d\x44\x65leteOrganizationRoleRequest\x12\x66\n\x06org_id\x18\x01 \x01(\tBO\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12i\n\trole_name\x18\x02 \x01(\tBL\x92\x41\'2\x17Unique name of the roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\x9c\x01\n\x12reassign_role_name\x18\x03 \x01(\tBi\x92\x41G26Role name to reassign users to when deleting this roleJ\r\"member_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x10reassignRoleName\x88\x01\x01\x42\x15\n\x13_reassign_role_name\"\x8b\x01\n\x18GetRoleUsersCountRequest\x12i\n\trole_name\x18\x02 \x01(\tBL\x92\x41\'2\x17Unique name of the roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleNameJ\x04\x08\x01\x10\x02\"k\n\x19GetRoleUsersCountResponse\x12N\n\x05\x63ount\x18\x01 \x01(\x03\x42\x38\x92\x41.2(Number of users associated with the roleJ\x02\x31\x30\xbaH\x04\x1a\x02 \x00R\x05\x63ount\"\xff\x01\n$GetOrganizationRoleUsersCountRequest\x12_\n\x06org_id\x18\x01 \x01(\tBH\x92\x41\x39\x32%Unique identifier of the organizationJ\x10\"org_1234567890\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x05orgId\x12v\n\trole_name\x18\x02 \x01(\tBY\x92\x41\x34\x32$Unique name of the organization roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\"\x83\x01\n%GetOrganizationRoleUsersCountResponse\x12Z\n\x05\x63ount\x18\x01 \x01(\x03\x42\x44\x92\x41:25Number of users associated with the organization roleJ\x01\x35\xbaH\x04\x1a\x02 \x00R\x05\x63ount\"\xf0\t\n\x19UpdateDefaultRolesRequest\x12\x9e\x02\n\x0f\x64\x65\x66\x61ult_creator\x18\x02 \x01(\x0b\x32$.scalekit.v1.roles.UpdateDefaultRoleB\xce\x01\x18\x01\x92\x41\xc8\x01\x32JDefault creator role (deprecated - use default_creator_role field instead)Jz{\"id\": \"role_1234567890\", \"name\": \"creator\", \"display_name\": \"Creator Role\", \"description\": \"Role for creating resources\"}R\x0e\x64\x65\x66\x61ultCreator\x12\x95\x02\n\x0e\x64\x65\x66\x61ult_member\x18\x03 \x01(\x0b\x32$.scalekit.v1.roles.UpdateDefaultRoleB\xc7\x01\x18\x01\x92\x41\xc1\x01\x32HDefault member role (deprecated - use default_member_role field instead)Ju{\"id\": \"role_0987654321\", \"name\": \"member\", \"display_name\": \"Member Role\", \"description\": \"Role for regular members\"}R\rdefaultMember\x12\xb6\x02\n\x14\x64\x65\x66\x61ult_creator_role\x18\x04 \x01(\tB\xfe\x01\x92\x41\xdb\x01\x32\xcd\x01Name of the role to set as the default creator role. This role will be automatically assigned to users who create new resources in the environment. Must be a valid role name that exists in the environment.J\t\"creator\"\xbaH\x1cr\x1a\x10\x00\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x12\x64\x65\x66\x61ultCreatorRole\x88\x01\x01\x12\xa9\x02\n\x13\x64\x65\x66\x61ult_member_role\x18\x05 \x01(\tB\xf3\x01\x92\x41\xd0\x01\x32\xc3\x01Name of the role to set as the default member role. This role will be automatically assigned to new users when they join the environment. Must be a valid role name that exists in the environment.J\x08\"member\"\xbaH\x1cr\x1a\x10\x00\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x01R\x11\x64\x65\x66\x61ultMemberRole\x88\x01\x01\x42\x17\n\x15_default_creator_roleB\x16\n\x14_default_member_roleJ\x04\x08\x01\x10\x02\"\x9c\x02\n%UpdateDefaultOrganizationRolesRequest\x12i\n\x06org_id\x18\x01 \x01(\tBR\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0er\t\x10\x01\x18 :\x03org\xc8\x01\x01R\x05orgId\x12\x87\x01\n\x13\x64\x65\x66\x61ult_member_role\x18\x02 \x01(\tBW\x92\x41\x32\x32&Unique name of the default member roleJ\x08\"member\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x11\x64\x65\x66\x61ultMemberRole\"\xc6\x05\n\x1aUpdateDefaultRolesResponse\x12\xd6\x02\n\x0f\x64\x65\x66\x61ult_creator\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\x93\x02\x92\x41\x8f\x02\x32\x90\x01The role that is now set as the default creator role for the environment. Contains complete role information including permissions and metadata.Jz{\"id\": \"role_1234567890\", \"name\": \"creator\", \"display_name\": \"Creator Role\", \"description\": \"Role for creating resources\"}R\x0e\x64\x65\x66\x61ultCreator\x12\xce\x02\n\x0e\x64\x65\x66\x61ult_member\x18\x02 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\x8d\x02\x92\x41\x89\x02\x32\x8f\x01The role that is now set as the default member role for the environment. Contains complete role information including permissions and metadata.Ju{\"id\": \"role_0987654321\", \"name\": \"member\", \"display_name\": \"Member Role\", \"description\": \"Role for regular members\"}R\rdefaultMember\"\x84\x02\n&UpdateDefaultOrganizationRolesResponse\x12\xd9\x01\n\x0e\x64\x65\x66\x61ult_member\x18\x02 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\x98\x01\x92\x41\x94\x01\x32\x1bUpdated default member roleJu{\"id\": \"role_0987654321\", \"name\": \"member\", \"display_name\": \"Member Role\", \"description\": \"Role for regular members\"}R\rdefaultMember\"\x9e\x01\n\x11UpdateDefaultRole\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04roleR\x02id\x12_\n\x04name\x18\x02 \x01(\tBF\x92\x41$2\x17Unique name of the roleJ\t\"creator\"\xbaH\x1cr\x1a\x10\x00\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x04name\x88\x01\x01\x42\x07\n\x05_name\"\x85\x03\n\nPermission\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04permR\x02id\x12\x32\n\x04name\x18\x02 \x01(\tB\x1e\xbaH\x1br\x16\x10\x01\x18\x64\x32\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\x12;\n\x0b\x63reate_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12;\n\x0bupdate_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nupdateTime\x12|\n\x16is_scalekit_permission\x18\x06 \x01(\x08\x42\x46\x92\x41\x43\x32;Indicates whether this permission is predefined by ScalekitJ\x04trueR\x14isScalekitPermission\"\x97\x03\n\x0eRolePermission\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04permR\x02id\x12\x32\n\x04name\x18\x02 \x01(\tB\x1e\xbaH\x1br\x16\x10\x01\x18\x64\x32\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\x12;\n\x0b\x63reate_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12;\n\x0bupdate_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nupdateTime\x12\x89\x01\n\trole_name\x18\x06 \x01(\tBl\x92\x41G27Name of the role from which this permission was sourcedJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\"\x81\x02\n\x10\x43reatePermission\x12n\n\x04name\x18\x01 \x01(\tBZ\x92\x41\x34\x32 Unique name/ID of the permissionJ\x10\"read:documents\"\xbaH r\x1b\x10\x01\x18\x64\x32\x15^[a-zA-Z0-9_:]{1,64}$\xc8\x01\x01R\x04name\x12}\n\x0b\x64\x65scription\x18\x02 \x01(\tB[\x92\x41P2\x1d\x44\x65scription of the permissionJ/\"Allows user to read documents from the system\"\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\"f\n\x17\x43reatePermissionRequest\x12K\n\npermission\x18\x01 \x01(\x0b\x32#.scalekit.v1.roles.CreatePermissionB\x06\xbaH\x03\xc8\x01\x01R\npermission\"Y\n\x18\x43reatePermissionResponse\x12=\n\npermission\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.roles.PermissionR\npermission\"\x88\x01\n\x14GetPermissionRequest\x12p\n\x0fpermission_name\x18\x01 \x01(\tBG\x92\x41&2\x16Name of the permissionJ\x0c\"read:users\"\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x0epermissionName\"V\n\x15GetPermissionResponse\x12=\n\npermission\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.roles.PermissionR\npermission\"\xd8\x01\n\x17UpdatePermissionRequest\x12p\n\x0fpermission_name\x18\x01 \x01(\tBG\x92\x41&2\x16Name of the permissionJ\x0c\"read_users\"\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x0epermissionName\x12K\n\npermission\x18\x03 \x01(\x0b\x32#.scalekit.v1.roles.CreatePermissionB\x06\xbaH\x03\xc8\x01\x01R\npermission\"Y\n\x18UpdatePermissionResponse\x12=\n\npermission\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.roles.PermissionR\npermission\"\x89\x04\n\x16ListPermissionsRequest\x12\x64\n\npage_token\x18\x01 \x01(\tB@\x92\x41=2+Page token to retrieve next page of resultsJ\x0e\"token_abc123\"H\x00R\tpageToken\x88\x01\x01\x12\x66\n\tpage_size\x18\x02 \x01(\rBD\x92\x41\x38\x32\x32Number of permissions to return per page (max 100)J\x02\x35\x30\xbaH\x06*\x04\x18\x64(\x01H\x01R\x08pageSize\x88\x01\x01\x12\x83\x02\n\x04type\x18\x03 \x01(\x0e\x32!.scalekit.v1.roles.PermissionTypeB\xcb\x01\x92\x41\xc7\x01\x32\xbf\x01\x46ilter permissions by type: ALL, SCALEKIT, or ENVIRONMENT, where SCALEKIT are predefined Scalekit permissions and ENVIRONMENT are custom permissions created in the environment, default is ALLJ\x03\x41LLR\x04typeB\r\n\x0b_page_tokenB\x0c\n\n_page_size\"\xf8\x02\n\x17ListPermissionsResponse\x12?\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x1d.scalekit.v1.roles.PermissionR\x0bpermissions\x12g\n\x0fprev_page_token\x18\x02 \x01(\tB?\x92\x41<2*Token to retrieve previous page of resultsJ\x0e\"token_def456\"R\rprevPageToken\x12\x63\n\x0fnext_page_token\x18\x03 \x01(\tB;\x92\x41\x38\x32&Token to retrieve next page of resultsJ\x0e\"token_def456\"R\rnextPageToken\x12N\n\ntotal_size\x18\x04 \x01(\rB/\x92\x41,2%Total number of permissions availableJ\x03\x31\x35\x30R\ttotalSize\"\x8b\x01\n\x17\x44\x65letePermissionRequest\x12p\n\x0fpermission_name\x18\x01 \x01(\tBG\x92\x41&2\x16Name of the permissionJ\x0c\"read_users\"\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x0epermissionName\"u\n\x1aListRolePermissionsRequest\x12W\n\trole_name\x18\x01 \x01(\tB:\x92\x41\x19\x32\x10Name of the roleJ\x05\x61\x64min\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_-]+$\xc8\x01\x01R\x08roleName\"\x96\x01\n\x1bListRolePermissionsResponse\x12w\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x1d.scalekit.v1.roles.PermissionB6\x92\x41\x33\x32\x31List of permissions directly assigned to the roleR\x0bpermissions\"\xfb\x01\n\x1b\x41\x64\x64PermissionsToRoleRequest\x12W\n\trole_name\x18\x01 \x01(\tB:\x92\x41\x19\x32\x10Name of the roleJ\x05\x61\x64min\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x08roleName\x12\x82\x01\n\x10permission_names\x18\x02 \x03(\tBW\x92\x41-2+List of permission names to add to the role\xbaH$\x92\x01\x1e\x08\x01\x10\x64\"\x18r\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x0fpermissionNames\"\xa3\x01\n\x1c\x41\x64\x64PermissionsToRoleResponse\x12\x82\x01\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x1d.scalekit.v1.roles.PermissionBA\x92\x41>2\x92\x41\x1e\x32\x15Name of the base roleJ\x05\x61\x64min\xbaH\x1ar\x15\x10\x01\x18@2\x0f^[a-zA-Z0-9_]+$\xc8\x01\x01R\x08roleName\"i\n\x1aListDependentRolesResponse\x12K\n\x05roles\x18\x01 \x03(\x0b\x32\x17.scalekit.v1.roles.RoleB\x1c\x92\x41\x19\x32\x17List of dependent rolesR\x05roles\"\xfd\x01\n\x15\x44\x65leteRoleBaseRequest\x12\xe3\x01\n\trole_name\x18\x01 \x01(\tB\xc5\x01\x92\x41\xa4\x01\x32\x91\x01Unique name identifier of the role whose base inheritance relationship should be removed. Must be alphanumeric with underscores, 1-64 characters.J\x0e\x63ontent_editor\xbaH\x1ar\x15\x10\x01\x18@2\x0f^[a-zA-Z0-9_]+$\xc8\x01\x01R\x08roleName\"\x88\x02\n!DeleteOrganizationRoleBaseRequest\x12\x65\n\x06org_id\x18\x01 \x01(\tBN\x92\x41=2$Unique identifier to an OrganizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12|\n\trole_name\x18\x02 \x01(\tB_\x92\x41:21Name of the organization role to remove base fromJ\x05\x61\x64min\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName*8\n\x0ePermissionType\x12\x07\n\x03\x41LL\x10\x00\x12\x0c\n\x08SCALEKIT\x10\x01\x12\x0f\n\x0b\x45NVIRONMENT\x10\x02\x32\x93\xbc\x01\n\x0cRolesService\x12\xcf\x05\n\nCreateRole\x12$.scalekit.v1.roles.CreateRoleRequest\x1a%.scalekit.v1.roles.CreateRoleResponse\"\xf3\x04\x92\x41\xce\x04\n\x05Roles\x12\x1e\x43reate new role in environment\x1a\x88\x03\x43reates a new role within the environment with specified permissions and metadata. Use this endpoint to define custom roles that can be assigned to users or groups. You can create hierarchical roles by extending existing roles, assign specific permissions, and configure display information. Roles are the foundation of your access control system and determine what actions users can perform.J\x99\x01\n\x03\x32\x30\x31\x12\x91\x01\ndRole created successfully. Returns the complete role object with system-generated ID and timestamps.\x12)\n\'\x1a%.scalekit.v1.roles.CreateRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x15\"\r/api/v1/roles:\x04role\x12\xb2\x05\n\nUpdateRole\x12$.scalekit.v1.roles.UpdateRoleRequest\x1a%.scalekit.v1.roles.UpdateRoleResponse\"\xd6\x04\x92\x41\xa5\x04\n\x05Roles\x12\x17Update role information\x1a\xf6\x02Modifies an existing role\'s properties including display name, description, permissions, and inheritance. Use this endpoint to update role metadata, change permission assignments, or modify role hierarchy. Only the fields you specify will be updated, leaving other properties unchanged. When updating permissions, the new list replaces all existing permissions for the role.J\x89\x01\n\x03\x32\x30\x30\x12\x81\x01\nTRole updated successfully. Returns the modified role object with updated timestamps.\x12)\n\'\x1a%.scalekit.v1.roles.UpdateRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02!\x1a\x19/api/v1/roles/{role_name}:\x04role\x12\xff\x04\n\x07GetRole\x12!.scalekit.v1.roles.GetRoleRequest\x1a\".scalekit.v1.roles.GetRoleResponse\"\xac\x04\x92\x41\x81\x04\n\x05Roles\x12\x10Get role details\x1a\xa9\x02Retrieves complete information for a specific role including metadata and inheritance details (base role and dependent role count). Use this endpoint to audit role configuration and understand the role\'s place in the hierarchy. To view the role\'s permissions, use the ListRolePermissions endpoint.J\xb9\x01\n\x03\x32\x30\x30\x12\xb1\x01\n\x86\x01Successfully retrieved role details. Returns the role object including metadata and inheritance details. Permissions are not included.\x12&\n$\x1a\".scalekit.v1.roles.GetRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1b\x12\x19/api/v1/roles/{role_name}\x12\x89\x06\n\tListRoles\x12#.scalekit.v1.roles.ListRolesRequest\x1a$.scalekit.v1.roles.ListRolesResponse\"\xb0\x05\x92\x41\x91\x05\n\x05Roles\x12\x1dList all roles in environment\x1a\xc4\x03Retrieves a comprehensive list of all roles available within the specified environment including organization roles. Use this endpoint to view all role definitions, including custom roles and their configurations. You can optionally include permission details for each role to understand their capabilities. This is useful for role management, auditing organization access controls, or understanding the available access levels within the organization.J\xa1\x01\n\x03\x32\x30\x30\x12\x99\x01\nmSuccessfully retrieved list of roles. Returns all roles with their metadata and optionally their permissions.\x12(\n&\x1a$.scalekit.v1.roles.ListRolesResponse\x82\xb5\x18\x02\x18\x64\x82\xd3\xe4\x93\x02\x0f\x12\r/api/v1/roles\x12\xac\x06\n\nDeleteRole\x12$.scalekit.v1.roles.DeleteRoleRequest\x1a\x16.google.protobuf.Empty\"\xdf\x05\x92\x41\xb4\x05\n\x05Roles\x12\x1e\x44\x65lete role and reassign users\x1a\xbb\x04Permanently removes a role from the environment and reassigns users who had that role to a different role. Use this endpoint when you need to clean up unused roles or restructure your access control system. The role cannot be deleted if it has dependent roles (roles that extend it) unless you specify a replacement role. If users are assigned to the role being deleted, you must provide a reassign_role_name to move those users to a different role before deletion can proceed. This action cannot be undone, so ensure no critical users depend on the role before deletion.JM\n\x03\x32\x30\x30\x12\x46\nDRole successfully deleted and users reassigned. No content returned.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1b*\x19/api/v1/roles/{role_name}\x12\xdc\x06\n\x16\x43reateOrganizationRole\x12\x30.scalekit.v1.roles.CreateOrganizationRoleRequest\x1a\x31.scalekit.v1.roles.CreateOrganizationRoleResponse\"\xdc\x05\x92\x41\xa0\x05\n\x05Roles\x12\x18\x43reate organization role\x1a\xc7\x03\x43reates a new role within the specified organization with basic configuration including name, display name, description, and permissions. Use this endpoint to define custom roles that can be assigned to users within the organization. You can create hierarchical roles by extending existing roles and assign specific permissions to control access levels. The role will be scoped to the organization and can be used for organization-specific access control.J\xb2\x01\n\x03\x32\x30\x31\x12\xaa\x01\nqOrganization role created successfully. Returns the complete role object with system-generated ID and timestamps.\x12\x35\n3\x1a\x31.scalekit.v1.roles.CreateOrganizationRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02,\"$/api/v1/organizations/{org_id}/roles:\x04role\x12\xb5\x06\n\x16UpdateOrganizationRole\x12\x30.scalekit.v1.roles.UpdateOrganizationRoleRequest\x1a\x31.scalekit.v1.roles.UpdateOrganizationRoleResponse\"\xb5\x05\x92\x41\xed\x04\n\x05Roles\x12\x18Update organization role\x1a\xa4\x03Modifies an existing organization role\'s properties including display name, description, permissions, and inheritance settings. Use this endpoint to update role metadata, change permission assignments, or modify role hierarchy within the organization. Only the fields you specify will be updated, leaving other properties unchanged. When updating permissions, the new list replaces all existing permissions for the role.J\xa2\x01\n\x03\x32\x30\x30\x12\x9a\x01\naOrganization role updated successfully. Returns the modified role object with updated timestamps.\x12\x35\n3\x1a\x31.scalekit.v1.roles.UpdateOrganizationRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x38\x1a\x30/api/v1/organizations/{org_id}/roles/{role_name}:\x04role\x12\xb4\x07\n\x13GetOrganizationRole\x12-.scalekit.v1.roles.GetOrganizationRoleRequest\x1a..scalekit.v1.roles.GetOrganizationRoleResponse\"\xbd\x06\x92\x41\xe7\x05\n\x05Roles\x12\x1dGet organization role details\x1a\xbf\x03Retrieves complete information for a specific organization role including metadata, inheritance details, and optionally permissions. Use this endpoint to audit role configuration and understand the role\'s place in the organization\'s role hierarchy. You can include permission details to see what capabilities the role provides. This operation is useful for role management, user assignment decisions, or understanding organization access controls.J\xfc\x01\n\x03\x32\x30\x30\x12\xf4\x01\n\xbd\x01Successfully retrieved organization role details. Returns the role object including metadata and inheritance details. Permissions are included only when requested via the include parameter.\x12\x32\n0\x1a..scalekit.v1.roles.GetOrganizationRoleResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x32\x12\x30/api/v1/organizations/{org_id}/roles/{role_name}\x12\xb7\x06\n\x15ListOrganizationRoles\x12/.scalekit.v1.roles.ListOrganizationRolesRequest\x1a\x30.scalekit.v1.roles.ListOrganizationRolesResponse\"\xba\x05\x92\x41\xf0\x04\n\x05Roles\x12\x17List organization roles\x1a\x90\x03Retrieves all environment roles and organization specific roles. Use this endpoint to view all role definitions, including custom roles and their configurations. You can optionally include permission details for each role to understand their capabilities. This is useful for role management, auditing organization access controls, or understanding the available access levels within the organization.J\xba\x01\n\x03\x32\x30\x30\x12\xb2\x01\nzSuccessfully retrieved list of organization roles. Returns all roles with their metadata and optionally their permissions.\x12\x34\n2\x1a\x30.scalekit.v1.roles.ListOrganizationRolesResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02&\x12$/api/v1/organizations/{org_id}/roles\x12\x8a\x06\n\x16\x44\x65leteOrganizationRole\x12\x30.scalekit.v1.roles.DeleteOrganizationRoleRequest\x1a\x16.google.protobuf.Empty\"\xa5\x05\x92\x41\xe3\x04\n\x05Roles\x12\x18\x44\x65lete organization role\x1a\xd6\x03Permanently removes a role from the organization and optionally reassigns users who had that role to a different role. Use this endpoint when you need to clean up unused roles or restructure your organization\'s access control system. If users are assigned to the role being deleted, you can provide a reassign_role_name to move those users to a different role before deletion. This action cannot be undone, so ensure no critical users depend on the role before deletion.Jg\n\x03\x32\x30\x30\x12`\n^Organization role successfully deleted and users reassigned if specified. No content returned.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x32*0/api/v1/organizations/{org_id}/roles/{role_name}\x12\xdb\x08\n\x11GetRoleUsersCount\x12+.scalekit.v1.roles.GetRoleUsersCountRequest\x1a,.scalekit.v1.roles.GetRoleUsersCountResponse\"\xea\x07\x92\x41\xb3\x07\n\x05Roles\x12\x1cRetrieve user count for role\x1a\x93\x05Retrieves the total number of users currently assigned to the specified role within the environment. Use this endpoint to monitor role usage, enforce user limits, or understand the scope of role assignments. Provide the role\'s unique name as a path parameter, and the response will include the current user count for that role. This operation is read-only and does not modify any data or user assignments. The count reflects all users who have the role either directly assigned or inherited through organization membership. This information is useful for capacity planning, security auditing, or understanding the impact of role changes across your user base.J\xf5\x01\n\x03\x32\x30\x30\x12\xed\x01\n\xb8\x01Successfully retrieved user count for the specified role. Returns the total number of users currently assigned to the role, including both direct assignments and inherited assignments.\x12\x30\n.\x1a,.scalekit.v1.roles.GetRoleUsersCountResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\'\x12%/api/v1/roles/{role_name}/users:count\x12\xb2\x07\n\x1dGetOrganizationRoleUsersCount\x12\x37.scalekit.v1.roles.GetOrganizationRoleUsersCountRequest\x1a\x38.scalekit.v1.roles.GetOrganizationRoleUsersCountResponse\"\x9d\x06\x92\x41\xc0\x05\n\x05Roles\x12 Get organization role user count\x1a\xc0\x03Retrieves the total number of users currently assigned to the specified organization role. Use this endpoint to monitor organization role usage, enforce user limits, or understand the scope of role assignments within the organization. Provide the organization ID and role name as path parameters. The response includes the user count for the requested organization role. This operation is read-only and does not modify any data or user assignments.J\xd1\x01\n\x03\x32\x30\x30\x12\xc9\x01\n\x88\x01Successfully retrieved user count for the specified organization role. Returns the total number of users currently assigned to the role.\x12<\n:\x1a\x38.scalekit.v1.roles.GetOrganizationRoleUsersCountResponse\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02>\x12\n\x03\x32\x30\x30\x12\x37\n5Permission successfully deleted. No content returned.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\'*%/api/v1/permissions/{permission_name}\x12\x80\t\n\x13ListRolePermissions\x12-.scalekit.v1.roles.ListRolePermissionsRequest\x1a..scalekit.v1.roles.ListRolePermissionsResponse\"\x89\x08\x92\x41\xd2\x07\n\x05Roles\x12\x19List permissions for role\x1a\xd7\x05Retrieves all permissions directly assigned to the specified role, excluding permissions inherited from base roles. Use this endpoint to view the explicit permission assignments for a role, which is useful for understanding direct role capabilities, auditing permission assignments, or managing role-permission relationships. Provide the role name as a path parameter, and the response will include only the permissions that are directly assigned to that role. This operation does not include inherited permissions from role hierarchies - use ListEffectiveRolePermissions to see the complete set of permissions including inheritance. Returns a list of permission objects with their names, descriptions, and assignment metadata.J\xd3\x01\n\x03\x32\x30\x30\x12\xcb\x01\n\x94\x01Successfully retrieved role permissions. Returns a list of all permissions directly assigned to the specified role, excluding inherited permissions.\x12\x32\n0\x1a..scalekit.v1.roles.ListRolePermissionsResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\'\x12%/api/v1/roles/{role_name}/permissions\x12\xfa\x08\n\x14\x41\x64\x64PermissionsToRole\x12..scalekit.v1.roles.AddPermissionsToRoleRequest\x1a/.scalekit.v1.roles.AddPermissionsToRoleResponse\"\x80\x08\x92\x41\xc6\x07\n\x05Roles\x12\x17\x41\x64\x64 permissions to role\x1a\xbd\x05\x41\x64\x64s one or more permissions to the specified role while preserving existing permission assignments. Use this endpoint to grant additional capabilities to a role without affecting its current permission set. Provide the role name as a path parameter and a list of permission names in the request body. The system will validate that all specified permissions exist in the environment and add them to the role. Existing permission assignments remain unchanged, making this operation safe for incremental permission management. This is useful for gradually expanding role capabilities or adding new permissions as your system evolves. Returns the updated list of all permissions now assigned to the role.J\xe3\x01\n\x03\x32\x30\x30\x12\xdb\x01\n\xa3\x01Permissions added to role successfully. Returns the complete list of all permissions now assigned to the role, including both existing and newly added permissions.\x12\x33\n1\x1a/.scalekit.v1.roles.AddPermissionsToRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02*\"%/api/v1/roles/{role_name}/permissions:\x01*\x12\xb7\x07\n\x18RemovePermissionFromRole\x12\x32.scalekit.v1.roles.RemovePermissionFromRoleRequest\x1a\x16.google.protobuf.Empty\"\xce\x06\x92\x41\x85\x06\n\x05Roles\x12\x1bRemove permission from role\x1a\x94\x05Removes a specific permission from the specified role, revoking that capability from all users assigned to the role. Use this endpoint to restrict role capabilities or remove unnecessary permissions. Provide both the role name and permission name as path parameters. This operation only affects the direct permission assignment and does not impact permissions inherited from base roles. If the permission is inherited through role hierarchy, you may need to modify the base role instead. This is useful for fine-tuning role permissions, implementing least-privilege access controls, or removing deprecated permissions. Returns no content on successful removal.JH\n\x03\x32\x30\x30\x12\x41\n?Permission removed from role successfully. No content returned.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x39*7/api/v1/roles/{role_name}/permissions/{permission_name}\x12\xdf\t\n\x1cListEffectiveRolePermissions\x12\x36.scalekit.v1.roles.ListEffectiveRolePermissionsRequest\x1a\x37.scalekit.v1.roles.ListEffectiveRolePermissionsResponse\"\xcd\x08\x92\x41\x92\x08\n\x05Roles\x12#List effective permissions for role\x1a\xd9\x05Retrieves the complete set of effective permissions for a role, including both directly assigned permissions and permissions inherited from base roles through the role hierarchy. Use this endpoint to understand the full scope of capabilities available to users assigned to a specific role. Provide the role name as a path parameter, and the response will include all permissions that apply to the role, accounting for inheritance relationships. This operation is essential for auditing role capabilities, understanding permission inheritance, or verifying the complete access scope before role assignment. Returns a comprehensive list of permission names representing the full set of effective permissions for the specified role.J\x87\x02\n\x03\x32\x30\x30\x12\xff\x01\n\xbf\x01Successfully retrieved effective permissions. Returns the complete list of all permissions that apply to the role, including both direct assignments and inherited permissions from base roles.\x12;\n9\x1a\x37.scalekit.v1.roles.ListEffectiveRolePermissionsResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02+\x12)/api/v1/roles/{role_name}/permissions:all\x1a\xe2\x02\x92\x41\xde\x02\n\x05Roles\x12\xd4\x02Role-based access control (RBAC) for defining and managing permissions in an environment. Create and update custom roles with explicit permissions, model role hierarchies through inheritance, view dependent roles, manage role-permission assignments, and list roles and permissions. Also provides a utility to count users assigned to a role.B1Z/github.com/scalekit-inc/scalekit/pkg/grpc/rolesb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dscalekit/v1/roles/roles.proto\x12\x11scalekit.v1.roles\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"\x8b\r\n\x04Role\x12y\n\x02id\x18\x01 \x01(\tBi\x92\x41\x63\x32HUnique system-generated identifier for the role. Immutable once created.J\x17\"role_1234abcd5678efgh\"\xe0\x41\x03R\x02id\x12\x95\x01\n\x04name\x18\x02 \x01(\tB\x80\x01\x92\x41q2]Unique name identifier for the role. Must be alphanumeric with underscores, 1-100 characters.J\x10\"content_editor\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x04name\x12\x94\x01\n\x0c\x64isplay_name\x18\x03 \x01(\tBq\x92\x41\x62\x32NHuman-readable display name for the role. Used in user interfaces and reports.J\x10\"Content Editor\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x0b\x64isplayName\x12\xc9\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tB\xa6\x01\x92\x41\xa2\x01\x32UDetailed description of the role\'s purpose and capabilities. Maximum 2000 characters.JI\"Can create, edit, and publish content but cannot delete or manage users\"R\x0b\x64\x65scription\x12}\n\x0f\x64\x65\x66\x61ult_creator\x18\x06 \x01(\x08\x42T\x92\x41Q2IIndicates if this role is the default creator role for new organizations.J\x04trueR\x0e\x64\x65\x66\x61ultCreator\x12r\n\x0e\x64\x65\x66\x61ult_member\x18\x07 \x01(\x08\x42K\x92\x41H2@Indicates if this role is the default member role for new users.J\x04trueR\rdefaultMember\x12\xa6\x01\n\x07\x65xtends\x18\x08 \x01(\tB\x86\x01\x92\x41\x64\x32TName of the base role that this role extends. Enables hierarchical role inheritance.J\x0c\"admin_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x07\x65xtends\x88\x01\x01\x12\xef\x02\n\x0bpermissions\x18\t \x03(\x0b\x32!.scalekit.v1.roles.RolePermissionB\xa9\x02\x92\x41\xa5\x02\x32uList of permissions with role source information. Only included when \'include\' parameter is specified in the request.J\xab\x01[{\"name\": \"read:content\", \"description\": \"Read Content\", \"role_name\": \"admin_role\"}, {\"name\": \"write:content\", \"description\": \"Write Content\", \"role_name\": \"editor_role\"}]R\x0bpermissions\x12\x90\x01\n\x15\x64\x65pendent_roles_count\x18\n \x01(\x05\x42\\\x92\x41Y2TNumber of roles that extend from this role (dependent roles count). Read-only field.J\x01\x33R\x13\x64\x65pendentRolesCount\x12Z\n\x0bis_org_role\x18\x0b \x01(\x08\x42:\x92\x41\x37\x32/Indicates if this role is an organization role.J\x04trueR\tisOrgRoleB\n\n\x08_extendsJ\x04\x08\x05\x10\x06\"\xce\t\n\nCreateRole\x12\xf1\x01\n\x04name\x18\x02 \x01(\tB\xdc\x01\x92\x41\xb6\x01\x32\xa1\x01Unique name identifier for the role. Must be alphanumeric with underscores, 1-64 characters. This name is used in API calls and cannot be changed after creation.J\x10\"content_editor\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x04name\x12\xb2\x01\n\x0c\x64isplay_name\x18\x03 \x01(\tB\x8e\x01\x92\x41\x7f\x32kHuman-readable display name for the role. Used in user interfaces, reports, and user-facing communications.J\x10\"Content Editor\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x0b\x64isplayName\x12\xfb\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tB\xd3\x01\x92\x41\xc7\x01\x32jDetailed description of the role\'s purpose, capabilities, and intended use cases. Maximum 2000 characters.JY\"Can create, edit, and publish content but cannot delete content or manage user accounts\"\xbaH\x05r\x03\x18\xd0\x0fH\x00R\x0b\x64\x65scription\x88\x01\x01\x12\xe0\x01\n\x07\x65xtends\x18\x08 \x01(\tB\xc0\x01\x92\x41\x9d\x01\x32\x90\x01Name of the base role that this role extends. Enables hierarchical role inheritance where this role inherits all permissions from the base role.J\x08\"viewer\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x01R\x07\x65xtends\x88\x01\x01\x12\x87\x02\n\x0bpermissions\x18\t \x03(\tB\xe4\x01\x92\x41\xbe\x01\x32\x85\x01List of permission names to assign to this role. Permissions must exist in the current environment. Maximum 100 permissions per role.J4[\"read:content\", \"write:content\", \"publish:content\"]\xbaH\x1f\x92\x01\x1c\x10\x64\"\x18r\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$R\x0bpermissionsB\x0e\n\x0c_descriptionB\n\n\x08_extendsJ\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08\"\xa4\x06\n\x16\x43reateOrganizationRole\x12t\n\x04name\x18\x02 \x01(\tB`\x92\x41;2&Unique name of the organization\'s roleJ\x11\"org_viewer_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x04name\x12w\n\x0c\x64isplay_name\x18\x03 \x01(\tBT\x92\x41\x45\x32\'Display name of the organization\'s roleJ\x1a\"Organization Viewer Role\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x0b\x64isplayName\x12\xa0\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tBy\x92\x41n2&Description of the organization\'s roleJD\"Organization Viewer Role will be used only for viewing the objects\"\xbaH\x05r\x03\x18\xd0\x0fH\x00R\x0b\x64\x65scription\x88\x01\x01\x12v\n\x07\x65xtends\x18\x08 \x01(\tBW\x92\x41\x35\x32%Base role name for hierarchical rolesJ\x0c\"admin_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x01R\x07\x65xtends\x88\x01\x01\x12\xd1\x01\n\x0bpermissions\x18\t \x03(\tB\xae\x01\x92\x41\x88\x01\x32\x63List of permission names to assign to this role. Permissions must exist in the current environment.J![\"read:users\", \"write:documents\"]\xbaH\x1f\x92\x01\x1c\x10\x64\"\x18r\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$R\x0bpermissionsB\x0e\n\x0c_descriptionB\n\n\x08_extendsJ\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08\"\xdc\x02\n\x11\x43reateRoleRequest\x12\xc0\x02\n\x04role\x18\x02 \x01(\x0b\x32\x1d.scalekit.v1.roles.CreateRoleB\x8c\x02\x92\x41\x82\x02\x32lRole configuration details including name, display name, description, permissions, and inheritance settings.J\x91\x01{\"name\": \"content_editor\", \"display_name\": \"Content Editor\", \"description\": \"Can edit content\", \"permissions\": [\"read:content\", \"write:content\"]}\xbaH\x03\xc8\x01\x01R\x04roleJ\x04\x08\x01\x10\x02\"\x9a\x02\n\x12\x43reateRoleResponse\x12\x83\x02\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\xd5\x01\x92\x41\xd1\x01\x32OThe created role object with system-generated ID and all configuration details.J~{\"id\": \"role_1234abcd5678efgh\", \"name\": \"content_editor\", \"display_name\": \"Content Editor\", \"description\": \"Can edit content\"}R\x04role\"\xe7\x03\n\x0eGetRoleRequest\x12\xbe\x01\n\trole_name\x18\x02 \x01(\tB\xa0\x01\x92\x41{2gUnique name identifier of the role to retrieve. Must be alphanumeric with underscores, 1-64 characters.J\x10\"content_editor\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\x81\x02\n\x07include\x18\x03 \x01(\tB\xe1\x01\x92\x41\xb8\x01\x32\xa6\x01Include additional data in the response. Valid values: \'permissions\' (direct permissions only), \'permissions:all\' (includes inherited permissions from role hierarchy)J\r\"permissions\"\xbaH\"r R\x00R\x0bpermissionsR\x0fpermissions:allH\x00R\x07include\x88\x01\x01\x42\n\n\x08_includeJ\x04\x08\x01\x10\x02\"\xbe\x02\n\x0fGetRoleResponse\x12\xaa\x02\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\xfc\x01\x92\x41\xf8\x01\x32QThe complete role object with all metadata, permissions, and inheritance details.J\xa2\x01{\"id\": \"role_1234abcd5678efgh\", \"name\": \"content_editor\", \"display_name\": \"Content Editor\", \"permissions\": [{\"name\": \"read:content\"}], \"dependent_roles_count\": 2}R\x04role\"\xa8\x02\n\x10ListRolesRequest\x12\x81\x02\n\x07include\x18\x02 \x01(\tB\xe1\x01\x92\x41\xb8\x01\x32\xa6\x01Include additional data in the response. Valid values: \'permissions\' (direct permissions only), \'permissions:all\' (includes inherited permissions from role hierarchy)J\r\"permissions\"\xbaH\"r R\x00R\x0bpermissionsR\x0fpermissions:allH\x00R\x07include\x88\x01\x01\x42\n\n\x08_includeJ\x04\x08\x01\x10\x02\"\xc9\x02\n\x11ListRolesResponse\x12\xb3\x02\n\x05roles\x18\x01 \x03(\x0b\x32\x17.scalekit.v1.roles.RoleB\x83\x02\x92\x41\xff\x01\x32ZList of all roles in the environment with their metadata and optionally their permissions.J\xa0\x01[{\"id\": \"role_1234abcd5678efgh\", \"name\": \"admin\", \"display_name\": \"Administrator\"}, {\"id\": \"role_9876zyxw5432vuts\", \"name\": \"viewer\", \"display_name\": \"Viewer\"}]R\x05roles\"\xdd\x08\n\nUpdateRole\x12\xbc\x01\n\x0c\x64isplay_name\x18\x01 \x01(\tB\x93\x01\x92\x41\x86\x01\x32kHuman-readable display name for the role. Used in user interfaces, reports, and user-facing communications.J\x17\"Senior Content Editor\"\xbaH\x06r\x04\x10\x01\x18\x64H\x00R\x0b\x64isplayName\x88\x01\x01\x12\x84\x02\n\x0b\x64\x65scription\x18\x02 \x01(\tB\xdc\x01\x92\x41\xce\x01\x32jDetailed description of the role\'s purpose, capabilities, and intended use cases. Maximum 2000 characters.J`\"Can create, edit, publish, and approve content. Cannot delete content or manage user accounts.\"\xbaH\x07r\x05\x10\x01\x18\xd0\x0fH\x01R\x0b\x64\x65scription\x88\x01\x01\x12\xe8\x01\n\x07\x65xtends\x18\x06 \x01(\tB\xc8\x01\x92\x41\xa5\x01\x32\x90\x01Name of the base role that this role extends. Enables hierarchical role inheritance where this role inherits all permissions from the base role.J\x10\"content_editor\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x02R\x07\x65xtends\x88\x01\x01\x12\xde\x02\n\x0bpermissions\x18\x07 \x03(\tB\xbb\x02\x92\x41\x95\x02\x32\xc9\x01List of permission names to assign to this role. When provided, this replaces all existing role-permission mappings. Permissions must exist in the current environment. Maximum 100 permissions per role.JG[\"read:content\", \"write:content\", \"publish:content\", \"approve:content\"]\xbaH\x1f\x92\x01\x1c\x10\x64\"\x18r\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$R\x0bpermissionsB\x0f\n\r_display_nameB\x0e\n\x0c_descriptionB\n\n\x08_extendsJ\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06\"\xab\x03\n\x11UpdateRoleRequest\x12\xbc\x01\n\trole_name\x18\x02 \x01(\tB\x9e\x01\x92\x41y2eUnique name identifier of the role to update. Must be alphanumeric with underscores, 1-64 characters.J\x10\"content_editor\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\xd0\x01\n\x04role\x18\x03 \x01(\x0b\x32\x1d.scalekit.v1.roles.UpdateRoleB\x9c\x01\x92\x41\x92\x01\x32>Role fields to update. Only specified fields will be modified.JP{\"display_name\": \"Senior Editor\", \"description\": \"Can edit and approve content\"}\xbaH\x03\xc8\x01\x01R\x04roleJ\x04\x08\x01\x10\x02\"\x96\x02\n\x12UpdateRoleResponse\x12\xff\x01\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\xd1\x01\x92\x41\xcd\x01\x32?The updated role object with all current configuration details.J\x89\x01{\"id\": \"role_1234abcd5678efgh\", \"name\": \"content_editor\", \"display_name\": \"Senior Editor\", \"description\": \"Can edit and approve content\"}R\x04role\"\xba\x04\n\x11\x44\x65leteRoleRequest\x12\xb6\x01\n\trole_name\x18\x02 \x01(\tB\x98\x01\x92\x41s2eUnique name identifier of the role to delete. Must be alphanumeric with underscores, 1-64 characters.J\n\"old_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\x9a\x01\n\x10reassign_role_id\x18\x03 \x01(\tBk\x18\x01\x92\x41G26Role name to reassign users to when deleting this roleJ\r\"member_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x0ereassignRoleId\x88\x01\x01\x12\x9c\x01\n\x12reassign_role_name\x18\x04 \x01(\tBi\x92\x41G26Role name to reassign users to when deleting this roleJ\r\"member_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x01R\x10reassignRoleName\x88\x01\x01\x42\x13\n\x11_reassign_role_idB\x15\n\x13_reassign_role_nameJ\x04\x08\x01\x10\x02\"\xec\x01\n\x1d\x43reateOrganizationRoleRequest\x12\x66\n\x06org_id\x18\x01 \x01(\tBO\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12\x63\n\x04role\x18\x02 \x01(\x0b\x32).scalekit.v1.roles.CreateOrganizationRoleB$\x92\x41\x1b\x32\x19Organization role details\xbaH\x03\xc8\x01\x01R\x04role\"M\n\x1e\x43reateOrganizationRoleResponse\x12+\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleR\x04role\"\xeb\x03\n\x1aGetOrganizationRoleRequest\x12\x66\n\x06org_id\x18\x01 \x01(\tBO\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12i\n\trole_name\x18\x02 \x01(\tBL\x92\x41\'2\x17Unique name of the roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\xed\x01\n\x07include\x18\x03 \x01(\tB\xcd\x01\x92\x41\xa4\x01\x32\x92\x01Include additional data in the response. Valid values: \'permissions\' (direct permissions only), \'permissions:all\' (includes inherited permissions)J\r\"permissions\"\xbaH\"r R\x00R\x0bpermissionsR\x0fpermissions:allH\x00R\x07include\x88\x01\x01\x42\n\n\x08_include\"J\n\x1bGetOrganizationRoleResponse\x12+\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleR\x04role\"\xe2\x04\n\x1cListOrganizationRolesRequest\x12i\n\x06org_id\x18\x01 \x01(\tBR\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0er\t\x10\x01\x18 :\x03org\xc8\x01\x01R\x05orgId\x12\xed\x01\n\x07include\x18\x02 \x01(\tB\xcd\x01\x92\x41\xa4\x01\x32\x92\x01Include additional data in the response. Valid values: \'permissions\' (direct permissions only), \'permissions:all\' (includes inherited permissions)J\r\"permissions\"\xbaH\"r R\x00R\x0bpermissionsR\x0fpermissions:allH\x00R\x07include\x88\x01\x01:\xda\x01\x92\x41\xd6\x01\n\xb0\x01*\x17List organization roles2\x8b\x01Retrieves a paginated list of all roles within the organization. Use the page_token from the response to access subsequent pages of results\xd2\x01\x06org_id2!{\"org_id\" : \"org_8756865685762\" }B\n\n\x08_include\"j\n\x1dListOrganizationRolesResponse\x12I\n\x05roles\x18\x01 \x03(\x0b\x32\x17.scalekit.v1.roles.RoleB\x1a\x92\x41\x17\x32\x15List of roles objectsR\x05roles\"\xcb\x02\n\x1dUpdateOrganizationRoleRequest\x12\x66\n\x06org_id\x18\x01 \x01(\tBO\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12i\n\trole_name\x18\x02 \x01(\tBL\x92\x41\'2\x17Unique name of the roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12W\n\x04role\x18\x03 \x01(\x0b\x32\x1d.scalekit.v1.roles.UpdateRoleB$\x92\x41\x1b\x32\x19Organization role details\xbaH\x03\xc8\x01\x01R\x04role\"M\n\x1eUpdateOrganizationRoleResponse\x12+\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleR\x04role\"\xa8\x03\n\x1d\x44\x65leteOrganizationRoleRequest\x12\x66\n\x06org_id\x18\x01 \x01(\tBO\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12i\n\trole_name\x18\x02 \x01(\tBL\x92\x41\'2\x17Unique name of the roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\x9c\x01\n\x12reassign_role_name\x18\x03 \x01(\tBi\x92\x41G26Role name to reassign users to when deleting this roleJ\r\"member_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x10reassignRoleName\x88\x01\x01\x42\x15\n\x13_reassign_role_name\"\x8b\x01\n\x18GetRoleUsersCountRequest\x12i\n\trole_name\x18\x02 \x01(\tBL\x92\x41\'2\x17Unique name of the roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleNameJ\x04\x08\x01\x10\x02\"k\n\x19GetRoleUsersCountResponse\x12N\n\x05\x63ount\x18\x01 \x01(\x03\x42\x38\x92\x41.2(Number of users associated with the roleJ\x02\x31\x30\xbaH\x04\x1a\x02 \x00R\x05\x63ount\"\xff\x01\n$GetOrganizationRoleUsersCountRequest\x12_\n\x06org_id\x18\x01 \x01(\tBH\x92\x41\x39\x32%Unique identifier of the organizationJ\x10\"org_1234567890\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x05orgId\x12v\n\trole_name\x18\x02 \x01(\tBY\x92\x41\x34\x32$Unique name of the organization roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\"\x83\x01\n%GetOrganizationRoleUsersCountResponse\x12Z\n\x05\x63ount\x18\x01 \x01(\x03\x42\x44\x92\x41:25Number of users associated with the organization roleJ\x01\x35\xbaH\x04\x1a\x02 \x00R\x05\x63ount\"\xf0\t\n\x19UpdateDefaultRolesRequest\x12\x9e\x02\n\x0f\x64\x65\x66\x61ult_creator\x18\x02 \x01(\x0b\x32$.scalekit.v1.roles.UpdateDefaultRoleB\xce\x01\x18\x01\x92\x41\xc8\x01\x32JDefault creator role (deprecated - use default_creator_role field instead)Jz{\"id\": \"role_1234567890\", \"name\": \"creator\", \"display_name\": \"Creator Role\", \"description\": \"Role for creating resources\"}R\x0e\x64\x65\x66\x61ultCreator\x12\x95\x02\n\x0e\x64\x65\x66\x61ult_member\x18\x03 \x01(\x0b\x32$.scalekit.v1.roles.UpdateDefaultRoleB\xc7\x01\x18\x01\x92\x41\xc1\x01\x32HDefault member role (deprecated - use default_member_role field instead)Ju{\"id\": \"role_0987654321\", \"name\": \"member\", \"display_name\": \"Member Role\", \"description\": \"Role for regular members\"}R\rdefaultMember\x12\xb6\x02\n\x14\x64\x65\x66\x61ult_creator_role\x18\x04 \x01(\tB\xfe\x01\x92\x41\xdb\x01\x32\xcd\x01Name of the role to set as the default creator role. This role will be automatically assigned to users who create new resources in the environment. Must be a valid role name that exists in the environment.J\t\"creator\"\xbaH\x1cr\x1a\x10\x00\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x12\x64\x65\x66\x61ultCreatorRole\x88\x01\x01\x12\xa9\x02\n\x13\x64\x65\x66\x61ult_member_role\x18\x05 \x01(\tB\xf3\x01\x92\x41\xd0\x01\x32\xc3\x01Name of the role to set as the default member role. This role will be automatically assigned to new users when they join the environment. Must be a valid role name that exists in the environment.J\x08\"member\"\xbaH\x1cr\x1a\x10\x00\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x01R\x11\x64\x65\x66\x61ultMemberRole\x88\x01\x01\x42\x17\n\x15_default_creator_roleB\x16\n\x14_default_member_roleJ\x04\x08\x01\x10\x02\"\x9c\x02\n%UpdateDefaultOrganizationRolesRequest\x12i\n\x06org_id\x18\x01 \x01(\tBR\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0er\t\x10\x01\x18 :\x03org\xc8\x01\x01R\x05orgId\x12\x87\x01\n\x13\x64\x65\x66\x61ult_member_role\x18\x02 \x01(\tBW\x92\x41\x32\x32&Unique name of the default member roleJ\x08\"member\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x11\x64\x65\x66\x61ultMemberRole\"\xc6\x05\n\x1aUpdateDefaultRolesResponse\x12\xd6\x02\n\x0f\x64\x65\x66\x61ult_creator\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\x93\x02\x92\x41\x8f\x02\x32\x90\x01The role that is now set as the default creator role for the environment. Contains complete role information including permissions and metadata.Jz{\"id\": \"role_1234567890\", \"name\": \"creator\", \"display_name\": \"Creator Role\", \"description\": \"Role for creating resources\"}R\x0e\x64\x65\x66\x61ultCreator\x12\xce\x02\n\x0e\x64\x65\x66\x61ult_member\x18\x02 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\x8d\x02\x92\x41\x89\x02\x32\x8f\x01The role that is now set as the default member role for the environment. Contains complete role information including permissions and metadata.Ju{\"id\": \"role_0987654321\", \"name\": \"member\", \"display_name\": \"Member Role\", \"description\": \"Role for regular members\"}R\rdefaultMember\"\x84\x02\n&UpdateDefaultOrganizationRolesResponse\x12\xd9\x01\n\x0e\x64\x65\x66\x61ult_member\x18\x02 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\x98\x01\x92\x41\x94\x01\x32\x1bUpdated default member roleJu{\"id\": \"role_0987654321\", \"name\": \"member\", \"display_name\": \"Member Role\", \"description\": \"Role for regular members\"}R\rdefaultMember\"\x9e\x01\n\x11UpdateDefaultRole\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04roleR\x02id\x12_\n\x04name\x18\x02 \x01(\tBF\x92\x41$2\x17Unique name of the roleJ\t\"creator\"\xbaH\x1cr\x1a\x10\x00\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x04name\x88\x01\x01\x42\x07\n\x05_name\"\x85\x03\n\nPermission\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04permR\x02id\x12\x32\n\x04name\x18\x02 \x01(\tB\x1e\xbaH\x1br\x16\x10\x01\x18\x64\x32\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\x12;\n\x0b\x63reate_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12;\n\x0bupdate_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nupdateTime\x12|\n\x16is_scalekit_permission\x18\x06 \x01(\x08\x42\x46\x92\x41\x43\x32;Indicates whether this permission is predefined by ScalekitJ\x04trueR\x14isScalekitPermission\"\x97\x03\n\x0eRolePermission\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04permR\x02id\x12\x32\n\x04name\x18\x02 \x01(\tB\x1e\xbaH\x1br\x16\x10\x01\x18\x64\x32\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\x12;\n\x0b\x63reate_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12;\n\x0bupdate_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nupdateTime\x12\x89\x01\n\trole_name\x18\x06 \x01(\tBl\x92\x41G27Name of the role from which this permission was sourcedJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\"\x81\x02\n\x10\x43reatePermission\x12n\n\x04name\x18\x01 \x01(\tBZ\x92\x41\x34\x32 Unique name/ID of the permissionJ\x10\"read:documents\"\xbaH r\x1b\x10\x01\x18\x64\x32\x15^[a-zA-Z0-9_:]{1,64}$\xc8\x01\x01R\x04name\x12}\n\x0b\x64\x65scription\x18\x02 \x01(\tB[\x92\x41P2\x1d\x44\x65scription of the permissionJ/\"Allows user to read documents from the system\"\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\"f\n\x17\x43reatePermissionRequest\x12K\n\npermission\x18\x01 \x01(\x0b\x32#.scalekit.v1.roles.CreatePermissionB\x06\xbaH\x03\xc8\x01\x01R\npermission\"Y\n\x18\x43reatePermissionResponse\x12=\n\npermission\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.roles.PermissionR\npermission\"\x88\x01\n\x14GetPermissionRequest\x12p\n\x0fpermission_name\x18\x01 \x01(\tBG\x92\x41&2\x16Name of the permissionJ\x0c\"read:users\"\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x0epermissionName\"V\n\x15GetPermissionResponse\x12=\n\npermission\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.roles.PermissionR\npermission\"\xd8\x01\n\x17UpdatePermissionRequest\x12p\n\x0fpermission_name\x18\x01 \x01(\tBG\x92\x41&2\x16Name of the permissionJ\x0c\"read_users\"\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x0epermissionName\x12K\n\npermission\x18\x03 \x01(\x0b\x32#.scalekit.v1.roles.CreatePermissionB\x06\xbaH\x03\xc8\x01\x01R\npermission\"Y\n\x18UpdatePermissionResponse\x12=\n\npermission\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.roles.PermissionR\npermission\"\x89\x04\n\x16ListPermissionsRequest\x12\x64\n\npage_token\x18\x01 \x01(\tB@\x92\x41=2+Page token to retrieve next page of resultsJ\x0e\"token_abc123\"H\x00R\tpageToken\x88\x01\x01\x12\x66\n\tpage_size\x18\x02 \x01(\rBD\x92\x41\x38\x32\x32Number of permissions to return per page (max 100)J\x02\x35\x30\xbaH\x06*\x04\x18\x64(\x01H\x01R\x08pageSize\x88\x01\x01\x12\x83\x02\n\x04type\x18\x03 \x01(\x0e\x32!.scalekit.v1.roles.PermissionTypeB\xcb\x01\x92\x41\xc7\x01\x32\xbf\x01\x46ilter permissions by type: ALL, SCALEKIT, or ENVIRONMENT, where SCALEKIT are predefined Scalekit permissions and ENVIRONMENT are custom permissions created in the environment, default is ALLJ\x03\x41LLR\x04typeB\r\n\x0b_page_tokenB\x0c\n\n_page_size\"\xf8\x02\n\x17ListPermissionsResponse\x12?\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x1d.scalekit.v1.roles.PermissionR\x0bpermissions\x12g\n\x0fprev_page_token\x18\x02 \x01(\tB?\x92\x41<2*Token to retrieve previous page of resultsJ\x0e\"token_def456\"R\rprevPageToken\x12\x63\n\x0fnext_page_token\x18\x03 \x01(\tB;\x92\x41\x38\x32&Token to retrieve next page of resultsJ\x0e\"token_def456\"R\rnextPageToken\x12N\n\ntotal_size\x18\x04 \x01(\rB/\x92\x41,2%Total number of permissions availableJ\x03\x31\x35\x30R\ttotalSize\"\x8b\x01\n\x17\x44\x65letePermissionRequest\x12p\n\x0fpermission_name\x18\x01 \x01(\tBG\x92\x41&2\x16Name of the permissionJ\x0c\"read_users\"\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x0epermissionName\"u\n\x1aListRolePermissionsRequest\x12W\n\trole_name\x18\x01 \x01(\tB:\x92\x41\x19\x32\x10Name of the roleJ\x05\x61\x64min\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_-]+$\xc8\x01\x01R\x08roleName\"\x96\x01\n\x1bListRolePermissionsResponse\x12w\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x1d.scalekit.v1.roles.PermissionB6\x92\x41\x33\x32\x31List of permissions directly assigned to the roleR\x0bpermissions\"\xfb\x01\n\x1b\x41\x64\x64PermissionsToRoleRequest\x12W\n\trole_name\x18\x01 \x01(\tB:\x92\x41\x19\x32\x10Name of the roleJ\x05\x61\x64min\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x08roleName\x12\x82\x01\n\x10permission_names\x18\x02 \x03(\tBW\x92\x41-2+List of permission names to add to the role\xbaH$\x92\x01\x1e\x08\x01\x10\x64\"\x18r\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x0fpermissionNames\"\xa3\x01\n\x1c\x41\x64\x64PermissionsToRoleResponse\x12\x82\x01\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x1d.scalekit.v1.roles.PermissionBA\x92\x41>2\x92\x41\x1e\x32\x15Name of the base roleJ\x05\x61\x64min\xbaH\x1ar\x15\x10\x01\x18@2\x0f^[a-zA-Z0-9_]+$\xc8\x01\x01R\x08roleName\"i\n\x1aListDependentRolesResponse\x12K\n\x05roles\x18\x01 \x03(\x0b\x32\x17.scalekit.v1.roles.RoleB\x1c\x92\x41\x19\x32\x17List of dependent rolesR\x05roles\"\xfd\x01\n\x15\x44\x65leteRoleBaseRequest\x12\xe3\x01\n\trole_name\x18\x01 \x01(\tB\xc5\x01\x92\x41\xa4\x01\x32\x91\x01Unique name identifier of the role whose base inheritance relationship should be removed. Must be alphanumeric with underscores, 1-64 characters.J\x0e\x63ontent_editor\xbaH\x1ar\x15\x10\x01\x18@2\x0f^[a-zA-Z0-9_]+$\xc8\x01\x01R\x08roleName\"\x88\x02\n!DeleteOrganizationRoleBaseRequest\x12\x65\n\x06org_id\x18\x01 \x01(\tBN\x92\x41=2$Unique identifier to an OrganizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12|\n\trole_name\x18\x02 \x01(\tB_\x92\x41:21Name of the organization role to remove base fromJ\x05\x61\x64min\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName*8\n\x0ePermissionType\x12\x07\n\x03\x41LL\x10\x00\x12\x0c\n\x08SCALEKIT\x10\x01\x12\x0f\n\x0b\x45NVIRONMENT\x10\x02\x32\x84\xbc\x01\n\x0cRolesService\x12\xcf\x05\n\nCreateRole\x12$.scalekit.v1.roles.CreateRoleRequest\x1a%.scalekit.v1.roles.CreateRoleResponse\"\xf3\x04\x92\x41\xce\x04\n\x05Roles\x12\x1e\x43reate new role in environment\x1a\x88\x03\x43reates a new role within the environment with specified permissions and metadata. Use this endpoint to define custom roles that can be assigned to users or groups. You can create hierarchical roles by extending existing roles, assign specific permissions, and configure display information. Roles are the foundation of your access control system and determine what actions users can perform.J\x99\x01\n\x03\x32\x30\x31\x12\x91\x01\ndRole created successfully. Returns the complete role object with system-generated ID and timestamps.\x12)\n\'\x1a%.scalekit.v1.roles.CreateRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x15\"\r/api/v1/roles:\x04role\x12\xb2\x05\n\nUpdateRole\x12$.scalekit.v1.roles.UpdateRoleRequest\x1a%.scalekit.v1.roles.UpdateRoleResponse\"\xd6\x04\x92\x41\xa5\x04\n\x05Roles\x12\x17Update role information\x1a\xf6\x02Modifies an existing role\'s properties including display name, description, permissions, and inheritance. Use this endpoint to update role metadata, change permission assignments, or modify role hierarchy. Only the fields you specify will be updated, leaving other properties unchanged. When updating permissions, the new list replaces all existing permissions for the role.J\x89\x01\n\x03\x32\x30\x30\x12\x81\x01\nTRole updated successfully. Returns the modified role object with updated timestamps.\x12)\n\'\x1a%.scalekit.v1.roles.UpdateRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02!\x1a\x19/api/v1/roles/{role_name}:\x04role\x12\xff\x04\n\x07GetRole\x12!.scalekit.v1.roles.GetRoleRequest\x1a\".scalekit.v1.roles.GetRoleResponse\"\xac\x04\x92\x41\x81\x04\n\x05Roles\x12\x10Get role details\x1a\xa9\x02Retrieves complete information for a specific role including metadata and inheritance details (base role and dependent role count). Use this endpoint to audit role configuration and understand the role\'s place in the hierarchy. To view the role\'s permissions, use the ListRolePermissions endpoint.J\xb9\x01\n\x03\x32\x30\x30\x12\xb1\x01\n\x86\x01Successfully retrieved role details. Returns the role object including metadata and inheritance details. Permissions are not included.\x12&\n$\x1a\".scalekit.v1.roles.GetRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1b\x12\x19/api/v1/roles/{role_name}\x12\x89\x06\n\tListRoles\x12#.scalekit.v1.roles.ListRolesRequest\x1a$.scalekit.v1.roles.ListRolesResponse\"\xb0\x05\x92\x41\x91\x05\n\x05Roles\x12\x1dList all roles in environment\x1a\xc4\x03Retrieves a comprehensive list of all roles available within the specified environment including organization roles. Use this endpoint to view all role definitions, including custom roles and their configurations. You can optionally include permission details for each role to understand their capabilities. This is useful for role management, auditing organization access controls, or understanding the available access levels within the organization.J\xa1\x01\n\x03\x32\x30\x30\x12\x99\x01\nmSuccessfully retrieved list of roles. Returns all roles with their metadata and optionally their permissions.\x12(\n&\x1a$.scalekit.v1.roles.ListRolesResponse\x82\xb5\x18\x02\x18\x64\x82\xd3\xe4\x93\x02\x0f\x12\r/api/v1/roles\x12\xac\x06\n\nDeleteRole\x12$.scalekit.v1.roles.DeleteRoleRequest\x1a\x16.google.protobuf.Empty\"\xdf\x05\x92\x41\xb4\x05\n\x05Roles\x12\x1e\x44\x65lete role and reassign users\x1a\xbb\x04Permanently removes a role from the environment and reassigns users who had that role to a different role. Use this endpoint when you need to clean up unused roles or restructure your access control system. The role cannot be deleted if it has dependent roles (roles that extend it) unless you specify a replacement role. If users are assigned to the role being deleted, you must provide a reassign_role_name to move those users to a different role before deletion can proceed. This action cannot be undone, so ensure no critical users depend on the role before deletion.JM\n\x03\x32\x30\x30\x12\x46\nDRole successfully deleted and users reassigned. No content returned.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1b*\x19/api/v1/roles/{role_name}\x12\xdc\x06\n\x16\x43reateOrganizationRole\x12\x30.scalekit.v1.roles.CreateOrganizationRoleRequest\x1a\x31.scalekit.v1.roles.CreateOrganizationRoleResponse\"\xdc\x05\x92\x41\xa0\x05\n\x05Roles\x12\x18\x43reate organization role\x1a\xc7\x03\x43reates a new role within the specified organization with basic configuration including name, display name, description, and permissions. Use this endpoint to define custom roles that can be assigned to users within the organization. You can create hierarchical roles by extending existing roles and assign specific permissions to control access levels. The role will be scoped to the organization and can be used for organization-specific access control.J\xb2\x01\n\x03\x32\x30\x31\x12\xaa\x01\nqOrganization role created successfully. Returns the complete role object with system-generated ID and timestamps.\x12\x35\n3\x1a\x31.scalekit.v1.roles.CreateOrganizationRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02,\"$/api/v1/organizations/{org_id}/roles:\x04role\x12\xb5\x06\n\x16UpdateOrganizationRole\x12\x30.scalekit.v1.roles.UpdateOrganizationRoleRequest\x1a\x31.scalekit.v1.roles.UpdateOrganizationRoleResponse\"\xb5\x05\x92\x41\xed\x04\n\x05Roles\x12\x18Update organization role\x1a\xa4\x03Modifies an existing organization role\'s properties including display name, description, permissions, and inheritance settings. Use this endpoint to update role metadata, change permission assignments, or modify role hierarchy within the organization. Only the fields you specify will be updated, leaving other properties unchanged. When updating permissions, the new list replaces all existing permissions for the role.J\xa2\x01\n\x03\x32\x30\x30\x12\x9a\x01\naOrganization role updated successfully. Returns the modified role object with updated timestamps.\x12\x35\n3\x1a\x31.scalekit.v1.roles.UpdateOrganizationRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x38\x1a\x30/api/v1/organizations/{org_id}/roles/{role_name}:\x04role\x12\xb4\x07\n\x13GetOrganizationRole\x12-.scalekit.v1.roles.GetOrganizationRoleRequest\x1a..scalekit.v1.roles.GetOrganizationRoleResponse\"\xbd\x06\x92\x41\xe7\x05\n\x05Roles\x12\x1dGet organization role details\x1a\xbf\x03Retrieves complete information for a specific organization role including metadata, inheritance details, and optionally permissions. Use this endpoint to audit role configuration and understand the role\'s place in the organization\'s role hierarchy. You can include permission details to see what capabilities the role provides. This operation is useful for role management, user assignment decisions, or understanding organization access controls.J\xfc\x01\n\x03\x32\x30\x30\x12\xf4\x01\n\xbd\x01Successfully retrieved organization role details. Returns the role object including metadata and inheritance details. Permissions are included only when requested via the include parameter.\x12\x32\n0\x1a..scalekit.v1.roles.GetOrganizationRoleResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x32\x12\x30/api/v1/organizations/{org_id}/roles/{role_name}\x12\xb7\x06\n\x15ListOrganizationRoles\x12/.scalekit.v1.roles.ListOrganizationRolesRequest\x1a\x30.scalekit.v1.roles.ListOrganizationRolesResponse\"\xba\x05\x92\x41\xf0\x04\n\x05Roles\x12\x17List organization roles\x1a\x90\x03Retrieves all environment roles and organization specific roles. Use this endpoint to view all role definitions, including custom roles and their configurations. You can optionally include permission details for each role to understand their capabilities. This is useful for role management, auditing organization access controls, or understanding the available access levels within the organization.J\xba\x01\n\x03\x32\x30\x30\x12\xb2\x01\nzSuccessfully retrieved list of organization roles. Returns all roles with their metadata and optionally their permissions.\x12\x34\n2\x1a\x30.scalekit.v1.roles.ListOrganizationRolesResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02&\x12$/api/v1/organizations/{org_id}/roles\x12\x8a\x06\n\x16\x44\x65leteOrganizationRole\x12\x30.scalekit.v1.roles.DeleteOrganizationRoleRequest\x1a\x16.google.protobuf.Empty\"\xa5\x05\x92\x41\xe3\x04\n\x05Roles\x12\x18\x44\x65lete organization role\x1a\xd6\x03Permanently removes a role from the organization and optionally reassigns users who had that role to a different role. Use this endpoint when you need to clean up unused roles or restructure your organization\'s access control system. If users are assigned to the role being deleted, you can provide a reassign_role_name to move those users to a different role before deletion. This action cannot be undone, so ensure no critical users depend on the role before deletion.Jg\n\x03\x32\x30\x30\x12`\n^Organization role successfully deleted and users reassigned if specified. No content returned.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x32*0/api/v1/organizations/{org_id}/roles/{role_name}\x12\xdb\x08\n\x11GetRoleUsersCount\x12+.scalekit.v1.roles.GetRoleUsersCountRequest\x1a,.scalekit.v1.roles.GetRoleUsersCountResponse\"\xea\x07\x92\x41\xb3\x07\n\x05Roles\x12\x1cRetrieve user count for role\x1a\x93\x05Retrieves the total number of users currently assigned to the specified role within the environment. Use this endpoint to monitor role usage, enforce user limits, or understand the scope of role assignments. Provide the role\'s unique name as a path parameter, and the response will include the current user count for that role. This operation is read-only and does not modify any data or user assignments. The count reflects all users who have the role either directly assigned or inherited through organization membership. This information is useful for capacity planning, security auditing, or understanding the impact of role changes across your user base.J\xf5\x01\n\x03\x32\x30\x30\x12\xed\x01\n\xb8\x01Successfully retrieved user count for the specified role. Returns the total number of users currently assigned to the role, including both direct assignments and inherited assignments.\x12\x30\n.\x1a,.scalekit.v1.roles.GetRoleUsersCountResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\'\x12%/api/v1/roles/{role_name}/users:count\x12\xb2\x07\n\x1dGetOrganizationRoleUsersCount\x12\x37.scalekit.v1.roles.GetOrganizationRoleUsersCountRequest\x1a\x38.scalekit.v1.roles.GetOrganizationRoleUsersCountResponse\"\x9d\x06\x92\x41\xc0\x05\n\x05Roles\x12 Get organization role user count\x1a\xc0\x03Retrieves the total number of users currently assigned to the specified organization role. Use this endpoint to monitor organization role usage, enforce user limits, or understand the scope of role assignments within the organization. Provide the organization ID and role name as path parameters. The response includes the user count for the requested organization role. This operation is read-only and does not modify any data or user assignments.J\xd1\x01\n\x03\x32\x30\x30\x12\xc9\x01\n\x88\x01Successfully retrieved user count for the specified organization role. Returns the total number of users currently assigned to the role.\x12<\n:\x1a\x38.scalekit.v1.roles.GetOrganizationRoleUsersCountResponse\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02>\x12\n\x03\x32\x30\x30\x12\x37\n5Permission successfully deleted. No content returned.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\'*%/api/v1/permissions/{permission_name}\x12\x80\t\n\x13ListRolePermissions\x12-.scalekit.v1.roles.ListRolePermissionsRequest\x1a..scalekit.v1.roles.ListRolePermissionsResponse\"\x89\x08\x92\x41\xd2\x07\n\x05Roles\x12\x19List permissions for role\x1a\xd7\x05Retrieves all permissions directly assigned to the specified role, excluding permissions inherited from base roles. Use this endpoint to view the explicit permission assignments for a role, which is useful for understanding direct role capabilities, auditing permission assignments, or managing role-permission relationships. Provide the role name as a path parameter, and the response will include only the permissions that are directly assigned to that role. This operation does not include inherited permissions from role hierarchies - use ListEffectiveRolePermissions to see the complete set of permissions including inheritance. Returns a list of permission objects with their names, descriptions, and assignment metadata.J\xd3\x01\n\x03\x32\x30\x30\x12\xcb\x01\n\x94\x01Successfully retrieved role permissions. Returns a list of all permissions directly assigned to the specified role, excluding inherited permissions.\x12\x32\n0\x1a..scalekit.v1.roles.ListRolePermissionsResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\'\x12%/api/v1/roles/{role_name}/permissions\x12\xfa\x08\n\x14\x41\x64\x64PermissionsToRole\x12..scalekit.v1.roles.AddPermissionsToRoleRequest\x1a/.scalekit.v1.roles.AddPermissionsToRoleResponse\"\x80\x08\x92\x41\xc6\x07\n\x05Roles\x12\x17\x41\x64\x64 permissions to role\x1a\xbd\x05\x41\x64\x64s one or more permissions to the specified role while preserving existing permission assignments. Use this endpoint to grant additional capabilities to a role without affecting its current permission set. Provide the role name as a path parameter and a list of permission names in the request body. The system will validate that all specified permissions exist in the environment and add them to the role. Existing permission assignments remain unchanged, making this operation safe for incremental permission management. This is useful for gradually expanding role capabilities or adding new permissions as your system evolves. Returns the updated list of all permissions now assigned to the role.J\xe3\x01\n\x03\x32\x30\x30\x12\xdb\x01\n\xa3\x01Permissions added to role successfully. Returns the complete list of all permissions now assigned to the role, including both existing and newly added permissions.\x12\x33\n1\x1a/.scalekit.v1.roles.AddPermissionsToRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02*\"%/api/v1/roles/{role_name}/permissions:\x01*\x12\xb7\x07\n\x18RemovePermissionFromRole\x12\x32.scalekit.v1.roles.RemovePermissionFromRoleRequest\x1a\x16.google.protobuf.Empty\"\xce\x06\x92\x41\x85\x06\n\x05Roles\x12\x1bRemove permission from role\x1a\x94\x05Removes a specific permission from the specified role, revoking that capability from all users assigned to the role. Use this endpoint to restrict role capabilities or remove unnecessary permissions. Provide both the role name and permission name as path parameters. This operation only affects the direct permission assignment and does not impact permissions inherited from base roles. If the permission is inherited through role hierarchy, you may need to modify the base role instead. This is useful for fine-tuning role permissions, implementing least-privilege access controls, or removing deprecated permissions. Returns no content on successful removal.JH\n\x03\x32\x30\x30\x12\x41\n?Permission removed from role successfully. No content returned.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x39*7/api/v1/roles/{role_name}/permissions/{permission_name}\x12\xdf\t\n\x1cListEffectiveRolePermissions\x12\x36.scalekit.v1.roles.ListEffectiveRolePermissionsRequest\x1a\x37.scalekit.v1.roles.ListEffectiveRolePermissionsResponse\"\xcd\x08\x92\x41\x92\x08\n\x05Roles\x12#List effective permissions for role\x1a\xd9\x05Retrieves the complete set of effective permissions for a role, including both directly assigned permissions and permissions inherited from base roles through the role hierarchy. Use this endpoint to understand the full scope of capabilities available to users assigned to a specific role. Provide the role name as a path parameter, and the response will include all permissions that apply to the role, accounting for inheritance relationships. This operation is essential for auditing role capabilities, understanding permission inheritance, or verifying the complete access scope before role assignment. Returns a comprehensive list of permission names representing the full set of effective permissions for the specified role.J\x87\x02\n\x03\x32\x30\x30\x12\xff\x01\n\xbf\x01Successfully retrieved effective permissions. Returns the complete list of all permissions that apply to the role, including both direct assignments and inherited permissions from base roles.\x12;\n9\x1a\x37.scalekit.v1.roles.ListEffectiveRolePermissionsResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02+\x12)/api/v1/roles/{role_name}/permissions:all\x1a\xe2\x02\x92\x41\xde\x02\n\x05Roles\x12\xd4\x02Role-based access control (RBAC) for defining and managing permissions in an environment. Create and update custom roles with explicit permissions, model role hierarchies through inheritance, view dependent roles, manage role-permission assignments, and list roles and permissions. Also provides a utility to count users assigned to a role.B1Z/github.com/scalekit-inc/scalekit/pkg/grpc/rolesb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -275,7 +275,7 @@ _globals['_ROLESSERVICE'].methods_by_name['DeleteRoleBase']._loaded_options = None _globals['_ROLESSERVICE'].methods_by_name['DeleteRoleBase']._serialized_options = b'\222A\262\005\n\005Roles\022$Delete role inheritance relationship\032\206\004Removes the base role inheritance relationship for a specified role, effectively eliminating all inherited permissions from the base role. Use this endpoint when you want to break the hierarchical relationship between roles and remove inherited permissions. The role will retain only its directly assigned permissions after this operation. This action cannot be undone, so ensure the role has sufficient direct permissions before removing inheritance. Returns no content on successful removal of the base relationship.Jz\n\003200\022s\nqBase role inheritance relationship successfully removed. The role now has only its directly assigned permissions.\202\265\030\002\030D\202\323\344\223\002 *\036/api/v1/roles/{role_name}/base' _globals['_ROLESSERVICE'].methods_by_name['DeleteOrganizationRoleBase']._loaded_options = None - _globals['_ROLESSERVICE'].methods_by_name['DeleteOrganizationRoleBase']._serialized_options = b'\222A\243\005\n\005Roles\022$Remove organization role inheritance\032\350\003Removes the base role inheritance relationship for a specified organization role, effectively eliminating all inherited permissions from the base role. Use this endpoint when you want to break the hierarchical relationship between roles and remove inherited permissions within the organization. The role will retain only its directly assigned permissions after this operation. This action cannot be undone, so ensure the role has sufficient direct permissions before removing inheritance.J\210\001\n\003200\022\200\001\n~Organization role base inheritance relationship successfully removed. The role now has only its directly assigned permissions.\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\0027*5/api/v1/organizations/{org_id}/roles/{role_name}/base' + _globals['_ROLESSERVICE'].methods_by_name['DeleteOrganizationRoleBase']._serialized_options = b'\222A\243\005\n\005Roles\022$Remove organization role inheritance\032\350\003Removes the base role inheritance relationship for a specified organization role, effectively eliminating all inherited permissions from the base role. Use this endpoint when you want to break the hierarchical relationship between roles and remove inherited permissions within the organization. The role will retain only its directly assigned permissions after this operation. This action cannot be undone, so ensure the role has sufficient direct permissions before removing inheritance.J\210\001\n\003200\022\200\001\n~Organization role base inheritance relationship successfully removed. The role now has only its directly assigned permissions.\202\265\030\002\030D\202\323\344\223\0027*5/api/v1/organizations/{org_id}/roles/{role_name}/base' _globals['_ROLESSERVICE'].methods_by_name['CreatePermission']._loaded_options = None _globals['_ROLESSERVICE'].methods_by_name['CreatePermission']._serialized_options = b'\222A\260\006\n\013Permissions\022\025Create new permission\032\306\004Creates a new permission that represents a specific action users can perform within the environment. Use this endpoint to define granular access controls for your RBAC system. You can provide a unique permission name following the format \'action:resource\' (for example, \'read:documents\', \'write:users\') and an optional description explaining the permission\'s purpose. The permission name must be unique across the environment and follows alphanumeric naming conventions with colons and underscores. Returns the created permission object including system-generated ID and timestamps.J\300\001\n\003201\022\270\001\n\204\001Permission created successfully. Returns the complete permission object with system-generated ID, name, description, and timestamps.\022/\n-\032+.scalekit.v1.roles.CreatePermissionResponse\202\265\030\002\030D\202\323\344\223\002!\"\023/api/v1/permissions:\npermission' _globals['_ROLESSERVICE'].methods_by_name['GetPermission']._loaded_options = None @@ -405,5 +405,5 @@ _globals['_DELETEORGANIZATIONROLEBASEREQUEST']._serialized_start=19004 _globals['_DELETEORGANIZATIONROLEBASEREQUEST']._serialized_end=19268 _globals['_ROLESSERVICE']._serialized_start=19330 - _globals['_ROLESSERVICE']._serialized_end=43413 + _globals['_ROLESSERVICE']._serialized_end=43398 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/tools/tools_pb2.py b/scalekit/v1/tools/tools_pb2.py index df5fce8..3c5a3b7 100644 --- a/scalekit/v1/tools/tools_pb2.py +++ b/scalekit/v1/tools/tools_pb2.py @@ -24,7 +24,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dscalekit/v1/tools/tools.proto\x12\x11scalekit.v1.tools\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\x88\x01\n\x11\x43reateToolRequest\x12s\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolBF\x92\x41=2;Tool details including name, schema version, and definition\xbaH\x03\xc8\x01\x01R\x04tool\"c\n\x12\x43reateToolResponse\x12M\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB \x92\x41\x1d\x32\x1b\x44\x65tails of the created toolR\x04tool\"\xf0\x05\n\x04Tool\x12\x38\n\x02id\x18\x01 \x01(\tB(\x92\x41\"2\x15Unique ID of the toolJ\t\"tol_123\"\xe0\x41\x03R\x02id\x12I\n\x08provider\x18\x02 \x01(\tB-\x92\x41\'2\x1bProvider name (e.g. GOOGLE)J\x08\"GOOGLE\"\xe0\x41\x03R\x08provider\x12\x87\x01\n\ndefinition\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructBN\x92\x41\x45\x32$Tool definition in structured formatJ\x1d{\"input\": {\"type\": \"object\"}}\xbaH\x03\xc8\x01\x01R\ndefinition\x12s\n\x08metadata\x18\x04 \x01(\x0b\x32\x17.google.protobuf.StructB>\x92\x41;2\"Additional metadata about the toolJ\x15{\"category\": \"email\"}R\x08metadata\x12X\n\x04tags\x18\x05 \x03(\tBD\x92\x41\x41\x32$Tags for categorization or filteringJ\x19[\"notification\", \"email\"]R\x04tags\x12\x83\x01\n\nis_default\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBH\x92\x41\x42\x32:Marks this tool as the default version for the combinationJ\x04true\xe0\x41\x03R\tisDefault\x12\x83\x01\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampBH\x92\x41\x42\x32(Timestamp when the tool was last updatedJ\x16\"2023-10-01T12:00:00Z\"\xe0\x41\x03R\tupdatedAt\"\xd3\x01\n\nScopedTool\x12+\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolR\x04tool\x12\x1e\n\nidentifier\x18\x02 \x01(\tR\nidentifier\x12x\n\x14\x63onnected_account_id\x18\x03 \x01(\tBF\x92\x41<20ID of the connected account for this scoped toolJ\x08\"ca_123\"\xbaH\x04r\x02\x18\x64R\x12\x63onnectedAccountId\"\xfe\x01\n\x10ListToolsRequest\x12[\n\x06\x66ilter\x18\x01 \x01(\x0b\x32\x19.scalekit.v1.tools.FilterB(\x92\x41%2#Filter parameters for listing toolsR\x06\x66ilter\x12\x1b\n\tpage_size\x18\x02 \x01(\rR\x08pageSize\x12p\n\npage_token\x18\x03 \x01(\tBQ\x92\x41N2.Token from a previous response for pagination.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\xf3\x03\n\x06\x46ilter\x12t\n\x07summary\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB>\x92\x41;23Return only tool names instead of full tool detailsJ\x04trueR\x07summary\x12I\n\x08provider\x18\x02 \x01(\tB-\x92\x41#2\x17\x46ilter by tool providerJ\x08\"GOOGLE\"\xbaH\x04r\x02\x18\x32R\x08provider\x12j\n\nidentifier\x18\x03 \x01(\tBJ\x92\x41@2&Filter by connected account identifierJ\x16\"app_google_workspace\"\xbaH\x04r\x02\x18\x64R\nidentifier\x12I\n\ttool_name\x18\x04 \x03(\tB,\x92\x41)2\x13\x46ilter by tool nameJ\x12\"gmail_send_email\"R\x08toolName\x12g\n\x05query\x18\x05 \x01(\tBL\x92\x41@2&Filter by connected account identifierJ\x16\"gmail get attachment\"\xbaH\x06r\x04\x10\x03\x18\x64H\x00R\x05query\x88\x01\x01\x42\x08\n\x06_query\"\x9b\x04\n\x11ListToolsResponse\x12v\n\x0fnext_page_token\x18\x01 \x01(\tBN\x92\x41K2)Token for fetching the next page of toolsJ\x1e\"eyJwYWdlIjozLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12Q\n\ntotal_size\x18\x02 \x01(\rB2\x92\x41/2(Total number of tools matching the queryJ\x03\x31\x30\x34R\ttotalSize\x12z\n\x0fprev_page_token\x18\x03 \x01(\tBR\x92\x41O2-Token for fetching the previous page of toolsJ\x1e\"eyJwYWdlIjoxLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12^\n\ntool_names\x18\x04 \x03(\tB?\x92\x41<2$List of tool names (if summary=true)J\x14[\"gmail_send_email\"]R\ttoolNames\x12_\n\x05tools\x18\x05 \x03(\x0b\x32\x17.scalekit.v1.tools.ToolB0\x92\x41-2+List of tools (if summary=false or omitted)R\x05tools\"\xf7\x0c\n\x12\x45xecuteToolRequest\x12Q\n\ttool_name\x18\x01 \x01(\tB4\x92\x41+2\x1bName of the tool to executeJ\x0c\"send_email\"\xbaH\x03\xc8\x01\x01R\x08toolName\x12\x99\x02\n\nidentifier\x18\x02 \x01(\tB\xf3\x01\x92\x41\xef\x01\x32\xd8\x01Optional. The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier). Use this in combination with connector to identify the connected account.J\x12\"user@example.com\"H\x00R\nidentifier\x88\x01\x01\x12\xfc\x01\n\x06params\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructB\xca\x01\x92\x41\xc6\x01\x32}JSON object containing the parameters required for tool execution. The structure depends on the specific tool being executed.JE{\"to\": \"user@example.com\", \"subject\": \"Hello\", \"body\": \"Hello World\"}R\x06params\x12\xea\x01\n\x14\x63onnected_account_id\x18\x04 \x01(\tB\xb2\x01\x92\x41\xa7\x01\x32\x9a\x01Optional. The unique ID of the connected account. Use this to directly identify the connected account instead of using identifier + connector combination.J\x08\"ca_123\"\xbaH\x04r\x02\x18\x64H\x01R\x12\x63onnectedAccountId\x88\x01\x01\x12\xec\x01\n\tconnector\x18\x05 \x01(\tB\xc8\x01\x92\x41\xbd\x01\x32\xa6\x01Optional. The name of the connector/provider (e.g., \'Google Workspace\', \'Slack\', \'Notion\'). Use this in combination with identifier to identify the connected account.J\x12\"Google Workspace\"\xbaH\x04r\x02\x18\x64H\x02R\tconnector\x88\x01\x01\x12\xee\x01\n\x0forganization_id\x18\x06 \x01(\tB\xbf\x01\x92\x41\xb4\x01\x32\xa6\x01Optional. The organization ID to scope the connected account lookup. Use this to narrow down the search when the same identifier exists across multiple organizations.J\t\"org_123\"\xbaH\x04r\x02\x18\x64H\x03R\x0eorganizationId\x88\x01\x01\x12\xcf\x01\n\x07user_id\x18\x07 \x01(\tB\xb0\x01\x92\x41\xa5\x01\x32\x96\x01Optional. The user ID to scope the connected account lookup. Use this to narrow down the search when the same identifier exists across multiple users.J\n\"user_123\"\xbaH\x04r\x02\x18\x64H\x04R\x06userId\x88\x01\x01\x42\r\n\x0b_identifierB\x17\n\x15_connected_account_idB\x0c\n\n_connectorB\x12\n\x10_organization_idB\n\n\x08_user_id\"\xa3\x02\n\x13\x45xecuteToolResponse\x12\xac\x01\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\x7f\x92\x41|23Free-flowing JSON parameters for the tool executionJE{\"to\": \"user@example.com\", \"subject\": \"Hello\", \"body\": \"Hello World\"}R\x04\x64\x61ta\x12]\n\x0c\x65xecution_id\x18\x02 \x01(\tB:\x92\x41\x37\x32(Unique identifier for the tool executionJ\x0b\"123456789\"R\x0b\x65xecutionId\"\xad\x02\n\x15SetToolDefaultRequest\x12\x61\n\x04name\x18\x01 \x01(\tBM\x92\x41/2\x19\x46ully qualified tool nameJ\x12\"gmail_send_email\"\xbaH\x18r\x13\x10\x01\x18\x64\x32\r^[a-z0-9_].*$\xc8\x01\x01R\x04name\x12W\n\x0eschema_version\x18\x02 \x01(\tB0\x92\x41!2\x1aSchema version of the toolJ\x03\"1\"\xbaH\tr\x04\x10\x01\x18\n\xc8\x01\x01R\rschemaVersion\x12X\n\x0ctool_version\x18\x03 \x01(\tB5\x92\x41&2\x1fTool version to mark as defaultJ\x03\"1\"\xbaH\tr\x04\x10\x01\x18\n\xc8\x01\x01R\x0btoolVersion\"j\n\x16SetToolDefaultResponse\x12P\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB#\x92\x41 2\x1eThe tool now marked as defaultR\x04tool\"^\n\x11UpdateToolRequest\x12I\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB\x1c\x92\x41\x13\x32\x11Updated tool data\xbaH\x03\xc8\x01\x01R\x04tool\"X\n\x12UpdateToolResponse\x12\x42\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB\x15\x92\x41\x12\x32\x10The updated toolR\x04tool\"0\n\x11\x44\x65leteToolRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06:\x04tol_R\x02id\"\x91\x03\n\x16ListScopedToolsRequest\x12z\n\nidentifier\x18\x01 \x01(\tBZ\x92\x41M23Identifier of the connected account to filter toolsJ\x16\"app_google_workspace\"\xbaH\x07r\x02\x18\x64\xc8\x01\x01R\nidentifier\x12l\n\x06\x66ilter\x18\x02 \x01(\x0b\x32#.scalekit.v1.tools.ScopedToolFilterB/\x92\x41,2*Filter parameters for listing scoped toolsR\x06\x66ilter\x12\x1b\n\tpage_size\x18\x03 \x01(\rR\x08pageSize\x12p\n\npage_token\x18\x04 \x01(\tBQ\x92\x41N2.Token from a previous response for pagination.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\x95\x03\n\x17ListScopedToolsResponse\x12v\n\x0fnext_page_token\x18\x01 \x01(\tBN\x92\x41K2)Token for fetching the next page of toolsJ\x1e\"eyJwYWdlIjozLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12Q\n\ntotal_size\x18\x02 \x01(\rB2\x92\x41/2(Total number of tools matching the queryJ\x03\x31\x30\x34R\ttotalSize\x12z\n\x0fprev_page_token\x18\x03 \x01(\tBR\x92\x41O2-Token for fetching the previous page of toolsJ\x1e\"eyJwYWdlIjoxLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12\x33\n\x05tools\x18\x05 \x03(\x0b\x32\x1d.scalekit.v1.tools.ScopedToolR\x05tools\"z\n\x10ScopedToolFilter\x12\x1c\n\tproviders\x18\x01 \x03(\tR\tproviders\x12\x1d\n\ntool_names\x18\x02 \x03(\tR\ttoolNames\x12)\n\x10\x63onnection_names\x18\x03 \x03(\tR\x0f\x63onnectionNames2\xe1\x14\n\x0bToolService\x12\xf2\x01\n\nCreateTool\x12$.scalekit.v1.tools.CreateToolRequest\x1a%.scalekit.v1.tools.CreateToolResponse\"\x96\x01\x92\x41\x63\n\x05Tools\x12\x11\x43reate a new tool\x1aGRegister a new tool with its schema, metadata, and other configuration.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\"\r/api/v1/tools:\x04tool\x12\xfa\x01\n\tListTools\x12#.scalekit.v1.tools.ListToolsRequest\x1a$.scalekit.v1.tools.ListToolsResponse\"\xa1\x01\x92\x41t\n\x05Tools\x12\nList tools\x1a_Fetch tools by provider, identifier, and connector. If `summary=true`, returns only tool names.\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x0f\x12\r/api/v1/tools\x12\x9b\x01\n\x0fListScopedTools\x12).scalekit.v1.tools.ListScopedToolsRequest\x1a*.scalekit.v1.tools.ListScopedToolsResponse\"1\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/tools/scoped\x12\xac\x02\n\x0eSetToolDefault\x12(.scalekit.v1.tools.SetToolDefaultRequest\x1a).scalekit.v1.tools.SetToolDefaultResponse\"\xc4\x01\x92\x41\x87\x01\n\x05Tools\x12#Marks a tool as the default version\x1aYSet a specific tool (by name, schema version, tool version, and provider) as the default.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\"\x19/api/v1/tools:set_default:\x01*\x12\xd8\x01\n\nUpdateTool\x12$.scalekit.v1.tools.UpdateToolRequest\x1a%.scalekit.v1.tools.UpdateToolResponse\"}\x92\x41J\n\x05Tools\x12\rUpdate a tool\x1a\x32Update an existing tool by provider and tool name.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\x1a\r/api/v1/tools:\x04tool\x12\xd9\x01\n\nDeleteTool\x12$.scalekit.v1.tools.DeleteToolRequest\x1a\x16.google.protobuf.Empty\"\x8c\x01\x92\x41Z\n\x05Tools\x12\rDelete a tool\x1a\x42\x44\x65lete a tool by name, schema version, tool version, and provider.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x14*\x12/api/v1/tools/{id}\x12\xc2\t\n\x0b\x45xecuteTool\x12%.scalekit.v1.tools.ExecuteToolRequest\x1a&.scalekit.v1.tools.ExecuteToolResponse\"\xe3\x08\x92\x41\xba\x08\n\x12\x43onnected Accounts\x12(Execute a tool using a connected account\x1a\xcf\x03\x45xecutes a tool action using authentication credentials from a connected account. Specify the tool by name and provide required parameters as JSON. The connected account can be identified by ID, or by combination of organization/user, connector, and identifier. Returns the execution result data and a unique execution ID for tracking. Use this endpoint to perform actions like sending emails, creating calendar events, or managing resources in external services.Jq\n\x03\x32\x30\x30\x12j\n\x92\x41;2\"Additional metadata about the toolJ\x15{\"category\": \"email\"}R\x08metadata\x12X\n\x04tags\x18\x05 \x03(\tBD\x92\x41\x41\x32$Tags for categorization or filteringJ\x19[\"notification\", \"email\"]R\x04tags\x12\x83\x01\n\nis_default\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBH\x92\x41\x42\x32:Marks this tool as the default version for the combinationJ\x04true\xe0\x41\x03R\tisDefault\x12\x83\x01\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampBH\x92\x41\x42\x32(Timestamp when the tool was last updatedJ\x16\"2023-10-01T12:00:00Z\"\xe0\x41\x03R\tupdatedAt\"\xd3\x01\n\nScopedTool\x12+\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolR\x04tool\x12\x1e\n\nidentifier\x18\x02 \x01(\tR\nidentifier\x12x\n\x14\x63onnected_account_id\x18\x03 \x01(\tBF\x92\x41<20ID of the connected account for this scoped toolJ\x08\"ca_123\"\xbaH\x04r\x02\x18\x64R\x12\x63onnectedAccountId\"\xfe\x01\n\x10ListToolsRequest\x12[\n\x06\x66ilter\x18\x01 \x01(\x0b\x32\x19.scalekit.v1.tools.FilterB(\x92\x41%2#Filter parameters for listing toolsR\x06\x66ilter\x12\x1b\n\tpage_size\x18\x02 \x01(\rR\x08pageSize\x12p\n\npage_token\x18\x03 \x01(\tBQ\x92\x41N2.Token from a previous response for pagination.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\x85\n\n\x06\x46ilter\x12t\n\x07summary\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB>\x92\x41;23Return only tool names instead of full tool detailsJ\x04trueR\x07summary\x12I\n\x08provider\x18\x02 \x01(\tB-\x92\x41#2\x17\x46ilter by tool providerJ\x08\"GOOGLE\"\xbaH\x04r\x02\x18\x32R\x08provider\x12j\n\nidentifier\x18\x03 \x01(\tBJ\x92\x41@2&Filter by connected account identifierJ\x16\"app_google_workspace\"\xbaH\x04r\x02\x18\x64R\nidentifier\x12I\n\ttool_name\x18\x04 \x03(\tB,\x92\x41)2\x13\x46ilter by tool nameJ\x12\"gmail_send_email\"R\x08toolName\x12g\n\x05query\x18\x05 \x01(\tBL\x92\x41@2&Filter by connected account identifierJ\x16\"gmail get attachment\"\xbaH\x06r\x04\x10\x03\x18\x64H\x00R\x05query\x88\x01\x01\x12\xdf\x01\n\tconnector\x18\x06 \x01(\tB\xbb\x01\x92\x41\xaf\x01\x32\xa0\x01\x43onnector name (e.g. \'My Gmail\'). When set together with identifier, resolves to a specific connected account and includes its custom MCP tools in the response.J\n\"My Gmail\"\xbaH\x05r\x03\x18\x90\x03H\x01R\tconnector\x88\x01\x01\x12\x87\x01\n\x0forganization_id\x18\x07 \x01(\tBY\x92\x41O26Organization ID to scope the connected account lookup.J\x15\"org_121312434123312\"\xbaH\x04r\x02\x18 H\x02R\x0eorganizationId\x88\x01\x01\x12p\n\x07user_id\x18\x08 \x01(\tBR\x92\x41H2.User ID to scope the connected account lookup.J\x16\"user_121312434123312\"\xbaH\x04r\x02\x18 H\x03R\x06userId\x88\x01\x01\x12\xea\x01\n\x14\x63onnected_account_id\x18\t \x01(\tB\xb2\x01\x92\x41\xa2\x01\x32\x95\x01\x43onnected account ID. Alternative to identifier + connector for directly identifying the connected account whose custom MCP tools should be included.J\x08\"ca_123\"\xbaH\tr\x07\x18\x64:\x03\x63\x61_H\x04R\x12\x63onnectedAccountId\x88\x01\x01\x42\x08\n\x06_queryB\x0c\n\n_connectorB\x12\n\x10_organization_idB\n\n\x08_user_idB\x17\n\x15_connected_account_id\"\x9b\x04\n\x11ListToolsResponse\x12v\n\x0fnext_page_token\x18\x01 \x01(\tBN\x92\x41K2)Token for fetching the next page of toolsJ\x1e\"eyJwYWdlIjozLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12Q\n\ntotal_size\x18\x02 \x01(\rB2\x92\x41/2(Total number of tools matching the queryJ\x03\x31\x30\x34R\ttotalSize\x12z\n\x0fprev_page_token\x18\x03 \x01(\tBR\x92\x41O2-Token for fetching the previous page of toolsJ\x1e\"eyJwYWdlIjoxLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12^\n\ntool_names\x18\x04 \x03(\tB?\x92\x41<2$List of tool names (if summary=true)J\x14[\"gmail_send_email\"]R\ttoolNames\x12_\n\x05tools\x18\x05 \x03(\x0b\x32\x17.scalekit.v1.tools.ToolB0\x92\x41-2+List of tools (if summary=false or omitted)R\x05tools\"\xf8\x0c\n\x12\x45xecuteToolRequest\x12Q\n\ttool_name\x18\x01 \x01(\tB4\x92\x41+2\x1bName of the tool to executeJ\x0c\"send_email\"\xbaH\x03\xc8\x01\x01R\x08toolName\x12\x99\x02\n\nidentifier\x18\x02 \x01(\tB\xf3\x01\x92\x41\xef\x01\x32\xd8\x01Optional. The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier). Use this in combination with connector to identify the connected account.J\x12\"user@example.com\"H\x00R\nidentifier\x88\x01\x01\x12\xfc\x01\n\x06params\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructB\xca\x01\x92\x41\xc6\x01\x32}JSON object containing the parameters required for tool execution. The structure depends on the specific tool being executed.JE{\"to\": \"user@example.com\", \"subject\": \"Hello\", \"body\": \"Hello World\"}R\x06params\x12\xea\x01\n\x14\x63onnected_account_id\x18\x04 \x01(\tB\xb2\x01\x92\x41\xa7\x01\x32\x9a\x01Optional. The unique ID of the connected account. Use this to directly identify the connected account instead of using identifier + connector combination.J\x08\"ca_123\"\xbaH\x04r\x02\x18\x64H\x01R\x12\x63onnectedAccountId\x88\x01\x01\x12\xed\x01\n\tconnector\x18\x05 \x01(\tB\xc9\x01\x92\x41\xbd\x01\x32\xa6\x01Optional. The name of the connector/provider (e.g., \'Google Workspace\', \'Slack\', \'Notion\'). Use this in combination with identifier to identify the connected account.J\x12\"Google Workspace\"\xbaH\x05r\x03\x18\x90\x03H\x02R\tconnector\x88\x01\x01\x12\xee\x01\n\x0forganization_id\x18\x06 \x01(\tB\xbf\x01\x92\x41\xb4\x01\x32\xa6\x01Optional. The organization ID to scope the connected account lookup. Use this to narrow down the search when the same identifier exists across multiple organizations.J\t\"org_123\"\xbaH\x04r\x02\x18\x64H\x03R\x0eorganizationId\x88\x01\x01\x12\xcf\x01\n\x07user_id\x18\x07 \x01(\tB\xb0\x01\x92\x41\xa5\x01\x32\x96\x01Optional. The user ID to scope the connected account lookup. Use this to narrow down the search when the same identifier exists across multiple users.J\n\"user_123\"\xbaH\x04r\x02\x18\x64H\x04R\x06userId\x88\x01\x01\x42\r\n\x0b_identifierB\x17\n\x15_connected_account_idB\x0c\n\n_connectorB\x12\n\x10_organization_idB\n\n\x08_user_id\"\xa3\x02\n\x13\x45xecuteToolResponse\x12\xac\x01\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\x7f\x92\x41|23Free-flowing JSON parameters for the tool executionJE{\"to\": \"user@example.com\", \"subject\": \"Hello\", \"body\": \"Hello World\"}R\x04\x64\x61ta\x12]\n\x0c\x65xecution_id\x18\x02 \x01(\tB:\x92\x41\x37\x32(Unique identifier for the tool executionJ\x0b\"123456789\"R\x0b\x65xecutionId\"\xad\x02\n\x15SetToolDefaultRequest\x12\x61\n\x04name\x18\x01 \x01(\tBM\x92\x41/2\x19\x46ully qualified tool nameJ\x12\"gmail_send_email\"\xbaH\x18r\x13\x10\x01\x18\x64\x32\r^[a-z0-9_].*$\xc8\x01\x01R\x04name\x12W\n\x0eschema_version\x18\x02 \x01(\tB0\x92\x41!2\x1aSchema version of the toolJ\x03\"1\"\xbaH\tr\x04\x10\x01\x18\n\xc8\x01\x01R\rschemaVersion\x12X\n\x0ctool_version\x18\x03 \x01(\tB5\x92\x41&2\x1fTool version to mark as defaultJ\x03\"1\"\xbaH\tr\x04\x10\x01\x18\n\xc8\x01\x01R\x0btoolVersion\"j\n\x16SetToolDefaultResponse\x12P\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB#\x92\x41 2\x1eThe tool now marked as defaultR\x04tool\"^\n\x11UpdateToolRequest\x12I\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB\x1c\x92\x41\x13\x32\x11Updated tool data\xbaH\x03\xc8\x01\x01R\x04tool\"X\n\x12UpdateToolResponse\x12\x42\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB\x15\x92\x41\x12\x32\x10The updated toolR\x04tool\"0\n\x11\x44\x65leteToolRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06:\x04tol_R\x02id\"\x97\x03\n\x16ListScopedToolsRequest\x12z\n\nidentifier\x18\x01 \x01(\tBZ\x92\x41M23Identifier of the connected account to filter toolsJ\x16\"app_google_workspace\"\xbaH\x07r\x02\x18\x64\xc8\x01\x01R\nidentifier\x12r\n\x06\x66ilter\x18\x02 \x01(\x0b\x32#.scalekit.v1.tools.ScopedToolFilterB5\x92\x41,2*Filter parameters for listing scoped tools\xbaH\x03\xc8\x01\x01R\x06\x66ilter\x12\x1b\n\tpage_size\x18\x03 \x01(\rR\x08pageSize\x12p\n\npage_token\x18\x04 \x01(\tBQ\x92\x41N2.Token from a previous response for pagination.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\x95\x03\n\x17ListScopedToolsResponse\x12v\n\x0fnext_page_token\x18\x01 \x01(\tBN\x92\x41K2)Token for fetching the next page of toolsJ\x1e\"eyJwYWdlIjozLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12Q\n\ntotal_size\x18\x02 \x01(\rB2\x92\x41/2(Total number of tools matching the queryJ\x03\x31\x30\x34R\ttotalSize\x12z\n\x0fprev_page_token\x18\x03 \x01(\tBR\x92\x41O2-Token for fetching the previous page of toolsJ\x1e\"eyJwYWdlIjoxLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12\x33\n\x05tools\x18\x05 \x03(\x0b\x32\x1d.scalekit.v1.tools.ScopedToolR\x05tools\"z\n\x10ScopedToolFilter\x12\x1c\n\tproviders\x18\x01 \x03(\tR\tproviders\x12\x1d\n\ntool_names\x18\x02 \x03(\tR\ttoolNames\x12)\n\x10\x63onnection_names\x18\x03 \x03(\tR\x0f\x63onnectionNames\"\xb3\x02\n\x19ListAvailableToolsRequest\x12\x86\x01\n\nidentifier\x18\x01 \x01(\tBf\x92\x41Y2?Identifier of the connected account to list available tools forJ\x16\"app_google_workspace\"\xbaH\x07r\x02\x18\x64\xc8\x01\x01R\nidentifier\x12\x1b\n\tpage_size\x18\x02 \x01(\rR\x08pageSize\x12p\n\npage_token\x18\x03 \x01(\tBQ\x92\x41N2.Token from a previous response for pagination.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\xcd\x03\n\x1aListAvailableToolsResponse\x12v\n\x0fnext_page_token\x18\x01 \x01(\tBN\x92\x41K2)Token for fetching the next page of toolsJ\x1e\"eyJwYWdlIjozLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12[\n\ntotal_size\x18\x02 \x01(\rB<\x92\x41\x39\x32\x32Total number of available tools matching the queryJ\x03\x31\x30\x34R\ttotalSize\x12z\n\x0fprev_page_token\x18\x03 \x01(\tBR\x92\x41O2-Token for fetching the previous page of toolsJ\x1e\"eyJwYWdlIjoxLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12^\n\x05tools\x18\x04 \x03(\x0b\x32\x17.scalekit.v1.tools.ToolB/\x92\x41,2*List of tools available for the identifierR\x05tools2\xe8\x18\n\x0bToolService\x12\xf2\x01\n\nCreateTool\x12$.scalekit.v1.tools.CreateToolRequest\x1a%.scalekit.v1.tools.CreateToolResponse\"\x96\x01\x92\x41\x63\n\x05Tools\x12\x11\x43reate a new tool\x1aGRegister a new tool with its schema, metadata, and other configuration.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\"\r/api/v1/tools:\x04tool\x12\xfa\x01\n\tListTools\x12#.scalekit.v1.tools.ListToolsRequest\x1a$.scalekit.v1.tools.ListToolsResponse\"\xa1\x01\x92\x41t\n\x05Tools\x12\nList tools\x1a_Fetch tools by provider, identifier, and connector. If `summary=true`, returns only tool names.\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x0f\x12\r/api/v1/tools\x12\x9b\x01\n\x0fListScopedTools\x12).scalekit.v1.tools.ListScopedToolsRequest\x1a*.scalekit.v1.tools.ListScopedToolsResponse\"1\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/tools/scoped\x12\x84\x04\n\x12ListAvailableTools\x12,.scalekit.v1.tools.ListAvailableToolsRequest\x1a-.scalekit.v1.tools.ListAvailableToolsResponse\"\x90\x03\x92\x41\xd8\x02\n\x05Tools\x12\x31List all tools for a connected account identifier\x1aQLists all tools for a given Connected Account Identifier. Identifier is required.J*\n\x03\x32\x30\x30\x12#\n!Paginated list of available toolsJ:\n\x03\x34\x30\x30\x12\x33\n1Invalid request - missing or malformed identifierJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJ\x1d\n\x03\x34\x30\x34\x12\x16\n\x14Identifier not found\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\x12\x17/api/v1/tools/available\x12\xac\x02\n\x0eSetToolDefault\x12(.scalekit.v1.tools.SetToolDefaultRequest\x1a).scalekit.v1.tools.SetToolDefaultResponse\"\xc4\x01\x92\x41\x87\x01\n\x05Tools\x12#Marks a tool as the default version\x1aYSet a specific tool (by name, schema version, tool version, and provider) as the default.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\"\x19/api/v1/tools:set_default:\x01*\x12\xd8\x01\n\nUpdateTool\x12$.scalekit.v1.tools.UpdateToolRequest\x1a%.scalekit.v1.tools.UpdateToolResponse\"}\x92\x41J\n\x05Tools\x12\rUpdate a tool\x1a\x32Update an existing tool by provider and tool name.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\x1a\r/api/v1/tools:\x04tool\x12\xd9\x01\n\nDeleteTool\x12$.scalekit.v1.tools.DeleteToolRequest\x1a\x16.google.protobuf.Empty\"\x8c\x01\x92\x41Z\n\x05Tools\x12\rDelete a tool\x1a\x42\x44\x65lete a tool by name, schema version, tool version, and provider.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x14*\x12/api/v1/tools/{id}\x12\xc2\t\n\x0b\x45xecuteTool\x12%.scalekit.v1.tools.ExecuteToolRequest\x1a&.scalekit.v1.tools.ExecuteToolResponse\"\xe3\x08\x92\x41\xba\x08\n\x12\x43onnected Accounts\x12(Execute a tool using a connected account\x1a\xcf\x03\x45xecutes a tool action using authentication credentials from a connected account. Specify the tool by name and provide required parameters as JSON. The connected account can be identified by ID, or by combination of organization/user, connector, and identifier. Returns the execution result data and a unique execution ID for tracking. Use this endpoint to perform actions like sending emails, creating calendar events, or managing resources in external services.Jq\n\x03\x32\x30\x30\x12j\n None: ... class Filter(_message.Message): - __slots__ = ("summary", "provider", "identifier", "tool_name", "query") + __slots__ = ("summary", "provider", "identifier", "tool_name", "query", "connector", "organization_id", "user_id", "connected_account_id") SUMMARY_FIELD_NUMBER: _ClassVar[int] PROVIDER_FIELD_NUMBER: _ClassVar[int] IDENTIFIER_FIELD_NUMBER: _ClassVar[int] TOOL_NAME_FIELD_NUMBER: _ClassVar[int] QUERY_FIELD_NUMBER: _ClassVar[int] + CONNECTOR_FIELD_NUMBER: _ClassVar[int] + ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + CONNECTED_ACCOUNT_ID_FIELD_NUMBER: _ClassVar[int] summary: _wrappers_pb2.BoolValue provider: str identifier: str tool_name: _containers.RepeatedScalarFieldContainer[str] query: str - def __init__(self, summary: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., provider: _Optional[str] = ..., identifier: _Optional[str] = ..., tool_name: _Optional[_Iterable[str]] = ..., query: _Optional[str] = ...) -> None: ... + connector: str + organization_id: str + user_id: str + connected_account_id: str + def __init__(self, summary: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., provider: _Optional[str] = ..., identifier: _Optional[str] = ..., tool_name: _Optional[_Iterable[str]] = ..., query: _Optional[str] = ..., connector: _Optional[str] = ..., organization_id: _Optional[str] = ..., user_id: _Optional[str] = ..., connected_account_id: _Optional[str] = ...) -> None: ... class ListToolsResponse(_message.Message): __slots__ = ("next_page_token", "total_size", "prev_page_token", "tool_names", "tools") @@ -186,3 +194,25 @@ class ScopedToolFilter(_message.Message): tool_names: _containers.RepeatedScalarFieldContainer[str] connection_names: _containers.RepeatedScalarFieldContainer[str] def __init__(self, providers: _Optional[_Iterable[str]] = ..., tool_names: _Optional[_Iterable[str]] = ..., connection_names: _Optional[_Iterable[str]] = ...) -> None: ... + +class ListAvailableToolsRequest(_message.Message): + __slots__ = ("identifier", "page_size", "page_token") + IDENTIFIER_FIELD_NUMBER: _ClassVar[int] + PAGE_SIZE_FIELD_NUMBER: _ClassVar[int] + PAGE_TOKEN_FIELD_NUMBER: _ClassVar[int] + identifier: str + page_size: int + page_token: str + def __init__(self, identifier: _Optional[str] = ..., page_size: _Optional[int] = ..., page_token: _Optional[str] = ...) -> None: ... + +class ListAvailableToolsResponse(_message.Message): + __slots__ = ("next_page_token", "total_size", "prev_page_token", "tools") + NEXT_PAGE_TOKEN_FIELD_NUMBER: _ClassVar[int] + TOTAL_SIZE_FIELD_NUMBER: _ClassVar[int] + PREV_PAGE_TOKEN_FIELD_NUMBER: _ClassVar[int] + TOOLS_FIELD_NUMBER: _ClassVar[int] + next_page_token: str + total_size: int + prev_page_token: str + tools: _containers.RepeatedCompositeFieldContainer[Tool] + def __init__(self, next_page_token: _Optional[str] = ..., total_size: _Optional[int] = ..., prev_page_token: _Optional[str] = ..., tools: _Optional[_Iterable[_Union[Tool, _Mapping]]] = ...) -> None: ... diff --git a/scalekit/v1/tools/tools_pb2_grpc.py b/scalekit/v1/tools/tools_pb2_grpc.py index aefad8e..41ded94 100644 --- a/scalekit/v1/tools/tools_pb2_grpc.py +++ b/scalekit/v1/tools/tools_pb2_grpc.py @@ -30,6 +30,11 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.ListScopedToolsRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.ListScopedToolsResponse.FromString, ) + self.ListAvailableTools = channel.unary_unary( + '/scalekit.v1.tools.ToolService/ListAvailableTools', + request_serializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.ListAvailableToolsRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.ListAvailableToolsResponse.FromString, + ) self.SetToolDefault = channel.unary_unary( '/scalekit.v1.tools.ToolService/SetToolDefault', request_serializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.SetToolDefaultRequest.SerializeToString, @@ -73,6 +78,12 @@ def ListScopedTools(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def ListAvailableTools(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def SetToolDefault(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -116,6 +127,11 @@ def add_ToolServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.ListScopedToolsRequest.FromString, response_serializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.ListScopedToolsResponse.SerializeToString, ), + 'ListAvailableTools': grpc.unary_unary_rpc_method_handler( + servicer.ListAvailableTools, + request_deserializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.ListAvailableToolsRequest.FromString, + response_serializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.ListAvailableToolsResponse.SerializeToString, + ), 'SetToolDefault': grpc.unary_unary_rpc_method_handler( servicer.SetToolDefault, request_deserializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.SetToolDefaultRequest.FromString, @@ -197,6 +213,23 @@ def ListScopedTools(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod + def ListAvailableTools(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.tools.ToolService/ListAvailableTools', + scalekit_dot_v1_dot_tools_dot_tools__pb2.ListAvailableToolsRequest.SerializeToString, + scalekit_dot_v1_dot_tools_dot_tools__pb2.ListAvailableToolsResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod def SetToolDefault(request, target, diff --git a/scalekit/v1/users/users_pb2.py b/scalekit/v1/users/users_pb2.py index c69f3ee..4bc8441 100644 --- a/scalekit/v1/users/users_pb2.py +++ b/scalekit/v1/users/users_pb2.py @@ -24,7 +24,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dscalekit/v1/users/users.proto\x12\x11scalekit.v1.users\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a\'scalekit/v1/errdetails/errdetails.proto\x1a!scalekit/v1/options/options.proto\"\xf1\r\n\x04User\x12u\n\x02id\x18\x01 \x01(\tBe\x92\x41\x62\x32HUnique system-generated identifier for the user. Immutable once created.J\x16\"usr_1234abcd5678efgh\"R\x02id\x12\xaf\x01\n\x0e\x65nvironment_id\x18\x02 \x01(\tB\x87\x01\x92\x41r2XIdentifier of the environment where the user was created. System-assigned and read-only.J\x16\"env_9876zyxw5432vuts\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\renvironmentId\x12\x9c\x01\n\x0b\x63reate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB_\x92\x41Y2WTimestamp when the user account was initially created. Automatically set by the server.\xe0\x41\x03R\ncreateTime\x12\xa1\x01\n\x0bupdate_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampBd\x92\x41^2\\Timestamp of the last modification to the user account. Automatically updated by the server.\xe0\x41\x03R\nupdateTime\x12\x98\x01\n\x05\x65mail\x18\x05 \x01(\tB\x81\x01\x92\x41w2aPrimary email address for the user. Must be unique across the environment and valid per RFC 5322.J\x12\"user@example.com\"\xbaH\x04r\x02`\x01R\x05\x65mail\x12\xa2\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tB|\x92\x41y2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x12\"ext_12345a67b89c\"H\x00R\nexternalId\x88\x01\x01\x12\xa9\x01\n\x0bmemberships\x18\x07 \x03(\x0b\x32+.scalekit.v1.commons.OrganizationMembershipBZ\x92\x41W2UList of organization memberships. Automatically populated based on group assignments.R\x0bmemberships\x12\x9c\x01\n\x0cuser_profile\x18\x08 \x01(\x0b\x32 .scalekit.v1.commons.UserProfileBW\x92\x41T2RUser\'s personal information including name, address, and other profile attributes.R\x0buserProfile\x12\x80\x02\n\x08metadata\x18\t \x03(\x0b\x32%.scalekit.v1.users.User.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xa1\x01\n\x0flast_login_time\x18\n \x01(\x0b\x32\x1a.google.protobuf.TimestampB]\x92\x41W2UTimestamp of the user\'s most recent successful authentication. Updated automatically.\xe0\x41\x03R\rlastLoginTime\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_id\"\xa6\x02\n\x1e\x43reateUserAndMembershipRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x39\n\x04user\x18\x02 \x01(\x0b\x32\x1d.scalekit.v1.users.CreateUserB\x06\xbaH\x03\xc8\x01\x01R\x04user\x12\x85\x01\n\x15send_invitation_email\x18\x03 \x01(\x08\x42L\x92\x41I2AIf true, sends an activation email to the user. Defaults to true.J\x04trueH\x00R\x13sendInvitationEmail\x88\x01\x01\x42\x18\n\x16_send_invitation_email\"N\n\x1f\x43reateUserAndMembershipResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\xbc\x05\n\nUpdateUser\x12\xa2\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tB|\x92\x41y2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x12\"ext_12345a67b89c\"H\x00R\nexternalId\x88\x01\x01\x12\xa0\x01\n\x0cuser_profile\x18\x08 \x01(\x0b\x32$.scalekit.v1.users.UpdateUserProfileBW\x92\x41T2RUser\'s personal information including name, address, and other profile attributes.R\x0buserProfile\x12\x86\x02\n\x08metadata\x18\t \x03(\x0b\x32+.scalekit.v1.users.UpdateUser.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idJ\x04\x08\x01\x10\x06J\x04\x08\x07\x10\x08J\x04\x08\n\x10\x0b\"\xab\x04\n\x11UpdateUserRequest\x12\x8c\x01\n\x02id\x18\x01 \x01(\tBz\x92\x41h2NSystem-generated user ID. Must start with \'usr_\' and be 19-25 characters long.J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12\x9a\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tBw\x92\x41t2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\r\"ext_7890xyz\"H\x00R\nexternalId\x12\xdb\x01\n\x04user\x18\x03 \x01(\x0b\x32\x1d.scalekit.v1.users.UpdateUserB\xa7\x01\x92\x41\x9d\x01\x32qUser fields to update. Only specified fields will be modified. Required fields must be provided if being changed.J({\"firstName\": \"John\", \"lastName\": \"Doe\"}\xbaH\x03\xc8\x01\x01R\x04userB\x0c\n\nidentities\"A\n\x12UpdateUserResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\x93\x02\n\x0eGetUserRequest\x12V\n\x02id\x18\x01 \x01(\tBD\x92\x41\x32\x32\x18System-generated user IDJ\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04usr_H\x00R\x02id\x12\x9a\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tBw\x92\x41t2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\r\"ext_7890xyz\"H\x00R\nexternalIdB\x0c\n\nidentities\">\n\x0fGetUserResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\xd9\x01\n\x16GetCurrentUserResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\x12\x91\x01\n\x12\x63urrent_session_id\x18\x02 \x01(\tBc\x92\x41`2EThe ID of the current session associated with the authenticated user.J\x17\"sess_1234abcd5678efgh\"R\x10\x63urrentSessionId\"\x17\n\x15GetCurrentUserRequest\"\xf4\x04\n\x1cListOrganizationUsersRequest\x12\xc9\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x8c\x01\x32rUnique identifier of the organization for which to list users. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xa9\x01\n\tpage_size\x18\x02 \x01(\rB\x8b\x01\x92\x41\x7f\x32yMaximum number of users to return in a single response. Valid range: 1-100. Server may return fewer users than specified.J\x02\x35\x30\xbaH\x06*\x04\x18\x64(\x00R\x08pageSize\x12\xdb\x01\n\npage_token\x18\x03 \x01(\tB\xbb\x01\x92\x41\xb7\x01\x32\x80\x01Pagination token from a previous ListUserResponse. Used to retrieve the next page of results. Leave empty for the first request.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\tpageToken\"\xa4\x05\n\x1dListOrganizationUsersResponse\x12\xba\x01\n\x0fnext_page_token\x18\x01 \x01(\tB\x91\x01\x92\x41\x8d\x01\x32WOpaque token for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x02 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12\x92\x01\n\x05users\x18\x03 \x03(\x0b\x32\x17.scalekit.v1.users.UserBc\x92\x41`2^List of user objects for the current page. May contain fewer entries than requested page_size.R\x05users\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SOpaque token for retrieving the previous page of results. Empty for the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\xfd\x04\n\x17\x44\x65leteMembershipRequest\x12\xa7\x01\n\x0forganization_id\x18\x01 \x01(\tB~\x92\x41l2RUnique organization identifier. Must start with \'org_\' and be 1-32 characters longJ\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x81\x01\n\x02id\x18\x02 \x01(\tBo\x92\x41]2CSystem-generated user ID. Must start with \'usr_\' (19-25 characters)J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12\x89\x01\n\x0b\x65xternal_id\x18\x03 \x01(\tBf\x92\x41\x63\x32RExternal system identifier from connected directories. Must match existing recordsJ\r\"ext_7890xyz\"H\x00R\nexternalId\x12\x8d\x01\n\x07\x63\x61scade\x18\x05 \x01(\x08\x42n\x92\x41\\2SIf true, if user has no memberships left the user is also deleted. defaults to trueJ\x05\x66\x61lse\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x07\x63\x61scade\x88\x01\x01\x42\x0c\n\nidentitiesB\n\n\x08_cascade\"\xaa\x06\n\x17\x43reateMembershipRequest\x12\xb7\x01\n\x0forganization_id\x18\x01 \x01(\tB\x8d\x01\x92\x41{2aUnique identifier of the target organization. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x8f\x01\n\nmembership\x18\x02 \x01(\x0b\x32#.scalekit.v1.users.CreateMembershipBJ\x92\x41\x41\x32?Membership details to create. Required fields must be provided.\xbaH\x03\xc8\x01\x01R\nmembership\x12\x81\x01\n\x02id\x18\x03 \x01(\tBo\x92\x41]2CSystem-generated user ID. Must start with \'usr_\' (19-25 characters)J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12\x8e\x01\n\x0b\x65xternal_id\x18\x04 \x01(\tBk\x92\x41h2WExternal system identifier from connected directories. Must be unique across the systemJ\r\"ext_7890xyz\"H\x00R\nexternalId\x12\x85\x01\n\x15send_invitation_email\x18\x05 \x01(\x08\x42L\x92\x41I2AIf true, sends an activation email to the user. Defaults to true.J\x04trueH\x01R\x13sendInvitationEmail\x88\x01\x01\x42\x0c\n\nidentitiesB\x18\n\x16_send_invitation_email\"G\n\x18\x43reateMembershipResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\x9a\x02\n\x10ListUsersRequest\x12t\n\tpage_size\x18\x01 \x01(\rBW\x92\x41T2NMaximum number of organizations to return per page. Must be between 10 and 100J\x02\x33\x30R\x08pageSize\x12\x8f\x01\n\npage_token\x18\x02 \x01(\tBp\x92\x41m2[Pagination token from the previous response. Use to retrieve the next page of organizationsJ\x0e\"\"R\tpageToken\"\xc0\x04\n\x11ListUsersResponse\x12\x42\n\x05users\x18\x01 \x03(\x0b\x32\x17.scalekit.v1.users.UserB\x13\x92\x41\x10\x32\x0eList of users.R\x05users\x12\xb3\x01\n\x0fnext_page_token\x18\x02 \x01(\tB\x8a\x01\x92\x41\x86\x01\x32PToken for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x03 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SToken for retrieving the previous page of results. Empty if this is the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\xe3\x03\n\x12SearchUsersRequest\x12\xaa\x01\n\x05query\x18\x01 \x01(\tB\x93\x01\x92\x41\x83\x01\x32oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\x10john@example.com\xbaH\tr\x04\x10\x03\x18\x64\xc8\x01\x01R\x05query\x12x\n\tpage_size\x18\x02 \x01(\rB[\x92\x41Q2KMaximum number of users to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x03 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\xcb\x04\n\x13SearchUsersResponse\x12\xb3\x01\n\x0fnext_page_token\x18\x01 \x01(\tB\x8a\x01\x92\x41\x86\x01\x32PToken for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x02 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12K\n\x05users\x18\x03 \x03(\x0b\x32\x17.scalekit.v1.users.UserB\x1c\x92\x41\x19\x32\x17List of matching users.R\x05users\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SToken for retrieving the previous page of results. Empty if this is the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\xb1\x02\n\x11\x44\x65leteUserRequest\x12\x81\x01\n\x02id\x18\x01 \x01(\tBo\x92\x41]2CSystem-generated user ID. Must start with \'usr_\' (19-25 characters)J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12\x89\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tBf\x92\x41\x63\x32RExternal system identifier from connected directories. Must match existing recordsJ\r\"ext_7890xyz\"H\x00R\nexternalIdB\x0c\n\nidentities\"\x9a\x05\n\x17UpdateMembershipRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\xa1\x01\x92\x41\x8e\x01\x32tUnique identifier of the organization containing the membership. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x8c\x01\n\x02id\x18\x02 \x01(\tBz\x92\x41h2NSystem-generated user ID. Must start with \'usr_\' and be 19-25 characters long.J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12j\n\x0b\x65xternal_id\x18\x03 \x01(\tBG\x92\x41\x44\x32\x33Your application\'s unique identifier for this user.J\r\"ext_7890xyz\"H\x00R\nexternalId\x12\xa7\x01\n\nmembership\x18\x05 \x01(\x0b\x32#.scalekit.v1.users.UpdateMembershipBb\x92\x41Y2DMembership fields to update. Only specified fields will be modified.J\x11{\"role\": \"admin\"}\xbaH\x03\xc8\x01\x01R\nmembershipB\x0c\n\nidentities\"\xfb\x03\n\x10UpdateMembership\x12}\n\x05roles\x18\x04 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleBL\x92\x41I22Role to assign to the user within the organizationJ\x13[{\"name\": \"admin\"}]R\x05roles\x12\x8c\x02\n\x08metadata\x18\x07 \x03(\x0b\x32\x31.scalekit.v1.users.UpdateMembership.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01J\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07\"\xb4\x05\n\x10\x43reateMembership\x12}\n\x05roles\x18\x04 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleBL\x92\x41I22Role to assign to the user within the organizationJ\x13[{\"name\": \"admin\"}]R\x05roles\x12\x8c\x02\n\x08metadata\x18\x07 \x03(\x0b\x32\x31.scalekit.v1.users.CreateMembership.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xa4\x01\n\rinviter_email\x18\x08 \x01(\tBz\x92\x41k2QEmail address of the user who invited this member. Must be a valid email address.J\x16\"john.doe@example.com\"\xbaH\tr\x07\x10\x05\x18\xfe\x01`\x01H\x00R\x0cinviterEmail\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x10\n\x0e_inviter_emailJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07\"G\n\x18UpdateMembershipResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\xb7\x05\n\x1eSearchOrganizationUsersRequest\x12\xc5\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9b\x01\x92\x41\x85\x01\x32kUnique identifier of the organization to search within. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\x12\xaa\x01\n\x05query\x18\x02 \x01(\tB\x93\x01\x92\x41\x83\x01\x32oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\x10john@example.com\xbaH\tr\x04\x10\x03\x18\x64\xc8\x01\x01R\x05query\x12x\n\tpage_size\x18\x03 \x01(\rB[\x92\x41Q2KMaximum number of users to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x04 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\xd7\x04\n\x1fSearchOrganizationUsersResponse\x12\xb3\x01\n\x0fnext_page_token\x18\x01 \x01(\tB\x8a\x01\x92\x41\x86\x01\x32PToken for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x02 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12K\n\x05users\x18\x03 \x03(\x0b\x32\x17.scalekit.v1.users.UserB\x1c\x92\x41\x19\x32\x17List of matching users.R\x05users\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SToken for retrieving the previous page of results. Empty if this is the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\x85\x08\n\nCreateUser\x12\x98\x01\n\x05\x65mail\x18\x05 \x01(\tB\x81\x01\x92\x41w2aPrimary email address for the user. Must be unique across the environment and valid per RFC 5322.J\x12\"user@example.com\"\xbaH\x04r\x02`\x01R\x05\x65mail\x12\xa2\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tB|\x92\x41y2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x12\"ext_12345a67b89c\"H\x00R\nexternalId\x88\x01\x01\x12\x9f\x01\n\nmembership\x18\x07 \x01(\x0b\x32#.scalekit.v1.users.CreateMembershipBZ\x92\x41W2UList of organization memberships. Automatically populated based on group assignments.R\nmembership\x12\xa0\x01\n\x0cuser_profile\x18\x08 \x01(\x0b\x32$.scalekit.v1.users.CreateUserProfileBW\x92\x41T2RUser\'s personal information including name, address, and other profile attributes.R\x0buserProfile\x12\x86\x02\n\x08metadata\x18\t \x03(\x0b\x32+.scalekit.v1.users.CreateUser.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\n\x10\x0b\"\xbe\x10\n\x11\x43reateUserProfile\x12^\n\ngiven_name\x18\x02 \x01(\tB?\x92\x41\x34\x32*User\'s given name. Maximum 255 characters.J\x06\"John\"\xbaH\x05r\x03\x18\xff\x01R\tgivenName\x12`\n\x0b\x66\x61mily_name\x18\x03 \x01(\tB?\x92\x41\x34\x32+User\'s family name. Maximum 255 characters.J\x05\"Doe\"\xbaH\x05r\x03\x18\xff\x01R\nfamilyName\x12v\n\x04name\x18\x04 \x01(\tBb\x92\x41_2IFull name in display format. Typically combines first_name and last_name.J\x12\"John Michael Doe\"R\x04name\x12y\n\x06locale\x18\x05 \x01(\tBa\x92\x41^2SUser\'s localization preference in BCP-47 format. Defaults to organization settings.J\x07\"en-US\"R\x06locale\x12\x8a\x01\n\x0cphone_number\x18\x07 \x01(\tBg\x92\x41\x64\x32RPhone number in E.164 international format. Required for SMS-based authentication.J\x0e\"+14155552671\"R\x0bphoneNumber\x12\x8b\x02\n\x08metadata\x18\x08 \x03(\x0b\x32\x32.scalekit.v1.users.CreateUserProfile.MetadataEntryB\xba\x01\x92\x41\x9d\x01\x32^System-managed key-value pairs for internal tracking. Keys (3-25 chars), values (1-256 chars).J;{\"account_status\": \"active\", \"signup_source\": \"mobile_app\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xa2\x02\n\x11\x63ustom_attributes\x18\t \x03(\x0b\x32:.scalekit.v1.users.CreateUserProfile.CustomAttributesEntryB\xb8\x01\x92\x41\x9b\x01\x32ZCustom attributes for extended user profile data. Keys (3-25 chars), values (1-256 chars).J={\"department\": \"engineering\", \"security_clearance\": \"level2\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x10\x63ustomAttributes\x12\x7f\n\x12preferred_username\x18\n \x01(\tBP\x92\x41\x45\x32/User\'s preferred username for display purposes.J\x12\"John Michael Doe\"\xbaH\x05r\x03\x18\x80\x04R\x11preferredUsername\x12z\n\x07picture\x18\x0b \x01(\tB[\x92\x41P2,URL to the user\'s profile picture or avatar.J \"https://example.com/avatar.jpg\"\xbaH\x05r\x03\x18\x80\x10H\x00R\x07picture\x88\x01\x01\x12\x41\n\x06gender\x18\x0c \x01(\tB$\x92\x41!2\x17User\'s gender identity.J\x06\"male\"H\x01R\x06gender\x88\x01\x01\x12\xa1\x01\n\x06groups\x18\r \x03(\tB\x88\x01\x92\x41p2QList of group names the user belongs to. Each group name must be 1-250 charactersJ\x1b[\"engineering\", \"managers\"]\xbaH\x12\x92\x01\x0f\x08\x00\x10\x32\x18\x01\"\x07r\x05\x10\x01\x18\xfa\x01R\x06groups\x12\x94\x01\n\nfirst_name\x18\x15 \x01(\tBu\x18\x01\x92\x41Y2O[DEPRECATED] Use given_name instead. User\'s given name. Maximum 200 characters.J\x06\"John\"\xbaH\x05r\x03\x18\xc8\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\tfirstName\x12\x93\x01\n\tlast_name\x18\x16 \x01(\tBv\x18\x01\x92\x41Z2Q[DEPRECATED] Use family_name instead. User\'s family name. Maximum 200 characters.J\x05\"Doe\"\xbaH\x05r\x03\x18\xc8\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\x08lastName\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a\x43\n\x15\x43ustomAttributesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\n\n\x08_pictureB\t\n\x07_genderJ\x04\x08\x01\x10\x02J\x04\x08\x06\x10\x07\"\xe5(\n\x11UpdateUserProfile\x12\xe5\x01\n\ngiven_name\x18\x02 \x01(\tB\xc0\x01\x92\x41\xb4\x01\x32\xa9\x01Updates the user\'s given name (first name). Use this field to modify how the user\'s first name appears in the system and user interfaces. Maximum 255 characters allowed.J\x06\"John\"\xbaH\x05r\x03\x18\xff\x01H\x00R\tgivenName\x88\x01\x01\x12\xe4\x01\n\x0b\x66\x61mily_name\x18\x03 \x01(\tB\xbd\x01\x92\x41\xb1\x01\x32\xa7\x01Updates the user\'s family name (last name or surname). Use this field to modify how the user\'s last name appears throughout the system. Maximum 255 characters allowed.J\x05\"Doe\"\xbaH\x05r\x03\x18\xff\x01H\x01R\nfamilyName\x88\x01\x01\x12\xae\x02\n\x04name\x18\x04 \x01(\tB\x94\x02\x92\x41\x90\x02\x32\x81\x02Updates the user\'s complete display name. Use this field when you want to set the full name as a single string rather than using separate given and family names. This name appears in user interfaces, reports, and anywhere a formatted display name is needed.J\n\"John Doe\"H\x02R\x04name\x88\x01\x01\x12\x97\x03\n\x06locale\x18\x05 \x01(\tB\xf9\x02\x92\x41\xf5\x02\x32\xe9\x02Updates the user\'s preferred language and region settings using BCP-47 format codes. Use this field to customize the user\'s experience with localized content, date formats, number formatting, and UI language. When not specified, the user inherits the organization\'s default locale settings. Common values include `en-US`, `en-GB`, `fr-FR`, `de-DE`, and `es-ES`.J\x07\"en-US\"H\x03R\x06locale\x88\x01\x01\x12\xb1\x03\n\x0cphone_number\x18\x07 \x01(\tB\x88\x03\x92\x41\x84\x03\x32\xf1\x02Updates the user\'s phone number in E.164 international format. Use this field to enable SMS-based authentication methods, two-factor authentication, or phone-based account recovery. The phone number must include the country code and be formatted according to E.164 standards (e.g., `+1` for US numbers). This field is required when enabling SMS authentication features.J\x0e\"+14155552671\"H\x04R\x0bphoneNumber\x88\x01\x01\x12\xd1\x04\n\x08metadata\x18\x08 \x03(\x0b\x32\x32.scalekit.v1.users.UpdateUserProfile.MetadataEntryB\x80\x04\x92\x41\xe3\x03\x32\xa3\x03Updates system-managed key-value pairs for internal tracking and operational data. Use this field to store system-generated metadata like account status, signup source, last activity tracking, or integration-specific identifiers. These fields are typically managed by automated processes rather than direct user input. Keys must be 3-25 characters, values must be 1-256 characters, with a maximum of 20 key-value pairs.J;{\"account_status\": \"active\", \"signup_source\": \"mobile_app\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xc7\x05\n\x11\x63ustom_attributes\x18\t \x03(\x0b\x32:.scalekit.v1.users.UpdateUserProfile.CustomAttributesEntryB\xdd\x04\x92\x41\xc0\x04\x32\xfe\x03Updates custom attributes for extended user profile data and application-specific information. Use this field to store business-specific user data like department, job title, security clearances, project assignments, or any other organizational attributes your application requires. Unlike system metadata, these attributes are typically managed by administrators or applications and are visible to end users. Keys must be 3-25 characters, values must be 1-256 characters, with a maximum of 20 key-value pairs.J={\"department\": \"engineering\", \"security_clearance\": \"level2\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x10\x63ustomAttributes\x12\x8a\x01\n\nfirst_name\x18\x15 \x01(\tBf\x18\x01\x92\x41Y2O[DEPRECATED] Use given_name instead. User\'s given name. Maximum 200 characters.J\x06\"John\"\xbaH\x05r\x03\x18\xc8\x01H\x05R\tfirstName\x88\x01\x01\x12\x89\x01\n\tlast_name\x18\x16 \x01(\tBg\x18\x01\x92\x41Z2Q[DEPRECATED] Use family_name instead. User\'s family name. Maximum 200 characters.J\x05\"Doe\"\xbaH\x05r\x03\x18\xc8\x01H\x06R\x08lastName\x88\x01\x01\x12\x97\x03\n\x12preferred_username\x18\n \x01(\tB\xe2\x02\x92\x41\xd6\x02\x32\xbf\x02Updates the user\'s preferred username for display and identification purposes. Use this field to set a custom username that the user prefers to be known by, which may differ from their email or formal name. This username appears in user interfaces, mentions, and informal communications. Maximum 512 characters allowed.J\x12\"John Michael Doe\"\xbaH\x05r\x03\x18\x80\x04H\x07R\x11preferredUsername\x88\x01\x01\x12\xb2\x03\n\x07picture\x18\x0b \x01(\tB\x92\x03\x92\x41\x86\x03\x32\xe1\x02Updates the URL to the user\'s profile picture or avatar image. Use this field to set or change the user\'s profile photo that appears in user interfaces, directory listings, and collaborative features. The URL should point to a publicly accessible image file. Supported formats typically include JPEG, PNG, and GIF. Maximum URL length is 2048 characters.J \"https://example.com/avatar.jpg\"\xbaH\x05r\x03\x18\x80\x10H\x08R\x07picture\x88\x01\x01\x12\xfe\x02\n\x06gender\x18\x0c \x01(\tB\xe0\x02\x92\x41\xdc\x02\x32\xd1\x02Updates the user\'s gender identity information. Use this field to store the user\'s gender identity for personalization, compliance, or reporting purposes. This field supports any string value to accommodate diverse gender identities and should be handled with appropriate privacy considerations according to your organization\'s policies.J\x06\"male\"H\tR\x06gender\x88\x01\x01\x12\xdd\x03\n\x06groups\x18\r \x03(\tB\xc4\x03\x92\x41\xab\x03\x32\x8b\x03Updates the list of group names the user belongs to within the organization. Use this field to manage the user\'s group memberships for role-based access control, team assignments, or organizational structure. Groups are typically used for permission management and collaborative access. Each group name must be unique within the list, 1-250 characters long, with a maximum of 50 groups per user.J\x1b[\"engineering\", \"managers\"]\xbaH\x12\x92\x01\x0f\x08\x00\x10\x32\x18\x01\"\x07r\x05\x10\x01\x18\xfa\x01R\x06groups\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a\x43\n\x15\x43ustomAttributesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\r\n\x0b_given_nameB\x0e\n\x0c_family_nameB\x07\n\x05_nameB\t\n\x07_localeB\x0f\n\r_phone_numberB\r\n\x0b_first_nameB\x0c\n\n_last_nameB\x15\n\x13_preferred_usernameB\n\n\x08_pictureB\t\n\x07_genderJ\x04\x08\x01\x10\x02J\x04\x08\x06\x10\x07\"\xf9\x07\n\x06Invite\x12l\n\x0forganization_id\x18\x01 \x01(\tBC\x92\x41@2-The organization to which the invite belongs.J\x0f\"org_987654321\"R\x0eorganizationId\x12\x7f\n\x07user_id\x18\x02 \x01(\tBf\x92\x41\x63\x32SUser ID to whom the invite is sent. May be empty if the user has not signed up yet.J\x0c\"usr_123456\"R\x06userId\x12\x7f\n\rinviter_email\x18\x03 \x01(\tBU\x92\x41R2;Identifier of the user or system that initiated the invite.J\x13\"admin@example.com\"H\x00R\x0cinviterEmail\x88\x01\x01\x12x\n\x06status\x18\x04 \x01(\tB`\x92\x41]2ICurrent status of the invite (e.g., pending, accepted, expired, revoked).J\x10\"pending_invite\"R\x06status\x12\x89\x01\n\ncreated_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampBN\x92\x41K21Timestamp when the invite was originally created.J\x16\"2025-07-10T08:00:00Z\"R\tcreatedAt\x12}\n\nexpires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampBB\x92\x41?2%The time at which the invite expires.J\x16\"2025-12-31T23:59:59Z\"R\texpiresAt\x12\x8f\x01\n\tresent_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampBV\x92\x41S29Timestamp when the invite was last resent, if applicable.J\x16\"2025-07-15T09:30:00Z\"R\x08resentAt\x12V\n\x0cresent_count\x18\x08 \x01(\x05\x42\x33\x92\x41\x30\x32+Number of times the invite has been resent.J\x01\x32R\x0bresentCountB\x10\n\x0e_inviter_email\"\xa3\x03\n\x13ResendInviteRequest\x12\xd3\x01\n\x0forganization_id\x18\x01 \x01(\tB\xa9\x01\x92\x41\x96\x01\x32|Unique identifier of the organization containing the pending invitation. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xb5\x01\n\x02id\x18\x02 \x01(\tB\xa4\x01\x92\x41\x91\x01\x32wSystem-generated user ID of the user who has a pending invitation. Must start with \'usr_\' and be 19-25 characters long.J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_R\x02id\"\xe1\x02\n\x14ResendInviteResponse\x12\xc8\x02\n\x06invite\x18\x01 \x01(\x0b\x32\x19.scalekit.v1.users.InviteB\x94\x02\x92\x41\x90\x02\x32\x81\x01Updated invitation object containing the resent invitation details, including new expiration time and incremented resend counter.J\x89\x01{\"organization_id\": \"org_123\", \"user_id\": \"usr_456\", \"status\": \"pending_invite\", \"expires_at\": \"2025-12-31T23:59:59Z\", \"resent_count\": 2}R\x06invite\"\xf0\x01\n\x14ListUserRolesRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\"q\n\x15ListUserRolesResponse\x12X\n\x05roles\x18\x01 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleB\'\x92\x41$2\"List of roles assigned to the userR\x05roles\"\xde\x02\n\x16\x41ssignUserRolesRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\x12j\n\x05roles\x18\x03 \x03(\x0b\x32$.scalekit.v1.users.AssignRoleRequestB.\x92\x41%2#List of roles to assign to the user\xbaH\x03\xc8\x01\x01R\x05roles\"\xb2\x01\n\x11\x41ssignRoleRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x18\x01\x92\x41\x39\x32\x1eUnique identifier for the roleJ\x17\"role_1234abcd5678efgh\"R\x02id\x12M\n\trole_name\x18\x02 \x01(\tB0\x92\x41$2\x18Unique name for the roleJ\x08\"viewer\"\xbaH\x06r\x04\x10\x00\x18\x64R\x08roleName\"\x81\x01\n\x17\x41ssignUserRolesResponse\x12\x66\n\x05roles\x18\x01 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleB5\x92\x41\x32\x32\x30List of all roles currently assigned to the userR\x05roles\"\xd6\x02\n\x15RemoveUserRoleRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\x12\x63\n\trole_name\x18\x03 \x01(\tBF\x92\x41\x43\x32(Unique identifier for the role to removeJ\x17\"role_1234abcd5678efgh\"R\x08roleName\"\xf6\x01\n\x1aListUserPermissionsRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\"\x97\x03\n\nPermission\x12U\n\x02id\x18\x01 \x01(\tBE\x92\x41?2$Unique identifier for the permissionJ\x17\"perm_1234abcd5678efgh\"\xe0\x41\x03R\x02id\x12R\n\x04name\x18\x02 \x01(\tB>\x92\x41;2)Unique name identifier for the permissionJ\x0e\"users:create\"R\x04name\x12u\n\x0b\x64\x65scription\x18\x03 \x01(\tBS\x92\x41P2)Description of what the permission allowsJ#\"Allows creating new user accounts\"R\x0b\x64\x65scription\x12g\n\x04tags\x18\x04 \x03(\tBS\x92\x41\x41\x32!Tags for categorizing permissionsJ\x1c[\"user-management\", \"admin\"]\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\x04tags\";\n\x16GetSupportHashResponse\x12!\n\x0csupport_hash\x18\x01 \x01(\tR\x0bsupportHash\"\x8f\x01\n\x1bListUserPermissionsResponse\x12p\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x1d.scalekit.v1.users.PermissionB/\x92\x41,2*List of permissions the user has access toR\x0bpermissions2\x97]\n\x0bUserService\x12\xb8\x03\n\x07GetUser\x12!.scalekit.v1.users.GetUserRequest\x1a\".scalekit.v1.users.GetUserResponse\"\xe5\x02\x92\x41\xc1\x02\n\x05Users\x12\x08Get user\x1a\x8e\x01Retrieves all details for a user by system-generated user ID or external ID. The response includes organization memberships and user metadata.J\x9c\x01\n\x03\x32\x30\x30\x12\x94\x01\njUser details retrieved successfully. Returns full user object with system-generated fields and timestamps.\x12&\n$\x1a\".scalekit.v1.users.GetUserResponse\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x14\x12\x12/api/v1/users/{id}\x12\xba\x03\n\x0eGetCurrentUser\x12(.scalekit.v1.users.GetCurrentUserRequest\x1a).scalekit.v1.users.GetCurrentUserResponse\"\xd2\x02\x92\x41\x9f\x02\n\x05Users\x12\x16Get authenticated user\x1a\x9e\x01Retrieves details for the currently authenticated user. Returns the same user object as GetUser but uses the authenticated user\'s ID from the session context.J]\n\x03\x32\x30\x30\x12V\n,Current user details retrieved successfully.\x12&\n$\x1a\".scalekit.v1.users.GetUserResponse\x82\xb5\x18\x02\x18\x10\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x14\x12\x12/api/v1/users:this\x12\xe1\x02\n\x0eGetSupportHash\x12\x16.google.protobuf.Empty\x1a).scalekit.v1.users.GetSupportHashResponse\"\x8b\x02\x92\x41\xdf\x01\n\x05Users\x12\x10Get support hash\x1a\x66Retrieves the support email hash for the current logged in user, used for the Scalekit support system.J\\\n\x03\x32\x30\x30\x12U\n$Support hash retrieved successfully.\x12-\n+\x1a).scalekit.v1.users.GetSupportHashResponse\x82\xb5\x18\x02\x18P\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/users/support-hash\x12\xa0\x04\n\tListUsers\x12#.scalekit.v1.users.ListUsersRequest\x1a$.scalekit.v1.users.ListUsersResponse\"\xc7\x03\x92\x41\xa8\x03\n\x05Users\x12\x1dList all users in environment\x1a\xbc\x02Retrieves a paginated list of all users across your entire environment. Use this endpoint to view all users regardless of their organization memberships. This is useful for administrative purposes, user audits, or when you need to see all users in your Scalekit environment. Supports pagination for large user bases.JA\n\x03\x32\x30\x30\x12:\n\x0eList of users.\x12(\n&\x1a$.scalekit.v1.users.ListUsersResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x0f\x12\r/api/v1/users\x12\xcb\x03\n\x0bSearchUsers\x12%.scalekit.v1.users.SearchUsersRequest\x1a&.scalekit.v1.users.SearchUsersResponse\"\xec\x02\x92\x41\xb7\x02\n\x05Users\x12\x0cSearch users\x1a\x85\x01Searches for users in the environment by email, user ID, or external ID. Returns all users that match the query. Supports pagination.J\x97\x01\n\x03\x32\x30\x30\x12\x8f\x01\naReturns a list of matching users and a page token for pagination if there are additional results.\x12*\n(\x1a&.scalekit.v1.users.SearchUsersResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/users:search\x12\xe0\x04\n\x17SearchOrganizationUsers\x12\x31.scalekit.v1.users.SearchOrganizationUsersRequest\x1a\x32.scalekit.v1.users.SearchOrganizationUsersResponse\"\xdd\x03\x92\x41\x88\x03\n\x05Users\x12\x19Search organization users\x1a\xa5\x01Searches for users within a specific organization by email, user ID, or external ID. Returns all users in the organization that match the query. Supports pagination.J\xbb\x01\n\x03\x32\x30\x30\x12\xb3\x01\nyReturns a list of matching users within the organization and a page token for pagination if there are additional results.\x12\x36\n4\x1a\x32.scalekit.v1.users.SearchOrganizationUsersResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x36\x12\x34/api/v1/organizations/{organization_id}/users:search\x12\x96\x05\n\nUpdateUser\x12$.scalekit.v1.users.UpdateUserRequest\x1a%.scalekit.v1.users.UpdateUserResponse\"\xba\x04\x92\x41\x90\x04\n\x05Users\x12\x17Update user information\x1a\xe1\x02Modifies user account information including profile details, metadata, and external ID. Use this endpoint to update a user\'s personal information, contact details, or custom metadata. You can update the user\'s profile, phone number, and metadata fields. Note that fields like user ID, email address, environment ID, and creation time cannot be modified.J\x89\x01\n\x03\x32\x30\x30\x12\x81\x01\nTUser updated successfully. Returns the modified user object with updated timestamps.\x12)\n\'\x1a%.scalekit.v1.users.UpdateUserResponse\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x1a\x32\x12/api/v1/users/{id}:\x04user\x12\xfd\x03\n\nDeleteUser\x12$.scalekit.v1.users.DeleteUserRequest\x1a\x16.google.protobuf.Empty\"\xb0\x03\x92\x41\x8c\x03\n\x05Users\x12\x17\x44\x65lete user permanently\x1a\xb0\x02Permanently removes a user from your environment and deletes all associated data. Use this endpoint when you need to completely remove a user account. This action deletes the user\'s profile, memberships, and all related data across all organizations. This operation cannot be undone, so use with caution.J7\n\x03\x32\x30\x30\x12\x30\n.User successfully deleted. No content returned\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x14*\x12/api/v1/users/{id}\x12\xc4\x05\n\x10\x43reateMembership\x12*.scalekit.v1.users.CreateMembershipRequest\x1a+.scalekit.v1.users.CreateMembershipResponse\"\xd6\x04\x92\x41\xde\x03\n\x05Users\x12!Add existing user to organization\x1a\x95\x02\x41\x64\x64s an existing user to an organization and assigns them specific roles and permissions. Use this endpoint when you want to grant an existing user access to a particular organization. You can specify roles, metadata, and other membership details during the invitation process.J\x99\x01\n\x03\x32\x30\x31\x12\x91\x01\n^User successfully added to the organization. Returns details of the updated membership details\x12/\n-\x1a+.scalekit.v1.users.CreateMembershipResponse\x82\xb5\x18\x1e\n\x1aorganizations_users_invite\x18T\x82\xd3\xe4\x93\x02L\">/api/v1/memberships/organizations/{organization_id}/users/{id}:\nmembership\x12\x99\x04\n\x10\x44\x65leteMembership\x12*.scalekit.v1.users.DeleteMembershipRequest\x1a\x16.google.protobuf.Empty\"\xc0\x03\x92\x41\xd4\x02\n\x05Users\x12\'Delete organization membership for user\x1a\xdc\x01Removes a user from an organization by user ID or external ID. If the user has no memberships left and cascade is true, the user is also deleted. This action is irreversible and may also remove related group memberships.JC\n\x03\x32\x30\x30\x12<\n:User successfully marked for deletion. No content returned\x82\xb5\x18\x1e\n\x1aorganizations_users_remove\x18T\x82\xd3\xe4\x93\x02@*>/api/v1/memberships/organizations/{organization_id}/users/{id}\x12\x9e\x04\n\x10UpdateMembership\x12*.scalekit.v1.users.UpdateMembershipRequest\x1a+.scalekit.v1.users.UpdateMembershipResponse\"\xb0\x03\x92\x41\xb3\x02\n\x05Users\x12\'Update organization membership for user\x1a\x83\x01Updates a user\'s membership details within an organization by user ID or external ID. You can update roles and membership metadata.J{\n\x03\x32\x30\x30\x12t\nAMembership updated successfully. Returns the updated user object.\x12/\n-\x1a+.scalekit.v1.users.UpdateMembershipResponse\x82\xb5\x18#\n\x1forganizations_users_role_update\x18T\x82\xd3\xe4\x93\x02L2>/api/v1/memberships/organizations/{organization_id}/users/{id}:\nmembership\x12\xc8\x06\n\x17\x43reateUserAndMembership\x12\x31.scalekit.v1.users.CreateUserAndMembershipRequest\x1a\x32.scalekit.v1.users.CreateUserAndMembershipResponse\"\xc5\x05\x92\x41\xe4\x04\n\x05Users\x12\x1f\x43reate new user in organization\x1a\x83\x03\x43reates a new user account and immediately adds them to the specified organization. Use this endpoint when you want to create a user and grant them access to an organization in a single operation. You can provide user profile information, assign roles, and configure membership metadata. The user receives an activation email unless this feature is disabled in the organization settings.J\xb3\x01\n\x03\x32\x30\x31\x12\xab\x01\nqUser created successfully. Returns the created user object, including system-generated identifiers and timestamps\x12\x36\n4\x1a\x32.scalekit.v1.users.CreateUserAndMembershipResponse\x82\xb5\x18\x1e\n\x1aorganizations_users_invite\x18T\x82\xd3\xe4\x93\x02\x35\"-/api/v1/organizations/{organization_id}/users:\x04user\x12\xfd\x04\n\x15ListOrganizationUsers\x12/.scalekit.v1.users.ListOrganizationUsersRequest\x1a\x30.scalekit.v1.users.ListOrganizationUsersResponse\"\x80\x04\x92\x41\xa7\x03\n\x05Users\x12\x17List organization users\x1a\x87\x02Retrieves a paginated list of all users who are members of the specified organization. Use this endpoint to view all users with access to a particular organization, including their roles, metadata, and membership details. Supports pagination for large user lists.J{\n\x03\x32\x30\x30\x12t\n\n\x0fGetUserResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\xd8\x01\n\x16GetCurrentUserResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\x12\x90\x01\n\x12\x63urrent_session_id\x18\x02 \x01(\tBb\x92\x41_2EThe ID of the current session associated with the authenticated user.J\x16\"ses_1234567890123456\"R\x10\x63urrentSessionId\"\x17\n\x15GetCurrentUserRequest\"\xf4\x04\n\x1cListOrganizationUsersRequest\x12\xc9\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x8c\x01\x32rUnique identifier of the organization for which to list users. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xa9\x01\n\tpage_size\x18\x02 \x01(\rB\x8b\x01\x92\x41\x7f\x32yMaximum number of users to return in a single response. Valid range: 1-100. Server may return fewer users than specified.J\x02\x35\x30\xbaH\x06*\x04\x18\x64(\x00R\x08pageSize\x12\xdb\x01\n\npage_token\x18\x03 \x01(\tB\xbb\x01\x92\x41\xb7\x01\x32\x80\x01Pagination token from a previous ListUserResponse. Used to retrieve the next page of results. Leave empty for the first request.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\tpageToken\"\xa4\x05\n\x1dListOrganizationUsersResponse\x12\xba\x01\n\x0fnext_page_token\x18\x01 \x01(\tB\x91\x01\x92\x41\x8d\x01\x32WOpaque token for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x02 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12\x92\x01\n\x05users\x18\x03 \x03(\x0b\x32\x17.scalekit.v1.users.UserBc\x92\x41`2^List of user objects for the current page. May contain fewer entries than requested page_size.R\x05users\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SOpaque token for retrieving the previous page of results. Empty for the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\xfd\x04\n\x17\x44\x65leteMembershipRequest\x12\xa7\x01\n\x0forganization_id\x18\x01 \x01(\tB~\x92\x41l2RUnique organization identifier. Must start with \'org_\' and be 1-32 characters longJ\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x81\x01\n\x02id\x18\x02 \x01(\tBo\x92\x41]2CSystem-generated user ID. Must start with \'usr_\' (19-25 characters)J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12\x89\x01\n\x0b\x65xternal_id\x18\x03 \x01(\tBf\x92\x41\x63\x32RExternal system identifier from connected directories. Must match existing recordsJ\r\"ext_7890xyz\"H\x00R\nexternalId\x12\x8d\x01\n\x07\x63\x61scade\x18\x05 \x01(\x08\x42n\x92\x41\\2SIf true, if user has no memberships left the user is also deleted. defaults to trueJ\x05\x66\x61lse\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x07\x63\x61scade\x88\x01\x01\x42\x0c\n\nidentitiesB\n\n\x08_cascade\"\xbd\x06\n\x17\x43reateMembershipRequest\x12\xb7\x01\n\x0forganization_id\x18\x01 \x01(\tB\x8d\x01\x92\x41{2aUnique identifier of the target organization. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xa2\x01\n\nmembership\x18\x02 \x01(\x0b\x32#.scalekit.v1.users.CreateMembershipB]\x92\x41Q2?Membership details to create. Required fields must be provided.\xca>\r\xfa\x02\nmembership\xe0\x41\x02\xbaH\x03\xc8\x01\x01R\nmembership\x12\x81\x01\n\x02id\x18\x03 \x01(\tBo\x92\x41]2CSystem-generated user ID. Must start with \'usr_\' (19-25 characters)J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12\x8e\x01\n\x0b\x65xternal_id\x18\x04 \x01(\tBk\x92\x41h2WExternal system identifier from connected directories. Must be unique across the systemJ\r\"ext_7890xyz\"H\x00R\nexternalId\x12\x85\x01\n\x15send_invitation_email\x18\x05 \x01(\x08\x42L\x92\x41I2AIf true, sends an activation email to the user. Defaults to true.J\x04trueH\x01R\x13sendInvitationEmail\x88\x01\x01\x42\x0c\n\nidentitiesB\x18\n\x16_send_invitation_email\"G\n\x18\x43reateMembershipResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\x9a\x02\n\x10ListUsersRequest\x12t\n\tpage_size\x18\x01 \x01(\rBW\x92\x41T2NMaximum number of organizations to return per page. Must be between 10 and 100J\x02\x33\x30R\x08pageSize\x12\x8f\x01\n\npage_token\x18\x02 \x01(\tBp\x92\x41m2[Pagination token from the previous response. Use to retrieve the next page of organizationsJ\x0e\"\"R\tpageToken\"\xc0\x04\n\x11ListUsersResponse\x12\x42\n\x05users\x18\x01 \x03(\x0b\x32\x17.scalekit.v1.users.UserB\x13\x92\x41\x10\x32\x0eList of users.R\x05users\x12\xb3\x01\n\x0fnext_page_token\x18\x02 \x01(\tB\x8a\x01\x92\x41\x86\x01\x32PToken for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x03 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SToken for retrieving the previous page of results. Empty if this is the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\xfb\x03\n\x12SearchUsersRequest\x12\xaf\x01\n\x05query\x18\x01 \x01(\tB\x98\x01\x92\x41\x88\x01\x32oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\x10john@example.comxd\x80\x01\x03\xbaH\tr\x04\x10\x03\x18\x64\xc8\x01\x01R\x05query\x12\x8a\x01\n\tpage_size\x18\x02 \x01(\rBm\x92\x41\x63\x32KMaximum number of users to return per page. Value must be between 1 and 30.J\x02\x33\x30Y\x00\x00\x00\x00\x00\x00>@i\x00\x00\x00\x00\x00\x00\xf0?\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x03 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\xcb\x04\n\x13SearchUsersResponse\x12\xb3\x01\n\x0fnext_page_token\x18\x01 \x01(\tB\x8a\x01\x92\x41\x86\x01\x32PToken for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x02 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12K\n\x05users\x18\x03 \x03(\x0b\x32\x17.scalekit.v1.users.UserB\x1c\x92\x41\x19\x32\x17List of matching users.R\x05users\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SToken for retrieving the previous page of results. Empty if this is the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\xb1\x02\n\x11\x44\x65leteUserRequest\x12\x81\x01\n\x02id\x18\x01 \x01(\tBo\x92\x41]2CSystem-generated user ID. Must start with \'usr_\' (19-25 characters)J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12\x89\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tBf\x92\x41\x63\x32RExternal system identifier from connected directories. Must match existing recordsJ\r\"ext_7890xyz\"H\x00R\nexternalIdB\x0c\n\nidentities\"\x9a\x05\n\x17UpdateMembershipRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\xa1\x01\x92\x41\x8e\x01\x32tUnique identifier of the organization containing the membership. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x8c\x01\n\x02id\x18\x02 \x01(\tBz\x92\x41h2NSystem-generated user ID. Must start with \'usr_\' and be 19-25 characters long.J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12j\n\x0b\x65xternal_id\x18\x03 \x01(\tBG\x92\x41\x44\x32\x33Your application\'s unique identifier for this user.J\r\"ext_7890xyz\"H\x00R\nexternalId\x12\xa7\x01\n\nmembership\x18\x05 \x01(\x0b\x32#.scalekit.v1.users.UpdateMembershipBb\x92\x41Y2DMembership fields to update. Only specified fields will be modified.J\x11{\"role\": \"admin\"}\xbaH\x03\xc8\x01\x01R\nmembershipB\x0c\n\nidentities\"\xfb\x03\n\x10UpdateMembership\x12}\n\x05roles\x18\x04 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleBL\x92\x41I22Role to assign to the user within the organizationJ\x13[{\"name\": \"admin\"}]R\x05roles\x12\x8c\x02\n\x08metadata\x18\x07 \x03(\x0b\x32\x31.scalekit.v1.users.UpdateMembership.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01J\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07\"\xb4\x05\n\x10\x43reateMembership\x12}\n\x05roles\x18\x04 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleBL\x92\x41I22Role to assign to the user within the organizationJ\x13[{\"name\": \"admin\"}]R\x05roles\x12\x8c\x02\n\x08metadata\x18\x07 \x03(\x0b\x32\x31.scalekit.v1.users.CreateMembership.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xa4\x01\n\rinviter_email\x18\x08 \x01(\tBz\x92\x41k2QEmail address of the user who invited this member. Must be a valid email address.J\x16\"john.doe@example.com\"\xbaH\tr\x07\x10\x05\x18\xfe\x01`\x01H\x00R\x0cinviterEmail\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x10\n\x0e_inviter_emailJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07\"G\n\x18UpdateMembershipResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\xcf\x05\n\x1eSearchOrganizationUsersRequest\x12\xc5\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9b\x01\x92\x41\x85\x01\x32kUnique identifier of the organization to search within. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\x12\xaf\x01\n\x05query\x18\x02 \x01(\tB\x98\x01\x92\x41\x88\x01\x32oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\x10john@example.comxd\x80\x01\x03\xbaH\tr\x04\x10\x03\x18\x64\xc8\x01\x01R\x05query\x12\x8a\x01\n\tpage_size\x18\x03 \x01(\rBm\x92\x41\x63\x32KMaximum number of users to return per page. Value must be between 1 and 30.J\x02\x33\x30Y\x00\x00\x00\x00\x00\x00>@i\x00\x00\x00\x00\x00\x00\xf0?\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x04 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\xd7\x04\n\x1fSearchOrganizationUsersResponse\x12\xb3\x01\n\x0fnext_page_token\x18\x01 \x01(\tB\x8a\x01\x92\x41\x86\x01\x32PToken for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x02 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12K\n\x05users\x18\x03 \x03(\x0b\x32\x17.scalekit.v1.users.UserB\x1c\x92\x41\x19\x32\x17List of matching users.R\x05users\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SToken for retrieving the previous page of results. Empty if this is the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\x85\x08\n\nCreateUser\x12\x98\x01\n\x05\x65mail\x18\x05 \x01(\tB\x81\x01\x92\x41w2aPrimary email address for the user. Must be unique across the environment and valid per RFC 5322.J\x12\"user@example.com\"\xbaH\x04r\x02`\x01R\x05\x65mail\x12\xa2\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tB|\x92\x41y2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x12\"ext_12345a67b89c\"H\x00R\nexternalId\x88\x01\x01\x12\x9f\x01\n\nmembership\x18\x07 \x01(\x0b\x32#.scalekit.v1.users.CreateMembershipBZ\x92\x41W2UList of organization memberships. Automatically populated based on group assignments.R\nmembership\x12\xa0\x01\n\x0cuser_profile\x18\x08 \x01(\x0b\x32$.scalekit.v1.users.CreateUserProfileBW\x92\x41T2RUser\'s personal information including name, address, and other profile attributes.R\x0buserProfile\x12\x86\x02\n\x08metadata\x18\t \x03(\x0b\x32+.scalekit.v1.users.CreateUser.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\n\x10\x0b\"\xbe\x10\n\x11\x43reateUserProfile\x12^\n\ngiven_name\x18\x02 \x01(\tB?\x92\x41\x34\x32*User\'s given name. Maximum 255 characters.J\x06\"John\"\xbaH\x05r\x03\x18\xff\x01R\tgivenName\x12`\n\x0b\x66\x61mily_name\x18\x03 \x01(\tB?\x92\x41\x34\x32+User\'s family name. Maximum 255 characters.J\x05\"Doe\"\xbaH\x05r\x03\x18\xff\x01R\nfamilyName\x12v\n\x04name\x18\x04 \x01(\tBb\x92\x41_2IFull name in display format. Typically combines first_name and last_name.J\x12\"John Michael Doe\"R\x04name\x12y\n\x06locale\x18\x05 \x01(\tBa\x92\x41^2SUser\'s localization preference in BCP-47 format. Defaults to organization settings.J\x07\"en-US\"R\x06locale\x12\x8a\x01\n\x0cphone_number\x18\x07 \x01(\tBg\x92\x41\x64\x32RPhone number in E.164 international format. Required for SMS-based authentication.J\x0e\"+14155552671\"R\x0bphoneNumber\x12\x8b\x02\n\x08metadata\x18\x08 \x03(\x0b\x32\x32.scalekit.v1.users.CreateUserProfile.MetadataEntryB\xba\x01\x92\x41\x9d\x01\x32^System-managed key-value pairs for internal tracking. Keys (3-25 chars), values (1-256 chars).J;{\"account_status\": \"active\", \"signup_source\": \"mobile_app\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xa2\x02\n\x11\x63ustom_attributes\x18\t \x03(\x0b\x32:.scalekit.v1.users.CreateUserProfile.CustomAttributesEntryB\xb8\x01\x92\x41\x9b\x01\x32ZCustom attributes for extended user profile data. Keys (3-25 chars), values (1-256 chars).J={\"department\": \"engineering\", \"security_clearance\": \"level2\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x10\x63ustomAttributes\x12\x7f\n\x12preferred_username\x18\n \x01(\tBP\x92\x41\x45\x32/User\'s preferred username for display purposes.J\x12\"John Michael Doe\"\xbaH\x05r\x03\x18\x80\x04R\x11preferredUsername\x12z\n\x07picture\x18\x0b \x01(\tB[\x92\x41P2,URL to the user\'s profile picture or avatar.J \"https://example.com/avatar.jpg\"\xbaH\x05r\x03\x18\x80\x10H\x00R\x07picture\x88\x01\x01\x12\x41\n\x06gender\x18\x0c \x01(\tB$\x92\x41!2\x17User\'s gender identity.J\x06\"male\"H\x01R\x06gender\x88\x01\x01\x12\xa1\x01\n\x06groups\x18\r \x03(\tB\x88\x01\x92\x41p2QList of group names the user belongs to. Each group name must be 1-250 charactersJ\x1b[\"engineering\", \"managers\"]\xbaH\x12\x92\x01\x0f\x08\x00\x10\x32\x18\x01\"\x07r\x05\x10\x01\x18\xfa\x01R\x06groups\x12\x94\x01\n\nfirst_name\x18\x15 \x01(\tBu\x18\x01\x92\x41Y2O[DEPRECATED] Use given_name instead. User\'s given name. Maximum 200 characters.J\x06\"John\"\xbaH\x05r\x03\x18\xc8\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\tfirstName\x12\x93\x01\n\tlast_name\x18\x16 \x01(\tBv\x18\x01\x92\x41Z2Q[DEPRECATED] Use family_name instead. User\'s family name. Maximum 200 characters.J\x05\"Doe\"\xbaH\x05r\x03\x18\xc8\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\x08lastName\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a\x43\n\x15\x43ustomAttributesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\n\n\x08_pictureB\t\n\x07_genderJ\x04\x08\x01\x10\x02J\x04\x08\x06\x10\x07\"\xe5(\n\x11UpdateUserProfile\x12\xe5\x01\n\ngiven_name\x18\x02 \x01(\tB\xc0\x01\x92\x41\xb4\x01\x32\xa9\x01Updates the user\'s given name (first name). Use this field to modify how the user\'s first name appears in the system and user interfaces. Maximum 255 characters allowed.J\x06\"John\"\xbaH\x05r\x03\x18\xff\x01H\x00R\tgivenName\x88\x01\x01\x12\xe4\x01\n\x0b\x66\x61mily_name\x18\x03 \x01(\tB\xbd\x01\x92\x41\xb1\x01\x32\xa7\x01Updates the user\'s family name (last name or surname). Use this field to modify how the user\'s last name appears throughout the system. Maximum 255 characters allowed.J\x05\"Doe\"\xbaH\x05r\x03\x18\xff\x01H\x01R\nfamilyName\x88\x01\x01\x12\xae\x02\n\x04name\x18\x04 \x01(\tB\x94\x02\x92\x41\x90\x02\x32\x81\x02Updates the user\'s complete display name. Use this field when you want to set the full name as a single string rather than using separate given and family names. This name appears in user interfaces, reports, and anywhere a formatted display name is needed.J\n\"John Doe\"H\x02R\x04name\x88\x01\x01\x12\x97\x03\n\x06locale\x18\x05 \x01(\tB\xf9\x02\x92\x41\xf5\x02\x32\xe9\x02Updates the user\'s preferred language and region settings using BCP-47 format codes. Use this field to customize the user\'s experience with localized content, date formats, number formatting, and UI language. When not specified, the user inherits the organization\'s default locale settings. Common values include `en-US`, `en-GB`, `fr-FR`, `de-DE`, and `es-ES`.J\x07\"en-US\"H\x03R\x06locale\x88\x01\x01\x12\xb1\x03\n\x0cphone_number\x18\x07 \x01(\tB\x88\x03\x92\x41\x84\x03\x32\xf1\x02Updates the user\'s phone number in E.164 international format. Use this field to enable SMS-based authentication methods, two-factor authentication, or phone-based account recovery. The phone number must include the country code and be formatted according to E.164 standards (e.g., `+1` for US numbers). This field is required when enabling SMS authentication features.J\x0e\"+14155552671\"H\x04R\x0bphoneNumber\x88\x01\x01\x12\xd1\x04\n\x08metadata\x18\x08 \x03(\x0b\x32\x32.scalekit.v1.users.UpdateUserProfile.MetadataEntryB\x80\x04\x92\x41\xe3\x03\x32\xa3\x03Updates system-managed key-value pairs for internal tracking and operational data. Use this field to store system-generated metadata like account status, signup source, last activity tracking, or integration-specific identifiers. These fields are typically managed by automated processes rather than direct user input. Keys must be 3-25 characters, values must be 1-256 characters, with a maximum of 20 key-value pairs.J;{\"account_status\": \"active\", \"signup_source\": \"mobile_app\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xc7\x05\n\x11\x63ustom_attributes\x18\t \x03(\x0b\x32:.scalekit.v1.users.UpdateUserProfile.CustomAttributesEntryB\xdd\x04\x92\x41\xc0\x04\x32\xfe\x03Updates custom attributes for extended user profile data and application-specific information. Use this field to store business-specific user data like department, job title, security clearances, project assignments, or any other organizational attributes your application requires. Unlike system metadata, these attributes are typically managed by administrators or applications and are visible to end users. Keys must be 3-25 characters, values must be 1-256 characters, with a maximum of 20 key-value pairs.J={\"department\": \"engineering\", \"security_clearance\": \"level2\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x10\x63ustomAttributes\x12\x8a\x01\n\nfirst_name\x18\x15 \x01(\tBf\x18\x01\x92\x41Y2O[DEPRECATED] Use given_name instead. User\'s given name. Maximum 200 characters.J\x06\"John\"\xbaH\x05r\x03\x18\xc8\x01H\x05R\tfirstName\x88\x01\x01\x12\x89\x01\n\tlast_name\x18\x16 \x01(\tBg\x18\x01\x92\x41Z2Q[DEPRECATED] Use family_name instead. User\'s family name. Maximum 200 characters.J\x05\"Doe\"\xbaH\x05r\x03\x18\xc8\x01H\x06R\x08lastName\x88\x01\x01\x12\x97\x03\n\x12preferred_username\x18\n \x01(\tB\xe2\x02\x92\x41\xd6\x02\x32\xbf\x02Updates the user\'s preferred username for display and identification purposes. Use this field to set a custom username that the user prefers to be known by, which may differ from their email or formal name. This username appears in user interfaces, mentions, and informal communications. Maximum 512 characters allowed.J\x12\"John Michael Doe\"\xbaH\x05r\x03\x18\x80\x04H\x07R\x11preferredUsername\x88\x01\x01\x12\xb2\x03\n\x07picture\x18\x0b \x01(\tB\x92\x03\x92\x41\x86\x03\x32\xe1\x02Updates the URL to the user\'s profile picture or avatar image. Use this field to set or change the user\'s profile photo that appears in user interfaces, directory listings, and collaborative features. The URL should point to a publicly accessible image file. Supported formats typically include JPEG, PNG, and GIF. Maximum URL length is 2048 characters.J \"https://example.com/avatar.jpg\"\xbaH\x05r\x03\x18\x80\x10H\x08R\x07picture\x88\x01\x01\x12\xfe\x02\n\x06gender\x18\x0c \x01(\tB\xe0\x02\x92\x41\xdc\x02\x32\xd1\x02Updates the user\'s gender identity information. Use this field to store the user\'s gender identity for personalization, compliance, or reporting purposes. This field supports any string value to accommodate diverse gender identities and should be handled with appropriate privacy considerations according to your organization\'s policies.J\x06\"male\"H\tR\x06gender\x88\x01\x01\x12\xdd\x03\n\x06groups\x18\r \x03(\tB\xc4\x03\x92\x41\xab\x03\x32\x8b\x03Updates the list of group names the user belongs to within the organization. Use this field to manage the user\'s group memberships for role-based access control, team assignments, or organizational structure. Groups are typically used for permission management and collaborative access. Each group name must be unique within the list, 1-250 characters long, with a maximum of 50 groups per user.J\x1b[\"engineering\", \"managers\"]\xbaH\x12\x92\x01\x0f\x08\x00\x10\x32\x18\x01\"\x07r\x05\x10\x01\x18\xfa\x01R\x06groups\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a\x43\n\x15\x43ustomAttributesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\r\n\x0b_given_nameB\x0e\n\x0c_family_nameB\x07\n\x05_nameB\t\n\x07_localeB\x0f\n\r_phone_numberB\r\n\x0b_first_nameB\x0c\n\n_last_nameB\x15\n\x13_preferred_usernameB\n\n\x08_pictureB\t\n\x07_genderJ\x04\x08\x01\x10\x02J\x04\x08\x06\x10\x07\"\xf9\x07\n\x06Invite\x12l\n\x0forganization_id\x18\x01 \x01(\tBC\x92\x41@2-The organization to which the invite belongs.J\x0f\"org_987654321\"R\x0eorganizationId\x12\x7f\n\x07user_id\x18\x02 \x01(\tBf\x92\x41\x63\x32SUser ID to whom the invite is sent. May be empty if the user has not signed up yet.J\x0c\"usr_123456\"R\x06userId\x12\x7f\n\rinviter_email\x18\x03 \x01(\tBU\x92\x41R2;Identifier of the user or system that initiated the invite.J\x13\"admin@example.com\"H\x00R\x0cinviterEmail\x88\x01\x01\x12x\n\x06status\x18\x04 \x01(\tB`\x92\x41]2ICurrent status of the invite (e.g., pending, accepted, expired, revoked).J\x10\"pending_invite\"R\x06status\x12\x89\x01\n\ncreated_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampBN\x92\x41K21Timestamp when the invite was originally created.J\x16\"2025-07-10T08:00:00Z\"R\tcreatedAt\x12}\n\nexpires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampBB\x92\x41?2%The time at which the invite expires.J\x16\"2025-12-31T23:59:59Z\"R\texpiresAt\x12\x8f\x01\n\tresent_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampBV\x92\x41S29Timestamp when the invite was last resent, if applicable.J\x16\"2025-07-15T09:30:00Z\"R\x08resentAt\x12V\n\x0cresent_count\x18\x08 \x01(\x05\x42\x33\x92\x41\x30\x32+Number of times the invite has been resent.J\x01\x32R\x0bresentCountB\x10\n\x0e_inviter_email\"\xa3\x03\n\x13ResendInviteRequest\x12\xd3\x01\n\x0forganization_id\x18\x01 \x01(\tB\xa9\x01\x92\x41\x96\x01\x32|Unique identifier of the organization containing the pending invitation. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xb5\x01\n\x02id\x18\x02 \x01(\tB\xa4\x01\x92\x41\x91\x01\x32wSystem-generated user ID of the user who has a pending invitation. Must start with \'usr_\' and be 19-25 characters long.J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_R\x02id\"\xe1\x02\n\x14ResendInviteResponse\x12\xc8\x02\n\x06invite\x18\x01 \x01(\x0b\x32\x19.scalekit.v1.users.InviteB\x94\x02\x92\x41\x90\x02\x32\x81\x01Updated invitation object containing the resent invitation details, including new expiration time and incremented resend counter.J\x89\x01{\"organization_id\": \"org_123\", \"user_id\": \"usr_456\", \"status\": \"pending_invite\", \"expires_at\": \"2025-12-31T23:59:59Z\", \"resent_count\": 2}R\x06invite\"\xf0\x01\n\x14ListUserRolesRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\"q\n\x15ListUserRolesResponse\x12X\n\x05roles\x18\x01 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleB\'\x92\x41$2\"List of roles assigned to the userR\x05roles\"\xde\x02\n\x16\x41ssignUserRolesRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\x12j\n\x05roles\x18\x03 \x03(\x0b\x32$.scalekit.v1.users.AssignRoleRequestB.\x92\x41%2#List of roles to assign to the user\xbaH\x03\xc8\x01\x01R\x05roles\"\xb2\x01\n\x11\x41ssignRoleRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x18\x01\x92\x41\x39\x32\x1eUnique identifier for the roleJ\x17\"role_1234abcd5678efgh\"R\x02id\x12M\n\trole_name\x18\x02 \x01(\tB0\x92\x41$2\x18Unique name for the roleJ\x08\"viewer\"\xbaH\x06r\x04\x10\x00\x18\x64R\x08roleName\"\x81\x01\n\x17\x41ssignUserRolesResponse\x12\x66\n\x05roles\x18\x01 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleB5\x92\x41\x32\x32\x30List of all roles currently assigned to the userR\x05roles\"\xd6\x02\n\x15RemoveUserRoleRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\x12\x63\n\trole_name\x18\x03 \x01(\tBF\x92\x41\x43\x32(Unique identifier for the role to removeJ\x17\"role_1234abcd5678efgh\"R\x08roleName\"\xf6\x01\n\x1aListUserPermissionsRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\"\x97\x03\n\nPermission\x12U\n\x02id\x18\x01 \x01(\tBE\x92\x41?2$Unique identifier for the permissionJ\x17\"perm_1234abcd5678efgh\"\xe0\x41\x03R\x02id\x12R\n\x04name\x18\x02 \x01(\tB>\x92\x41;2)Unique name identifier for the permissionJ\x0e\"users:create\"R\x04name\x12u\n\x0b\x64\x65scription\x18\x03 \x01(\tBS\x92\x41P2)Description of what the permission allowsJ#\"Allows creating new user accounts\"R\x0b\x64\x65scription\x12g\n\x04tags\x18\x04 \x03(\tBS\x92\x41\x41\x32!Tags for categorizing permissionsJ\x1c[\"user-management\", \"admin\"]\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\x04tags\";\n\x16GetSupportHashResponse\x12!\n\x0csupport_hash\x18\x01 \x01(\tR\x0bsupportHash\"\x8f\x01\n\x1bListUserPermissionsResponse\x12p\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x1d.scalekit.v1.users.PermissionB/\x92\x41,2*List of permissions the user has access toR\x0bpermissions2\x9e\x62\n\x0bUserService\x12\xb8\x03\n\x07GetUser\x12!.scalekit.v1.users.GetUserRequest\x1a\".scalekit.v1.users.GetUserResponse\"\xe5\x02\x92\x41\xc1\x02\n\x05Users\x12\x08Get user\x1a\x8e\x01Retrieves all details for a user by system-generated user ID or external ID. The response includes organization memberships and user metadata.J\x9c\x01\n\x03\x32\x30\x30\x12\x94\x01\njUser details retrieved successfully. Returns full user object with system-generated fields and timestamps.\x12&\n$\x1a\".scalekit.v1.users.GetUserResponse\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x14\x12\x12/api/v1/users/{id}\x12\xd5\x03\n\x0eGetCurrentUser\x12(.scalekit.v1.users.GetCurrentUserRequest\x1a).scalekit.v1.users.GetCurrentUserResponse\"\xed\x02\x92\x41\xa6\x02\n\x05Users\x12\x16Get authenticated user\x1a\x9e\x01Retrieves details for the currently authenticated user. Returns the same user object as GetUser but uses the authenticated user\'s ID from the session context.Jd\n\x03\x32\x30\x30\x12]\n,Current user details retrieved successfully.\x12-\n+\x1a).scalekit.v1.users.GetCurrentUserResponse\x82\xb5\x18\x02\x18\x18\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02(\x12\x12/api/v1/users:thisZ\x12\x12\x10/api/v1/users/me\x12\xf0\x02\n\x0eGetSupportHash\x12\x16.google.protobuf.Empty\x1a).scalekit.v1.users.GetSupportHashResponse\"\x9a\x02\x92\x41\xdf\x01\n\x05Users\x12\x10Get support hash\x1a\x66Retrieves the support email hash for the current logged in user, used for the Scalekit support system.J\\\n\x03\x32\x30\x30\x12U\n$Support hash retrieved successfully.\x12-\n+\x1a).scalekit.v1.users.GetSupportHashResponse\x82\xb5\x18\x02\x18P\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/users/support-hash\x12\xa0\x04\n\tListUsers\x12#.scalekit.v1.users.ListUsersRequest\x1a$.scalekit.v1.users.ListUsersResponse\"\xc7\x03\x92\x41\xa8\x03\n\x05Users\x12\x1dList all users in environment\x1a\xbc\x02Retrieves a paginated list of all users across your entire environment. Use this endpoint to view all users regardless of their organization memberships. This is useful for administrative purposes, user audits, or when you need to see all users in your Scalekit environment. Supports pagination for large user bases.JA\n\x03\x32\x30\x30\x12:\n\x0eList of users.\x12(\n&\x1a$.scalekit.v1.users.ListUsersResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x0f\x12\r/api/v1/users\x12\xb8\x05\n\x0bSearchUsers\x12%.scalekit.v1.users.SearchUsersRequest\x1a&.scalekit.v1.users.SearchUsersResponse\"\xd9\x04\x92\x41\xb3\x04\n\x05Users\x12\x0cSearch users\x1a\xaf\x02Searches for users across the entire environment by email address, user ID, or external ID. The query must be at least 3 characters and is case-insensitive. Returns a paginated list of matching users with up to 30 results per page. Use the next_page_token from the response to retrieve subsequent pages.J\x8c\x01\n\x03\x32\x30\x30\x12\x84\x01\nVMatching users returned; includes pagination cursors for navigating large result sets.\x12*\n(\x1a&.scalekit.v1.users.SearchUsersResponseJ[\n\x03\x34\x30\x30\x12T\nRBad Request - query must be at least 3 characters and no more than 100 characters.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/users:search\x12\xd0\x07\n\x17SearchOrganizationUsers\x12\x31.scalekit.v1.users.SearchOrganizationUsersRequest\x1a\x32.scalekit.v1.users.SearchOrganizationUsersResponse\"\xcd\x06\x92\x41\x87\x06\n\x05Users\x12\x19Search organization users\x1a\xe3\x02Searches for users within a specific organization by email address, user ID, or external ID. The query must be at least 3 characters and is case-insensitive. Scopes results strictly to the given organization. Returns a paginated list of matching users with up to 30 results per page. Use the next_page_token from the response to retrieve subsequent pages.J\xb0\x01\n\x03\x32\x30\x30\x12\xa8\x01\nnMatching users within the organization returned; includes pagination cursors for navigating large result sets.\x12\x36\n4\x1a\x32.scalekit.v1.users.SearchOrganizationUsersResponseJ\x9b\x01\n\x03\x34\x30\x30\x12\x93\x01\n\x90\x01\x42\x61\x64 Request - query must be at least 3 characters and no more than 100 characters, and organization_id must be a valid org_ prefixed identifier.J,\n\x03\x34\x30\x34\x12%\n#Not Found - organization not found.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x36\x12\x34/api/v1/organizations/{organization_id}/users:search\x12\x96\x05\n\nUpdateUser\x12$.scalekit.v1.users.UpdateUserRequest\x1a%.scalekit.v1.users.UpdateUserResponse\"\xba\x04\x92\x41\x90\x04\n\x05Users\x12\x17Update user information\x1a\xe1\x02Modifies user account information including profile details, metadata, and external ID. Use this endpoint to update a user\'s personal information, contact details, or custom metadata. You can update the user\'s profile, phone number, and metadata fields. Note that fields like user ID, email address, environment ID, and creation time cannot be modified.J\x89\x01\n\x03\x32\x30\x30\x12\x81\x01\nTUser updated successfully. Returns the modified user object with updated timestamps.\x12)\n\'\x1a%.scalekit.v1.users.UpdateUserResponse\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x1a\x32\x12/api/v1/users/{id}:\x04user\x12\xfd\x03\n\nDeleteUser\x12$.scalekit.v1.users.DeleteUserRequest\x1a\x16.google.protobuf.Empty\"\xb0\x03\x92\x41\x8c\x03\n\x05Users\x12\x17\x44\x65lete user permanently\x1a\xb0\x02Permanently removes a user from your environment and deletes all associated data. Use this endpoint when you need to completely remove a user account. This action deletes the user\'s profile, memberships, and all related data across all organizations. This operation cannot be undone, so use with caution.J7\n\x03\x32\x30\x30\x12\x30\n.User successfully deleted. No content returned\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x14*\x12/api/v1/users/{id}\x12\xc4\x05\n\x10\x43reateMembership\x12*.scalekit.v1.users.CreateMembershipRequest\x1a+.scalekit.v1.users.CreateMembershipResponse\"\xd6\x04\x92\x41\xde\x03\n\x05Users\x12!Add existing user to organization\x1a\x95\x02\x41\x64\x64s an existing user to an organization and assigns them specific roles and permissions. Use this endpoint when you want to grant an existing user access to a particular organization. You can specify roles, metadata, and other membership details during the invitation process.J\x99\x01\n\x03\x32\x30\x31\x12\x91\x01\n^User successfully added to the organization. Returns details of the updated membership details\x12/\n-\x1a+.scalekit.v1.users.CreateMembershipResponse\x82\xb5\x18\x1e\n\x1aorganizations_users_invite\x18T\x82\xd3\xe4\x93\x02L\">/api/v1/memberships/organizations/{organization_id}/users/{id}:\nmembership\x12\x99\x04\n\x10\x44\x65leteMembership\x12*.scalekit.v1.users.DeleteMembershipRequest\x1a\x16.google.protobuf.Empty\"\xc0\x03\x92\x41\xd4\x02\n\x05Users\x12\'Delete organization membership for user\x1a\xdc\x01Removes a user from an organization by user ID or external ID. If the user has no memberships left and cascade is true, the user is also deleted. This action is irreversible and may also remove related group memberships.JC\n\x03\x32\x30\x30\x12<\n:User successfully marked for deletion. No content returned\x82\xb5\x18\x1e\n\x1aorganizations_users_remove\x18T\x82\xd3\xe4\x93\x02@*>/api/v1/memberships/organizations/{organization_id}/users/{id}\x12\x9e\x04\n\x10UpdateMembership\x12*.scalekit.v1.users.UpdateMembershipRequest\x1a+.scalekit.v1.users.UpdateMembershipResponse\"\xb0\x03\x92\x41\xb3\x02\n\x05Users\x12\'Update organization membership for user\x1a\x83\x01Updates a user\'s membership details within an organization by user ID or external ID. You can update roles and membership metadata.J{\n\x03\x32\x30\x30\x12t\nAMembership updated successfully. Returns the updated user object.\x12/\n-\x1a+.scalekit.v1.users.UpdateMembershipResponse\x82\xb5\x18#\n\x1forganizations_users_role_update\x18T\x82\xd3\xe4\x93\x02L2>/api/v1/memberships/organizations/{organization_id}/users/{id}:\nmembership\x12\xc8\x06\n\x17\x43reateUserAndMembership\x12\x31.scalekit.v1.users.CreateUserAndMembershipRequest\x1a\x32.scalekit.v1.users.CreateUserAndMembershipResponse\"\xc5\x05\x92\x41\xe4\x04\n\x05Users\x12\x1f\x43reate new user in organization\x1a\x83\x03\x43reates a new user account and immediately adds them to the specified organization. Use this endpoint when you want to create a user and grant them access to an organization in a single operation. You can provide user profile information, assign roles, and configure membership metadata. The user receives an activation email unless this feature is disabled in the organization settings.J\xb3\x01\n\x03\x32\x30\x31\x12\xab\x01\nqUser created successfully. Returns the created user object, including system-generated identifiers and timestamps\x12\x36\n4\x1a\x32.scalekit.v1.users.CreateUserAndMembershipResponse\x82\xb5\x18\x1e\n\x1aorganizations_users_invite\x18T\x82\xd3\xe4\x93\x02\x35\"-/api/v1/organizations/{organization_id}/users:\x04user\x12\xfd\x04\n\x15ListOrganizationUsers\x12/.scalekit.v1.users.ListOrganizationUsersRequest\x1a\x30.scalekit.v1.users.ListOrganizationUsersResponse\"\x80\x04\x92\x41\xa7\x03\n\x05Users\x12\x17List organization users\x1a\x87\x02Retrieves a paginated list of all users who are members of the specified organization. Use this endpoint to view all users with access to a particular organization, including their roles, metadata, and membership details. Supports pagination for large user lists.J{\n\x03\x32\x30\x30\x12t\n\r\372\002\nmembership\340A\002\272H\003\310\001\001' _globals['_CREATEMEMBERSHIPREQUEST'].fields_by_name['id']._loaded_options = None _globals['_CREATEMEMBERSHIPREQUEST'].fields_by_name['id']._serialized_options = b'\222A]2CSystem-generated user ID. Must start with \'usr_\' (19-25 characters)J\026\"usr_1234abcd5678efgh\"\272H\014r\n\020\023\030\031:\004usr_' _globals['_CREATEMEMBERSHIPREQUEST'].fields_by_name['external_id']._loaded_options = None @@ -123,9 +123,9 @@ _globals['_LISTUSERSRESPONSE'].fields_by_name['prev_page_token']._loaded_options = None _globals['_LISTUSERSRESPONSE'].fields_by_name['prev_page_token']._serialized_options = b'\222A\211\0012SToken for retrieving the previous page of results. Empty if this is the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"' _globals['_SEARCHUSERSREQUEST'].fields_by_name['query']._loaded_options = None - _globals['_SEARCHUSERSREQUEST'].fields_by_name['query']._serialized_options = b'\222A\203\0012oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\020john@example.com\272H\tr\004\020\003\030d\310\001\001' + _globals['_SEARCHUSERSREQUEST'].fields_by_name['query']._serialized_options = b'\222A\210\0012oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\020john@example.comxd\200\001\003\272H\tr\004\020\003\030d\310\001\001' _globals['_SEARCHUSERSREQUEST'].fields_by_name['page_size']._loaded_options = None - _globals['_SEARCHUSERSREQUEST'].fields_by_name['page_size']._serialized_options = b'\222AQ2KMaximum number of users to return per page. Value must be between 1 and 30.J\00230\272H\004*\002\030\036' + _globals['_SEARCHUSERSREQUEST'].fields_by_name['page_size']._serialized_options = b'\222Ac2KMaximum number of users to return per page. Value must be between 1 and 30.J\00230Y\000\000\000\000\000\000>@i\000\000\000\000\000\000\360?\272H\004*\002\030\036' _globals['_SEARCHUSERSREQUEST'].fields_by_name['page_token']._loaded_options = None _globals['_SEARCHUSERSREQUEST'].fields_by_name['page_token']._serialized_options = b'\222A\201\0012aToken from a previous response for pagination. Provide this to retrieve the next page of results.J\034eyJwYWdlIjoyLCJsaW1pdCI6MzB9' _globals['_SEARCHUSERSRESPONSE'].fields_by_name['next_page_token']._loaded_options = None @@ -165,9 +165,9 @@ _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['organization_id']._loaded_options = None _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['organization_id']._serialized_options = b'\222A\205\0012kUnique identifier of the organization to search within. Must start with \'org_\' and be 1-32 characters long.J\026\"org_1234abcd5678efgh\"\272H\017r\n\020\001\030 :\004org_\310\001\001' _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['query']._loaded_options = None - _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['query']._serialized_options = b'\222A\203\0012oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\020john@example.com\272H\tr\004\020\003\030d\310\001\001' + _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['query']._serialized_options = b'\222A\210\0012oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\020john@example.comxd\200\001\003\272H\tr\004\020\003\030d\310\001\001' _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['page_size']._loaded_options = None - _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['page_size']._serialized_options = b'\222AQ2KMaximum number of users to return per page. Value must be between 1 and 30.J\00230\272H\004*\002\030\036' + _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['page_size']._serialized_options = b'\222Ac2KMaximum number of users to return per page. Value must be between 1 and 30.J\00230Y\000\000\000\000\000\000>@i\000\000\000\000\000\000\360?\272H\004*\002\030\036' _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['page_token']._loaded_options = None _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['page_token']._serialized_options = b'\222A\201\0012aToken from a previous response for pagination. Provide this to retrieve the next page of results.J\034eyJwYWdlIjoyLCJsaW1pdCI6MzB9' _globals['_SEARCHORGANIZATIONUSERSRESPONSE'].fields_by_name['next_page_token']._loaded_options = None @@ -315,15 +315,15 @@ _globals['_USERSERVICE'].methods_by_name['GetUser']._loaded_options = None _globals['_USERSERVICE'].methods_by_name['GetUser']._serialized_options = b'\222A\301\002\n\005Users\022\010Get user\032\216\001Retrieves all details for a user by system-generated user ID or external ID. The response includes organization memberships and user metadata.J\234\001\n\003200\022\224\001\njUser details retrieved successfully. Returns full user object with system-generated fields and timestamps.\022&\n$\032\".scalekit.v1.users.GetUserResponse\202\265\030\002\030T\202\323\344\223\002\024\022\022/api/v1/users/{id}' _globals['_USERSERVICE'].methods_by_name['GetCurrentUser']._loaded_options = None - _globals['_USERSERVICE'].methods_by_name['GetCurrentUser']._serialized_options = b'\222A\237\002\n\005Users\022\026Get authenticated user\032\236\001Retrieves details for the currently authenticated user. Returns the same user object as GetUser but uses the authenticated user\'s ID from the session context.J]\n\003200\022V\n,Current user details retrieved successfully.\022&\n$\032\".scalekit.v1.users.GetUserResponse\202\265\030\002\030\020\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\024\022\022/api/v1/users:this' + _globals['_USERSERVICE'].methods_by_name['GetCurrentUser']._serialized_options = b'\222A\246\002\n\005Users\022\026Get authenticated user\032\236\001Retrieves details for the currently authenticated user. Returns the same user object as GetUser but uses the authenticated user\'s ID from the session context.Jd\n\003200\022]\n,Current user details retrieved successfully.\022-\n+\032).scalekit.v1.users.GetCurrentUserResponse\202\265\030\002\030\030\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002(\022\022/api/v1/users:thisZ\022\022\020/api/v1/users/me' _globals['_USERSERVICE'].methods_by_name['GetSupportHash']._loaded_options = None - _globals['_USERSERVICE'].methods_by_name['GetSupportHash']._serialized_options = b'\222A\337\001\n\005Users\022\020Get support hash\032fRetrieves the support email hash for the current logged in user, used for the Scalekit support system.J\\\n\003200\022U\n$Support hash retrieved successfully.\022-\n+\032).scalekit.v1.users.GetSupportHashResponse\202\265\030\002\030P\202\323\344\223\002\034\022\032/api/v1/users/support-hash' + _globals['_USERSERVICE'].methods_by_name['GetSupportHash']._serialized_options = b'\222A\337\001\n\005Users\022\020Get support hash\032fRetrieves the support email hash for the current logged in user, used for the Scalekit support system.J\\\n\003200\022U\n$Support hash retrieved successfully.\022-\n+\032).scalekit.v1.users.GetSupportHashResponse\202\265\030\002\030P\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\034\022\032/api/v1/users/support-hash' _globals['_USERSERVICE'].methods_by_name['ListUsers']._loaded_options = None _globals['_USERSERVICE'].methods_by_name['ListUsers']._serialized_options = b'\222A\250\003\n\005Users\022\035List all users in environment\032\274\002Retrieves a paginated list of all users across your entire environment. Use this endpoint to view all users regardless of their organization memberships. This is useful for administrative purposes, user audits, or when you need to see all users in your Scalekit environment. Supports pagination for large user bases.JA\n\003200\022:\n\016List of users.\022(\n&\032$.scalekit.v1.users.ListUsersResponse\202\265\030\002\030D\202\323\344\223\002\017\022\r/api/v1/users' _globals['_USERSERVICE'].methods_by_name['SearchUsers']._loaded_options = None - _globals['_USERSERVICE'].methods_by_name['SearchUsers']._serialized_options = b'\222A\267\002\n\005Users\022\014Search users\032\205\001Searches for users in the environment by email, user ID, or external ID. Returns all users that match the query. Supports pagination.J\227\001\n\003200\022\217\001\naReturns a list of matching users and a page token for pagination if there are additional results.\022*\n(\032&.scalekit.v1.users.SearchUsersResponse\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\026\022\024/api/v1/users:search' + _globals['_USERSERVICE'].methods_by_name['SearchUsers']._serialized_options = b'\222A\263\004\n\005Users\022\014Search users\032\257\002Searches for users across the entire environment by email address, user ID, or external ID. The query must be at least 3 characters and is case-insensitive. Returns a paginated list of matching users with up to 30 results per page. Use the next_page_token from the response to retrieve subsequent pages.J\214\001\n\003200\022\204\001\nVMatching users returned; includes pagination cursors for navigating large result sets.\022*\n(\032&.scalekit.v1.users.SearchUsersResponseJ[\n\003400\022T\nRBad Request - query must be at least 3 characters and no more than 100 characters.\202\265\030\002\030D\202\323\344\223\002\026\022\024/api/v1/users:search' _globals['_USERSERVICE'].methods_by_name['SearchOrganizationUsers']._loaded_options = None - _globals['_USERSERVICE'].methods_by_name['SearchOrganizationUsers']._serialized_options = b'\222A\210\003\n\005Users\022\031Search organization users\032\245\001Searches for users within a specific organization by email, user ID, or external ID. Returns all users in the organization that match the query. Supports pagination.J\273\001\n\003200\022\263\001\nyReturns a list of matching users within the organization and a page token for pagination if there are additional results.\0226\n4\0322.scalekit.v1.users.SearchOrganizationUsersResponse\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\0026\0224/api/v1/organizations/{organization_id}/users:search' + _globals['_USERSERVICE'].methods_by_name['SearchOrganizationUsers']._serialized_options = b'\222A\207\006\n\005Users\022\031Search organization users\032\343\002Searches for users within a specific organization by email address, user ID, or external ID. The query must be at least 3 characters and is case-insensitive. Scopes results strictly to the given organization. Returns a paginated list of matching users with up to 30 results per page. Use the next_page_token from the response to retrieve subsequent pages.J\260\001\n\003200\022\250\001\nnMatching users within the organization returned; includes pagination cursors for navigating large result sets.\0226\n4\0322.scalekit.v1.users.SearchOrganizationUsersResponseJ\233\001\n\003400\022\223\001\n\220\001Bad Request - query must be at least 3 characters and no more than 100 characters, and organization_id must be a valid org_ prefixed identifier.J,\n\003404\022%\n#Not Found - organization not found.\202\265\030\002\030D\202\323\344\223\0026\0224/api/v1/organizations/{organization_id}/users:search' _globals['_USERSERVICE'].methods_by_name['UpdateUser']._loaded_options = None _globals['_USERSERVICE'].methods_by_name['UpdateUser']._serialized_options = b'\222A\220\004\n\005Users\022\027Update user information\032\341\002Modifies user account information including profile details, metadata, and external ID. Use this endpoint to update a user\'s personal information, contact details, or custom metadata. You can update the user\'s profile, phone number, and metadata fields. Note that fields like user ID, email address, environment ID, and creation time cannot be modified.J\211\001\n\003200\022\201\001\nTUser updated successfully. Returns the modified user object with updated timestamps.\022)\n\'\032%.scalekit.v1.users.UpdateUserResponse\202\265\030\002\030T\202\323\344\223\002\0322\022/api/v1/users/{id}:\004user' _globals['_USERSERVICE'].methods_by_name['DeleteUser']._loaded_options = None @@ -339,7 +339,7 @@ _globals['_USERSERVICE'].methods_by_name['ListOrganizationUsers']._loaded_options = None _globals['_USERSERVICE'].methods_by_name['ListOrganizationUsers']._serialized_options = b'\222A\247\003\n\005Users\022\027List organization users\032\207\002Retrieves a paginated list of all users who are members of the specified organization. Use this endpoint to view all users with access to a particular organization, including their roles, metadata, and membership details. Supports pagination for large user lists.J{\n\003200\022t\n\n\x05items\x18\x08 \x03(\x0b\x32(.scalekit.v1.workspaces.SubscriptionItemR\x05items\"\xe1\x01\n\x10SubscriptionItem\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x19\n\x08price_id\x18\x02 \x01(\tR\x07priceId\x12\x1a\n\x08quantity\x18\x03 \x01(\x03R\x08quantity\x12\x45\n\x07product\x18\x04 \x01(\x0b\x32+.scalekit.v1.workspaces.SubscriptionProductR\x07product\x12?\n\x05price\x18\x05 \x01(\x0b\x32).scalekit.v1.workspaces.SubscriptionPriceR\x05price\"s\n\x13SubscriptionProduct\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x16\n\x06\x61\x63tive\x18\x04 \x01(\x08R\x06\x61\x63tive\"\xba\x02\n\x11SubscriptionPrice\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\x12\x12\n\x04type\x18\x03 \x01(\tR\x04type\x12\x1a\n\x08interval\x18\x04 \x01(\tR\x08interval\x12%\n\x0e\x62illing_scheme\x18\x05 \x01(\tR\rbillingScheme\x12\x1d\n\nusage_type\x18\x06 \x01(\tR\tusageType\x12\x37\n\x05tiers\x18\x07 \x03(\x0b\x32!.scalekit.v1.workspaces.PriceTierR\x05tiers\x12\x1f\n\x0btotal_usage\x18\x08 \x01(\x03R\ntotalUsage\x12-\n\x12\x61ggregation_method\x18\t \x01(\tR\x11\x61ggregationMethod\"8\n\tPriceTier\x12\x13\n\x05up_to\x18\x01 \x01(\x03R\x04upTo\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\"\x97\x03\n\x0e\x43urrentInvoice\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\x12=\n\x06status\x18\x04 \x01(\x0e\x32%.scalekit.v1.workspaces.InvoiceStatusR\x06status\x12\x35\n\x08\x64ue_date\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x64ueDate\x12;\n\x0bissued_date\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nissuedDate\x12H\n\x12\x62illing_start_date\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x10\x62illingStartDate\x12\x44\n\x10\x62illing_end_date\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0e\x62illingEndDate\"\x84\x02\n\x0bLastInvoice\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\x12=\n\x06status\x18\x04 \x01(\x0e\x32%.scalekit.v1.workspaces.InvoiceStatusR\x06status\x12\x35\n\x08\x64ue_date\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x64ueDate\x12;\n\x0bissued_date\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nissuedDate\"\xe6\x03\n\rPaymentMethod\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x37\n\x04type\x18\x02 \x01(\x0e\x32#.scalekit.v1.workspaces.PaymentTypeR\x04type\x12%\n\x0e\x61\x63\x63ount_number\x18\x03 \x01(\tR\raccountNumber\x12!\n\x0c\x61\x63\x63ount_type\x18\x04 \x01(\tR\x0b\x61\x63\x63ountType\x12\x43\n\x06status\x18\x05 \x01(\x0e\x32+.scalekit.v1.workspaces.PaymentMethodStatusR\x06status\x12!\n\x0c\x61\x63\x63ount_name\x18\x06 \x01(\tR\x0b\x61\x63\x63ountName\x12\x99\x01\n\x0cpayment_info\x18\x07 \x03(\x0b\x32\x36.scalekit.v1.workspaces.PaymentMethod.PaymentInfoEntryB>\xbaH;\x9a\x01\x38\x10\x05\",r*R\x05\x62randR\x05last4R\texp_monthR\x08\x65xp_yearR\x05\x65mail*\x06r\x04\x10\x01\x18@R\x0bpaymentInfo\x1a>\n\x10PaymentInfoEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xcf\x01\n\x12\x42illingContactInfo\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n\x05\x65mail\x18\x02 \x01(\tR\x05\x65mail\x12\x14\n\x05line1\x18\x03 \x01(\tR\x05line1\x12\x14\n\x05line2\x18\x04 \x01(\tR\x05line2\x12\x12\n\x04\x63ity\x18\x05 \x01(\tR\x04\x63ity\x12\x14\n\x05state\x18\x06 \x01(\tR\x05state\x12\x1f\n\x0bpostal_code\x18\x07 \x01(\tR\npostalCode\x12\x18\n\x07\x63ountry\x18\x08 \x01(\tR\x07\x63ountry\"\x99\x01\n\x05\x41\x64\x64on\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x1a\n\x08\x66\x65\x61tures\x18\x04 \x03(\tR\x08\x66\x65\x61tures\x12\x18\n\x07\x65nabled\x18\x05 \x01(\x08R\x07\x65nabled\x12\x14\n\x05price\x18\x06 \x01(\x01R\x05price\x12\x1a\n\x08\x63urrency\x18\x07 \x01(\tR\x08\x63urrencyJ\x04\x08\x03\x10\x04\"\x18\n\x16GetProductUsageRequest\"\x9a\x01\n\x17GetProductUsageResponse\x12@\n\x08products\x18\x01 \x03(\x0b\x32$.scalekit.v1.workspaces.ProductUsageR\x08products\x12!\n\x0ctotal_amount\x18\x02 \x01(\x01R\x0btotalAmount\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\"\xba\x02\n\x0cProductUsage\x12\x1d\n\nproduct_id\x18\x01 \x01(\tR\tproductId\x12!\n\x0cproduct_name\x18\x02 \x01(\tR\x0bproductName\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x37\n\x05tiers\x18\x04 \x03(\x0b\x32!.scalekit.v1.workspaces.UsageTierR\x05tiers\x12!\n\x0ctotal_amount\x18\x05 \x01(\x01R\x0btotalAmount\x12\x1f\n\x0btotal_count\x18\x06 \x01(\x01R\ntotalCount\x12\x1a\n\x08\x63urrency\x18\x07 \x01(\tR\x08\x63urrency\x12-\n\x12\x61ggregation_method\x18\x08 \x01(\tR\x11\x61ggregationMethod\"\xf4\x01\n\tUsageTier\x12\x1b\n\ttier_name\x18\x01 \x01(\tR\x08tierName\x12#\n\rcurrent_count\x18\x02 \x01(\x03R\x0c\x63urrentCount\x12\x32\n\x15total_available_count\x18\x03 \x01(\x03R\x13totalAvailableCount\x12\x33\n\x16price_for_current_tier\x18\x04 \x01(\x01R\x13priceForCurrentTier\x12\x1a\n\x08\x63urrency\x18\x05 \x01(\tR\x08\x63urrency\x12 \n\x0cis_free_tier\x18\x06 \x01(\x08R\nisFreeTier\"\x1a\n\x18GetProductCatalogRequest\"]\n\x19GetProductCatalogResponse\x12@\n\x07\x63\x61talog\x18\x01 \x01(\x0b\x32&.scalekit.v1.workspaces.ProductCatalogR\x07\x63\x61talog\"X\n\x0eProductCatalog\x12\x46\n\x08products\x18\x01 \x03(\x0b\x32*.scalekit.v1.workspaces.ProductCatalogItemR\x08products\"\xb7\x01\n\x12ProductCatalogItem\x12@\n\x07product\x18\x01 \x01(\x0b\x32&.scalekit.v1.workspaces.CatalogProductR\x07product\x12<\n\x06prices\x18\x02 \x03(\x0b\x32$.scalekit.v1.workspaces.CatalogPriceR\x06prices\x12!\n\x0c\x62illing_type\x18\x03 \x01(\tR\x0b\x62illingType\"\xc2\x02\n\x0e\x43\x61talogProduct\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x16\n\x06\x61\x63tive\x18\x04 \x01(\x08R\x06\x61\x63tive\x12k\n\x08metadata\x18\x05 \x03(\x0b\x32\x34.scalekit.v1.workspaces.CatalogProduct.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12(\n\x10\x64\x65\x66\x61ult_price_id\x18\x06 \x01(\tR\x0e\x64\x65\x66\x61ultPriceId\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x81\x02\n\x0c\x43\x61talogPrice\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\x12\x12\n\x04type\x18\x04 \x01(\tR\x04type\x12\x1a\n\x08interval\x18\x05 \x01(\tR\x08interval\x12%\n\x0e\x62illing_scheme\x18\x06 \x01(\tR\rbillingScheme\x12\x1d\n\nusage_type\x18\x07 \x01(\tR\tusageType\x12\x37\n\x05tiers\x18\x08 \x03(\x0b\x32!.scalekit.v1.workspaces.PriceTierR\x05tiers\"\xdb\x01\n\x16\x41\x64\x64SubscriptionRequest\x12!\n\x0cproduct_name\x18\x01 \x01(\tR\x0bproductName\x12\x1d\n\nproduct_id\x18\x02 \x01(\tR\tproductId:\x7f\xbaH|\x1az\n\x12product_name_or_id\x12\x32\x65ither product_id or product_name must be provided\x1a\x30this.product_id != \'\' || this.product_name != \'\'\"}\n\x17\x41\x64\x64SubscriptionResponse\x12\'\n\x0fsubscription_id\x18\x01 \x01(\tR\x0esubscriptionId\x12\x1d\n\nproduct_id\x18\x02 \x01(\tR\tproductId\x12\x1a\n\x08quantity\x18\x03 \x01(\x03R\x08quantity\"\xe5\x02\n\x1c\x43reateCheckoutSessionRequest\x12?\n\x04mode\x18\x01 \x01(\x0e\x32+.scalekit.v1.workspaces.CheckoutSessionModeR\x04mode\x12\"\n\nreturn_url\x18\x02 \x01(\tH\x00R\treturnUrl\x88\x01\x01\x12$\n\x0bsuccess_url\x18\x03 \x01(\tH\x01R\nsuccessUrl\x88\x01\x01\x12\x37\n\x07ui_mode\x18\x04 \x01(\x0e\x32\x1e.scalekit.v1.workspaces.UiModeR\x06uiMode\x12\x62\n\x16redirect_on_completion\x18\x05 \x01(\x0e\x32,.scalekit.v1.workspaces.RedirectOnCompletionR\x14redirectOnCompletionB\r\n\x0b_return_urlB\x0e\n\x0c_success_url\"s\n\x1d\x43reateCheckoutSessionResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12#\n\rclient_secret\x18\x02 \x01(\tR\x0c\x63lientSecret\x12\x15\n\x03url\x18\x03 \x01(\tH\x00R\x03url\x88\x01\x01\x42\x06\n\x04_url\"Z\n\x1dUpdateWorkspaceContextRequest\x12\x39\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\x06\xbaH\x03\xc8\x01\x01R\x07\x63ontext\"S\n\x1eUpdateWorkspaceContextResponse\x12\x31\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext*\xaf\x01\n\x19\x42illingSubscriptionStatus\x12+\n\'BILLING_SUBSCRIPTION_STATUS_UNSPECIFIED\x10\x00\x12\x1f\n\x1b\x42ILLING_SUBSCRIPTION_ACTIVE\x10\x01\x12!\n\x1d\x42ILLING_SUBSCRIPTION_CANCELED\x10\x02\x12!\n\x1d\x42ILLING_SUBSCRIPTION_PAST_DUE\x10\x03*y\n\rInvoiceStatus\x12\x1e\n\x1aINVOICE_STATUS_UNSPECIFIED\x10\x00\x12\x10\n\x0cINVOICE_PAID\x10\x01\x12\x0f\n\x0bINVOICE_DUE\x10\x02\x12\x13\n\x0fINVOICE_OVERDUE\x10\x03\x12\x10\n\x0cINVOICE_VOID\x10\x04*j\n\x0bPaymentType\x12\x1c\n\x18PAYMENT_TYPE_UNSPECIFIED\x10\x00\x12\x08\n\x04\x43\x41RD\x10\x01\x12\x10\n\x0c\x42\x41NK_ACCOUNT\x10\x02\x12\x0b\n\x07OFFLINE\x10\x03\x12\x08\n\x04LINK\x10\x04\x12\n\n\x06PAYPAL\x10\x05*\x8e\x01\n\x13PaymentMethodStatus\x12%\n!PAYMENT_METHOD_STATUS_UNSPECIFIED\x10\x00\x12\x19\n\x15PAYMENT_METHOD_ACTIVE\x10\x01\x12\x1a\n\x16PAYMENT_METHOD_EXPIRED\x10\x02\x12\x19\n\x15PAYMENT_METHOD_FAILED\x10\x03*f\n\x14RedirectOnCompletion\x12&\n\"REDIRECT_ON_COMPLETION_UNSPECIFIED\x10\x00\x12\t\n\x05never\x10\x01\x12\n\n\x06\x61lways\x10\x02\x12\x0f\n\x0bif_required\x10\x03*G\n\x06UiMode\x12\x17\n\x13UI_MODE_UNSPECIFIED\x10\x00\x12\x0c\n\x08\x65mbedded\x10\x01\x12\n\n\x06hosted\x10\x02\x12\n\n\x06\x63ustom\x10\x03*f\n\x13\x43heckoutSessionMode\x12%\n!CHECKOUT_SESSION_MODE_UNSPECIFIED\x10\x00\x12\t\n\x05setup\x10\x01\x12\x10\n\x0csubscription\x10\x02\x12\x0b\n\x07payment\x10\x03\x32\xc9\x15\n\x10WorkspaceService\x12\x9b\x01\n\x0f\x43reateWorkspace\x12..scalekit.v1.workspaces.CreateWorkspaceRequest\x1a/.scalekit.v1.workspaces.CreateWorkspaceResponse\"\'\x82\xb5\x18\x02\x18\x01\x82\xd3\xe4\x93\x02\x1b\"\x0e/api/v1/signup:\tworkspace\x12\x90\x01\n\x0cGetWorkspace\x12+.scalekit.v1.workspaces.GetWorkspaceRequest\x1a,.scalekit.v1.workspaces.GetWorkspaceResponse\"%\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x19\x12\x17/api/v1/workspaces/{id}\x12\x9e\x01\n\x13GetCurrentWorkspace\x12\x32.scalekit.v1.workspaces.GetCurrentWorkspaceRequest\x1a,.scalekit.v1.workspaces.GetWorkspaceResponse\"%\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x19\x12\x17/api/v1/workspaces:this\x12\xa4\x01\n\x0fUpdateWorkspace\x12..scalekit.v1.workspaces.UpdateWorkspaceRequest\x1a/.scalekit.v1.workspaces.UpdateWorkspaceResponse\"0\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02$2\x17/api/v1/workspaces/{id}:\tworkspace\x12\x90\x01\n\x10OnboardWorkspace\x12/.scalekit.v1.workspaces.OnboardWorkspaceRequest\x1a\x16.google.protobuf.Empty\"3\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\'2\x1a/api/v1/workspaces:onboard:\tworkspace\x12\xb2\x01\n\x16UpdateCurrentWorkspace\x12\x35.scalekit.v1.workspaces.UpdateCurrentWorkspaceRequest\x1a/.scalekit.v1.workspaces.UpdateWorkspaceResponse\"0\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02$2\x17/api/v1/workspaces:this:\tworkspace\x12\xcd\x01\n\x19GetWorkspaceSubscriptions\x12\x38.scalekit.v1.workspaces.GetWorkspaceSubscriptionsRequest\x1a\x39.scalekit.v1.workspaces.GetWorkspaceSubscriptionsResponse\";\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02/\x12-/api/v1/workspaces/{id}/billing/subscriptions\x12\xca\x01\n\x18GetWorkspacePricingTable\x12\x37.scalekit.v1.workspaces.GetWorkspacePricingTableRequest\x1a\x38.scalekit.v1.workspaces.GetWorkspacePricingTableResponse\";\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02/\x12-/api/v1/workspaces/{id}/billing/pricing-table\x12\xc3\x01\n\x10GetBillingPortal\x12/.scalekit.v1.workspaces.GetBillingPortalRequest\x1a\x30.scalekit.v1.workspaces.GetBillingPortalResponse\"L\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\x12//api/v1/workspaces:this/billing/customer-portal\x12\xb2\x01\n\x0eGetBillingInfo\x12-.scalekit.v1.workspaces.GetBillingInfoRequest\x1a..scalekit.v1.workspaces.GetBillingInfoResponse\"A\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02&\x12$/api/v1/workspaces:this/billing:info\x12\xbe\x01\n\x0fGetProductUsage\x12..scalekit.v1.workspaces.GetProductUsageRequest\x1a/.scalekit.v1.workspaces.GetProductUsageResponse\"J\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02/\x12-/api/v1/workspaces:this/billing:product-usage\x12\xb5\x01\n\x11GetProductCatalog\x12\x30.scalekit.v1.workspaces.GetProductCatalogRequest\x1a\x31.scalekit.v1.workspaces.GetProductCatalogResponse\";\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02 \x12\x1e/api/v1/billing/productcatalog\x12\xc5\x01\n\x0f\x41\x64\x64Subscription\x12..scalekit.v1.workspaces.AddSubscriptionRequest\x1a/.scalekit.v1.workspaces.AddSubscriptionResponse\"Q\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x36\"1/api/v1/workspaces:this/billing/subscriptions:add:\x01*\x12\xd7\x01\n\x15\x43reateCheckoutSession\x12\x34.scalekit.v1.workspaces.CreateCheckoutSessionRequest\x1a\x35.scalekit.v1.workspaces.CreateCheckoutSessionResponse\"Q\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x36\"1/api/v1/workspaces:this/billing/checkout_sessions:\x01*\x12\xc0\x01\n\x16UpdateWorkspaceContext\x12\x35.scalekit.v1.workspaces.UpdateWorkspaceContextRequest\x1a\x36.scalekit.v1.workspaces.UpdateWorkspaceContextResponse\"7\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02+\" /api/v1/workspaces:this/contexts:\x07\x63ontextB6Z4github.com/scalekit-inc/scalekit/pkg/grpc/workspacesb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'scalekit/v1/workspaces/workspaces.proto\x12\x16scalekit.v1.workspaces\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/domains/domains.proto\x1a!scalekit/v1/options/options.proto\"\xa6\x01\n\x15WorkspaceExtendedInfo\x12\'\n\x0fpayment_overdue\x18\x01 \x01(\x08R\x0epaymentOverdue\x12\x34\n\x16payment_method_present\x18\x02 \x01(\x08R\x14paymentMethodPresent\x12.\n\x13\x66ree_quota_exceeded\x18\x03 \x01(\x08R\x11\x66reeQuotaExceeded\"\xcc\x05\n\tWorkspace\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12;\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12;\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nupdateTime\x12-\n\x0c\x64isplay_name\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12@\n\x0bregion_code\x18\x06 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeR\nregionCode\x12R\n\rextended_info\x18\x07 \x01(\x0b\x32-.scalekit.v1.workspaces.WorkspaceExtendedInfoR\x0c\x65xtendedInfo\x12.\n\x13\x62illing_customer_id\x18\x08 \x01(\tR\x11\x62illingCustomerId\x12\x36\n\x17\x62illing_subscription_id\x18\t \x01(\tR\x15\x62illingSubscriptionId\x12]\n\x0b\x61uth_domain\x18\n \x01(\tB<\x92\x41\x36\x32 Auth Domain of current workspaceJ\x12\"auth.example.com\"\xe0\x41\x03R\nauthDomain\x12\x98\x01\n\ndeployment\x18\x0b \x01(\tBx\x92\x41r2hSystem-generated deployment environment (staging or prod). Read-only; clients should not set this field.J\x06\"prod\"\xe0\x41\x03R\ndeployment\"\xa0\x01\n\x0f\x43reateWorkspace\x12V\n\x05\x65mail\x18\x01 \x01(\tB@\xbaH=\xba\x01:\n\x0bvalid_email\x12\x1b\x65mail must be a valid email\x1a\x0ethis.isEmail()R\x05\x65mail\x12)\n\x07\x63ompany\x18\x02 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x02H\x00R\x07\x63ompany\x88\x01\x01\x42\n\n\x08_company\"@\n\x0fUpdateWorkspace\x12-\n\x0c\x64isplay_name\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x0b\x64isplayName\"\x9c\x03\n\x10OnboardWorkspace\x12@\n\x16workspace_display_name\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x14workspaceDisplayName\x12\x32\n\x0fuser_given_name\x18\x02 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x02R\ruserGivenName\x12(\n\x10user_family_name\x18\x03 \x01(\tR\x0euserFamilyName\x12\xaa\x01\n\x13\x61uthentication_mode\x18\x04 \x01(\x0e\x32\'.scalekit.v1.commons.AuthenticationModeBP\x92\x41M2KThe authentication mode for the environment. The default is FULL_STACK_AUTHR\x12\x61uthenticationMode\x12;\n\x1a\x65nable_allowed_domain_join\x18\x05 \x01(\x08R\x17\x65nableAllowedDomainJoin\"g\n\x16\x43reateWorkspaceRequest\x12M\n\tworkspace\x18\x01 \x01(\x0b\x32\'.scalekit.v1.workspaces.CreateWorkspaceB\x06\xbaH\x03\xc8\x01\x01R\tworkspace\"n\n\x17\x43reateWorkspaceResponse\x12?\n\tworkspace\x18\x01 \x01(\x0b\x32!.scalekit.v1.workspaces.WorkspaceR\tworkspace\x12\x12\n\x04link\x18\x02 \x01(\tR\x04link\"\x87\x01\n\x16UpdateWorkspaceRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03wksR\x02id\x12M\n\tworkspace\x18\x02 \x01(\x0b\x32\'.scalekit.v1.workspaces.UpdateWorkspaceB\x06\xbaH\x03\xc8\x01\x01R\tworkspace\"i\n\x17OnboardWorkspaceRequest\x12N\n\tworkspace\x18\x02 \x01(\x0b\x32(.scalekit.v1.workspaces.OnboardWorkspaceB\x06\xbaH\x03\xc8\x01\x01R\tworkspace\"n\n\x1dUpdateCurrentWorkspaceRequest\x12M\n\tworkspace\x18\x01 \x01(\x0b\x32\'.scalekit.v1.workspaces.UpdateWorkspaceB\x06\xbaH\x03\xc8\x01\x01R\tworkspace\"Z\n\x17UpdateWorkspaceResponse\x12?\n\tworkspace\x18\x01 \x01(\x0b\x32!.scalekit.v1.workspaces.WorkspaceR\tworkspace\"5\n\x13GetWorkspaceRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03wksR\x02id\"\x1c\n\x1aGetCurrentWorkspaceRequest\"\x8f\x01\n\x14GetWorkspaceResponse\x12?\n\tworkspace\x18\x01 \x01(\x0b\x32!.scalekit.v1.workspaces.WorkspaceR\tworkspace\x12\x36\n\x07\x63ontext\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructB\x03\xe0\x41\x03R\x07\x63ontext\"d\n\x17GetBillingPortalRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x02id\x12 \n\tflow_type\x18\x02 \x01(\tH\x00R\x08\x66lowType\x88\x01\x01\x42\x0c\n\n_flow_type\"<\n\x18GetBillingPortalResponse\x12\x10\n\x03url\x18\x01 \x01(\tR\x03url\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\"A\n\x1fGetWorkspacePricingTableRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03wksR\x02id\"\x82\x02\n GetWorkspacePricingTableResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12(\n\x10pricing_table_id\x18\x02 \x01(\tR\x0epricingTableId\x12+\n\x11publishable_token\x18\x03 \x01(\tR\x10publishableToken\x12\x43\n\x1e\x63ustomer_session_client_secret\x18\x04 \x01(\tR\x1b\x63ustomerSessionClientSecret\x12\x32\n\x06\x65xpiry\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x06\x65xpiry\"B\n GetWorkspaceSubscriptionsRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03wksR\x02id\"\x8f\x01\n!GetWorkspaceSubscriptionsResponse\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03wksR\x02id\x12J\n\rsubscriptions\x18\x02 \x03(\x0b\x32$.scalekit.v1.workspaces.SubscriptionR\rsubscriptions\"6\n\x0cSubscription\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12\x16\n\x06status\x18\x07 \x01(\tR\x06status\"8\n\x15GetBillingInfoRequest\x12\x1f\n\x0bonly_addons\x18\x01 \x01(\x08R\nonlyAddons\"`\n\x16GetBillingInfoResponse\x12\x46\n\x0c\x62illing_info\x18\x01 \x01(\x0b\x32#.scalekit.v1.workspaces.BillingInfoR\x0b\x62illingInfo\"\xde\x03\n\x0b\x42illingInfo\x12\x1b\n\tplan_name\x18\x01 \x01(\tR\x08planName\x12O\n\x0f\x63urrent_invoice\x18\x03 \x01(\x0b\x32&.scalekit.v1.workspaces.CurrentInvoiceR\x0e\x63urrentInvoice\x12L\n\x0epayment_method\x18\x04 \x01(\x0b\x32%.scalekit.v1.workspaces.PaymentMethodR\rpaymentMethod\x12\\\n\x14\x62illing_contact_info\x18\x05 \x01(\x0b\x32*.scalekit.v1.workspaces.BillingContactInfoR\x12\x62illingContactInfo\x12\x35\n\x06\x61\x64\x64ons\x18\x06 \x03(\x0b\x32\x1d.scalekit.v1.workspaces.AddonR\x06\x61\x64\x64ons\x12\x46\n\x0clast_invoice\x18\x07 \x01(\x0b\x32#.scalekit.v1.workspaces.LastInvoiceR\x0blastInvoice\x12\x30\n\x11publishable_token\x18\x08 \x01(\tB\x03\xe0\x41\x03R\x10publishableTokenJ\x04\x08\x02\x10\x03\"\xd6\x02\n\x13\x42illingSubscription\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12I\n\x06status\x18\x03 \x01(\x0e\x32\x31.scalekit.v1.workspaces.BillingSubscriptionStatusR\x06status\x12\x39\n\nstart_date\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartDate\x12\x35\n\x08\x65nd_date\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x65ndDate\x12\x16\n\x06\x61mount\x18\x06 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x07 \x01(\tR\x08\x63urrency\x12>\n\x05items\x18\x08 \x03(\x0b\x32(.scalekit.v1.workspaces.SubscriptionItemR\x05items\"\xe1\x01\n\x10SubscriptionItem\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x19\n\x08price_id\x18\x02 \x01(\tR\x07priceId\x12\x1a\n\x08quantity\x18\x03 \x01(\x03R\x08quantity\x12\x45\n\x07product\x18\x04 \x01(\x0b\x32+.scalekit.v1.workspaces.SubscriptionProductR\x07product\x12?\n\x05price\x18\x05 \x01(\x0b\x32).scalekit.v1.workspaces.SubscriptionPriceR\x05price\"s\n\x13SubscriptionProduct\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x16\n\x06\x61\x63tive\x18\x04 \x01(\x08R\x06\x61\x63tive\"\xba\x02\n\x11SubscriptionPrice\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\x12\x12\n\x04type\x18\x03 \x01(\tR\x04type\x12\x1a\n\x08interval\x18\x04 \x01(\tR\x08interval\x12%\n\x0e\x62illing_scheme\x18\x05 \x01(\tR\rbillingScheme\x12\x1d\n\nusage_type\x18\x06 \x01(\tR\tusageType\x12\x37\n\x05tiers\x18\x07 \x03(\x0b\x32!.scalekit.v1.workspaces.PriceTierR\x05tiers\x12\x1f\n\x0btotal_usage\x18\x08 \x01(\x03R\ntotalUsage\x12-\n\x12\x61ggregation_method\x18\t \x01(\tR\x11\x61ggregationMethod\"8\n\tPriceTier\x12\x13\n\x05up_to\x18\x01 \x01(\x03R\x04upTo\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\"\x97\x03\n\x0e\x43urrentInvoice\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\x12=\n\x06status\x18\x04 \x01(\x0e\x32%.scalekit.v1.workspaces.InvoiceStatusR\x06status\x12\x35\n\x08\x64ue_date\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x64ueDate\x12;\n\x0bissued_date\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nissuedDate\x12H\n\x12\x62illing_start_date\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x10\x62illingStartDate\x12\x44\n\x10\x62illing_end_date\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0e\x62illingEndDate\"\x84\x02\n\x0bLastInvoice\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\x12=\n\x06status\x18\x04 \x01(\x0e\x32%.scalekit.v1.workspaces.InvoiceStatusR\x06status\x12\x35\n\x08\x64ue_date\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x64ueDate\x12;\n\x0bissued_date\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nissuedDate\"\xe6\x03\n\rPaymentMethod\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x37\n\x04type\x18\x02 \x01(\x0e\x32#.scalekit.v1.workspaces.PaymentTypeR\x04type\x12%\n\x0e\x61\x63\x63ount_number\x18\x03 \x01(\tR\raccountNumber\x12!\n\x0c\x61\x63\x63ount_type\x18\x04 \x01(\tR\x0b\x61\x63\x63ountType\x12\x43\n\x06status\x18\x05 \x01(\x0e\x32+.scalekit.v1.workspaces.PaymentMethodStatusR\x06status\x12!\n\x0c\x61\x63\x63ount_name\x18\x06 \x01(\tR\x0b\x61\x63\x63ountName\x12\x99\x01\n\x0cpayment_info\x18\x07 \x03(\x0b\x32\x36.scalekit.v1.workspaces.PaymentMethod.PaymentInfoEntryB>\xbaH;\x9a\x01\x38\x10\x05\",r*R\x05\x62randR\x05last4R\texp_monthR\x08\x65xp_yearR\x05\x65mail*\x06r\x04\x10\x01\x18@R\x0bpaymentInfo\x1a>\n\x10PaymentInfoEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xcf\x01\n\x12\x42illingContactInfo\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n\x05\x65mail\x18\x02 \x01(\tR\x05\x65mail\x12\x14\n\x05line1\x18\x03 \x01(\tR\x05line1\x12\x14\n\x05line2\x18\x04 \x01(\tR\x05line2\x12\x12\n\x04\x63ity\x18\x05 \x01(\tR\x04\x63ity\x12\x14\n\x05state\x18\x06 \x01(\tR\x05state\x12\x1f\n\x0bpostal_code\x18\x07 \x01(\tR\npostalCode\x12\x18\n\x07\x63ountry\x18\x08 \x01(\tR\x07\x63ountry\"\x99\x01\n\x05\x41\x64\x64on\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x1a\n\x08\x66\x65\x61tures\x18\x04 \x03(\tR\x08\x66\x65\x61tures\x12\x18\n\x07\x65nabled\x18\x05 \x01(\x08R\x07\x65nabled\x12\x14\n\x05price\x18\x06 \x01(\x01R\x05price\x12\x1a\n\x08\x63urrency\x18\x07 \x01(\tR\x08\x63urrencyJ\x04\x08\x03\x10\x04\"\x18\n\x16GetProductUsageRequest\"\x9a\x01\n\x17GetProductUsageResponse\x12@\n\x08products\x18\x01 \x03(\x0b\x32$.scalekit.v1.workspaces.ProductUsageR\x08products\x12!\n\x0ctotal_amount\x18\x02 \x01(\x01R\x0btotalAmount\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\"\xba\x02\n\x0cProductUsage\x12\x1d\n\nproduct_id\x18\x01 \x01(\tR\tproductId\x12!\n\x0cproduct_name\x18\x02 \x01(\tR\x0bproductName\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x37\n\x05tiers\x18\x04 \x03(\x0b\x32!.scalekit.v1.workspaces.UsageTierR\x05tiers\x12!\n\x0ctotal_amount\x18\x05 \x01(\x01R\x0btotalAmount\x12\x1f\n\x0btotal_count\x18\x06 \x01(\x01R\ntotalCount\x12\x1a\n\x08\x63urrency\x18\x07 \x01(\tR\x08\x63urrency\x12-\n\x12\x61ggregation_method\x18\x08 \x01(\tR\x11\x61ggregationMethod\"\xf4\x01\n\tUsageTier\x12\x1b\n\ttier_name\x18\x01 \x01(\tR\x08tierName\x12#\n\rcurrent_count\x18\x02 \x01(\x03R\x0c\x63urrentCount\x12\x32\n\x15total_available_count\x18\x03 \x01(\x03R\x13totalAvailableCount\x12\x33\n\x16price_for_current_tier\x18\x04 \x01(\x01R\x13priceForCurrentTier\x12\x1a\n\x08\x63urrency\x18\x05 \x01(\tR\x08\x63urrency\x12 \n\x0cis_free_tier\x18\x06 \x01(\x08R\nisFreeTier\"\x1a\n\x18GetProductCatalogRequest\"]\n\x19GetProductCatalogResponse\x12@\n\x07\x63\x61talog\x18\x01 \x01(\x0b\x32&.scalekit.v1.workspaces.ProductCatalogR\x07\x63\x61talog\"X\n\x0eProductCatalog\x12\x46\n\x08products\x18\x01 \x03(\x0b\x32*.scalekit.v1.workspaces.ProductCatalogItemR\x08products\"\xb7\x01\n\x12ProductCatalogItem\x12@\n\x07product\x18\x01 \x01(\x0b\x32&.scalekit.v1.workspaces.CatalogProductR\x07product\x12<\n\x06prices\x18\x02 \x03(\x0b\x32$.scalekit.v1.workspaces.CatalogPriceR\x06prices\x12!\n\x0c\x62illing_type\x18\x03 \x01(\tR\x0b\x62illingType\"\xc2\x02\n\x0e\x43\x61talogProduct\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x16\n\x06\x61\x63tive\x18\x04 \x01(\x08R\x06\x61\x63tive\x12k\n\x08metadata\x18\x05 \x03(\x0b\x32\x34.scalekit.v1.workspaces.CatalogProduct.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12(\n\x10\x64\x65\x66\x61ult_price_id\x18\x06 \x01(\tR\x0e\x64\x65\x66\x61ultPriceId\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x81\x02\n\x0c\x43\x61talogPrice\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\x12\x12\n\x04type\x18\x04 \x01(\tR\x04type\x12\x1a\n\x08interval\x18\x05 \x01(\tR\x08interval\x12%\n\x0e\x62illing_scheme\x18\x06 \x01(\tR\rbillingScheme\x12\x1d\n\nusage_type\x18\x07 \x01(\tR\tusageType\x12\x37\n\x05tiers\x18\x08 \x03(\x0b\x32!.scalekit.v1.workspaces.PriceTierR\x05tiers\"\xdb\x01\n\x16\x41\x64\x64SubscriptionRequest\x12!\n\x0cproduct_name\x18\x01 \x01(\tR\x0bproductName\x12\x1d\n\nproduct_id\x18\x02 \x01(\tR\tproductId:\x7f\xbaH|\x1az\n\x12product_name_or_id\x12\x32\x65ither product_id or product_name must be provided\x1a\x30this.product_id != \'\' || this.product_name != \'\'\"}\n\x17\x41\x64\x64SubscriptionResponse\x12\'\n\x0fsubscription_id\x18\x01 \x01(\tR\x0esubscriptionId\x12\x1d\n\nproduct_id\x18\x02 \x01(\tR\tproductId\x12\x1a\n\x08quantity\x18\x03 \x01(\x03R\x08quantity\"\xe5\x02\n\x1c\x43reateCheckoutSessionRequest\x12?\n\x04mode\x18\x01 \x01(\x0e\x32+.scalekit.v1.workspaces.CheckoutSessionModeR\x04mode\x12\"\n\nreturn_url\x18\x02 \x01(\tH\x00R\treturnUrl\x88\x01\x01\x12$\n\x0bsuccess_url\x18\x03 \x01(\tH\x01R\nsuccessUrl\x88\x01\x01\x12\x37\n\x07ui_mode\x18\x04 \x01(\x0e\x32\x1e.scalekit.v1.workspaces.UiModeR\x06uiMode\x12\x62\n\x16redirect_on_completion\x18\x05 \x01(\x0e\x32,.scalekit.v1.workspaces.RedirectOnCompletionR\x14redirectOnCompletionB\r\n\x0b_return_urlB\x0e\n\x0c_success_url\"s\n\x1d\x43reateCheckoutSessionResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12#\n\rclient_secret\x18\x02 \x01(\tR\x0c\x63lientSecret\x12\x15\n\x03url\x18\x03 \x01(\tH\x00R\x03url\x88\x01\x01\x42\x06\n\x04_url\"Z\n\x1dUpdateWorkspaceContextRequest\x12\x39\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\x06\xbaH\x03\xc8\x01\x01R\x07\x63ontext\"S\n\x1eUpdateWorkspaceContextResponse\x12\x31\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext\" \n\x1eValidateWorkspaceDomainRequest\"a\n\x1c\x43reateWorkspaceDomainRequest\x12\x41\n\x06\x64omain\x18\x01 \x01(\x0b\x32!.scalekit.v1.domains.CreateDomainB\x06\xbaH\x03\xc8\x01\x01R\x06\x64omain\"T\n\x1d\x43reateWorkspaceDomainResponse\x12\x33\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainR\x06\x64omain\"\xd7\x01\n\x1bListWorkspaceDomainsRequest\x12\x38\n\tpage_size\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueR\x08pageSize\x12<\n\x0bpage_number\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueR\npageNumber\x12@\n\x0b\x64omain_type\x18\x03 \x01(\x0e\x32\x1f.scalekit.v1.domains.DomainTypeR\ndomainType\"\x93\x01\n\x1cListWorkspaceDomainsResponse\x12\x1b\n\tpage_size\x18\x01 \x01(\x05R\x08pageSize\x12\x1f\n\x0bpage_number\x18\x02 \x01(\x05R\npageNumber\x12\x35\n\x07\x64omains\x18\x03 \x03(\x0b\x32\x1b.scalekit.v1.domains.DomainR\x07\x64omains\":\n\x1c\x44\x65leteWorkspaceDomainRequest\x12\x1a\n\x02id\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x01R\x02id*\xaf\x01\n\x19\x42illingSubscriptionStatus\x12+\n\'BILLING_SUBSCRIPTION_STATUS_UNSPECIFIED\x10\x00\x12\x1f\n\x1b\x42ILLING_SUBSCRIPTION_ACTIVE\x10\x01\x12!\n\x1d\x42ILLING_SUBSCRIPTION_CANCELED\x10\x02\x12!\n\x1d\x42ILLING_SUBSCRIPTION_PAST_DUE\x10\x03*y\n\rInvoiceStatus\x12\x1e\n\x1aINVOICE_STATUS_UNSPECIFIED\x10\x00\x12\x10\n\x0cINVOICE_PAID\x10\x01\x12\x0f\n\x0bINVOICE_DUE\x10\x02\x12\x13\n\x0fINVOICE_OVERDUE\x10\x03\x12\x10\n\x0cINVOICE_VOID\x10\x04*j\n\x0bPaymentType\x12\x1c\n\x18PAYMENT_TYPE_UNSPECIFIED\x10\x00\x12\x08\n\x04\x43\x41RD\x10\x01\x12\x10\n\x0c\x42\x41NK_ACCOUNT\x10\x02\x12\x0b\n\x07OFFLINE\x10\x03\x12\x08\n\x04LINK\x10\x04\x12\n\n\x06PAYPAL\x10\x05*\x8e\x01\n\x13PaymentMethodStatus\x12%\n!PAYMENT_METHOD_STATUS_UNSPECIFIED\x10\x00\x12\x19\n\x15PAYMENT_METHOD_ACTIVE\x10\x01\x12\x1a\n\x16PAYMENT_METHOD_EXPIRED\x10\x02\x12\x19\n\x15PAYMENT_METHOD_FAILED\x10\x03*f\n\x14RedirectOnCompletion\x12&\n\"REDIRECT_ON_COMPLETION_UNSPECIFIED\x10\x00\x12\t\n\x05never\x10\x01\x12\n\n\x06\x61lways\x10\x02\x12\x0f\n\x0bif_required\x10\x03*G\n\x06UiMode\x12\x17\n\x13UI_MODE_UNSPECIFIED\x10\x00\x12\x0c\n\x08\x65mbedded\x10\x01\x12\n\n\x06hosted\x10\x02\x12\n\n\x06\x63ustom\x10\x03*f\n\x13\x43heckoutSessionMode\x12%\n!CHECKOUT_SESSION_MODE_UNSPECIFIED\x10\x00\x12\t\n\x05setup\x10\x01\x12\x10\n\x0csubscription\x10\x02\x12\x0b\n\x07payment\x10\x03\x32\x96\x1b\n\x10WorkspaceService\x12\x9b\x01\n\x0f\x43reateWorkspace\x12..scalekit.v1.workspaces.CreateWorkspaceRequest\x1a/.scalekit.v1.workspaces.CreateWorkspaceResponse\"\'\x82\xb5\x18\x02\x18\x01\x82\xd3\xe4\x93\x02\x1b\"\x0e/api/v1/signup:\tworkspace\x12\x90\x01\n\x0cGetWorkspace\x12+.scalekit.v1.workspaces.GetWorkspaceRequest\x1a,.scalekit.v1.workspaces.GetWorkspaceResponse\"%\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x19\x12\x17/api/v1/workspaces/{id}\x12\xad\x01\n\x13GetCurrentWorkspace\x12\x32.scalekit.v1.workspaces.GetCurrentWorkspaceRequest\x1a,.scalekit.v1.workspaces.GetWorkspaceResponse\"4\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\x12\x17/api/v1/workspaces:this\x12\xa4\x01\n\x0fUpdateWorkspace\x12..scalekit.v1.workspaces.UpdateWorkspaceRequest\x1a/.scalekit.v1.workspaces.UpdateWorkspaceResponse\"0\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02$2\x17/api/v1/workspaces/{id}:\tworkspace\x12\x90\x01\n\x10OnboardWorkspace\x12/.scalekit.v1.workspaces.OnboardWorkspaceRequest\x1a\x16.google.protobuf.Empty\"3\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\'2\x1a/api/v1/workspaces:onboard:\tworkspace\x12\xb2\x01\n\x16UpdateCurrentWorkspace\x12\x35.scalekit.v1.workspaces.UpdateCurrentWorkspaceRequest\x1a/.scalekit.v1.workspaces.UpdateWorkspaceResponse\"0\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02$2\x17/api/v1/workspaces:this:\tworkspace\x12\xcd\x01\n\x19GetWorkspaceSubscriptions\x12\x38.scalekit.v1.workspaces.GetWorkspaceSubscriptionsRequest\x1a\x39.scalekit.v1.workspaces.GetWorkspaceSubscriptionsResponse\";\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02/\x12-/api/v1/workspaces/{id}/billing/subscriptions\x12\xca\x01\n\x18GetWorkspacePricingTable\x12\x37.scalekit.v1.workspaces.GetWorkspacePricingTableRequest\x1a\x38.scalekit.v1.workspaces.GetWorkspacePricingTableResponse\";\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02/\x12-/api/v1/workspaces/{id}/billing/pricing-table\x12\xc3\x01\n\x10GetBillingPortal\x12/.scalekit.v1.workspaces.GetBillingPortalRequest\x1a\x30.scalekit.v1.workspaces.GetBillingPortalResponse\"L\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\x12//api/v1/workspaces:this/billing/customer-portal\x12\xb2\x01\n\x0eGetBillingInfo\x12-.scalekit.v1.workspaces.GetBillingInfoRequest\x1a..scalekit.v1.workspaces.GetBillingInfoResponse\"A\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02&\x12$/api/v1/workspaces:this/billing:info\x12\xbe\x01\n\x0fGetProductUsage\x12..scalekit.v1.workspaces.GetProductUsageRequest\x1a/.scalekit.v1.workspaces.GetProductUsageResponse\"J\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02/\x12-/api/v1/workspaces:this/billing:product-usage\x12\xb5\x01\n\x11GetProductCatalog\x12\x30.scalekit.v1.workspaces.GetProductCatalogRequest\x1a\x31.scalekit.v1.workspaces.GetProductCatalogResponse\";\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02 \x12\x1e/api/v1/billing/productcatalog\x12\xc5\x01\n\x0f\x41\x64\x64Subscription\x12..scalekit.v1.workspaces.AddSubscriptionRequest\x1a/.scalekit.v1.workspaces.AddSubscriptionResponse\"Q\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x36\"1/api/v1/workspaces:this/billing/subscriptions:add:\x01*\x12\xd7\x01\n\x15\x43reateCheckoutSession\x12\x34.scalekit.v1.workspaces.CreateCheckoutSessionRequest\x1a\x35.scalekit.v1.workspaces.CreateCheckoutSessionResponse\"Q\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x36\"1/api/v1/workspaces:this/billing/checkout_sessions:\x01*\x12\xcf\x01\n\x16UpdateWorkspaceContext\x12\x35.scalekit.v1.workspaces.UpdateWorkspaceContextRequest\x1a\x36.scalekit.v1.workspaces.UpdateWorkspaceContextResponse\"F\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02+\" /api/v1/workspaces:this/contexts:\x07\x63ontext\x12\xb0\x01\n\x14ListWorkspaceDomains\x12\x33.scalekit.v1.workspaces.ListWorkspaceDomainsRequest\x1a\x34.scalekit.v1.workspaces.ListWorkspaceDomainsResponse\"-\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02!\x12\x1f/api/v1/workspaces:this/domains\x12\xbb\x01\n\x15\x43reateWorkspaceDomain\x12\x34.scalekit.v1.workspaces.CreateWorkspaceDomainRequest\x1a\x35.scalekit.v1.workspaces.CreateWorkspaceDomainResponse\"5\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02)\"\x1f/api/v1/workspaces:this/domains:\x06\x64omain\x12\x99\x01\n\x15\x44\x65leteWorkspaceDomain\x12\x34.scalekit.v1.workspaces.DeleteWorkspaceDomainRequest\x1a\x16.google.protobuf.Empty\"2\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02&*$/api/v1/workspaces:this/domains/{id}\x12\x9f\x01\n\x17ValidateWorkspaceDomain\x12\x36.scalekit.v1.workspaces.ValidateWorkspaceDomainRequest\x1a\x1a.google.protobuf.BoolValue\"0\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02$\x12\"/api/v1/workspaces:validate_domainB6Z4github.com/scalekit-inc/scalekit/pkg/grpc/workspacesb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -90,12 +92,16 @@ _globals['_ADDSUBSCRIPTIONREQUEST']._serialized_options = b'\272H|\032z\n\022product_name_or_id\0222either product_id or product_name must be provided\0320this.product_id != \'\' || this.product_name != \'\'' _globals['_UPDATEWORKSPACECONTEXTREQUEST'].fields_by_name['context']._loaded_options = None _globals['_UPDATEWORKSPACECONTEXTREQUEST'].fields_by_name['context']._serialized_options = b'\272H\003\310\001\001' + _globals['_CREATEWORKSPACEDOMAINREQUEST'].fields_by_name['domain']._loaded_options = None + _globals['_CREATEWORKSPACEDOMAINREQUEST'].fields_by_name['domain']._serialized_options = b'\272H\003\310\001\001' + _globals['_DELETEWORKSPACEDOMAINREQUEST'].fields_by_name['id']._loaded_options = None + _globals['_DELETEWORKSPACEDOMAINREQUEST'].fields_by_name['id']._serialized_options = b'\272H\007r\005\020\001\030\200\001' _globals['_WORKSPACESERVICE'].methods_by_name['CreateWorkspace']._loaded_options = None _globals['_WORKSPACESERVICE'].methods_by_name['CreateWorkspace']._serialized_options = b'\202\265\030\002\030\001\202\323\344\223\002\033\"\016/api/v1/signup:\tworkspace' _globals['_WORKSPACESERVICE'].methods_by_name['GetWorkspace']._loaded_options = None _globals['_WORKSPACESERVICE'].methods_by_name['GetWorkspace']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002\031\022\027/api/v1/workspaces/{id}' _globals['_WORKSPACESERVICE'].methods_by_name['GetCurrentWorkspace']._loaded_options = None - _globals['_WORKSPACESERVICE'].methods_by_name['GetCurrentWorkspace']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\031\022\027/api/v1/workspaces:this' + _globals['_WORKSPACESERVICE'].methods_by_name['GetCurrentWorkspace']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\031\022\027/api/v1/workspaces:this' _globals['_WORKSPACESERVICE'].methods_by_name['UpdateWorkspace']._loaded_options = None _globals['_WORKSPACESERVICE'].methods_by_name['UpdateWorkspace']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002$2\027/api/v1/workspaces/{id}:\tworkspace' _globals['_WORKSPACESERVICE'].methods_by_name['OnboardWorkspace']._loaded_options = None @@ -119,125 +125,145 @@ _globals['_WORKSPACESERVICE'].methods_by_name['CreateCheckoutSession']._loaded_options = None _globals['_WORKSPACESERVICE'].methods_by_name['CreateCheckoutSession']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\0026\"1/api/v1/workspaces:this/billing/checkout_sessions:\001*' _globals['_WORKSPACESERVICE'].methods_by_name['UpdateWorkspaceContext']._loaded_options = None - _globals['_WORKSPACESERVICE'].methods_by_name['UpdateWorkspaceContext']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002+\" /api/v1/workspaces:this/contexts:\007context' - _globals['_BILLINGSUBSCRIPTIONSTATUS']._serialized_start=9552 - _globals['_BILLINGSUBSCRIPTIONSTATUS']._serialized_end=9727 - _globals['_INVOICESTATUS']._serialized_start=9729 - _globals['_INVOICESTATUS']._serialized_end=9850 - _globals['_PAYMENTTYPE']._serialized_start=9852 - _globals['_PAYMENTTYPE']._serialized_end=9958 - _globals['_PAYMENTMETHODSTATUS']._serialized_start=9961 - _globals['_PAYMENTMETHODSTATUS']._serialized_end=10103 - _globals['_REDIRECTONCOMPLETION']._serialized_start=10105 - _globals['_REDIRECTONCOMPLETION']._serialized_end=10207 - _globals['_UIMODE']._serialized_start=10209 - _globals['_UIMODE']._serialized_end=10280 - _globals['_CHECKOUTSESSIONMODE']._serialized_start=10282 - _globals['_CHECKOUTSESSIONMODE']._serialized_end=10384 - _globals['_WORKSPACEEXTENDEDINFO']._serialized_start=458 - _globals['_WORKSPACEEXTENDEDINFO']._serialized_end=624 - _globals['_WORKSPACE']._serialized_start=627 - _globals['_WORKSPACE']._serialized_end=1343 - _globals['_CREATEWORKSPACE']._serialized_start=1346 - _globals['_CREATEWORKSPACE']._serialized_end=1506 - _globals['_UPDATEWORKSPACE']._serialized_start=1508 - _globals['_UPDATEWORKSPACE']._serialized_end=1572 - _globals['_ONBOARDWORKSPACE']._serialized_start=1575 - _globals['_ONBOARDWORKSPACE']._serialized_end=1926 - _globals['_CREATEWORKSPACEREQUEST']._serialized_start=1928 - _globals['_CREATEWORKSPACEREQUEST']._serialized_end=2031 - _globals['_CREATEWORKSPACERESPONSE']._serialized_start=2033 - _globals['_CREATEWORKSPACERESPONSE']._serialized_end=2143 - _globals['_UPDATEWORKSPACEREQUEST']._serialized_start=2146 - _globals['_UPDATEWORKSPACEREQUEST']._serialized_end=2281 - _globals['_ONBOARDWORKSPACEREQUEST']._serialized_start=2283 - _globals['_ONBOARDWORKSPACEREQUEST']._serialized_end=2388 - _globals['_UPDATECURRENTWORKSPACEREQUEST']._serialized_start=2390 - _globals['_UPDATECURRENTWORKSPACEREQUEST']._serialized_end=2500 - _globals['_UPDATEWORKSPACERESPONSE']._serialized_start=2502 - _globals['_UPDATEWORKSPACERESPONSE']._serialized_end=2592 - _globals['_GETWORKSPACEREQUEST']._serialized_start=2594 - _globals['_GETWORKSPACEREQUEST']._serialized_end=2647 - _globals['_GETCURRENTWORKSPACEREQUEST']._serialized_start=2649 - _globals['_GETCURRENTWORKSPACEREQUEST']._serialized_end=2677 - _globals['_GETWORKSPACERESPONSE']._serialized_start=2680 - _globals['_GETWORKSPACERESPONSE']._serialized_end=2823 - _globals['_GETBILLINGPORTALREQUEST']._serialized_start=2825 - _globals['_GETBILLINGPORTALREQUEST']._serialized_end=2925 - _globals['_GETBILLINGPORTALRESPONSE']._serialized_start=2927 - _globals['_GETBILLINGPORTALRESPONSE']._serialized_end=2987 - _globals['_GETWORKSPACEPRICINGTABLEREQUEST']._serialized_start=2989 - _globals['_GETWORKSPACEPRICINGTABLEREQUEST']._serialized_end=3054 - _globals['_GETWORKSPACEPRICINGTABLERESPONSE']._serialized_start=3057 - _globals['_GETWORKSPACEPRICINGTABLERESPONSE']._serialized_end=3315 - _globals['_GETWORKSPACESUBSCRIPTIONSREQUEST']._serialized_start=3317 - _globals['_GETWORKSPACESUBSCRIPTIONSREQUEST']._serialized_end=3383 - _globals['_GETWORKSPACESUBSCRIPTIONSRESPONSE']._serialized_start=3386 - _globals['_GETWORKSPACESUBSCRIPTIONSRESPONSE']._serialized_end=3529 - _globals['_SUBSCRIPTION']._serialized_start=3531 - _globals['_SUBSCRIPTION']._serialized_end=3585 - _globals['_GETBILLINGINFOREQUEST']._serialized_start=3587 - _globals['_GETBILLINGINFOREQUEST']._serialized_end=3643 - _globals['_GETBILLINGINFORESPONSE']._serialized_start=3645 - _globals['_GETBILLINGINFORESPONSE']._serialized_end=3741 - _globals['_BILLINGINFO']._serialized_start=3744 - _globals['_BILLINGINFO']._serialized_end=4222 - _globals['_BILLINGSUBSCRIPTION']._serialized_start=4225 - _globals['_BILLINGSUBSCRIPTION']._serialized_end=4567 - _globals['_SUBSCRIPTIONITEM']._serialized_start=4570 - _globals['_SUBSCRIPTIONITEM']._serialized_end=4795 - _globals['_SUBSCRIPTIONPRODUCT']._serialized_start=4797 - _globals['_SUBSCRIPTIONPRODUCT']._serialized_end=4912 - _globals['_SUBSCRIPTIONPRICE']._serialized_start=4915 - _globals['_SUBSCRIPTIONPRICE']._serialized_end=5229 - _globals['_PRICETIER']._serialized_start=5231 - _globals['_PRICETIER']._serialized_end=5287 - _globals['_CURRENTINVOICE']._serialized_start=5290 - _globals['_CURRENTINVOICE']._serialized_end=5697 - _globals['_LASTINVOICE']._serialized_start=5700 - _globals['_LASTINVOICE']._serialized_end=5960 - _globals['_PAYMENTMETHOD']._serialized_start=5963 - _globals['_PAYMENTMETHOD']._serialized_end=6449 - _globals['_PAYMENTMETHOD_PAYMENTINFOENTRY']._serialized_start=6387 - _globals['_PAYMENTMETHOD_PAYMENTINFOENTRY']._serialized_end=6449 - _globals['_BILLINGCONTACTINFO']._serialized_start=6452 - _globals['_BILLINGCONTACTINFO']._serialized_end=6659 - _globals['_ADDON']._serialized_start=6662 - _globals['_ADDON']._serialized_end=6815 - _globals['_GETPRODUCTUSAGEREQUEST']._serialized_start=6817 - _globals['_GETPRODUCTUSAGEREQUEST']._serialized_end=6841 - _globals['_GETPRODUCTUSAGERESPONSE']._serialized_start=6844 - _globals['_GETPRODUCTUSAGERESPONSE']._serialized_end=6998 - _globals['_PRODUCTUSAGE']._serialized_start=7001 - _globals['_PRODUCTUSAGE']._serialized_end=7315 - _globals['_USAGETIER']._serialized_start=7318 - _globals['_USAGETIER']._serialized_end=7562 - _globals['_GETPRODUCTCATALOGREQUEST']._serialized_start=7564 - _globals['_GETPRODUCTCATALOGREQUEST']._serialized_end=7590 - _globals['_GETPRODUCTCATALOGRESPONSE']._serialized_start=7592 - _globals['_GETPRODUCTCATALOGRESPONSE']._serialized_end=7685 - _globals['_PRODUCTCATALOG']._serialized_start=7687 - _globals['_PRODUCTCATALOG']._serialized_end=7775 - _globals['_PRODUCTCATALOGITEM']._serialized_start=7778 - _globals['_PRODUCTCATALOGITEM']._serialized_end=7961 - _globals['_CATALOGPRODUCT']._serialized_start=7964 - _globals['_CATALOGPRODUCT']._serialized_end=8286 - _globals['_CATALOGPRODUCT_METADATAENTRY']._serialized_start=8227 - _globals['_CATALOGPRODUCT_METADATAENTRY']._serialized_end=8286 - _globals['_CATALOGPRICE']._serialized_start=8289 - _globals['_CATALOGPRICE']._serialized_end=8546 - _globals['_ADDSUBSCRIPTIONREQUEST']._serialized_start=8549 - _globals['_ADDSUBSCRIPTIONREQUEST']._serialized_end=8768 - _globals['_ADDSUBSCRIPTIONRESPONSE']._serialized_start=8770 - _globals['_ADDSUBSCRIPTIONRESPONSE']._serialized_end=8895 - _globals['_CREATECHECKOUTSESSIONREQUEST']._serialized_start=8898 - _globals['_CREATECHECKOUTSESSIONREQUEST']._serialized_end=9255 - _globals['_CREATECHECKOUTSESSIONRESPONSE']._serialized_start=9257 - _globals['_CREATECHECKOUTSESSIONRESPONSE']._serialized_end=9372 - _globals['_UPDATEWORKSPACECONTEXTREQUEST']._serialized_start=9374 - _globals['_UPDATEWORKSPACECONTEXTREQUEST']._serialized_end=9464 - _globals['_UPDATEWORKSPACECONTEXTRESPONSE']._serialized_start=9466 - _globals['_UPDATEWORKSPACECONTEXTRESPONSE']._serialized_end=9549 - _globals['_WORKSPACESERVICE']._serialized_start=10387 - _globals['_WORKSPACESERVICE']._serialized_end=13148 + _globals['_WORKSPACESERVICE'].methods_by_name['UpdateWorkspaceContext']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002+\" /api/v1/workspaces:this/contexts:\007context' + _globals['_WORKSPACESERVICE'].methods_by_name['ListWorkspaceDomains']._loaded_options = None + _globals['_WORKSPACESERVICE'].methods_by_name['ListWorkspaceDomains']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002!\022\037/api/v1/workspaces:this/domains' + _globals['_WORKSPACESERVICE'].methods_by_name['CreateWorkspaceDomain']._loaded_options = None + _globals['_WORKSPACESERVICE'].methods_by_name['CreateWorkspaceDomain']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002)\"\037/api/v1/workspaces:this/domains:\006domain' + _globals['_WORKSPACESERVICE'].methods_by_name['DeleteWorkspaceDomain']._loaded_options = None + _globals['_WORKSPACESERVICE'].methods_by_name['DeleteWorkspaceDomain']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002&*$/api/v1/workspaces:this/domains/{id}' + _globals['_WORKSPACESERVICE'].methods_by_name['ValidateWorkspaceDomain']._loaded_options = None + _globals['_WORKSPACESERVICE'].methods_by_name['ValidateWorkspaceDomain']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002$\022\"/api/v1/workspaces:validate_domain' + _globals['_BILLINGSUBSCRIPTIONSTATUS']._serialized_start=10327 + _globals['_BILLINGSUBSCRIPTIONSTATUS']._serialized_end=10502 + _globals['_INVOICESTATUS']._serialized_start=10504 + _globals['_INVOICESTATUS']._serialized_end=10625 + _globals['_PAYMENTTYPE']._serialized_start=10627 + _globals['_PAYMENTTYPE']._serialized_end=10733 + _globals['_PAYMENTMETHODSTATUS']._serialized_start=10736 + _globals['_PAYMENTMETHODSTATUS']._serialized_end=10878 + _globals['_REDIRECTONCOMPLETION']._serialized_start=10880 + _globals['_REDIRECTONCOMPLETION']._serialized_end=10982 + _globals['_UIMODE']._serialized_start=10984 + _globals['_UIMODE']._serialized_end=11055 + _globals['_CHECKOUTSESSIONMODE']._serialized_start=11057 + _globals['_CHECKOUTSESSIONMODE']._serialized_end=11159 + _globals['_WORKSPACEEXTENDEDINFO']._serialized_start=525 + _globals['_WORKSPACEEXTENDEDINFO']._serialized_end=691 + _globals['_WORKSPACE']._serialized_start=694 + _globals['_WORKSPACE']._serialized_end=1410 + _globals['_CREATEWORKSPACE']._serialized_start=1413 + _globals['_CREATEWORKSPACE']._serialized_end=1573 + _globals['_UPDATEWORKSPACE']._serialized_start=1575 + _globals['_UPDATEWORKSPACE']._serialized_end=1639 + _globals['_ONBOARDWORKSPACE']._serialized_start=1642 + _globals['_ONBOARDWORKSPACE']._serialized_end=2054 + _globals['_CREATEWORKSPACEREQUEST']._serialized_start=2056 + _globals['_CREATEWORKSPACEREQUEST']._serialized_end=2159 + _globals['_CREATEWORKSPACERESPONSE']._serialized_start=2161 + _globals['_CREATEWORKSPACERESPONSE']._serialized_end=2271 + _globals['_UPDATEWORKSPACEREQUEST']._serialized_start=2274 + _globals['_UPDATEWORKSPACEREQUEST']._serialized_end=2409 + _globals['_ONBOARDWORKSPACEREQUEST']._serialized_start=2411 + _globals['_ONBOARDWORKSPACEREQUEST']._serialized_end=2516 + _globals['_UPDATECURRENTWORKSPACEREQUEST']._serialized_start=2518 + _globals['_UPDATECURRENTWORKSPACEREQUEST']._serialized_end=2628 + _globals['_UPDATEWORKSPACERESPONSE']._serialized_start=2630 + _globals['_UPDATEWORKSPACERESPONSE']._serialized_end=2720 + _globals['_GETWORKSPACEREQUEST']._serialized_start=2722 + _globals['_GETWORKSPACEREQUEST']._serialized_end=2775 + _globals['_GETCURRENTWORKSPACEREQUEST']._serialized_start=2777 + _globals['_GETCURRENTWORKSPACEREQUEST']._serialized_end=2805 + _globals['_GETWORKSPACERESPONSE']._serialized_start=2808 + _globals['_GETWORKSPACERESPONSE']._serialized_end=2951 + _globals['_GETBILLINGPORTALREQUEST']._serialized_start=2953 + _globals['_GETBILLINGPORTALREQUEST']._serialized_end=3053 + _globals['_GETBILLINGPORTALRESPONSE']._serialized_start=3055 + _globals['_GETBILLINGPORTALRESPONSE']._serialized_end=3115 + _globals['_GETWORKSPACEPRICINGTABLEREQUEST']._serialized_start=3117 + _globals['_GETWORKSPACEPRICINGTABLEREQUEST']._serialized_end=3182 + _globals['_GETWORKSPACEPRICINGTABLERESPONSE']._serialized_start=3185 + _globals['_GETWORKSPACEPRICINGTABLERESPONSE']._serialized_end=3443 + _globals['_GETWORKSPACESUBSCRIPTIONSREQUEST']._serialized_start=3445 + _globals['_GETWORKSPACESUBSCRIPTIONSREQUEST']._serialized_end=3511 + _globals['_GETWORKSPACESUBSCRIPTIONSRESPONSE']._serialized_start=3514 + _globals['_GETWORKSPACESUBSCRIPTIONSRESPONSE']._serialized_end=3657 + _globals['_SUBSCRIPTION']._serialized_start=3659 + _globals['_SUBSCRIPTION']._serialized_end=3713 + _globals['_GETBILLINGINFOREQUEST']._serialized_start=3715 + _globals['_GETBILLINGINFOREQUEST']._serialized_end=3771 + _globals['_GETBILLINGINFORESPONSE']._serialized_start=3773 + _globals['_GETBILLINGINFORESPONSE']._serialized_end=3869 + _globals['_BILLINGINFO']._serialized_start=3872 + _globals['_BILLINGINFO']._serialized_end=4350 + _globals['_BILLINGSUBSCRIPTION']._serialized_start=4353 + _globals['_BILLINGSUBSCRIPTION']._serialized_end=4695 + _globals['_SUBSCRIPTIONITEM']._serialized_start=4698 + _globals['_SUBSCRIPTIONITEM']._serialized_end=4923 + _globals['_SUBSCRIPTIONPRODUCT']._serialized_start=4925 + _globals['_SUBSCRIPTIONPRODUCT']._serialized_end=5040 + _globals['_SUBSCRIPTIONPRICE']._serialized_start=5043 + _globals['_SUBSCRIPTIONPRICE']._serialized_end=5357 + _globals['_PRICETIER']._serialized_start=5359 + _globals['_PRICETIER']._serialized_end=5415 + _globals['_CURRENTINVOICE']._serialized_start=5418 + _globals['_CURRENTINVOICE']._serialized_end=5825 + _globals['_LASTINVOICE']._serialized_start=5828 + _globals['_LASTINVOICE']._serialized_end=6088 + _globals['_PAYMENTMETHOD']._serialized_start=6091 + _globals['_PAYMENTMETHOD']._serialized_end=6577 + _globals['_PAYMENTMETHOD_PAYMENTINFOENTRY']._serialized_start=6515 + _globals['_PAYMENTMETHOD_PAYMENTINFOENTRY']._serialized_end=6577 + _globals['_BILLINGCONTACTINFO']._serialized_start=6580 + _globals['_BILLINGCONTACTINFO']._serialized_end=6787 + _globals['_ADDON']._serialized_start=6790 + _globals['_ADDON']._serialized_end=6943 + _globals['_GETPRODUCTUSAGEREQUEST']._serialized_start=6945 + _globals['_GETPRODUCTUSAGEREQUEST']._serialized_end=6969 + _globals['_GETPRODUCTUSAGERESPONSE']._serialized_start=6972 + _globals['_GETPRODUCTUSAGERESPONSE']._serialized_end=7126 + _globals['_PRODUCTUSAGE']._serialized_start=7129 + _globals['_PRODUCTUSAGE']._serialized_end=7443 + _globals['_USAGETIER']._serialized_start=7446 + _globals['_USAGETIER']._serialized_end=7690 + _globals['_GETPRODUCTCATALOGREQUEST']._serialized_start=7692 + _globals['_GETPRODUCTCATALOGREQUEST']._serialized_end=7718 + _globals['_GETPRODUCTCATALOGRESPONSE']._serialized_start=7720 + _globals['_GETPRODUCTCATALOGRESPONSE']._serialized_end=7813 + _globals['_PRODUCTCATALOG']._serialized_start=7815 + _globals['_PRODUCTCATALOG']._serialized_end=7903 + _globals['_PRODUCTCATALOGITEM']._serialized_start=7906 + _globals['_PRODUCTCATALOGITEM']._serialized_end=8089 + _globals['_CATALOGPRODUCT']._serialized_start=8092 + _globals['_CATALOGPRODUCT']._serialized_end=8414 + _globals['_CATALOGPRODUCT_METADATAENTRY']._serialized_start=8355 + _globals['_CATALOGPRODUCT_METADATAENTRY']._serialized_end=8414 + _globals['_CATALOGPRICE']._serialized_start=8417 + _globals['_CATALOGPRICE']._serialized_end=8674 + _globals['_ADDSUBSCRIPTIONREQUEST']._serialized_start=8677 + _globals['_ADDSUBSCRIPTIONREQUEST']._serialized_end=8896 + _globals['_ADDSUBSCRIPTIONRESPONSE']._serialized_start=8898 + _globals['_ADDSUBSCRIPTIONRESPONSE']._serialized_end=9023 + _globals['_CREATECHECKOUTSESSIONREQUEST']._serialized_start=9026 + _globals['_CREATECHECKOUTSESSIONREQUEST']._serialized_end=9383 + _globals['_CREATECHECKOUTSESSIONRESPONSE']._serialized_start=9385 + _globals['_CREATECHECKOUTSESSIONRESPONSE']._serialized_end=9500 + _globals['_UPDATEWORKSPACECONTEXTREQUEST']._serialized_start=9502 + _globals['_UPDATEWORKSPACECONTEXTREQUEST']._serialized_end=9592 + _globals['_UPDATEWORKSPACECONTEXTRESPONSE']._serialized_start=9594 + _globals['_UPDATEWORKSPACECONTEXTRESPONSE']._serialized_end=9677 + _globals['_VALIDATEWORKSPACEDOMAINREQUEST']._serialized_start=9679 + _globals['_VALIDATEWORKSPACEDOMAINREQUEST']._serialized_end=9711 + _globals['_CREATEWORKSPACEDOMAINREQUEST']._serialized_start=9713 + _globals['_CREATEWORKSPACEDOMAINREQUEST']._serialized_end=9810 + _globals['_CREATEWORKSPACEDOMAINRESPONSE']._serialized_start=9812 + _globals['_CREATEWORKSPACEDOMAINRESPONSE']._serialized_end=9896 + _globals['_LISTWORKSPACEDOMAINSREQUEST']._serialized_start=9899 + _globals['_LISTWORKSPACEDOMAINSREQUEST']._serialized_end=10114 + _globals['_LISTWORKSPACEDOMAINSRESPONSE']._serialized_start=10117 + _globals['_LISTWORKSPACEDOMAINSRESPONSE']._serialized_end=10264 + _globals['_DELETEWORKSPACEDOMAINREQUEST']._serialized_start=10266 + _globals['_DELETEWORKSPACEDOMAINREQUEST']._serialized_end=10324 + _globals['_WORKSPACESERVICE']._serialized_start=11162 + _globals['_WORKSPACESERVICE']._serialized_end=14640 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/workspaces/workspaces_pb2.pyi b/scalekit/v1/workspaces/workspaces_pb2.pyi index 1cf9c94..2a281ce 100644 --- a/scalekit/v1/workspaces/workspaces_pb2.pyi +++ b/scalekit/v1/workspaces/workspaces_pb2.pyi @@ -7,8 +7,10 @@ from google.protobuf import duration_pb2 as _duration_pb2 from google.protobuf import empty_pb2 as _empty_pb2 from google.protobuf import struct_pb2 as _struct_pb2 from google.protobuf import timestamp_pb2 as _timestamp_pb2 +from google.protobuf import wrappers_pb2 as _wrappers_pb2 from protoc_gen_openapiv2.options import annotations_pb2 as _annotations_pb2_1 from scalekit.v1.commons import commons_pb2 as _commons_pb2 +from scalekit.v1.domains import domains_pb2 as _domains_pb2 from scalekit.v1.options import options_pb2 as _options_pb2 from google.protobuf.internal import containers as _containers from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper @@ -150,16 +152,18 @@ class UpdateWorkspace(_message.Message): def __init__(self, display_name: _Optional[str] = ...) -> None: ... class OnboardWorkspace(_message.Message): - __slots__ = ("workspace_display_name", "user_given_name", "user_family_name", "authentication_mode") + __slots__ = ("workspace_display_name", "user_given_name", "user_family_name", "authentication_mode", "enable_allowed_domain_join") WORKSPACE_DISPLAY_NAME_FIELD_NUMBER: _ClassVar[int] USER_GIVEN_NAME_FIELD_NUMBER: _ClassVar[int] USER_FAMILY_NAME_FIELD_NUMBER: _ClassVar[int] AUTHENTICATION_MODE_FIELD_NUMBER: _ClassVar[int] + ENABLE_ALLOWED_DOMAIN_JOIN_FIELD_NUMBER: _ClassVar[int] workspace_display_name: str user_given_name: str user_family_name: str authentication_mode: _commons_pb2.AuthenticationMode - def __init__(self, workspace_display_name: _Optional[str] = ..., user_given_name: _Optional[str] = ..., user_family_name: _Optional[str] = ..., authentication_mode: _Optional[_Union[_commons_pb2.AuthenticationMode, str]] = ...) -> None: ... + enable_allowed_domain_join: bool + def __init__(self, workspace_display_name: _Optional[str] = ..., user_given_name: _Optional[str] = ..., user_family_name: _Optional[str] = ..., authentication_mode: _Optional[_Union[_commons_pb2.AuthenticationMode, str]] = ..., enable_allowed_domain_join: bool = ...) -> None: ... class CreateWorkspaceRequest(_message.Message): __slots__ = ("workspace",) @@ -650,3 +654,45 @@ class UpdateWorkspaceContextResponse(_message.Message): CONTEXT_FIELD_NUMBER: _ClassVar[int] context: _struct_pb2.Struct def __init__(self, context: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... + +class ValidateWorkspaceDomainRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class CreateWorkspaceDomainRequest(_message.Message): + __slots__ = ("domain",) + DOMAIN_FIELD_NUMBER: _ClassVar[int] + domain: _domains_pb2.CreateDomain + def __init__(self, domain: _Optional[_Union[_domains_pb2.CreateDomain, _Mapping]] = ...) -> None: ... + +class CreateWorkspaceDomainResponse(_message.Message): + __slots__ = ("domain",) + DOMAIN_FIELD_NUMBER: _ClassVar[int] + domain: _domains_pb2.Domain + def __init__(self, domain: _Optional[_Union[_domains_pb2.Domain, _Mapping]] = ...) -> None: ... + +class ListWorkspaceDomainsRequest(_message.Message): + __slots__ = ("page_size", "page_number", "domain_type") + PAGE_SIZE_FIELD_NUMBER: _ClassVar[int] + PAGE_NUMBER_FIELD_NUMBER: _ClassVar[int] + DOMAIN_TYPE_FIELD_NUMBER: _ClassVar[int] + page_size: _wrappers_pb2.Int32Value + page_number: _wrappers_pb2.Int32Value + domain_type: _domains_pb2.DomainType + def __init__(self, page_size: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., page_number: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., domain_type: _Optional[_Union[_domains_pb2.DomainType, str]] = ...) -> None: ... + +class ListWorkspaceDomainsResponse(_message.Message): + __slots__ = ("page_size", "page_number", "domains") + PAGE_SIZE_FIELD_NUMBER: _ClassVar[int] + PAGE_NUMBER_FIELD_NUMBER: _ClassVar[int] + DOMAINS_FIELD_NUMBER: _ClassVar[int] + page_size: int + page_number: int + domains: _containers.RepeatedCompositeFieldContainer[_domains_pb2.Domain] + def __init__(self, page_size: _Optional[int] = ..., page_number: _Optional[int] = ..., domains: _Optional[_Iterable[_Union[_domains_pb2.Domain, _Mapping]]] = ...) -> None: ... + +class DeleteWorkspaceDomainRequest(_message.Message): + __slots__ = ("id",) + ID_FIELD_NUMBER: _ClassVar[int] + id: str + def __init__(self, id: _Optional[str] = ...) -> None: ... diff --git a/scalekit/v1/workspaces/workspaces_pb2_grpc.py b/scalekit/v1/workspaces/workspaces_pb2_grpc.py index 686d770..0039189 100644 --- a/scalekit/v1/workspaces/workspaces_pb2_grpc.py +++ b/scalekit/v1/workspaces/workspaces_pb2_grpc.py @@ -3,6 +3,7 @@ import grpc from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 +from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2 from scalekit.v1.workspaces import workspaces_pb2 as scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2 @@ -90,6 +91,26 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.UpdateWorkspaceContextRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.UpdateWorkspaceContextResponse.FromString, ) + self.ListWorkspaceDomains = channel.unary_unary( + '/scalekit.v1.workspaces.WorkspaceService/ListWorkspaceDomains', + request_serializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.ListWorkspaceDomainsRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.ListWorkspaceDomainsResponse.FromString, + ) + self.CreateWorkspaceDomain = channel.unary_unary( + '/scalekit.v1.workspaces.WorkspaceService/CreateWorkspaceDomain', + request_serializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.CreateWorkspaceDomainRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.CreateWorkspaceDomainResponse.FromString, + ) + self.DeleteWorkspaceDomain = channel.unary_unary( + '/scalekit.v1.workspaces.WorkspaceService/DeleteWorkspaceDomain', + request_serializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.DeleteWorkspaceDomainRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + ) + self.ValidateWorkspaceDomain = channel.unary_unary( + '/scalekit.v1.workspaces.WorkspaceService/ValidateWorkspaceDomain', + request_serializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.ValidateWorkspaceDomainRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_wrappers__pb2.BoolValue.FromString, + ) class WorkspaceServiceServicer(object): @@ -265,6 +286,30 @@ def UpdateWorkspaceContext(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def ListWorkspaceDomains(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CreateWorkspaceDomain(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DeleteWorkspaceDomain(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ValidateWorkspaceDomain(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def add_WorkspaceServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -343,6 +388,26 @@ def add_WorkspaceServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.UpdateWorkspaceContextRequest.FromString, response_serializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.UpdateWorkspaceContextResponse.SerializeToString, ), + 'ListWorkspaceDomains': grpc.unary_unary_rpc_method_handler( + servicer.ListWorkspaceDomains, + request_deserializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.ListWorkspaceDomainsRequest.FromString, + response_serializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.ListWorkspaceDomainsResponse.SerializeToString, + ), + 'CreateWorkspaceDomain': grpc.unary_unary_rpc_method_handler( + servicer.CreateWorkspaceDomain, + request_deserializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.CreateWorkspaceDomainRequest.FromString, + response_serializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.CreateWorkspaceDomainResponse.SerializeToString, + ), + 'DeleteWorkspaceDomain': grpc.unary_unary_rpc_method_handler( + servicer.DeleteWorkspaceDomain, + request_deserializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.DeleteWorkspaceDomainRequest.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), + 'ValidateWorkspaceDomain': grpc.unary_unary_rpc_method_handler( + servicer.ValidateWorkspaceDomain, + request_deserializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.ValidateWorkspaceDomainRequest.FromString, + response_serializer=google_dot_protobuf_dot_wrappers__pb2.BoolValue.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'scalekit.v1.workspaces.WorkspaceService', rpc_method_handlers) @@ -607,3 +672,71 @@ def UpdateWorkspaceContext(request, scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.UpdateWorkspaceContextResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def ListWorkspaceDomains(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.workspaces.WorkspaceService/ListWorkspaceDomains', + scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.ListWorkspaceDomainsRequest.SerializeToString, + scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.ListWorkspaceDomainsResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def CreateWorkspaceDomain(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.workspaces.WorkspaceService/CreateWorkspaceDomain', + scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.CreateWorkspaceDomainRequest.SerializeToString, + scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.CreateWorkspaceDomainResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def DeleteWorkspaceDomain(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.workspaces.WorkspaceService/DeleteWorkspaceDomain', + scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.DeleteWorkspaceDomainRequest.SerializeToString, + google_dot_protobuf_dot_empty__pb2.Empty.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def ValidateWorkspaceDomain(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.workspaces.WorkspaceService/ValidateWorkspaceDomain', + scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.ValidateWorkspaceDomainRequest.SerializeToString, + google_dot_protobuf_dot_wrappers__pb2.BoolValue.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) From 21bcaf1b2f28ccf6afcd22c425220fe22b44ec9b Mon Sep 17 00:00:00 2001 From: Srinivas Karre Date: Sun, 10 May 2026 15:26:54 +0530 Subject: [PATCH 02/19] chore: bump proto ref to v0.1.120.2 --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 41a78e0..3f2ce67 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ VENV_PYTHON := $(VENV_DIR)/bin/python VENV_PIP := $(VENV_PYTHON) -m pip PROTO_REPO_URL := https://github.com/scalekit-inc/scalekit.git -PROTO_REF ?= v0.1.103 +PROTO_REF ?= v0.1.120.2 PROTO_SUBDIR := proto LOCAL_PROTO_DIR ?= ../scalekit/proto From 24a80a129a6f58d342446fda40dd04bcb9510536 Mon Sep 17 00:00:00 2001 From: Srinivas Karre Date: Sun, 10 May 2026 15:39:36 +0530 Subject: [PATCH 03/19] feat: regenerate protos for v0.1.120.2 and add session policy tests Updates generated stubs to match new flat UpdateOrganizationSessionPolicyRequest (SessionPolicyType enum rename, flat fields). Adds agentkit_logs generated module and removes stale buf/validate generated files. Adds integration test coverage for get/update/revert organization session policy. --- Makefile | 1 + buf/validate/expression_pb2.py | 31 -- buf/validate/expression_pb2.pyi | 34 -- buf/validate/expression_pb2_grpc.py | 4 - buf/validate/priv/__init__.py | 0 buf/validate/priv/private_pb2.py | 30 -- buf/validate/priv/private_pb2.pyi | 25 - buf/validate/priv/private_pb2_grpc.py | 4 - buf/validate/validate_pb2.py | 402 -------------- buf/validate/validate_pb2.pyi | 503 ------------------ buf/validate/validate_pb2_grpc.py | 4 - scalekit/organization.py | 28 +- .../v1/agentkit_logs}/__init__.py | 0 .../agentkit_logs/agentkit_analytics_pb2.py | 62 +++ .../agentkit_logs/agentkit_analytics_pb2.pyi | 91 ++++ .../agentkit_analytics_pb2_grpc.py | 66 +++ .../v1/agentkit_logs/agentkit_logs_pb2.py | 80 +++ .../v1/agentkit_logs/agentkit_logs_pb2.pyi | 101 ++++ .../agentkit_logs/agentkit_logs_pb2_grpc.py | 99 ++++ scalekit/v1/domains/domains_pb2.py | 6 +- scalekit/v1/environments/environments_pb2.py | 120 +++-- scalekit/v1/environments/environments_pb2.pyi | 25 +- .../v1/organizations/organizations_pb2.py | 106 ++-- .../v1/organizations/organizations_pb2.pyi | 60 ++- .../organizations/organizations_pb2_grpc.py | 33 ++ scalekit/v1/tools/tools_pb2.py | 54 +- scalekit/v1/tools/tools_pb2.pyi | 6 +- tests/test_organization_session_policy.py | 102 ++++ 28 files changed, 880 insertions(+), 1197 deletions(-) delete mode 100644 buf/validate/expression_pb2.py delete mode 100644 buf/validate/expression_pb2.pyi delete mode 100644 buf/validate/expression_pb2_grpc.py delete mode 100644 buf/validate/priv/__init__.py delete mode 100644 buf/validate/priv/private_pb2.py delete mode 100644 buf/validate/priv/private_pb2.pyi delete mode 100644 buf/validate/priv/private_pb2_grpc.py delete mode 100644 buf/validate/validate_pb2.py delete mode 100644 buf/validate/validate_pb2.pyi delete mode 100644 buf/validate/validate_pb2_grpc.py rename {buf/validate => scalekit/v1/agentkit_logs}/__init__.py (100%) create mode 100644 scalekit/v1/agentkit_logs/agentkit_analytics_pb2.py create mode 100644 scalekit/v1/agentkit_logs/agentkit_analytics_pb2.pyi create mode 100644 scalekit/v1/agentkit_logs/agentkit_analytics_pb2_grpc.py create mode 100644 scalekit/v1/agentkit_logs/agentkit_logs_pb2.py create mode 100644 scalekit/v1/agentkit_logs/agentkit_logs_pb2.pyi create mode 100644 scalekit/v1/agentkit_logs/agentkit_logs_pb2_grpc.py create mode 100644 tests/test_organization_session_policy.py diff --git a/Makefile b/Makefile index 3f2ce67..ad65310 100644 --- a/Makefile +++ b/Makefile @@ -117,6 +117,7 @@ generate-local: tools-check $(MAKE) prepare; prepared=1; \ buf generate ../scalekit; \ $(MAKE) restore; prepared=0; \ + mkdir -p $(BUF_DIR); \ $(MAKE) generate_init_files; \ $(MAKE) cleanup @echo "Code generation complete." diff --git a/buf/validate/expression_pb2.py b/buf/validate/expression_pb2.py deleted file mode 100644 index e3287fd..0000000 --- a/buf/validate/expression_pb2.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: buf/validate/expression.proto -# Protobuf Python Version: 5.26.1 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1d\x62uf/validate/expression.proto\x12\x0c\x62uf.validate\"V\n\nConstraint\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x18\n\x07message\x18\x02 \x01(\tR\x07message\x12\x1e\n\nexpression\x18\x03 \x01(\tR\nexpression\"E\n\nViolations\x12\x37\n\nviolations\x18\x01 \x03(\x0b\x32\x17.buf.validate.ViolationR\nviolations\"\x82\x01\n\tViolation\x12\x1d\n\nfield_path\x18\x01 \x01(\tR\tfieldPath\x12#\n\rconstraint_id\x18\x02 \x01(\tR\x0c\x63onstraintId\x12\x18\n\x07message\x18\x03 \x01(\tR\x07message\x12\x17\n\x07\x66or_key\x18\x04 \x01(\x08R\x06\x66orKeyBp\n\x12\x62uild.buf.validateB\x0f\x45xpressionProtoP\x01ZGbuf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validateb\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'buf.validate.expression_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\022build.buf.validateB\017ExpressionProtoP\001ZGbuf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate' - _globals['_CONSTRAINT']._serialized_start=47 - _globals['_CONSTRAINT']._serialized_end=133 - _globals['_VIOLATIONS']._serialized_start=135 - _globals['_VIOLATIONS']._serialized_end=204 - _globals['_VIOLATION']._serialized_start=207 - _globals['_VIOLATION']._serialized_end=337 -# @@protoc_insertion_point(module_scope) diff --git a/buf/validate/expression_pb2.pyi b/buf/validate/expression_pb2.pyi deleted file mode 100644 index 747c650..0000000 --- a/buf/validate/expression_pb2.pyi +++ /dev/null @@ -1,34 +0,0 @@ -from google.protobuf.internal import containers as _containers -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union - -DESCRIPTOR: _descriptor.FileDescriptor - -class Constraint(_message.Message): - __slots__ = ("id", "message", "expression") - ID_FIELD_NUMBER: _ClassVar[int] - MESSAGE_FIELD_NUMBER: _ClassVar[int] - EXPRESSION_FIELD_NUMBER: _ClassVar[int] - id: str - message: str - expression: str - def __init__(self, id: _Optional[str] = ..., message: _Optional[str] = ..., expression: _Optional[str] = ...) -> None: ... - -class Violations(_message.Message): - __slots__ = ("violations",) - VIOLATIONS_FIELD_NUMBER: _ClassVar[int] - violations: _containers.RepeatedCompositeFieldContainer[Violation] - def __init__(self, violations: _Optional[_Iterable[_Union[Violation, _Mapping]]] = ...) -> None: ... - -class Violation(_message.Message): - __slots__ = ("field_path", "constraint_id", "message", "for_key") - FIELD_PATH_FIELD_NUMBER: _ClassVar[int] - CONSTRAINT_ID_FIELD_NUMBER: _ClassVar[int] - MESSAGE_FIELD_NUMBER: _ClassVar[int] - FOR_KEY_FIELD_NUMBER: _ClassVar[int] - field_path: str - constraint_id: str - message: str - for_key: bool - def __init__(self, field_path: _Optional[str] = ..., constraint_id: _Optional[str] = ..., message: _Optional[str] = ..., for_key: bool = ...) -> None: ... diff --git a/buf/validate/expression_pb2_grpc.py b/buf/validate/expression_pb2_grpc.py deleted file mode 100644 index 2daafff..0000000 --- a/buf/validate/expression_pb2_grpc.py +++ /dev/null @@ -1,4 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc - diff --git a/buf/validate/priv/__init__.py b/buf/validate/priv/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/buf/validate/priv/private_pb2.py b/buf/validate/priv/private_pb2.py deleted file mode 100644 index 0bab1bc..0000000 --- a/buf/validate/priv/private_pb2.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: buf/validate/priv/private.proto -# Protobuf Python Version: 5.26.1 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1f\x62uf/validate/priv/private.proto\x12\x11\x62uf.validate.priv\x1a google/protobuf/descriptor.proto\"C\n\x10\x46ieldConstraints\x12/\n\x03\x63\x65l\x18\x01 \x03(\x0b\x32\x1d.buf.validate.priv.ConstraintR\x03\x63\x65l\"V\n\nConstraint\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x18\n\x07message\x18\x02 \x01(\tR\x07message\x12\x1e\n\nexpression\x18\x03 \x01(\tR\nexpression:\\\n\x05\x66ield\x12\x1d.google.protobuf.FieldOptions\x18\x88\t \x01(\x0b\x32#.buf.validate.priv.FieldConstraintsR\x05\x66ield\x88\x01\x01\x42w\n\x17\x62uild.buf.validate.privB\x0cPrivateProtoP\x01ZLbuf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate/privb\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'buf.validate.priv.private_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\027build.buf.validate.privB\014PrivateProtoP\001ZLbuf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate/priv' - _globals['_FIELDCONSTRAINTS']._serialized_start=88 - _globals['_FIELDCONSTRAINTS']._serialized_end=155 - _globals['_CONSTRAINT']._serialized_start=157 - _globals['_CONSTRAINT']._serialized_end=243 -# @@protoc_insertion_point(module_scope) diff --git a/buf/validate/priv/private_pb2.pyi b/buf/validate/priv/private_pb2.pyi deleted file mode 100644 index f42ef5a..0000000 --- a/buf/validate/priv/private_pb2.pyi +++ /dev/null @@ -1,25 +0,0 @@ -from google.protobuf import descriptor_pb2 as _descriptor_pb2 -from google.protobuf.internal import containers as _containers -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union - -DESCRIPTOR: _descriptor.FileDescriptor -FIELD_FIELD_NUMBER: _ClassVar[int] -field: _descriptor.FieldDescriptor - -class FieldConstraints(_message.Message): - __slots__ = ("cel",) - CEL_FIELD_NUMBER: _ClassVar[int] - cel: _containers.RepeatedCompositeFieldContainer[Constraint] - def __init__(self, cel: _Optional[_Iterable[_Union[Constraint, _Mapping]]] = ...) -> None: ... - -class Constraint(_message.Message): - __slots__ = ("id", "message", "expression") - ID_FIELD_NUMBER: _ClassVar[int] - MESSAGE_FIELD_NUMBER: _ClassVar[int] - EXPRESSION_FIELD_NUMBER: _ClassVar[int] - id: str - message: str - expression: str - def __init__(self, id: _Optional[str] = ..., message: _Optional[str] = ..., expression: _Optional[str] = ...) -> None: ... diff --git a/buf/validate/priv/private_pb2_grpc.py b/buf/validate/priv/private_pb2_grpc.py deleted file mode 100644 index 2daafff..0000000 --- a/buf/validate/priv/private_pb2_grpc.py +++ /dev/null @@ -1,4 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc - diff --git a/buf/validate/validate_pb2.py b/buf/validate/validate_pb2.py deleted file mode 100644 index 77e903d..0000000 --- a/buf/validate/validate_pb2.py +++ /dev/null @@ -1,402 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: buf/validate/validate.proto -# Protobuf Python Version: 5.26.1 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from buf.validate import expression_pb2 as buf_dot_validate_dot_expression__pb2 -from buf.validate.priv import private_pb2 as buf_dot_validate_dot_priv_dot_private__pb2 -from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 -from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2 -from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x62uf/validate/validate.proto\x12\x0c\x62uf.validate\x1a\x1d\x62uf/validate/expression.proto\x1a\x1f\x62uf/validate/priv/private.proto\x1a google/protobuf/descriptor.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"n\n\x12MessageConstraints\x12\x1f\n\x08\x64isabled\x18\x01 \x01(\x08H\x00R\x08\x64isabled\x88\x01\x01\x12*\n\x03\x63\x65l\x18\x03 \x03(\x0b\x32\x18.buf.validate.ConstraintR\x03\x63\x65lB\x0b\n\t_disabled\"@\n\x10OneofConstraints\x12\x1f\n\x08required\x18\x01 \x01(\x08H\x00R\x08required\x88\x01\x01\x42\x0b\n\t_required\"\xab\n\n\x10\x46ieldConstraints\x12*\n\x03\x63\x65l\x18\x17 \x03(\x0b\x32\x18.buf.validate.ConstraintR\x03\x63\x65l\x12\x1a\n\x08required\x18\x19 \x01(\x08R\x08required\x12,\n\x06ignore\x18\x1b \x01(\x0e\x32\x14.buf.validate.IgnoreR\x06ignore\x12\x30\n\x05\x66loat\x18\x01 \x01(\x0b\x32\x18.buf.validate.FloatRulesH\x00R\x05\x66loat\x12\x33\n\x06\x64ouble\x18\x02 \x01(\x0b\x32\x19.buf.validate.DoubleRulesH\x00R\x06\x64ouble\x12\x30\n\x05int32\x18\x03 \x01(\x0b\x32\x18.buf.validate.Int32RulesH\x00R\x05int32\x12\x30\n\x05int64\x18\x04 \x01(\x0b\x32\x18.buf.validate.Int64RulesH\x00R\x05int64\x12\x33\n\x06uint32\x18\x05 \x01(\x0b\x32\x19.buf.validate.UInt32RulesH\x00R\x06uint32\x12\x33\n\x06uint64\x18\x06 \x01(\x0b\x32\x19.buf.validate.UInt64RulesH\x00R\x06uint64\x12\x33\n\x06sint32\x18\x07 \x01(\x0b\x32\x19.buf.validate.SInt32RulesH\x00R\x06sint32\x12\x33\n\x06sint64\x18\x08 \x01(\x0b\x32\x19.buf.validate.SInt64RulesH\x00R\x06sint64\x12\x36\n\x07\x66ixed32\x18\t \x01(\x0b\x32\x1a.buf.validate.Fixed32RulesH\x00R\x07\x66ixed32\x12\x36\n\x07\x66ixed64\x18\n \x01(\x0b\x32\x1a.buf.validate.Fixed64RulesH\x00R\x07\x66ixed64\x12\x39\n\x08sfixed32\x18\x0b \x01(\x0b\x32\x1b.buf.validate.SFixed32RulesH\x00R\x08sfixed32\x12\x39\n\x08sfixed64\x18\x0c \x01(\x0b\x32\x1b.buf.validate.SFixed64RulesH\x00R\x08sfixed64\x12-\n\x04\x62ool\x18\r \x01(\x0b\x32\x17.buf.validate.BoolRulesH\x00R\x04\x62ool\x12\x33\n\x06string\x18\x0e \x01(\x0b\x32\x19.buf.validate.StringRulesH\x00R\x06string\x12\x30\n\x05\x62ytes\x18\x0f \x01(\x0b\x32\x18.buf.validate.BytesRulesH\x00R\x05\x62ytes\x12-\n\x04\x65num\x18\x10 \x01(\x0b\x32\x17.buf.validate.EnumRulesH\x00R\x04\x65num\x12\x39\n\x08repeated\x18\x12 \x01(\x0b\x32\x1b.buf.validate.RepeatedRulesH\x00R\x08repeated\x12*\n\x03map\x18\x13 \x01(\x0b\x32\x16.buf.validate.MapRulesH\x00R\x03map\x12*\n\x03\x61ny\x18\x14 \x01(\x0b\x32\x16.buf.validate.AnyRulesH\x00R\x03\x61ny\x12\x39\n\x08\x64uration\x18\x15 \x01(\x0b\x32\x1b.buf.validate.DurationRulesH\x00R\x08\x64uration\x12<\n\ttimestamp\x18\x16 \x01(\x0b\x32\x1c.buf.validate.TimestampRulesH\x00R\ttimestamp\x12\x1c\n\x07skipped\x18\x18 \x01(\x08\x42\x02\x18\x01R\x07skipped\x12%\n\x0cignore_empty\x18\x1a \x01(\x08\x42\x02\x18\x01R\x0bignoreEmptyB\x06\n\x04type\"\xa2\x17\n\nFloatRules\x12u\n\x05\x63onst\x18\x01 \x01(\x02\x42Z\xc2HW\nU\n\x0b\x66loat.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\xa3\x01\n\x02lt\x18\x02 \x01(\x02\x42\x90\x01\xc2H\x8c\x01\n\x89\x01\n\x08\x66loat.lt\x1a}!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xb4\x01\n\x03lte\x18\x03 \x01(\x02\x42\x9f\x01\xc2H\x9b\x01\n\x98\x01\n\tfloat.lte\x1a\x8a\x01!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xf3\x07\n\x02gt\x18\x04 \x01(\x02\x42\xe0\x07\xc2H\xdc\x07\n\x8d\x01\n\x08\x66loat.gt\x1a\x80\x01!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xc3\x01\n\x0b\x66loat.gt_lt\x1a\xb3\x01has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xcd\x01\n\x15\x66loat.gt_lt_exclusive\x1a\xb3\x01has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xd3\x01\n\x0c\x66loat.gt_lte\x1a\xc2\x01has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xdd\x01\n\x16\x66loat.gt_lte_exclusive\x1a\xc2\x01has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xbf\x08\n\x03gte\x18\x05 \x01(\x02\x42\xaa\x08\xc2H\xa6\x08\n\x9b\x01\n\tfloat.gte\x1a\x8d\x01!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xd2\x01\n\x0c\x66loat.gte_lt\x1a\xc1\x01has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xdc\x01\n\x16\x66loat.gte_lt_exclusive\x1a\xc1\x01has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xe2\x01\n\rfloat.gte_lte\x1a\xd0\x01has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xec\x01\n\x17\x66loat.gte_lte_exclusive\x1a\xd0\x01has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12y\n\x02in\x18\x06 \x03(\x02\x42i\xc2Hf\nd\n\x08\x66loat.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12}\n\x06not_in\x18\x07 \x03(\x02\x42\x66\xc2Hc\na\n\x0c\x66loat.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12g\n\x06\x66inite\x18\x08 \x01(\x08\x42O\xc2HL\nJ\n\x0c\x66loat.finite\x1a:this.isNan() || this.isInf() ? \'value must be finite\' : \'\'R\x06\x66initeB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\xb3\x17\n\x0b\x44oubleRules\x12v\n\x05\x63onst\x18\x01 \x01(\x01\x42[\xc2HX\nV\n\x0c\x64ouble.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\xa4\x01\n\x02lt\x18\x02 \x01(\x01\x42\x91\x01\xc2H\x8d\x01\n\x8a\x01\n\tdouble.lt\x1a}!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xb5\x01\n\x03lte\x18\x03 \x01(\x01\x42\xa0\x01\xc2H\x9c\x01\n\x99\x01\n\ndouble.lte\x1a\x8a\x01!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xf8\x07\n\x02gt\x18\x04 \x01(\x01\x42\xe5\x07\xc2H\xe1\x07\n\x8e\x01\n\tdouble.gt\x1a\x80\x01!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xc4\x01\n\x0c\x64ouble.gt_lt\x1a\xb3\x01has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xce\x01\n\x16\x64ouble.gt_lt_exclusive\x1a\xb3\x01has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xd4\x01\n\rdouble.gt_lte\x1a\xc2\x01has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xde\x01\n\x17\x64ouble.gt_lte_exclusive\x1a\xc2\x01has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xc4\x08\n\x03gte\x18\x05 \x01(\x01\x42\xaf\x08\xc2H\xab\x08\n\x9c\x01\n\ndouble.gte\x1a\x8d\x01!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xd3\x01\n\rdouble.gte_lt\x1a\xc1\x01has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xdd\x01\n\x17\x64ouble.gte_lt_exclusive\x1a\xc1\x01has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xe3\x01\n\x0e\x64ouble.gte_lte\x1a\xd0\x01has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xed\x01\n\x18\x64ouble.gte_lte_exclusive\x1a\xd0\x01has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12z\n\x02in\x18\x06 \x03(\x01\x42j\xc2Hg\ne\n\tdouble.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\x01\x42g\xc2Hd\nb\n\rdouble.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12h\n\x06\x66inite\x18\x08 \x01(\x08\x42P\xc2HM\nK\n\rdouble.finite\x1a:this.isNan() || this.isInf() ? \'value must be finite\' : \'\'R\x06\x66initeB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\xe2\x14\n\nInt32Rules\x12u\n\x05\x63onst\x18\x01 \x01(\x05\x42Z\xc2HW\nU\n\x0bint32.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x8e\x01\n\x02lt\x18\x02 \x01(\x05\x42|\xc2Hy\nw\n\x08int32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa1\x01\n\x03lte\x18\x03 \x01(\x05\x42\x8c\x01\xc2H\x88\x01\n\x85\x01\n\tint32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\x9b\x07\n\x02gt\x18\x04 \x01(\x05\x42\x88\x07\xc2H\x84\x07\nz\n\x08int32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb3\x01\n\x0bint32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbb\x01\n\x15int32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc3\x01\n\x0cint32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcb\x01\n\x16int32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xe8\x07\n\x03gte\x18\x05 \x01(\x05\x42\xd3\x07\xc2H\xcf\x07\n\x88\x01\n\tint32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc2\x01\n\x0cint32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xca\x01\n\x16int32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd2\x01\n\rint32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xda\x01\n\x17int32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12y\n\x02in\x18\x06 \x03(\x05\x42i\xc2Hf\nd\n\x08int32.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12}\n\x06not_in\x18\x07 \x03(\x05\x42\x66\xc2Hc\na\n\x0cint32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\xe2\x14\n\nInt64Rules\x12u\n\x05\x63onst\x18\x01 \x01(\x03\x42Z\xc2HW\nU\n\x0bint64.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x8e\x01\n\x02lt\x18\x02 \x01(\x03\x42|\xc2Hy\nw\n\x08int64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa1\x01\n\x03lte\x18\x03 \x01(\x03\x42\x8c\x01\xc2H\x88\x01\n\x85\x01\n\tint64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\x9b\x07\n\x02gt\x18\x04 \x01(\x03\x42\x88\x07\xc2H\x84\x07\nz\n\x08int64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb3\x01\n\x0bint64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbb\x01\n\x15int64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc3\x01\n\x0cint64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcb\x01\n\x16int64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xe8\x07\n\x03gte\x18\x05 \x01(\x03\x42\xd3\x07\xc2H\xcf\x07\n\x88\x01\n\tint64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc2\x01\n\x0cint64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xca\x01\n\x16int64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd2\x01\n\rint64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xda\x01\n\x17int64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12y\n\x02in\x18\x06 \x03(\x03\x42i\xc2Hf\nd\n\x08int64.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12}\n\x06not_in\x18\x07 \x03(\x03\x42\x66\xc2Hc\na\n\x0cint64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\xf2\x14\n\x0bUInt32Rules\x12v\n\x05\x63onst\x18\x01 \x01(\rB[\xc2HX\nV\n\x0cuint32.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x8f\x01\n\x02lt\x18\x02 \x01(\rB}\xc2Hz\nx\n\tuint32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa2\x01\n\x03lte\x18\x03 \x01(\rB\x8d\x01\xc2H\x89\x01\n\x86\x01\n\nuint32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa0\x07\n\x02gt\x18\x04 \x01(\rB\x8d\x07\xc2H\x89\x07\n{\n\tuint32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb4\x01\n\x0cuint32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbc\x01\n\x16uint32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc4\x01\n\ruint32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcc\x01\n\x17uint32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xed\x07\n\x03gte\x18\x05 \x01(\rB\xd8\x07\xc2H\xd4\x07\n\x89\x01\n\nuint32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc3\x01\n\ruint32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcb\x01\n\x17uint32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd3\x01\n\x0euint32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdb\x01\n\x18uint32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12z\n\x02in\x18\x06 \x03(\rBj\xc2Hg\ne\n\tuint32.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\rBg\xc2Hd\nb\n\ruint32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\xf2\x14\n\x0bUInt64Rules\x12v\n\x05\x63onst\x18\x01 \x01(\x04\x42[\xc2HX\nV\n\x0cuint64.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x8f\x01\n\x02lt\x18\x02 \x01(\x04\x42}\xc2Hz\nx\n\tuint64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa2\x01\n\x03lte\x18\x03 \x01(\x04\x42\x8d\x01\xc2H\x89\x01\n\x86\x01\n\nuint64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa0\x07\n\x02gt\x18\x04 \x01(\x04\x42\x8d\x07\xc2H\x89\x07\n{\n\tuint64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb4\x01\n\x0cuint64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbc\x01\n\x16uint64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc4\x01\n\ruint64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcc\x01\n\x17uint64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xed\x07\n\x03gte\x18\x05 \x01(\x04\x42\xd8\x07\xc2H\xd4\x07\n\x89\x01\n\nuint64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc3\x01\n\ruint64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcb\x01\n\x17uint64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd3\x01\n\x0euint64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdb\x01\n\x18uint64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12z\n\x02in\x18\x06 \x03(\x04\x42j\xc2Hg\ne\n\tuint64.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\x04\x42g\xc2Hd\nb\n\ruint64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\xf2\x14\n\x0bSInt32Rules\x12v\n\x05\x63onst\x18\x01 \x01(\x11\x42[\xc2HX\nV\n\x0csint32.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x8f\x01\n\x02lt\x18\x02 \x01(\x11\x42}\xc2Hz\nx\n\tsint32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa2\x01\n\x03lte\x18\x03 \x01(\x11\x42\x8d\x01\xc2H\x89\x01\n\x86\x01\n\nsint32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa0\x07\n\x02gt\x18\x04 \x01(\x11\x42\x8d\x07\xc2H\x89\x07\n{\n\tsint32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb4\x01\n\x0csint32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbc\x01\n\x16sint32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc4\x01\n\rsint32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcc\x01\n\x17sint32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xed\x07\n\x03gte\x18\x05 \x01(\x11\x42\xd8\x07\xc2H\xd4\x07\n\x89\x01\n\nsint32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc3\x01\n\rsint32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcb\x01\n\x17sint32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd3\x01\n\x0esint32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdb\x01\n\x18sint32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12z\n\x02in\x18\x06 \x03(\x11\x42j\xc2Hg\ne\n\tsint32.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\x11\x42g\xc2Hd\nb\n\rsint32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\xf2\x14\n\x0bSInt64Rules\x12v\n\x05\x63onst\x18\x01 \x01(\x12\x42[\xc2HX\nV\n\x0csint64.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x8f\x01\n\x02lt\x18\x02 \x01(\x12\x42}\xc2Hz\nx\n\tsint64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa2\x01\n\x03lte\x18\x03 \x01(\x12\x42\x8d\x01\xc2H\x89\x01\n\x86\x01\n\nsint64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa0\x07\n\x02gt\x18\x04 \x01(\x12\x42\x8d\x07\xc2H\x89\x07\n{\n\tsint64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb4\x01\n\x0csint64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbc\x01\n\x16sint64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc4\x01\n\rsint64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcc\x01\n\x17sint64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xed\x07\n\x03gte\x18\x05 \x01(\x12\x42\xd8\x07\xc2H\xd4\x07\n\x89\x01\n\nsint64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc3\x01\n\rsint64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcb\x01\n\x17sint64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd3\x01\n\x0esint64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdb\x01\n\x18sint64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12z\n\x02in\x18\x06 \x03(\x12\x42j\xc2Hg\ne\n\tsint64.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\x12\x42g\xc2Hd\nb\n\rsint64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\x82\x15\n\x0c\x46ixed32Rules\x12w\n\x05\x63onst\x18\x01 \x01(\x07\x42\\\xc2HY\nW\n\rfixed32.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x90\x01\n\x02lt\x18\x02 \x01(\x07\x42~\xc2H{\ny\n\nfixed32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa3\x01\n\x03lte\x18\x03 \x01(\x07\x42\x8e\x01\xc2H\x8a\x01\n\x87\x01\n\x0b\x66ixed32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa5\x07\n\x02gt\x18\x04 \x01(\x07\x42\x92\x07\xc2H\x8e\x07\n|\n\nfixed32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb5\x01\n\rfixed32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbd\x01\n\x17\x66ixed32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc5\x01\n\x0e\x66ixed32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcd\x01\n\x18\x66ixed32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xf2\x07\n\x03gte\x18\x05 \x01(\x07\x42\xdd\x07\xc2H\xd9\x07\n\x8a\x01\n\x0b\x66ixed32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc4\x01\n\x0e\x66ixed32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcc\x01\n\x18\x66ixed32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd4\x01\n\x0f\x66ixed32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdc\x01\n\x19\x66ixed32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12{\n\x02in\x18\x06 \x03(\x07\x42k\xc2Hh\nf\n\nfixed32.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12\x7f\n\x06not_in\x18\x07 \x03(\x07\x42h\xc2He\nc\n\x0e\x66ixed32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\x82\x15\n\x0c\x46ixed64Rules\x12w\n\x05\x63onst\x18\x01 \x01(\x06\x42\\\xc2HY\nW\n\rfixed64.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x90\x01\n\x02lt\x18\x02 \x01(\x06\x42~\xc2H{\ny\n\nfixed64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa3\x01\n\x03lte\x18\x03 \x01(\x06\x42\x8e\x01\xc2H\x8a\x01\n\x87\x01\n\x0b\x66ixed64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa5\x07\n\x02gt\x18\x04 \x01(\x06\x42\x92\x07\xc2H\x8e\x07\n|\n\nfixed64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb5\x01\n\rfixed64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbd\x01\n\x17\x66ixed64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc5\x01\n\x0e\x66ixed64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcd\x01\n\x18\x66ixed64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xf2\x07\n\x03gte\x18\x05 \x01(\x06\x42\xdd\x07\xc2H\xd9\x07\n\x8a\x01\n\x0b\x66ixed64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc4\x01\n\x0e\x66ixed64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcc\x01\n\x18\x66ixed64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd4\x01\n\x0f\x66ixed64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdc\x01\n\x19\x66ixed64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12{\n\x02in\x18\x06 \x03(\x06\x42k\xc2Hh\nf\n\nfixed64.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12\x7f\n\x06not_in\x18\x07 \x03(\x06\x42h\xc2He\nc\n\x0e\x66ixed64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\x93\x15\n\rSFixed32Rules\x12x\n\x05\x63onst\x18\x01 \x01(\x0f\x42]\xc2HZ\nX\n\x0esfixed32.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x91\x01\n\x02lt\x18\x02 \x01(\x0f\x42\x7f\xc2H|\nz\n\x0bsfixed32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa4\x01\n\x03lte\x18\x03 \x01(\x0f\x42\x8f\x01\xc2H\x8b\x01\n\x88\x01\n\x0csfixed32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xaa\x07\n\x02gt\x18\x04 \x01(\x0f\x42\x97\x07\xc2H\x93\x07\n}\n\x0bsfixed32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb6\x01\n\x0esfixed32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbe\x01\n\x18sfixed32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc6\x01\n\x0fsfixed32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xce\x01\n\x19sfixed32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xf7\x07\n\x03gte\x18\x05 \x01(\x0f\x42\xe2\x07\xc2H\xde\x07\n\x8b\x01\n\x0csfixed32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc5\x01\n\x0fsfixed32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcd\x01\n\x19sfixed32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd5\x01\n\x10sfixed32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdd\x01\n\x1asfixed32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12|\n\x02in\x18\x06 \x03(\x0f\x42l\xc2Hi\ng\n\x0bsfixed32.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12\x80\x01\n\x06not_in\x18\x07 \x03(\x0f\x42i\xc2Hf\nd\n\x0fsfixed32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\x93\x15\n\rSFixed64Rules\x12x\n\x05\x63onst\x18\x01 \x01(\x10\x42]\xc2HZ\nX\n\x0esfixed64.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x91\x01\n\x02lt\x18\x02 \x01(\x10\x42\x7f\xc2H|\nz\n\x0bsfixed64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa4\x01\n\x03lte\x18\x03 \x01(\x10\x42\x8f\x01\xc2H\x8b\x01\n\x88\x01\n\x0csfixed64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xaa\x07\n\x02gt\x18\x04 \x01(\x10\x42\x97\x07\xc2H\x93\x07\n}\n\x0bsfixed64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb6\x01\n\x0esfixed64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbe\x01\n\x18sfixed64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc6\x01\n\x0fsfixed64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xce\x01\n\x19sfixed64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xf7\x07\n\x03gte\x18\x05 \x01(\x10\x42\xe2\x07\xc2H\xde\x07\n\x8b\x01\n\x0csfixed64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc5\x01\n\x0fsfixed64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcd\x01\n\x19sfixed64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd5\x01\n\x10sfixed64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdd\x01\n\x1asfixed64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12|\n\x02in\x18\x06 \x03(\x10\x42l\xc2Hi\ng\n\x0bsfixed64.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12\x80\x01\n\x06not_in\x18\x07 \x03(\x10\x42i\xc2Hf\nd\n\x0fsfixed64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\x8b\x01\n\tBoolRules\x12t\n\x05\x63onst\x18\x01 \x01(\x08\x42Y\xc2HV\nT\n\nbool.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x00R\x05\x63onst\x88\x01\x01\x42\x08\n\x06_const\"\xae\x35\n\x0bStringRules\x12x\n\x05\x63onst\x18\x01 \x01(\tB]\xc2HZ\nX\n\x0cstring.const\x1aHthis != rules.const ? \'value must equal `%s`\'.format([rules.const]) : \'\'H\x01R\x05\x63onst\x88\x01\x01\x12\x88\x01\n\x03len\x18\x13 \x01(\x04\x42q\xc2Hn\nl\n\nstring.len\x1a^uint(this.size()) != rules.len ? \'value length must be %s characters\'.format([rules.len]) : \'\'H\x02R\x03len\x88\x01\x01\x12\xa6\x01\n\x07min_len\x18\x02 \x01(\x04\x42\x87\x01\xc2H\x83\x01\n\x80\x01\n\x0estring.min_len\x1anuint(this.size()) < rules.min_len ? \'value length must be at least %s characters\'.format([rules.min_len]) : \'\'H\x03R\x06minLen\x88\x01\x01\x12\xa4\x01\n\x07max_len\x18\x03 \x01(\x04\x42\x85\x01\xc2H\x81\x01\n\x7f\n\x0estring.max_len\x1amuint(this.size()) > rules.max_len ? \'value length must be at most %s characters\'.format([rules.max_len]) : \'\'H\x04R\x06maxLen\x88\x01\x01\x12\xaa\x01\n\tlen_bytes\x18\x14 \x01(\x04\x42\x87\x01\xc2H\x83\x01\n\x80\x01\n\x10string.len_bytes\x1aluint(bytes(this).size()) != rules.len_bytes ? \'value length must be %s bytes\'.format([rules.len_bytes]) : \'\'H\x05R\x08lenBytes\x88\x01\x01\x12\xb2\x01\n\tmin_bytes\x18\x04 \x01(\x04\x42\x8f\x01\xc2H\x8b\x01\n\x88\x01\n\x10string.min_bytes\x1atuint(bytes(this).size()) < rules.min_bytes ? \'value length must be at least %s bytes\'.format([rules.min_bytes]) : \'\'H\x06R\x08minBytes\x88\x01\x01\x12\xb1\x01\n\tmax_bytes\x18\x05 \x01(\x04\x42\x8e\x01\xc2H\x8a\x01\n\x87\x01\n\x10string.max_bytes\x1asuint(bytes(this).size()) > rules.max_bytes ? \'value length must be at most %s bytes\'.format([rules.max_bytes]) : \'\'H\x07R\x08maxBytes\x88\x01\x01\x12\x9b\x01\n\x07pattern\x18\x06 \x01(\tB|\xc2Hy\nw\n\x0estring.pattern\x1a\x65!this.matches(rules.pattern) ? \'value does not match regex pattern `%s`\'.format([rules.pattern]) : \'\'H\x08R\x07pattern\x88\x01\x01\x12\x91\x01\n\x06prefix\x18\x07 \x01(\tBt\xc2Hq\no\n\rstring.prefix\x1a^!this.startsWith(rules.prefix) ? \'value does not have prefix `%s`\'.format([rules.prefix]) : \'\'H\tR\x06prefix\x88\x01\x01\x12\x8f\x01\n\x06suffix\x18\x08 \x01(\tBr\xc2Ho\nm\n\rstring.suffix\x1a\\!this.endsWith(rules.suffix) ? \'value does not have suffix `%s`\'.format([rules.suffix]) : \'\'H\nR\x06suffix\x88\x01\x01\x12\x9f\x01\n\x08\x63ontains\x18\t \x01(\tB~\xc2H{\ny\n\x0fstring.contains\x1a\x66!this.contains(rules.contains) ? \'value does not contain substring `%s`\'.format([rules.contains]) : \'\'H\x0bR\x08\x63ontains\x88\x01\x01\x12\xaa\x01\n\x0cnot_contains\x18\x17 \x01(\tB\x81\x01\xc2H~\n|\n\x13string.not_contains\x1a\x65this.contains(rules.not_contains) ? \'value contains substring `%s`\'.format([rules.not_contains]) : \'\'H\x0cR\x0bnotContains\x88\x01\x01\x12z\n\x02in\x18\n \x03(\tBj\xc2Hg\ne\n\tstring.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12~\n\x06not_in\x18\x0b \x03(\tBg\xc2Hd\nb\n\rstring.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\xc6\x01\n\x05\x65mail\x18\x0c \x01(\x08\x42\xad\x01\xc2H\xa9\x01\nQ\n\x0cstring.email\x12#value must be a valid email address\x1a\x1cthis == \'\' || this.isEmail()\nT\n\x12string.email_empty\x12\x32value is empty, which is not a valid email address\x1a\nthis != \'\'H\x00R\x05\x65mail\x12\xcb\x01\n\x08hostname\x18\r \x01(\x08\x42\xac\x01\xc2H\xa8\x01\nR\n\x0fstring.hostname\x12\x1evalue must be a valid hostname\x1a\x1fthis == \'\' || this.isHostname()\nR\n\x15string.hostname_empty\x12-value is empty, which is not a valid hostname\x1a\nthis != \'\'H\x00R\x08hostname\x12\xb1\x01\n\x02ip\x18\x0e \x01(\x08\x42\x9e\x01\xc2H\x9a\x01\nH\n\tstring.ip\x12 value must be a valid IP address\x1a\x19this == \'\' || this.isIp()\nN\n\x0fstring.ip_empty\x12/value is empty, which is not a valid IP address\x1a\nthis != \'\'H\x00R\x02ip\x12\xbe\x01\n\x04ipv4\x18\x0f \x01(\x08\x42\xa7\x01\xc2H\xa3\x01\nM\n\x0bstring.ipv4\x12\"value must be a valid IPv4 address\x1a\x1athis == \'\' || this.isIp(4)\nR\n\x11string.ipv4_empty\x12\x31value is empty, which is not a valid IPv4 address\x1a\nthis != \'\'H\x00R\x04ipv4\x12\xbe\x01\n\x04ipv6\x18\x10 \x01(\x08\x42\xa7\x01\xc2H\xa3\x01\nM\n\x0bstring.ipv6\x12\"value must be a valid IPv6 address\x1a\x1athis == \'\' || this.isIp(6)\nR\n\x11string.ipv6_empty\x12\x31value is empty, which is not a valid IPv6 address\x1a\nthis != \'\'H\x00R\x04ipv6\x12\xa8\x01\n\x03uri\x18\x11 \x01(\x08\x42\x93\x01\xc2H\x8f\x01\nC\n\nstring.uri\x12\x19value must be a valid URI\x1a\x1athis == \'\' || this.isUri()\nH\n\x10string.uri_empty\x12(value is empty, which is not a valid URI\x1a\nthis != \'\'H\x00R\x03uri\x12\\\n\x07uri_ref\x18\x12 \x01(\x08\x42\x41\xc2H>\n<\n\x0estring.uri_ref\x12\x19value must be a valid URI\x1a\x0fthis.isUriRef()H\x00R\x06uriRef\x12\xf4\x01\n\x07\x61\x64\x64ress\x18\x15 \x01(\x08\x42\xd7\x01\xc2H\xd3\x01\no\n\x0estring.address\x12-value must be a valid hostname, or ip address\x1a.this == \'\' || this.isHostname() || this.isIp()\n`\n\x14string.address_empty\x12 rules.max_len ? \'value must be at most %s bytes\'.format([rules.max_len]) : \'\'H\x04R\x06maxLen\x88\x01\x01\x12\x9e\x01\n\x07pattern\x18\x04 \x01(\tB\x7f\xc2H|\nz\n\rbytes.pattern\x1ai!string(this).matches(rules.pattern) ? \'value must match regex pattern `%s`\'.format([rules.pattern]) : \'\'H\x05R\x07pattern\x88\x01\x01\x12\x8e\x01\n\x06prefix\x18\x05 \x01(\x0c\x42q\xc2Hn\nl\n\x0c\x62ytes.prefix\x1a\\!this.startsWith(rules.prefix) ? \'value does not have prefix %x\'.format([rules.prefix]) : \'\'H\x06R\x06prefix\x88\x01\x01\x12\x8c\x01\n\x06suffix\x18\x06 \x01(\x0c\x42o\xc2Hl\nj\n\x0c\x62ytes.suffix\x1aZ!this.endsWith(rules.suffix) ? \'value does not have suffix %x\'.format([rules.suffix]) : \'\'H\x07R\x06suffix\x88\x01\x01\x12\x92\x01\n\x08\x63ontains\x18\x07 \x01(\x0c\x42q\xc2Hn\nl\n\x0e\x62ytes.contains\x1aZ!this.contains(rules.contains) ? \'value does not contain %x\'.format([rules.contains]) : \'\'H\x08R\x08\x63ontains\x88\x01\x01\x12\x9b\x01\n\x02in\x18\x08 \x03(\x0c\x42\x8a\x01\xc2H\x86\x01\n\x83\x01\n\x08\x62ytes.in\x1awdyn(rules)[\'in\'].size() > 0 && !(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12}\n\x06not_in\x18\t \x03(\x0c\x42\x66\xc2Hc\na\n\x0c\x62ytes.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\xd5\x01\n\x02ip\x18\n \x01(\x08\x42\xc2\x01\xc2H\xbe\x01\ng\n\x08\x62ytes.ip\x12 value must be a valid IP address\x1a\x39this.size() == 0 || this.size() == 4 || this.size() == 16\nS\n\x0e\x62ytes.ip_empty\x12/value is empty, which is not a valid IP address\x1a\x10this.size() != 0H\x00R\x02ip\x12\xcc\x01\n\x04ipv4\x18\x0b \x01(\x08\x42\xb5\x01\xc2H\xb1\x01\nV\n\nbytes.ipv4\x12\"value must be a valid IPv4 address\x1a$this.size() == 0 || this.size() == 4\nW\n\x10\x62ytes.ipv4_empty\x12\x31value is empty, which is not a valid IPv4 address\x1a\x10this.size() != 0H\x00R\x04ipv4\x12\xcd\x01\n\x04ipv6\x18\x0c \x01(\x08\x42\xb6\x01\xc2H\xb2\x01\nW\n\nbytes.ipv6\x12\"value must be a valid IPv6 address\x1a%this.size() == 0 || this.size() == 16\nW\n\x10\x62ytes.ipv6_empty\x12\x31value is empty, which is not a valid IPv6 address\x1a\x10this.size() != 0H\x00R\x04ipv6B\x0c\n\nwell_knownB\x08\n\x06_constB\x06\n\x04_lenB\n\n\x08_min_lenB\n\n\x08_max_lenB\n\n\x08_patternB\t\n\x07_prefixB\t\n\x07_suffixB\x0b\n\t_contains\"\xbc\x03\n\tEnumRules\x12t\n\x05\x63onst\x18\x01 \x01(\x05\x42Y\xc2HV\nT\n\nenum.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x00R\x05\x63onst\x88\x01\x01\x12&\n\x0c\x64\x65\x66ined_only\x18\x02 \x01(\x08H\x01R\x0b\x64\x65\x66inedOnly\x88\x01\x01\x12x\n\x02in\x18\x03 \x03(\x05\x42h\xc2He\nc\n\x07\x65num.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12|\n\x06not_in\x18\x04 \x03(\x05\x42\x65\xc2Hb\n`\n\x0b\x65num.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x08\n\x06_constB\x0f\n\r_defined_only\"\xcd\x04\n\rRepeatedRules\x12\xad\x01\n\tmin_items\x18\x01 \x01(\x04\x42\x8a\x01\xc2H\x86\x01\n\x83\x01\n\x12repeated.min_items\x1amuint(this.size()) < rules.min_items ? \'value must contain at least %d item(s)\'.format([rules.min_items]) : \'\'H\x00R\x08minItems\x88\x01\x01\x12\xb1\x01\n\tmax_items\x18\x02 \x01(\x04\x42\x8e\x01\xc2H\x8a\x01\n\x87\x01\n\x12repeated.max_items\x1aquint(this.size()) > rules.max_items ? \'value must contain no more than %s item(s)\'.format([rules.max_items]) : \'\'H\x01R\x08maxItems\x88\x01\x01\x12l\n\x06unique\x18\x03 \x01(\x08\x42O\xc2HL\nJ\n\x0frepeated.unique\x12(repeated value must contain unique items\x1a\rthis.unique()H\x02R\x06unique\x88\x01\x01\x12\x39\n\x05items\x18\x04 \x01(\x0b\x32\x1e.buf.validate.FieldConstraintsH\x03R\x05items\x88\x01\x01\x42\x0c\n\n_min_itemsB\x0c\n\n_max_itemsB\t\n\x07_uniqueB\x08\n\x06_items\"\xf1\x03\n\x08MapRules\x12\x9e\x01\n\tmin_pairs\x18\x01 \x01(\x04\x42|\xc2Hy\nw\n\rmap.min_pairs\x1a\x66uint(this.size()) < rules.min_pairs ? \'map must be at least %d entries\'.format([rules.min_pairs]) : \'\'H\x00R\x08minPairs\x88\x01\x01\x12\x9d\x01\n\tmax_pairs\x18\x02 \x01(\x04\x42{\xc2Hx\nv\n\rmap.max_pairs\x1a\x65uint(this.size()) > rules.max_pairs ? \'map must be at most %d entries\'.format([rules.max_pairs]) : \'\'H\x01R\x08maxPairs\x88\x01\x01\x12\x37\n\x04keys\x18\x04 \x01(\x0b\x32\x1e.buf.validate.FieldConstraintsH\x02R\x04keys\x88\x01\x01\x12;\n\x06values\x18\x05 \x01(\x0b\x32\x1e.buf.validate.FieldConstraintsH\x03R\x06values\x88\x01\x01\x42\x0c\n\n_min_pairsB\x0c\n\n_max_pairsB\x07\n\x05_keysB\t\n\x07_values\"1\n\x08\x41nyRules\x12\x0e\n\x02in\x18\x02 \x03(\tR\x02in\x12\x15\n\x06not_in\x18\x03 \x03(\tR\x05notIn\"\xd2\x16\n\rDurationRules\x12\x93\x01\n\x05\x63onst\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationB]\xc2HZ\nX\n\x0e\x64uration.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\xac\x01\n\x02lt\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationB\x7f\xc2H|\nz\n\x0b\x64uration.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xbf\x01\n\x03lte\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationB\x8f\x01\xc2H\x8b\x01\n\x88\x01\n\x0c\x64uration.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xc5\x07\n\x02gt\x18\x05 \x01(\x0b\x32\x19.google.protobuf.DurationB\x97\x07\xc2H\x93\x07\n}\n\x0b\x64uration.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb6\x01\n\x0e\x64uration.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbe\x01\n\x18\x64uration.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc6\x01\n\x0f\x64uration.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xce\x01\n\x19\x64uration.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\x92\x08\n\x03gte\x18\x06 \x01(\x0b\x32\x19.google.protobuf.DurationB\xe2\x07\xc2H\xde\x07\n\x8b\x01\n\x0c\x64uration.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc5\x01\n\x0f\x64uration.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcd\x01\n\x19\x64uration.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd5\x01\n\x10\x64uration.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdd\x01\n\x1a\x64uration.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x97\x01\n\x02in\x18\x07 \x03(\x0b\x32\x19.google.protobuf.DurationBl\xc2Hi\ng\n\x0b\x64uration.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12\x9b\x01\n\x06not_in\x18\x08 \x03(\x0b\x32\x19.google.protobuf.DurationBi\xc2Hf\nd\n\x0f\x64uration.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\xca\x17\n\x0eTimestampRules\x12\x95\x01\n\x05\x63onst\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB^\xc2H[\nY\n\x0ftimestamp.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\xaf\x01\n\x02lt\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x80\x01\xc2H}\n{\n\x0ctimestamp.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xc1\x01\n\x03lte\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x90\x01\xc2H\x8c\x01\n\x89\x01\n\rtimestamp.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\x61\n\x06lt_now\x18\x07 \x01(\x08\x42H\xc2HE\nC\n\x10timestamp.lt_now\x1a/this > now ? \'value must be less than now\' : \'\'H\x00R\x05ltNow\x12\xcb\x07\n\x02gt\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x9c\x07\xc2H\x98\x07\n~\n\x0ctimestamp.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb7\x01\n\x0ftimestamp.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbf\x01\n\x19timestamp.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc7\x01\n\x10timestamp.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcf\x01\n\x1atimestamp.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\x98\x08\n\x03gte\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xe7\x07\xc2H\xe3\x07\n\x8c\x01\n\rtimestamp.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc6\x01\n\x10timestamp.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xce\x01\n\x1atimestamp.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd6\x01\n\x11timestamp.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xde\x01\n\x1btimestamp.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x64\n\x06gt_now\x18\x08 \x01(\x08\x42K\xc2HH\nF\n\x10timestamp.gt_now\x1a\x32this < now ? \'value must be greater than now\' : \'\'H\x01R\x05gtNow\x12\xc5\x01\n\x06within\x18\t \x01(\x0b\x32\x19.google.protobuf.DurationB\x8c\x01\xc2H\x88\x01\n\x85\x01\n\x10timestamp.within\x1aqthis < now-rules.within || this > now+rules.within ? \'value must be within %s of now\'.format([rules.within]) : \'\'H\x03R\x06within\x88\x01\x01\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_constB\t\n\x07_within*\x9d\x01\n\x06Ignore\x12\x16\n\x12IGNORE_UNSPECIFIED\x10\x00\x12\x19\n\x15IGNORE_IF_UNPOPULATED\x10\x01\x12\x1b\n\x17IGNORE_IF_DEFAULT_VALUE\x10\x02\x12\x11\n\rIGNORE_ALWAYS\x10\x03\x12\x14\n\x0cIGNORE_EMPTY\x10\x01\x1a\x02\x08\x01\x12\x16\n\x0eIGNORE_DEFAULT\x10\x02\x1a\x02\x08\x01\x1a\x02\x10\x01*n\n\nKnownRegex\x12\x1b\n\x17KNOWN_REGEX_UNSPECIFIED\x10\x00\x12 \n\x1cKNOWN_REGEX_HTTP_HEADER_NAME\x10\x01\x12!\n\x1dKNOWN_REGEX_HTTP_HEADER_VALUE\x10\x02:_\n\x07message\x12\x1f.google.protobuf.MessageOptions\x18\x87\t \x01(\x0b\x32 .buf.validate.MessageConstraintsR\x07message\x88\x01\x01:W\n\x05oneof\x12\x1d.google.protobuf.OneofOptions\x18\x87\t \x01(\x0b\x32\x1e.buf.validate.OneofConstraintsR\x05oneof\x88\x01\x01:W\n\x05\x66ield\x12\x1d.google.protobuf.FieldOptions\x18\x87\t \x01(\x0b\x32\x1e.buf.validate.FieldConstraintsR\x05\x66ield\x88\x01\x01\x42n\n\x12\x62uild.buf.validateB\rValidateProtoP\x01ZGbuf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validateb\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'buf.validate.validate_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\022build.buf.validateB\rValidateProtoP\001ZGbuf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate' - _globals['_IGNORE']._loaded_options = None - _globals['_IGNORE']._serialized_options = b'\020\001' - _globals['_IGNORE'].values_by_name["IGNORE_EMPTY"]._loaded_options = None - _globals['_IGNORE'].values_by_name["IGNORE_EMPTY"]._serialized_options = b'\010\001' - _globals['_IGNORE'].values_by_name["IGNORE_DEFAULT"]._loaded_options = None - _globals['_IGNORE'].values_by_name["IGNORE_DEFAULT"]._serialized_options = b'\010\001' - _globals['_FIELDCONSTRAINTS'].fields_by_name['skipped']._loaded_options = None - _globals['_FIELDCONSTRAINTS'].fields_by_name['skipped']._serialized_options = b'\030\001' - _globals['_FIELDCONSTRAINTS'].fields_by_name['ignore_empty']._loaded_options = None - _globals['_FIELDCONSTRAINTS'].fields_by_name['ignore_empty']._serialized_options = b'\030\001' - _globals['_FLOATRULES'].fields_by_name['const']._loaded_options = None - _globals['_FLOATRULES'].fields_by_name['const']._serialized_options = b'\302HW\nU\n\013float.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' - _globals['_FLOATRULES'].fields_by_name['lt']._loaded_options = None - _globals['_FLOATRULES'].fields_by_name['lt']._serialized_options = b'\302H\214\001\n\211\001\n\010float.lt\032}!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)? \'value must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_FLOATRULES'].fields_by_name['lte']._loaded_options = None - _globals['_FLOATRULES'].fields_by_name['lte']._serialized_options = b'\302H\233\001\n\230\001\n\tfloat.lte\032\212\001!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_FLOATRULES'].fields_by_name['gt']._loaded_options = None - _globals['_FLOATRULES'].fields_by_name['gt']._serialized_options = b'\302H\334\007\n\215\001\n\010float.gt\032\200\001!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\303\001\n\013float.gt_lt\032\263\001has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\315\001\n\025float.gt_lt_exclusive\032\263\001has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\323\001\n\014float.gt_lte\032\302\001has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\335\001\n\026float.gt_lte_exclusive\032\302\001has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_FLOATRULES'].fields_by_name['gte']._loaded_options = None - _globals['_FLOATRULES'].fields_by_name['gte']._serialized_options = b'\302H\246\010\n\233\001\n\tfloat.gte\032\215\001!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\322\001\n\014float.gte_lt\032\301\001has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\334\001\n\026float.gte_lt_exclusive\032\301\001has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\342\001\n\rfloat.gte_lte\032\320\001has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\354\001\n\027float.gte_lte_exclusive\032\320\001has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_FLOATRULES'].fields_by_name['in']._loaded_options = None - _globals['_FLOATRULES'].fields_by_name['in']._serialized_options = b'\302Hf\nd\n\010float.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' - _globals['_FLOATRULES'].fields_by_name['not_in']._loaded_options = None - _globals['_FLOATRULES'].fields_by_name['not_in']._serialized_options = b'\302Hc\na\n\014float.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_FLOATRULES'].fields_by_name['finite']._loaded_options = None - _globals['_FLOATRULES'].fields_by_name['finite']._serialized_options = b'\302HL\nJ\n\014float.finite\032:this.isNan() || this.isInf() ? \'value must be finite\' : \'\'' - _globals['_DOUBLERULES'].fields_by_name['const']._loaded_options = None - _globals['_DOUBLERULES'].fields_by_name['const']._serialized_options = b'\302HX\nV\n\014double.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' - _globals['_DOUBLERULES'].fields_by_name['lt']._loaded_options = None - _globals['_DOUBLERULES'].fields_by_name['lt']._serialized_options = b'\302H\215\001\n\212\001\n\tdouble.lt\032}!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)? \'value must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_DOUBLERULES'].fields_by_name['lte']._loaded_options = None - _globals['_DOUBLERULES'].fields_by_name['lte']._serialized_options = b'\302H\234\001\n\231\001\n\ndouble.lte\032\212\001!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_DOUBLERULES'].fields_by_name['gt']._loaded_options = None - _globals['_DOUBLERULES'].fields_by_name['gt']._serialized_options = b'\302H\341\007\n\216\001\n\tdouble.gt\032\200\001!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\304\001\n\014double.gt_lt\032\263\001has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\316\001\n\026double.gt_lt_exclusive\032\263\001has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\324\001\n\rdouble.gt_lte\032\302\001has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\336\001\n\027double.gt_lte_exclusive\032\302\001has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_DOUBLERULES'].fields_by_name['gte']._loaded_options = None - _globals['_DOUBLERULES'].fields_by_name['gte']._serialized_options = b'\302H\253\010\n\234\001\n\ndouble.gte\032\215\001!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\323\001\n\rdouble.gte_lt\032\301\001has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\335\001\n\027double.gte_lt_exclusive\032\301\001has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\343\001\n\016double.gte_lte\032\320\001has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\355\001\n\030double.gte_lte_exclusive\032\320\001has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_DOUBLERULES'].fields_by_name['in']._loaded_options = None - _globals['_DOUBLERULES'].fields_by_name['in']._serialized_options = b'\302Hg\ne\n\tdouble.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' - _globals['_DOUBLERULES'].fields_by_name['not_in']._loaded_options = None - _globals['_DOUBLERULES'].fields_by_name['not_in']._serialized_options = b'\302Hd\nb\n\rdouble.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_DOUBLERULES'].fields_by_name['finite']._loaded_options = None - _globals['_DOUBLERULES'].fields_by_name['finite']._serialized_options = b'\302HM\nK\n\rdouble.finite\032:this.isNan() || this.isInf() ? \'value must be finite\' : \'\'' - _globals['_INT32RULES'].fields_by_name['const']._loaded_options = None - _globals['_INT32RULES'].fields_by_name['const']._serialized_options = b'\302HW\nU\n\013int32.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' - _globals['_INT32RULES'].fields_by_name['lt']._loaded_options = None - _globals['_INT32RULES'].fields_by_name['lt']._serialized_options = b'\302Hy\nw\n\010int32.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_INT32RULES'].fields_by_name['lte']._loaded_options = None - _globals['_INT32RULES'].fields_by_name['lte']._serialized_options = b'\302H\210\001\n\205\001\n\tint32.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_INT32RULES'].fields_by_name['gt']._loaded_options = None - _globals['_INT32RULES'].fields_by_name['gt']._serialized_options = b'\302H\204\007\nz\n\010int32.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\263\001\n\013int32.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\273\001\n\025int32.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\303\001\n\014int32.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\313\001\n\026int32.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_INT32RULES'].fields_by_name['gte']._loaded_options = None - _globals['_INT32RULES'].fields_by_name['gte']._serialized_options = b'\302H\317\007\n\210\001\n\tint32.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\302\001\n\014int32.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\312\001\n\026int32.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\322\001\n\rint32.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\332\001\n\027int32.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_INT32RULES'].fields_by_name['in']._loaded_options = None - _globals['_INT32RULES'].fields_by_name['in']._serialized_options = b'\302Hf\nd\n\010int32.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' - _globals['_INT32RULES'].fields_by_name['not_in']._loaded_options = None - _globals['_INT32RULES'].fields_by_name['not_in']._serialized_options = b'\302Hc\na\n\014int32.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_INT64RULES'].fields_by_name['const']._loaded_options = None - _globals['_INT64RULES'].fields_by_name['const']._serialized_options = b'\302HW\nU\n\013int64.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' - _globals['_INT64RULES'].fields_by_name['lt']._loaded_options = None - _globals['_INT64RULES'].fields_by_name['lt']._serialized_options = b'\302Hy\nw\n\010int64.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_INT64RULES'].fields_by_name['lte']._loaded_options = None - _globals['_INT64RULES'].fields_by_name['lte']._serialized_options = b'\302H\210\001\n\205\001\n\tint64.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_INT64RULES'].fields_by_name['gt']._loaded_options = None - _globals['_INT64RULES'].fields_by_name['gt']._serialized_options = b'\302H\204\007\nz\n\010int64.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\263\001\n\013int64.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\273\001\n\025int64.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\303\001\n\014int64.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\313\001\n\026int64.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_INT64RULES'].fields_by_name['gte']._loaded_options = None - _globals['_INT64RULES'].fields_by_name['gte']._serialized_options = b'\302H\317\007\n\210\001\n\tint64.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\302\001\n\014int64.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\312\001\n\026int64.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\322\001\n\rint64.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\332\001\n\027int64.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_INT64RULES'].fields_by_name['in']._loaded_options = None - _globals['_INT64RULES'].fields_by_name['in']._serialized_options = b'\302Hf\nd\n\010int64.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' - _globals['_INT64RULES'].fields_by_name['not_in']._loaded_options = None - _globals['_INT64RULES'].fields_by_name['not_in']._serialized_options = b'\302Hc\na\n\014int64.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_UINT32RULES'].fields_by_name['const']._loaded_options = None - _globals['_UINT32RULES'].fields_by_name['const']._serialized_options = b'\302HX\nV\n\014uint32.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' - _globals['_UINT32RULES'].fields_by_name['lt']._loaded_options = None - _globals['_UINT32RULES'].fields_by_name['lt']._serialized_options = b'\302Hz\nx\n\tuint32.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_UINT32RULES'].fields_by_name['lte']._loaded_options = None - _globals['_UINT32RULES'].fields_by_name['lte']._serialized_options = b'\302H\211\001\n\206\001\n\nuint32.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_UINT32RULES'].fields_by_name['gt']._loaded_options = None - _globals['_UINT32RULES'].fields_by_name['gt']._serialized_options = b'\302H\211\007\n{\n\tuint32.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\264\001\n\014uint32.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\274\001\n\026uint32.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\304\001\n\ruint32.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\314\001\n\027uint32.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_UINT32RULES'].fields_by_name['gte']._loaded_options = None - _globals['_UINT32RULES'].fields_by_name['gte']._serialized_options = b'\302H\324\007\n\211\001\n\nuint32.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\303\001\n\ruint32.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\313\001\n\027uint32.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\323\001\n\016uint32.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\333\001\n\030uint32.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_UINT32RULES'].fields_by_name['in']._loaded_options = None - _globals['_UINT32RULES'].fields_by_name['in']._serialized_options = b'\302Hg\ne\n\tuint32.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' - _globals['_UINT32RULES'].fields_by_name['not_in']._loaded_options = None - _globals['_UINT32RULES'].fields_by_name['not_in']._serialized_options = b'\302Hd\nb\n\ruint32.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_UINT64RULES'].fields_by_name['const']._loaded_options = None - _globals['_UINT64RULES'].fields_by_name['const']._serialized_options = b'\302HX\nV\n\014uint64.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' - _globals['_UINT64RULES'].fields_by_name['lt']._loaded_options = None - _globals['_UINT64RULES'].fields_by_name['lt']._serialized_options = b'\302Hz\nx\n\tuint64.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_UINT64RULES'].fields_by_name['lte']._loaded_options = None - _globals['_UINT64RULES'].fields_by_name['lte']._serialized_options = b'\302H\211\001\n\206\001\n\nuint64.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_UINT64RULES'].fields_by_name['gt']._loaded_options = None - _globals['_UINT64RULES'].fields_by_name['gt']._serialized_options = b'\302H\211\007\n{\n\tuint64.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\264\001\n\014uint64.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\274\001\n\026uint64.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\304\001\n\ruint64.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\314\001\n\027uint64.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_UINT64RULES'].fields_by_name['gte']._loaded_options = None - _globals['_UINT64RULES'].fields_by_name['gte']._serialized_options = b'\302H\324\007\n\211\001\n\nuint64.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\303\001\n\ruint64.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\313\001\n\027uint64.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\323\001\n\016uint64.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\333\001\n\030uint64.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_UINT64RULES'].fields_by_name['in']._loaded_options = None - _globals['_UINT64RULES'].fields_by_name['in']._serialized_options = b'\302Hg\ne\n\tuint64.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' - _globals['_UINT64RULES'].fields_by_name['not_in']._loaded_options = None - _globals['_UINT64RULES'].fields_by_name['not_in']._serialized_options = b'\302Hd\nb\n\ruint64.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_SINT32RULES'].fields_by_name['const']._loaded_options = None - _globals['_SINT32RULES'].fields_by_name['const']._serialized_options = b'\302HX\nV\n\014sint32.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' - _globals['_SINT32RULES'].fields_by_name['lt']._loaded_options = None - _globals['_SINT32RULES'].fields_by_name['lt']._serialized_options = b'\302Hz\nx\n\tsint32.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_SINT32RULES'].fields_by_name['lte']._loaded_options = None - _globals['_SINT32RULES'].fields_by_name['lte']._serialized_options = b'\302H\211\001\n\206\001\n\nsint32.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_SINT32RULES'].fields_by_name['gt']._loaded_options = None - _globals['_SINT32RULES'].fields_by_name['gt']._serialized_options = b'\302H\211\007\n{\n\tsint32.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\264\001\n\014sint32.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\274\001\n\026sint32.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\304\001\n\rsint32.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\314\001\n\027sint32.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_SINT32RULES'].fields_by_name['gte']._loaded_options = None - _globals['_SINT32RULES'].fields_by_name['gte']._serialized_options = b'\302H\324\007\n\211\001\n\nsint32.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\303\001\n\rsint32.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\313\001\n\027sint32.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\323\001\n\016sint32.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\333\001\n\030sint32.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_SINT32RULES'].fields_by_name['in']._loaded_options = None - _globals['_SINT32RULES'].fields_by_name['in']._serialized_options = b'\302Hg\ne\n\tsint32.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' - _globals['_SINT32RULES'].fields_by_name['not_in']._loaded_options = None - _globals['_SINT32RULES'].fields_by_name['not_in']._serialized_options = b'\302Hd\nb\n\rsint32.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_SINT64RULES'].fields_by_name['const']._loaded_options = None - _globals['_SINT64RULES'].fields_by_name['const']._serialized_options = b'\302HX\nV\n\014sint64.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' - _globals['_SINT64RULES'].fields_by_name['lt']._loaded_options = None - _globals['_SINT64RULES'].fields_by_name['lt']._serialized_options = b'\302Hz\nx\n\tsint64.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_SINT64RULES'].fields_by_name['lte']._loaded_options = None - _globals['_SINT64RULES'].fields_by_name['lte']._serialized_options = b'\302H\211\001\n\206\001\n\nsint64.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_SINT64RULES'].fields_by_name['gt']._loaded_options = None - _globals['_SINT64RULES'].fields_by_name['gt']._serialized_options = b'\302H\211\007\n{\n\tsint64.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\264\001\n\014sint64.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\274\001\n\026sint64.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\304\001\n\rsint64.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\314\001\n\027sint64.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_SINT64RULES'].fields_by_name['gte']._loaded_options = None - _globals['_SINT64RULES'].fields_by_name['gte']._serialized_options = b'\302H\324\007\n\211\001\n\nsint64.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\303\001\n\rsint64.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\313\001\n\027sint64.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\323\001\n\016sint64.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\333\001\n\030sint64.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_SINT64RULES'].fields_by_name['in']._loaded_options = None - _globals['_SINT64RULES'].fields_by_name['in']._serialized_options = b'\302Hg\ne\n\tsint64.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' - _globals['_SINT64RULES'].fields_by_name['not_in']._loaded_options = None - _globals['_SINT64RULES'].fields_by_name['not_in']._serialized_options = b'\302Hd\nb\n\rsint64.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_FIXED32RULES'].fields_by_name['const']._loaded_options = None - _globals['_FIXED32RULES'].fields_by_name['const']._serialized_options = b'\302HY\nW\n\rfixed32.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' - _globals['_FIXED32RULES'].fields_by_name['lt']._loaded_options = None - _globals['_FIXED32RULES'].fields_by_name['lt']._serialized_options = b'\302H{\ny\n\nfixed32.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_FIXED32RULES'].fields_by_name['lte']._loaded_options = None - _globals['_FIXED32RULES'].fields_by_name['lte']._serialized_options = b'\302H\212\001\n\207\001\n\013fixed32.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_FIXED32RULES'].fields_by_name['gt']._loaded_options = None - _globals['_FIXED32RULES'].fields_by_name['gt']._serialized_options = b'\302H\216\007\n|\n\nfixed32.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\265\001\n\rfixed32.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\275\001\n\027fixed32.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\305\001\n\016fixed32.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\315\001\n\030fixed32.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_FIXED32RULES'].fields_by_name['gte']._loaded_options = None - _globals['_FIXED32RULES'].fields_by_name['gte']._serialized_options = b'\302H\331\007\n\212\001\n\013fixed32.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\304\001\n\016fixed32.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\314\001\n\030fixed32.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\324\001\n\017fixed32.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\334\001\n\031fixed32.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_FIXED32RULES'].fields_by_name['in']._loaded_options = None - _globals['_FIXED32RULES'].fields_by_name['in']._serialized_options = b'\302Hh\nf\n\nfixed32.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' - _globals['_FIXED32RULES'].fields_by_name['not_in']._loaded_options = None - _globals['_FIXED32RULES'].fields_by_name['not_in']._serialized_options = b'\302He\nc\n\016fixed32.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_FIXED64RULES'].fields_by_name['const']._loaded_options = None - _globals['_FIXED64RULES'].fields_by_name['const']._serialized_options = b'\302HY\nW\n\rfixed64.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' - _globals['_FIXED64RULES'].fields_by_name['lt']._loaded_options = None - _globals['_FIXED64RULES'].fields_by_name['lt']._serialized_options = b'\302H{\ny\n\nfixed64.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_FIXED64RULES'].fields_by_name['lte']._loaded_options = None - _globals['_FIXED64RULES'].fields_by_name['lte']._serialized_options = b'\302H\212\001\n\207\001\n\013fixed64.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_FIXED64RULES'].fields_by_name['gt']._loaded_options = None - _globals['_FIXED64RULES'].fields_by_name['gt']._serialized_options = b'\302H\216\007\n|\n\nfixed64.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\265\001\n\rfixed64.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\275\001\n\027fixed64.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\305\001\n\016fixed64.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\315\001\n\030fixed64.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_FIXED64RULES'].fields_by_name['gte']._loaded_options = None - _globals['_FIXED64RULES'].fields_by_name['gte']._serialized_options = b'\302H\331\007\n\212\001\n\013fixed64.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\304\001\n\016fixed64.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\314\001\n\030fixed64.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\324\001\n\017fixed64.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\334\001\n\031fixed64.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_FIXED64RULES'].fields_by_name['in']._loaded_options = None - _globals['_FIXED64RULES'].fields_by_name['in']._serialized_options = b'\302Hh\nf\n\nfixed64.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' - _globals['_FIXED64RULES'].fields_by_name['not_in']._loaded_options = None - _globals['_FIXED64RULES'].fields_by_name['not_in']._serialized_options = b'\302He\nc\n\016fixed64.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_SFIXED32RULES'].fields_by_name['const']._loaded_options = None - _globals['_SFIXED32RULES'].fields_by_name['const']._serialized_options = b'\302HZ\nX\n\016sfixed32.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' - _globals['_SFIXED32RULES'].fields_by_name['lt']._loaded_options = None - _globals['_SFIXED32RULES'].fields_by_name['lt']._serialized_options = b'\302H|\nz\n\013sfixed32.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_SFIXED32RULES'].fields_by_name['lte']._loaded_options = None - _globals['_SFIXED32RULES'].fields_by_name['lte']._serialized_options = b'\302H\213\001\n\210\001\n\014sfixed32.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_SFIXED32RULES'].fields_by_name['gt']._loaded_options = None - _globals['_SFIXED32RULES'].fields_by_name['gt']._serialized_options = b'\302H\223\007\n}\n\013sfixed32.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\266\001\n\016sfixed32.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\276\001\n\030sfixed32.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\306\001\n\017sfixed32.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\316\001\n\031sfixed32.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_SFIXED32RULES'].fields_by_name['gte']._loaded_options = None - _globals['_SFIXED32RULES'].fields_by_name['gte']._serialized_options = b'\302H\336\007\n\213\001\n\014sfixed32.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\305\001\n\017sfixed32.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\315\001\n\031sfixed32.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\325\001\n\020sfixed32.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\335\001\n\032sfixed32.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_SFIXED32RULES'].fields_by_name['in']._loaded_options = None - _globals['_SFIXED32RULES'].fields_by_name['in']._serialized_options = b'\302Hi\ng\n\013sfixed32.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' - _globals['_SFIXED32RULES'].fields_by_name['not_in']._loaded_options = None - _globals['_SFIXED32RULES'].fields_by_name['not_in']._serialized_options = b'\302Hf\nd\n\017sfixed32.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_SFIXED64RULES'].fields_by_name['const']._loaded_options = None - _globals['_SFIXED64RULES'].fields_by_name['const']._serialized_options = b'\302HZ\nX\n\016sfixed64.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' - _globals['_SFIXED64RULES'].fields_by_name['lt']._loaded_options = None - _globals['_SFIXED64RULES'].fields_by_name['lt']._serialized_options = b'\302H|\nz\n\013sfixed64.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_SFIXED64RULES'].fields_by_name['lte']._loaded_options = None - _globals['_SFIXED64RULES'].fields_by_name['lte']._serialized_options = b'\302H\213\001\n\210\001\n\014sfixed64.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_SFIXED64RULES'].fields_by_name['gt']._loaded_options = None - _globals['_SFIXED64RULES'].fields_by_name['gt']._serialized_options = b'\302H\223\007\n}\n\013sfixed64.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\266\001\n\016sfixed64.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\276\001\n\030sfixed64.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\306\001\n\017sfixed64.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\316\001\n\031sfixed64.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_SFIXED64RULES'].fields_by_name['gte']._loaded_options = None - _globals['_SFIXED64RULES'].fields_by_name['gte']._serialized_options = b'\302H\336\007\n\213\001\n\014sfixed64.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\305\001\n\017sfixed64.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\315\001\n\031sfixed64.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\325\001\n\020sfixed64.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\335\001\n\032sfixed64.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_SFIXED64RULES'].fields_by_name['in']._loaded_options = None - _globals['_SFIXED64RULES'].fields_by_name['in']._serialized_options = b'\302Hi\ng\n\013sfixed64.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' - _globals['_SFIXED64RULES'].fields_by_name['not_in']._loaded_options = None - _globals['_SFIXED64RULES'].fields_by_name['not_in']._serialized_options = b'\302Hf\nd\n\017sfixed64.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_BOOLRULES'].fields_by_name['const']._loaded_options = None - _globals['_BOOLRULES'].fields_by_name['const']._serialized_options = b'\302HV\nT\n\nbool.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['const']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['const']._serialized_options = b'\302HZ\nX\n\014string.const\032Hthis != rules.const ? \'value must equal `%s`\'.format([rules.const]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['len']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['len']._serialized_options = b'\302Hn\nl\n\nstring.len\032^uint(this.size()) != rules.len ? \'value length must be %s characters\'.format([rules.len]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['min_len']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['min_len']._serialized_options = b'\302H\203\001\n\200\001\n\016string.min_len\032nuint(this.size()) < rules.min_len ? \'value length must be at least %s characters\'.format([rules.min_len]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['max_len']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['max_len']._serialized_options = b'\302H\201\001\n\177\n\016string.max_len\032muint(this.size()) > rules.max_len ? \'value length must be at most %s characters\'.format([rules.max_len]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['len_bytes']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['len_bytes']._serialized_options = b'\302H\203\001\n\200\001\n\020string.len_bytes\032luint(bytes(this).size()) != rules.len_bytes ? \'value length must be %s bytes\'.format([rules.len_bytes]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['min_bytes']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['min_bytes']._serialized_options = b'\302H\213\001\n\210\001\n\020string.min_bytes\032tuint(bytes(this).size()) < rules.min_bytes ? \'value length must be at least %s bytes\'.format([rules.min_bytes]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['max_bytes']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['max_bytes']._serialized_options = b'\302H\212\001\n\207\001\n\020string.max_bytes\032suint(bytes(this).size()) > rules.max_bytes ? \'value length must be at most %s bytes\'.format([rules.max_bytes]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['pattern']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['pattern']._serialized_options = b'\302Hy\nw\n\016string.pattern\032e!this.matches(rules.pattern) ? \'value does not match regex pattern `%s`\'.format([rules.pattern]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['prefix']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['prefix']._serialized_options = b'\302Hq\no\n\rstring.prefix\032^!this.startsWith(rules.prefix) ? \'value does not have prefix `%s`\'.format([rules.prefix]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['suffix']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['suffix']._serialized_options = b'\302Ho\nm\n\rstring.suffix\032\\!this.endsWith(rules.suffix) ? \'value does not have suffix `%s`\'.format([rules.suffix]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['contains']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['contains']._serialized_options = b'\302H{\ny\n\017string.contains\032f!this.contains(rules.contains) ? \'value does not contain substring `%s`\'.format([rules.contains]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['not_contains']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['not_contains']._serialized_options = b'\302H~\n|\n\023string.not_contains\032ethis.contains(rules.not_contains) ? \'value contains substring `%s`\'.format([rules.not_contains]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['in']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['in']._serialized_options = b'\302Hg\ne\n\tstring.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['not_in']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['not_in']._serialized_options = b'\302Hd\nb\n\rstring.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_STRINGRULES'].fields_by_name['email']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['email']._serialized_options = b'\302H\251\001\nQ\n\014string.email\022#value must be a valid email address\032\034this == \'\' || this.isEmail()\nT\n\022string.email_empty\0222value is empty, which is not a valid email address\032\nthis != \'\'' - _globals['_STRINGRULES'].fields_by_name['hostname']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['hostname']._serialized_options = b'\302H\250\001\nR\n\017string.hostname\022\036value must be a valid hostname\032\037this == \'\' || this.isHostname()\nR\n\025string.hostname_empty\022-value is empty, which is not a valid hostname\032\nthis != \'\'' - _globals['_STRINGRULES'].fields_by_name['ip']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['ip']._serialized_options = b'\302H\232\001\nH\n\tstring.ip\022 value must be a valid IP address\032\031this == \'\' || this.isIp()\nN\n\017string.ip_empty\022/value is empty, which is not a valid IP address\032\nthis != \'\'' - _globals['_STRINGRULES'].fields_by_name['ipv4']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['ipv4']._serialized_options = b'\302H\243\001\nM\n\013string.ipv4\022\"value must be a valid IPv4 address\032\032this == \'\' || this.isIp(4)\nR\n\021string.ipv4_empty\0221value is empty, which is not a valid IPv4 address\032\nthis != \'\'' - _globals['_STRINGRULES'].fields_by_name['ipv6']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['ipv6']._serialized_options = b'\302H\243\001\nM\n\013string.ipv6\022\"value must be a valid IPv6 address\032\032this == \'\' || this.isIp(6)\nR\n\021string.ipv6_empty\0221value is empty, which is not a valid IPv6 address\032\nthis != \'\'' - _globals['_STRINGRULES'].fields_by_name['uri']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['uri']._serialized_options = b'\302H\217\001\nC\n\nstring.uri\022\031value must be a valid URI\032\032this == \'\' || this.isUri()\nH\n\020string.uri_empty\022(value is empty, which is not a valid URI\032\nthis != \'\'' - _globals['_STRINGRULES'].fields_by_name['uri_ref']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['uri_ref']._serialized_options = b'\302H>\n<\n\016string.uri_ref\022\031value must be a valid URI\032\017this.isUriRef()' - _globals['_STRINGRULES'].fields_by_name['address']._loaded_options = None - _globals['_STRINGRULES'].fields_by_name['address']._serialized_options = b'\302H\323\001\no\n\016string.address\022-value must be a valid hostname, or ip address\032.this == \'\' || this.isHostname() || this.isIp()\n`\n\024string.address_empty\022 rules.max_len ? \'value must be at most %s bytes\'.format([rules.max_len]) : \'\'' - _globals['_BYTESRULES'].fields_by_name['pattern']._loaded_options = None - _globals['_BYTESRULES'].fields_by_name['pattern']._serialized_options = b'\302H|\nz\n\rbytes.pattern\032i!string(this).matches(rules.pattern) ? \'value must match regex pattern `%s`\'.format([rules.pattern]) : \'\'' - _globals['_BYTESRULES'].fields_by_name['prefix']._loaded_options = None - _globals['_BYTESRULES'].fields_by_name['prefix']._serialized_options = b'\302Hn\nl\n\014bytes.prefix\032\\!this.startsWith(rules.prefix) ? \'value does not have prefix %x\'.format([rules.prefix]) : \'\'' - _globals['_BYTESRULES'].fields_by_name['suffix']._loaded_options = None - _globals['_BYTESRULES'].fields_by_name['suffix']._serialized_options = b'\302Hl\nj\n\014bytes.suffix\032Z!this.endsWith(rules.suffix) ? \'value does not have suffix %x\'.format([rules.suffix]) : \'\'' - _globals['_BYTESRULES'].fields_by_name['contains']._loaded_options = None - _globals['_BYTESRULES'].fields_by_name['contains']._serialized_options = b'\302Hn\nl\n\016bytes.contains\032Z!this.contains(rules.contains) ? \'value does not contain %x\'.format([rules.contains]) : \'\'' - _globals['_BYTESRULES'].fields_by_name['in']._loaded_options = None - _globals['_BYTESRULES'].fields_by_name['in']._serialized_options = b'\302H\206\001\n\203\001\n\010bytes.in\032wdyn(rules)[\'in\'].size() > 0 && !(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' - _globals['_BYTESRULES'].fields_by_name['not_in']._loaded_options = None - _globals['_BYTESRULES'].fields_by_name['not_in']._serialized_options = b'\302Hc\na\n\014bytes.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_BYTESRULES'].fields_by_name['ip']._loaded_options = None - _globals['_BYTESRULES'].fields_by_name['ip']._serialized_options = b'\302H\276\001\ng\n\010bytes.ip\022 value must be a valid IP address\0329this.size() == 0 || this.size() == 4 || this.size() == 16\nS\n\016bytes.ip_empty\022/value is empty, which is not a valid IP address\032\020this.size() != 0' - _globals['_BYTESRULES'].fields_by_name['ipv4']._loaded_options = None - _globals['_BYTESRULES'].fields_by_name['ipv4']._serialized_options = b'\302H\261\001\nV\n\nbytes.ipv4\022\"value must be a valid IPv4 address\032$this.size() == 0 || this.size() == 4\nW\n\020bytes.ipv4_empty\0221value is empty, which is not a valid IPv4 address\032\020this.size() != 0' - _globals['_BYTESRULES'].fields_by_name['ipv6']._loaded_options = None - _globals['_BYTESRULES'].fields_by_name['ipv6']._serialized_options = b'\302H\262\001\nW\n\nbytes.ipv6\022\"value must be a valid IPv6 address\032%this.size() == 0 || this.size() == 16\nW\n\020bytes.ipv6_empty\0221value is empty, which is not a valid IPv6 address\032\020this.size() != 0' - _globals['_ENUMRULES'].fields_by_name['const']._loaded_options = None - _globals['_ENUMRULES'].fields_by_name['const']._serialized_options = b'\302HV\nT\n\nenum.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' - _globals['_ENUMRULES'].fields_by_name['in']._loaded_options = None - _globals['_ENUMRULES'].fields_by_name['in']._serialized_options = b'\302He\nc\n\007enum.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' - _globals['_ENUMRULES'].fields_by_name['not_in']._loaded_options = None - _globals['_ENUMRULES'].fields_by_name['not_in']._serialized_options = b'\302Hb\n`\n\013enum.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_REPEATEDRULES'].fields_by_name['min_items']._loaded_options = None - _globals['_REPEATEDRULES'].fields_by_name['min_items']._serialized_options = b'\302H\206\001\n\203\001\n\022repeated.min_items\032muint(this.size()) < rules.min_items ? \'value must contain at least %d item(s)\'.format([rules.min_items]) : \'\'' - _globals['_REPEATEDRULES'].fields_by_name['max_items']._loaded_options = None - _globals['_REPEATEDRULES'].fields_by_name['max_items']._serialized_options = b'\302H\212\001\n\207\001\n\022repeated.max_items\032quint(this.size()) > rules.max_items ? \'value must contain no more than %s item(s)\'.format([rules.max_items]) : \'\'' - _globals['_REPEATEDRULES'].fields_by_name['unique']._loaded_options = None - _globals['_REPEATEDRULES'].fields_by_name['unique']._serialized_options = b'\302HL\nJ\n\017repeated.unique\022(repeated value must contain unique items\032\rthis.unique()' - _globals['_MAPRULES'].fields_by_name['min_pairs']._loaded_options = None - _globals['_MAPRULES'].fields_by_name['min_pairs']._serialized_options = b'\302Hy\nw\n\rmap.min_pairs\032fuint(this.size()) < rules.min_pairs ? \'map must be at least %d entries\'.format([rules.min_pairs]) : \'\'' - _globals['_MAPRULES'].fields_by_name['max_pairs']._loaded_options = None - _globals['_MAPRULES'].fields_by_name['max_pairs']._serialized_options = b'\302Hx\nv\n\rmap.max_pairs\032euint(this.size()) > rules.max_pairs ? \'map must be at most %d entries\'.format([rules.max_pairs]) : \'\'' - _globals['_DURATIONRULES'].fields_by_name['const']._loaded_options = None - _globals['_DURATIONRULES'].fields_by_name['const']._serialized_options = b'\302HZ\nX\n\016duration.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' - _globals['_DURATIONRULES'].fields_by_name['lt']._loaded_options = None - _globals['_DURATIONRULES'].fields_by_name['lt']._serialized_options = b'\302H|\nz\n\013duration.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_DURATIONRULES'].fields_by_name['lte']._loaded_options = None - _globals['_DURATIONRULES'].fields_by_name['lte']._serialized_options = b'\302H\213\001\n\210\001\n\014duration.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_DURATIONRULES'].fields_by_name['gt']._loaded_options = None - _globals['_DURATIONRULES'].fields_by_name['gt']._serialized_options = b'\302H\223\007\n}\n\013duration.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\266\001\n\016duration.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\276\001\n\030duration.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\306\001\n\017duration.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\316\001\n\031duration.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_DURATIONRULES'].fields_by_name['gte']._loaded_options = None - _globals['_DURATIONRULES'].fields_by_name['gte']._serialized_options = b'\302H\336\007\n\213\001\n\014duration.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\305\001\n\017duration.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\315\001\n\031duration.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\325\001\n\020duration.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\335\001\n\032duration.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_DURATIONRULES'].fields_by_name['in']._loaded_options = None - _globals['_DURATIONRULES'].fields_by_name['in']._serialized_options = b'\302Hi\ng\n\013duration.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' - _globals['_DURATIONRULES'].fields_by_name['not_in']._loaded_options = None - _globals['_DURATIONRULES'].fields_by_name['not_in']._serialized_options = b'\302Hf\nd\n\017duration.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' - _globals['_TIMESTAMPRULES'].fields_by_name['const']._loaded_options = None - _globals['_TIMESTAMPRULES'].fields_by_name['const']._serialized_options = b'\302H[\nY\n\017timestamp.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' - _globals['_TIMESTAMPRULES'].fields_by_name['lt']._loaded_options = None - _globals['_TIMESTAMPRULES'].fields_by_name['lt']._serialized_options = b'\302H}\n{\n\014timestamp.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' - _globals['_TIMESTAMPRULES'].fields_by_name['lte']._loaded_options = None - _globals['_TIMESTAMPRULES'].fields_by_name['lte']._serialized_options = b'\302H\214\001\n\211\001\n\rtimestamp.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' - _globals['_TIMESTAMPRULES'].fields_by_name['lt_now']._loaded_options = None - _globals['_TIMESTAMPRULES'].fields_by_name['lt_now']._serialized_options = b'\302HE\nC\n\020timestamp.lt_now\032/this > now ? \'value must be less than now\' : \'\'' - _globals['_TIMESTAMPRULES'].fields_by_name['gt']._loaded_options = None - _globals['_TIMESTAMPRULES'].fields_by_name['gt']._serialized_options = b'\302H\230\007\n~\n\014timestamp.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\267\001\n\017timestamp.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\277\001\n\031timestamp.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\307\001\n\020timestamp.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\317\001\n\032timestamp.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' - _globals['_TIMESTAMPRULES'].fields_by_name['gte']._loaded_options = None - _globals['_TIMESTAMPRULES'].fields_by_name['gte']._serialized_options = b'\302H\343\007\n\214\001\n\rtimestamp.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\306\001\n\020timestamp.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\316\001\n\032timestamp.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\326\001\n\021timestamp.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\336\001\n\033timestamp.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' - _globals['_TIMESTAMPRULES'].fields_by_name['gt_now']._loaded_options = None - _globals['_TIMESTAMPRULES'].fields_by_name['gt_now']._serialized_options = b'\302HH\nF\n\020timestamp.gt_now\0322this < now ? \'value must be greater than now\' : \'\'' - _globals['_TIMESTAMPRULES'].fields_by_name['within']._loaded_options = None - _globals['_TIMESTAMPRULES'].fields_by_name['within']._serialized_options = b'\302H\210\001\n\205\001\n\020timestamp.within\032qthis < now-rules.within || this > now+rules.within ? \'value must be within %s of now\'.format([rules.within]) : \'\'' - _globals['_IGNORE']._serialized_start=51208 - _globals['_IGNORE']._serialized_end=51365 - _globals['_KNOWNREGEX']._serialized_start=51367 - _globals['_KNOWNREGEX']._serialized_end=51477 - _globals['_MESSAGECONSTRAINTS']._serialized_start=208 - _globals['_MESSAGECONSTRAINTS']._serialized_end=318 - _globals['_ONEOFCONSTRAINTS']._serialized_start=320 - _globals['_ONEOFCONSTRAINTS']._serialized_end=384 - _globals['_FIELDCONSTRAINTS']._serialized_start=387 - _globals['_FIELDCONSTRAINTS']._serialized_end=1710 - _globals['_FLOATRULES']._serialized_start=1713 - _globals['_FLOATRULES']._serialized_end=4691 - _globals['_DOUBLERULES']._serialized_start=4694 - _globals['_DOUBLERULES']._serialized_end=7689 - _globals['_INT32RULES']._serialized_start=7692 - _globals['_INT32RULES']._serialized_end=10350 - _globals['_INT64RULES']._serialized_start=10353 - _globals['_INT64RULES']._serialized_end=13011 - _globals['_UINT32RULES']._serialized_start=13014 - _globals['_UINT32RULES']._serialized_end=15688 - _globals['_UINT64RULES']._serialized_start=15691 - _globals['_UINT64RULES']._serialized_end=18365 - _globals['_SINT32RULES']._serialized_start=18368 - _globals['_SINT32RULES']._serialized_end=21042 - _globals['_SINT64RULES']._serialized_start=21045 - _globals['_SINT64RULES']._serialized_end=23719 - _globals['_FIXED32RULES']._serialized_start=23722 - _globals['_FIXED32RULES']._serialized_end=26412 - _globals['_FIXED64RULES']._serialized_start=26415 - _globals['_FIXED64RULES']._serialized_end=29105 - _globals['_SFIXED32RULES']._serialized_start=29108 - _globals['_SFIXED32RULES']._serialized_end=31815 - _globals['_SFIXED64RULES']._serialized_start=31818 - _globals['_SFIXED64RULES']._serialized_end=34525 - _globals['_BOOLRULES']._serialized_start=34528 - _globals['_BOOLRULES']._serialized_end=34667 - _globals['_STRINGRULES']._serialized_start=34670 - _globals['_STRINGRULES']._serialized_end=41500 - _globals['_BYTESRULES']._serialized_start=41503 - _globals['_BYTESRULES']._serialized_end=43693 - _globals['_ENUMRULES']._serialized_start=43696 - _globals['_ENUMRULES']._serialized_end=44140 - _globals['_REPEATEDRULES']._serialized_start=44143 - _globals['_REPEATEDRULES']._serialized_end=44732 - _globals['_MAPRULES']._serialized_start=44735 - _globals['_MAPRULES']._serialized_end=45232 - _globals['_ANYRULES']._serialized_start=45234 - _globals['_ANYRULES']._serialized_end=45283 - _globals['_DURATIONRULES']._serialized_start=45286 - _globals['_DURATIONRULES']._serialized_end=48184 - _globals['_TIMESTAMPRULES']._serialized_start=48187 - _globals['_TIMESTAMPRULES']._serialized_end=51205 -# @@protoc_insertion_point(module_scope) diff --git a/buf/validate/validate_pb2.pyi b/buf/validate/validate_pb2.pyi deleted file mode 100644 index 967edb9..0000000 --- a/buf/validate/validate_pb2.pyi +++ /dev/null @@ -1,503 +0,0 @@ -from buf.validate import expression_pb2 as _expression_pb2 -from buf.validate.priv import private_pb2 as _private_pb2 -from google.protobuf import descriptor_pb2 as _descriptor_pb2 -from google.protobuf import duration_pb2 as _duration_pb2 -from google.protobuf import timestamp_pb2 as _timestamp_pb2 -from google.protobuf.internal import containers as _containers -from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union - -DESCRIPTOR: _descriptor.FileDescriptor - -class Ignore(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - IGNORE_UNSPECIFIED: _ClassVar[Ignore] - IGNORE_IF_UNPOPULATED: _ClassVar[Ignore] - IGNORE_IF_DEFAULT_VALUE: _ClassVar[Ignore] - IGNORE_ALWAYS: _ClassVar[Ignore] - IGNORE_EMPTY: _ClassVar[Ignore] - IGNORE_DEFAULT: _ClassVar[Ignore] - -class KnownRegex(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - KNOWN_REGEX_UNSPECIFIED: _ClassVar[KnownRegex] - KNOWN_REGEX_HTTP_HEADER_NAME: _ClassVar[KnownRegex] - KNOWN_REGEX_HTTP_HEADER_VALUE: _ClassVar[KnownRegex] -IGNORE_UNSPECIFIED: Ignore -IGNORE_IF_UNPOPULATED: Ignore -IGNORE_IF_DEFAULT_VALUE: Ignore -IGNORE_ALWAYS: Ignore -IGNORE_EMPTY: Ignore -IGNORE_DEFAULT: Ignore -KNOWN_REGEX_UNSPECIFIED: KnownRegex -KNOWN_REGEX_HTTP_HEADER_NAME: KnownRegex -KNOWN_REGEX_HTTP_HEADER_VALUE: KnownRegex -MESSAGE_FIELD_NUMBER: _ClassVar[int] -message: _descriptor.FieldDescriptor -ONEOF_FIELD_NUMBER: _ClassVar[int] -oneof: _descriptor.FieldDescriptor -FIELD_FIELD_NUMBER: _ClassVar[int] -field: _descriptor.FieldDescriptor - -class MessageConstraints(_message.Message): - __slots__ = ("disabled", "cel") - DISABLED_FIELD_NUMBER: _ClassVar[int] - CEL_FIELD_NUMBER: _ClassVar[int] - disabled: bool - cel: _containers.RepeatedCompositeFieldContainer[_expression_pb2.Constraint] - def __init__(self, disabled: bool = ..., cel: _Optional[_Iterable[_Union[_expression_pb2.Constraint, _Mapping]]] = ...) -> None: ... - -class OneofConstraints(_message.Message): - __slots__ = ("required",) - REQUIRED_FIELD_NUMBER: _ClassVar[int] - required: bool - def __init__(self, required: bool = ...) -> None: ... - -class FieldConstraints(_message.Message): - __slots__ = ("cel", "required", "ignore", "float", "double", "int32", "int64", "uint32", "uint64", "sint32", "sint64", "fixed32", "fixed64", "sfixed32", "sfixed64", "bool", "string", "bytes", "enum", "repeated", "map", "any", "duration", "timestamp", "skipped", "ignore_empty") - CEL_FIELD_NUMBER: _ClassVar[int] - REQUIRED_FIELD_NUMBER: _ClassVar[int] - IGNORE_FIELD_NUMBER: _ClassVar[int] - FLOAT_FIELD_NUMBER: _ClassVar[int] - DOUBLE_FIELD_NUMBER: _ClassVar[int] - INT32_FIELD_NUMBER: _ClassVar[int] - INT64_FIELD_NUMBER: _ClassVar[int] - UINT32_FIELD_NUMBER: _ClassVar[int] - UINT64_FIELD_NUMBER: _ClassVar[int] - SINT32_FIELD_NUMBER: _ClassVar[int] - SINT64_FIELD_NUMBER: _ClassVar[int] - FIXED32_FIELD_NUMBER: _ClassVar[int] - FIXED64_FIELD_NUMBER: _ClassVar[int] - SFIXED32_FIELD_NUMBER: _ClassVar[int] - SFIXED64_FIELD_NUMBER: _ClassVar[int] - BOOL_FIELD_NUMBER: _ClassVar[int] - STRING_FIELD_NUMBER: _ClassVar[int] - BYTES_FIELD_NUMBER: _ClassVar[int] - ENUM_FIELD_NUMBER: _ClassVar[int] - REPEATED_FIELD_NUMBER: _ClassVar[int] - MAP_FIELD_NUMBER: _ClassVar[int] - ANY_FIELD_NUMBER: _ClassVar[int] - DURATION_FIELD_NUMBER: _ClassVar[int] - TIMESTAMP_FIELD_NUMBER: _ClassVar[int] - SKIPPED_FIELD_NUMBER: _ClassVar[int] - IGNORE_EMPTY_FIELD_NUMBER: _ClassVar[int] - cel: _containers.RepeatedCompositeFieldContainer[_expression_pb2.Constraint] - required: bool - ignore: Ignore - float: FloatRules - double: DoubleRules - int32: Int32Rules - int64: Int64Rules - uint32: UInt32Rules - uint64: UInt64Rules - sint32: SInt32Rules - sint64: SInt64Rules - fixed32: Fixed32Rules - fixed64: Fixed64Rules - sfixed32: SFixed32Rules - sfixed64: SFixed64Rules - bool: BoolRules - string: StringRules - bytes: BytesRules - enum: EnumRules - repeated: RepeatedRules - map: MapRules - any: AnyRules - duration: DurationRules - timestamp: TimestampRules - skipped: bool - ignore_empty: bool - def __init__(self, cel: _Optional[_Iterable[_Union[_expression_pb2.Constraint, _Mapping]]] = ..., required: bool = ..., ignore: _Optional[_Union[Ignore, str]] = ..., float: _Optional[_Union[FloatRules, _Mapping]] = ..., double: _Optional[_Union[DoubleRules, _Mapping]] = ..., int32: _Optional[_Union[Int32Rules, _Mapping]] = ..., int64: _Optional[_Union[Int64Rules, _Mapping]] = ..., uint32: _Optional[_Union[UInt32Rules, _Mapping]] = ..., uint64: _Optional[_Union[UInt64Rules, _Mapping]] = ..., sint32: _Optional[_Union[SInt32Rules, _Mapping]] = ..., sint64: _Optional[_Union[SInt64Rules, _Mapping]] = ..., fixed32: _Optional[_Union[Fixed32Rules, _Mapping]] = ..., fixed64: _Optional[_Union[Fixed64Rules, _Mapping]] = ..., sfixed32: _Optional[_Union[SFixed32Rules, _Mapping]] = ..., sfixed64: _Optional[_Union[SFixed64Rules, _Mapping]] = ..., bool: _Optional[_Union[BoolRules, _Mapping]] = ..., string: _Optional[_Union[StringRules, _Mapping]] = ..., bytes: _Optional[_Union[BytesRules, _Mapping]] = ..., enum: _Optional[_Union[EnumRules, _Mapping]] = ..., repeated: _Optional[_Union[RepeatedRules, _Mapping]] = ..., map: _Optional[_Union[MapRules, _Mapping]] = ..., any: _Optional[_Union[AnyRules, _Mapping]] = ..., duration: _Optional[_Union[DurationRules, _Mapping]] = ..., timestamp: _Optional[_Union[TimestampRules, _Mapping]] = ..., skipped: bool = ..., ignore_empty: bool = ...) -> None: ... - -class FloatRules(_message.Message): - __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in", "finite") - CONST_FIELD_NUMBER: _ClassVar[int] - LT_FIELD_NUMBER: _ClassVar[int] - LTE_FIELD_NUMBER: _ClassVar[int] - GT_FIELD_NUMBER: _ClassVar[int] - GTE_FIELD_NUMBER: _ClassVar[int] - IN_FIELD_NUMBER: _ClassVar[int] - NOT_IN_FIELD_NUMBER: _ClassVar[int] - FINITE_FIELD_NUMBER: _ClassVar[int] - const: float - lt: float - lte: float - gt: float - gte: float - not_in: _containers.RepeatedScalarFieldContainer[float] - finite: bool - def __init__(self, const: _Optional[float] = ..., lt: _Optional[float] = ..., lte: _Optional[float] = ..., gt: _Optional[float] = ..., gte: _Optional[float] = ..., not_in: _Optional[_Iterable[float]] = ..., finite: bool = ..., **kwargs) -> None: ... - -class DoubleRules(_message.Message): - __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in", "finite") - CONST_FIELD_NUMBER: _ClassVar[int] - LT_FIELD_NUMBER: _ClassVar[int] - LTE_FIELD_NUMBER: _ClassVar[int] - GT_FIELD_NUMBER: _ClassVar[int] - GTE_FIELD_NUMBER: _ClassVar[int] - IN_FIELD_NUMBER: _ClassVar[int] - NOT_IN_FIELD_NUMBER: _ClassVar[int] - FINITE_FIELD_NUMBER: _ClassVar[int] - const: float - lt: float - lte: float - gt: float - gte: float - not_in: _containers.RepeatedScalarFieldContainer[float] - finite: bool - def __init__(self, const: _Optional[float] = ..., lt: _Optional[float] = ..., lte: _Optional[float] = ..., gt: _Optional[float] = ..., gte: _Optional[float] = ..., not_in: _Optional[_Iterable[float]] = ..., finite: bool = ..., **kwargs) -> None: ... - -class Int32Rules(_message.Message): - __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in") - CONST_FIELD_NUMBER: _ClassVar[int] - LT_FIELD_NUMBER: _ClassVar[int] - LTE_FIELD_NUMBER: _ClassVar[int] - GT_FIELD_NUMBER: _ClassVar[int] - GTE_FIELD_NUMBER: _ClassVar[int] - IN_FIELD_NUMBER: _ClassVar[int] - NOT_IN_FIELD_NUMBER: _ClassVar[int] - const: int - lt: int - lte: int - gt: int - gte: int - not_in: _containers.RepeatedScalarFieldContainer[int] - def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... - -class Int64Rules(_message.Message): - __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in") - CONST_FIELD_NUMBER: _ClassVar[int] - LT_FIELD_NUMBER: _ClassVar[int] - LTE_FIELD_NUMBER: _ClassVar[int] - GT_FIELD_NUMBER: _ClassVar[int] - GTE_FIELD_NUMBER: _ClassVar[int] - IN_FIELD_NUMBER: _ClassVar[int] - NOT_IN_FIELD_NUMBER: _ClassVar[int] - const: int - lt: int - lte: int - gt: int - gte: int - not_in: _containers.RepeatedScalarFieldContainer[int] - def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... - -class UInt32Rules(_message.Message): - __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in") - CONST_FIELD_NUMBER: _ClassVar[int] - LT_FIELD_NUMBER: _ClassVar[int] - LTE_FIELD_NUMBER: _ClassVar[int] - GT_FIELD_NUMBER: _ClassVar[int] - GTE_FIELD_NUMBER: _ClassVar[int] - IN_FIELD_NUMBER: _ClassVar[int] - NOT_IN_FIELD_NUMBER: _ClassVar[int] - const: int - lt: int - lte: int - gt: int - gte: int - not_in: _containers.RepeatedScalarFieldContainer[int] - def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... - -class UInt64Rules(_message.Message): - __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in") - CONST_FIELD_NUMBER: _ClassVar[int] - LT_FIELD_NUMBER: _ClassVar[int] - LTE_FIELD_NUMBER: _ClassVar[int] - GT_FIELD_NUMBER: _ClassVar[int] - GTE_FIELD_NUMBER: _ClassVar[int] - IN_FIELD_NUMBER: _ClassVar[int] - NOT_IN_FIELD_NUMBER: _ClassVar[int] - const: int - lt: int - lte: int - gt: int - gte: int - not_in: _containers.RepeatedScalarFieldContainer[int] - def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... - -class SInt32Rules(_message.Message): - __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in") - CONST_FIELD_NUMBER: _ClassVar[int] - LT_FIELD_NUMBER: _ClassVar[int] - LTE_FIELD_NUMBER: _ClassVar[int] - GT_FIELD_NUMBER: _ClassVar[int] - GTE_FIELD_NUMBER: _ClassVar[int] - IN_FIELD_NUMBER: _ClassVar[int] - NOT_IN_FIELD_NUMBER: _ClassVar[int] - const: int - lt: int - lte: int - gt: int - gte: int - not_in: _containers.RepeatedScalarFieldContainer[int] - def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... - -class SInt64Rules(_message.Message): - __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in") - CONST_FIELD_NUMBER: _ClassVar[int] - LT_FIELD_NUMBER: _ClassVar[int] - LTE_FIELD_NUMBER: _ClassVar[int] - GT_FIELD_NUMBER: _ClassVar[int] - GTE_FIELD_NUMBER: _ClassVar[int] - IN_FIELD_NUMBER: _ClassVar[int] - NOT_IN_FIELD_NUMBER: _ClassVar[int] - const: int - lt: int - lte: int - gt: int - gte: int - not_in: _containers.RepeatedScalarFieldContainer[int] - def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... - -class Fixed32Rules(_message.Message): - __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in") - CONST_FIELD_NUMBER: _ClassVar[int] - LT_FIELD_NUMBER: _ClassVar[int] - LTE_FIELD_NUMBER: _ClassVar[int] - GT_FIELD_NUMBER: _ClassVar[int] - GTE_FIELD_NUMBER: _ClassVar[int] - IN_FIELD_NUMBER: _ClassVar[int] - NOT_IN_FIELD_NUMBER: _ClassVar[int] - const: int - lt: int - lte: int - gt: int - gte: int - not_in: _containers.RepeatedScalarFieldContainer[int] - def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... - -class Fixed64Rules(_message.Message): - __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in") - CONST_FIELD_NUMBER: _ClassVar[int] - LT_FIELD_NUMBER: _ClassVar[int] - LTE_FIELD_NUMBER: _ClassVar[int] - GT_FIELD_NUMBER: _ClassVar[int] - GTE_FIELD_NUMBER: _ClassVar[int] - IN_FIELD_NUMBER: _ClassVar[int] - NOT_IN_FIELD_NUMBER: _ClassVar[int] - const: int - lt: int - lte: int - gt: int - gte: int - not_in: _containers.RepeatedScalarFieldContainer[int] - def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... - -class SFixed32Rules(_message.Message): - __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in") - CONST_FIELD_NUMBER: _ClassVar[int] - LT_FIELD_NUMBER: _ClassVar[int] - LTE_FIELD_NUMBER: _ClassVar[int] - GT_FIELD_NUMBER: _ClassVar[int] - GTE_FIELD_NUMBER: _ClassVar[int] - IN_FIELD_NUMBER: _ClassVar[int] - NOT_IN_FIELD_NUMBER: _ClassVar[int] - const: int - lt: int - lte: int - gt: int - gte: int - not_in: _containers.RepeatedScalarFieldContainer[int] - def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... - -class SFixed64Rules(_message.Message): - __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in") - CONST_FIELD_NUMBER: _ClassVar[int] - LT_FIELD_NUMBER: _ClassVar[int] - LTE_FIELD_NUMBER: _ClassVar[int] - GT_FIELD_NUMBER: _ClassVar[int] - GTE_FIELD_NUMBER: _ClassVar[int] - IN_FIELD_NUMBER: _ClassVar[int] - NOT_IN_FIELD_NUMBER: _ClassVar[int] - const: int - lt: int - lte: int - gt: int - gte: int - not_in: _containers.RepeatedScalarFieldContainer[int] - def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... - -class BoolRules(_message.Message): - __slots__ = ("const",) - CONST_FIELD_NUMBER: _ClassVar[int] - const: bool - def __init__(self, const: bool = ...) -> None: ... - -class StringRules(_message.Message): - __slots__ = ("const", "len", "min_len", "max_len", "len_bytes", "min_bytes", "max_bytes", "pattern", "prefix", "suffix", "contains", "not_contains", "not_in", "email", "hostname", "ip", "ipv4", "ipv6", "uri", "uri_ref", "address", "uuid", "tuuid", "ip_with_prefixlen", "ipv4_with_prefixlen", "ipv6_with_prefixlen", "ip_prefix", "ipv4_prefix", "ipv6_prefix", "host_and_port", "well_known_regex", "strict") - CONST_FIELD_NUMBER: _ClassVar[int] - LEN_FIELD_NUMBER: _ClassVar[int] - MIN_LEN_FIELD_NUMBER: _ClassVar[int] - MAX_LEN_FIELD_NUMBER: _ClassVar[int] - LEN_BYTES_FIELD_NUMBER: _ClassVar[int] - MIN_BYTES_FIELD_NUMBER: _ClassVar[int] - MAX_BYTES_FIELD_NUMBER: _ClassVar[int] - PATTERN_FIELD_NUMBER: _ClassVar[int] - PREFIX_FIELD_NUMBER: _ClassVar[int] - SUFFIX_FIELD_NUMBER: _ClassVar[int] - CONTAINS_FIELD_NUMBER: _ClassVar[int] - NOT_CONTAINS_FIELD_NUMBER: _ClassVar[int] - IN_FIELD_NUMBER: _ClassVar[int] - NOT_IN_FIELD_NUMBER: _ClassVar[int] - EMAIL_FIELD_NUMBER: _ClassVar[int] - HOSTNAME_FIELD_NUMBER: _ClassVar[int] - IP_FIELD_NUMBER: _ClassVar[int] - IPV4_FIELD_NUMBER: _ClassVar[int] - IPV6_FIELD_NUMBER: _ClassVar[int] - URI_FIELD_NUMBER: _ClassVar[int] - URI_REF_FIELD_NUMBER: _ClassVar[int] - ADDRESS_FIELD_NUMBER: _ClassVar[int] - UUID_FIELD_NUMBER: _ClassVar[int] - TUUID_FIELD_NUMBER: _ClassVar[int] - IP_WITH_PREFIXLEN_FIELD_NUMBER: _ClassVar[int] - IPV4_WITH_PREFIXLEN_FIELD_NUMBER: _ClassVar[int] - IPV6_WITH_PREFIXLEN_FIELD_NUMBER: _ClassVar[int] - IP_PREFIX_FIELD_NUMBER: _ClassVar[int] - IPV4_PREFIX_FIELD_NUMBER: _ClassVar[int] - IPV6_PREFIX_FIELD_NUMBER: _ClassVar[int] - HOST_AND_PORT_FIELD_NUMBER: _ClassVar[int] - WELL_KNOWN_REGEX_FIELD_NUMBER: _ClassVar[int] - STRICT_FIELD_NUMBER: _ClassVar[int] - const: str - len: int - min_len: int - max_len: int - len_bytes: int - min_bytes: int - max_bytes: int - pattern: str - prefix: str - suffix: str - contains: str - not_contains: str - not_in: _containers.RepeatedScalarFieldContainer[str] - email: bool - hostname: bool - ip: bool - ipv4: bool - ipv6: bool - uri: bool - uri_ref: bool - address: bool - uuid: bool - tuuid: bool - ip_with_prefixlen: bool - ipv4_with_prefixlen: bool - ipv6_with_prefixlen: bool - ip_prefix: bool - ipv4_prefix: bool - ipv6_prefix: bool - host_and_port: bool - well_known_regex: KnownRegex - strict: bool - def __init__(self, const: _Optional[str] = ..., len: _Optional[int] = ..., min_len: _Optional[int] = ..., max_len: _Optional[int] = ..., len_bytes: _Optional[int] = ..., min_bytes: _Optional[int] = ..., max_bytes: _Optional[int] = ..., pattern: _Optional[str] = ..., prefix: _Optional[str] = ..., suffix: _Optional[str] = ..., contains: _Optional[str] = ..., not_contains: _Optional[str] = ..., not_in: _Optional[_Iterable[str]] = ..., email: bool = ..., hostname: bool = ..., ip: bool = ..., ipv4: bool = ..., ipv6: bool = ..., uri: bool = ..., uri_ref: bool = ..., address: bool = ..., uuid: bool = ..., tuuid: bool = ..., ip_with_prefixlen: bool = ..., ipv4_with_prefixlen: bool = ..., ipv6_with_prefixlen: bool = ..., ip_prefix: bool = ..., ipv4_prefix: bool = ..., ipv6_prefix: bool = ..., host_and_port: bool = ..., well_known_regex: _Optional[_Union[KnownRegex, str]] = ..., strict: bool = ..., **kwargs) -> None: ... - -class BytesRules(_message.Message): - __slots__ = ("const", "len", "min_len", "max_len", "pattern", "prefix", "suffix", "contains", "not_in", "ip", "ipv4", "ipv6") - CONST_FIELD_NUMBER: _ClassVar[int] - LEN_FIELD_NUMBER: _ClassVar[int] - MIN_LEN_FIELD_NUMBER: _ClassVar[int] - MAX_LEN_FIELD_NUMBER: _ClassVar[int] - PATTERN_FIELD_NUMBER: _ClassVar[int] - PREFIX_FIELD_NUMBER: _ClassVar[int] - SUFFIX_FIELD_NUMBER: _ClassVar[int] - CONTAINS_FIELD_NUMBER: _ClassVar[int] - IN_FIELD_NUMBER: _ClassVar[int] - NOT_IN_FIELD_NUMBER: _ClassVar[int] - IP_FIELD_NUMBER: _ClassVar[int] - IPV4_FIELD_NUMBER: _ClassVar[int] - IPV6_FIELD_NUMBER: _ClassVar[int] - const: bytes - len: int - min_len: int - max_len: int - pattern: str - prefix: bytes - suffix: bytes - contains: bytes - not_in: _containers.RepeatedScalarFieldContainer[bytes] - ip: bool - ipv4: bool - ipv6: bool - def __init__(self, const: _Optional[bytes] = ..., len: _Optional[int] = ..., min_len: _Optional[int] = ..., max_len: _Optional[int] = ..., pattern: _Optional[str] = ..., prefix: _Optional[bytes] = ..., suffix: _Optional[bytes] = ..., contains: _Optional[bytes] = ..., not_in: _Optional[_Iterable[bytes]] = ..., ip: bool = ..., ipv4: bool = ..., ipv6: bool = ..., **kwargs) -> None: ... - -class EnumRules(_message.Message): - __slots__ = ("const", "defined_only", "not_in") - CONST_FIELD_NUMBER: _ClassVar[int] - DEFINED_ONLY_FIELD_NUMBER: _ClassVar[int] - IN_FIELD_NUMBER: _ClassVar[int] - NOT_IN_FIELD_NUMBER: _ClassVar[int] - const: int - defined_only: bool - not_in: _containers.RepeatedScalarFieldContainer[int] - def __init__(self, const: _Optional[int] = ..., defined_only: bool = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... - -class RepeatedRules(_message.Message): - __slots__ = ("min_items", "max_items", "unique", "items") - MIN_ITEMS_FIELD_NUMBER: _ClassVar[int] - MAX_ITEMS_FIELD_NUMBER: _ClassVar[int] - UNIQUE_FIELD_NUMBER: _ClassVar[int] - ITEMS_FIELD_NUMBER: _ClassVar[int] - min_items: int - max_items: int - unique: bool - items: FieldConstraints - def __init__(self, min_items: _Optional[int] = ..., max_items: _Optional[int] = ..., unique: bool = ..., items: _Optional[_Union[FieldConstraints, _Mapping]] = ...) -> None: ... - -class MapRules(_message.Message): - __slots__ = ("min_pairs", "max_pairs", "keys", "values") - MIN_PAIRS_FIELD_NUMBER: _ClassVar[int] - MAX_PAIRS_FIELD_NUMBER: _ClassVar[int] - KEYS_FIELD_NUMBER: _ClassVar[int] - VALUES_FIELD_NUMBER: _ClassVar[int] - min_pairs: int - max_pairs: int - keys: FieldConstraints - values: FieldConstraints - def __init__(self, min_pairs: _Optional[int] = ..., max_pairs: _Optional[int] = ..., keys: _Optional[_Union[FieldConstraints, _Mapping]] = ..., values: _Optional[_Union[FieldConstraints, _Mapping]] = ...) -> None: ... - -class AnyRules(_message.Message): - __slots__ = ("not_in",) - IN_FIELD_NUMBER: _ClassVar[int] - NOT_IN_FIELD_NUMBER: _ClassVar[int] - not_in: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, not_in: _Optional[_Iterable[str]] = ..., **kwargs) -> None: ... - -class DurationRules(_message.Message): - __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in") - CONST_FIELD_NUMBER: _ClassVar[int] - LT_FIELD_NUMBER: _ClassVar[int] - LTE_FIELD_NUMBER: _ClassVar[int] - GT_FIELD_NUMBER: _ClassVar[int] - GTE_FIELD_NUMBER: _ClassVar[int] - IN_FIELD_NUMBER: _ClassVar[int] - NOT_IN_FIELD_NUMBER: _ClassVar[int] - const: _duration_pb2.Duration - lt: _duration_pb2.Duration - lte: _duration_pb2.Duration - gt: _duration_pb2.Duration - gte: _duration_pb2.Duration - not_in: _containers.RepeatedCompositeFieldContainer[_duration_pb2.Duration] - def __init__(self, const: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., lt: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., lte: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., gt: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., gte: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., not_in: _Optional[_Iterable[_Union[_duration_pb2.Duration, _Mapping]]] = ..., **kwargs) -> None: ... - -class TimestampRules(_message.Message): - __slots__ = ("const", "lt", "lte", "lt_now", "gt", "gte", "gt_now", "within") - CONST_FIELD_NUMBER: _ClassVar[int] - LT_FIELD_NUMBER: _ClassVar[int] - LTE_FIELD_NUMBER: _ClassVar[int] - LT_NOW_FIELD_NUMBER: _ClassVar[int] - GT_FIELD_NUMBER: _ClassVar[int] - GTE_FIELD_NUMBER: _ClassVar[int] - GT_NOW_FIELD_NUMBER: _ClassVar[int] - WITHIN_FIELD_NUMBER: _ClassVar[int] - const: _timestamp_pb2.Timestamp - lt: _timestamp_pb2.Timestamp - lte: _timestamp_pb2.Timestamp - lt_now: bool - gt: _timestamp_pb2.Timestamp - gte: _timestamp_pb2.Timestamp - gt_now: bool - within: _duration_pb2.Duration - def __init__(self, const: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., lt: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., lte: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., lt_now: bool = ..., gt: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., gte: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., gt_now: bool = ..., within: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ...) -> None: ... diff --git a/buf/validate/validate_pb2_grpc.py b/buf/validate/validate_pb2_grpc.py deleted file mode 100644 index 2daafff..0000000 --- a/buf/validate/validate_pb2_grpc.py +++ /dev/null @@ -1,4 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc - diff --git a/scalekit/organization.py b/scalekit/organization.py index d023989..af5a91a 100644 --- a/scalekit/organization.py +++ b/scalekit/organization.py @@ -23,7 +23,7 @@ OrganizationSessionPolicySettings, GetOrganizationSessionPolicyRequest, UpdateOrganizationSessionPolicyRequest, - SessionPolicySource, + SessionPolicyType, ) from scalekit.v1.commons.commons_pb2 import TimeUnit from scalekit.v1.organizations.organizations_pb2_grpc import OrganizationServiceStub @@ -243,7 +243,7 @@ def get_organization_session_policy(self, organization_id: str) -> OrganizationS def update_organization_session_policy( self, organization_id: str, - policy_source: SessionPolicySource, + policy_source: SessionPolicyType, absolute_session_timeout: Optional[int] = None, absolute_session_timeout_unit: Optional[TimeUnit] = None, idle_session_timeout_enabled: Optional[bool] = None, @@ -255,8 +255,8 @@ def update_organization_session_policy( :param organization_id: Organization id :type organization_id: ``` str ``` - :param policy_source: SessionPolicySource.APPLICATION or SessionPolicySource.CUSTOM - :type policy_source: ``` SessionPolicySource ``` + :param policy_source: SessionPolicyType.APPLICATION or SessionPolicyType.CUSTOM + :type policy_source: ``` SessionPolicyType ``` :param absolute_session_timeout: Absolute session timeout value (optional) :type absolute_session_timeout: ``` int | None ``` :param absolute_session_timeout_unit: Unit for absolute timeout (optional) @@ -270,28 +270,28 @@ def update_organization_session_policy( :returns: OrganizationSessionPolicySettings """ - policy = OrganizationSessionPolicySettings(policy_source=policy_source) + req = UpdateOrganizationSessionPolicyRequest( + organization_id=organization_id, + policy_source=policy_source, + ) if absolute_session_timeout is not None: - policy.absolute_session_timeout.CopyFrom( + req.absolute_session_timeout.CopyFrom( wrappers_pb2.Int32Value(value=absolute_session_timeout) ) if absolute_session_timeout_unit is not None: - policy.absolute_session_timeout_unit = absolute_session_timeout_unit + req.absolute_session_timeout_unit = absolute_session_timeout_unit if idle_session_timeout_enabled is not None: - policy.idle_session_timeout_enabled.CopyFrom( + req.idle_session_timeout_enabled.CopyFrom( wrappers_pb2.BoolValue(value=idle_session_timeout_enabled) ) if idle_session_timeout is not None: - policy.idle_session_timeout.CopyFrom( + req.idle_session_timeout.CopyFrom( wrappers_pb2.Int32Value(value=idle_session_timeout) ) if idle_session_timeout_unit is not None: - policy.idle_session_timeout_unit = idle_session_timeout_unit + req.idle_session_timeout_unit = idle_session_timeout_unit response = self.core_client.grpc_exec( self.organization_service.UpdateOrganizationSessionPolicy.with_call, - UpdateOrganizationSessionPolicyRequest( - organization_id=organization_id, - policy=policy, - ), + req, ) return response[0].policy diff --git a/buf/validate/__init__.py b/scalekit/v1/agentkit_logs/__init__.py similarity index 100% rename from buf/validate/__init__.py rename to scalekit/v1/agentkit_logs/__init__.py diff --git a/scalekit/v1/agentkit_logs/agentkit_analytics_pb2.py b/scalekit/v1/agentkit_logs/agentkit_analytics_pb2.py new file mode 100644 index 0000000..ca09db0 --- /dev/null +++ b/scalekit/v1/agentkit_logs/agentkit_analytics_pb2.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: scalekit/v1/agentkit_logs/agentkit_analytics.proto +# Protobuf Python Version: 5.26.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 +from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 +from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2 +from google.api import visibility_pb2 as google_dot_api_dot_visibility__pb2 +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 +from protoc_gen_openapiv2.options import annotations_pb2 as protoc__gen__openapiv2_dot_options_dot_annotations__pb2 +from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n2scalekit/v1/agentkit_logs/agentkit_analytics.proto\x12\x19scalekit.v1.agentkit_logs\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\xbe\x04\n\x17GetOverviewStatsRequest\x12>\n\nstart_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x02R\tstartTime\x12:\n\x08\x65nd_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x02R\x07\x65ndTime\x12O\n\x08provider\x18\x03 \x03(\tB3\x92\x41\x30\x32.Filter by connector provider slug, e.g. gmail.R\x08provider\x12g\n\x06status\x18\x04 \x03(\tBO\x92\x41L2JFilter by status. Allowed values: success, provider_error, platform_error.R\x06status\x12>\n\nerror_code\x18\x05 \x03(\tB\x1f\x92\x41\x1c\x32\x1a\x46ilter by error code slug.R\terrorCode\x12\x98\x01\n\x0f\x63onnection_name\x18\x06 \x01(\tBj\x92\x41_2OFilter by connection name (partial, case-insensitive match). e.g. \'gmail-prod\'.J\x0c\"gmail-prod\"\xbaH\x05r\x03\x18\xff\x01H\x00R\x0e\x63onnectionName\x88\x01\x01\x42\x12\n\x10_connection_name\"\xa5\x03\n\rOverviewStats\x12\x14\n\x05total\x18\x01 \x01(\x03R\x05total\x12\x18\n\x07success\x18\x02 \x01(\x03R\x07success\x12\x16\n\x06\x65rrors\x18\x03 \x01(\x03R\x06\x65rrors\x12\'\n\x0fprovider_errors\x18\x04 \x01(\x03R\x0eproviderErrors\x12\'\n\x0fplatform_errors\x18\x05 \x01(\x03R\x0eplatformErrors\x12Q\n\x0ftop_error_codes\x18\x06 \x03(\x0b\x32).scalekit.v1.agentkit_logs.ErrorCodeCountR\rtopErrorCodes\x12Y\n\x13\x63onnector_breakdown\x18\x07 \x03(\x0b\x32(.scalekit.v1.agentkit_logs.ConnectorStatR\x12\x63onnectorBreakdown\x12L\n\x0btime_series\x18\x08 \x03(\x0b\x32+.scalekit.v1.agentkit_logs.TimeSeriesBucketR\ntimeSeries\"E\n\x0e\x45rrorCodeCount\x12\x1d\n\nerror_code\x18\x01 \x01(\tR\terrorCode\x12\x14\n\x05\x63ount\x18\x02 \x01(\x03R\x05\x63ount\"\xc5\x01\n\rConnectorStat\x12\x1a\n\x08provider\x18\x01 \x01(\tR\x08provider\x12\x14\n\x05total\x18\x02 \x01(\x03R\x05total\x12\x18\n\x07success\x18\x03 \x01(\x03R\x07success\x12\x16\n\x06\x65rrors\x18\x04 \x01(\x03R\x06\x65rrors\x12\'\n\x0fprovider_errors\x18\x05 \x01(\x03R\x0eproviderErrors\x12\'\n\x0fplatform_errors\x18\x06 \x01(\x03R\x0eplatformErrors\"\xc8\x03\n\x10TimeSeriesBucket\x12\x32\n\x06\x62ucket\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x06\x62ucket\x12\x14\n\x05total\x18\x02 \x01(\x03R\x05total\x12\x18\n\x07success\x18\x03 \x01(\x03R\x07success\x12\x16\n\x06\x65rrors\x18\x04 \x01(\x03R\x06\x65rrors\x12\xe5\x01\n\x17\x62ucket_duration_seconds\x18\x05 \x01(\x03\x42\xac\x01\x92\x41\xa8\x01\x32\xa5\x01Width of this bucket in seconds. The server picks granularity adaptively (5m, 15m, 30m, 1h, 2h, 6h, 12h, 1d, 3d, or 7d) so that any window returns at most 30 points.R\x15\x62ucketDurationSeconds\x12\'\n\x0fprovider_errors\x18\x06 \x01(\x03R\x0eproviderErrors\x12\'\n\x0fplatform_errors\x18\x07 \x01(\x03R\x0eplatformErrors2\xf7\x03\n\x18\x41gentkitAnalyticsService\x12\xc1\x03\n\x10GetOverviewStats\x12\x32.scalekit.v1.agentkit_logs.GetOverviewStatsRequest\x1a(.scalekit.v1.agentkit_logs.OverviewStats\"\xce\x02\x92\x41\x8a\x02\n\x12\x41gentKit Analytics\x12!Get tool call overview statistics\x1a~Returns aggregated tool call metrics for the environment over the specified time window. Used to power the Overview dashboard.J3\n\x03\x32\x30\x30\x12,\n*Overview statistics retrieved successfullyJ\x1c\n\x03\x34\x30\x30\x12\x15\n\x13Invalid time window\x82\xb5\x18\x02\x18T\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\x12#/api/v1/agentkit/analytics/overview\x1a\x17\x92\x41\x14\n\x12\x41gentKit AnalyticsB9Z7github.com/scalekit-inc/scalekit/pkg/grpc/agentkit_logsb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'scalekit.v1.agentkit_logs.agentkit_analytics_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'Z7github.com/scalekit-inc/scalekit/pkg/grpc/agentkit_logs' + _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['start_time']._loaded_options = None + _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['start_time']._serialized_options = b'\340A\002' + _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['end_time']._loaded_options = None + _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['end_time']._serialized_options = b'\340A\002' + _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['provider']._loaded_options = None + _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['provider']._serialized_options = b'\222A02.Filter by connector provider slug, e.g. gmail.' + _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['status']._loaded_options = None + _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['status']._serialized_options = b'\222AL2JFilter by status. Allowed values: success, provider_error, platform_error.' + _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['error_code']._loaded_options = None + _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['error_code']._serialized_options = b'\222A\0342\032Filter by error code slug.' + _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['connection_name']._loaded_options = None + _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['connection_name']._serialized_options = b'\222A_2OFilter by connection name (partial, case-insensitive match). e.g. \'gmail-prod\'.J\014\"gmail-prod\"\272H\005r\003\030\377\001' + _globals['_TIMESERIESBUCKET'].fields_by_name['bucket_duration_seconds']._loaded_options = None + _globals['_TIMESERIESBUCKET'].fields_by_name['bucket_duration_seconds']._serialized_options = b'\222A\250\0012\245\001Width of this bucket in seconds. The server picks granularity adaptively (5m, 15m, 30m, 1h, 2h, 6h, 12h, 1d, 3d, or 7d) so that any window returns at most 30 points.' + _globals['_AGENTKITANALYTICSSERVICE']._loaded_options = None + _globals['_AGENTKITANALYTICSSERVICE']._serialized_options = b'\222A\024\n\022AgentKit Analytics' + _globals['_AGENTKITANALYTICSSERVICE'].methods_by_name['GetOverviewStats']._loaded_options = None + _globals['_AGENTKITANALYTICSSERVICE'].methods_by_name['GetOverviewStats']._serialized_options = b'\222A\212\002\n\022AgentKit Analytics\022!Get tool call overview statistics\032~Returns aggregated tool call metrics for the environment over the specified time window. Used to power the Overview dashboard.J3\n\003200\022,\n*Overview statistics retrieved successfullyJ\034\n\003400\022\025\n\023Invalid time window\202\265\030\002\030T\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002%\022#/api/v1/agentkit/analytics/overview' + _globals['_GETOVERVIEWSTATSREQUEST']._serialized_start=319 + _globals['_GETOVERVIEWSTATSREQUEST']._serialized_end=893 + _globals['_OVERVIEWSTATS']._serialized_start=896 + _globals['_OVERVIEWSTATS']._serialized_end=1317 + _globals['_ERRORCODECOUNT']._serialized_start=1319 + _globals['_ERRORCODECOUNT']._serialized_end=1388 + _globals['_CONNECTORSTAT']._serialized_start=1391 + _globals['_CONNECTORSTAT']._serialized_end=1588 + _globals['_TIMESERIESBUCKET']._serialized_start=1591 + _globals['_TIMESERIESBUCKET']._serialized_end=2047 + _globals['_AGENTKITANALYTICSSERVICE']._serialized_start=2050 + _globals['_AGENTKITANALYTICSSERVICE']._serialized_end=2553 +# @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/agentkit_logs/agentkit_analytics_pb2.pyi b/scalekit/v1/agentkit_logs/agentkit_analytics_pb2.pyi new file mode 100644 index 0000000..363b77b --- /dev/null +++ b/scalekit/v1/agentkit_logs/agentkit_analytics_pb2.pyi @@ -0,0 +1,91 @@ +from buf.validate import validate_pb2 as _validate_pb2 +from google.api import annotations_pb2 as _annotations_pb2 +from google.api import field_behavior_pb2 as _field_behavior_pb2 +from google.api import visibility_pb2 as _visibility_pb2 +from google.protobuf import timestamp_pb2 as _timestamp_pb2 +from protoc_gen_openapiv2.options import annotations_pb2 as _annotations_pb2_1 +from scalekit.v1.options import options_pb2 as _options_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class GetOverviewStatsRequest(_message.Message): + __slots__ = ("start_time", "end_time", "provider", "status", "error_code", "connection_name") + START_TIME_FIELD_NUMBER: _ClassVar[int] + END_TIME_FIELD_NUMBER: _ClassVar[int] + PROVIDER_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + ERROR_CODE_FIELD_NUMBER: _ClassVar[int] + CONNECTION_NAME_FIELD_NUMBER: _ClassVar[int] + start_time: _timestamp_pb2.Timestamp + end_time: _timestamp_pb2.Timestamp + provider: _containers.RepeatedScalarFieldContainer[str] + status: _containers.RepeatedScalarFieldContainer[str] + error_code: _containers.RepeatedScalarFieldContainer[str] + connection_name: str + def __init__(self, start_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., end_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., provider: _Optional[_Iterable[str]] = ..., status: _Optional[_Iterable[str]] = ..., error_code: _Optional[_Iterable[str]] = ..., connection_name: _Optional[str] = ...) -> None: ... + +class OverviewStats(_message.Message): + __slots__ = ("total", "success", "errors", "provider_errors", "platform_errors", "top_error_codes", "connector_breakdown", "time_series") + TOTAL_FIELD_NUMBER: _ClassVar[int] + SUCCESS_FIELD_NUMBER: _ClassVar[int] + ERRORS_FIELD_NUMBER: _ClassVar[int] + PROVIDER_ERRORS_FIELD_NUMBER: _ClassVar[int] + PLATFORM_ERRORS_FIELD_NUMBER: _ClassVar[int] + TOP_ERROR_CODES_FIELD_NUMBER: _ClassVar[int] + CONNECTOR_BREAKDOWN_FIELD_NUMBER: _ClassVar[int] + TIME_SERIES_FIELD_NUMBER: _ClassVar[int] + total: int + success: int + errors: int + provider_errors: int + platform_errors: int + top_error_codes: _containers.RepeatedCompositeFieldContainer[ErrorCodeCount] + connector_breakdown: _containers.RepeatedCompositeFieldContainer[ConnectorStat] + time_series: _containers.RepeatedCompositeFieldContainer[TimeSeriesBucket] + def __init__(self, total: _Optional[int] = ..., success: _Optional[int] = ..., errors: _Optional[int] = ..., provider_errors: _Optional[int] = ..., platform_errors: _Optional[int] = ..., top_error_codes: _Optional[_Iterable[_Union[ErrorCodeCount, _Mapping]]] = ..., connector_breakdown: _Optional[_Iterable[_Union[ConnectorStat, _Mapping]]] = ..., time_series: _Optional[_Iterable[_Union[TimeSeriesBucket, _Mapping]]] = ...) -> None: ... + +class ErrorCodeCount(_message.Message): + __slots__ = ("error_code", "count") + ERROR_CODE_FIELD_NUMBER: _ClassVar[int] + COUNT_FIELD_NUMBER: _ClassVar[int] + error_code: str + count: int + def __init__(self, error_code: _Optional[str] = ..., count: _Optional[int] = ...) -> None: ... + +class ConnectorStat(_message.Message): + __slots__ = ("provider", "total", "success", "errors", "provider_errors", "platform_errors") + PROVIDER_FIELD_NUMBER: _ClassVar[int] + TOTAL_FIELD_NUMBER: _ClassVar[int] + SUCCESS_FIELD_NUMBER: _ClassVar[int] + ERRORS_FIELD_NUMBER: _ClassVar[int] + PROVIDER_ERRORS_FIELD_NUMBER: _ClassVar[int] + PLATFORM_ERRORS_FIELD_NUMBER: _ClassVar[int] + provider: str + total: int + success: int + errors: int + provider_errors: int + platform_errors: int + def __init__(self, provider: _Optional[str] = ..., total: _Optional[int] = ..., success: _Optional[int] = ..., errors: _Optional[int] = ..., provider_errors: _Optional[int] = ..., platform_errors: _Optional[int] = ...) -> None: ... + +class TimeSeriesBucket(_message.Message): + __slots__ = ("bucket", "total", "success", "errors", "bucket_duration_seconds", "provider_errors", "platform_errors") + BUCKET_FIELD_NUMBER: _ClassVar[int] + TOTAL_FIELD_NUMBER: _ClassVar[int] + SUCCESS_FIELD_NUMBER: _ClassVar[int] + ERRORS_FIELD_NUMBER: _ClassVar[int] + BUCKET_DURATION_SECONDS_FIELD_NUMBER: _ClassVar[int] + PROVIDER_ERRORS_FIELD_NUMBER: _ClassVar[int] + PLATFORM_ERRORS_FIELD_NUMBER: _ClassVar[int] + bucket: _timestamp_pb2.Timestamp + total: int + success: int + errors: int + bucket_duration_seconds: int + provider_errors: int + platform_errors: int + def __init__(self, bucket: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., total: _Optional[int] = ..., success: _Optional[int] = ..., errors: _Optional[int] = ..., bucket_duration_seconds: _Optional[int] = ..., provider_errors: _Optional[int] = ..., platform_errors: _Optional[int] = ...) -> None: ... diff --git a/scalekit/v1/agentkit_logs/agentkit_analytics_pb2_grpc.py b/scalekit/v1/agentkit_logs/agentkit_analytics_pb2_grpc.py new file mode 100644 index 0000000..7119e59 --- /dev/null +++ b/scalekit/v1/agentkit_logs/agentkit_analytics_pb2_grpc.py @@ -0,0 +1,66 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc + +from scalekit.v1.agentkit_logs import agentkit_analytics_pb2 as scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__analytics__pb2 + + +class AgentkitAnalyticsServiceStub(object): + """Missing associated documentation comment in .proto file.""" + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.GetOverviewStats = channel.unary_unary( + '/scalekit.v1.agentkit_logs.AgentkitAnalyticsService/GetOverviewStats', + request_serializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__analytics__pb2.GetOverviewStatsRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__analytics__pb2.OverviewStats.FromString, + ) + + +class AgentkitAnalyticsServiceServicer(object): + """Missing associated documentation comment in .proto file.""" + + def GetOverviewStats(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_AgentkitAnalyticsServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'GetOverviewStats': grpc.unary_unary_rpc_method_handler( + servicer.GetOverviewStats, + request_deserializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__analytics__pb2.GetOverviewStatsRequest.FromString, + response_serializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__analytics__pb2.OverviewStats.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'scalekit.v1.agentkit_logs.AgentkitAnalyticsService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + # This class is part of an EXPERIMENTAL API. +class AgentkitAnalyticsService(object): + """Missing associated documentation comment in .proto file.""" + + @staticmethod + def GetOverviewStats(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.agentkit_logs.AgentkitAnalyticsService/GetOverviewStats', + scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__analytics__pb2.GetOverviewStatsRequest.SerializeToString, + scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__analytics__pb2.OverviewStats.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/agentkit_logs/agentkit_logs_pb2.py b/scalekit/v1/agentkit_logs/agentkit_logs_pb2.py new file mode 100644 index 0000000..67c4f5e --- /dev/null +++ b/scalekit/v1/agentkit_logs/agentkit_logs_pb2.py @@ -0,0 +1,80 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: scalekit/v1/agentkit_logs/agentkit_logs.proto +# Protobuf Python Version: 5.26.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 +from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 +from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2 +from google.api import visibility_pb2 as google_dot_api_dot_visibility__pb2 +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 +from protoc_gen_openapiv2.options import annotations_pb2 as protoc__gen__openapiv2_dot_options_dot_annotations__pb2 +from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n-scalekit/v1/agentkit_logs/agentkit_logs.proto\x12\x19scalekit.v1.agentkit_logs\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\xc6\t\n\x17ListToolCallLogsRequest\x12\x39\n\nstart_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartTime\x12\x35\n\x08\x65nd_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x65ndTime\x12g\n\x06status\x18\x03 \x03(\tBO\x92\x41L2JFilter by status. Allowed values: success, provider_error, platform_error.R\x06status\x12O\n\x08provider\x18\x04 \x03(\tB3\x92\x41\x30\x32.Filter by connector provider slug, e.g. gmail.R\x08provider\x12Z\n\rconnection_id\x18\x05 \x01(\tB0\x92\x41-2\x18\x46ilter by connection ID.J\x11\"conn_1234567890\"H\x00R\x0c\x63onnectionId\x88\x01\x01\x12l\n\x14\x63onnected_account_id\x18\x06 \x01(\tB5\x92\x41\x32\x32\x1f\x46ilter by connected account ID.J\x0f\"ca_1234567890\"H\x01R\x12\x63onnectedAccountId\x88\x01\x01\x12{\n\nidentifier\x18\x07 \x01(\tBV\x92\x41K2IFilter by connected account identifier (customer-defined end-user label).\xbaH\x05r\x03\x18\xff\x01H\x02R\nidentifier\x88\x01\x01\x12\x86\x01\n\x0c\x61gent_run_id\x18\x08 \x01(\tB_\x92\x41T2DFilter by agent run ID to see all tool calls for a single agent run.J\x0c\"run_abc123\"\xbaH\x05r\x03\x18\xff\x01H\x03R\nagentRunId\x88\x01\x01\x12\\\n\tpage_size\x18\t \x01(\rB?\x92\x41<2:Maximum number of records to return (1\xe2\x80\x93\x31\x30\x30, default 20).R\x08pageSize\x12i\n\npage_token\x18\n \x01(\tBJ\x92\x41G2EOpaque pagination token returned by a previous ListToolCallLogs call.R\tpageToken\x12\x86\x01\n\x0f\x63onnection_name\x18\x0b \x01(\tBX\x92\x41M2=Filter by connection name (partial match). e.g. \'gmail-prod\'.J\x0c\"gmail-prod\"\xbaH\x05r\x03\x18\xff\x01H\x04R\x0e\x63onnectionName\x88\x01\x01\x42\x10\n\x0e_connection_idB\x17\n\x15_connected_account_idB\r\n\x0b_identifierB\x0f\n\r_agent_run_idB\x12\n\x10_connection_name\"\xb4\x02\n\x18ListToolCallLogsResponse\x12L\n\x0etool_call_logs\x18\x01 \x03(\x0b\x32&.scalekit.v1.agentkit_logs.ToolCallLogR\x0ctoolCallLogs\x12&\n\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x03 \x01(\x03R\ttotalSize\x12\x82\x01\n\x0fprev_page_token\x18\x04 \x01(\tBZ\x92\x41W2UPagination token to fetch the previous page of results. Empty when on the first page.R\rprevPageToken\"z\n\x15GetToolCallLogRequest\x12\x61\n\x0c\x65xecution_id\x18\x01 \x01(\tB>\x92\x41/2\x1e\x45xecution ID of the tool call.J\r\"exec_abc123\"\xe0\x41\x02\xbaH\x06r\x04\x10\x01\x18@R\x0b\x65xecutionId\"\xf8\x07\n\x0bToolCallLog\x12\x46\n\x02id\x18\x01 \x01(\tB6\x92\x41\x33\x32\x1fUnique tool call log record ID.J\x10\"tcl_1234567890\"R\x02id\x12%\n\x0e\x65nvironment_id\x18\x02 \x01(\tR\renvironmentId\x12O\n\x0c\x65xecution_id\x18\x03 \x01(\tB,\x92\x41)2\'Unique execution ID for this tool call.R\x0b\x65xecutionId\x12%\n\x0c\x61gent_run_id\x18\x04 \x01(\tH\x00R\nagentRunId\x88\x01\x01\x12\x1b\n\ttool_name\x18\x05 \x01(\tR\x08toolName\x12\x1a\n\x08provider\x18\x06 \x01(\tR\x08provider\x12\x30\n\x14\x63onnected_account_id\x18\x07 \x01(\tR\x12\x63onnectedAccountId\x12#\n\rconnection_id\x18\x08 \x01(\tR\x0c\x63onnectionId\x12\'\n\x0f\x63onnection_name\x18\t \x01(\tR\x0e\x63onnectionName\x12\x1e\n\nidentifier\x18\n \x01(\tR\nidentifier\x12\x17\n\x07user_id\x18\x0b \x01(\tR\x06userId\x12,\n\x0forganization_id\x18\x0c \x01(\tH\x01R\x0eorganizationId\x88\x01\x01\x12;\n\x06source\x18\r \x01(\tB#\x92\x41 2\x1eInvocation source: API or MCP.R\x06source\x12Q\n\x06status\x18\x0e \x01(\tB9\x92\x41\x36\x32\x34Outcome: success, provider_error, or platform_error.R\x06status\x12\x1d\n\nerror_tier\x18\x0f \x01(\tR\terrorTier\x12\x1d\n\nerror_code\x18\x10 \x01(\tR\terrorCode\x12#\n\rerror_message\x18\x11 \x01(\tR\x0c\x65rrorMessage\x12\x1f\n\x0b\x64uration_ms\x18\x12 \x01(\x03R\ndurationMs\x12\x39\n\nstarted_at\x18\x13 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartedAt\x12]\n\x0cworkspace_id\x18\x14 \x01(\tB5\x92\x41\x32\x32\x1eWorkspace this log belongs to.J\x10\"wks_1234567890\"H\x02R\x0bworkspaceId\x88\x01\x01\x42\x0f\n\r_agent_run_idB\x12\n\x10_organization_idB\x0f\n\r_workspace_id2\xd7\x06\n\x13\x41gentkitLogsService\x12\xba\x03\n\x10ListToolCallLogs\x12\x32.scalekit.v1.agentkit_logs.ListToolCallLogsRequest\x1a\x33.scalekit.v1.agentkit_logs.ListToolCallLogsResponse\"\xbc\x02\x92\x41\xfc\x01\n\rAgentKit Logs\x12\x13List tool call logs\x1a\x80\x01Returns paginated tool call execution records for the environment. Filter by time range, status, provider, or connected account.J.\n\x03\x32\x30\x30\x12\'\n%Tool call logs retrieved successfullyJ#\n\x03\x34\x30\x30\x12\x1c\n\x1aInvalid request parameters\x82\xb5\x18\x02\x18T\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\x12\x1f/api/v1/agentkit/tool_call_logs\x12\xee\x02\n\x0eGetToolCallLog\x12\x30.scalekit.v1.agentkit_logs.GetToolCallLogRequest\x1a&.scalekit.v1.agentkit_logs.ToolCallLog\"\x81\x02\x92\x41\xb2\x01\n\rAgentKit Logs\x12\x13Get a tool call log\x1a None: ... + +class ListToolCallLogsResponse(_message.Message): + __slots__ = ("tool_call_logs", "next_page_token", "total_size", "prev_page_token") + TOOL_CALL_LOGS_FIELD_NUMBER: _ClassVar[int] + NEXT_PAGE_TOKEN_FIELD_NUMBER: _ClassVar[int] + TOTAL_SIZE_FIELD_NUMBER: _ClassVar[int] + PREV_PAGE_TOKEN_FIELD_NUMBER: _ClassVar[int] + tool_call_logs: _containers.RepeatedCompositeFieldContainer[ToolCallLog] + next_page_token: str + total_size: int + prev_page_token: str + def __init__(self, tool_call_logs: _Optional[_Iterable[_Union[ToolCallLog, _Mapping]]] = ..., next_page_token: _Optional[str] = ..., total_size: _Optional[int] = ..., prev_page_token: _Optional[str] = ...) -> None: ... + +class GetToolCallLogRequest(_message.Message): + __slots__ = ("execution_id",) + EXECUTION_ID_FIELD_NUMBER: _ClassVar[int] + execution_id: str + def __init__(self, execution_id: _Optional[str] = ...) -> None: ... + +class ToolCallLog(_message.Message): + __slots__ = ("id", "environment_id", "execution_id", "agent_run_id", "tool_name", "provider", "connected_account_id", "connection_id", "connection_name", "identifier", "user_id", "organization_id", "source", "status", "error_tier", "error_code", "error_message", "duration_ms", "started_at", "workspace_id") + ID_FIELD_NUMBER: _ClassVar[int] + ENVIRONMENT_ID_FIELD_NUMBER: _ClassVar[int] + EXECUTION_ID_FIELD_NUMBER: _ClassVar[int] + AGENT_RUN_ID_FIELD_NUMBER: _ClassVar[int] + TOOL_NAME_FIELD_NUMBER: _ClassVar[int] + PROVIDER_FIELD_NUMBER: _ClassVar[int] + CONNECTED_ACCOUNT_ID_FIELD_NUMBER: _ClassVar[int] + CONNECTION_ID_FIELD_NUMBER: _ClassVar[int] + CONNECTION_NAME_FIELD_NUMBER: _ClassVar[int] + IDENTIFIER_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] + SOURCE_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + ERROR_TIER_FIELD_NUMBER: _ClassVar[int] + ERROR_CODE_FIELD_NUMBER: _ClassVar[int] + ERROR_MESSAGE_FIELD_NUMBER: _ClassVar[int] + DURATION_MS_FIELD_NUMBER: _ClassVar[int] + STARTED_AT_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_ID_FIELD_NUMBER: _ClassVar[int] + id: str + environment_id: str + execution_id: str + agent_run_id: str + tool_name: str + provider: str + connected_account_id: str + connection_id: str + connection_name: str + identifier: str + user_id: str + organization_id: str + source: str + status: str + error_tier: str + error_code: str + error_message: str + duration_ms: int + started_at: _timestamp_pb2.Timestamp + workspace_id: str + def __init__(self, id: _Optional[str] = ..., environment_id: _Optional[str] = ..., execution_id: _Optional[str] = ..., agent_run_id: _Optional[str] = ..., tool_name: _Optional[str] = ..., provider: _Optional[str] = ..., connected_account_id: _Optional[str] = ..., connection_id: _Optional[str] = ..., connection_name: _Optional[str] = ..., identifier: _Optional[str] = ..., user_id: _Optional[str] = ..., organization_id: _Optional[str] = ..., source: _Optional[str] = ..., status: _Optional[str] = ..., error_tier: _Optional[str] = ..., error_code: _Optional[str] = ..., error_message: _Optional[str] = ..., duration_ms: _Optional[int] = ..., started_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., workspace_id: _Optional[str] = ...) -> None: ... diff --git a/scalekit/v1/agentkit_logs/agentkit_logs_pb2_grpc.py b/scalekit/v1/agentkit_logs/agentkit_logs_pb2_grpc.py new file mode 100644 index 0000000..384ee32 --- /dev/null +++ b/scalekit/v1/agentkit_logs/agentkit_logs_pb2_grpc.py @@ -0,0 +1,99 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc + +from scalekit.v1.agentkit_logs import agentkit_logs_pb2 as scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2 + + +class AgentkitLogsServiceStub(object): + """Missing associated documentation comment in .proto file.""" + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.ListToolCallLogs = channel.unary_unary( + '/scalekit.v1.agentkit_logs.AgentkitLogsService/ListToolCallLogs', + request_serializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.ListToolCallLogsRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.ListToolCallLogsResponse.FromString, + ) + self.GetToolCallLog = channel.unary_unary( + '/scalekit.v1.agentkit_logs.AgentkitLogsService/GetToolCallLog', + request_serializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.GetToolCallLogRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.ToolCallLog.FromString, + ) + + +class AgentkitLogsServiceServicer(object): + """Missing associated documentation comment in .proto file.""" + + def ListToolCallLogs(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetToolCallLog(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_AgentkitLogsServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'ListToolCallLogs': grpc.unary_unary_rpc_method_handler( + servicer.ListToolCallLogs, + request_deserializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.ListToolCallLogsRequest.FromString, + response_serializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.ListToolCallLogsResponse.SerializeToString, + ), + 'GetToolCallLog': grpc.unary_unary_rpc_method_handler( + servicer.GetToolCallLog, + request_deserializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.GetToolCallLogRequest.FromString, + response_serializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.ToolCallLog.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'scalekit.v1.agentkit_logs.AgentkitLogsService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + # This class is part of an EXPERIMENTAL API. +class AgentkitLogsService(object): + """Missing associated documentation comment in .proto file.""" + + @staticmethod + def ListToolCallLogs(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.agentkit_logs.AgentkitLogsService/ListToolCallLogs', + scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.ListToolCallLogsRequest.SerializeToString, + scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.ListToolCallLogsResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def GetToolCallLog(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.agentkit_logs.AgentkitLogsService/GetToolCallLog', + scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.GetToolCallLogRequest.SerializeToString, + scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.ToolCallLog.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/domains/domains_pb2.py b/scalekit/v1/domains/domains_pb2.py index 9a297a9..ecf61ce 100644 --- a/scalekit/v1/domains/domains_pb2.py +++ b/scalekit/v1/domains/domains_pb2.py @@ -23,7 +23,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/domains/domains.proto\x12\x13scalekit.v1.domains\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\x8a\x06\n\x13\x43reateDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\xba\x01\n\rconnection_id\x18\x03 \x01(\tB\x8f\x01\x92\x41}2iOptional identity provider connection ID to associate with this domain for enterprise SSO configurations.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12x\n\x06\x64omain\x18\x04 \x01(\x0b\x32!.scalekit.v1.domains.CreateDomainB=\x92\x41:28Domain configuration including the domain name and type.R\x06\x64omainB\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\xb3\x01\n\x14\x43reateDomainResponse\x12\x9a\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBe\x92\x41\x62\x32`The newly created domain object with all configuration details and system-generated identifiers.R\x06\x64omain\"\xe6\x04\n\x0c\x43reateDomain\x12\xf6\x01\n\x06\x64omain\x18\x01 \x01(\tB\xdd\x01\x92\x41\xcc\x01\x32\xb3\x01The domain name to be configured. Must be a valid business domain you control. Public and disposable domains (gmail.com, outlook.com, etc.) are automatically blocked for security.J\x14\"customerdomain.com\"\xbaH\nr\x05\x10\x04\x18\xff\x01\xc8\x01\x01R\x06\x64omain\x12\xdc\x02\n\x0b\x64omain_type\x18\x02 \x01(\x0e\x32\x1f.scalekit.v1.domains.DomainTypeB\x99\x02\x92\x41\x95\x02\x32\xfb\x01The domain type.\n- ALLOWED_EMAIL_DOMAIN: trusted domain used to suggest the organization in the organization switcher during sign-in/sign-up.\n- ORGANIZATION_DOMAIN: SSO discovery domain used to route users to the correct SSO provider and enforce SSO.\nJ\x15\"ORGANIZATION_DOMAIN\"R\ndomainType\"\x84\x07\n\x13UpdateDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x9f\x01\n\rconnection_id\x18\x03 \x01(\tBu\x92\x41\x63\x32OOptional updated identity provider connection ID to associate with this domain.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12o\n\x02id\x18\x04 \x01(\tB_\x92\x41\\2AScalekit-generated unique identifier of the domain to be updated.J\x17\"dom_88351643129225005\"R\x02id\x12\x9b\x01\n\x06\x64omain\x18\x05 \x01(\x0b\x32!.scalekit.v1.domains.UpdateDomainB`\x92\x41]2[Domain update configuration. Currently empty as domain name cannot be changed once created.R\x06\x64omainB\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\x0e\n\x0cUpdateDomain\"\xa5\x01\n\x14UpdateDomainResponse\x12\x8c\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBW\x92\x41T2RThe updated domain object reflecting all changes made to the domain configuration.R\x06\x64omain\"\xad\x04\n\x10GetDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12m\n\x02id\x18\x03 \x01(\tB]\x92\x41Z2?Scalekit-generated unique identifier of the domain to retrieve.J\x17\"dom_88351643129225005\"R\x02idB\x0c\n\nidentities\"\xb6\x01\n\x11GetDomainResponse\x12\xa0\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBk\x92\x41h2fThe requested domain object with complete details including domain type, timestamps and configuration.R\x06\x64omain\"\xeb\x05\n\x13\x44\x65leteDomainRequest\x12{\n\x02id\x18\x01 \x01(\tBk\x92\x41h2MScalekit-generated unique identifier of the domain to be permanently deleted.J\x17\"dom_88351643129225005\"R\x02id\x12\xcb\x01\n\x0forganization_id\x18\x02 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x03 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x98\x01\n\rconnection_id\x18\x04 \x01(\tBn\x92\x41\\2HOptional connection ID for additional validation during domain deletion.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x42\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\xac\x0b\n\x11ListDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\xa8\x01\n\rconnection_id\x18\x03 \x01(\tB~\x92\x41l2XOptional filter to list domains associated with a specific identity provider connection.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12\xab\x01\n\x07include\x18\x04 \x01(\tB\x8b\x01\x92\x41\x87\x01\x32mOptional comma-separated list of additional fields to include in the response (e.g., \'verification_details\').J\x16\"verification_details\"H\x02R\x07include\x88\x01\x01\x12\x8f\x01\n\tpage_size\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueBU\x92\x41R2LMaximum number of domains to return per page. Default is 30, maximum is 100.J\x02\x33\x30R\x08pageSize\x12\x82\x01\n\x0bpage_number\x18\x06 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueBD\x92\x41\x41\x3224/api/v1/organizations/{organization_id}/domains/{id}:\x06\x64omain\x12\xea\x06\n\x0cVerifyDomain\x12(.scalekit.v1.domains.VerifyDomainRequest\x1a\x1a.google.protobuf.BoolValue\"\x93\x06\x92\x41\xb7\x05\n\x07\x44omains\x12\rVerify Domain\x1a\x9e\x04Initiates domain ownership verification by checking the DNS TXT record that should be added to the domain\'s DNS configuration.\n\nUse this endpoint to manually trigger verification for domains that are in PENDING status. The system will check for the required TXT record and update the verification status accordingly.\n\nFor automatically verified domains, this endpoint will return true immediately. For domains requiring manual verification, ensure the TXT record has been properly configured in your DNS settings before calling this endpoint.J|\n\x03\x32\x30\x30\x12u\nSDomain verification result. Returns true if verification succeeds, false otherwise.\x12\x1e\n\x1c\x1a\x1a.google.protobuf.BoolValue\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02=2;/api/v1/organizations/{organization_id}/domains/{id}:verify\x12\x9a\x03\n\tGetDomain\x12%.scalekit.v1.domains.GetDomainRequest\x1a&.scalekit.v1.domains.GetDomainResponse\"\xbd\x02\x92\x41\xe3\x01\n\x07\x44omains\x12\nGet Domain\x1akRetrieves complete details for a domain including domain type, timestamps, and configuration information.\n\nJ_\n\x03\x32\x30\x30\x12X\n*Successfully retrieved the domain details.\x12*\n(\x1a&.scalekit.v1.domains.GetDomainResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x36\x12\x34/api/v1/organizations/{organization_id}/domains/{id}\x12\xe4\x03\n\x0c\x44\x65leteDomain\x12(.scalekit.v1.domains.DeleteDomainRequest\x1a\x16.google.protobuf.Empty\"\x91\x03\x92\x41\xb6\x02\n\x07\x44omains\x12\rDelete Domain\x1a\xf4\x01Permanently removes a domain record from an organization.\n\n- Deleting an ORGANIZATION_DOMAIN disables SSO routing/enforcement for that domain.\n- Deleting an ALLOWED_EMAIL_DOMAIN stops organization suggestions for users with that email domain.\n\nJ%\n\x03\x32\x30\x30\x12\x1e\n\x1c\x44omain successfully deleted.\x82\xb5\x18\x17\n\x13organizations_write\x18t\x82\xd3\xe4\x93\x02\x36*4/api/v1/organizations/{organization_id}/domains/{id}\x12\x9b\x05\n\x0bListDomains\x12&.scalekit.v1.domains.ListDomainRequest\x1a\'.scalekit.v1.domains.ListDomainResponse\"\xba\x04\x92\x41\xe5\x03\n\x07\x44omains\x12\x0cList Domains\x1a\xe8\x02Retrieves a paginated list of all domains configured for the specified organization.\n\nDomain types:\n- ALLOWED_EMAIL_DOMAIN: Trusted domains used to suggest the organization in the organization switcher during sign-in/sign-up (auth-method agnostic).\n- ORGANIZATION_DOMAIN: SSO discovery domains used to route users to the correct SSO provider and enforce SSO.\n\nJa\n\x03\x32\x30\x30\x12Z\n+Successfully retrieved the list of domains.\x12+\n)\x1a\'.scalekit.v1.domains.ListDomainResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x31\x12//api/v1/organizations/{organization_id}/domains\x12\x90\x05\n\x15ListAuthorizedDomains\x12\x30.scalekit.v1.domains.ListAuthorizedDomainRequest\x1a\x31.scalekit.v1.domains.ListAuthorizedDomainResponse\"\x91\x04\x92\x41\xd8\x03\n\x07\x44omains\x12\x17List Authorized Domains\x1a\xbb\x02Retrieves a list of domains that are authorized for use with the specified origin URL.\n\nUse this endpoint to validate whether a particular domain is allowed for authentication or other domain-restricted operations.\n\nThis is commonly used by frontend applications to verify domain allowlists and CORS configurations.Jv\n\x03\x32\x30\x30\x12o\n6Successfully retrieved the list of authorized domains.\x12\x35\n3\x1a\x31.scalekit.v1.domains.ListAuthorizedDomainResponse\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1a\x12\x18/api/v1/domains/{origin}\x1a\xf8\x03\x92\x41\xf4\x03\n\x07\x44omains\x12\xe8\x03Manage organization-level domains. Scalekit supports two domain types:\n\n- ORGANIZATION_DOMAIN: Used for SSO domain discovery. When a user signs in with a matching email domain, Scalekit routes them to the organization\xe2\x80\x99s SSO provider and enforces SSO.\n- ALLOWED_EMAIL_DOMAIN: Used to mark trusted email domains for an organization. When a user signs in or signs up with a matching domain, Scalekit suggests the organization in the organization switcher (authentication-method agnostic).\nB3Z1github.com/scalekit-inc/scalekit/pkg/grpc/domainsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/domains/domains.proto\x12\x13scalekit.v1.domains\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\x8a\x06\n\x13\x43reateDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\xba\x01\n\rconnection_id\x18\x03 \x01(\tB\x8f\x01\x92\x41}2iOptional identity provider connection ID to associate with this domain for enterprise SSO configurations.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12x\n\x06\x64omain\x18\x04 \x01(\x0b\x32!.scalekit.v1.domains.CreateDomainB=\x92\x41:28Domain configuration including the domain name and type.R\x06\x64omainB\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\xb3\x01\n\x14\x43reateDomainResponse\x12\x9a\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBe\x92\x41\x62\x32`The newly created domain object with all configuration details and system-generated identifiers.R\x06\x64omain\"\xe6\x04\n\x0c\x43reateDomain\x12\xf6\x01\n\x06\x64omain\x18\x01 \x01(\tB\xdd\x01\x92\x41\xcc\x01\x32\xb3\x01The domain name to be configured. Must be a valid business domain you control. Public and disposable domains (gmail.com, outlook.com, etc.) are automatically blocked for security.J\x14\"customerdomain.com\"\xbaH\nr\x05\x10\x04\x18\xff\x01\xc8\x01\x01R\x06\x64omain\x12\xdc\x02\n\x0b\x64omain_type\x18\x02 \x01(\x0e\x32\x1f.scalekit.v1.domains.DomainTypeB\x99\x02\x92\x41\x95\x02\x32\xfb\x01The domain type.\n- ALLOWED_EMAIL_DOMAIN: trusted domain used to suggest the organization in the organization switcher during sign-in/sign-up.\n- ORGANIZATION_DOMAIN: SSO discovery domain used to route users to the correct SSO provider and enforce SSO.\nJ\x15\"ORGANIZATION_DOMAIN\"R\ndomainType\"\x84\x07\n\x13UpdateDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x9f\x01\n\rconnection_id\x18\x03 \x01(\tBu\x92\x41\x63\x32OOptional updated identity provider connection ID to associate with this domain.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12o\n\x02id\x18\x04 \x01(\tB_\x92\x41\\2AScalekit-generated unique identifier of the domain to be updated.J\x17\"dom_88351643129225005\"R\x02id\x12\x9b\x01\n\x06\x64omain\x18\x05 \x01(\x0b\x32!.scalekit.v1.domains.UpdateDomainB`\x92\x41]2[Domain update configuration. Currently empty as domain name cannot be changed once created.R\x06\x64omainB\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\x0e\n\x0cUpdateDomain\"\xa5\x01\n\x14UpdateDomainResponse\x12\x8c\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBW\x92\x41T2RThe updated domain object reflecting all changes made to the domain configuration.R\x06\x64omain\"\xad\x04\n\x10GetDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12m\n\x02id\x18\x03 \x01(\tB]\x92\x41Z2?Scalekit-generated unique identifier of the domain to retrieve.J\x17\"dom_88351643129225005\"R\x02idB\x0c\n\nidentities\"\xb6\x01\n\x11GetDomainResponse\x12\xa0\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBk\x92\x41h2fThe requested domain object with complete details including domain type, timestamps and configuration.R\x06\x64omain\"\xeb\x05\n\x13\x44\x65leteDomainRequest\x12{\n\x02id\x18\x01 \x01(\tBk\x92\x41h2MScalekit-generated unique identifier of the domain to be permanently deleted.J\x17\"dom_88351643129225005\"R\x02id\x12\xcb\x01\n\x0forganization_id\x18\x02 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x03 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x98\x01\n\rconnection_id\x18\x04 \x01(\tBn\x92\x41\\2HOptional connection ID for additional validation during domain deletion.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x42\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\xac\x0b\n\x11ListDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\xa8\x01\n\rconnection_id\x18\x03 \x01(\tB~\x92\x41l2XOptional filter to list domains associated with a specific identity provider connection.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12\xab\x01\n\x07include\x18\x04 \x01(\tB\x8b\x01\x92\x41\x87\x01\x32mOptional comma-separated list of additional fields to include in the response (e.g., \'verification_details\').J\x16\"verification_details\"H\x02R\x07include\x88\x01\x01\x12\x8f\x01\n\tpage_size\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueBU\x92\x41R2LMaximum number of domains to return per page. Default is 30, maximum is 100.J\x02\x33\x30R\x08pageSize\x12\x82\x01\n\x0bpage_number\x18\x06 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueBD\x92\x41\x41\x3224/api/v1/organizations/{organization_id}/domains/{id}:\x06\x64omain\x12\xff\x06\n\x0cVerifyDomain\x12(.scalekit.v1.domains.VerifyDomainRequest\x1a\x1a.google.protobuf.BoolValue\"\xa8\x06\x92\x41\xb7\x05\n\x07\x44omains\x12\rVerify Domain\x1a\x9e\x04Initiates domain ownership verification by checking the DNS TXT record that should be added to the domain\'s DNS configuration.\n\nUse this endpoint to manually trigger verification for domains that are in PENDING status. The system will check for the required TXT record and update the verification status accordingly.\n\nFor automatically verified domains, this endpoint will return true immediately. For domains requiring manual verification, ensure the TXT record has been properly configured in your DNS settings before calling this endpoint.J|\n\x03\x32\x30\x30\x12u\nSDomain verification result. Returns true if verification succeeds, false otherwise.\x12\x1e\n\x1c\x1a\x1a.google.protobuf.BoolValue\x82\xb5\x18\x17\n\x13organizations_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02=2;/api/v1/organizations/{organization_id}/domains/{id}:verify\x12\x9a\x03\n\tGetDomain\x12%.scalekit.v1.domains.GetDomainRequest\x1a&.scalekit.v1.domains.GetDomainResponse\"\xbd\x02\x92\x41\xe3\x01\n\x07\x44omains\x12\nGet Domain\x1akRetrieves complete details for a domain including domain type, timestamps, and configuration information.\n\nJ_\n\x03\x32\x30\x30\x12X\n*Successfully retrieved the domain details.\x12*\n(\x1a&.scalekit.v1.domains.GetDomainResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x36\x12\x34/api/v1/organizations/{organization_id}/domains/{id}\x12\xe4\x03\n\x0c\x44\x65leteDomain\x12(.scalekit.v1.domains.DeleteDomainRequest\x1a\x16.google.protobuf.Empty\"\x91\x03\x92\x41\xb6\x02\n\x07\x44omains\x12\rDelete Domain\x1a\xf4\x01Permanently removes a domain record from an organization.\n\n- Deleting an ORGANIZATION_DOMAIN disables SSO routing/enforcement for that domain.\n- Deleting an ALLOWED_EMAIL_DOMAIN stops organization suggestions for users with that email domain.\n\nJ%\n\x03\x32\x30\x30\x12\x1e\n\x1c\x44omain successfully deleted.\x82\xb5\x18\x17\n\x13organizations_write\x18t\x82\xd3\xe4\x93\x02\x36*4/api/v1/organizations/{organization_id}/domains/{id}\x12\x9b\x05\n\x0bListDomains\x12&.scalekit.v1.domains.ListDomainRequest\x1a\'.scalekit.v1.domains.ListDomainResponse\"\xba\x04\x92\x41\xe5\x03\n\x07\x44omains\x12\x0cList Domains\x1a\xe8\x02Retrieves a paginated list of all domains configured for the specified organization.\n\nDomain types:\n- ALLOWED_EMAIL_DOMAIN: Trusted domains used to suggest the organization in the organization switcher during sign-in/sign-up (auth-method agnostic).\n- ORGANIZATION_DOMAIN: SSO discovery domains used to route users to the correct SSO provider and enforce SSO.\n\nJa\n\x03\x32\x30\x30\x12Z\n+Successfully retrieved the list of domains.\x12+\n)\x1a\'.scalekit.v1.domains.ListDomainResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x31\x12//api/v1/organizations/{organization_id}/domains\x12\x90\x05\n\x15ListAuthorizedDomains\x12\x30.scalekit.v1.domains.ListAuthorizedDomainRequest\x1a\x31.scalekit.v1.domains.ListAuthorizedDomainResponse\"\x91\x04\x92\x41\xd8\x03\n\x07\x44omains\x12\x17List Authorized Domains\x1a\xbb\x02Retrieves a list of domains that are authorized for use with the specified origin URL.\n\nUse this endpoint to validate whether a particular domain is allowed for authentication or other domain-restricted operations.\n\nThis is commonly used by frontend applications to verify domain allowlists and CORS configurations.Jv\n\x03\x32\x30\x30\x12o\n6Successfully retrieved the list of authorized domains.\x12\x35\n3\x1a\x31.scalekit.v1.domains.ListAuthorizedDomainResponse\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1a\x12\x18/api/v1/domains/{origin}\x1a\xf8\x03\x92\x41\xf4\x03\n\x07\x44omains\x12\xe8\x03Manage organization-level domains. Scalekit supports two domain types:\n\n- ORGANIZATION_DOMAIN: Used for SSO domain discovery. When a user signs in with a matching email domain, Scalekit routes them to the organization\xe2\x80\x99s SSO provider and enforces SSO.\n- ALLOWED_EMAIL_DOMAIN: Used to mark trusted email domains for an organization. When a user signs in or signs up with a matching domain, Scalekit suggests the organization in the organization switcher (authentication-method agnostic).\nB3Z1github.com/scalekit-inc/scalekit/pkg/grpc/domainsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -132,7 +132,7 @@ _globals['_DOMAINSERVICE'].methods_by_name['UpdateDomain']._loaded_options = None _globals['_DOMAINSERVICE'].methods_by_name['UpdateDomain']._serialized_options = b'\222A\226\004\n\007Domains\022\rUpdate Domain\032\241\003Updates an existing domain\'s configuration within an organization. Currently supports updating domain metadata and configuration settings.\n\nUse this endpoint to modify domain properties after initial creation. Note that the domain name itself cannot be changed once created.\n\nThe domain must belong to the specified organization and you must provide either the organization ID or external ID along with the domain ID.JX\n\003200\022Q\n Successfully updated the domain.\022-\n+\032).scalekit.v1.domains.UpdateDomainResponse\202\265\030\027\n\023organizations_write\030t\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002>24/api/v1/organizations/{organization_id}/domains/{id}:\006domain' _globals['_DOMAINSERVICE'].methods_by_name['VerifyDomain']._loaded_options = None - _globals['_DOMAINSERVICE'].methods_by_name['VerifyDomain']._serialized_options = b'\222A\267\005\n\007Domains\022\rVerify Domain\032\236\004Initiates domain ownership verification by checking the DNS TXT record that should be added to the domain\'s DNS configuration.\n\nUse this endpoint to manually trigger verification for domains that are in PENDING status. The system will check for the required TXT record and update the verification status accordingly.\n\nFor automatically verified domains, this endpoint will return true immediately. For domains requiring manual verification, ensure the TXT record has been properly configured in your DNS settings before calling this endpoint.J|\n\003200\022u\nSDomain verification result. Returns true if verification succeeds, false otherwise.\022\036\n\034\032\032.google.protobuf.BoolValue\202\265\030\002\030d\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002=2;/api/v1/organizations/{organization_id}/domains/{id}:verify' + _globals['_DOMAINSERVICE'].methods_by_name['VerifyDomain']._serialized_options = b'\222A\267\005\n\007Domains\022\rVerify Domain\032\236\004Initiates domain ownership verification by checking the DNS TXT record that should be added to the domain\'s DNS configuration.\n\nUse this endpoint to manually trigger verification for domains that are in PENDING status. The system will check for the required TXT record and update the verification status accordingly.\n\nFor automatically verified domains, this endpoint will return true immediately. For domains requiring manual verification, ensure the TXT record has been properly configured in your DNS settings before calling this endpoint.J|\n\003200\022u\nSDomain verification result. Returns true if verification succeeds, false otherwise.\022\036\n\034\032\032.google.protobuf.BoolValue\202\265\030\027\n\023organizations_write\030t\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002=2;/api/v1/organizations/{organization_id}/domains/{id}:verify' _globals['_DOMAINSERVICE'].methods_by_name['GetDomain']._loaded_options = None _globals['_DOMAINSERVICE'].methods_by_name['GetDomain']._serialized_options = b'\222A\343\001\n\007Domains\022\nGet Domain\032kRetrieves complete details for a domain including domain type, timestamps, and configuration information.\n\nJ_\n\003200\022X\n*Successfully retrieved the domain details.\022*\n(\032&.scalekit.v1.domains.GetDomainResponse\202\265\030\026\n\022organizations_read\030t\202\323\344\223\0026\0224/api/v1/organizations/{organization_id}/domains/{id}' _globals['_DOMAINSERVICE'].methods_by_name['DeleteDomain']._loaded_options = None @@ -176,5 +176,5 @@ _globals['_DOMAIN']._serialized_start=7543 _globals['_DOMAIN']._serialized_end=9389 _globals['_DOMAINSERVICE']._serialized_start=9603 - _globals['_DOMAINSERVICE']._serialized_end=15028 + _globals['_DOMAINSERVICE']._serialized_end=15049 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/environments/environments_pb2.py b/scalekit/v1/environments/environments_pb2.py index def095b..4807ef5 100644 --- a/scalekit/v1/environments/environments_pb2.py +++ b/scalekit/v1/environments/environments_pb2.py @@ -29,7 +29,7 @@ from scalekit.v1.organizations import organizations_pb2 as scalekit_dot_v1_dot_organizations_dot_organizations__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n+scalekit/v1/environments/environments.proto\x12\x18scalekit.v1.environments\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a)scalekit/v1/connections/connections.proto\x1a!scalekit/v1/options/options.proto\x1a-scalekit/v1/organizations/organizations.proto\"o\n\x19\x43reateCustomDomainRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\x32\n\rcustom_domain\x18\x02 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xfa\x01\xc8\x01\x01R\x0c\x63ustomDomain\"e\n\x1a\x43reateCustomDomainResponse\x12G\n\x0b\x65nvironment\x18\x01 \x01(\x0b\x32%.scalekit.v1.environments.EnvironmentR\x0b\x65nvironment\"j\n\x14GetDNSRecordsRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\x32\n\rcustom_domain\x18\x02 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xfa\x01\xc8\x01\x01R\x0c\x63ustomDomain\"^\n\x15GetDNSRecordsResponse\x12\x45\n\x0b\x64ns_records\x18\x01 \x03(\x0b\x32$.scalekit.v1.environments.DNSRecordsR\ndnsRecords\"w\n\nDNSRecords\x12\'\n\thost_name\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xfa\x01R\x08hostName\x12\x1e\n\x04type\x18\x02 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xfa\x01R\x04type\x12 \n\x05value\x18\x03 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xfa\x01R\x05value\"\x92\x04\n\x0b\x45nvironment\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12;\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12;\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nupdateTime\x12-\n\x0c\x64isplay_name\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\"\n\x06\x64omain\x18\x05 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xfa\x01R\x06\x64omain\x12@\n\x0bregion_code\x18\x06 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeR\nregionCode\x12\x38\n\x04type\x18\x07 \x01(\x0e\x32$.scalekit.v1.commons.EnvironmentTypeR\x04type\x12(\n\rcustom_domain\x18\x08 \x01(\tH\x00R\x0c\x63ustomDomain\x88\x01\x01\x12^\n\x14\x63ustom_domain_status\x18\t \x01(\x0e\x32,.scalekit.v1.environments.CustomDomainStatusR\x12\x63ustomDomainStatusB\x10\n\x0e_custom_domain\"\xb1\x03\n\x11\x43reateEnvironment\x12-\n\x0c\x64isplay_name\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\x45\n\x0bregion_code\x18\x06 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeH\x00R\nregionCode\x88\x01\x01\x12=\n\x04type\x18\x07 \x01(\x0e\x32$.scalekit.v1.commons.EnvironmentTypeH\x01R\x04type\x88\x01\x01\x12\xaf\x01\n\x13\x61uthentication_mode\x18\x08 \x01(\x0e\x32\'.scalekit.v1.commons.AuthenticationModeBP\x92\x41M2KThe authentication mode for the environment. The default is FULL_STACK_AUTHH\x02R\x12\x61uthenticationMode\x88\x01\x01\x42\x0e\n\x0c_region_codeB\x07\n\x05_typeB\x16\n\x14_authentication_modeJ\x04\x08\x05\x10\x06\"j\n\x11UpdateEnvironment\x12\x32\n\x0c\x64isplay_name\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xd0\x0fH\x00R\x0b\x64isplayName\x88\x01\x01\x42\x0f\n\r_display_nameJ\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08\"S\n\x17UpdateEnvironmentDomain\x12\'\n\x06\x64omain\x18\x05 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xfa\x01H\x00R\x06\x64omain\x88\x01\x01\x42\t\n\x07_domainJ\x04\x08\x04\x10\x05\"q\n\x18\x43reateEnvironmentRequest\x12U\n\x0b\x65nvironment\x18\x01 \x01(\x0b\x32+.scalekit.v1.environments.CreateEnvironmentB\x06\xbaH\x03\xc8\x01\x01R\x0b\x65nvironment\"d\n\x19\x43reateEnvironmentResponse\x12G\n\x0b\x65nvironment\x18\x01 \x01(\x0b\x32%.scalekit.v1.environments.EnvironmentR\x0b\x65nvironment\"\x91\x01\n\x18UpdateEnvironmentRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12U\n\x0b\x65nvironment\x18\x02 \x01(\x0b\x32+.scalekit.v1.environments.UpdateEnvironmentB\x06\xbaH\x03\xc8\x01\x01R\x0b\x65nvironment\"\x9d\x01\n\x1eUpdateEnvironmentDomainRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12[\n\x0b\x65nvironment\x18\x02 \x01(\x0b\x32\x31.scalekit.v1.environments.UpdateEnvironmentDomainB\x06\xbaH\x03\xc8\x01\x01R\x0b\x65nvironment\"d\n\x19UpdateEnvironmentResponse\x12G\n\x0b\x65nvironment\x18\x01 \x01(\x0b\x32%.scalekit.v1.environments.EnvironmentR\x0b\x65nvironment\"7\n\x15GetEnvironmentRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"a\n\x16GetEnvironmentResponse\x12G\n\x0b\x65nvironment\x18\x01 \x01(\x0b\x32%.scalekit.v1.environments.EnvironmentR\x0b\x65nvironment\"U\n\x17ListEnvironmentsRequest\x12\x1b\n\tpage_size\x18\x01 \x01(\rR\x08pageSize\x12\x1d\n\npage_token\x18\x02 \x01(\tR\tpageToken\"\xac\x01\n\x18ListEnvironmentsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12I\n\x0c\x65nvironments\x18\x03 \x03(\x0b\x32%.scalekit.v1.environments.EnvironmentR\x0c\x65nvironments\":\n\x18\x44\x65leteEnvironmentRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"@\n\x1eGenerateSamlCertificateRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"k\n\x1fGenerateSamlCertificateResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12 \n\x0b\x63\x65rtificate\x18\x02 \x01(\tR\x0b\x63\x65rtificate\x12\x16\n\x06\x65xpiry\x18\x03 \x01(\x03R\x06\x65xpiry\"\x99\x01\n!UpdatePortalCustomizationResponse\x12$\n\renvironmentId\x18\x01 \x01(\tR\renvironmentId\x12N\n\x16\x63ustomization_settings\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\x15\x63ustomizationSettings\"\x9a\x01\n UpdatePortalCustomizationRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12V\n\x16\x63ustomization_settings\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructB\x06\xbaH\x03\xc8\x01\x01R\x15\x63ustomizationSettings\":\n\x1dGetPortalCustomizationRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x02id\"\x9d\x04\n\x0ePortalSettings\x12\x98\x01\n\x0f\x63ustom_branding\x18\x01 \x01(\x08\x42o\x92\x41l2dIndicates whether custom portal branding is enabled for this workspace based on billing subscriptionJ\x04trueR\x0e\x63ustomBranding\x12\xc3\x01\n\x17new_self_serve_sso_scim\x18\x02 \x01(\x08\x42\x8c\x01\x92\x41\x88\x01\x32\x7fIndicates whether the new self-serve SSO/SCIM flow should be shown in the customer portal (rollout-driven, not billing-derived)J\x05\x66\x61lseR\x13newSelfServeSsoScim\x12\xa9\x01\n\x12\x65nable_conn_delete\x18\x03 \x01(\x08\x42{\x92\x41x2oIndicates whether connection deletion is enabled for this environment (rollout-driven by environment allowlist)J\x05\x66\x61lseR\x10\x65nableConnDelete\"\xe6\x01\n\x1eGetPortalCustomizationResponse\x12$\n\renvironmentId\x18\x01 \x01(\tR\renvironmentId\x12S\n\x16\x63ustomization_settings\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructB\x03\xe0\x41\x01R\x15\x63ustomizationSettings\x12I\n\x08settings\x18\x03 \x01(\x0b\x32(.scalekit.v1.environments.PortalSettingsB\x03\xe0\x41\x03R\x08settings\"Z\n\x1c\x43reateAssetUploadUrlResponse\x12\x1d\n\nupload_url\x18\x01 \x01(\tR\tuploadUrl\x12\x1b\n\tfetch_url\x18\x02 \x01(\tR\x08\x66\x65tchUrl\"\x8d\x01\n\x1b\x43reateAssetUploadUrlRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12N\n\x0e\x61sset_settings\x18\x02 \x01(\x0b\x32\'.scalekit.v1.environments.AssetSettingsR\rassetSettings\"\x91\x01\n\rAssetSettings\x12K\n\x08\x63\x61tegory\x18\x01 \x01(\x0e\x32\'.scalekit.v1.environments.AssetCategoryB\x06\xbaH\x03\xc8\x01\x01R\x08\x63\x61tegory\x12\x33\n\textension\x18\x02 \x01(\tB\x15\xbaH\x12r\x10R\x03jpgR\x04jpegR\x03pngR\textension\"\x89\x01\n\x15UpdateFeaturesRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12P\n\x08\x66\x65\x61tures\x18\x02 \x03(\x0b\x32,.scalekit.v1.environments.EnvironmentFeatureB\x06\xbaH\x03\xc8\x01\x01R\x08\x66\x65\x61tures\"2\n\x17\x45nableFSAFeatureRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x02id\":\n\x18\x44isableFSAFeatureRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"7\n\x12GetFeaturesRequest\x12!\n\x02id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65nv\xd0\x01\x01R\x02id\"_\n\x13GetFeaturesResponse\x12H\n\x08\x66\x65\x61tures\x18\x01 \x03(\x0b\x32,.scalekit.v1.environments.EnvironmentFeatureR\x08\x66\x65\x61tures\"`\n\x14\x45nableFeatureRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12(\n\nfeature_id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18 R\tfeatureId\"a\n\x15\x44isableFeatureRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12(\n\nfeature_id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18 R\tfeatureId\"B\n\x12\x45nvironmentFeature\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x18\n\x07\x65nabled\x18\x02 \x01(\x08R\x07\x65nabled\"p\n\'GetHostScopedPublicFeatureFlagsResponse\x12\x45\n\x05\x66lags\x18\x01 \x03(\x0b\x32/.scalekit.v1.environments.PublicHostFeatureFlagR\x05\x66lags\"\x9f\x01\n\x15PublicHostFeatureFlag\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.ValueR\x05value\x12\x18\n\x07variant\x18\x03 \x01(\tR\x07variant\x12\x16\n\x06reason\x18\x04 \x01(\tR\x06reason\x12\x14\n\x05\x65rror\x18\x05 \x01(\tR\x05\x65rror\"F\n$GetEnvironmentSessionSettingsRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"E\n#GetEnvironmentUserManagementRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"}\n%GetEnvironmentSessionSettingsResponse\x12T\n\x10session_settings\x18\x01 \x01(\x0b\x32).scalekit.v1.environments.SessionSettingsR\x0fsessionSettings\"y\n$GetEnvironmentUserManagementResponse\x12Q\n\x0fuser_management\x18\x01 \x01(\x0b\x32(.scalekit.v1.environments.UserManagementR\x0euserManagement\"\xa7\x01\n\'CreateEnvironmentSessionSettingsRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\\\n\x10session_settings\x18\x02 \x01(\x0b\x32).scalekit.v1.environments.SessionSettingsB\x06\xbaH\x03\xc8\x01\x01R\x0fsessionSettings\"\xa3\x01\n&CreateEnvironmentUserManagementRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12Y\n\x0fuser_management\x18\x02 \x01(\x0b\x32(.scalekit.v1.environments.UserManagementB\x06\xbaH\x03\xc8\x01\x01R\x0euserManagement\"\xa7\x01\n(CreateEnvironmentSessionSettingsResponse\x12%\n\x0e\x65nvironment_id\x18\x01 \x01(\tR\renvironmentId\x12T\n\x10session_settings\x18\x02 \x01(\x0b\x32).scalekit.v1.environments.SessionSettingsR\x0fsessionSettings\"\xa3\x01\n\'CreateEnvironmentUserManagementResponse\x12%\n\x0e\x65nvironment_id\x18\x01 \x01(\tR\renvironmentId\x12Q\n\x0fuser_management\x18\x02 \x01(\x0b\x32(.scalekit.v1.environments.UserManagementR\x0euserManagement\"\xa7\x01\n\'UpdateEnvironmentSessionSettingsRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\\\n\x10session_settings\x18\x02 \x01(\x0b\x32).scalekit.v1.environments.SessionSettingsB\x06\xbaH\x03\xc8\x01\x01R\x0fsessionSettings\"\xa3\x01\n&UpdateEnvironmentUserManagementRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12Y\n\x0fuser_management\x18\x02 \x01(\x0b\x32(.scalekit.v1.environments.UserManagementB\x06\xbaH\x03\xc8\x01\x01R\x0euserManagement\"\xa7\x01\n(UpdateEnvironmentSessionSettingsResponse\x12%\n\x0e\x65nvironment_id\x18\x01 \x01(\tR\renvironmentId\x12T\n\x10session_settings\x18\x02 \x01(\x0b\x32).scalekit.v1.environments.SessionSettingsR\x0fsessionSettings\"\xa3\x01\n\'UpdateEnvironmentUserManagementResponse\x12%\n\x0e\x65nvironment_id\x18\x01 \x01(\tR\renvironmentId\x12Q\n\x0fuser_management\x18\x02 \x01(\x0b\x32(.scalekit.v1.environments.UserManagementR\x0euserManagement\"\xf0\x08\n\x0fSessionSettings\x12X\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x0b\xbaH\x08\x1a\x06\x18\xc0\xd1\x02(\x01R\x11\x61\x63\x63\x65ssTokenExpiry\x12\x65\n\x1a\x63lient_access_token_expiry\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x0b\xbaH\x08\x1a\x06\x18\xc0\xd1\x02(\x01R\x17\x63lientAccessTokenExpiry\x12\x62\n\x18\x61\x62solute_session_timeout\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x0b\xbaH\x08\x1a\x06\x18\xa0\x8a (\x01R\x16\x61\x62soluteSessionTimeout\x12X\n\x1asession_management_enabled\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x18sessionManagementEnabled\x12Y\n\x14idle_session_timeout\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\n\xbaH\x07\x1a\x05\x18\xe0N(\x01R\x12idleSessionTimeout\x12L\n\x14idle_session_enabled\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x12idleSessionEnabled\x12g\n\x17\x63ookie_persistence_type\x18\x07 \x01(\x0e\x32/.scalekit.v1.environments.CookiePersistenceTypeR\x15\x63ookiePersistenceType\x12h\n\x18\x63ookie_same_site_setting\x18\x08 \x01(\x0e\x32/.scalekit.v1.environments.CookieSameSiteSettingR\x15\x63ookieSameSiteSetting\x12N\n\x14\x63ookie_custom_domain\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueR\x12\x63ookieCustomDomain\x12V\n\x18\x61\x63\x63\x65ss_token_expiry_unit\x18\n \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitR\x15\x61\x63\x63\x65ssTokenExpiryUnit\x12`\n\x1d\x61\x62solute_session_timeout_unit\x18\x0b \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitR\x1a\x61\x62soluteSessionTimeoutUnit\x12X\n\x19idle_session_timeout_unit\x18\x0c \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitR\x16idleSessionTimeoutUnit\"\xa5\x07\n\x0eUserManagement\x12\x61\n\x1f\x61llow_duplicate_user_identities\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x1c\x61llowDuplicateUserIdentities\x12X\n\x1a\x61llow_multiple_memberships\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x18\x61llowMultipleMemberships\x12V\n\x19\x61llow_organization_signup\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x17\x61llowOrganizationSignup\x12o\n\x15org_user_relationship\x18\x04 \x01(\x0e\x32\x31.scalekit.v1.environments.OrgUserRelationshipTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x13orgUserRelationship\x12O\n\x16\x65nable_max_users_limit\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x13\x65nableMaxUsersLimit\x12P\n\x0fmax_users_limit\x18\x06 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x0b\xbaH\x08\x1a\x06\x18\x9f\x8d\x06(\x01R\rmaxUsersLimit\x12V\n\x11invitation_expiry\x18\x07 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x0b\xbaH\x08*\x06\x18\xc0\xd1\x02(\x01R\x10invitationExpiry\x12_\n\x1e\x62lock_disposable_email_domains\x18\t \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x1b\x62lockDisposableEmailDomains\x12W\n\x1a\x62lock_public_email_domains\x18\n \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x17\x62lockPublicEmailDomains\x12X\n\x1bsync_user_profile_on_signin\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x17syncUserProfileOnSignin\":\n\x11GetContextRequest\x12%\n\x0e\x65nvironment_id\x18\x02 \x01(\tR\renvironmentId\"G\n\x12GetContextResponse\x12\x31\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext\"p\n\x14UpdateContextRequest\x12%\n\x0e\x65nvironment_id\x18\x02 \x01(\tR\renvironmentId\x12\x31\n\x07\x63ontext\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext\"*\n\x18GetCurrentSessionRequest\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\"\x93\x03\n\x19GetCurrentSessionResponse\x12\x46\n\x0esession_expiry\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\rsessionExpiry\x88\x01\x01\x12J\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x11\x61\x63\x63\x65ssTokenExpiry\x12,\n\x0forganization_id\x18\x03 \x01(\tH\x01R\x0eorganizationId\x88\x01\x01\x12\x18\n\x07subject\x18\x04 \x01(\tR\x07subject\x12\x19\n\x05\x65mail\x18\x05 \x01(\tH\x02R\x05\x65mail\x88\x01\x01\x12\x35\n\x14\x63onnected_account_id\x18\x06 \x01(\tH\x03R\x12\x63onnectedAccountId\x88\x01\x01\x42\x11\n\x0f_session_expiryB\x12\n\x10_organization_idB\x08\n\x06_emailB\x17\n\x15_connected_account_id\"\xc5\x01\n\x10ResourceMetadata\x12K\n\x04type\x18\x01 \x01(\x0e\x32\x37.scalekit.v1.environments.ResourceMetadata.ResourceTypeR\x04type\x12 \n\x0bidentifiers\x18\x02 \x03(\tR\x0bidentifiers\"B\n\x0cResourceType\x12\x10\n\x0corganization\x10\x00\x12\x0e\n\nconnection\x10\x01\x12\x10\n\x0c\x61uth_request\x10\x02\"c\n\x17ScalekitResourceRequest\x12H\n\tresources\x18\x01 \x03(\x0b\x32*.scalekit.v1.environments.ResourceMetadataR\tresources\"\xd2\x01\n\x18ScalekitResourceResponse\x12_\n\tresources\x18\x01 \x03(\x0b\x32\x41.scalekit.v1.environments.ScalekitResourceResponse.ResourcesEntryR\tresources\x1aU\n\x0eResourcesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\x05value:\x02\x38\x01\"\x18\n\x16PortalBootstrapRequest\"\xbe\x01\n\x1cPortalCustomizationBootstrap\x12S\n\x16\x63ustomization_settings\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\x03\xe0\x41\x01R\x15\x63ustomizationSettings\x12I\n\x08settings\x18\x02 \x01(\x0b\x32(.scalekit.v1.environments.PortalSettingsB\x03\xe0\x41\x03R\x08settings\"\xed\x02\n\x17PortalBootstrapResponse\x12M\n\x07session\x18\x01 \x01(\x0b\x32\x33.scalekit.v1.environments.GetCurrentSessionResponseR\x07session\x12k\n\x15portal_customizations\x18\x02 \x01(\x0b\x32\x36.scalekit.v1.environments.PortalCustomizationBootstrapR\x14portalCustomizations\x12K\n\x0corganization\x18\x03 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationR\x0corganization\x12I\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionR\x0b\x63onnections\"\x82\x01\n\x12\x41gentActionsConfig\x12l\n\x10user_verify_mode\x18\x01 \x01(\x0e\x32\x38.scalekit.v1.environments.ConnectedAccountUserVerifyModeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0euserVerifyMode\"\xa6\x01\n\x1f\x43reateAgentActionsConfigRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\x63\n\x14\x61gent_actions_config\x18\x02 \x01(\x0b\x32,.scalekit.v1.environments.AgentActionsConfigB\x03\xe0\x41\x02R\x12\x61gentActionsConfig\"\x87\x01\n CreateAgentActionsConfigResponse\x12\x63\n\x14\x61gent_actions_config\x18\x01 \x01(\x0b\x32,.scalekit.v1.environments.AgentActionsConfigB\x03\xe0\x41\x03R\x12\x61gentActionsConfig\">\n\x1cGetAgentActionsConfigRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"\x84\x01\n\x1dGetAgentActionsConfigResponse\x12\x63\n\x14\x61gent_actions_config\x18\x01 \x01(\x0b\x32,.scalekit.v1.environments.AgentActionsConfigB\x03\xe0\x41\x03R\x12\x61gentActionsConfig\"\xa6\x01\n\x1fUpdateAgentActionsConfigRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\x63\n\x14\x61gent_actions_config\x18\x02 \x01(\x0b\x32,.scalekit.v1.environments.AgentActionsConfigB\x03\xe0\x41\x02R\x12\x61gentActionsConfig\"\x87\x01\n UpdateAgentActionsConfigResponse\x12\x63\n\x14\x61gent_actions_config\x18\x01 \x01(\x0b\x32,.scalekit.v1.environments.AgentActionsConfigB\x03\xe0\x41\x03R\x12\x61gentActionsConfig*W\n\x12\x43ustomDomainStatus\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07PENDING\x10\x01\x12\n\n\x06\x41\x43TIVE\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\x12\x0b\n\x07INITIAL\x10\x04*O\n\rAssetCategory\x12\x1e\n\x1a\x41SSET_CATEGORY_UNSPECIFIED\x10\x00\x12\x1e\n\x1aPORTAL_CUSTOMIZATION_IMAGE\x10\x01*w\n\x17OrgUserRelationshipType\x12\'\n#OrgUserRelationshipType_UNSPECIFIED\x10\x00\x12\x17\n\x13SINGLE_ORGANIZATION\x10\x01\x12\x1a\n\x16MULTIPLE_ORGANIZATIONS\x10\x02*[\n\x15\x43ookiePersistenceType\x12%\n!CookiePersistenceType_UNSPECIFIED\x10\x00\x12\x0e\n\nPERSISTENT\x10\x01\x12\x0b\n\x07SESSION\x10\x02*[\n\x15\x43ookieSameSiteSetting\x12%\n!CookieSameSiteSetting_UNSPECIFIED\x10\x00\x12\x0c\n\x08LAX_MODE\x10\x01\x12\r\n\tNONE_MODE\x10\x02*\xb1\x01\n\x1e\x43onnectedAccountUserVerifyMode\x12\x32\n.CONNECTED_ACCOUNT_USER_VERIFY_MODE_UNSPECIFIED\x10\x00\x12\x19\n\x15USER_VERIFY_MODE_NONE\x10\x01\x12\x18\n\x14USER_VERIFY_MODE_B2B\x10\x02\x12&\n\"USER_VERIFY_MODE_SCALEKIT_PLATFORM\x10\x03\x32\xcb\x42\n\x12\x45nvironmentService\x12\xbc\x01\n\x11\x43reateEnvironment\x12\x32.scalekit.v1.environments.CreateEnvironmentRequest\x1a\x33.scalekit.v1.environments.CreateEnvironmentResponse\">\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02#\"\x14/api/v1/environments:\x0b\x65nvironment\x12\xb2\x01\n\x11UpdateEnvironment\x12\x32.scalekit.v1.environments.UpdateEnvironmentRequest\x1a\x33.scalekit.v1.environments.UpdateEnvironmentResponse\"4\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02(2\x19/api/v1/environments/{id}:\x0b\x65nvironment\x12\xc5\x01\n\x17UpdateEnvironmentDomain\x12\x38.scalekit.v1.environments.UpdateEnvironmentDomainRequest\x1a\x33.scalekit.v1.environments.UpdateEnvironmentResponse\";\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02/2 /api/v1/environments/{id}:update:\x0b\x65nvironment\x12\x9c\x01\n\x0eGetEnvironment\x12/.scalekit.v1.environments.GetEnvironmentRequest\x1a\x30.scalekit.v1.environments.GetEnvironmentResponse\"\'\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x1b\x12\x19/api/v1/environments/{id}\x12\x9c\x01\n\x0fListEnvironment\x12\x31.scalekit.v1.environments.ListEnvironmentsRequest\x1a\x32.scalekit.v1.environments.ListEnvironmentsResponse\"\"\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/environments\x12\x86\x01\n\x11\x44\x65leteEnvironment\x12\x32.scalekit.v1.environments.DeleteEnvironmentRequest\x1a\x16.google.protobuf.Empty\"%\x82\xb5\x18\x00\x82\xd3\xe4\x93\x02\x1b*\x19/api/v1/environments/{id}\x12\xa8\x01\n\x15GetRequiredDNSRecords\x12..scalekit.v1.environments.GetDNSRecordsRequest\x1a/.scalekit.v1.environments.GetDNSRecordsResponse\".\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\"\"\x1d/api/v1/environments/{id}/dns:\x01*\x12\x91\x01\n\x10VerifyDNSRecords\x12..scalekit.v1.environments.GetDNSRecordsRequest\x1a\x16.google.protobuf.Empty\"5\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02)\"$/api/v1/environments/{id}/dns:verify:\x01*\x12\xc9\x01\n\x12\x43reateCustomDomain\x12\x33.scalekit.v1.environments.CreateCustomDomainRequest\x1a\x34.scalekit.v1.environments.CreateCustomDomainResponse\"H\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02-\"(/api/v1/environments/{id}/custom-domains:\x01*\x12\xcc\x01\n\x17\x43heckCustomDomainStatus\x12/.scalekit.v1.environments.GetEnvironmentRequest\x1a\x30.scalekit.v1.environments.GetEnvironmentResponse\"N\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x33\"./api/v1/environments/{id}/custom-domains:check:\x01*\x12\xe7\x01\n\x1aGenerateNewSamlCertificate\x12\x38.scalekit.v1.environments.GenerateSamlCertificateRequest\x1a\x39.scalekit.v1.environments.GenerateSamlCertificateResponse\"T\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x39\"4/api/v1/environments/{id}/saml-certificates:generate:\x01*\x12\xc0\x02\n\x19UpdatePortalCustomization\x12:.scalekit.v1.environments.UpdatePortalCustomizationRequest\x1a;.scalekit.v1.environments.UpdatePortalCustomizationResponse\"\xa9\x01\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x8d\x01\x1a//api/v1/environments/{id}/portal_customizations:\x16\x63ustomization_settingsZB\x1a(/api/v1/environments/{id}/customizations:\x16\x63ustomization_settings\x12\xe9\x01\n\x16GetPortalCustomization\x12\x37.scalekit.v1.environments.GetPortalCustomizationRequest\x1a\x38.scalekit.v1.environments.GetPortalCustomizationResponse\"\\\x82\xb5\x18\x03\x18\xe0\x01\x82\xd3\xe4\x93\x02O\x12\x1d/api/v1/portal_customizationsZ.\x12,/api/v1/environments/-/portal_customizations\x12\xc4\x01\n\x14\x43reateAssetUploadURL\x12\x35.scalekit.v1.environments.CreateAssetUploadUrlRequest\x1a\x36.scalekit.v1.environments.CreateAssetUploadUrlResponse\"=\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x31\"\x1f/api/v1/environments/{id}/asset:\x0e\x61sset_settings\x12\xac\x01\n\x0eUpdateFeatures\x12/.scalekit.v1.environments.UpdateFeaturesRequest\x1a-.scalekit.v1.environments.GetFeaturesResponse\":\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02.\x1a\"/api/v1/environments/{id}/features:\x08\x66\x65\x61tures\x12\xcb\x01\n\x10\x45nableFSAFeature\x12\x31.scalekit.v1.environments.EnableFSAFeatureRequest\x1a\x16.google.protobuf.Empty\"l\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02Q\"-/api/v1/environments/{id}/features/fsa/enable:\x01*Z\x1d\"\x1b/api/v1/features/fsa/enable\x12\x81\x01\n\x11\x44isableFSAFeature\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"<\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\"\x1c/api/v1/features/fsa/disable:\x01*\x12\x9d\x01\n\rEnableFeature\x12..scalekit.v1.environments.EnableFeatureRequest\x1a\x16.google.protobuf.Empty\"D\x82\xb5\x18\x02\x18`\x82\xd3\xe4\x93\x02\x38\"6/api/v1/environments/{id}/features/{feature_id}:enable\x12\xa0\x01\n\x0e\x44isableFeature\x12/.scalekit.v1.environments.DisableFeatureRequest\x1a\x16.google.protobuf.Empty\"E\x82\xb5\x18\x02\x18`\x82\xd3\xe4\x93\x02\x39\"7/api/v1/environments/{id}/features/{feature_id}:disable\x12\x8a\x01\n\x0bGetFeatures\x12,.scalekit.v1.environments.GetFeaturesRequest\x1a-.scalekit.v1.environments.GetFeaturesResponse\"\x1e\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x12\x12\x10/api/v1/features\x12\xb9\x04\n\x1fGetHostScopedPublicFeatureFlags\x12\x16.google.protobuf.Empty\x1a\x41.scalekit.v1.environments.GetHostScopedPublicFeatureFlagsResponse\"\xba\x03\x92\x41\xf2\x02\n\x0c\x45nvironments\x12%List host-scoped public feature flags\x1a\xc5\x01Resolves the environment from the request host only (no environment path, query, or header). Returns allowlisted OpenFeature values; no bearer token. 404 if the host does not map to an environment.J2\n\x03\x32\x30\x30\x12+\n)Allowlisted flag keys and resolved valuesJ?\n\x03\x34\x30\x34\x12\x38\n6No environment resolved from host or workspace UI host\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)\x12\'/api/v1/environments:publicFeatureFlags\x12\x84\x02\n CreateEnvironmentSessionSettings\x12\x41.scalekit.v1.environments.CreateEnvironmentSessionSettingsRequest\x1a\x42.scalekit.v1.environments.CreateEnvironmentSessionSettingsResponse\"Y\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02>\"*/api/v1/environments/{id}/session-settings:\x10session_settings\x12\x88\x02\n\x1f\x43reateEnvironmentUserManagement\x12@.scalekit.v1.environments.CreateEnvironmentUserManagementRequest\x1a\x41.scalekit.v1.environments.CreateEnvironmentUserManagementResponse\"`\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x45\"2/api/v1/environments/{id}/settings/user-management:\x0fuser_management\x12\xda\x01\n\x1dGetEnvironmentSessionSettings\x12>.scalekit.v1.environments.GetEnvironmentSessionSettingsRequest\x1a?.scalekit.v1.environments.GetEnvironmentSessionSettingsResponse\"8\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02,\x12*/api/v1/environments/{id}/session-settings\x12\xdf\x01\n\x1cGetEnvironmentUserManagement\x12=.scalekit.v1.environments.GetEnvironmentUserManagementRequest\x1a>.scalekit.v1.environments.GetEnvironmentUserManagementResponse\"@\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x34\x12\x32/api/v1/environments/{id}/settings/user-management\x12\x84\x02\n UpdateEnvironmentSessionSettings\x12\x41.scalekit.v1.environments.UpdateEnvironmentSessionSettingsRequest\x1a\x42.scalekit.v1.environments.UpdateEnvironmentSessionSettingsResponse\"Y\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02>2*/api/v1/environments/{id}/session-settings:\x10session_settings\x12\x88\x02\n\x1fUpdateEnvironmentUserManagement\x12@.scalekit.v1.environments.UpdateEnvironmentUserManagementRequest\x1a\x41.scalekit.v1.environments.UpdateEnvironmentUserManagementResponse\"`\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x45\x32\x32/api/v1/environments/{id}/settings/user-management:\x0fuser_management\x12\x86\x04\n\x18\x43reateAgentActionsConfig\x12\x39.scalekit.v1.environments.CreateAgentActionsConfigRequest\x1a:.scalekit.v1.environments.CreateAgentActionsConfigResponse\"\xf2\x02\x92\x41\x8b\x02\n\x0c\x45nvironments\x12\x1b\x43reate agent actions config\x1a:Creates the agent actions configuration for an environmentJ2\n\x03\x32\x30\x30\x12+\n)Agent actions config created successfullyJN\n\x03\x34\x30\x30\x12G\nEInvalid request - missing or invalid fields, or config already existsJ\x1e\n\x03\x34\x30\x34\x12\x17\n\x15\x45nvironment not found\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02H\"0/api/v1/environments/{id}/settings/agent-actions:\x14\x61gent_actions_config\x12\xa3\x03\n\x15GetAgentActionsConfig\x12\x36.scalekit.v1.environments.GetAgentActionsConfigRequest\x1a\x37.scalekit.v1.environments.GetAgentActionsConfigResponse\"\x98\x02\x92\x41\xc7\x01\n\x0c\x45nvironments\x12\x18Get agent actions config\x1a=Retrieves the agent actions configuration for an environment.J4\n\x03\x32\x30\x30\x12-\n+Agent actions config retrieved successfullyJ(\n\x03\x34\x30\x34\x12!\n\x1f\x45nvironment or config not found\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x32\x12\x30/api/v1/environments/{id}/settings/agent-actions\x12\x96\x04\n\x18UpdateAgentActionsConfig\x12\x39.scalekit.v1.environments.UpdateAgentActionsConfigRequest\x1a:.scalekit.v1.environments.UpdateAgentActionsConfigResponse\"\x82\x03\x92\x41\x9b\x02\n\x0c\x45nvironments\x12\x1bUpdate agent actions config\x1a:Updates the agent actions configuration for an environmentJ2\n\x03\x32\x30\x30\x12+\n)Agent actions config updated successfullyJ^\n\x03\x34\x30\x30\x12W\nUInvalid request - missing or invalid fields, or mode not allowed for this environmentJ\x1e\n\x03\x34\x30\x34\x12\x17\n\x15\x45nvironment not found\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02H20/api/v1/environments/{id}/settings/agent-actions:\x14\x61gent_actions_config\x12\xa5\x01\n\nGetContext\x12+.scalekit.v1.environments.GetContextRequest\x1a,.scalekit.v1.environments.GetContextResponse\"<\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x30\x12./api/v1/environments/{environment_id}/contexts\x12\x9e\x01\n\rUpdateContext\x12..scalekit.v1.environments.UpdateContextRequest\x1a\x16.google.protobuf.Empty\"E\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x39\x1a./api/v1/environments/{environment_id}/contexts:\x07\x63ontext\x12\xef\x01\n\x11GetCurrentSession\x12\x32.scalekit.v1.environments.GetCurrentSessionRequest\x1a\x33.scalekit.v1.environments.GetCurrentSessionResponse\"q\x82\xb5\x18\x03\x18\xf0\x01\x82\xd3\xe4\x93\x02\x64\x12%/api/v1/environments/{id}/sessions:meZ$\x12\"/api/v1/environments/-/sessions:meZ\x15\x12\x13/api/v1/sessions:me\x12\xb1\x01\n\x14GetScalekitResources\x12\x31.scalekit.v1.environments.ScalekitResourceRequest\x1a\x32.scalekit.v1.environments.ScalekitResourceResponse\"2\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x17\"\x12/api/v1/fetch:bulk:\x01*\x12\xd0\x03\n\x0fPortalBootstrap\x12\x30.scalekit.v1.environments.PortalBootstrapRequest\x1a\x31.scalekit.v1.environments.PortalBootstrapResponse\"\xd7\x02\x92\x41\xad\x02\n\x06Portal\x12\x1eRetrieve portal bootstrap data\x1a\x97\x01Returns all data needed to initialize the customer portal in a single request, combining session, portal customizations, organization, and connections.J5\n\x03\x32\x30\x30\x12.\n,Successfully retrieved portal bootstrap dataJ2\n\x03\x34\x30\x31\x12+\n)Unauthorized - invalid or expired session\x82\xb5\x18\x02\x18`\x82\xd3\xe4\x93\x02\x1a\x12\x18/api/v1/portal/bootstrapB8Z6github.com/scalekit-inc/scalekit/pkg/grpc/environmentsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n+scalekit/v1/environments/environments.proto\x12\x18scalekit.v1.environments\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a)scalekit/v1/connections/connections.proto\x1a!scalekit/v1/options/options.proto\x1a-scalekit/v1/organizations/organizations.proto\"o\n\x19\x43reateCustomDomainRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\x32\n\rcustom_domain\x18\x02 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xfa\x01\xc8\x01\x01R\x0c\x63ustomDomain\"e\n\x1a\x43reateCustomDomainResponse\x12G\n\x0b\x65nvironment\x18\x01 \x01(\x0b\x32%.scalekit.v1.environments.EnvironmentR\x0b\x65nvironment\"j\n\x14GetDNSRecordsRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\x32\n\rcustom_domain\x18\x02 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xfa\x01\xc8\x01\x01R\x0c\x63ustomDomain\"^\n\x15GetDNSRecordsResponse\x12\x45\n\x0b\x64ns_records\x18\x01 \x03(\x0b\x32$.scalekit.v1.environments.DNSRecordsR\ndnsRecords\"w\n\nDNSRecords\x12\'\n\thost_name\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xfa\x01R\x08hostName\x12\x1e\n\x04type\x18\x02 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xfa\x01R\x04type\x12 \n\x05value\x18\x03 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xfa\x01R\x05value\"\x92\x04\n\x0b\x45nvironment\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12;\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12;\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nupdateTime\x12-\n\x0c\x64isplay_name\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\"\n\x06\x64omain\x18\x05 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xfa\x01R\x06\x64omain\x12@\n\x0bregion_code\x18\x06 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeR\nregionCode\x12\x38\n\x04type\x18\x07 \x01(\x0e\x32$.scalekit.v1.commons.EnvironmentTypeR\x04type\x12(\n\rcustom_domain\x18\x08 \x01(\tH\x00R\x0c\x63ustomDomain\x88\x01\x01\x12^\n\x14\x63ustom_domain_status\x18\t \x01(\x0e\x32,.scalekit.v1.environments.CustomDomainStatusR\x12\x63ustomDomainStatusB\x10\n\x0e_custom_domain\"\xb1\x03\n\x11\x43reateEnvironment\x12-\n\x0c\x64isplay_name\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\x45\n\x0bregion_code\x18\x06 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeH\x00R\nregionCode\x88\x01\x01\x12=\n\x04type\x18\x07 \x01(\x0e\x32$.scalekit.v1.commons.EnvironmentTypeH\x01R\x04type\x88\x01\x01\x12\xaf\x01\n\x13\x61uthentication_mode\x18\x08 \x01(\x0e\x32\'.scalekit.v1.commons.AuthenticationModeBP\x92\x41M2KThe authentication mode for the environment. The default is FULL_STACK_AUTHH\x02R\x12\x61uthenticationMode\x88\x01\x01\x42\x0e\n\x0c_region_codeB\x07\n\x05_typeB\x16\n\x14_authentication_modeJ\x04\x08\x05\x10\x06\"j\n\x11UpdateEnvironment\x12\x32\n\x0c\x64isplay_name\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xd0\x0fH\x00R\x0b\x64isplayName\x88\x01\x01\x42\x0f\n\r_display_nameJ\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08\"S\n\x17UpdateEnvironmentDomain\x12\'\n\x06\x64omain\x18\x05 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xfa\x01H\x00R\x06\x64omain\x88\x01\x01\x42\t\n\x07_domainJ\x04\x08\x04\x10\x05\"q\n\x18\x43reateEnvironmentRequest\x12U\n\x0b\x65nvironment\x18\x01 \x01(\x0b\x32+.scalekit.v1.environments.CreateEnvironmentB\x06\xbaH\x03\xc8\x01\x01R\x0b\x65nvironment\"d\n\x19\x43reateEnvironmentResponse\x12G\n\x0b\x65nvironment\x18\x01 \x01(\x0b\x32%.scalekit.v1.environments.EnvironmentR\x0b\x65nvironment\"\x91\x01\n\x18UpdateEnvironmentRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12U\n\x0b\x65nvironment\x18\x02 \x01(\x0b\x32+.scalekit.v1.environments.UpdateEnvironmentB\x06\xbaH\x03\xc8\x01\x01R\x0b\x65nvironment\"\x9d\x01\n\x1eUpdateEnvironmentDomainRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12[\n\x0b\x65nvironment\x18\x02 \x01(\x0b\x32\x31.scalekit.v1.environments.UpdateEnvironmentDomainB\x06\xbaH\x03\xc8\x01\x01R\x0b\x65nvironment\"d\n\x19UpdateEnvironmentResponse\x12G\n\x0b\x65nvironment\x18\x01 \x01(\x0b\x32%.scalekit.v1.environments.EnvironmentR\x0b\x65nvironment\"7\n\x15GetEnvironmentRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"a\n\x16GetEnvironmentResponse\x12G\n\x0b\x65nvironment\x18\x01 \x01(\x0b\x32%.scalekit.v1.environments.EnvironmentR\x0b\x65nvironment\"U\n\x17ListEnvironmentsRequest\x12\x1b\n\tpage_size\x18\x01 \x01(\rR\x08pageSize\x12\x1d\n\npage_token\x18\x02 \x01(\tR\tpageToken\"\xac\x01\n\x18ListEnvironmentsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12I\n\x0c\x65nvironments\x18\x03 \x03(\x0b\x32%.scalekit.v1.environments.EnvironmentR\x0c\x65nvironments\":\n\x18\x44\x65leteEnvironmentRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"@\n\x1eGenerateSamlCertificateRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"k\n\x1fGenerateSamlCertificateResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12 \n\x0b\x63\x65rtificate\x18\x02 \x01(\tR\x0b\x63\x65rtificate\x12\x16\n\x06\x65xpiry\x18\x03 \x01(\x03R\x06\x65xpiry\"\x99\x01\n!UpdatePortalCustomizationResponse\x12$\n\renvironmentId\x18\x01 \x01(\tR\renvironmentId\x12N\n\x16\x63ustomization_settings\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\x15\x63ustomizationSettings\"\x9a\x01\n UpdatePortalCustomizationRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12V\n\x16\x63ustomization_settings\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructB\x06\xbaH\x03\xc8\x01\x01R\x15\x63ustomizationSettings\":\n\x1dGetPortalCustomizationRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x02id\"\x9d\x04\n\x0ePortalSettings\x12\x98\x01\n\x0f\x63ustom_branding\x18\x01 \x01(\x08\x42o\x92\x41l2dIndicates whether custom portal branding is enabled for this workspace based on billing subscriptionJ\x04trueR\x0e\x63ustomBranding\x12\xc3\x01\n\x17new_self_serve_sso_scim\x18\x02 \x01(\x08\x42\x8c\x01\x92\x41\x88\x01\x32\x7fIndicates whether the new self-serve SSO/SCIM flow should be shown in the customer portal (rollout-driven, not billing-derived)J\x05\x66\x61lseR\x13newSelfServeSsoScim\x12\xa9\x01\n\x12\x65nable_conn_delete\x18\x03 \x01(\x08\x42{\x92\x41x2oIndicates whether connection deletion is enabled for this environment (rollout-driven by environment allowlist)J\x05\x66\x61lseR\x10\x65nableConnDelete\"\xe6\x01\n\x1eGetPortalCustomizationResponse\x12$\n\renvironmentId\x18\x01 \x01(\tR\renvironmentId\x12S\n\x16\x63ustomization_settings\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructB\x03\xe0\x41\x01R\x15\x63ustomizationSettings\x12I\n\x08settings\x18\x03 \x01(\x0b\x32(.scalekit.v1.environments.PortalSettingsB\x03\xe0\x41\x03R\x08settings\"Z\n\x1c\x43reateAssetUploadUrlResponse\x12\x1d\n\nupload_url\x18\x01 \x01(\tR\tuploadUrl\x12\x1b\n\tfetch_url\x18\x02 \x01(\tR\x08\x66\x65tchUrl\"\x8d\x01\n\x1b\x43reateAssetUploadUrlRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12N\n\x0e\x61sset_settings\x18\x02 \x01(\x0b\x32\'.scalekit.v1.environments.AssetSettingsR\rassetSettings\"\x91\x01\n\rAssetSettings\x12K\n\x08\x63\x61tegory\x18\x01 \x01(\x0e\x32\'.scalekit.v1.environments.AssetCategoryB\x06\xbaH\x03\xc8\x01\x01R\x08\x63\x61tegory\x12\x33\n\textension\x18\x02 \x01(\tB\x15\xbaH\x12r\x10R\x03jpgR\x04jpegR\x03pngR\textension\"\x89\x01\n\x15UpdateFeaturesRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12P\n\x08\x66\x65\x61tures\x18\x02 \x03(\x0b\x32,.scalekit.v1.environments.EnvironmentFeatureB\x06\xbaH\x03\xc8\x01\x01R\x08\x66\x65\x61tures\"2\n\x17\x45nableFSAFeatureRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x02id\":\n\x18\x44isableFSAFeatureRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"7\n\x12GetFeaturesRequest\x12!\n\x02id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65nv\xd0\x01\x01R\x02id\"_\n\x13GetFeaturesResponse\x12H\n\x08\x66\x65\x61tures\x18\x01 \x03(\x0b\x32,.scalekit.v1.environments.EnvironmentFeatureR\x08\x66\x65\x61tures\"`\n\x14\x45nableFeatureRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12(\n\nfeature_id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18 R\tfeatureId\"a\n\x15\x44isableFeatureRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12(\n\nfeature_id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18 R\tfeatureId\"B\n\x12\x45nvironmentFeature\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x18\n\x07\x65nabled\x18\x02 \x01(\x08R\x07\x65nabled\"p\n\'GetHostScopedPublicFeatureFlagsResponse\x12\x45\n\x05\x66lags\x18\x01 \x03(\x0b\x32/.scalekit.v1.environments.PublicHostFeatureFlagR\x05\x66lags\"\x9f\x01\n\x15PublicHostFeatureFlag\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.ValueR\x05value\x12\x18\n\x07variant\x18\x03 \x01(\tR\x07variant\x12\x16\n\x06reason\x18\x04 \x01(\tR\x06reason\x12\x14\n\x05\x65rror\x18\x05 \x01(\tR\x05\x65rror\"F\n$GetEnvironmentSessionSettingsRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"E\n#GetEnvironmentUserManagementRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"}\n%GetEnvironmentSessionSettingsResponse\x12T\n\x10session_settings\x18\x01 \x01(\x0b\x32).scalekit.v1.environments.SessionSettingsR\x0fsessionSettings\"y\n$GetEnvironmentUserManagementResponse\x12Q\n\x0fuser_management\x18\x01 \x01(\x0b\x32(.scalekit.v1.environments.UserManagementR\x0euserManagement\"\xa7\x01\n\'CreateEnvironmentSessionSettingsRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\\\n\x10session_settings\x18\x02 \x01(\x0b\x32).scalekit.v1.environments.SessionSettingsB\x06\xbaH\x03\xc8\x01\x01R\x0fsessionSettings\"\xa3\x01\n&CreateEnvironmentUserManagementRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12Y\n\x0fuser_management\x18\x02 \x01(\x0b\x32(.scalekit.v1.environments.UserManagementB\x06\xbaH\x03\xc8\x01\x01R\x0euserManagement\"\xa7\x01\n(CreateEnvironmentSessionSettingsResponse\x12%\n\x0e\x65nvironment_id\x18\x01 \x01(\tR\renvironmentId\x12T\n\x10session_settings\x18\x02 \x01(\x0b\x32).scalekit.v1.environments.SessionSettingsR\x0fsessionSettings\"\xa3\x01\n\'CreateEnvironmentUserManagementResponse\x12%\n\x0e\x65nvironment_id\x18\x01 \x01(\tR\renvironmentId\x12Q\n\x0fuser_management\x18\x02 \x01(\x0b\x32(.scalekit.v1.environments.UserManagementR\x0euserManagement\"\xa7\x01\n\'UpdateEnvironmentSessionSettingsRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\\\n\x10session_settings\x18\x02 \x01(\x0b\x32).scalekit.v1.environments.SessionSettingsB\x06\xbaH\x03\xc8\x01\x01R\x0fsessionSettings\"\xa3\x01\n&UpdateEnvironmentUserManagementRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12Y\n\x0fuser_management\x18\x02 \x01(\x0b\x32(.scalekit.v1.environments.UserManagementB\x06\xbaH\x03\xc8\x01\x01R\x0euserManagement\"\xa7\x01\n(UpdateEnvironmentSessionSettingsResponse\x12%\n\x0e\x65nvironment_id\x18\x01 \x01(\tR\renvironmentId\x12T\n\x10session_settings\x18\x02 \x01(\x0b\x32).scalekit.v1.environments.SessionSettingsR\x0fsessionSettings\"\xa3\x01\n\'UpdateEnvironmentUserManagementResponse\x12%\n\x0e\x65nvironment_id\x18\x01 \x01(\tR\renvironmentId\x12Q\n\x0fuser_management\x18\x02 \x01(\x0b\x32(.scalekit.v1.environments.UserManagementR\x0euserManagement\"\xff\x08\n\x0fSessionSettings\x12X\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x0b\xbaH\x08\x1a\x06\x18\xc0\xd1\x02(\x01R\x11\x61\x63\x63\x65ssTokenExpiry\x12\x65\n\x1a\x63lient_access_token_expiry\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x0b\xbaH\x08\x1a\x06\x18\xc0\xd1\x02(\x01R\x17\x63lientAccessTokenExpiry\x12\x62\n\x18\x61\x62solute_session_timeout\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x0b\xbaH\x08\x1a\x06\x18\xa0\x8a (\x01R\x16\x61\x62soluteSessionTimeout\x12X\n\x1asession_management_enabled\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x18sessionManagementEnabled\x12Y\n\x14idle_session_timeout\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\n\xbaH\x07\x1a\x05\x18\xe0N(\x01R\x12idleSessionTimeout\x12L\n\x14idle_session_enabled\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x12idleSessionEnabled\x12g\n\x17\x63ookie_persistence_type\x18\x07 \x01(\x0e\x32/.scalekit.v1.environments.CookiePersistenceTypeR\x15\x63ookiePersistenceType\x12h\n\x18\x63ookie_same_site_setting\x18\x08 \x01(\x0e\x32/.scalekit.v1.environments.CookieSameSiteSettingR\x15\x63ookieSameSiteSetting\x12N\n\x14\x63ookie_custom_domain\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueR\x12\x63ookieCustomDomain\x12[\n\x18\x61\x63\x63\x65ss_token_expiry_unit\x18\n \x01(\x0e\x32\".scalekit.v1.environments.TimeUnitR\x15\x61\x63\x63\x65ssTokenExpiryUnit\x12\x65\n\x1d\x61\x62solute_session_timeout_unit\x18\x0b \x01(\x0e\x32\".scalekit.v1.environments.TimeUnitR\x1a\x61\x62soluteSessionTimeoutUnit\x12]\n\x19idle_session_timeout_unit\x18\x0c \x01(\x0e\x32\".scalekit.v1.environments.TimeUnitR\x16idleSessionTimeoutUnit\"\xa5\x07\n\x0eUserManagement\x12\x61\n\x1f\x61llow_duplicate_user_identities\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x1c\x61llowDuplicateUserIdentities\x12X\n\x1a\x61llow_multiple_memberships\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x18\x61llowMultipleMemberships\x12V\n\x19\x61llow_organization_signup\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x17\x61llowOrganizationSignup\x12o\n\x15org_user_relationship\x18\x04 \x01(\x0e\x32\x31.scalekit.v1.environments.OrgUserRelationshipTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x13orgUserRelationship\x12O\n\x16\x65nable_max_users_limit\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x13\x65nableMaxUsersLimit\x12P\n\x0fmax_users_limit\x18\x06 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x0b\xbaH\x08\x1a\x06\x18\x9f\x8d\x06(\x01R\rmaxUsersLimit\x12V\n\x11invitation_expiry\x18\x07 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x0b\xbaH\x08*\x06\x18\xc0\xd1\x02(\x01R\x10invitationExpiry\x12_\n\x1e\x62lock_disposable_email_domains\x18\t \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x1b\x62lockDisposableEmailDomains\x12W\n\x1a\x62lock_public_email_domains\x18\n \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x17\x62lockPublicEmailDomains\x12X\n\x1bsync_user_profile_on_signin\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x17syncUserProfileOnSignin\":\n\x11GetContextRequest\x12%\n\x0e\x65nvironment_id\x18\x02 \x01(\tR\renvironmentId\"G\n\x12GetContextResponse\x12\x31\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext\"p\n\x14UpdateContextRequest\x12%\n\x0e\x65nvironment_id\x18\x02 \x01(\tR\renvironmentId\x12\x31\n\x07\x63ontext\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext\"*\n\x18GetCurrentSessionRequest\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\"\x93\x03\n\x19GetCurrentSessionResponse\x12\x46\n\x0esession_expiry\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\rsessionExpiry\x88\x01\x01\x12J\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x11\x61\x63\x63\x65ssTokenExpiry\x12,\n\x0forganization_id\x18\x03 \x01(\tH\x01R\x0eorganizationId\x88\x01\x01\x12\x18\n\x07subject\x18\x04 \x01(\tR\x07subject\x12\x19\n\x05\x65mail\x18\x05 \x01(\tH\x02R\x05\x65mail\x88\x01\x01\x12\x35\n\x14\x63onnected_account_id\x18\x06 \x01(\tH\x03R\x12\x63onnectedAccountId\x88\x01\x01\x42\x11\n\x0f_session_expiryB\x12\n\x10_organization_idB\x08\n\x06_emailB\x17\n\x15_connected_account_id\"\xc5\x01\n\x10ResourceMetadata\x12K\n\x04type\x18\x01 \x01(\x0e\x32\x37.scalekit.v1.environments.ResourceMetadata.ResourceTypeR\x04type\x12 \n\x0bidentifiers\x18\x02 \x03(\tR\x0bidentifiers\"B\n\x0cResourceType\x12\x10\n\x0corganization\x10\x00\x12\x0e\n\nconnection\x10\x01\x12\x10\n\x0c\x61uth_request\x10\x02\"c\n\x17ScalekitResourceRequest\x12H\n\tresources\x18\x01 \x03(\x0b\x32*.scalekit.v1.environments.ResourceMetadataR\tresources\"\xd2\x01\n\x18ScalekitResourceResponse\x12_\n\tresources\x18\x01 \x03(\x0b\x32\x41.scalekit.v1.environments.ScalekitResourceResponse.ResourcesEntryR\tresources\x1aU\n\x0eResourcesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\x05value:\x02\x38\x01\"\x18\n\x16PortalBootstrapRequest\"\xbe\x01\n\x1cPortalCustomizationBootstrap\x12S\n\x16\x63ustomization_settings\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\x03\xe0\x41\x01R\x15\x63ustomizationSettings\x12I\n\x08settings\x18\x02 \x01(\x0b\x32(.scalekit.v1.environments.PortalSettingsB\x03\xe0\x41\x03R\x08settings\"\xed\x02\n\x17PortalBootstrapResponse\x12M\n\x07session\x18\x01 \x01(\x0b\x32\x33.scalekit.v1.environments.GetCurrentSessionResponseR\x07session\x12k\n\x15portal_customizations\x18\x02 \x01(\x0b\x32\x36.scalekit.v1.environments.PortalCustomizationBootstrapR\x14portalCustomizations\x12K\n\x0corganization\x18\x03 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationR\x0corganization\x12I\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionR\x0b\x63onnections\"\xa7\x03\n\x12\x41gentActionsConfig\x12l\n\x10user_verify_mode\x18\x01 \x01(\x0e\x32\x38.scalekit.v1.environments.ConnectedAccountUserVerifyModeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0euserVerifyMode\x12\x87\x02\n\x16\x64\x65tailed_error_logging\x18\x02 \x01(\x08\x42\xcb\x01\x92\x41\xc7\x01\x32\xc4\x01When true, full error messages from provider failures are captured in tool-call logs. When false (default), only the error code is retained. Omit the field to leave the existing setting unchanged.H\x00R\x14\x64\x65tailedErrorLogging\x88\x01\x01\x42\x19\n\x17_detailed_error_logging\"\xa6\x01\n\x1f\x43reateAgentActionsConfigRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\x63\n\x14\x61gent_actions_config\x18\x02 \x01(\x0b\x32,.scalekit.v1.environments.AgentActionsConfigB\x03\xe0\x41\x02R\x12\x61gentActionsConfig\"\x87\x01\n CreateAgentActionsConfigResponse\x12\x63\n\x14\x61gent_actions_config\x18\x01 \x01(\x0b\x32,.scalekit.v1.environments.AgentActionsConfigB\x03\xe0\x41\x03R\x12\x61gentActionsConfig\">\n\x1cGetAgentActionsConfigRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"\x84\x01\n\x1dGetAgentActionsConfigResponse\x12\x63\n\x14\x61gent_actions_config\x18\x01 \x01(\x0b\x32,.scalekit.v1.environments.AgentActionsConfigB\x03\xe0\x41\x03R\x12\x61gentActionsConfig\"\xa6\x01\n\x1fUpdateAgentActionsConfigRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\x63\n\x14\x61gent_actions_config\x18\x02 \x01(\x0b\x32,.scalekit.v1.environments.AgentActionsConfigB\x03\xe0\x41\x02R\x12\x61gentActionsConfig\"\x87\x01\n UpdateAgentActionsConfigResponse\x12\x63\n\x14\x61gent_actions_config\x18\x01 \x01(\x0b\x32,.scalekit.v1.environments.AgentActionsConfigB\x03\xe0\x41\x03R\x12\x61gentActionsConfig*W\n\x12\x43ustomDomainStatus\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07PENDING\x10\x01\x12\n\n\x06\x41\x43TIVE\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\x12\x0b\n\x07INITIAL\x10\x04*O\n\rAssetCategory\x12\x1e\n\x1a\x41SSET_CATEGORY_UNSPECIFIED\x10\x00\x12\x1e\n\x1aPORTAL_CUSTOMIZATION_IMAGE\x10\x01*O\n\x08TimeUnit\x12!\n\x1dSESSION_TIME_UNIT_UNSPECIFIED\x10\x00\x12\x0b\n\x07MINUTES\x10\x01\x12\t\n\x05HOURS\x10\x02\x12\x08\n\x04\x44\x41YS\x10\x03*w\n\x17OrgUserRelationshipType\x12\'\n#OrgUserRelationshipType_UNSPECIFIED\x10\x00\x12\x17\n\x13SINGLE_ORGANIZATION\x10\x01\x12\x1a\n\x16MULTIPLE_ORGANIZATIONS\x10\x02*[\n\x15\x43ookiePersistenceType\x12%\n!CookiePersistenceType_UNSPECIFIED\x10\x00\x12\x0e\n\nPERSISTENT\x10\x01\x12\x0b\n\x07SESSION\x10\x02*[\n\x15\x43ookieSameSiteSetting\x12%\n!CookieSameSiteSetting_UNSPECIFIED\x10\x00\x12\x0c\n\x08LAX_MODE\x10\x01\x12\r\n\tNONE_MODE\x10\x02*\xb1\x01\n\x1e\x43onnectedAccountUserVerifyMode\x12\x32\n.CONNECTED_ACCOUNT_USER_VERIFY_MODE_UNSPECIFIED\x10\x00\x12\x19\n\x15USER_VERIFY_MODE_NONE\x10\x01\x12\x18\n\x14USER_VERIFY_MODE_B2B\x10\x02\x12&\n\"USER_VERIFY_MODE_SCALEKIT_PLATFORM\x10\x03\x32\xcb\x42\n\x12\x45nvironmentService\x12\xbc\x01\n\x11\x43reateEnvironment\x12\x32.scalekit.v1.environments.CreateEnvironmentRequest\x1a\x33.scalekit.v1.environments.CreateEnvironmentResponse\">\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02#\"\x14/api/v1/environments:\x0b\x65nvironment\x12\xb2\x01\n\x11UpdateEnvironment\x12\x32.scalekit.v1.environments.UpdateEnvironmentRequest\x1a\x33.scalekit.v1.environments.UpdateEnvironmentResponse\"4\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02(2\x19/api/v1/environments/{id}:\x0b\x65nvironment\x12\xc5\x01\n\x17UpdateEnvironmentDomain\x12\x38.scalekit.v1.environments.UpdateEnvironmentDomainRequest\x1a\x33.scalekit.v1.environments.UpdateEnvironmentResponse\";\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02/2 /api/v1/environments/{id}:update:\x0b\x65nvironment\x12\x9c\x01\n\x0eGetEnvironment\x12/.scalekit.v1.environments.GetEnvironmentRequest\x1a\x30.scalekit.v1.environments.GetEnvironmentResponse\"\'\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x1b\x12\x19/api/v1/environments/{id}\x12\x9c\x01\n\x0fListEnvironment\x12\x31.scalekit.v1.environments.ListEnvironmentsRequest\x1a\x32.scalekit.v1.environments.ListEnvironmentsResponse\"\"\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/environments\x12\x86\x01\n\x11\x44\x65leteEnvironment\x12\x32.scalekit.v1.environments.DeleteEnvironmentRequest\x1a\x16.google.protobuf.Empty\"%\x82\xb5\x18\x00\x82\xd3\xe4\x93\x02\x1b*\x19/api/v1/environments/{id}\x12\xa8\x01\n\x15GetRequiredDNSRecords\x12..scalekit.v1.environments.GetDNSRecordsRequest\x1a/.scalekit.v1.environments.GetDNSRecordsResponse\".\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\"\"\x1d/api/v1/environments/{id}/dns:\x01*\x12\x91\x01\n\x10VerifyDNSRecords\x12..scalekit.v1.environments.GetDNSRecordsRequest\x1a\x16.google.protobuf.Empty\"5\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02)\"$/api/v1/environments/{id}/dns:verify:\x01*\x12\xc9\x01\n\x12\x43reateCustomDomain\x12\x33.scalekit.v1.environments.CreateCustomDomainRequest\x1a\x34.scalekit.v1.environments.CreateCustomDomainResponse\"H\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02-\"(/api/v1/environments/{id}/custom-domains:\x01*\x12\xcc\x01\n\x17\x43heckCustomDomainStatus\x12/.scalekit.v1.environments.GetEnvironmentRequest\x1a\x30.scalekit.v1.environments.GetEnvironmentResponse\"N\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x33\"./api/v1/environments/{id}/custom-domains:check:\x01*\x12\xe7\x01\n\x1aGenerateNewSamlCertificate\x12\x38.scalekit.v1.environments.GenerateSamlCertificateRequest\x1a\x39.scalekit.v1.environments.GenerateSamlCertificateResponse\"T\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x39\"4/api/v1/environments/{id}/saml-certificates:generate:\x01*\x12\xc0\x02\n\x19UpdatePortalCustomization\x12:.scalekit.v1.environments.UpdatePortalCustomizationRequest\x1a;.scalekit.v1.environments.UpdatePortalCustomizationResponse\"\xa9\x01\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x8d\x01\x1a//api/v1/environments/{id}/portal_customizations:\x16\x63ustomization_settingsZB\x1a(/api/v1/environments/{id}/customizations:\x16\x63ustomization_settings\x12\xe9\x01\n\x16GetPortalCustomization\x12\x37.scalekit.v1.environments.GetPortalCustomizationRequest\x1a\x38.scalekit.v1.environments.GetPortalCustomizationResponse\"\\\x82\xb5\x18\x03\x18\xe0\x01\x82\xd3\xe4\x93\x02O\x12\x1d/api/v1/portal_customizationsZ.\x12,/api/v1/environments/-/portal_customizations\x12\xc4\x01\n\x14\x43reateAssetUploadURL\x12\x35.scalekit.v1.environments.CreateAssetUploadUrlRequest\x1a\x36.scalekit.v1.environments.CreateAssetUploadUrlResponse\"=\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x31\"\x1f/api/v1/environments/{id}/asset:\x0e\x61sset_settings\x12\xac\x01\n\x0eUpdateFeatures\x12/.scalekit.v1.environments.UpdateFeaturesRequest\x1a-.scalekit.v1.environments.GetFeaturesResponse\":\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02.\x1a\"/api/v1/environments/{id}/features:\x08\x66\x65\x61tures\x12\xcb\x01\n\x10\x45nableFSAFeature\x12\x31.scalekit.v1.environments.EnableFSAFeatureRequest\x1a\x16.google.protobuf.Empty\"l\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02Q\"-/api/v1/environments/{id}/features/fsa/enable:\x01*Z\x1d\"\x1b/api/v1/features/fsa/enable\x12\x81\x01\n\x11\x44isableFSAFeature\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"<\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\"\x1c/api/v1/features/fsa/disable:\x01*\x12\x9d\x01\n\rEnableFeature\x12..scalekit.v1.environments.EnableFeatureRequest\x1a\x16.google.protobuf.Empty\"D\x82\xb5\x18\x02\x18`\x82\xd3\xe4\x93\x02\x38\"6/api/v1/environments/{id}/features/{feature_id}:enable\x12\xa0\x01\n\x0e\x44isableFeature\x12/.scalekit.v1.environments.DisableFeatureRequest\x1a\x16.google.protobuf.Empty\"E\x82\xb5\x18\x02\x18`\x82\xd3\xe4\x93\x02\x39\"7/api/v1/environments/{id}/features/{feature_id}:disable\x12\x8a\x01\n\x0bGetFeatures\x12,.scalekit.v1.environments.GetFeaturesRequest\x1a-.scalekit.v1.environments.GetFeaturesResponse\"\x1e\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x12\x12\x10/api/v1/features\x12\xb9\x04\n\x1fGetHostScopedPublicFeatureFlags\x12\x16.google.protobuf.Empty\x1a\x41.scalekit.v1.environments.GetHostScopedPublicFeatureFlagsResponse\"\xba\x03\x92\x41\xf2\x02\n\x0c\x45nvironments\x12%List host-scoped public feature flags\x1a\xc5\x01Resolves the environment from the request host only (no environment path, query, or header). Returns allowlisted OpenFeature values; no bearer token. 404 if the host does not map to an environment.J2\n\x03\x32\x30\x30\x12+\n)Allowlisted flag keys and resolved valuesJ?\n\x03\x34\x30\x34\x12\x38\n6No environment resolved from host or workspace UI host\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)\x12\'/api/v1/environments:publicFeatureFlags\x12\x84\x02\n CreateEnvironmentSessionSettings\x12\x41.scalekit.v1.environments.CreateEnvironmentSessionSettingsRequest\x1a\x42.scalekit.v1.environments.CreateEnvironmentSessionSettingsResponse\"Y\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02>\"*/api/v1/environments/{id}/session-settings:\x10session_settings\x12\x88\x02\n\x1f\x43reateEnvironmentUserManagement\x12@.scalekit.v1.environments.CreateEnvironmentUserManagementRequest\x1a\x41.scalekit.v1.environments.CreateEnvironmentUserManagementResponse\"`\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x45\"2/api/v1/environments/{id}/settings/user-management:\x0fuser_management\x12\xda\x01\n\x1dGetEnvironmentSessionSettings\x12>.scalekit.v1.environments.GetEnvironmentSessionSettingsRequest\x1a?.scalekit.v1.environments.GetEnvironmentSessionSettingsResponse\"8\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02,\x12*/api/v1/environments/{id}/session-settings\x12\xdf\x01\n\x1cGetEnvironmentUserManagement\x12=.scalekit.v1.environments.GetEnvironmentUserManagementRequest\x1a>.scalekit.v1.environments.GetEnvironmentUserManagementResponse\"@\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x34\x12\x32/api/v1/environments/{id}/settings/user-management\x12\x84\x02\n UpdateEnvironmentSessionSettings\x12\x41.scalekit.v1.environments.UpdateEnvironmentSessionSettingsRequest\x1a\x42.scalekit.v1.environments.UpdateEnvironmentSessionSettingsResponse\"Y\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02>2*/api/v1/environments/{id}/session-settings:\x10session_settings\x12\x88\x02\n\x1fUpdateEnvironmentUserManagement\x12@.scalekit.v1.environments.UpdateEnvironmentUserManagementRequest\x1a\x41.scalekit.v1.environments.UpdateEnvironmentUserManagementResponse\"`\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x45\x32\x32/api/v1/environments/{id}/settings/user-management:\x0fuser_management\x12\x86\x04\n\x18\x43reateAgentActionsConfig\x12\x39.scalekit.v1.environments.CreateAgentActionsConfigRequest\x1a:.scalekit.v1.environments.CreateAgentActionsConfigResponse\"\xf2\x02\x92\x41\x8b\x02\n\x0c\x45nvironments\x12\x1b\x43reate agent actions config\x1a:Creates the agent actions configuration for an environmentJ2\n\x03\x32\x30\x30\x12+\n)Agent actions config created successfullyJN\n\x03\x34\x30\x30\x12G\nEInvalid request - missing or invalid fields, or config already existsJ\x1e\n\x03\x34\x30\x34\x12\x17\n\x15\x45nvironment not found\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02H\"0/api/v1/environments/{id}/settings/agent-actions:\x14\x61gent_actions_config\x12\xa3\x03\n\x15GetAgentActionsConfig\x12\x36.scalekit.v1.environments.GetAgentActionsConfigRequest\x1a\x37.scalekit.v1.environments.GetAgentActionsConfigResponse\"\x98\x02\x92\x41\xc7\x01\n\x0c\x45nvironments\x12\x18Get agent actions config\x1a=Retrieves the agent actions configuration for an environment.J4\n\x03\x32\x30\x30\x12-\n+Agent actions config retrieved successfullyJ(\n\x03\x34\x30\x34\x12!\n\x1f\x45nvironment or config not found\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x32\x12\x30/api/v1/environments/{id}/settings/agent-actions\x12\x96\x04\n\x18UpdateAgentActionsConfig\x12\x39.scalekit.v1.environments.UpdateAgentActionsConfigRequest\x1a:.scalekit.v1.environments.UpdateAgentActionsConfigResponse\"\x82\x03\x92\x41\x9b\x02\n\x0c\x45nvironments\x12\x1bUpdate agent actions config\x1a:Updates the agent actions configuration for an environmentJ2\n\x03\x32\x30\x30\x12+\n)Agent actions config updated successfullyJ^\n\x03\x34\x30\x30\x12W\nUInvalid request - missing or invalid fields, or mode not allowed for this environmentJ\x1e\n\x03\x34\x30\x34\x12\x17\n\x15\x45nvironment not found\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02H20/api/v1/environments/{id}/settings/agent-actions:\x14\x61gent_actions_config\x12\xa5\x01\n\nGetContext\x12+.scalekit.v1.environments.GetContextRequest\x1a,.scalekit.v1.environments.GetContextResponse\"<\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x30\x12./api/v1/environments/{environment_id}/contexts\x12\x9e\x01\n\rUpdateContext\x12..scalekit.v1.environments.UpdateContextRequest\x1a\x16.google.protobuf.Empty\"E\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x39\x1a./api/v1/environments/{environment_id}/contexts:\x07\x63ontext\x12\xef\x01\n\x11GetCurrentSession\x12\x32.scalekit.v1.environments.GetCurrentSessionRequest\x1a\x33.scalekit.v1.environments.GetCurrentSessionResponse\"q\x82\xb5\x18\x03\x18\xf0\x01\x82\xd3\xe4\x93\x02\x64\x12%/api/v1/environments/{id}/sessions:meZ$\x12\"/api/v1/environments/-/sessions:meZ\x15\x12\x13/api/v1/sessions:me\x12\xb1\x01\n\x14GetScalekitResources\x12\x31.scalekit.v1.environments.ScalekitResourceRequest\x1a\x32.scalekit.v1.environments.ScalekitResourceResponse\"2\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x17\"\x12/api/v1/fetch:bulk:\x01*\x12\xd0\x03\n\x0fPortalBootstrap\x12\x30.scalekit.v1.environments.PortalBootstrapRequest\x1a\x31.scalekit.v1.environments.PortalBootstrapResponse\"\xd7\x02\x92\x41\xad\x02\n\x06Portal\x12\x1eRetrieve portal bootstrap data\x1a\x97\x01Returns all data needed to initialize the customer portal in a single request, combining session, portal customizations, organization, and connections.J5\n\x03\x32\x30\x30\x12.\n,Successfully retrieved portal bootstrap dataJ2\n\x03\x34\x30\x31\x12+\n)Unauthorized - invalid or expired session\x82\xb5\x18\x02\x18`\x82\xd3\xe4\x93\x02\x1a\x12\x18/api/v1/portal/bootstrapB8Z6github.com/scalekit-inc/scalekit/pkg/grpc/environmentsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -163,6 +163,8 @@ _globals['_PORTALCUSTOMIZATIONBOOTSTRAP'].fields_by_name['settings']._serialized_options = b'\340A\003' _globals['_AGENTACTIONSCONFIG'].fields_by_name['user_verify_mode']._loaded_options = None _globals['_AGENTACTIONSCONFIG'].fields_by_name['user_verify_mode']._serialized_options = b'\272H\005\202\001\002\020\001' + _globals['_AGENTACTIONSCONFIG'].fields_by_name['detailed_error_logging']._loaded_options = None + _globals['_AGENTACTIONSCONFIG'].fields_by_name['detailed_error_logging']._serialized_options = b'\222A\307\0012\304\001When true, full error messages from provider failures are captured in tool-call logs. When false (default), only the error code is retained. Omit the field to leave the existing setting unchanged.' _globals['_CREATEAGENTACTIONSCONFIGREQUEST'].fields_by_name['id']._loaded_options = None _globals['_CREATEAGENTACTIONSCONFIGREQUEST'].fields_by_name['id']._serialized_options = b'\272H\013r\t\020\001\030 :\003env' _globals['_CREATEAGENTACTIONSCONFIGREQUEST'].fields_by_name['agent_actions_config']._loaded_options = None @@ -249,18 +251,20 @@ _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetScalekitResources']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\027\"\022/api/v1/fetch:bulk:\001*' _globals['_ENVIRONMENTSERVICE'].methods_by_name['PortalBootstrap']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['PortalBootstrap']._serialized_options = b'\222A\255\002\n\006Portal\022\036Retrieve portal bootstrap data\032\227\001Returns all data needed to initialize the customer portal in a single request, combining session, portal customizations, organization, and connections.J5\n\003200\022.\n,Successfully retrieved portal bootstrap dataJ2\n\003401\022+\n)Unauthorized - invalid or expired session\202\265\030\002\030`\202\323\344\223\002\032\022\030/api/v1/portal/bootstrap' - _globals['_CUSTOMDOMAINSTATUS']._serialized_start=12605 - _globals['_CUSTOMDOMAINSTATUS']._serialized_end=12692 - _globals['_ASSETCATEGORY']._serialized_start=12694 - _globals['_ASSETCATEGORY']._serialized_end=12773 - _globals['_ORGUSERRELATIONSHIPTYPE']._serialized_start=12775 - _globals['_ORGUSERRELATIONSHIPTYPE']._serialized_end=12894 - _globals['_COOKIEPERSISTENCETYPE']._serialized_start=12896 - _globals['_COOKIEPERSISTENCETYPE']._serialized_end=12987 - _globals['_COOKIESAMESITESETTING']._serialized_start=12989 - _globals['_COOKIESAMESITESETTING']._serialized_end=13080 - _globals['_CONNECTEDACCOUNTUSERVERIFYMODE']._serialized_start=13083 - _globals['_CONNECTEDACCOUNTUSERVERIFYMODE']._serialized_end=13260 + _globals['_CUSTOMDOMAINSTATUS']._serialized_start=12913 + _globals['_CUSTOMDOMAINSTATUS']._serialized_end=13000 + _globals['_ASSETCATEGORY']._serialized_start=13002 + _globals['_ASSETCATEGORY']._serialized_end=13081 + _globals['_TIMEUNIT']._serialized_start=13083 + _globals['_TIMEUNIT']._serialized_end=13162 + _globals['_ORGUSERRELATIONSHIPTYPE']._serialized_start=13164 + _globals['_ORGUSERRELATIONSHIPTYPE']._serialized_end=13283 + _globals['_COOKIEPERSISTENCETYPE']._serialized_start=13285 + _globals['_COOKIEPERSISTENCETYPE']._serialized_end=13376 + _globals['_COOKIESAMESITESETTING']._serialized_start=13378 + _globals['_COOKIESAMESITESETTING']._serialized_end=13469 + _globals['_CONNECTEDACCOUNTUSERVERIFYMODE']._serialized_start=13472 + _globals['_CONNECTEDACCOUNTUSERVERIFYMODE']._serialized_end=13649 _globals['_CREATECUSTOMDOMAINREQUEST']._serialized_start=585 _globals['_CREATECUSTOMDOMAINREQUEST']._serialized_end=696 _globals['_CREATECUSTOMDOMAINRESPONSE']._serialized_start=698 @@ -364,49 +368,49 @@ _globals['_UPDATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_start=7621 _globals['_UPDATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_end=7784 _globals['_SESSIONSETTINGS']._serialized_start=7787 - _globals['_SESSIONSETTINGS']._serialized_end=8923 - _globals['_USERMANAGEMENT']._serialized_start=8926 - _globals['_USERMANAGEMENT']._serialized_end=9859 - _globals['_GETCONTEXTREQUEST']._serialized_start=9861 - _globals['_GETCONTEXTREQUEST']._serialized_end=9919 - _globals['_GETCONTEXTRESPONSE']._serialized_start=9921 - _globals['_GETCONTEXTRESPONSE']._serialized_end=9992 - _globals['_UPDATECONTEXTREQUEST']._serialized_start=9994 - _globals['_UPDATECONTEXTREQUEST']._serialized_end=10106 - _globals['_GETCURRENTSESSIONREQUEST']._serialized_start=10108 - _globals['_GETCURRENTSESSIONREQUEST']._serialized_end=10150 - _globals['_GETCURRENTSESSIONRESPONSE']._serialized_start=10153 - _globals['_GETCURRENTSESSIONRESPONSE']._serialized_end=10556 - _globals['_RESOURCEMETADATA']._serialized_start=10559 - _globals['_RESOURCEMETADATA']._serialized_end=10756 - _globals['_RESOURCEMETADATA_RESOURCETYPE']._serialized_start=10690 - _globals['_RESOURCEMETADATA_RESOURCETYPE']._serialized_end=10756 - _globals['_SCALEKITRESOURCEREQUEST']._serialized_start=10758 - _globals['_SCALEKITRESOURCEREQUEST']._serialized_end=10857 - _globals['_SCALEKITRESOURCERESPONSE']._serialized_start=10860 - _globals['_SCALEKITRESOURCERESPONSE']._serialized_end=11070 - _globals['_SCALEKITRESOURCERESPONSE_RESOURCESENTRY']._serialized_start=10985 - _globals['_SCALEKITRESOURCERESPONSE_RESOURCESENTRY']._serialized_end=11070 - _globals['_PORTALBOOTSTRAPREQUEST']._serialized_start=11072 - _globals['_PORTALBOOTSTRAPREQUEST']._serialized_end=11096 - _globals['_PORTALCUSTOMIZATIONBOOTSTRAP']._serialized_start=11099 - _globals['_PORTALCUSTOMIZATIONBOOTSTRAP']._serialized_end=11289 - _globals['_PORTALBOOTSTRAPRESPONSE']._serialized_start=11292 - _globals['_PORTALBOOTSTRAPRESPONSE']._serialized_end=11657 - _globals['_AGENTACTIONSCONFIG']._serialized_start=11660 - _globals['_AGENTACTIONSCONFIG']._serialized_end=11790 - _globals['_CREATEAGENTACTIONSCONFIGREQUEST']._serialized_start=11793 - _globals['_CREATEAGENTACTIONSCONFIGREQUEST']._serialized_end=11959 - _globals['_CREATEAGENTACTIONSCONFIGRESPONSE']._serialized_start=11962 - _globals['_CREATEAGENTACTIONSCONFIGRESPONSE']._serialized_end=12097 - _globals['_GETAGENTACTIONSCONFIGREQUEST']._serialized_start=12099 - _globals['_GETAGENTACTIONSCONFIGREQUEST']._serialized_end=12161 - _globals['_GETAGENTACTIONSCONFIGRESPONSE']._serialized_start=12164 - _globals['_GETAGENTACTIONSCONFIGRESPONSE']._serialized_end=12296 - _globals['_UPDATEAGENTACTIONSCONFIGREQUEST']._serialized_start=12299 - _globals['_UPDATEAGENTACTIONSCONFIGREQUEST']._serialized_end=12465 - _globals['_UPDATEAGENTACTIONSCONFIGRESPONSE']._serialized_start=12468 - _globals['_UPDATEAGENTACTIONSCONFIGRESPONSE']._serialized_end=12603 - _globals['_ENVIRONMENTSERVICE']._serialized_start=13263 - _globals['_ENVIRONMENTSERVICE']._serialized_end=21786 + _globals['_SESSIONSETTINGS']._serialized_end=8938 + _globals['_USERMANAGEMENT']._serialized_start=8941 + _globals['_USERMANAGEMENT']._serialized_end=9874 + _globals['_GETCONTEXTREQUEST']._serialized_start=9876 + _globals['_GETCONTEXTREQUEST']._serialized_end=9934 + _globals['_GETCONTEXTRESPONSE']._serialized_start=9936 + _globals['_GETCONTEXTRESPONSE']._serialized_end=10007 + _globals['_UPDATECONTEXTREQUEST']._serialized_start=10009 + _globals['_UPDATECONTEXTREQUEST']._serialized_end=10121 + _globals['_GETCURRENTSESSIONREQUEST']._serialized_start=10123 + _globals['_GETCURRENTSESSIONREQUEST']._serialized_end=10165 + _globals['_GETCURRENTSESSIONRESPONSE']._serialized_start=10168 + _globals['_GETCURRENTSESSIONRESPONSE']._serialized_end=10571 + _globals['_RESOURCEMETADATA']._serialized_start=10574 + _globals['_RESOURCEMETADATA']._serialized_end=10771 + _globals['_RESOURCEMETADATA_RESOURCETYPE']._serialized_start=10705 + _globals['_RESOURCEMETADATA_RESOURCETYPE']._serialized_end=10771 + _globals['_SCALEKITRESOURCEREQUEST']._serialized_start=10773 + _globals['_SCALEKITRESOURCEREQUEST']._serialized_end=10872 + _globals['_SCALEKITRESOURCERESPONSE']._serialized_start=10875 + _globals['_SCALEKITRESOURCERESPONSE']._serialized_end=11085 + _globals['_SCALEKITRESOURCERESPONSE_RESOURCESENTRY']._serialized_start=11000 + _globals['_SCALEKITRESOURCERESPONSE_RESOURCESENTRY']._serialized_end=11085 + _globals['_PORTALBOOTSTRAPREQUEST']._serialized_start=11087 + _globals['_PORTALBOOTSTRAPREQUEST']._serialized_end=11111 + _globals['_PORTALCUSTOMIZATIONBOOTSTRAP']._serialized_start=11114 + _globals['_PORTALCUSTOMIZATIONBOOTSTRAP']._serialized_end=11304 + _globals['_PORTALBOOTSTRAPRESPONSE']._serialized_start=11307 + _globals['_PORTALBOOTSTRAPRESPONSE']._serialized_end=11672 + _globals['_AGENTACTIONSCONFIG']._serialized_start=11675 + _globals['_AGENTACTIONSCONFIG']._serialized_end=12098 + _globals['_CREATEAGENTACTIONSCONFIGREQUEST']._serialized_start=12101 + _globals['_CREATEAGENTACTIONSCONFIGREQUEST']._serialized_end=12267 + _globals['_CREATEAGENTACTIONSCONFIGRESPONSE']._serialized_start=12270 + _globals['_CREATEAGENTACTIONSCONFIGRESPONSE']._serialized_end=12405 + _globals['_GETAGENTACTIONSCONFIGREQUEST']._serialized_start=12407 + _globals['_GETAGENTACTIONSCONFIGREQUEST']._serialized_end=12469 + _globals['_GETAGENTACTIONSCONFIGRESPONSE']._serialized_start=12472 + _globals['_GETAGENTACTIONSCONFIGRESPONSE']._serialized_end=12604 + _globals['_UPDATEAGENTACTIONSCONFIGREQUEST']._serialized_start=12607 + _globals['_UPDATEAGENTACTIONSCONFIGREQUEST']._serialized_end=12773 + _globals['_UPDATEAGENTACTIONSCONFIGRESPONSE']._serialized_start=12776 + _globals['_UPDATEAGENTACTIONSCONFIGRESPONSE']._serialized_end=12911 + _globals['_ENVIRONMENTSERVICE']._serialized_start=13652 + _globals['_ENVIRONMENTSERVICE']._serialized_end=22175 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/environments/environments_pb2.pyi b/scalekit/v1/environments/environments_pb2.pyi index e28fe08..ec2f1bf 100644 --- a/scalekit/v1/environments/environments_pb2.pyi +++ b/scalekit/v1/environments/environments_pb2.pyi @@ -34,6 +34,13 @@ class AssetCategory(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): ASSET_CATEGORY_UNSPECIFIED: _ClassVar[AssetCategory] PORTAL_CUSTOMIZATION_IMAGE: _ClassVar[AssetCategory] +class TimeUnit(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + SESSION_TIME_UNIT_UNSPECIFIED: _ClassVar[TimeUnit] + MINUTES: _ClassVar[TimeUnit] + HOURS: _ClassVar[TimeUnit] + DAYS: _ClassVar[TimeUnit] + class OrgUserRelationshipType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): __slots__ = () OrgUserRelationshipType_UNSPECIFIED: _ClassVar[OrgUserRelationshipType] @@ -65,6 +72,10 @@ FAILED: CustomDomainStatus INITIAL: CustomDomainStatus ASSET_CATEGORY_UNSPECIFIED: AssetCategory PORTAL_CUSTOMIZATION_IMAGE: AssetCategory +SESSION_TIME_UNIT_UNSPECIFIED: TimeUnit +MINUTES: TimeUnit +HOURS: TimeUnit +DAYS: TimeUnit OrgUserRelationshipType_UNSPECIFIED: OrgUserRelationshipType SINGLE_ORGANIZATION: OrgUserRelationshipType MULTIPLE_ORGANIZATIONS: OrgUserRelationshipType @@ -502,10 +513,10 @@ class SessionSettings(_message.Message): cookie_persistence_type: CookiePersistenceType cookie_same_site_setting: CookieSameSiteSetting cookie_custom_domain: _wrappers_pb2.StringValue - access_token_expiry_unit: _commons_pb2.TimeUnit - absolute_session_timeout_unit: _commons_pb2.TimeUnit - idle_session_timeout_unit: _commons_pb2.TimeUnit - def __init__(self, access_token_expiry: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., client_access_token_expiry: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., absolute_session_timeout: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., session_management_enabled: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., idle_session_timeout: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., idle_session_enabled: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., cookie_persistence_type: _Optional[_Union[CookiePersistenceType, str]] = ..., cookie_same_site_setting: _Optional[_Union[CookieSameSiteSetting, str]] = ..., cookie_custom_domain: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., access_token_expiry_unit: _Optional[_Union[_commons_pb2.TimeUnit, str]] = ..., absolute_session_timeout_unit: _Optional[_Union[_commons_pb2.TimeUnit, str]] = ..., idle_session_timeout_unit: _Optional[_Union[_commons_pb2.TimeUnit, str]] = ...) -> None: ... + access_token_expiry_unit: TimeUnit + absolute_session_timeout_unit: TimeUnit + idle_session_timeout_unit: TimeUnit + def __init__(self, access_token_expiry: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., client_access_token_expiry: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., absolute_session_timeout: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., session_management_enabled: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., idle_session_timeout: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., idle_session_enabled: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., cookie_persistence_type: _Optional[_Union[CookiePersistenceType, str]] = ..., cookie_same_site_setting: _Optional[_Union[CookieSameSiteSetting, str]] = ..., cookie_custom_domain: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., access_token_expiry_unit: _Optional[_Union[TimeUnit, str]] = ..., absolute_session_timeout_unit: _Optional[_Union[TimeUnit, str]] = ..., idle_session_timeout_unit: _Optional[_Union[TimeUnit, str]] = ...) -> None: ... class UserManagement(_message.Message): __slots__ = ("allow_duplicate_user_identities", "allow_multiple_memberships", "allow_organization_signup", "org_user_relationship", "enable_max_users_limit", "max_users_limit", "invitation_expiry", "block_disposable_email_domains", "block_public_email_domains", "sync_user_profile_on_signin") @@ -633,10 +644,12 @@ class PortalBootstrapResponse(_message.Message): def __init__(self, session: _Optional[_Union[GetCurrentSessionResponse, _Mapping]] = ..., portal_customizations: _Optional[_Union[PortalCustomizationBootstrap, _Mapping]] = ..., organization: _Optional[_Union[_organizations_pb2.Organization, _Mapping]] = ..., connections: _Optional[_Iterable[_Union[_connections_pb2.ListConnection, _Mapping]]] = ...) -> None: ... class AgentActionsConfig(_message.Message): - __slots__ = ("user_verify_mode",) + __slots__ = ("user_verify_mode", "detailed_error_logging") USER_VERIFY_MODE_FIELD_NUMBER: _ClassVar[int] + DETAILED_ERROR_LOGGING_FIELD_NUMBER: _ClassVar[int] user_verify_mode: ConnectedAccountUserVerifyMode - def __init__(self, user_verify_mode: _Optional[_Union[ConnectedAccountUserVerifyMode, str]] = ...) -> None: ... + detailed_error_logging: bool + def __init__(self, user_verify_mode: _Optional[_Union[ConnectedAccountUserVerifyMode, str]] = ..., detailed_error_logging: bool = ...) -> None: ... class CreateAgentActionsConfigRequest(_message.Message): __slots__ = ("id", "agent_actions_config") diff --git a/scalekit/v1/organizations/organizations_pb2.py b/scalekit/v1/organizations/organizations_pb2.py index a7e5a5b..a05c98e 100644 --- a/scalekit/v1/organizations/organizations_pb2.py +++ b/scalekit/v1/organizations/organizations_pb2.py @@ -28,7 +28,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n-scalekit/v1/organizations/organizations.proto\x12\x19scalekit.v1.organizations\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"\xaf\x01\n\x19\x43reateOrganizationRequest\x12\x91\x01\n\x0corganization\x18\x01 \x01(\x0b\x32-.scalekit.v1.organizations.CreateOrganizationB>\x92\x41\x35\x32\x33Required parameters for creating a new organization\xbaH\x03\xc8\x01\x01R\x0corganization\"\xb9\x01\n\x1a\x43reateOrganizationResponse\x12\x9a\x01\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationBM\x92\x41J2HThe newly created organization containing its ID, settings, and metadataR\x0corganization\"\xf8\x07\n\x12\x43reateOrganization\x12\x84\x01\n\x0c\x64isplay_name\x18\x04 \x01(\tBa\x92\x41Q2?Name of the organization. Must be between 1 and 200 characters.J\x0e\"Megasoft Inc\"\xe0\x41\x02\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\xa0\x01\n\x0bregion_code\x18\x05 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeB^\x92\x41L2DGeographic region code for the organization. Currently limited to USJ\x04\"US\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\nregionCode\x12\x9e\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBx\x92\x41u2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x0e\"my_unique_id\"H\x00R\nexternalId\x88\x01\x01\x12r\n\x08metadata\x18\x07 \x03(\x0b\x32;.scalekit.v1.organizations.CreateOrganization.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xcc\x02\n\x04slug\x18\t \x01(\tB\xb2\x02\x92\x41\x84\x02\x32\xd2\x01\x44NS-safe slug for dynamic redirect URI resolution (e.g. acme for https://acme.example.com/callback). Lowercase alphanumeric and hyphens, 1-63 chars, must start and end with alphanumeric, unique per environment.J\x06\"acme\"x?\x80\x01\x01\x8a\x01\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$\xbaH\'r%\x10\x01\x18?2\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$H\x01R\x04slug\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idB\x07\n\x05_slug\"\xf8\n\n\x0cOrganization\x12{\n\x02id\x18\x01 \x01(\tBk\x92\x41h2MUnique scalekit-generated identifier that uniquely references an organizationJ\x17\"org_59615193906282635\"R\x02id\x12\x8c\x01\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBO\x92\x41I2+Timestamp when the organization was createdJ\x1a\"2025-02-15T06:23:44.560Z\"\xe0\x41\x02R\ncreateTime\x12\x8e\x01\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBQ\x92\x41N20Timestamp when the organization was last updatedJ\x1a\"2025-02-15T06:23:44.560Z\"R\nupdateTime\x12|\n\x0c\x64isplay_name\x18\x04 \x01(\tBY\x92\x41L2>Name of the organization. Must be between 1 and 200 charactersJ\n\"Megasoft\"\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\x92\x01\n\x0bregion_code\x18\x05 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeBP\x92\x41M2EGeographic region code for the organization. Currently limited to US.J\x04\"US\"R\nregionCode\x12\x9e\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBx\x92\x41u2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x0e\"my_unique_id\"H\x00R\nexternalId\x88\x01\x01\x12l\n\x08metadata\x18\x07 \x03(\x0b\x32\x35.scalekit.v1.organizations.Organization.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12K\n\x08settings\x18\x08 \x01(\x0b\x32/.scalekit.v1.organizations.OrganizationSettingsR\x08settings\x12\x85\x02\n\x04slug\x18\t \x01(\tB\xeb\x01\x92\x41\xe7\x01\x32\xb5\x01\x44NS-safe slug for dynamic redirect URI resolution. Must be 1-63 chars, lowercase alphanumeric and hyphens, must start and end with an alphanumeric character. Unique per environment.J\x06\"acme\"x?\x80\x01\x01\x8a\x01\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$H\x01R\x04slug\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idB\x07\n\x05_slug\"\xe0\x03\n\x19UpdateOrganizationRequest\x12j\n\x02id\x18\x01 \x01(\tBX\x92\x41L23Unique identifier of the organization to be updatedJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\x85\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tBb\x92\x41I2-External ID of the organization to be updatedJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x83\x01\n\x0corganization\x18\x03 \x01(\x0b\x32-.scalekit.v1.organizations.UpdateOrganizationB0\x92\x41\'2%Organization Parameters to be updated\xbaH\x03\xc8\x01\x01R\x0corganization\x12;\n\x0bupdate_mask\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskR\nupdateMaskB\x0c\n\nidentities\"\x87\x08\n\x12UpdateOrganization\x12\x9e\x01\n\x0c\x64isplay_name\x18\x04 \x01(\tBv\x92\x41i2SName of the organization to display in the UI. Must be between 1 and 200 charactersJ\x12\"Acme Corporation\"\xbaH\x07r\x05\x10\x01\x18\xc8\x01H\x00R\x0b\x64isplayName\x88\x01\x01\x12\x9d\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBw\x92\x41t2bYour application\'s unique identifier for this organization, used to link Scalekit with your systemJ\x0e\"tenant_12345\"H\x01R\nexternalId\x88\x01\x01\x12\xa5\x02\n\x08metadata\x18\x07 \x03(\x0b\x32;.scalekit.v1.organizations.UpdateOrganization.MetadataEntryB\xcb\x01\x92\x41\xae\x01\x32\x8f\x01\x43ustom key-value pairs to store with the organization. Keys must be 3-25 characters, values must be 1-256 characters. Maximum 10 pairs allowed.J\x1a{\"industry\": \"technology\"}\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\x9a\x02\n\x04slug\x18\t \x01(\tB\x80\x02\x92\x41\xd2\x01\x32\xa0\x01\x44NS-safe slug for dynamic redirect URI resolution. Lowercase alphanumeric and hyphens, 1-63 chars, must start and end with alphanumeric, unique per environment.J\x06\"acme\"x?\x80\x01\x01\x8a\x01\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$\xbaH\'r%\x10\x01\x18?2\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$H\x02R\x04slug\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0f\n\r_display_nameB\x0e\n\x0c_external_idB\x07\n\x05_slugJ\x04\x08\x05\x10\x06\"\x8c\x01\n\x1aUpdateOrganizationResponse\x12n\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationB!\x92\x41\x1e\x32\x1cUpdated organization detailsR\x0corganization\"\xeb\x02\n\x16GetOrganizationRequest\x12\x84\x01\n\x02id\x18\x01 \x01(\tBr\x92\x41\x66\x32MUnique scalekit-generated identifier that uniquely references an organizationJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\xbb\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\x97\x01\x92\x41~2bUnique identifier that links an Organization Object to your app\'s tenant, stored as an External IDJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalIdB\x0c\n\nidentities\"\x8b\x01\n\x17GetOrganizationResponse\x12p\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationB#\x92\x41 2\x1eThe newly created organizationR\x0corganization\"\xe0\x05\n\x18ListOrganizationsRequest\x12t\n\tpage_size\x18\x01 \x01(\rBW\x92\x41T2NMaximum number of organizations to return per page. Must be between 10 and 100J\x02\x33\x30R\x08pageSize\x12\x8f\x01\n\npage_token\x18\x02 \x01(\tBp\x92\x41m2[Pagination token from the previous response. Use to retrieve the next page of organizationsJ\x0e\"\"R\tpageToken\x12\xa8\x01\n\x0b\x65xternal_id\x18\x03 \x01(\tB\x81\x01\x92\x41~2bYour application\'s unique identifier for this organization, used to link Scalekit with your systemJ\x18\"\"H\x00R\nexternalId\x88\x01\x01:\x80\x02\x92\x41\xfc\x01\n\xab\x01*\x12List Organizations2\x94\x01Retrieves a paginated list of all organizations within the environment. Use the `page_token` from the response to access subsequent pages of results*L\n\x12List Organizations\x12\x36https://docs.scalekit.com/reference/list-organizationsB\x0e\n\x0c_external_id\"\xa4\x04\n\x19ListOrganizationsResponse\x12\x97\x01\n\x0fnext_page_token\x18\x01 \x01(\tBo\x92\x41l2UPagination token for the next page of results. Use this token to fetch the next page.J\x13\"\"R\rnextPageToken\x12Y\n\ntotal_size\x18\x02 \x01(\rB:\x92\x41\x37\x32\x31Total number of organizations in the environment.J\x02\x33\x30R\ttotalSize\x12p\n\rorganizations\x18\x03 \x03(\x0b\x32\'.scalekit.v1.organizations.OrganizationB!\x92\x41\x1e\x32\x1cList of organization objectsR\rorganizations\x12\x9f\x01\n\x0fprev_page_token\x18\x04 \x01(\tBw\x92\x41t2]Pagination token for the previous page of results. Use this token to fetch the previous page.J\x13\"\"R\rprevPageToken\"\xa7\x05\n\x1aSearchOrganizationsRequest\x12\xa5\x01\n\x05query\x18\x01 \x01(\tB\x8e\x01\x92\x41\x7f\x32wSearch term to match against organization names, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\x04\x61\x63me\xbaH\tr\x04\x10\x03\x18\x64\xc8\x01\x01R\x05query\x12\x80\x01\n\tpage_size\x18\x02 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x03 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken:\xb5\x01\x92\x41\xb1\x01\n\x88\x01*\x14Search Organizations2pSearch for organizations in your environment using a text query that matches against names, IDs, or external IDs2$query=acme&page_size=30&page_token=1\"\xdb\x01\n\x1bSearchOrganizationsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12M\n\rorganizations\x18\x03 \x03(\x0b\x32\'.scalekit.v1.organizations.OrganizationR\rorganizations\x12&\n\x0fprev_page_token\x18\x04 \x01(\tR\rprevPageToken\"\xad\x02\n\x19\x44\x65leteOrganizationRequest\x12~\n\x02id\x18\x01 \x01(\tBl\x92\x41`2MUnique scalekit-generated identifier that uniquely references an organizationJ\x0f\"org_123456789\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\x81\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB^\x92\x41\x45\x32)External ID of the organization to deleteJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalIdB\x0c\n\nidentities\"\xcf\x04\n\x19GeneratePortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12(\n\x03sso\x18\x02 \x01(\x08\x42\x11\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\x03sso\x88\x01\x01\x12=\n\x0e\x64irectory_sync\x18\x03 \x01(\x08\x42\x11\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\rdirectorySync\x88\x01\x01\x12\xdd\x02\n\x08\x66\x65\x61tures\x18\x04 \x03(\x0e\x32\".scalekit.v1.organizations.FeatureB\x9c\x02\x92\x41\x98\x02\x32\x95\x02\x46\x65\x61tures to enable in the admin portal link. To enable features, append them as URL parameters:\n\n- Single Sign-On: ?features=sso\n- Directory Sync: ?features=dir_sync\n- Both features: ?features=sso&features=dir_sync\n\nExample URL: https://scalekit.com/portal/lnk_123?features=ssoR\x08\x66\x65\x61turesB\x06\n\x04_ssoB\x11\n\x0f_directory_sync\"f\n\x14GetPortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\"i\n\x17\x44\x65letePortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\"\xbe\x01\n\x1b\x44\x65letePortalLinkByIdRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12O\n\x07link_id\x18\x02 \x01(\tB6\x92\x41!2\x07Link IDJ\x16\"lnk_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04lnk_\xc8\x01\x01R\x06linkId\"\xb5\x03\n\x04Link\x12J\n\x02id\x18\x01 \x01(\tB:\x92\x41\x37\x32\x1eUnique Identifier for the linkJ\x15\"lnk_123123123123123\"R\x02id\x12\xc7\x01\n\x08location\x18\x02 \x01(\tB\xaa\x01\x92\x41\xa6\x01\x32qLocation of the link. This is the URL that can be used to access the Admin portal. The link is valid for 1 minuteJ1\"https://scalekit.com/portal/lnk_123123123123123\"R\x08location\x12\x96\x01\n\x0b\x65xpire_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBY\x92\x41V28Expiry time of the link. The link is valid for 1 minute.J\x1a\"2024-02-06T14:48:00.000Z\"R\nexpireTime\"\x96\x02\n\x1aGeneratePortalLinkResponse\x12\xf7\x01\n\x04link\x18\x01 \x01(\x0b\x32\x1f.scalekit.v1.organizations.LinkB\xc1\x01\x92\x41\xbd\x01\x32\xba\x01\x43ontains the generated admin portal link details. The link URL can be shared with organization administrators to set up: Single Sign-On (SSO) authentication and directory synchronizationR\x04link\"h\n\x16GetPortalLinksResponse\x12N\n\x05links\x18\x01 \x03(\x0b\x32\x1f.scalekit.v1.organizations.LinkB\x17\x92\x41\x14\x32\x12\x41\x64min Portal LinksR\x05links\"\x90\x04\n!UpdateOrganizationSettingsRequest\x12\x97\x01\n\x02id\x18\x01 \x01(\tB\x86\x01\x92\x41q2WUnique identifier of the organization to update settings. Must begin with \'org_\' prefixJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12\xd0\x02\n\x08settings\x18\x02 \x01(\x0b\x32/.scalekit.v1.organizations.OrganizationSettingsB\x82\x02\x92\x41\xf8\x01\x32\x95\x01Settings configuration to apply to the organization. Contains feature toggles for SSO, directory synchronization, and other organization capabilitiesJ^{\"features\": [{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]}\xbaH\x03\xc8\x01\x01R\x08settings\"\x93\x0c\n!OrganizationSessionPolicySettings\x12\x94\x02\n\rpolicy_source\x18\x01 \x01(\x0e\x32..scalekit.v1.organizations.SessionPolicySourceB\xbe\x01\x92\x41\xaf\x01\x32\xa2\x01Policy source. \'environment\' means the organization inherits the application-level session policy. \'custom\' means organization-specific timeout values are active.J\x08\"custom\"\xbaH\x08\x82\x01\x05\x10\x01\"\x01\x00R\x0cpolicySource\x12\xec\x01\n\x18\x61\x62solute_session_timeout\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x94\x01\x92\x41\x90\x01\x32\x88\x01The absolute session timeout value. The unit is specified by absolute_session_timeout_unit. Omitted when policy_source is \'environment\'.J\x03\x33\x36\x30R\x16\x61\x62soluteSessionTimeout\x12\xea\x01\n\x1d\x61\x62solute_session_timeout_unit\x18\x03 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitB\x82\x01\x92\x41\x7f\x32rUnit for absolute_session_timeout. Accepted values: \'minutes\', \'hours\', \'days\'. Responses always return \'minutes\'.J\t\"minutes\"H\x00R\x1a\x61\x62soluteSessionTimeoutUnit\x88\x01\x01\x12\xd3\x01\n\x1cidle_session_timeout_enabled\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBv\x92\x41s2kWhether idle session timeout is enabled for this organization. Omitted when policy_source is \'environment\'.J\x04trueR\x19idleSessionTimeoutEnabled\x12\x84\x02\n\x14idle_session_timeout\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xb4\x01\x92\x41\xb0\x01\x32\xa9\x01The idle session timeout value. The unit is specified by idle_session_timeout_unit. Omitted when idle_session_timeout_enabled is false or policy_source is \'environment\'.J\x02\x38\x34R\x12idleSessionTimeout\x12\xdd\x01\n\x19idle_session_timeout_unit\x18\x06 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitB~\x92\x41{2nUnit for idle_session_timeout. Accepted values: \'minutes\', \'hours\', \'days\'. Responses always return \'minutes\'.J\t\"minutes\"H\x01R\x16idleSessionTimeoutUnit\x88\x01\x01\x42 \n\x1e_absolute_session_timeout_unitB\x1c\n\x1a_idle_session_timeout_unit\"\xd4\x01\n#GetOrganizationSessionPolicyRequest\x12\xac\x01\n\x0forganization_id\x18\x01 \x01(\tB\x82\x01\x92\x41m2RThe unique identifier of the organization whose session policy is being requested.J\x17\"org_59615193906282635\"\xe0\x41\x02\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\"\xac\x01\n$GetOrganizationSessionPolicyResponse\x12\x83\x01\n\x06policy\x18\x01 \x01(\x0b\x32<.scalekit.v1.organizations.OrganizationSessionPolicySettingsB-\x92\x41*2(The session policy for the organization.R\x06policy\"\x95\x03\n&UpdateOrganizationSessionPolicyRequest\x12\xaa\x01\n\x0forganization_id\x18\x01 \x01(\tB\x80\x01\x92\x41k2PThe unique identifier of the organization whose session policy is being updated.J\x17\"org_59615193906282635\"\xe0\x41\x02\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xbd\x01\n\x06policy\x18\x02 \x01(\x0b\x32<.scalekit.v1.organizations.OrganizationSessionPolicySettingsBg\x92\x41\x61\x32_The session policy to apply. Set policy_source=\'APPLICATION\' to revert to application defaults.\xe0\x41\x02R\x06policy\"\xb7\x01\n\'UpdateOrganizationSessionPolicyResponse\x12\x8b\x01\n\x06policy\x18\x01 \x01(\x0b\x32<.scalekit.v1.organizations.OrganizationSessionPolicySettingsB5\x92\x41\x32\x32\x30The updated session policy for the organization.R\x06policy\"\xdc\x02\n\"OrganizationUserManagementSettings\x12\xb5\x02\n\x11max_allowed_users\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xeb\x01\x92\x41\xe7\x01\x32\xdf\x01Maximum number of users allowed in the organization. When nil (not set), there feature is not enabled. When explicitly set to zero, it also means no limit. When set to a positive integer, it enforces the maximum user limit.J\x03\x31\x30\x30R\x0fmaxAllowedUsers\"\xb2\x08\n\x1bOrganizationSessionSettings\x12\xfe\x01\n\x18\x61\x62solute_session_timeout\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xa6\x01\x92\x41\xa2\x01\x32\x98\x01The maximum duration in seconds that a session can remain active, regardless of activity. After this time, the user will be required to re-authenticate.J\x05\x38\x36\x34\x30\x30R\x16\x61\x62soluteSessionTimeout\x12\xd4\x01\n\x14idle_session_timeout\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x84\x01\x92\x41\x80\x01\x32xThe duration in seconds that a session can remain idle before it is automatically terminated. Activity resets the timer.J\x04\x31\x38\x30\x30R\x12idleSessionTimeout\x12\x8e\x02\n\x1cidle_session_timeout_enabled\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xb0\x01\x92\x41\xac\x01\x32\xa3\x01Whether idle session timeout is enabled for this organization. When enabled, sessions expire after the idle timeout duration regardless of the environment setting.J\x04trueR\x19idleSessionTimeoutEnabled\x12\xeb\x01\n\rpolicy_source\x18\x06 \x01(\tB\xc5\x01\x92\x41\xc1\x01\x32\xb4\x01Policy source for this organization. \'environment\' means the organization inherits application-level session policy. \'custom\' means organization-specific timeout values are active.J\x08\"custom\"R\x0cpolicySourceJ\x04\x08\x02\x10\x03J\x04\x08\x04\x10\x05R\x1asession_management_enabledR\x14idle_session_enabled\"\x8e\x04\n\x14OrganizationSettings\x12\xa4\x02\n\x08\x66\x65\x61tures\x18\x01 \x03(\x0b\x32\x36.scalekit.v1.organizations.OrganizationSettingsFeatureB\xcf\x01\x92\x41\xcb\x01\x32wList of feature toggles that control organization capabilities such as SSO authentication and directory synchronizationJP[{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]R\x08\x66\x65\x61tures:\xce\x01\x92\x41\xca\x01\nh*\x15Organization Settings2OConfiguration options that control organization-level features and capabilities2^{\"features\": [{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]}\"\xe1\x03\n\x1bOrganizationSettingsFeature\x12\xd4\x01\n\x04name\x18\x01 \x01(\tB\xbf\x01\x92\x41\xbb\x01\x32\xb1\x01\x46\x65\x61ture identifier. Supported values include: \"sso\" (Single Sign-On), \"directory_sync\" (Directory Synchronization), \"session_policy\" (Organization-level session policy override)J\x05\"sso\"R\x04name\x12t\n\x07\x65nabled\x18\x02 \x01(\x08\x42Z\x92\x41W2OWhether the feature is enabled (true) or disabled (false) for this organizationJ\x04trueR\x07\x65nabled:u\x92\x41r\np*\x1bOrganization Feature Toggle2@Controls the activation state of a specific organization feature\xd2\x01\x04name\xd2\x01\x07\x65nabled\"\x96\x02\n#UpsertUserManagementSettingsRequest\x12W\n\x0forganization_id\x18\x01 \x01(\tB.\x92\x41\x19\x32\x17ID of the organization.\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\x12\x95\x01\n\x08settings\x18\x02 \x01(\x0b\x32=.scalekit.v1.organizations.OrganizationUserManagementSettingsB:\x92\x41\x31\x32/The new values for the setting fields to patch.\xbaH\x03\xc8\x01\x01R\x08settings\"\x9c\x01\n$UpsertUserManagementSettingsResponse\x12t\n\x08settings\x18\x01 \x01(\x0b\x32=.scalekit.v1.organizations.OrganizationUserManagementSettingsB\x19\x92\x41\x16\x32\x14The updated setting.R\x08settings\"\x87\x01\n,GetOrganizationUserManagementSettingsRequest\x12W\n\x0forganization_id\x18\x01 \x01(\tB.\x92\x41\x19\x32\x17ID of the organization.\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\"\xaf\x01\n-GetOrganizationUserManagementSettingsResponse\x12~\n\x08settings\x18\x01 \x01(\x0b\x32=.scalekit.v1.organizations.OrganizationUserManagementSettingsB#\x92\x41 2\x1eList of organization settings.R\x08settings*R\n\x07\x46\x65\x61ture\x12\x17\n\x13\x46\x45\x41TURE_UNSPECIFIED\x10\x00\x12\x13\n\x0bUNSPECIFIED\x10\x00\x1a\x02\x08\x01\x12\x0c\n\x08\x64ir_sync\x10\x01\x12\x07\n\x03sso\x10\x02\x1a\x02\x10\x01*R\n\x13SessionPolicySource\x12\x1e\n\x1aSESSION_POLICY_UNSPECIFIED\x10\x00\x12\x0f\n\x0b\x41PPLICATION\x10\x01\x12\n\n\x06\x43USTOM\x10\x02\x32\xa3J\n\x13OrganizationService\x12\x88\x04\n\x12\x43reateOrganization\x12\x34.scalekit.v1.organizations.CreateOrganizationRequest\x1a\x35.scalekit.v1.organizations.CreateOrganizationResponse\"\x84\x03\x92\x41\xcf\x02\n\rOrganizations\x12\x16\x43reate an organization\x1a\x8f\x01\x43reates a new organization in your environment. Use this endpoint to add a new tenant that can be configured with various settings and metadataJ\x93\x01\n\x03\x32\x30\x31\x12\x8b\x01\nNReturns the newly created organization with its unique identifier and settings\x12\x39\n7\x1a\x35.scalekit.v1.organizations.CreateOrganizationResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02%\"\x15/api/v1/organizations:\x0corganization\x12\xbf\x04\n\x12UpdateOrganization\x12\x34.scalekit.v1.organizations.UpdateOrganizationRequest\x1a\x35.scalekit.v1.organizations.UpdateOrganizationResponse\"\xbb\x03\x92\x41\xec\x02\n\rOrganizations\x12\x1bUpdate organization details\x1a\xa1\x01Updates an organization\'s display name, external ID, or metadata. Requires a valid organization identifier. Region code cannot be modified through this endpoint.J\x99\x01\n\x03\x32\x30\x30\x12\x91\x01\nTReturns the updated organization with all current details reflected in the response.\x12\x39\n7\x1a\x35.scalekit.v1.organizations.UpdateOrganizationResponse\x82\xb5\x18\x17\n\x13organizations_write\x18T\x82\xd3\xe4\x93\x02*2\x1a/api/v1/organizations/{id}:\x0corganization\x12\xde\x03\n\x0fGetOrganization\x12\x31.scalekit.v1.organizations.GetOrganizationRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xe3\x02\x92\x41\xa3\x02\n\rOrganizations\x12\x18Get organization details\x1a]Retrieves organization details by Scalekit ID, including name, region, metadata, and settingsJ\x98\x01\n\x03\x32\x30\x30\x12\x90\x01\nVReturns the complete organization object with ID, display name, settings, and metadata\x12\x36\n4\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/organizations/{id}\x12\xd3\x05\n\x1bGetOrganizationByExternalId\x12\x31.scalekit.v1.organizations.GetOrganizationRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xcc\x04\x92\x41\xfa\x03\n\rOrganizations\x12\'Get organization details by external Id\x1a]Retrieves organization details by External ID, including name, region, metadata, and settingsJ\xa4\x01\n\x03\x32\x30\x30\x12\x9c\x01\nbReturns the complete organization object with ID, display name, settings, external ID and metadata\x12\x36\n4\x1a\x32.scalekit.v1.organizations.GetOrganizationResponseJa\n\x03\x34\x30\x30\x12Z\nXInvalid request - external ID is empty or the caller\'s organization claim does not matchJW\n\x03\x34\x30\x34\x12P\nNOrganization not found - no organization exists with the specified external ID\x82\xb5\x18\x16\n\x12organizations_read\x18\x04\x82\xd3\xe4\x93\x02.\x12,/api/v1/organizations:external/{external_id}\x12\xc2\t\n\x10ListOrganization\x12\x33.scalekit.v1.organizations.ListOrganizationsRequest\x1a\x34.scalekit.v1.organizations.ListOrganizationsResponse\"\xc2\x08\x92\x41\x9b\x08\n\rOrganizations\x12\x12List organizations\x1a\xa0\x01Retrieve a paginated list of organizations within your environment. The response includes a `page_token` that can be used to access subsequent pages of results.Js\n\x03\x32\x30\x30\x12l\n0Successfully retrieved the list of organizations\x12\x38\n6\x1a\x34.scalekit.v1.organizations.ListOrganizationsResponseJ\x1b\n\x03\x34\x30\x30\x12\x14\n\x12Invalid page tokenj\xc0\x05\n\rx-codeSamples\x12\xae\x05\x32\xab\x05\n\x97\x01*\x94\x01\n\x16\n\x05label\x12\r\x1a\x0bNode.js SDK\n\x14\n\x04lang\x12\x0c\x1a\njavascript\nd\n\x06source\x12Z\x1aXconst organizations = await scalekit.organization.listOrganization({\n pageSize: 10,\n});\n\xc0\x01*\xbd\x01\n\x15\n\x05label\x12\x0c\x1a\nPython SDK\n\x10\n\x04lang\x12\x08\x1a\x06python\n\x91\x01\n\x06source\x12\x86\x01\x1a\x83\x01options = ListOrganizationOptions()\noptions.page_size = 10\n\norganizations = sc.organization.list_organizations(\n options=options\n)\n\xaf\x01*\xac\x01\n\x11\n\x05label\x12\x08\x1a\x06Go SDK\n\x0c\n\x04lang\x12\x04\x1a\x02go\n\x88\x01\n\x06source\x12~\x1a|organizations, err := sc.Organization.ListOrganizations(\n ctx,\n &scalekit.ListOrganizationOptions{\n PageSize: 10,\n }\n)\n\x99\x01*\x96\x01\n\x13\n\x05label\x12\n\x1a\x08Java SDK\n\x0e\n\x04lang\x12\x06\x1a\x04java\no\n\x06source\x12\x65\x1a\x63ListOrganizationsResponse organizations = scalekitClient.organizations().listOrganizations(10, \"\");\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x17\x12\x15/api/v1/organizations\x12\xf1\x04\n\x12SearchOrganization\x12\x35.scalekit.v1.organizations.SearchOrganizationsRequest\x1a\x36.scalekit.v1.organizations.SearchOrganizationsResponse\"\xeb\x03\x92\x41\xae\x03\n\rOrganizations\x12\x14Search organizations\x1a\xd4\x01Searches for organizations in your environment using a query string. The query matches against organization name, ID, or external ID. Returns multiple results when more than one organization matches the criteria.J\xaf\x01\n\x03\x32\x30\x30\x12\xa7\x01\niReturns a list of matching organizations and a page token for pagination if there are additional results.\x12:\n8\x1a\x36.scalekit.v1.organizations.SearchOrganizationsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\x12\x1c/api/v1/organizations:search\x12\xcf\x02\n\x12\x44\x65leteOrganization\x12\x34.scalekit.v1.organizations.DeleteOrganizationRequest\x1a\x16.google.protobuf.Empty\"\xea\x01\x92\x41\xbe\x01\n\rOrganizations\x12\x16\x44\x65lete an organization\x1aPRemove an existing organization from the environment using its unique identifierJC\n\x03\x32\x30\x30\x12<\n:Organization successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1c*\x1a/api/v1/organizations/{id}\x12\xe2\x04\n\x12GeneratePortalLink\x12\x34.scalekit.v1.organizations.GeneratePortalLinkRequest\x1a\x35.scalekit.v1.organizations.GeneratePortalLinkResponse\"\xde\x03\x92\x41\xa5\x03\n\rOrganizations\x12\x1aGenerate admin portal link\x1a\xd5\x01\x43reates a single use Admin Portal URL valid for 1 minute. Once the generated admin portal URL is accessed or rendered, a temporary session of 6 hours is created to allow the admin to update SSO/SCIM configuration.J\x9f\x01\n\x03\x32\x30\x30\x12\x97\x01\nZAdmin Portal link generated successfully. Returns the portal URL and expiration timestamp.\x12\x39\n7\x1a\x35.scalekit.v1.organizations.GeneratePortalLinkResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02)\x1a\'/api/v1/organizations/{id}/portal_links\x12\xa0\x02\n\x10\x44\x65letePortalLink\x12\x32.scalekit.v1.organizations.DeletePortalLinkRequest\x1a\x16.google.protobuf.Empty\"\xbf\x01\x92\x41x\n\x0c\x41\x64min Portal\x12\x12\x44\x65lete portal link\x1a)Revokes and deletes an Admin portal link.J)\n\x03\x32\x30\x30\x12\"\n Portal link deleted successfully\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)*\'/api/v1/organizations/{id}/portal_links\x12\x9f\x02\n\x14\x44\x65letePortalLinkByID\x12\x36.scalekit.v1.organizations.DeletePortalLinkByIdRequest\x1a\x16.google.protobuf.Empty\"\xb6\x01\x92\x41\x65\n\x0c\x41\x64min Portal\x12\x18\x44\x65lete admin portal link\x1a)Revokes and deletes an Admin portal link.J\x10\n\x03\x32\x30\x30\x12\t\n\x07Success\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x33*1/api/v1/organizations/{id}/portal_links/{link_id}\x12\x88\x03\n\x0eGetPortalLinks\x12/.scalekit.v1.organizations.GetPortalLinkRequest\x1a\x31.scalekit.v1.organizations.GetPortalLinksResponse\"\x91\x02\x92\x41\xc9\x01\n\x0c\x41\x64min Portal\x12\x0fGet portal link\x1a_Returns the Admin portal link if it exists. Use Generate Portal link to create and fetch a linkJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.organizations.GetPortalLinksResponse\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)\x12\'/api/v1/organizations/{id}/portal_links\x12\xfa\x06\n\x1aUpdateOrganizationSettings\x12<.scalekit.v1.organizations.UpdateOrganizationSettingsRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xe9\x05\x92\x41\xaa\x05\n\rOrganizations\x12\x1cToggle organization settings\x1a\xd3\x01Updates configuration settings for an organization. Supports modifying SSO configuration, directory synchronization settings, and session parameters. Requires organization ID and the specific settings to update.J\xe3\x01\n\x03\x32\x30\x30\x12\xdb\x01\n\xa0\x01Returns the complete organization object with updated settings applied. Contains all organization details including ID, display name, and the modified settings.\x12\x36\n4\x1a\x32.scalekit.v1.organizations.GetOrganizationResponseJp\n\x03\x34\x30\x30\x12i\ngInvalid request - occurs when the settings payload contains invalid values or unsupported configurationJM\n\x03\x34\x30\x34\x12\x46\nDOrganization not found - the specified organization ID doesn\'t exist\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02/2#/api/v1/organizations/{id}/settings:\x08settings\x12\x82\x06\n\x1fUpdateOrganizationSessionPolicy\x12\x41.scalekit.v1.organizations.UpdateOrganizationSessionPolicyRequest\x1a\x42.scalekit.v1.organizations.UpdateOrganizationSessionPolicyResponse\"\xd7\x04\x92\x41\xe9\x03\n\rOrganizations\x12\"Update organization session policy\x1a\xe2\x02Sets a custom session policy for an organization or reverts to application-level settings. Send policy_source=\'APPLICATION\' to revert to application defaults. Send policy_source=\'CUSTOM\' with timeout values to activate a custom policy. Values are accepted as-is; the system applies the stricter of application and organization values at session creation.J-\n\x03\x32\x30\x30\x12&\n$Session policy updated successfully.J \n\x03\x34\x30\x34\x12\x19\n\x17Organization not found.\x82\xb5\x18 \n\x1csk_org_session_policy_manage\x18t\x82\xd3\xe4\x93\x02@26/api/v1/organizations/{organization_id}/session-policy:\x06policy\x12\xf1\x04\n\x1cGetOrganizationSessionPolicy\x12>.scalekit.v1.organizations.GetOrganizationSessionPolicyRequest\x1a?.scalekit.v1.organizations.GetOrganizationSessionPolicyResponse\"\xcf\x03\x92\x41\xeb\x02\n\rOrganizations\x12\x1fGet organization session policy\x1a\xe5\x01Retrieves the session policy for an organization. Returns policy_source=\'APPLICATION\' if the organization inherits the application-level defaults, or policy_source=\'CUSTOM\' with the configured values if a custom policy is active.J/\n\x03\x32\x30\x30\x12(\n&Session policy retrieved successfully.J \n\x03\x34\x30\x34\x12\x19\n\x17Organization not found.\x82\xb5\x18\x1e\n\x1ask_org_session_policy_read\x18t\x82\xd3\xe4\x93\x02\x38\x12\x36/api/v1/organizations/{organization_id}/session-policy\x12\xd5\x03\n\x1cUpsertUserManagementSettings\x12>.scalekit.v1.organizations.UpsertUserManagementSettingsRequest\x1a?.scalekit.v1.organizations.UpsertUserManagementSettingsResponse\"\xb3\x02\x92\x41\xdf\x01\n\rOrganizations\x12 Upsert organization user setting\x1a\x33Upsert user management settings for an organizationJw\n\x03\x32\x30\x30\x12p\n)Returns the updated organization setting.\x12\x43\nA\x1a?.scalekit.v1.organizations.UpsertUserManagementSettingsResponse\x82\xb5\x18\x02\x18\x64\x82\xd3\xe4\x93\x02\x44\x32?/api/v1/organizations/{organization_id}/settings/usermanagement:\x01*\x12\x9f\x04\n$GetOrganizationUserManagementSetting\x12G.scalekit.v1.organizations.GetOrganizationUserManagementSettingsRequest\x1aH.scalekit.v1.organizations.GetOrganizationUserManagementSettingsResponse\"\xe3\x02\x92\x41\x83\x02\n\rOrganizations\x12(Get organization user management setting\x1a\x43Retrieves the user management settings for a specific organization.J\x82\x01\n\x03\x32\x30\x30\x12{\n+Returns the requested organization setting.\x12L\nJ\x1aH.scalekit.v1.organizations.GetOrganizationUserManagementSettingsResponse\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x41\x12?/api/v1/organizations/{organization_id}/settings/usermanagement\x1aX\x92\x41U\n\rOrganizations\x12\x44{{import \"proto/scalekit/v1/organizations/organization_details.md\"}}B\xa9\'Z7github.com/scalekit-inc/scalekit/pkg/grpc/organizations\x92\x41\xec&\x12\x92\"\n\rScalekit APIs\x12\x83!# Introduction\n\nThe Scalekit API is a RESTful API that enables you to manage organizations, users, and authentication settings. All requests must use HTTPS.\nAll API requests use the following base URLs:\n\n```\nhttps://{environment}.scalekit.dev (Development)\nhttps://{environment}.scalekit.com (Production)\nhttps://auth.example.com (Custom domain)\n```\n\nScalekit operates two separate environments: Development and Production. Resources cannot be moved between environments.\n\n# Authentication\n\nThe Scalekit API uses OAuth 2.0 Client Credentials for authentication.\n\nCopy your API credentials from the Scalekit dashboard\'s API Config section and set them as environment variables.\n\n```sh\nSCALEKIT_ENVIRONMENT_URL=\'\'\nSCALEKIT_CLIENT_ID=\'\'\nSCALEKIT_CLIENT_SECRET=\'\'\n```\n\nGetting an access token\n\n1. Get your credentials from the [Scalekit Dashboard](https://app.scalekit.com)\n2. Request an access token:\n\n```sh\ncurl https://{SCALEKIT_ENVIRONMENT_URL}/oauth/token \\\n -X POST \\\n -H \'Content-Type: application/x-www-form-urlencoded\' \\\n -d \'client_id={client_id}\' \\\n -d \'client_secret={client_secret}\' \\\n -d \'grant_type=client_credentials\'\n```\n\n3. Use the access token in API requests:\n\n```sh\ncurl https://{SCALEKIT_ENVIRONMENT_URL}/api/v1/organizations \\\n -H \'Content-Type: application/json\' \\\n -H \'Authorization: Bearer {access_token}\'\n```\n\nThe response includes an access token:\n\n```json\n{\n\t\"access_token\": \"eyJhbGciOiJSUzI1NiIsImtpZCI6InNua181Ok4OTEyMjU2NiIsInR5cCI6IkpXVCJ9...\",\n\t\"token_type\": \"Bearer\",\n\t\"expires_in\": 86399,\n\t\"scope\": \"openid\"\n}\n```\n\n# SDKs\n\nScalekit provides official SDKs for multiple programming languages. Check the changelog at GitHub repositories for the latest updates.\n\n### Node.js\n\n```sh\nnpm install @scalekit-sdk/node\n```\n\nCreate a new Scalekit client instance after initializing the environment variables\n\n```js\nimport { Scalekit } from \"@scalekit-sdk/node\";\n\nexport let scalekit = new Scalekit(\n\tprocess.env.SCALEKIT_ENVIRONMENT_URL,\n\tprocess.env.SCALEKIT_CLIENT_ID,\n\tprocess.env.SCALEKIT_CLIENT_SECRET\n);\n```\n\n[See the Node SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-node/releases)\n\n### Python\n\n```sh\npip install scalekit-sdk-python\n```\n\nCreate a new Scalekit client instance after initializing the environment variables.\n\n```py\nfrom scalekit import ScalekitClient\nimport os\n\nscalekit_client = ScalekitClient(\n os.environ.get(\'SCALEKIT_ENVIRONMENT_URL\'),\n os.environ.get(\'SCALEKIT_CLIENT_ID\'),\n os.environ.get(\'SCALEKIT_CLIENT_SECRET\')\n)\n```\n\n[See the Python SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-python/releases)\n\n### Go\n\n```sh\ngo get -u github.com/scalekit-inc/scalekit-sdk-go\n```\n\nCreate a new Scalekit client instance after initializing the environment variables.\n\n```go\npackage main\n\nimport (\n \"os\"\n \"github.com/scalekit-inc/scalekit-sdk-go\"\n)\n\nscalekitClient := scalekit.NewScalekitClient(\n os.Getenv(\"SCALEKIT_ENVIRONMENT_URL\"),\n os.Getenv(\"SCALEKIT_CLIENT_ID\"),\n os.Getenv(\"SCALEKIT_CLIENT_SECRET\"),\n)\n```\n\n[See the Go SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-go/releases)\n\n### Java\n\n```gradle\n/* Gradle users - add the following to your dependencies in build file */\nimplementation \"com.scalekit:scalekit-sdk-java:2.0.6\"\n```\n\n```xml\n\n\n com.scalekit\n scalekit-sdk-java\n 2.0.6\n\n```\n\n[See the Java SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-java/releases)\n\n# Error handling\n\nThe API uses standard HTTP status codes:\n\n| Code | Description |\n| ----------- | -------------------- |\n| 200/201 | Success |\n| 400 | Invalid request |\n| 401 | Authentication error |\n| 404 | Resource not found |\n| 429 | Rate limit exceeded |\n| 500/501/504 | Server error |\n\nError responses include detailed information:\n\n```json\n{\n\t\"code\": 16,\n\t\"message\": \"Token empty\",\n\t\"details\": [\n\t\t{\n\t\t\t\"@type\": \"type.googleapis.com/scalekit.v1.errdetails.ErrorInfo\",\n\t\t\t\"error_code\": \"UNAUTHENTICATED\"\n\t\t}\n\t]\n}\n```\n\n\":\n\x0cScalekit Inc\x12\x14https://scalekit.com\x1a\x14support@scalekit.com*8\n\nApache 2.0\x12*http://www.apache.org/licenses/LICENSE-2.02\x05\x31.0.0\x1a\x19$SCALEKIT_ENVIRONMENT_URL*\x01\x02\x32\x10\x61pplication/json:\x10\x61pplication/jsonj\x0f\n\rOrganizationsj\xd4\x03\n\x0bPermissions\x12\xc4\x03Permission management for defining and controlling access to system resources. Create, retrieve, update, and delete granular permissions that represent specific actions users can perform. Permissions are the building blocks of role-based access control (RBAC) and can be assigned to roles to grant users the ability to perform specific operations. Use this service to define custom permissions for your application\'s unique access control requirements.r+\n\rScalekit Docs\x12\x1ahttps://docs.scalekit.com/b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n-scalekit/v1/organizations/organizations.proto\x12\x19scalekit.v1.organizations\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"\xaf\x01\n\x19\x43reateOrganizationRequest\x12\x91\x01\n\x0corganization\x18\x01 \x01(\x0b\x32-.scalekit.v1.organizations.CreateOrganizationB>\x92\x41\x35\x32\x33Required parameters for creating a new organization\xbaH\x03\xc8\x01\x01R\x0corganization\"\xb9\x01\n\x1a\x43reateOrganizationResponse\x12\x9a\x01\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationBM\x92\x41J2HThe newly created organization containing its ID, settings, and metadataR\x0corganization\"\xf8\x07\n\x12\x43reateOrganization\x12\x84\x01\n\x0c\x64isplay_name\x18\x04 \x01(\tBa\x92\x41Q2?Name of the organization. Must be between 1 and 200 characters.J\x0e\"Megasoft Inc\"\xe0\x41\x02\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\xa0\x01\n\x0bregion_code\x18\x05 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeB^\x92\x41L2DGeographic region code for the organization. Currently limited to USJ\x04\"US\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\nregionCode\x12\x9e\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBx\x92\x41u2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x0e\"my_unique_id\"H\x00R\nexternalId\x88\x01\x01\x12r\n\x08metadata\x18\x07 \x03(\x0b\x32;.scalekit.v1.organizations.CreateOrganization.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xcc\x02\n\x04slug\x18\t \x01(\tB\xb2\x02\x92\x41\x84\x02\x32\xd2\x01\x44NS-safe slug for dynamic redirect URI resolution (e.g. acme for https://acme.example.com/callback). Lowercase alphanumeric and hyphens, 1-63 chars, must start and end with alphanumeric, unique per environment.J\x06\"acme\"x?\x80\x01\x01\x8a\x01\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$\xbaH\'r%\x10\x01\x18?2\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$H\x01R\x04slug\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idB\x07\n\x05_slug\"\xf8\n\n\x0cOrganization\x12{\n\x02id\x18\x01 \x01(\tBk\x92\x41h2MUnique scalekit-generated identifier that uniquely references an organizationJ\x17\"org_59615193906282635\"R\x02id\x12\x8c\x01\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBO\x92\x41I2+Timestamp when the organization was createdJ\x1a\"2025-02-15T06:23:44.560Z\"\xe0\x41\x02R\ncreateTime\x12\x8e\x01\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBQ\x92\x41N20Timestamp when the organization was last updatedJ\x1a\"2025-02-15T06:23:44.560Z\"R\nupdateTime\x12|\n\x0c\x64isplay_name\x18\x04 \x01(\tBY\x92\x41L2>Name of the organization. Must be between 1 and 200 charactersJ\n\"Megasoft\"\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\x92\x01\n\x0bregion_code\x18\x05 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeBP\x92\x41M2EGeographic region code for the organization. Currently limited to US.J\x04\"US\"R\nregionCode\x12\x9e\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBx\x92\x41u2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x0e\"my_unique_id\"H\x00R\nexternalId\x88\x01\x01\x12l\n\x08metadata\x18\x07 \x03(\x0b\x32\x35.scalekit.v1.organizations.Organization.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12K\n\x08settings\x18\x08 \x01(\x0b\x32/.scalekit.v1.organizations.OrganizationSettingsR\x08settings\x12\x85\x02\n\x04slug\x18\t \x01(\tB\xeb\x01\x92\x41\xe7\x01\x32\xb5\x01\x44NS-safe slug for dynamic redirect URI resolution. Must be 1-63 chars, lowercase alphanumeric and hyphens, must start and end with an alphanumeric character. Unique per environment.J\x06\"acme\"x?\x80\x01\x01\x8a\x01\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$H\x01R\x04slug\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idB\x07\n\x05_slug\"\xe0\x03\n\x19UpdateOrganizationRequest\x12j\n\x02id\x18\x01 \x01(\tBX\x92\x41L23Unique identifier of the organization to be updatedJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\x85\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tBb\x92\x41I2-External ID of the organization to be updatedJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x83\x01\n\x0corganization\x18\x03 \x01(\x0b\x32-.scalekit.v1.organizations.UpdateOrganizationB0\x92\x41\'2%Organization Parameters to be updated\xbaH\x03\xc8\x01\x01R\x0corganization\x12;\n\x0bupdate_mask\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskR\nupdateMaskB\x0c\n\nidentities\"\x87\x08\n\x12UpdateOrganization\x12\x9e\x01\n\x0c\x64isplay_name\x18\x04 \x01(\tBv\x92\x41i2SName of the organization to display in the UI. Must be between 1 and 200 charactersJ\x12\"Acme Corporation\"\xbaH\x07r\x05\x10\x01\x18\xc8\x01H\x00R\x0b\x64isplayName\x88\x01\x01\x12\x9d\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBw\x92\x41t2bYour application\'s unique identifier for this organization, used to link Scalekit with your systemJ\x0e\"tenant_12345\"H\x01R\nexternalId\x88\x01\x01\x12\xa5\x02\n\x08metadata\x18\x07 \x03(\x0b\x32;.scalekit.v1.organizations.UpdateOrganization.MetadataEntryB\xcb\x01\x92\x41\xae\x01\x32\x8f\x01\x43ustom key-value pairs to store with the organization. Keys must be 3-25 characters, values must be 1-256 characters. Maximum 10 pairs allowed.J\x1a{\"industry\": \"technology\"}\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\x9a\x02\n\x04slug\x18\t \x01(\tB\x80\x02\x92\x41\xd2\x01\x32\xa0\x01\x44NS-safe slug for dynamic redirect URI resolution. Lowercase alphanumeric and hyphens, 1-63 chars, must start and end with alphanumeric, unique per environment.J\x06\"acme\"x?\x80\x01\x01\x8a\x01\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$\xbaH\'r%\x10\x01\x18?2\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$H\x02R\x04slug\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0f\n\r_display_nameB\x0e\n\x0c_external_idB\x07\n\x05_slugJ\x04\x08\x05\x10\x06\"\x8c\x01\n\x1aUpdateOrganizationResponse\x12n\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationB!\x92\x41\x1e\x32\x1cUpdated organization detailsR\x0corganization\"\xeb\x02\n\x16GetOrganizationRequest\x12\x84\x01\n\x02id\x18\x01 \x01(\tBr\x92\x41\x66\x32MUnique scalekit-generated identifier that uniquely references an organizationJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\xbb\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\x97\x01\x92\x41~2bUnique identifier that links an Organization Object to your app\'s tenant, stored as an External IDJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalIdB\x0c\n\nidentities\"\x8b\x01\n\x17GetOrganizationResponse\x12p\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationB#\x92\x41 2\x1eThe newly created organizationR\x0corganization\"\xe0\x05\n\x18ListOrganizationsRequest\x12t\n\tpage_size\x18\x01 \x01(\rBW\x92\x41T2NMaximum number of organizations to return per page. Must be between 10 and 100J\x02\x33\x30R\x08pageSize\x12\x8f\x01\n\npage_token\x18\x02 \x01(\tBp\x92\x41m2[Pagination token from the previous response. Use to retrieve the next page of organizationsJ\x0e\"\"R\tpageToken\x12\xa8\x01\n\x0b\x65xternal_id\x18\x03 \x01(\tB\x81\x01\x92\x41~2bYour application\'s unique identifier for this organization, used to link Scalekit with your systemJ\x18\"\"H\x00R\nexternalId\x88\x01\x01:\x80\x02\x92\x41\xfc\x01\n\xab\x01*\x12List Organizations2\x94\x01Retrieves a paginated list of all organizations within the environment. Use the `page_token` from the response to access subsequent pages of results*L\n\x12List Organizations\x12\x36https://docs.scalekit.com/reference/list-organizationsB\x0e\n\x0c_external_id\"\xa4\x04\n\x19ListOrganizationsResponse\x12\x97\x01\n\x0fnext_page_token\x18\x01 \x01(\tBo\x92\x41l2UPagination token for the next page of results. Use this token to fetch the next page.J\x13\"\"R\rnextPageToken\x12Y\n\ntotal_size\x18\x02 \x01(\rB:\x92\x41\x37\x32\x31Total number of organizations in the environment.J\x02\x33\x30R\ttotalSize\x12p\n\rorganizations\x18\x03 \x03(\x0b\x32\'.scalekit.v1.organizations.OrganizationB!\x92\x41\x1e\x32\x1cList of organization objectsR\rorganizations\x12\x9f\x01\n\x0fprev_page_token\x18\x04 \x01(\tBw\x92\x41t2]Pagination token for the previous page of results. Use this token to fetch the previous page.J\x13\"\"R\rprevPageToken\"\xa7\x05\n\x1aSearchOrganizationsRequest\x12\xa5\x01\n\x05query\x18\x01 \x01(\tB\x8e\x01\x92\x41\x7f\x32wSearch term to match against organization names, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\x04\x61\x63me\xbaH\tr\x04\x10\x03\x18\x64\xc8\x01\x01R\x05query\x12\x80\x01\n\tpage_size\x18\x02 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x03 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken:\xb5\x01\x92\x41\xb1\x01\n\x88\x01*\x14Search Organizations2pSearch for organizations in your environment using a text query that matches against names, IDs, or external IDs2$query=acme&page_size=30&page_token=1\"\xdb\x01\n\x1bSearchOrganizationsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12M\n\rorganizations\x18\x03 \x03(\x0b\x32\'.scalekit.v1.organizations.OrganizationR\rorganizations\x12&\n\x0fprev_page_token\x18\x04 \x01(\tR\rprevPageToken\"\xad\x02\n\x19\x44\x65leteOrganizationRequest\x12~\n\x02id\x18\x01 \x01(\tBl\x92\x41`2MUnique scalekit-generated identifier that uniquely references an organizationJ\x0f\"org_123456789\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\x81\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB^\x92\x41\x45\x32)External ID of the organization to deleteJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalIdB\x0c\n\nidentities\"\xcf\x04\n\x19GeneratePortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12(\n\x03sso\x18\x02 \x01(\x08\x42\x11\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\x03sso\x88\x01\x01\x12=\n\x0e\x64irectory_sync\x18\x03 \x01(\x08\x42\x11\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\rdirectorySync\x88\x01\x01\x12\xdd\x02\n\x08\x66\x65\x61tures\x18\x04 \x03(\x0e\x32\".scalekit.v1.organizations.FeatureB\x9c\x02\x92\x41\x98\x02\x32\x95\x02\x46\x65\x61tures to enable in the admin portal link. To enable features, append them as URL parameters:\n\n- Single Sign-On: ?features=sso\n- Directory Sync: ?features=dir_sync\n- Both features: ?features=sso&features=dir_sync\n\nExample URL: https://scalekit.com/portal/lnk_123?features=ssoR\x08\x66\x65\x61turesB\x06\n\x04_ssoB\x11\n\x0f_directory_sync\"f\n\x14GetPortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\"i\n\x17\x44\x65letePortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\"\xbe\x01\n\x1b\x44\x65letePortalLinkByIdRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12O\n\x07link_id\x18\x02 \x01(\tB6\x92\x41!2\x07Link IDJ\x16\"lnk_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04lnk_\xc8\x01\x01R\x06linkId\"\xb5\x03\n\x04Link\x12J\n\x02id\x18\x01 \x01(\tB:\x92\x41\x37\x32\x1eUnique Identifier for the linkJ\x15\"lnk_123123123123123\"R\x02id\x12\xc7\x01\n\x08location\x18\x02 \x01(\tB\xaa\x01\x92\x41\xa6\x01\x32qLocation of the link. This is the URL that can be used to access the Admin portal. The link is valid for 1 minuteJ1\"https://scalekit.com/portal/lnk_123123123123123\"R\x08location\x12\x96\x01\n\x0b\x65xpire_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBY\x92\x41V28Expiry time of the link. The link is valid for 1 minute.J\x1a\"2024-02-06T14:48:00.000Z\"R\nexpireTime\"\x96\x02\n\x1aGeneratePortalLinkResponse\x12\xf7\x01\n\x04link\x18\x01 \x01(\x0b\x32\x1f.scalekit.v1.organizations.LinkB\xc1\x01\x92\x41\xbd\x01\x32\xba\x01\x43ontains the generated admin portal link details. The link URL can be shared with organization administrators to set up: Single Sign-On (SSO) authentication and directory synchronizationR\x04link\"h\n\x16GetPortalLinksResponse\x12N\n\x05links\x18\x01 \x03(\x0b\x32\x1f.scalekit.v1.organizations.LinkB\x17\x92\x41\x14\x32\x12\x41\x64min Portal LinksR\x05links\"\x90\x04\n!UpdateOrganizationSettingsRequest\x12\x97\x01\n\x02id\x18\x01 \x01(\tB\x86\x01\x92\x41q2WUnique identifier of the organization to update settings. Must begin with \'org_\' prefixJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12\xd0\x02\n\x08settings\x18\x02 \x01(\x0b\x32/.scalekit.v1.organizations.OrganizationSettingsB\x82\x02\x92\x41\xf8\x01\x32\x95\x01Settings configuration to apply to the organization. Contains feature toggles for SSO, directory synchronization, and other organization capabilitiesJ^{\"features\": [{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]}\xbaH\x03\xc8\x01\x01R\x08settings\"\x91\x0c\n!OrganizationSessionPolicySettings\x12\x92\x02\n\rpolicy_source\x18\x01 \x01(\x0e\x32,.scalekit.v1.organizations.SessionPolicyTypeB\xbe\x01\x92\x41\xaf\x01\x32\xa2\x01Policy source. \'APPLICATION\' means the organization inherits the application-level session policy. \'CUSTOM\' means organization-specific timeout values are active.J\x08\"CUSTOM\"\xbaH\x08\x82\x01\x05\x10\x01\"\x01\x00R\x0cpolicySource\x12\xec\x01\n\x18\x61\x62solute_session_timeout\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x94\x01\x92\x41\x90\x01\x32\x88\x01The absolute session timeout value. The unit is specified by absolute_session_timeout_unit. Omitted when policy_source is \'environment\'.J\x03\x33\x36\x30R\x16\x61\x62soluteSessionTimeout\x12\xea\x01\n\x1d\x61\x62solute_session_timeout_unit\x18\x03 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitB\x82\x01\x92\x41\x7f\x32rUnit for absolute_session_timeout. Accepted values: \'minutes\', \'hours\', \'days\'. Responses always return \'minutes\'.J\t\"minutes\"H\x00R\x1a\x61\x62soluteSessionTimeoutUnit\x88\x01\x01\x12\xd3\x01\n\x1cidle_session_timeout_enabled\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBv\x92\x41s2kWhether idle session timeout is enabled for this organization. Omitted when policy_source is \'environment\'.J\x04trueR\x19idleSessionTimeoutEnabled\x12\x84\x02\n\x14idle_session_timeout\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xb4\x01\x92\x41\xb0\x01\x32\xa9\x01The idle session timeout value. The unit is specified by idle_session_timeout_unit. Omitted when idle_session_timeout_enabled is false or policy_source is \'environment\'.J\x02\x38\x34R\x12idleSessionTimeout\x12\xdd\x01\n\x19idle_session_timeout_unit\x18\x06 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitB~\x92\x41{2nUnit for idle_session_timeout. Accepted values: \'minutes\', \'hours\', \'days\'. Responses always return \'minutes\'.J\t\"minutes\"H\x01R\x16idleSessionTimeoutUnit\x88\x01\x01\x42 \n\x1e_absolute_session_timeout_unitB\x1c\n\x1a_idle_session_timeout_unit\"\xd4\x01\n#GetOrganizationSessionPolicyRequest\x12\xac\x01\n\x0forganization_id\x18\x01 \x01(\tB\x82\x01\x92\x41m2RThe unique identifier of the organization whose session policy is being requested.J\x17\"org_59615193906282635\"\xe0\x41\x02\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\"\xac\x01\n$GetOrganizationSessionPolicyResponse\x12\x83\x01\n\x06policy\x18\x01 \x01(\x0b\x32<.scalekit.v1.organizations.OrganizationSessionPolicySettingsB-\x92\x41*2(The session policy for the organization.R\x06policy\"\xb7\x0c\n&UpdateOrganizationSessionPolicyRequest\x12\xaa\x01\n\x0forganization_id\x18\x01 \x01(\tB\x80\x01\x92\x41k2PThe unique identifier of the organization whose session policy is being updated.J\x17\"org_59615193906282635\"\xe0\x41\x02\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xe8\x01\n\rpolicy_source\x18\x02 \x01(\x0e\x32,.scalekit.v1.organizations.SessionPolicyTypeB\x94\x01\x92\x41\x90\x01\x32\x83\x01Policy source. Send \'APPLICATION\' to revert to application defaults. Send \'CUSTOM\' with timeout values to activate a custom policy.J\x08\"CUSTOM\"R\x0cpolicySource\x12\xe7\x01\n\x18\x61\x62solute_session_timeout\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x8f\x01\x92\x41\x8b\x01\x32\x83\x01The absolute session timeout value. The unit is specified by absolute_session_timeout_unit. Omit when policy_source is APPLICATION.J\x03\x33\x36\x30R\x16\x61\x62soluteSessionTimeout\x12\xdb\x01\n\x1d\x61\x62solute_session_timeout_unit\x18\x04 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitBt\x92\x41q2dUnit for absolute_session_timeout. Accepted values: \'MINUTES\', \'HOURS\', \'DAYS\'. Defaults to MINUTES.J\t\"MINUTES\"H\x00R\x1a\x61\x62soluteSessionTimeoutUnit\x88\x01\x01\x12\xb8\x01\n\x1cidle_session_timeout_enabled\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB[\x92\x41X2PWhether idle session timeout is enabled. Omit when policy_source is APPLICATION.J\x04trueR\x19idleSessionTimeoutEnabled\x12\xdf\x01\n\x14idle_session_timeout\x18\x06 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x8f\x01\x92\x41\x8b\x01\x32\x84\x01The idle session timeout value. The unit is specified by idle_session_timeout_unit. Omit when idle_session_timeout_enabled is false.J\x02\x38\x34R\x12idleSessionTimeout\x12\xcf\x01\n\x19idle_session_timeout_unit\x18\x07 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitBp\x92\x41m2`Unit for idle_session_timeout. Accepted values: \'MINUTES\', \'HOURS\', \'DAYS\'. Defaults to MINUTES.J\t\"MINUTES\"H\x01R\x16idleSessionTimeoutUnit\x88\x01\x01\x42 \n\x1e_absolute_session_timeout_unitB\x1c\n\x1a_idle_session_timeout_unit\"\xb7\x01\n\'UpdateOrganizationSessionPolicyResponse\x12\x8b\x01\n\x06policy\x18\x01 \x01(\x0b\x32<.scalekit.v1.organizations.OrganizationSessionPolicySettingsB5\x92\x41\x32\x32\x30The updated session policy for the organization.R\x06policy\"\xaa\x01\n\"GetApplicationSessionPolicyRequest\x12\x83\x01\n\x0forganization_id\x18\x01 \x01(\tBZ\x92\x41\x45\x32*The unique identifier of the organization.J\x17\"org_59615193906282635\"\xe0\x41\x02\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\"\x9e\x04\n ApplicationSessionPolicySettings\x12h\n\x18\x61\x62solute_session_timeout\x18\x01 \x01(\x05\x42.\x92\x41+2$Absolute session timeout in minutes.J\x03\x34\x38\x30R\x16\x61\x62soluteSessionTimeout\x12\x8e\x01\n\x1cidle_session_timeout_enabled\x18\x02 \x01(\x08\x42M\x92\x41J2AWhether idle session timeout is enabled at the application level.J\x05\x66\x61lseR\x19idleSessionTimeoutEnabled\x12\x7f\n\x14idle_session_timeout\x18\x03 \x01(\x05\x42M\x92\x41J2DIdle session timeout in minutes. Zero when idle timeout is disabled.J\x02\x36\x30R\x12idleSessionTimeout\x12~\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x04 \x01(\x05\x42N\x92\x41K2FAccess token expiry in minutes. Custom policy values must exceed this.J\x01\x35R\x11\x61\x63\x63\x65ssTokenExpiry\"\xd1\x01\n#GetApplicationSessionPolicyResponse\x12\xa9\x01\n\x12\x61pplication_policy\x18\x01 \x01(\x0b\x32;.scalekit.v1.organizations.ApplicationSessionPolicySettingsB=\x92\x41:28The effective application-level session policy settings.R\x11\x61pplicationPolicy\"\xdc\x02\n\"OrganizationUserManagementSettings\x12\xb5\x02\n\x11max_allowed_users\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xeb\x01\x92\x41\xe7\x01\x32\xdf\x01Maximum number of users allowed in the organization. When nil (not set), there feature is not enabled. When explicitly set to zero, it also means no limit. When set to a positive integer, it enforces the maximum user limit.J\x03\x31\x30\x30R\x0fmaxAllowedUsers\"\xae\x08\n\x1bOrganizationSessionSettings\x12\xfe\x01\n\x18\x61\x62solute_session_timeout\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xa6\x01\x92\x41\xa2\x01\x32\x98\x01The maximum duration in seconds that a session can remain active, regardless of activity. After this time, the user will be required to re-authenticate.J\x05\x38\x36\x34\x30\x30R\x16\x61\x62soluteSessionTimeout\x12\xd4\x01\n\x14idle_session_timeout\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x84\x01\x92\x41\x80\x01\x32xThe duration in seconds that a session can remain idle before it is automatically terminated. Activity resets the timer.J\x04\x31\x38\x30\x30R\x12idleSessionTimeout\x12\x8e\x02\n\x1cidle_session_timeout_enabled\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xb0\x01\x92\x41\xac\x01\x32\xa3\x01Whether idle session timeout is enabled for this organization. When enabled, sessions expire after the idle timeout duration regardless of the environment setting.J\x04trueR\x19idleSessionTimeoutEnabled\x12\xe7\x01\n\rpolicy_source\x18\x06 \x01(\tB\xc1\x01\x92\x41\xbd\x01\x32\xb0\x01Policy source for this organization. APPLICATION means the organization inherits application-level session policy. CUSTOM means organization-specific timeout values are active.J\x08\"CUSTOM\"R\x0cpolicySourceJ\x04\x08\x02\x10\x03J\x04\x08\x04\x10\x05R\x1asession_management_enabledR\x14idle_session_enabled\"\x8e\x04\n\x14OrganizationSettings\x12\xa4\x02\n\x08\x66\x65\x61tures\x18\x01 \x03(\x0b\x32\x36.scalekit.v1.organizations.OrganizationSettingsFeatureB\xcf\x01\x92\x41\xcb\x01\x32wList of feature toggles that control organization capabilities such as SSO authentication and directory synchronizationJP[{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]R\x08\x66\x65\x61tures:\xce\x01\x92\x41\xca\x01\nh*\x15Organization Settings2OConfiguration options that control organization-level features and capabilities2^{\"features\": [{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]}\"\xe1\x03\n\x1bOrganizationSettingsFeature\x12\xd4\x01\n\x04name\x18\x01 \x01(\tB\xbf\x01\x92\x41\xbb\x01\x32\xb1\x01\x46\x65\x61ture identifier. Supported values include: \"sso\" (Single Sign-On), \"directory_sync\" (Directory Synchronization), \"session_policy\" (Organization-level session policy override)J\x05\"sso\"R\x04name\x12t\n\x07\x65nabled\x18\x02 \x01(\x08\x42Z\x92\x41W2OWhether the feature is enabled (true) or disabled (false) for this organizationJ\x04trueR\x07\x65nabled:u\x92\x41r\np*\x1bOrganization Feature Toggle2@Controls the activation state of a specific organization feature\xd2\x01\x04name\xd2\x01\x07\x65nabled\"\x96\x02\n#UpsertUserManagementSettingsRequest\x12W\n\x0forganization_id\x18\x01 \x01(\tB.\x92\x41\x19\x32\x17ID of the organization.\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\x12\x95\x01\n\x08settings\x18\x02 \x01(\x0b\x32=.scalekit.v1.organizations.OrganizationUserManagementSettingsB:\x92\x41\x31\x32/The new values for the setting fields to patch.\xbaH\x03\xc8\x01\x01R\x08settings\"\x9c\x01\n$UpsertUserManagementSettingsResponse\x12t\n\x08settings\x18\x01 \x01(\x0b\x32=.scalekit.v1.organizations.OrganizationUserManagementSettingsB\x19\x92\x41\x16\x32\x14The updated setting.R\x08settings\"\x87\x01\n,GetOrganizationUserManagementSettingsRequest\x12W\n\x0forganization_id\x18\x01 \x01(\tB.\x92\x41\x19\x32\x17ID of the organization.\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\"\xaf\x01\n-GetOrganizationUserManagementSettingsResponse\x12~\n\x08settings\x18\x01 \x01(\x0b\x32=.scalekit.v1.organizations.OrganizationUserManagementSettingsB#\x92\x41 2\x1eList of organization settings.R\x08settings*R\n\x07\x46\x65\x61ture\x12\x17\n\x13\x46\x45\x41TURE_UNSPECIFIED\x10\x00\x12\x13\n\x0bUNSPECIFIED\x10\x00\x1a\x02\x08\x01\x12\x0c\n\x08\x64ir_sync\x10\x01\x12\x07\n\x03sso\x10\x02\x1a\x02\x10\x01*U\n\x11SessionPolicyType\x12#\n\x1fSESSION_POLICY_TYPE_UNSPECIFIED\x10\x00\x12\x0f\n\x0b\x41PPLICATION\x10\x01\x12\n\n\x06\x43USTOM\x10\x02\x32\xaaP\n\x13OrganizationService\x12\x88\x04\n\x12\x43reateOrganization\x12\x34.scalekit.v1.organizations.CreateOrganizationRequest\x1a\x35.scalekit.v1.organizations.CreateOrganizationResponse\"\x84\x03\x92\x41\xcf\x02\n\rOrganizations\x12\x16\x43reate an organization\x1a\x8f\x01\x43reates a new organization in your environment. Use this endpoint to add a new tenant that can be configured with various settings and metadataJ\x93\x01\n\x03\x32\x30\x31\x12\x8b\x01\nNReturns the newly created organization with its unique identifier and settings\x12\x39\n7\x1a\x35.scalekit.v1.organizations.CreateOrganizationResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02%\"\x15/api/v1/organizations:\x0corganization\x12\xbf\x04\n\x12UpdateOrganization\x12\x34.scalekit.v1.organizations.UpdateOrganizationRequest\x1a\x35.scalekit.v1.organizations.UpdateOrganizationResponse\"\xbb\x03\x92\x41\xec\x02\n\rOrganizations\x12\x1bUpdate organization details\x1a\xa1\x01Updates an organization\'s display name, external ID, or metadata. Requires a valid organization identifier. Region code cannot be modified through this endpoint.J\x99\x01\n\x03\x32\x30\x30\x12\x91\x01\nTReturns the updated organization with all current details reflected in the response.\x12\x39\n7\x1a\x35.scalekit.v1.organizations.UpdateOrganizationResponse\x82\xb5\x18\x17\n\x13organizations_write\x18T\x82\xd3\xe4\x93\x02*2\x1a/api/v1/organizations/{id}:\x0corganization\x12\xde\x03\n\x0fGetOrganization\x12\x31.scalekit.v1.organizations.GetOrganizationRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xe3\x02\x92\x41\xa3\x02\n\rOrganizations\x12\x18Get organization details\x1a]Retrieves organization details by Scalekit ID, including name, region, metadata, and settingsJ\x98\x01\n\x03\x32\x30\x30\x12\x90\x01\nVReturns the complete organization object with ID, display name, settings, and metadata\x12\x36\n4\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/organizations/{id}\x12\xd3\x05\n\x1bGetOrganizationByExternalId\x12\x31.scalekit.v1.organizations.GetOrganizationRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xcc\x04\x92\x41\xfa\x03\n\rOrganizations\x12\'Get organization details by external Id\x1a]Retrieves organization details by External ID, including name, region, metadata, and settingsJ\xa4\x01\n\x03\x32\x30\x30\x12\x9c\x01\nbReturns the complete organization object with ID, display name, settings, external ID and metadata\x12\x36\n4\x1a\x32.scalekit.v1.organizations.GetOrganizationResponseJa\n\x03\x34\x30\x30\x12Z\nXInvalid request - external ID is empty or the caller\'s organization claim does not matchJW\n\x03\x34\x30\x34\x12P\nNOrganization not found - no organization exists with the specified external ID\x82\xb5\x18\x16\n\x12organizations_read\x18\x04\x82\xd3\xe4\x93\x02.\x12,/api/v1/organizations:external/{external_id}\x12\xc2\t\n\x10ListOrganization\x12\x33.scalekit.v1.organizations.ListOrganizationsRequest\x1a\x34.scalekit.v1.organizations.ListOrganizationsResponse\"\xc2\x08\x92\x41\x9b\x08\n\rOrganizations\x12\x12List organizations\x1a\xa0\x01Retrieve a paginated list of organizations within your environment. The response includes a `page_token` that can be used to access subsequent pages of results.Js\n\x03\x32\x30\x30\x12l\n0Successfully retrieved the list of organizations\x12\x38\n6\x1a\x34.scalekit.v1.organizations.ListOrganizationsResponseJ\x1b\n\x03\x34\x30\x30\x12\x14\n\x12Invalid page tokenj\xc0\x05\n\rx-codeSamples\x12\xae\x05\x32\xab\x05\n\x97\x01*\x94\x01\n\x16\n\x05label\x12\r\x1a\x0bNode.js SDK\n\x14\n\x04lang\x12\x0c\x1a\njavascript\nd\n\x06source\x12Z\x1aXconst organizations = await scalekit.organization.listOrganization({\n pageSize: 10,\n});\n\xc0\x01*\xbd\x01\n\x15\n\x05label\x12\x0c\x1a\nPython SDK\n\x10\n\x04lang\x12\x08\x1a\x06python\n\x91\x01\n\x06source\x12\x86\x01\x1a\x83\x01options = ListOrganizationOptions()\noptions.page_size = 10\n\norganizations = sc.organization.list_organizations(\n options=options\n)\n\xaf\x01*\xac\x01\n\x11\n\x05label\x12\x08\x1a\x06Go SDK\n\x0c\n\x04lang\x12\x04\x1a\x02go\n\x88\x01\n\x06source\x12~\x1a|organizations, err := sc.Organization.ListOrganizations(\n ctx,\n &scalekit.ListOrganizationOptions{\n PageSize: 10,\n }\n)\n\x99\x01*\x96\x01\n\x13\n\x05label\x12\n\x1a\x08Java SDK\n\x0e\n\x04lang\x12\x06\x1a\x04java\no\n\x06source\x12\x65\x1a\x63ListOrganizationsResponse organizations = scalekitClient.organizations().listOrganizations(10, \"\");\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x17\x12\x15/api/v1/organizations\x12\xf1\x04\n\x12SearchOrganization\x12\x35.scalekit.v1.organizations.SearchOrganizationsRequest\x1a\x36.scalekit.v1.organizations.SearchOrganizationsResponse\"\xeb\x03\x92\x41\xae\x03\n\rOrganizations\x12\x14Search organizations\x1a\xd4\x01Searches for organizations in your environment using a query string. The query matches against organization name, ID, or external ID. Returns multiple results when more than one organization matches the criteria.J\xaf\x01\n\x03\x32\x30\x30\x12\xa7\x01\niReturns a list of matching organizations and a page token for pagination if there are additional results.\x12:\n8\x1a\x36.scalekit.v1.organizations.SearchOrganizationsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\x12\x1c/api/v1/organizations:search\x12\xcf\x02\n\x12\x44\x65leteOrganization\x12\x34.scalekit.v1.organizations.DeleteOrganizationRequest\x1a\x16.google.protobuf.Empty\"\xea\x01\x92\x41\xbe\x01\n\rOrganizations\x12\x16\x44\x65lete an organization\x1aPRemove an existing organization from the environment using its unique identifierJC\n\x03\x32\x30\x30\x12<\n:Organization successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1c*\x1a/api/v1/organizations/{id}\x12\xe2\x04\n\x12GeneratePortalLink\x12\x34.scalekit.v1.organizations.GeneratePortalLinkRequest\x1a\x35.scalekit.v1.organizations.GeneratePortalLinkResponse\"\xde\x03\x92\x41\xa5\x03\n\rOrganizations\x12\x1aGenerate admin portal link\x1a\xd5\x01\x43reates a single use Admin Portal URL valid for 1 minute. Once the generated admin portal URL is accessed or rendered, a temporary session of 6 hours is created to allow the admin to update SSO/SCIM configuration.J\x9f\x01\n\x03\x32\x30\x30\x12\x97\x01\nZAdmin Portal link generated successfully. Returns the portal URL and expiration timestamp.\x12\x39\n7\x1a\x35.scalekit.v1.organizations.GeneratePortalLinkResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02)\x1a\'/api/v1/organizations/{id}/portal_links\x12\xa0\x02\n\x10\x44\x65letePortalLink\x12\x32.scalekit.v1.organizations.DeletePortalLinkRequest\x1a\x16.google.protobuf.Empty\"\xbf\x01\x92\x41x\n\x0c\x41\x64min Portal\x12\x12\x44\x65lete portal link\x1a)Revokes and deletes an Admin portal link.J)\n\x03\x32\x30\x30\x12\"\n Portal link deleted successfully\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)*\'/api/v1/organizations/{id}/portal_links\x12\x9f\x02\n\x14\x44\x65letePortalLinkByID\x12\x36.scalekit.v1.organizations.DeletePortalLinkByIdRequest\x1a\x16.google.protobuf.Empty\"\xb6\x01\x92\x41\x65\n\x0c\x41\x64min Portal\x12\x18\x44\x65lete admin portal link\x1a)Revokes and deletes an Admin portal link.J\x10\n\x03\x32\x30\x30\x12\t\n\x07Success\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x33*1/api/v1/organizations/{id}/portal_links/{link_id}\x12\x88\x03\n\x0eGetPortalLinks\x12/.scalekit.v1.organizations.GetPortalLinkRequest\x1a\x31.scalekit.v1.organizations.GetPortalLinksResponse\"\x91\x02\x92\x41\xc9\x01\n\x0c\x41\x64min Portal\x12\x0fGet portal link\x1a_Returns the Admin portal link if it exists. Use Generate Portal link to create and fetch a linkJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.organizations.GetPortalLinksResponse\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)\x12\'/api/v1/organizations/{id}/portal_links\x12\xfa\x06\n\x1aUpdateOrganizationSettings\x12<.scalekit.v1.organizations.UpdateOrganizationSettingsRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xe9\x05\x92\x41\xaa\x05\n\rOrganizations\x12\x1cToggle organization settings\x1a\xd3\x01Updates configuration settings for an organization. Supports modifying SSO configuration, directory synchronization settings, and session parameters. Requires organization ID and the specific settings to update.J\xe3\x01\n\x03\x32\x30\x30\x12\xdb\x01\n\xa0\x01Returns the complete organization object with updated settings applied. Contains all organization details including ID, display name, and the modified settings.\x12\x36\n4\x1a\x32.scalekit.v1.organizations.GetOrganizationResponseJp\n\x03\x34\x30\x30\x12i\ngInvalid request - occurs when the settings payload contains invalid values or unsupported configurationJM\n\x03\x34\x30\x34\x12\x46\nDOrganization not found - the specified organization ID doesn\'t exist\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02/2#/api/v1/organizations/{id}/settings:\x08settings\x12\xd0\x05\n\x1fUpdateOrganizationSessionPolicy\x12\x41.scalekit.v1.organizations.UpdateOrganizationSessionPolicyRequest\x1a\x42.scalekit.v1.organizations.UpdateOrganizationSessionPolicyResponse\"\xa5\x04\x92\x41\xbc\x03\n\rOrganizations\x12\"Update organization session policy\x1a\xed\x01Sets a custom session policy for an organization or reverts to application-level settings. Send session_policy=\'APPLICATION\' to revert to application defaults. Send session_policy=\'CUSTOM\' with timeout values to activate a custom policy.Ju\n\x03\x32\x30\x30\x12n\n$Session policy updated successfully.\x12\x46\nD\x1a\x42.scalekit.v1.organizations.UpdateOrganizationSessionPolicyResponseJ \n\x03\x34\x30\x34\x12\x19\n\x17Organization not found.\x82\xb5\x18 \n\x1corganizations_sessions_write\x18T\x82\xd3\xe4\x93\x02;26/api/v1/organizations/{organization_id}/session-policy:\x01*\x12\xb9\x05\n\x1cGetOrganizationSessionPolicy\x12>.scalekit.v1.organizations.GetOrganizationSessionPolicyRequest\x1a?.scalekit.v1.organizations.GetOrganizationSessionPolicyResponse\"\x97\x04\x92\x41\xb2\x03\n\rOrganizations\x12\x1fGet organization session policy\x1a\xe7\x01Retrieves the session policy for an organization. Returns session_policy=\'APPLICATION\' if the organization inherits the application-level defaults, or session_policy=\'CUSTOM\' with the configured values if a custom policy is active.Jt\n\x03\x32\x30\x30\x12m\n&Session policy retrieved successfully.\x12\x43\nA\x1a?.scalekit.v1.organizations.GetOrganizationSessionPolicyResponseJ \n\x03\x34\x30\x34\x12\x19\n\x17Organization not found.\x82\xb5\x18\x1f\n\x1borganizations_sessions_read\x18T\x82\xd3\xe4\x93\x02\x38\x12\x36/api/v1/organizations/{organization_id}/session-policy\x12\xd5\x03\n\x1cUpsertUserManagementSettings\x12>.scalekit.v1.organizations.UpsertUserManagementSettingsRequest\x1a?.scalekit.v1.organizations.UpsertUserManagementSettingsResponse\"\xb3\x02\x92\x41\xdf\x01\n\rOrganizations\x12 Upsert organization user setting\x1a\x33Upsert user management settings for an organizationJw\n\x03\x32\x30\x30\x12p\n)Returns the updated organization setting.\x12\x43\nA\x1a?.scalekit.v1.organizations.UpsertUserManagementSettingsResponse\x82\xb5\x18\x02\x18\x64\x82\xd3\xe4\x93\x02\x44\x32?/api/v1/organizations/{organization_id}/settings/usermanagement:\x01*\x12\x9f\x04\n$GetOrganizationUserManagementSetting\x12G.scalekit.v1.organizations.GetOrganizationUserManagementSettingsRequest\x1aH.scalekit.v1.organizations.GetOrganizationUserManagementSettingsResponse\"\xe3\x02\x92\x41\x83\x02\n\rOrganizations\x12(Get organization user management setting\x1a\x43Retrieves the user management settings for a specific organization.J\x82\x01\n\x03\x32\x30\x30\x12{\n+Returns the requested organization setting.\x12L\nJ\x1aH.scalekit.v1.organizations.GetOrganizationUserManagementSettingsResponse\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x41\x12?/api/v1/organizations/{organization_id}/settings/usermanagement\x12\xee\x05\n\x1bGetApplicationSessionPolicy\x12=.scalekit.v1.organizations.GetApplicationSessionPolicyRequest\x1a>.scalekit.v1.organizations.GetApplicationSessionPolicyResponse\"\xcf\x04\x92\x41\xcf\x03\n\rOrganizations\x12/Get application session policy for organization\x1a\xa6\x01Returns the application-level session settings for display in hosted pages. Includes absolute timeout, idle timeout configuration, and access token expiry in minutes.J\x7f\n\x03\x32\x30\x30\x12x\n2Application session policy retrieved successfully.\x12\x42\n@\x1a>.scalekit.v1.organizations.GetApplicationSessionPolicyResponseJA\n\x03\x34\x30\x33\x12:\n8Session policy feature not enabled for this environment.J \n\x03\x34\x30\x34\x12\x19\n\x17Organization not found.\x82\xb5\x18\x1f\n\x1borganizations_sessions_read\x18T\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x44\x12\x42/api/v1/organizations/{organization_id}/application-session-policy\x1aX\x92\x41U\n\rOrganizations\x12\x44{{import \"proto/scalekit/v1/organizations/organization_details.md\"}}B\xa9\'Z7github.com/scalekit-inc/scalekit/pkg/grpc/organizations\x92\x41\xec&\x12\x92\"\n\rScalekit APIs\x12\x83!# Introduction\n\nThe Scalekit API is a RESTful API that enables you to manage organizations, users, and authentication settings. All requests must use HTTPS.\nAll API requests use the following base URLs:\n\n```\nhttps://{environment}.scalekit.dev (Development)\nhttps://{environment}.scalekit.com (Production)\nhttps://auth.example.com (Custom domain)\n```\n\nScalekit operates two separate environments: Development and Production. Resources cannot be moved between environments.\n\n# Authentication\n\nThe Scalekit API uses OAuth 2.0 Client Credentials for authentication.\n\nCopy your API credentials from the Scalekit dashboard\'s API Config section and set them as environment variables.\n\n```sh\nSCALEKIT_ENVIRONMENT_URL=\'\'\nSCALEKIT_CLIENT_ID=\'\'\nSCALEKIT_CLIENT_SECRET=\'\'\n```\n\nGetting an access token\n\n1. Get your credentials from the [Scalekit Dashboard](https://app.scalekit.com)\n2. Request an access token:\n\n```sh\ncurl https://{SCALEKIT_ENVIRONMENT_URL}/oauth/token \\\n -X POST \\\n -H \'Content-Type: application/x-www-form-urlencoded\' \\\n -d \'client_id={client_id}\' \\\n -d \'client_secret={client_secret}\' \\\n -d \'grant_type=client_credentials\'\n```\n\n3. Use the access token in API requests:\n\n```sh\ncurl https://{SCALEKIT_ENVIRONMENT_URL}/api/v1/organizations \\\n -H \'Content-Type: application/json\' \\\n -H \'Authorization: Bearer {access_token}\'\n```\n\nThe response includes an access token:\n\n```json\n{\n\t\"access_token\": \"eyJhbGciOiJSUzI1NiIsImtpZCI6InNua181Ok4OTEyMjU2NiIsInR5cCI6IkpXVCJ9...\",\n\t\"token_type\": \"Bearer\",\n\t\"expires_in\": 86399,\n\t\"scope\": \"openid\"\n}\n```\n\n# SDKs\n\nScalekit provides official SDKs for multiple programming languages. Check the changelog at GitHub repositories for the latest updates.\n\n### Node.js\n\n```sh\nnpm install @scalekit-sdk/node\n```\n\nCreate a new Scalekit client instance after initializing the environment variables\n\n```js\nimport { Scalekit } from \"@scalekit-sdk/node\";\n\nexport let scalekit = new Scalekit(\n\tprocess.env.SCALEKIT_ENVIRONMENT_URL,\n\tprocess.env.SCALEKIT_CLIENT_ID,\n\tprocess.env.SCALEKIT_CLIENT_SECRET\n);\n```\n\n[See the Node SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-node/releases)\n\n### Python\n\n```sh\npip install scalekit-sdk-python\n```\n\nCreate a new Scalekit client instance after initializing the environment variables.\n\n```py\nfrom scalekit import ScalekitClient\nimport os\n\nscalekit_client = ScalekitClient(\n os.environ.get(\'SCALEKIT_ENVIRONMENT_URL\'),\n os.environ.get(\'SCALEKIT_CLIENT_ID\'),\n os.environ.get(\'SCALEKIT_CLIENT_SECRET\')\n)\n```\n\n[See the Python SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-python/releases)\n\n### Go\n\n```sh\ngo get -u github.com/scalekit-inc/scalekit-sdk-go\n```\n\nCreate a new Scalekit client instance after initializing the environment variables.\n\n```go\npackage main\n\nimport (\n \"os\"\n \"github.com/scalekit-inc/scalekit-sdk-go\"\n)\n\nscalekitClient := scalekit.NewScalekitClient(\n os.Getenv(\"SCALEKIT_ENVIRONMENT_URL\"),\n os.Getenv(\"SCALEKIT_CLIENT_ID\"),\n os.Getenv(\"SCALEKIT_CLIENT_SECRET\"),\n)\n```\n\n[See the Go SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-go/releases)\n\n### Java\n\n```gradle\n/* Gradle users - add the following to your dependencies in build file */\nimplementation \"com.scalekit:scalekit-sdk-java:2.0.6\"\n```\n\n```xml\n\n\n com.scalekit\n scalekit-sdk-java\n 2.0.6\n\n```\n\n[See the Java SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-java/releases)\n\n# Error handling\n\nThe API uses standard HTTP status codes:\n\n| Code | Description |\n| ----------- | -------------------- |\n| 200/201 | Success |\n| 400 | Invalid request |\n| 401 | Authentication error |\n| 404 | Resource not found |\n| 429 | Rate limit exceeded |\n| 500/501/504 | Server error |\n\nError responses include detailed information:\n\n```json\n{\n\t\"code\": 16,\n\t\"message\": \"Token empty\",\n\t\"details\": [\n\t\t{\n\t\t\t\"@type\": \"type.googleapis.com/scalekit.v1.errdetails.ErrorInfo\",\n\t\t\t\"error_code\": \"UNAUTHENTICATED\"\n\t\t}\n\t]\n}\n```\n\n\":\n\x0cScalekit Inc\x12\x14https://scalekit.com\x1a\x14support@scalekit.com*8\n\nApache 2.0\x12*http://www.apache.org/licenses/LICENSE-2.02\x05\x31.0.0\x1a\x19$SCALEKIT_ENVIRONMENT_URL*\x01\x02\x32\x10\x61pplication/json:\x10\x61pplication/jsonj\x0f\n\rOrganizationsj\xd4\x03\n\x0bPermissions\x12\xc4\x03Permission management for defining and controlling access to system resources. Create, retrieve, update, and delete granular permissions that represent specific actions users can perform. Permissions are the building blocks of role-based access control (RBAC) and can be assigned to roles to grant users the ability to perform specific operations. Use this service to define custom permissions for your application\'s unique access control requirements.r+\n\rScalekit Docs\x12\x1ahttps://docs.scalekit.com/b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -157,7 +157,7 @@ _globals['_UPDATEORGANIZATIONSETTINGSREQUEST'].fields_by_name['settings']._loaded_options = None _globals['_UPDATEORGANIZATIONSETTINGSREQUEST'].fields_by_name['settings']._serialized_options = b'\222A\370\0012\225\001Settings configuration to apply to the organization. Contains feature toggles for SSO, directory synchronization, and other organization capabilitiesJ^{\"features\": [{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]}\272H\003\310\001\001' _globals['_ORGANIZATIONSESSIONPOLICYSETTINGS'].fields_by_name['policy_source']._loaded_options = None - _globals['_ORGANIZATIONSESSIONPOLICYSETTINGS'].fields_by_name['policy_source']._serialized_options = b'\222A\257\0012\242\001Policy source. \'environment\' means the organization inherits the application-level session policy. \'custom\' means organization-specific timeout values are active.J\010\"custom\"\272H\010\202\001\005\020\001\"\001\000' + _globals['_ORGANIZATIONSESSIONPOLICYSETTINGS'].fields_by_name['policy_source']._serialized_options = b'\222A\257\0012\242\001Policy source. \'APPLICATION\' means the organization inherits the application-level session policy. \'CUSTOM\' means organization-specific timeout values are active.J\010\"CUSTOM\"\272H\010\202\001\005\020\001\"\001\000' _globals['_ORGANIZATIONSESSIONPOLICYSETTINGS'].fields_by_name['absolute_session_timeout']._loaded_options = None _globals['_ORGANIZATIONSESSIONPOLICYSETTINGS'].fields_by_name['absolute_session_timeout']._serialized_options = b'\222A\220\0012\210\001The absolute session timeout value. The unit is specified by absolute_session_timeout_unit. Omitted when policy_source is \'environment\'.J\003360' _globals['_ORGANIZATIONSESSIONPOLICYSETTINGS'].fields_by_name['absolute_session_timeout_unit']._loaded_options = None @@ -174,10 +174,32 @@ _globals['_GETORGANIZATIONSESSIONPOLICYRESPONSE'].fields_by_name['policy']._serialized_options = b'\222A*2(The session policy for the organization.' _globals['_UPDATEORGANIZATIONSESSIONPOLICYREQUEST'].fields_by_name['organization_id']._loaded_options = None _globals['_UPDATEORGANIZATIONSESSIONPOLICYREQUEST'].fields_by_name['organization_id']._serialized_options = b'\222Ak2PThe unique identifier of the organization whose session policy is being updated.J\027\"org_59615193906282635\"\340A\002\272H\014r\n\020\001\030 :\004org_' - _globals['_UPDATEORGANIZATIONSESSIONPOLICYREQUEST'].fields_by_name['policy']._loaded_options = None - _globals['_UPDATEORGANIZATIONSESSIONPOLICYREQUEST'].fields_by_name['policy']._serialized_options = b'\222Aa2_The session policy to apply. Set policy_source=\'APPLICATION\' to revert to application defaults.\340A\002' + _globals['_UPDATEORGANIZATIONSESSIONPOLICYREQUEST'].fields_by_name['policy_source']._loaded_options = None + _globals['_UPDATEORGANIZATIONSESSIONPOLICYREQUEST'].fields_by_name['policy_source']._serialized_options = b'\222A\220\0012\203\001Policy source. Send \'APPLICATION\' to revert to application defaults. Send \'CUSTOM\' with timeout values to activate a custom policy.J\010\"CUSTOM\"' + _globals['_UPDATEORGANIZATIONSESSIONPOLICYREQUEST'].fields_by_name['absolute_session_timeout']._loaded_options = None + _globals['_UPDATEORGANIZATIONSESSIONPOLICYREQUEST'].fields_by_name['absolute_session_timeout']._serialized_options = b'\222A\213\0012\203\001The absolute session timeout value. The unit is specified by absolute_session_timeout_unit. Omit when policy_source is APPLICATION.J\003360' + _globals['_UPDATEORGANIZATIONSESSIONPOLICYREQUEST'].fields_by_name['absolute_session_timeout_unit']._loaded_options = None + _globals['_UPDATEORGANIZATIONSESSIONPOLICYREQUEST'].fields_by_name['absolute_session_timeout_unit']._serialized_options = b'\222Aq2dUnit for absolute_session_timeout. Accepted values: \'MINUTES\', \'HOURS\', \'DAYS\'. Defaults to MINUTES.J\t\"MINUTES\"' + _globals['_UPDATEORGANIZATIONSESSIONPOLICYREQUEST'].fields_by_name['idle_session_timeout_enabled']._loaded_options = None + _globals['_UPDATEORGANIZATIONSESSIONPOLICYREQUEST'].fields_by_name['idle_session_timeout_enabled']._serialized_options = b'\222AX2PWhether idle session timeout is enabled. Omit when policy_source is APPLICATION.J\004true' + _globals['_UPDATEORGANIZATIONSESSIONPOLICYREQUEST'].fields_by_name['idle_session_timeout']._loaded_options = None + _globals['_UPDATEORGANIZATIONSESSIONPOLICYREQUEST'].fields_by_name['idle_session_timeout']._serialized_options = b'\222A\213\0012\204\001The idle session timeout value. The unit is specified by idle_session_timeout_unit. Omit when idle_session_timeout_enabled is false.J\00284' + _globals['_UPDATEORGANIZATIONSESSIONPOLICYREQUEST'].fields_by_name['idle_session_timeout_unit']._loaded_options = None + _globals['_UPDATEORGANIZATIONSESSIONPOLICYREQUEST'].fields_by_name['idle_session_timeout_unit']._serialized_options = b'\222Am2`Unit for idle_session_timeout. Accepted values: \'MINUTES\', \'HOURS\', \'DAYS\'. Defaults to MINUTES.J\t\"MINUTES\"' _globals['_UPDATEORGANIZATIONSESSIONPOLICYRESPONSE'].fields_by_name['policy']._loaded_options = None _globals['_UPDATEORGANIZATIONSESSIONPOLICYRESPONSE'].fields_by_name['policy']._serialized_options = b'\222A220The updated session policy for the organization.' + _globals['_GETAPPLICATIONSESSIONPOLICYREQUEST'].fields_by_name['organization_id']._loaded_options = None + _globals['_GETAPPLICATIONSESSIONPOLICYREQUEST'].fields_by_name['organization_id']._serialized_options = b'\222AE2*The unique identifier of the organization.J\027\"org_59615193906282635\"\340A\002\272H\014r\n\020\001\030 :\004org_' + _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['absolute_session_timeout']._loaded_options = None + _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['absolute_session_timeout']._serialized_options = b'\222A+2$Absolute session timeout in minutes.J\003480' + _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['idle_session_timeout_enabled']._loaded_options = None + _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['idle_session_timeout_enabled']._serialized_options = b'\222AJ2AWhether idle session timeout is enabled at the application level.J\005false' + _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['idle_session_timeout']._loaded_options = None + _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['idle_session_timeout']._serialized_options = b'\222AJ2DIdle session timeout in minutes. Zero when idle timeout is disabled.J\00260' + _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['access_token_expiry']._loaded_options = None + _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['access_token_expiry']._serialized_options = b'\222AK2FAccess token expiry in minutes. Custom policy values must exceed this.J\0015' + _globals['_GETAPPLICATIONSESSIONPOLICYRESPONSE'].fields_by_name['application_policy']._loaded_options = None + _globals['_GETAPPLICATIONSESSIONPOLICYRESPONSE'].fields_by_name['application_policy']._serialized_options = b'\222A:28The effective application-level session policy settings.' _globals['_ORGANIZATIONUSERMANAGEMENTSETTINGS'].fields_by_name['max_allowed_users']._loaded_options = None _globals['_ORGANIZATIONUSERMANAGEMENTSETTINGS'].fields_by_name['max_allowed_users']._serialized_options = b'\222A\347\0012\337\001Maximum number of users allowed in the organization. When nil (not set), there feature is not enabled. When explicitly set to zero, it also means no limit. When set to a positive integer, it enforces the maximum user limit.J\003100' _globals['_ORGANIZATIONSESSIONSETTINGS'].fields_by_name['absolute_session_timeout']._loaded_options = None @@ -187,7 +209,7 @@ _globals['_ORGANIZATIONSESSIONSETTINGS'].fields_by_name['idle_session_timeout_enabled']._loaded_options = None _globals['_ORGANIZATIONSESSIONSETTINGS'].fields_by_name['idle_session_timeout_enabled']._serialized_options = b'\222A\254\0012\243\001Whether idle session timeout is enabled for this organization. When enabled, sessions expire after the idle timeout duration regardless of the environment setting.J\004true' _globals['_ORGANIZATIONSESSIONSETTINGS'].fields_by_name['policy_source']._loaded_options = None - _globals['_ORGANIZATIONSESSIONSETTINGS'].fields_by_name['policy_source']._serialized_options = b'\222A\301\0012\264\001Policy source for this organization. \'environment\' means the organization inherits application-level session policy. \'custom\' means organization-specific timeout values are active.J\010\"custom\"' + _globals['_ORGANIZATIONSESSIONSETTINGS'].fields_by_name['policy_source']._serialized_options = b'\222A\275\0012\260\001Policy source for this organization. APPLICATION means the organization inherits application-level session policy. CUSTOM means organization-specific timeout values are active.J\010\"CUSTOM\"' _globals['_ORGANIZATIONSETTINGS'].fields_by_name['features']._loaded_options = None _globals['_ORGANIZATIONSETTINGS'].fields_by_name['features']._serialized_options = b'\222A\313\0012wList of feature toggles that control organization capabilities such as SSO authentication and directory synchronizationJP[{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]' _globals['_ORGANIZATIONSETTINGS']._loaded_options = None @@ -235,17 +257,19 @@ _globals['_ORGANIZATIONSERVICE'].methods_by_name['UpdateOrganizationSettings']._loaded_options = None _globals['_ORGANIZATIONSERVICE'].methods_by_name['UpdateOrganizationSettings']._serialized_options = b'\222A\252\005\n\rOrganizations\022\034Toggle organization settings\032\323\001Updates configuration settings for an organization. Supports modifying SSO configuration, directory synchronization settings, and session parameters. Requires organization ID and the specific settings to update.J\343\001\n\003200\022\333\001\n\240\001Returns the complete organization object with updated settings applied. Contains all organization details including ID, display name, and the modified settings.\0226\n4\0322.scalekit.v1.organizations.GetOrganizationResponseJp\n\003400\022i\ngInvalid request - occurs when the settings payload contains invalid values or unsupported configurationJM\n\003404\022F\nDOrganization not found - the specified organization ID doesn\'t exist\202\265\030\002\030D\202\323\344\223\002/2#/api/v1/organizations/{id}/settings:\010settings' _globals['_ORGANIZATIONSERVICE'].methods_by_name['UpdateOrganizationSessionPolicy']._loaded_options = None - _globals['_ORGANIZATIONSERVICE'].methods_by_name['UpdateOrganizationSessionPolicy']._serialized_options = b'\222A\351\003\n\rOrganizations\022\"Update organization session policy\032\342\002Sets a custom session policy for an organization or reverts to application-level settings. Send policy_source=\'APPLICATION\' to revert to application defaults. Send policy_source=\'CUSTOM\' with timeout values to activate a custom policy. Values are accepted as-is; the system applies the stricter of application and organization values at session creation.J-\n\003200\022&\n$Session policy updated successfully.J \n\003404\022\031\n\027Organization not found.\202\265\030 \n\034sk_org_session_policy_manage\030t\202\323\344\223\002@26/api/v1/organizations/{organization_id}/session-policy:\006policy' + _globals['_ORGANIZATIONSERVICE'].methods_by_name['UpdateOrganizationSessionPolicy']._serialized_options = b'\222A\274\003\n\rOrganizations\022\"Update organization session policy\032\355\001Sets a custom session policy for an organization or reverts to application-level settings. Send session_policy=\'APPLICATION\' to revert to application defaults. Send session_policy=\'CUSTOM\' with timeout values to activate a custom policy.Ju\n\003200\022n\n$Session policy updated successfully.\022F\nD\032B.scalekit.v1.organizations.UpdateOrganizationSessionPolicyResponseJ \n\003404\022\031\n\027Organization not found.\202\265\030 \n\034organizations_sessions_write\030T\202\323\344\223\002;26/api/v1/organizations/{organization_id}/session-policy:\001*' _globals['_ORGANIZATIONSERVICE'].methods_by_name['GetOrganizationSessionPolicy']._loaded_options = None - _globals['_ORGANIZATIONSERVICE'].methods_by_name['GetOrganizationSessionPolicy']._serialized_options = b'\222A\353\002\n\rOrganizations\022\037Get organization session policy\032\345\001Retrieves the session policy for an organization. Returns policy_source=\'APPLICATION\' if the organization inherits the application-level defaults, or policy_source=\'CUSTOM\' with the configured values if a custom policy is active.J/\n\003200\022(\n&Session policy retrieved successfully.J \n\003404\022\031\n\027Organization not found.\202\265\030\036\n\032sk_org_session_policy_read\030t\202\323\344\223\0028\0226/api/v1/organizations/{organization_id}/session-policy' + _globals['_ORGANIZATIONSERVICE'].methods_by_name['GetOrganizationSessionPolicy']._serialized_options = b'\222A\262\003\n\rOrganizations\022\037Get organization session policy\032\347\001Retrieves the session policy for an organization. Returns session_policy=\'APPLICATION\' if the organization inherits the application-level defaults, or session_policy=\'CUSTOM\' with the configured values if a custom policy is active.Jt\n\003200\022m\n&Session policy retrieved successfully.\022C\nA\032?.scalekit.v1.organizations.GetOrganizationSessionPolicyResponseJ \n\003404\022\031\n\027Organization not found.\202\265\030\037\n\033organizations_sessions_read\030T\202\323\344\223\0028\0226/api/v1/organizations/{organization_id}/session-policy' _globals['_ORGANIZATIONSERVICE'].methods_by_name['UpsertUserManagementSettings']._loaded_options = None _globals['_ORGANIZATIONSERVICE'].methods_by_name['UpsertUserManagementSettings']._serialized_options = b'\222A\337\001\n\rOrganizations\022 Upsert organization user setting\0323Upsert user management settings for an organizationJw\n\003200\022p\n)Returns the updated organization setting.\022C\nA\032?.scalekit.v1.organizations.UpsertUserManagementSettingsResponse\202\265\030\002\030d\202\323\344\223\002D2?/api/v1/organizations/{organization_id}/settings/usermanagement:\001*' _globals['_ORGANIZATIONSERVICE'].methods_by_name['GetOrganizationUserManagementSetting']._loaded_options = None _globals['_ORGANIZATIONSERVICE'].methods_by_name['GetOrganizationUserManagementSetting']._serialized_options = b'\222A\203\002\n\rOrganizations\022(Get organization user management setting\032CRetrieves the user management settings for a specific organization.J\202\001\n\003200\022{\n+Returns the requested organization setting.\022L\nJ\032H.scalekit.v1.organizations.GetOrganizationUserManagementSettingsResponse\202\265\030\002\030d\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002A\022?/api/v1/organizations/{organization_id}/settings/usermanagement' - _globals['_FEATURE']._serialized_start=16081 - _globals['_FEATURE']._serialized_end=16163 - _globals['_SESSIONPOLICYSOURCE']._serialized_start=16165 - _globals['_SESSIONPOLICYSOURCE']._serialized_end=16247 + _globals['_ORGANIZATIONSERVICE'].methods_by_name['GetApplicationSessionPolicy']._loaded_options = None + _globals['_ORGANIZATIONSERVICE'].methods_by_name['GetApplicationSessionPolicy']._serialized_options = b'\222A\317\003\n\rOrganizations\022/Get application session policy for organization\032\246\001Returns the application-level session settings for display in hosted pages. Includes absolute timeout, idle timeout configuration, and access token expiry in minutes.J\177\n\003200\022x\n2Application session policy retrieved successfully.\022B\n@\032>.scalekit.v1.organizations.GetApplicationSessionPolicyResponseJA\n\003403\022:\n8Session policy feature not enabled for this environment.J \n\003404\022\031\n\027Organization not found.\202\265\030\037\n\033organizations_sessions_read\030T\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002D\022B/api/v1/organizations/{organization_id}/application-session-policy' + _globals['_FEATURE']._serialized_start=18191 + _globals['_FEATURE']._serialized_end=18273 + _globals['_SESSIONPOLICYTYPE']._serialized_start=18275 + _globals['_SESSIONPOLICYTYPE']._serialized_end=18360 _globals['_CREATEORGANIZATIONREQUEST']._serialized_start=533 _globals['_CREATEORGANIZATIONREQUEST']._serialized_end=708 _globals['_CREATEORGANIZATIONRESPONSE']._serialized_start=711 @@ -297,31 +321,37 @@ _globals['_UPDATEORGANIZATIONSETTINGSREQUEST']._serialized_start=9812 _globals['_UPDATEORGANIZATIONSETTINGSREQUEST']._serialized_end=10340 _globals['_ORGANIZATIONSESSIONPOLICYSETTINGS']._serialized_start=10343 - _globals['_ORGANIZATIONSESSIONPOLICYSETTINGS']._serialized_end=11898 - _globals['_GETORGANIZATIONSESSIONPOLICYREQUEST']._serialized_start=11901 - _globals['_GETORGANIZATIONSESSIONPOLICYREQUEST']._serialized_end=12113 - _globals['_GETORGANIZATIONSESSIONPOLICYRESPONSE']._serialized_start=12116 - _globals['_GETORGANIZATIONSESSIONPOLICYRESPONSE']._serialized_end=12288 - _globals['_UPDATEORGANIZATIONSESSIONPOLICYREQUEST']._serialized_start=12291 - _globals['_UPDATEORGANIZATIONSESSIONPOLICYREQUEST']._serialized_end=12696 - _globals['_UPDATEORGANIZATIONSESSIONPOLICYRESPONSE']._serialized_start=12699 - _globals['_UPDATEORGANIZATIONSESSIONPOLICYRESPONSE']._serialized_end=12882 - _globals['_ORGANIZATIONUSERMANAGEMENTSETTINGS']._serialized_start=12885 - _globals['_ORGANIZATIONUSERMANAGEMENTSETTINGS']._serialized_end=13233 - _globals['_ORGANIZATIONSESSIONSETTINGS']._serialized_start=13236 - _globals['_ORGANIZATIONSESSIONSETTINGS']._serialized_end=14310 - _globals['_ORGANIZATIONSETTINGS']._serialized_start=14313 - _globals['_ORGANIZATIONSETTINGS']._serialized_end=14839 - _globals['_ORGANIZATIONSETTINGSFEATURE']._serialized_start=14842 - _globals['_ORGANIZATIONSETTINGSFEATURE']._serialized_end=15323 - _globals['_UPSERTUSERMANAGEMENTSETTINGSREQUEST']._serialized_start=15326 - _globals['_UPSERTUSERMANAGEMENTSETTINGSREQUEST']._serialized_end=15604 - _globals['_UPSERTUSERMANAGEMENTSETTINGSRESPONSE']._serialized_start=15607 - _globals['_UPSERTUSERMANAGEMENTSETTINGSRESPONSE']._serialized_end=15763 - _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSREQUEST']._serialized_start=15766 - _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSREQUEST']._serialized_end=15901 - _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSRESPONSE']._serialized_start=15904 - _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSRESPONSE']._serialized_end=16079 - _globals['_ORGANIZATIONSERVICE']._serialized_start=16250 - _globals['_ORGANIZATIONSERVICE']._serialized_end=25757 + _globals['_ORGANIZATIONSESSIONPOLICYSETTINGS']._serialized_end=11896 + _globals['_GETORGANIZATIONSESSIONPOLICYREQUEST']._serialized_start=11899 + _globals['_GETORGANIZATIONSESSIONPOLICYREQUEST']._serialized_end=12111 + _globals['_GETORGANIZATIONSESSIONPOLICYRESPONSE']._serialized_start=12114 + _globals['_GETORGANIZATIONSESSIONPOLICYRESPONSE']._serialized_end=12286 + _globals['_UPDATEORGANIZATIONSESSIONPOLICYREQUEST']._serialized_start=12289 + _globals['_UPDATEORGANIZATIONSESSIONPOLICYREQUEST']._serialized_end=13880 + _globals['_UPDATEORGANIZATIONSESSIONPOLICYRESPONSE']._serialized_start=13883 + _globals['_UPDATEORGANIZATIONSESSIONPOLICYRESPONSE']._serialized_end=14066 + _globals['_GETAPPLICATIONSESSIONPOLICYREQUEST']._serialized_start=14069 + _globals['_GETAPPLICATIONSESSIONPOLICYREQUEST']._serialized_end=14239 + _globals['_APPLICATIONSESSIONPOLICYSETTINGS']._serialized_start=14242 + _globals['_APPLICATIONSESSIONPOLICYSETTINGS']._serialized_end=14784 + _globals['_GETAPPLICATIONSESSIONPOLICYRESPONSE']._serialized_start=14787 + _globals['_GETAPPLICATIONSESSIONPOLICYRESPONSE']._serialized_end=14996 + _globals['_ORGANIZATIONUSERMANAGEMENTSETTINGS']._serialized_start=14999 + _globals['_ORGANIZATIONUSERMANAGEMENTSETTINGS']._serialized_end=15347 + _globals['_ORGANIZATIONSESSIONSETTINGS']._serialized_start=15350 + _globals['_ORGANIZATIONSESSIONSETTINGS']._serialized_end=16420 + _globals['_ORGANIZATIONSETTINGS']._serialized_start=16423 + _globals['_ORGANIZATIONSETTINGS']._serialized_end=16949 + _globals['_ORGANIZATIONSETTINGSFEATURE']._serialized_start=16952 + _globals['_ORGANIZATIONSETTINGSFEATURE']._serialized_end=17433 + _globals['_UPSERTUSERMANAGEMENTSETTINGSREQUEST']._serialized_start=17436 + _globals['_UPSERTUSERMANAGEMENTSETTINGSREQUEST']._serialized_end=17714 + _globals['_UPSERTUSERMANAGEMENTSETTINGSRESPONSE']._serialized_start=17717 + _globals['_UPSERTUSERMANAGEMENTSETTINGSRESPONSE']._serialized_end=17873 + _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSREQUEST']._serialized_start=17876 + _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSREQUEST']._serialized_end=18011 + _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSRESPONSE']._serialized_start=18014 + _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSRESPONSE']._serialized_end=18189 + _globals['_ORGANIZATIONSERVICE']._serialized_start=18363 + _globals['_ORGANIZATIONSERVICE']._serialized_end=28645 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/organizations/organizations_pb2.pyi b/scalekit/v1/organizations/organizations_pb2.pyi index f87016c..7317066 100644 --- a/scalekit/v1/organizations/organizations_pb2.pyi +++ b/scalekit/v1/organizations/organizations_pb2.pyi @@ -27,18 +27,18 @@ class Feature(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): dir_sync: _ClassVar[Feature] sso: _ClassVar[Feature] -class SessionPolicySource(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): +class SessionPolicyType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): __slots__ = () - SESSION_POLICY_UNSPECIFIED: _ClassVar[SessionPolicySource] - APPLICATION: _ClassVar[SessionPolicySource] - CUSTOM: _ClassVar[SessionPolicySource] + SESSION_POLICY_TYPE_UNSPECIFIED: _ClassVar[SessionPolicyType] + APPLICATION: _ClassVar[SessionPolicyType] + CUSTOM: _ClassVar[SessionPolicyType] FEATURE_UNSPECIFIED: Feature UNSPECIFIED: Feature dir_sync: Feature sso: Feature -SESSION_POLICY_UNSPECIFIED: SessionPolicySource -APPLICATION: SessionPolicySource -CUSTOM: SessionPolicySource +SESSION_POLICY_TYPE_UNSPECIFIED: SessionPolicyType +APPLICATION: SessionPolicyType +CUSTOM: SessionPolicyType class CreateOrganizationRequest(_message.Message): __slots__ = ("organization",) @@ -275,13 +275,13 @@ class OrganizationSessionPolicySettings(_message.Message): IDLE_SESSION_TIMEOUT_ENABLED_FIELD_NUMBER: _ClassVar[int] IDLE_SESSION_TIMEOUT_FIELD_NUMBER: _ClassVar[int] IDLE_SESSION_TIMEOUT_UNIT_FIELD_NUMBER: _ClassVar[int] - policy_source: SessionPolicySource + policy_source: SessionPolicyType absolute_session_timeout: _wrappers_pb2.Int32Value absolute_session_timeout_unit: _commons_pb2.TimeUnit idle_session_timeout_enabled: _wrappers_pb2.BoolValue idle_session_timeout: _wrappers_pb2.Int32Value idle_session_timeout_unit: _commons_pb2.TimeUnit - def __init__(self, policy_source: _Optional[_Union[SessionPolicySource, str]] = ..., absolute_session_timeout: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., absolute_session_timeout_unit: _Optional[_Union[_commons_pb2.TimeUnit, str]] = ..., idle_session_timeout_enabled: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., idle_session_timeout: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., idle_session_timeout_unit: _Optional[_Union[_commons_pb2.TimeUnit, str]] = ...) -> None: ... + def __init__(self, policy_source: _Optional[_Union[SessionPolicyType, str]] = ..., absolute_session_timeout: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., absolute_session_timeout_unit: _Optional[_Union[_commons_pb2.TimeUnit, str]] = ..., idle_session_timeout_enabled: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., idle_session_timeout: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., idle_session_timeout_unit: _Optional[_Union[_commons_pb2.TimeUnit, str]] = ...) -> None: ... class GetOrganizationSessionPolicyRequest(_message.Message): __slots__ = ("organization_id",) @@ -296,12 +296,22 @@ class GetOrganizationSessionPolicyResponse(_message.Message): def __init__(self, policy: _Optional[_Union[OrganizationSessionPolicySettings, _Mapping]] = ...) -> None: ... class UpdateOrganizationSessionPolicyRequest(_message.Message): - __slots__ = ("organization_id", "policy") + __slots__ = ("organization_id", "policy_source", "absolute_session_timeout", "absolute_session_timeout_unit", "idle_session_timeout_enabled", "idle_session_timeout", "idle_session_timeout_unit") ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] - POLICY_FIELD_NUMBER: _ClassVar[int] + POLICY_SOURCE_FIELD_NUMBER: _ClassVar[int] + ABSOLUTE_SESSION_TIMEOUT_FIELD_NUMBER: _ClassVar[int] + ABSOLUTE_SESSION_TIMEOUT_UNIT_FIELD_NUMBER: _ClassVar[int] + IDLE_SESSION_TIMEOUT_ENABLED_FIELD_NUMBER: _ClassVar[int] + IDLE_SESSION_TIMEOUT_FIELD_NUMBER: _ClassVar[int] + IDLE_SESSION_TIMEOUT_UNIT_FIELD_NUMBER: _ClassVar[int] organization_id: str - policy: OrganizationSessionPolicySettings - def __init__(self, organization_id: _Optional[str] = ..., policy: _Optional[_Union[OrganizationSessionPolicySettings, _Mapping]] = ...) -> None: ... + policy_source: SessionPolicyType + absolute_session_timeout: _wrappers_pb2.Int32Value + absolute_session_timeout_unit: _commons_pb2.TimeUnit + idle_session_timeout_enabled: _wrappers_pb2.BoolValue + idle_session_timeout: _wrappers_pb2.Int32Value + idle_session_timeout_unit: _commons_pb2.TimeUnit + def __init__(self, organization_id: _Optional[str] = ..., policy_source: _Optional[_Union[SessionPolicyType, str]] = ..., absolute_session_timeout: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., absolute_session_timeout_unit: _Optional[_Union[_commons_pb2.TimeUnit, str]] = ..., idle_session_timeout_enabled: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., idle_session_timeout: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., idle_session_timeout_unit: _Optional[_Union[_commons_pb2.TimeUnit, str]] = ...) -> None: ... class UpdateOrganizationSessionPolicyResponse(_message.Message): __slots__ = ("policy",) @@ -309,6 +319,30 @@ class UpdateOrganizationSessionPolicyResponse(_message.Message): policy: OrganizationSessionPolicySettings def __init__(self, policy: _Optional[_Union[OrganizationSessionPolicySettings, _Mapping]] = ...) -> None: ... +class GetApplicationSessionPolicyRequest(_message.Message): + __slots__ = ("organization_id",) + ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] + organization_id: str + def __init__(self, organization_id: _Optional[str] = ...) -> None: ... + +class ApplicationSessionPolicySettings(_message.Message): + __slots__ = ("absolute_session_timeout", "idle_session_timeout_enabled", "idle_session_timeout", "access_token_expiry") + ABSOLUTE_SESSION_TIMEOUT_FIELD_NUMBER: _ClassVar[int] + IDLE_SESSION_TIMEOUT_ENABLED_FIELD_NUMBER: _ClassVar[int] + IDLE_SESSION_TIMEOUT_FIELD_NUMBER: _ClassVar[int] + ACCESS_TOKEN_EXPIRY_FIELD_NUMBER: _ClassVar[int] + absolute_session_timeout: int + idle_session_timeout_enabled: bool + idle_session_timeout: int + access_token_expiry: int + def __init__(self, absolute_session_timeout: _Optional[int] = ..., idle_session_timeout_enabled: bool = ..., idle_session_timeout: _Optional[int] = ..., access_token_expiry: _Optional[int] = ...) -> None: ... + +class GetApplicationSessionPolicyResponse(_message.Message): + __slots__ = ("application_policy",) + APPLICATION_POLICY_FIELD_NUMBER: _ClassVar[int] + application_policy: ApplicationSessionPolicySettings + def __init__(self, application_policy: _Optional[_Union[ApplicationSessionPolicySettings, _Mapping]] = ...) -> None: ... + class OrganizationUserManagementSettings(_message.Message): __slots__ = ("max_allowed_users",) MAX_ALLOWED_USERS_FIELD_NUMBER: _ClassVar[int] diff --git a/scalekit/v1/organizations/organizations_pb2_grpc.py b/scalekit/v1/organizations/organizations_pb2_grpc.py index 50513b4..4b30434 100644 --- a/scalekit/v1/organizations/organizations_pb2_grpc.py +++ b/scalekit/v1/organizations/organizations_pb2_grpc.py @@ -95,6 +95,11 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationUserManagementSettingsRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationUserManagementSettingsResponse.FromString, ) + self.GetApplicationSessionPolicy = channel.unary_unary( + '/scalekit.v1.organizations.OrganizationService/GetApplicationSessionPolicy', + request_serializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetApplicationSessionPolicyRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetApplicationSessionPolicyResponse.FromString, + ) class OrganizationServiceServicer(object): @@ -200,6 +205,12 @@ def GetOrganizationUserManagementSetting(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def GetApplicationSessionPolicy(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def add_OrganizationServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -283,6 +294,11 @@ def add_OrganizationServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationUserManagementSettingsRequest.FromString, response_serializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationUserManagementSettingsResponse.SerializeToString, ), + 'GetApplicationSessionPolicy': grpc.unary_unary_rpc_method_handler( + servicer.GetApplicationSessionPolicy, + request_deserializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetApplicationSessionPolicyRequest.FromString, + response_serializer=scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetApplicationSessionPolicyResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'scalekit.v1.organizations.OrganizationService', rpc_method_handlers) @@ -564,3 +580,20 @@ def GetOrganizationUserManagementSetting(request, scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetOrganizationUserManagementSettingsResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def GetApplicationSessionPolicy(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.organizations.OrganizationService/GetApplicationSessionPolicy', + scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetApplicationSessionPolicyRequest.SerializeToString, + scalekit_dot_v1_dot_organizations_dot_organizations__pb2.GetApplicationSessionPolicyResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/tools/tools_pb2.py b/scalekit/v1/tools/tools_pb2.py index 3c5a3b7..4344b6a 100644 --- a/scalekit/v1/tools/tools_pb2.py +++ b/scalekit/v1/tools/tools_pb2.py @@ -24,7 +24,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dscalekit/v1/tools/tools.proto\x12\x11scalekit.v1.tools\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\x88\x01\n\x11\x43reateToolRequest\x12s\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolBF\x92\x41=2;Tool details including name, schema version, and definition\xbaH\x03\xc8\x01\x01R\x04tool\"c\n\x12\x43reateToolResponse\x12M\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB \x92\x41\x1d\x32\x1b\x44\x65tails of the created toolR\x04tool\"\xf0\x05\n\x04Tool\x12\x38\n\x02id\x18\x01 \x01(\tB(\x92\x41\"2\x15Unique ID of the toolJ\t\"tol_123\"\xe0\x41\x03R\x02id\x12I\n\x08provider\x18\x02 \x01(\tB-\x92\x41\'2\x1bProvider name (e.g. GOOGLE)J\x08\"GOOGLE\"\xe0\x41\x03R\x08provider\x12\x87\x01\n\ndefinition\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructBN\x92\x41\x45\x32$Tool definition in structured formatJ\x1d{\"input\": {\"type\": \"object\"}}\xbaH\x03\xc8\x01\x01R\ndefinition\x12s\n\x08metadata\x18\x04 \x01(\x0b\x32\x17.google.protobuf.StructB>\x92\x41;2\"Additional metadata about the toolJ\x15{\"category\": \"email\"}R\x08metadata\x12X\n\x04tags\x18\x05 \x03(\tBD\x92\x41\x41\x32$Tags for categorization or filteringJ\x19[\"notification\", \"email\"]R\x04tags\x12\x83\x01\n\nis_default\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBH\x92\x41\x42\x32:Marks this tool as the default version for the combinationJ\x04true\xe0\x41\x03R\tisDefault\x12\x83\x01\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampBH\x92\x41\x42\x32(Timestamp when the tool was last updatedJ\x16\"2023-10-01T12:00:00Z\"\xe0\x41\x03R\tupdatedAt\"\xd3\x01\n\nScopedTool\x12+\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolR\x04tool\x12\x1e\n\nidentifier\x18\x02 \x01(\tR\nidentifier\x12x\n\x14\x63onnected_account_id\x18\x03 \x01(\tBF\x92\x41<20ID of the connected account for this scoped toolJ\x08\"ca_123\"\xbaH\x04r\x02\x18\x64R\x12\x63onnectedAccountId\"\xfe\x01\n\x10ListToolsRequest\x12[\n\x06\x66ilter\x18\x01 \x01(\x0b\x32\x19.scalekit.v1.tools.FilterB(\x92\x41%2#Filter parameters for listing toolsR\x06\x66ilter\x12\x1b\n\tpage_size\x18\x02 \x01(\rR\x08pageSize\x12p\n\npage_token\x18\x03 \x01(\tBQ\x92\x41N2.Token from a previous response for pagination.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\x85\n\n\x06\x46ilter\x12t\n\x07summary\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB>\x92\x41;23Return only tool names instead of full tool detailsJ\x04trueR\x07summary\x12I\n\x08provider\x18\x02 \x01(\tB-\x92\x41#2\x17\x46ilter by tool providerJ\x08\"GOOGLE\"\xbaH\x04r\x02\x18\x32R\x08provider\x12j\n\nidentifier\x18\x03 \x01(\tBJ\x92\x41@2&Filter by connected account identifierJ\x16\"app_google_workspace\"\xbaH\x04r\x02\x18\x64R\nidentifier\x12I\n\ttool_name\x18\x04 \x03(\tB,\x92\x41)2\x13\x46ilter by tool nameJ\x12\"gmail_send_email\"R\x08toolName\x12g\n\x05query\x18\x05 \x01(\tBL\x92\x41@2&Filter by connected account identifierJ\x16\"gmail get attachment\"\xbaH\x06r\x04\x10\x03\x18\x64H\x00R\x05query\x88\x01\x01\x12\xdf\x01\n\tconnector\x18\x06 \x01(\tB\xbb\x01\x92\x41\xaf\x01\x32\xa0\x01\x43onnector name (e.g. \'My Gmail\'). When set together with identifier, resolves to a specific connected account and includes its custom MCP tools in the response.J\n\"My Gmail\"\xbaH\x05r\x03\x18\x90\x03H\x01R\tconnector\x88\x01\x01\x12\x87\x01\n\x0forganization_id\x18\x07 \x01(\tBY\x92\x41O26Organization ID to scope the connected account lookup.J\x15\"org_121312434123312\"\xbaH\x04r\x02\x18 H\x02R\x0eorganizationId\x88\x01\x01\x12p\n\x07user_id\x18\x08 \x01(\tBR\x92\x41H2.User ID to scope the connected account lookup.J\x16\"user_121312434123312\"\xbaH\x04r\x02\x18 H\x03R\x06userId\x88\x01\x01\x12\xea\x01\n\x14\x63onnected_account_id\x18\t \x01(\tB\xb2\x01\x92\x41\xa2\x01\x32\x95\x01\x43onnected account ID. Alternative to identifier + connector for directly identifying the connected account whose custom MCP tools should be included.J\x08\"ca_123\"\xbaH\tr\x07\x18\x64:\x03\x63\x61_H\x04R\x12\x63onnectedAccountId\x88\x01\x01\x42\x08\n\x06_queryB\x0c\n\n_connectorB\x12\n\x10_organization_idB\n\n\x08_user_idB\x17\n\x15_connected_account_id\"\x9b\x04\n\x11ListToolsResponse\x12v\n\x0fnext_page_token\x18\x01 \x01(\tBN\x92\x41K2)Token for fetching the next page of toolsJ\x1e\"eyJwYWdlIjozLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12Q\n\ntotal_size\x18\x02 \x01(\rB2\x92\x41/2(Total number of tools matching the queryJ\x03\x31\x30\x34R\ttotalSize\x12z\n\x0fprev_page_token\x18\x03 \x01(\tBR\x92\x41O2-Token for fetching the previous page of toolsJ\x1e\"eyJwYWdlIjoxLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12^\n\ntool_names\x18\x04 \x03(\tB?\x92\x41<2$List of tool names (if summary=true)J\x14[\"gmail_send_email\"]R\ttoolNames\x12_\n\x05tools\x18\x05 \x03(\x0b\x32\x17.scalekit.v1.tools.ToolB0\x92\x41-2+List of tools (if summary=false or omitted)R\x05tools\"\xf8\x0c\n\x12\x45xecuteToolRequest\x12Q\n\ttool_name\x18\x01 \x01(\tB4\x92\x41+2\x1bName of the tool to executeJ\x0c\"send_email\"\xbaH\x03\xc8\x01\x01R\x08toolName\x12\x99\x02\n\nidentifier\x18\x02 \x01(\tB\xf3\x01\x92\x41\xef\x01\x32\xd8\x01Optional. The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier). Use this in combination with connector to identify the connected account.J\x12\"user@example.com\"H\x00R\nidentifier\x88\x01\x01\x12\xfc\x01\n\x06params\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructB\xca\x01\x92\x41\xc6\x01\x32}JSON object containing the parameters required for tool execution. The structure depends on the specific tool being executed.JE{\"to\": \"user@example.com\", \"subject\": \"Hello\", \"body\": \"Hello World\"}R\x06params\x12\xea\x01\n\x14\x63onnected_account_id\x18\x04 \x01(\tB\xb2\x01\x92\x41\xa7\x01\x32\x9a\x01Optional. The unique ID of the connected account. Use this to directly identify the connected account instead of using identifier + connector combination.J\x08\"ca_123\"\xbaH\x04r\x02\x18\x64H\x01R\x12\x63onnectedAccountId\x88\x01\x01\x12\xed\x01\n\tconnector\x18\x05 \x01(\tB\xc9\x01\x92\x41\xbd\x01\x32\xa6\x01Optional. The name of the connector/provider (e.g., \'Google Workspace\', \'Slack\', \'Notion\'). Use this in combination with identifier to identify the connected account.J\x12\"Google Workspace\"\xbaH\x05r\x03\x18\x90\x03H\x02R\tconnector\x88\x01\x01\x12\xee\x01\n\x0forganization_id\x18\x06 \x01(\tB\xbf\x01\x92\x41\xb4\x01\x32\xa6\x01Optional. The organization ID to scope the connected account lookup. Use this to narrow down the search when the same identifier exists across multiple organizations.J\t\"org_123\"\xbaH\x04r\x02\x18\x64H\x03R\x0eorganizationId\x88\x01\x01\x12\xcf\x01\n\x07user_id\x18\x07 \x01(\tB\xb0\x01\x92\x41\xa5\x01\x32\x96\x01Optional. The user ID to scope the connected account lookup. Use this to narrow down the search when the same identifier exists across multiple users.J\n\"user_123\"\xbaH\x04r\x02\x18\x64H\x04R\x06userId\x88\x01\x01\x42\r\n\x0b_identifierB\x17\n\x15_connected_account_idB\x0c\n\n_connectorB\x12\n\x10_organization_idB\n\n\x08_user_id\"\xa3\x02\n\x13\x45xecuteToolResponse\x12\xac\x01\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\x7f\x92\x41|23Free-flowing JSON parameters for the tool executionJE{\"to\": \"user@example.com\", \"subject\": \"Hello\", \"body\": \"Hello World\"}R\x04\x64\x61ta\x12]\n\x0c\x65xecution_id\x18\x02 \x01(\tB:\x92\x41\x37\x32(Unique identifier for the tool executionJ\x0b\"123456789\"R\x0b\x65xecutionId\"\xad\x02\n\x15SetToolDefaultRequest\x12\x61\n\x04name\x18\x01 \x01(\tBM\x92\x41/2\x19\x46ully qualified tool nameJ\x12\"gmail_send_email\"\xbaH\x18r\x13\x10\x01\x18\x64\x32\r^[a-z0-9_].*$\xc8\x01\x01R\x04name\x12W\n\x0eschema_version\x18\x02 \x01(\tB0\x92\x41!2\x1aSchema version of the toolJ\x03\"1\"\xbaH\tr\x04\x10\x01\x18\n\xc8\x01\x01R\rschemaVersion\x12X\n\x0ctool_version\x18\x03 \x01(\tB5\x92\x41&2\x1fTool version to mark as defaultJ\x03\"1\"\xbaH\tr\x04\x10\x01\x18\n\xc8\x01\x01R\x0btoolVersion\"j\n\x16SetToolDefaultResponse\x12P\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB#\x92\x41 2\x1eThe tool now marked as defaultR\x04tool\"^\n\x11UpdateToolRequest\x12I\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB\x1c\x92\x41\x13\x32\x11Updated tool data\xbaH\x03\xc8\x01\x01R\x04tool\"X\n\x12UpdateToolResponse\x12\x42\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB\x15\x92\x41\x12\x32\x10The updated toolR\x04tool\"0\n\x11\x44\x65leteToolRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06:\x04tol_R\x02id\"\x97\x03\n\x16ListScopedToolsRequest\x12z\n\nidentifier\x18\x01 \x01(\tBZ\x92\x41M23Identifier of the connected account to filter toolsJ\x16\"app_google_workspace\"\xbaH\x07r\x02\x18\x64\xc8\x01\x01R\nidentifier\x12r\n\x06\x66ilter\x18\x02 \x01(\x0b\x32#.scalekit.v1.tools.ScopedToolFilterB5\x92\x41,2*Filter parameters for listing scoped tools\xbaH\x03\xc8\x01\x01R\x06\x66ilter\x12\x1b\n\tpage_size\x18\x03 \x01(\rR\x08pageSize\x12p\n\npage_token\x18\x04 \x01(\tBQ\x92\x41N2.Token from a previous response for pagination.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\x95\x03\n\x17ListScopedToolsResponse\x12v\n\x0fnext_page_token\x18\x01 \x01(\tBN\x92\x41K2)Token for fetching the next page of toolsJ\x1e\"eyJwYWdlIjozLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12Q\n\ntotal_size\x18\x02 \x01(\rB2\x92\x41/2(Total number of tools matching the queryJ\x03\x31\x30\x34R\ttotalSize\x12z\n\x0fprev_page_token\x18\x03 \x01(\tBR\x92\x41O2-Token for fetching the previous page of toolsJ\x1e\"eyJwYWdlIjoxLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12\x33\n\x05tools\x18\x05 \x03(\x0b\x32\x1d.scalekit.v1.tools.ScopedToolR\x05tools\"z\n\x10ScopedToolFilter\x12\x1c\n\tproviders\x18\x01 \x03(\tR\tproviders\x12\x1d\n\ntool_names\x18\x02 \x03(\tR\ttoolNames\x12)\n\x10\x63onnection_names\x18\x03 \x03(\tR\x0f\x63onnectionNames\"\xb3\x02\n\x19ListAvailableToolsRequest\x12\x86\x01\n\nidentifier\x18\x01 \x01(\tBf\x92\x41Y2?Identifier of the connected account to list available tools forJ\x16\"app_google_workspace\"\xbaH\x07r\x02\x18\x64\xc8\x01\x01R\nidentifier\x12\x1b\n\tpage_size\x18\x02 \x01(\rR\x08pageSize\x12p\n\npage_token\x18\x03 \x01(\tBQ\x92\x41N2.Token from a previous response for pagination.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\xcd\x03\n\x1aListAvailableToolsResponse\x12v\n\x0fnext_page_token\x18\x01 \x01(\tBN\x92\x41K2)Token for fetching the next page of toolsJ\x1e\"eyJwYWdlIjozLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12[\n\ntotal_size\x18\x02 \x01(\rB<\x92\x41\x39\x32\x32Total number of available tools matching the queryJ\x03\x31\x30\x34R\ttotalSize\x12z\n\x0fprev_page_token\x18\x03 \x01(\tBR\x92\x41O2-Token for fetching the previous page of toolsJ\x1e\"eyJwYWdlIjoxLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12^\n\x05tools\x18\x04 \x03(\x0b\x32\x17.scalekit.v1.tools.ToolB/\x92\x41,2*List of tools available for the identifierR\x05tools2\xe8\x18\n\x0bToolService\x12\xf2\x01\n\nCreateTool\x12$.scalekit.v1.tools.CreateToolRequest\x1a%.scalekit.v1.tools.CreateToolResponse\"\x96\x01\x92\x41\x63\n\x05Tools\x12\x11\x43reate a new tool\x1aGRegister a new tool with its schema, metadata, and other configuration.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\"\r/api/v1/tools:\x04tool\x12\xfa\x01\n\tListTools\x12#.scalekit.v1.tools.ListToolsRequest\x1a$.scalekit.v1.tools.ListToolsResponse\"\xa1\x01\x92\x41t\n\x05Tools\x12\nList tools\x1a_Fetch tools by provider, identifier, and connector. If `summary=true`, returns only tool names.\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x0f\x12\r/api/v1/tools\x12\x9b\x01\n\x0fListScopedTools\x12).scalekit.v1.tools.ListScopedToolsRequest\x1a*.scalekit.v1.tools.ListScopedToolsResponse\"1\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/tools/scoped\x12\x84\x04\n\x12ListAvailableTools\x12,.scalekit.v1.tools.ListAvailableToolsRequest\x1a-.scalekit.v1.tools.ListAvailableToolsResponse\"\x90\x03\x92\x41\xd8\x02\n\x05Tools\x12\x31List all tools for a connected account identifier\x1aQLists all tools for a given Connected Account Identifier. Identifier is required.J*\n\x03\x32\x30\x30\x12#\n!Paginated list of available toolsJ:\n\x03\x34\x30\x30\x12\x33\n1Invalid request - missing or malformed identifierJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJ\x1d\n\x03\x34\x30\x34\x12\x16\n\x14Identifier not found\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\x12\x17/api/v1/tools/available\x12\xac\x02\n\x0eSetToolDefault\x12(.scalekit.v1.tools.SetToolDefaultRequest\x1a).scalekit.v1.tools.SetToolDefaultResponse\"\xc4\x01\x92\x41\x87\x01\n\x05Tools\x12#Marks a tool as the default version\x1aYSet a specific tool (by name, schema version, tool version, and provider) as the default.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\"\x19/api/v1/tools:set_default:\x01*\x12\xd8\x01\n\nUpdateTool\x12$.scalekit.v1.tools.UpdateToolRequest\x1a%.scalekit.v1.tools.UpdateToolResponse\"}\x92\x41J\n\x05Tools\x12\rUpdate a tool\x1a\x32Update an existing tool by provider and tool name.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\x1a\r/api/v1/tools:\x04tool\x12\xd9\x01\n\nDeleteTool\x12$.scalekit.v1.tools.DeleteToolRequest\x1a\x16.google.protobuf.Empty\"\x8c\x01\x92\x41Z\n\x05Tools\x12\rDelete a tool\x1a\x42\x44\x65lete a tool by name, schema version, tool version, and provider.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x14*\x12/api/v1/tools/{id}\x12\xc2\t\n\x0b\x45xecuteTool\x12%.scalekit.v1.tools.ExecuteToolRequest\x1a&.scalekit.v1.tools.ExecuteToolResponse\"\xe3\x08\x92\x41\xba\x08\n\x12\x43onnected Accounts\x12(Execute a tool using a connected account\x1a\xcf\x03\x45xecutes a tool action using authentication credentials from a connected account. Specify the tool by name and provide required parameters as JSON. The connected account can be identified by ID, or by combination of organization/user, connector, and identifier. Returns the execution result data and a unique execution ID for tracking. Use this endpoint to perform actions like sending emails, creating calendar events, or managing resources in external services.Jq\n\x03\x32\x30\x30\x12j\n\x92\x41;2\"Additional metadata about the toolJ\x15{\"category\": \"email\"}R\x08metadata\x12X\n\x04tags\x18\x05 \x03(\tBD\x92\x41\x41\x32$Tags for categorization or filteringJ\x19[\"notification\", \"email\"]R\x04tags\x12\x83\x01\n\nis_default\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBH\x92\x41\x42\x32:Marks this tool as the default version for the combinationJ\x04true\xe0\x41\x03R\tisDefault\x12\x83\x01\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampBH\x92\x41\x42\x32(Timestamp when the tool was last updatedJ\x16\"2023-10-01T12:00:00Z\"\xe0\x41\x03R\tupdatedAt\"\xd3\x01\n\nScopedTool\x12+\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolR\x04tool\x12\x1e\n\nidentifier\x18\x02 \x01(\tR\nidentifier\x12x\n\x14\x63onnected_account_id\x18\x03 \x01(\tBF\x92\x41<20ID of the connected account for this scoped toolJ\x08\"ca_123\"\xbaH\x04r\x02\x18\x64R\x12\x63onnectedAccountId\"\xfe\x01\n\x10ListToolsRequest\x12[\n\x06\x66ilter\x18\x01 \x01(\x0b\x32\x19.scalekit.v1.tools.FilterB(\x92\x41%2#Filter parameters for listing toolsR\x06\x66ilter\x12\x1b\n\tpage_size\x18\x02 \x01(\rR\x08pageSize\x12p\n\npage_token\x18\x03 \x01(\tBQ\x92\x41N2.Token from a previous response for pagination.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\x85\n\n\x06\x46ilter\x12t\n\x07summary\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB>\x92\x41;23Return only tool names instead of full tool detailsJ\x04trueR\x07summary\x12I\n\x08provider\x18\x02 \x01(\tB-\x92\x41#2\x17\x46ilter by tool providerJ\x08\"GOOGLE\"\xbaH\x04r\x02\x18\x32R\x08provider\x12j\n\nidentifier\x18\x03 \x01(\tBJ\x92\x41@2&Filter by connected account identifierJ\x16\"app_google_workspace\"\xbaH\x04r\x02\x18\x64R\nidentifier\x12I\n\ttool_name\x18\x04 \x03(\tB,\x92\x41)2\x13\x46ilter by tool nameJ\x12\"gmail_send_email\"R\x08toolName\x12g\n\x05query\x18\x05 \x01(\tBL\x92\x41@2&Filter by connected account identifierJ\x16\"gmail get attachment\"\xbaH\x06r\x04\x10\x03\x18\x64H\x00R\x05query\x88\x01\x01\x12\xdf\x01\n\tconnector\x18\x06 \x01(\tB\xbb\x01\x92\x41\xaf\x01\x32\xa0\x01\x43onnector name (e.g. \'My Gmail\'). When set together with identifier, resolves to a specific connected account and includes its custom MCP tools in the response.J\n\"My Gmail\"\xbaH\x05r\x03\x18\x90\x03H\x01R\tconnector\x88\x01\x01\x12\x87\x01\n\x0forganization_id\x18\x07 \x01(\tBY\x92\x41O26Organization ID to scope the connected account lookup.J\x15\"org_121312434123312\"\xbaH\x04r\x02\x18 H\x02R\x0eorganizationId\x88\x01\x01\x12p\n\x07user_id\x18\x08 \x01(\tBR\x92\x41H2.User ID to scope the connected account lookup.J\x16\"user_121312434123312\"\xbaH\x04r\x02\x18 H\x03R\x06userId\x88\x01\x01\x12\xea\x01\n\x14\x63onnected_account_id\x18\t \x01(\tB\xb2\x01\x92\x41\xa2\x01\x32\x95\x01\x43onnected account ID. Alternative to identifier + connector for directly identifying the connected account whose custom MCP tools should be included.J\x08\"ca_123\"\xbaH\tr\x07\x18\x64:\x03\x63\x61_H\x04R\x12\x63onnectedAccountId\x88\x01\x01\x42\x08\n\x06_queryB\x0c\n\n_connectorB\x12\n\x10_organization_idB\n\n\x08_user_idB\x17\n\x15_connected_account_id\"\x9b\x04\n\x11ListToolsResponse\x12v\n\x0fnext_page_token\x18\x01 \x01(\tBN\x92\x41K2)Token for fetching the next page of toolsJ\x1e\"eyJwYWdlIjozLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12Q\n\ntotal_size\x18\x02 \x01(\rB2\x92\x41/2(Total number of tools matching the queryJ\x03\x31\x30\x34R\ttotalSize\x12z\n\x0fprev_page_token\x18\x03 \x01(\tBR\x92\x41O2-Token for fetching the previous page of toolsJ\x1e\"eyJwYWdlIjoxLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12^\n\ntool_names\x18\x04 \x03(\tB?\x92\x41<2$List of tool names (if summary=true)J\x14[\"gmail_send_email\"]R\ttoolNames\x12_\n\x05tools\x18\x05 \x03(\x0b\x32\x17.scalekit.v1.tools.ToolB0\x92\x41-2+List of tools (if summary=false or omitted)R\x05tools\"\xe5\x0e\n\x12\x45xecuteToolRequest\x12Q\n\ttool_name\x18\x01 \x01(\tB4\x92\x41+2\x1bName of the tool to executeJ\x0c\"send_email\"\xbaH\x03\xc8\x01\x01R\x08toolName\x12\x99\x02\n\nidentifier\x18\x02 \x01(\tB\xf3\x01\x92\x41\xef\x01\x32\xd8\x01Optional. The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier). Use this in combination with connector to identify the connected account.J\x12\"user@example.com\"H\x00R\nidentifier\x88\x01\x01\x12\xfc\x01\n\x06params\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructB\xca\x01\x92\x41\xc6\x01\x32}JSON object containing the parameters required for tool execution. The structure depends on the specific tool being executed.JE{\"to\": \"user@example.com\", \"subject\": \"Hello\", \"body\": \"Hello World\"}R\x06params\x12\xea\x01\n\x14\x63onnected_account_id\x18\x04 \x01(\tB\xb2\x01\x92\x41\xa7\x01\x32\x9a\x01Optional. The unique ID of the connected account. Use this to directly identify the connected account instead of using identifier + connector combination.J\x08\"ca_123\"\xbaH\x04r\x02\x18\x64H\x01R\x12\x63onnectedAccountId\x88\x01\x01\x12\xed\x01\n\tconnector\x18\x05 \x01(\tB\xc9\x01\x92\x41\xbd\x01\x32\xa6\x01Optional. The name of the connector/provider (e.g., \'Google Workspace\', \'Slack\', \'Notion\'). Use this in combination with identifier to identify the connected account.J\x12\"Google Workspace\"\xbaH\x05r\x03\x18\x90\x03H\x02R\tconnector\x88\x01\x01\x12\xee\x01\n\x0forganization_id\x18\x06 \x01(\tB\xbf\x01\x92\x41\xb4\x01\x32\xa6\x01Optional. The organization ID to scope the connected account lookup. Use this to narrow down the search when the same identifier exists across multiple organizations.J\t\"org_123\"\xbaH\x04r\x02\x18\x64H\x03R\x0eorganizationId\x88\x01\x01\x12\xcf\x01\n\x07user_id\x18\x07 \x01(\tB\xb0\x01\x92\x41\xa5\x01\x32\x96\x01Optional. The user ID to scope the connected account lookup. Use this to narrow down the search when the same identifier exists across multiple users.J\n\"user_123\"\xbaH\x04r\x02\x18\x64H\x04R\x06userId\x88\x01\x01\x12\xd9\x01\n\x0c\x61gent_run_id\x18\x08 \x01(\tB\xb1\x01\x92\x41\xa5\x01\x32\x94\x01Optional. Customer-supplied identifier grouping multiple tool calls into a single agent run. Useful for correlating logs across an agentic workflow.J\x0c\"run_abc123\"\xbaH\x05r\x03\x18\xff\x01H\x05R\nagentRunId\x88\x01\x01\x42\r\n\x0b_identifierB\x17\n\x15_connected_account_idB\x0c\n\n_connectorB\x12\n\x10_organization_idB\n\n\x08_user_idB\x0f\n\r_agent_run_id\"\xa3\x02\n\x13\x45xecuteToolResponse\x12\xac\x01\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\x7f\x92\x41|23Free-flowing JSON parameters for the tool executionJE{\"to\": \"user@example.com\", \"subject\": \"Hello\", \"body\": \"Hello World\"}R\x04\x64\x61ta\x12]\n\x0c\x65xecution_id\x18\x02 \x01(\tB:\x92\x41\x37\x32(Unique identifier for the tool executionJ\x0b\"123456789\"R\x0b\x65xecutionId\"\xad\x02\n\x15SetToolDefaultRequest\x12\x61\n\x04name\x18\x01 \x01(\tBM\x92\x41/2\x19\x46ully qualified tool nameJ\x12\"gmail_send_email\"\xbaH\x18r\x13\x10\x01\x18\x64\x32\r^[a-z0-9_].*$\xc8\x01\x01R\x04name\x12W\n\x0eschema_version\x18\x02 \x01(\tB0\x92\x41!2\x1aSchema version of the toolJ\x03\"1\"\xbaH\tr\x04\x10\x01\x18\n\xc8\x01\x01R\rschemaVersion\x12X\n\x0ctool_version\x18\x03 \x01(\tB5\x92\x41&2\x1fTool version to mark as defaultJ\x03\"1\"\xbaH\tr\x04\x10\x01\x18\n\xc8\x01\x01R\x0btoolVersion\"j\n\x16SetToolDefaultResponse\x12P\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB#\x92\x41 2\x1eThe tool now marked as defaultR\x04tool\"^\n\x11UpdateToolRequest\x12I\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB\x1c\x92\x41\x13\x32\x11Updated tool data\xbaH\x03\xc8\x01\x01R\x04tool\"X\n\x12UpdateToolResponse\x12\x42\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB\x15\x92\x41\x12\x32\x10The updated toolR\x04tool\"0\n\x11\x44\x65leteToolRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06:\x04tol_R\x02id\"\x97\x03\n\x16ListScopedToolsRequest\x12z\n\nidentifier\x18\x01 \x01(\tBZ\x92\x41M23Identifier of the connected account to filter toolsJ\x16\"app_google_workspace\"\xbaH\x07r\x02\x18\x64\xc8\x01\x01R\nidentifier\x12r\n\x06\x66ilter\x18\x02 \x01(\x0b\x32#.scalekit.v1.tools.ScopedToolFilterB5\x92\x41,2*Filter parameters for listing scoped tools\xbaH\x03\xc8\x01\x01R\x06\x66ilter\x12\x1b\n\tpage_size\x18\x03 \x01(\rR\x08pageSize\x12p\n\npage_token\x18\x04 \x01(\tBQ\x92\x41N2.Token from a previous response for pagination.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\x95\x03\n\x17ListScopedToolsResponse\x12v\n\x0fnext_page_token\x18\x01 \x01(\tBN\x92\x41K2)Token for fetching the next page of toolsJ\x1e\"eyJwYWdlIjozLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12Q\n\ntotal_size\x18\x02 \x01(\rB2\x92\x41/2(Total number of tools matching the queryJ\x03\x31\x30\x34R\ttotalSize\x12z\n\x0fprev_page_token\x18\x03 \x01(\tBR\x92\x41O2-Token for fetching the previous page of toolsJ\x1e\"eyJwYWdlIjoxLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12\x33\n\x05tools\x18\x05 \x03(\x0b\x32\x1d.scalekit.v1.tools.ScopedToolR\x05tools\"z\n\x10ScopedToolFilter\x12\x1c\n\tproviders\x18\x01 \x03(\tR\tproviders\x12\x1d\n\ntool_names\x18\x02 \x03(\tR\ttoolNames\x12)\n\x10\x63onnection_names\x18\x03 \x03(\tR\x0f\x63onnectionNames\"\xb3\x02\n\x19ListAvailableToolsRequest\x12\x86\x01\n\nidentifier\x18\x01 \x01(\tBf\x92\x41Y2?Identifier of the connected account to list available tools forJ\x16\"app_google_workspace\"\xbaH\x07r\x02\x18\x64\xc8\x01\x01R\nidentifier\x12\x1b\n\tpage_size\x18\x02 \x01(\rR\x08pageSize\x12p\n\npage_token\x18\x03 \x01(\tBQ\x92\x41N2.Token from a previous response for pagination.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\xcd\x03\n\x1aListAvailableToolsResponse\x12v\n\x0fnext_page_token\x18\x01 \x01(\tBN\x92\x41K2)Token for fetching the next page of toolsJ\x1e\"eyJwYWdlIjozLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12[\n\ntotal_size\x18\x02 \x01(\rB<\x92\x41\x39\x32\x32Total number of available tools matching the queryJ\x03\x31\x30\x34R\ttotalSize\x12z\n\x0fprev_page_token\x18\x03 \x01(\tBR\x92\x41O2-Token for fetching the previous page of toolsJ\x1e\"eyJwYWdlIjoxLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12^\n\x05tools\x18\x04 \x03(\x0b\x32\x17.scalekit.v1.tools.ToolB/\x92\x41,2*List of tools available for the identifierR\x05tools2\xe8\x18\n\x0bToolService\x12\xf2\x01\n\nCreateTool\x12$.scalekit.v1.tools.CreateToolRequest\x1a%.scalekit.v1.tools.CreateToolResponse\"\x96\x01\x92\x41\x63\n\x05Tools\x12\x11\x43reate a new tool\x1aGRegister a new tool with its schema, metadata, and other configuration.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\"\r/api/v1/tools:\x04tool\x12\xfa\x01\n\tListTools\x12#.scalekit.v1.tools.ListToolsRequest\x1a$.scalekit.v1.tools.ListToolsResponse\"\xa1\x01\x92\x41t\n\x05Tools\x12\nList tools\x1a_Fetch tools by provider, identifier, and connector. If `summary=true`, returns only tool names.\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x0f\x12\r/api/v1/tools\x12\x9b\x01\n\x0fListScopedTools\x12).scalekit.v1.tools.ListScopedToolsRequest\x1a*.scalekit.v1.tools.ListScopedToolsResponse\"1\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/tools/scoped\x12\x84\x04\n\x12ListAvailableTools\x12,.scalekit.v1.tools.ListAvailableToolsRequest\x1a-.scalekit.v1.tools.ListAvailableToolsResponse\"\x90\x03\x92\x41\xd8\x02\n\x05Tools\x12\x31List all tools for a connected account identifier\x1aQLists all tools for a given Connected Account Identifier. Identifier is required.J*\n\x03\x32\x30\x30\x12#\n!Paginated list of available toolsJ:\n\x03\x34\x30\x30\x12\x33\n1Invalid request - missing or malformed identifierJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJ\x1d\n\x03\x34\x30\x34\x12\x16\n\x14Identifier not found\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\x12\x17/api/v1/tools/available\x12\xac\x02\n\x0eSetToolDefault\x12(.scalekit.v1.tools.SetToolDefaultRequest\x1a).scalekit.v1.tools.SetToolDefaultResponse\"\xc4\x01\x92\x41\x87\x01\n\x05Tools\x12#Marks a tool as the default version\x1aYSet a specific tool (by name, schema version, tool version, and provider) as the default.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\"\x19/api/v1/tools:set_default:\x01*\x12\xd8\x01\n\nUpdateTool\x12$.scalekit.v1.tools.UpdateToolRequest\x1a%.scalekit.v1.tools.UpdateToolResponse\"}\x92\x41J\n\x05Tools\x12\rUpdate a tool\x1a\x32Update an existing tool by provider and tool name.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\x1a\r/api/v1/tools:\x04tool\x12\xd9\x01\n\nDeleteTool\x12$.scalekit.v1.tools.DeleteToolRequest\x1a\x16.google.protobuf.Empty\"\x8c\x01\x92\x41Z\n\x05Tools\x12\rDelete a tool\x1a\x42\x44\x65lete a tool by name, schema version, tool version, and provider.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x14*\x12/api/v1/tools/{id}\x12\xc2\t\n\x0b\x45xecuteTool\x12%.scalekit.v1.tools.ExecuteToolRequest\x1a&.scalekit.v1.tools.ExecuteToolResponse\"\xe3\x08\x92\x41\xba\x08\n\x12\x43onnected Accounts\x12(Execute a tool using a connected account\x1a\xcf\x03\x45xecutes a tool action using authentication credentials from a connected account. Specify the tool by name and provide required parameters as JSON. The connected account can be identified by ID, or by combination of organization/user, connector, and identifier. Returns the execution result data and a unique execution ID for tracking. Use this endpoint to perform actions like sending emails, creating calendar events, or managing resources in external services.Jq\n\x03\x32\x30\x30\x12j\n None: ... class ExecuteToolRequest(_message.Message): - __slots__ = ("tool_name", "identifier", "params", "connected_account_id", "connector", "organization_id", "user_id") + __slots__ = ("tool_name", "identifier", "params", "connected_account_id", "connector", "organization_id", "user_id", "agent_run_id") TOOL_NAME_FIELD_NUMBER: _ClassVar[int] IDENTIFIER_FIELD_NUMBER: _ClassVar[int] PARAMS_FIELD_NUMBER: _ClassVar[int] @@ -110,6 +110,7 @@ class ExecuteToolRequest(_message.Message): CONNECTOR_FIELD_NUMBER: _ClassVar[int] ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] USER_ID_FIELD_NUMBER: _ClassVar[int] + AGENT_RUN_ID_FIELD_NUMBER: _ClassVar[int] tool_name: str identifier: str params: _struct_pb2.Struct @@ -117,7 +118,8 @@ class ExecuteToolRequest(_message.Message): connector: str organization_id: str user_id: str - def __init__(self, tool_name: _Optional[str] = ..., identifier: _Optional[str] = ..., params: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., connected_account_id: _Optional[str] = ..., connector: _Optional[str] = ..., organization_id: _Optional[str] = ..., user_id: _Optional[str] = ...) -> None: ... + agent_run_id: str + def __init__(self, tool_name: _Optional[str] = ..., identifier: _Optional[str] = ..., params: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., connected_account_id: _Optional[str] = ..., connector: _Optional[str] = ..., organization_id: _Optional[str] = ..., user_id: _Optional[str] = ..., agent_run_id: _Optional[str] = ...) -> None: ... class ExecuteToolResponse(_message.Message): __slots__ = ("data", "execution_id") diff --git a/tests/test_organization_session_policy.py b/tests/test_organization_session_policy.py new file mode 100644 index 0000000..dbf3463 --- /dev/null +++ b/tests/test_organization_session_policy.py @@ -0,0 +1,102 @@ +from faker import Faker + +from basetest import BaseTest +from scalekit.v1.organizations.organizations_pb2 import ( + CreateOrganization, + SessionPolicyType, +) +from scalekit.v1.commons.commons_pb2 import TimeUnit + + +class TestOrganizationSessionPolicy(BaseTest): + """Test cases for organization session policy management.""" + + def setUp(self): + self.org_id = None + + def _create_org(self): + organization = CreateOrganization(display_name=Faker().company(), external_id=Faker().uuid4()) + response = self.scalekit_client.organization.create_organization(organization=organization) + self.org_id = response[0].organization.id + return self.org_id + + def test_get_default_policy(self): + """New org should inherit APPLICATION policy by default.""" + org_id = self._create_org() + + policy = self.scalekit_client.organization.get_organization_session_policy( + organization_id=org_id + ) + + self.assertIsNotNone(policy) + self.assertEqual(policy.policy_source, SessionPolicyType.APPLICATION) + + def test_set_custom_policy(self): + """Setting a custom policy should persist and be retrievable.""" + org_id = self._create_org() + + policy = self.scalekit_client.organization.update_organization_session_policy( + organization_id=org_id, + policy_source=SessionPolicyType.CUSTOM, + absolute_session_timeout=360, + absolute_session_timeout_unit=TimeUnit.MINUTES, + idle_session_timeout_enabled=True, + idle_session_timeout=60, + idle_session_timeout_unit=TimeUnit.MINUTES, + ) + + self.assertIsNotNone(policy) + self.assertEqual(policy.policy_source, SessionPolicyType.CUSTOM) + + fetched = self.scalekit_client.organization.get_organization_session_policy( + organization_id=org_id + ) + self.assertEqual(fetched.policy_source, SessionPolicyType.CUSTOM) + self.assertTrue(fetched.HasField("absolute_session_timeout")) + self.assertEqual(fetched.absolute_session_timeout.value, 360) + self.assertTrue(fetched.HasField("idle_session_timeout_enabled")) + self.assertTrue(fetched.idle_session_timeout_enabled.value) + + def test_revert_to_application_policy(self): + """Setting policy source to APPLICATION should revert to application defaults.""" + org_id = self._create_org() + + self.scalekit_client.organization.update_organization_session_policy( + organization_id=org_id, + policy_source=SessionPolicyType.CUSTOM, + absolute_session_timeout=120, + absolute_session_timeout_unit=TimeUnit.MINUTES, + ) + + reverted = self.scalekit_client.organization.update_organization_session_policy( + organization_id=org_id, + policy_source=SessionPolicyType.APPLICATION, + ) + + self.assertIsNotNone(reverted) + self.assertEqual(reverted.policy_source, SessionPolicyType.APPLICATION) + + def test_set_idle_timeout_disabled(self): + """Setting idle_session_timeout_enabled=False should persist as false.""" + org_id = self._create_org() + + policy = self.scalekit_client.organization.update_organization_session_policy( + organization_id=org_id, + policy_source=SessionPolicyType.CUSTOM, + absolute_session_timeout=480, + absolute_session_timeout_unit=TimeUnit.MINUTES, + idle_session_timeout_enabled=False, + ) + + self.assertIsNotNone(policy) + self.assertEqual(policy.policy_source, SessionPolicyType.CUSTOM) + + fetched = self.scalekit_client.organization.get_organization_session_policy( + organization_id=org_id + ) + self.assertTrue(fetched.HasField("idle_session_timeout_enabled")) + self.assertFalse(fetched.idle_session_timeout_enabled.value) + + def tearDown(self): + if self.org_id: + self.scalekit_client.organization.delete_organization(organization_id=self.org_id) From 2d8760cae3d780e9f24cf8aafa4fb5f49ed22738 Mon Sep 17 00:00:00 2001 From: Srinivas Karre Date: Sun, 10 May 2026 16:10:38 +0530 Subject: [PATCH 04/19] fix: add --include-imports to generate-local and restore buf/validate stubs The generate-local target was missing --include-imports, causing buf/validate generated files to be absent while generated stubs still imported them. --- Makefile | 2 +- buf/validate/__init__.py | 0 buf/validate/expression_pb2.py | 31 ++ buf/validate/expression_pb2.pyi | 34 ++ buf/validate/expression_pb2_grpc.py | 4 + buf/validate/priv/__init__.py | 0 buf/validate/priv/private_pb2.py | 30 ++ buf/validate/priv/private_pb2.pyi | 25 ++ buf/validate/priv/private_pb2_grpc.py | 4 + buf/validate/validate_pb2.py | 402 ++++++++++++++++++++ buf/validate/validate_pb2.pyi | 503 ++++++++++++++++++++++++++ buf/validate/validate_pb2_grpc.py | 4 + 12 files changed, 1038 insertions(+), 1 deletion(-) create mode 100644 buf/validate/__init__.py create mode 100644 buf/validate/expression_pb2.py create mode 100644 buf/validate/expression_pb2.pyi create mode 100644 buf/validate/expression_pb2_grpc.py create mode 100644 buf/validate/priv/__init__.py create mode 100644 buf/validate/priv/private_pb2.py create mode 100644 buf/validate/priv/private_pb2.pyi create mode 100644 buf/validate/priv/private_pb2_grpc.py create mode 100644 buf/validate/validate_pb2.py create mode 100644 buf/validate/validate_pb2.pyi create mode 100644 buf/validate/validate_pb2_grpc.py diff --git a/Makefile b/Makefile index ad65310..a1305d9 100644 --- a/Makefile +++ b/Makefile @@ -115,7 +115,7 @@ generate-local: tools-check mkdir -p proto; \ rsync -av "$(LOCAL_PROTO_DIR)/" proto/; \ $(MAKE) prepare; prepared=1; \ - buf generate ../scalekit; \ + buf generate --include-imports ../scalekit; \ $(MAKE) restore; prepared=0; \ mkdir -p $(BUF_DIR); \ $(MAKE) generate_init_files; \ diff --git a/buf/validate/__init__.py b/buf/validate/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/buf/validate/expression_pb2.py b/buf/validate/expression_pb2.py new file mode 100644 index 0000000..e3287fd --- /dev/null +++ b/buf/validate/expression_pb2.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: buf/validate/expression.proto +# Protobuf Python Version: 5.26.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1d\x62uf/validate/expression.proto\x12\x0c\x62uf.validate\"V\n\nConstraint\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x18\n\x07message\x18\x02 \x01(\tR\x07message\x12\x1e\n\nexpression\x18\x03 \x01(\tR\nexpression\"E\n\nViolations\x12\x37\n\nviolations\x18\x01 \x03(\x0b\x32\x17.buf.validate.ViolationR\nviolations\"\x82\x01\n\tViolation\x12\x1d\n\nfield_path\x18\x01 \x01(\tR\tfieldPath\x12#\n\rconstraint_id\x18\x02 \x01(\tR\x0c\x63onstraintId\x12\x18\n\x07message\x18\x03 \x01(\tR\x07message\x12\x17\n\x07\x66or_key\x18\x04 \x01(\x08R\x06\x66orKeyBp\n\x12\x62uild.buf.validateB\x0f\x45xpressionProtoP\x01ZGbuf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validateb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'buf.validate.expression_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\022build.buf.validateB\017ExpressionProtoP\001ZGbuf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate' + _globals['_CONSTRAINT']._serialized_start=47 + _globals['_CONSTRAINT']._serialized_end=133 + _globals['_VIOLATIONS']._serialized_start=135 + _globals['_VIOLATIONS']._serialized_end=204 + _globals['_VIOLATION']._serialized_start=207 + _globals['_VIOLATION']._serialized_end=337 +# @@protoc_insertion_point(module_scope) diff --git a/buf/validate/expression_pb2.pyi b/buf/validate/expression_pb2.pyi new file mode 100644 index 0000000..747c650 --- /dev/null +++ b/buf/validate/expression_pb2.pyi @@ -0,0 +1,34 @@ +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class Constraint(_message.Message): + __slots__ = ("id", "message", "expression") + ID_FIELD_NUMBER: _ClassVar[int] + MESSAGE_FIELD_NUMBER: _ClassVar[int] + EXPRESSION_FIELD_NUMBER: _ClassVar[int] + id: str + message: str + expression: str + def __init__(self, id: _Optional[str] = ..., message: _Optional[str] = ..., expression: _Optional[str] = ...) -> None: ... + +class Violations(_message.Message): + __slots__ = ("violations",) + VIOLATIONS_FIELD_NUMBER: _ClassVar[int] + violations: _containers.RepeatedCompositeFieldContainer[Violation] + def __init__(self, violations: _Optional[_Iterable[_Union[Violation, _Mapping]]] = ...) -> None: ... + +class Violation(_message.Message): + __slots__ = ("field_path", "constraint_id", "message", "for_key") + FIELD_PATH_FIELD_NUMBER: _ClassVar[int] + CONSTRAINT_ID_FIELD_NUMBER: _ClassVar[int] + MESSAGE_FIELD_NUMBER: _ClassVar[int] + FOR_KEY_FIELD_NUMBER: _ClassVar[int] + field_path: str + constraint_id: str + message: str + for_key: bool + def __init__(self, field_path: _Optional[str] = ..., constraint_id: _Optional[str] = ..., message: _Optional[str] = ..., for_key: bool = ...) -> None: ... diff --git a/buf/validate/expression_pb2_grpc.py b/buf/validate/expression_pb2_grpc.py new file mode 100644 index 0000000..2daafff --- /dev/null +++ b/buf/validate/expression_pb2_grpc.py @@ -0,0 +1,4 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc + diff --git a/buf/validate/priv/__init__.py b/buf/validate/priv/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/buf/validate/priv/private_pb2.py b/buf/validate/priv/private_pb2.py new file mode 100644 index 0000000..0bab1bc --- /dev/null +++ b/buf/validate/priv/private_pb2.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: buf/validate/priv/private.proto +# Protobuf Python Version: 5.26.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1f\x62uf/validate/priv/private.proto\x12\x11\x62uf.validate.priv\x1a google/protobuf/descriptor.proto\"C\n\x10\x46ieldConstraints\x12/\n\x03\x63\x65l\x18\x01 \x03(\x0b\x32\x1d.buf.validate.priv.ConstraintR\x03\x63\x65l\"V\n\nConstraint\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x18\n\x07message\x18\x02 \x01(\tR\x07message\x12\x1e\n\nexpression\x18\x03 \x01(\tR\nexpression:\\\n\x05\x66ield\x12\x1d.google.protobuf.FieldOptions\x18\x88\t \x01(\x0b\x32#.buf.validate.priv.FieldConstraintsR\x05\x66ield\x88\x01\x01\x42w\n\x17\x62uild.buf.validate.privB\x0cPrivateProtoP\x01ZLbuf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate/privb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'buf.validate.priv.private_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\027build.buf.validate.privB\014PrivateProtoP\001ZLbuf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate/priv' + _globals['_FIELDCONSTRAINTS']._serialized_start=88 + _globals['_FIELDCONSTRAINTS']._serialized_end=155 + _globals['_CONSTRAINT']._serialized_start=157 + _globals['_CONSTRAINT']._serialized_end=243 +# @@protoc_insertion_point(module_scope) diff --git a/buf/validate/priv/private_pb2.pyi b/buf/validate/priv/private_pb2.pyi new file mode 100644 index 0000000..f42ef5a --- /dev/null +++ b/buf/validate/priv/private_pb2.pyi @@ -0,0 +1,25 @@ +from google.protobuf import descriptor_pb2 as _descriptor_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor +FIELD_FIELD_NUMBER: _ClassVar[int] +field: _descriptor.FieldDescriptor + +class FieldConstraints(_message.Message): + __slots__ = ("cel",) + CEL_FIELD_NUMBER: _ClassVar[int] + cel: _containers.RepeatedCompositeFieldContainer[Constraint] + def __init__(self, cel: _Optional[_Iterable[_Union[Constraint, _Mapping]]] = ...) -> None: ... + +class Constraint(_message.Message): + __slots__ = ("id", "message", "expression") + ID_FIELD_NUMBER: _ClassVar[int] + MESSAGE_FIELD_NUMBER: _ClassVar[int] + EXPRESSION_FIELD_NUMBER: _ClassVar[int] + id: str + message: str + expression: str + def __init__(self, id: _Optional[str] = ..., message: _Optional[str] = ..., expression: _Optional[str] = ...) -> None: ... diff --git a/buf/validate/priv/private_pb2_grpc.py b/buf/validate/priv/private_pb2_grpc.py new file mode 100644 index 0000000..2daafff --- /dev/null +++ b/buf/validate/priv/private_pb2_grpc.py @@ -0,0 +1,4 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc + diff --git a/buf/validate/validate_pb2.py b/buf/validate/validate_pb2.py new file mode 100644 index 0000000..77e903d --- /dev/null +++ b/buf/validate/validate_pb2.py @@ -0,0 +1,402 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: buf/validate/validate.proto +# Protobuf Python Version: 5.26.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from buf.validate import expression_pb2 as buf_dot_validate_dot_expression__pb2 +from buf.validate.priv import private_pb2 as buf_dot_validate_dot_priv_dot_private__pb2 +from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 +from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2 +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x62uf/validate/validate.proto\x12\x0c\x62uf.validate\x1a\x1d\x62uf/validate/expression.proto\x1a\x1f\x62uf/validate/priv/private.proto\x1a google/protobuf/descriptor.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"n\n\x12MessageConstraints\x12\x1f\n\x08\x64isabled\x18\x01 \x01(\x08H\x00R\x08\x64isabled\x88\x01\x01\x12*\n\x03\x63\x65l\x18\x03 \x03(\x0b\x32\x18.buf.validate.ConstraintR\x03\x63\x65lB\x0b\n\t_disabled\"@\n\x10OneofConstraints\x12\x1f\n\x08required\x18\x01 \x01(\x08H\x00R\x08required\x88\x01\x01\x42\x0b\n\t_required\"\xab\n\n\x10\x46ieldConstraints\x12*\n\x03\x63\x65l\x18\x17 \x03(\x0b\x32\x18.buf.validate.ConstraintR\x03\x63\x65l\x12\x1a\n\x08required\x18\x19 \x01(\x08R\x08required\x12,\n\x06ignore\x18\x1b \x01(\x0e\x32\x14.buf.validate.IgnoreR\x06ignore\x12\x30\n\x05\x66loat\x18\x01 \x01(\x0b\x32\x18.buf.validate.FloatRulesH\x00R\x05\x66loat\x12\x33\n\x06\x64ouble\x18\x02 \x01(\x0b\x32\x19.buf.validate.DoubleRulesH\x00R\x06\x64ouble\x12\x30\n\x05int32\x18\x03 \x01(\x0b\x32\x18.buf.validate.Int32RulesH\x00R\x05int32\x12\x30\n\x05int64\x18\x04 \x01(\x0b\x32\x18.buf.validate.Int64RulesH\x00R\x05int64\x12\x33\n\x06uint32\x18\x05 \x01(\x0b\x32\x19.buf.validate.UInt32RulesH\x00R\x06uint32\x12\x33\n\x06uint64\x18\x06 \x01(\x0b\x32\x19.buf.validate.UInt64RulesH\x00R\x06uint64\x12\x33\n\x06sint32\x18\x07 \x01(\x0b\x32\x19.buf.validate.SInt32RulesH\x00R\x06sint32\x12\x33\n\x06sint64\x18\x08 \x01(\x0b\x32\x19.buf.validate.SInt64RulesH\x00R\x06sint64\x12\x36\n\x07\x66ixed32\x18\t \x01(\x0b\x32\x1a.buf.validate.Fixed32RulesH\x00R\x07\x66ixed32\x12\x36\n\x07\x66ixed64\x18\n \x01(\x0b\x32\x1a.buf.validate.Fixed64RulesH\x00R\x07\x66ixed64\x12\x39\n\x08sfixed32\x18\x0b \x01(\x0b\x32\x1b.buf.validate.SFixed32RulesH\x00R\x08sfixed32\x12\x39\n\x08sfixed64\x18\x0c \x01(\x0b\x32\x1b.buf.validate.SFixed64RulesH\x00R\x08sfixed64\x12-\n\x04\x62ool\x18\r \x01(\x0b\x32\x17.buf.validate.BoolRulesH\x00R\x04\x62ool\x12\x33\n\x06string\x18\x0e \x01(\x0b\x32\x19.buf.validate.StringRulesH\x00R\x06string\x12\x30\n\x05\x62ytes\x18\x0f \x01(\x0b\x32\x18.buf.validate.BytesRulesH\x00R\x05\x62ytes\x12-\n\x04\x65num\x18\x10 \x01(\x0b\x32\x17.buf.validate.EnumRulesH\x00R\x04\x65num\x12\x39\n\x08repeated\x18\x12 \x01(\x0b\x32\x1b.buf.validate.RepeatedRulesH\x00R\x08repeated\x12*\n\x03map\x18\x13 \x01(\x0b\x32\x16.buf.validate.MapRulesH\x00R\x03map\x12*\n\x03\x61ny\x18\x14 \x01(\x0b\x32\x16.buf.validate.AnyRulesH\x00R\x03\x61ny\x12\x39\n\x08\x64uration\x18\x15 \x01(\x0b\x32\x1b.buf.validate.DurationRulesH\x00R\x08\x64uration\x12<\n\ttimestamp\x18\x16 \x01(\x0b\x32\x1c.buf.validate.TimestampRulesH\x00R\ttimestamp\x12\x1c\n\x07skipped\x18\x18 \x01(\x08\x42\x02\x18\x01R\x07skipped\x12%\n\x0cignore_empty\x18\x1a \x01(\x08\x42\x02\x18\x01R\x0bignoreEmptyB\x06\n\x04type\"\xa2\x17\n\nFloatRules\x12u\n\x05\x63onst\x18\x01 \x01(\x02\x42Z\xc2HW\nU\n\x0b\x66loat.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\xa3\x01\n\x02lt\x18\x02 \x01(\x02\x42\x90\x01\xc2H\x8c\x01\n\x89\x01\n\x08\x66loat.lt\x1a}!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xb4\x01\n\x03lte\x18\x03 \x01(\x02\x42\x9f\x01\xc2H\x9b\x01\n\x98\x01\n\tfloat.lte\x1a\x8a\x01!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xf3\x07\n\x02gt\x18\x04 \x01(\x02\x42\xe0\x07\xc2H\xdc\x07\n\x8d\x01\n\x08\x66loat.gt\x1a\x80\x01!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xc3\x01\n\x0b\x66loat.gt_lt\x1a\xb3\x01has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xcd\x01\n\x15\x66loat.gt_lt_exclusive\x1a\xb3\x01has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xd3\x01\n\x0c\x66loat.gt_lte\x1a\xc2\x01has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xdd\x01\n\x16\x66loat.gt_lte_exclusive\x1a\xc2\x01has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xbf\x08\n\x03gte\x18\x05 \x01(\x02\x42\xaa\x08\xc2H\xa6\x08\n\x9b\x01\n\tfloat.gte\x1a\x8d\x01!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xd2\x01\n\x0c\x66loat.gte_lt\x1a\xc1\x01has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xdc\x01\n\x16\x66loat.gte_lt_exclusive\x1a\xc1\x01has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xe2\x01\n\rfloat.gte_lte\x1a\xd0\x01has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xec\x01\n\x17\x66loat.gte_lte_exclusive\x1a\xd0\x01has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12y\n\x02in\x18\x06 \x03(\x02\x42i\xc2Hf\nd\n\x08\x66loat.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12}\n\x06not_in\x18\x07 \x03(\x02\x42\x66\xc2Hc\na\n\x0c\x66loat.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12g\n\x06\x66inite\x18\x08 \x01(\x08\x42O\xc2HL\nJ\n\x0c\x66loat.finite\x1a:this.isNan() || this.isInf() ? \'value must be finite\' : \'\'R\x06\x66initeB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\xb3\x17\n\x0b\x44oubleRules\x12v\n\x05\x63onst\x18\x01 \x01(\x01\x42[\xc2HX\nV\n\x0c\x64ouble.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\xa4\x01\n\x02lt\x18\x02 \x01(\x01\x42\x91\x01\xc2H\x8d\x01\n\x8a\x01\n\tdouble.lt\x1a}!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xb5\x01\n\x03lte\x18\x03 \x01(\x01\x42\xa0\x01\xc2H\x9c\x01\n\x99\x01\n\ndouble.lte\x1a\x8a\x01!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xf8\x07\n\x02gt\x18\x04 \x01(\x01\x42\xe5\x07\xc2H\xe1\x07\n\x8e\x01\n\tdouble.gt\x1a\x80\x01!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xc4\x01\n\x0c\x64ouble.gt_lt\x1a\xb3\x01has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xce\x01\n\x16\x64ouble.gt_lt_exclusive\x1a\xb3\x01has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xd4\x01\n\rdouble.gt_lte\x1a\xc2\x01has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xde\x01\n\x17\x64ouble.gt_lte_exclusive\x1a\xc2\x01has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xc4\x08\n\x03gte\x18\x05 \x01(\x01\x42\xaf\x08\xc2H\xab\x08\n\x9c\x01\n\ndouble.gte\x1a\x8d\x01!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xd3\x01\n\rdouble.gte_lt\x1a\xc1\x01has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xdd\x01\n\x17\x64ouble.gte_lt_exclusive\x1a\xc1\x01has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xe3\x01\n\x0e\x64ouble.gte_lte\x1a\xd0\x01has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xed\x01\n\x18\x64ouble.gte_lte_exclusive\x1a\xd0\x01has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12z\n\x02in\x18\x06 \x03(\x01\x42j\xc2Hg\ne\n\tdouble.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\x01\x42g\xc2Hd\nb\n\rdouble.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12h\n\x06\x66inite\x18\x08 \x01(\x08\x42P\xc2HM\nK\n\rdouble.finite\x1a:this.isNan() || this.isInf() ? \'value must be finite\' : \'\'R\x06\x66initeB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\xe2\x14\n\nInt32Rules\x12u\n\x05\x63onst\x18\x01 \x01(\x05\x42Z\xc2HW\nU\n\x0bint32.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x8e\x01\n\x02lt\x18\x02 \x01(\x05\x42|\xc2Hy\nw\n\x08int32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa1\x01\n\x03lte\x18\x03 \x01(\x05\x42\x8c\x01\xc2H\x88\x01\n\x85\x01\n\tint32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\x9b\x07\n\x02gt\x18\x04 \x01(\x05\x42\x88\x07\xc2H\x84\x07\nz\n\x08int32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb3\x01\n\x0bint32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbb\x01\n\x15int32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc3\x01\n\x0cint32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcb\x01\n\x16int32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xe8\x07\n\x03gte\x18\x05 \x01(\x05\x42\xd3\x07\xc2H\xcf\x07\n\x88\x01\n\tint32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc2\x01\n\x0cint32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xca\x01\n\x16int32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd2\x01\n\rint32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xda\x01\n\x17int32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12y\n\x02in\x18\x06 \x03(\x05\x42i\xc2Hf\nd\n\x08int32.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12}\n\x06not_in\x18\x07 \x03(\x05\x42\x66\xc2Hc\na\n\x0cint32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\xe2\x14\n\nInt64Rules\x12u\n\x05\x63onst\x18\x01 \x01(\x03\x42Z\xc2HW\nU\n\x0bint64.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x8e\x01\n\x02lt\x18\x02 \x01(\x03\x42|\xc2Hy\nw\n\x08int64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa1\x01\n\x03lte\x18\x03 \x01(\x03\x42\x8c\x01\xc2H\x88\x01\n\x85\x01\n\tint64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\x9b\x07\n\x02gt\x18\x04 \x01(\x03\x42\x88\x07\xc2H\x84\x07\nz\n\x08int64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb3\x01\n\x0bint64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbb\x01\n\x15int64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc3\x01\n\x0cint64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcb\x01\n\x16int64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xe8\x07\n\x03gte\x18\x05 \x01(\x03\x42\xd3\x07\xc2H\xcf\x07\n\x88\x01\n\tint64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc2\x01\n\x0cint64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xca\x01\n\x16int64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd2\x01\n\rint64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xda\x01\n\x17int64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12y\n\x02in\x18\x06 \x03(\x03\x42i\xc2Hf\nd\n\x08int64.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12}\n\x06not_in\x18\x07 \x03(\x03\x42\x66\xc2Hc\na\n\x0cint64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\xf2\x14\n\x0bUInt32Rules\x12v\n\x05\x63onst\x18\x01 \x01(\rB[\xc2HX\nV\n\x0cuint32.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x8f\x01\n\x02lt\x18\x02 \x01(\rB}\xc2Hz\nx\n\tuint32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa2\x01\n\x03lte\x18\x03 \x01(\rB\x8d\x01\xc2H\x89\x01\n\x86\x01\n\nuint32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa0\x07\n\x02gt\x18\x04 \x01(\rB\x8d\x07\xc2H\x89\x07\n{\n\tuint32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb4\x01\n\x0cuint32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbc\x01\n\x16uint32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc4\x01\n\ruint32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcc\x01\n\x17uint32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xed\x07\n\x03gte\x18\x05 \x01(\rB\xd8\x07\xc2H\xd4\x07\n\x89\x01\n\nuint32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc3\x01\n\ruint32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcb\x01\n\x17uint32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd3\x01\n\x0euint32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdb\x01\n\x18uint32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12z\n\x02in\x18\x06 \x03(\rBj\xc2Hg\ne\n\tuint32.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\rBg\xc2Hd\nb\n\ruint32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\xf2\x14\n\x0bUInt64Rules\x12v\n\x05\x63onst\x18\x01 \x01(\x04\x42[\xc2HX\nV\n\x0cuint64.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x8f\x01\n\x02lt\x18\x02 \x01(\x04\x42}\xc2Hz\nx\n\tuint64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa2\x01\n\x03lte\x18\x03 \x01(\x04\x42\x8d\x01\xc2H\x89\x01\n\x86\x01\n\nuint64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa0\x07\n\x02gt\x18\x04 \x01(\x04\x42\x8d\x07\xc2H\x89\x07\n{\n\tuint64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb4\x01\n\x0cuint64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbc\x01\n\x16uint64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc4\x01\n\ruint64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcc\x01\n\x17uint64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xed\x07\n\x03gte\x18\x05 \x01(\x04\x42\xd8\x07\xc2H\xd4\x07\n\x89\x01\n\nuint64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc3\x01\n\ruint64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcb\x01\n\x17uint64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd3\x01\n\x0euint64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdb\x01\n\x18uint64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12z\n\x02in\x18\x06 \x03(\x04\x42j\xc2Hg\ne\n\tuint64.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\x04\x42g\xc2Hd\nb\n\ruint64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\xf2\x14\n\x0bSInt32Rules\x12v\n\x05\x63onst\x18\x01 \x01(\x11\x42[\xc2HX\nV\n\x0csint32.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x8f\x01\n\x02lt\x18\x02 \x01(\x11\x42}\xc2Hz\nx\n\tsint32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa2\x01\n\x03lte\x18\x03 \x01(\x11\x42\x8d\x01\xc2H\x89\x01\n\x86\x01\n\nsint32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa0\x07\n\x02gt\x18\x04 \x01(\x11\x42\x8d\x07\xc2H\x89\x07\n{\n\tsint32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb4\x01\n\x0csint32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbc\x01\n\x16sint32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc4\x01\n\rsint32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcc\x01\n\x17sint32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xed\x07\n\x03gte\x18\x05 \x01(\x11\x42\xd8\x07\xc2H\xd4\x07\n\x89\x01\n\nsint32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc3\x01\n\rsint32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcb\x01\n\x17sint32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd3\x01\n\x0esint32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdb\x01\n\x18sint32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12z\n\x02in\x18\x06 \x03(\x11\x42j\xc2Hg\ne\n\tsint32.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\x11\x42g\xc2Hd\nb\n\rsint32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\xf2\x14\n\x0bSInt64Rules\x12v\n\x05\x63onst\x18\x01 \x01(\x12\x42[\xc2HX\nV\n\x0csint64.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x8f\x01\n\x02lt\x18\x02 \x01(\x12\x42}\xc2Hz\nx\n\tsint64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa2\x01\n\x03lte\x18\x03 \x01(\x12\x42\x8d\x01\xc2H\x89\x01\n\x86\x01\n\nsint64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa0\x07\n\x02gt\x18\x04 \x01(\x12\x42\x8d\x07\xc2H\x89\x07\n{\n\tsint64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb4\x01\n\x0csint64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbc\x01\n\x16sint64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc4\x01\n\rsint64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcc\x01\n\x17sint64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xed\x07\n\x03gte\x18\x05 \x01(\x12\x42\xd8\x07\xc2H\xd4\x07\n\x89\x01\n\nsint64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc3\x01\n\rsint64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcb\x01\n\x17sint64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd3\x01\n\x0esint64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdb\x01\n\x18sint64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12z\n\x02in\x18\x06 \x03(\x12\x42j\xc2Hg\ne\n\tsint64.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\x12\x42g\xc2Hd\nb\n\rsint64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\x82\x15\n\x0c\x46ixed32Rules\x12w\n\x05\x63onst\x18\x01 \x01(\x07\x42\\\xc2HY\nW\n\rfixed32.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x90\x01\n\x02lt\x18\x02 \x01(\x07\x42~\xc2H{\ny\n\nfixed32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa3\x01\n\x03lte\x18\x03 \x01(\x07\x42\x8e\x01\xc2H\x8a\x01\n\x87\x01\n\x0b\x66ixed32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa5\x07\n\x02gt\x18\x04 \x01(\x07\x42\x92\x07\xc2H\x8e\x07\n|\n\nfixed32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb5\x01\n\rfixed32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbd\x01\n\x17\x66ixed32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc5\x01\n\x0e\x66ixed32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcd\x01\n\x18\x66ixed32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xf2\x07\n\x03gte\x18\x05 \x01(\x07\x42\xdd\x07\xc2H\xd9\x07\n\x8a\x01\n\x0b\x66ixed32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc4\x01\n\x0e\x66ixed32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcc\x01\n\x18\x66ixed32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd4\x01\n\x0f\x66ixed32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdc\x01\n\x19\x66ixed32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12{\n\x02in\x18\x06 \x03(\x07\x42k\xc2Hh\nf\n\nfixed32.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12\x7f\n\x06not_in\x18\x07 \x03(\x07\x42h\xc2He\nc\n\x0e\x66ixed32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\x82\x15\n\x0c\x46ixed64Rules\x12w\n\x05\x63onst\x18\x01 \x01(\x06\x42\\\xc2HY\nW\n\rfixed64.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x90\x01\n\x02lt\x18\x02 \x01(\x06\x42~\xc2H{\ny\n\nfixed64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa3\x01\n\x03lte\x18\x03 \x01(\x06\x42\x8e\x01\xc2H\x8a\x01\n\x87\x01\n\x0b\x66ixed64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa5\x07\n\x02gt\x18\x04 \x01(\x06\x42\x92\x07\xc2H\x8e\x07\n|\n\nfixed64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb5\x01\n\rfixed64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbd\x01\n\x17\x66ixed64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc5\x01\n\x0e\x66ixed64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcd\x01\n\x18\x66ixed64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xf2\x07\n\x03gte\x18\x05 \x01(\x06\x42\xdd\x07\xc2H\xd9\x07\n\x8a\x01\n\x0b\x66ixed64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc4\x01\n\x0e\x66ixed64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcc\x01\n\x18\x66ixed64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd4\x01\n\x0f\x66ixed64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdc\x01\n\x19\x66ixed64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12{\n\x02in\x18\x06 \x03(\x06\x42k\xc2Hh\nf\n\nfixed64.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12\x7f\n\x06not_in\x18\x07 \x03(\x06\x42h\xc2He\nc\n\x0e\x66ixed64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\x93\x15\n\rSFixed32Rules\x12x\n\x05\x63onst\x18\x01 \x01(\x0f\x42]\xc2HZ\nX\n\x0esfixed32.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x91\x01\n\x02lt\x18\x02 \x01(\x0f\x42\x7f\xc2H|\nz\n\x0bsfixed32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa4\x01\n\x03lte\x18\x03 \x01(\x0f\x42\x8f\x01\xc2H\x8b\x01\n\x88\x01\n\x0csfixed32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xaa\x07\n\x02gt\x18\x04 \x01(\x0f\x42\x97\x07\xc2H\x93\x07\n}\n\x0bsfixed32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb6\x01\n\x0esfixed32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbe\x01\n\x18sfixed32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc6\x01\n\x0fsfixed32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xce\x01\n\x19sfixed32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xf7\x07\n\x03gte\x18\x05 \x01(\x0f\x42\xe2\x07\xc2H\xde\x07\n\x8b\x01\n\x0csfixed32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc5\x01\n\x0fsfixed32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcd\x01\n\x19sfixed32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd5\x01\n\x10sfixed32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdd\x01\n\x1asfixed32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12|\n\x02in\x18\x06 \x03(\x0f\x42l\xc2Hi\ng\n\x0bsfixed32.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12\x80\x01\n\x06not_in\x18\x07 \x03(\x0f\x42i\xc2Hf\nd\n\x0fsfixed32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\x93\x15\n\rSFixed64Rules\x12x\n\x05\x63onst\x18\x01 \x01(\x10\x42]\xc2HZ\nX\n\x0esfixed64.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x91\x01\n\x02lt\x18\x02 \x01(\x10\x42\x7f\xc2H|\nz\n\x0bsfixed64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa4\x01\n\x03lte\x18\x03 \x01(\x10\x42\x8f\x01\xc2H\x8b\x01\n\x88\x01\n\x0csfixed64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xaa\x07\n\x02gt\x18\x04 \x01(\x10\x42\x97\x07\xc2H\x93\x07\n}\n\x0bsfixed64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb6\x01\n\x0esfixed64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbe\x01\n\x18sfixed64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc6\x01\n\x0fsfixed64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xce\x01\n\x19sfixed64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xf7\x07\n\x03gte\x18\x05 \x01(\x10\x42\xe2\x07\xc2H\xde\x07\n\x8b\x01\n\x0csfixed64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc5\x01\n\x0fsfixed64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcd\x01\n\x19sfixed64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd5\x01\n\x10sfixed64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdd\x01\n\x1asfixed64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12|\n\x02in\x18\x06 \x03(\x10\x42l\xc2Hi\ng\n\x0bsfixed64.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12\x80\x01\n\x06not_in\x18\x07 \x03(\x10\x42i\xc2Hf\nd\n\x0fsfixed64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\x8b\x01\n\tBoolRules\x12t\n\x05\x63onst\x18\x01 \x01(\x08\x42Y\xc2HV\nT\n\nbool.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x00R\x05\x63onst\x88\x01\x01\x42\x08\n\x06_const\"\xae\x35\n\x0bStringRules\x12x\n\x05\x63onst\x18\x01 \x01(\tB]\xc2HZ\nX\n\x0cstring.const\x1aHthis != rules.const ? \'value must equal `%s`\'.format([rules.const]) : \'\'H\x01R\x05\x63onst\x88\x01\x01\x12\x88\x01\n\x03len\x18\x13 \x01(\x04\x42q\xc2Hn\nl\n\nstring.len\x1a^uint(this.size()) != rules.len ? \'value length must be %s characters\'.format([rules.len]) : \'\'H\x02R\x03len\x88\x01\x01\x12\xa6\x01\n\x07min_len\x18\x02 \x01(\x04\x42\x87\x01\xc2H\x83\x01\n\x80\x01\n\x0estring.min_len\x1anuint(this.size()) < rules.min_len ? \'value length must be at least %s characters\'.format([rules.min_len]) : \'\'H\x03R\x06minLen\x88\x01\x01\x12\xa4\x01\n\x07max_len\x18\x03 \x01(\x04\x42\x85\x01\xc2H\x81\x01\n\x7f\n\x0estring.max_len\x1amuint(this.size()) > rules.max_len ? \'value length must be at most %s characters\'.format([rules.max_len]) : \'\'H\x04R\x06maxLen\x88\x01\x01\x12\xaa\x01\n\tlen_bytes\x18\x14 \x01(\x04\x42\x87\x01\xc2H\x83\x01\n\x80\x01\n\x10string.len_bytes\x1aluint(bytes(this).size()) != rules.len_bytes ? \'value length must be %s bytes\'.format([rules.len_bytes]) : \'\'H\x05R\x08lenBytes\x88\x01\x01\x12\xb2\x01\n\tmin_bytes\x18\x04 \x01(\x04\x42\x8f\x01\xc2H\x8b\x01\n\x88\x01\n\x10string.min_bytes\x1atuint(bytes(this).size()) < rules.min_bytes ? \'value length must be at least %s bytes\'.format([rules.min_bytes]) : \'\'H\x06R\x08minBytes\x88\x01\x01\x12\xb1\x01\n\tmax_bytes\x18\x05 \x01(\x04\x42\x8e\x01\xc2H\x8a\x01\n\x87\x01\n\x10string.max_bytes\x1asuint(bytes(this).size()) > rules.max_bytes ? \'value length must be at most %s bytes\'.format([rules.max_bytes]) : \'\'H\x07R\x08maxBytes\x88\x01\x01\x12\x9b\x01\n\x07pattern\x18\x06 \x01(\tB|\xc2Hy\nw\n\x0estring.pattern\x1a\x65!this.matches(rules.pattern) ? \'value does not match regex pattern `%s`\'.format([rules.pattern]) : \'\'H\x08R\x07pattern\x88\x01\x01\x12\x91\x01\n\x06prefix\x18\x07 \x01(\tBt\xc2Hq\no\n\rstring.prefix\x1a^!this.startsWith(rules.prefix) ? \'value does not have prefix `%s`\'.format([rules.prefix]) : \'\'H\tR\x06prefix\x88\x01\x01\x12\x8f\x01\n\x06suffix\x18\x08 \x01(\tBr\xc2Ho\nm\n\rstring.suffix\x1a\\!this.endsWith(rules.suffix) ? \'value does not have suffix `%s`\'.format([rules.suffix]) : \'\'H\nR\x06suffix\x88\x01\x01\x12\x9f\x01\n\x08\x63ontains\x18\t \x01(\tB~\xc2H{\ny\n\x0fstring.contains\x1a\x66!this.contains(rules.contains) ? \'value does not contain substring `%s`\'.format([rules.contains]) : \'\'H\x0bR\x08\x63ontains\x88\x01\x01\x12\xaa\x01\n\x0cnot_contains\x18\x17 \x01(\tB\x81\x01\xc2H~\n|\n\x13string.not_contains\x1a\x65this.contains(rules.not_contains) ? \'value contains substring `%s`\'.format([rules.not_contains]) : \'\'H\x0cR\x0bnotContains\x88\x01\x01\x12z\n\x02in\x18\n \x03(\tBj\xc2Hg\ne\n\tstring.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12~\n\x06not_in\x18\x0b \x03(\tBg\xc2Hd\nb\n\rstring.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\xc6\x01\n\x05\x65mail\x18\x0c \x01(\x08\x42\xad\x01\xc2H\xa9\x01\nQ\n\x0cstring.email\x12#value must be a valid email address\x1a\x1cthis == \'\' || this.isEmail()\nT\n\x12string.email_empty\x12\x32value is empty, which is not a valid email address\x1a\nthis != \'\'H\x00R\x05\x65mail\x12\xcb\x01\n\x08hostname\x18\r \x01(\x08\x42\xac\x01\xc2H\xa8\x01\nR\n\x0fstring.hostname\x12\x1evalue must be a valid hostname\x1a\x1fthis == \'\' || this.isHostname()\nR\n\x15string.hostname_empty\x12-value is empty, which is not a valid hostname\x1a\nthis != \'\'H\x00R\x08hostname\x12\xb1\x01\n\x02ip\x18\x0e \x01(\x08\x42\x9e\x01\xc2H\x9a\x01\nH\n\tstring.ip\x12 value must be a valid IP address\x1a\x19this == \'\' || this.isIp()\nN\n\x0fstring.ip_empty\x12/value is empty, which is not a valid IP address\x1a\nthis != \'\'H\x00R\x02ip\x12\xbe\x01\n\x04ipv4\x18\x0f \x01(\x08\x42\xa7\x01\xc2H\xa3\x01\nM\n\x0bstring.ipv4\x12\"value must be a valid IPv4 address\x1a\x1athis == \'\' || this.isIp(4)\nR\n\x11string.ipv4_empty\x12\x31value is empty, which is not a valid IPv4 address\x1a\nthis != \'\'H\x00R\x04ipv4\x12\xbe\x01\n\x04ipv6\x18\x10 \x01(\x08\x42\xa7\x01\xc2H\xa3\x01\nM\n\x0bstring.ipv6\x12\"value must be a valid IPv6 address\x1a\x1athis == \'\' || this.isIp(6)\nR\n\x11string.ipv6_empty\x12\x31value is empty, which is not a valid IPv6 address\x1a\nthis != \'\'H\x00R\x04ipv6\x12\xa8\x01\n\x03uri\x18\x11 \x01(\x08\x42\x93\x01\xc2H\x8f\x01\nC\n\nstring.uri\x12\x19value must be a valid URI\x1a\x1athis == \'\' || this.isUri()\nH\n\x10string.uri_empty\x12(value is empty, which is not a valid URI\x1a\nthis != \'\'H\x00R\x03uri\x12\\\n\x07uri_ref\x18\x12 \x01(\x08\x42\x41\xc2H>\n<\n\x0estring.uri_ref\x12\x19value must be a valid URI\x1a\x0fthis.isUriRef()H\x00R\x06uriRef\x12\xf4\x01\n\x07\x61\x64\x64ress\x18\x15 \x01(\x08\x42\xd7\x01\xc2H\xd3\x01\no\n\x0estring.address\x12-value must be a valid hostname, or ip address\x1a.this == \'\' || this.isHostname() || this.isIp()\n`\n\x14string.address_empty\x12 rules.max_len ? \'value must be at most %s bytes\'.format([rules.max_len]) : \'\'H\x04R\x06maxLen\x88\x01\x01\x12\x9e\x01\n\x07pattern\x18\x04 \x01(\tB\x7f\xc2H|\nz\n\rbytes.pattern\x1ai!string(this).matches(rules.pattern) ? \'value must match regex pattern `%s`\'.format([rules.pattern]) : \'\'H\x05R\x07pattern\x88\x01\x01\x12\x8e\x01\n\x06prefix\x18\x05 \x01(\x0c\x42q\xc2Hn\nl\n\x0c\x62ytes.prefix\x1a\\!this.startsWith(rules.prefix) ? \'value does not have prefix %x\'.format([rules.prefix]) : \'\'H\x06R\x06prefix\x88\x01\x01\x12\x8c\x01\n\x06suffix\x18\x06 \x01(\x0c\x42o\xc2Hl\nj\n\x0c\x62ytes.suffix\x1aZ!this.endsWith(rules.suffix) ? \'value does not have suffix %x\'.format([rules.suffix]) : \'\'H\x07R\x06suffix\x88\x01\x01\x12\x92\x01\n\x08\x63ontains\x18\x07 \x01(\x0c\x42q\xc2Hn\nl\n\x0e\x62ytes.contains\x1aZ!this.contains(rules.contains) ? \'value does not contain %x\'.format([rules.contains]) : \'\'H\x08R\x08\x63ontains\x88\x01\x01\x12\x9b\x01\n\x02in\x18\x08 \x03(\x0c\x42\x8a\x01\xc2H\x86\x01\n\x83\x01\n\x08\x62ytes.in\x1awdyn(rules)[\'in\'].size() > 0 && !(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12}\n\x06not_in\x18\t \x03(\x0c\x42\x66\xc2Hc\na\n\x0c\x62ytes.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\xd5\x01\n\x02ip\x18\n \x01(\x08\x42\xc2\x01\xc2H\xbe\x01\ng\n\x08\x62ytes.ip\x12 value must be a valid IP address\x1a\x39this.size() == 0 || this.size() == 4 || this.size() == 16\nS\n\x0e\x62ytes.ip_empty\x12/value is empty, which is not a valid IP address\x1a\x10this.size() != 0H\x00R\x02ip\x12\xcc\x01\n\x04ipv4\x18\x0b \x01(\x08\x42\xb5\x01\xc2H\xb1\x01\nV\n\nbytes.ipv4\x12\"value must be a valid IPv4 address\x1a$this.size() == 0 || this.size() == 4\nW\n\x10\x62ytes.ipv4_empty\x12\x31value is empty, which is not a valid IPv4 address\x1a\x10this.size() != 0H\x00R\x04ipv4\x12\xcd\x01\n\x04ipv6\x18\x0c \x01(\x08\x42\xb6\x01\xc2H\xb2\x01\nW\n\nbytes.ipv6\x12\"value must be a valid IPv6 address\x1a%this.size() == 0 || this.size() == 16\nW\n\x10\x62ytes.ipv6_empty\x12\x31value is empty, which is not a valid IPv6 address\x1a\x10this.size() != 0H\x00R\x04ipv6B\x0c\n\nwell_knownB\x08\n\x06_constB\x06\n\x04_lenB\n\n\x08_min_lenB\n\n\x08_max_lenB\n\n\x08_patternB\t\n\x07_prefixB\t\n\x07_suffixB\x0b\n\t_contains\"\xbc\x03\n\tEnumRules\x12t\n\x05\x63onst\x18\x01 \x01(\x05\x42Y\xc2HV\nT\n\nenum.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x00R\x05\x63onst\x88\x01\x01\x12&\n\x0c\x64\x65\x66ined_only\x18\x02 \x01(\x08H\x01R\x0b\x64\x65\x66inedOnly\x88\x01\x01\x12x\n\x02in\x18\x03 \x03(\x05\x42h\xc2He\nc\n\x07\x65num.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12|\n\x06not_in\x18\x04 \x03(\x05\x42\x65\xc2Hb\n`\n\x0b\x65num.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x08\n\x06_constB\x0f\n\r_defined_only\"\xcd\x04\n\rRepeatedRules\x12\xad\x01\n\tmin_items\x18\x01 \x01(\x04\x42\x8a\x01\xc2H\x86\x01\n\x83\x01\n\x12repeated.min_items\x1amuint(this.size()) < rules.min_items ? \'value must contain at least %d item(s)\'.format([rules.min_items]) : \'\'H\x00R\x08minItems\x88\x01\x01\x12\xb1\x01\n\tmax_items\x18\x02 \x01(\x04\x42\x8e\x01\xc2H\x8a\x01\n\x87\x01\n\x12repeated.max_items\x1aquint(this.size()) > rules.max_items ? \'value must contain no more than %s item(s)\'.format([rules.max_items]) : \'\'H\x01R\x08maxItems\x88\x01\x01\x12l\n\x06unique\x18\x03 \x01(\x08\x42O\xc2HL\nJ\n\x0frepeated.unique\x12(repeated value must contain unique items\x1a\rthis.unique()H\x02R\x06unique\x88\x01\x01\x12\x39\n\x05items\x18\x04 \x01(\x0b\x32\x1e.buf.validate.FieldConstraintsH\x03R\x05items\x88\x01\x01\x42\x0c\n\n_min_itemsB\x0c\n\n_max_itemsB\t\n\x07_uniqueB\x08\n\x06_items\"\xf1\x03\n\x08MapRules\x12\x9e\x01\n\tmin_pairs\x18\x01 \x01(\x04\x42|\xc2Hy\nw\n\rmap.min_pairs\x1a\x66uint(this.size()) < rules.min_pairs ? \'map must be at least %d entries\'.format([rules.min_pairs]) : \'\'H\x00R\x08minPairs\x88\x01\x01\x12\x9d\x01\n\tmax_pairs\x18\x02 \x01(\x04\x42{\xc2Hx\nv\n\rmap.max_pairs\x1a\x65uint(this.size()) > rules.max_pairs ? \'map must be at most %d entries\'.format([rules.max_pairs]) : \'\'H\x01R\x08maxPairs\x88\x01\x01\x12\x37\n\x04keys\x18\x04 \x01(\x0b\x32\x1e.buf.validate.FieldConstraintsH\x02R\x04keys\x88\x01\x01\x12;\n\x06values\x18\x05 \x01(\x0b\x32\x1e.buf.validate.FieldConstraintsH\x03R\x06values\x88\x01\x01\x42\x0c\n\n_min_pairsB\x0c\n\n_max_pairsB\x07\n\x05_keysB\t\n\x07_values\"1\n\x08\x41nyRules\x12\x0e\n\x02in\x18\x02 \x03(\tR\x02in\x12\x15\n\x06not_in\x18\x03 \x03(\tR\x05notIn\"\xd2\x16\n\rDurationRules\x12\x93\x01\n\x05\x63onst\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationB]\xc2HZ\nX\n\x0e\x64uration.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\xac\x01\n\x02lt\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationB\x7f\xc2H|\nz\n\x0b\x64uration.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xbf\x01\n\x03lte\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationB\x8f\x01\xc2H\x8b\x01\n\x88\x01\n\x0c\x64uration.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xc5\x07\n\x02gt\x18\x05 \x01(\x0b\x32\x19.google.protobuf.DurationB\x97\x07\xc2H\x93\x07\n}\n\x0b\x64uration.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb6\x01\n\x0e\x64uration.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbe\x01\n\x18\x64uration.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc6\x01\n\x0f\x64uration.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xce\x01\n\x19\x64uration.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\x92\x08\n\x03gte\x18\x06 \x01(\x0b\x32\x19.google.protobuf.DurationB\xe2\x07\xc2H\xde\x07\n\x8b\x01\n\x0c\x64uration.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc5\x01\n\x0f\x64uration.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcd\x01\n\x19\x64uration.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd5\x01\n\x10\x64uration.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdd\x01\n\x1a\x64uration.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x97\x01\n\x02in\x18\x07 \x03(\x0b\x32\x19.google.protobuf.DurationBl\xc2Hi\ng\n\x0b\x64uration.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12\x9b\x01\n\x06not_in\x18\x08 \x03(\x0b\x32\x19.google.protobuf.DurationBi\xc2Hf\nd\n\x0f\x64uration.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\xca\x17\n\x0eTimestampRules\x12\x95\x01\n\x05\x63onst\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB^\xc2H[\nY\n\x0ftimestamp.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\xaf\x01\n\x02lt\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x80\x01\xc2H}\n{\n\x0ctimestamp.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xc1\x01\n\x03lte\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x90\x01\xc2H\x8c\x01\n\x89\x01\n\rtimestamp.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\x61\n\x06lt_now\x18\x07 \x01(\x08\x42H\xc2HE\nC\n\x10timestamp.lt_now\x1a/this > now ? \'value must be less than now\' : \'\'H\x00R\x05ltNow\x12\xcb\x07\n\x02gt\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x9c\x07\xc2H\x98\x07\n~\n\x0ctimestamp.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb7\x01\n\x0ftimestamp.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbf\x01\n\x19timestamp.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc7\x01\n\x10timestamp.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcf\x01\n\x1atimestamp.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\x98\x08\n\x03gte\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xe7\x07\xc2H\xe3\x07\n\x8c\x01\n\rtimestamp.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc6\x01\n\x10timestamp.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xce\x01\n\x1atimestamp.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd6\x01\n\x11timestamp.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xde\x01\n\x1btimestamp.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x64\n\x06gt_now\x18\x08 \x01(\x08\x42K\xc2HH\nF\n\x10timestamp.gt_now\x1a\x32this < now ? \'value must be greater than now\' : \'\'H\x01R\x05gtNow\x12\xc5\x01\n\x06within\x18\t \x01(\x0b\x32\x19.google.protobuf.DurationB\x8c\x01\xc2H\x88\x01\n\x85\x01\n\x10timestamp.within\x1aqthis < now-rules.within || this > now+rules.within ? \'value must be within %s of now\'.format([rules.within]) : \'\'H\x03R\x06within\x88\x01\x01\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_constB\t\n\x07_within*\x9d\x01\n\x06Ignore\x12\x16\n\x12IGNORE_UNSPECIFIED\x10\x00\x12\x19\n\x15IGNORE_IF_UNPOPULATED\x10\x01\x12\x1b\n\x17IGNORE_IF_DEFAULT_VALUE\x10\x02\x12\x11\n\rIGNORE_ALWAYS\x10\x03\x12\x14\n\x0cIGNORE_EMPTY\x10\x01\x1a\x02\x08\x01\x12\x16\n\x0eIGNORE_DEFAULT\x10\x02\x1a\x02\x08\x01\x1a\x02\x10\x01*n\n\nKnownRegex\x12\x1b\n\x17KNOWN_REGEX_UNSPECIFIED\x10\x00\x12 \n\x1cKNOWN_REGEX_HTTP_HEADER_NAME\x10\x01\x12!\n\x1dKNOWN_REGEX_HTTP_HEADER_VALUE\x10\x02:_\n\x07message\x12\x1f.google.protobuf.MessageOptions\x18\x87\t \x01(\x0b\x32 .buf.validate.MessageConstraintsR\x07message\x88\x01\x01:W\n\x05oneof\x12\x1d.google.protobuf.OneofOptions\x18\x87\t \x01(\x0b\x32\x1e.buf.validate.OneofConstraintsR\x05oneof\x88\x01\x01:W\n\x05\x66ield\x12\x1d.google.protobuf.FieldOptions\x18\x87\t \x01(\x0b\x32\x1e.buf.validate.FieldConstraintsR\x05\x66ield\x88\x01\x01\x42n\n\x12\x62uild.buf.validateB\rValidateProtoP\x01ZGbuf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validateb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'buf.validate.validate_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\022build.buf.validateB\rValidateProtoP\001ZGbuf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate' + _globals['_IGNORE']._loaded_options = None + _globals['_IGNORE']._serialized_options = b'\020\001' + _globals['_IGNORE'].values_by_name["IGNORE_EMPTY"]._loaded_options = None + _globals['_IGNORE'].values_by_name["IGNORE_EMPTY"]._serialized_options = b'\010\001' + _globals['_IGNORE'].values_by_name["IGNORE_DEFAULT"]._loaded_options = None + _globals['_IGNORE'].values_by_name["IGNORE_DEFAULT"]._serialized_options = b'\010\001' + _globals['_FIELDCONSTRAINTS'].fields_by_name['skipped']._loaded_options = None + _globals['_FIELDCONSTRAINTS'].fields_by_name['skipped']._serialized_options = b'\030\001' + _globals['_FIELDCONSTRAINTS'].fields_by_name['ignore_empty']._loaded_options = None + _globals['_FIELDCONSTRAINTS'].fields_by_name['ignore_empty']._serialized_options = b'\030\001' + _globals['_FLOATRULES'].fields_by_name['const']._loaded_options = None + _globals['_FLOATRULES'].fields_by_name['const']._serialized_options = b'\302HW\nU\n\013float.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' + _globals['_FLOATRULES'].fields_by_name['lt']._loaded_options = None + _globals['_FLOATRULES'].fields_by_name['lt']._serialized_options = b'\302H\214\001\n\211\001\n\010float.lt\032}!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_FLOATRULES'].fields_by_name['lte']._loaded_options = None + _globals['_FLOATRULES'].fields_by_name['lte']._serialized_options = b'\302H\233\001\n\230\001\n\tfloat.lte\032\212\001!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_FLOATRULES'].fields_by_name['gt']._loaded_options = None + _globals['_FLOATRULES'].fields_by_name['gt']._serialized_options = b'\302H\334\007\n\215\001\n\010float.gt\032\200\001!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\303\001\n\013float.gt_lt\032\263\001has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\315\001\n\025float.gt_lt_exclusive\032\263\001has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\323\001\n\014float.gt_lte\032\302\001has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\335\001\n\026float.gt_lte_exclusive\032\302\001has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_FLOATRULES'].fields_by_name['gte']._loaded_options = None + _globals['_FLOATRULES'].fields_by_name['gte']._serialized_options = b'\302H\246\010\n\233\001\n\tfloat.gte\032\215\001!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\322\001\n\014float.gte_lt\032\301\001has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\334\001\n\026float.gte_lt_exclusive\032\301\001has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\342\001\n\rfloat.gte_lte\032\320\001has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\354\001\n\027float.gte_lte_exclusive\032\320\001has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_FLOATRULES'].fields_by_name['in']._loaded_options = None + _globals['_FLOATRULES'].fields_by_name['in']._serialized_options = b'\302Hf\nd\n\010float.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' + _globals['_FLOATRULES'].fields_by_name['not_in']._loaded_options = None + _globals['_FLOATRULES'].fields_by_name['not_in']._serialized_options = b'\302Hc\na\n\014float.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_FLOATRULES'].fields_by_name['finite']._loaded_options = None + _globals['_FLOATRULES'].fields_by_name['finite']._serialized_options = b'\302HL\nJ\n\014float.finite\032:this.isNan() || this.isInf() ? \'value must be finite\' : \'\'' + _globals['_DOUBLERULES'].fields_by_name['const']._loaded_options = None + _globals['_DOUBLERULES'].fields_by_name['const']._serialized_options = b'\302HX\nV\n\014double.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' + _globals['_DOUBLERULES'].fields_by_name['lt']._loaded_options = None + _globals['_DOUBLERULES'].fields_by_name['lt']._serialized_options = b'\302H\215\001\n\212\001\n\tdouble.lt\032}!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_DOUBLERULES'].fields_by_name['lte']._loaded_options = None + _globals['_DOUBLERULES'].fields_by_name['lte']._serialized_options = b'\302H\234\001\n\231\001\n\ndouble.lte\032\212\001!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_DOUBLERULES'].fields_by_name['gt']._loaded_options = None + _globals['_DOUBLERULES'].fields_by_name['gt']._serialized_options = b'\302H\341\007\n\216\001\n\tdouble.gt\032\200\001!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\304\001\n\014double.gt_lt\032\263\001has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\316\001\n\026double.gt_lt_exclusive\032\263\001has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\324\001\n\rdouble.gt_lte\032\302\001has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\336\001\n\027double.gt_lte_exclusive\032\302\001has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_DOUBLERULES'].fields_by_name['gte']._loaded_options = None + _globals['_DOUBLERULES'].fields_by_name['gte']._serialized_options = b'\302H\253\010\n\234\001\n\ndouble.gte\032\215\001!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\323\001\n\rdouble.gte_lt\032\301\001has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\335\001\n\027double.gte_lt_exclusive\032\301\001has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\343\001\n\016double.gte_lte\032\320\001has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\355\001\n\030double.gte_lte_exclusive\032\320\001has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_DOUBLERULES'].fields_by_name['in']._loaded_options = None + _globals['_DOUBLERULES'].fields_by_name['in']._serialized_options = b'\302Hg\ne\n\tdouble.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' + _globals['_DOUBLERULES'].fields_by_name['not_in']._loaded_options = None + _globals['_DOUBLERULES'].fields_by_name['not_in']._serialized_options = b'\302Hd\nb\n\rdouble.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_DOUBLERULES'].fields_by_name['finite']._loaded_options = None + _globals['_DOUBLERULES'].fields_by_name['finite']._serialized_options = b'\302HM\nK\n\rdouble.finite\032:this.isNan() || this.isInf() ? \'value must be finite\' : \'\'' + _globals['_INT32RULES'].fields_by_name['const']._loaded_options = None + _globals['_INT32RULES'].fields_by_name['const']._serialized_options = b'\302HW\nU\n\013int32.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' + _globals['_INT32RULES'].fields_by_name['lt']._loaded_options = None + _globals['_INT32RULES'].fields_by_name['lt']._serialized_options = b'\302Hy\nw\n\010int32.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_INT32RULES'].fields_by_name['lte']._loaded_options = None + _globals['_INT32RULES'].fields_by_name['lte']._serialized_options = b'\302H\210\001\n\205\001\n\tint32.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_INT32RULES'].fields_by_name['gt']._loaded_options = None + _globals['_INT32RULES'].fields_by_name['gt']._serialized_options = b'\302H\204\007\nz\n\010int32.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\263\001\n\013int32.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\273\001\n\025int32.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\303\001\n\014int32.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\313\001\n\026int32.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_INT32RULES'].fields_by_name['gte']._loaded_options = None + _globals['_INT32RULES'].fields_by_name['gte']._serialized_options = b'\302H\317\007\n\210\001\n\tint32.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\302\001\n\014int32.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\312\001\n\026int32.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\322\001\n\rint32.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\332\001\n\027int32.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_INT32RULES'].fields_by_name['in']._loaded_options = None + _globals['_INT32RULES'].fields_by_name['in']._serialized_options = b'\302Hf\nd\n\010int32.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' + _globals['_INT32RULES'].fields_by_name['not_in']._loaded_options = None + _globals['_INT32RULES'].fields_by_name['not_in']._serialized_options = b'\302Hc\na\n\014int32.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_INT64RULES'].fields_by_name['const']._loaded_options = None + _globals['_INT64RULES'].fields_by_name['const']._serialized_options = b'\302HW\nU\n\013int64.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' + _globals['_INT64RULES'].fields_by_name['lt']._loaded_options = None + _globals['_INT64RULES'].fields_by_name['lt']._serialized_options = b'\302Hy\nw\n\010int64.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_INT64RULES'].fields_by_name['lte']._loaded_options = None + _globals['_INT64RULES'].fields_by_name['lte']._serialized_options = b'\302H\210\001\n\205\001\n\tint64.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_INT64RULES'].fields_by_name['gt']._loaded_options = None + _globals['_INT64RULES'].fields_by_name['gt']._serialized_options = b'\302H\204\007\nz\n\010int64.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\263\001\n\013int64.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\273\001\n\025int64.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\303\001\n\014int64.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\313\001\n\026int64.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_INT64RULES'].fields_by_name['gte']._loaded_options = None + _globals['_INT64RULES'].fields_by_name['gte']._serialized_options = b'\302H\317\007\n\210\001\n\tint64.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\302\001\n\014int64.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\312\001\n\026int64.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\322\001\n\rint64.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\332\001\n\027int64.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_INT64RULES'].fields_by_name['in']._loaded_options = None + _globals['_INT64RULES'].fields_by_name['in']._serialized_options = b'\302Hf\nd\n\010int64.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' + _globals['_INT64RULES'].fields_by_name['not_in']._loaded_options = None + _globals['_INT64RULES'].fields_by_name['not_in']._serialized_options = b'\302Hc\na\n\014int64.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_UINT32RULES'].fields_by_name['const']._loaded_options = None + _globals['_UINT32RULES'].fields_by_name['const']._serialized_options = b'\302HX\nV\n\014uint32.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' + _globals['_UINT32RULES'].fields_by_name['lt']._loaded_options = None + _globals['_UINT32RULES'].fields_by_name['lt']._serialized_options = b'\302Hz\nx\n\tuint32.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_UINT32RULES'].fields_by_name['lte']._loaded_options = None + _globals['_UINT32RULES'].fields_by_name['lte']._serialized_options = b'\302H\211\001\n\206\001\n\nuint32.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_UINT32RULES'].fields_by_name['gt']._loaded_options = None + _globals['_UINT32RULES'].fields_by_name['gt']._serialized_options = b'\302H\211\007\n{\n\tuint32.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\264\001\n\014uint32.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\274\001\n\026uint32.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\304\001\n\ruint32.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\314\001\n\027uint32.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_UINT32RULES'].fields_by_name['gte']._loaded_options = None + _globals['_UINT32RULES'].fields_by_name['gte']._serialized_options = b'\302H\324\007\n\211\001\n\nuint32.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\303\001\n\ruint32.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\313\001\n\027uint32.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\323\001\n\016uint32.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\333\001\n\030uint32.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_UINT32RULES'].fields_by_name['in']._loaded_options = None + _globals['_UINT32RULES'].fields_by_name['in']._serialized_options = b'\302Hg\ne\n\tuint32.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' + _globals['_UINT32RULES'].fields_by_name['not_in']._loaded_options = None + _globals['_UINT32RULES'].fields_by_name['not_in']._serialized_options = b'\302Hd\nb\n\ruint32.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_UINT64RULES'].fields_by_name['const']._loaded_options = None + _globals['_UINT64RULES'].fields_by_name['const']._serialized_options = b'\302HX\nV\n\014uint64.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' + _globals['_UINT64RULES'].fields_by_name['lt']._loaded_options = None + _globals['_UINT64RULES'].fields_by_name['lt']._serialized_options = b'\302Hz\nx\n\tuint64.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_UINT64RULES'].fields_by_name['lte']._loaded_options = None + _globals['_UINT64RULES'].fields_by_name['lte']._serialized_options = b'\302H\211\001\n\206\001\n\nuint64.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_UINT64RULES'].fields_by_name['gt']._loaded_options = None + _globals['_UINT64RULES'].fields_by_name['gt']._serialized_options = b'\302H\211\007\n{\n\tuint64.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\264\001\n\014uint64.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\274\001\n\026uint64.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\304\001\n\ruint64.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\314\001\n\027uint64.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_UINT64RULES'].fields_by_name['gte']._loaded_options = None + _globals['_UINT64RULES'].fields_by_name['gte']._serialized_options = b'\302H\324\007\n\211\001\n\nuint64.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\303\001\n\ruint64.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\313\001\n\027uint64.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\323\001\n\016uint64.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\333\001\n\030uint64.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_UINT64RULES'].fields_by_name['in']._loaded_options = None + _globals['_UINT64RULES'].fields_by_name['in']._serialized_options = b'\302Hg\ne\n\tuint64.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' + _globals['_UINT64RULES'].fields_by_name['not_in']._loaded_options = None + _globals['_UINT64RULES'].fields_by_name['not_in']._serialized_options = b'\302Hd\nb\n\ruint64.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_SINT32RULES'].fields_by_name['const']._loaded_options = None + _globals['_SINT32RULES'].fields_by_name['const']._serialized_options = b'\302HX\nV\n\014sint32.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' + _globals['_SINT32RULES'].fields_by_name['lt']._loaded_options = None + _globals['_SINT32RULES'].fields_by_name['lt']._serialized_options = b'\302Hz\nx\n\tsint32.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_SINT32RULES'].fields_by_name['lte']._loaded_options = None + _globals['_SINT32RULES'].fields_by_name['lte']._serialized_options = b'\302H\211\001\n\206\001\n\nsint32.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_SINT32RULES'].fields_by_name['gt']._loaded_options = None + _globals['_SINT32RULES'].fields_by_name['gt']._serialized_options = b'\302H\211\007\n{\n\tsint32.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\264\001\n\014sint32.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\274\001\n\026sint32.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\304\001\n\rsint32.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\314\001\n\027sint32.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_SINT32RULES'].fields_by_name['gte']._loaded_options = None + _globals['_SINT32RULES'].fields_by_name['gte']._serialized_options = b'\302H\324\007\n\211\001\n\nsint32.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\303\001\n\rsint32.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\313\001\n\027sint32.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\323\001\n\016sint32.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\333\001\n\030sint32.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_SINT32RULES'].fields_by_name['in']._loaded_options = None + _globals['_SINT32RULES'].fields_by_name['in']._serialized_options = b'\302Hg\ne\n\tsint32.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' + _globals['_SINT32RULES'].fields_by_name['not_in']._loaded_options = None + _globals['_SINT32RULES'].fields_by_name['not_in']._serialized_options = b'\302Hd\nb\n\rsint32.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_SINT64RULES'].fields_by_name['const']._loaded_options = None + _globals['_SINT64RULES'].fields_by_name['const']._serialized_options = b'\302HX\nV\n\014sint64.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' + _globals['_SINT64RULES'].fields_by_name['lt']._loaded_options = None + _globals['_SINT64RULES'].fields_by_name['lt']._serialized_options = b'\302Hz\nx\n\tsint64.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_SINT64RULES'].fields_by_name['lte']._loaded_options = None + _globals['_SINT64RULES'].fields_by_name['lte']._serialized_options = b'\302H\211\001\n\206\001\n\nsint64.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_SINT64RULES'].fields_by_name['gt']._loaded_options = None + _globals['_SINT64RULES'].fields_by_name['gt']._serialized_options = b'\302H\211\007\n{\n\tsint64.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\264\001\n\014sint64.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\274\001\n\026sint64.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\304\001\n\rsint64.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\314\001\n\027sint64.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_SINT64RULES'].fields_by_name['gte']._loaded_options = None + _globals['_SINT64RULES'].fields_by_name['gte']._serialized_options = b'\302H\324\007\n\211\001\n\nsint64.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\303\001\n\rsint64.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\313\001\n\027sint64.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\323\001\n\016sint64.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\333\001\n\030sint64.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_SINT64RULES'].fields_by_name['in']._loaded_options = None + _globals['_SINT64RULES'].fields_by_name['in']._serialized_options = b'\302Hg\ne\n\tsint64.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' + _globals['_SINT64RULES'].fields_by_name['not_in']._loaded_options = None + _globals['_SINT64RULES'].fields_by_name['not_in']._serialized_options = b'\302Hd\nb\n\rsint64.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_FIXED32RULES'].fields_by_name['const']._loaded_options = None + _globals['_FIXED32RULES'].fields_by_name['const']._serialized_options = b'\302HY\nW\n\rfixed32.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' + _globals['_FIXED32RULES'].fields_by_name['lt']._loaded_options = None + _globals['_FIXED32RULES'].fields_by_name['lt']._serialized_options = b'\302H{\ny\n\nfixed32.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_FIXED32RULES'].fields_by_name['lte']._loaded_options = None + _globals['_FIXED32RULES'].fields_by_name['lte']._serialized_options = b'\302H\212\001\n\207\001\n\013fixed32.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_FIXED32RULES'].fields_by_name['gt']._loaded_options = None + _globals['_FIXED32RULES'].fields_by_name['gt']._serialized_options = b'\302H\216\007\n|\n\nfixed32.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\265\001\n\rfixed32.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\275\001\n\027fixed32.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\305\001\n\016fixed32.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\315\001\n\030fixed32.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_FIXED32RULES'].fields_by_name['gte']._loaded_options = None + _globals['_FIXED32RULES'].fields_by_name['gte']._serialized_options = b'\302H\331\007\n\212\001\n\013fixed32.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\304\001\n\016fixed32.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\314\001\n\030fixed32.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\324\001\n\017fixed32.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\334\001\n\031fixed32.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_FIXED32RULES'].fields_by_name['in']._loaded_options = None + _globals['_FIXED32RULES'].fields_by_name['in']._serialized_options = b'\302Hh\nf\n\nfixed32.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' + _globals['_FIXED32RULES'].fields_by_name['not_in']._loaded_options = None + _globals['_FIXED32RULES'].fields_by_name['not_in']._serialized_options = b'\302He\nc\n\016fixed32.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_FIXED64RULES'].fields_by_name['const']._loaded_options = None + _globals['_FIXED64RULES'].fields_by_name['const']._serialized_options = b'\302HY\nW\n\rfixed64.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' + _globals['_FIXED64RULES'].fields_by_name['lt']._loaded_options = None + _globals['_FIXED64RULES'].fields_by_name['lt']._serialized_options = b'\302H{\ny\n\nfixed64.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_FIXED64RULES'].fields_by_name['lte']._loaded_options = None + _globals['_FIXED64RULES'].fields_by_name['lte']._serialized_options = b'\302H\212\001\n\207\001\n\013fixed64.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_FIXED64RULES'].fields_by_name['gt']._loaded_options = None + _globals['_FIXED64RULES'].fields_by_name['gt']._serialized_options = b'\302H\216\007\n|\n\nfixed64.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\265\001\n\rfixed64.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\275\001\n\027fixed64.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\305\001\n\016fixed64.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\315\001\n\030fixed64.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_FIXED64RULES'].fields_by_name['gte']._loaded_options = None + _globals['_FIXED64RULES'].fields_by_name['gte']._serialized_options = b'\302H\331\007\n\212\001\n\013fixed64.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\304\001\n\016fixed64.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\314\001\n\030fixed64.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\324\001\n\017fixed64.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\334\001\n\031fixed64.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_FIXED64RULES'].fields_by_name['in']._loaded_options = None + _globals['_FIXED64RULES'].fields_by_name['in']._serialized_options = b'\302Hh\nf\n\nfixed64.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' + _globals['_FIXED64RULES'].fields_by_name['not_in']._loaded_options = None + _globals['_FIXED64RULES'].fields_by_name['not_in']._serialized_options = b'\302He\nc\n\016fixed64.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_SFIXED32RULES'].fields_by_name['const']._loaded_options = None + _globals['_SFIXED32RULES'].fields_by_name['const']._serialized_options = b'\302HZ\nX\n\016sfixed32.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' + _globals['_SFIXED32RULES'].fields_by_name['lt']._loaded_options = None + _globals['_SFIXED32RULES'].fields_by_name['lt']._serialized_options = b'\302H|\nz\n\013sfixed32.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_SFIXED32RULES'].fields_by_name['lte']._loaded_options = None + _globals['_SFIXED32RULES'].fields_by_name['lte']._serialized_options = b'\302H\213\001\n\210\001\n\014sfixed32.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_SFIXED32RULES'].fields_by_name['gt']._loaded_options = None + _globals['_SFIXED32RULES'].fields_by_name['gt']._serialized_options = b'\302H\223\007\n}\n\013sfixed32.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\266\001\n\016sfixed32.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\276\001\n\030sfixed32.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\306\001\n\017sfixed32.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\316\001\n\031sfixed32.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_SFIXED32RULES'].fields_by_name['gte']._loaded_options = None + _globals['_SFIXED32RULES'].fields_by_name['gte']._serialized_options = b'\302H\336\007\n\213\001\n\014sfixed32.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\305\001\n\017sfixed32.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\315\001\n\031sfixed32.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\325\001\n\020sfixed32.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\335\001\n\032sfixed32.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_SFIXED32RULES'].fields_by_name['in']._loaded_options = None + _globals['_SFIXED32RULES'].fields_by_name['in']._serialized_options = b'\302Hi\ng\n\013sfixed32.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' + _globals['_SFIXED32RULES'].fields_by_name['not_in']._loaded_options = None + _globals['_SFIXED32RULES'].fields_by_name['not_in']._serialized_options = b'\302Hf\nd\n\017sfixed32.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_SFIXED64RULES'].fields_by_name['const']._loaded_options = None + _globals['_SFIXED64RULES'].fields_by_name['const']._serialized_options = b'\302HZ\nX\n\016sfixed64.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' + _globals['_SFIXED64RULES'].fields_by_name['lt']._loaded_options = None + _globals['_SFIXED64RULES'].fields_by_name['lt']._serialized_options = b'\302H|\nz\n\013sfixed64.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_SFIXED64RULES'].fields_by_name['lte']._loaded_options = None + _globals['_SFIXED64RULES'].fields_by_name['lte']._serialized_options = b'\302H\213\001\n\210\001\n\014sfixed64.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_SFIXED64RULES'].fields_by_name['gt']._loaded_options = None + _globals['_SFIXED64RULES'].fields_by_name['gt']._serialized_options = b'\302H\223\007\n}\n\013sfixed64.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\266\001\n\016sfixed64.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\276\001\n\030sfixed64.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\306\001\n\017sfixed64.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\316\001\n\031sfixed64.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_SFIXED64RULES'].fields_by_name['gte']._loaded_options = None + _globals['_SFIXED64RULES'].fields_by_name['gte']._serialized_options = b'\302H\336\007\n\213\001\n\014sfixed64.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\305\001\n\017sfixed64.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\315\001\n\031sfixed64.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\325\001\n\020sfixed64.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\335\001\n\032sfixed64.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_SFIXED64RULES'].fields_by_name['in']._loaded_options = None + _globals['_SFIXED64RULES'].fields_by_name['in']._serialized_options = b'\302Hi\ng\n\013sfixed64.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' + _globals['_SFIXED64RULES'].fields_by_name['not_in']._loaded_options = None + _globals['_SFIXED64RULES'].fields_by_name['not_in']._serialized_options = b'\302Hf\nd\n\017sfixed64.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_BOOLRULES'].fields_by_name['const']._loaded_options = None + _globals['_BOOLRULES'].fields_by_name['const']._serialized_options = b'\302HV\nT\n\nbool.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['const']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['const']._serialized_options = b'\302HZ\nX\n\014string.const\032Hthis != rules.const ? \'value must equal `%s`\'.format([rules.const]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['len']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['len']._serialized_options = b'\302Hn\nl\n\nstring.len\032^uint(this.size()) != rules.len ? \'value length must be %s characters\'.format([rules.len]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['min_len']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['min_len']._serialized_options = b'\302H\203\001\n\200\001\n\016string.min_len\032nuint(this.size()) < rules.min_len ? \'value length must be at least %s characters\'.format([rules.min_len]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['max_len']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['max_len']._serialized_options = b'\302H\201\001\n\177\n\016string.max_len\032muint(this.size()) > rules.max_len ? \'value length must be at most %s characters\'.format([rules.max_len]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['len_bytes']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['len_bytes']._serialized_options = b'\302H\203\001\n\200\001\n\020string.len_bytes\032luint(bytes(this).size()) != rules.len_bytes ? \'value length must be %s bytes\'.format([rules.len_bytes]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['min_bytes']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['min_bytes']._serialized_options = b'\302H\213\001\n\210\001\n\020string.min_bytes\032tuint(bytes(this).size()) < rules.min_bytes ? \'value length must be at least %s bytes\'.format([rules.min_bytes]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['max_bytes']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['max_bytes']._serialized_options = b'\302H\212\001\n\207\001\n\020string.max_bytes\032suint(bytes(this).size()) > rules.max_bytes ? \'value length must be at most %s bytes\'.format([rules.max_bytes]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['pattern']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['pattern']._serialized_options = b'\302Hy\nw\n\016string.pattern\032e!this.matches(rules.pattern) ? \'value does not match regex pattern `%s`\'.format([rules.pattern]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['prefix']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['prefix']._serialized_options = b'\302Hq\no\n\rstring.prefix\032^!this.startsWith(rules.prefix) ? \'value does not have prefix `%s`\'.format([rules.prefix]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['suffix']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['suffix']._serialized_options = b'\302Ho\nm\n\rstring.suffix\032\\!this.endsWith(rules.suffix) ? \'value does not have suffix `%s`\'.format([rules.suffix]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['contains']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['contains']._serialized_options = b'\302H{\ny\n\017string.contains\032f!this.contains(rules.contains) ? \'value does not contain substring `%s`\'.format([rules.contains]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['not_contains']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['not_contains']._serialized_options = b'\302H~\n|\n\023string.not_contains\032ethis.contains(rules.not_contains) ? \'value contains substring `%s`\'.format([rules.not_contains]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['in']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['in']._serialized_options = b'\302Hg\ne\n\tstring.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['not_in']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['not_in']._serialized_options = b'\302Hd\nb\n\rstring.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['email']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['email']._serialized_options = b'\302H\251\001\nQ\n\014string.email\022#value must be a valid email address\032\034this == \'\' || this.isEmail()\nT\n\022string.email_empty\0222value is empty, which is not a valid email address\032\nthis != \'\'' + _globals['_STRINGRULES'].fields_by_name['hostname']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['hostname']._serialized_options = b'\302H\250\001\nR\n\017string.hostname\022\036value must be a valid hostname\032\037this == \'\' || this.isHostname()\nR\n\025string.hostname_empty\022-value is empty, which is not a valid hostname\032\nthis != \'\'' + _globals['_STRINGRULES'].fields_by_name['ip']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['ip']._serialized_options = b'\302H\232\001\nH\n\tstring.ip\022 value must be a valid IP address\032\031this == \'\' || this.isIp()\nN\n\017string.ip_empty\022/value is empty, which is not a valid IP address\032\nthis != \'\'' + _globals['_STRINGRULES'].fields_by_name['ipv4']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['ipv4']._serialized_options = b'\302H\243\001\nM\n\013string.ipv4\022\"value must be a valid IPv4 address\032\032this == \'\' || this.isIp(4)\nR\n\021string.ipv4_empty\0221value is empty, which is not a valid IPv4 address\032\nthis != \'\'' + _globals['_STRINGRULES'].fields_by_name['ipv6']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['ipv6']._serialized_options = b'\302H\243\001\nM\n\013string.ipv6\022\"value must be a valid IPv6 address\032\032this == \'\' || this.isIp(6)\nR\n\021string.ipv6_empty\0221value is empty, which is not a valid IPv6 address\032\nthis != \'\'' + _globals['_STRINGRULES'].fields_by_name['uri']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['uri']._serialized_options = b'\302H\217\001\nC\n\nstring.uri\022\031value must be a valid URI\032\032this == \'\' || this.isUri()\nH\n\020string.uri_empty\022(value is empty, which is not a valid URI\032\nthis != \'\'' + _globals['_STRINGRULES'].fields_by_name['uri_ref']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['uri_ref']._serialized_options = b'\302H>\n<\n\016string.uri_ref\022\031value must be a valid URI\032\017this.isUriRef()' + _globals['_STRINGRULES'].fields_by_name['address']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['address']._serialized_options = b'\302H\323\001\no\n\016string.address\022-value must be a valid hostname, or ip address\032.this == \'\' || this.isHostname() || this.isIp()\n`\n\024string.address_empty\022 rules.max_len ? \'value must be at most %s bytes\'.format([rules.max_len]) : \'\'' + _globals['_BYTESRULES'].fields_by_name['pattern']._loaded_options = None + _globals['_BYTESRULES'].fields_by_name['pattern']._serialized_options = b'\302H|\nz\n\rbytes.pattern\032i!string(this).matches(rules.pattern) ? \'value must match regex pattern `%s`\'.format([rules.pattern]) : \'\'' + _globals['_BYTESRULES'].fields_by_name['prefix']._loaded_options = None + _globals['_BYTESRULES'].fields_by_name['prefix']._serialized_options = b'\302Hn\nl\n\014bytes.prefix\032\\!this.startsWith(rules.prefix) ? \'value does not have prefix %x\'.format([rules.prefix]) : \'\'' + _globals['_BYTESRULES'].fields_by_name['suffix']._loaded_options = None + _globals['_BYTESRULES'].fields_by_name['suffix']._serialized_options = b'\302Hl\nj\n\014bytes.suffix\032Z!this.endsWith(rules.suffix) ? \'value does not have suffix %x\'.format([rules.suffix]) : \'\'' + _globals['_BYTESRULES'].fields_by_name['contains']._loaded_options = None + _globals['_BYTESRULES'].fields_by_name['contains']._serialized_options = b'\302Hn\nl\n\016bytes.contains\032Z!this.contains(rules.contains) ? \'value does not contain %x\'.format([rules.contains]) : \'\'' + _globals['_BYTESRULES'].fields_by_name['in']._loaded_options = None + _globals['_BYTESRULES'].fields_by_name['in']._serialized_options = b'\302H\206\001\n\203\001\n\010bytes.in\032wdyn(rules)[\'in\'].size() > 0 && !(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' + _globals['_BYTESRULES'].fields_by_name['not_in']._loaded_options = None + _globals['_BYTESRULES'].fields_by_name['not_in']._serialized_options = b'\302Hc\na\n\014bytes.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_BYTESRULES'].fields_by_name['ip']._loaded_options = None + _globals['_BYTESRULES'].fields_by_name['ip']._serialized_options = b'\302H\276\001\ng\n\010bytes.ip\022 value must be a valid IP address\0329this.size() == 0 || this.size() == 4 || this.size() == 16\nS\n\016bytes.ip_empty\022/value is empty, which is not a valid IP address\032\020this.size() != 0' + _globals['_BYTESRULES'].fields_by_name['ipv4']._loaded_options = None + _globals['_BYTESRULES'].fields_by_name['ipv4']._serialized_options = b'\302H\261\001\nV\n\nbytes.ipv4\022\"value must be a valid IPv4 address\032$this.size() == 0 || this.size() == 4\nW\n\020bytes.ipv4_empty\0221value is empty, which is not a valid IPv4 address\032\020this.size() != 0' + _globals['_BYTESRULES'].fields_by_name['ipv6']._loaded_options = None + _globals['_BYTESRULES'].fields_by_name['ipv6']._serialized_options = b'\302H\262\001\nW\n\nbytes.ipv6\022\"value must be a valid IPv6 address\032%this.size() == 0 || this.size() == 16\nW\n\020bytes.ipv6_empty\0221value is empty, which is not a valid IPv6 address\032\020this.size() != 0' + _globals['_ENUMRULES'].fields_by_name['const']._loaded_options = None + _globals['_ENUMRULES'].fields_by_name['const']._serialized_options = b'\302HV\nT\n\nenum.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' + _globals['_ENUMRULES'].fields_by_name['in']._loaded_options = None + _globals['_ENUMRULES'].fields_by_name['in']._serialized_options = b'\302He\nc\n\007enum.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' + _globals['_ENUMRULES'].fields_by_name['not_in']._loaded_options = None + _globals['_ENUMRULES'].fields_by_name['not_in']._serialized_options = b'\302Hb\n`\n\013enum.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_REPEATEDRULES'].fields_by_name['min_items']._loaded_options = None + _globals['_REPEATEDRULES'].fields_by_name['min_items']._serialized_options = b'\302H\206\001\n\203\001\n\022repeated.min_items\032muint(this.size()) < rules.min_items ? \'value must contain at least %d item(s)\'.format([rules.min_items]) : \'\'' + _globals['_REPEATEDRULES'].fields_by_name['max_items']._loaded_options = None + _globals['_REPEATEDRULES'].fields_by_name['max_items']._serialized_options = b'\302H\212\001\n\207\001\n\022repeated.max_items\032quint(this.size()) > rules.max_items ? \'value must contain no more than %s item(s)\'.format([rules.max_items]) : \'\'' + _globals['_REPEATEDRULES'].fields_by_name['unique']._loaded_options = None + _globals['_REPEATEDRULES'].fields_by_name['unique']._serialized_options = b'\302HL\nJ\n\017repeated.unique\022(repeated value must contain unique items\032\rthis.unique()' + _globals['_MAPRULES'].fields_by_name['min_pairs']._loaded_options = None + _globals['_MAPRULES'].fields_by_name['min_pairs']._serialized_options = b'\302Hy\nw\n\rmap.min_pairs\032fuint(this.size()) < rules.min_pairs ? \'map must be at least %d entries\'.format([rules.min_pairs]) : \'\'' + _globals['_MAPRULES'].fields_by_name['max_pairs']._loaded_options = None + _globals['_MAPRULES'].fields_by_name['max_pairs']._serialized_options = b'\302Hx\nv\n\rmap.max_pairs\032euint(this.size()) > rules.max_pairs ? \'map must be at most %d entries\'.format([rules.max_pairs]) : \'\'' + _globals['_DURATIONRULES'].fields_by_name['const']._loaded_options = None + _globals['_DURATIONRULES'].fields_by_name['const']._serialized_options = b'\302HZ\nX\n\016duration.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' + _globals['_DURATIONRULES'].fields_by_name['lt']._loaded_options = None + _globals['_DURATIONRULES'].fields_by_name['lt']._serialized_options = b'\302H|\nz\n\013duration.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_DURATIONRULES'].fields_by_name['lte']._loaded_options = None + _globals['_DURATIONRULES'].fields_by_name['lte']._serialized_options = b'\302H\213\001\n\210\001\n\014duration.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_DURATIONRULES'].fields_by_name['gt']._loaded_options = None + _globals['_DURATIONRULES'].fields_by_name['gt']._serialized_options = b'\302H\223\007\n}\n\013duration.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\266\001\n\016duration.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\276\001\n\030duration.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\306\001\n\017duration.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\316\001\n\031duration.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_DURATIONRULES'].fields_by_name['gte']._loaded_options = None + _globals['_DURATIONRULES'].fields_by_name['gte']._serialized_options = b'\302H\336\007\n\213\001\n\014duration.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\305\001\n\017duration.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\315\001\n\031duration.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\325\001\n\020duration.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\335\001\n\032duration.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_DURATIONRULES'].fields_by_name['in']._loaded_options = None + _globals['_DURATIONRULES'].fields_by_name['in']._serialized_options = b'\302Hi\ng\n\013duration.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'' + _globals['_DURATIONRULES'].fields_by_name['not_in']._loaded_options = None + _globals['_DURATIONRULES'].fields_by_name['not_in']._serialized_options = b'\302Hf\nd\n\017duration.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_TIMESTAMPRULES'].fields_by_name['const']._loaded_options = None + _globals['_TIMESTAMPRULES'].fields_by_name['const']._serialized_options = b'\302H[\nY\n\017timestamp.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'' + _globals['_TIMESTAMPRULES'].fields_by_name['lt']._loaded_options = None + _globals['_TIMESTAMPRULES'].fields_by_name['lt']._serialized_options = b'\302H}\n{\n\014timestamp.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_TIMESTAMPRULES'].fields_by_name['lte']._loaded_options = None + _globals['_TIMESTAMPRULES'].fields_by_name['lte']._serialized_options = b'\302H\214\001\n\211\001\n\rtimestamp.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_TIMESTAMPRULES'].fields_by_name['lt_now']._loaded_options = None + _globals['_TIMESTAMPRULES'].fields_by_name['lt_now']._serialized_options = b'\302HE\nC\n\020timestamp.lt_now\032/this > now ? \'value must be less than now\' : \'\'' + _globals['_TIMESTAMPRULES'].fields_by_name['gt']._loaded_options = None + _globals['_TIMESTAMPRULES'].fields_by_name['gt']._serialized_options = b'\302H\230\007\n~\n\014timestamp.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\267\001\n\017timestamp.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\277\001\n\031timestamp.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\307\001\n\020timestamp.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\317\001\n\032timestamp.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_TIMESTAMPRULES'].fields_by_name['gte']._loaded_options = None + _globals['_TIMESTAMPRULES'].fields_by_name['gte']._serialized_options = b'\302H\343\007\n\214\001\n\rtimestamp.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\306\001\n\020timestamp.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\316\001\n\032timestamp.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\326\001\n\021timestamp.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\336\001\n\033timestamp.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_TIMESTAMPRULES'].fields_by_name['gt_now']._loaded_options = None + _globals['_TIMESTAMPRULES'].fields_by_name['gt_now']._serialized_options = b'\302HH\nF\n\020timestamp.gt_now\0322this < now ? \'value must be greater than now\' : \'\'' + _globals['_TIMESTAMPRULES'].fields_by_name['within']._loaded_options = None + _globals['_TIMESTAMPRULES'].fields_by_name['within']._serialized_options = b'\302H\210\001\n\205\001\n\020timestamp.within\032qthis < now-rules.within || this > now+rules.within ? \'value must be within %s of now\'.format([rules.within]) : \'\'' + _globals['_IGNORE']._serialized_start=51208 + _globals['_IGNORE']._serialized_end=51365 + _globals['_KNOWNREGEX']._serialized_start=51367 + _globals['_KNOWNREGEX']._serialized_end=51477 + _globals['_MESSAGECONSTRAINTS']._serialized_start=208 + _globals['_MESSAGECONSTRAINTS']._serialized_end=318 + _globals['_ONEOFCONSTRAINTS']._serialized_start=320 + _globals['_ONEOFCONSTRAINTS']._serialized_end=384 + _globals['_FIELDCONSTRAINTS']._serialized_start=387 + _globals['_FIELDCONSTRAINTS']._serialized_end=1710 + _globals['_FLOATRULES']._serialized_start=1713 + _globals['_FLOATRULES']._serialized_end=4691 + _globals['_DOUBLERULES']._serialized_start=4694 + _globals['_DOUBLERULES']._serialized_end=7689 + _globals['_INT32RULES']._serialized_start=7692 + _globals['_INT32RULES']._serialized_end=10350 + _globals['_INT64RULES']._serialized_start=10353 + _globals['_INT64RULES']._serialized_end=13011 + _globals['_UINT32RULES']._serialized_start=13014 + _globals['_UINT32RULES']._serialized_end=15688 + _globals['_UINT64RULES']._serialized_start=15691 + _globals['_UINT64RULES']._serialized_end=18365 + _globals['_SINT32RULES']._serialized_start=18368 + _globals['_SINT32RULES']._serialized_end=21042 + _globals['_SINT64RULES']._serialized_start=21045 + _globals['_SINT64RULES']._serialized_end=23719 + _globals['_FIXED32RULES']._serialized_start=23722 + _globals['_FIXED32RULES']._serialized_end=26412 + _globals['_FIXED64RULES']._serialized_start=26415 + _globals['_FIXED64RULES']._serialized_end=29105 + _globals['_SFIXED32RULES']._serialized_start=29108 + _globals['_SFIXED32RULES']._serialized_end=31815 + _globals['_SFIXED64RULES']._serialized_start=31818 + _globals['_SFIXED64RULES']._serialized_end=34525 + _globals['_BOOLRULES']._serialized_start=34528 + _globals['_BOOLRULES']._serialized_end=34667 + _globals['_STRINGRULES']._serialized_start=34670 + _globals['_STRINGRULES']._serialized_end=41500 + _globals['_BYTESRULES']._serialized_start=41503 + _globals['_BYTESRULES']._serialized_end=43693 + _globals['_ENUMRULES']._serialized_start=43696 + _globals['_ENUMRULES']._serialized_end=44140 + _globals['_REPEATEDRULES']._serialized_start=44143 + _globals['_REPEATEDRULES']._serialized_end=44732 + _globals['_MAPRULES']._serialized_start=44735 + _globals['_MAPRULES']._serialized_end=45232 + _globals['_ANYRULES']._serialized_start=45234 + _globals['_ANYRULES']._serialized_end=45283 + _globals['_DURATIONRULES']._serialized_start=45286 + _globals['_DURATIONRULES']._serialized_end=48184 + _globals['_TIMESTAMPRULES']._serialized_start=48187 + _globals['_TIMESTAMPRULES']._serialized_end=51205 +# @@protoc_insertion_point(module_scope) diff --git a/buf/validate/validate_pb2.pyi b/buf/validate/validate_pb2.pyi new file mode 100644 index 0000000..967edb9 --- /dev/null +++ b/buf/validate/validate_pb2.pyi @@ -0,0 +1,503 @@ +from buf.validate import expression_pb2 as _expression_pb2 +from buf.validate.priv import private_pb2 as _private_pb2 +from google.protobuf import descriptor_pb2 as _descriptor_pb2 +from google.protobuf import duration_pb2 as _duration_pb2 +from google.protobuf import timestamp_pb2 as _timestamp_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class Ignore(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + IGNORE_UNSPECIFIED: _ClassVar[Ignore] + IGNORE_IF_UNPOPULATED: _ClassVar[Ignore] + IGNORE_IF_DEFAULT_VALUE: _ClassVar[Ignore] + IGNORE_ALWAYS: _ClassVar[Ignore] + IGNORE_EMPTY: _ClassVar[Ignore] + IGNORE_DEFAULT: _ClassVar[Ignore] + +class KnownRegex(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + KNOWN_REGEX_UNSPECIFIED: _ClassVar[KnownRegex] + KNOWN_REGEX_HTTP_HEADER_NAME: _ClassVar[KnownRegex] + KNOWN_REGEX_HTTP_HEADER_VALUE: _ClassVar[KnownRegex] +IGNORE_UNSPECIFIED: Ignore +IGNORE_IF_UNPOPULATED: Ignore +IGNORE_IF_DEFAULT_VALUE: Ignore +IGNORE_ALWAYS: Ignore +IGNORE_EMPTY: Ignore +IGNORE_DEFAULT: Ignore +KNOWN_REGEX_UNSPECIFIED: KnownRegex +KNOWN_REGEX_HTTP_HEADER_NAME: KnownRegex +KNOWN_REGEX_HTTP_HEADER_VALUE: KnownRegex +MESSAGE_FIELD_NUMBER: _ClassVar[int] +message: _descriptor.FieldDescriptor +ONEOF_FIELD_NUMBER: _ClassVar[int] +oneof: _descriptor.FieldDescriptor +FIELD_FIELD_NUMBER: _ClassVar[int] +field: _descriptor.FieldDescriptor + +class MessageConstraints(_message.Message): + __slots__ = ("disabled", "cel") + DISABLED_FIELD_NUMBER: _ClassVar[int] + CEL_FIELD_NUMBER: _ClassVar[int] + disabled: bool + cel: _containers.RepeatedCompositeFieldContainer[_expression_pb2.Constraint] + def __init__(self, disabled: bool = ..., cel: _Optional[_Iterable[_Union[_expression_pb2.Constraint, _Mapping]]] = ...) -> None: ... + +class OneofConstraints(_message.Message): + __slots__ = ("required",) + REQUIRED_FIELD_NUMBER: _ClassVar[int] + required: bool + def __init__(self, required: bool = ...) -> None: ... + +class FieldConstraints(_message.Message): + __slots__ = ("cel", "required", "ignore", "float", "double", "int32", "int64", "uint32", "uint64", "sint32", "sint64", "fixed32", "fixed64", "sfixed32", "sfixed64", "bool", "string", "bytes", "enum", "repeated", "map", "any", "duration", "timestamp", "skipped", "ignore_empty") + CEL_FIELD_NUMBER: _ClassVar[int] + REQUIRED_FIELD_NUMBER: _ClassVar[int] + IGNORE_FIELD_NUMBER: _ClassVar[int] + FLOAT_FIELD_NUMBER: _ClassVar[int] + DOUBLE_FIELD_NUMBER: _ClassVar[int] + INT32_FIELD_NUMBER: _ClassVar[int] + INT64_FIELD_NUMBER: _ClassVar[int] + UINT32_FIELD_NUMBER: _ClassVar[int] + UINT64_FIELD_NUMBER: _ClassVar[int] + SINT32_FIELD_NUMBER: _ClassVar[int] + SINT64_FIELD_NUMBER: _ClassVar[int] + FIXED32_FIELD_NUMBER: _ClassVar[int] + FIXED64_FIELD_NUMBER: _ClassVar[int] + SFIXED32_FIELD_NUMBER: _ClassVar[int] + SFIXED64_FIELD_NUMBER: _ClassVar[int] + BOOL_FIELD_NUMBER: _ClassVar[int] + STRING_FIELD_NUMBER: _ClassVar[int] + BYTES_FIELD_NUMBER: _ClassVar[int] + ENUM_FIELD_NUMBER: _ClassVar[int] + REPEATED_FIELD_NUMBER: _ClassVar[int] + MAP_FIELD_NUMBER: _ClassVar[int] + ANY_FIELD_NUMBER: _ClassVar[int] + DURATION_FIELD_NUMBER: _ClassVar[int] + TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + SKIPPED_FIELD_NUMBER: _ClassVar[int] + IGNORE_EMPTY_FIELD_NUMBER: _ClassVar[int] + cel: _containers.RepeatedCompositeFieldContainer[_expression_pb2.Constraint] + required: bool + ignore: Ignore + float: FloatRules + double: DoubleRules + int32: Int32Rules + int64: Int64Rules + uint32: UInt32Rules + uint64: UInt64Rules + sint32: SInt32Rules + sint64: SInt64Rules + fixed32: Fixed32Rules + fixed64: Fixed64Rules + sfixed32: SFixed32Rules + sfixed64: SFixed64Rules + bool: BoolRules + string: StringRules + bytes: BytesRules + enum: EnumRules + repeated: RepeatedRules + map: MapRules + any: AnyRules + duration: DurationRules + timestamp: TimestampRules + skipped: bool + ignore_empty: bool + def __init__(self, cel: _Optional[_Iterable[_Union[_expression_pb2.Constraint, _Mapping]]] = ..., required: bool = ..., ignore: _Optional[_Union[Ignore, str]] = ..., float: _Optional[_Union[FloatRules, _Mapping]] = ..., double: _Optional[_Union[DoubleRules, _Mapping]] = ..., int32: _Optional[_Union[Int32Rules, _Mapping]] = ..., int64: _Optional[_Union[Int64Rules, _Mapping]] = ..., uint32: _Optional[_Union[UInt32Rules, _Mapping]] = ..., uint64: _Optional[_Union[UInt64Rules, _Mapping]] = ..., sint32: _Optional[_Union[SInt32Rules, _Mapping]] = ..., sint64: _Optional[_Union[SInt64Rules, _Mapping]] = ..., fixed32: _Optional[_Union[Fixed32Rules, _Mapping]] = ..., fixed64: _Optional[_Union[Fixed64Rules, _Mapping]] = ..., sfixed32: _Optional[_Union[SFixed32Rules, _Mapping]] = ..., sfixed64: _Optional[_Union[SFixed64Rules, _Mapping]] = ..., bool: _Optional[_Union[BoolRules, _Mapping]] = ..., string: _Optional[_Union[StringRules, _Mapping]] = ..., bytes: _Optional[_Union[BytesRules, _Mapping]] = ..., enum: _Optional[_Union[EnumRules, _Mapping]] = ..., repeated: _Optional[_Union[RepeatedRules, _Mapping]] = ..., map: _Optional[_Union[MapRules, _Mapping]] = ..., any: _Optional[_Union[AnyRules, _Mapping]] = ..., duration: _Optional[_Union[DurationRules, _Mapping]] = ..., timestamp: _Optional[_Union[TimestampRules, _Mapping]] = ..., skipped: bool = ..., ignore_empty: bool = ...) -> None: ... + +class FloatRules(_message.Message): + __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in", "finite") + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + FINITE_FIELD_NUMBER: _ClassVar[int] + const: float + lt: float + lte: float + gt: float + gte: float + not_in: _containers.RepeatedScalarFieldContainer[float] + finite: bool + def __init__(self, const: _Optional[float] = ..., lt: _Optional[float] = ..., lte: _Optional[float] = ..., gt: _Optional[float] = ..., gte: _Optional[float] = ..., not_in: _Optional[_Iterable[float]] = ..., finite: bool = ..., **kwargs) -> None: ... + +class DoubleRules(_message.Message): + __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in", "finite") + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + FINITE_FIELD_NUMBER: _ClassVar[int] + const: float + lt: float + lte: float + gt: float + gte: float + not_in: _containers.RepeatedScalarFieldContainer[float] + finite: bool + def __init__(self, const: _Optional[float] = ..., lt: _Optional[float] = ..., lte: _Optional[float] = ..., gt: _Optional[float] = ..., gte: _Optional[float] = ..., not_in: _Optional[_Iterable[float]] = ..., finite: bool = ..., **kwargs) -> None: ... + +class Int32Rules(_message.Message): + __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in") + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + const: int + lt: int + lte: int + gt: int + gte: int + not_in: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... + +class Int64Rules(_message.Message): + __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in") + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + const: int + lt: int + lte: int + gt: int + gte: int + not_in: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... + +class UInt32Rules(_message.Message): + __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in") + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + const: int + lt: int + lte: int + gt: int + gte: int + not_in: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... + +class UInt64Rules(_message.Message): + __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in") + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + const: int + lt: int + lte: int + gt: int + gte: int + not_in: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... + +class SInt32Rules(_message.Message): + __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in") + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + const: int + lt: int + lte: int + gt: int + gte: int + not_in: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... + +class SInt64Rules(_message.Message): + __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in") + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + const: int + lt: int + lte: int + gt: int + gte: int + not_in: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... + +class Fixed32Rules(_message.Message): + __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in") + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + const: int + lt: int + lte: int + gt: int + gte: int + not_in: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... + +class Fixed64Rules(_message.Message): + __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in") + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + const: int + lt: int + lte: int + gt: int + gte: int + not_in: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... + +class SFixed32Rules(_message.Message): + __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in") + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + const: int + lt: int + lte: int + gt: int + gte: int + not_in: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... + +class SFixed64Rules(_message.Message): + __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in") + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + const: int + lt: int + lte: int + gt: int + gte: int + not_in: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... + +class BoolRules(_message.Message): + __slots__ = ("const",) + CONST_FIELD_NUMBER: _ClassVar[int] + const: bool + def __init__(self, const: bool = ...) -> None: ... + +class StringRules(_message.Message): + __slots__ = ("const", "len", "min_len", "max_len", "len_bytes", "min_bytes", "max_bytes", "pattern", "prefix", "suffix", "contains", "not_contains", "not_in", "email", "hostname", "ip", "ipv4", "ipv6", "uri", "uri_ref", "address", "uuid", "tuuid", "ip_with_prefixlen", "ipv4_with_prefixlen", "ipv6_with_prefixlen", "ip_prefix", "ipv4_prefix", "ipv6_prefix", "host_and_port", "well_known_regex", "strict") + CONST_FIELD_NUMBER: _ClassVar[int] + LEN_FIELD_NUMBER: _ClassVar[int] + MIN_LEN_FIELD_NUMBER: _ClassVar[int] + MAX_LEN_FIELD_NUMBER: _ClassVar[int] + LEN_BYTES_FIELD_NUMBER: _ClassVar[int] + MIN_BYTES_FIELD_NUMBER: _ClassVar[int] + MAX_BYTES_FIELD_NUMBER: _ClassVar[int] + PATTERN_FIELD_NUMBER: _ClassVar[int] + PREFIX_FIELD_NUMBER: _ClassVar[int] + SUFFIX_FIELD_NUMBER: _ClassVar[int] + CONTAINS_FIELD_NUMBER: _ClassVar[int] + NOT_CONTAINS_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + EMAIL_FIELD_NUMBER: _ClassVar[int] + HOSTNAME_FIELD_NUMBER: _ClassVar[int] + IP_FIELD_NUMBER: _ClassVar[int] + IPV4_FIELD_NUMBER: _ClassVar[int] + IPV6_FIELD_NUMBER: _ClassVar[int] + URI_FIELD_NUMBER: _ClassVar[int] + URI_REF_FIELD_NUMBER: _ClassVar[int] + ADDRESS_FIELD_NUMBER: _ClassVar[int] + UUID_FIELD_NUMBER: _ClassVar[int] + TUUID_FIELD_NUMBER: _ClassVar[int] + IP_WITH_PREFIXLEN_FIELD_NUMBER: _ClassVar[int] + IPV4_WITH_PREFIXLEN_FIELD_NUMBER: _ClassVar[int] + IPV6_WITH_PREFIXLEN_FIELD_NUMBER: _ClassVar[int] + IP_PREFIX_FIELD_NUMBER: _ClassVar[int] + IPV4_PREFIX_FIELD_NUMBER: _ClassVar[int] + IPV6_PREFIX_FIELD_NUMBER: _ClassVar[int] + HOST_AND_PORT_FIELD_NUMBER: _ClassVar[int] + WELL_KNOWN_REGEX_FIELD_NUMBER: _ClassVar[int] + STRICT_FIELD_NUMBER: _ClassVar[int] + const: str + len: int + min_len: int + max_len: int + len_bytes: int + min_bytes: int + max_bytes: int + pattern: str + prefix: str + suffix: str + contains: str + not_contains: str + not_in: _containers.RepeatedScalarFieldContainer[str] + email: bool + hostname: bool + ip: bool + ipv4: bool + ipv6: bool + uri: bool + uri_ref: bool + address: bool + uuid: bool + tuuid: bool + ip_with_prefixlen: bool + ipv4_with_prefixlen: bool + ipv6_with_prefixlen: bool + ip_prefix: bool + ipv4_prefix: bool + ipv6_prefix: bool + host_and_port: bool + well_known_regex: KnownRegex + strict: bool + def __init__(self, const: _Optional[str] = ..., len: _Optional[int] = ..., min_len: _Optional[int] = ..., max_len: _Optional[int] = ..., len_bytes: _Optional[int] = ..., min_bytes: _Optional[int] = ..., max_bytes: _Optional[int] = ..., pattern: _Optional[str] = ..., prefix: _Optional[str] = ..., suffix: _Optional[str] = ..., contains: _Optional[str] = ..., not_contains: _Optional[str] = ..., not_in: _Optional[_Iterable[str]] = ..., email: bool = ..., hostname: bool = ..., ip: bool = ..., ipv4: bool = ..., ipv6: bool = ..., uri: bool = ..., uri_ref: bool = ..., address: bool = ..., uuid: bool = ..., tuuid: bool = ..., ip_with_prefixlen: bool = ..., ipv4_with_prefixlen: bool = ..., ipv6_with_prefixlen: bool = ..., ip_prefix: bool = ..., ipv4_prefix: bool = ..., ipv6_prefix: bool = ..., host_and_port: bool = ..., well_known_regex: _Optional[_Union[KnownRegex, str]] = ..., strict: bool = ..., **kwargs) -> None: ... + +class BytesRules(_message.Message): + __slots__ = ("const", "len", "min_len", "max_len", "pattern", "prefix", "suffix", "contains", "not_in", "ip", "ipv4", "ipv6") + CONST_FIELD_NUMBER: _ClassVar[int] + LEN_FIELD_NUMBER: _ClassVar[int] + MIN_LEN_FIELD_NUMBER: _ClassVar[int] + MAX_LEN_FIELD_NUMBER: _ClassVar[int] + PATTERN_FIELD_NUMBER: _ClassVar[int] + PREFIX_FIELD_NUMBER: _ClassVar[int] + SUFFIX_FIELD_NUMBER: _ClassVar[int] + CONTAINS_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + IP_FIELD_NUMBER: _ClassVar[int] + IPV4_FIELD_NUMBER: _ClassVar[int] + IPV6_FIELD_NUMBER: _ClassVar[int] + const: bytes + len: int + min_len: int + max_len: int + pattern: str + prefix: bytes + suffix: bytes + contains: bytes + not_in: _containers.RepeatedScalarFieldContainer[bytes] + ip: bool + ipv4: bool + ipv6: bool + def __init__(self, const: _Optional[bytes] = ..., len: _Optional[int] = ..., min_len: _Optional[int] = ..., max_len: _Optional[int] = ..., pattern: _Optional[str] = ..., prefix: _Optional[bytes] = ..., suffix: _Optional[bytes] = ..., contains: _Optional[bytes] = ..., not_in: _Optional[_Iterable[bytes]] = ..., ip: bool = ..., ipv4: bool = ..., ipv6: bool = ..., **kwargs) -> None: ... + +class EnumRules(_message.Message): + __slots__ = ("const", "defined_only", "not_in") + CONST_FIELD_NUMBER: _ClassVar[int] + DEFINED_ONLY_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + const: int + defined_only: bool + not_in: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, const: _Optional[int] = ..., defined_only: bool = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... + +class RepeatedRules(_message.Message): + __slots__ = ("min_items", "max_items", "unique", "items") + MIN_ITEMS_FIELD_NUMBER: _ClassVar[int] + MAX_ITEMS_FIELD_NUMBER: _ClassVar[int] + UNIQUE_FIELD_NUMBER: _ClassVar[int] + ITEMS_FIELD_NUMBER: _ClassVar[int] + min_items: int + max_items: int + unique: bool + items: FieldConstraints + def __init__(self, min_items: _Optional[int] = ..., max_items: _Optional[int] = ..., unique: bool = ..., items: _Optional[_Union[FieldConstraints, _Mapping]] = ...) -> None: ... + +class MapRules(_message.Message): + __slots__ = ("min_pairs", "max_pairs", "keys", "values") + MIN_PAIRS_FIELD_NUMBER: _ClassVar[int] + MAX_PAIRS_FIELD_NUMBER: _ClassVar[int] + KEYS_FIELD_NUMBER: _ClassVar[int] + VALUES_FIELD_NUMBER: _ClassVar[int] + min_pairs: int + max_pairs: int + keys: FieldConstraints + values: FieldConstraints + def __init__(self, min_pairs: _Optional[int] = ..., max_pairs: _Optional[int] = ..., keys: _Optional[_Union[FieldConstraints, _Mapping]] = ..., values: _Optional[_Union[FieldConstraints, _Mapping]] = ...) -> None: ... + +class AnyRules(_message.Message): + __slots__ = ("not_in",) + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + not_in: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, not_in: _Optional[_Iterable[str]] = ..., **kwargs) -> None: ... + +class DurationRules(_message.Message): + __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in") + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + const: _duration_pb2.Duration + lt: _duration_pb2.Duration + lte: _duration_pb2.Duration + gt: _duration_pb2.Duration + gte: _duration_pb2.Duration + not_in: _containers.RepeatedCompositeFieldContainer[_duration_pb2.Duration] + def __init__(self, const: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., lt: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., lte: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., gt: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., gte: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., not_in: _Optional[_Iterable[_Union[_duration_pb2.Duration, _Mapping]]] = ..., **kwargs) -> None: ... + +class TimestampRules(_message.Message): + __slots__ = ("const", "lt", "lte", "lt_now", "gt", "gte", "gt_now", "within") + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + LT_NOW_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + GT_NOW_FIELD_NUMBER: _ClassVar[int] + WITHIN_FIELD_NUMBER: _ClassVar[int] + const: _timestamp_pb2.Timestamp + lt: _timestamp_pb2.Timestamp + lte: _timestamp_pb2.Timestamp + lt_now: bool + gt: _timestamp_pb2.Timestamp + gte: _timestamp_pb2.Timestamp + gt_now: bool + within: _duration_pb2.Duration + def __init__(self, const: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., lt: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., lte: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., lt_now: bool = ..., gt: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., gte: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., gt_now: bool = ..., within: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ...) -> None: ... diff --git a/buf/validate/validate_pb2_grpc.py b/buf/validate/validate_pb2_grpc.py new file mode 100644 index 0000000..2daafff --- /dev/null +++ b/buf/validate/validate_pb2_grpc.py @@ -0,0 +1,4 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc + From 81a89fc107436b418ec76a440c91963fcf34daa6 Mon Sep 17 00:00:00 2001 From: Srinivas Karre Date: Sun, 10 May 2026 20:52:06 +0530 Subject: [PATCH 05/19] chore: revert unrelated proto changes, remove generate-local, bump PROTO_REF --- Makefile | 25 +- scalekit/v1/agentkit_logs/__init__.py | 0 .../agentkit_logs/agentkit_analytics_pb2.py | 62 --- .../agentkit_logs/agentkit_analytics_pb2.pyi | 91 ----- .../agentkit_analytics_pb2_grpc.py | 66 --- .../v1/agentkit_logs/agentkit_logs_pb2.py | 80 ---- .../v1/agentkit_logs/agentkit_logs_pb2.pyi | 101 ----- .../agentkit_logs/agentkit_logs_pb2_grpc.py | 99 ----- scalekit/v1/auditlogs/auditlogs_pb2.py | 27 +- scalekit/v1/auditlogs/auditlogs_pb2.pyi | 1 - scalekit/v1/auth/auth_pb2.py | 84 ++-- scalekit/v1/auth/auth_pb2.pyi | 20 +- scalekit/v1/auth/totp_pb2.py | 61 ++- scalekit/v1/auth/totp_pb2.pyi | 1 - scalekit/v1/clients/clients_pb2.py | 200 ++++----- scalekit/v1/clients/clients_pb2.pyi | 30 +- .../connected_accounts_pb2.py | 152 +++---- .../connected_accounts_pb2.pyi | 54 +-- .../connected_accounts_pb2_grpc.py | 136 ------ scalekit/v1/connections/connections_pb2.py | 278 ++++++------- scalekit/v1/connections/connections_pb2.pyi | 50 +-- .../v1/connections/connections_pb2_grpc.py | 66 --- scalekit/v1/directories/directories_pb2.py | 40 +- scalekit/v1/directories/directories_pb2.pyi | 24 -- .../v1/directories/directories_pb2_grpc.py | 66 --- scalekit/v1/domains/domains_pb2.py | 28 +- scalekit/v1/domains/domains_pb2.pyi | 6 +- scalekit/v1/emails/emails_pb2.py | 197 +++++---- scalekit/v1/emails/emails_pb2.pyi | 1 - scalekit/v1/environments/environments_pb2.py | 371 +++++++---------- scalekit/v1/environments/environments_pb2.pyi | 120 +----- .../v1/environments/environments_pb2_grpc.py | 168 -------- scalekit/v1/errdetails/errdetails_pb2.py | 49 +-- scalekit/v1/errdetails/errdetails_pb2.pyi | 3 - scalekit/v1/errdetails/errdetails_pb2_grpc.py | 63 --- scalekit/v1/keys/__init__.py | 0 scalekit/v1/keys/keys_pb2.py | 111 ----- scalekit/v1/keys/keys_pb2.pyi | 178 -------- scalekit/v1/keys/keys_pb2_grpc.py | 386 ------------------ scalekit/v1/members/members_pb2.py | 85 ++-- scalekit/v1/members/members_pb2.pyi | 1 - scalekit/v1/migrations/migrations_pb2.py | 68 ++- scalekit/v1/migrations/migrations_pb2.pyi | 12 - scalekit/v1/migrations/migrations_pb2_grpc.py | 33 -- scalekit/v1/options/options_pb2.py | 4 +- scalekit/v1/options/options_pb2.pyi | 16 - scalekit/v1/providers/providers_pb2.py | 114 ++---- scalekit/v1/providers/providers_pb2.pyi | 75 +--- scalekit/v1/providers/providers_pb2_grpc.py | 99 ----- scalekit/v1/roles/roles_pb2.py | 6 +- scalekit/v1/tools/tools_pb2.py | 84 ++-- scalekit/v1/tools/tools_pb2.pyi | 40 +- scalekit/v1/tools/tools_pb2_grpc.py | 33 -- scalekit/v1/users/users_pb2.py | 170 ++++---- scalekit/v1/workspaces/workspaces_pb2.py | 272 ++++++------ scalekit/v1/workspaces/workspaces_pb2.pyi | 50 +-- scalekit/v1/workspaces/workspaces_pb2_grpc.py | 133 ------ 57 files changed, 1038 insertions(+), 3752 deletions(-) delete mode 100644 scalekit/v1/agentkit_logs/__init__.py delete mode 100644 scalekit/v1/agentkit_logs/agentkit_analytics_pb2.py delete mode 100644 scalekit/v1/agentkit_logs/agentkit_analytics_pb2.pyi delete mode 100644 scalekit/v1/agentkit_logs/agentkit_analytics_pb2_grpc.py delete mode 100644 scalekit/v1/agentkit_logs/agentkit_logs_pb2.py delete mode 100644 scalekit/v1/agentkit_logs/agentkit_logs_pb2.pyi delete mode 100644 scalekit/v1/agentkit_logs/agentkit_logs_pb2_grpc.py delete mode 100644 scalekit/v1/keys/__init__.py delete mode 100644 scalekit/v1/keys/keys_pb2.py delete mode 100644 scalekit/v1/keys/keys_pb2.pyi delete mode 100644 scalekit/v1/keys/keys_pb2_grpc.py diff --git a/Makefile b/Makefile index a1305d9..09ea0f6 100644 --- a/Makefile +++ b/Makefile @@ -14,7 +14,6 @@ VENV_PIP := $(VENV_PYTHON) -m pip PROTO_REPO_URL := https://github.com/scalekit-inc/scalekit.git PROTO_REF ?= v0.1.120.2 PROTO_SUBDIR := proto -LOCAL_PROTO_DIR ?= ../scalekit/proto TEMP_DIR := temp_scalekit SCALEKIT_DIR := scalekit @@ -23,7 +22,7 @@ GOOGLE_DIR := google PROTO_DIR := proto PROTOC_DIR := protoc_gen_openapiv2 -.PHONY: setup generate generate-local lint test tools-check create-venv prepare buf_generate restore generate_init_files cleanup copy_proto_dir +.PHONY: setup generate lint test tools-check create-venv prepare buf_generate restore generate_init_files cleanup copy_proto_dir setup: create-venv @echo "Installing SDK dependencies in $(VENV_DIR)..." @@ -100,28 +99,6 @@ cleanup: rm -rf $(GOOGLE_DIR) $(PROTO_DIR) $(PROTOC_DIR) rm -f .dirpath -generate-local: tools-check - @echo "Using local proto sources from $(LOCAL_PROTO_DIR)..." - @set -euo pipefail; \ - prepared=0; \ - rollback_if_needed() { \ - if [ "$$prepared" -eq 1 ] && [ -d "$(TEMP_DIR)" ]; then \ - echo "Generation failed; restoring $(SCALEKIT_DIR) from $(TEMP_DIR)..."; \ - rsync -a "$(TEMP_DIR)/" "$(SCALEKIT_DIR)/"; \ - fi; \ - }; \ - trap 'rollback_if_needed' EXIT; \ - echo "Step 1: Syncing proto files from $(LOCAL_PROTO_DIR)"; \ - mkdir -p proto; \ - rsync -av "$(LOCAL_PROTO_DIR)/" proto/; \ - $(MAKE) prepare; prepared=1; \ - buf generate --include-imports ../scalekit; \ - $(MAKE) restore; prepared=0; \ - mkdir -p $(BUF_DIR); \ - $(MAKE) generate_init_files; \ - $(MAKE) cleanup - @echo "Code generation complete." - lint: create-venv @echo "Running static checks..." $(VENV_PYTHON) -m compileall -q scalekit tests diff --git a/scalekit/v1/agentkit_logs/__init__.py b/scalekit/v1/agentkit_logs/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/scalekit/v1/agentkit_logs/agentkit_analytics_pb2.py b/scalekit/v1/agentkit_logs/agentkit_analytics_pb2.py deleted file mode 100644 index ca09db0..0000000 --- a/scalekit/v1/agentkit_logs/agentkit_analytics_pb2.py +++ /dev/null @@ -1,62 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: scalekit/v1/agentkit_logs/agentkit_analytics.proto -# Protobuf Python Version: 5.26.1 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 -from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 -from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2 -from google.api import visibility_pb2 as google_dot_api_dot_visibility__pb2 -from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -from protoc_gen_openapiv2.options import annotations_pb2 as protoc__gen__openapiv2_dot_options_dot_annotations__pb2 -from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n2scalekit/v1/agentkit_logs/agentkit_analytics.proto\x12\x19scalekit.v1.agentkit_logs\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\xbe\x04\n\x17GetOverviewStatsRequest\x12>\n\nstart_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x02R\tstartTime\x12:\n\x08\x65nd_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x02R\x07\x65ndTime\x12O\n\x08provider\x18\x03 \x03(\tB3\x92\x41\x30\x32.Filter by connector provider slug, e.g. gmail.R\x08provider\x12g\n\x06status\x18\x04 \x03(\tBO\x92\x41L2JFilter by status. Allowed values: success, provider_error, platform_error.R\x06status\x12>\n\nerror_code\x18\x05 \x03(\tB\x1f\x92\x41\x1c\x32\x1a\x46ilter by error code slug.R\terrorCode\x12\x98\x01\n\x0f\x63onnection_name\x18\x06 \x01(\tBj\x92\x41_2OFilter by connection name (partial, case-insensitive match). e.g. \'gmail-prod\'.J\x0c\"gmail-prod\"\xbaH\x05r\x03\x18\xff\x01H\x00R\x0e\x63onnectionName\x88\x01\x01\x42\x12\n\x10_connection_name\"\xa5\x03\n\rOverviewStats\x12\x14\n\x05total\x18\x01 \x01(\x03R\x05total\x12\x18\n\x07success\x18\x02 \x01(\x03R\x07success\x12\x16\n\x06\x65rrors\x18\x03 \x01(\x03R\x06\x65rrors\x12\'\n\x0fprovider_errors\x18\x04 \x01(\x03R\x0eproviderErrors\x12\'\n\x0fplatform_errors\x18\x05 \x01(\x03R\x0eplatformErrors\x12Q\n\x0ftop_error_codes\x18\x06 \x03(\x0b\x32).scalekit.v1.agentkit_logs.ErrorCodeCountR\rtopErrorCodes\x12Y\n\x13\x63onnector_breakdown\x18\x07 \x03(\x0b\x32(.scalekit.v1.agentkit_logs.ConnectorStatR\x12\x63onnectorBreakdown\x12L\n\x0btime_series\x18\x08 \x03(\x0b\x32+.scalekit.v1.agentkit_logs.TimeSeriesBucketR\ntimeSeries\"E\n\x0e\x45rrorCodeCount\x12\x1d\n\nerror_code\x18\x01 \x01(\tR\terrorCode\x12\x14\n\x05\x63ount\x18\x02 \x01(\x03R\x05\x63ount\"\xc5\x01\n\rConnectorStat\x12\x1a\n\x08provider\x18\x01 \x01(\tR\x08provider\x12\x14\n\x05total\x18\x02 \x01(\x03R\x05total\x12\x18\n\x07success\x18\x03 \x01(\x03R\x07success\x12\x16\n\x06\x65rrors\x18\x04 \x01(\x03R\x06\x65rrors\x12\'\n\x0fprovider_errors\x18\x05 \x01(\x03R\x0eproviderErrors\x12\'\n\x0fplatform_errors\x18\x06 \x01(\x03R\x0eplatformErrors\"\xc8\x03\n\x10TimeSeriesBucket\x12\x32\n\x06\x62ucket\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x06\x62ucket\x12\x14\n\x05total\x18\x02 \x01(\x03R\x05total\x12\x18\n\x07success\x18\x03 \x01(\x03R\x07success\x12\x16\n\x06\x65rrors\x18\x04 \x01(\x03R\x06\x65rrors\x12\xe5\x01\n\x17\x62ucket_duration_seconds\x18\x05 \x01(\x03\x42\xac\x01\x92\x41\xa8\x01\x32\xa5\x01Width of this bucket in seconds. The server picks granularity adaptively (5m, 15m, 30m, 1h, 2h, 6h, 12h, 1d, 3d, or 7d) so that any window returns at most 30 points.R\x15\x62ucketDurationSeconds\x12\'\n\x0fprovider_errors\x18\x06 \x01(\x03R\x0eproviderErrors\x12\'\n\x0fplatform_errors\x18\x07 \x01(\x03R\x0eplatformErrors2\xf7\x03\n\x18\x41gentkitAnalyticsService\x12\xc1\x03\n\x10GetOverviewStats\x12\x32.scalekit.v1.agentkit_logs.GetOverviewStatsRequest\x1a(.scalekit.v1.agentkit_logs.OverviewStats\"\xce\x02\x92\x41\x8a\x02\n\x12\x41gentKit Analytics\x12!Get tool call overview statistics\x1a~Returns aggregated tool call metrics for the environment over the specified time window. Used to power the Overview dashboard.J3\n\x03\x32\x30\x30\x12,\n*Overview statistics retrieved successfullyJ\x1c\n\x03\x34\x30\x30\x12\x15\n\x13Invalid time window\x82\xb5\x18\x02\x18T\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\x12#/api/v1/agentkit/analytics/overview\x1a\x17\x92\x41\x14\n\x12\x41gentKit AnalyticsB9Z7github.com/scalekit-inc/scalekit/pkg/grpc/agentkit_logsb\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'scalekit.v1.agentkit_logs.agentkit_analytics_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'Z7github.com/scalekit-inc/scalekit/pkg/grpc/agentkit_logs' - _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['start_time']._loaded_options = None - _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['start_time']._serialized_options = b'\340A\002' - _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['end_time']._loaded_options = None - _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['end_time']._serialized_options = b'\340A\002' - _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['provider']._loaded_options = None - _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['provider']._serialized_options = b'\222A02.Filter by connector provider slug, e.g. gmail.' - _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['status']._loaded_options = None - _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['status']._serialized_options = b'\222AL2JFilter by status. Allowed values: success, provider_error, platform_error.' - _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['error_code']._loaded_options = None - _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['error_code']._serialized_options = b'\222A\0342\032Filter by error code slug.' - _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['connection_name']._loaded_options = None - _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['connection_name']._serialized_options = b'\222A_2OFilter by connection name (partial, case-insensitive match). e.g. \'gmail-prod\'.J\014\"gmail-prod\"\272H\005r\003\030\377\001' - _globals['_TIMESERIESBUCKET'].fields_by_name['bucket_duration_seconds']._loaded_options = None - _globals['_TIMESERIESBUCKET'].fields_by_name['bucket_duration_seconds']._serialized_options = b'\222A\250\0012\245\001Width of this bucket in seconds. The server picks granularity adaptively (5m, 15m, 30m, 1h, 2h, 6h, 12h, 1d, 3d, or 7d) so that any window returns at most 30 points.' - _globals['_AGENTKITANALYTICSSERVICE']._loaded_options = None - _globals['_AGENTKITANALYTICSSERVICE']._serialized_options = b'\222A\024\n\022AgentKit Analytics' - _globals['_AGENTKITANALYTICSSERVICE'].methods_by_name['GetOverviewStats']._loaded_options = None - _globals['_AGENTKITANALYTICSSERVICE'].methods_by_name['GetOverviewStats']._serialized_options = b'\222A\212\002\n\022AgentKit Analytics\022!Get tool call overview statistics\032~Returns aggregated tool call metrics for the environment over the specified time window. Used to power the Overview dashboard.J3\n\003200\022,\n*Overview statistics retrieved successfullyJ\034\n\003400\022\025\n\023Invalid time window\202\265\030\002\030T\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002%\022#/api/v1/agentkit/analytics/overview' - _globals['_GETOVERVIEWSTATSREQUEST']._serialized_start=319 - _globals['_GETOVERVIEWSTATSREQUEST']._serialized_end=893 - _globals['_OVERVIEWSTATS']._serialized_start=896 - _globals['_OVERVIEWSTATS']._serialized_end=1317 - _globals['_ERRORCODECOUNT']._serialized_start=1319 - _globals['_ERRORCODECOUNT']._serialized_end=1388 - _globals['_CONNECTORSTAT']._serialized_start=1391 - _globals['_CONNECTORSTAT']._serialized_end=1588 - _globals['_TIMESERIESBUCKET']._serialized_start=1591 - _globals['_TIMESERIESBUCKET']._serialized_end=2047 - _globals['_AGENTKITANALYTICSSERVICE']._serialized_start=2050 - _globals['_AGENTKITANALYTICSSERVICE']._serialized_end=2553 -# @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/agentkit_logs/agentkit_analytics_pb2.pyi b/scalekit/v1/agentkit_logs/agentkit_analytics_pb2.pyi deleted file mode 100644 index 363b77b..0000000 --- a/scalekit/v1/agentkit_logs/agentkit_analytics_pb2.pyi +++ /dev/null @@ -1,91 +0,0 @@ -from buf.validate import validate_pb2 as _validate_pb2 -from google.api import annotations_pb2 as _annotations_pb2 -from google.api import field_behavior_pb2 as _field_behavior_pb2 -from google.api import visibility_pb2 as _visibility_pb2 -from google.protobuf import timestamp_pb2 as _timestamp_pb2 -from protoc_gen_openapiv2.options import annotations_pb2 as _annotations_pb2_1 -from scalekit.v1.options import options_pb2 as _options_pb2 -from google.protobuf.internal import containers as _containers -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union - -DESCRIPTOR: _descriptor.FileDescriptor - -class GetOverviewStatsRequest(_message.Message): - __slots__ = ("start_time", "end_time", "provider", "status", "error_code", "connection_name") - START_TIME_FIELD_NUMBER: _ClassVar[int] - END_TIME_FIELD_NUMBER: _ClassVar[int] - PROVIDER_FIELD_NUMBER: _ClassVar[int] - STATUS_FIELD_NUMBER: _ClassVar[int] - ERROR_CODE_FIELD_NUMBER: _ClassVar[int] - CONNECTION_NAME_FIELD_NUMBER: _ClassVar[int] - start_time: _timestamp_pb2.Timestamp - end_time: _timestamp_pb2.Timestamp - provider: _containers.RepeatedScalarFieldContainer[str] - status: _containers.RepeatedScalarFieldContainer[str] - error_code: _containers.RepeatedScalarFieldContainer[str] - connection_name: str - def __init__(self, start_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., end_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., provider: _Optional[_Iterable[str]] = ..., status: _Optional[_Iterable[str]] = ..., error_code: _Optional[_Iterable[str]] = ..., connection_name: _Optional[str] = ...) -> None: ... - -class OverviewStats(_message.Message): - __slots__ = ("total", "success", "errors", "provider_errors", "platform_errors", "top_error_codes", "connector_breakdown", "time_series") - TOTAL_FIELD_NUMBER: _ClassVar[int] - SUCCESS_FIELD_NUMBER: _ClassVar[int] - ERRORS_FIELD_NUMBER: _ClassVar[int] - PROVIDER_ERRORS_FIELD_NUMBER: _ClassVar[int] - PLATFORM_ERRORS_FIELD_NUMBER: _ClassVar[int] - TOP_ERROR_CODES_FIELD_NUMBER: _ClassVar[int] - CONNECTOR_BREAKDOWN_FIELD_NUMBER: _ClassVar[int] - TIME_SERIES_FIELD_NUMBER: _ClassVar[int] - total: int - success: int - errors: int - provider_errors: int - platform_errors: int - top_error_codes: _containers.RepeatedCompositeFieldContainer[ErrorCodeCount] - connector_breakdown: _containers.RepeatedCompositeFieldContainer[ConnectorStat] - time_series: _containers.RepeatedCompositeFieldContainer[TimeSeriesBucket] - def __init__(self, total: _Optional[int] = ..., success: _Optional[int] = ..., errors: _Optional[int] = ..., provider_errors: _Optional[int] = ..., platform_errors: _Optional[int] = ..., top_error_codes: _Optional[_Iterable[_Union[ErrorCodeCount, _Mapping]]] = ..., connector_breakdown: _Optional[_Iterable[_Union[ConnectorStat, _Mapping]]] = ..., time_series: _Optional[_Iterable[_Union[TimeSeriesBucket, _Mapping]]] = ...) -> None: ... - -class ErrorCodeCount(_message.Message): - __slots__ = ("error_code", "count") - ERROR_CODE_FIELD_NUMBER: _ClassVar[int] - COUNT_FIELD_NUMBER: _ClassVar[int] - error_code: str - count: int - def __init__(self, error_code: _Optional[str] = ..., count: _Optional[int] = ...) -> None: ... - -class ConnectorStat(_message.Message): - __slots__ = ("provider", "total", "success", "errors", "provider_errors", "platform_errors") - PROVIDER_FIELD_NUMBER: _ClassVar[int] - TOTAL_FIELD_NUMBER: _ClassVar[int] - SUCCESS_FIELD_NUMBER: _ClassVar[int] - ERRORS_FIELD_NUMBER: _ClassVar[int] - PROVIDER_ERRORS_FIELD_NUMBER: _ClassVar[int] - PLATFORM_ERRORS_FIELD_NUMBER: _ClassVar[int] - provider: str - total: int - success: int - errors: int - provider_errors: int - platform_errors: int - def __init__(self, provider: _Optional[str] = ..., total: _Optional[int] = ..., success: _Optional[int] = ..., errors: _Optional[int] = ..., provider_errors: _Optional[int] = ..., platform_errors: _Optional[int] = ...) -> None: ... - -class TimeSeriesBucket(_message.Message): - __slots__ = ("bucket", "total", "success", "errors", "bucket_duration_seconds", "provider_errors", "platform_errors") - BUCKET_FIELD_NUMBER: _ClassVar[int] - TOTAL_FIELD_NUMBER: _ClassVar[int] - SUCCESS_FIELD_NUMBER: _ClassVar[int] - ERRORS_FIELD_NUMBER: _ClassVar[int] - BUCKET_DURATION_SECONDS_FIELD_NUMBER: _ClassVar[int] - PROVIDER_ERRORS_FIELD_NUMBER: _ClassVar[int] - PLATFORM_ERRORS_FIELD_NUMBER: _ClassVar[int] - bucket: _timestamp_pb2.Timestamp - total: int - success: int - errors: int - bucket_duration_seconds: int - provider_errors: int - platform_errors: int - def __init__(self, bucket: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., total: _Optional[int] = ..., success: _Optional[int] = ..., errors: _Optional[int] = ..., bucket_duration_seconds: _Optional[int] = ..., provider_errors: _Optional[int] = ..., platform_errors: _Optional[int] = ...) -> None: ... diff --git a/scalekit/v1/agentkit_logs/agentkit_analytics_pb2_grpc.py b/scalekit/v1/agentkit_logs/agentkit_analytics_pb2_grpc.py deleted file mode 100644 index 7119e59..0000000 --- a/scalekit/v1/agentkit_logs/agentkit_analytics_pb2_grpc.py +++ /dev/null @@ -1,66 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc - -from scalekit.v1.agentkit_logs import agentkit_analytics_pb2 as scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__analytics__pb2 - - -class AgentkitAnalyticsServiceStub(object): - """Missing associated documentation comment in .proto file.""" - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.GetOverviewStats = channel.unary_unary( - '/scalekit.v1.agentkit_logs.AgentkitAnalyticsService/GetOverviewStats', - request_serializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__analytics__pb2.GetOverviewStatsRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__analytics__pb2.OverviewStats.FromString, - ) - - -class AgentkitAnalyticsServiceServicer(object): - """Missing associated documentation comment in .proto file.""" - - def GetOverviewStats(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - -def add_AgentkitAnalyticsServiceServicer_to_server(servicer, server): - rpc_method_handlers = { - 'GetOverviewStats': grpc.unary_unary_rpc_method_handler( - servicer.GetOverviewStats, - request_deserializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__analytics__pb2.GetOverviewStatsRequest.FromString, - response_serializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__analytics__pb2.OverviewStats.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - 'scalekit.v1.agentkit_logs.AgentkitAnalyticsService', rpc_method_handlers) - server.add_generic_rpc_handlers((generic_handler,)) - - - # This class is part of an EXPERIMENTAL API. -class AgentkitAnalyticsService(object): - """Missing associated documentation comment in .proto file.""" - - @staticmethod - def GetOverviewStats(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.agentkit_logs.AgentkitAnalyticsService/GetOverviewStats', - scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__analytics__pb2.GetOverviewStatsRequest.SerializeToString, - scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__analytics__pb2.OverviewStats.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/agentkit_logs/agentkit_logs_pb2.py b/scalekit/v1/agentkit_logs/agentkit_logs_pb2.py deleted file mode 100644 index 67c4f5e..0000000 --- a/scalekit/v1/agentkit_logs/agentkit_logs_pb2.py +++ /dev/null @@ -1,80 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: scalekit/v1/agentkit_logs/agentkit_logs.proto -# Protobuf Python Version: 5.26.1 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 -from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 -from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2 -from google.api import visibility_pb2 as google_dot_api_dot_visibility__pb2 -from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -from protoc_gen_openapiv2.options import annotations_pb2 as protoc__gen__openapiv2_dot_options_dot_annotations__pb2 -from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n-scalekit/v1/agentkit_logs/agentkit_logs.proto\x12\x19scalekit.v1.agentkit_logs\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\xc6\t\n\x17ListToolCallLogsRequest\x12\x39\n\nstart_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartTime\x12\x35\n\x08\x65nd_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x65ndTime\x12g\n\x06status\x18\x03 \x03(\tBO\x92\x41L2JFilter by status. Allowed values: success, provider_error, platform_error.R\x06status\x12O\n\x08provider\x18\x04 \x03(\tB3\x92\x41\x30\x32.Filter by connector provider slug, e.g. gmail.R\x08provider\x12Z\n\rconnection_id\x18\x05 \x01(\tB0\x92\x41-2\x18\x46ilter by connection ID.J\x11\"conn_1234567890\"H\x00R\x0c\x63onnectionId\x88\x01\x01\x12l\n\x14\x63onnected_account_id\x18\x06 \x01(\tB5\x92\x41\x32\x32\x1f\x46ilter by connected account ID.J\x0f\"ca_1234567890\"H\x01R\x12\x63onnectedAccountId\x88\x01\x01\x12{\n\nidentifier\x18\x07 \x01(\tBV\x92\x41K2IFilter by connected account identifier (customer-defined end-user label).\xbaH\x05r\x03\x18\xff\x01H\x02R\nidentifier\x88\x01\x01\x12\x86\x01\n\x0c\x61gent_run_id\x18\x08 \x01(\tB_\x92\x41T2DFilter by agent run ID to see all tool calls for a single agent run.J\x0c\"run_abc123\"\xbaH\x05r\x03\x18\xff\x01H\x03R\nagentRunId\x88\x01\x01\x12\\\n\tpage_size\x18\t \x01(\rB?\x92\x41<2:Maximum number of records to return (1\xe2\x80\x93\x31\x30\x30, default 20).R\x08pageSize\x12i\n\npage_token\x18\n \x01(\tBJ\x92\x41G2EOpaque pagination token returned by a previous ListToolCallLogs call.R\tpageToken\x12\x86\x01\n\x0f\x63onnection_name\x18\x0b \x01(\tBX\x92\x41M2=Filter by connection name (partial match). e.g. \'gmail-prod\'.J\x0c\"gmail-prod\"\xbaH\x05r\x03\x18\xff\x01H\x04R\x0e\x63onnectionName\x88\x01\x01\x42\x10\n\x0e_connection_idB\x17\n\x15_connected_account_idB\r\n\x0b_identifierB\x0f\n\r_agent_run_idB\x12\n\x10_connection_name\"\xb4\x02\n\x18ListToolCallLogsResponse\x12L\n\x0etool_call_logs\x18\x01 \x03(\x0b\x32&.scalekit.v1.agentkit_logs.ToolCallLogR\x0ctoolCallLogs\x12&\n\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x03 \x01(\x03R\ttotalSize\x12\x82\x01\n\x0fprev_page_token\x18\x04 \x01(\tBZ\x92\x41W2UPagination token to fetch the previous page of results. Empty when on the first page.R\rprevPageToken\"z\n\x15GetToolCallLogRequest\x12\x61\n\x0c\x65xecution_id\x18\x01 \x01(\tB>\x92\x41/2\x1e\x45xecution ID of the tool call.J\r\"exec_abc123\"\xe0\x41\x02\xbaH\x06r\x04\x10\x01\x18@R\x0b\x65xecutionId\"\xf8\x07\n\x0bToolCallLog\x12\x46\n\x02id\x18\x01 \x01(\tB6\x92\x41\x33\x32\x1fUnique tool call log record ID.J\x10\"tcl_1234567890\"R\x02id\x12%\n\x0e\x65nvironment_id\x18\x02 \x01(\tR\renvironmentId\x12O\n\x0c\x65xecution_id\x18\x03 \x01(\tB,\x92\x41)2\'Unique execution ID for this tool call.R\x0b\x65xecutionId\x12%\n\x0c\x61gent_run_id\x18\x04 \x01(\tH\x00R\nagentRunId\x88\x01\x01\x12\x1b\n\ttool_name\x18\x05 \x01(\tR\x08toolName\x12\x1a\n\x08provider\x18\x06 \x01(\tR\x08provider\x12\x30\n\x14\x63onnected_account_id\x18\x07 \x01(\tR\x12\x63onnectedAccountId\x12#\n\rconnection_id\x18\x08 \x01(\tR\x0c\x63onnectionId\x12\'\n\x0f\x63onnection_name\x18\t \x01(\tR\x0e\x63onnectionName\x12\x1e\n\nidentifier\x18\n \x01(\tR\nidentifier\x12\x17\n\x07user_id\x18\x0b \x01(\tR\x06userId\x12,\n\x0forganization_id\x18\x0c \x01(\tH\x01R\x0eorganizationId\x88\x01\x01\x12;\n\x06source\x18\r \x01(\tB#\x92\x41 2\x1eInvocation source: API or MCP.R\x06source\x12Q\n\x06status\x18\x0e \x01(\tB9\x92\x41\x36\x32\x34Outcome: success, provider_error, or platform_error.R\x06status\x12\x1d\n\nerror_tier\x18\x0f \x01(\tR\terrorTier\x12\x1d\n\nerror_code\x18\x10 \x01(\tR\terrorCode\x12#\n\rerror_message\x18\x11 \x01(\tR\x0c\x65rrorMessage\x12\x1f\n\x0b\x64uration_ms\x18\x12 \x01(\x03R\ndurationMs\x12\x39\n\nstarted_at\x18\x13 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartedAt\x12]\n\x0cworkspace_id\x18\x14 \x01(\tB5\x92\x41\x32\x32\x1eWorkspace this log belongs to.J\x10\"wks_1234567890\"H\x02R\x0bworkspaceId\x88\x01\x01\x42\x0f\n\r_agent_run_idB\x12\n\x10_organization_idB\x0f\n\r_workspace_id2\xd7\x06\n\x13\x41gentkitLogsService\x12\xba\x03\n\x10ListToolCallLogs\x12\x32.scalekit.v1.agentkit_logs.ListToolCallLogsRequest\x1a\x33.scalekit.v1.agentkit_logs.ListToolCallLogsResponse\"\xbc\x02\x92\x41\xfc\x01\n\rAgentKit Logs\x12\x13List tool call logs\x1a\x80\x01Returns paginated tool call execution records for the environment. Filter by time range, status, provider, or connected account.J.\n\x03\x32\x30\x30\x12\'\n%Tool call logs retrieved successfullyJ#\n\x03\x34\x30\x30\x12\x1c\n\x1aInvalid request parameters\x82\xb5\x18\x02\x18T\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\x12\x1f/api/v1/agentkit/tool_call_logs\x12\xee\x02\n\x0eGetToolCallLog\x12\x30.scalekit.v1.agentkit_logs.GetToolCallLogRequest\x1a&.scalekit.v1.agentkit_logs.ToolCallLog\"\x81\x02\x92\x41\xb2\x01\n\rAgentKit Logs\x12\x13Get a tool call log\x1a None: ... - -class ListToolCallLogsResponse(_message.Message): - __slots__ = ("tool_call_logs", "next_page_token", "total_size", "prev_page_token") - TOOL_CALL_LOGS_FIELD_NUMBER: _ClassVar[int] - NEXT_PAGE_TOKEN_FIELD_NUMBER: _ClassVar[int] - TOTAL_SIZE_FIELD_NUMBER: _ClassVar[int] - PREV_PAGE_TOKEN_FIELD_NUMBER: _ClassVar[int] - tool_call_logs: _containers.RepeatedCompositeFieldContainer[ToolCallLog] - next_page_token: str - total_size: int - prev_page_token: str - def __init__(self, tool_call_logs: _Optional[_Iterable[_Union[ToolCallLog, _Mapping]]] = ..., next_page_token: _Optional[str] = ..., total_size: _Optional[int] = ..., prev_page_token: _Optional[str] = ...) -> None: ... - -class GetToolCallLogRequest(_message.Message): - __slots__ = ("execution_id",) - EXECUTION_ID_FIELD_NUMBER: _ClassVar[int] - execution_id: str - def __init__(self, execution_id: _Optional[str] = ...) -> None: ... - -class ToolCallLog(_message.Message): - __slots__ = ("id", "environment_id", "execution_id", "agent_run_id", "tool_name", "provider", "connected_account_id", "connection_id", "connection_name", "identifier", "user_id", "organization_id", "source", "status", "error_tier", "error_code", "error_message", "duration_ms", "started_at", "workspace_id") - ID_FIELD_NUMBER: _ClassVar[int] - ENVIRONMENT_ID_FIELD_NUMBER: _ClassVar[int] - EXECUTION_ID_FIELD_NUMBER: _ClassVar[int] - AGENT_RUN_ID_FIELD_NUMBER: _ClassVar[int] - TOOL_NAME_FIELD_NUMBER: _ClassVar[int] - PROVIDER_FIELD_NUMBER: _ClassVar[int] - CONNECTED_ACCOUNT_ID_FIELD_NUMBER: _ClassVar[int] - CONNECTION_ID_FIELD_NUMBER: _ClassVar[int] - CONNECTION_NAME_FIELD_NUMBER: _ClassVar[int] - IDENTIFIER_FIELD_NUMBER: _ClassVar[int] - USER_ID_FIELD_NUMBER: _ClassVar[int] - ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] - SOURCE_FIELD_NUMBER: _ClassVar[int] - STATUS_FIELD_NUMBER: _ClassVar[int] - ERROR_TIER_FIELD_NUMBER: _ClassVar[int] - ERROR_CODE_FIELD_NUMBER: _ClassVar[int] - ERROR_MESSAGE_FIELD_NUMBER: _ClassVar[int] - DURATION_MS_FIELD_NUMBER: _ClassVar[int] - STARTED_AT_FIELD_NUMBER: _ClassVar[int] - WORKSPACE_ID_FIELD_NUMBER: _ClassVar[int] - id: str - environment_id: str - execution_id: str - agent_run_id: str - tool_name: str - provider: str - connected_account_id: str - connection_id: str - connection_name: str - identifier: str - user_id: str - organization_id: str - source: str - status: str - error_tier: str - error_code: str - error_message: str - duration_ms: int - started_at: _timestamp_pb2.Timestamp - workspace_id: str - def __init__(self, id: _Optional[str] = ..., environment_id: _Optional[str] = ..., execution_id: _Optional[str] = ..., agent_run_id: _Optional[str] = ..., tool_name: _Optional[str] = ..., provider: _Optional[str] = ..., connected_account_id: _Optional[str] = ..., connection_id: _Optional[str] = ..., connection_name: _Optional[str] = ..., identifier: _Optional[str] = ..., user_id: _Optional[str] = ..., organization_id: _Optional[str] = ..., source: _Optional[str] = ..., status: _Optional[str] = ..., error_tier: _Optional[str] = ..., error_code: _Optional[str] = ..., error_message: _Optional[str] = ..., duration_ms: _Optional[int] = ..., started_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., workspace_id: _Optional[str] = ...) -> None: ... diff --git a/scalekit/v1/agentkit_logs/agentkit_logs_pb2_grpc.py b/scalekit/v1/agentkit_logs/agentkit_logs_pb2_grpc.py deleted file mode 100644 index 384ee32..0000000 --- a/scalekit/v1/agentkit_logs/agentkit_logs_pb2_grpc.py +++ /dev/null @@ -1,99 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc - -from scalekit.v1.agentkit_logs import agentkit_logs_pb2 as scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2 - - -class AgentkitLogsServiceStub(object): - """Missing associated documentation comment in .proto file.""" - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.ListToolCallLogs = channel.unary_unary( - '/scalekit.v1.agentkit_logs.AgentkitLogsService/ListToolCallLogs', - request_serializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.ListToolCallLogsRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.ListToolCallLogsResponse.FromString, - ) - self.GetToolCallLog = channel.unary_unary( - '/scalekit.v1.agentkit_logs.AgentkitLogsService/GetToolCallLog', - request_serializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.GetToolCallLogRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.ToolCallLog.FromString, - ) - - -class AgentkitLogsServiceServicer(object): - """Missing associated documentation comment in .proto file.""" - - def ListToolCallLogs(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def GetToolCallLog(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - -def add_AgentkitLogsServiceServicer_to_server(servicer, server): - rpc_method_handlers = { - 'ListToolCallLogs': grpc.unary_unary_rpc_method_handler( - servicer.ListToolCallLogs, - request_deserializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.ListToolCallLogsRequest.FromString, - response_serializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.ListToolCallLogsResponse.SerializeToString, - ), - 'GetToolCallLog': grpc.unary_unary_rpc_method_handler( - servicer.GetToolCallLog, - request_deserializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.GetToolCallLogRequest.FromString, - response_serializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.ToolCallLog.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - 'scalekit.v1.agentkit_logs.AgentkitLogsService', rpc_method_handlers) - server.add_generic_rpc_handlers((generic_handler,)) - - - # This class is part of an EXPERIMENTAL API. -class AgentkitLogsService(object): - """Missing associated documentation comment in .proto file.""" - - @staticmethod - def ListToolCallLogs(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.agentkit_logs.AgentkitLogsService/ListToolCallLogs', - scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.ListToolCallLogsRequest.SerializeToString, - scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.ListToolCallLogsResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - @staticmethod - def GetToolCallLog(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.agentkit_logs.AgentkitLogsService/GetToolCallLog', - scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.GetToolCallLogRequest.SerializeToString, - scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.ToolCallLog.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/auditlogs/auditlogs_pb2.py b/scalekit/v1/auditlogs/auditlogs_pb2.py index 58d34a5..9417e8c 100644 --- a/scalekit/v1/auditlogs/auditlogs_pb2.py +++ b/scalekit/v1/auditlogs/auditlogs_pb2.py @@ -14,13 +14,12 @@ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 -from google.api import visibility_pb2 as google_dot_api_dot_visibility__pb2 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 from protoc_gen_openapiv2.options import annotations_pb2 as protoc__gen__openapiv2_dot_options_dot_annotations__pb2 from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%scalekit/v1/auditlogs/auditlogs.proto\x12\x15scalekit.v1.auditlogs\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\xb0\x03\n\x12ListAuthLogRequest\x12\x1b\n\tpage_size\x18\x01 \x01(\rR\x08pageSize\x12\x1d\n\npage_token\x18\x02 \x01(\tR\tpageToken\x12\x14\n\x05\x65mail\x18\x03 \x01(\tR\x05\x65mail\x12\x16\n\x06status\x18\x04 \x03(\tR\x06status\x12\x39\n\nstart_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartTime\x12\x35\n\x08\x65nd_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x65ndTime\x12\x1f\n\x0bresource_id\x18\x07 \x01(\tR\nresourceId\x12@\n\x1c\x63onnected_account_identifier\x18\x08 \x01(\tR\x1a\x63onnectedAccountIdentifier\x12[\n\tclient_id\x18\t \x01(\tB>\x92\x41;2\'Filter authentication logs by client IDJ\x10\"skc_1234567890\"R\x08\x63lientId\"\xcf\x01\n\x13ListAuthLogResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12&\n\x0fprev_page_token\x18\x02 \x01(\tR\rprevPageToken\x12\x1d\n\ntotal_size\x18\x03 \x01(\rR\ttotalSize\x12I\n\x0c\x61uthRequests\x18\x04 \x03(\x0b\x32%.scalekit.v1.auditlogs.AuthLogRequestR\x0c\x61uthRequests\"\xc5\x07\n\x0e\x41uthLogRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12%\n\x0e\x65nvironment_id\x18\x02 \x01(\tR\renvironmentId\x12#\n\rconnection_id\x18\x03 \x01(\tR\x0c\x63onnectionId\x12&\n\x0f\x61uth_request_id\x18\x04 \x01(\tR\rauthRequestId\x12\x14\n\x05\x65mail\x18\x05 \x01(\tR\x05\x65mail\x12\'\n\x0f\x63onnection_type\x18\x06 \x01(\tR\x0e\x63onnectionType\x12/\n\x13\x63onnection_provider\x18\x07 \x01(\tR\x12\x63onnectionProvider\x12\x16\n\x06status\x18\x08 \x01(\tR\x06status\x12\x38\n\ttimestamp\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ttimestamp\x12W\n\x12\x63onnection_details\x18\n \x03(\x0b\x32(.scalekit.v1.auditlogs.ConnectionDetailsR\x11\x63onnectionDetails\x12\x1a\n\x08workflow\x18\x0b \x01(\tR\x08workflow\x12\x1f\n\x0bresource_id\x18\x0c \x01(\tR\nresourceId\x12#\n\rresource_name\x18\r \x01(\tR\x0cresourceName\x12#\n\rresource_type\x18\x0e \x01(\tR\x0cresourceType\x12@\n\x1c\x63onnected_account_identifier\x18\x0f \x01(\tR\x1a\x63onnectedAccountIdentifier\x12}\n\tclient_id\x18\x10 \x01(\tB`\x92\x41]2IUnique identifier of the client associated with this authentication eventJ\x10\"skc_1234567890\"R\x08\x63lientId\x12K\n\x0b\x63lient_name\x18\x11 \x01(\tB*\x92\x41\'2\x1a\x44isplay name of the clientJ\t\"Default\"R\nclientName\x12\x66\n\x0b\x63lient_type\x18\x12 \x01(\tBE\x92\x41\x42\x32\x39Type of the client application (e.g., ENV, NTV, SPA, M2M)J\x05\"ENV\"R\nclientType\"\xbb\x01\n\x11\x43onnectionDetails\x12#\n\rconnection_id\x18\x01 \x01(\tR\x0c\x63onnectionId\x12\'\n\x0forganization_id\x18\x02 \x01(\tR\x0eorganizationId\x12\'\n\x0f\x63onnection_type\x18\x03 \x01(\tR\x0e\x63onnectionType\x12/\n\x13\x63onnection_provider\x18\x04 \x01(\tR\x12\x63onnectionProvider2\xc1\x01\n\x10\x41uditLogsService\x12\xac\x01\n\x10ListAuthRequests\x12).scalekit.v1.auditlogs.ListAuthLogRequest\x1a*.scalekit.v1.auditlogs.ListAuthLogResponse\"A\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02&\x12$/api/v1/logs/authentication/requestsB5Z3github.com/scalekit-inc/scalekit/pkg/grpc/auditlogsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%scalekit/v1/auditlogs/auditlogs.proto\x12\x15scalekit.v1.auditlogs\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\xb0\x03\n\x12ListAuthLogRequest\x12\x1b\n\tpage_size\x18\x01 \x01(\rR\x08pageSize\x12\x1d\n\npage_token\x18\x02 \x01(\tR\tpageToken\x12\x14\n\x05\x65mail\x18\x03 \x01(\tR\x05\x65mail\x12\x16\n\x06status\x18\x04 \x03(\tR\x06status\x12\x39\n\nstart_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartTime\x12\x35\n\x08\x65nd_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x65ndTime\x12\x1f\n\x0bresource_id\x18\x07 \x01(\tR\nresourceId\x12@\n\x1c\x63onnected_account_identifier\x18\x08 \x01(\tR\x1a\x63onnectedAccountIdentifier\x12[\n\tclient_id\x18\t \x01(\tB>\x92\x41;2\'Filter authentication logs by client IDJ\x10\"skc_1234567890\"R\x08\x63lientId\"\xcf\x01\n\x13ListAuthLogResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12&\n\x0fprev_page_token\x18\x02 \x01(\tR\rprevPageToken\x12\x1d\n\ntotal_size\x18\x03 \x01(\rR\ttotalSize\x12I\n\x0c\x61uthRequests\x18\x04 \x03(\x0b\x32%.scalekit.v1.auditlogs.AuthLogRequestR\x0c\x61uthRequests\"\xc5\x07\n\x0e\x41uthLogRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12%\n\x0e\x65nvironment_id\x18\x02 \x01(\tR\renvironmentId\x12#\n\rconnection_id\x18\x03 \x01(\tR\x0c\x63onnectionId\x12&\n\x0f\x61uth_request_id\x18\x04 \x01(\tR\rauthRequestId\x12\x14\n\x05\x65mail\x18\x05 \x01(\tR\x05\x65mail\x12\'\n\x0f\x63onnection_type\x18\x06 \x01(\tR\x0e\x63onnectionType\x12/\n\x13\x63onnection_provider\x18\x07 \x01(\tR\x12\x63onnectionProvider\x12\x16\n\x06status\x18\x08 \x01(\tR\x06status\x12\x38\n\ttimestamp\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ttimestamp\x12W\n\x12\x63onnection_details\x18\n \x03(\x0b\x32(.scalekit.v1.auditlogs.ConnectionDetailsR\x11\x63onnectionDetails\x12\x1a\n\x08workflow\x18\x0b \x01(\tR\x08workflow\x12\x1f\n\x0bresource_id\x18\x0c \x01(\tR\nresourceId\x12#\n\rresource_name\x18\r \x01(\tR\x0cresourceName\x12#\n\rresource_type\x18\x0e \x01(\tR\x0cresourceType\x12@\n\x1c\x63onnected_account_identifier\x18\x0f \x01(\tR\x1a\x63onnectedAccountIdentifier\x12}\n\tclient_id\x18\x10 \x01(\tB`\x92\x41]2IUnique identifier of the client associated with this authentication eventJ\x10\"skc_1234567890\"R\x08\x63lientId\x12K\n\x0b\x63lient_name\x18\x11 \x01(\tB*\x92\x41\'2\x1a\x44isplay name of the clientJ\t\"Default\"R\nclientName\x12\x66\n\x0b\x63lient_type\x18\x12 \x01(\tBE\x92\x41\x42\x32\x39Type of the client application (e.g., WEB, NTV, SPA, M2M)J\x05\"WEB\"R\nclientType\"\xbb\x01\n\x11\x43onnectionDetails\x12#\n\rconnection_id\x18\x01 \x01(\tR\x0c\x63onnectionId\x12\'\n\x0forganization_id\x18\x02 \x01(\tR\x0eorganizationId\x12\'\n\x0f\x63onnection_type\x18\x03 \x01(\tR\x0e\x63onnectionType\x12/\n\x13\x63onnection_provider\x18\x04 \x01(\tR\x12\x63onnectionProvider2\xb2\x01\n\x10\x41uditLogsService\x12\x9d\x01\n\x10ListAuthRequests\x12).scalekit.v1.auditlogs.ListAuthLogRequest\x1a*.scalekit.v1.auditlogs.ListAuthLogResponse\"2\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02&\x12$/api/v1/logs/authentication/requestsB5Z3github.com/scalekit-inc/scalekit/pkg/grpc/auditlogsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -35,17 +34,17 @@ _globals['_AUTHLOGREQUEST'].fields_by_name['client_name']._loaded_options = None _globals['_AUTHLOGREQUEST'].fields_by_name['client_name']._serialized_options = b'\222A\'2\032Display name of the clientJ\t\"Default\"' _globals['_AUTHLOGREQUEST'].fields_by_name['client_type']._loaded_options = None - _globals['_AUTHLOGREQUEST'].fields_by_name['client_type']._serialized_options = b'\222AB29Type of the client application (e.g., ENV, NTV, SPA, M2M)J\005\"ENV\"' + _globals['_AUTHLOGREQUEST'].fields_by_name['client_type']._serialized_options = b'\222AB29Type of the client application (e.g., WEB, NTV, SPA, M2M)J\005\"WEB\"' _globals['_AUDITLOGSSERVICE'].methods_by_name['ListAuthRequests']._loaded_options = None - _globals['_AUDITLOGSSERVICE'].methods_by_name['ListAuthRequests']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002&\022$/api/v1/logs/authentication/requests' - _globals['_LISTAUTHLOGREQUEST']._serialized_start=269 - _globals['_LISTAUTHLOGREQUEST']._serialized_end=701 - _globals['_LISTAUTHLOGRESPONSE']._serialized_start=704 - _globals['_LISTAUTHLOGRESPONSE']._serialized_end=911 - _globals['_AUTHLOGREQUEST']._serialized_start=914 - _globals['_AUTHLOGREQUEST']._serialized_end=1879 - _globals['_CONNECTIONDETAILS']._serialized_start=1882 - _globals['_CONNECTIONDETAILS']._serialized_end=2069 - _globals['_AUDITLOGSSERVICE']._serialized_start=2072 - _globals['_AUDITLOGSSERVICE']._serialized_end=2265 + _globals['_AUDITLOGSSERVICE'].methods_by_name['ListAuthRequests']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002&\022$/api/v1/logs/authentication/requests' + _globals['_LISTAUTHLOGREQUEST']._serialized_start=240 + _globals['_LISTAUTHLOGREQUEST']._serialized_end=672 + _globals['_LISTAUTHLOGRESPONSE']._serialized_start=675 + _globals['_LISTAUTHLOGRESPONSE']._serialized_end=882 + _globals['_AUTHLOGREQUEST']._serialized_start=885 + _globals['_AUTHLOGREQUEST']._serialized_end=1850 + _globals['_CONNECTIONDETAILS']._serialized_start=1853 + _globals['_CONNECTIONDETAILS']._serialized_end=2040 + _globals['_AUDITLOGSSERVICE']._serialized_start=2043 + _globals['_AUDITLOGSSERVICE']._serialized_end=2221 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/auditlogs/auditlogs_pb2.pyi b/scalekit/v1/auditlogs/auditlogs_pb2.pyi index 184d0ed..ad034a0 100644 --- a/scalekit/v1/auditlogs/auditlogs_pb2.pyi +++ b/scalekit/v1/auditlogs/auditlogs_pb2.pyi @@ -1,6 +1,5 @@ from buf.validate import validate_pb2 as _validate_pb2 from google.api import annotations_pb2 as _annotations_pb2 -from google.api import visibility_pb2 as _visibility_pb2 from google.protobuf import timestamp_pb2 as _timestamp_pb2 from protoc_gen_openapiv2.options import annotations_pb2 as _annotations_pb2_1 from scalekit.v1.options import options_pb2 as _options_pb2 diff --git a/scalekit/v1/auth/auth_pb2.py b/scalekit/v1/auth/auth_pb2.py index f7dfa04..17fef01 100644 --- a/scalekit/v1/auth/auth_pb2.py +++ b/scalekit/v1/auth/auth_pb2.py @@ -25,7 +25,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bscalekit/v1/auth/auth.proto\x12\x10scalekit.v1.auth\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a)scalekit/v1/connections/connections.proto\x1a!scalekit/v1/options/options.proto\"0\n\x16ListAuthMethodsRequest\x12\x16\n\x06intent\x18\x01 \x01(\tR\x06intent\"Z\n\x17ListAuthMethodsResponse\x12?\n\x0c\x61uth_methods\x18\x01 \x03(\x0b\x32\x1c.scalekit.v1.auth.AuthMethodR\x0b\x61uthMethods\"\x89\t\n\nAuthMethod\x12}\n\rconnection_id\x18\x01 \x01(\tBX\x92\x41L22Unique identifier for the connection to be toggledJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\x12P\n\x0f\x63onnection_type\x18\x02 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeR\x0e\x63onnectionType\x12\x1a\n\x08provider\x18\x03 \x01(\tR\x08provider\x12\x93\x01\n\x13\x61uth_initiation_uri\x18\x04 \x01(\tBc\x92\x41V2\x1eURI to initiate the connectionJ4\"https://sso.acmecorp.com/sso/v1/oidc/conn_123/init\"\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x11\x61uthInitiationUri\x12z\n\x11passwordless_type\x18\x05 \x01(\x0e\x32).scalekit.v1.connections.PasswordlessTypeB\x1d\x92\x41\x1a\x32\x11Passwordless typeJ\x05\"OTP\"H\x00R\x10passwordlessType\x88\x01\x01\x12W\n\x15\x63ode_challenge_length\x18\x06 \x01(\rB\x1e\x92\x41\x1b\x32\x16Length of the OTP codeJ\x01\x36H\x01R\x13\x63odeChallengeLength\x88\x01\x01\x12\xa3\x01\n!enable_webauthn_auto_registration\x18\x07 \x01(\x08\x42S\x92\x41P2GIndicates if WebAuthn auto-registration is enabled for this auth method:\x05\x66\x61lseH\x02R\x1e\x65nableWebauthnAutoRegistration\x88\x01\x01\x12\x63\n\x13show_passkey_button\x18\x08 \x01(\x08\x42.\x92\x41+2#Show passkey button on login screen:\x04trueH\x03R\x11showPasskeyButton\x88\x01\x01\x12\x83\x01\n!enable_webauthn_conditional_login\x18\t \x01(\x08\x42\x33\x92\x41\x30\x32(Allow autofill of passkeys in login page:\x04trueH\x04R\x1e\x65nableWebauthnConditionalLogin\x88\x01\x01\x42\x14\n\x12_passwordless_typeB\x18\n\x16_code_challenge_lengthB$\n\"_enable_webauthn_auto_registrationB\x16\n\x14_show_passkey_buttonB$\n\"_enable_webauthn_conditional_login\"m\n\x1a\x44iscoveryAuthMethodRequest\x12O\n\x11\x64iscovery_request\x18\x02 \x01(\x0b\x32\".scalekit.v1.auth.DiscoveryRequestR\x10\x64iscoveryRequest\"\xb3\x01\n\x10\x44iscoveryRequest\x12\x63\n\x05\x65mail\x18\x01 \x01(\tBM\x92\x41\x41\x32*user identifier like email or phone numberJ\x13\"john@acmecorp.com\"\xbaH\x06r\x04\x10\x03\x18\x64R\x05\x65mail\x12:\n\x06intent\x18\x02 \x01(\x0e\x32\x18.scalekit.v1.auth.IntentB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x06intent\"\\\n\x1b\x44iscoveryAuthMethodResponse\x12=\n\x0b\x61uth_method\x18\x01 \x01(\x0b\x32\x1c.scalekit.v1.auth.AuthMethodR\nauthMethod\"\x1e\n\x1cGetAuthCustomizationsRequest\"\x8f\x03\n\x0ePortalSettings\x12\x98\x01\n\x0f\x63ustom_branding\x18\x01 \x01(\x08\x42o\x92\x41l2dIndicates whether custom portal branding is enabled for this workspace based on billing subscriptionJ\x04trueR\x0e\x63ustomBranding\x12\xc5\x01\n\x17new_self_serve_sso_scim\x18\x02 \x01(\x08\x42\x89\x01\x92\x41\x85\x01\x32|Indicates whether the new self-serve SSO/SCIM flow should be shown in the hosted pages (rollout-driven, not billing-derived)J\x05\x66\x61lseH\x00R\x13newSelfServeSsoScim\x88\x01\x01\x42\x1a\n\x18_new_self_serve_sso_scim\"\xb2\x01\n\x1dGetAuthCustomizationsResponse\x12N\n\x16\x63ustomization_settings\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\x15\x63ustomizationSettings\x12\x41\n\x08settings\x18\x03 \x01(\x0b\x32 .scalekit.v1.auth.PortalSettingsB\x03\xe0\x41\x03R\x08settings\"N\n\x17GetAuthFeaturesResponse\x12\x33\n\x08\x66\x65\x61tures\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x08\x66\x65\x61tures\"U\n\x1cVerifyPasswordLessOtpRequest\x12\x35\n\x07otp_req\x18\x02 \x01(\x0b\x32\x1c.scalekit.v1.auth.OTPRequestR\x06otpReq\"\x1f\n\x1dVerifyPasswordLessOtpResponse\"i\n\nOTPRequest\x12[\n\x0e\x63ode_challenge\x18\x01 \x01(\tB4\x92\x41(2\x1cOTP sent to the user\'s emailJ\x08\"123456\"\xbaH\x06r\x04\x10\x05\x18\x06R\rcodeChallenge\"\xd4\x01\n\x1dListUserOrganizationsResponse\x12\x44\n\rorganizations\x18\x01 \x03(\x0b\x32\x1e.scalekit.v1.auth.OrganizationR\rorganizations\x12\x31\n\x04user\x18\x02 \x01(\x0b\x32\x1d.scalekit.v1.auth.UserDetailsR\x04user\x12:\n\x06intent\x18\x03 \x01(\x0e\x32\x18.scalekit.v1.auth.IntentB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x06intent\"\x8b\x04\n\x0cOrganization\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12+\n\x11membership_status\x18\x03 \x01(\tR\x10membershipStatus\x12=\n\x18invitation_inviter_email\x18\x04 \x01(\tH\x00R\x16invitationInviterEmail\x88\x01\x01\x12U\n\x16invitation_accepted_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\x14invitationAcceptedAt\x88\x01\x01\x12S\n\x15invitation_created_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02R\x13invitationCreatedAt\x88\x01\x01\x12S\n\x15invitation_expires_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x03R\x13invitationExpiresAt\x88\x01\x01\x42\x1b\n\x19_invitation_inviter_emailB\x19\n\x17_invitation_accepted_atB\x18\n\x16_invitation_created_atB\x18\n\x16_invitation_expires_at\"_\n\x0bUserDetails\x12\x14\n\x05\x65mail\x18\x01 \x01(\tR\x05\x65mail\x12\x1d\n\nfirst_name\x18\x02 \x01(\tR\tfirstName\x12\x1b\n\tlast_name\x18\x03 \x01(\tR\x08lastName\"\xc4\x01\n\x19SignupOrganizationRequest\x12+\n\x11organization_name\x18\x01 \x01(\tR\x10organizationName\x12\x1d\n\nfirst_name\x18\x02 \x01(\tR\tfirstName\x12\x1b\n\tlast_name\x18\x03 \x01(\tR\x08lastName\x12\x1b\n\tfull_name\x18\x04 \x01(\tR\x08\x66ullName\x12!\n\x0cphone_number\x18\x05 \x01(\tR\x0bphoneNumber\"r\n\x1aSignupOrganizationResponse\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12+\n\x11organization_name\x18\x02 \x01(\tR\x10organizationName\"\xd6\x02\n\x1dUpdateLoginUserDetailsRequest\x12v\n\rconnection_id\x18\x01 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\x12\x90\x01\n\x10login_request_id\x18\x02 \x01(\tBf\x92\x41]2BLogin Request ID that was shared as part of authorization initiateJ\x17\"lri_73415099636808061\"\xbaH\x03\xc8\x01\x01R\x0eloginRequestId\x12*\n\x04user\x18\x03 \x01(\x0b\x32\x16.scalekit.v1.auth.UserR\x04user\"\x95\x10\n\x04User\x12\x83\x01\n\x03sub\x18\x01 \x01(\tBq\x92\x41g2WSubject identifier for the user (typically a unique user ID from the identity provider)J\x0c\"1234567890\"\xbaH\x04r\x02\x10\x01R\x03sub\x12R\n\x05\x65mail\x18\x02 \x01(\tB<\x92\x41\x32\x32\x1cUser\'s primary email addressJ\x12\"user@example.com\"\xbaH\x04r\x02\x10\x01R\x05\x65mail\x12=\n\ngiven_name\x18\x03 \x01(\tB\x1e\x92\x41\x1b\x32\x11User\'s first nameJ\x06\"John\"R\tgivenName\x12=\n\x0b\x66\x61mily_name\x18\x04 \x01(\tB\x1c\x92\x41\x19\x32\x10User\'s last nameJ\x05\"Doe\"R\nfamilyName\x12\x88\x01\n\x0e\x65mail_verified\x18\x05 \x01(\x08\x42\x61\x92\x41^2VIndicates whether the user\'s email address has been verified by the identity provider.J\x04trueR\remailVerified\x12\x63\n\x0cphone_number\x18\x06 \x01(\tB@\x92\x41=2,User\'s primary phone number in E.164 format.J\r\"+1234567890\"R\x0bphoneNumber\x12\x95\x01\n\x15phone_number_verified\x18\x07 \x01(\x08\x42\x61\x92\x41^2UIndicates whether the user\'s phone number has been verified by the identity provider.J\x05\x66\x61lseR\x13phoneNumberVerified\x12\x42\n\x04name\x18\x08 \x01(\tB.\x92\x41+2\x1d\x46ull display name of the userJ\n\"John Doe\"R\x04name\x12\x62\n\x12preferred_username\x18\t \x01(\tB3\x92\x41\x30\x32#User\'s preferred username or handleJ\t\"johndoe\"R\x11preferredUsername\x12\x62\n\x07picture\x18\n \x01(\tBH\x92\x41\x45\x32!URL to the user\'s profile pictureJ \"https://example.com/avatar.jpg\"R\x07picture\x12X\n\x06gender\x18\x0b \x01(\tB@\x92\x41=23User\'s gender as reported by the identity provider.J\x06\"male\"R\x06gender\x12\x65\n\x06locale\x18\x0c \x01(\tBM\x92\x41J2?User\'s locale or language preference (IETF BCP 47 language tag)J\x07\"en-US\"R\x06locale\x12\x66\n\x06groups\x18\r \x03(\tBN\x92\x41K2/List of group names or IDs the user belongs to.J\x18[\"admins\", \"developers\"]R\x06groups\x12\xf2\x01\n\x11\x63ustom_attributes\x18\x0e \x01(\x0b\x32\x17.google.protobuf.StructB\xab\x01\x92\x41\xa7\x01\x32mCustom attributes for the user, represented as a key-value map. Used for additional identity provider claims.J6{\"department\": \"Engineering\", \"employee_id\": \"E12345\"}R\x10\x63ustomAttributes\x12\xb1\x01\n\x18organization_external_id\x18\x0f \x01(\tBr\x92\x41o2EIdentifier for the user\xe2\x80\x99s organization within the identity providerJ&\"132d085d-d89d-4a2e-95bb-49bde680d14f\"H\x00R\x16organizationExternalId\x88\x01\x01\x12S\n\x05roles\x18\x10 \x03(\tB=\x92\x41:2#List of roles assigned to the user.J\x13[\"admin\", \"editor\"]R\x05roles\x12\xbd\x01\n\x1aorganization_external_name\x18\x11 \x01(\tBz\x92\x41o2`Name of the organization the user is authenticating into. Used to display on the consent screen.J\x0b\"Acme Corp\"\xbaH\x05r\x03\x18\xc8\x01H\x01R\x18organizationExternalName\x88\x01\x01\x42\x1b\n\x19_organization_external_idB\x1d\n\x1b_organization_external_name\"\xb1\x02\n\x14GetAuthStateResponse\x12:\n\nauth_state\x18\x01 \x01(\x0e\x32\x1b.scalekit.v1.auth.AuthStateR\tauthState\x12\x31\n\x04user\x18\x02 \x01(\x0b\x32\x1d.scalekit.v1.auth.UserDetailsR\x04user\x12\xa9\x01\n\nlogin_hint\x18\x03 \x01(\tB\x89\x01\x92\x41\x85\x01\x32oLogin hint from the original authorize request. Typically an email address used to pre-fill the login UI input.J\x12\"user@example.com\"R\tloginHint\"\x8c\x01\n\x13GetAuthErrorRequest\x12u\n\x08\x65rror_id\x18\x01 \x01(\tBZ\x92\x41H2.Unique identifier for the authentication errorJ\x16\"err_1234567890abcdef\"\xbaH\x0cr\n\x10\x01\x18@:\x04\x65rr_R\x07\x65rrorId\"Y\n\x14GetAuthErrorResponse\x12\x14\n\x05\x65rror\x18\x01 \x01(\tR\x05\x65rror\x12+\n\x11\x65rror_description\x18\x02 \x01(\tR\x10\x65rrorDescription*:\n\x06Intent\x12\x16\n\x12INTENT_UNSPECIFIED\x10\x00\x12\x0b\n\x07sign_in\x10\x01\x12\x0b\n\x07sign_up\x10\x02*\xb4\x04\n\tAuthState\x12\x1a\n\x16\x41UTH_STATE_UNSPECIFIED\x10\x00\x12\x1e\n\x1a\x41UTHENTICATION_IN_PROGRESS\x10\x01\x12\x19\n\x15ORGANIZATION_SWITCHER\x10\x02\x12\x19\n\x15ORGANIZATION_SELECTED\x10\x03\x12\x17\n\x13ORGANIZATION_SIGNUP\x10\x04\x12 \n\x1cORGANIZATION_SWITCHER_SIGNUP\x10\x05\x12\x1c\n\x18OTP_VERIFICATION_PENDING\x10\x06\x12\x13\n\x0fMAGIC_LINK_SENT\x10\x07\x12&\n\"LINK_SENT_OTP_VERIFICATION_PENDING\x10\x08\x12\x10\n\x0cOTP_VERIFIED\x10\t\x12\x11\n\rLINK_VERIFIED\x10\n\x12\x15\n\x11SSO_AUTHENTICATED\x10\x0b\x12\x14\n\x10ORG_USER_CREATED\x10\x0c\x12\x1c\n\x18\x41UTHENTICATION_COMPLETED\x10\r\x12\x19\n\x15\x41UTHENTICATION_FAILED\x10\x0e\x12\x15\n\x11WEBAUTHN_VERIFIED\x10\x0f\x12 \n\x1cVERIFICATION_MAGIC_LINK_SENT\x10\x10\x12$\n VERIFICATION_MAGIC_LINK_OTP_SENT\x10\x11\x12\x19\n\x15VERIFICATION_OTP_SENT\x10\x12\x12\x1a\n\x16VERIFICATION_COMPLETED\x10\x13\x32\xa7\x10\n\x0b\x41uthService\x12\x98\x01\n\x0fListAuthMethods\x12(.scalekit.v1.auth.ListAuthMethodsRequest\x1a).scalekit.v1.auth.ListAuthMethodsResponse\"0\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\x12\x13/api/v1/authmethods\x12\xba\x01\n\x13\x44iscoveryAuthMethod\x12,.scalekit.v1.auth.DiscoveryAuthMethodRequest\x1a-.scalekit.v1.auth.DiscoveryAuthMethodResponse\"F\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02+\"\x16/api/v1/auth:discovery:\x11\x64iscovery_request\x12\xc0\x01\n\x15VerifyPasswordLessOtp\x12..scalekit.v1.auth.VerifyPasswordLessOtpRequest\x1a/.scalekit.v1.auth.VerifyPasswordLessOtpResponse\"F\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02+\" /api/v1/auth/passwordless:verify:\x07otp_req\x12\x83\x01\n\x12ResendPasswordless\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"=\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\"\" /api/v1/auth/passwordless:resend\x12\x99\x01\n\x15ListUserOrganizations\x12\x16.google.protobuf.Empty\x1a/.scalekit.v1.auth.ListUserOrganizationsResponse\"7\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/auth:organizations\x12\xa4\x01\n\x12SignupOrganization\x12+.scalekit.v1.auth.SignupOrganizationRequest\x1a,.scalekit.v1.auth.SignupOrganizationResponse\"3\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x18\"\x13/api/v1/auth:signup:\x01*\x12\x7f\n\x0cGetAuthState\x12\x16.google.protobuf.Empty\x1a&.scalekit.v1.auth.GetAuthStateResponse\"/\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x14\x12\x12/api/v1/auth/state\x12\xb6\x01\n\x0cGetAuthError\x12%.scalekit.v1.auth.GetAuthErrorRequest\x1a&.scalekit.v1.auth.GetAuthErrorResponse\"W\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02<\x12\x19/api/v1/errors/{error_id}Z\x1f\x12\x1d/api/v1/auth/error/{error_id}\x12j\n\x06Logout\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"0\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\"\x13/api/v1/auth/logout\x12\xb2\x01\n\x15GetAuthCustomizations\x12..scalekit.v1.auth.GetAuthCustomizationsRequest\x1a/.scalekit.v1.auth.GetAuthCustomizationsResponse\"8\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1d\x12\x1b/api/v1/auth:customizations\x12\x88\x01\n\x0fGetAuthFeatures\x12\x16.google.protobuf.Empty\x1a).scalekit.v1.auth.GetAuthFeaturesResponse\"2\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x17\x12\x15/api/v1/auth:features\x12\xcd\x02\n\x16UpdateLoginUserDetails\x12/.scalekit.v1.auth.UpdateLoginUserDetailsRequest\x1a\x16.google.protobuf.Empty\"\xe9\x01\x92\x41z\n\x0b\x43onnections\x12%Update User Details for login request\x1a%Update User Details for login requestJ\x1d\n\x03\x32\x30\x30\x12\x16\n\x14\x44\x65leted Successfully\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02Q\"I/api/v1/connections/{connection_id}/auth-requests/{login_request_id}/user:\x04userB0Z.github.com/scalekit-inc/scalekit/pkg/grpc/authb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bscalekit/v1/auth/auth.proto\x12\x10scalekit.v1.auth\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a)scalekit/v1/connections/connections.proto\x1a!scalekit/v1/options/options.proto\"0\n\x16ListAuthMethodsRequest\x12\x16\n\x06intent\x18\x01 \x01(\tR\x06intent\"Z\n\x17ListAuthMethodsResponse\x12?\n\x0c\x61uth_methods\x18\x01 \x03(\x0b\x32\x1c.scalekit.v1.auth.AuthMethodR\x0b\x61uthMethods\"\x89\t\n\nAuthMethod\x12}\n\rconnection_id\x18\x01 \x01(\tBX\x92\x41L22Unique identifier for the connection to be toggledJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\x12P\n\x0f\x63onnection_type\x18\x02 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeR\x0e\x63onnectionType\x12\x1a\n\x08provider\x18\x03 \x01(\tR\x08provider\x12\x93\x01\n\x13\x61uth_initiation_uri\x18\x04 \x01(\tBc\x92\x41V2\x1eURI to initiate the connectionJ4\"https://sso.acmecorp.com/sso/v1/oidc/conn_123/init\"\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x11\x61uthInitiationUri\x12z\n\x11passwordless_type\x18\x05 \x01(\x0e\x32).scalekit.v1.connections.PasswordlessTypeB\x1d\x92\x41\x1a\x32\x11Passwordless typeJ\x05\"OTP\"H\x00R\x10passwordlessType\x88\x01\x01\x12W\n\x15\x63ode_challenge_length\x18\x06 \x01(\rB\x1e\x92\x41\x1b\x32\x16Length of the OTP codeJ\x01\x36H\x01R\x13\x63odeChallengeLength\x88\x01\x01\x12\xa3\x01\n!enable_webauthn_auto_registration\x18\x07 \x01(\x08\x42S\x92\x41P2GIndicates if WebAuthn auto-registration is enabled for this auth method:\x05\x66\x61lseH\x02R\x1e\x65nableWebauthnAutoRegistration\x88\x01\x01\x12\x63\n\x13show_passkey_button\x18\x08 \x01(\x08\x42.\x92\x41+2#Show passkey button on login screen:\x04trueH\x03R\x11showPasskeyButton\x88\x01\x01\x12\x83\x01\n!enable_webauthn_conditional_login\x18\t \x01(\x08\x42\x33\x92\x41\x30\x32(Allow autofill of passkeys in login page:\x04trueH\x04R\x1e\x65nableWebauthnConditionalLogin\x88\x01\x01\x42\x14\n\x12_passwordless_typeB\x18\n\x16_code_challenge_lengthB$\n\"_enable_webauthn_auto_registrationB\x16\n\x14_show_passkey_buttonB$\n\"_enable_webauthn_conditional_login\"m\n\x1a\x44iscoveryAuthMethodRequest\x12O\n\x11\x64iscovery_request\x18\x02 \x01(\x0b\x32\".scalekit.v1.auth.DiscoveryRequestR\x10\x64iscoveryRequest\"\xb3\x01\n\x10\x44iscoveryRequest\x12\x63\n\x05\x65mail\x18\x01 \x01(\tBM\x92\x41\x41\x32*user identifier like email or phone numberJ\x13\"john@acmecorp.com\"\xbaH\x06r\x04\x10\x03\x18\x64R\x05\x65mail\x12:\n\x06intent\x18\x02 \x01(\x0e\x32\x18.scalekit.v1.auth.IntentB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x06intent\"\\\n\x1b\x44iscoveryAuthMethodResponse\x12=\n\x0b\x61uth_method\x18\x01 \x01(\x0b\x32\x1c.scalekit.v1.auth.AuthMethodR\nauthMethod\"\x1e\n\x1cGetAuthCustomizationsRequest\"\xab\x01\n\x0ePortalSettings\x12\x98\x01\n\x0f\x63ustom_branding\x18\x01 \x01(\x08\x42o\x92\x41l2dIndicates whether custom portal branding is enabled for this workspace based on billing subscriptionJ\x04trueR\x0e\x63ustomBranding\"\xb2\x01\n\x1dGetAuthCustomizationsResponse\x12N\n\x16\x63ustomization_settings\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\x15\x63ustomizationSettings\x12\x41\n\x08settings\x18\x03 \x01(\x0b\x32 .scalekit.v1.auth.PortalSettingsB\x03\xe0\x41\x03R\x08settings\"N\n\x17GetAuthFeaturesResponse\x12\x33\n\x08\x66\x65\x61tures\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x08\x66\x65\x61tures\"U\n\x1cVerifyPasswordLessOtpRequest\x12\x35\n\x07otp_req\x18\x02 \x01(\x0b\x32\x1c.scalekit.v1.auth.OTPRequestR\x06otpReq\"\x1f\n\x1dVerifyPasswordLessOtpResponse\"i\n\nOTPRequest\x12[\n\x0e\x63ode_challenge\x18\x01 \x01(\tB4\x92\x41(2\x1cOTP sent to the user\'s emailJ\x08\"123456\"\xbaH\x06r\x04\x10\x05\x18\x06R\rcodeChallenge\"\xd4\x01\n\x1dListUserOrganizationsResponse\x12\x44\n\rorganizations\x18\x01 \x03(\x0b\x32\x1e.scalekit.v1.auth.OrganizationR\rorganizations\x12\x31\n\x04user\x18\x02 \x01(\x0b\x32\x1d.scalekit.v1.auth.UserDetailsR\x04user\x12:\n\x06intent\x18\x03 \x01(\x0e\x32\x18.scalekit.v1.auth.IntentB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x06intent\"\x8b\x04\n\x0cOrganization\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12+\n\x11membership_status\x18\x03 \x01(\tR\x10membershipStatus\x12=\n\x18invitation_inviter_email\x18\x04 \x01(\tH\x00R\x16invitationInviterEmail\x88\x01\x01\x12U\n\x16invitation_accepted_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\x14invitationAcceptedAt\x88\x01\x01\x12S\n\x15invitation_created_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02R\x13invitationCreatedAt\x88\x01\x01\x12S\n\x15invitation_expires_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x03R\x13invitationExpiresAt\x88\x01\x01\x42\x1b\n\x19_invitation_inviter_emailB\x19\n\x17_invitation_accepted_atB\x18\n\x16_invitation_created_atB\x18\n\x16_invitation_expires_at\"_\n\x0bUserDetails\x12\x14\n\x05\x65mail\x18\x01 \x01(\tR\x05\x65mail\x12\x1d\n\nfirst_name\x18\x02 \x01(\tR\tfirstName\x12\x1b\n\tlast_name\x18\x03 \x01(\tR\x08lastName\"\xc4\x01\n\x19SignupOrganizationRequest\x12+\n\x11organization_name\x18\x01 \x01(\tR\x10organizationName\x12\x1d\n\nfirst_name\x18\x02 \x01(\tR\tfirstName\x12\x1b\n\tlast_name\x18\x03 \x01(\tR\x08lastName\x12\x1b\n\tfull_name\x18\x04 \x01(\tR\x08\x66ullName\x12!\n\x0cphone_number\x18\x05 \x01(\tR\x0bphoneNumber\"r\n\x1aSignupOrganizationResponse\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12+\n\x11organization_name\x18\x02 \x01(\tR\x10organizationName\"\xd6\x02\n\x1dUpdateLoginUserDetailsRequest\x12v\n\rconnection_id\x18\x01 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\x12\x90\x01\n\x10login_request_id\x18\x02 \x01(\tBf\x92\x41]2BLogin Request ID that was shared as part of authorization initiateJ\x17\"lri_73415099636808061\"\xbaH\x03\xc8\x01\x01R\x0eloginRequestId\x12*\n\x04user\x18\x03 \x01(\x0b\x32\x16.scalekit.v1.auth.UserR\x04user\"\xe1\r\n\x04User\x12\x83\x01\n\x03sub\x18\x01 \x01(\tBq\x92\x41g2WSubject identifier for the user (typically a unique user ID from the identity provider)J\x0c\"1234567890\"\xbaH\x04r\x02\x10\x01R\x03sub\x12R\n\x05\x65mail\x18\x02 \x01(\tB<\x92\x41\x32\x32\x1cUser\'s primary email addressJ\x12\"user@example.com\"\xbaH\x04r\x02\x10\x01R\x05\x65mail\x12=\n\ngiven_name\x18\x03 \x01(\tB\x1e\x92\x41\x1b\x32\x11User\'s first nameJ\x06\"John\"R\tgivenName\x12=\n\x0b\x66\x61mily_name\x18\x04 \x01(\tB\x1c\x92\x41\x19\x32\x10User\'s last nameJ\x05\"Doe\"R\nfamilyName\x12\x88\x01\n\x0e\x65mail_verified\x18\x05 \x01(\x08\x42\x61\x92\x41^2VIndicates whether the user\'s email address has been verified by the identity provider.J\x04trueR\remailVerified\x12\x63\n\x0cphone_number\x18\x06 \x01(\tB@\x92\x41=2,User\'s primary phone number in E.164 format.J\r\"+1234567890\"R\x0bphoneNumber\x12\x95\x01\n\x15phone_number_verified\x18\x07 \x01(\x08\x42\x61\x92\x41^2UIndicates whether the user\'s phone number has been verified by the identity provider.J\x05\x66\x61lseR\x13phoneNumberVerified\x12\x42\n\x04name\x18\x08 \x01(\tB.\x92\x41+2\x1d\x46ull display name of the userJ\n\"John Doe\"R\x04name\x12\x62\n\x12preferred_username\x18\t \x01(\tB3\x92\x41\x30\x32#User\'s preferred username or handleJ\t\"johndoe\"R\x11preferredUsername\x12\x62\n\x07picture\x18\n \x01(\tBH\x92\x41\x45\x32!URL to the user\'s profile pictureJ \"https://example.com/avatar.jpg\"R\x07picture\x12X\n\x06gender\x18\x0b \x01(\tB@\x92\x41=23User\'s gender as reported by the identity provider.J\x06\"male\"R\x06gender\x12\x65\n\x06locale\x18\x0c \x01(\tBM\x92\x41J2?User\'s locale or language preference (IETF BCP 47 language tag)J\x07\"en-US\"R\x06locale\x12\x66\n\x06groups\x18\r \x03(\tBN\x92\x41K2/List of group names or IDs the user belongs to.J\x18[\"admins\", \"developers\"]R\x06groups\x12\xf2\x01\n\x11\x63ustom_attributes\x18\x0e \x01(\x0b\x32\x17.google.protobuf.StructB\xab\x01\x92\x41\xa7\x01\x32mCustom attributes for the user, represented as a key-value map. Used for additional identity provider claims.J6{\"department\": \"Engineering\", \"employee_id\": \"E12345\"}R\x10\x63ustomAttributes\x12\xb1\x01\n\x18organization_external_id\x18\x0f \x01(\tBr\x92\x41o2EIdentifier for the user\xe2\x80\x99s organization within the identity providerJ&\"132d085d-d89d-4a2e-95bb-49bde680d14f\"H\x00R\x16organizationExternalId\x88\x01\x01\x42\x1b\n\x19_organization_external_id\"\x85\x01\n\x14GetAuthStateResponse\x12:\n\nauth_state\x18\x01 \x01(\x0e\x32\x1b.scalekit.v1.auth.AuthStateR\tauthState\x12\x31\n\x04user\x18\x02 \x01(\x0b\x32\x1d.scalekit.v1.auth.UserDetailsR\x04user\"\x8c\x01\n\x13GetAuthErrorRequest\x12u\n\x08\x65rror_id\x18\x01 \x01(\tBZ\x92\x41H2.Unique identifier for the authentication errorJ\x16\"err_1234567890abcdef\"\xbaH\x0cr\n\x10\x01\x18@:\x04\x65rr_R\x07\x65rrorId\"Y\n\x14GetAuthErrorResponse\x12\x14\n\x05\x65rror\x18\x01 \x01(\tR\x05\x65rror\x12+\n\x11\x65rror_description\x18\x02 \x01(\tR\x10\x65rrorDescription*:\n\x06Intent\x12\x16\n\x12INTENT_UNSPECIFIED\x10\x00\x12\x0b\n\x07sign_in\x10\x01\x12\x0b\n\x07sign_up\x10\x02*\xb4\x04\n\tAuthState\x12\x1a\n\x16\x41UTH_STATE_UNSPECIFIED\x10\x00\x12\x1e\n\x1a\x41UTHENTICATION_IN_PROGRESS\x10\x01\x12\x19\n\x15ORGANIZATION_SWITCHER\x10\x02\x12\x19\n\x15ORGANIZATION_SELECTED\x10\x03\x12\x17\n\x13ORGANIZATION_SIGNUP\x10\x04\x12 \n\x1cORGANIZATION_SWITCHER_SIGNUP\x10\x05\x12\x1c\n\x18OTP_VERIFICATION_PENDING\x10\x06\x12\x13\n\x0fMAGIC_LINK_SENT\x10\x07\x12&\n\"LINK_SENT_OTP_VERIFICATION_PENDING\x10\x08\x12\x10\n\x0cOTP_VERIFIED\x10\t\x12\x11\n\rLINK_VERIFIED\x10\n\x12\x15\n\x11SSO_AUTHENTICATED\x10\x0b\x12\x14\n\x10ORG_USER_CREATED\x10\x0c\x12\x1c\n\x18\x41UTHENTICATION_COMPLETED\x10\r\x12\x19\n\x15\x41UTHENTICATION_FAILED\x10\x0e\x12\x15\n\x11WEBAUTHN_VERIFIED\x10\x0f\x12 \n\x1cVERIFICATION_MAGIC_LINK_SENT\x10\x10\x12$\n VERIFICATION_MAGIC_LINK_OTP_SENT\x10\x11\x12\x19\n\x15VERIFICATION_OTP_SENT\x10\x12\x12\x1a\n\x16VERIFICATION_COMPLETED\x10\x13\x32\xa7\x10\n\x0b\x41uthService\x12\x98\x01\n\x0fListAuthMethods\x12(.scalekit.v1.auth.ListAuthMethodsRequest\x1a).scalekit.v1.auth.ListAuthMethodsResponse\"0\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\x12\x13/api/v1/authmethods\x12\xba\x01\n\x13\x44iscoveryAuthMethod\x12,.scalekit.v1.auth.DiscoveryAuthMethodRequest\x1a-.scalekit.v1.auth.DiscoveryAuthMethodResponse\"F\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02+\"\x16/api/v1/auth:discovery:\x11\x64iscovery_request\x12\xc0\x01\n\x15VerifyPasswordLessOtp\x12..scalekit.v1.auth.VerifyPasswordLessOtpRequest\x1a/.scalekit.v1.auth.VerifyPasswordLessOtpResponse\"F\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02+\" /api/v1/auth/passwordless:verify:\x07otp_req\x12\x83\x01\n\x12ResendPasswordless\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"=\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\"\" /api/v1/auth/passwordless:resend\x12\x99\x01\n\x15ListUserOrganizations\x12\x16.google.protobuf.Empty\x1a/.scalekit.v1.auth.ListUserOrganizationsResponse\"7\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/auth:organizations\x12\xa4\x01\n\x12SignupOrganization\x12+.scalekit.v1.auth.SignupOrganizationRequest\x1a,.scalekit.v1.auth.SignupOrganizationResponse\"3\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x18\"\x13/api/v1/auth:signup:\x01*\x12\x7f\n\x0cGetAuthState\x12\x16.google.protobuf.Empty\x1a&.scalekit.v1.auth.GetAuthStateResponse\"/\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x14\x12\x12/api/v1/auth/state\x12\xb6\x01\n\x0cGetAuthError\x12%.scalekit.v1.auth.GetAuthErrorRequest\x1a&.scalekit.v1.auth.GetAuthErrorResponse\"W\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02<\x12\x19/api/v1/errors/{error_id}Z\x1f\x12\x1d/api/v1/auth/error/{error_id}\x12j\n\x06Logout\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"0\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\"\x13/api/v1/auth/logout\x12\xb2\x01\n\x15GetAuthCustomizations\x12..scalekit.v1.auth.GetAuthCustomizationsRequest\x1a/.scalekit.v1.auth.GetAuthCustomizationsResponse\"8\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1d\x12\x1b/api/v1/auth:customizations\x12\x88\x01\n\x0fGetAuthFeatures\x12\x16.google.protobuf.Empty\x1a).scalekit.v1.auth.GetAuthFeaturesResponse\"2\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x17\x12\x15/api/v1/auth:features\x12\xcd\x02\n\x16UpdateLoginUserDetails\x12/.scalekit.v1.auth.UpdateLoginUserDetailsRequest\x1a\x16.google.protobuf.Empty\"\xe9\x01\x92\x41z\n\x0b\x43onnections\x12%Update User Details for login request\x1a%Update User Details for login requestJ\x1d\n\x03\x32\x30\x30\x12\x16\n\x14\x44\x65leted Successfully\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02Q\"I/api/v1/connections/{connection_id}/auth-requests/{login_request_id}/user:\x04userB0Z.github.com/scalekit-inc/scalekit/pkg/grpc/authb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -53,8 +53,6 @@ _globals['_DISCOVERYREQUEST'].fields_by_name['intent']._serialized_options = b'\272H\005\202\001\002\020\001' _globals['_PORTALSETTINGS'].fields_by_name['custom_branding']._loaded_options = None _globals['_PORTALSETTINGS'].fields_by_name['custom_branding']._serialized_options = b'\222Al2dIndicates whether custom portal branding is enabled for this workspace based on billing subscriptionJ\004true' - _globals['_PORTALSETTINGS'].fields_by_name['new_self_serve_sso_scim']._loaded_options = None - _globals['_PORTALSETTINGS'].fields_by_name['new_self_serve_sso_scim']._serialized_options = b'\222A\205\0012|Indicates whether the new self-serve SSO/SCIM flow should be shown in the hosted pages (rollout-driven, not billing-derived)J\005false' _globals['_GETAUTHCUSTOMIZATIONSRESPONSE'].fields_by_name['settings']._loaded_options = None _globals['_GETAUTHCUSTOMIZATIONSRESPONSE'].fields_by_name['settings']._serialized_options = b'\340A\003' _globals['_OTPREQUEST'].fields_by_name['code_challenge']._loaded_options = None @@ -95,12 +93,6 @@ _globals['_USER'].fields_by_name['custom_attributes']._serialized_options = b'\222A\247\0012mCustom attributes for the user, represented as a key-value map. Used for additional identity provider claims.J6{\"department\": \"Engineering\", \"employee_id\": \"E12345\"}' _globals['_USER'].fields_by_name['organization_external_id']._loaded_options = None _globals['_USER'].fields_by_name['organization_external_id']._serialized_options = b'\222Ao2EIdentifier for the user\342\200\231s organization within the identity providerJ&\"132d085d-d89d-4a2e-95bb-49bde680d14f\"' - _globals['_USER'].fields_by_name['roles']._loaded_options = None - _globals['_USER'].fields_by_name['roles']._serialized_options = b'\222A:2#List of roles assigned to the user.J\023[\"admin\", \"editor\"]' - _globals['_USER'].fields_by_name['organization_external_name']._loaded_options = None - _globals['_USER'].fields_by_name['organization_external_name']._serialized_options = b'\222Ao2`Name of the organization the user is authenticating into. Used to display on the consent screen.J\013\"Acme Corp\"\272H\005r\003\030\310\001' - _globals['_GETAUTHSTATERESPONSE'].fields_by_name['login_hint']._loaded_options = None - _globals['_GETAUTHSTATERESPONSE'].fields_by_name['login_hint']._serialized_options = b'\222A\205\0012oLogin hint from the original authorize request. Typically an email address used to pre-fill the login UI input.J\022\"user@example.com\"' _globals['_GETAUTHERRORREQUEST'].fields_by_name['error_id']._loaded_options = None _globals['_GETAUTHERRORREQUEST'].fields_by_name['error_id']._serialized_options = b'\222AH2.Unique identifier for the authentication errorJ\026\"err_1234567890abcdef\"\272H\014r\n\020\001\030@:\004err_' _globals['_AUTHSERVICE'].methods_by_name['ListAuthMethods']._loaded_options = None @@ -127,10 +119,10 @@ _globals['_AUTHSERVICE'].methods_by_name['GetAuthFeatures']._serialized_options = b'\202\265\030\002\030\001\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\027\022\025/api/v1/auth:features' _globals['_AUTHSERVICE'].methods_by_name['UpdateLoginUserDetails']._loaded_options = None _globals['_AUTHSERVICE'].methods_by_name['UpdateLoginUserDetails']._serialized_options = b'\222Az\n\013Connections\022%Update User Details for login request\032%Update User Details for login requestJ\035\n\003200\022\026\n\024Deleted Successfully\202\265\030\002\030\004\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002Q\"I/api/v1/connections/{connection_id}/auth-requests/{login_request_id}/user:\004user' - _globals['_INTENT']._serialized_start=7150 - _globals['_INTENT']._serialized_end=7208 - _globals['_AUTHSTATE']._serialized_start=7211 - _globals['_AUTHSTATE']._serialized_end=7775 + _globals['_INTENT']._serialized_start=6442 + _globals['_INTENT']._serialized_end=6500 + _globals['_AUTHSTATE']._serialized_start=6503 + _globals['_AUTHSTATE']._serialized_end=7067 _globals['_LISTAUTHMETHODSREQUEST']._serialized_start=423 _globals['_LISTAUTHMETHODSREQUEST']._serialized_end=471 _globals['_LISTAUTHMETHODSRESPONSE']._serialized_start=473 @@ -146,37 +138,37 @@ _globals['_GETAUTHCUSTOMIZATIONSREQUEST']._serialized_start=2116 _globals['_GETAUTHCUSTOMIZATIONSREQUEST']._serialized_end=2146 _globals['_PORTALSETTINGS']._serialized_start=2149 - _globals['_PORTALSETTINGS']._serialized_end=2548 - _globals['_GETAUTHCUSTOMIZATIONSRESPONSE']._serialized_start=2551 - _globals['_GETAUTHCUSTOMIZATIONSRESPONSE']._serialized_end=2729 - _globals['_GETAUTHFEATURESRESPONSE']._serialized_start=2731 - _globals['_GETAUTHFEATURESRESPONSE']._serialized_end=2809 - _globals['_VERIFYPASSWORDLESSOTPREQUEST']._serialized_start=2811 - _globals['_VERIFYPASSWORDLESSOTPREQUEST']._serialized_end=2896 - _globals['_VERIFYPASSWORDLESSOTPRESPONSE']._serialized_start=2898 - _globals['_VERIFYPASSWORDLESSOTPRESPONSE']._serialized_end=2929 - _globals['_OTPREQUEST']._serialized_start=2931 - _globals['_OTPREQUEST']._serialized_end=3036 - _globals['_LISTUSERORGANIZATIONSRESPONSE']._serialized_start=3039 - _globals['_LISTUSERORGANIZATIONSRESPONSE']._serialized_end=3251 - _globals['_ORGANIZATION']._serialized_start=3254 - _globals['_ORGANIZATION']._serialized_end=3777 - _globals['_USERDETAILS']._serialized_start=3779 - _globals['_USERDETAILS']._serialized_end=3874 - _globals['_SIGNUPORGANIZATIONREQUEST']._serialized_start=3877 - _globals['_SIGNUPORGANIZATIONREQUEST']._serialized_end=4073 - _globals['_SIGNUPORGANIZATIONRESPONSE']._serialized_start=4075 - _globals['_SIGNUPORGANIZATIONRESPONSE']._serialized_end=4189 - _globals['_UPDATELOGINUSERDETAILSREQUEST']._serialized_start=4192 - _globals['_UPDATELOGINUSERDETAILSREQUEST']._serialized_end=4534 - _globals['_USER']._serialized_start=4537 - _globals['_USER']._serialized_end=6606 - _globals['_GETAUTHSTATERESPONSE']._serialized_start=6609 - _globals['_GETAUTHSTATERESPONSE']._serialized_end=6914 - _globals['_GETAUTHERRORREQUEST']._serialized_start=6917 - _globals['_GETAUTHERRORREQUEST']._serialized_end=7057 - _globals['_GETAUTHERRORRESPONSE']._serialized_start=7059 - _globals['_GETAUTHERRORRESPONSE']._serialized_end=7148 - _globals['_AUTHSERVICE']._serialized_start=7778 - _globals['_AUTHSERVICE']._serialized_end=9865 + _globals['_PORTALSETTINGS']._serialized_end=2320 + _globals['_GETAUTHCUSTOMIZATIONSRESPONSE']._serialized_start=2323 + _globals['_GETAUTHCUSTOMIZATIONSRESPONSE']._serialized_end=2501 + _globals['_GETAUTHFEATURESRESPONSE']._serialized_start=2503 + _globals['_GETAUTHFEATURESRESPONSE']._serialized_end=2581 + _globals['_VERIFYPASSWORDLESSOTPREQUEST']._serialized_start=2583 + _globals['_VERIFYPASSWORDLESSOTPREQUEST']._serialized_end=2668 + _globals['_VERIFYPASSWORDLESSOTPRESPONSE']._serialized_start=2670 + _globals['_VERIFYPASSWORDLESSOTPRESPONSE']._serialized_end=2701 + _globals['_OTPREQUEST']._serialized_start=2703 + _globals['_OTPREQUEST']._serialized_end=2808 + _globals['_LISTUSERORGANIZATIONSRESPONSE']._serialized_start=2811 + _globals['_LISTUSERORGANIZATIONSRESPONSE']._serialized_end=3023 + _globals['_ORGANIZATION']._serialized_start=3026 + _globals['_ORGANIZATION']._serialized_end=3549 + _globals['_USERDETAILS']._serialized_start=3551 + _globals['_USERDETAILS']._serialized_end=3646 + _globals['_SIGNUPORGANIZATIONREQUEST']._serialized_start=3649 + _globals['_SIGNUPORGANIZATIONREQUEST']._serialized_end=3845 + _globals['_SIGNUPORGANIZATIONRESPONSE']._serialized_start=3847 + _globals['_SIGNUPORGANIZATIONRESPONSE']._serialized_end=3961 + _globals['_UPDATELOGINUSERDETAILSREQUEST']._serialized_start=3964 + _globals['_UPDATELOGINUSERDETAILSREQUEST']._serialized_end=4306 + _globals['_USER']._serialized_start=4309 + _globals['_USER']._serialized_end=6070 + _globals['_GETAUTHSTATERESPONSE']._serialized_start=6073 + _globals['_GETAUTHSTATERESPONSE']._serialized_end=6206 + _globals['_GETAUTHERRORREQUEST']._serialized_start=6209 + _globals['_GETAUTHERRORREQUEST']._serialized_end=6349 + _globals['_GETAUTHERRORRESPONSE']._serialized_start=6351 + _globals['_GETAUTHERRORRESPONSE']._serialized_end=6440 + _globals['_AUTHSERVICE']._serialized_start=7070 + _globals['_AUTHSERVICE']._serialized_end=9157 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/auth/auth_pb2.pyi b/scalekit/v1/auth/auth_pb2.pyi index 06084bc..33fa9cc 100644 --- a/scalekit/v1/auth/auth_pb2.pyi +++ b/scalekit/v1/auth/auth_pb2.pyi @@ -128,12 +128,10 @@ class GetAuthCustomizationsRequest(_message.Message): def __init__(self) -> None: ... class PortalSettings(_message.Message): - __slots__ = ("custom_branding", "new_self_serve_sso_scim") + __slots__ = ("custom_branding",) CUSTOM_BRANDING_FIELD_NUMBER: _ClassVar[int] - NEW_SELF_SERVE_SSO_SCIM_FIELD_NUMBER: _ClassVar[int] custom_branding: bool - new_self_serve_sso_scim: bool - def __init__(self, custom_branding: bool = ..., new_self_serve_sso_scim: bool = ...) -> None: ... + def __init__(self, custom_branding: bool = ...) -> None: ... class GetAuthCustomizationsResponse(_message.Message): __slots__ = ("customization_settings", "settings") @@ -236,7 +234,7 @@ class UpdateLoginUserDetailsRequest(_message.Message): def __init__(self, connection_id: _Optional[str] = ..., login_request_id: _Optional[str] = ..., user: _Optional[_Union[User, _Mapping]] = ...) -> None: ... class User(_message.Message): - __slots__ = ("sub", "email", "given_name", "family_name", "email_verified", "phone_number", "phone_number_verified", "name", "preferred_username", "picture", "gender", "locale", "groups", "custom_attributes", "organization_external_id", "roles", "organization_external_name") + __slots__ = ("sub", "email", "given_name", "family_name", "email_verified", "phone_number", "phone_number_verified", "name", "preferred_username", "picture", "gender", "locale", "groups", "custom_attributes", "organization_external_id") SUB_FIELD_NUMBER: _ClassVar[int] EMAIL_FIELD_NUMBER: _ClassVar[int] GIVEN_NAME_FIELD_NUMBER: _ClassVar[int] @@ -252,8 +250,6 @@ class User(_message.Message): GROUPS_FIELD_NUMBER: _ClassVar[int] CUSTOM_ATTRIBUTES_FIELD_NUMBER: _ClassVar[int] ORGANIZATION_EXTERNAL_ID_FIELD_NUMBER: _ClassVar[int] - ROLES_FIELD_NUMBER: _ClassVar[int] - ORGANIZATION_EXTERNAL_NAME_FIELD_NUMBER: _ClassVar[int] sub: str email: str given_name: str @@ -269,19 +265,15 @@ class User(_message.Message): groups: _containers.RepeatedScalarFieldContainer[str] custom_attributes: _struct_pb2.Struct organization_external_id: str - roles: _containers.RepeatedScalarFieldContainer[str] - organization_external_name: str - def __init__(self, sub: _Optional[str] = ..., email: _Optional[str] = ..., given_name: _Optional[str] = ..., family_name: _Optional[str] = ..., email_verified: bool = ..., phone_number: _Optional[str] = ..., phone_number_verified: bool = ..., name: _Optional[str] = ..., preferred_username: _Optional[str] = ..., picture: _Optional[str] = ..., gender: _Optional[str] = ..., locale: _Optional[str] = ..., groups: _Optional[_Iterable[str]] = ..., custom_attributes: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., organization_external_id: _Optional[str] = ..., roles: _Optional[_Iterable[str]] = ..., organization_external_name: _Optional[str] = ...) -> None: ... + def __init__(self, sub: _Optional[str] = ..., email: _Optional[str] = ..., given_name: _Optional[str] = ..., family_name: _Optional[str] = ..., email_verified: bool = ..., phone_number: _Optional[str] = ..., phone_number_verified: bool = ..., name: _Optional[str] = ..., preferred_username: _Optional[str] = ..., picture: _Optional[str] = ..., gender: _Optional[str] = ..., locale: _Optional[str] = ..., groups: _Optional[_Iterable[str]] = ..., custom_attributes: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., organization_external_id: _Optional[str] = ...) -> None: ... class GetAuthStateResponse(_message.Message): - __slots__ = ("auth_state", "user", "login_hint") + __slots__ = ("auth_state", "user") AUTH_STATE_FIELD_NUMBER: _ClassVar[int] USER_FIELD_NUMBER: _ClassVar[int] - LOGIN_HINT_FIELD_NUMBER: _ClassVar[int] auth_state: AuthState user: UserDetails - login_hint: str - def __init__(self, auth_state: _Optional[_Union[AuthState, str]] = ..., user: _Optional[_Union[UserDetails, _Mapping]] = ..., login_hint: _Optional[str] = ...) -> None: ... + def __init__(self, auth_state: _Optional[_Union[AuthState, str]] = ..., user: _Optional[_Union[UserDetails, _Mapping]] = ...) -> None: ... class GetAuthErrorRequest(_message.Message): __slots__ = ("error_id",) diff --git a/scalekit/v1/auth/totp_pb2.py b/scalekit/v1/auth/totp_pb2.py index d8eacf1..db94313 100644 --- a/scalekit/v1/auth/totp_pb2.py +++ b/scalekit/v1/auth/totp_pb2.py @@ -15,7 +15,6 @@ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2 -from google.api import visibility_pb2 as google_dot_api_dot_visibility__pb2 from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 @@ -24,7 +23,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bscalekit/v1/auth/totp.proto\x12\x15scalekit.v1.auth.totp\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"t\n\x17TOTPRegistrationRequest\x12Y\n\x11totp_registration\x18\x01 \x01(\x0b\x32\'.scalekit.v1.auth.totp.TOTPRegistrationB\x03\xbaH\x00R\x10totpRegistration\"u\n\x18TOTPRegistrationResponse\x12Y\n\x11totp_registration\x18\x01 \x01(\x0b\x32\'.scalekit.v1.auth.totp.TOTPRegistrationB\x03\xbaH\x00R\x10totpRegistration\"\x84\x07\n\x10TOTPRegistration\x12{\n\x02id\x18\x01 \x01(\tBk\x92\x41h2MUnique scalekit-generated identifier that uniquely references an organizationJ\x17\"org_59615193906282635\"R\x02id\x12\x8c\x01\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBO\x92\x41I2+Timestamp when the organization was createdJ\x1a\"2025-02-15T06:23:44.560Z\"\xe0\x41\x02R\ncreateTime\x12\x8e\x01\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBQ\x92\x41N20Timestamp when the organization was last updatedJ\x1a\"2025-02-15T06:23:44.560Z\"R\nupdateTime\x12y\n\x07user_id\x18\x04 \x01(\tB^\x92\x41L21The user ID associated with the TOTP registrationJ\x17\"usr_59615193906282635\"\xbaH\x0cr\n\x10\x01\x18 :\x04usr_H\x00R\x06userId\x12|\n\x0c\x61\x63\x63ount_name\x18\x05 \x01(\tBW\x92\x41J26The account name associated with the TOTP registrationJ\x10\"me@example.com\"\xbaH\x07r\x05\x10\x01\x18\xe3\x02H\x00R\x0b\x61\x63\x63ountName\x12\xb2\x01\n\x0bqr_code_uri\x18\x06 \x01(\tB\x8c\x01\x92\x41|2+The URI for the QR code used to set up TOTPJM\"otpauth://totp/Scalekit:usr_59615193906282635?secret=ABC123&issuer=Scalekit\"\xe0\x41\x03\xbaH\x07r\x05\x10\x01\x18\x80\x08H\x01R\tqrCodeUri\x88\x01\x01\x42\x15\n\x13UserIdOrAccountNameB\x0e\n\x0c_qr_code_uri\"l\n\x1d\x45nableRegistrationTOTPRequest\x12/\n\x0fregistration_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x0eregistrationId\x12\x1a\n\x04\x63ode\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x04\x63ode\"[\n\x1e\x45nableRegistrationTOTPResponse\x12\x16\n\x02id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x02id\x12!\n\x0c\x62\x61\x63kup_codes\x18\x03 \x03(\tR\x0b\x62\x61\x63kupCodes\"m\n\x1e\x44isableRegistrationTOTPRequest\x12/\n\x0fregistration_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x0eregistrationId\x12\x1a\n\x04\x63ode\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x04\x63ode\"\x87\x01\n\x15GenerateQRCodeRequest\x12-\n\x0e\x65nvironment_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\renvironmentId\x12&\n\nidentifier\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\nidentifier\x12\x17\n\x07is_user\x18\x03 \x01(\x08R\x06isUser\"1\n\x16GenerateQRCodeResponse\x12\x17\n\x07qr_code\x18\x01 \x01(\tR\x06qrCode\"T\n\x15VerifyUserCodeRequest\x12\x1f\n\x07user_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x06userId\x12\x1a\n\x04\x63ode\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x04\x63ode\"*\n\x12VerifyCodeResponse\x12\x14\n\x05valid\x18\x01 \x01(\x08R\x05valid\"l\n\x1dVerifyRegistrationCodeRequest\x12/\n\x0fregistration_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x0eregistrationId\x12\x1a\n\x04\x63ode\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x04\x63ode2\xa7\x07\n\x0bTOTPService\x12\xba\x01\n\x0cRegisterTOTP\x12..scalekit.v1.auth.totp.TOTPRegistrationRequest\x1a/.scalekit.v1.auth.totp.TOTPRegistrationResponse\"I\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02.\"\x19/api/v1/totp/registration:\x11totp_registration\x12\xc0\x01\n\nEnableTOTP\x12\x34.scalekit.v1.auth.totp.EnableRegistrationTOTPRequest\x1a\x35.scalekit.v1.auth.totp.EnableRegistrationTOTPResponse\"E\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02*\"%/api/v1/totp/{registration_id}/enable:\x01*\x12\xad\x01\n\x0eVerifyUserCode\x12,.scalekit.v1.auth.totp.VerifyUserCodeRequest\x1a).scalekit.v1.auth.totp.VerifyCodeResponse\"B\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\'\"\"/api/v1/user/{user_id}/totp:verify:\x01*\x12\xc0\x01\n\x16VerifyRegistrationCode\x12\x34.scalekit.v1.auth.totp.VerifyRegistrationCodeRequest\x1a).scalekit.v1.auth.totp.VerifyCodeResponse\"E\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02*\"%/api/v1/totp/{registration_id}/verify:\x01*\x12\xa4\x01\n\x0b\x44isableTOTP\x12\x35.scalekit.v1.auth.totp.DisableRegistrationTOTPRequest\x1a\x16.google.protobuf.Empty\"F\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02+\"&/api/v1/totp/{registration_id}/disable:\x01*B5Z3github.com/scalekit-inc/scalekit/pkg/grpc/auth/totpb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bscalekit/v1/auth/totp.proto\x12\x15scalekit.v1.auth.totp\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"t\n\x17TOTPRegistrationRequest\x12Y\n\x11totp_registration\x18\x01 \x01(\x0b\x32\'.scalekit.v1.auth.totp.TOTPRegistrationB\x03\xbaH\x00R\x10totpRegistration\"u\n\x18TOTPRegistrationResponse\x12Y\n\x11totp_registration\x18\x01 \x01(\x0b\x32\'.scalekit.v1.auth.totp.TOTPRegistrationB\x03\xbaH\x00R\x10totpRegistration\"\x84\x07\n\x10TOTPRegistration\x12{\n\x02id\x18\x01 \x01(\tBk\x92\x41h2MUnique scalekit-generated identifier that uniquely references an organizationJ\x17\"org_59615193906282635\"R\x02id\x12\x8c\x01\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBO\x92\x41I2+Timestamp when the organization was createdJ\x1a\"2025-02-15T06:23:44.560Z\"\xe0\x41\x02R\ncreateTime\x12\x8e\x01\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBQ\x92\x41N20Timestamp when the organization was last updatedJ\x1a\"2025-02-15T06:23:44.560Z\"R\nupdateTime\x12y\n\x07user_id\x18\x04 \x01(\tB^\x92\x41L21The user ID associated with the TOTP registrationJ\x17\"usr_59615193906282635\"\xbaH\x0cr\n\x10\x01\x18 :\x04usr_H\x00R\x06userId\x12|\n\x0c\x61\x63\x63ount_name\x18\x05 \x01(\tBW\x92\x41J26The account name associated with the TOTP registrationJ\x10\"me@example.com\"\xbaH\x07r\x05\x10\x01\x18\xe3\x02H\x00R\x0b\x61\x63\x63ountName\x12\xb2\x01\n\x0bqr_code_uri\x18\x06 \x01(\tB\x8c\x01\x92\x41|2+The URI for the QR code used to set up TOTPJM\"otpauth://totp/Scalekit:usr_59615193906282635?secret=ABC123&issuer=Scalekit\"\xe0\x41\x03\xbaH\x07r\x05\x10\x01\x18\x80\x08H\x01R\tqrCodeUri\x88\x01\x01\x42\x15\n\x13UserIdOrAccountNameB\x0e\n\x0c_qr_code_uri\"l\n\x1d\x45nableRegistrationTOTPRequest\x12/\n\x0fregistration_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x0eregistrationId\x12\x1a\n\x04\x63ode\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x04\x63ode\"[\n\x1e\x45nableRegistrationTOTPResponse\x12\x16\n\x02id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x02id\x12!\n\x0c\x62\x61\x63kup_codes\x18\x03 \x03(\tR\x0b\x62\x61\x63kupCodes\"m\n\x1e\x44isableRegistrationTOTPRequest\x12/\n\x0fregistration_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x0eregistrationId\x12\x1a\n\x04\x63ode\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x04\x63ode\"\x87\x01\n\x15GenerateQRCodeRequest\x12-\n\x0e\x65nvironment_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\renvironmentId\x12&\n\nidentifier\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\nidentifier\x12\x17\n\x07is_user\x18\x03 \x01(\x08R\x06isUser\"1\n\x16GenerateQRCodeResponse\x12\x17\n\x07qr_code\x18\x01 \x01(\tR\x06qrCode\"T\n\x15VerifyUserCodeRequest\x12\x1f\n\x07user_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x06userId\x12\x1a\n\x04\x63ode\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x04\x63ode\"*\n\x12VerifyCodeResponse\x12\x14\n\x05valid\x18\x01 \x01(\x08R\x05valid\"l\n\x1dVerifyRegistrationCodeRequest\x12/\n\x0fregistration_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x0eregistrationId\x12\x1a\n\x04\x63ode\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x04\x63ode2\xdc\x06\n\x0bTOTPService\x12\xab\x01\n\x0cRegisterTOTP\x12..scalekit.v1.auth.totp.TOTPRegistrationRequest\x1a/.scalekit.v1.auth.totp.TOTPRegistrationResponse\":\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02.\"\x19/api/v1/totp/registration:\x11totp_registration\x12\xb1\x01\n\nEnableTOTP\x12\x34.scalekit.v1.auth.totp.EnableRegistrationTOTPRequest\x1a\x35.scalekit.v1.auth.totp.EnableRegistrationTOTPResponse\"6\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02*\"%/api/v1/totp/{registration_id}/enable:\x01*\x12\x9e\x01\n\x0eVerifyUserCode\x12,.scalekit.v1.auth.totp.VerifyUserCodeRequest\x1a).scalekit.v1.auth.totp.VerifyCodeResponse\"3\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\'\"\"/api/v1/user/{user_id}/totp:verify:\x01*\x12\xb1\x01\n\x16VerifyRegistrationCode\x12\x34.scalekit.v1.auth.totp.VerifyRegistrationCodeRequest\x1a).scalekit.v1.auth.totp.VerifyCodeResponse\"6\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02*\"%/api/v1/totp/{registration_id}/verify:\x01*\x12\x95\x01\n\x0b\x44isableTOTP\x12\x35.scalekit.v1.auth.totp.DisableRegistrationTOTPRequest\x1a\x16.google.protobuf.Empty\"7\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02+\"&/api/v1/totp/{registration_id}/disable:\x01*B5Z3github.com/scalekit-inc/scalekit/pkg/grpc/auth/totpb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -71,37 +70,37 @@ _globals['_VERIFYREGISTRATIONCODEREQUEST'].fields_by_name['code']._loaded_options = None _globals['_VERIFYREGISTRATIONCODEREQUEST'].fields_by_name['code']._serialized_options = b'\272H\003\310\001\001' _globals['_TOTPSERVICE'].methods_by_name['RegisterTOTP']._loaded_options = None - _globals['_TOTPSERVICE'].methods_by_name['RegisterTOTP']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002.\"\031/api/v1/totp/registration:\021totp_registration' + _globals['_TOTPSERVICE'].methods_by_name['RegisterTOTP']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002.\"\031/api/v1/totp/registration:\021totp_registration' _globals['_TOTPSERVICE'].methods_by_name['EnableTOTP']._loaded_options = None - _globals['_TOTPSERVICE'].methods_by_name['EnableTOTP']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002*\"%/api/v1/totp/{registration_id}/enable:\001*' + _globals['_TOTPSERVICE'].methods_by_name['EnableTOTP']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002*\"%/api/v1/totp/{registration_id}/enable:\001*' _globals['_TOTPSERVICE'].methods_by_name['VerifyUserCode']._loaded_options = None - _globals['_TOTPSERVICE'].methods_by_name['VerifyUserCode']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\'\"\"/api/v1/user/{user_id}/totp:verify:\001*' + _globals['_TOTPSERVICE'].methods_by_name['VerifyUserCode']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\'\"\"/api/v1/user/{user_id}/totp:verify:\001*' _globals['_TOTPSERVICE'].methods_by_name['VerifyRegistrationCode']._loaded_options = None - _globals['_TOTPSERVICE'].methods_by_name['VerifyRegistrationCode']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002*\"%/api/v1/totp/{registration_id}/verify:\001*' + _globals['_TOTPSERVICE'].methods_by_name['VerifyRegistrationCode']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002*\"%/api/v1/totp/{registration_id}/verify:\001*' _globals['_TOTPSERVICE'].methods_by_name['DisableTOTP']._loaded_options = None - _globals['_TOTPSERVICE'].methods_by_name['DisableTOTP']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002+\"&/api/v1/totp/{registration_id}/disable:\001*' - _globals['_TOTPREGISTRATIONREQUEST']._serialized_start=385 - _globals['_TOTPREGISTRATIONREQUEST']._serialized_end=501 - _globals['_TOTPREGISTRATIONRESPONSE']._serialized_start=503 - _globals['_TOTPREGISTRATIONRESPONSE']._serialized_end=620 - _globals['_TOTPREGISTRATION']._serialized_start=623 - _globals['_TOTPREGISTRATION']._serialized_end=1523 - _globals['_ENABLEREGISTRATIONTOTPREQUEST']._serialized_start=1525 - _globals['_ENABLEREGISTRATIONTOTPREQUEST']._serialized_end=1633 - _globals['_ENABLEREGISTRATIONTOTPRESPONSE']._serialized_start=1635 - _globals['_ENABLEREGISTRATIONTOTPRESPONSE']._serialized_end=1726 - _globals['_DISABLEREGISTRATIONTOTPREQUEST']._serialized_start=1728 - _globals['_DISABLEREGISTRATIONTOTPREQUEST']._serialized_end=1837 - _globals['_GENERATEQRCODEREQUEST']._serialized_start=1840 - _globals['_GENERATEQRCODEREQUEST']._serialized_end=1975 - _globals['_GENERATEQRCODERESPONSE']._serialized_start=1977 - _globals['_GENERATEQRCODERESPONSE']._serialized_end=2026 - _globals['_VERIFYUSERCODEREQUEST']._serialized_start=2028 - _globals['_VERIFYUSERCODEREQUEST']._serialized_end=2112 - _globals['_VERIFYCODERESPONSE']._serialized_start=2114 - _globals['_VERIFYCODERESPONSE']._serialized_end=2156 - _globals['_VERIFYREGISTRATIONCODEREQUEST']._serialized_start=2158 - _globals['_VERIFYREGISTRATIONCODEREQUEST']._serialized_end=2266 - _globals['_TOTPSERVICE']._serialized_start=2269 - _globals['_TOTPSERVICE']._serialized_end=3204 + _globals['_TOTPSERVICE'].methods_by_name['DisableTOTP']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002+\"&/api/v1/totp/{registration_id}/disable:\001*' + _globals['_TOTPREGISTRATIONREQUEST']._serialized_start=356 + _globals['_TOTPREGISTRATIONREQUEST']._serialized_end=472 + _globals['_TOTPREGISTRATIONRESPONSE']._serialized_start=474 + _globals['_TOTPREGISTRATIONRESPONSE']._serialized_end=591 + _globals['_TOTPREGISTRATION']._serialized_start=594 + _globals['_TOTPREGISTRATION']._serialized_end=1494 + _globals['_ENABLEREGISTRATIONTOTPREQUEST']._serialized_start=1496 + _globals['_ENABLEREGISTRATIONTOTPREQUEST']._serialized_end=1604 + _globals['_ENABLEREGISTRATIONTOTPRESPONSE']._serialized_start=1606 + _globals['_ENABLEREGISTRATIONTOTPRESPONSE']._serialized_end=1697 + _globals['_DISABLEREGISTRATIONTOTPREQUEST']._serialized_start=1699 + _globals['_DISABLEREGISTRATIONTOTPREQUEST']._serialized_end=1808 + _globals['_GENERATEQRCODEREQUEST']._serialized_start=1811 + _globals['_GENERATEQRCODEREQUEST']._serialized_end=1946 + _globals['_GENERATEQRCODERESPONSE']._serialized_start=1948 + _globals['_GENERATEQRCODERESPONSE']._serialized_end=1997 + _globals['_VERIFYUSERCODEREQUEST']._serialized_start=1999 + _globals['_VERIFYUSERCODEREQUEST']._serialized_end=2083 + _globals['_VERIFYCODERESPONSE']._serialized_start=2085 + _globals['_VERIFYCODERESPONSE']._serialized_end=2127 + _globals['_VERIFYREGISTRATIONCODEREQUEST']._serialized_start=2129 + _globals['_VERIFYREGISTRATIONCODEREQUEST']._serialized_end=2237 + _globals['_TOTPSERVICE']._serialized_start=2240 + _globals['_TOTPSERVICE']._serialized_end=3100 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/auth/totp_pb2.pyi b/scalekit/v1/auth/totp_pb2.pyi index 7a8b6b8..7b8d52d 100644 --- a/scalekit/v1/auth/totp_pb2.pyi +++ b/scalekit/v1/auth/totp_pb2.pyi @@ -1,7 +1,6 @@ from buf.validate import validate_pb2 as _validate_pb2 from google.api import annotations_pb2 as _annotations_pb2 from google.api import field_behavior_pb2 as _field_behavior_pb2 -from google.api import visibility_pb2 as _visibility_pb2 from google.protobuf import empty_pb2 as _empty_pb2 from google.protobuf import struct_pb2 as _struct_pb2 from google.protobuf import timestamp_pb2 as _timestamp_pb2 diff --git a/scalekit/v1/clients/clients_pb2.py b/scalekit/v1/clients/clients_pb2.py index 55fdcfe..087dc72 100644 --- a/scalekit/v1/clients/clients_pb2.py +++ b/scalekit/v1/clients/clients_pb2.py @@ -29,7 +29,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/clients/clients.proto\x12\x13scalekit.v1.clients\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a)scalekit/v1/connections/connections.proto\x1a!scalekit/v1/options/options.proto\"\x8a\x01\n\x15\x43reateResourceRequest\x12q\n\x08resource\x18\x01 \x01(\x0b\x32#.scalekit.v1.clients.CreateResourceB0\x92\x41\'2%Details of the resource to be created\xbaH\x03\xc8\x01\x01R\x08resource\"\x8e\r\n\x0e\x43reateResource\x12|\n\rresource_type\x18\x01 \x01(\x0e\x32!.scalekit.v1.clients.ResourceTypeB4\x92\x41+2\"Type of the resource to be createdJ\x05\"WEB\"\xbaH\x03\xc8\x01\x01R\x0cresourceType\x12K\n\x04name\x18\x02 \x01(\tB7\x92\x41)2\x14Name of the resourceJ\x11\"My API Resource\"\xbaH\x08r\x03\x18\x80\x01\xc8\x01\x01R\x04name\x12\x86\x01\n\x0b\x64\x65scription\x18\x03 \x01(\tBd\x92\x41Y2\x1b\x44\x65scription of the resourceJ:\"Resource for accessing your organization\'s API resources\"\xbaH\x05r\x03\x18\x80\x04R\x0b\x64\x65scription\x12\xab\x01\n\x0cresource_uri\x18\x04 \x01(\tB\x87\x01\x92\x41\x83\x01\x32\x61Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"R\x0bresourceUri\x12g\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x05 \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30R\x11\x61\x63\x63\x65ssTokenExpiry\x12k\n\x14refresh_token_expiry\x18\x06 \x01(\x03\x42\x39\x92\x41\x36\x32-Expiry time in seconds for the refresh token.J\x05\x38\x36\x34\x30\x30R\x12refreshTokenExpiry\x12\x9f\x01\n#disable_dynamic_client_registration\x18\x07 \x01(\x08\x42P\x92\x41M2EIndicates if dynamic client registration is allowed for this resourceJ\x04trueR disableDynamicClientRegistration\x12\x61\n\x08logo_uri\x18\x08 \x01(\tBF\x92\x41;2\x19Logo URI for the resourceJ\x1e\"https://example.com/logo.png\"\xbaH\x05r\x03\x18\x80\x04R\x07logoUri\x12X\n\x08provider\x18\t \x01(\tB<\x92\x41\x31\x32$Connection provider for the resourceJ\t\"DESCOPE\"\xbaH\x05r\x03\x18\x80\x04R\x08provider\x12\xa9\x01\n\x0bresource_id\x18\n \x01(\tB\x87\x01\x92\x41\x83\x01\x32\x61Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"R\nresourceId\x12i\n\x06scopes\x18\x0b \x03(\tBQ\x92\x41N21List of OAuth scopes associated with the resourceJ\x19[\"usr:read\", \"usr:write\"]R\x06scopes\x12\xac\x01\n intersect_scopes_user_permission\x18\x0c \x01(\x08\x42\x63\x92\x41`2XIndicates if the scopes should be intersected with user permissions for granular controlJ\x04trueR\x1dintersectScopesUserPermission\x12\x7f\n\x0b\x65nable_cimd\x18\r \x01(\x08\x42^\x92\x41[2RSpecifies whether Client ID Metadata Document (CIMD) is activated for the resourceJ\x05\x66\x61lseR\nenableCimd\"\x8c\x06\n\x0eResourceClient\x12\x44\n\x04name\x18\x01 \x01(\tB0\x92\x41%2\x12Name of the clientJ\x0f\"My API Client\"\xbaH\x05r\x03\x18\x80\x01R\x04name\x12\x82\x01\n\x0b\x64\x65scription\x18\x02 \x01(\tB`\x92\x41U2\x19\x44\x65scription of the clientJ8\"Client for accessing your organization\'s API resources\"\xbaH\x05r\x03\x18\x80\x04R\x0b\x64\x65scription\x12\x38\n\x06scopes\x18\x03 \x03(\tB \x92\x41\x1d\x32\x1bOAuth scopes for the clientR\x06scopes\x12\x62\n\x08\x61udience\x18\x04 \x03(\tBF\x92\x41\x43\x32$OAuth audience values for the clientJ\x1b[\"https://api.example.com\"]R\x08\x61udience\x12\xc6\x01\n\rcustom_claims\x18\x05 \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\x7f\x92\x41|2zCustom claims to be included in access tokens. Please keep this to the essentials as this increases the size of the token.R\x0c\x63ustomClaims\x12_\n\x06\x65xpiry\x18\x06 \x01(\x03\x42G\x92\x41\x44\x32\"https://example.com/.well-known/oauth-protected-resource/mcp\"R\x14protectedMetadataUri\x12\xb2\x01\n\x0bresource_id\x18\x0f \x01(\tB\x90\x01\x92\x41\x84\x01\x32\x62Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"\xbaH\x05r\x03\x18\x80\x04R\nresourceId\x12\xfb\x01\n\x06scopes\x18\x10 \x03(\x0b\x32\x1a.scalekit.v1.clients.ScopeB\xc6\x01\x92\x41\xc2\x01\x32OList of OAuth scopes associated with the resource with enabled or disabled flagJo[{\"id\": \"perm_\", \"name\": \"usr:read\", \"description\": \"Reading basic information of the users\", \"enabled\": true}]R\x06scopes\x12\xc3\x01\n\x12\x63onnection_details\x18\x11 \x01(\x0b\x32\'.scalekit.v1.clients.ResourceConnectionBk\x92\x41\x65\x32\x63\x44\x65tails of the own auth connection if any. For full stack this field will be empty or not populated\xe0\x41\x03R\x11\x63onnectionDetails\x12\x91\x01\n\x1a\x64isallow_connection_update\x18\x12 \x01(\x08\x42S\x92\x41M2DIndicates if updating the connection is disallowed for this resourceJ\x05\x66\x61lse\xe0\x41\x03R\x18\x64isallowConnectionUpdate\x12\xac\x01\n intersect_scopes_user_permission\x18\x13 \x01(\x08\x42\x63\x92\x41`2XIndicates if the scopes should be intersected with user permissions for granular controlJ\x04trueR\x1dintersectScopesUserPermission\x12\x7f\n\x0b\x65nable_cimd\x18\x14 \x01(\x08\x42^\x92\x41[2RSpecifies whether Client ID Metadata Document (CIMD) is activated for the resourceJ\x05\x66\x61lseR\nenableCimd\"\xf2\x01\n\x15RegisterClientRequest\x12i\n\x06res_id\x18\x01 \x01(\tBR\x92\x41\x43\x32(Unique identifier of the client resourceJ\x17\"app_69388798466720005\"\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x05resId\x12n\n\x06\x63lient\x18\x02 \x01(\x0b\x32#.scalekit.v1.clients.RegisterClientB1\x92\x41(2&Details of the client to be registered\xbaH\x03\xc8\x01\x01R\x06\x63lient\"\x96\x06\n\x0eRegisterClient\x12Q\n\x0b\x63lient_name\x18\x01 \x01(\tB0\x92\x41%2\x12Name of the clientJ\x0f\"My API Client\"\xbaH\x05r\x03\x18\x80\x01R\nclientName\x12\x82\x01\n\x0b\x64\x65scription\x18\x02 \x01(\tB`\x92\x41U2\x19\x44\x65scription of the clientJ8\"Client for accessing your organization\'s API resources\"\xbaH\x05r\x03\x18\x80\x04R\x0b\x64\x65scription\x12g\n\rredirect_uris\x18\x03 \x03(\tBB\x92\x41?2\x1bRedirect URI for the clientJ [\"https://example.com/callback\"]R\x0credirectUris\x12Y\n\x05scope\x18\x04 \x01(\tBC\x92\x41@2\x1bOAuth scopes for the clientJ![\"read:users\", \"write:resources\"]R\x05scope\x12T\n\nclient_uri\x18\x05 \x01(\tB5\x92\x41\x32\x32\x19\x43lient URI for the clientJ\x15\"https://example.com\"R\tclientUri\x12W\n\x08logo_uri\x18\x06 \x01(\tB<\x92\x41\x39\x32\x17Logo URI for the clientJ\x1e\"https://example.com/logo.png\"R\x07logoUri\x12\\\n\x07tos_uri\x18\x07 \x01(\tBC\x92\x41@2#Terms of Service URI for the clientJ\x19\"https://example.com/tos\"R\x06tosUri\x12[\n\npolicy_uri\x18\x08 \x01(\tB<\x92\x41\x39\x32\x19Policy URI for the clientJ\x1c\"https://example.com/policy\"R\tpolicyUri\"\xb9\x17\n\x16RegisterClientResponse\x12\xfc\x01\n\tclient_id\x18\x01 \x01(\tB\xde\x01\x92\x41\xda\x01\x32\xbc\x01The unique identifier for this M2M client. This ID is used to identify the client in API requests and logs. It is automatically generated when the client is created and cannot be modified.J\x19\"m2morg_1231234233424344\"R\x08\x63lientId\x12\xb3\x02\n\x07secrets\x18\x02 \x03(\x0b\x32!.scalekit.v1.clients.ClientSecretB\xf5\x01\x92\x41\xf1\x01\x32\xee\x01List of client secrets associated with this client. Each secret can be used for authentication, but only the most recently created secret is typically active. Secrets are stored securely and their values are never returned after creation.R\x07secrets\x12\xa2\x01\n\x04name\x18\x03 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32\x62The display name of the M2M client. This name helps identify the client in the dashboard and logs.J#\"GitHub Actions Deployment Service\"R\x04name\x12\xda\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tB\xb7\x01\x92\x41\xb3\x01\x32{A detailed description of the client\'s purpose and usage. This helps administrators understand what the client is used for.J4\"Service account for automated deployment processes\"R\x0b\x64\x65scription\x12\xd5\x01\n\x0b\x63reate_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x97\x01\x92\x41\x93\x01\x32uThe timestamp when this M2M client was created. This field is automatically set by the server and cannot be modified.J\x1a\"2024-01-05T14:48:00.000Z\"R\ncreateTime\x12\xf4\x01\n\x0bupdate_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xb6\x01\x92\x41\xb2\x01\x32\x93\x01The timestamp when this M2M client was last updated. This field is automatically updated by the server whenever the client\'s configuration changes.J\x1a\"2024-01-05T14:48:00.000Z\"R\nupdateTime\x12\xbe\x01\n\x06scopes\x18\x07 \x03(\tB\xa5\x01\x92\x41\xa1\x01\x32uThe OAuth 2.0 scopes granted to this client. These scopes determine what resources and actions the client can access.J([\"deploy:resources\", \"read:deployments\"]R\x06scopes\x12\xc7\x01\n\x08\x61udience\x18\x08 \x03(\tB\xaa\x01\x92\x41\xa6\x01\x32\x86\x01The intended recipients of access tokens issued to this client. Each audience value should be a URI that identifies an API or service.J\x1b[\"https://api.example.com\"]R\x08\x61udience\x12\xec\x01\n\rcustom_claims\x18\t \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\xa4\x01\x92\x41\xa0\x01\x32\x9d\x01\x41\x64\x64itional claims included in access tokens issued to this client. These claims provide context about the client and can be used for authorization decisions.R\x0c\x63ustomClaims\x12\xb2\x01\n\x06\x65xpiry\x18\n \x01(\x03\x42\x99\x01\x92\x41\x95\x01\x32\x8c\x01The lifetime of access tokens issued to this client, in seconds. This determines how long a token remains valid before it must be refreshed.J\x04\x33\x36\x30\x30R\x06\x65xpiry\x12\xc4\x01\n\x0bresource_id\x18\x0b \x01(\tB\xa2\x01\x92\x41\x9e\x01\x32\x83\x01The ID of the resource associated with this M2M client. This field is used to link the client to a specific resource in the system.J\x16\"app_1231234233424344\"R\nresourceId\x12\xd1\x01\n\rredirect_uris\x18\x0c \x03(\tB\xab\x01\x92\x41\xa7\x01\x32\x82\x01The redirect URI for this M2M client. This URI is used in the OAuth 2.0 authorization flow to redirect users after authentication.J [\"https://example.com/callback\"]R\x0credirectUris\x12~\n\rclient_secret\x18\r \x01(\tBY\x92\x41V24Client secret value (only returned once at creation)J\x1e\"CdExsdErfccxDDssddfffgfeFHH1\"R\x0c\x63lientSecret\x12\xce\x01\n\x18\x63lient_secret_expires_at\x18\x0e \x01(\x05\x42\x94\x01\x92\x41\x90\x01\x32rClient secret expiry time in RFC3339 format. If the client secret does not expire, this field will be set to null.J\x1a\"2024-12-31T23:59:59.000Z\"R\x15\x63lientSecretExpiresAt\"\xdd\x02\n\x14ListResourcesRequest\x12r\n\rresource_type\x18\x01 \x01(\x0e\x32!.scalekit.v1.clients.ResourceTypeB*\x92\x41!2\x18\x46ilter resources by typeJ\x05\"WEB\"\xbaH\x03\xc8\x01\x01R\x0cresourceType\x12]\n\npage_token\x18\x02 \x01(\tB>\x92\x41;2\"Token for the next page of resultsJ\x15\"next_page_token_123\"R\tpageToken\x12r\n\tpage_size\x18\x03 \x01(\rBU\x92\x41K2ENumber of resources to return per page. Maximum is 30. Default is 10.J\x02\x32\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\"\xdb\x02\n\x15ListResourcesResponse\x12G\n\ntotal_size\x18\x01 \x01(\rB(\x92\x41%2#Total number of resources availableR\ttotalSize\x12O\n\x0fnext_page_token\x18\x02 \x01(\tB\'\x92\x41$2\"Token for the next page of resultsR\rnextPageToken\x12S\n\tresources\x18\x03 \x03(\x0b\x32\x1d.scalekit.v1.clients.ResourceB\x16\x92\x41\x13\x32\x11List of resourcesR\tresources\x12S\n\x0fprev_page_token\x18\x04 \x01(\tB+\x92\x41(2&Token for the previous page of resultsR\rprevPageToken\"\xaf\x02\n\x15UpdateResourceRequest\x12s\n\x0bresource_id\x18\x01 \x01(\tBR\x92\x41\x46\x32+Unique identifier of the resource to updateJ\x17\"app_69388798466720005\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\x12\x64\n\x08resource\x18\x02 \x01(\x0b\x32#.scalekit.v1.clients.UpdateResourceB#\x92\x41\x1a\x32\x18Updated resource details\xbaH\x03\xc8\x01\x01R\x08resource\x12;\n\x0bupdate_mask\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskR\nupdateMask\"\xa1\x0e\n\x0eUpdateResource\x12P\n\x04name\x18\x01 \x01(\tB<\x92\x41\x31\x32\x14Name of the resourceJ\x19\"My Updated API Resource\"\xbaH\x05r\x03\x18\x80\x01R\x04name\x12\x8e\x01\n\x0b\x64\x65scription\x18\x02 \x01(\tBl\x92\x41\x61\x32\x1b\x44\x65scription of the resourceJB\"Updated resource for accessing your organization\'s API resources\"\xbaH\x05r\x03\x18\x80\x04R\x0b\x64\x65scription\x12\xab\x01\n\x0cresource_uri\x18\x03 \x01(\tB\x87\x01\x92\x41\x83\x01\x32\x61Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"R\x0bresourceUri\x12g\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x04 \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30R\x11\x61\x63\x63\x65ssTokenExpiry\x12k\n\x14refresh_token_expiry\x18\x05 \x01(\x03\x42\x39\x92\x41\x36\x32-Expiry time in seconds for the refresh token.J\x05\x38\x36\x34\x30\x30R\x12refreshTokenExpiry\x12\xbb\x01\n#disable_dynamic_client_registration\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBP\x92\x41M2EIndicates if dynamic client registration is allowed for this resourceJ\x04trueR disableDynamicClientRegistration\x12\x61\n\x08logo_uri\x18\x07 \x01(\tBF\x92\x41;2\x19Logo URI for the resourceJ\x1e\"https://example.com/logo.png\"\xbaH\x05r\x03\x18\x80\x04R\x07logoUri\x12X\n\x08provider\x18\n \x01(\tB<\x92\x41\x31\x32$Connection provider for the resourceJ\t\"DESCOPE\"\xbaH\x05r\x03\x18\x80\x04R\x08provider\x12\xa9\x01\n\x0bresource_id\x18\x0b \x01(\tB\x87\x01\x92\x41\x83\x01\x32\x61Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"R\nresourceId\x12i\n\x06scopes\x18\x0c \x03(\tBQ\x92\x41N21List of OAuth scopes associated with the resourceJ\x19[\"usr:read\", \"usr:write\"]R\x06scopes\x12\xa7\x01\n\x1a\x63ustom_connection_settings\x18\r \x01(\x0b\x32\x35.scalekit.v1.clients.ResourceCustomConnectionSettingsB0\x92\x41-2+Custom connection settings for the resourceH\x00R\x18\x63ustomConnectionSettings\x12\xc8\x01\n intersect_scopes_user_permission\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueBc\x92\x41`2XIndicates if the scopes should be intersected with user permissions for granular controlJ\x04trueR\x1dintersectScopesUserPermission\x12\x94\x01\n\x0b\x65nable_cimd\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueBW\x92\x41T2KIndicates if CIMD (Client ID Metadata Document) is enabled for the resourceJ\x05\x66\x61lseR\nenableCimdB\n\n\x08settings\"y\n\x16UpdateResourceResponse\x12_\n\x08resource\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.clients.ResourceB$\x92\x41!2\x1f\x44\x65tails of the updated resourceR\x08resource\"\xfc\x01\n\x1b\x43reateResourceClientRequest\x12p\n\x0bresource_id\x18\x01 \x01(\tBO\x92\x41\x43\x32(Unique identifier of the client resourceJ\x17\"app_69388798466720005\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\x12k\n\x06\x63lient\x18\x02 \x01(\x0b\x32#.scalekit.v1.clients.ResourceClientB.\x92\x41%2#Details of the client to be created\xbaH\x03\xc8\x01\x01R\x06\x63lient\"\xf8\x01\n\x1c\x43reateResourceClientResponse\x12Z\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1e.scalekit.v1.clients.M2MClientB\"\x92\x41\x1f\x32\x1d\x44\x65tails of the created clientR\x06\x63lient\x12|\n\x0cplain_secret\x18\x02 \x01(\tBY\x92\x41V24Client secret value (only returned once at creation)J\x1e\"CdExsdErfccxDDssddfffgfeFHH1\"R\x0bplainSecret\"\xc7\x03\n\x1bUpdateResourceClientRequest\x12i\n\x0bresource_id\x18\x01 \x01(\tBH\x92\x41<2!Unique identifier of the resourceJ\x17\"res_69388798466720005\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\x12\x63\n\tclient_id\x18\x02 \x01(\tBF\x92\x41:2\x1fUnique identifier of the clientJ\x17\"m2m_12345678901234567\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\x12\x66\n\x06\x63lient\x18\x03 \x01(\x0b\x32#.scalekit.v1.clients.ResourceClientB)\x92\x41 2\x1e\x46ields of the client to update\xbaH\x03\xc8\x01\x01R\x06\x63lient\x12p\n\x0bupdate_mask\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB3\x92\x41\x30\x32.Mask specifying which fields should be updatedR\nupdateMask\"s\n\x1cUpdateResourceClientResponse\x12S\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1e.scalekit.v1.clients.M2MClientB\x1b\x92\x41\x18\x32\x16Updated client detailsR\x06\x63lient\"\x96\x02\n\x18GetResourceClientRequest\x12u\n\x0bresource_id\x18\x01 \x01(\tBT\x92\x41H24Unique identifier of the client resource to retrieveJ\x10\"skc_1234567890\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\x12\x82\x01\n\tclient_id\x18\x02 \x01(\tBe\x92\x41Y2\x92\x41;2.Case-insensitive search over external user IDsJ\t\"usr_123\"R\x06search\x12[\n\tpage_size\x18\x03 \x01(\rB>\x92\x41\x34\x32.Number of consents to return per page (max 30)J\x02\x32\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\x63\n\npage_token\x18\x04 \x01(\tBD\x92\x41\x41\x32\x33Pagination token to fetch the next or previous pageJ\n\">:abc123\"R\tpageToken\"\x8c\x03\n ListResourceUserConsentsResponse\x12V\n\ntotal_size\x18\x01 \x01(\rB7\x92\x41\x34\x32\x32Total number of user consents matching the requestR\ttotalSize\x12T\n\x0fnext_page_token\x18\x02 \x01(\tB,\x92\x41)2\'Pagination token to fetch the next pageR\rnextPageToken\x12`\n\x08\x63onsents\x18\x03 \x03(\x0b\x32(.scalekit.v1.clients.ResourceUserConsentB\x1a\x92\x41\x17\x32\x15List of user consentsR\x08\x63onsents\x12X\n\x0fprev_page_token\x18\x04 \x01(\tB0\x92\x41-2+Pagination token to fetch the previous pageR\rprevPageToken\"\xdc\x04\n\x13ResourceUserConsent\x12X\n\x02id\x18\x01 \x01(\tBH\x92\x41\x45\x32%Unique identifier of the user consentJ\x1c\"usrcnst_102709535608668163\"R\x02id\x12r\n\x10\x65xternal_user_id\x18\x02 \x01(\tBH\x92\x41\x45\x32*External identifier of the consenting userJ\x17\"usr_83562895790637841\"R\x0e\x65xternalUserId\x12`\n\tclient_id\x18\x03 \x01(\tBC\x92\x41@2-Client identifier associated with the consentJ\x0f\"m2m_123123123\"R\x08\x63lientId\x12\x44\n\x0b\x63lient_name\x18\x04 \x01(\tB#\x92\x41 2\x14Readable client nameJ\x08\"MCPJam\"R\nclientName\x12O\n\x06scopes\x18\x05 \x03(\tB7\x92\x41\x34\x32\x1dScopes granted in the consentJ\x13[\"openid\", \"email\"]R\x06scopes\x12~\n\ngranted_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampBC\x92\x41@2\"Timestamp when consent was grantedJ\x1a\"2025-12-09T13:27:29.810Z\"R\tgrantedAt\"\xa0\x01\n\x1aListResourceClientsRequest\x12\x81\x01\n\x0bresource_id\x18\x01 \x01(\tB`\x92\x41T2@Unique identifier of the resource whose clients are to be listedJ\x10\"skc_1234567890\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\"\xf0\x02\n\x1bListResourceClientsResponse\x12k\n\x07\x63lients\x18\x02 \x03(\x0b\x32\x1e.scalekit.v1.clients.M2MClientB1\x92\x41.2,List of clients associated with the resourceR\x07\x63lients\x12i\n\x11total_dcr_clients\x18\x03 \x01(\x05\x42=\x92\x41:28Total number of DCR clients associated with the resourceR\x0ftotalDcrClients\x12s\n\x14total_static_clients\x18\x04 \x01(\x05\x42\x41\x92\x41>2\"R\tpageToken:\xec\x01\x92\x41\xe8\x01\n\xa8\x01*!List Organization Clients Request2\x82\x01Request message for listing API clients within a specific organization. Supports pagination for handling large numbers of clients.*;\n\x11\x41PI Documentation\x12&https://docs.scalekit.com/m2m/overview\"\xa5\x06\n\x1fListOrganizationClientsResponse\x12\x97\x01\n\x0fnext_page_token\x18\x01 \x01(\tBo\x92\x41l2UPagination token for the next page of results. Use this token to fetch the next page.J\x13\"\"R\rnextPageToken\x12X\n\ntotal_size\x18\x02 \x01(\rB9\x92\x41\x36\x32\x30Total number of API clients in the organization.J\x02\x33\x30R\ttotalSize\x12\xe0\x01\n\x07\x63lients\x18\x03 \x03(\x0b\x32\x1e.scalekit.v1.clients.M2MClientB\xa5\x01\x92\x41\xa1\x01\x32\x9e\x01List of API client objects for the organization. Each client includes its configuration, metadata, and active secrets (without exposing actual secret values).R\x07\x63lients\x12\x9f\x01\n\x0fprev_page_token\x18\x04 \x01(\tBw\x92\x41t2]Pagination token for the previous page of results. Use this token to fetch the previous page.J\x13\"\"R\rprevPageToken:\x88\x01\x92\x41\x84\x01\n\x81\x01*\"List Organization Clients Response2[Response message containing a paginated list of API clients for the specified organization.\"\x83\x03\n\x1f\x44\x65leteOrganizationClientRequest\x12\xb0\x01\n\x0forganization_id\x18\x01 \x01(\tB\x86\x01\x92\x41t2ZUnique identifier of the organization that owns the client. Must start with \'org_\' prefix.J\x16\"org_1231234233424344\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xac\x01\n\tclient_id\x18\x02 \x01(\tB\x8e\x01\x92\x41y2\\Unique identifier of the API client to permanently delete. Must start with \'m2morg_\' prefix.J\x19\"m2morg_1231234233424344\"\xbaH\x0fr\r\x10\x01\x18 :\x07m2morg_R\x08\x63lientId\"\xa5\x01\n\x10GetClientRequest\x12\x90\x01\n\tclient_id\x18\x01 \x01(\tBs\x92\x41g2SUnique identifier of the client resource to retrieve. Must be 1-32 characters long.J\x10\"skc_1234567890\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\"\xf5\x01\n\x11GetClientResponse\x12\xdf\x01\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.clients.ClientB\xa9\x01\x92\x41\xa5\x01\x32\xa2\x01\x43omplete client configuration including authentication settings, redirect URIs, and secrets. This contains all current settings for the requested client resource.R\x06\x63lient\"\xe1\x06\n\x12ListClientsRequest\x12\xf2\x01\n\x14include_plain_secret\x18\x01 \x01(\x08\x42\xbf\x01\x92\x41\xbb\x01\x32\xb1\x01Whether to include plain secret values in the response. Enable only during initial client creation, then store secrets securely. Not available when filtering by ALL client typesJ\x05\x66\x61lseR\x12includePlainSecret\x12\x85\x01\n\x06\x66ilter\x18\x03 \x01(\x0b\x32..scalekit.v1.clients.ListClientsRequest.FilterB=\x92\x41:28Filters clients by type: ENV, WEB_APP, NTV, SPA, or ALL.R\x06\x66ilter\x12]\n\npage_token\x18\x04 \x01(\tB>\x92\x41;2\"Token for the next page of resultsJ\x15\"next_page_token_123\"R\tpageToken\x12\x64\n\tpage_size\x18\x05 \x01(\rBG\x92\x41=27Number of clients per page. Defaults to 10, maximum 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x1a\x82\x02\n\x06\x46ilter\x12\xf7\x01\n\x0b\x63lient_type\x18\x01 \x03(\tB\xd5\x01\x92\x41\xd1\x01\x32\xce\x01\x46ilters clients by type. Valid values: ENV, WEB_APP, NTV, SPA, ALL. Defaults to ENV. ALL takes precedence and other types are ignored. For resource-specific clients (e.g., M2M), use ListResourceClients API.R\nclientTypeJ\x04\x08\x02\x10\x03\"\xf1\x03\n\x13ListClientsResponse\x12Z\n\ntotal_size\x18\x01 \x01(\rB;\x92\x41\x38\x32\x32Total number of client resources in the workspace.J\x02\x31\x32R\ttotalSize\x12\xc1\x01\n\x07\x63lients\x18\x02 \x03(\x0b\x32\x1b.scalekit.v1.clients.ClientB\x89\x01\x92\x41\x85\x01\x32\x82\x01List of client resource configurations matching the query criteria. Each client includes its metadata and authentication settings.R\x07\x63lients\x12\x65\n\x0fnext_page_token\x18\x03 \x01(\tB=\x92\x41:28Pagination token that retrieves the next page of resultsR\rnextPageToken\x12S\n\x0fprev_page_token\x18\x04 \x01(\tB+\x92\x41(2&Token for the previous page of resultsR\rprevPageToken\"\xed\x01\n\x13\x43reateClientRequest\x12\xd5\x01\n\x06\x63lient\x18\x01 \x01(\x0b\x32!.scalekit.v1.clients.CreateClientB\x99\x01\x92\x41\x8f\x01\x32\x1b\x43lient parameters to createJp{\"post_login_uris\": [\"https://app.example.com/callback\"], \"initiate_login_uri\": \"https://app.example.com/login\"}\xbaH\x03\xc8\x01\x01R\x06\x63lient\"\xeb\x17\n\x0c\x43reateClient\x12\xde\x01\n\x04name\x18\x01 \x01(\tB\xc9\x01\x92\x41\xba\x01\x32\x9e\x01\x41 descriptive name for the API client that helps identify its purpose. This name is displayed in the dashboard and logs. Must be between 1 and 128 characters.J\x17\"My Application Client\"\xbaH\x08r\x03\x18\x80\x01\xc8\x01\x01R\x04name\x12\xd6\x01\n\x0b\x63lient_type\x18\x02 \x01(\tB\xb4\x01\x92\x41\xa5\x01\x32\x99\x01\x43lient application type. Valid values: WEB_APP (web applications), SPA (single-page applications), NTV (native applications including mobile and desktop)J\x07WEB_APP\xbaH\x08r\x03\x18\x80\x01\xc8\x01\x01R\nclientType\x12\xb6\x02\n\x18\x62\x61\x63k_channel_logout_uris\x18\x03 \x03(\tB\xfc\x01\x92\x41\xe9\x01\x32wHTTPS endpoints that receive back-channel logout notifications for application-initiated logout and session management.Jn[\"https://app.example.com/backchannel-logout-internal\", \"https://app.example.com/backchannel-logout-external\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\x15\x62\x61\x63kChannelLogoutUris\x12\xb6\x02\n\x19post_logout_redirect_uris\x18\x04 \x03(\tB\xfa\x01\x92\x41\xe7\x01\x32\x9c\x01\x41llowed URIs for post-logout redirection. These URIs are used when a user is redirected after logout. Must use HTTPS and conform to security specifications.JF[\"https://app.example.com/logged-out\", \"https://app.example.com/home\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\x16postLogoutRedirectUris\x12\xff\x01\n\x12initiate_login_uri\x18\x05 \x01(\tB\xcb\x01\x92\x41\xc7\x01\x32\xa3\x01Pre-configured URI for initiating login flows. This URI is used to start authentication flows programmatically. Must use HTTPS protocol and contain a valid domain.J\x1f\"https://app.example.com/login\"H\x00R\x10initiateLoginUri\x88\x01\x01\x12\x9c\x02\n\x0fpost_login_uris\x18\x06 \x03(\tB\xf3\x01\x92\x41\xe7\x01\x32\x9e\x01List of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTPS in production environments. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\xbaH\x05\x92\x01\x02\x18\x01R\rpostLoginUris\x12g\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x07 \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30R\x11\x61\x63\x63\x65ssTokenExpiry\x12\xb3\x01\n\x06scopes\x18\x08 \x03(\tB\x9a\x01\x92\x41\x96\x01\x32wList of scopes to be attached to this client. These scopes must be a subset of the scopes available in the environment.J\x1b[\"data:read\", \"data:write\"]R\x06scopes\x12\xc6\x01\n\rcustom_claims\x18\t \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\x7f\x92\x41|2zCustom claims to be included in access tokens. Please keep this to the essentials as this increases the size of the token.R\x0c\x63ustomClaims\x12\xf0\x01\n\x1c\x64isallow_scalekit_api_access\x18\n \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x92\x01\x92\x41\x8e\x01\x32\x85\x01If set to true, the client will be restricted from accessing Scalekit APIs directly, enhancing security by limiting its capabilities.J\x04trueR\x19\x64isallowScalekitApiAccess\x12\xe0\x01\n\x0bgrant_types\x18\x0b \x03(\tB\xbe\x01\x92\x41\xba\x01\x32yList of OAuth 2.0 grant types that the client is authorized to use. This defines how the client can obtain access tokens.J=[\"authorization_code\", \"refresh_token\", \"client_credentials\"]R\ngrantTypes\x12\xe1\x01\n\x0c\x65nforce_pkce\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xa1\x01\x92\x41\x9d\x01\x32\x94\x01Whether Proof Key for Code Exchange (PKCE) is required. PKCE mitigates authorization code interception attacks. Defaults to true for public clients.J\x04trueR\x0b\x65nforcePkce:\xd4\x01\x92\x41\xd0\x01\n\x9c\x01*\rCreate Client2\x8a\x01Request message for creating a new API client with specified configuration parameters including redirect URIs and authentication settings.*/\n\x11\x41PI Documentation\x12\x1ahttps://docs.scalekit.com/B\x15\n\x13_initiate_login_uri\"\x8c\x01\n\x14\x43reateClientResponse\x12t\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.clients.ClientB?\x92\x41<2:Created client with all settings reflected in the responseR\x06\x63lient\"\xc3\x03\n\x13UpdateClientRequest\x12}\n\tclient_id\x18\x01 \x01(\tB`\x92\x41T2:Unique identifier of the registered application to update.J\x16\"skc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\x12\xe8\x01\n\x06\x63lient\x18\x02 \x01(\x0b\x32!.scalekit.v1.clients.UpdateClientB\xac\x01\x92\x41\xa2\x01\x32\x65\x41pplication configuration parameters to update. Contains post_login_uris and authentication settings.J9{\"post_login_uris\": [\"https://app.example.com/callback\"]}\xbaH\x03\xc8\x01\x01R\x06\x63lient\x12\x42\n\x04mask\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB\x12\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\x04mask\"\xf4\x16\n\x0cUpdateClient\x12\xc3\x02\n\x18\x62\x61\x63k_channel_logout_uris\x18\x04 \x03(\tB\x89\x02\x92\x41\xf6\x01\x32\x95\x01HTTPS endpoints for receiving back-channel logout notifications. Required for implementing application-initiated logout flows and session management.J\\[\"https://app.example.com/backchannel-logout\", \"https://app.example.com/backchannel-logout\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\x15\x62\x61\x63kChannelLogoutUris\x12\xb6\x02\n\x19post_logout_redirect_uris\x18\x05 \x03(\tB\xfa\x01\x92\x41\xe7\x01\x32\x9c\x01\x41llowed URIs for post-logout redirection. These URIs are used when a user is redirected after logout. Must use HTTPS and conform to security specifications.JF[\"https://app.example.com/logged-out\", \"https://app.example.com/home\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\x16postLogoutRedirectUris\x12\xff\x01\n\x12initiate_login_uri\x18\x06 \x01(\tB\xcb\x01\x92\x41\xc7\x01\x32\xa3\x01Pre-configured URI for initiating login flows. This URI is used to start authentication flows programmatically. Must use HTTPS protocol and contain a valid domain.J\x1f\"https://app.example.com/login\"H\x00R\x10initiateLoginUri\x88\x01\x01\x12\x9c\x02\n\x0fpost_login_uris\x18\x07 \x03(\tB\xf3\x01\x92\x41\xe7\x01\x32\x9e\x01List of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTPS in production environments. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\xbaH\x05\x92\x01\x02\x18\x01R\rpostLoginUris\x12\xd3\x01\n\x04name\x18\x08 \x01(\tB\xbe\x01\x92\x41\xba\x01\x32\x9e\x01\x41 descriptive name for the API client that helps identify its purpose. This name is displayed in the dashboard and logs. Must be between 1 and 128 characters.J\x17\"My Application Client\"R\x04name\x12g\n\x13\x61\x63\x63\x65ss_token_expiry\x18\t \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30R\x11\x61\x63\x63\x65ssTokenExpiry\x12\xb3\x01\n\x06scopes\x18\x0b \x03(\tB\x9a\x01\x92\x41\x96\x01\x32wList of scopes to be attached to this client. These scopes must be a subset of the scopes available in the environment.J\x1b[\"data:read\", \"data:write\"]R\x06scopes\x12\xc6\x01\n\rcustom_claims\x18\x0c \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\x7f\x92\x41|2zCustom claims to be included in access tokens. Please keep this to the essentials as this increases the size of the token.R\x0c\x63ustomClaims\x12\xf0\x01\n\x1c\x64isallow_scalekit_api_access\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x92\x01\x92\x41\x8e\x01\x32\x85\x01If set to true, the client will be restricted from accessing Scalekit APIs directly, enhancing security by limiting its capabilities.J\x04trueR\x19\x64isallowScalekitApiAccess\x12\xe0\x01\n\x0bgrant_types\x18\x0e \x03(\tB\xbe\x01\x92\x41\xba\x01\x32yList of OAuth 2.0 grant types that the client is authorized to use. This defines how the client can obtain access tokens.J=[\"authorization_code\", \"refresh_token\", \"client_credentials\"]R\ngrantTypes\x12\xe1\x01\n\x0c\x65nforce_pkce\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xa1\x01\x92\x41\x9d\x01\x32\x94\x01Whether Proof Key for Code Exchange (PKCE) is required. PKCE mitigates authorization code interception attacks. Defaults to true for public clients.J\x04trueR\x0b\x65nforcePkce:\x83\x02\x92\x41\xff\x01\n\xbf\x01*\x1bUpdate Client Configuration2\x9f\x01Parameters for updating an API client application\'s configuration. This allows modification of post_login_uris, logout settings, and other security parameters.*;\n\x11\x41PI Documentation\x12&https://docs.scalekit.com/m2m/overviewB\x15\n\x13_initiate_login_uriJ\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04R\rredirect_urisR\x14\x64\x65\x66\x61ult_redirect_uri\"\xa8\x01\n\x14UpdateClientResponse\x12\x8f\x01\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.clients.ClientBZ\x92\x41W2UUpdated application configuration with all current settings reflected in the responseR\x06\x63lient\"\xae\x01\n\x19\x43reateClientSecretRequest\x12\x90\x01\n\tclient_id\x18\x01 \x01(\tBs\x92\x41g2MUnique identifier of the client application for which to create a new secret.J\x16\"skc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\"\xad\x03\n\x1a\x43reateClientSecretResponse\x12\xc6\x01\n\x0cplain_secret\x18\x01 \x01(\tB\xa2\x01\x92\x41\x9e\x01\x32\x84\x01Plaintext secret value. This value is only returned once at creation time and must be stored securely. It cannot be retrieved again.J\x15\"sec_plaintext123456\"R\x0bplainSecret\x12\xc5\x01\n\x06secret\x18\x02 \x01(\x0b\x32!.scalekit.v1.clients.ClientSecretB\x89\x01\x92\x41\x85\x01\x32\x82\x01Metadata about the newly created secret, including its ID, creation time, and status. Does not include the plaintext secret value.R\x06secret\"\x83\x05\n\x19UpdateClientSecretRequest\x12\x8f\x01\n\tclient_id\x18\x01 \x01(\tBr\x92\x41\x66\x32LUnique identifier of the client application containing the secret to update.J\x16\"skc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\x12\xab\x01\n\tsecret_id\x18\x02 \x01(\tB\x8d\x01\x92\x41\x80\x01\x32\x66Unique identifier of the client secret to update. This references a specific secret within the client.J\x16\"sec_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08secretId\x12\xb0\x01\n\x06secret\x18\x03 \x01(\x0b\x32\'.scalekit.v1.clients.UpdateClientSecretBo\x92\x41\x66\x32\x64Updated settings for the secret. Currently supports modifying the secret\'s status (active/inactive).\xbaH\x03\xc8\x01\x01R\x06secret\x12s\n\x04mask\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskBC\x92\x41@2>Specifies which fields to update. System-controlled parameter.R\x04mask\"\xec\x01\n\x12UpdateClientSecret\x12\xd5\x01\n\x06status\x18\x01 \x01(\x0e\x32\'.scalekit.v1.clients.ClientSecretStatusB\x93\x01\x92\x41\x8f\x01\x32\x82\x01Status to set for the client secret. Set to ACTIVE to enable the secret for authentication, or INACTIVE to temporarily disable it.J\x08INACTIVER\x06status\"\xe7\x01\n\x1aUpdateClientSecretResponse\x12\xc8\x01\n\x06secret\x18\x01 \x01(\x0b\x32!.scalekit.v1.clients.ClientSecretB\x8c\x01\x92\x41\x88\x01\x32\x85\x01Updated secret metadata, reflecting the changes made by the update operation. Note that the plaintext secret value is never returned.R\x06secret\"\x85\x01\n\x13\x44\x65leteClientRequest\x12n\n\tclient_id\x18\x01 \x01(\tBQ\x92\x41\x45\x32*Unique identifier of the client to delete.J\x17\"webc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\"\xb3\x02\n\x19\x44\x65leteClientSecretRequest\x12q\n\tclient_id\x18\x01 \x01(\tBT\x92\x41H2.Identifier of the client containing the secretJ\x16\"skc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\x12\xa2\x01\n\tsecret_id\x18\x02 \x01(\tB\x84\x01\x92\x41x2^Unique identifier of the client secret to permanently delete. This operation cannot be undone.J\x16\"sec_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08secretId\"\xa8\x1e\n\x06\x43lient\x12\xe2\x01\n\x02id\x18\x01 \x01(\tB\xd1\x01\x92\x41\xcd\x01\x32\xb2\x01Unique identifier for the client application. This ID is automatically generated when the client is created and cannot be modified. Used in API requests and authentication flows.J\x16\"skc_1234abcd5678efgh\"R\x02id\x12\xd7\x01\n\x05keyId\x18\x02 \x01(\tB\xc0\x01\x92\x41\xbc\x01\x32\xa1\x01Identifier for the cryptographic key pair used to sign tokens. This key is used for JWT signing operations. Keys can be rotated by generating new client secrets.J\x16\"key_9876zyxw5432vuts\"R\x05keyId\x12\xf0\x01\n\x0b\x63reate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xb2\x01\x92\x41\xae\x01\x32\x8f\x01Timestamp indicating when the client configuration was initially created. This field is automatically set by the server and cannot be modified.J\x1a\"2024-01-05T14:48:00.000Z\"R\ncreateTime\x12\x81\x02\n\x0bupdate_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xc3\x01\x92\x41\xbf\x01\x32\xa0\x01Timestamp of the last modification to the client configuration. This field is automatically updated by the server whenever any aspect of the client is modified.J\x1a\"2024-01-10T09:12:00.000Z\"R\nupdateTime\x12\xa5\x02\n\x07secrets\x18\x07 \x03(\x0b\x32!.scalekit.v1.clients.ClientSecretB\xe7\x01\x92\x41\xe3\x01\x32\xe0\x01List of client secrets used for authentication. Each secret is stored securely using one-way hashing (bcrypt). The plaintext secret values are only displayed during initial creation and must be stored securely by the client.R\x07secrets\x12\xa3\x02\n\x19post_logout_redirect_uris\x18\x08 \x03(\tB\xe7\x01\x92\x41\xe3\x01\x32\xba\x01\x41llowed URIs for post-logout redirection. These URIs are used when a user is redirected after signing out. Must use HTTPS and conform to OpenID Connect Session Management specifications.J$[\"https://auth.your-app.com/logout\"]R\x16postLogoutRedirectUris\x12\xc9\x02\n\x18\x62\x61\x63k_channel_logout_uris\x18\t \x03(\tB\x8f\x02\x92\x41\x8b\x02\x32\xd8\x01HTTPS endpoint for receiving back-channel logout notifications. This URI is called by the authentication server when a session expires or is terminated. Required for implementing relying party-initiated logout flows.J.\"https://auth.your-app.com/backchannel-logout\"R\x15\x62\x61\x63kChannelLogoutUris\x12\xa0\x02\n\x12initiate_login_uri\x18\n \x01(\tB\xf1\x01\x92\x41\xed\x01\x32\xbf\x01Pre-configured URI for initiating login flows programmatically. This URI must use the HTTPS scheme and contain a valid domain. Used for starting authentication flows without user interaction.J)\"https://auth.your-app.com/initiate-auth\"R\x10initiateLoginUri\x12\xab\x02\n\x0fpost_login_uris\x18\x0b \x03(\tB\x82\x02\x92\x41\xfe\x01\x32\xb3\x01List of allowed redirect URIs for OAuth 2.0 authorization flows. These URIs must use HTTPS protocol in production environments and comply with RFC 6749. Maximum of 5 URIs allowed.JF[\"https://auth.your-app.com/callback\", \"https://dev.example.com/auth\"]R\rpostLoginUris\x12t\n\x04name\x18\x0c \x01(\tB`\x92\x41]2BA descriptive name for the client that helps identify its purpose.J\x17\"My Application Client\"R\x04name\x12l\n\x13\x61\x63\x63\x65ss_token_expiry\x18\r \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30H\x00R\x11\x61\x63\x63\x65ssTokenExpiry\x88\x01\x01\x12g\n\x06scopes\x18\x0e \x03(\tBO\x92\x41L2-List of scopes to be attached to this client.J\x1b[\"data:read\", \"data:write\"]R\x06scopes\x12\xc6\x01\n\rcustom_claims\x18\x0f \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\x7f\x92\x41|2zCustom claims to be included in access tokens. Please keep this to the essentials as this increases the size of the token.R\x0c\x63ustomClaims\x12\x8f\x01\n\x1c\x64isallow_scalekit_api_access\x18\x10 \x01(\x08\x42N\x92\x41K2CIf true, the client will be restricted from accessing Scalekit APIsJ\x04trueR\x19\x64isallowScalekitApiAccess\x12\xaa\x01\n\x0bgrant_types\x18\x11 \x03(\tB\x88\x01\x92\x41\x84\x01\x32\x43List of OAuth 2.0 grant types that the client is authorized to use.J=[\"authorization_code\", \"refresh_token\", \"client_credentials\"]R\ngrantTypes\x12\x61\n\x0b\x63lient_type\x18\x12 \x01(\tB@\x92\x41=24Type of client. Valid values: ENV, WEB_APP, NTV, SPAJ\x05\"ENV\"R\nclientType\x12\xc5\x01\n\x0c\x65nforce_pkce\x18\x13 \x01(\x08\x42\xa1\x01\x92\x41\x9d\x01\x32\x94\x01Whether Proof Key for Code Exchange (PKCE) is required. PKCE mitigates authorization code interception attacks. Defaults to true for public clients.J\x04trueR\x0b\x65nforcePkce:\xb3\x01\x92\x41\xaf\x01\n\xac\x01*\x12\x43lient Application2\x95\x01\x43onfiguration for an API client application registered with Scalekit. Contains authentication settings, redirect URIs, and other security parameters.B\x16\n\x14_access_token_expiryJ\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07R\rredirect_urisR\x14\x64\x65\x66\x61ult_redirect_uri\"\xc1\x13\n\x0c\x43lientSecret\x12\xd5\x01\n\x02id\x18\x01 \x01(\tB\xc4\x01\x92\x41\xc0\x01\x32\xa5\x01The unique identifier for this client secret. This ID is used to reference the secret in API requests for management operations like updating or deleting the secret.J\x16\"sec_1234abcd5678efgh\"R\x02id\x12\xd1\x01\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x93\x01\x92\x41\x8f\x01\x32qThe timestamp when this secret was created. This field is automatically set by the server and cannot be modified.J\x1a\"2024-01-05T14:48:00.000Z\"R\ncreateTime\x12\x86\x02\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xc8\x01\x92\x41\xc4\x01\x32\xa5\x01The timestamp when this secret was last updated. This field is automatically updated by the server when the secret\'s status changes or other properties are modified.J\x1a\"2024-01-10T09:12:00.000Z\"R\nupdateTime\x12\x82\x02\n\rsecret_suffix\x18\x04 \x01(\tB\xdc\x01\x92\x41\xd8\x01\x32\xcd\x01\x41 suffix that helps identify this secret. This is the last few characters of the full secret value but is not sufficient for authentication. Helps identify which secret is being used in logs and debugging.J\x06\"xyzw\"R\x0csecretSuffix\x12\xc9\x01\n\ncreated_by\x18\x05 \x01(\tB\xa4\x01\x92\x41\xa0\x01\x32\x8f\x01The identifier of the user or system that created this secret. This field helps track who created the secret for audit and compliance purposes.J\x0c\"user_12345\"H\x00R\tcreatedBy\x88\x01\x01\x12\x86\x02\n\x06status\x18\x06 \x01(\x0e\x32\'.scalekit.v1.clients.ClientSecretStatusB\xc4\x01\x92\x41\xc0\x01\x32\xb1\x01The current status of this secret. A secret must be ACTIVE to be used for authentication. INACTIVE secrets cannot be used for authentication but are retained for audit purposes.J\n\"INACTIVE\"R\x06status\x12\x8c\x02\n\x0b\x65xpire_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xce\x01\x92\x41\xca\x01\x32\xab\x01The timestamp when this secret will expire. After this time, the secret cannot be used for authentication regardless of its status. If not set, the secret does not expire.J\x1a\"2025-01-05T14:48:00.000Z\"R\nexpireTime\x12\xa6\x02\n\x0elast_used_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xe3\x01\x92\x41\xdf\x01\x32\xc0\x01The timestamp when this secret was last used for authentication. This field helps track secret usage for security monitoring and identifying unused secrets that may be candidates for rotation.J\x1a\"2024-02-15T10:30:00.000Z\"R\x0clastUsedTime\x12\xb3\x02\n\x0cplain_secret\x18\t \x01(\tB\x8a\x02\x92\x41\x86\x02\x32\xd7\x01The full plaintext secret value. This field is only populated when the secret is first created and is never stored by the server. It must be securely stored by the client application as it cannot be retrieved again.J*\"sec_1234567890abcdefghijklmnopqrstuvwxyz\"H\x01R\x0bplainSecret\x88\x01\x01:\x93\x01\x92\x41\x8f\x01\n\x8c\x01*\rClient Secret2{A secure credential used for authenticating an API client. Each client can have multiple secrets for key rotation purposes.B\r\n\x0b_created_byB\x0f\n\r_plain_secret\"\xb8\x02\n\x05Scope\x12\xa8\x01\n\x02id\x18\x01 \x01(\tB\x97\x01\x92\x41\x8a\x01\x32tUnique identifier for the scope resource. Must be between 1 and 100 characters long and match the specified pattern.J\x12\"scope_1234567890\"\xbaH\x06r\x04\x10\x01\x18\x64R\x02id\x12\x36\n\x04name\x18\x02 \x01(\tB\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9:]{1,64}$\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\x12 \n\x07\x65nabled\x18\x04 \x01(\x08\x42\x06\xbaH\x03\xc8\x01\x01R\x07\x65nabled\"q\n\x0b\x43reateScope\x12\x36\n\x04name\x18\x01 \x01(\tB\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9:]{1,64}$\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\"\xf3\x01\n\x12\x43reateScopeRequest\x12>\n\x05scope\x18\x01 \x01(\x0b\x32 .scalekit.v1.clients.CreateScopeB\x06\xbaH\x03\xc8\x01\x01R\x05scope\x12\x9c\x01\n\x06\x65nv_id\x18\x02 \x01(\tB\x84\x01\x92\x41x2dUnique identifier of the environment where the scope will be created. Must start with \'env_\' prefix.J\x10\"env_1234567890\"\xbaH\x06r\x04\x10\x00\x18 R\x05\x65nvId\"G\n\x13\x43reateScopeResponse\x12\x30\n\x05scope\x18\x01 \x01(\x0b\x32\x1a.scalekit.v1.clients.ScopeR\x05scope\"\xaa\x01\n\x11ListScopesRequest\x12\x94\x01\n\x06\x65nv_id\x18\x01 \x01(\tB}\x92\x41q2]Unique identifier of the environment for which to list scopes. Must start with \'env_\' prefix.J\x10\"env_1234567890\"\xbaH\x06r\x04\x10\x00\x18 R\x05\x65nvId\"H\n\x12ListScopesResponse\x12\x32\n\x06scopes\x18\x01 \x03(\x0b\x32\x1a.scalekit.v1.clients.ScopeR\x06scopes\"o\n\x12UpdateScopeRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18\x64R\x02id\x12>\n\x05scope\x18\x02 \x01(\x0b\x32 .scalekit.v1.clients.UpdateScopeB\x06\xbaH\x03\xc8\x01\x01R\x05scope\"o\n\x0bUpdateScope\x12*\n\x0b\x64\x65scription\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\x12\x34\n\x07\x65nabled\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x07\x65nabled\"G\n\x13UpdateScopeResponse\x12\x30\n\x05scope\x18\x01 \x01(\x0b\x32\x1a.scalekit.v1.clients.ScopeR\x05scope\"1\n\x12\x44\x65leteScopeRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06:\x04scp_R\x02id\"\xdd\x05\n\x19GetConsentDetailsResponse\x12\x61\n\x08resource\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.clients.ResourceB&\x92\x41#2!Details of the requested resourceR\x08resource\x12[\n\x04user\x18\x02 \x01(\x0b\x32\x19.scalekit.v1.clients.UserB,\x92\x41)2\'Details of the user who granted consentR\x04user\x12r\n\x06\x63lient\x18\x03 \x01(\x0b\x32\".scalekit.v1.clients.ConsentClientB6\x92\x41\x33\x32\x31\x44\x65tails of the client resource requesting consentR\x06\x63lient\x12\x9b\x01\n\x06scopes\x18\x04 \x03(\x0b\x32!.scalekit.v1.clients.ConsentScopeB`\x92\x41]2[List of scopes for which consent was granted. Each scope includes its name and description.R\x06scopes\x12m\n\x0b\x61pplication\x18\x05 \x01(\x0b\x32 .scalekit.v1.clients.ApplicationB)\x92\x41&2$Details of the requested applicationR\x0b\x61pplication\x12\x7f\n\x0corganization\x18\x06 \x01(\x0b\x32(.scalekit.v1.clients.ConsentOrganizationB1\x92\x41.2,Organization context for the consent screen.R\x0corganization\"\xf7\x02\n\x13\x43onsentOrganization\x12\x99\x01\n\x11organization_name\x18\x01 \x01(\tBg\x92\x41\x64\x32UName of the organization the user is authenticating into. Omitted when not available.J\x0b\"Acme Corp\"H\x00R\x10organizationName\x88\x01\x01\x12\xad\x01\n\x16organization_meta_name\x18\x02 \x01(\tBw\x92\x41t2bEnvironment-level label for what an organization is called (e.g. Workspace, Team). Always present.J\x0e\"Organization\"R\x14organizationMetaNameB\x14\n\x12_organization_name\"\xba\x05\n\rConsentClient\x12R\n\x04name\x18\x01 \x01(\tB>\x92\x41;2.Name of the client resource requesting consentJ\t\"VS Code\"R\x04name\x12x\n\x0bprivacy_uri\x18\x02 \x01(\tBW\x92\x41M2,Privacy policy URI of the client applicationJ\x1d\"https://yourapp.com/privacy\"\xbaH\x04r\x02\x18\x64R\nprivacyUri\x12q\n\x07tos_uri\x18\x03 \x01(\tBX\x92\x41M2.Terms of service URI of the client applicationJ\x1b\"https://yourapp.com/terms\"\xbaH\x05r\x03\x18\xd0\x0fR\x06tosUri\x12o\n\tclient_id\x18\x04 \x01(\tBR\x92\x41O2;Unique identifier of the client resource requesting consentJ\x10\"m2m_1234567890\"R\x08\x63lientId\x12\x8e\x01\n\x0cmetadata_uri\x18\x05 \x01(\tBk\x92\x41h2AMetadata URI of the client application - applicable for CIMD onlyJ#\"https://example.com/metadata.json\"R\x0bmetadataUri\x12\x66\n\x08logo_uri\x18\x06 \x01(\tBK\x92\x41H2\"Logo URI of the client applicationJ\"\"https://cdn.example.com/logo.png\"R\x07logoUri\"\\\n\x0c\x43onsentScope\x12 \n\x04name\x18\x01 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\"r\n\x04User\x12j\n\x05\x65mail\x18\x01 \x01(\tBT\x92\x41Q28Email address of the user. Must be a valid email format.J\x15\x61lice.doe@example.comR\x05\x65mail\"\xa2\x02\n\x18RevokeUserConsentRequest\x12\x87\x01\n\tclient_id\x18\x01 \x01(\tBj\x92\x41X2DUnique identifier of the client resource for which to revoke consentJ\x10\"m2m_1234567890\"\xbaH\x0cr\n\x10\x01\x18 :\x04m2m_R\x08\x63lientId\x12|\n\nconsent_id\x18\x02 \x01(\tB]\x92\x41G2/Unique identifier of the user consent to revokeJ\x14\"usrcnst_1234567890\"\xbaH\x10r\x0e\x10\x01\x18 :\x08usrcnst_R\tconsentId\"\x1b\n\x19RevokeUserConsentResponse\"\x9f\x01\n\x1f\x45nsureResourceConnectionRequest\x12|\n\x0bresource_id\x18\x01 \x01(\tB[\x92\x41O24Unique identifier of the client resource to retrieveJ\x17\"app_69388798466720005\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\"\xd4\x01\n EnsureResourceConnectionResponse\x12\xaf\x01\n\nconnection\x18\x01 \x01(\x0b\x32\'.scalekit.v1.clients.ResourceConnectionBf\x92\x41]2[Details of the connection resource. Contains configuration settings and status information.\xbaH\x03\xc8\x01\x01R\nconnection\"\xb0\x07\n\x12ResourceConnection\x12T\n\x02id\x18\x01 \x01(\tBD\x92\x41\x41\x32,Unique identifier of the connection resourceJ\x11\"conn_1234567890\"R\x02id\x12\xa1\x01\n\x04type\x18\x02 \x01(\x0e\x32+.scalekit.v1.clients.ResourceConnectionTypeB`\x92\x41]2QType of connection. Determines the authentication method used for the connection.J\x08\"CUSTOM\"R\x04type\x12\x94\x01\n\x06status\x18\x03 \x01(\tB|\x92\x41y2mCurrent status of the connection. Indicates whether the connection is active, inactive, or in an error state.J\x08\"ACTIVE\"R\x06status\x12\x89\x01\n\x07\x65nabled\x18\x04 \x01(\x08\x42o\x92\x41l2dIndicates whether the connection is enabled. Disabled connections cannot be used for authentication.J\x04trueR\x07\x65nabled\x12\xe7\x01\n\x08settings\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructB\xb1\x01\x92\x41\xad\x01\x32kConfiguration settings for the connection. The structure of this field varies based on the connection type.J>{\"api_key\": \"abcd1234\", \"endpoint\": \"https://api.example.com\"}R\x08settings\x12\x92\x01\n\x08provider\x18\x06 \x01(\tBv\x92\x41s2^The provider of the connection. Indicates the service or platform that manages the connection.J\x11\"custom_provider\"R\x08provider\"\xdc\x01\n ResourceCustomConnectionSettings\x12\xb7\x01\n\rauthorize_uri\x18\x01 \x01(\tB\x91\x01\x92\x41\x83\x01\x32[The URI where users are redirected to authorize the application. Must be a valid HTTPS URL.J$\"https://auth.example.com/authorize\"\xbaH\x07r\x05\x10\x01\x88\x01\x01R\x0c\x61uthorizeUri*k\n\x0cResourceType\x12\x1d\n\x19RESOURCE_TYPE_UNSPECIFIED\x10\x00\x12\x07\n\x03WEB\x10\x01\x12\n\n\x06MOBILE\x10\x02\x12\x0b\n\x07\x44\x45SKTOP\x10\x03\x12\n\n\x06SERVER\x10\x04\x12\x0e\n\nMCP_SERVER\x10\x05*.\n\x12\x43lientSecretStatus\x12\n\n\x06\x41\x43TIVE\x10\x00\x12\x0c\n\x08INACTIVE\x10\x01*1\n\x16ResourceConnectionType\x12\x0b\n\x07INVALID\x10\x00\x12\n\n\x06\x43USTOM\x10\x01\x32\xc3\x8a\x01\n\rClientService\x12\xa0\x03\n\nListClient\x12\'.scalekit.v1.clients.ListClientsRequest\x1a(.scalekit.v1.clients.ListClientsResponse\"\xbe\x02\x92\x41\x8e\x02\n\x08\x41PI Auth\x12\x10List API clients\x1a\x90\x01Retrieves a paginated list of API client applications in the environment. Returns only environment-level clients, not resource-specific clients.J]\n\x03\x32\x30\x30\x12V\n&List of clients returned successfully.\x12,\n*\x1a(.scalekit.v1.clients.ListClientsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x11\x12\x0f/api/v1/clients\x12\xb4\x03\n\x0c\x43reateClient\x12(.scalekit.v1.clients.CreateClientRequest\x1a).scalekit.v1.clients.CreateClientResponse\"\xce\x02\x92\x41\x96\x02\n\x06\x43lient\x12\rCreate Client\x1a\x81\x01\x43reates an OAuth client with properties including post-login URIs, scopes, and custom claims. Required fields: name, client_type.Jy\n\x03\x32\x30\x30\x12r\nAClient created successfully. Returns the created client resource.\x12-\n+\x1a).scalekit.v1.clients.CreateClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\"\x0f/api/v1/clients:\x06\x63lient\x12\xd0\x04\n\tGetClient\x12%.scalekit.v1.clients.GetClientRequest\x1a&.scalekit.v1.clients.GetClientResponse\"\xf3\x03\x92\x41\xb7\x03\n\x0e\x43lient Configs\x12\x18Get Client Configuration\x1a\xc5\x01Retrieves complete client configuration including scopes, custom claims, redirect URIs, and access token expiration time. Use this endpoint to view or verify client settings and security parametersJ\xc2\x01\n\x03\x32\x30\x30\x12\xba\x01\n\x8b\x01\x43lient configuration retrieved successfully. Returns full client metadata including scopes, audience, custom claims, and security settings.\x12*\n(\x1a&.scalekit.v1.clients.GetClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1d\x12\x1b/api/v1/clients/{client_id}\x12\xcd\x05\n\x0cUpdateClient\x12(.scalekit.v1.clients.UpdateClientRequest\x1a).scalekit.v1.clients.UpdateClientResponse\"\xe7\x04\x92\x41\xa3\x04\n\x0e\x43lient Configs\x12\x1bUpdate Client Configuration\x1a\xba\x02Updates the configuration settings for a client. Only fields included in the request are modified. Updatable fields include post_login_uris, post_logout_redirect_uris, back_channel_logout_uris, initiate_login_uri, scopes, audience, and custom claims. client_id and create_time are immutable and cannot be modified.J\xb6\x01\n\x03\x32\x30\x31\x12\xae\x01\n}Client configuration updated successfully. Returns the updated client resource with new update_time and all current settings.\x12-\n+\x1a).scalekit.v1.clients.UpdateClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%2\x1b/api/v1/clients/{client_id}:\x06\x63lient\x12\x9a\x03\n\x0c\x44\x65leteClient\x12(.scalekit.v1.clients.DeleteClientRequest\x1a\x16.google.protobuf.Empty\"\xc7\x02\x92\x41\x8b\x02\n\x06\x43lient\x12\rDelete Client\x1a\xb2\x01Permanently deletes a client and associated secrets. This operation cannot be undone. Supports WEB_APP, NTV, and SPA client types only. Cannot delete default environment clients.J=\n\x03\x32\x30\x30\x12\x36\n4Client successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1d*\x1b/api/v1/clients/{client_id}\x12\xa4\x05\n\x12\x43reateClientSecret\x12..scalekit.v1.clients.CreateClientSecretRequest\x1a/.scalekit.v1.clients.CreateClientSecretResponse\"\xac\x04\x92\x41\xe8\x03\n\x0e\x43lient Configs\x12\x14\x43reate Client Secret\x1a\x82\x02Generates a new client secret for an API client. This endpoint creates a secure credential that can be used for OAuth 2.0 client credentials flow. The plain secret is only returned once during creation and should be stored securely by the client application.J\xba\x01\n\x03\x32\x30\x31\x12\xb2\x01\n{Client secret created successfully. Returns the new secret ID and the plain secret value (only available at creation time).\x12\x33\n1\x1a/.scalekit.v1.clients.CreateClientSecretResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\"#/api/v1/clients/{client_id}/secrets\x12\xca\x05\n\x12UpdateClientSecret\x12..scalekit.v1.clients.UpdateClientSecretRequest\x1a/.scalekit.v1.clients.UpdateClientSecretResponse\"\xd2\x04\x92\x41\xbf\x03\n\x0e\x43lient Configs\x12\x14Update Client Secret\x1a\xfd\x01Updates the status of a client secret. This endpoint allows you to activate or deactivate a client secret. Use this to rotate secrets or revoke access for compromised credentials. The secret value itself cannot be modified - create a new secret instead.J\x96\x01\n\x03\x32\x30\x30\x12\x8e\x01\nWClient secret updated successfully. Returns the updated secret with its current status.\x12\x33\n1\x1a/.scalekit.v1.clients.UpdateClientSecretResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02t\x1a//api/v1/clients/{client_id}/secrets/{secret_id}:\x06secretZ92//api/v1/clients/{client_id}/secrets/{secret_id}:\x06secret\x12\xe3\x03\n\x12\x44\x65leteClientSecret\x12..scalekit.v1.clients.DeleteClientSecretRequest\x1a\x16.google.protobuf.Empty\"\x84\x03\x92\x41\xb4\x02\n\x0e\x43lient Configs\x12\x14\x44\x65lete Client Secret\x1a\xc5\x01Permanently deletes a client secret. This operation cannot be undone. Use this endpoint to remove compromised or unused secrets. After deletion, the secret can no longer be used for authentication.JD\n\x03\x32\x30\x30\x12=\n;Client secret successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31*//api/v1/clients/{client_id}/secrets/{secret_id}\x12\x92\x05\n\x18\x43reateOrganizationClient\x12\x34.scalekit.v1.clients.CreateOrganizationClientRequest\x1a\x35.scalekit.v1.clients.CreateOrganizationClientResponse\"\x88\x04\x92\x41\xbf\x03\n\x08\x41PI Auth\x12\x1e\x43reate organization API client\x1arCreates a new API client for an organization. Returns the client details and a plain secret (available only once).J\x9e\x02\n\x03\x32\x30\x31\x12\x96\x02\n\xd8\x01\x41PI client created successfully. Returns the client ID and plain secret (only available at creation time). The client can be configured with scopes, audience values, and custom claims for fine-grained access control.\x12\x39\n7\x1a\x35.scalekit.v1.clients.CreateOrganizationClientResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x39\"//api/v1/organizations/{organization_id}/clients:\x06\x63lient\x12\xb5\x04\n\x15GetOrganizationClient\x12\x31.scalekit.v1.clients.GetOrganizationClientRequest\x1a\x32.scalekit.v1.clients.GetOrganizationClientResponse\"\xb4\x03\x92\x41\xe7\x02\n\x08\x41PI Auth\x12\x1bGet organization API client\x1a>Retrieves details of a specific API client in an organization.J\xfd\x01\n\x03\x32\x30\x30\x12\xf5\x01\n\xba\x01Returns the complete API client configuration, including all current settings and a list of active secrets. Note that secret values are not included in the response for security reasons.\x12\x36\n4\x1a\x32.scalekit.v1.clients.GetOrganizationClientResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02=\x12;/api/v1/organizations/{organization_id}/clients/{client_id}\x12\x89\x05\n\x1e\x43reateOrganizationClientSecret\x12:.scalekit.v1.clients.CreateOrganizationClientSecretRequest\x1a;.scalekit.v1.clients.CreateOrganizationClientSecretResponse\"\xed\x03\x92\x41\x98\x03\n\x08\x41PI Auth\x12%Create organization API client secret\x1a\x64\x43reates a new secret for an organization API client. Returns the plain secret (available only once).J\xfe\x01\n\x03\x32\x30\x31\x12\xf6\x01\n\xb2\x01\x43lient secret created successfully. Returns the new secret ID and the plain secret value (only available at creation time). The secret can be used immediately for authentication.\x12?\n=\x1a;.scalekit.v1.clients.CreateOrganizationClientSecretResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x45\"C/api/v1/organizations/{organization_id}/clients/{client_id}/secrets\x12\xaf\x03\n\x1e\x44\x65leteOrganizationClientSecret\x12:.scalekit.v1.clients.DeleteOrganizationClientSecretRequest\x1a\x16.google.protobuf.Empty\"\xb8\x02\x92\x41\xd7\x01\n\x08\x41PI Auth\x12%Delete organization API client secret\x1a^Permanently deletes a secret from an organization API client. This operation cannot be undone.JD\n\x03\x32\x30\x30\x12=\n;Client secret successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02Q*O/api/v1/organizations/{organization_id}/clients/{client_id}/secrets/{secret_id}\x12\xc2\x04\n\x18UpdateOrganizationClient\x12\x34.scalekit.v1.clients.UpdateOrganizationClientRequest\x1a\x35.scalekit.v1.clients.UpdateOrganizationClientResponse\"\xb8\x03\x92\x41\xe3\x02\n\x08\x41PI Auth\x12\x1eUpdate organization API client\x1aPUpdates an existing organization API client. Only specified fields are modified.J\xe4\x01\n\x03\x32\x30\x30\x12\xdc\x01\n\x9e\x01Returns the updated organization API client with all current details reflected in the response, including modified scopes, audience values, and custom claims.\x12\x39\n7\x1a\x35.scalekit.v1.clients.UpdateOrganizationClientResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x45\x32;/api/v1/organizations/{organization_id}/clients/{client_id}:\x06\x63lient\x12\xa3\x04\n\x18\x44\x65leteOrganizationClient\x12\x34.scalekit.v1.clients.DeleteOrganizationClientRequest\x1a\x16.google.protobuf.Empty\"\xb8\x03\x92\x41\xeb\x02\n\x08\x41PI Auth\x12\x1e\x44\x65lete organization API client\x1a\xee\x01Permanently deletes an API client from an organization. This operation cannot be undone and will revoke all access for the client. All associated secrets will also be invalidated. Use this endpoint to remove unused or compromised clients.JN\n\x03\x32\x30\x30\x12G\nEOrganization API client successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02=*;/api/v1/organizations/{organization_id}/clients/{client_id}\x12\xe8\x04\n\x17ListOrganizationClients\x12\x33.scalekit.v1.clients.ListOrganizationClientsRequest\x1a\x34.scalekit.v1.clients.ListOrganizationClientsResponse\"\xe1\x03\x92\x41\xa0\x03\n\x08\x41PI Auth\x12\x1dList organization API clients\x1a\xb9\x01Retrieves a paginated list of API clients for a specific organization. Returns client details including metadata, scopes, and secret information (without exposing actual secret values).J\xb8\x01\n\x03\x32\x30\x30\x12\xb0\x01\ntList of organization API clients returned successfully. Each client includes its configuration details and metadata.\x12\x38\n6\x1a\x34.scalekit.v1.clients.ListOrganizationClientsResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x31\x12//api/v1/organizations/{organization_id}/clients\x12\x95\x03\n\x0e\x43reateResource\x12*.scalekit.v1.clients.CreateResourceRequest\x1a+.scalekit.v1.clients.CreateResourceResponse\"\xa9\x02\x92\x41\xed\x01\n\x08\x41PI Auth\x12\x0f\x43reate Resource\x1aXCreates a new client resource. The response includes the resource ID and other metadata.Jv\n\x03\x32\x30\x31\x12o\nResource details retrieved successfully. Returns the resource.\x12,\n*\x1a(.scalekit.v1.clients.GetResourceResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\x12\x1f/api/v1/resources/{resource_id}\x12\xd3\x02\n\rListResources\x12).scalekit.v1.clients.ListResourcesRequest\x1a*.scalekit.v1.clients.ListResourcesResponse\"\xea\x01\x92\x41\xb8\x01\n\x08\x41PI Auth\x12\x11List applications\x1a\x36Retrieves a paginated list of API client applications.Ja\n\x03\x32\x30\x30\x12Z\n(List of resources returned successfully.\x12.\n,\x1a*.scalekit.v1.clients.ListResourcesResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x13\x12\x11/api/v1/resources\x12\x93\x03\n\x0eUpdateResource\x12*.scalekit.v1.clients.UpdateResourceRequest\x1a+.scalekit.v1.clients.UpdateResourceResponse\"\xa7\x02\x92\x41\xdd\x01\n\x08\x41PI Auth\x12\x0fUpdate Resource\x1aHUpdates an existing client resource. Only specified fields are modified.Jv\n\x03\x32\x30\x30\x12o\nResource details retrieved successfully. Returns the resource.\x12,\n*\x1a(.scalekit.v1.clients.GetResourceResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\x1a//api/v1/resources/{resource_id}/provider:delete\x12\xf5\x03\n\x14\x43reateResourceClient\x12\x30.scalekit.v1.clients.CreateResourceClientRequest\x1a\x31.scalekit.v1.clients.CreateResourceClientResponse\"\xf7\x02\x92\x41\xa7\x02\n\x08\x41PI Auth\x12\x16\x43reate Resource Client\x1apCreates a new API client under the specified resource. Returns client details and the plain secret (shown once).J\x90\x01\n\x03\x32\x30\x31\x12\x88\x01\nOClient created successfully. Returns the client configuration and plain secret.\x12\x35\n3\x1a\x31.scalekit.v1.clients.CreateResourceClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\"\'/api/v1/resources/{resource_id}/clients:\x06\x63lient\x12\xcf\x03\n\x14UpdateResourceClient\x12\x30.scalekit.v1.clients.UpdateResourceClientRequest\x1a\x31.scalekit.v1.clients.UpdateResourceClientResponse\"\xd1\x02\x92\x41\xf5\x01\n\x08\x41PI Auth\x12\x16Update Resource Client\x1aHUpdates the configuration of an API client under the specified resource.J\x86\x01\n\x03\x32\x30\x30\x12\x7f\nFClient updated successfully. Returns the updated client configuration.\x12\x35\n3\x1a\x31.scalekit.v1.clients.UpdateResourceClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02=23/api/v1/resources/{resource_id}/clients/{client_id}:\x06\x63lient\x12\xce\x03\n\x11GetResourceClient\x12-.scalekit.v1.clients.GetResourceClientRequest\x1a..scalekit.v1.clients.GetResourceClientResponse\"\xd9\x02\x92\x41\x85\x02\n\x08\x41PI Auth\x12\x17Get Resource API Client\x1aJRetrieves details of a specific API client associated with an application.J\x93\x01\n\x03\x32\x30\x30\x12\x8b\x01\nUClient details retrieved successfully. Returns the resource and client configuration.\x12\x32\n0\x1a..scalekit.v1.clients.GetResourceClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x35\x12\x33/api/v1/resources/{resource_id}/clients/{client_id}\x12\xe7\x03\n\x13ListResourceClients\x12/.scalekit.v1.clients.ListResourceClientsRequest\x1a\x30.scalekit.v1.clients.ListResourceClientsResponse\"\xec\x02\x92\x41\xa4\x02\n\x08\x41PI Auth\x12\x19List Resource API Clients\x1aPRetrieves a list of API clients associated with a specific application resource.J\xaa\x01\n\x03\x32\x30\x30\x12\xa2\x01\njList of clients retrieved successfully. Returns the resource details and associated client configurations.\x12\x34\n2\x1a\x30.scalekit.v1.clients.ListResourceClientsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)\x12\'/api/v1/resources/{resource_id}/clients\x12\xcb\x03\n\x18ListResourceUserConsents\x12\x34.scalekit.v1.clients.ListResourceUserConsentsRequest\x1a\x35.scalekit.v1.clients.ListResourceUserConsentsResponse\"\xc1\x02\x92\x41\x8b\x02\n\x08\x41PI Auth\x12!List user consents for a resource\x1ajRetrieves a paginated list of user consents for a given resource, with optional search by external user IDJp\n\x03\x32\x30\x30\x12i\n,List of user consents retrieved successfully\x12\x39\n7\x1a\x35.scalekit.v1.clients.ListResourceUserConsentsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x17\x12\x15/api/v1/user_consents\x12\x87\x03\n\x14\x44\x65leteResourceClient\x12\x30.scalekit.v1.clients.DeleteResourceClientRequest\x1a\x31.scalekit.v1.clients.DeleteResourceClientResponse\"\x89\x02\x92\x41\xb5\x01\n\x08\x41PI Auth\x12\x16\x44\x65lete Resource Client\x1a\x33\x44\x65letes an API client under the specified resource.J\\\n\x03\x32\x30\x30\x12U\n\x1c\x43lient deleted successfully.\x12\x35\n3\x1a\x31.scalekit.v1.clients.DeleteResourceClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x35*3/api/v1/resources/{resource_id}/clients/{client_id}\x12\x82\x04\n\x0eRegisterClient\x12*.scalekit.v1.clients.RegisterClientRequest\x1a+.scalekit.v1.clients.RegisterClientResponse\"\x96\x03\x92\x41\xc2\x02\n\x08\x41PI Auth\x12\x13Register API client\x1a\x84\x01Registers a new API client under an existing resource using dynamic client registration. Returns the created client and its secrets.J\x99\x01\n\x03\x32\x30\x31\x12\x91\x01\n^Client registered successfully. Returns client details and plain secret (available only once).\x12/\n-\x1a+.scalekit.v1.clients.RegisterClientResponse\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x35\"+/api/v1/resources/{res_id}/clients:register:\x06\x63lient\x12\xb6\x05\n\x0b\x43reateScope\x12\'.scalekit.v1.clients.CreateScopeRequest\x1a(.scalekit.v1.clients.CreateScopeResponse\"\xd3\x04\x88\x02\x01\x92\x41\xeb\x03\x12\x19\x43reate scope (Deprecated)\x1a\xa1\x02\x44\x45PRECATED: Use permission management APIs instead. Creates a new OAuth scope for API authorization. Scopes define the level of access granted to API clients. Reserved OpenID Connect scopes (profile, email, address, phone) cannot be created as they are automatically managed by the system.J\xa9\x01\n\x03\x32\x30\x31\x12\xa1\x01\nqOAuth scope created successfully. Returns the newly created scope with its name, description, and enabled status.\x12,\n*\x1a(.scalekit.v1.clients.CreateScopeResponse\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x46\"\x0e/api/v1/scopes:\x05scopeZ-\"$/api/v1/environments/{env_id}/scopes:\x05scope\x12\xe9\x03\n\nListScopes\x12&.scalekit.v1.clients.ListScopesRequest\x1a\'.scalekit.v1.clients.ListScopesResponse\"\x89\x03\x92\x41\xb2\x02\x12\x0bList scopes\x1a\x7fRetrieves all OAuth scopes configured for the environment. Returns both custom scopes and system-managed OpenID Connect scopes.J\xa1\x01\n\x03\x32\x30\x30\x12\x99\x01\njList of OAuth scopes returned successfully. Each scope includes its name, description, and enabled status.\x12+\n)\x1a\'.scalekit.v1.clients.ListScopesResponse\x82\xb5\x18\x02\x18`\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x38\x12\x0e/api/v1/scopesZ&\x12$/api/v1/environments/{env_id}/scopes\x12\xaf\x04\n\x0bUpdateScope\x12\'.scalekit.v1.clients.UpdateScopeRequest\x1a(.scalekit.v1.clients.UpdateScopeResponse\"\xcc\x03\x88\x02\x01\x92\x41\x8e\x03\x12\x19Update scope (Deprecated)\x1a\xe0\x01\x44\x45PRECATED: Use permission management APIs instead. Updates an existing OAuth scope\'s description and enabled status. Reserved OpenID Connect scopes (profile, email, address, phone) cannot be modified through this endpoint.J\x8d\x01\n\x03\x32\x30\x30\x12\x85\x01\nUOAuth scope updated successfully. Returns the updated scope with all current details.\x12,\n*\x1a(.scalekit.v1.clients.UpdateScopeResponse\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1c\x32\x13/api/v1/scopes/{id}:\x05scope\x12\xe0\x03\n\x0b\x44\x65leteScope\x12\'.scalekit.v1.clients.DeleteScopeRequest\x1a\x16.google.protobuf.Empty\"\x8f\x03\x88\x02\x01\x92\x41\xd8\x02\x12\x19\x44\x65lete scope (Deprecated)\x1a\xf6\x01\x44\x45PRECATED: Use permission management APIs instead. Permanently deletes an OAuth scope from the environment. This operation cannot be undone. Reserved OpenID Connect scopes (profile, email, address, phone) cannot be deleted through this endpoint.JB\n\x03\x32\x30\x30\x12;\n9OAuth scope successfully deleted and no longer accessible\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15*\x13/api/v1/scopes/{id}\x12\x97\x01\n\x11GetConsentDetails\x12\x16.google.protobuf.Empty\x1a..scalekit.v1.clients.GetConsentDetailsResponse\":\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1f\x12\x1d/api/v1/oauth/consent/details\x12\xc2\x01\n\x11RevokeUserConsent\x12-.scalekit.v1.clients.RevokeUserConsentRequest\x1a..scalekit.v1.clients.RevokeUserConsentResponse\"N\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x33*1/api/v1/clients/{client_id}/consents/{consent_id}\x12\xea\x03\n\x18\x45nsureResourceConnection\x12\x34.scalekit.v1.clients.EnsureResourceConnectionRequest\x1a\x35.scalekit.v1.clients.EnsureResourceConnectionResponse\"\xe0\x02\x92\x41\x91\x02\n\x08\x41PI Auth\x12!Get or Create Resource Connection\x1aSRetrieves an existing resource connection or creates a new one if it doesn\'t exist.J\x8c\x01\n\x03\x32\x30\x30\x12\x84\x01\nBReturns the existing or newly created resource connection details.\x12>\n<\x1a:.scalekit.v1.clients.GetOrCreateResourceConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x30\"+/api/v1/resources/{resource_id}/connections:\x01*\x1a\xb8\x03\x92\x41\xb4\x03\n\x08\x41PI Auth\x12\xfd\x02\x45ndpoints for managing API client applications. API clients enable secure, automated interactions between software systems without human intervention. Each client is uniquely identified by a `client_id` and can be configured with authentication settings, redirect URIs, and security parameters. Use these endpoints to create, manage, and configure API clients for your API clients.\x1a(\x12&https://docs.scalekit.com/m2m/overviewB3Z1github.com/scalekit-inc/scalekit/pkg/grpc/clientsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/clients/clients.proto\x12\x13scalekit.v1.clients\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a)scalekit/v1/connections/connections.proto\x1a!scalekit/v1/options/options.proto\"\x8a\x01\n\x15\x43reateResourceRequest\x12q\n\x08resource\x18\x01 \x01(\x0b\x32#.scalekit.v1.clients.CreateResourceB0\x92\x41\'2%Details of the resource to be created\xbaH\x03\xc8\x01\x01R\x08resource\"\x8e\r\n\x0e\x43reateResource\x12|\n\rresource_type\x18\x01 \x01(\x0e\x32!.scalekit.v1.clients.ResourceTypeB4\x92\x41+2\"Type of the resource to be createdJ\x05\"WEB\"\xbaH\x03\xc8\x01\x01R\x0cresourceType\x12K\n\x04name\x18\x02 \x01(\tB7\x92\x41)2\x14Name of the resourceJ\x11\"My API Resource\"\xbaH\x08r\x03\x18\x80\x01\xc8\x01\x01R\x04name\x12\x86\x01\n\x0b\x64\x65scription\x18\x03 \x01(\tBd\x92\x41Y2\x1b\x44\x65scription of the resourceJ:\"Resource for accessing your organization\'s API resources\"\xbaH\x05r\x03\x18\x80\x04R\x0b\x64\x65scription\x12\xab\x01\n\x0cresource_uri\x18\x04 \x01(\tB\x87\x01\x92\x41\x83\x01\x32\x61Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"R\x0bresourceUri\x12g\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x05 \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30R\x11\x61\x63\x63\x65ssTokenExpiry\x12k\n\x14refresh_token_expiry\x18\x06 \x01(\x03\x42\x39\x92\x41\x36\x32-Expiry time in seconds for the refresh token.J\x05\x38\x36\x34\x30\x30R\x12refreshTokenExpiry\x12\x9f\x01\n#disable_dynamic_client_registration\x18\x07 \x01(\x08\x42P\x92\x41M2EIndicates if dynamic client registration is allowed for this resourceJ\x04trueR disableDynamicClientRegistration\x12\x61\n\x08logo_uri\x18\x08 \x01(\tBF\x92\x41;2\x19Logo URI for the resourceJ\x1e\"https://example.com/logo.png\"\xbaH\x05r\x03\x18\x80\x04R\x07logoUri\x12X\n\x08provider\x18\t \x01(\tB<\x92\x41\x31\x32$Connection provider for the resourceJ\t\"DESCOPE\"\xbaH\x05r\x03\x18\x80\x04R\x08provider\x12\xa9\x01\n\x0bresource_id\x18\n \x01(\tB\x87\x01\x92\x41\x83\x01\x32\x61Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"R\nresourceId\x12i\n\x06scopes\x18\x0b \x03(\tBQ\x92\x41N21List of OAuth scopes associated with the resourceJ\x19[\"usr:read\", \"usr:write\"]R\x06scopes\x12\xac\x01\n intersect_scopes_user_permission\x18\x0c \x01(\x08\x42\x63\x92\x41`2XIndicates if the scopes should be intersected with user permissions for granular controlJ\x04trueR\x1dintersectScopesUserPermission\x12\x7f\n\x0b\x65nable_cimd\x18\r \x01(\x08\x42^\x92\x41[2RSpecifies whether Client ID Metadata Document (CIMD) is activated for the resourceJ\x05\x66\x61lseR\nenableCimd\"\x8c\x06\n\x0eResourceClient\x12\x44\n\x04name\x18\x01 \x01(\tB0\x92\x41%2\x12Name of the clientJ\x0f\"My API Client\"\xbaH\x05r\x03\x18\x80\x01R\x04name\x12\x82\x01\n\x0b\x64\x65scription\x18\x02 \x01(\tB`\x92\x41U2\x19\x44\x65scription of the clientJ8\"Client for accessing your organization\'s API resources\"\xbaH\x05r\x03\x18\x80\x04R\x0b\x64\x65scription\x12\x38\n\x06scopes\x18\x03 \x03(\tB \x92\x41\x1d\x32\x1bOAuth scopes for the clientR\x06scopes\x12\x62\n\x08\x61udience\x18\x04 \x03(\tBF\x92\x41\x43\x32$OAuth audience values for the clientJ\x1b[\"https://api.example.com\"]R\x08\x61udience\x12\xc6\x01\n\rcustom_claims\x18\x05 \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\x7f\x92\x41|2zCustom claims to be included in access tokens. Please keep this to the essentials as this increases the size of the token.R\x0c\x63ustomClaims\x12_\n\x06\x65xpiry\x18\x06 \x01(\x03\x42G\x92\x41\x44\x32\"https://example.com/.well-known/oauth-protected-resource/mcp\"R\x14protectedMetadataUri\x12\xb2\x01\n\x0bresource_id\x18\x0f \x01(\tB\x90\x01\x92\x41\x84\x01\x32\x62Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"\xbaH\x05r\x03\x18\x80\x04R\nresourceId\x12\xfb\x01\n\x06scopes\x18\x10 \x03(\x0b\x32\x1a.scalekit.v1.clients.ScopeB\xc6\x01\x92\x41\xc2\x01\x32OList of OAuth scopes associated with the resource with enabled or disabled flagJo[{\"id\": \"perm_\", \"name\": \"usr:read\", \"description\": \"Reading basic information of the users\", \"enabled\": true}]R\x06scopes\x12\xc3\x01\n\x12\x63onnection_details\x18\x11 \x01(\x0b\x32\'.scalekit.v1.clients.ResourceConnectionBk\x92\x41\x65\x32\x63\x44\x65tails of the own auth connection if any. For full stack this field will be empty or not populated\xe0\x41\x03R\x11\x63onnectionDetails\x12\x91\x01\n\x1a\x64isallow_connection_update\x18\x12 \x01(\x08\x42S\x92\x41M2DIndicates if updating the connection is disallowed for this resourceJ\x05\x66\x61lse\xe0\x41\x03R\x18\x64isallowConnectionUpdate\x12\xac\x01\n intersect_scopes_user_permission\x18\x13 \x01(\x08\x42\x63\x92\x41`2XIndicates if the scopes should be intersected with user permissions for granular controlJ\x04trueR\x1dintersectScopesUserPermission\x12\x7f\n\x0b\x65nable_cimd\x18\x14 \x01(\x08\x42^\x92\x41[2RSpecifies whether Client ID Metadata Document (CIMD) is activated for the resourceJ\x05\x66\x61lseR\nenableCimd\"\xf2\x01\n\x15RegisterClientRequest\x12i\n\x06res_id\x18\x01 \x01(\tBR\x92\x41\x43\x32(Unique identifier of the client resourceJ\x17\"app_69388798466720005\"\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x05resId\x12n\n\x06\x63lient\x18\x02 \x01(\x0b\x32#.scalekit.v1.clients.RegisterClientB1\x92\x41(2&Details of the client to be registered\xbaH\x03\xc8\x01\x01R\x06\x63lient\"\x96\x06\n\x0eRegisterClient\x12Q\n\x0b\x63lient_name\x18\x01 \x01(\tB0\x92\x41%2\x12Name of the clientJ\x0f\"My API Client\"\xbaH\x05r\x03\x18\x80\x01R\nclientName\x12\x82\x01\n\x0b\x64\x65scription\x18\x02 \x01(\tB`\x92\x41U2\x19\x44\x65scription of the clientJ8\"Client for accessing your organization\'s API resources\"\xbaH\x05r\x03\x18\x80\x04R\x0b\x64\x65scription\x12g\n\rredirect_uris\x18\x03 \x03(\tBB\x92\x41?2\x1bRedirect URI for the clientJ [\"https://example.com/callback\"]R\x0credirectUris\x12Y\n\x05scope\x18\x04 \x01(\tBC\x92\x41@2\x1bOAuth scopes for the clientJ![\"read:users\", \"write:resources\"]R\x05scope\x12T\n\nclient_uri\x18\x05 \x01(\tB5\x92\x41\x32\x32\x19\x43lient URI for the clientJ\x15\"https://example.com\"R\tclientUri\x12W\n\x08logo_uri\x18\x06 \x01(\tB<\x92\x41\x39\x32\x17Logo URI for the clientJ\x1e\"https://example.com/logo.png\"R\x07logoUri\x12\\\n\x07tos_uri\x18\x07 \x01(\tBC\x92\x41@2#Terms of Service URI for the clientJ\x19\"https://example.com/tos\"R\x06tosUri\x12[\n\npolicy_uri\x18\x08 \x01(\tB<\x92\x41\x39\x32\x19Policy URI for the clientJ\x1c\"https://example.com/policy\"R\tpolicyUri\"\xb9\x17\n\x16RegisterClientResponse\x12\xfc\x01\n\tclient_id\x18\x01 \x01(\tB\xde\x01\x92\x41\xda\x01\x32\xbc\x01The unique identifier for this M2M client. This ID is used to identify the client in API requests and logs. It is automatically generated when the client is created and cannot be modified.J\x19\"m2morg_1231234233424344\"R\x08\x63lientId\x12\xb3\x02\n\x07secrets\x18\x02 \x03(\x0b\x32!.scalekit.v1.clients.ClientSecretB\xf5\x01\x92\x41\xf1\x01\x32\xee\x01List of client secrets associated with this client. Each secret can be used for authentication, but only the most recently created secret is typically active. Secrets are stored securely and their values are never returned after creation.R\x07secrets\x12\xa2\x01\n\x04name\x18\x03 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32\x62The display name of the M2M client. This name helps identify the client in the dashboard and logs.J#\"GitHub Actions Deployment Service\"R\x04name\x12\xda\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tB\xb7\x01\x92\x41\xb3\x01\x32{A detailed description of the client\'s purpose and usage. This helps administrators understand what the client is used for.J4\"Service account for automated deployment processes\"R\x0b\x64\x65scription\x12\xd5\x01\n\x0b\x63reate_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x97\x01\x92\x41\x93\x01\x32uThe timestamp when this M2M client was created. This field is automatically set by the server and cannot be modified.J\x1a\"2024-01-05T14:48:00.000Z\"R\ncreateTime\x12\xf4\x01\n\x0bupdate_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xb6\x01\x92\x41\xb2\x01\x32\x93\x01The timestamp when this M2M client was last updated. This field is automatically updated by the server whenever the client\'s configuration changes.J\x1a\"2024-01-05T14:48:00.000Z\"R\nupdateTime\x12\xbe\x01\n\x06scopes\x18\x07 \x03(\tB\xa5\x01\x92\x41\xa1\x01\x32uThe OAuth 2.0 scopes granted to this client. These scopes determine what resources and actions the client can access.J([\"deploy:resources\", \"read:deployments\"]R\x06scopes\x12\xc7\x01\n\x08\x61udience\x18\x08 \x03(\tB\xaa\x01\x92\x41\xa6\x01\x32\x86\x01The intended recipients of access tokens issued to this client. Each audience value should be a URI that identifies an API or service.J\x1b[\"https://api.example.com\"]R\x08\x61udience\x12\xec\x01\n\rcustom_claims\x18\t \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\xa4\x01\x92\x41\xa0\x01\x32\x9d\x01\x41\x64\x64itional claims included in access tokens issued to this client. These claims provide context about the client and can be used for authorization decisions.R\x0c\x63ustomClaims\x12\xb2\x01\n\x06\x65xpiry\x18\n \x01(\x03\x42\x99\x01\x92\x41\x95\x01\x32\x8c\x01The lifetime of access tokens issued to this client, in seconds. This determines how long a token remains valid before it must be refreshed.J\x04\x33\x36\x30\x30R\x06\x65xpiry\x12\xc4\x01\n\x0bresource_id\x18\x0b \x01(\tB\xa2\x01\x92\x41\x9e\x01\x32\x83\x01The ID of the resource associated with this M2M client. This field is used to link the client to a specific resource in the system.J\x16\"app_1231234233424344\"R\nresourceId\x12\xd1\x01\n\rredirect_uris\x18\x0c \x03(\tB\xab\x01\x92\x41\xa7\x01\x32\x82\x01The redirect URI for this M2M client. This URI is used in the OAuth 2.0 authorization flow to redirect users after authentication.J [\"https://example.com/callback\"]R\x0credirectUris\x12~\n\rclient_secret\x18\r \x01(\tBY\x92\x41V24Client secret value (only returned once at creation)J\x1e\"CdExsdErfccxDDssddfffgfeFHH1\"R\x0c\x63lientSecret\x12\xce\x01\n\x18\x63lient_secret_expires_at\x18\x0e \x01(\x05\x42\x94\x01\x92\x41\x90\x01\x32rClient secret expiry time in RFC3339 format. If the client secret does not expire, this field will be set to null.J\x1a\"2024-12-31T23:59:59.000Z\"R\x15\x63lientSecretExpiresAt\"\xdd\x02\n\x14ListResourcesRequest\x12r\n\rresource_type\x18\x01 \x01(\x0e\x32!.scalekit.v1.clients.ResourceTypeB*\x92\x41!2\x18\x46ilter resources by typeJ\x05\"WEB\"\xbaH\x03\xc8\x01\x01R\x0cresourceType\x12]\n\npage_token\x18\x02 \x01(\tB>\x92\x41;2\"Token for the next page of resultsJ\x15\"next_page_token_123\"R\tpageToken\x12r\n\tpage_size\x18\x03 \x01(\rBU\x92\x41K2ENumber of resources to return per page. Maximum is 30. Default is 10.J\x02\x32\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\"\xdb\x02\n\x15ListResourcesResponse\x12G\n\ntotal_size\x18\x01 \x01(\rB(\x92\x41%2#Total number of resources availableR\ttotalSize\x12O\n\x0fnext_page_token\x18\x02 \x01(\tB\'\x92\x41$2\"Token for the next page of resultsR\rnextPageToken\x12S\n\tresources\x18\x03 \x03(\x0b\x32\x1d.scalekit.v1.clients.ResourceB\x16\x92\x41\x13\x32\x11List of resourcesR\tresources\x12S\n\x0fprev_page_token\x18\x04 \x01(\tB+\x92\x41(2&Token for the previous page of resultsR\rprevPageToken\"\xaf\x02\n\x15UpdateResourceRequest\x12s\n\x0bresource_id\x18\x01 \x01(\tBR\x92\x41\x46\x32+Unique identifier of the resource to updateJ\x17\"app_69388798466720005\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\x12\x64\n\x08resource\x18\x02 \x01(\x0b\x32#.scalekit.v1.clients.UpdateResourceB#\x92\x41\x1a\x32\x18Updated resource details\xbaH\x03\xc8\x01\x01R\x08resource\x12;\n\x0bupdate_mask\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskR\nupdateMask\"\xa1\x0e\n\x0eUpdateResource\x12P\n\x04name\x18\x01 \x01(\tB<\x92\x41\x31\x32\x14Name of the resourceJ\x19\"My Updated API Resource\"\xbaH\x05r\x03\x18\x80\x01R\x04name\x12\x8e\x01\n\x0b\x64\x65scription\x18\x02 \x01(\tBl\x92\x41\x61\x32\x1b\x44\x65scription of the resourceJB\"Updated resource for accessing your organization\'s API resources\"\xbaH\x05r\x03\x18\x80\x04R\x0b\x64\x65scription\x12\xab\x01\n\x0cresource_uri\x18\x03 \x01(\tB\x87\x01\x92\x41\x83\x01\x32\x61Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"R\x0bresourceUri\x12g\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x04 \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30R\x11\x61\x63\x63\x65ssTokenExpiry\x12k\n\x14refresh_token_expiry\x18\x05 \x01(\x03\x42\x39\x92\x41\x36\x32-Expiry time in seconds for the refresh token.J\x05\x38\x36\x34\x30\x30R\x12refreshTokenExpiry\x12\xbb\x01\n#disable_dynamic_client_registration\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBP\x92\x41M2EIndicates if dynamic client registration is allowed for this resourceJ\x04trueR disableDynamicClientRegistration\x12\x61\n\x08logo_uri\x18\x07 \x01(\tBF\x92\x41;2\x19Logo URI for the resourceJ\x1e\"https://example.com/logo.png\"\xbaH\x05r\x03\x18\x80\x04R\x07logoUri\x12X\n\x08provider\x18\n \x01(\tB<\x92\x41\x31\x32$Connection provider for the resourceJ\t\"DESCOPE\"\xbaH\x05r\x03\x18\x80\x04R\x08provider\x12\xa9\x01\n\x0bresource_id\x18\x0b \x01(\tB\x87\x01\x92\x41\x83\x01\x32\x61Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"R\nresourceId\x12i\n\x06scopes\x18\x0c \x03(\tBQ\x92\x41N21List of OAuth scopes associated with the resourceJ\x19[\"usr:read\", \"usr:write\"]R\x06scopes\x12\xa7\x01\n\x1a\x63ustom_connection_settings\x18\r \x01(\x0b\x32\x35.scalekit.v1.clients.ResourceCustomConnectionSettingsB0\x92\x41-2+Custom connection settings for the resourceH\x00R\x18\x63ustomConnectionSettings\x12\xc8\x01\n intersect_scopes_user_permission\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueBc\x92\x41`2XIndicates if the scopes should be intersected with user permissions for granular controlJ\x04trueR\x1dintersectScopesUserPermission\x12\x94\x01\n\x0b\x65nable_cimd\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueBW\x92\x41T2KIndicates if CIMD (Client ID Metadata Document) is enabled for the resourceJ\x05\x66\x61lseR\nenableCimdB\n\n\x08settings\"y\n\x16UpdateResourceResponse\x12_\n\x08resource\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.clients.ResourceB$\x92\x41!2\x1f\x44\x65tails of the updated resourceR\x08resource\"\xfc\x01\n\x1b\x43reateResourceClientRequest\x12p\n\x0bresource_id\x18\x01 \x01(\tBO\x92\x41\x43\x32(Unique identifier of the client resourceJ\x17\"app_69388798466720005\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\x12k\n\x06\x63lient\x18\x02 \x01(\x0b\x32#.scalekit.v1.clients.ResourceClientB.\x92\x41%2#Details of the client to be created\xbaH\x03\xc8\x01\x01R\x06\x63lient\"\xf8\x01\n\x1c\x43reateResourceClientResponse\x12Z\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1e.scalekit.v1.clients.M2MClientB\"\x92\x41\x1f\x32\x1d\x44\x65tails of the created clientR\x06\x63lient\x12|\n\x0cplain_secret\x18\x02 \x01(\tBY\x92\x41V24Client secret value (only returned once at creation)J\x1e\"CdExsdErfccxDDssddfffgfeFHH1\"R\x0bplainSecret\"\xc7\x03\n\x1bUpdateResourceClientRequest\x12i\n\x0bresource_id\x18\x01 \x01(\tBH\x92\x41<2!Unique identifier of the resourceJ\x17\"res_69388798466720005\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\x12\x63\n\tclient_id\x18\x02 \x01(\tBF\x92\x41:2\x1fUnique identifier of the clientJ\x17\"m2m_12345678901234567\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\x12\x66\n\x06\x63lient\x18\x03 \x01(\x0b\x32#.scalekit.v1.clients.ResourceClientB)\x92\x41 2\x1e\x46ields of the client to update\xbaH\x03\xc8\x01\x01R\x06\x63lient\x12p\n\x0bupdate_mask\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB3\x92\x41\x30\x32.Mask specifying which fields should be updatedR\nupdateMask\"s\n\x1cUpdateResourceClientResponse\x12S\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1e.scalekit.v1.clients.M2MClientB\x1b\x92\x41\x18\x32\x16Updated client detailsR\x06\x63lient\"\x96\x02\n\x18GetResourceClientRequest\x12u\n\x0bresource_id\x18\x01 \x01(\tBT\x92\x41H24Unique identifier of the client resource to retrieveJ\x10\"skc_1234567890\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\x12\x82\x01\n\tclient_id\x18\x02 \x01(\tBe\x92\x41Y2\x92\x41;2.Case-insensitive search over external user IDsJ\t\"usr_123\"R\x06search\x12[\n\tpage_size\x18\x03 \x01(\rB>\x92\x41\x34\x32.Number of consents to return per page (max 30)J\x02\x32\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\x63\n\npage_token\x18\x04 \x01(\tBD\x92\x41\x41\x32\x33Pagination token to fetch the next or previous pageJ\n\">:abc123\"R\tpageToken\"\x8c\x03\n ListResourceUserConsentsResponse\x12V\n\ntotal_size\x18\x01 \x01(\rB7\x92\x41\x34\x32\x32Total number of user consents matching the requestR\ttotalSize\x12T\n\x0fnext_page_token\x18\x02 \x01(\tB,\x92\x41)2\'Pagination token to fetch the next pageR\rnextPageToken\x12`\n\x08\x63onsents\x18\x03 \x03(\x0b\x32(.scalekit.v1.clients.ResourceUserConsentB\x1a\x92\x41\x17\x32\x15List of user consentsR\x08\x63onsents\x12X\n\x0fprev_page_token\x18\x04 \x01(\tB0\x92\x41-2+Pagination token to fetch the previous pageR\rprevPageToken\"\xdc\x04\n\x13ResourceUserConsent\x12X\n\x02id\x18\x01 \x01(\tBH\x92\x41\x45\x32%Unique identifier of the user consentJ\x1c\"usrcnst_102709535608668163\"R\x02id\x12r\n\x10\x65xternal_user_id\x18\x02 \x01(\tBH\x92\x41\x45\x32*External identifier of the consenting userJ\x17\"usr_83562895790637841\"R\x0e\x65xternalUserId\x12`\n\tclient_id\x18\x03 \x01(\tBC\x92\x41@2-Client identifier associated with the consentJ\x0f\"m2m_123123123\"R\x08\x63lientId\x12\x44\n\x0b\x63lient_name\x18\x04 \x01(\tB#\x92\x41 2\x14Readable client nameJ\x08\"MCPJam\"R\nclientName\x12O\n\x06scopes\x18\x05 \x03(\tB7\x92\x41\x34\x32\x1dScopes granted in the consentJ\x13[\"openid\", \"email\"]R\x06scopes\x12~\n\ngranted_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampBC\x92\x41@2\"Timestamp when consent was grantedJ\x1a\"2025-12-09T13:27:29.810Z\"R\tgrantedAt\"\xa0\x01\n\x1aListResourceClientsRequest\x12\x81\x01\n\x0bresource_id\x18\x01 \x01(\tB`\x92\x41T2@Unique identifier of the resource whose clients are to be listedJ\x10\"skc_1234567890\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\"\xf0\x02\n\x1bListResourceClientsResponse\x12k\n\x07\x63lients\x18\x02 \x03(\x0b\x32\x1e.scalekit.v1.clients.M2MClientB1\x92\x41.2,List of clients associated with the resourceR\x07\x63lients\x12i\n\x11total_dcr_clients\x18\x03 \x01(\x05\x42=\x92\x41:28Total number of DCR clients associated with the resourceR\x0ftotalDcrClients\x12s\n\x14total_static_clients\x18\x04 \x01(\x05\x42\x41\x92\x41>2\"R\tpageToken:\xec\x01\x92\x41\xe8\x01\n\xa8\x01*!List Organization Clients Request2\x82\x01Request message for listing API clients within a specific organization. Supports pagination for handling large numbers of clients.*;\n\x11\x41PI Documentation\x12&https://docs.scalekit.com/m2m/overview\"\xa5\x06\n\x1fListOrganizationClientsResponse\x12\x97\x01\n\x0fnext_page_token\x18\x01 \x01(\tBo\x92\x41l2UPagination token for the next page of results. Use this token to fetch the next page.J\x13\"\"R\rnextPageToken\x12X\n\ntotal_size\x18\x02 \x01(\rB9\x92\x41\x36\x32\x30Total number of API clients in the organization.J\x02\x33\x30R\ttotalSize\x12\xe0\x01\n\x07\x63lients\x18\x03 \x03(\x0b\x32\x1e.scalekit.v1.clients.M2MClientB\xa5\x01\x92\x41\xa1\x01\x32\x9e\x01List of API client objects for the organization. Each client includes its configuration, metadata, and active secrets (without exposing actual secret values).R\x07\x63lients\x12\x9f\x01\n\x0fprev_page_token\x18\x04 \x01(\tBw\x92\x41t2]Pagination token for the previous page of results. Use this token to fetch the previous page.J\x13\"\"R\rprevPageToken:\x88\x01\x92\x41\x84\x01\n\x81\x01*\"List Organization Clients Response2[Response message containing a paginated list of API clients for the specified organization.\"\x83\x03\n\x1f\x44\x65leteOrganizationClientRequest\x12\xb0\x01\n\x0forganization_id\x18\x01 \x01(\tB\x86\x01\x92\x41t2ZUnique identifier of the organization that owns the client. Must start with \'org_\' prefix.J\x16\"org_1231234233424344\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xac\x01\n\tclient_id\x18\x02 \x01(\tB\x8e\x01\x92\x41y2\\Unique identifier of the API client to permanently delete. Must start with \'m2morg_\' prefix.J\x19\"m2morg_1231234233424344\"\xbaH\x0fr\r\x10\x01\x18 :\x07m2morg_R\x08\x63lientId\"\xa5\x01\n\x10GetClientRequest\x12\x90\x01\n\tclient_id\x18\x01 \x01(\tBs\x92\x41g2SUnique identifier of the client resource to retrieve. Must be 1-32 characters long.J\x10\"skc_1234567890\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\"\xf5\x01\n\x11GetClientResponse\x12\xdf\x01\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.clients.ClientB\xa9\x01\x92\x41\xa5\x01\x32\xa2\x01\x43omplete client configuration including authentication settings, redirect URIs, and secrets. This contains all current settings for the requested client resource.R\x06\x63lient\"\xeb\x06\n\x12ListClientsRequest\x12\xf2\x01\n\x14include_plain_secret\x18\x01 \x01(\x08\x42\xbf\x01\x92\x41\xbb\x01\x32\xb1\x01Whether to include plain secret values in the response. Enable only during initial client creation, then store secrets securely. Not available when filtering by ALL client typesJ\x05\x66\x61lseR\x12includePlainSecret\x12\x8a\x01\n\x06\x66ilter\x18\x03 \x01(\x0b\x32..scalekit.v1.clients.ListClientsRequest.FilterBB\x92\x41?2=Filters clients by type: WEB, ENV, WEB_APP, NTV, SPA, or ALL.R\x06\x66ilter\x12]\n\npage_token\x18\x04 \x01(\tB>\x92\x41;2\"Token for the next page of resultsJ\x15\"next_page_token_123\"R\tpageToken\x12\x64\n\tpage_size\x18\x05 \x01(\rBG\x92\x41=27Number of clients per page. Defaults to 10, maximum 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x1a\x87\x02\n\x06\x46ilter\x12\xfc\x01\n\x0b\x63lient_type\x18\x01 \x03(\tB\xda\x01\x92\x41\xd6\x01\x32\xd3\x01\x46ilters clients by type. Valid values: WEB, ENV, WEB_APP, NTV, SPA, ALL. Defaults to WEB. ALL takes precedence and other types are ignored. For resource-specific clients (e.g., M2M), use ListResourceClients API.R\nclientTypeJ\x04\x08\x02\x10\x03\"\xf1\x03\n\x13ListClientsResponse\x12Z\n\ntotal_size\x18\x01 \x01(\rB;\x92\x41\x38\x32\x32Total number of client resources in the workspace.J\x02\x31\x32R\ttotalSize\x12\xc1\x01\n\x07\x63lients\x18\x02 \x03(\x0b\x32\x1b.scalekit.v1.clients.ClientB\x89\x01\x92\x41\x85\x01\x32\x82\x01List of client resource configurations matching the query criteria. Each client includes its metadata and authentication settings.R\x07\x63lients\x12\x65\n\x0fnext_page_token\x18\x03 \x01(\tB=\x92\x41:28Pagination token that retrieves the next page of resultsR\rnextPageToken\x12S\n\x0fprev_page_token\x18\x04 \x01(\tB+\x92\x41(2&Token for the previous page of resultsR\rprevPageToken\"\xed\x01\n\x13\x43reateClientRequest\x12\xd5\x01\n\x06\x63lient\x18\x01 \x01(\x0b\x32!.scalekit.v1.clients.CreateClientB\x99\x01\x92\x41\x8f\x01\x32\x1b\x43lient parameters to createJp{\"post_login_uris\": [\"https://app.example.com/callback\"], \"initiate_login_uri\": \"https://app.example.com/login\"}\xbaH\x03\xc8\x01\x01R\x06\x63lient\"\xc8\x17\n\x0c\x43reateClient\x12\xde\x01\n\x04name\x18\x01 \x01(\tB\xc9\x01\x92\x41\xba\x01\x32\x9e\x01\x41 descriptive name for the API client that helps identify its purpose. This name is displayed in the dashboard and logs. Must be between 1 and 128 characters.J\x17\"My Application Client\"\xbaH\x08r\x03\x18\x80\x01\xc8\x01\x01R\x04name\x12\xd6\x01\n\x0b\x63lient_type\x18\x02 \x01(\tB\xb4\x01\x92\x41\xa5\x01\x32\x99\x01\x43lient application type. Valid values: WEB_APP (web applications), SPA (single-page applications), NTV (native applications including mobile and desktop)J\x07WEB_APP\xbaH\x08r\x03\x18\x80\x01\xc8\x01\x01R\nclientType\x12\xb6\x02\n\x18\x62\x61\x63k_channel_logout_uris\x18\x03 \x03(\tB\xfc\x01\x92\x41\xe9\x01\x32wHTTPS endpoints that receive back-channel logout notifications for application-initiated logout and session management.Jn[\"https://app.example.com/backchannel-logout-internal\", \"https://app.example.com/backchannel-logout-external\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\x15\x62\x61\x63kChannelLogoutUris\x12\xb6\x02\n\x19post_logout_redirect_uris\x18\x04 \x03(\tB\xfa\x01\x92\x41\xe7\x01\x32\x9c\x01\x41llowed URIs for post-logout redirection. These URIs are used when a user is redirected after logout. Must use HTTPS and conform to security specifications.JF[\"https://app.example.com/logged-out\", \"https://app.example.com/home\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\x16postLogoutRedirectUris\x12\xff\x01\n\x12initiate_login_uri\x18\x05 \x01(\tB\xcb\x01\x92\x41\xc7\x01\x32\xa3\x01Pre-configured URI for initiating login flows. This URI is used to start authentication flows programmatically. Must use HTTPS protocol and contain a valid domain.J\x1f\"https://app.example.com/login\"H\x00R\x10initiateLoginUri\x88\x01\x01\x12\xf9\x01\n\x0fpost_login_uris\x18\x06 \x03(\tB\xd0\x01\x92\x41\xbd\x01\x32uList of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\rpostLoginUris\x12g\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x07 \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30R\x11\x61\x63\x63\x65ssTokenExpiry\x12\xb3\x01\n\x06scopes\x18\x08 \x03(\tB\x9a\x01\x92\x41\x96\x01\x32wList of scopes to be attached to this client. These scopes must be a subset of the scopes available in the environment.J\x1b[\"data:read\", \"data:write\"]R\x06scopes\x12\xc6\x01\n\rcustom_claims\x18\t \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\x7f\x92\x41|2zCustom claims to be included in access tokens. Please keep this to the essentials as this increases the size of the token.R\x0c\x63ustomClaims\x12\xf0\x01\n\x1c\x64isallow_scalekit_api_access\x18\n \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x92\x01\x92\x41\x8e\x01\x32\x85\x01If set to true, the client will be restricted from accessing Scalekit APIs directly, enhancing security by limiting its capabilities.J\x04trueR\x19\x64isallowScalekitApiAccess\x12\xe0\x01\n\x0bgrant_types\x18\x0b \x03(\tB\xbe\x01\x92\x41\xba\x01\x32yList of OAuth 2.0 grant types that the client is authorized to use. This defines how the client can obtain access tokens.J=[\"authorization_code\", \"refresh_token\", \"client_credentials\"]R\ngrantTypes\x12\xe1\x01\n\x0c\x65nforce_pkce\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xa1\x01\x92\x41\x9d\x01\x32\x94\x01Whether Proof Key for Code Exchange (PKCE) is required. PKCE mitigates authorization code interception attacks. Defaults to true for public clients.J\x04trueR\x0b\x65nforcePkce:\xd4\x01\x92\x41\xd0\x01\n\x9c\x01*\rCreate Client2\x8a\x01Request message for creating a new API client with specified configuration parameters including redirect URIs and authentication settings.*/\n\x11\x41PI Documentation\x12\x1ahttps://docs.scalekit.com/B\x15\n\x13_initiate_login_uri\"\x8c\x01\n\x14\x43reateClientResponse\x12t\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.clients.ClientB?\x92\x41<2:Created client with all settings reflected in the responseR\x06\x63lient\"\xfa\x03\n\x13UpdateClientRequest\x12}\n\tclient_id\x18\x01 \x01(\tB`\x92\x41T2:Unique identifier of the registered application to update.J\x16\"skc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\x12\x9f\x02\n\x06\x63lient\x18\x02 \x01(\x0b\x32!.scalekit.v1.clients.UpdateClientB\xe3\x01\x92\x41\xd9\x01\x32\x62\x41pplication configuration parameters to update. Contains redirect URIs and authentication settingsJs{\"redirect_uris\": [\"https://app.example.com/callback\"], \"default_redirect_uri\": \"https://app.example.com/callback\"}\xbaH\x03\xc8\x01\x01R\x06\x63lient\x12\x42\n\x04mask\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB\x12\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\x04mask\"\xa0\x1b\n\x0cUpdateClient\x12\x9e\x02\n\rredirect_uris\x18\x02 \x03(\tB\xf8\x01\x92\x41\xe5\x01\x32\x9c\x01List of allowed redirect URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTPS in production environments. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\x0credirectUris\x12\x9b\x02\n\x14\x64\x65\x66\x61ult_redirect_uri\x18\x03 \x01(\tB\xe3\x01\x92\x41\xa7\x01\x32\x80\x01Primary redirect URI used when none is specified in authorization requests. Must exactly match one of the URIs in redirect_uris.J\"\"https://app.example.com/callback\"\xbaH5\xba\x01\x32\n\tvalid_uri\x12\x17uri must be a valid URI\x1a\x0cthis.isUri()H\x00R\x12\x64\x65\x66\x61ultRedirectUri\x88\x01\x01\x12\xc3\x02\n\x18\x62\x61\x63k_channel_logout_uris\x18\x04 \x03(\tB\x89\x02\x92\x41\xf6\x01\x32\x95\x01HTTPS endpoints for receiving back-channel logout notifications. Required for implementing application-initiated logout flows and session management.J\\[\"https://app.example.com/backchannel-logout\", \"https://app.example.com/backchannel-logout\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\x15\x62\x61\x63kChannelLogoutUris\x12\xb6\x02\n\x19post_logout_redirect_uris\x18\x05 \x03(\tB\xfa\x01\x92\x41\xe7\x01\x32\x9c\x01\x41llowed URIs for post-logout redirection. These URIs are used when a user is redirected after logout. Must use HTTPS and conform to security specifications.JF[\"https://app.example.com/logged-out\", \"https://app.example.com/home\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\x16postLogoutRedirectUris\x12\xff\x01\n\x12initiate_login_uri\x18\x06 \x01(\tB\xcb\x01\x92\x41\xc7\x01\x32\xa3\x01Pre-configured URI for initiating login flows. This URI is used to start authentication flows programmatically. Must use HTTPS protocol and contain a valid domain.J\x1f\"https://app.example.com/login\"H\x01R\x10initiateLoginUri\x88\x01\x01\x12\xa3\x02\n\x0fpost_login_uris\x18\x07 \x03(\tB\xfa\x01\x92\x41\xe7\x01\x32\x9e\x01List of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTPS in production environments. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\rpostLoginUris\x12\xd3\x01\n\x04name\x18\x08 \x01(\tB\xbe\x01\x92\x41\xba\x01\x32\x9e\x01\x41 descriptive name for the API client that helps identify its purpose. This name is displayed in the dashboard and logs. Must be between 1 and 128 characters.J\x17\"My Application Client\"R\x04name\x12g\n\x13\x61\x63\x63\x65ss_token_expiry\x18\t \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30R\x11\x61\x63\x63\x65ssTokenExpiry\x12\xb3\x01\n\x06scopes\x18\x0b \x03(\tB\x9a\x01\x92\x41\x96\x01\x32wList of scopes to be attached to this client. These scopes must be a subset of the scopes available in the environment.J\x1b[\"data:read\", \"data:write\"]R\x06scopes\x12\xc6\x01\n\rcustom_claims\x18\x0c \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\x7f\x92\x41|2zCustom claims to be included in access tokens. Please keep this to the essentials as this increases the size of the token.R\x0c\x63ustomClaims\x12\xf0\x01\n\x1c\x64isallow_scalekit_api_access\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x92\x01\x92\x41\x8e\x01\x32\x85\x01If set to true, the client will be restricted from accessing Scalekit APIs directly, enhancing security by limiting its capabilities.J\x04trueR\x19\x64isallowScalekitApiAccess\x12\xe0\x01\n\x0bgrant_types\x18\x0e \x03(\tB\xbe\x01\x92\x41\xba\x01\x32yList of OAuth 2.0 grant types that the client is authorized to use. This defines how the client can obtain access tokens.J=[\"authorization_code\", \"refresh_token\", \"client_credentials\"]R\ngrantTypes\x12\xe1\x01\n\x0c\x65nforce_pkce\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xa1\x01\x92\x41\x9d\x01\x32\x94\x01Whether Proof Key for Code Exchange (PKCE) is required. PKCE mitigates authorization code interception attacks. Defaults to true for public clients.J\x04trueR\x0b\x65nforcePkce:\x81\x02\x92\x41\xfd\x01\n\xbd\x01*\x1bUpdate Client Configuration2\x9d\x01Parameters for updating an API client application\'s configuration. This allows modification of redirect URIs, logout settings, and other security parameters.*;\n\x11\x41PI Documentation\x12&https://docs.scalekit.com/m2m/overviewB\x17\n\x15_default_redirect_uriB\x15\n\x13_initiate_login_uri\"\xa8\x01\n\x14UpdateClientResponse\x12\x8f\x01\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.clients.ClientBZ\x92\x41W2UUpdated application configuration with all current settings reflected in the responseR\x06\x63lient\"\xae\x01\n\x19\x43reateClientSecretRequest\x12\x90\x01\n\tclient_id\x18\x01 \x01(\tBs\x92\x41g2MUnique identifier of the client application for which to create a new secret.J\x16\"skc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\"\xad\x03\n\x1a\x43reateClientSecretResponse\x12\xc6\x01\n\x0cplain_secret\x18\x01 \x01(\tB\xa2\x01\x92\x41\x9e\x01\x32\x84\x01Plaintext secret value. This value is only returned once at creation time and must be stored securely. It cannot be retrieved again.J\x15\"sec_plaintext123456\"R\x0bplainSecret\x12\xc5\x01\n\x06secret\x18\x02 \x01(\x0b\x32!.scalekit.v1.clients.ClientSecretB\x89\x01\x92\x41\x85\x01\x32\x82\x01Metadata about the newly created secret, including its ID, creation time, and status. Does not include the plaintext secret value.R\x06secret\"\x83\x05\n\x19UpdateClientSecretRequest\x12\x8f\x01\n\tclient_id\x18\x01 \x01(\tBr\x92\x41\x66\x32LUnique identifier of the client application containing the secret to update.J\x16\"skc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\x12\xab\x01\n\tsecret_id\x18\x02 \x01(\tB\x8d\x01\x92\x41\x80\x01\x32\x66Unique identifier of the client secret to update. This references a specific secret within the client.J\x16\"sec_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08secretId\x12\xb0\x01\n\x06secret\x18\x03 \x01(\x0b\x32\'.scalekit.v1.clients.UpdateClientSecretBo\x92\x41\x66\x32\x64Updated settings for the secret. Currently supports modifying the secret\'s status (active/inactive).\xbaH\x03\xc8\x01\x01R\x06secret\x12s\n\x04mask\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskBC\x92\x41@2>Specifies which fields to update. System-controlled parameter.R\x04mask\"\xec\x01\n\x12UpdateClientSecret\x12\xd5\x01\n\x06status\x18\x01 \x01(\x0e\x32\'.scalekit.v1.clients.ClientSecretStatusB\x93\x01\x92\x41\x8f\x01\x32\x82\x01Status to set for the client secret. Set to ACTIVE to enable the secret for authentication, or INACTIVE to temporarily disable it.J\x08INACTIVER\x06status\"\xe7\x01\n\x1aUpdateClientSecretResponse\x12\xc8\x01\n\x06secret\x18\x01 \x01(\x0b\x32!.scalekit.v1.clients.ClientSecretB\x8c\x01\x92\x41\x88\x01\x32\x85\x01Updated secret metadata, reflecting the changes made by the update operation. Note that the plaintext secret value is never returned.R\x06secret\"\x85\x01\n\x13\x44\x65leteClientRequest\x12n\n\tclient_id\x18\x01 \x01(\tBQ\x92\x41\x45\x32*Unique identifier of the client to delete.J\x17\"webc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\"\xb3\x02\n\x19\x44\x65leteClientSecretRequest\x12q\n\tclient_id\x18\x01 \x01(\tBT\x92\x41H2.Identifier of the client containing the secretJ\x16\"skc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\x12\xa2\x01\n\tsecret_id\x18\x02 \x01(\tB\x84\x01\x92\x41x2^Unique identifier of the client secret to permanently delete. This operation cannot be undone.J\x16\"sec_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08secretId\"\xd7\"\n\x06\x43lient\x12\xe2\x01\n\x02id\x18\x01 \x01(\tB\xd1\x01\x92\x41\xcd\x01\x32\xb2\x01Unique identifier for the client application. This ID is automatically generated when the client is created and cannot be modified. Used in API requests and authentication flows.J\x16\"skc_1234abcd5678efgh\"R\x02id\x12\xd7\x01\n\x05keyId\x18\x02 \x01(\tB\xc0\x01\x92\x41\xbc\x01\x32\xa1\x01Identifier for the cryptographic key pair used to sign tokens. This key is used for JWT signing operations. Keys can be rotated by generating new client secrets.J\x16\"key_9876zyxw5432vuts\"R\x05keyId\x12\xf0\x01\n\x0b\x63reate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xb2\x01\x92\x41\xae\x01\x32\x8f\x01Timestamp indicating when the client configuration was initially created. This field is automatically set by the server and cannot be modified.J\x1a\"2024-01-05T14:48:00.000Z\"R\ncreateTime\x12\x81\x02\n\x0bupdate_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xc3\x01\x92\x41\xbf\x01\x32\xa0\x01Timestamp of the last modification to the client configuration. This field is automatically updated by the server whenever any aspect of the client is modified.J\x1a\"2024-01-10T09:12:00.000Z\"R\nupdateTime\x12\xd5\x02\n\rredirect_uris\x18\x05 \x03(\tB\xaf\x02\x92\x41\xab\x02\x32\xdb\x01List of allowed redirect URIs for OAuth 2.0 authorization flows. These URIs must use HTTPS protocol in production environments and comply with RFC 6749. Users will be redirected to one of these URIs after authorization.JK[\"https://auth.your-app.com/callback\", \"https://scalekit.example.org/auth\"]R\x0credirectUris\x12\x80\x02\n\x14\x64\x65\x66\x61ult_redirect_uri\x18\x06 \x01(\tB\xcd\x01\x92\x41\xc9\x01\x32\xa0\x01Primary redirect URI used when none is explicitly specified in authorization requests. This URI must exactly match one of the entries in the redirect_uris list.J$\"https://auth.your-app.com/callback\"R\x12\x64\x65\x66\x61ultRedirectUri\x12\xa5\x02\n\x07secrets\x18\x07 \x03(\x0b\x32!.scalekit.v1.clients.ClientSecretB\xe7\x01\x92\x41\xe3\x01\x32\xe0\x01List of client secrets used for authentication. Each secret is stored securely using one-way hashing (bcrypt). The plaintext secret values are only displayed during initial creation and must be stored securely by the client.R\x07secrets\x12\xa3\x02\n\x19post_logout_redirect_uris\x18\x08 \x03(\tB\xe7\x01\x92\x41\xe3\x01\x32\xba\x01\x41llowed URIs for post-logout redirection. These URIs are used when a user is redirected after signing out. Must use HTTPS and conform to OpenID Connect Session Management specifications.J$[\"https://auth.your-app.com/logout\"]R\x16postLogoutRedirectUris\x12\xc9\x02\n\x18\x62\x61\x63k_channel_logout_uris\x18\t \x03(\tB\x8f\x02\x92\x41\x8b\x02\x32\xd8\x01HTTPS endpoint for receiving back-channel logout notifications. This URI is called by the authentication server when a session expires or is terminated. Required for implementing relying party-initiated logout flows.J.\"https://auth.your-app.com/backchannel-logout\"R\x15\x62\x61\x63kChannelLogoutUris\x12\xa0\x02\n\x12initiate_login_uri\x18\n \x01(\tB\xf1\x01\x92\x41\xed\x01\x32\xbf\x01Pre-configured URI for initiating login flows programmatically. This URI must use the HTTPS scheme and contain a valid domain. Used for starting authentication flows without user interaction.J)\"https://auth.your-app.com/initiate-auth\"R\x10initiateLoginUri\x12\xab\x02\n\x0fpost_login_uris\x18\x0b \x03(\tB\x82\x02\x92\x41\xfe\x01\x32\xb3\x01List of allowed redirect URIs for OAuth 2.0 authorization flows. These URIs must use HTTPS protocol in production environments and comply with RFC 6749. Maximum of 5 URIs allowed.JF[\"https://auth.your-app.com/callback\", \"https://dev.example.com/auth\"]R\rpostLoginUris\x12t\n\x04name\x18\x0c \x01(\tB`\x92\x41]2BA descriptive name for the client that helps identify its purpose.J\x17\"My Application Client\"R\x04name\x12l\n\x13\x61\x63\x63\x65ss_token_expiry\x18\r \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30H\x00R\x11\x61\x63\x63\x65ssTokenExpiry\x88\x01\x01\x12g\n\x06scopes\x18\x0e \x03(\tBO\x92\x41L2-List of scopes to be attached to this client.J\x1b[\"data:read\", \"data:write\"]R\x06scopes\x12\xc6\x01\n\rcustom_claims\x18\x0f \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\x7f\x92\x41|2zCustom claims to be included in access tokens. Please keep this to the essentials as this increases the size of the token.R\x0c\x63ustomClaims\x12\x8f\x01\n\x1c\x64isallow_scalekit_api_access\x18\x10 \x01(\x08\x42N\x92\x41K2CIf true, the client will be restricted from accessing Scalekit APIsJ\x04trueR\x19\x64isallowScalekitApiAccess\x12\xaa\x01\n\x0bgrant_types\x18\x11 \x03(\tB\x88\x01\x92\x41\x84\x01\x32\x43List of OAuth 2.0 grant types that the client is authorized to use.J=[\"authorization_code\", \"refresh_token\", \"client_credentials\"]R\ngrantTypes\x12\x66\n\x0b\x63lient_type\x18\x12 \x01(\tBE\x92\x41\x42\x32\x39Type of client. Valid values: WEB, ENV, WEB_APP, NTV, SPAJ\x05\"WEB\"R\nclientType\x12\xc5\x01\n\x0c\x65nforce_pkce\x18\x13 \x01(\x08\x42\xa1\x01\x92\x41\x9d\x01\x32\x94\x01Whether Proof Key for Code Exchange (PKCE) is required. PKCE mitigates authorization code interception attacks. Defaults to true for public clients.J\x04trueR\x0b\x65nforcePkce:\xb3\x01\x92\x41\xaf\x01\n\xac\x01*\x12\x43lient Application2\x95\x01\x43onfiguration for an API client application registered with Scalekit. Contains authentication settings, redirect URIs, and other security parameters.B\x16\n\x14_access_token_expiry\"\xc1\x13\n\x0c\x43lientSecret\x12\xd5\x01\n\x02id\x18\x01 \x01(\tB\xc4\x01\x92\x41\xc0\x01\x32\xa5\x01The unique identifier for this client secret. This ID is used to reference the secret in API requests for management operations like updating or deleting the secret.J\x16\"sec_1234abcd5678efgh\"R\x02id\x12\xd1\x01\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x93\x01\x92\x41\x8f\x01\x32qThe timestamp when this secret was created. This field is automatically set by the server and cannot be modified.J\x1a\"2024-01-05T14:48:00.000Z\"R\ncreateTime\x12\x86\x02\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xc8\x01\x92\x41\xc4\x01\x32\xa5\x01The timestamp when this secret was last updated. This field is automatically updated by the server when the secret\'s status changes or other properties are modified.J\x1a\"2024-01-10T09:12:00.000Z\"R\nupdateTime\x12\x82\x02\n\rsecret_suffix\x18\x04 \x01(\tB\xdc\x01\x92\x41\xd8\x01\x32\xcd\x01\x41 suffix that helps identify this secret. This is the last few characters of the full secret value but is not sufficient for authentication. Helps identify which secret is being used in logs and debugging.J\x06\"xyzw\"R\x0csecretSuffix\x12\xc9\x01\n\ncreated_by\x18\x05 \x01(\tB\xa4\x01\x92\x41\xa0\x01\x32\x8f\x01The identifier of the user or system that created this secret. This field helps track who created the secret for audit and compliance purposes.J\x0c\"user_12345\"H\x00R\tcreatedBy\x88\x01\x01\x12\x86\x02\n\x06status\x18\x06 \x01(\x0e\x32\'.scalekit.v1.clients.ClientSecretStatusB\xc4\x01\x92\x41\xc0\x01\x32\xb1\x01The current status of this secret. A secret must be ACTIVE to be used for authentication. INACTIVE secrets cannot be used for authentication but are retained for audit purposes.J\n\"INACTIVE\"R\x06status\x12\x8c\x02\n\x0b\x65xpire_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xce\x01\x92\x41\xca\x01\x32\xab\x01The timestamp when this secret will expire. After this time, the secret cannot be used for authentication regardless of its status. If not set, the secret does not expire.J\x1a\"2025-01-05T14:48:00.000Z\"R\nexpireTime\x12\xa6\x02\n\x0elast_used_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xe3\x01\x92\x41\xdf\x01\x32\xc0\x01The timestamp when this secret was last used for authentication. This field helps track secret usage for security monitoring and identifying unused secrets that may be candidates for rotation.J\x1a\"2024-02-15T10:30:00.000Z\"R\x0clastUsedTime\x12\xb3\x02\n\x0cplain_secret\x18\t \x01(\tB\x8a\x02\x92\x41\x86\x02\x32\xd7\x01The full plaintext secret value. This field is only populated when the secret is first created and is never stored by the server. It must be securely stored by the client application as it cannot be retrieved again.J*\"sec_1234567890abcdefghijklmnopqrstuvwxyz\"H\x01R\x0bplainSecret\x88\x01\x01:\x93\x01\x92\x41\x8f\x01\n\x8c\x01*\rClient Secret2{A secure credential used for authenticating an API client. Each client can have multiple secrets for key rotation purposes.B\r\n\x0b_created_byB\x0f\n\r_plain_secret\"\xb8\x02\n\x05Scope\x12\xa8\x01\n\x02id\x18\x01 \x01(\tB\x97\x01\x92\x41\x8a\x01\x32tUnique identifier for the scope resource. Must be between 1 and 100 characters long and match the specified pattern.J\x12\"scope_1234567890\"\xbaH\x06r\x04\x10\x01\x18\x64R\x02id\x12\x36\n\x04name\x18\x02 \x01(\tB\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9:]{1,64}$\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\x12 \n\x07\x65nabled\x18\x04 \x01(\x08\x42\x06\xbaH\x03\xc8\x01\x01R\x07\x65nabled\"q\n\x0b\x43reateScope\x12\x36\n\x04name\x18\x01 \x01(\tB\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9:]{1,64}$\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\"\xf3\x01\n\x12\x43reateScopeRequest\x12>\n\x05scope\x18\x01 \x01(\x0b\x32 .scalekit.v1.clients.CreateScopeB\x06\xbaH\x03\xc8\x01\x01R\x05scope\x12\x9c\x01\n\x06\x65nv_id\x18\x02 \x01(\tB\x84\x01\x92\x41x2dUnique identifier of the environment where the scope will be created. Must start with \'env_\' prefix.J\x10\"env_1234567890\"\xbaH\x06r\x04\x10\x00\x18 R\x05\x65nvId\"G\n\x13\x43reateScopeResponse\x12\x30\n\x05scope\x18\x01 \x01(\x0b\x32\x1a.scalekit.v1.clients.ScopeR\x05scope\"\xaa\x01\n\x11ListScopesRequest\x12\x94\x01\n\x06\x65nv_id\x18\x01 \x01(\tB}\x92\x41q2]Unique identifier of the environment for which to list scopes. Must start with \'env_\' prefix.J\x10\"env_1234567890\"\xbaH\x06r\x04\x10\x00\x18 R\x05\x65nvId\"H\n\x12ListScopesResponse\x12\x32\n\x06scopes\x18\x01 \x03(\x0b\x32\x1a.scalekit.v1.clients.ScopeR\x06scopes\"o\n\x12UpdateScopeRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18\x64R\x02id\x12>\n\x05scope\x18\x02 \x01(\x0b\x32 .scalekit.v1.clients.UpdateScopeB\x06\xbaH\x03\xc8\x01\x01R\x05scope\"o\n\x0bUpdateScope\x12*\n\x0b\x64\x65scription\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\x12\x34\n\x07\x65nabled\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x07\x65nabled\"G\n\x13UpdateScopeResponse\x12\x30\n\x05scope\x18\x01 \x01(\x0b\x32\x1a.scalekit.v1.clients.ScopeR\x05scope\"1\n\x12\x44\x65leteScopeRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06:\x04scp_R\x02id\"\xdc\x04\n\x19GetConsentDetailsResponse\x12\x61\n\x08resource\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.clients.ResourceB&\x92\x41#2!Details of the requested resourceR\x08resource\x12[\n\x04user\x18\x02 \x01(\x0b\x32\x19.scalekit.v1.clients.UserB,\x92\x41)2\'Details of the user who granted consentR\x04user\x12r\n\x06\x63lient\x18\x03 \x01(\x0b\x32\".scalekit.v1.clients.ConsentClientB6\x92\x41\x33\x32\x31\x44\x65tails of the client resource requesting consentR\x06\x63lient\x12\x9b\x01\n\x06scopes\x18\x04 \x03(\x0b\x32!.scalekit.v1.clients.ConsentScopeB`\x92\x41]2[List of scopes for which consent was granted. Each scope includes its name and description.R\x06scopes\x12m\n\x0b\x61pplication\x18\x05 \x01(\x0b\x32 .scalekit.v1.clients.ApplicationB)\x92\x41&2$Details of the requested applicationR\x0b\x61pplication\"\xba\x05\n\rConsentClient\x12R\n\x04name\x18\x01 \x01(\tB>\x92\x41;2.Name of the client resource requesting consentJ\t\"VS Code\"R\x04name\x12x\n\x0bprivacy_uri\x18\x02 \x01(\tBW\x92\x41M2,Privacy policy URI of the client applicationJ\x1d\"https://yourapp.com/privacy\"\xbaH\x04r\x02\x18\x64R\nprivacyUri\x12q\n\x07tos_uri\x18\x03 \x01(\tBX\x92\x41M2.Terms of service URI of the client applicationJ\x1b\"https://yourapp.com/terms\"\xbaH\x05r\x03\x18\xd0\x0fR\x06tosUri\x12o\n\tclient_id\x18\x04 \x01(\tBR\x92\x41O2;Unique identifier of the client resource requesting consentJ\x10\"m2m_1234567890\"R\x08\x63lientId\x12\x8e\x01\n\x0cmetadata_uri\x18\x05 \x01(\tBk\x92\x41h2AMetadata URI of the client application - applicable for CIMD onlyJ#\"https://example.com/metadata.json\"R\x0bmetadataUri\x12\x66\n\x08logo_uri\x18\x06 \x01(\tBK\x92\x41H2\"Logo URI of the client applicationJ\"\"https://cdn.example.com/logo.png\"R\x07logoUri\"\\\n\x0c\x43onsentScope\x12 \n\x04name\x18\x01 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\"r\n\x04User\x12j\n\x05\x65mail\x18\x01 \x01(\tBT\x92\x41Q28Email address of the user. Must be a valid email format.J\x15\x61lice.doe@example.comR\x05\x65mail\"\xa2\x02\n\x18RevokeUserConsentRequest\x12\x87\x01\n\tclient_id\x18\x01 \x01(\tBj\x92\x41X2DUnique identifier of the client resource for which to revoke consentJ\x10\"m2m_1234567890\"\xbaH\x0cr\n\x10\x01\x18 :\x04m2m_R\x08\x63lientId\x12|\n\nconsent_id\x18\x02 \x01(\tB]\x92\x41G2/Unique identifier of the user consent to revokeJ\x14\"usrcnst_1234567890\"\xbaH\x10r\x0e\x10\x01\x18 :\x08usrcnst_R\tconsentId\"\x1b\n\x19RevokeUserConsentResponse\"\x9f\x01\n\x1f\x45nsureResourceConnectionRequest\x12|\n\x0bresource_id\x18\x01 \x01(\tB[\x92\x41O24Unique identifier of the client resource to retrieveJ\x17\"app_69388798466720005\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\"\xd4\x01\n EnsureResourceConnectionResponse\x12\xaf\x01\n\nconnection\x18\x01 \x01(\x0b\x32\'.scalekit.v1.clients.ResourceConnectionBf\x92\x41]2[Details of the connection resource. Contains configuration settings and status information.\xbaH\x03\xc8\x01\x01R\nconnection\"\xb0\x07\n\x12ResourceConnection\x12T\n\x02id\x18\x01 \x01(\tBD\x92\x41\x41\x32,Unique identifier of the connection resourceJ\x11\"conn_1234567890\"R\x02id\x12\xa1\x01\n\x04type\x18\x02 \x01(\x0e\x32+.scalekit.v1.clients.ResourceConnectionTypeB`\x92\x41]2QType of connection. Determines the authentication method used for the connection.J\x08\"CUSTOM\"R\x04type\x12\x94\x01\n\x06status\x18\x03 \x01(\tB|\x92\x41y2mCurrent status of the connection. Indicates whether the connection is active, inactive, or in an error state.J\x08\"ACTIVE\"R\x06status\x12\x89\x01\n\x07\x65nabled\x18\x04 \x01(\x08\x42o\x92\x41l2dIndicates whether the connection is enabled. Disabled connections cannot be used for authentication.J\x04trueR\x07\x65nabled\x12\xe7\x01\n\x08settings\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructB\xb1\x01\x92\x41\xad\x01\x32kConfiguration settings for the connection. The structure of this field varies based on the connection type.J>{\"api_key\": \"abcd1234\", \"endpoint\": \"https://api.example.com\"}R\x08settings\x12\x92\x01\n\x08provider\x18\x06 \x01(\tBv\x92\x41s2^The provider of the connection. Indicates the service or platform that manages the connection.J\x11\"custom_provider\"R\x08provider\"\xdc\x01\n ResourceCustomConnectionSettings\x12\xb7\x01\n\rauthorize_uri\x18\x01 \x01(\tB\x91\x01\x92\x41\x83\x01\x32[The URI where users are redirected to authorize the application. Must be a valid HTTPS URL.J$\"https://auth.example.com/authorize\"\xbaH\x07r\x05\x10\x01\x88\x01\x01R\x0c\x61uthorizeUri*k\n\x0cResourceType\x12\x1d\n\x19RESOURCE_TYPE_UNSPECIFIED\x10\x00\x12\x07\n\x03WEB\x10\x01\x12\n\n\x06MOBILE\x10\x02\x12\x0b\n\x07\x44\x45SKTOP\x10\x03\x12\n\n\x06SERVER\x10\x04\x12\x0e\n\nMCP_SERVER\x10\x05*.\n\x12\x43lientSecretStatus\x12\n\n\x06\x41\x43TIVE\x10\x00\x12\x0c\n\x08INACTIVE\x10\x01*1\n\x16ResourceConnectionType\x12\x0b\n\x07INVALID\x10\x00\x12\n\n\x06\x43USTOM\x10\x01\x32\xb9\x8a\x01\n\rClientService\x12\xa0\x03\n\nListClient\x12\'.scalekit.v1.clients.ListClientsRequest\x1a(.scalekit.v1.clients.ListClientsResponse\"\xbe\x02\x92\x41\x8e\x02\n\x08\x41PI Auth\x12\x10List API clients\x1a\x90\x01Retrieves a paginated list of API client applications in the environment. Returns only environment-level clients, not resource-specific clients.J]\n\x03\x32\x30\x30\x12V\n&List of clients returned successfully.\x12,\n*\x1a(.scalekit.v1.clients.ListClientsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x11\x12\x0f/api/v1/clients\x12\xb4\x03\n\x0c\x43reateClient\x12(.scalekit.v1.clients.CreateClientRequest\x1a).scalekit.v1.clients.CreateClientResponse\"\xce\x02\x92\x41\x96\x02\n\x06\x43lient\x12\rCreate Client\x1a\x81\x01\x43reates an OAuth client with properties including post-login URIs, scopes, and custom claims. Required fields: name, client_type.Jy\n\x03\x32\x30\x30\x12r\nAClient created successfully. Returns the created client resource.\x12-\n+\x1a).scalekit.v1.clients.CreateClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\"\x0f/api/v1/clients:\x06\x63lient\x12\xd0\x04\n\tGetClient\x12%.scalekit.v1.clients.GetClientRequest\x1a&.scalekit.v1.clients.GetClientResponse\"\xf3\x03\x92\x41\xb7\x03\n\x0e\x43lient Configs\x12\x18Get Client Configuration\x1a\xc5\x01Retrieves complete client configuration including scopes, custom claims, redirect URIs, and access token expiration time. Use this endpoint to view or verify client settings and security parametersJ\xc2\x01\n\x03\x32\x30\x30\x12\xba\x01\n\x8b\x01\x43lient configuration retrieved successfully. Returns full client metadata including scopes, audience, custom claims, and security settings.\x12*\n(\x1a&.scalekit.v1.clients.GetClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1d\x12\x1b/api/v1/clients/{client_id}\x12\xc3\x05\n\x0cUpdateClient\x12(.scalekit.v1.clients.UpdateClientRequest\x1a).scalekit.v1.clients.UpdateClientResponse\"\xdd\x04\x92\x41\x99\x04\n\x0e\x43lient Configs\x12\x1bUpdate Client Configuration\x1a\xb0\x02Updates the configuration settings for an M2M client. This endpoint allows you to modify client properties such as redirect URIs, scopes, audience, and custom claims. Required fields include redirect_uris and default_redirect_uri. Note that client_id and create_time are immutable and cannot be modified.J\xb6\x01\n\x03\x32\x30\x31\x12\xae\x01\n}Client configuration updated successfully. Returns the updated client resource with new update_time and all current settings.\x12-\n+\x1a).scalekit.v1.clients.UpdateClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%2\x1b/api/v1/clients/{client_id}:\x06\x63lient\x12\x9a\x03\n\x0c\x44\x65leteClient\x12(.scalekit.v1.clients.DeleteClientRequest\x1a\x16.google.protobuf.Empty\"\xc7\x02\x92\x41\x8b\x02\n\x06\x43lient\x12\rDelete Client\x1a\xb2\x01Permanently deletes a client and associated secrets. This operation cannot be undone. Supports WEB_APP, NTV, and SPA client types only. Cannot delete default environment clients.J=\n\x03\x32\x30\x30\x12\x36\n4Client successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1d*\x1b/api/v1/clients/{client_id}\x12\xa4\x05\n\x12\x43reateClientSecret\x12..scalekit.v1.clients.CreateClientSecretRequest\x1a/.scalekit.v1.clients.CreateClientSecretResponse\"\xac\x04\x92\x41\xe8\x03\n\x0e\x43lient Configs\x12\x14\x43reate Client Secret\x1a\x82\x02Generates a new client secret for an API client. This endpoint creates a secure credential that can be used for OAuth 2.0 client credentials flow. The plain secret is only returned once during creation and should be stored securely by the client application.J\xba\x01\n\x03\x32\x30\x31\x12\xb2\x01\n{Client secret created successfully. Returns the new secret ID and the plain secret value (only available at creation time).\x12\x33\n1\x1a/.scalekit.v1.clients.CreateClientSecretResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\"#/api/v1/clients/{client_id}/secrets\x12\xca\x05\n\x12UpdateClientSecret\x12..scalekit.v1.clients.UpdateClientSecretRequest\x1a/.scalekit.v1.clients.UpdateClientSecretResponse\"\xd2\x04\x92\x41\xbf\x03\n\x0e\x43lient Configs\x12\x14Update Client Secret\x1a\xfd\x01Updates the status of a client secret. This endpoint allows you to activate or deactivate a client secret. Use this to rotate secrets or revoke access for compromised credentials. The secret value itself cannot be modified - create a new secret instead.J\x96\x01\n\x03\x32\x30\x30\x12\x8e\x01\nWClient secret updated successfully. Returns the updated secret with its current status.\x12\x33\n1\x1a/.scalekit.v1.clients.UpdateClientSecretResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02t\x1a//api/v1/clients/{client_id}/secrets/{secret_id}:\x06secretZ92//api/v1/clients/{client_id}/secrets/{secret_id}:\x06secret\x12\xe3\x03\n\x12\x44\x65leteClientSecret\x12..scalekit.v1.clients.DeleteClientSecretRequest\x1a\x16.google.protobuf.Empty\"\x84\x03\x92\x41\xb4\x02\n\x0e\x43lient Configs\x12\x14\x44\x65lete Client Secret\x1a\xc5\x01Permanently deletes a client secret. This operation cannot be undone. Use this endpoint to remove compromised or unused secrets. After deletion, the secret can no longer be used for authentication.JD\n\x03\x32\x30\x30\x12=\n;Client secret successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31*//api/v1/clients/{client_id}/secrets/{secret_id}\x12\x92\x05\n\x18\x43reateOrganizationClient\x12\x34.scalekit.v1.clients.CreateOrganizationClientRequest\x1a\x35.scalekit.v1.clients.CreateOrganizationClientResponse\"\x88\x04\x92\x41\xbf\x03\n\x08\x41PI Auth\x12\x1e\x43reate organization API client\x1arCreates a new API client for an organization. Returns the client details and a plain secret (available only once).J\x9e\x02\n\x03\x32\x30\x31\x12\x96\x02\n\xd8\x01\x41PI client created successfully. Returns the client ID and plain secret (only available at creation time). The client can be configured with scopes, audience values, and custom claims for fine-grained access control.\x12\x39\n7\x1a\x35.scalekit.v1.clients.CreateOrganizationClientResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x39\"//api/v1/organizations/{organization_id}/clients:\x06\x63lient\x12\xb5\x04\n\x15GetOrganizationClient\x12\x31.scalekit.v1.clients.GetOrganizationClientRequest\x1a\x32.scalekit.v1.clients.GetOrganizationClientResponse\"\xb4\x03\x92\x41\xe7\x02\n\x08\x41PI Auth\x12\x1bGet organization API client\x1a>Retrieves details of a specific API client in an organization.J\xfd\x01\n\x03\x32\x30\x30\x12\xf5\x01\n\xba\x01Returns the complete API client configuration, including all current settings and a list of active secrets. Note that secret values are not included in the response for security reasons.\x12\x36\n4\x1a\x32.scalekit.v1.clients.GetOrganizationClientResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02=\x12;/api/v1/organizations/{organization_id}/clients/{client_id}\x12\x89\x05\n\x1e\x43reateOrganizationClientSecret\x12:.scalekit.v1.clients.CreateOrganizationClientSecretRequest\x1a;.scalekit.v1.clients.CreateOrganizationClientSecretResponse\"\xed\x03\x92\x41\x98\x03\n\x08\x41PI Auth\x12%Create organization API client secret\x1a\x64\x43reates a new secret for an organization API client. Returns the plain secret (available only once).J\xfe\x01\n\x03\x32\x30\x31\x12\xf6\x01\n\xb2\x01\x43lient secret created successfully. Returns the new secret ID and the plain secret value (only available at creation time). The secret can be used immediately for authentication.\x12?\n=\x1a;.scalekit.v1.clients.CreateOrganizationClientSecretResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x45\"C/api/v1/organizations/{organization_id}/clients/{client_id}/secrets\x12\xaf\x03\n\x1e\x44\x65leteOrganizationClientSecret\x12:.scalekit.v1.clients.DeleteOrganizationClientSecretRequest\x1a\x16.google.protobuf.Empty\"\xb8\x02\x92\x41\xd7\x01\n\x08\x41PI Auth\x12%Delete organization API client secret\x1a^Permanently deletes a secret from an organization API client. This operation cannot be undone.JD\n\x03\x32\x30\x30\x12=\n;Client secret successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02Q*O/api/v1/organizations/{organization_id}/clients/{client_id}/secrets/{secret_id}\x12\xc2\x04\n\x18UpdateOrganizationClient\x12\x34.scalekit.v1.clients.UpdateOrganizationClientRequest\x1a\x35.scalekit.v1.clients.UpdateOrganizationClientResponse\"\xb8\x03\x92\x41\xe3\x02\n\x08\x41PI Auth\x12\x1eUpdate organization API client\x1aPUpdates an existing organization API client. Only specified fields are modified.J\xe4\x01\n\x03\x32\x30\x30\x12\xdc\x01\n\x9e\x01Returns the updated organization API client with all current details reflected in the response, including modified scopes, audience values, and custom claims.\x12\x39\n7\x1a\x35.scalekit.v1.clients.UpdateOrganizationClientResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x45\x32;/api/v1/organizations/{organization_id}/clients/{client_id}:\x06\x63lient\x12\xa3\x04\n\x18\x44\x65leteOrganizationClient\x12\x34.scalekit.v1.clients.DeleteOrganizationClientRequest\x1a\x16.google.protobuf.Empty\"\xb8\x03\x92\x41\xeb\x02\n\x08\x41PI Auth\x12\x1e\x44\x65lete organization API client\x1a\xee\x01Permanently deletes an API client from an organization. This operation cannot be undone and will revoke all access for the client. All associated secrets will also be invalidated. Use this endpoint to remove unused or compromised clients.JN\n\x03\x32\x30\x30\x12G\nEOrganization API client successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02=*;/api/v1/organizations/{organization_id}/clients/{client_id}\x12\xe8\x04\n\x17ListOrganizationClients\x12\x33.scalekit.v1.clients.ListOrganizationClientsRequest\x1a\x34.scalekit.v1.clients.ListOrganizationClientsResponse\"\xe1\x03\x92\x41\xa0\x03\n\x08\x41PI Auth\x12\x1dList organization API clients\x1a\xb9\x01Retrieves a paginated list of API clients for a specific organization. Returns client details including metadata, scopes, and secret information (without exposing actual secret values).J\xb8\x01\n\x03\x32\x30\x30\x12\xb0\x01\ntList of organization API clients returned successfully. Each client includes its configuration details and metadata.\x12\x38\n6\x1a\x34.scalekit.v1.clients.ListOrganizationClientsResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x31\x12//api/v1/organizations/{organization_id}/clients\x12\x95\x03\n\x0e\x43reateResource\x12*.scalekit.v1.clients.CreateResourceRequest\x1a+.scalekit.v1.clients.CreateResourceResponse\"\xa9\x02\x92\x41\xed\x01\n\x08\x41PI Auth\x12\x0f\x43reate Resource\x1aXCreates a new client resource. The response includes the resource ID and other metadata.Jv\n\x03\x32\x30\x31\x12o\nResource details retrieved successfully. Returns the resource.\x12,\n*\x1a(.scalekit.v1.clients.GetResourceResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\x12\x1f/api/v1/resources/{resource_id}\x12\xd3\x02\n\rListResources\x12).scalekit.v1.clients.ListResourcesRequest\x1a*.scalekit.v1.clients.ListResourcesResponse\"\xea\x01\x92\x41\xb8\x01\n\x08\x41PI Auth\x12\x11List applications\x1a\x36Retrieves a paginated list of API client applications.Ja\n\x03\x32\x30\x30\x12Z\n(List of resources returned successfully.\x12.\n,\x1a*.scalekit.v1.clients.ListResourcesResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x13\x12\x11/api/v1/resources\x12\x93\x03\n\x0eUpdateResource\x12*.scalekit.v1.clients.UpdateResourceRequest\x1a+.scalekit.v1.clients.UpdateResourceResponse\"\xa7\x02\x92\x41\xdd\x01\n\x08\x41PI Auth\x12\x0fUpdate Resource\x1aHUpdates an existing client resource. Only specified fields are modified.Jv\n\x03\x32\x30\x30\x12o\nResource details retrieved successfully. Returns the resource.\x12,\n*\x1a(.scalekit.v1.clients.GetResourceResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\x1a//api/v1/resources/{resource_id}/provider:delete\x12\xf5\x03\n\x14\x43reateResourceClient\x12\x30.scalekit.v1.clients.CreateResourceClientRequest\x1a\x31.scalekit.v1.clients.CreateResourceClientResponse\"\xf7\x02\x92\x41\xa7\x02\n\x08\x41PI Auth\x12\x16\x43reate Resource Client\x1apCreates a new API client under the specified resource. Returns client details and the plain secret (shown once).J\x90\x01\n\x03\x32\x30\x31\x12\x88\x01\nOClient created successfully. Returns the client configuration and plain secret.\x12\x35\n3\x1a\x31.scalekit.v1.clients.CreateResourceClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\"\'/api/v1/resources/{resource_id}/clients:\x06\x63lient\x12\xcf\x03\n\x14UpdateResourceClient\x12\x30.scalekit.v1.clients.UpdateResourceClientRequest\x1a\x31.scalekit.v1.clients.UpdateResourceClientResponse\"\xd1\x02\x92\x41\xf5\x01\n\x08\x41PI Auth\x12\x16Update Resource Client\x1aHUpdates the configuration of an API client under the specified resource.J\x86\x01\n\x03\x32\x30\x30\x12\x7f\nFClient updated successfully. Returns the updated client configuration.\x12\x35\n3\x1a\x31.scalekit.v1.clients.UpdateResourceClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02=23/api/v1/resources/{resource_id}/clients/{client_id}:\x06\x63lient\x12\xce\x03\n\x11GetResourceClient\x12-.scalekit.v1.clients.GetResourceClientRequest\x1a..scalekit.v1.clients.GetResourceClientResponse\"\xd9\x02\x92\x41\x85\x02\n\x08\x41PI Auth\x12\x17Get Resource API Client\x1aJRetrieves details of a specific API client associated with an application.J\x93\x01\n\x03\x32\x30\x30\x12\x8b\x01\nUClient details retrieved successfully. Returns the resource and client configuration.\x12\x32\n0\x1a..scalekit.v1.clients.GetResourceClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x35\x12\x33/api/v1/resources/{resource_id}/clients/{client_id}\x12\xe7\x03\n\x13ListResourceClients\x12/.scalekit.v1.clients.ListResourceClientsRequest\x1a\x30.scalekit.v1.clients.ListResourceClientsResponse\"\xec\x02\x92\x41\xa4\x02\n\x08\x41PI Auth\x12\x19List Resource API Clients\x1aPRetrieves a list of API clients associated with a specific application resource.J\xaa\x01\n\x03\x32\x30\x30\x12\xa2\x01\njList of clients retrieved successfully. Returns the resource details and associated client configurations.\x12\x34\n2\x1a\x30.scalekit.v1.clients.ListResourceClientsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)\x12\'/api/v1/resources/{resource_id}/clients\x12\xcb\x03\n\x18ListResourceUserConsents\x12\x34.scalekit.v1.clients.ListResourceUserConsentsRequest\x1a\x35.scalekit.v1.clients.ListResourceUserConsentsResponse\"\xc1\x02\x92\x41\x8b\x02\n\x08\x41PI Auth\x12!List user consents for a resource\x1ajRetrieves a paginated list of user consents for a given resource, with optional search by external user IDJp\n\x03\x32\x30\x30\x12i\n,List of user consents retrieved successfully\x12\x39\n7\x1a\x35.scalekit.v1.clients.ListResourceUserConsentsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x17\x12\x15/api/v1/user_consents\x12\x87\x03\n\x14\x44\x65leteResourceClient\x12\x30.scalekit.v1.clients.DeleteResourceClientRequest\x1a\x31.scalekit.v1.clients.DeleteResourceClientResponse\"\x89\x02\x92\x41\xb5\x01\n\x08\x41PI Auth\x12\x16\x44\x65lete Resource Client\x1a\x33\x44\x65letes an API client under the specified resource.J\\\n\x03\x32\x30\x30\x12U\n\x1c\x43lient deleted successfully.\x12\x35\n3\x1a\x31.scalekit.v1.clients.DeleteResourceClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x35*3/api/v1/resources/{resource_id}/clients/{client_id}\x12\x82\x04\n\x0eRegisterClient\x12*.scalekit.v1.clients.RegisterClientRequest\x1a+.scalekit.v1.clients.RegisterClientResponse\"\x96\x03\x92\x41\xc2\x02\n\x08\x41PI Auth\x12\x13Register API client\x1a\x84\x01Registers a new API client under an existing resource using dynamic client registration. Returns the created client and its secrets.J\x99\x01\n\x03\x32\x30\x31\x12\x91\x01\n^Client registered successfully. Returns client details and plain secret (available only once).\x12/\n-\x1a+.scalekit.v1.clients.RegisterClientResponse\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x35\"+/api/v1/resources/{res_id}/clients:register:\x06\x63lient\x12\xb6\x05\n\x0b\x43reateScope\x12\'.scalekit.v1.clients.CreateScopeRequest\x1a(.scalekit.v1.clients.CreateScopeResponse\"\xd3\x04\x88\x02\x01\x92\x41\xeb\x03\x12\x19\x43reate scope (Deprecated)\x1a\xa1\x02\x44\x45PRECATED: Use permission management APIs instead. Creates a new OAuth scope for API authorization. Scopes define the level of access granted to API clients. Reserved OpenID Connect scopes (profile, email, address, phone) cannot be created as they are automatically managed by the system.J\xa9\x01\n\x03\x32\x30\x31\x12\xa1\x01\nqOAuth scope created successfully. Returns the newly created scope with its name, description, and enabled status.\x12,\n*\x1a(.scalekit.v1.clients.CreateScopeResponse\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x46\"\x0e/api/v1/scopes:\x05scopeZ-\"$/api/v1/environments/{env_id}/scopes:\x05scope\x12\xe9\x03\n\nListScopes\x12&.scalekit.v1.clients.ListScopesRequest\x1a\'.scalekit.v1.clients.ListScopesResponse\"\x89\x03\x92\x41\xb2\x02\x12\x0bList scopes\x1a\x7fRetrieves all OAuth scopes configured for the environment. Returns both custom scopes and system-managed OpenID Connect scopes.J\xa1\x01\n\x03\x32\x30\x30\x12\x99\x01\njList of OAuth scopes returned successfully. Each scope includes its name, description, and enabled status.\x12+\n)\x1a\'.scalekit.v1.clients.ListScopesResponse\x82\xb5\x18\x02\x18`\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x38\x12\x0e/api/v1/scopesZ&\x12$/api/v1/environments/{env_id}/scopes\x12\xaf\x04\n\x0bUpdateScope\x12\'.scalekit.v1.clients.UpdateScopeRequest\x1a(.scalekit.v1.clients.UpdateScopeResponse\"\xcc\x03\x88\x02\x01\x92\x41\x8e\x03\x12\x19Update scope (Deprecated)\x1a\xe0\x01\x44\x45PRECATED: Use permission management APIs instead. Updates an existing OAuth scope\'s description and enabled status. Reserved OpenID Connect scopes (profile, email, address, phone) cannot be modified through this endpoint.J\x8d\x01\n\x03\x32\x30\x30\x12\x85\x01\nUOAuth scope updated successfully. Returns the updated scope with all current details.\x12,\n*\x1a(.scalekit.v1.clients.UpdateScopeResponse\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1c\x32\x13/api/v1/scopes/{id}:\x05scope\x12\xe0\x03\n\x0b\x44\x65leteScope\x12\'.scalekit.v1.clients.DeleteScopeRequest\x1a\x16.google.protobuf.Empty\"\x8f\x03\x88\x02\x01\x92\x41\xd8\x02\x12\x19\x44\x65lete scope (Deprecated)\x1a\xf6\x01\x44\x45PRECATED: Use permission management APIs instead. Permanently deletes an OAuth scope from the environment. This operation cannot be undone. Reserved OpenID Connect scopes (profile, email, address, phone) cannot be deleted through this endpoint.JB\n\x03\x32\x30\x30\x12;\n9OAuth scope successfully deleted and no longer accessible\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15*\x13/api/v1/scopes/{id}\x12\x97\x01\n\x11GetConsentDetails\x12\x16.google.protobuf.Empty\x1a..scalekit.v1.clients.GetConsentDetailsResponse\":\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1f\x12\x1d/api/v1/oauth/consent/details\x12\xc2\x01\n\x11RevokeUserConsent\x12-.scalekit.v1.clients.RevokeUserConsentRequest\x1a..scalekit.v1.clients.RevokeUserConsentResponse\"N\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x33*1/api/v1/clients/{client_id}/consents/{consent_id}\x12\xea\x03\n\x18\x45nsureResourceConnection\x12\x34.scalekit.v1.clients.EnsureResourceConnectionRequest\x1a\x35.scalekit.v1.clients.EnsureResourceConnectionResponse\"\xe0\x02\x92\x41\x91\x02\n\x08\x41PI Auth\x12!Get or Create Resource Connection\x1aSRetrieves an existing resource connection or creates a new one if it doesn\'t exist.J\x8c\x01\n\x03\x32\x30\x30\x12\x84\x01\nBReturns the existing or newly created resource connection details.\x12>\n<\x1a:.scalekit.v1.clients.GetOrCreateResourceConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x30\"+/api/v1/resources/{resource_id}/connections:\x01*\x1a\xb8\x03\x92\x41\xb4\x03\n\x08\x41PI Auth\x12\xfd\x02\x45ndpoints for managing API client applications. API clients enable secure, automated interactions between software systems without human intervention. Each client is uniquely identified by a `client_id` and can be configured with authentication settings, redirect URIs, and security parameters. Use these endpoints to create, manage, and configure API clients for your API clients.\x1a(\x12&https://docs.scalekit.com/m2m/overviewB3Z1github.com/scalekit-inc/scalekit/pkg/grpc/clientsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -430,11 +430,11 @@ _globals['_GETCLIENTRESPONSE'].fields_by_name['client']._loaded_options = None _globals['_GETCLIENTRESPONSE'].fields_by_name['client']._serialized_options = b'\222A\245\0012\242\001Complete client configuration including authentication settings, redirect URIs, and secrets. This contains all current settings for the requested client resource.' _globals['_LISTCLIENTSREQUEST_FILTER'].fields_by_name['client_type']._loaded_options = None - _globals['_LISTCLIENTSREQUEST_FILTER'].fields_by_name['client_type']._serialized_options = b'\222A\321\0012\316\001Filters clients by type. Valid values: ENV, WEB_APP, NTV, SPA, ALL. Defaults to ENV. ALL takes precedence and other types are ignored. For resource-specific clients (e.g., M2M), use ListResourceClients API.' + _globals['_LISTCLIENTSREQUEST_FILTER'].fields_by_name['client_type']._serialized_options = b'\222A\326\0012\323\001Filters clients by type. Valid values: WEB, ENV, WEB_APP, NTV, SPA, ALL. Defaults to WEB. ALL takes precedence and other types are ignored. For resource-specific clients (e.g., M2M), use ListResourceClients API.' _globals['_LISTCLIENTSREQUEST'].fields_by_name['include_plain_secret']._loaded_options = None _globals['_LISTCLIENTSREQUEST'].fields_by_name['include_plain_secret']._serialized_options = b'\222A\273\0012\261\001Whether to include plain secret values in the response. Enable only during initial client creation, then store secrets securely. Not available when filtering by ALL client typesJ\005false' _globals['_LISTCLIENTSREQUEST'].fields_by_name['filter']._loaded_options = None - _globals['_LISTCLIENTSREQUEST'].fields_by_name['filter']._serialized_options = b'\222A:28Filters clients by type: ENV, WEB_APP, NTV, SPA, or ALL.' + _globals['_LISTCLIENTSREQUEST'].fields_by_name['filter']._serialized_options = b'\222A?2=Filters clients by type: WEB, ENV, WEB_APP, NTV, SPA, or ALL.' _globals['_LISTCLIENTSREQUEST'].fields_by_name['page_token']._loaded_options = None _globals['_LISTCLIENTSREQUEST'].fields_by_name['page_token']._serialized_options = b'\222A;2\"Token for the next page of resultsJ\025\"next_page_token_123\"' _globals['_LISTCLIENTSREQUEST'].fields_by_name['page_size']._loaded_options = None @@ -460,7 +460,7 @@ _globals['_CREATECLIENT'].fields_by_name['initiate_login_uri']._loaded_options = None _globals['_CREATECLIENT'].fields_by_name['initiate_login_uri']._serialized_options = b'\222A\307\0012\243\001Pre-configured URI for initiating login flows. This URI is used to start authentication flows programmatically. Must use HTTPS protocol and contain a valid domain.J\037\"https://app.example.com/login\"' _globals['_CREATECLIENT'].fields_by_name['post_login_uris']._loaded_options = None - _globals['_CREATECLIENT'].fields_by_name['post_login_uris']._serialized_options = b'\222A\347\0012\236\001List of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTPS in production environments. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\272H\005\222\001\002\030\001' + _globals['_CREATECLIENT'].fields_by_name['post_login_uris']._serialized_options = b'\222A\275\0012uList of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\272H\014\222\001\t\030\001\"\005r\003\210\001\001' _globals['_CREATECLIENT'].fields_by_name['access_token_expiry']._loaded_options = None _globals['_CREATECLIENT'].fields_by_name['access_token_expiry']._serialized_options = b'\222A42,Expiry time in seconds for the access token.J\0043600' _globals['_CREATECLIENT'].fields_by_name['scopes']._loaded_options = None @@ -480,9 +480,13 @@ _globals['_UPDATECLIENTREQUEST'].fields_by_name['client_id']._loaded_options = None _globals['_UPDATECLIENTREQUEST'].fields_by_name['client_id']._serialized_options = b'\222AT2:Unique identifier of the registered application to update.J\026\"skc_01H9XPQR7ZY2AJKL\"\272H\006r\004\020\001\030 ' _globals['_UPDATECLIENTREQUEST'].fields_by_name['client']._loaded_options = None - _globals['_UPDATECLIENTREQUEST'].fields_by_name['client']._serialized_options = b'\222A\242\0012eApplication configuration parameters to update. Contains post_login_uris and authentication settings.J9{\"post_login_uris\": [\"https://app.example.com/callback\"]}\272H\003\310\001\001' + _globals['_UPDATECLIENTREQUEST'].fields_by_name['client']._serialized_options = b'\222A\331\0012bApplication configuration parameters to update. Contains redirect URIs and authentication settingsJs{\"redirect_uris\": [\"https://app.example.com/callback\"], \"default_redirect_uri\": \"https://app.example.com/callback\"}\272H\003\310\001\001' _globals['_UPDATECLIENTREQUEST'].fields_by_name['mask']._loaded_options = None _globals['_UPDATECLIENTREQUEST'].fields_by_name['mask']._serialized_options = b'\340A\003\372\322\344\223\002\t\022\007PREVIEW' + _globals['_UPDATECLIENT'].fields_by_name['redirect_uris']._loaded_options = None + _globals['_UPDATECLIENT'].fields_by_name['redirect_uris']._serialized_options = b'\222A\345\0012\234\001List of allowed redirect URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTPS in production environments. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\272H\014\222\001\t\030\001\"\005r\003\210\001\001' + _globals['_UPDATECLIENT'].fields_by_name['default_redirect_uri']._loaded_options = None + _globals['_UPDATECLIENT'].fields_by_name['default_redirect_uri']._serialized_options = b'\222A\247\0012\200\001Primary redirect URI used when none is specified in authorization requests. Must exactly match one of the URIs in redirect_uris.J\"\"https://app.example.com/callback\"\272H5\272\0012\n\tvalid_uri\022\027uri must be a valid URI\032\014this.isUri()' _globals['_UPDATECLIENT'].fields_by_name['back_channel_logout_uris']._loaded_options = None _globals['_UPDATECLIENT'].fields_by_name['back_channel_logout_uris']._serialized_options = b'\222A\366\0012\225\001HTTPS endpoints for receiving back-channel logout notifications. Required for implementing application-initiated logout flows and session management.J\\[\"https://app.example.com/backchannel-logout\", \"https://app.example.com/backchannel-logout\"]\272H\014\222\001\t\030\001\"\005r\003\210\001\001' _globals['_UPDATECLIENT'].fields_by_name['post_logout_redirect_uris']._loaded_options = None @@ -490,7 +494,7 @@ _globals['_UPDATECLIENT'].fields_by_name['initiate_login_uri']._loaded_options = None _globals['_UPDATECLIENT'].fields_by_name['initiate_login_uri']._serialized_options = b'\222A\307\0012\243\001Pre-configured URI for initiating login flows. This URI is used to start authentication flows programmatically. Must use HTTPS protocol and contain a valid domain.J\037\"https://app.example.com/login\"' _globals['_UPDATECLIENT'].fields_by_name['post_login_uris']._loaded_options = None - _globals['_UPDATECLIENT'].fields_by_name['post_login_uris']._serialized_options = b'\222A\347\0012\236\001List of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTPS in production environments. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\272H\005\222\001\002\030\001' + _globals['_UPDATECLIENT'].fields_by_name['post_login_uris']._serialized_options = b'\222A\347\0012\236\001List of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTPS in production environments. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\272H\014\222\001\t\030\001\"\005r\003\210\001\001' _globals['_UPDATECLIENT'].fields_by_name['name']._loaded_options = None _globals['_UPDATECLIENT'].fields_by_name['name']._serialized_options = b'\222A\272\0012\236\001A descriptive name for the API client that helps identify its purpose. This name is displayed in the dashboard and logs. Must be between 1 and 128 characters.J\027\"My Application Client\"' _globals['_UPDATECLIENT'].fields_by_name['access_token_expiry']._loaded_options = None @@ -506,7 +510,7 @@ _globals['_UPDATECLIENT'].fields_by_name['enforce_pkce']._loaded_options = None _globals['_UPDATECLIENT'].fields_by_name['enforce_pkce']._serialized_options = b'\222A\235\0012\224\001Whether Proof Key for Code Exchange (PKCE) is required. PKCE mitigates authorization code interception attacks. Defaults to true for public clients.J\004true' _globals['_UPDATECLIENT']._loaded_options = None - _globals['_UPDATECLIENT']._serialized_options = b'\222A\377\001\n\277\001*\033Update Client Configuration2\237\001Parameters for updating an API client application\'s configuration. This allows modification of post_login_uris, logout settings, and other security parameters.*;\n\021API Documentation\022&https://docs.scalekit.com/m2m/overview' + _globals['_UPDATECLIENT']._serialized_options = b'\222A\375\001\n\275\001*\033Update Client Configuration2\235\001Parameters for updating an API client application\'s configuration. This allows modification of redirect URIs, logout settings, and other security parameters.*;\n\021API Documentation\022&https://docs.scalekit.com/m2m/overview' _globals['_UPDATECLIENTRESPONSE'].fields_by_name['client']._loaded_options = None _globals['_UPDATECLIENTRESPONSE'].fields_by_name['client']._serialized_options = b'\222AW2UUpdated application configuration with all current settings reflected in the response' _globals['_CREATECLIENTSECRETREQUEST'].fields_by_name['client_id']._loaded_options = None @@ -541,6 +545,10 @@ _globals['_CLIENT'].fields_by_name['create_time']._serialized_options = b'\222A\256\0012\217\001Timestamp indicating when the client configuration was initially created. This field is automatically set by the server and cannot be modified.J\032\"2024-01-05T14:48:00.000Z\"' _globals['_CLIENT'].fields_by_name['update_time']._loaded_options = None _globals['_CLIENT'].fields_by_name['update_time']._serialized_options = b'\222A\277\0012\240\001Timestamp of the last modification to the client configuration. This field is automatically updated by the server whenever any aspect of the client is modified.J\032\"2024-01-10T09:12:00.000Z\"' + _globals['_CLIENT'].fields_by_name['redirect_uris']._loaded_options = None + _globals['_CLIENT'].fields_by_name['redirect_uris']._serialized_options = b'\222A\253\0022\333\001List of allowed redirect URIs for OAuth 2.0 authorization flows. These URIs must use HTTPS protocol in production environments and comply with RFC 6749. Users will be redirected to one of these URIs after authorization.JK[\"https://auth.your-app.com/callback\", \"https://scalekit.example.org/auth\"]' + _globals['_CLIENT'].fields_by_name['default_redirect_uri']._loaded_options = None + _globals['_CLIENT'].fields_by_name['default_redirect_uri']._serialized_options = b'\222A\311\0012\240\001Primary redirect URI used when none is explicitly specified in authorization requests. This URI must exactly match one of the entries in the redirect_uris list.J$\"https://auth.your-app.com/callback\"' _globals['_CLIENT'].fields_by_name['secrets']._loaded_options = None _globals['_CLIENT'].fields_by_name['secrets']._serialized_options = b'\222A\343\0012\340\001List of client secrets used for authentication. Each secret is stored securely using one-way hashing (bcrypt). The plaintext secret values are only displayed during initial creation and must be stored securely by the client.' _globals['_CLIENT'].fields_by_name['post_logout_redirect_uris']._loaded_options = None @@ -564,7 +572,7 @@ _globals['_CLIENT'].fields_by_name['grant_types']._loaded_options = None _globals['_CLIENT'].fields_by_name['grant_types']._serialized_options = b'\222A\204\0012CList of OAuth 2.0 grant types that the client is authorized to use.J=[\"authorization_code\", \"refresh_token\", \"client_credentials\"]' _globals['_CLIENT'].fields_by_name['client_type']._loaded_options = None - _globals['_CLIENT'].fields_by_name['client_type']._serialized_options = b'\222A=24Type of client. Valid values: ENV, WEB_APP, NTV, SPAJ\005\"ENV\"' + _globals['_CLIENT'].fields_by_name['client_type']._serialized_options = b'\222AB29Type of client. Valid values: WEB, ENV, WEB_APP, NTV, SPAJ\005\"WEB\"' _globals['_CLIENT'].fields_by_name['enforce_pkce']._loaded_options = None _globals['_CLIENT'].fields_by_name['enforce_pkce']._serialized_options = b'\222A\235\0012\224\001Whether Proof Key for Code Exchange (PKCE) is required. PKCE mitigates authorization code interception attacks. Defaults to true for public clients.J\004true' _globals['_CLIENT']._loaded_options = None @@ -625,12 +633,6 @@ _globals['_GETCONSENTDETAILSRESPONSE'].fields_by_name['scopes']._serialized_options = b'\222A]2[List of scopes for which consent was granted. Each scope includes its name and description.' _globals['_GETCONSENTDETAILSRESPONSE'].fields_by_name['application']._loaded_options = None _globals['_GETCONSENTDETAILSRESPONSE'].fields_by_name['application']._serialized_options = b'\222A&2$Details of the requested application' - _globals['_GETCONSENTDETAILSRESPONSE'].fields_by_name['organization']._loaded_options = None - _globals['_GETCONSENTDETAILSRESPONSE'].fields_by_name['organization']._serialized_options = b'\222A.2,Organization context for the consent screen.' - _globals['_CONSENTORGANIZATION'].fields_by_name['organization_name']._loaded_options = None - _globals['_CONSENTORGANIZATION'].fields_by_name['organization_name']._serialized_options = b'\222Ad2UName of the organization the user is authenticating into. Omitted when not available.J\013\"Acme Corp\"' - _globals['_CONSENTORGANIZATION'].fields_by_name['organization_meta_name']._loaded_options = None - _globals['_CONSENTORGANIZATION'].fields_by_name['organization_meta_name']._serialized_options = b'\222At2bEnvironment-level label for what an organization is called (e.g. Workspace, Team). Always present.J\016\"Organization\"' _globals['_CONSENTCLIENT'].fields_by_name['name']._loaded_options = None _globals['_CONSENTCLIENT'].fields_by_name['name']._serialized_options = b'\222A;2.Name of the client resource requesting consentJ\t\"VS Code\"' _globals['_CONSENTCLIENT'].fields_by_name['privacy_uri']._loaded_options = None @@ -680,7 +682,7 @@ _globals['_CLIENTSERVICE'].methods_by_name['GetClient']._loaded_options = None _globals['_CLIENTSERVICE'].methods_by_name['GetClient']._serialized_options = b'\222A\267\003\n\016Client Configs\022\030Get Client Configuration\032\305\001Retrieves complete client configuration including scopes, custom claims, redirect URIs, and access token expiration time. Use this endpoint to view or verify client settings and security parametersJ\302\001\n\003200\022\272\001\n\213\001Client configuration retrieved successfully. Returns full client metadata including scopes, audience, custom claims, and security settings.\022*\n(\032&.scalekit.v1.clients.GetClientResponse\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\035\022\033/api/v1/clients/{client_id}' _globals['_CLIENTSERVICE'].methods_by_name['UpdateClient']._loaded_options = None - _globals['_CLIENTSERVICE'].methods_by_name['UpdateClient']._serialized_options = b'\222A\243\004\n\016Client Configs\022\033Update Client Configuration\032\272\002Updates the configuration settings for a client. Only fields included in the request are modified. Updatable fields include post_login_uris, post_logout_redirect_uris, back_channel_logout_uris, initiate_login_uri, scopes, audience, and custom claims. client_id and create_time are immutable and cannot be modified.J\266\001\n\003201\022\256\001\n}Client configuration updated successfully. Returns the updated client resource with new update_time and all current settings.\022-\n+\032).scalekit.v1.clients.UpdateClientResponse\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002%2\033/api/v1/clients/{client_id}:\006client' + _globals['_CLIENTSERVICE'].methods_by_name['UpdateClient']._serialized_options = b'\222A\231\004\n\016Client Configs\022\033Update Client Configuration\032\260\002Updates the configuration settings for an M2M client. This endpoint allows you to modify client properties such as redirect URIs, scopes, audience, and custom claims. Required fields include redirect_uris and default_redirect_uri. Note that client_id and create_time are immutable and cannot be modified.J\266\001\n\003201\022\256\001\n}Client configuration updated successfully. Returns the updated client resource with new update_time and all current settings.\022-\n+\032).scalekit.v1.clients.UpdateClientResponse\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002%2\033/api/v1/clients/{client_id}:\006client' _globals['_CLIENTSERVICE'].methods_by_name['DeleteClient']._loaded_options = None _globals['_CLIENTSERVICE'].methods_by_name['DeleteClient']._serialized_options = b'\222A\213\002\n\006Client\022\rDelete Client\032\262\001Permanently deletes a client and associated secrets. This operation cannot be undone. Supports WEB_APP, NTV, and SPA client types only. Cannot delete default environment clients.J=\n\003200\0226\n4Client successfully deleted and no longer accessible\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\035*\033/api/v1/clients/{client_id}' _globals['_CLIENTSERVICE'].methods_by_name['CreateClientSecret']._loaded_options = None @@ -743,12 +745,12 @@ _globals['_CLIENTSERVICE'].methods_by_name['RevokeUserConsent']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\0023*1/api/v1/clients/{client_id}/consents/{consent_id}' _globals['_CLIENTSERVICE'].methods_by_name['EnsureResourceConnection']._loaded_options = None _globals['_CLIENTSERVICE'].methods_by_name['EnsureResourceConnection']._serialized_options = b'\222A\221\002\n\010API Auth\022!Get or Create Resource Connection\032SRetrieves an existing resource connection or creates a new one if it doesn\'t exist.J\214\001\n\003200\022\204\001\nBReturns the existing or newly created resource connection details.\022>\n<\032:.scalekit.v1.clients.GetOrCreateResourceConnectionResponse\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\0020\"+/api/v1/resources/{resource_id}/connections:\001*' - _globals['_RESOURCETYPE']._serialized_start=52203 - _globals['_RESOURCETYPE']._serialized_end=52310 - _globals['_CLIENTSECRETSTATUS']._serialized_start=52312 - _globals['_CLIENTSECRETSTATUS']._serialized_end=52358 - _globals['_RESOURCECONNECTIONTYPE']._serialized_start=52360 - _globals['_RESOURCECONNECTIONTYPE']._serialized_end=52409 + _globals['_RESOURCETYPE']._serialized_start=52841 + _globals['_RESOURCETYPE']._serialized_end=52948 + _globals['_CLIENTSECRETSTATUS']._serialized_start=52950 + _globals['_CLIENTSECRETSTATUS']._serialized_end=52996 + _globals['_RESOURCECONNECTIONTYPE']._serialized_start=52998 + _globals['_RESOURCECONNECTIONTYPE']._serialized_end=53047 _globals['_CREATERESOURCEREQUEST']._serialized_start=558 _globals['_CREATERESOURCEREQUEST']._serialized_end=696 _globals['_CREATERESOURCE']._serialized_start=699 @@ -848,83 +850,81 @@ _globals['_GETCLIENTRESPONSE']._serialized_start=29794 _globals['_GETCLIENTRESPONSE']._serialized_end=30039 _globals['_LISTCLIENTSREQUEST']._serialized_start=30042 - _globals['_LISTCLIENTSREQUEST']._serialized_end=30907 - _globals['_LISTCLIENTSREQUEST_FILTER']._serialized_start=30643 - _globals['_LISTCLIENTSREQUEST_FILTER']._serialized_end=30901 - _globals['_LISTCLIENTSRESPONSE']._serialized_start=30910 - _globals['_LISTCLIENTSRESPONSE']._serialized_end=31407 - _globals['_CREATECLIENTREQUEST']._serialized_start=31410 - _globals['_CREATECLIENTREQUEST']._serialized_end=31647 - _globals['_CREATECLIENT']._serialized_start=31650 - _globals['_CREATECLIENT']._serialized_end=34701 - _globals['_CREATECLIENTRESPONSE']._serialized_start=34704 - _globals['_CREATECLIENTRESPONSE']._serialized_end=34844 - _globals['_UPDATECLIENTREQUEST']._serialized_start=34847 - _globals['_UPDATECLIENTREQUEST']._serialized_end=35298 - _globals['_UPDATECLIENT']._serialized_start=35301 - _globals['_UPDATECLIENT']._serialized_end=38233 - _globals['_UPDATECLIENTRESPONSE']._serialized_start=38236 - _globals['_UPDATECLIENTRESPONSE']._serialized_end=38404 - _globals['_CREATECLIENTSECRETREQUEST']._serialized_start=38407 - _globals['_CREATECLIENTSECRETREQUEST']._serialized_end=38581 - _globals['_CREATECLIENTSECRETRESPONSE']._serialized_start=38584 - _globals['_CREATECLIENTSECRETRESPONSE']._serialized_end=39013 - _globals['_UPDATECLIENTSECRETREQUEST']._serialized_start=39016 - _globals['_UPDATECLIENTSECRETREQUEST']._serialized_end=39659 - _globals['_UPDATECLIENTSECRET']._serialized_start=39662 - _globals['_UPDATECLIENTSECRET']._serialized_end=39898 - _globals['_UPDATECLIENTSECRETRESPONSE']._serialized_start=39901 - _globals['_UPDATECLIENTSECRETRESPONSE']._serialized_end=40132 - _globals['_DELETECLIENTREQUEST']._serialized_start=40135 - _globals['_DELETECLIENTREQUEST']._serialized_end=40268 - _globals['_DELETECLIENTSECRETREQUEST']._serialized_start=40271 - _globals['_DELETECLIENTSECRETREQUEST']._serialized_end=40578 - _globals['_CLIENT']._serialized_start=40581 - _globals['_CLIENT']._serialized_end=44461 - _globals['_CLIENTSECRET']._serialized_start=44464 - _globals['_CLIENTSECRET']._serialized_end=46961 - _globals['_SCOPE']._serialized_start=46964 - _globals['_SCOPE']._serialized_end=47276 - _globals['_CREATESCOPE']._serialized_start=47278 - _globals['_CREATESCOPE']._serialized_end=47391 - _globals['_CREATESCOPEREQUEST']._serialized_start=47394 - _globals['_CREATESCOPEREQUEST']._serialized_end=47637 - _globals['_CREATESCOPERESPONSE']._serialized_start=47639 - _globals['_CREATESCOPERESPONSE']._serialized_end=47710 - _globals['_LISTSCOPESREQUEST']._serialized_start=47713 - _globals['_LISTSCOPESREQUEST']._serialized_end=47883 - _globals['_LISTSCOPESRESPONSE']._serialized_start=47885 - _globals['_LISTSCOPESRESPONSE']._serialized_end=47957 - _globals['_UPDATESCOPEREQUEST']._serialized_start=47959 - _globals['_UPDATESCOPEREQUEST']._serialized_end=48070 - _globals['_UPDATESCOPE']._serialized_start=48072 - _globals['_UPDATESCOPE']._serialized_end=48183 - _globals['_UPDATESCOPERESPONSE']._serialized_start=48185 - _globals['_UPDATESCOPERESPONSE']._serialized_end=48256 - _globals['_DELETESCOPEREQUEST']._serialized_start=48258 - _globals['_DELETESCOPEREQUEST']._serialized_end=48307 - _globals['_GETCONSENTDETAILSRESPONSE']._serialized_start=48310 - _globals['_GETCONSENTDETAILSRESPONSE']._serialized_end=49043 - _globals['_CONSENTORGANIZATION']._serialized_start=49046 - _globals['_CONSENTORGANIZATION']._serialized_end=49421 - _globals['_CONSENTCLIENT']._serialized_start=49424 - _globals['_CONSENTCLIENT']._serialized_end=50122 - _globals['_CONSENTSCOPE']._serialized_start=50124 - _globals['_CONSENTSCOPE']._serialized_end=50216 - _globals['_USER']._serialized_start=50218 - _globals['_USER']._serialized_end=50332 - _globals['_REVOKEUSERCONSENTREQUEST']._serialized_start=50335 - _globals['_REVOKEUSERCONSENTREQUEST']._serialized_end=50625 - _globals['_REVOKEUSERCONSENTRESPONSE']._serialized_start=50627 - _globals['_REVOKEUSERCONSENTRESPONSE']._serialized_end=50654 - _globals['_ENSURERESOURCECONNECTIONREQUEST']._serialized_start=50657 - _globals['_ENSURERESOURCECONNECTIONREQUEST']._serialized_end=50816 - _globals['_ENSURERESOURCECONNECTIONRESPONSE']._serialized_start=50819 - _globals['_ENSURERESOURCECONNECTIONRESPONSE']._serialized_end=51031 - _globals['_RESOURCECONNECTION']._serialized_start=51034 - _globals['_RESOURCECONNECTION']._serialized_end=51978 - _globals['_RESOURCECUSTOMCONNECTIONSETTINGS']._serialized_start=51981 - _globals['_RESOURCECUSTOMCONNECTIONSETTINGS']._serialized_end=52201 - _globals['_CLIENTSERVICE']._serialized_start=52413 - _globals['_CLIENTSERVICE']._serialized_end=70144 + _globals['_LISTCLIENTSREQUEST']._serialized_end=30917 + _globals['_LISTCLIENTSREQUEST_FILTER']._serialized_start=30648 + _globals['_LISTCLIENTSREQUEST_FILTER']._serialized_end=30911 + _globals['_LISTCLIENTSRESPONSE']._serialized_start=30920 + _globals['_LISTCLIENTSRESPONSE']._serialized_end=31417 + _globals['_CREATECLIENTREQUEST']._serialized_start=31420 + _globals['_CREATECLIENTREQUEST']._serialized_end=31657 + _globals['_CREATECLIENT']._serialized_start=31660 + _globals['_CREATECLIENT']._serialized_end=34676 + _globals['_CREATECLIENTRESPONSE']._serialized_start=34679 + _globals['_CREATECLIENTRESPONSE']._serialized_end=34819 + _globals['_UPDATECLIENTREQUEST']._serialized_start=34822 + _globals['_UPDATECLIENTREQUEST']._serialized_end=35328 + _globals['_UPDATECLIENT']._serialized_start=35331 + _globals['_UPDATECLIENT']._serialized_end=38819 + _globals['_UPDATECLIENTRESPONSE']._serialized_start=38822 + _globals['_UPDATECLIENTRESPONSE']._serialized_end=38990 + _globals['_CREATECLIENTSECRETREQUEST']._serialized_start=38993 + _globals['_CREATECLIENTSECRETREQUEST']._serialized_end=39167 + _globals['_CREATECLIENTSECRETRESPONSE']._serialized_start=39170 + _globals['_CREATECLIENTSECRETRESPONSE']._serialized_end=39599 + _globals['_UPDATECLIENTSECRETREQUEST']._serialized_start=39602 + _globals['_UPDATECLIENTSECRETREQUEST']._serialized_end=40245 + _globals['_UPDATECLIENTSECRET']._serialized_start=40248 + _globals['_UPDATECLIENTSECRET']._serialized_end=40484 + _globals['_UPDATECLIENTSECRETRESPONSE']._serialized_start=40487 + _globals['_UPDATECLIENTSECRETRESPONSE']._serialized_end=40718 + _globals['_DELETECLIENTREQUEST']._serialized_start=40721 + _globals['_DELETECLIENTREQUEST']._serialized_end=40854 + _globals['_DELETECLIENTSECRETREQUEST']._serialized_start=40857 + _globals['_DELETECLIENTSECRETREQUEST']._serialized_end=41164 + _globals['_CLIENT']._serialized_start=41167 + _globals['_CLIENT']._serialized_end=45606 + _globals['_CLIENTSECRET']._serialized_start=45609 + _globals['_CLIENTSECRET']._serialized_end=48106 + _globals['_SCOPE']._serialized_start=48109 + _globals['_SCOPE']._serialized_end=48421 + _globals['_CREATESCOPE']._serialized_start=48423 + _globals['_CREATESCOPE']._serialized_end=48536 + _globals['_CREATESCOPEREQUEST']._serialized_start=48539 + _globals['_CREATESCOPEREQUEST']._serialized_end=48782 + _globals['_CREATESCOPERESPONSE']._serialized_start=48784 + _globals['_CREATESCOPERESPONSE']._serialized_end=48855 + _globals['_LISTSCOPESREQUEST']._serialized_start=48858 + _globals['_LISTSCOPESREQUEST']._serialized_end=49028 + _globals['_LISTSCOPESRESPONSE']._serialized_start=49030 + _globals['_LISTSCOPESRESPONSE']._serialized_end=49102 + _globals['_UPDATESCOPEREQUEST']._serialized_start=49104 + _globals['_UPDATESCOPEREQUEST']._serialized_end=49215 + _globals['_UPDATESCOPE']._serialized_start=49217 + _globals['_UPDATESCOPE']._serialized_end=49328 + _globals['_UPDATESCOPERESPONSE']._serialized_start=49330 + _globals['_UPDATESCOPERESPONSE']._serialized_end=49401 + _globals['_DELETESCOPEREQUEST']._serialized_start=49403 + _globals['_DELETESCOPEREQUEST']._serialized_end=49452 + _globals['_GETCONSENTDETAILSRESPONSE']._serialized_start=49455 + _globals['_GETCONSENTDETAILSRESPONSE']._serialized_end=50059 + _globals['_CONSENTCLIENT']._serialized_start=50062 + _globals['_CONSENTCLIENT']._serialized_end=50760 + _globals['_CONSENTSCOPE']._serialized_start=50762 + _globals['_CONSENTSCOPE']._serialized_end=50854 + _globals['_USER']._serialized_start=50856 + _globals['_USER']._serialized_end=50970 + _globals['_REVOKEUSERCONSENTREQUEST']._serialized_start=50973 + _globals['_REVOKEUSERCONSENTREQUEST']._serialized_end=51263 + _globals['_REVOKEUSERCONSENTRESPONSE']._serialized_start=51265 + _globals['_REVOKEUSERCONSENTRESPONSE']._serialized_end=51292 + _globals['_ENSURERESOURCECONNECTIONREQUEST']._serialized_start=51295 + _globals['_ENSURERESOURCECONNECTIONREQUEST']._serialized_end=51454 + _globals['_ENSURERESOURCECONNECTIONRESPONSE']._serialized_start=51457 + _globals['_ENSURERESOURCECONNECTIONRESPONSE']._serialized_end=51669 + _globals['_RESOURCECONNECTION']._serialized_start=51672 + _globals['_RESOURCECONNECTION']._serialized_end=52616 + _globals['_RESOURCECUSTOMCONNECTIONSETTINGS']._serialized_start=52619 + _globals['_RESOURCECUSTOMCONNECTIONSETTINGS']._serialized_end=52839 + _globals['_CLIENTSERVICE']._serialized_start=53051 + _globals['_CLIENTSERVICE']._serialized_end=70772 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/clients/clients_pb2.pyi b/scalekit/v1/clients/clients_pb2.pyi index f3f99f8..314b43f 100644 --- a/scalekit/v1/clients/clients_pb2.pyi +++ b/scalekit/v1/clients/clients_pb2.pyi @@ -716,7 +716,9 @@ class UpdateClientRequest(_message.Message): def __init__(self, client_id: _Optional[str] = ..., client: _Optional[_Union[UpdateClient, _Mapping]] = ..., mask: _Optional[_Union[_field_mask_pb2.FieldMask, _Mapping]] = ...) -> None: ... class UpdateClient(_message.Message): - __slots__ = ("back_channel_logout_uris", "post_logout_redirect_uris", "initiate_login_uri", "post_login_uris", "name", "access_token_expiry", "scopes", "custom_claims", "disallow_scalekit_api_access", "grant_types", "enforce_pkce") + __slots__ = ("redirect_uris", "default_redirect_uri", "back_channel_logout_uris", "post_logout_redirect_uris", "initiate_login_uri", "post_login_uris", "name", "access_token_expiry", "scopes", "custom_claims", "disallow_scalekit_api_access", "grant_types", "enforce_pkce") + REDIRECT_URIS_FIELD_NUMBER: _ClassVar[int] + DEFAULT_REDIRECT_URI_FIELD_NUMBER: _ClassVar[int] BACK_CHANNEL_LOGOUT_URIS_FIELD_NUMBER: _ClassVar[int] POST_LOGOUT_REDIRECT_URIS_FIELD_NUMBER: _ClassVar[int] INITIATE_LOGIN_URI_FIELD_NUMBER: _ClassVar[int] @@ -728,6 +730,8 @@ class UpdateClient(_message.Message): DISALLOW_SCALEKIT_API_ACCESS_FIELD_NUMBER: _ClassVar[int] GRANT_TYPES_FIELD_NUMBER: _ClassVar[int] ENFORCE_PKCE_FIELD_NUMBER: _ClassVar[int] + redirect_uris: _containers.RepeatedScalarFieldContainer[str] + default_redirect_uri: str back_channel_logout_uris: _containers.RepeatedScalarFieldContainer[str] post_logout_redirect_uris: _containers.RepeatedScalarFieldContainer[str] initiate_login_uri: str @@ -739,7 +743,7 @@ class UpdateClient(_message.Message): disallow_scalekit_api_access: _wrappers_pb2.BoolValue grant_types: _containers.RepeatedScalarFieldContainer[str] enforce_pkce: _wrappers_pb2.BoolValue - def __init__(self, back_channel_logout_uris: _Optional[_Iterable[str]] = ..., post_logout_redirect_uris: _Optional[_Iterable[str]] = ..., initiate_login_uri: _Optional[str] = ..., post_login_uris: _Optional[_Iterable[str]] = ..., name: _Optional[str] = ..., access_token_expiry: _Optional[int] = ..., scopes: _Optional[_Iterable[str]] = ..., custom_claims: _Optional[_Iterable[_Union[CustomClaim, _Mapping]]] = ..., disallow_scalekit_api_access: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., grant_types: _Optional[_Iterable[str]] = ..., enforce_pkce: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ...) -> None: ... + def __init__(self, redirect_uris: _Optional[_Iterable[str]] = ..., default_redirect_uri: _Optional[str] = ..., back_channel_logout_uris: _Optional[_Iterable[str]] = ..., post_logout_redirect_uris: _Optional[_Iterable[str]] = ..., initiate_login_uri: _Optional[str] = ..., post_login_uris: _Optional[_Iterable[str]] = ..., name: _Optional[str] = ..., access_token_expiry: _Optional[int] = ..., scopes: _Optional[_Iterable[str]] = ..., custom_claims: _Optional[_Iterable[_Union[CustomClaim, _Mapping]]] = ..., disallow_scalekit_api_access: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., grant_types: _Optional[_Iterable[str]] = ..., enforce_pkce: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ...) -> None: ... class UpdateClientResponse(_message.Message): __slots__ = ("client",) @@ -800,11 +804,13 @@ class DeleteClientSecretRequest(_message.Message): def __init__(self, client_id: _Optional[str] = ..., secret_id: _Optional[str] = ...) -> None: ... class Client(_message.Message): - __slots__ = ("id", "keyId", "create_time", "update_time", "secrets", "post_logout_redirect_uris", "back_channel_logout_uris", "initiate_login_uri", "post_login_uris", "name", "access_token_expiry", "scopes", "custom_claims", "disallow_scalekit_api_access", "grant_types", "client_type", "enforce_pkce") + __slots__ = ("id", "keyId", "create_time", "update_time", "redirect_uris", "default_redirect_uri", "secrets", "post_logout_redirect_uris", "back_channel_logout_uris", "initiate_login_uri", "post_login_uris", "name", "access_token_expiry", "scopes", "custom_claims", "disallow_scalekit_api_access", "grant_types", "client_type", "enforce_pkce") ID_FIELD_NUMBER: _ClassVar[int] KEYID_FIELD_NUMBER: _ClassVar[int] CREATE_TIME_FIELD_NUMBER: _ClassVar[int] UPDATE_TIME_FIELD_NUMBER: _ClassVar[int] + REDIRECT_URIS_FIELD_NUMBER: _ClassVar[int] + DEFAULT_REDIRECT_URI_FIELD_NUMBER: _ClassVar[int] SECRETS_FIELD_NUMBER: _ClassVar[int] POST_LOGOUT_REDIRECT_URIS_FIELD_NUMBER: _ClassVar[int] BACK_CHANNEL_LOGOUT_URIS_FIELD_NUMBER: _ClassVar[int] @@ -822,6 +828,8 @@ class Client(_message.Message): keyId: str create_time: _timestamp_pb2.Timestamp update_time: _timestamp_pb2.Timestamp + redirect_uris: _containers.RepeatedScalarFieldContainer[str] + default_redirect_uri: str secrets: _containers.RepeatedCompositeFieldContainer[ClientSecret] post_logout_redirect_uris: _containers.RepeatedScalarFieldContainer[str] back_channel_logout_uris: _containers.RepeatedScalarFieldContainer[str] @@ -835,7 +843,7 @@ class Client(_message.Message): grant_types: _containers.RepeatedScalarFieldContainer[str] client_type: str enforce_pkce: bool - def __init__(self, id: _Optional[str] = ..., keyId: _Optional[str] = ..., create_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., update_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., secrets: _Optional[_Iterable[_Union[ClientSecret, _Mapping]]] = ..., post_logout_redirect_uris: _Optional[_Iterable[str]] = ..., back_channel_logout_uris: _Optional[_Iterable[str]] = ..., initiate_login_uri: _Optional[str] = ..., post_login_uris: _Optional[_Iterable[str]] = ..., name: _Optional[str] = ..., access_token_expiry: _Optional[int] = ..., scopes: _Optional[_Iterable[str]] = ..., custom_claims: _Optional[_Iterable[_Union[CustomClaim, _Mapping]]] = ..., disallow_scalekit_api_access: bool = ..., grant_types: _Optional[_Iterable[str]] = ..., client_type: _Optional[str] = ..., enforce_pkce: bool = ...) -> None: ... + def __init__(self, id: _Optional[str] = ..., keyId: _Optional[str] = ..., create_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., update_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., redirect_uris: _Optional[_Iterable[str]] = ..., default_redirect_uri: _Optional[str] = ..., secrets: _Optional[_Iterable[_Union[ClientSecret, _Mapping]]] = ..., post_logout_redirect_uris: _Optional[_Iterable[str]] = ..., back_channel_logout_uris: _Optional[_Iterable[str]] = ..., initiate_login_uri: _Optional[str] = ..., post_login_uris: _Optional[_Iterable[str]] = ..., name: _Optional[str] = ..., access_token_expiry: _Optional[int] = ..., scopes: _Optional[_Iterable[str]] = ..., custom_claims: _Optional[_Iterable[_Union[CustomClaim, _Mapping]]] = ..., disallow_scalekit_api_access: bool = ..., grant_types: _Optional[_Iterable[str]] = ..., client_type: _Optional[str] = ..., enforce_pkce: bool = ...) -> None: ... class ClientSecret(_message.Message): __slots__ = ("id", "create_time", "update_time", "secret_suffix", "created_by", "status", "expire_time", "last_used_time", "plain_secret") @@ -934,28 +942,18 @@ class DeleteScopeRequest(_message.Message): def __init__(self, id: _Optional[str] = ...) -> None: ... class GetConsentDetailsResponse(_message.Message): - __slots__ = ("resource", "user", "client", "scopes", "application", "organization") + __slots__ = ("resource", "user", "client", "scopes", "application") RESOURCE_FIELD_NUMBER: _ClassVar[int] USER_FIELD_NUMBER: _ClassVar[int] CLIENT_FIELD_NUMBER: _ClassVar[int] SCOPES_FIELD_NUMBER: _ClassVar[int] APPLICATION_FIELD_NUMBER: _ClassVar[int] - ORGANIZATION_FIELD_NUMBER: _ClassVar[int] resource: Resource user: User client: ConsentClient scopes: _containers.RepeatedCompositeFieldContainer[ConsentScope] application: Application - organization: ConsentOrganization - def __init__(self, resource: _Optional[_Union[Resource, _Mapping]] = ..., user: _Optional[_Union[User, _Mapping]] = ..., client: _Optional[_Union[ConsentClient, _Mapping]] = ..., scopes: _Optional[_Iterable[_Union[ConsentScope, _Mapping]]] = ..., application: _Optional[_Union[Application, _Mapping]] = ..., organization: _Optional[_Union[ConsentOrganization, _Mapping]] = ...) -> None: ... - -class ConsentOrganization(_message.Message): - __slots__ = ("organization_name", "organization_meta_name") - ORGANIZATION_NAME_FIELD_NUMBER: _ClassVar[int] - ORGANIZATION_META_NAME_FIELD_NUMBER: _ClassVar[int] - organization_name: str - organization_meta_name: str - def __init__(self, organization_name: _Optional[str] = ..., organization_meta_name: _Optional[str] = ...) -> None: ... + def __init__(self, resource: _Optional[_Union[Resource, _Mapping]] = ..., user: _Optional[_Union[User, _Mapping]] = ..., client: _Optional[_Union[ConsentClient, _Mapping]] = ..., scopes: _Optional[_Iterable[_Union[ConsentScope, _Mapping]]] = ..., application: _Optional[_Union[Application, _Mapping]] = ...) -> None: ... class ConsentClient(_message.Message): __slots__ = ("name", "privacy_uri", "tos_uri", "client_id", "metadata_uri", "logo_uri") diff --git a/scalekit/v1/connected_accounts/connected_accounts_pb2.py b/scalekit/v1/connected_accounts/connected_accounts_pb2.py index d5b1d54..f4f95f9 100644 --- a/scalekit/v1/connected_accounts/connected_accounts_pb2.py +++ b/scalekit/v1/connected_accounts/connected_accounts_pb2.py @@ -22,7 +22,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n7scalekit/v1/connected_accounts/connected_accounts.proto\x12\x1escalekit.v1.connected_accounts\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\xa9\x0c\n\x1cListConnectedAccountsRequest\x12\xb1\x01\n\x0forganization_id\x18\x01 \x01(\tB\x82\x01\x92\x41v2]Filter by organization ID. Returns only connected accounts associated with this organization.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12\x91\x01\n\x07user_id\x18\x02 \x01(\tBs\x92\x41g2MFilter by user ID. Returns only connected accounts associated with this user.J\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12\xef\x01\n\tconnector\x18\x03 \x01(\tB\xcb\x01\x92\x41\xa9\x01\x32\x9c\x01\x46ilter by connector type. Connector identifier such as \'notion\', \'slack\', \'google\', etc. Alphanumeric with spaces, hyphens, underscores, and colons allowed.J\x08\"notion\"\xbaH\x1br\x19\x10\x00\x18\x90\x03\x32\x12^[a-zA-Z0-9_: -]*$H\x02R\tconnector\x88\x01\x01\x12\xdb\x01\n\nidentifier\x18\x04 \x01(\tB\xb5\x01\x92\x41\xa8\x01\x32\x91\x01\x46ilter by account identifier. The unique identifier for the connected account within the third-party service (e.g., email address, workspace ID).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12\x9d\x01\n\x08provider\x18\x05 \x01(\tB\x80\x01\x92\x41t2hFilter by OAuth provider. The authentication provider name such as \'google\', \'microsoft\', \'github\', etc.J\x08\"google\"\xbaH\x06r\x04\x10\x00\x18\x32R\x08provider\x12\x9b\x01\n\tpage_size\x18\x06 \x01(\rB~\x92\x41r2lMaximum number of connected accounts to return per page. Must be between 0 and 100. Default is typically 10.J\x02\x31\x30\xbaH\x06*\x04\x10\x64(\x00R\x08pageSize\x12\xcb\x01\n\npage_token\x18\x07 \x01(\tB\xab\x01\x92\x41\x9e\x01\x32\x83\x01Pagination token from a previous response. Use the next_page_token value from ListConnectedAccountsResponse to fetch the next page.J\x16\"eyJvZmZzZXQiOjEwfQ==\"\xbaH\x06r\x04\x10\x00\x18\x64R\tpageToken\x12\xa7\x01\n\x05query\x18\x08 \x01(\tB\x90\x01\x92\x41\x83\x01\x32qText search query to filter connected accounts by name, identifier, or other searchable fields. Case-insensitive.J\x0e\"john@example\"\xbaH\x06r\x04\x10\x00\x18\x64R\x05queryB\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifier\"\xbb\x06\n\x1dListConnectedAccountsResponse\x12\xdc\x01\n\x12\x63onnected_accounts\x18\x01 \x03(\x0b\x32\x37.scalekit.v1.connected_accounts.ConnectedAccountForListBt\x92\x41q2oList of connected accounts matching the filter criteria. Excludes sensitive authorization details for security.R\x11\x63onnectedAccounts\x12\x99\x01\n\ntotal_size\x18\x02 \x01(\rBz\x92\x41w2pTotal count of connected accounts matching the filter criteria across all pages. Use for calculating pagination.J\x03\x31\x30\x30R\ttotalSize\x12\xd2\x01\n\x0fnext_page_token\x18\x03 \x01(\tB\xa9\x01\x92\x41\x9c\x01\x32\x81\x01Pagination token for retrieving the next page. Empty if this is the last page. Pass this value to page_token in the next request.J\x16\"eyJvZmZzZXQiOjIwfQ==\"\xbaH\x06r\x04\x10\x00\x18 R\rnextPageToken\x12\xc9\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\xa0\x01\x92\x41\x93\x01\x32}Pagination token for retrieving the previous page. Empty if this is the first page. Pass this value to page_token to go back.J\x12\"eyJvZmZzZXQiOjB9\"\xbaH\x06r\x04\x10\x00\x18 R\rprevPageToken\"\xe0\x06\n\x1eSearchConnectedAccountsRequest\x12\xb9\x01\n\x05query\x18\x01 \x01(\tB\xa2\x01\x92\x41\x91\x01\x32\x86\x01Search term to match against connected account identifiers, providers, or connectors. Must be at least 3 characters. Case insensitive.J\x06google\xbaH\nr\x05\x10\x03\x18\xc8\x01\xc8\x01\x01R\x05query\x12\x85\x01\n\tpage_size\x18\x02 \x01(\rBh\x92\x41^2XMaximum number of connected accounts to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x03 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\x12i\n\rconnection_id\x18\x04 \x01(\tBD\x92\x41\x38\x32*Connection ID to filter connected accountsJ\n\"conn_123\"\xbaH\x06r\x04\x10\x00\x18 R\x0c\x63onnectionId:\xe6\x01\x92\x41\xe2\x01\n\x9c\x01*\x19Search Connected Accounts2\x7fSearch for connected accounts in your environment using a text query that matches against identifiers, providers, or connectors2Aquery=google&page_size=30&page_token=eyJwYWdlIjoyLCJsaW1pdCI6MzB9\"\x87\x05\n\x1fSearchConnectedAccountsResponse\x12\xcc\x01\n\x12\x63onnected_accounts\x18\x01 \x03(\x0b\x32\x37.scalekit.v1.connected_accounts.ConnectedAccountForListBd\x92\x41\x61\x32_List of connected accounts matching the search query. Excludes sensitive authorization details.R\x11\x63onnectedAccounts\x12l\n\ntotal_size\x18\x02 \x01(\rBM\x92\x41J2CTotal count of accounts matching the search query across all pages.J\x03\x31\x30\x30R\ttotalSize\x12\x91\x01\n\x0fnext_page_token\x18\x03 \x01(\tBi\x92\x41]2CPagination token for the next page. Empty if this is the last page.J\x16\"eyJvZmZzZXQiOjMwfQ==\"\xbaH\x06r\x04\x10\x00\x18 R\rnextPageToken\x12\x92\x01\n\x0fprev_page_token\x18\x04 \x01(\tBj\x92\x41^2HPagination token for the previous page. Empty if this is the first page.J\x12\"eyJvZmZzZXQiOjB9\"\xbaH\x06r\x04\x10\x00\x18 R\rprevPageToken\"\xa8\x07\n\x1d\x43reateConnectedAccountRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12\x64\n\tconnector\x18\x03 \x01(\tBA\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x1br\x19\x10\x00\x18\x90\x03\x32\x12^[a-zA-Z0-9_: -]*$H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12\xbd\x02\n\x11\x63onnected_account\x18\x05 \x01(\x0b\x32\x36.scalekit.v1.connected_accounts.CreateConnectedAccountB\xd7\x01\x92\x41\xcd\x01\x32*Details of the connected account to createJ\x9e\x01{ \"authorization_type\": \"OAUTH2\", \"authorization_details\": { \"oauth_token\": { \"access_token\": \"...\", \"refresh_token\": \"...\", \"scopes\": [\"read\", \"write\"] } } }\xbaH\x03\xc8\x01\x01R\x10\x63onnectedAccountB\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifier\"\x8d\x02\n\x1e\x43reateConnectedAccountResponse\x12\xea\x01\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountB\x8a\x01\x92\x41\x86\x01\x32\x83\x01The newly created connected account with its unique identifier, status, and complete authorization details including access tokens.R\x10\x63onnectedAccount\"\x84\x08\n\x1dUpdateConnectedAccountRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12P\n\tconnector\x18\x03 \x01(\tB-\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x07r\x05\x10\x00\x18\x90\x03H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12g\n\x02id\x18\x06 \x01(\tBR\x92\x41\x41\x32\x35Unique identifier for the connected account to updateJ\x08\"ca_123\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_H\x04R\x02id\x88\x01\x01\x12\xbd\x02\n\x11\x63onnected_account\x18\x05 \x01(\x0b\x32\x36.scalekit.v1.connected_accounts.UpdateConnectedAccountB\xd7\x01\x92\x41\xcd\x01\x32*Details of the connected account to updateJ\x9e\x01{ \"authorization_type\": \"OAUTH2\", \"authorization_details\": { \"oauth_token\": { \"access_token\": \"...\", \"refresh_token\": \"...\", \"scopes\": [\"read\", \"write\"] } } }\xbaH\x03\xc8\x01\x01R\x10\x63onnectedAccountB\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifierB\x05\n\x03_id\"\xf7\x01\n\x1eUpdateConnectedAccountResponse\x12\xd4\x01\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountBu\x92\x41r2pThe updated connected account with refreshed credentials, new token expiry, and modified configuration settings.R\x10\x63onnectedAccount\"\xd8\x05\n\x1d\x44\x65leteConnectedAccountRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12\x64\n\tconnector\x18\x03 \x01(\tBA\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x1br\x19\x10\x00\x18\x90\x03\x32\x12^[a-zA-Z0-9_: -]*$H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12g\n\x02id\x18\x05 \x01(\tBR\x92\x41\x41\x32\x35Unique identifier for the connected account to deleteJ\x08\"ca_123\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_H\x04R\x02id\x88\x01\x01\x42\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifierB\x05\n\x03_id\" \n\x1e\x44\x65leteConnectedAccountResponse\"\xd3\x08\n&GetMagicLinkForConnectedAccountRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12P\n\tconnector\x18\x03 \x01(\tB-\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x07r\x05\x10\x00\x18\x90\x03H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12]\n\x02id\x18\x05 \x01(\tBH\x92\x41\x37\x32+Unique identifier for the connected accountJ\x08\"ca_123\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_H\x04R\x02id\x88\x01\x01\x12\xcf\x01\n\x05state\x18\x07 \x01(\tB\xb3\x01\x92\x41\xa5\x01\x32wOptional opaque state value. State added to the user verify redirect URL query params to validate the user verificationJ*\"QVNDSUFyY2hhYml0dGVyXzE2ODQ5NzIwNzI0NTY=\"\xbaH\x07r\x05\x10\x00\x18\x80\x04H\x05R\x05state\x88\x01\x01\x12\x9d\x01\n\x0fuser_verify_url\x18\x08 \x01(\tBp\x92\x41T2\"B2B app\'s user verify redirect URLJ.\"https://app.yourapp.com/user/verify/callback\"\xbaH\x16r\x14\x10\x00\x18\x80\x10\x32\r^$|^https?://H\x06R\ruserVerifyUrl\x88\x01\x01\x42\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifierB\x05\n\x03_idB\x08\n\x06_stateB\x12\n\x10_user_verify_url\"\x9c\x02\n\'GetMagicLinkForConnectedAccountResponse\x12r\n\x04link\x18\x01 \x01(\tB^\x92\x41[2%Authentication link for the connectorJ2\"https://notion.com/oauth/authorize?client_id=...\"R\x04link\x12}\n\x06\x65xpiry\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBI\x92\x41\x46\x32,Expiry timestamp for the authentication linkJ\x16\"2024-03-20T15:04:05Z\"R\x06\x65xpiry\"\xeb\x02\n!VerifyConnectedAccountUserRequest\x12\xc8\x01\n\x0f\x61uth_request_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x8e\x01\x32`Auth request ID as base64url-encoded opaque token from the user verify redirect URL query paramsJ*\"QVNDSUFyY2hhYml0dGVyXzE2ODQ5NzIwNzI0NTY=\"\xe0\x41\x02\xbaH\x07r\x05\x10\x01\x18\xe8\x07R\rauthRequestId\x12{\n\nidentifier\x18\x02 \x01(\tB[\x92\x41K25Current logged in user\'s connected account identifierJ\x12\"user@example.com\"\xe0\x41\x02\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\nidentifier\"\xd3\x01\n\"VerifyConnectedAccountUserResponse\x12\xac\x01\n\x1dpost_user_verify_redirect_url\x18\x01 \x01(\tBj\x92\x41g29URL to redirect the user to after successful verificationJ*\"https://env1.example.com/connect/success\"R\x19postUserVerifyRedirectUrl\"\xc3\x05\n&GetConnectedAccountByIdentifierRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12P\n\tconnector\x18\x03 \x01(\tB-\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x07r\x05\x10\x00\x18\x90\x03H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12]\n\x02id\x18\x05 \x01(\tBH\x92\x41\x37\x32+Unique identifier for the connected accountJ\x08\"ca_123\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_H\x04R\x02id\x88\x01\x01\x42\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifierB\x05\n\x03_id\"\xbe\x02\n\'GetConnectedAccountByIdentifierResponse\x12\x92\x02\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountB\xb2\x01\x92\x41\xae\x01\x32\xab\x01The connected account with complete details including sensitive authorization credentials (access tokens, refresh tokens, scopes). Handle with appropriate access controls.R\x10\x63onnectedAccount\"\xe3\x13\n\x10\x43onnectedAccount\x12\xbc\x01\n\nidentifier\x18\x01 \x01(\tB\x9b\x01\x92\x41\x97\x01\x32\x80\x01The unique identifier for this account in the third-party service. Typically an email address, user ID, or workspace identifier.J\x12\"user@example.com\"R\nidentifier\x12\xaa\x01\n\x08provider\x18\x02 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32}OAuth provider name (e.g., \'google\', \'microsoft\', \'github\'). Identifies which authentication service manages this connection.J\x08\"google\"R\x08provider\x12\xe4\x01\n\x06status\x18\x03 \x01(\x0e\x32/.scalekit.v1.connected_accounts.ConnectorStatusB\x9a\x01\x92\x41\x96\x01\x32\x93\x01\x43urrent status of the connected account. Indicates if the account is active, expired, pending authorization, or pending user identity verification.R\x06status\x12\xe9\x01\n\x12\x61uthorization_type\x18\x04 \x01(\x0e\x32-.scalekit.v1.connected_accounts.ConnectorTypeB\x8a\x01\x92\x41\x86\x01\x32\x83\x01Type of authorization mechanism used. Specifies whether this connection uses OAuth, API keys, bearer tokens, or other auth methods.R\x11\x61uthorizationType\x12\x81\x02\n\x15\x61uthorization_details\x18\x05 \x01(\x0b\x32\x34.scalekit.v1.connected_accounts.AuthorizationDetailsB\x95\x01\x92\x41\x91\x01\x32\x8e\x01Sensitive authentication credentials including access tokens, refresh tokens, and scopes. Contains either OAuth tokens or static auth details.R\x14\x61uthorizationDetails\x12\xce\x01\n\x10token_expires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x87\x01\x92\x41\x83\x01\x32iExpiration timestamp for the access token. After this time, the token must be refreshed or re-authorized.J\x16\"2024-12-31T23:59:59Z\"R\x0etokenExpiresAt\x12\xc9\x01\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x8d\x01\x92\x41\x89\x01\x32oTimestamp when this connected account was last modified. Updated whenever credentials or configuration changes.J\x16\"2024-03-20T15:04:05Z\"R\tupdatedAt\x12\xae\x01\n\tconnector\x18\x08 \x01(\tB\x8f\x01\x92\x41\x8b\x01\x32\x7f\x43onnector identifier (e.g., \'notion\', \'slack\', \'salesforce\'). Indicates which third-party application this account connects to.J\x08\"notion\"R\tconnector\x12\xcd\x01\n\x0clast_used_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x8e\x01\x92\x41\x8a\x01\x32pTimestamp when this connected account was last used to make an API call. Useful for tracking active connections.J\x16\"2024-03-20T14:30:00Z\"R\nlastUsedAt\x12\x98\x01\n\x02id\x18\n \x01(\tB\x87\x01\x92\x41v2\\Unique Scalekit-generated identifier for this connected account. Always prefixed with \'ca_\'.J\x16\"ca_24834495392086178\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_R\x02id\x12\xc6\x01\n\rconnection_id\x18\x0b \x01(\tB\xa0\x01\x92\x41\x93\x01\x32wReference to the parent connection configuration. Links this account to a specific connector setup in your environment.J\x18\"conn_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x0c\x63onnectionId\x12\x89\x02\n\napi_config\x18\x0c \x01(\x0b\x32\x17.google.protobuf.StructB\xd0\x01\x92\x41\xcc\x01\x32xOptional JSON configuration for connector-specific API settings such as rate limits, custom endpoints, or feature flags.JP{\"rate_limit\": 1000, \"timeout\": 30, \"base_url\": \"https://api.custom-domain.com\"}R\tapiConfig\"\x9a\x06\n\x16\x43reateConnectedAccount\x12\xae\x03\n\x15\x61uthorization_details\x18\x05 \x01(\x0b\x32\x34.scalekit.v1.connected_accounts.AuthorizationDetailsB\xc2\x02\x92\x41\xbe\x02\x32\xcd\x01Optional authentication credentials for the connected account. Include OAuth tokens (access_token, refresh_token, scopes) or static auth details (API keys, bearer tokens). Can be provided later via update.Jl{\"oauth_token\": {\"access_token\": \"ya29.a0...\", \"refresh_token\": \"1//0g...\", \"scopes\": [\"email\", \"profile\"]}}R\x14\x61uthorizationDetails\x12\x98\x02\n\napi_config\x18\x0b \x01(\x0b\x32\x17.google.protobuf.StructB\xdf\x01\x92\x41\xdb\x01\x32\x86\x01Optional JSON configuration for connector-specific API settings such as rate limits, custom API endpoints, timeouts, or feature flags.JP{\"rate_limit\": 1000, \"timeout\": 30, \"base_url\": \"https://api.custom-domain.com\"}R\tapiConfigJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08J\x04\x08\x08\x10\tJ\x04\x08\t\x10\nJ\x04\x08\n\x10\x0b\"\xbc\x05\n\x16UpdateConnectedAccount\x12\x8d\x03\n\x15\x61uthorization_details\x18\x05 \x01(\x0b\x32\x34.scalekit.v1.connected_accounts.AuthorizationDetailsB\xa1\x02\x92\x41\x9d\x02\x32\x99\x01Updated authentication credentials. Provide new OAuth tokens (e.g., after refresh) or updated static auth details. Only included fields will be modified.J\x7f{\"oauth_token\": {\"access_token\": \"ya29.new_token...\", \"refresh_token\": \"1//0g...\", \"scopes\": [\"email\", \"profile\", \"calendar\"]}}R\x14\x61uthorizationDetails\x12\xe1\x01\n\napi_config\x18\n \x01(\x0b\x32\x17.google.protobuf.StructB\xa8\x01\x92\x41\xa4\x01\x32}Updated JSON configuration for API-specific settings. Merges with existing configuration - only provided fields are modified.J#{\"rate_limit\": 2000, \"timeout\": 60}R\tapiConfigJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08J\x04\x08\x08\x10\tJ\x04\x08\t\x10\n\"\xe0\x08\n\x17\x43onnectedAccountForList\x12{\n\nidentifier\x18\x01 \x01(\tB[\x92\x41X2BThe unique identifier for this account in the third-party service.J\x12\"user@example.com\"R\nidentifier\x12]\n\x08provider\x18\x02 \x01(\tBA\x92\x41>22OAuth provider name (e.g., \'google\', \'microsoft\').J\x08\"google\"R\x08provider\x12h\n\x06status\x18\x03 \x01(\x0e\x32/.scalekit.v1.connected_accounts.ConnectorStatusB\x1f\x92\x41\x1c\x32\x1a\x43urrent connection status.R\x06status\x12\x80\x01\n\x12\x61uthorization_type\x18\x04 \x01(\x0e\x32-.scalekit.v1.connected_accounts.ConnectorTypeB\"\x92\x41\x1f\x32\x1d\x41uthorization mechanism type.R\x11\x61uthorizationType\x12~\n\x10token_expires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB8\x92\x41\x35\x32\x1bToken expiration timestamp.J\x16\"2024-12-31T23:59:59Z\"R\x0etokenExpiresAt\x12t\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB9\x92\x41\x36\x32\x1cLast modification timestamp.J\x16\"2024-03-20T15:04:05Z\"R\tupdatedAt\x12\x42\n\tconnector\x18\x08 \x01(\tB$\x92\x41!2\x15\x43onnector identifier.J\x08\"notion\"R\tconnector\x12p\n\x0clast_used_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampB2\x92\x41/2\x15Last usage timestamp.J\x16\"2024-03-20T14:30:00Z\"R\nlastUsedAt\x12Q\n\x02id\x18\n \x01(\tBA\x92\x41>2$Unique connected account identifier.J\x16\"ca_24834495392086178\"R\x02id\x12w\n\rconnection_id\x18\x0b \x01(\tBR\x92\x41\x46\x32*Parent connection configuration reference.J\x18\"conn_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x0c\x63onnectionIdJ\x04\x08\x05\x10\x06\"\xbf\x01\n\x14\x41uthorizationDetails\x12M\n\x0boauth_token\x18\x01 \x01(\x0b\x32*.scalekit.v1.connected_accounts.OauthTokenH\x00R\noauthToken\x12M\n\x0bstatic_auth\x18\x02 \x01(\x0b\x32*.scalekit.v1.connected_accounts.StaticAuthH\x00R\nstaticAuthB\t\n\x07\x64\x65tails\"\xdc\x05\n\nOauthToken\x12\xa0\x01\n\x0c\x61\x63\x63\x65ss_token\x18\x01 \x01(\tB}\x92\x41z2bOAuth access token for API requests. Typically short-lived and must be refreshed after expiration.J\x14\"ya29.a0AfH6SMBx...\"R\x0b\x61\x63\x63\x65ssToken\x12\xae\x01\n\rrefresh_token\x18\x02 \x01(\tB\x88\x01\x92\x41\x84\x01\x32nOAuth refresh token for obtaining new access tokens. Long-lived and used to maintain persistent authorization.J\x12\"1//0gHJxZ-Lb2...\"R\x0crefreshToken\x12\xe1\x01\n\x06scopes\x18\x03 \x03(\tB\xc8\x01\x92\x41\xc4\x01\x32\\List of granted OAuth scopes defining the permissions and access levels for this connection.Jd[\"https://www.googleapis.com/auth/drive.readonly\", \"https://www.googleapis.com/auth/userinfo.email\"]R\x06scopes\x12\x95\x01\n\x06\x64omain\x18\x04 \x01(\tB}\x92\x41z2iAssociated domain for workspace or organization-scoped OAuth connections (e.g., Google Workspace domain).J\r\"example.com\"R\x06\x64omain\"\xf4\x01\n\nStaticAuth\x12\xe5\x01\n\x07\x64\x65tails\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\xb1\x01\x92\x41\xad\x01\x32zFlexible JSON structure containing static credentials. Format varies by connector type (API key, username/password, etc.).J/{\"api_key\": \"sk_live_...\", \"api_secret\": \"...\"}R\x07\x64\x65tails\"\x83\x02\n\x1aGetConnectedAccountRequest\x12\xe4\x01\n\x02id\x18\x01 \x01(\tB\xd3\x01\x92\x41\xc6\x01\x32\xab\x01Unique identifier for the connected account. Always prefixed with \'ca_\'. If omitted (via the /this path), the connected account is resolved from the current token context.J\x16\"ca_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x02id\"\xc5\x01\n\x1bGetConnectedAccountResponse\x12\xa5\x01\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountBF\x92\x41\x43\x32\x41The connected account with its details and authentication status.R\x10\x63onnectedAccount\"\xb2\x01\n!DisconnectConnectedAccountRequest\x12\x8c\x01\n\x02id\x18\x01 \x01(\tB|\x92\x41p2VUnique identifier for the connected account to disconnect. Always prefixed with \'ca_\'.J\x16\"ca_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x02id\"\xc6\x01\n\"DisconnectConnectedAccountResponse\x12\x9f\x01\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountB@\x92\x41=2;The connected account with its updated DISCONNECTED status.R\x10\x63onnectedAccount*\x8b\x01\n\x0f\x43onnectorStatus\x12!\n\x1d\x43ONNECTION_STATUS_UNSPECIFIED\x10\x00\x12\n\n\x06\x41\x43TIVE\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x12\x10\n\x0cPENDING_AUTH\x10\x03\x12\x18\n\x14PENDING_VERIFICATION\x10\x04\x12\x10\n\x0c\x44ISCONNECTED\x10\x05*\xa3\x01\n\rConnectorType\x12\x1f\n\x1b\x43ONNECTION_TYPE_UNSPECIFIED\x10\x00\x12\t\n\x05OAUTH\x10\x01\x12\x0b\n\x07\x41PI_KEY\x10\x02\x12\x0e\n\nBASIC_AUTH\x10\x03\x12\x10\n\x0c\x42\x45\x41RER_TOKEN\x10\x04\x12\n\n\x06\x43USTOM\x10\x05\x12\t\n\x05\x42\x41SIC\x10\x06\x12\r\n\tOAUTH_M2M\x10\x07\x12\x11\n\rTRELLO_OAUTH1\x10\x08\x32\xf8N\n\x17\x43onnectedAccountService\x12\xde\x06\n\x15ListConnectedAccounts\x12<.scalekit.v1.connected_accounts.ListConnectedAccountsRequest\x1a=.scalekit.v1.connected_accounts.ListConnectedAccountsResponse\"\xc7\x05\x92\x41\x9b\x05\n\x12\x43onnected Accounts\x12\x17List connected accounts\x1a\x9a\x02Retrieves a paginated list of connected accounts for third-party integrations. Filter by organization, user, connector type, provider, or identifier. Returns OAuth tokens, API keys, and connection status for each account. Use pagination tokens to navigate through large result sets.J\xaf\x01\n\x03\x32\x30\x30\x12\xa7\x01\nbSuccessfully retrieved the list of connected accounts with their authentication details and status\x12\x41\n?\x1a=.scalekit.v1.connected_accounts.ListConnectedAccountsResponseJY\n\x03\x34\x30\x30\x12R\nPInvalid request - occurs when query parameters are malformed or validation failsJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/connected_accounts\x12\xe0\x06\n\x17SearchConnectedAccounts\x12>.scalekit.v1.connected_accounts.SearchConnectedAccountsRequest\x1a?.scalekit.v1.connected_accounts.SearchConnectedAccountsResponse\"\xc3\x05\x92\x41\x90\x05\n\x12\x43onnected Accounts\x12\x19Search connected accounts\x1a\x99\x02Search for connected accounts in your environment using a text query that matches against identifiers, providers, or connectors. The search performs case-insensitive matching across account details. Returns paginated results with account status and authentication type information.J\x99\x01\n\x03\x32\x30\x30\x12\x91\x01\nJSuccessfully retrieved matching connected accounts with pagination support\x12\x43\nA\x1a?.scalekit.v1.connected_accounts.SearchConnectedAccountsResponseJc\n\x03\x34\x30\x30\x12\\\nZInvalid request - query parameter is too short (minimum 3 characters) or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02#\x12!/api/v1/connected_accounts:search\x12\xfe\x07\n\x16\x43reateConnectedAccount\x12=.scalekit.v1.connected_accounts.CreateConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.CreateConnectedAccountResponse\"\xe4\x06\x92\x41\xb5\x06\n\x12\x43onnected Accounts\x12\x1a\x43reate a connected account\x1a\xdf\x02\x43reates a new connected account with OAuth tokens or API credentials for third-party service integration. Supply authorization details including access tokens, refresh tokens, scopes, and optional API configuration. The account can be scoped to an organization or user. Returns the created account with its unique identifier and authentication status.J\xa4\x01\n\x03\x32\x30\x31\x12\x9c\x01\nVConnected account created successfully with authentication credentials stored securely\x12\x42\n@\x1a>.scalekit.v1.connected_accounts.CreateConnectedAccountResponseJg\n\x03\x34\x30\x30\x12`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJM\n\x03\x34\x30\x39\x12\x46\nDConflict - connected account with the same identifier already exists\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1f\"\x1a/api/v1/connected_accounts:\x01*\x12\xf0\x07\n\x16UpdateConnectedAccount\x12=.scalekit.v1.connected_accounts.UpdateConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.UpdateConnectedAccountResponse\"\xd6\x06\x92\x41\xa6\x06\n\x12\x43onnected Accounts\x12$Update connected account credentials\x1a\xd2\x02Updates authentication credentials and configuration for an existing connected account. Modify OAuth tokens, refresh tokens, access scopes, or API configuration settings. Specify the account by ID, or by combination of organization/user, connector, and identifier. Returns the updated account with new token expiry and status information.J\x9a\x01\n\x03\x32\x30\x30\x12\x92\x01\nLConnected account updated successfully with new credentials or configuration\x12\x42\n@\x1a>.scalekit.v1.connected_accounts.UpdateConnectedAccountResponseJg\n\x03\x34\x30\x30\x12`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJK\n\x03\x34\x30\x34\x12\x44\nBConnected account not found - the specified account does not exist\x82\xb5\x18\x03\x18\xc4\x01\x82\xd3\xe4\x93\x02\x1f\x1a\x1a/api/v1/connected_accounts:\x01*\x12\xc6\x06\n\x16\x44\x65leteConnectedAccount\x12=.scalekit.v1.connected_accounts.DeleteConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.DeleteConnectedAccountResponse\"\xac\x05\x92\x41\xf6\x04\n\x12\x43onnected Accounts\x12\x1a\x44\x65lete a connected account\x1a\x9f\x02Permanently removes a connected account and revokes all associated authentication credentials. Identify the account by ID, or by combination of organization/user, connector, and identifier. This action cannot be undone. All OAuth tokens and API keys for this account will be invalidated.JK\n\x03\x32\x30\x30\x12\x44\nBConnected account deleted successfully and all credentials revokedJD\n\x03\x34\x30\x30\x12=\n;Invalid request - malformed parameters or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJK\n\x03\x34\x30\x34\x12\x44\nBConnected account not found - the specified account does not exist\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02&\"!/api/v1/connected_accounts:delete:\x01*\x12\xff\x06\n\x1fGetMagicLinkForConnectedAccount\x12\x46.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountRequest\x1aG.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountResponse\"\xca\x05\x92\x41\x90\x05\n\x12\x43onnected Accounts\x12\"Generate authentication magic link\x1a\xa2\x02\x43reates a time-limited magic link for connecting or re-authorizing a third-party account. The link directs users to the OAuth authorization flow for the specified connector. Returns the generated link URL and expiration timestamp. Links typically expire after a short duration for security.J\x9f\x01\n\x03\x32\x30\x30\x12\x97\x01\nHMagic link generated successfully with authorization URL and expiry time\x12K\nI\x1aG.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountResponseJK\n\x03\x34\x30\x30\x12\x44\nBInvalid request - missing required parameters or invalid connectorJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02*\"%/api/v1/connected_accounts/magic_link:\x01*\x12\xf6\x05\n\x13GetConnectedAccount\x12:.scalekit.v1.connected_accounts.GetConnectedAccountRequest\x1a;.scalekit.v1.connected_accounts.GetConnectedAccountResponse\"\xe5\x04\x92\x41\x90\x04\n\x12\x43onnected Accounts\x12\x17Get a connected account\x1a\xb8\x01Retrieves a connected account by its unique ID. Use the path \'/this\' (e.g. /api/v1/connected_accounts/this) to retrieve the connected account associated with the current token context.Jv\n\x03\x32\x30\x30\x12o\n,Successfully retrieved the connected account\x12?\n=\x1a;.scalekit.v1.connected_accounts.GetConnectedAccountResponseJD\n\x03\x34\x30\x30\x12=\n;Invalid request - missing or malformed connected account IDJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJ$\n\x03\x34\x30\x34\x12\x1d\n\x1b\x43onnected account not found\x82\xb5\x18\x03\x18\xc4\x01\x82\xd3\xe4\x93\x02\x44\x12\x1f/api/v1/connected_accounts/thisZ!\x12\x1f/api/v1/connected_accounts/{id}\x12\x86\x06\n\x1a\x44isconnectConnectedAccount\x12\x41.scalekit.v1.connected_accounts.DisconnectConnectedAccountRequest\x1a\x42.scalekit.v1.connected_accounts.DisconnectConnectedAccountResponse\"\xe0\x04\x92\x41\xf2\x03\n\x12\x43onnected Accounts\x12\x1e\x44isconnect a connected account\x1a\x88\x01\x44isconnects a connected account by setting its status to DISCONNECTED. The account record is retained but is marked as no longer active.J\x80\x01\n\x03\x32\x30\x30\x12y\n/Successfully disconnected the connected account\x12\x46\nD\x1a\x42.scalekit.v1.connected_accounts.DisconnectConnectedAccountResponseJD\n\x03\x34\x30\x30\x12=\n;Invalid request - missing or malformed connected account IDJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJ$\n\x03\x34\x30\x34\x12\x1d\n\x1b\x43onnected account not found\x82\xb5\x18\x03\x18\xc4\x01\x82\xd3\xe4\x93\x02]\"*/api/v1/connected_accounts/{id}:disconnect:\x01*Z,\"\'/api/v1/connected_accounts/-:disconnect:\x01*\x12\xb6\x07\n\x17GetConnectedAccountAuth\x12\x46.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierRequest\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponse\"\x89\x06\x92\x41\xd8\x05\n\x12\x43onnected Accounts\x12\x1dGet connected account details\x1a\xab\x02Retrieves complete authentication details for a connected account including OAuth tokens, refresh tokens, scopes, and API configuration. Query by account ID or by combination of organization/user, connector, and identifier. Returns sensitive credential information - use appropriate access controls.J\xa0\x01\n\x03\x32\x30\x30\x12\x98\x01\nISuccessfully retrieved connected account with full authentication details\x12K\nI\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponseJ<\n\x03\x34\x30\x30\x12\x35\n3Invalid request - missing required query parametersJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJP\n\x03\x34\x30\x34\x12I\nGConnected account not found - no account matches the specified criteria\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02!\x12\x1f/api/v1/connected_accounts/auth\x12\xfa\x06\n\x1aGetConnectedAccountDetails\x12\x46.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierRequest\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponse\"\xca\x05\x92\x41\x96\x05\n\x12\x43onnected Accounts\x12\x1dGet connected account details\x1a\x83\x02Returns metadata for a connected account including status, connector type, provider, and configuration without exposing stored authorization credentials. Look up by account ID, or by a combination of organization (or user), connector, and external identifier.J\x86\x01\n\x03\x32\x30\x30\x12\x7f\n0Successfully retrieved connected account details\x12K\nI\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponseJ<\n\x03\x34\x30\x30\x12\x35\n3Invalid request - missing required query parametersJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJP\n\x03\x34\x30\x34\x12I\nGConnected account not found - no account matches the specified criteria\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02$\x12\"/api/v1/connected_accounts/details\x12\xbb\x07\n\x1aVerifyConnectedAccountUser\x12\x41.scalekit.v1.connected_accounts.VerifyConnectedAccountUserRequest\x1a\x42.scalekit.v1.connected_accounts.VerifyConnectedAccountUserResponse\"\x95\x06\x92\x41\xda\x05\n\x12\x43onnected Accounts\x12\x1dVerify connected account user\x1a\xa4\x02\x43onfirms the user assertion and activates the connected account after the user completes third-party OAuth. Called by the B2B app server with auth_request_id and identifier. Validates that the asserted identifier matches the one stored on the auth request and promotes pending tokens to live.J\x8a\x01\n\x03\x32\x30\x30\x12\x82\x01\n8Verification successful; connected account is now ACTIVE\x12\x46\nD\x1a\x42.scalekit.v1.connected_accounts.VerifyConnectedAccountUserResponseJ6\n\x03\x34\x30\x30\x12/\n-Invalid request - missing or malformed fieldsJ7\n\x03\x34\x30\x31\x12\x30\n.Unauthorized - invalid or missing access tokenJ(\n\x03\x34\x30\x33\x12!\n\x1f\x46orbidden - identifier mismatchJV\n\x03\x34\x30\x34\x12O\nMNot found - no pending flow for the given auth_request_id or already consumed\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02+\"&/api/v1/connected_accounts/user/verify:\x01*\x1a\xe3\x01\x92\x41\xdf\x01\n\x12\x43onnected Accounts\x12\xc8\x01Manage connected accounts for third-party integrations and OAuth connections. Connected accounts represent authenticated access to external services like Google, Notion, Slack, and other applications.B\xa4\x02Z\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x18r\x16\x10\x00\x18\x32\x32\x10^[a-zA-Z0-9_-]*$H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12\xbd\x02\n\x11\x63onnected_account\x18\x05 \x01(\x0b\x32\x36.scalekit.v1.connected_accounts.CreateConnectedAccountB\xd7\x01\x92\x41\xcd\x01\x32*Details of the connected account to createJ\x9e\x01{ \"authorization_type\": \"OAUTH2\", \"authorization_details\": { \"oauth_token\": { \"access_token\": \"...\", \"refresh_token\": \"...\", \"scopes\": [\"read\", \"write\"] } } }\xbaH\x03\xc8\x01\x01R\x10\x63onnectedAccountB\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifier\"\x8d\x02\n\x1e\x43reateConnectedAccountResponse\x12\xea\x01\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountB\x8a\x01\x92\x41\x86\x01\x32\x83\x01The newly created connected account with its unique identifier, status, and complete authorization details including access tokens.R\x10\x63onnectedAccount\"\x83\x08\n\x1dUpdateConnectedAccountRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12O\n\tconnector\x18\x03 \x01(\tB,\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x06r\x04\x10\x00\x18\x32H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12g\n\x02id\x18\x06 \x01(\tBR\x92\x41\x41\x32\x35Unique identifier for the connected account to updateJ\x08\"ca_123\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_H\x04R\x02id\x88\x01\x01\x12\xbd\x02\n\x11\x63onnected_account\x18\x05 \x01(\x0b\x32\x36.scalekit.v1.connected_accounts.UpdateConnectedAccountB\xd7\x01\x92\x41\xcd\x01\x32*Details of the connected account to updateJ\x9e\x01{ \"authorization_type\": \"OAUTH2\", \"authorization_details\": { \"oauth_token\": { \"access_token\": \"...\", \"refresh_token\": \"...\", \"scopes\": [\"read\", \"write\"] } } }\xbaH\x03\xc8\x01\x01R\x10\x63onnectedAccountB\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifierB\x05\n\x03_id\"\xf7\x01\n\x1eUpdateConnectedAccountResponse\x12\xd4\x01\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountBu\x92\x41r2pThe updated connected account with refreshed credentials, new token expiry, and modified configuration settings.R\x10\x63onnectedAccount\"\xd5\x05\n\x1d\x44\x65leteConnectedAccountRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12\x61\n\tconnector\x18\x03 \x01(\tB>\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x18r\x16\x10\x00\x18\x32\x32\x10^[a-zA-Z0-9_-]*$H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12g\n\x02id\x18\x05 \x01(\tBR\x92\x41\x41\x32\x35Unique identifier for the connected account to deleteJ\x08\"ca_123\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_H\x04R\x02id\x88\x01\x01\x42\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifierB\x05\n\x03_id\" \n\x1e\x44\x65leteConnectedAccountResponse\"\xc2\x05\n&GetMagicLinkForConnectedAccountRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12O\n\tconnector\x18\x03 \x01(\tB,\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x06r\x04\x10\x00\x18\x32H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12]\n\x02id\x18\x05 \x01(\tBH\x92\x41\x37\x32+Unique identifier for the connected accountJ\x08\"ca_123\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_H\x04R\x02id\x88\x01\x01\x42\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifierB\x05\n\x03_id\"\x9c\x02\n\'GetMagicLinkForConnectedAccountResponse\x12r\n\x04link\x18\x01 \x01(\tB^\x92\x41[2%Authentication link for the connectorJ2\"https://notion.com/oauth/authorize?client_id=...\"R\x04link\x12}\n\x06\x65xpiry\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBI\x92\x41\x46\x32,Expiry timestamp for the authentication linkJ\x16\"2024-03-20T15:04:05Z\"R\x06\x65xpiry\"\xc2\x05\n&GetConnectedAccountByIdentifierRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12O\n\tconnector\x18\x03 \x01(\tB,\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x06r\x04\x10\x00\x18\x32H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12]\n\x02id\x18\x05 \x01(\tBH\x92\x41\x37\x32+Unique identifier for the connected accountJ\x08\"ca_123\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_H\x04R\x02id\x88\x01\x01\x42\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifierB\x05\n\x03_id\"\xbe\x02\n\'GetConnectedAccountByIdentifierResponse\x12\x92\x02\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountB\xb2\x01\x92\x41\xae\x01\x32\xab\x01The connected account with complete details including sensitive authorization credentials (access tokens, refresh tokens, scopes). Handle with appropriate access controls.R\x10\x63onnectedAccount\"\xbc\x13\n\x10\x43onnectedAccount\x12\xbc\x01\n\nidentifier\x18\x01 \x01(\tB\x9b\x01\x92\x41\x97\x01\x32\x80\x01The unique identifier for this account in the third-party service. Typically an email address, user ID, or workspace identifier.J\x12\"user@example.com\"R\nidentifier\x12\xaa\x01\n\x08provider\x18\x02 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32}OAuth provider name (e.g., \'google\', \'microsoft\', \'github\'). Identifies which authentication service manages this connection.J\x08\"google\"R\x08provider\x12\xbd\x01\n\x06status\x18\x03 \x01(\x0e\x32/.scalekit.v1.connected_accounts.ConnectorStatusBt\x92\x41q2oCurrent status of the connected account. Indicates if the account is active, expired, or pending authorization.R\x06status\x12\xe9\x01\n\x12\x61uthorization_type\x18\x04 \x01(\x0e\x32-.scalekit.v1.connected_accounts.ConnectorTypeB\x8a\x01\x92\x41\x86\x01\x32\x83\x01Type of authorization mechanism used. Specifies whether this connection uses OAuth, API keys, bearer tokens, or other auth methods.R\x11\x61uthorizationType\x12\x81\x02\n\x15\x61uthorization_details\x18\x05 \x01(\x0b\x32\x34.scalekit.v1.connected_accounts.AuthorizationDetailsB\x95\x01\x92\x41\x91\x01\x32\x8e\x01Sensitive authentication credentials including access tokens, refresh tokens, and scopes. Contains either OAuth tokens or static auth details.R\x14\x61uthorizationDetails\x12\xce\x01\n\x10token_expires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x87\x01\x92\x41\x83\x01\x32iExpiration timestamp for the access token. After this time, the token must be refreshed or re-authorized.J\x16\"2024-12-31T23:59:59Z\"R\x0etokenExpiresAt\x12\xc9\x01\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x8d\x01\x92\x41\x89\x01\x32oTimestamp when this connected account was last modified. Updated whenever credentials or configuration changes.J\x16\"2024-03-20T15:04:05Z\"R\tupdatedAt\x12\xae\x01\n\tconnector\x18\x08 \x01(\tB\x8f\x01\x92\x41\x8b\x01\x32\x7f\x43onnector identifier (e.g., \'notion\', \'slack\', \'salesforce\'). Indicates which third-party application this account connects to.J\x08\"notion\"R\tconnector\x12\xcd\x01\n\x0clast_used_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x8e\x01\x92\x41\x8a\x01\x32pTimestamp when this connected account was last used to make an API call. Useful for tracking active connections.J\x16\"2024-03-20T14:30:00Z\"R\nlastUsedAt\x12\x98\x01\n\x02id\x18\n \x01(\tB\x87\x01\x92\x41v2\\Unique Scalekit-generated identifier for this connected account. Always prefixed with \'ca_\'.J\x16\"ca_24834495392086178\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_R\x02id\x12\xc6\x01\n\rconnection_id\x18\x0b \x01(\tB\xa0\x01\x92\x41\x93\x01\x32wReference to the parent connection configuration. Links this account to a specific connector setup in your environment.J\x18\"conn_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x0c\x63onnectionId\x12\x89\x02\n\napi_config\x18\x0c \x01(\x0b\x32\x17.google.protobuf.StructB\xd0\x01\x92\x41\xcc\x01\x32xOptional JSON configuration for connector-specific API settings such as rate limits, custom endpoints, or feature flags.JP{\"rate_limit\": 1000, \"timeout\": 30, \"base_url\": \"https://api.custom-domain.com\"}R\tapiConfig\"\x8a\x06\n\x16\x43reateConnectedAccount\x12\x9e\x03\n\x15\x61uthorization_details\x18\x05 \x01(\x0b\x32\x34.scalekit.v1.connected_accounts.AuthorizationDetailsB\xb2\x02\x92\x41\xa8\x02\x32\xb7\x01Required authentication credentials for the connected account. Must include either OAuth tokens (access_token, refresh_token, scopes) or static auth details (API keys, bearer tokens).Jl{\"oauth_token\": {\"access_token\": \"ya29.a0...\", \"refresh_token\": \"1//0g...\", \"scopes\": [\"email\", \"profile\"]}}\xbaH\x03\xc8\x01\x01R\x14\x61uthorizationDetails\x12\x98\x02\n\napi_config\x18\x0b \x01(\x0b\x32\x17.google.protobuf.StructB\xdf\x01\x92\x41\xdb\x01\x32\x86\x01Optional JSON configuration for connector-specific API settings such as rate limits, custom API endpoints, timeouts, or feature flags.JP{\"rate_limit\": 1000, \"timeout\": 30, \"base_url\": \"https://api.custom-domain.com\"}R\tapiConfigJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08J\x04\x08\x08\x10\tJ\x04\x08\t\x10\nJ\x04\x08\n\x10\x0b\"\xbc\x05\n\x16UpdateConnectedAccount\x12\x8d\x03\n\x15\x61uthorization_details\x18\x05 \x01(\x0b\x32\x34.scalekit.v1.connected_accounts.AuthorizationDetailsB\xa1\x02\x92\x41\x9d\x02\x32\x99\x01Updated authentication credentials. Provide new OAuth tokens (e.g., after refresh) or updated static auth details. Only included fields will be modified.J\x7f{\"oauth_token\": {\"access_token\": \"ya29.new_token...\", \"refresh_token\": \"1//0g...\", \"scopes\": [\"email\", \"profile\", \"calendar\"]}}R\x14\x61uthorizationDetails\x12\xe1\x01\n\napi_config\x18\n \x01(\x0b\x32\x17.google.protobuf.StructB\xa8\x01\x92\x41\xa4\x01\x32}Updated JSON configuration for API-specific settings. Merges with existing configuration - only provided fields are modified.J#{\"rate_limit\": 2000, \"timeout\": 60}R\tapiConfigJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08J\x04\x08\x08\x10\tJ\x04\x08\t\x10\n\"\xe0\x08\n\x17\x43onnectedAccountForList\x12{\n\nidentifier\x18\x01 \x01(\tB[\x92\x41X2BThe unique identifier for this account in the third-party service.J\x12\"user@example.com\"R\nidentifier\x12]\n\x08provider\x18\x02 \x01(\tBA\x92\x41>22OAuth provider name (e.g., \'google\', \'microsoft\').J\x08\"google\"R\x08provider\x12h\n\x06status\x18\x03 \x01(\x0e\x32/.scalekit.v1.connected_accounts.ConnectorStatusB\x1f\x92\x41\x1c\x32\x1a\x43urrent connection status.R\x06status\x12\x80\x01\n\x12\x61uthorization_type\x18\x04 \x01(\x0e\x32-.scalekit.v1.connected_accounts.ConnectorTypeB\"\x92\x41\x1f\x32\x1d\x41uthorization mechanism type.R\x11\x61uthorizationType\x12~\n\x10token_expires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB8\x92\x41\x35\x32\x1bToken expiration timestamp.J\x16\"2024-12-31T23:59:59Z\"R\x0etokenExpiresAt\x12t\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB9\x92\x41\x36\x32\x1cLast modification timestamp.J\x16\"2024-03-20T15:04:05Z\"R\tupdatedAt\x12\x42\n\tconnector\x18\x08 \x01(\tB$\x92\x41!2\x15\x43onnector identifier.J\x08\"notion\"R\tconnector\x12p\n\x0clast_used_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampB2\x92\x41/2\x15Last usage timestamp.J\x16\"2024-03-20T14:30:00Z\"R\nlastUsedAt\x12Q\n\x02id\x18\n \x01(\tBA\x92\x41>2$Unique connected account identifier.J\x16\"ca_24834495392086178\"R\x02id\x12w\n\rconnection_id\x18\x0b \x01(\tBR\x92\x41\x46\x32*Parent connection configuration reference.J\x18\"conn_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x0c\x63onnectionIdJ\x04\x08\x05\x10\x06\"\xbf\x01\n\x14\x41uthorizationDetails\x12M\n\x0boauth_token\x18\x01 \x01(\x0b\x32*.scalekit.v1.connected_accounts.OauthTokenH\x00R\noauthToken\x12M\n\x0bstatic_auth\x18\x02 \x01(\x0b\x32*.scalekit.v1.connected_accounts.StaticAuthH\x00R\nstaticAuthB\t\n\x07\x64\x65tails\"\xdc\x05\n\nOauthToken\x12\xa0\x01\n\x0c\x61\x63\x63\x65ss_token\x18\x01 \x01(\tB}\x92\x41z2bOAuth access token for API requests. Typically short-lived and must be refreshed after expiration.J\x14\"ya29.a0AfH6SMBx...\"R\x0b\x61\x63\x63\x65ssToken\x12\xae\x01\n\rrefresh_token\x18\x02 \x01(\tB\x88\x01\x92\x41\x84\x01\x32nOAuth refresh token for obtaining new access tokens. Long-lived and used to maintain persistent authorization.J\x12\"1//0gHJxZ-Lb2...\"R\x0crefreshToken\x12\xe1\x01\n\x06scopes\x18\x03 \x03(\tB\xc8\x01\x92\x41\xc4\x01\x32\\List of granted OAuth scopes defining the permissions and access levels for this connection.Jd[\"https://www.googleapis.com/auth/drive.readonly\", \"https://www.googleapis.com/auth/userinfo.email\"]R\x06scopes\x12\x95\x01\n\x06\x64omain\x18\x04 \x01(\tB}\x92\x41z2iAssociated domain for workspace or organization-scoped OAuth connections (e.g., Google Workspace domain).J\r\"example.com\"R\x06\x64omain\"\xf4\x01\n\nStaticAuth\x12\xe5\x01\n\x07\x64\x65tails\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\xb1\x01\x92\x41\xad\x01\x32zFlexible JSON structure containing static credentials. Format varies by connector type (API key, username/password, etc.).J/{\"api_key\": \"sk_live_...\", \"api_secret\": \"...\"}R\x07\x64\x65tails*_\n\x0f\x43onnectorStatus\x12!\n\x1d\x43ONNECTION_STATUS_UNSPECIFIED\x10\x00\x12\n\n\x06\x41\x43TIVE\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x12\x10\n\x0cPENDING_AUTH\x10\x03*\x81\x01\n\rConnectorType\x12\x1f\n\x1b\x43ONNECTION_TYPE_UNSPECIFIED\x10\x00\x12\t\n\x05OAUTH\x10\x01\x12\x0b\n\x07\x41PI_KEY\x10\x02\x12\x0e\n\nBASIC_AUTH\x10\x03\x12\x10\n\x0c\x42\x45\x41RER_TOKEN\x10\x04\x12\n\n\x06\x43USTOM\x10\x05\x12\t\n\x05\x42\x41SIC\x10\x06\x32\xba\x34\n\x17\x43onnectedAccountService\x12\xde\x06\n\x15ListConnectedAccounts\x12<.scalekit.v1.connected_accounts.ListConnectedAccountsRequest\x1a=.scalekit.v1.connected_accounts.ListConnectedAccountsResponse\"\xc7\x05\x92\x41\x9b\x05\n\x12\x43onnected Accounts\x12\x17List connected accounts\x1a\x9a\x02Retrieves a paginated list of connected accounts for third-party integrations. Filter by organization, user, connector type, provider, or identifier. Returns OAuth tokens, API keys, and connection status for each account. Use pagination tokens to navigate through large result sets.J\xaf\x01\n\x03\x32\x30\x30\x12\xa7\x01\nbSuccessfully retrieved the list of connected accounts with their authentication details and status\x12\x41\n?\x1a=.scalekit.v1.connected_accounts.ListConnectedAccountsResponseJY\n\x03\x34\x30\x30\x12R\nPInvalid request - occurs when query parameters are malformed or validation failsJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/connected_accounts\x12\xe0\x06\n\x17SearchConnectedAccounts\x12>.scalekit.v1.connected_accounts.SearchConnectedAccountsRequest\x1a?.scalekit.v1.connected_accounts.SearchConnectedAccountsResponse\"\xc3\x05\x92\x41\x90\x05\n\x12\x43onnected Accounts\x12\x19Search connected accounts\x1a\x99\x02Search for connected accounts in your environment using a text query that matches against identifiers, providers, or connectors. The search performs case-insensitive matching across account details. Returns paginated results with account status and authentication type information.J\x99\x01\n\x03\x32\x30\x30\x12\x91\x01\nJSuccessfully retrieved matching connected accounts with pagination support\x12\x43\nA\x1a?.scalekit.v1.connected_accounts.SearchConnectedAccountsResponseJc\n\x03\x34\x30\x30\x12\\\nZInvalid request - query parameter is too short (minimum 3 characters) or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02#\x12!/api/v1/connected_accounts:search\x12\xfe\x07\n\x16\x43reateConnectedAccount\x12=.scalekit.v1.connected_accounts.CreateConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.CreateConnectedAccountResponse\"\xe4\x06\x92\x41\xb5\x06\n\x12\x43onnected Accounts\x12\x1a\x43reate a connected account\x1a\xdf\x02\x43reates a new connected account with OAuth tokens or API credentials for third-party service integration. Supply authorization details including access tokens, refresh tokens, scopes, and optional API configuration. The account can be scoped to an organization or user. Returns the created account with its unique identifier and authentication status.J\xa4\x01\n\x03\x32\x30\x31\x12\x9c\x01\nVConnected account created successfully with authentication credentials stored securely\x12\x42\n@\x1a>.scalekit.v1.connected_accounts.CreateConnectedAccountResponseJg\n\x03\x34\x30\x30\x12`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJM\n\x03\x34\x30\x39\x12\x46\nDConflict - connected account with the same identifier already exists\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1f\"\x1a/api/v1/connected_accounts:\x01*\x12\xef\x07\n\x16UpdateConnectedAccount\x12=.scalekit.v1.connected_accounts.UpdateConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.UpdateConnectedAccountResponse\"\xd5\x06\x92\x41\xa6\x06\n\x12\x43onnected Accounts\x12$Update connected account credentials\x1a\xd2\x02Updates authentication credentials and configuration for an existing connected account. Modify OAuth tokens, refresh tokens, access scopes, or API configuration settings. Specify the account by ID, or by combination of organization/user, connector, and identifier. Returns the updated account with new token expiry and status information.J\x9a\x01\n\x03\x32\x30\x30\x12\x92\x01\nLConnected account updated successfully with new credentials or configuration\x12\x42\n@\x1a>.scalekit.v1.connected_accounts.UpdateConnectedAccountResponseJg\n\x03\x34\x30\x30\x12`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJK\n\x03\x34\x30\x34\x12\x44\nBConnected account not found - the specified account does not exist\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1f\x1a\x1a/api/v1/connected_accounts:\x01*\x12\xc6\x06\n\x16\x44\x65leteConnectedAccount\x12=.scalekit.v1.connected_accounts.DeleteConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.DeleteConnectedAccountResponse\"\xac\x05\x92\x41\xf6\x04\n\x12\x43onnected Accounts\x12\x1a\x44\x65lete a connected account\x1a\x9f\x02Permanently removes a connected account and revokes all associated authentication credentials. Identify the account by ID, or by combination of organization/user, connector, and identifier. This action cannot be undone. All OAuth tokens and API keys for this account will be invalidated.JK\n\x03\x32\x30\x30\x12\x44\nBConnected account deleted successfully and all credentials revokedJD\n\x03\x34\x30\x30\x12=\n;Invalid request - malformed parameters or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJK\n\x03\x34\x30\x34\x12\x44\nBConnected account not found - the specified account does not exist\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02&\"!/api/v1/connected_accounts:delete:\x01*\x12\xff\x06\n\x1fGetMagicLinkForConnectedAccount\x12\x46.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountRequest\x1aG.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountResponse\"\xca\x05\x92\x41\x90\x05\n\x12\x43onnected Accounts\x12\"Generate authentication magic link\x1a\xa2\x02\x43reates a time-limited magic link for connecting or re-authorizing a third-party account. The link directs users to the OAuth authorization flow for the specified connector. Returns the generated link URL and expiration timestamp. Links typically expire after a short duration for security.J\x9f\x01\n\x03\x32\x30\x30\x12\x97\x01\nHMagic link generated successfully with authorization URL and expiry time\x12K\nI\x1aG.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountResponseJK\n\x03\x34\x30\x30\x12\x44\nBInvalid request - missing required parameters or invalid connectorJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02*\"%/api/v1/connected_accounts/magic_link:\x01*\x12\xb6\x07\n\x17GetConnectedAccountAuth\x12\x46.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierRequest\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponse\"\x89\x06\x92\x41\xd8\x05\n\x12\x43onnected Accounts\x12\x1dGet connected account details\x1a\xab\x02Retrieves complete authentication details for a connected account including OAuth tokens, refresh tokens, scopes, and API configuration. Query by account ID or by combination of organization/user, connector, and identifier. Returns sensitive credential information - use appropriate access controls.J\xa0\x01\n\x03\x32\x30\x30\x12\x98\x01\nISuccessfully retrieved connected account with full authentication details\x12K\nI\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponseJ<\n\x03\x34\x30\x30\x12\x35\n3Invalid request - missing required query parametersJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJP\n\x03\x34\x30\x34\x12I\nGConnected account not found - no account matches the specified criteria\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02!\x12\x1f/api/v1/connected_accounts/auth\x1a\xe3\x01\x92\x41\xdf\x01\n\x12\x43onnected Accounts\x12\xc8\x01Manage connected accounts for third-party integrations and OAuth connections. Connected accounts represent authenticated access to external services like Google, Notion, Slack, and other applications.B\xa4\x02Z.scalekit.v1.connected_accounts.CreateConnectedAccountResponseJg\n\003400\022`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\003401\022;\n9Authentication required - missing or invalid access tokenJM\n\003409\022F\nDConflict - connected account with the same identifier already exists\202\265\030\002\030D\202\323\344\223\002\037\"\032/api/v1/connected_accounts:\001*' _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['UpdateConnectedAccount']._loaded_options = None - _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['UpdateConnectedAccount']._serialized_options = b'\222A\246\006\n\022Connected Accounts\022$Update connected account credentials\032\322\002Updates authentication credentials and configuration for an existing connected account. Modify OAuth tokens, refresh tokens, access scopes, or API configuration settings. Specify the account by ID, or by combination of organization/user, connector, and identifier. Returns the updated account with new token expiry and status information.J\232\001\n\003200\022\222\001\nLConnected account updated successfully with new credentials or configuration\022B\n@\032>.scalekit.v1.connected_accounts.UpdateConnectedAccountResponseJg\n\003400\022`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\003401\022;\n9Authentication required - missing or invalid access tokenJK\n\003404\022D\nBConnected account not found - the specified account does not exist\202\265\030\003\030\304\001\202\323\344\223\002\037\032\032/api/v1/connected_accounts:\001*' + _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['UpdateConnectedAccount']._serialized_options = b'\222A\246\006\n\022Connected Accounts\022$Update connected account credentials\032\322\002Updates authentication credentials and configuration for an existing connected account. Modify OAuth tokens, refresh tokens, access scopes, or API configuration settings. Specify the account by ID, or by combination of organization/user, connector, and identifier. Returns the updated account with new token expiry and status information.J\232\001\n\003200\022\222\001\nLConnected account updated successfully with new credentials or configuration\022B\n@\032>.scalekit.v1.connected_accounts.UpdateConnectedAccountResponseJg\n\003400\022`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\003401\022;\n9Authentication required - missing or invalid access tokenJK\n\003404\022D\nBConnected account not found - the specified account does not exist\202\265\030\002\030D\202\323\344\223\002\037\032\032/api/v1/connected_accounts:\001*' _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['DeleteConnectedAccount']._loaded_options = None _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['DeleteConnectedAccount']._serialized_options = b'\222A\366\004\n\022Connected Accounts\022\032Delete a connected account\032\237\002Permanently removes a connected account and revokes all associated authentication credentials. Identify the account by ID, or by combination of organization/user, connector, and identifier. This action cannot be undone. All OAuth tokens and API keys for this account will be invalidated.JK\n\003200\022D\nBConnected account deleted successfully and all credentials revokedJD\n\003400\022=\n;Invalid request - malformed parameters or validation failedJB\n\003401\022;\n9Authentication required - missing or invalid access tokenJK\n\003404\022D\nBConnected account not found - the specified account does not exist\202\265\030\002\030D\202\323\344\223\002&\"!/api/v1/connected_accounts:delete:\001*' _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['GetMagicLinkForConnectedAccount']._loaded_options = None _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['GetMagicLinkForConnectedAccount']._serialized_options = b'\222A\220\005\n\022Connected Accounts\022\"Generate authentication magic link\032\242\002Creates a time-limited magic link for connecting or re-authorizing a third-party account. The link directs users to the OAuth authorization flow for the specified connector. Returns the generated link URL and expiration timestamp. Links typically expire after a short duration for security.J\237\001\n\003200\022\227\001\nHMagic link generated successfully with authorization URL and expiry time\022K\nI\032G.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountResponseJK\n\003400\022D\nBInvalid request - missing required parameters or invalid connectorJB\n\003401\022;\n9Authentication required - missing or invalid access token\202\265\030\002\030D\202\323\344\223\002*\"%/api/v1/connected_accounts/magic_link:\001*' - _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['GetConnectedAccount']._loaded_options = None - _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['GetConnectedAccount']._serialized_options = b'\222A\220\004\n\022Connected Accounts\022\027Get a connected account\032\270\001Retrieves a connected account by its unique ID. Use the path \'/this\' (e.g. /api/v1/connected_accounts/this) to retrieve the connected account associated with the current token context.Jv\n\003200\022o\n,Successfully retrieved the connected account\022?\n=\032;.scalekit.v1.connected_accounts.GetConnectedAccountResponseJD\n\003400\022=\n;Invalid request - missing or malformed connected account IDJB\n\003401\022;\n9Authentication required - missing or invalid access tokenJ$\n\003404\022\035\n\033Connected account not found\202\265\030\003\030\304\001\202\323\344\223\002D\022\037/api/v1/connected_accounts/thisZ!\022\037/api/v1/connected_accounts/{id}' - _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['DisconnectConnectedAccount']._loaded_options = None - _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['DisconnectConnectedAccount']._serialized_options = b'\222A\362\003\n\022Connected Accounts\022\036Disconnect a connected account\032\210\001Disconnects a connected account by setting its status to DISCONNECTED. The account record is retained but is marked as no longer active.J\200\001\n\003200\022y\n/Successfully disconnected the connected account\022F\nD\032B.scalekit.v1.connected_accounts.DisconnectConnectedAccountResponseJD\n\003400\022=\n;Invalid request - missing or malformed connected account IDJB\n\003401\022;\n9Authentication required - missing or invalid access tokenJ$\n\003404\022\035\n\033Connected account not found\202\265\030\003\030\304\001\202\323\344\223\002]\"*/api/v1/connected_accounts/{id}:disconnect:\001*Z,\"\'/api/v1/connected_accounts/-:disconnect:\001*' _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['GetConnectedAccountAuth']._loaded_options = None _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['GetConnectedAccountAuth']._serialized_options = b'\222A\330\005\n\022Connected Accounts\022\035Get connected account details\032\253\002Retrieves complete authentication details for a connected account including OAuth tokens, refresh tokens, scopes, and API configuration. Query by account ID or by combination of organization/user, connector, and identifier. Returns sensitive credential information - use appropriate access controls.J\240\001\n\003200\022\230\001\nISuccessfully retrieved connected account with full authentication details\022K\nI\032G.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponseJ<\n\003400\0225\n3Invalid request - missing required query parametersJB\n\003401\022;\n9Authentication required - missing or invalid access tokenJP\n\003404\022I\nGConnected account not found - no account matches the specified criteria\202\265\030\002\030D\202\323\344\223\002!\022\037/api/v1/connected_accounts/auth' - _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['GetConnectedAccountDetails']._loaded_options = None - _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['GetConnectedAccountDetails']._serialized_options = b'\222A\226\005\n\022Connected Accounts\022\035Get connected account details\032\203\002Returns metadata for a connected account including status, connector type, provider, and configuration without exposing stored authorization credentials. Look up by account ID, or by a combination of organization (or user), connector, and external identifier.J\206\001\n\003200\022\177\n0Successfully retrieved connected account details\022K\nI\032G.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponseJ<\n\003400\0225\n3Invalid request - missing required query parametersJB\n\003401\022;\n9Authentication required - missing or invalid access tokenJP\n\003404\022I\nGConnected account not found - no account matches the specified criteria\202\265\030\002\030D\202\323\344\223\002$\022\"/api/v1/connected_accounts/details' - _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['VerifyConnectedAccountUser']._loaded_options = None - _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['VerifyConnectedAccountUser']._serialized_options = b'\222A\332\005\n\022Connected Accounts\022\035Verify connected account user\032\244\002Confirms the user assertion and activates the connected account after the user completes third-party OAuth. Called by the B2B app server with auth_request_id and identifier. Validates that the asserted identifier matches the one stored on the auth request and promotes pending tokens to live.J\212\001\n\003200\022\202\001\n8Verification successful; connected account is now ACTIVE\022F\nD\032B.scalekit.v1.connected_accounts.VerifyConnectedAccountUserResponseJ6\n\003400\022/\n-Invalid request - missing or malformed fieldsJ7\n\003401\0220\n.Unauthorized - invalid or missing access tokenJ(\n\003403\022!\n\037Forbidden - identifier mismatchJV\n\003404\022O\nMNot found - no pending flow for the given auth_request_id or already consumed\202\265\030\002\030D\202\323\344\223\002+\"&/api/v1/connected_accounts/user/verify:\001*' - _globals['_CONNECTORSTATUS']._serialized_start=17728 - _globals['_CONNECTORSTATUS']._serialized_end=17867 - _globals['_CONNECTORTYPE']._serialized_start=17870 - _globals['_CONNECTORTYPE']._serialized_end=18033 + _globals['_CONNECTORSTATUS']._serialized_start=15819 + _globals['_CONNECTORSTATUS']._serialized_end=15914 + _globals['_CONNECTORTYPE']._serialized_start=15917 + _globals['_CONNECTORTYPE']._serialized_end=16046 _globals['_LISTCONNECTEDACCOUNTSREQUEST']._serialized_start=359 - _globals['_LISTCONNECTEDACCOUNTSREQUEST']._serialized_end=1936 - _globals['_LISTCONNECTEDACCOUNTSRESPONSE']._serialized_start=1939 - _globals['_LISTCONNECTEDACCOUNTSRESPONSE']._serialized_end=2766 - _globals['_SEARCHCONNECTEDACCOUNTSREQUEST']._serialized_start=2769 - _globals['_SEARCHCONNECTEDACCOUNTSREQUEST']._serialized_end=3633 - _globals['_SEARCHCONNECTEDACCOUNTSRESPONSE']._serialized_start=3636 - _globals['_SEARCHCONNECTEDACCOUNTSRESPONSE']._serialized_end=4283 - _globals['_CREATECONNECTEDACCOUNTREQUEST']._serialized_start=4286 - _globals['_CREATECONNECTEDACCOUNTREQUEST']._serialized_end=5222 - _globals['_CREATECONNECTEDACCOUNTRESPONSE']._serialized_start=5225 - _globals['_CREATECONNECTEDACCOUNTRESPONSE']._serialized_end=5494 - _globals['_UPDATECONNECTEDACCOUNTREQUEST']._serialized_start=5497 - _globals['_UPDATECONNECTEDACCOUNTREQUEST']._serialized_end=6525 - _globals['_UPDATECONNECTEDACCOUNTRESPONSE']._serialized_start=6528 - _globals['_UPDATECONNECTEDACCOUNTRESPONSE']._serialized_end=6775 - _globals['_DELETECONNECTEDACCOUNTREQUEST']._serialized_start=6778 - _globals['_DELETECONNECTEDACCOUNTREQUEST']._serialized_end=7506 - _globals['_DELETECONNECTEDACCOUNTRESPONSE']._serialized_start=7508 - _globals['_DELETECONNECTEDACCOUNTRESPONSE']._serialized_end=7540 - _globals['_GETMAGICLINKFORCONNECTEDACCOUNTREQUEST']._serialized_start=7543 - _globals['_GETMAGICLINKFORCONNECTEDACCOUNTREQUEST']._serialized_end=8650 - _globals['_GETMAGICLINKFORCONNECTEDACCOUNTRESPONSE']._serialized_start=8653 - _globals['_GETMAGICLINKFORCONNECTEDACCOUNTRESPONSE']._serialized_end=8937 - _globals['_VERIFYCONNECTEDACCOUNTUSERREQUEST']._serialized_start=8940 - _globals['_VERIFYCONNECTEDACCOUNTUSERREQUEST']._serialized_end=9303 - _globals['_VERIFYCONNECTEDACCOUNTUSERRESPONSE']._serialized_start=9306 - _globals['_VERIFYCONNECTEDACCOUNTUSERRESPONSE']._serialized_end=9517 - _globals['_GETCONNECTEDACCOUNTBYIDENTIFIERREQUEST']._serialized_start=9520 - _globals['_GETCONNECTEDACCOUNTBYIDENTIFIERREQUEST']._serialized_end=10227 - _globals['_GETCONNECTEDACCOUNTBYIDENTIFIERRESPONSE']._serialized_start=10230 - _globals['_GETCONNECTEDACCOUNTBYIDENTIFIERRESPONSE']._serialized_end=10548 - _globals['_CONNECTEDACCOUNT']._serialized_start=10551 - _globals['_CONNECTEDACCOUNT']._serialized_end=13082 - _globals['_CREATECONNECTEDACCOUNT']._serialized_start=13085 - _globals['_CREATECONNECTEDACCOUNT']._serialized_end=13879 - _globals['_UPDATECONNECTEDACCOUNT']._serialized_start=13882 - _globals['_UPDATECONNECTEDACCOUNT']._serialized_end=14582 - _globals['_CONNECTEDACCOUNTFORLIST']._serialized_start=14585 - _globals['_CONNECTEDACCOUNTFORLIST']._serialized_end=15705 - _globals['_AUTHORIZATIONDETAILS']._serialized_start=15708 - _globals['_AUTHORIZATIONDETAILS']._serialized_end=15899 - _globals['_OAUTHTOKEN']._serialized_start=15902 - _globals['_OAUTHTOKEN']._serialized_end=16634 - _globals['_STATICAUTH']._serialized_start=16637 - _globals['_STATICAUTH']._serialized_end=16881 - _globals['_GETCONNECTEDACCOUNTREQUEST']._serialized_start=16884 - _globals['_GETCONNECTEDACCOUNTREQUEST']._serialized_end=17143 - _globals['_GETCONNECTEDACCOUNTRESPONSE']._serialized_start=17146 - _globals['_GETCONNECTEDACCOUNTRESPONSE']._serialized_end=17343 - _globals['_DISCONNECTCONNECTEDACCOUNTREQUEST']._serialized_start=17346 - _globals['_DISCONNECTCONNECTEDACCOUNTREQUEST']._serialized_end=17524 - _globals['_DISCONNECTCONNECTEDACCOUNTRESPONSE']._serialized_start=17527 - _globals['_DISCONNECTCONNECTEDACCOUNTRESPONSE']._serialized_end=17725 - _globals['_CONNECTEDACCOUNTSERVICE']._serialized_start=18036 - _globals['_CONNECTEDACCOUNTSERVICE']._serialized_end=28140 + _globals['_LISTCONNECTEDACCOUNTSREQUEST']._serialized_end=1916 + _globals['_LISTCONNECTEDACCOUNTSRESPONSE']._serialized_start=1919 + _globals['_LISTCONNECTEDACCOUNTSRESPONSE']._serialized_end=2746 + _globals['_SEARCHCONNECTEDACCOUNTSREQUEST']._serialized_start=2749 + _globals['_SEARCHCONNECTEDACCOUNTSREQUEST']._serialized_end=3613 + _globals['_SEARCHCONNECTEDACCOUNTSRESPONSE']._serialized_start=3616 + _globals['_SEARCHCONNECTEDACCOUNTSRESPONSE']._serialized_end=4263 + _globals['_CREATECONNECTEDACCOUNTREQUEST']._serialized_start=4266 + _globals['_CREATECONNECTEDACCOUNTREQUEST']._serialized_end=5199 + _globals['_CREATECONNECTEDACCOUNTRESPONSE']._serialized_start=5202 + _globals['_CREATECONNECTEDACCOUNTRESPONSE']._serialized_end=5471 + _globals['_UPDATECONNECTEDACCOUNTREQUEST']._serialized_start=5474 + _globals['_UPDATECONNECTEDACCOUNTREQUEST']._serialized_end=6501 + _globals['_UPDATECONNECTEDACCOUNTRESPONSE']._serialized_start=6504 + _globals['_UPDATECONNECTEDACCOUNTRESPONSE']._serialized_end=6751 + _globals['_DELETECONNECTEDACCOUNTREQUEST']._serialized_start=6754 + _globals['_DELETECONNECTEDACCOUNTREQUEST']._serialized_end=7479 + _globals['_DELETECONNECTEDACCOUNTRESPONSE']._serialized_start=7481 + _globals['_DELETECONNECTEDACCOUNTRESPONSE']._serialized_end=7513 + _globals['_GETMAGICLINKFORCONNECTEDACCOUNTREQUEST']._serialized_start=7516 + _globals['_GETMAGICLINKFORCONNECTEDACCOUNTREQUEST']._serialized_end=8222 + _globals['_GETMAGICLINKFORCONNECTEDACCOUNTRESPONSE']._serialized_start=8225 + _globals['_GETMAGICLINKFORCONNECTEDACCOUNTRESPONSE']._serialized_end=8509 + _globals['_GETCONNECTEDACCOUNTBYIDENTIFIERREQUEST']._serialized_start=8512 + _globals['_GETCONNECTEDACCOUNTBYIDENTIFIERREQUEST']._serialized_end=9218 + _globals['_GETCONNECTEDACCOUNTBYIDENTIFIERRESPONSE']._serialized_start=9221 + _globals['_GETCONNECTEDACCOUNTBYIDENTIFIERRESPONSE']._serialized_end=9539 + _globals['_CONNECTEDACCOUNT']._serialized_start=9542 + _globals['_CONNECTEDACCOUNT']._serialized_end=12034 + _globals['_CREATECONNECTEDACCOUNT']._serialized_start=12037 + _globals['_CREATECONNECTEDACCOUNT']._serialized_end=12815 + _globals['_UPDATECONNECTEDACCOUNT']._serialized_start=12818 + _globals['_UPDATECONNECTEDACCOUNT']._serialized_end=13518 + _globals['_CONNECTEDACCOUNTFORLIST']._serialized_start=13521 + _globals['_CONNECTEDACCOUNTFORLIST']._serialized_end=14641 + _globals['_AUTHORIZATIONDETAILS']._serialized_start=14644 + _globals['_AUTHORIZATIONDETAILS']._serialized_end=14835 + _globals['_OAUTHTOKEN']._serialized_start=14838 + _globals['_OAUTHTOKEN']._serialized_end=15570 + _globals['_STATICAUTH']._serialized_start=15573 + _globals['_STATICAUTH']._serialized_end=15817 + _globals['_CONNECTEDACCOUNTSERVICE']._serialized_start=16049 + _globals['_CONNECTEDACCOUNTSERVICE']._serialized_end=22763 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/connected_accounts/connected_accounts_pb2.pyi b/scalekit/v1/connected_accounts/connected_accounts_pb2.pyi index 1e10adb..9cdc6a3 100644 --- a/scalekit/v1/connected_accounts/connected_accounts_pb2.pyi +++ b/scalekit/v1/connected_accounts/connected_accounts_pb2.pyi @@ -20,8 +20,6 @@ class ConnectorStatus(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): ACTIVE: _ClassVar[ConnectorStatus] EXPIRED: _ClassVar[ConnectorStatus] PENDING_AUTH: _ClassVar[ConnectorStatus] - PENDING_VERIFICATION: _ClassVar[ConnectorStatus] - DISCONNECTED: _ClassVar[ConnectorStatus] class ConnectorType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): __slots__ = () @@ -32,14 +30,10 @@ class ConnectorType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): BEARER_TOKEN: _ClassVar[ConnectorType] CUSTOM: _ClassVar[ConnectorType] BASIC: _ClassVar[ConnectorType] - OAUTH_M2M: _ClassVar[ConnectorType] - TRELLO_OAUTH1: _ClassVar[ConnectorType] CONNECTION_STATUS_UNSPECIFIED: ConnectorStatus ACTIVE: ConnectorStatus EXPIRED: ConnectorStatus PENDING_AUTH: ConnectorStatus -PENDING_VERIFICATION: ConnectorStatus -DISCONNECTED: ConnectorStatus CONNECTION_TYPE_UNSPECIFIED: ConnectorType OAUTH: ConnectorType API_KEY: ConnectorType @@ -47,8 +41,6 @@ BASIC_AUTH: ConnectorType BEARER_TOKEN: ConnectorType CUSTOM: ConnectorType BASIC: ConnectorType -OAUTH_M2M: ConnectorType -TRELLO_OAUTH1: ConnectorType class ListConnectedAccountsRequest(_message.Message): __slots__ = ("organization_id", "user_id", "connector", "identifier", "provider", "page_size", "page_token", "query") @@ -167,22 +159,18 @@ class DeleteConnectedAccountResponse(_message.Message): def __init__(self) -> None: ... class GetMagicLinkForConnectedAccountRequest(_message.Message): - __slots__ = ("organization_id", "user_id", "connector", "identifier", "id", "state", "user_verify_url") + __slots__ = ("organization_id", "user_id", "connector", "identifier", "id") ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] USER_ID_FIELD_NUMBER: _ClassVar[int] CONNECTOR_FIELD_NUMBER: _ClassVar[int] IDENTIFIER_FIELD_NUMBER: _ClassVar[int] ID_FIELD_NUMBER: _ClassVar[int] - STATE_FIELD_NUMBER: _ClassVar[int] - USER_VERIFY_URL_FIELD_NUMBER: _ClassVar[int] organization_id: str user_id: str connector: str identifier: str id: str - state: str - user_verify_url: str - def __init__(self, organization_id: _Optional[str] = ..., user_id: _Optional[str] = ..., connector: _Optional[str] = ..., identifier: _Optional[str] = ..., id: _Optional[str] = ..., state: _Optional[str] = ..., user_verify_url: _Optional[str] = ...) -> None: ... + def __init__(self, organization_id: _Optional[str] = ..., user_id: _Optional[str] = ..., connector: _Optional[str] = ..., identifier: _Optional[str] = ..., id: _Optional[str] = ...) -> None: ... class GetMagicLinkForConnectedAccountResponse(_message.Message): __slots__ = ("link", "expiry") @@ -192,20 +180,6 @@ class GetMagicLinkForConnectedAccountResponse(_message.Message): expiry: _timestamp_pb2.Timestamp def __init__(self, link: _Optional[str] = ..., expiry: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ... -class VerifyConnectedAccountUserRequest(_message.Message): - __slots__ = ("auth_request_id", "identifier") - AUTH_REQUEST_ID_FIELD_NUMBER: _ClassVar[int] - IDENTIFIER_FIELD_NUMBER: _ClassVar[int] - auth_request_id: str - identifier: str - def __init__(self, auth_request_id: _Optional[str] = ..., identifier: _Optional[str] = ...) -> None: ... - -class VerifyConnectedAccountUserResponse(_message.Message): - __slots__ = ("post_user_verify_redirect_url",) - POST_USER_VERIFY_REDIRECT_URL_FIELD_NUMBER: _ClassVar[int] - post_user_verify_redirect_url: str - def __init__(self, post_user_verify_redirect_url: _Optional[str] = ...) -> None: ... - class GetConnectedAccountByIdentifierRequest(_message.Message): __slots__ = ("organization_id", "user_id", "connector", "identifier", "id") ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] @@ -319,27 +293,3 @@ class StaticAuth(_message.Message): DETAILS_FIELD_NUMBER: _ClassVar[int] details: _struct_pb2.Struct def __init__(self, details: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... - -class GetConnectedAccountRequest(_message.Message): - __slots__ = ("id",) - ID_FIELD_NUMBER: _ClassVar[int] - id: str - def __init__(self, id: _Optional[str] = ...) -> None: ... - -class GetConnectedAccountResponse(_message.Message): - __slots__ = ("connected_account",) - CONNECTED_ACCOUNT_FIELD_NUMBER: _ClassVar[int] - connected_account: ConnectedAccount - def __init__(self, connected_account: _Optional[_Union[ConnectedAccount, _Mapping]] = ...) -> None: ... - -class DisconnectConnectedAccountRequest(_message.Message): - __slots__ = ("id",) - ID_FIELD_NUMBER: _ClassVar[int] - id: str - def __init__(self, id: _Optional[str] = ...) -> None: ... - -class DisconnectConnectedAccountResponse(_message.Message): - __slots__ = ("connected_account",) - CONNECTED_ACCOUNT_FIELD_NUMBER: _ClassVar[int] - connected_account: ConnectedAccount - def __init__(self, connected_account: _Optional[_Union[ConnectedAccount, _Mapping]] = ...) -> None: ... diff --git a/scalekit/v1/connected_accounts/connected_accounts_pb2_grpc.py b/scalekit/v1/connected_accounts/connected_accounts_pb2_grpc.py index 53109b7..98b85dc 100644 --- a/scalekit/v1/connected_accounts/connected_accounts_pb2_grpc.py +++ b/scalekit/v1/connected_accounts/connected_accounts_pb2_grpc.py @@ -44,31 +44,11 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetMagicLinkForConnectedAccountRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetMagicLinkForConnectedAccountResponse.FromString, ) - self.GetConnectedAccount = channel.unary_unary( - '/scalekit.v1.connected_accounts.ConnectedAccountService/GetConnectedAccount', - request_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountResponse.FromString, - ) - self.DisconnectConnectedAccount = channel.unary_unary( - '/scalekit.v1.connected_accounts.ConnectedAccountService/DisconnectConnectedAccount', - request_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.DisconnectConnectedAccountRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.DisconnectConnectedAccountResponse.FromString, - ) self.GetConnectedAccountAuth = channel.unary_unary( '/scalekit.v1.connected_accounts.ConnectedAccountService/GetConnectedAccountAuth', request_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierResponse.FromString, ) - self.GetConnectedAccountDetails = channel.unary_unary( - '/scalekit.v1.connected_accounts.ConnectedAccountService/GetConnectedAccountDetails', - request_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierResponse.FromString, - ) - self.VerifyConnectedAccountUser = channel.unary_unary( - '/scalekit.v1.connected_accounts.ConnectedAccountService/VerifyConnectedAccountUser', - request_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.VerifyConnectedAccountUserRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.VerifyConnectedAccountUserResponse.FromString, - ) class ConnectedAccountServiceServicer(object): @@ -116,20 +96,6 @@ def GetMagicLinkForConnectedAccount(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') - def GetConnectedAccount(self, request, context): - """Get Connected Account by ID - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def DisconnectConnectedAccount(self, request, context): - """Disconnect a Connected Account - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - def GetConnectedAccountAuth(self, request, context): """Get Connected Account Authentication Details """ @@ -137,20 +103,6 @@ def GetConnectedAccountAuth(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') - def GetConnectedAccountDetails(self, request, context): - """Get Connected Account Details (without auth credentials) - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def VerifyConnectedAccountUser(self, request, context): - """Verify connected account user after OAuth callback - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - def add_ConnectedAccountServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -184,31 +136,11 @@ def add_ConnectedAccountServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetMagicLinkForConnectedAccountRequest.FromString, response_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetMagicLinkForConnectedAccountResponse.SerializeToString, ), - 'GetConnectedAccount': grpc.unary_unary_rpc_method_handler( - servicer.GetConnectedAccount, - request_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountRequest.FromString, - response_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountResponse.SerializeToString, - ), - 'DisconnectConnectedAccount': grpc.unary_unary_rpc_method_handler( - servicer.DisconnectConnectedAccount, - request_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.DisconnectConnectedAccountRequest.FromString, - response_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.DisconnectConnectedAccountResponse.SerializeToString, - ), 'GetConnectedAccountAuth': grpc.unary_unary_rpc_method_handler( servicer.GetConnectedAccountAuth, request_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierRequest.FromString, response_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierResponse.SerializeToString, ), - 'GetConnectedAccountDetails': grpc.unary_unary_rpc_method_handler( - servicer.GetConnectedAccountDetails, - request_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierRequest.FromString, - response_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierResponse.SerializeToString, - ), - 'VerifyConnectedAccountUser': grpc.unary_unary_rpc_method_handler( - servicer.VerifyConnectedAccountUser, - request_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.VerifyConnectedAccountUserRequest.FromString, - response_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.VerifyConnectedAccountUserResponse.SerializeToString, - ), } generic_handler = grpc.method_handlers_generic_handler( 'scalekit.v1.connected_accounts.ConnectedAccountService', rpc_method_handlers) @@ -321,40 +253,6 @@ def GetMagicLinkForConnectedAccount(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - @staticmethod - def GetConnectedAccount(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.connected_accounts.ConnectedAccountService/GetConnectedAccount', - scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountRequest.SerializeToString, - scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - @staticmethod - def DisconnectConnectedAccount(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.connected_accounts.ConnectedAccountService/DisconnectConnectedAccount', - scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.DisconnectConnectedAccountRequest.SerializeToString, - scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.DisconnectConnectedAccountResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - @staticmethod def GetConnectedAccountAuth(request, target, @@ -371,37 +269,3 @@ def GetConnectedAccountAuth(request, scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - @staticmethod - def GetConnectedAccountDetails(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.connected_accounts.ConnectedAccountService/GetConnectedAccountDetails', - scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierRequest.SerializeToString, - scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - @staticmethod - def VerifyConnectedAccountUser(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.connected_accounts.ConnectedAccountService/VerifyConnectedAccountUser', - scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.VerifyConnectedAccountUserRequest.SerializeToString, - scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.VerifyConnectedAccountUserResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/connections/connections_pb2.py b/scalekit/v1/connections/connections_pb2.py index dffbca0..40e1d20 100644 --- a/scalekit/v1/connections/connections_pb2.py +++ b/scalekit/v1/connections/connections_pb2.py @@ -28,7 +28,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n)scalekit/v1/connections/connections.proto\x12\x17scalekit.v1.connections\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a\x1fscalekit/v1/auth/webauthn.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/domains/domains.proto\x1a!scalekit/v1/options/options.proto\"\xc4\x01\n AssignDomainsToConnectionRequest\x12;\n\x0forganization_id\x18\x01 \x01(\tB\x12\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\x12\x38\n\rconnection_id\x18\x02 \x01(\tB\x13\xbaH\x10r\x0b\x10\x01\x18 :\x05\x63onn_\xc8\x01\x01R\x0c\x63onnectionId\x12)\n\ndomain_ids\x18\x03 \x03(\tB\n\xbaH\x07\x92\x01\x04\x08\x00\x10\x32R\tdomainIds\"\xe6\x03\n!AssignDomainsToConnectionResponse\x12\xc0\x03\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\xfa\x02\x92\x41\xf6\x02\x32 Connection with assigned domainsJ\xd1\x02{\n \"id\": \"conn_1234567890\",\n \"provider\": \"OKTA\",\n \"type\": \"OIDC\",\n \"status\": \"CONFIGURED\",\n \"enabled\": true,\n \"debug_enabled\": false,\n \"organization_id\": \"org_1234567890\",\n \"ui_button_title\": \"Login with SSO\",\n \"configuration_type\": \"MANUAL\",\n \"test_connection_uri\": \"https://auth.example.com/test-connection/conn_1234567890\"\n}R\nconnection\"\x15\n\x13GetProvidersRequest\"W\n\x14GetProvidersResponse\x12?\n\tproviders\x18\x01 \x03(\x0b\x32!.scalekit.v1.connections.ProviderR\tproviders\"\xf3\x01\n\x08Provider\x12\x35\n\x06key_id\x18\x01 \x01(\tB\x1e\x92\x41\x1b\x32\x0fProvider Key IDJ\x08\"google\"R\x05keyId\x12G\n\x0c\x64isplay_name\x18\x02 \x01(\tB$\x92\x41!2\x15Provider Display NameJ\x08\"Google\"R\x0b\x64isplayName\x12W\n\x0b\x64\x65scription\x18\x03 \x01(\tB0\x92\x41-2\x14Provider DescriptionJ\x15\"Sign In With Google\"H\x00R\x0b\x64\x65scription\x88\x01\x01\x42\x0e\n\x0c_description\"\xae\x02\n\"CreateEnvironmentConnectionRequest\x12Q\n\nconnection\x18\x01 \x01(\x0b\x32).scalekit.v1.connections.CreateConnectionB\x06\xbaH\x03\xc8\x01\x01R\nconnection\x12\xaa\x01\n\x05\x66lags\x18\x02 \x01(\x0b\x32\x1e.scalekit.v1.connections.FlagsBo\x92\x41l2SOptional flags to control connection creation behavior, such as enabling debug modeJ\x15{ \"is_social\": true }H\x00R\x05\x66lags\x88\x01\x01\x42\x08\n\x06_flags\"\xe4\x02\n\x17\x43reateConnectionRequest\x12\x9a\x01\n\x0forganization_id\x18\x01 \x01(\tBq\x92\x41\x65\x32JUnique identifier of the organization for which the connection is created.J\x17\"org_12362474900684814\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\xa5\x01\n\nconnection\x18\x03 \x01(\x0b\x32).scalekit.v1.connections.CreateConnectionBZ\xbaHW\xba\x01Q\x12\x36OAUTH, PASSWORDLESS and WEBAUTHN are not supported yet\x1a\x17!(this.type in [4,5,9])\xc8\x01\x01R\nconnectionJ\x04\x08\x02\x10\x03\"\xf7\x05\n\x10\x43reateConnection\x12\xcb\x01\n\x08provider\x18\x01 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderB\x81\x01\x92\x41v2lIdentity provider service that handles authentication (such as OKTA, Google, Azure AD, or a custom provider)J\x06\"OKTA\"\xbaH\x05\x82\x01\x02\x10\x01R\x08provider\x12\x45\n\x04type\x18\x02 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04type\x12\x98\x01\n\x0cprovider_key\x18\x03 \x01(\tBu\x92\x41r2fKey ID of the identity provider. This is used to identify the specific configuration for the provider.J\x08\"google\"R\x0bproviderKey\x12\x1a\n\x06key_id\x18\x04 \x01(\tH\x00R\x05keyId\x88\x01\x01:\x8b\x02\xbaH\x87\x02\x1aT\x12$provider or provider_key is required\x1a,has(this.provider_key) || this.provider != 0\x1a`\x12\x1einvalid value for provider_key\x1a>this.provider == 15 ? this.provider_key in [\'SCALEKIT\'] : true\x1aM\x12\x18invalid value for key_id\x1a\x31this.type == 9 ? this.key_id == \'WEBAUTHN\' : trueB\t\n\x07_key_id\"\xcb \n\nConnection\x12\x8d\x01\n\x02id\x18\x01 \x01(\tB}\x92\x41z2_Unique identifier for this connection. Used in API calls to reference this specific connection.J\x17\"conn_2123312131125533\"R\x02id\x12\xc2\x01\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderBy\x92\x41v2lIdentity provider service that handles authentication (such as OKTA, Google, Azure AD, or a custom provider)J\x06\"OKTA\"R\x08provider\x12\xb4\x01\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeBw\x92\x41t2jAuthentication protocol used by this connection. Can be OIDC (OpenID Connect), SAML, OAUTH, or MAGIC_LINK.J\x06\"OIDC\"R\x04type\x12\xc6\x01\n\x06status\x18\x04 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusB\x82\x01\x92\x41|2kCurrent configuration status of the connection. Possible values include IN_PROGRESS, CONFIGURED, and ERROR.J\r\"IN_PROGRESS\"\xe0\x41\x03R\x06status\x12\xab\x01\n\x07\x65nabled\x18\x05 \x01(\x08\x42\x90\x01\x92\x41\x8c\x01\x32\x82\x01\x43ontrols whether users can sign in using this connection. When false, the connection exists but cannot be used for authentication.J\x05\x66\x61lseR\x07\x65nabled\x12\xb0\x01\n\rdebug_enabled\x18\x06 \x01(\x08\x42\x8a\x01\x92\x41\x86\x01\x32~Enables testing mode that allows non-HTTPS endpoints. Should only be enabled in development environments, never in production.J\x04trueR\x0c\x64\x65\x62ugEnabled\x12\xc1\x01\n\x0forganization_id\x18\x07 \x01(\tB\x92\x01\x92\x41\x8e\x01\x32tIdentifier of the organization that owns this connection. Connections are typically scoped to a single organization.J\x16\"org_2123312131125533\"H\x01R\x0eorganizationId\x88\x01\x01\x12\xbd\x01\n\x0fui_button_title\x18\x08 \x01(\tB\x94\x01\x92\x41\x81\x01\x32mCustom text shown on the login button in the user interface. Helps users identify which SSO option to select.J\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12\xd5\x01\n\x12\x63onfiguration_type\x18\t \x01(\x0e\x32*.scalekit.v1.connections.ConfigurationTypeBz\x92\x41w2kHow the connection was configured: DISCOVERY (automatic configuration) or MANUAL (administrator configured)J\x08\"MANUAL\"R\x11\x63onfigurationType\x12\xdf\x01\n\x13test_connection_uri\x18\x0c \x01(\tB\xae\x01\x92\x41\xaa\x01\x32\x66URI that can be used to test this connection. Visit this URL to verify the connection works correctly.J@\"https://auth.example.com/test-connection/conn_2123312131125533\"R\x11testConnectionUri\x12\x81\x02\n\x11\x61ttribute_mapping\x18\x0f \x03(\x0b\x32\x39.scalekit.v1.connections.Connection.AttributeMappingEntryB\x98\x01\x92\x41|2zMaps identity provider attributes to user profile fields. For example, {\'email\': \'user.mail\', \'name\': \'user.displayName\'}.\xbaH\x16\x9a\x01\x13\x10\x1e\"\x06r\x04\x10\x01\x18\x64*\x07r\x05\x10\x01\x18\x80\x02R\x10\x61ttributeMapping\x12\xb1\x01\n\x0b\x63reate_time\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.TimestampBt\x92\x41_2EWhen this connection was first created. Format is RFC 3339 timestamp.J\x16\"2023-01-15T14:30:00Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ncreateTime\x12\xb1\x01\n\x0bupdate_time\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.TimestampBt\x92\x41_2EWhen this connection was last modified. Format is RFC 3339 timestamp.J\x16\"2023-02-20T09:15:30Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\nupdateTime\x12\xb3\x01\n\x0boidc_config\x18\x12 \x01(\x0b\x32-.scalekit.v1.connections.OIDCConnectionConfigBa\x92\x41^2\\Configuration details for OpenID Connect (OIDC) connections. Present only when type is OIDC.H\x00R\noidcConfig\x12\xaa\x01\n\x0bsaml_config\x18\x13 \x01(\x0b\x32\x35.scalekit.v1.connections.SAMLConnectionConfigResponseBP\x92\x41M2KConfiguration details for SAML connections. Present only when type is SAML.H\x00R\nsamlConfig\x12\xa7\x01\n\x0coauth_config\x18\x14 \x01(\x0b\x32..scalekit.v1.connections.OAuthConnectionConfigBR\x92\x41O2MConfiguration details for OAuth connections. Present only when type is OAUTH.H\x00R\x0boauthConfig\x12\xbf\x01\n\x13passwordless_config\x18\x16 \x01(\x0b\x32+.scalekit.v1.connections.PasswordLessConfigB_\x92\x41\\2ZConfiguration details for Magic Link authentication. Present only when type is MAGIC_LINK.H\x00R\x12passwordlessConfig\x12\xc0\x01\n\rstatic_config\x18\x1a \x01(\x0b\x32).scalekit.v1.connections.StaticAuthConfigBn\x92\x41k2iStatic configuration for custom connections. Present only when type is BASIC, BEARER, API_KEY, or custom.H\x00R\x0cstaticConfig\x12\xb1\x01\n\x0fwebauthn_config\x18\x1b \x01(\x0b\x32-.scalekit.v1.connections.WebAuthConfigurationBW\x92\x41T2RConfiguration details for WebAuthn (passkeys). Present only when type is WEBAUTHN.H\x00R\x0ewebauthnConfig\x12}\n\x06key_id\x18\x19 \x01(\tBa\x92\x41^2\\Alternative identifier for this connection, typically used in frontend applications or URLs.H\x02R\x05keyId\x88\x01\x01\x12u\n\x0cprovider_key\x18\x17 \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x12\xaa\x01\n\x07\x64omains\x18\x18 \x03(\x0b\x32\x1b.scalekit.v1.domains.DomainBs\x92\x41p2SDomain associated with this connection, used for domain-based authentication flows.J\x19[{\"name\": \"example.com\"}]R\x07\x64omains\x1a\x43\n\x15\x41ttributeMappingEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\n\n\x08settingsB\x12\n\x10_organization_idB\t\n\x07_key_idJ\x04\x08\r\x10\x0f\"w\n\x18\x43reateConnectionResponse\x12[\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\x16\x92\x41\x13\x32\x11\x43onnection DetailR\nconnection\"\xa8\x02\n\"UpdateEnvironmentConnectionRequest\x12~\n\rconnection_id\x18\x01 \x01(\tBY\x92\x41M2+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xca>\x05\xfa\x02\x02id\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\x12\x81\x01\n\nconnection\x18\x03 \x01(\x0b\x32).scalekit.v1.connections.UpdateConnectionB6\x92\x41-2#Connection properties to be updated\xca>\x05\xfa\x02\x02id\xbaH\x03\xc8\x01\x01R\nconnection\"\xce\x03\n\x17UpdateConnectionRequest\x12q\n\x0forganization_id\x18\x01 \x01(\tBH\x92\x41<2#Organization ID for the Connection.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\x61\n\x02id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02id\x12\xd6\x01\n\nconnection\x18\x04 \x01(\x0b\x32).scalekit.v1.connections.UpdateConnectionB\x8a\x01\x92\x41-2#Connection properties to be updated\xca>\x05\xfa\x02\x02id\xbaHW\xba\x01Q\x12\x36OAUTH, PASSWORDLESS and WEBAUTHN are not supported yet\x1a\x17!(this.type in [4,5,9])\xc8\x01\x01R\nconnectionJ\x04\x08\x02\x10\x03\"\xcb\x11\n\x10UpdateConnection\x12w\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderB.\x92\x41#2\x17SSO Connection ProviderJ\x08\"CUSTOM\"\xbaH\x05\x82\x01\x02\x10\x01R\x08provider\x12r\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB5\x92\x41*2 Connection Protocol OIDC / SAML J\x06\"OIDC\"\xbaH\x05\x82\x01\x02\x10\x01R\x04type\x12\xae\x01\n\rdebug_enabled\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBm\x92\x41j2bDebug mode for the connection. Debug would allow non HTTPS endpoint to be used with the connectionJ\x04trueR\x0c\x64\x65\x62ugEnabled\x12\x8d\x01\n\x0fui_button_title\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueBG\x92\x41\x35\x32!Display name for the Login ButtonJ\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12~\n\x12\x63onfiguration_type\x18\x0b \x01(\x0e\x32*.scalekit.v1.connections.ConfigurationTypeB#\x92\x41 2\x14\x43onfiguration Type. J\x08\"MANUAL\"R\x11\x63onfigurationType\x12\x9d\x01\n\x11\x61ttribute_mapping\x18\x0f \x03(\x0b\x32?.scalekit.v1.connections.UpdateConnection.AttributeMappingEntryB/\x92\x41\x13\x32\x11\x41ttribute Mapping\xbaH\x16\x9a\x01\x13\x10\x1e\"\x06r\x04\x10\x01\x18\x64*\x07r\x05\x10\x01\x18\x80\x02R\x10\x61ttributeMapping\x12\x83\x01\n\x0boidc_config\x18\x10 \x01(\x0b\x32-.scalekit.v1.connections.OIDCConnectionConfigB1\x92\x41.2,OIDC Configuration if ConnectionType == OIDCH\x00R\noidcConfig\x12\x8a\x01\n\x0bsaml_config\x18\x11 \x01(\x0b\x32\x34.scalekit.v1.connections.SAMLConnectionConfigRequestB1\x92\x41.2,SAML Configuration if ConnectionType == SAMLH\x00R\nsamlConfig\x12\x88\x01\n\x0coauth_config\x18\x12 \x01(\x0b\x32..scalekit.v1.connections.OAuthConnectionConfigB3\x92\x41\x30\x32.OAuth Configuration if ConnectionType == OAUTHH\x00R\x0boauthConfig\x12\x9d\x01\n\x13passwordless_config\x18\x14 \x01(\x0b\x32+.scalekit.v1.connections.PasswordLessConfigB=\x92\x41:28Magic Link Configuration if ConnectionType == MAGIC_LINKH\x00R\x12passwordlessConfig\x12P\n\rstatic_config\x18\x17 \x01(\x0b\x32).scalekit.v1.connections.StaticAuthConfigH\x00R\x0cstaticConfig\x12\xb1\x01\n\x0fwebauthn_config\x18\x18 \x01(\x0b\x32-.scalekit.v1.connections.WebAuthConfigurationBW\x92\x41T2RConfiguration details for WebAuthn (passkeys). Present only when type is WEBAUTHN.H\x00R\x0ewebauthnConfig\x12&\n\x06key_id\x18\x16 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xac\x02H\x01R\x05keyId\x88\x01\x01\x12u\n\x0cprovider_key\x18\x15 \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x1a\x43\n\x15\x41ttributeMappingEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01:\x8b\x02\xbaH\x87\x02\x1aT\x12$provider or provider_key is required\x1a,has(this.provider_key) || this.provider != 0\x1a`\x12\x1einvalid value for provider_key\x1a>this.provider == 15 ? this.provider_key in [\'SCALEKIT\'] : true\x1aM\x12\x18invalid value for key_id\x1a\x31this.type == 9 ? this.key_id == \'WEBAUTHN\' : trueB\n\n\x08settingsB\t\n\x07_key_idJ\x04\x08\x01\x10\x02J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06J\x04\x08\t\x10\x0bJ\x04\x08\x0c\x10\x0f\"\x80\x01\n\x18UpdateConnectionResponse\x12\x64\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\x1f\x92\x41\x1c\x32\x1aUpdated Connection detailsR\nconnection\"\x9c\x01\n\"DeleteEnvironmentConnectionRequest\x12v\n\rconnection_id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\xf5\x01\n\x17\x44\x65leteConnectionRequest\x12q\n\x0forganization_id\x18\x01 \x01(\tBH\x92\x41<2#Organization ID for the Connection.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\x61\n\x02id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\x92\x01\n\x1fGetEnvironmentConnectionRequest\x12o\n\rconnection_id\x18\x01 \x01(\tBJ\x92\x41>2$Unique identifier for the ConnectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\xfc\x02\n\x14GetConnectionRequest\x12\xba\x01\n\x0forganization_id\x18\x01 \x01(\tB\x90\x01\x92\x41\x83\x01\x32jOrganization identifier (required). Specifies which organization owns the connection you want to retrieve.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\xa0\x01\n\x02id\x18\x03 \x01(\tB\x8f\x01\x92\x41\x82\x01\x32hConnection identifier (required). Specifies which specific connection to retrieve from the organization.J\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\x9a\x02\n\x15GetConnectionResponse\x12\x80\x02\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\xba\x01\x92\x41\xb6\x01\x32\xb3\x01\x43omplete connection details including provider configuration, protocol settings, status, and all metadata. Contains everything needed to understand the connection\'s current state.R\nconnection\"\x96\x04\n\x16ListConnectionsRequest\x12\x80\x01\n\x0forganization_id\x18\x01 \x01(\tBR\x92\x41\x46\x32-Filter connections by organization identifierJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12\x7f\n\x06\x64omain\x18\x03 \x01(\tBb\x92\x41V2CFilter connections by email domain associated with the organizationJ\x0f\"hero-saas.app\"\xbaH\x06r\x04\x10\x01\x18 H\x01R\x06\x64omain\x88\x01\x01\x12\xc6\x01\n\x07include\x18\x04 \x01(\tB\xa6\x01\x92\x41\xa2\x01\x32\x9f\x01\x46ilter connections by status. Use \'all\' to include all connections regardless of status. Default behavior shows only active (completed and enabled) connectionsH\x02R\x07include\x88\x01\x01\x42\x12\n\x10_organization_idB\t\n\x07_domainB\n\n\x08_includeJ\x04\x08\x02\x10\x03\"\x9d\x01\n\x17ListConnectionsResponse\x12\x81\x01\n\x0b\x63onnections\x18\x01 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB6\x92\x41\x33\x32\x31List of connections matching the request criteriaR\x0b\x63onnections\"\xfa\x0b\n\x0eListConnection\x12Q\n\x02id\x18\x01 \x01(\tBA\x92\x41>2#Unique identifier of the connectionJ\x17\"conn_2123312131125533\"R\x02id\x12\x8d\x01\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderBD\x92\x41\x41\x32\x35Identity provider type (e.g., OKTA, Google, Azure AD)J\x08\"CUSTOM\"R\x08provider\x12x\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB;\x92\x41\x38\x32.Authentication protocol used by the connectionJ\x06\"OIDC\"R\x04type\x12\x88\x01\n\x06status\x18\x04 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusBE\x92\x41?2.Current configuration status of the connectionJ\r\"IN_PROGRESS\"\xe0\x41\x03R\x06status\x12g\n\x07\x65nabled\x18\x05 \x01(\x08\x42M\x92\x41J2AWhether the connection is currently active for organization usersJ\x05\x66\x61lseR\x07\x65nabled\x12\x85\x01\n\x0forganization_id\x18\x06 \x01(\tB\\\x92\x41Y2?Unique identifier of the organization that owns this connectionJ\x16\"org_2123312131125533\"R\x0eorganizationId\x12\x88\x01\n\x0fui_button_title\x18\x07 \x01(\tB`\x92\x41N2:Text displayed on the SSO login button for this connectionJ\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12t\n\x07\x64omains\x18\x08 \x03(\tBZ\x92\x41W2/List of domains configured with this connectionJ$[\"yourapp.com\", \"yourworkspace.com\"]R\x07\x64omains\x12q\n\x11organization_name\x18\t \x01(\tBD\x92\x41\x41\x32*Name of the organization of the connectionJ\x13\"Your Organization\"R\x10organizationName\x12u\n\x0cprovider_key\x18\n \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x12\x90\x01\n\x06key_id\x18\x0b \x01(\tBy\x92\x41v2[Alternative identifier for this connection, typically used in frontend applications or URLsJ\x17\"conn_2123312131125533\"R\x05keyId\x12\x90\x01\n\ncreated_at\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.TimestampBU\x92\x41@2&When this connection was first createdJ\x16\"2023-01-15T14:30:00Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\tcreatedAt\"\xcf\x02\n\"ListOrganizationConnectionsRequest\x12\x80\x01\n\tpage_size\x18\x01 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x02 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\x97\x02\n#ListOrganizationConnectionsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12&\n\x0fprev_page_token\x18\x03 \x01(\tR\rprevPageToken\x12\x80\x01\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB5\x92\x41\x32\x32\x30List of connections matching the filter criteriaR\x0b\x63onnections\"\xa2\x07\n$SearchOrganizationConnectionsRequest\x12l\n\x05query\x18\x01 \x01(\tBQ\x92\x41G2-Search query Connection ID or Organization IDJ\x16\"conn_121312434123312\"\xbaH\x04r\x02\x18\x64H\x00R\x05query\x88\x01\x01\x12@\n\x08provider\x18\x02 \x01(\tB\x1f\x92\x41\x1c\x32\x12\x46ilter by providerJ\x06\"OKTA\"H\x01R\x08provider\x88\x01\x01\x12}\n\x06status\x18\x03 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusB5\x92\x41*2\x1b\x46ilter by connection statusJ\x0b\"COMPLETED\"\xbaH\x05\x82\x01\x02\x10\x01H\x02R\x06status\x88\x01\x01\x12\x8c\x01\n\x0f\x63onnection_type\x18\x04 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB5\x92\x41*2\x1b\x46ilter by connection statusJ\x0b\"COMPLETED\"\xbaH\x05\x82\x01\x02\x10\x01H\x03R\x0e\x63onnectionType\x88\x01\x01\x12O\n\x07\x65nabled\x18\x07 \x01(\x08\x42\x30\x92\x41-2#Filter by connection enabled statusJ\x06\"true\"H\x04R\x07\x65nabled\x88\x01\x01\x12\x80\x01\n\tpage_size\x18\x05 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x06 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageTokenB\x08\n\x06_queryB\x0b\n\t_providerB\t\n\x07_statusB\x12\n\x10_connection_typeB\n\n\x08_enabled\"\x99\x02\n%SearchOrganizationConnectionsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12&\n\x0fprev_page_token\x18\x03 \x01(\tR\rprevPageToken\x12\x80\x01\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB5\x92\x41\x32\x32\x30List of connections matching the filter criteriaR\x0b\x63onnections\"\x9c\x01\n\"ToggleEnvironmentConnectionRequest\x12v\n\rconnection_id\x18\x02 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\x9e\x02\n\x17ToggleConnectionRequest\x12\x92\x01\n\x0forganization_id\x18\x01 \x01(\tBi\x92\x41]2DUnique identifier of the organization associated with the connectionJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12h\n\x02id\x18\x03 \x01(\tBX\x92\x41L22Unique identifier for the connection to be toggledJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\xbc\x02\n\x18ToggleConnectionResponse\x12\xa9\x01\n\x07\x65nabled\x18\x01 \x01(\x08\x42\x8e\x01\x92\x41\x8a\x01\x32\x81\x01\x43urrent state of the connection after the operation. True means the connection is now enabled and can be used for authentication.J\x04trueR\x07\x65nabled\x12\x62\n\rerror_message\x18\x02 \x01(\tB8\x92\x41\x35\x32$Error message if the operation failsJ\r\"placeholder\"H\x00R\x0c\x65rrorMessage\x88\x01\x01\x42\x10\n\x0e_error_message\"\xa0\x12\n\x14OIDCConnectionConfig\x12j\n\x06issuer\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB4\x92\x41\x31\x32\nIssuer URLJ#\"https://youridp.com/service/oauth\"R\x06issuer\x12\xaa\x01\n\x12\x64iscovery_endpoint\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB]\x92\x41Z2\x12\x44iscovery EndpointJD\"https://youridp.com/service/oauth/.well-known/openid-configuration\"R\x11\x64iscoveryEndpoint\x12\x84\x01\n\rauthorize_uri\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValueBA\x92\x41>2\rAuthorize URIJ-\"https://youridp.com/service/oauth/authorize\"R\x0c\x61uthorizeUri\x12t\n\ttoken_uri\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueB9\x92\x41\x36\x32\tToken URIJ)\"https://youridp.com/service/oauth/token\"R\x08tokenUri\x12\x82\x01\n\ruser_info_uri\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB@\x92\x41=2\rUser Info URIJ,\"https://youridp.com/service/oauth/userinfo\"R\x0buserInfoUri\x12p\n\x08jwks_uri\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValueB7\x92\x41\x34\x32\x08JWKS URIJ(\"https://youridp.com/service/oauth/jwks\"R\x07jwksUri\x12\\\n\tclient_id\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB!\x92\x41\x1e\x32\tClient IDJ\x11\"oauth_client_id\"R\x08\x63lientId\x12l\n\rclient_secret\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB)\x92\x41&2\rClient SecretJ\x15\"oauth_client_secret\"R\x0c\x63lientSecret\x12\x63\n\x06scopes\x18\n \x03(\x0e\x32\".scalekit.v1.connections.OIDCScopeB\'\x92\x41$2\x0bOIDC ScopesJ\x15[\"openid\", \"profile\"]R\x06scopes\x12r\n\x0ftoken_auth_type\x18\x0b \x01(\x0e\x32&.scalekit.v1.connections.TokenAuthTypeB\"\x92\x41\x1f\x32\x0fToken Auth TypeJ\x0c\"URL_PARAMS\"R\rtokenAuthType\x12j\n\x0credirect_uri\x18\x0c \x01(\tBG\x92\x41\x44\x32\x0cRedirect URIJ4\"https://yourapp.com/sso/v1/oidc/conn_1234/callback\"R\x0bredirectUri\x12V\n\x0cpkce_enabled\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x17\x92\x41\x14\x32\x0cPKCE EnabledJ\x04trueR\x0bpkceEnabled\x12h\n\x13idp_logout_required\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1c\x92\x41\x19\x32\x11\x45nable IDP logoutJ\x04trueR\x11idpLogoutRequired\x12\xb4\x01\n\x18post_logout_redirect_uri\x18\x0f \x01(\x0b\x32\x1c.google.protobuf.StringValueB]\x92\x41W2\x18post logout redirect uriJ;\"https://yourapp.com/sso/v1/oidc/conn_1234/logout/callback\"\xe0\x41\x03R\x15postLogoutRedirectUri\x12\xea\x01\n\x1f\x62\x61\x63kchannel_logout_redirect_uri\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x84\x01\x92\x41~2\"https://yourapp.com/sso/v1/oidc/conn_1234/backchannel-logout\"\xe0\x41\x03R\x1c\x62\x61\x63kchannelLogoutRedirectUri\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\x12\xba\x01\n!jit_provisioning_with_sso_enabled\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBT\x92\x41Q2IIndicates if Just In Time user provisioning is enabled for the connectionJ\x04trueR\x1djitProvisioningWithSsoEnabled\"\xce\x13\n\x15OAuthConnectionConfig\x12\x84\x01\n\rauthorize_uri\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValueBA\x92\x41>2\rAuthorize URIJ-\"https://youridp.com/service/oauth/authorize\"R\x0c\x61uthorizeUri\x12t\n\ttoken_uri\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueB9\x92\x41\x36\x32\tToken URIJ)\"https://youridp.com/service/oauth/token\"R\x08tokenUri\x12\x82\x01\n\ruser_info_uri\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB@\x92\x41=2\rUser Info URIJ,\"https://youridp.com/service/oauth/userinfo\"R\x0buserInfoUri\x12\\\n\tclient_id\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB!\x92\x41\x1e\x32\tClient IDJ\x11\"oauth_client_id\"R\x08\x63lientId\x12l\n\rclient_secret\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB)\x92\x41&2\rClient SecretJ\x15\"oauth_client_secret\"R\x0c\x63lientSecret\x12?\n\x06scopes\x18\n \x03(\tB\'\x92\x41$2\x0bOIDC ScopesJ\x15[\"openid\", \"profile\"]R\x06scopes\x12\x62\n\x0credirect_uri\x18\x0c \x01(\tB?\x92\x41<2\x0cRedirect URIJ,\"https://yourapp.com/service/oauth/redirect\"R\x0bredirectUri\x12V\n\x0cpkce_enabled\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x17\x92\x41\x14\x32\x0cPKCE EnabledJ\x04trueR\x0bpkceEnabled\x12V\n\x06prompt\x18\x0e \x01(\x0b\x32\x1c.google.protobuf.StringValueB \x92\x41\x1d\x32\x13Prompt for the userJ\x06\"none\"R\x06prompt\x12m\n\x12use_platform_creds\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueB#\x92\x41 2\x18Use Scalekit credentialsJ\x04trueR\x10usePlatformCreds\x12Z\n\x0b\x61\x63\x63\x65ss_type\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1b\x92\x41\x18\x32\x0b\x41\x63\x63\x65ss TypeJ\t\"offline\"R\naccessType\x12n\n\x11\x63ustom_scope_name\x18\x11 \x01(\x0b\x32\x1c.google.protobuf.StringValueB$\x92\x41!2\x11\x43ustom Scope NameJ\x0c\"user_scope\"R\x0f\x63ustomScopeName\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\x12k\n\x11token_access_type\x18\x13 \x01(\x0b\x32\x1c.google.protobuf.StringValueB!\x92\x41\x1e\x32\x11Token Access TypeJ\t\"offline\"R\x0ftokenAccessType\x12\x84\x02\n\ttenant_id\x18\x14 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\xc8\x01\x92\x41\xc4\x01\x32\x99\x01Microsoft Entra tenant ID. Required when using a single-tenant or multi-tenant app registered in Microsoft Entra. Leave empty to use the common endpoint.J&\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"R\x08tenantId\x12\xc7\x01\n\x07is_cimd\x18\x15 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x91\x01\x92\x41\x8a\x01\x32\x81\x01Indicates whether this connection was registered using Client ID Metadata Document (CIMD) instead of Dynamic Client Registration.J\x04true\xe0\x41\x03R\x06isCimd\x12\xbe\x01\n\x08\x61pp_name\x18\x16 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x84\x01\x92\x41\x80\x01\x32mApplication name used by providers that require it as an authorize query parameter (e.g., Trello\'s app_name).J\x0f\"My Trello App\"R\x07\x61ppName\x12\xfa\x01\n\x0foptional_scopes\x18\x17 \x01(\x0b\x32\'.scalekit.v1.connections.OptionalScopesB\xa2\x01\x92\x41\x9e\x01\x32\x9b\x01Optional scopes configuration for identity providers that support or require additional scopes to be sent in a custom field during authentication requests.H\x00R\x0eoptionalScopes\x88\x01\x01\x42\x12\n\x10_optional_scopes\"\xa6\x03\n\x0eOptionalScopes\x12v\n\x06scopes\x18\x01 \x03(\tB^\x92\x41[2CList of optional scopes that can be requested during authenticationJ\x14[\"scope1\", \"scope2\"]R\x06scopes\x12\x9b\x02\n\nfield_name\x18\x02 \x01(\tB\xfb\x01\x92\x41\xf7\x01\x32\xd5\x01Name of the field in which scope should be sent in the authentication request. This is required by some identity providers that expect scopes to be sent in a custom field instead of the standard \'scope\' parameter.J\x1d\"optional_scope or bot_scope\"R\tfieldName\"\xf4\x07\n\x12PasswordLessConfig\x12]\n\x04type\x18\x01 \x01(\x0e\x32).scalekit.v1.connections.PasswordlessTypeB\x1e\x92\x41\x1b\x32\x11Passwordless TypeJ\x06\"LINK\"R\x04type\x12W\n\tfrequency\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x16\x92\x41\x13\x32\x0eLink FrequencyJ\x01\x31H\x00R\tfrequency\x88\x01\x01\x12\x61\n\x08validity\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\"\x92\x41\x1f\x32\x18Link Validity in SecondsJ\x03\x36\x30\x30H\x01R\x08validity\x88\x01\x01\x12\x86\x01\n\x1b\x65nforce_same_browser_origin\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB&\x92\x41#2\x1b\x45nforce Same Browser OriginJ\x04trueH\x02R\x18\x65nforceSameBrowserOrigin\x88\x01\x01\x12t\n\x15\x63ode_challenge_length\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x1d\x92\x41\x1a\x32\x15\x43ode Challenge LengthJ\x01\x36H\x03R\x13\x63odeChallengeLength\x88\x01\x01\x12\x84\x01\n\x13\x63ode_challenge_type\x18\x06 \x01(\x0e\x32*.scalekit.v1.connections.CodeChallengeTypeB#\x92\x41 2\x13\x43ode Challenge TypeJ\t\"NUMERIC\"H\x04R\x11\x63odeChallengeType\x88\x01\x01\x12\x9d\x01\n-regenerate_passwordless_credentials_on_resend\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1a\x92\x41\x17\x32\x0fRegenerate the J\x04trueH\x05R)regeneratePasswordlessCredentialsOnResend\x88\x01\x01\x42\x0c\n\n_frequencyB\x0b\n\t_validityB\x1e\n\x1c_enforce_same_browser_originB\x18\n\x16_code_challenge_lengthB\x16\n\x14_code_challenge_typeB0\n._regenerate_passwordless_credentials_on_resend\"P\n\x10StaticAuthConfig\x12<\n\rstatic_config\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x0cstaticConfig\"\xc4\"\n\x14WebAuthConfiguration\x12@\n\x02rp\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connections.WebAuthConfiguration.RpR\x02rp\x12[\n\x0b\x61ttestation\x18\x02 \x01(\x0b\x32\x39.scalekit.v1.connections.WebAuthConfiguration.AttestationR\x0b\x61ttestation\x12\x64\n\x0e\x61uthenticators\x18\x03 \x01(\x0b\x32<.scalekit.v1.connections.WebAuthConfiguration.AuthenticatorsR\x0e\x61uthenticators\x12}\n\x17\x61uthenticator_selection\x18\x04 \x01(\x0b\x32\x44.scalekit.v1.connections.WebAuthConfiguration.AuthenticatorSelectionR\x16\x61uthenticatorSelection\x12O\n\x07timeout\x18\x05 \x01(\x0b\x32\x35.scalekit.v1.connections.WebAuthConfiguration.TimeoutR\x07timeout\x12\x64\n\x18\x65nable_auto_registration\x18\x06 \x01(\x08\x42*\x92\x41\'2%Enable auto registration for WebAuthnR\x16\x65nableAutoRegistration\x12X\n\x13show_passkey_button\x18\x07 \x01(\x08\x42(\x92\x41%2#Show passkey button on login screenR\x11showPasskeyButton\x12g\n\x18\x65nable_conditional_login\x18\x08 \x01(\x08\x42-\x92\x41*2(Allow autofill of passkeys in login pageR\x16\x65nableConditionalLogin\x1aH\n\x02Rp\x12\x1c\n\x03ids\x18\x01 \x03(\tB\n\xbaH\x07\x92\x01\x04\x08\x01\x10\nR\x03ids\x12$\n\x07origins\x18\x02 \x03(\tB\n\xbaH\x07\x92\x01\x04\x08\x01\x10\nR\x07origins\x1a\xc1\x01\n\x0b\x41ttestation\x12p\n\x15\x63onveyance_preference\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1d\xbaH\x1ar\x18R\x04noneR\x08indirectR\x06\x64irectR\x14\x63onveyancePreference\x12@\n\x17\x65nterprise_approved_ids\x18\x02 \x03(\tB\x08\xbaH\x05\x92\x01\x02\x10\x32R\x15\x65nterpriseApprovedIds\x1a\xf0\x13\n\x0e\x41uthenticators\x12\xdb\x02\n\x0evalidate_entry\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x97\x02\x92\x41\x93\x02\x1a\x1a.google.protobuf.BoolValue2\xf4\x01requires that the provided metadata has an entry for the given authenticator to be considered valid. By default an AAGUID which has a zero value should fail validation if validate_entry_permit_zero_aaguid is not provided with the value of true.R\rvalidateEntry\x12\x8f\x02\n!validate_entry_permit_zero_aaguid\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xa8\x01\x92\x41\xa4\x01\x32\xa1\x01is an option that permits a zero\'d AAGUID from an attestation statement to automatically pass metadata validations. Generally helpful to use with validate_entry.R\x1dvalidateEntryPermitZeroAaguid\x12\xc6\x01\n\x10validate_anchors\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x7f\x92\x41|2zwhen set to true enables the validation of the attestation statement against the trust anchor from the metadata statement.R\x0fvalidateAnchors\x12\xbe\x01\n\x0fvalidate_status\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBy\x92\x41v2twhen set to true enables the validation of the attestation statements AAGUID against the desired and undesired listsR\x0evalidateStatus\x12\xe1\x01\n\x19validate_attestation_type\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x88\x01\x92\x41\x84\x01\x32\x81\x01when set to true enables the validation of the attestation statements type against the known types the authenticator can produce.R\x17validateAttestationType\x12\xbb\x04\n\x1c\x64\x65sired_authenticator_status\x18\x06 \x03(\tB\xf8\x03\x92\x41\x9d\x01\x32\x96\x01provides the list of statuses which are considered undesirable for status report validation purposes. Should be used with validate_status set to true.:\x02[]\xbaH\xd3\x02\x92\x01\xcf\x02\x10\n\"\xca\x02r\xc7\x02R\x12NOT_FIDO_CERTIFIEDR\x0e\x46IDO_CERTIFIEDR\x18USER_VERIFICATION_BYPASSR\x1a\x41TTESTATION_KEY_COMPROMISER\x1aUSER_KEY_REMOTE_COMPROMISER\x1cUSER_KEY_PHYSICAL_COMPROMISER\x10UPDATE_AVAILABLER\x07REVOKEDR\x18SELF_ASSERTION_SUBMITTEDR\x11\x46IDO_CERTIFIED_L1R\x15\x46IDO_CERTIFIED_L1plusR\x11\x46IDO_CERTIFIED_L2R\x15\x46IDO_CERTIFIED_L2plusR\x11\x46IDO_CERTIFIED_L3R\x15\x46IDO_CERTIFIED_L3plusR\x1a\x64\x65siredAuthenticatorStatus\x12\xc1\x05\n\x1eundesired_authenticator_status\x18\x07 \x03(\tB\xfa\x04\x92\x41\x9f\x02\x32\x96\x01provides the list of statuses which are considered undesirable for status report validation purposes. Should be used with validate_status set to true.:\x83\x01[\'ATTESTATION_KEY_COMPROMISE\', \'USER_VERIFICATION_BYPASS\', \'USER_KEY_REMOTE_COMPROMISE\', \'USER_KEY_PHYSICAL_COMPROMISE\', \'REVOKED\']\xbaH\xd3\x02\x92\x01\xcf\x02\x10\n\"\xca\x02r\xc7\x02R\x12NOT_FIDO_CERTIFIEDR\x0e\x46IDO_CERTIFIEDR\x18USER_VERIFICATION_BYPASSR\x1a\x41TTESTATION_KEY_COMPROMISER\x1aUSER_KEY_REMOTE_COMPROMISER\x1cUSER_KEY_PHYSICAL_COMPROMISER\x10UPDATE_AVAILABLER\x07REVOKEDR\x18SELF_ASSERTION_SUBMITTEDR\x11\x46IDO_CERTIFIED_L1R\x15\x46IDO_CERTIFIED_L1plusR\x11\x46IDO_CERTIFIED_L2R\x15\x46IDO_CERTIFIED_L2plusR\x11\x46IDO_CERTIFIED_L3R\x15\x46IDO_CERTIFIED_L3plusR\x1cundesiredAuthenticatorStatus\x1a\x86\x02\n\x16\x41uthenticatorSelection\x12r\n\x11user_verification\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\'\xbaH$r\"R\x08requiredR\tpreferredR\x0b\x64iscouragedR\x10userVerification\x12x\n\x18\x61uthenticator_attachment\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1f\xbaH\x1cr\x1aR\x08platformR\x0e\x63ross-platformR\x17\x61uthenticatorAttachment\x1a\xa3\x04\n\x07Timeout\x12x\n\x0cregistration\x18\x01 \x01(\x0b\x32\x19.google.protobuf.DurationB9\x92\x41\'2\x1dRegistration timeout duration:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x0cregistration\x12\xa5\x01\n\x10registration_uvd\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationB_\x92\x41M2CRegistration timeout duration when user verification is discouraged:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x0fregistrationUvd\x12\x63\n\x05login\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationB2\x92\x41 2\x16Login timeout duration:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x05login\x12\x90\x01\n\tlogin_uvd\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationBX\x92\x41\x46\x322\x0fSP Metadata URLJ+\"https://youridp.com/service/saml/metadata\"R\rspMetadataUrl\x12\x8a\x01\n\x10idp_metadata_url\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueBB\x92\x41?2\x10IDP Metadata URLJ+\"https://youridp.com/service/saml/metadata\"R\x0eidpMetadataUrl\x12x\n\ridp_entity_id\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB6\x92\x41\x33\x32\rIDP Entity IDJ\"\"https://youridp.com/service/saml\"R\x0bidpEntityId\x12v\n\x0bidp_sso_url\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValueB8\x92\x41\x35\x32\x0bIDP SSO URLJ&\"https://youridp.com/service/saml/sso\"R\tidpSsoUrl\x12i\n\x10idp_certificates\x18\x07 \x03(\x0b\x32\'.scalekit.v1.connections.IDPCertificateB\x15\x92\x41\x12\x32\x10IDP CertificatesR\x0fidpCertificates\x12v\n\x0bidp_slo_url\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB8\x92\x41\x35\x32\x0bIDP SLO URLJ&\"https://youridp.com/service/saml/slo\"R\tidpSloUrl\x12l\n\x0fui_button_title\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB&\x92\x41#2\x0fUI Button TitleJ\x10\"Login with SSO\"R\ruiButtonTitle\x12t\n\x12idp_name_id_format\x18\n \x01(\x0e\x32%.scalekit.v1.connections.NameIdFormatB \x92\x41\x1d\x32\x12IDP Name ID FormatJ\x07\"EMAIL\"R\x0fidpNameIdFormat\x12\x89\x01\n\x17idp_sso_request_binding\x18\x0b \x01(\x0e\x32\'.scalekit.v1.connections.RequestBindingB)\x92\x41&2\x17IDP SSO Request BindingJ\x0b\"HTTP_POST\"R\x14idpSsoRequestBinding\x12\x89\x01\n\x17idp_slo_request_binding\x18\x0c \x01(\x0e\x32\'.scalekit.v1.connections.RequestBindingB)\x92\x41&2\x17IDP SLO Request BindingJ\x0b\"HTTP_POST\"R\x14idpSloRequestBinding\x12\x93\x01\n\x13saml_signing_option\x18\r \x01(\x0e\x32+.scalekit.v1.connections.SAMLSigningOptionsB6\x92\x41\x33\x32\x13SAML Signing OptionJ\x1c\"SAML_ONLY_RESPONSE_SIGNING\"R\x11samlSigningOption\x12{\n\x19\x61llow_idp_initiated_login\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueB$\x92\x41!2\x19\x41llow IDP Initiated LoginJ\x04trueR\x16\x61llowIdpInitiatedLogin\x12S\n\x0b\x66orce_authn\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x16\x92\x41\x13\x32\x0b\x46orce AuthnJ\x04trueR\nforceAuthn\x12\x96\x01\n\x14\x64\x65\x66\x61ult_redirect_uri\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueBF\x92\x41\x43\x32\x14\x44\x65\x66\x61ult Redirect URIJ+\"https://yourapp.com/service/saml/redirect\"R\x12\x64\x65\x66\x61ultRedirectUri\x12k\n\x13\x61ssertion_encrypted\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1e\x92\x41\x1b\x32\x13\x41ssertion EncryptedJ\x04trueR\x12\x61ssertionEncrypted\x12j\n\x13want_request_signed\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1e\x92\x41\x1b\x32\x13Want Request SignedJ\x04trueR\x11wantRequestSigned\x12q\n\x0e\x63\x65rtificate_id\x18\x13 \x01(\x0b\x32\x1c.google.protobuf.StringValueB,\x92\x41)2\x0e\x43\x65rtificate IDJ\x17\"cer_35585423166144613\"R\rcertificateId\x12\x62\n\x10idp_slo_required\x18\x14 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1c\x92\x41\x19\x32\x11\x45nable IDP logoutJ\x04trueR\x0eidpSloRequired\x12\x96\x01\n\nsp_slo_url\x18\x15 \x01(\x0b\x32\x1c.google.protobuf.StringValueBZ\x92\x41T2\x18Service Provider SLO urlJ8\"https://yourapp.com/sso/v1/saml/conn_1234/slo/callback\"\xe0\x41\x03R\x08spSloUrl\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x16 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\x12\xba\x01\n!jit_provisioning_with_sso_enabled\x18\x17 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBT\x92\x41Q2IIndicates if Just In Time user provisioning is enabled for the connectionJ\x04trueR\x1djitProvisioningWithSsoEnabled\"\xbf\x03\n\x0eIDPCertificate\x12\x36\n\x0b\x63\x65rtificate\x18\x01 \x01(\tB\x14\x92\x41\x11\x32\x0fIDP CertificateR\x0b\x63\x65rtificate\x12s\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB6\x92\x41\x33\x32\x19\x43\x65rtificate Creation TimeJ\x16\"2021-09-01T00:00:00Z\"R\ncreateTime\x12q\n\x0b\x65xpiry_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB4\x92\x41\x31\x32\x17\x43\x65rtificate Expiry TimeJ\x16\"2021-09-01T00:00:00Z\"R\nexpiryTime\x12\x38\n\x02id\x18\x04 \x01(\tB(\x92\x41%2\x0e\x43\x65rtificate IDJ\x13\"cert_123123123123\"R\x02id\x12S\n\x06issuer\x18\x05 \x01(\tB;\x92\x41\x38\x32\x12\x43\x65rtificate IssuerJ\"\"https://youridp.com/service/saml\"R\x06issuer\"b\n\x16GetOIDCMetadataRequest\x12H\n\x08metadata\x18\x01 \x01(\x0b\x32,.scalekit.v1.connections.OIDCMetadataRequestR\x08metadata\"9\n\x13OIDCMetadataRequest\x12\"\n\x06issuer\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x06issuer\"\xd7\x01\n\x17GetOIDCMetadataResponse\x12\x16\n\x06issuer\x18\x01 \x01(\tR\x06issuer\x12\x35\n\x16\x61uthorization_endpoint\x18\x02 \x01(\tR\x15\x61uthorizationEndpoint\x12%\n\x0etoken_endpoint\x18\x03 \x01(\tR\rtokenEndpoint\x12+\n\x11userinfo_endpoint\x18\x04 \x01(\tR\x10userinfoEndpoint\x12\x19\n\x08jwks_uri\x18\x05 \x01(\tR\x07jwksUri\"b\n\x16GetSAMLMetadataRequest\x12H\n\x08metadata\x18\x01 \x01(\x0b\x32,.scalekit.v1.connections.SAMLMetadataRequestR\x08metadata\"D\n\x13SAMLMetadataRequest\x12-\n\x0cmetadata_url\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0bmetadataUrl\"\xb4\x02\n\x17GetSAMLMetadataResponse\x12\"\n\ridp_entity_id\x18\x01 \x01(\tR\x0bidpEntityId\x12\x1e\n\x0bidp_sso_url\x18\x02 \x01(\tR\tidpSsoUrl\x12\x1e\n\x0bidp_slo_url\x18\x03 \x01(\tR\tidpSloUrl\x12)\n\x10idp_certificates\x18\x04 \x03(\tR\x0fidpCertificates\x12+\n\x12idp_name_id_format\x18\x05 \x01(\tR\x0fidpNameIdFormat\x12\'\n\x0frequest_binding\x18\x06 \x01(\tR\x0erequestBinding\x12\x34\n\x16want_assertions_signed\x18\x07 \x01(\x08R\x14wantAssertionsSigned\"u\n GetSAMLCertificateDetailsRequest\x12Q\n\x0b\x63\x65rtificate\x18\x01 \x01(\x0b\x32/.scalekit.v1.connections.SAMLCertificateRequestR\x0b\x63\x65rtificate\"5\n\x16SAMLCertificateRequest\x12\x1b\n\x04text\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04text\"\xa5\x01\n!GetSAMLCertificateDetailsResponse\x12\x12\n\x04text\x18\x01 \x01(\tR\x04text\x12\x1b\n\tnot_after\x18\x02 \x01(\x03R\x08notAfter\x12\x1d\n\nnot_before\x18\x03 \x01(\x03R\tnotBefore\x12\x18\n\x07subject\x18\x04 \x01(\tR\x07subject\x12\x16\n\x06issuer\x18\x05 \x01(\tR\x06issuer\"\x86\x01\n\x1eGetConnectionTestResultRequest\x12,\n\rconnection_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0c\x63onnectionId\x12\x36\n\x0ftest_request_id\x18\x02 \x01(\tB\x0e\xbaH\x0br\t\x10\x01:\x05test_R\rtestRequestId\"\xbd\x02\n\x1fGetConnectionTestResultResponse\x12\x41\n\x06status\x18\x01 \x01(\x0e\x32).scalekit.v1.connections.TestResultStatusR\x06status\x12 \n\tuser_info\x18\x02 \x01(\tH\x00R\x08userInfo\x88\x01\x01\x12\x19\n\x05\x65rror\x18\x03 \x01(\tH\x01R\x05\x65rror\x88\x01\x01\x12\x30\n\x11\x65rror_description\x18\x04 \x01(\tH\x02R\x10\x65rrorDescription\x88\x01\x01\x12(\n\rerror_details\x18\x05 \x01(\tH\x03R\x0c\x65rrorDetails\x88\x01\x01\x42\x0c\n\n_user_infoB\x08\n\x06_errorB\x14\n\x12_error_descriptionB\x10\n\x0e_error_details\"\x1a\n\x18PasswordConnectionConfig\"9\n\x05\x46lags\x12\x19\n\x08is_login\x18\x01 \x01(\x08R\x07isLogin\x12\x15\n\x06is_app\x18\x02 \x01(\x08R\x05isApp\"\xaa\x03\n\x19ListAppConnectionsRequest\x12\x80\x01\n\tpage_size\x18\x01 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x02 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\x12U\n\x08provider\x18\x03 \x01(\tB4\x92\x41(2\x1e\x46ilter connections by providerJ\x06\"OKTA\"\xbaH\x06r\x04\x10\x01\x18\x32H\x00R\x08provider\x88\x01\x01\x42\x0b\n\t_provider\"\xea\x03\n\x1aListAppConnectionsResponse\x12\x81\x01\n\x0b\x63onnections\x18\x01 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB6\x92\x41\x33\x32\x31List of connections matching the request criteriaR\x0b\x63onnections\x12o\n\x0fnext_page_token\x18\x02 \x01(\tBG\x92\x41\x44\x32\"Token for the next page of resultsJ\x1e\"eyJwYWdlIjoyLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12s\n\x0fprev_page_token\x18\x03 \x01(\tBK\x92\x41H2&Token for the previous page of resultsJ\x1e\"eyJwYWdlIjoyLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12\x62\n\ntotal_size\x18\x04 \x01(\rBC\x92\x41@29Total number of connections matching the request criteriaJ\x03\x31\x30\x30R\ttotalSize\"\x8b\x01\n\x1bGetConnectionContextRequest\x12\x38\n\rconnection_id\x18\x01 \x01(\tB\x13\xbaH\x10r\x0b\x10\x01\x18 :\x05\x63onn_\xc8\x01\x01R\x0c\x63onnectionId\x12\x32\n\x0forganization_id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\"Q\n\x1cGetConnectionContextResponse\x12\x31\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext\"\xc1\x01\n\x1eUpdateConnectionContextRequest\x12\x38\n\rconnection_id\x18\x01 \x01(\tB\x13\xbaH\x10r\x0b\x10\x01\x18 :\x05\x63onn_\xc8\x01\x01R\x0c\x63onnectionId\x12\x32\n\x0forganization_id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x31\n\x07\x63ontext\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext*W\n\x11\x43odeChallengeType\x12#\n\x1f\x43ODE_CHALLENGE_TYPE_UNSPECIFIED\x10\x00\x12\x0b\n\x07NUMERIC\x10\x01\x12\x10\n\x0c\x41LPHANUMERIC\x10\x02*R\n\x11\x43onfigurationType\x12\"\n\x1e\x43ONFIGURATION_TYPE_UNSPECIFIED\x10\x00\x12\r\n\tDISCOVERY\x10\x01\x12\n\n\x06MANUAL\x10\x02*a\n\x0cNameIdFormat\x12\x16\n\x12NAME_ID_FORMAT_NIL\x10\x00\x12\x0f\n\x0bUNSPECIFIED\x10\x01\x12\t\n\x05\x45MAIL\x10\x02\x12\r\n\tTRANSIENT\x10\x03\x12\x0e\n\nPERSISTENT\x10\x04*U\n\x10PasswordlessType\x12 \n\x1cPasswordlessType_UNSPECIFIED\x10\x00\x12\x08\n\x04LINK\x10\x01\x12\x07\n\x03OTP\x10\x02\x12\x0c\n\x08LINK_OTP\x10\x03*9\n\x10TestResultStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0b\n\x07SUCCESS\x10\x01\x12\x0b\n\x07\x46\x41ILURE\x10\x02*\xd8\x01\n\x12SAMLSigningOptions\x12$\n SAML_SIGNING_OPTIONS_UNSPECIFIED\x10\x00\x12\x0e\n\nNO_SIGNING\x10\x01\x12\x1e\n\x1aSAML_ONLY_RESPONSE_SIGNING\x10\x02\x12\x1f\n\x1bSAML_ONLY_ASSERTION_SIGNING\x10\x03\x12#\n\x1fSAML_RESPONSE_ASSERTION_SIGNING\x10\x04\x12&\n\"SAML_RESPONSE_OR_ASSERTION_SIGNING\x10\x05*S\n\x0eRequestBinding\x12\x1f\n\x1bREQUEST_BINDING_UNSPECIFIED\x10\x00\x12\r\n\tHTTP_POST\x10\x01\x12\x11\n\rHTTP_REDIRECT\x10\x02*P\n\rTokenAuthType\x12\x1f\n\x1bTOKEN_AUTH_TYPE_UNSPECIFIED\x10\x00\x12\x0e\n\nURL_PARAMS\x10\x01\x12\x0e\n\nBASIC_AUTH\x10\x02*c\n\tOIDCScope\x12\x1a\n\x16OIDC_SCOPE_UNSPECIFIED\x10\x00\x12\n\n\x06openid\x10\x01\x12\x0b\n\x07profile\x10\x02\x12\t\n\x05\x65mail\x10\x03\x12\x0b\n\x07\x61\x64\x64ress\x10\x04\x12\t\n\x05phone\x10\x05*\xb0\x01\n\x0e\x43onnectionType\x12\x0b\n\x07INVALID\x10\x00\x12\x08\n\x04OIDC\x10\x01\x12\x08\n\x04SAML\x10\x02\x12\x0c\n\x08PASSWORD\x10\x03\x12\t\n\x05OAUTH\x10\x04\x12\x10\n\x0cPASSWORDLESS\x10\x05\x12\t\n\x05\x42\x41SIC\x10\x06\x12\n\n\x06\x42\x45\x41RER\x10\x07\x12\x0b\n\x07\x41PI_KEY\x10\x08\x12\x0c\n\x08WEBAUTHN\x10\t\x12\r\n\tOAUTH_M2M\x10\n\x12\x11\n\rTRELLO_OAUTH1\x10\x0b*`\n\x10\x43onnectionStatus\x12!\n\x1d\x43ONNECTION_STATUS_UNSPECIFIED\x10\x00\x12\t\n\x05\x44RAFT\x10\x01\x12\x0f\n\x0bIN_PROGRESS\x10\x02\x12\r\n\tCOMPLETED\x10\x03*\x98\x02\n\x12\x43onnectionProvider\x12#\n\x1f\x43ONNECTION_PROVIDER_UNSPECIFIED\x10\x00\x12\x08\n\x04OKTA\x10\x01\x12\n\n\x06GOOGLE\x10\x02\x12\x10\n\x0cMICROSOFT_AD\x10\x03\x12\t\n\x05\x41UTH0\x10\x04\x12\x0c\n\x08ONELOGIN\x10\x05\x12\x11\n\rPING_IDENTITY\x10\x06\x12\r\n\tJUMPCLOUD\x10\x07\x12\n\n\x06\x43USTOM\x10\x08\x12\n\n\x06GITHUB\x10\t\x12\n\n\x06GITLAB\x10\n\x12\x0c\n\x08LINKEDIN\x10\x0b\x12\x0e\n\nSALESFORCE\x10\x0c\x12\r\n\tMICROSOFT\x10\r\x12\x11\n\rIDP_SIMULATOR\x10\x0e\x12\x0c\n\x08SCALEKIT\x10\x0f\x12\x08\n\x04\x41\x44\x46S\x10\x10\x32\x92G\n\x11\x43onnectionService\x12\x91\x03\n\x1b\x43reateEnvironmentConnection\x12;.scalekit.v1.connections.CreateEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\"\x81\x02\x92\x41\xc1\x01\n\x0b\x43onnections\x12\x17\x43reate a new connection\x1a\x38\x45stablish a new connection for the specified environmentJ_\n\x03\x32\x30\x31\x12X\n\x1f\x43onnection created successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\"\x13/api/v1/connections:\nconnection\x12\xb3\x03\n\x10\x43reateConnection\x12\x30.scalekit.v1.connections.CreateConnectionRequest\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\"\xb9\x02\x92\x41\xc6\x01\n\x0b\x43onnections\x12\x17\x43reate a new connection\x1a=Establish a new SSO connection for the specified organizationJ_\n\x03\x32\x30\x31\x12X\n\x1f\x43onnection created successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x41\"3/api/v1/organizations/{organization_id}/connections:\nconnection\x12\xcd\x04\n\x19\x41ssignDomainsToConnection\x12\x39.scalekit.v1.connections.AssignDomainsToConnectionRequest\x1a:.scalekit.v1.connections.AssignDomainsToConnectionResponse\"\xb8\x03\x92\x41\xb6\x02\n\x0b\x43onnections\x12\x1e\x41ssign domains to a connection\x1a\x9e\x01\x41ssigns one or more domains to a specific connection within an organization. This allows the connection to be used for authentication on the specified domainsJf\n\x03\x32\x30\x30\x12_\n\x1d\x44omains assigned successfully\x12>\n<\x1a:.scalekit.v1.connections.AssignDomainsToConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02P\x1aK/api/v1/organizations/{organization_id}/connections/{connection_id}/domains:\x01*\x12\xb3\x03\n\x18GetEnvironmentConnection\x12\x38.scalekit.v1.connections.GetEnvironmentConnectionRequest\x1a..scalekit.v1.connections.GetConnectionResponse\"\xac\x02\x92\x41\xe7\x01\n\x0b\x43onnections\x12\x1bRetrieve connection details\x1aSObtain detailed information about a specific connection using its unique identifierJf\n\x03\x32\x30\x30\x12_\n)Successfully retrieved connection details\x12\x32\n0\x1a..scalekit.v1.connections.GetConnectionResponse\x82\xb5\x18\x03\x18\xc4\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\x12#/api/v1/connections/{connection_id}\x12\xcf\x04\n\rGetConnection\x12-.scalekit.v1.connections.GetConnectionRequest\x1a..scalekit.v1.connections.GetConnectionResponse\"\xde\x03\x92\x41\x81\x03\n\x0b\x43onnections\x12\x16Get connection details\x1a\xd1\x01Retrieves the complete configuration and status details for a specific connection by its ID within an organization. Returns all connection properties including provider settings, protocols, and current status.J\x85\x01\n\x03\x32\x30\x30\x12~\nHSuccessfully retrieved connection details for the specified organization\x12\x32\n0\x1a..scalekit.v1.connections.GetConnectionResponse\x82\xb5\x18\x15\n\x10\x63onnections_read\x18\xf4\x01\x82\xd3\xe4\x93\x02:\x12\x38/api/v1/organizations/{organization_id}/connections/{id}\x12\xe4\x02\n\x0fListConnections\x12/.scalekit.v1.connections.ListConnectionsRequest\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\"\xed\x01\x92\x41\xb6\x01\n\x0b\x43onnections\x12\x10List connections\x1a\x32Retrieves a list of connections in the environmentJa\n\x03\x32\x30\x30\x12Z\n\"Successfully retrieved connections\x12\x34\n2\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\x82\xb5\x18\x14\n\x10\x63onnections_read\x18t\x82\xd3\xe4\x93\x02\x15\x12\x13/api/v1/connections\x12\xb5\x03\n\x1bListOrganizationConnections\x12;.scalekit.v1.connections.ListOrganizationConnectionsRequest\x1a<.scalekit.v1.connections.ListOrganizationConnectionsResponse\"\x9a\x02\x92\x41\xd6\x01\n\x0b\x43onnections\x12\x1dList organization connections\x1a\x39Retrieves a list of connections for all the organizationsJm\n\x03\x32\x30\x30\x12\x66\n\"Successfully retrieved connections\x12@\n>\x1a<.scalekit.v1.connections.ListOrganizationConnectionsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\x12#/api/v1/organizations/-/connections\x12\xcd\x03\n\x1dSearchOrganizationConnections\x12=.scalekit.v1.connections.SearchOrganizationConnectionsRequest\x1a>.scalekit.v1.connections.SearchOrganizationConnectionsResponse\"\xac\x02\x92\x41\xe1\x01\n\x0b\x43onnections\x12\x1fSearch organization connections\x1a\x44Search with query or filters provided and return list of connectionsJk\n\x03\x32\x30\x30\x12\x64\n\x1eSuccessfully found connections\x12\x42\n@\x1a>.scalekit.v1.connections.SearchOrganizationConnectionsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02,\x12*/api/v1/organizations/-/connections:search\x12\xf1\x02\n\x1bUpdateEnvironmentConnection\x12;.scalekit.v1.connections.UpdateEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\"\xe1\x01\x92\x41\x91\x01\n\x0b\x43onnections\x12\x13Update a connection\x1a\x17Update a SSO ConnectionJT\n\x03\x32\x30\x30\x12M\n\x14Updated Successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\x32#/api/v1/connections/{connection_id}:\nconnection\x12\x94\x03\n\x10UpdateConnection\x12\x30.scalekit.v1.connections.UpdateConnectionRequest\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\"\x9a\x02\x92\x41\xa2\x01\n\x0b\x43onnections\x12$Update a connection for organization\x1a\x17Update a SSO ConnectionJT\n\x03\x32\x30\x30\x12M\n\x14Updated Successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x46\x32\x38/api/v1/organizations/{organization_id}/connections/{id}:\nconnection\x12\x92\x02\n\x1b\x44\x65leteEnvironmentConnection\x12;.scalekit.v1.connections.DeleteEnvironmentConnectionRequest\x1a\x16.google.protobuf.Empty\"\x9d\x01\x92\x41Z\n\x0b\x43onnections\x12\x13\x44\x65lete a connection\x1a\x17\x44\x65lete a SSO ConnectionJ\x1d\n\x03\x32\x30\x30\x12\x16\n\x14\x44\x65leted Successfully\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%*#/api/v1/connections/{connection_id}\x12\xf7\x03\n\x10\x44\x65leteConnection\x12\x30.scalekit.v1.connections.DeleteConnectionRequest\x1a\x16.google.protobuf.Empty\"\x98\x03\x92\x41\xce\x02\n\x0b\x43onnections\x12\x15\x44\x65lete SSO connection\x1a\xf9\x01\x44\x65letes an SSO connection from the specified organization by connection ID. Use this endpoint when an identity provider integration is no longer needed for the organization. Returns an empty response after the SSO connection is deleted successfully.J,\n\x03\x32\x30\x30\x12%\n#SSO connection deleted successfully\x82\xb5\x18\x02\x18\x64\x82\xd3\xe4\x93\x02:*8/api/v1/organizations/{organization_id}/connections/{id}\x12\xdf\x02\n\x1b\x45nableEnvironmentConnection\x12;.scalekit.v1.connections.ToggleEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xcf\x01\x92\x41\x84\x01\n\x0b\x43onnections\x12\x13\x45nable a connection\x1a\x17\x45nable a SSO ConnectionJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02,2*/api/v1/connections/{connection_id}:enable\x12\xd4\x04\n\x10\x45nableConnection\x12\x30.scalekit.v1.connections.ToggleConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xda\x03\x92\x41\xf6\x02\n\x0b\x43onnections\x12\x15\x45nable SSO connection\x1a\xee\x01\x41\x63tivate an existing connection for the specified organization. When enabled, users can authenticate using this connection. This endpoint changes the connection state from disabled to enabled without modifying other configuration settingsJ_\n\x03\x32\x30\x30\x12X\n\x1f\x43onnection enabled successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\x82\xd3\xe4\x93\x02\x41\x32?/api/v1/organizations/{organization_id}/connections/{id}:enable\x12\xe3\x02\n\x1c\x44isableEnvironmentConnection\x12;.scalekit.v1.connections.ToggleEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xd2\x01\x92\x41\x86\x01\n\x0b\x43onnections\x12\x14\x44isable a connection\x1a\x18\x44isable a SSO ConnectionJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02-2+/api/v1/connections/{connection_id}:disable\x12\xde\x04\n\x11\x44isableConnection\x12\x30.scalekit.v1.connections.ToggleConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xe3\x03\x92\x41\xfe\x02\n\x0b\x43onnections\x12\x16\x44isable SSO connection\x1a\xf4\x01\x44\x65\x61\x63tivate an existing connection for the specified organization. When disabled, users cannot authenticate using this connection. This endpoint changes the connection state from enabled to disabled without modifying other configuration settingsJ`\n\x03\x32\x30\x30\x12Y\n Connection disabled successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\x82\xd3\xe4\x93\x02\x42\x32@/api/v1/organizations/{organization_id}/connections/{id}:disable\x12\x80\x03\n\x17GetConnectionTestResult\x12\x37.scalekit.v1.connections.GetConnectionTestResultRequest\x1a\x38.scalekit.v1.connections.GetConnectionTestResultResponse\"\xf1\x01\x92\x41\x8d\x01\n\x0b\x43onnections\x12\x16Test connection result\x1a\x16\x43onnection test resultJN\n\x03\x32\x30\x30\x12G\n\x07Success\x12<\n:\x1a\x38.scalekit.v1.connections.GetConnectionTestResultResponse\x82\xb5\x18\x02\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x45\x12\x43/api/v1/connections/{connection_id}/test-requests/{test_request_id}\x12\xf6\x02\n\x12ListAppConnections\x12\x32.scalekit.v1.connections.ListAppConnectionsRequest\x1a\x33.scalekit.v1.connections.ListAppConnectionsResponse\"\xf6\x01\x92\x41\xbe\x01\n\x0b\x43onnections\x12\x14List App connections\x1a\x36Retrieves a list of app connections in the environmentJa\n\x03\x32\x30\x30\x12Z\n\"Successfully retrieved connections\x12\x34\n2\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\x12\x17/api/v1/connections/app\x12\xd1\x03\n\x14GetConnectionContext\x12\x34.scalekit.v1.connections.GetConnectionContextRequest\x1a\x35.scalekit.v1.connections.GetConnectionContextResponse\"\xcb\x02\x92\x41\xad\x01\n\x0b\x43onnections\x12\x16Get connection context\x1athis.provider == 15 ? this.provider_key in [\'SCALEKIT\'] : true\x1aM\x12\x18invalid value for key_id\x1a\x31this.type == 9 ? this.key_id == \'WEBAUTHN\' : trueB\t\n\x07_key_id\"\xcb \n\nConnection\x12\x8d\x01\n\x02id\x18\x01 \x01(\tB}\x92\x41z2_Unique identifier for this connection. Used in API calls to reference this specific connection.J\x17\"conn_2123312131125533\"R\x02id\x12\xc2\x01\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderBy\x92\x41v2lIdentity provider service that handles authentication (such as OKTA, Google, Azure AD, or a custom provider)J\x06\"OKTA\"R\x08provider\x12\xb4\x01\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeBw\x92\x41t2jAuthentication protocol used by this connection. Can be OIDC (OpenID Connect), SAML, OAUTH, or MAGIC_LINK.J\x06\"OIDC\"R\x04type\x12\xc6\x01\n\x06status\x18\x04 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusB\x82\x01\x92\x41|2kCurrent configuration status of the connection. Possible values include IN_PROGRESS, CONFIGURED, and ERROR.J\r\"IN_PROGRESS\"\xe0\x41\x03R\x06status\x12\xab\x01\n\x07\x65nabled\x18\x05 \x01(\x08\x42\x90\x01\x92\x41\x8c\x01\x32\x82\x01\x43ontrols whether users can sign in using this connection. When false, the connection exists but cannot be used for authentication.J\x05\x66\x61lseR\x07\x65nabled\x12\xb0\x01\n\rdebug_enabled\x18\x06 \x01(\x08\x42\x8a\x01\x92\x41\x86\x01\x32~Enables testing mode that allows non-HTTPS endpoints. Should only be enabled in development environments, never in production.J\x04trueR\x0c\x64\x65\x62ugEnabled\x12\xc1\x01\n\x0forganization_id\x18\x07 \x01(\tB\x92\x01\x92\x41\x8e\x01\x32tIdentifier of the organization that owns this connection. Connections are typically scoped to a single organization.J\x16\"org_2123312131125533\"H\x01R\x0eorganizationId\x88\x01\x01\x12\xbd\x01\n\x0fui_button_title\x18\x08 \x01(\tB\x94\x01\x92\x41\x81\x01\x32mCustom text shown on the login button in the user interface. Helps users identify which SSO option to select.J\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12\xd5\x01\n\x12\x63onfiguration_type\x18\t \x01(\x0e\x32*.scalekit.v1.connections.ConfigurationTypeBz\x92\x41w2kHow the connection was configured: DISCOVERY (automatic configuration) or MANUAL (administrator configured)J\x08\"MANUAL\"R\x11\x63onfigurationType\x12\xdf\x01\n\x13test_connection_uri\x18\x0c \x01(\tB\xae\x01\x92\x41\xaa\x01\x32\x66URI that can be used to test this connection. Visit this URL to verify the connection works correctly.J@\"https://auth.example.com/test-connection/conn_2123312131125533\"R\x11testConnectionUri\x12\x81\x02\n\x11\x61ttribute_mapping\x18\x0f \x03(\x0b\x32\x39.scalekit.v1.connections.Connection.AttributeMappingEntryB\x98\x01\x92\x41|2zMaps identity provider attributes to user profile fields. For example, {\'email\': \'user.mail\', \'name\': \'user.displayName\'}.\xbaH\x16\x9a\x01\x13\x10\x1e\"\x06r\x04\x10\x01\x18\x64*\x07r\x05\x10\x01\x18\x80\x02R\x10\x61ttributeMapping\x12\xb1\x01\n\x0b\x63reate_time\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.TimestampBt\x92\x41_2EWhen this connection was first created. Format is RFC 3339 timestamp.J\x16\"2023-01-15T14:30:00Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ncreateTime\x12\xb1\x01\n\x0bupdate_time\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.TimestampBt\x92\x41_2EWhen this connection was last modified. Format is RFC 3339 timestamp.J\x16\"2023-02-20T09:15:30Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\nupdateTime\x12\xb3\x01\n\x0boidc_config\x18\x12 \x01(\x0b\x32-.scalekit.v1.connections.OIDCConnectionConfigBa\x92\x41^2\\Configuration details for OpenID Connect (OIDC) connections. Present only when type is OIDC.H\x00R\noidcConfig\x12\xaa\x01\n\x0bsaml_config\x18\x13 \x01(\x0b\x32\x35.scalekit.v1.connections.SAMLConnectionConfigResponseBP\x92\x41M2KConfiguration details for SAML connections. Present only when type is SAML.H\x00R\nsamlConfig\x12\xa7\x01\n\x0coauth_config\x18\x14 \x01(\x0b\x32..scalekit.v1.connections.OAuthConnectionConfigBR\x92\x41O2MConfiguration details for OAuth connections. Present only when type is OAUTH.H\x00R\x0boauthConfig\x12\xbf\x01\n\x13passwordless_config\x18\x16 \x01(\x0b\x32+.scalekit.v1.connections.PasswordLessConfigB_\x92\x41\\2ZConfiguration details for Magic Link authentication. Present only when type is MAGIC_LINK.H\x00R\x12passwordlessConfig\x12\xc0\x01\n\rstatic_config\x18\x1a \x01(\x0b\x32).scalekit.v1.connections.StaticAuthConfigBn\x92\x41k2iStatic configuration for custom connections. Present only when type is BASIC, BEARER, API_KEY, or custom.H\x00R\x0cstaticConfig\x12\xb1\x01\n\x0fwebauthn_config\x18\x1b \x01(\x0b\x32-.scalekit.v1.connections.WebAuthConfigurationBW\x92\x41T2RConfiguration details for WebAuthn (passkeys). Present only when type is WEBAUTHN.H\x00R\x0ewebauthnConfig\x12}\n\x06key_id\x18\x19 \x01(\tBa\x92\x41^2\\Alternative identifier for this connection, typically used in frontend applications or URLs.H\x02R\x05keyId\x88\x01\x01\x12u\n\x0cprovider_key\x18\x17 \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x12\xaa\x01\n\x07\x64omains\x18\x18 \x03(\x0b\x32\x1b.scalekit.v1.domains.DomainBs\x92\x41p2SDomain associated with this connection, used for domain-based authentication flows.J\x19[{\"name\": \"example.com\"}]R\x07\x64omains\x1a\x43\n\x15\x41ttributeMappingEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\n\n\x08settingsB\x12\n\x10_organization_idB\t\n\x07_key_idJ\x04\x08\r\x10\x0f\"w\n\x18\x43reateConnectionResponse\x12[\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\x16\x92\x41\x13\x32\x11\x43onnection DetailR\nconnection\"\xa8\x02\n\"UpdateEnvironmentConnectionRequest\x12~\n\rconnection_id\x18\x01 \x01(\tBY\x92\x41M2+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xca>\x05\xfa\x02\x02id\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\x12\x81\x01\n\nconnection\x18\x03 \x01(\x0b\x32).scalekit.v1.connections.UpdateConnectionB6\x92\x41-2#Connection properties to be updated\xca>\x05\xfa\x02\x02id\xbaH\x03\xc8\x01\x01R\nconnection\"\xce\x03\n\x17UpdateConnectionRequest\x12q\n\x0forganization_id\x18\x01 \x01(\tBH\x92\x41<2#Organization ID for the Connection.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\x61\n\x02id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02id\x12\xd6\x01\n\nconnection\x18\x04 \x01(\x0b\x32).scalekit.v1.connections.UpdateConnectionB\x8a\x01\x92\x41-2#Connection properties to be updated\xca>\x05\xfa\x02\x02id\xbaHW\xba\x01Q\x12\x36OAUTH, PASSWORDLESS and WEBAUTHN are not supported yet\x1a\x17!(this.type in [4,5,9])\xc8\x01\x01R\nconnectionJ\x04\x08\x02\x10\x03\"\xca\x11\n\x10UpdateConnection\x12w\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderB.\x92\x41#2\x17SSO Connection ProviderJ\x08\"CUSTOM\"\xbaH\x05\x82\x01\x02\x10\x01R\x08provider\x12r\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB5\x92\x41*2 Connection Protocol OIDC / SAML J\x06\"OIDC\"\xbaH\x05\x82\x01\x02\x10\x01R\x04type\x12\xae\x01\n\rdebug_enabled\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBm\x92\x41j2bDebug mode for the connection. Debug would allow non HTTPS endpoint to be used with the connectionJ\x04trueR\x0c\x64\x65\x62ugEnabled\x12\x8d\x01\n\x0fui_button_title\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueBG\x92\x41\x35\x32!Display name for the Login ButtonJ\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12~\n\x12\x63onfiguration_type\x18\x0b \x01(\x0e\x32*.scalekit.v1.connections.ConfigurationTypeB#\x92\x41 2\x14\x43onfiguration Type. J\x08\"MANUAL\"R\x11\x63onfigurationType\x12\x9d\x01\n\x11\x61ttribute_mapping\x18\x0f \x03(\x0b\x32?.scalekit.v1.connections.UpdateConnection.AttributeMappingEntryB/\x92\x41\x13\x32\x11\x41ttribute Mapping\xbaH\x16\x9a\x01\x13\x10\x1e\"\x06r\x04\x10\x01\x18\x64*\x07r\x05\x10\x01\x18\x80\x02R\x10\x61ttributeMapping\x12\x83\x01\n\x0boidc_config\x18\x10 \x01(\x0b\x32-.scalekit.v1.connections.OIDCConnectionConfigB1\x92\x41.2,OIDC Configuration if ConnectionType == OIDCH\x00R\noidcConfig\x12\x8a\x01\n\x0bsaml_config\x18\x11 \x01(\x0b\x32\x34.scalekit.v1.connections.SAMLConnectionConfigRequestB1\x92\x41.2,SAML Configuration if ConnectionType == SAMLH\x00R\nsamlConfig\x12\x88\x01\n\x0coauth_config\x18\x12 \x01(\x0b\x32..scalekit.v1.connections.OAuthConnectionConfigB3\x92\x41\x30\x32.OAuth Configuration if ConnectionType == OAUTHH\x00R\x0boauthConfig\x12\x9d\x01\n\x13passwordless_config\x18\x14 \x01(\x0b\x32+.scalekit.v1.connections.PasswordLessConfigB=\x92\x41:28Magic Link Configuration if ConnectionType == MAGIC_LINKH\x00R\x12passwordlessConfig\x12P\n\rstatic_config\x18\x17 \x01(\x0b\x32).scalekit.v1.connections.StaticAuthConfigH\x00R\x0cstaticConfig\x12\xb1\x01\n\x0fwebauthn_config\x18\x18 \x01(\x0b\x32-.scalekit.v1.connections.WebAuthConfigurationBW\x92\x41T2RConfiguration details for WebAuthn (passkeys). Present only when type is WEBAUTHN.H\x00R\x0ewebauthnConfig\x12%\n\x06key_id\x18\x16 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18 H\x01R\x05keyId\x88\x01\x01\x12u\n\x0cprovider_key\x18\x15 \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x1a\x43\n\x15\x41ttributeMappingEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01:\x8b\x02\xbaH\x87\x02\x1aT\x12$provider or provider_key is required\x1a,has(this.provider_key) || this.provider != 0\x1a`\x12\x1einvalid value for provider_key\x1a>this.provider == 15 ? this.provider_key in [\'SCALEKIT\'] : true\x1aM\x12\x18invalid value for key_id\x1a\x31this.type == 9 ? this.key_id == \'WEBAUTHN\' : trueB\n\n\x08settingsB\t\n\x07_key_idJ\x04\x08\x01\x10\x02J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06J\x04\x08\t\x10\x0bJ\x04\x08\x0c\x10\x0f\"\x80\x01\n\x18UpdateConnectionResponse\x12\x64\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\x1f\x92\x41\x1c\x32\x1aUpdated Connection detailsR\nconnection\"\x9c\x01\n\"DeleteEnvironmentConnectionRequest\x12v\n\rconnection_id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\xf5\x01\n\x17\x44\x65leteConnectionRequest\x12q\n\x0forganization_id\x18\x01 \x01(\tBH\x92\x41<2#Organization ID for the Connection.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\x61\n\x02id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\x92\x01\n\x1fGetEnvironmentConnectionRequest\x12o\n\rconnection_id\x18\x01 \x01(\tBJ\x92\x41>2$Unique identifier for the ConnectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\xfc\x02\n\x14GetConnectionRequest\x12\xba\x01\n\x0forganization_id\x18\x01 \x01(\tB\x90\x01\x92\x41\x83\x01\x32jOrganization identifier (required). Specifies which organization owns the connection you want to retrieve.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\xa0\x01\n\x02id\x18\x03 \x01(\tB\x8f\x01\x92\x41\x82\x01\x32hConnection identifier (required). Specifies which specific connection to retrieve from the organization.J\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\x9a\x02\n\x15GetConnectionResponse\x12\x80\x02\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\xba\x01\x92\x41\xb6\x01\x32\xb3\x01\x43omplete connection details including provider configuration, protocol settings, status, and all metadata. Contains everything needed to understand the connection\'s current state.R\nconnection\"\x96\x04\n\x16ListConnectionsRequest\x12\x80\x01\n\x0forganization_id\x18\x01 \x01(\tBR\x92\x41\x46\x32-Filter connections by organization identifierJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12\x7f\n\x06\x64omain\x18\x03 \x01(\tBb\x92\x41V2CFilter connections by email domain associated with the organizationJ\x0f\"hero-saas.app\"\xbaH\x06r\x04\x10\x01\x18 H\x01R\x06\x64omain\x88\x01\x01\x12\xc6\x01\n\x07include\x18\x04 \x01(\tB\xa6\x01\x92\x41\xa2\x01\x32\x9f\x01\x46ilter connections by status. Use \'all\' to include all connections regardless of status. Default behavior shows only active (completed and enabled) connectionsH\x02R\x07include\x88\x01\x01\x42\x12\n\x10_organization_idB\t\n\x07_domainB\n\n\x08_includeJ\x04\x08\x02\x10\x03\"\x9d\x01\n\x17ListConnectionsResponse\x12\x81\x01\n\x0b\x63onnections\x18\x01 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB6\x92\x41\x33\x32\x31List of connections matching the request criteriaR\x0b\x63onnections\"\xfa\x0b\n\x0eListConnection\x12Q\n\x02id\x18\x01 \x01(\tBA\x92\x41>2#Unique identifier of the connectionJ\x17\"conn_2123312131125533\"R\x02id\x12\x8d\x01\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderBD\x92\x41\x41\x32\x35Identity provider type (e.g., OKTA, Google, Azure AD)J\x08\"CUSTOM\"R\x08provider\x12x\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB;\x92\x41\x38\x32.Authentication protocol used by the connectionJ\x06\"OIDC\"R\x04type\x12\x88\x01\n\x06status\x18\x04 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusBE\x92\x41?2.Current configuration status of the connectionJ\r\"IN_PROGRESS\"\xe0\x41\x03R\x06status\x12g\n\x07\x65nabled\x18\x05 \x01(\x08\x42M\x92\x41J2AWhether the connection is currently active for organization usersJ\x05\x66\x61lseR\x07\x65nabled\x12\x85\x01\n\x0forganization_id\x18\x06 \x01(\tB\\\x92\x41Y2?Unique identifier of the organization that owns this connectionJ\x16\"org_2123312131125533\"R\x0eorganizationId\x12\x88\x01\n\x0fui_button_title\x18\x07 \x01(\tB`\x92\x41N2:Text displayed on the SSO login button for this connectionJ\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12t\n\x07\x64omains\x18\x08 \x03(\tBZ\x92\x41W2/List of domains configured with this connectionJ$[\"yourapp.com\", \"yourworkspace.com\"]R\x07\x64omains\x12q\n\x11organization_name\x18\t \x01(\tBD\x92\x41\x41\x32*Name of the organization of the connectionJ\x13\"Your Organization\"R\x10organizationName\x12u\n\x0cprovider_key\x18\n \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x12\x90\x01\n\x06key_id\x18\x0b \x01(\tBy\x92\x41v2[Alternative identifier for this connection, typically used in frontend applications or URLsJ\x17\"conn_2123312131125533\"R\x05keyId\x12\x90\x01\n\ncreated_at\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.TimestampBU\x92\x41@2&When this connection was first createdJ\x16\"2023-01-15T14:30:00Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\tcreatedAt\"\xcf\x02\n\"ListOrganizationConnectionsRequest\x12\x80\x01\n\tpage_size\x18\x01 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x02 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\x97\x02\n#ListOrganizationConnectionsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12&\n\x0fprev_page_token\x18\x03 \x01(\tR\rprevPageToken\x12\x80\x01\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB5\x92\x41\x32\x32\x30List of connections matching the filter criteriaR\x0b\x63onnections\"\xa2\x07\n$SearchOrganizationConnectionsRequest\x12l\n\x05query\x18\x01 \x01(\tBQ\x92\x41G2-Search query Connection ID or Organization IDJ\x16\"conn_121312434123312\"\xbaH\x04r\x02\x18\x64H\x00R\x05query\x88\x01\x01\x12@\n\x08provider\x18\x02 \x01(\tB\x1f\x92\x41\x1c\x32\x12\x46ilter by providerJ\x06\"OKTA\"H\x01R\x08provider\x88\x01\x01\x12}\n\x06status\x18\x03 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusB5\x92\x41*2\x1b\x46ilter by connection statusJ\x0b\"COMPLETED\"\xbaH\x05\x82\x01\x02\x10\x01H\x02R\x06status\x88\x01\x01\x12\x8c\x01\n\x0f\x63onnection_type\x18\x04 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB5\x92\x41*2\x1b\x46ilter by connection statusJ\x0b\"COMPLETED\"\xbaH\x05\x82\x01\x02\x10\x01H\x03R\x0e\x63onnectionType\x88\x01\x01\x12O\n\x07\x65nabled\x18\x07 \x01(\x08\x42\x30\x92\x41-2#Filter by connection enabled statusJ\x06\"true\"H\x04R\x07\x65nabled\x88\x01\x01\x12\x80\x01\n\tpage_size\x18\x05 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x06 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageTokenB\x08\n\x06_queryB\x0b\n\t_providerB\t\n\x07_statusB\x12\n\x10_connection_typeB\n\n\x08_enabled\"\x99\x02\n%SearchOrganizationConnectionsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12&\n\x0fprev_page_token\x18\x03 \x01(\tR\rprevPageToken\x12\x80\x01\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB5\x92\x41\x32\x32\x30List of connections matching the filter criteriaR\x0b\x63onnections\"\x9c\x01\n\"ToggleEnvironmentConnectionRequest\x12v\n\rconnection_id\x18\x02 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\x9e\x02\n\x17ToggleConnectionRequest\x12\x92\x01\n\x0forganization_id\x18\x01 \x01(\tBi\x92\x41]2DUnique identifier of the organization associated with the connectionJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12h\n\x02id\x18\x03 \x01(\tBX\x92\x41L22Unique identifier for the connection to be toggledJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\xbc\x02\n\x18ToggleConnectionResponse\x12\xa9\x01\n\x07\x65nabled\x18\x01 \x01(\x08\x42\x8e\x01\x92\x41\x8a\x01\x32\x81\x01\x43urrent state of the connection after the operation. True means the connection is now enabled and can be used for authentication.J\x04trueR\x07\x65nabled\x12\x62\n\rerror_message\x18\x02 \x01(\tB8\x92\x41\x35\x32$Error message if the operation failsJ\r\"placeholder\"H\x00R\x0c\x65rrorMessage\x88\x01\x01\x42\x10\n\x0e_error_message\"\xa0\x12\n\x14OIDCConnectionConfig\x12j\n\x06issuer\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB4\x92\x41\x31\x32\nIssuer URLJ#\"https://youridp.com/service/oauth\"R\x06issuer\x12\xaa\x01\n\x12\x64iscovery_endpoint\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB]\x92\x41Z2\x12\x44iscovery EndpointJD\"https://youridp.com/service/oauth/.well-known/openid-configuration\"R\x11\x64iscoveryEndpoint\x12\x84\x01\n\rauthorize_uri\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValueBA\x92\x41>2\rAuthorize URIJ-\"https://youridp.com/service/oauth/authorize\"R\x0c\x61uthorizeUri\x12t\n\ttoken_uri\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueB9\x92\x41\x36\x32\tToken URIJ)\"https://youridp.com/service/oauth/token\"R\x08tokenUri\x12\x82\x01\n\ruser_info_uri\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB@\x92\x41=2\rUser Info URIJ,\"https://youridp.com/service/oauth/userinfo\"R\x0buserInfoUri\x12p\n\x08jwks_uri\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValueB7\x92\x41\x34\x32\x08JWKS URIJ(\"https://youridp.com/service/oauth/jwks\"R\x07jwksUri\x12\\\n\tclient_id\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB!\x92\x41\x1e\x32\tClient IDJ\x11\"oauth_client_id\"R\x08\x63lientId\x12l\n\rclient_secret\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB)\x92\x41&2\rClient SecretJ\x15\"oauth_client_secret\"R\x0c\x63lientSecret\x12\x63\n\x06scopes\x18\n \x03(\x0e\x32\".scalekit.v1.connections.OIDCScopeB\'\x92\x41$2\x0bOIDC ScopesJ\x15[\"openid\", \"profile\"]R\x06scopes\x12r\n\x0ftoken_auth_type\x18\x0b \x01(\x0e\x32&.scalekit.v1.connections.TokenAuthTypeB\"\x92\x41\x1f\x32\x0fToken Auth TypeJ\x0c\"URL_PARAMS\"R\rtokenAuthType\x12j\n\x0credirect_uri\x18\x0c \x01(\tBG\x92\x41\x44\x32\x0cRedirect URIJ4\"https://yourapp.com/sso/v1/oidc/conn_1234/callback\"R\x0bredirectUri\x12V\n\x0cpkce_enabled\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x17\x92\x41\x14\x32\x0cPKCE EnabledJ\x04trueR\x0bpkceEnabled\x12h\n\x13idp_logout_required\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1c\x92\x41\x19\x32\x11\x45nable IDP logoutJ\x04trueR\x11idpLogoutRequired\x12\xb4\x01\n\x18post_logout_redirect_uri\x18\x0f \x01(\x0b\x32\x1c.google.protobuf.StringValueB]\x92\x41W2\x18post logout redirect uriJ;\"https://yourapp.com/sso/v1/oidc/conn_1234/logout/callback\"\xe0\x41\x03R\x15postLogoutRedirectUri\x12\xea\x01\n\x1f\x62\x61\x63kchannel_logout_redirect_uri\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x84\x01\x92\x41~2\"https://yourapp.com/sso/v1/oidc/conn_1234/backchannel-logout\"\xe0\x41\x03R\x1c\x62\x61\x63kchannelLogoutRedirectUri\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\x12\xba\x01\n!jit_provisioning_with_sso_enabled\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBT\x92\x41Q2IIndicates if Just In Time user provisioning is enabled for the connectionJ\x04trueR\x1djitProvisioningWithSsoEnabled\"\xbe\x0b\n\x15OAuthConnectionConfig\x12\x84\x01\n\rauthorize_uri\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValueBA\x92\x41>2\rAuthorize URIJ-\"https://youridp.com/service/oauth/authorize\"R\x0c\x61uthorizeUri\x12t\n\ttoken_uri\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueB9\x92\x41\x36\x32\tToken URIJ)\"https://youridp.com/service/oauth/token\"R\x08tokenUri\x12\x82\x01\n\ruser_info_uri\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB@\x92\x41=2\rUser Info URIJ,\"https://youridp.com/service/oauth/userinfo\"R\x0buserInfoUri\x12\\\n\tclient_id\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB!\x92\x41\x1e\x32\tClient IDJ\x11\"oauth_client_id\"R\x08\x63lientId\x12l\n\rclient_secret\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB)\x92\x41&2\rClient SecretJ\x15\"oauth_client_secret\"R\x0c\x63lientSecret\x12?\n\x06scopes\x18\n \x03(\tB\'\x92\x41$2\x0bOIDC ScopesJ\x15[\"openid\", \"profile\"]R\x06scopes\x12\x62\n\x0credirect_uri\x18\x0c \x01(\tB?\x92\x41<2\x0cRedirect URIJ,\"https://yourapp.com/service/oauth/redirect\"R\x0bredirectUri\x12V\n\x0cpkce_enabled\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x17\x92\x41\x14\x32\x0cPKCE EnabledJ\x04trueR\x0bpkceEnabled\x12V\n\x06prompt\x18\x0e \x01(\x0b\x32\x1c.google.protobuf.StringValueB \x92\x41\x1d\x32\x13Prompt for the userJ\x06\"none\"R\x06prompt\x12m\n\x12use_platform_creds\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueB#\x92\x41 2\x18Use Scalekit credentialsJ\x04trueR\x10usePlatformCreds\x12Z\n\x0b\x61\x63\x63\x65ss_type\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1b\x92\x41\x18\x32\x0b\x41\x63\x63\x65ss TypeJ\t\"offline\"R\naccessType\x12n\n\x11\x63ustom_scope_name\x18\x11 \x01(\x0b\x32\x1c.google.protobuf.StringValueB$\x92\x41!2\x11\x43ustom Scope NameJ\x0c\"user_scope\"R\x0f\x63ustomScopeName\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\"\xf4\x07\n\x12PasswordLessConfig\x12]\n\x04type\x18\x01 \x01(\x0e\x32).scalekit.v1.connections.PasswordlessTypeB\x1e\x92\x41\x1b\x32\x11Passwordless TypeJ\x06\"LINK\"R\x04type\x12W\n\tfrequency\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x16\x92\x41\x13\x32\x0eLink FrequencyJ\x01\x31H\x00R\tfrequency\x88\x01\x01\x12\x61\n\x08validity\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\"\x92\x41\x1f\x32\x18Link Validity in SecondsJ\x03\x36\x30\x30H\x01R\x08validity\x88\x01\x01\x12\x86\x01\n\x1b\x65nforce_same_browser_origin\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB&\x92\x41#2\x1b\x45nforce Same Browser OriginJ\x04trueH\x02R\x18\x65nforceSameBrowserOrigin\x88\x01\x01\x12t\n\x15\x63ode_challenge_length\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x1d\x92\x41\x1a\x32\x15\x43ode Challenge LengthJ\x01\x36H\x03R\x13\x63odeChallengeLength\x88\x01\x01\x12\x84\x01\n\x13\x63ode_challenge_type\x18\x06 \x01(\x0e\x32*.scalekit.v1.connections.CodeChallengeTypeB#\x92\x41 2\x13\x43ode Challenge TypeJ\t\"NUMERIC\"H\x04R\x11\x63odeChallengeType\x88\x01\x01\x12\x9d\x01\n-regenerate_passwordless_credentials_on_resend\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1a\x92\x41\x17\x32\x0fRegenerate the J\x04trueH\x05R)regeneratePasswordlessCredentialsOnResend\x88\x01\x01\x42\x0c\n\n_frequencyB\x0b\n\t_validityB\x1e\n\x1c_enforce_same_browser_originB\x18\n\x16_code_challenge_lengthB\x16\n\x14_code_challenge_typeB0\n._regenerate_passwordless_credentials_on_resend\"P\n\x10StaticAuthConfig\x12<\n\rstatic_config\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x0cstaticConfig\"\xc4\"\n\x14WebAuthConfiguration\x12@\n\x02rp\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connections.WebAuthConfiguration.RpR\x02rp\x12[\n\x0b\x61ttestation\x18\x02 \x01(\x0b\x32\x39.scalekit.v1.connections.WebAuthConfiguration.AttestationR\x0b\x61ttestation\x12\x64\n\x0e\x61uthenticators\x18\x03 \x01(\x0b\x32<.scalekit.v1.connections.WebAuthConfiguration.AuthenticatorsR\x0e\x61uthenticators\x12}\n\x17\x61uthenticator_selection\x18\x04 \x01(\x0b\x32\x44.scalekit.v1.connections.WebAuthConfiguration.AuthenticatorSelectionR\x16\x61uthenticatorSelection\x12O\n\x07timeout\x18\x05 \x01(\x0b\x32\x35.scalekit.v1.connections.WebAuthConfiguration.TimeoutR\x07timeout\x12\x64\n\x18\x65nable_auto_registration\x18\x06 \x01(\x08\x42*\x92\x41\'2%Enable auto registration for WebAuthnR\x16\x65nableAutoRegistration\x12X\n\x13show_passkey_button\x18\x07 \x01(\x08\x42(\x92\x41%2#Show passkey button on login screenR\x11showPasskeyButton\x12g\n\x18\x65nable_conditional_login\x18\x08 \x01(\x08\x42-\x92\x41*2(Allow autofill of passkeys in login pageR\x16\x65nableConditionalLogin\x1aH\n\x02Rp\x12\x1c\n\x03ids\x18\x01 \x03(\tB\n\xbaH\x07\x92\x01\x04\x08\x01\x10\nR\x03ids\x12$\n\x07origins\x18\x02 \x03(\tB\n\xbaH\x07\x92\x01\x04\x08\x01\x10\nR\x07origins\x1a\xc1\x01\n\x0b\x41ttestation\x12p\n\x15\x63onveyance_preference\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1d\xbaH\x1ar\x18R\x04noneR\x08indirectR\x06\x64irectR\x14\x63onveyancePreference\x12@\n\x17\x65nterprise_approved_ids\x18\x02 \x03(\tB\x08\xbaH\x05\x92\x01\x02\x10\x32R\x15\x65nterpriseApprovedIds\x1a\xf0\x13\n\x0e\x41uthenticators\x12\xdb\x02\n\x0evalidate_entry\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x97\x02\x92\x41\x93\x02\x1a\x1a.google.protobuf.BoolValue2\xf4\x01requires that the provided metadata has an entry for the given authenticator to be considered valid. By default an AAGUID which has a zero value should fail validation if validate_entry_permit_zero_aaguid is not provided with the value of true.R\rvalidateEntry\x12\x8f\x02\n!validate_entry_permit_zero_aaguid\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xa8\x01\x92\x41\xa4\x01\x32\xa1\x01is an option that permits a zero\'d AAGUID from an attestation statement to automatically pass metadata validations. Generally helpful to use with validate_entry.R\x1dvalidateEntryPermitZeroAaguid\x12\xc6\x01\n\x10validate_anchors\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x7f\x92\x41|2zwhen set to true enables the validation of the attestation statement against the trust anchor from the metadata statement.R\x0fvalidateAnchors\x12\xbe\x01\n\x0fvalidate_status\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBy\x92\x41v2twhen set to true enables the validation of the attestation statements AAGUID against the desired and undesired listsR\x0evalidateStatus\x12\xe1\x01\n\x19validate_attestation_type\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x88\x01\x92\x41\x84\x01\x32\x81\x01when set to true enables the validation of the attestation statements type against the known types the authenticator can produce.R\x17validateAttestationType\x12\xbb\x04\n\x1c\x64\x65sired_authenticator_status\x18\x06 \x03(\tB\xf8\x03\x92\x41\x9d\x01\x32\x96\x01provides the list of statuses which are considered undesirable for status report validation purposes. Should be used with validate_status set to true.:\x02[]\xbaH\xd3\x02\x92\x01\xcf\x02\x10\n\"\xca\x02r\xc7\x02R\x12NOT_FIDO_CERTIFIEDR\x0e\x46IDO_CERTIFIEDR\x18USER_VERIFICATION_BYPASSR\x1a\x41TTESTATION_KEY_COMPROMISER\x1aUSER_KEY_REMOTE_COMPROMISER\x1cUSER_KEY_PHYSICAL_COMPROMISER\x10UPDATE_AVAILABLER\x07REVOKEDR\x18SELF_ASSERTION_SUBMITTEDR\x11\x46IDO_CERTIFIED_L1R\x15\x46IDO_CERTIFIED_L1plusR\x11\x46IDO_CERTIFIED_L2R\x15\x46IDO_CERTIFIED_L2plusR\x11\x46IDO_CERTIFIED_L3R\x15\x46IDO_CERTIFIED_L3plusR\x1a\x64\x65siredAuthenticatorStatus\x12\xc1\x05\n\x1eundesired_authenticator_status\x18\x07 \x03(\tB\xfa\x04\x92\x41\x9f\x02\x32\x96\x01provides the list of statuses which are considered undesirable for status report validation purposes. Should be used with validate_status set to true.:\x83\x01[\'ATTESTATION_KEY_COMPROMISE\', \'USER_VERIFICATION_BYPASS\', \'USER_KEY_REMOTE_COMPROMISE\', \'USER_KEY_PHYSICAL_COMPROMISE\', \'REVOKED\']\xbaH\xd3\x02\x92\x01\xcf\x02\x10\n\"\xca\x02r\xc7\x02R\x12NOT_FIDO_CERTIFIEDR\x0e\x46IDO_CERTIFIEDR\x18USER_VERIFICATION_BYPASSR\x1a\x41TTESTATION_KEY_COMPROMISER\x1aUSER_KEY_REMOTE_COMPROMISER\x1cUSER_KEY_PHYSICAL_COMPROMISER\x10UPDATE_AVAILABLER\x07REVOKEDR\x18SELF_ASSERTION_SUBMITTEDR\x11\x46IDO_CERTIFIED_L1R\x15\x46IDO_CERTIFIED_L1plusR\x11\x46IDO_CERTIFIED_L2R\x15\x46IDO_CERTIFIED_L2plusR\x11\x46IDO_CERTIFIED_L3R\x15\x46IDO_CERTIFIED_L3plusR\x1cundesiredAuthenticatorStatus\x1a\x86\x02\n\x16\x41uthenticatorSelection\x12r\n\x11user_verification\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\'\xbaH$r\"R\x08requiredR\tpreferredR\x0b\x64iscouragedR\x10userVerification\x12x\n\x18\x61uthenticator_attachment\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1f\xbaH\x1cr\x1aR\x08platformR\x0e\x63ross-platformR\x17\x61uthenticatorAttachment\x1a\xa3\x04\n\x07Timeout\x12x\n\x0cregistration\x18\x01 \x01(\x0b\x32\x19.google.protobuf.DurationB9\x92\x41\'2\x1dRegistration timeout duration:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x0cregistration\x12\xa5\x01\n\x10registration_uvd\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationB_\x92\x41M2CRegistration timeout duration when user verification is discouraged:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x0fregistrationUvd\x12\x63\n\x05login\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationB2\x92\x41 2\x16Login timeout duration:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x05login\x12\x90\x01\n\tlogin_uvd\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationBX\x92\x41\x46\x322\x0fSP Metadata URLJ+\"https://youridp.com/service/saml/metadata\"R\rspMetadataUrl\x12\x8a\x01\n\x10idp_metadata_url\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueBB\x92\x41?2\x10IDP Metadata URLJ+\"https://youridp.com/service/saml/metadata\"R\x0eidpMetadataUrl\x12x\n\ridp_entity_id\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB6\x92\x41\x33\x32\rIDP Entity IDJ\"\"https://youridp.com/service/saml\"R\x0bidpEntityId\x12v\n\x0bidp_sso_url\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValueB8\x92\x41\x35\x32\x0bIDP SSO URLJ&\"https://youridp.com/service/saml/sso\"R\tidpSsoUrl\x12i\n\x10idp_certificates\x18\x07 \x03(\x0b\x32\'.scalekit.v1.connections.IDPCertificateB\x15\x92\x41\x12\x32\x10IDP CertificatesR\x0fidpCertificates\x12v\n\x0bidp_slo_url\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB8\x92\x41\x35\x32\x0bIDP SLO URLJ&\"https://youridp.com/service/saml/slo\"R\tidpSloUrl\x12l\n\x0fui_button_title\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB&\x92\x41#2\x0fUI Button TitleJ\x10\"Login with SSO\"R\ruiButtonTitle\x12t\n\x12idp_name_id_format\x18\n \x01(\x0e\x32%.scalekit.v1.connections.NameIdFormatB \x92\x41\x1d\x32\x12IDP Name ID FormatJ\x07\"EMAIL\"R\x0fidpNameIdFormat\x12\x89\x01\n\x17idp_sso_request_binding\x18\x0b \x01(\x0e\x32\'.scalekit.v1.connections.RequestBindingB)\x92\x41&2\x17IDP SSO Request BindingJ\x0b\"HTTP_POST\"R\x14idpSsoRequestBinding\x12\x89\x01\n\x17idp_slo_request_binding\x18\x0c \x01(\x0e\x32\'.scalekit.v1.connections.RequestBindingB)\x92\x41&2\x17IDP SLO Request BindingJ\x0b\"HTTP_POST\"R\x14idpSloRequestBinding\x12\x93\x01\n\x13saml_signing_option\x18\r \x01(\x0e\x32+.scalekit.v1.connections.SAMLSigningOptionsB6\x92\x41\x33\x32\x13SAML Signing OptionJ\x1c\"SAML_ONLY_RESPONSE_SIGNING\"R\x11samlSigningOption\x12{\n\x19\x61llow_idp_initiated_login\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueB$\x92\x41!2\x19\x41llow IDP Initiated LoginJ\x04trueR\x16\x61llowIdpInitiatedLogin\x12S\n\x0b\x66orce_authn\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x16\x92\x41\x13\x32\x0b\x46orce AuthnJ\x04trueR\nforceAuthn\x12\x96\x01\n\x14\x64\x65\x66\x61ult_redirect_uri\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueBF\x92\x41\x43\x32\x14\x44\x65\x66\x61ult Redirect URIJ+\"https://yourapp.com/service/saml/redirect\"R\x12\x64\x65\x66\x61ultRedirectUri\x12k\n\x13\x61ssertion_encrypted\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1e\x92\x41\x1b\x32\x13\x41ssertion EncryptedJ\x04trueR\x12\x61ssertionEncrypted\x12j\n\x13want_request_signed\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1e\x92\x41\x1b\x32\x13Want Request SignedJ\x04trueR\x11wantRequestSigned\x12q\n\x0e\x63\x65rtificate_id\x18\x13 \x01(\x0b\x32\x1c.google.protobuf.StringValueB,\x92\x41)2\x0e\x43\x65rtificate IDJ\x17\"cer_35585423166144613\"R\rcertificateId\x12\x62\n\x10idp_slo_required\x18\x14 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1c\x92\x41\x19\x32\x11\x45nable IDP logoutJ\x04trueR\x0eidpSloRequired\x12\x96\x01\n\nsp_slo_url\x18\x15 \x01(\x0b\x32\x1c.google.protobuf.StringValueBZ\x92\x41T2\x18Service Provider SLO urlJ8\"https://yourapp.com/sso/v1/saml/conn_1234/slo/callback\"\xe0\x41\x03R\x08spSloUrl\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x16 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\x12\xba\x01\n!jit_provisioning_with_sso_enabled\x18\x17 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBT\x92\x41Q2IIndicates if Just In Time user provisioning is enabled for the connectionJ\x04trueR\x1djitProvisioningWithSsoEnabled\"\xbf\x03\n\x0eIDPCertificate\x12\x36\n\x0b\x63\x65rtificate\x18\x01 \x01(\tB\x14\x92\x41\x11\x32\x0fIDP CertificateR\x0b\x63\x65rtificate\x12s\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB6\x92\x41\x33\x32\x19\x43\x65rtificate Creation TimeJ\x16\"2021-09-01T00:00:00Z\"R\ncreateTime\x12q\n\x0b\x65xpiry_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB4\x92\x41\x31\x32\x17\x43\x65rtificate Expiry TimeJ\x16\"2021-09-01T00:00:00Z\"R\nexpiryTime\x12\x38\n\x02id\x18\x04 \x01(\tB(\x92\x41%2\x0e\x43\x65rtificate IDJ\x13\"cert_123123123123\"R\x02id\x12S\n\x06issuer\x18\x05 \x01(\tB;\x92\x41\x38\x32\x12\x43\x65rtificate IssuerJ\"\"https://youridp.com/service/saml\"R\x06issuer\"b\n\x16GetOIDCMetadataRequest\x12H\n\x08metadata\x18\x01 \x01(\x0b\x32,.scalekit.v1.connections.OIDCMetadataRequestR\x08metadata\"9\n\x13OIDCMetadataRequest\x12\"\n\x06issuer\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x06issuer\"\xd7\x01\n\x17GetOIDCMetadataResponse\x12\x16\n\x06issuer\x18\x01 \x01(\tR\x06issuer\x12\x35\n\x16\x61uthorization_endpoint\x18\x02 \x01(\tR\x15\x61uthorizationEndpoint\x12%\n\x0etoken_endpoint\x18\x03 \x01(\tR\rtokenEndpoint\x12+\n\x11userinfo_endpoint\x18\x04 \x01(\tR\x10userinfoEndpoint\x12\x19\n\x08jwks_uri\x18\x05 \x01(\tR\x07jwksUri\"b\n\x16GetSAMLMetadataRequest\x12H\n\x08metadata\x18\x01 \x01(\x0b\x32,.scalekit.v1.connections.SAMLMetadataRequestR\x08metadata\"D\n\x13SAMLMetadataRequest\x12-\n\x0cmetadata_url\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0bmetadataUrl\"\xb4\x02\n\x17GetSAMLMetadataResponse\x12\"\n\ridp_entity_id\x18\x01 \x01(\tR\x0bidpEntityId\x12\x1e\n\x0bidp_sso_url\x18\x02 \x01(\tR\tidpSsoUrl\x12\x1e\n\x0bidp_slo_url\x18\x03 \x01(\tR\tidpSloUrl\x12)\n\x10idp_certificates\x18\x04 \x03(\tR\x0fidpCertificates\x12+\n\x12idp_name_id_format\x18\x05 \x01(\tR\x0fidpNameIdFormat\x12\'\n\x0frequest_binding\x18\x06 \x01(\tR\x0erequestBinding\x12\x34\n\x16want_assertions_signed\x18\x07 \x01(\x08R\x14wantAssertionsSigned\"u\n GetSAMLCertificateDetailsRequest\x12Q\n\x0b\x63\x65rtificate\x18\x01 \x01(\x0b\x32/.scalekit.v1.connections.SAMLCertificateRequestR\x0b\x63\x65rtificate\"5\n\x16SAMLCertificateRequest\x12\x1b\n\x04text\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04text\"\xa5\x01\n!GetSAMLCertificateDetailsResponse\x12\x12\n\x04text\x18\x01 \x01(\tR\x04text\x12\x1b\n\tnot_after\x18\x02 \x01(\x03R\x08notAfter\x12\x1d\n\nnot_before\x18\x03 \x01(\x03R\tnotBefore\x12\x18\n\x07subject\x18\x04 \x01(\tR\x07subject\x12\x16\n\x06issuer\x18\x05 \x01(\tR\x06issuer\"\x86\x01\n\x1eGetConnectionTestResultRequest\x12,\n\rconnection_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0c\x63onnectionId\x12\x36\n\x0ftest_request_id\x18\x02 \x01(\tB\x0e\xbaH\x0br\t\x10\x01:\x05test_R\rtestRequestId\"\xbd\x02\n\x1fGetConnectionTestResultResponse\x12\x41\n\x06status\x18\x01 \x01(\x0e\x32).scalekit.v1.connections.TestResultStatusR\x06status\x12 \n\tuser_info\x18\x02 \x01(\tH\x00R\x08userInfo\x88\x01\x01\x12\x19\n\x05\x65rror\x18\x03 \x01(\tH\x01R\x05\x65rror\x88\x01\x01\x12\x30\n\x11\x65rror_description\x18\x04 \x01(\tH\x02R\x10\x65rrorDescription\x88\x01\x01\x12(\n\rerror_details\x18\x05 \x01(\tH\x03R\x0c\x65rrorDetails\x88\x01\x01\x42\x0c\n\n_user_infoB\x08\n\x06_errorB\x14\n\x12_error_descriptionB\x10\n\x0e_error_details\"\x1a\n\x18PasswordConnectionConfig\"9\n\x05\x46lags\x12\x19\n\x08is_login\x18\x01 \x01(\x08R\x07isLogin\x12\x15\n\x06is_app\x18\x02 \x01(\x08R\x05isApp\"\xaa\x03\n\x19ListAppConnectionsRequest\x12\x80\x01\n\tpage_size\x18\x01 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x02 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\x12U\n\x08provider\x18\x03 \x01(\tB4\x92\x41(2\x1e\x46ilter connections by providerJ\x06\"OKTA\"\xbaH\x06r\x04\x10\x01\x18\x32H\x00R\x08provider\x88\x01\x01\x42\x0b\n\t_provider\"\xea\x03\n\x1aListAppConnectionsResponse\x12\x81\x01\n\x0b\x63onnections\x18\x01 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB6\x92\x41\x33\x32\x31List of connections matching the request criteriaR\x0b\x63onnections\x12o\n\x0fnext_page_token\x18\x02 \x01(\tBG\x92\x41\x44\x32\"Token for the next page of resultsJ\x1e\"eyJwYWdlIjoyLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12s\n\x0fprev_page_token\x18\x03 \x01(\tBK\x92\x41H2&Token for the previous page of resultsJ\x1e\"eyJwYWdlIjoyLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12\x62\n\ntotal_size\x18\x04 \x01(\rBC\x92\x41@29Total number of connections matching the request criteriaJ\x03\x31\x30\x30R\ttotalSize*W\n\x11\x43odeChallengeType\x12#\n\x1f\x43ODE_CHALLENGE_TYPE_UNSPECIFIED\x10\x00\x12\x0b\n\x07NUMERIC\x10\x01\x12\x10\n\x0c\x41LPHANUMERIC\x10\x02*R\n\x11\x43onfigurationType\x12\"\n\x1e\x43ONFIGURATION_TYPE_UNSPECIFIED\x10\x00\x12\r\n\tDISCOVERY\x10\x01\x12\n\n\x06MANUAL\x10\x02*a\n\x0cNameIdFormat\x12\x16\n\x12NAME_ID_FORMAT_NIL\x10\x00\x12\x0f\n\x0bUNSPECIFIED\x10\x01\x12\t\n\x05\x45MAIL\x10\x02\x12\r\n\tTRANSIENT\x10\x03\x12\x0e\n\nPERSISTENT\x10\x04*U\n\x10PasswordlessType\x12 \n\x1cPasswordlessType_UNSPECIFIED\x10\x00\x12\x08\n\x04LINK\x10\x01\x12\x07\n\x03OTP\x10\x02\x12\x0c\n\x08LINK_OTP\x10\x03*9\n\x10TestResultStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0b\n\x07SUCCESS\x10\x01\x12\x0b\n\x07\x46\x41ILURE\x10\x02*\xd8\x01\n\x12SAMLSigningOptions\x12$\n SAML_SIGNING_OPTIONS_UNSPECIFIED\x10\x00\x12\x0e\n\nNO_SIGNING\x10\x01\x12\x1e\n\x1aSAML_ONLY_RESPONSE_SIGNING\x10\x02\x12\x1f\n\x1bSAML_ONLY_ASSERTION_SIGNING\x10\x03\x12#\n\x1fSAML_RESPONSE_ASSERTION_SIGNING\x10\x04\x12&\n\"SAML_RESPONSE_OR_ASSERTION_SIGNING\x10\x05*S\n\x0eRequestBinding\x12\x1f\n\x1bREQUEST_BINDING_UNSPECIFIED\x10\x00\x12\r\n\tHTTP_POST\x10\x01\x12\x11\n\rHTTP_REDIRECT\x10\x02*P\n\rTokenAuthType\x12\x1f\n\x1bTOKEN_AUTH_TYPE_UNSPECIFIED\x10\x00\x12\x0e\n\nURL_PARAMS\x10\x01\x12\x0e\n\nBASIC_AUTH\x10\x02*c\n\tOIDCScope\x12\x1a\n\x16OIDC_SCOPE_UNSPECIFIED\x10\x00\x12\n\n\x06openid\x10\x01\x12\x0b\n\x07profile\x10\x02\x12\t\n\x05\x65mail\x10\x03\x12\x0b\n\x07\x61\x64\x64ress\x10\x04\x12\t\n\x05phone\x10\x05*\x8e\x01\n\x0e\x43onnectionType\x12\x0b\n\x07INVALID\x10\x00\x12\x08\n\x04OIDC\x10\x01\x12\x08\n\x04SAML\x10\x02\x12\x0c\n\x08PASSWORD\x10\x03\x12\t\n\x05OAUTH\x10\x04\x12\x10\n\x0cPASSWORDLESS\x10\x05\x12\t\n\x05\x42\x41SIC\x10\x06\x12\n\n\x06\x42\x45\x41RER\x10\x07\x12\x0b\n\x07\x41PI_KEY\x10\x08\x12\x0c\n\x08WEBAUTHN\x10\t*`\n\x10\x43onnectionStatus\x12!\n\x1d\x43ONNECTION_STATUS_UNSPECIFIED\x10\x00\x12\t\n\x05\x44RAFT\x10\x01\x12\x0f\n\x0bIN_PROGRESS\x10\x02\x12\r\n\tCOMPLETED\x10\x03*\x98\x02\n\x12\x43onnectionProvider\x12#\n\x1f\x43ONNECTION_PROVIDER_UNSPECIFIED\x10\x00\x12\x08\n\x04OKTA\x10\x01\x12\n\n\x06GOOGLE\x10\x02\x12\x10\n\x0cMICROSOFT_AD\x10\x03\x12\t\n\x05\x41UTH0\x10\x04\x12\x0c\n\x08ONELOGIN\x10\x05\x12\x11\n\rPING_IDENTITY\x10\x06\x12\r\n\tJUMPCLOUD\x10\x07\x12\n\n\x06\x43USTOM\x10\x08\x12\n\n\x06GITHUB\x10\t\x12\n\n\x06GITLAB\x10\n\x12\x0c\n\x08LINKEDIN\x10\x0b\x12\x0e\n\nSALESFORCE\x10\x0c\x12\r\n\tMICROSOFT\x10\r\x12\x11\n\rIDP_SIMULATOR\x10\x0e\x12\x0c\n\x08SCALEKIT\x10\x0f\x12\x08\n\x04\x41\x44\x46S\x10\x10\x32\x92>\n\x11\x43onnectionService\x12\x91\x03\n\x1b\x43reateEnvironmentConnection\x12;.scalekit.v1.connections.CreateEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\"\x81\x02\x92\x41\xc1\x01\n\x0b\x43onnections\x12\x17\x43reate a new connection\x1a\x38\x45stablish a new connection for the specified environmentJ_\n\x03\x32\x30\x31\x12X\n\x1f\x43onnection created successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\"\x13/api/v1/connections:\nconnection\x12\xb3\x03\n\x10\x43reateConnection\x12\x30.scalekit.v1.connections.CreateConnectionRequest\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\"\xb9\x02\x92\x41\xc6\x01\n\x0b\x43onnections\x12\x17\x43reate a new connection\x1a=Establish a new SSO connection for the specified organizationJ_\n\x03\x32\x30\x31\x12X\n\x1f\x43onnection created successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x41\"3/api/v1/organizations/{organization_id}/connections:\nconnection\x12\xcd\x04\n\x19\x41ssignDomainsToConnection\x12\x39.scalekit.v1.connections.AssignDomainsToConnectionRequest\x1a:.scalekit.v1.connections.AssignDomainsToConnectionResponse\"\xb8\x03\x92\x41\xb6\x02\n\x0b\x43onnections\x12\x1e\x41ssign domains to a connection\x1a\x9e\x01\x41ssigns one or more domains to a specific connection within an organization. This allows the connection to be used for authentication on the specified domainsJf\n\x03\x32\x30\x30\x12_\n\x1d\x44omains assigned successfully\x12>\n<\x1a:.scalekit.v1.connections.AssignDomainsToConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02P\x1aK/api/v1/organizations/{organization_id}/connections/{connection_id}/domains:\x01*\x12\xb2\x03\n\x18GetEnvironmentConnection\x12\x38.scalekit.v1.connections.GetEnvironmentConnectionRequest\x1a..scalekit.v1.connections.GetConnectionResponse\"\xab\x02\x92\x41\xe7\x01\n\x0b\x43onnections\x12\x1bRetrieve connection details\x1aSObtain detailed information about a specific connection using its unique identifierJf\n\x03\x32\x30\x30\x12_\n)Successfully retrieved connection details\x12\x32\n0\x1a..scalekit.v1.connections.GetConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\x12#/api/v1/connections/{connection_id}\x12\xce\x04\n\rGetConnection\x12-.scalekit.v1.connections.GetConnectionRequest\x1a..scalekit.v1.connections.GetConnectionResponse\"\xdd\x03\x92\x41\x81\x03\n\x0b\x43onnections\x12\x16Get connection details\x1a\xd1\x01Retrieves the complete configuration and status details for a specific connection by its ID within an organization. Returns all connection properties including provider settings, protocols, and current status.J\x85\x01\n\x03\x32\x30\x30\x12~\nHSuccessfully retrieved connection details for the specified organization\x12\x32\n0\x1a..scalekit.v1.connections.GetConnectionResponse\x82\xb5\x18\x14\n\x10\x63onnections_read\x18t\x82\xd3\xe4\x93\x02:\x12\x38/api/v1/organizations/{organization_id}/connections/{id}\x12\xe4\x02\n\x0fListConnections\x12/.scalekit.v1.connections.ListConnectionsRequest\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\"\xed\x01\x92\x41\xb6\x01\n\x0b\x43onnections\x12\x10List connections\x1a\x32Retrieves a list of connections in the environmentJa\n\x03\x32\x30\x30\x12Z\n\"Successfully retrieved connections\x12\x34\n2\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\x82\xb5\x18\x14\n\x10\x63onnections_read\x18t\x82\xd3\xe4\x93\x02\x15\x12\x13/api/v1/connections\x12\xb5\x03\n\x1bListOrganizationConnections\x12;.scalekit.v1.connections.ListOrganizationConnectionsRequest\x1a<.scalekit.v1.connections.ListOrganizationConnectionsResponse\"\x9a\x02\x92\x41\xd6\x01\n\x0b\x43onnections\x12\x1dList organization connections\x1a\x39Retrieves a list of connections for all the organizationsJm\n\x03\x32\x30\x30\x12\x66\n\"Successfully retrieved connections\x12@\n>\x1a<.scalekit.v1.connections.ListOrganizationConnectionsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\x12#/api/v1/organizations/-/connections\x12\xcd\x03\n\x1dSearchOrganizationConnections\x12=.scalekit.v1.connections.SearchOrganizationConnectionsRequest\x1a>.scalekit.v1.connections.SearchOrganizationConnectionsResponse\"\xac\x02\x92\x41\xe1\x01\n\x0b\x43onnections\x12\x1fSearch organization connections\x1a\x44Search with query or filters provided and return list of connectionsJk\n\x03\x32\x30\x30\x12\x64\n\x1eSuccessfully found connections\x12\x42\n@\x1a>.scalekit.v1.connections.SearchOrganizationConnectionsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02,\x12*/api/v1/organizations/-/connections:search\x12\xf1\x02\n\x1bUpdateEnvironmentConnection\x12;.scalekit.v1.connections.UpdateEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\"\xe1\x01\x92\x41\x91\x01\n\x0b\x43onnections\x12\x13Update a connection\x1a\x17Update a SSO ConnectionJT\n\x03\x32\x30\x30\x12M\n\x14Updated Successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\x32#/api/v1/connections/{connection_id}:\nconnection\x12\x94\x03\n\x10UpdateConnection\x12\x30.scalekit.v1.connections.UpdateConnectionRequest\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\"\x9a\x02\x92\x41\xa2\x01\n\x0b\x43onnections\x12$Update a connection for organization\x1a\x17Update a SSO ConnectionJT\n\x03\x32\x30\x30\x12M\n\x14Updated Successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x46\x32\x38/api/v1/organizations/{organization_id}/connections/{id}:\nconnection\x12\x92\x02\n\x1b\x44\x65leteEnvironmentConnection\x12;.scalekit.v1.connections.DeleteEnvironmentConnectionRequest\x1a\x16.google.protobuf.Empty\"\x9d\x01\x92\x41Z\n\x0b\x43onnections\x12\x13\x44\x65lete a connection\x1a\x17\x44\x65lete a SSO ConnectionJ\x1d\n\x03\x32\x30\x30\x12\x16\n\x14\x44\x65leted Successfully\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%*#/api/v1/connections/{connection_id}\x12\xa2\x02\n\x10\x44\x65leteConnection\x12\x30.scalekit.v1.connections.DeleteConnectionRequest\x1a\x16.google.protobuf.Empty\"\xc3\x01\x92\x41k\n\x0b\x43onnections\x12$Delete a connection for organization\x1a\x17\x44\x65lete a SSO ConnectionJ\x1d\n\x03\x32\x30\x30\x12\x16\n\x14\x44\x65leted Successfully\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02:*8/api/v1/organizations/{organization_id}/connections/{id}\x12\xdf\x02\n\x1b\x45nableEnvironmentConnection\x12;.scalekit.v1.connections.ToggleEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xcf\x01\x92\x41\x84\x01\n\x0b\x43onnections\x12\x13\x45nable a connection\x1a\x17\x45nable a SSO ConnectionJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02,2*/api/v1/connections/{connection_id}:enable\x12\xdd\x04\n\x10\x45nableConnection\x12\x30.scalekit.v1.connections.ToggleConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xe3\x03\x92\x41\xff\x02\n\x0b\x43onnections\x12\x1e\x45nable organization connection\x1a\xee\x01\x41\x63tivate an existing connection for the specified organization. When enabled, users can authenticate using this connection. This endpoint changes the connection state from disabled to enabled without modifying other configuration settingsJ_\n\x03\x32\x30\x30\x12X\n\x1f\x43onnection enabled successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\x82\xd3\xe4\x93\x02\x41\x32?/api/v1/organizations/{organization_id}/connections/{id}:enable\x12\xe3\x02\n\x1c\x44isableEnvironmentConnection\x12;.scalekit.v1.connections.ToggleEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xd2\x01\x92\x41\x86\x01\n\x0b\x43onnections\x12\x14\x44isable a connection\x1a\x18\x44isable a SSO ConnectionJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02-2+/api/v1/connections/{connection_id}:disable\x12\xe7\x04\n\x11\x44isableConnection\x12\x30.scalekit.v1.connections.ToggleConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xec\x03\x92\x41\x87\x03\n\x0b\x43onnections\x12\x1f\x44isable organization connection\x1a\xf4\x01\x44\x65\x61\x63tivate an existing connection for the specified organization. When disabled, users cannot authenticate using this connection. This endpoint changes the connection state from enabled to disabled without modifying other configuration settingsJ`\n\x03\x32\x30\x30\x12Y\n Connection disabled successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\x82\xd3\xe4\x93\x02\x42\x32@/api/v1/organizations/{organization_id}/connections/{id}:disable\x12\x80\x03\n\x17GetConnectionTestResult\x12\x37.scalekit.v1.connections.GetConnectionTestResultRequest\x1a\x38.scalekit.v1.connections.GetConnectionTestResultResponse\"\xf1\x01\x92\x41\x8d\x01\n\x0b\x43onnections\x12\x16Test connection result\x1a\x16\x43onnection test resultJN\n\x03\x32\x30\x30\x12G\n\x07Success\x12<\n:\x1a\x38.scalekit.v1.connections.GetConnectionTestResultResponse\x82\xb5\x18\x02\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x45\x12\x43/api/v1/connections/{connection_id}/test-requests/{test_request_id}\x12\xf6\x02\n\x12ListAppConnections\x12\x32.scalekit.v1.connections.ListAppConnectionsRequest\x1a\x33.scalekit.v1.connections.ListAppConnectionsResponse\"\xf6\x01\x92\x41\xbe\x01\n\x0b\x43onnections\x12\x14List App connections\x1a\x36Retrieves a list of app connections in the environmentJa\n\x03\x32\x30\x30\x12Z\n\"Successfully retrieved connections\x12\x34\n2\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\x12\x17/api/v1/connections/app\x1a\x9a\x01\x92\x41\x96\x01\n\x0b\x43onnections\x12\x86\x01Manage enterprise connections for your Scalekit environment. This service provides endpoints for retrieving, and updating connections.B7Z5github.com/scalekit-inc/scalekit/pkg/grpc/connectionsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -149,7 +149,7 @@ _globals['_UPDATECONNECTION'].fields_by_name['webauthn_config']._loaded_options = None _globals['_UPDATECONNECTION'].fields_by_name['webauthn_config']._serialized_options = b'\222AT2RConfiguration details for WebAuthn (passkeys). Present only when type is WEBAUTHN.' _globals['_UPDATECONNECTION'].fields_by_name['key_id']._loaded_options = None - _globals['_UPDATECONNECTION'].fields_by_name['key_id']._serialized_options = b'\272H\007r\005\020\001\030\254\002' + _globals['_UPDATECONNECTION'].fields_by_name['key_id']._serialized_options = b'\272H\006r\004\020\001\030 ' _globals['_UPDATECONNECTION'].fields_by_name['provider_key']._loaded_options = None _globals['_UPDATECONNECTION'].fields_by_name['provider_key']._serialized_options = b'\222AO2CKey ID of the identity provider service that handles authenticationJ\010\"google\"' _globals['_UPDATECONNECTION']._loaded_options = None @@ -294,20 +294,6 @@ _globals['_OAUTHCONNECTIONCONFIG'].fields_by_name['custom_scope_name']._serialized_options = b'\222A!2\021Custom Scope NameJ\014\"user_scope\"' _globals['_OAUTHCONNECTIONCONFIG'].fields_by_name['sync_user_profile_on_login']._loaded_options = None _globals['_OAUTHCONNECTIONCONFIG'].fields_by_name['sync_user_profile_on_login']._serialized_options = b'\222Ak2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\004true' - _globals['_OAUTHCONNECTIONCONFIG'].fields_by_name['token_access_type']._loaded_options = None - _globals['_OAUTHCONNECTIONCONFIG'].fields_by_name['token_access_type']._serialized_options = b'\222A\0362\021Token Access TypeJ\t\"offline\"' - _globals['_OAUTHCONNECTIONCONFIG'].fields_by_name['tenant_id']._loaded_options = None - _globals['_OAUTHCONNECTIONCONFIG'].fields_by_name['tenant_id']._serialized_options = b'\222A\304\0012\231\001Microsoft Entra tenant ID. Required when using a single-tenant or multi-tenant app registered in Microsoft Entra. Leave empty to use the common endpoint.J&\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"' - _globals['_OAUTHCONNECTIONCONFIG'].fields_by_name['is_cimd']._loaded_options = None - _globals['_OAUTHCONNECTIONCONFIG'].fields_by_name['is_cimd']._serialized_options = b'\222A\212\0012\201\001Indicates whether this connection was registered using Client ID Metadata Document (CIMD) instead of Dynamic Client Registration.J\004true\340A\003' - _globals['_OAUTHCONNECTIONCONFIG'].fields_by_name['app_name']._loaded_options = None - _globals['_OAUTHCONNECTIONCONFIG'].fields_by_name['app_name']._serialized_options = b'\222A\200\0012mApplication name used by providers that require it as an authorize query parameter (e.g., Trello\'s app_name).J\017\"My Trello App\"' - _globals['_OAUTHCONNECTIONCONFIG'].fields_by_name['optional_scopes']._loaded_options = None - _globals['_OAUTHCONNECTIONCONFIG'].fields_by_name['optional_scopes']._serialized_options = b'\222A\236\0012\233\001Optional scopes configuration for identity providers that support or require additional scopes to be sent in a custom field during authentication requests.' - _globals['_OPTIONALSCOPES'].fields_by_name['scopes']._loaded_options = None - _globals['_OPTIONALSCOPES'].fields_by_name['scopes']._serialized_options = b'\222A[2CList of optional scopes that can be requested during authenticationJ\024[\"scope1\", \"scope2\"]' - _globals['_OPTIONALSCOPES'].fields_by_name['field_name']._loaded_options = None - _globals['_OPTIONALSCOPES'].fields_by_name['field_name']._serialized_options = b'\222A\367\0012\325\001Name of the field in which scope should be sent in the authentication request. This is required by some identity providers that expect scopes to be sent in a custom field instead of the standard \'scope\' parameter.J\035\"optional_scope or bot_scope\"' _globals['_PASSWORDLESSCONFIG'].fields_by_name['type']._loaded_options = None _globals['_PASSWORDLESSCONFIG'].fields_by_name['type']._serialized_options = b'\222A\0332\021Passwordless TypeJ\006\"LINK\"' _globals['_PASSWORDLESSCONFIG'].fields_by_name['frequency']._loaded_options = None @@ -484,14 +470,6 @@ _globals['_LISTAPPCONNECTIONSRESPONSE'].fields_by_name['prev_page_token']._serialized_options = b'\222AH2&Token for the previous page of resultsJ\036\"eyJwYWdlIjoyLCJsaW1pdCI6MzB9\"' _globals['_LISTAPPCONNECTIONSRESPONSE'].fields_by_name['total_size']._loaded_options = None _globals['_LISTAPPCONNECTIONSRESPONSE'].fields_by_name['total_size']._serialized_options = b'\222A@29Total number of connections matching the request criteriaJ\003100' - _globals['_GETCONNECTIONCONTEXTREQUEST'].fields_by_name['connection_id']._loaded_options = None - _globals['_GETCONNECTIONCONTEXTREQUEST'].fields_by_name['connection_id']._serialized_options = b'\272H\020r\013\020\001\030 :\005conn_\310\001\001' - _globals['_GETCONNECTIONCONTEXTREQUEST'].fields_by_name['organization_id']._loaded_options = None - _globals['_GETCONNECTIONCONTEXTREQUEST'].fields_by_name['organization_id']._serialized_options = b'\272H\006r\004\020\000\030 ' - _globals['_UPDATECONNECTIONCONTEXTREQUEST'].fields_by_name['connection_id']._loaded_options = None - _globals['_UPDATECONNECTIONCONTEXTREQUEST'].fields_by_name['connection_id']._serialized_options = b'\272H\020r\013\020\001\030 :\005conn_\310\001\001' - _globals['_UPDATECONNECTIONCONTEXTREQUEST'].fields_by_name['organization_id']._loaded_options = None - _globals['_UPDATECONNECTIONCONTEXTREQUEST'].fields_by_name['organization_id']._serialized_options = b'\272H\006r\004\020\000\030 ' _globals['_CONNECTIONSERVICE']._loaded_options = None _globals['_CONNECTIONSERVICE']._serialized_options = b'\222A\226\001\n\013Connections\022\206\001Manage enterprise connections for your Scalekit environment. This service provides endpoints for retrieving, and updating connections.' _globals['_CONNECTIONSERVICE'].methods_by_name['CreateEnvironmentConnection']._loaded_options = None @@ -501,9 +479,9 @@ _globals['_CONNECTIONSERVICE'].methods_by_name['AssignDomainsToConnection']._loaded_options = None _globals['_CONNECTIONSERVICE'].methods_by_name['AssignDomainsToConnection']._serialized_options = b'\222A\266\002\n\013Connections\022\036Assign domains to a connection\032\236\001Assigns one or more domains to a specific connection within an organization. This allows the connection to be used for authentication on the specified domainsJf\n\003200\022_\n\035Domains assigned successfully\022>\n<\032:.scalekit.v1.connections.AssignDomainsToConnectionResponse\202\265\030\025\n\021connections_write\030t\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002P\032K/api/v1/organizations/{organization_id}/connections/{connection_id}/domains:\001*' _globals['_CONNECTIONSERVICE'].methods_by_name['GetEnvironmentConnection']._loaded_options = None - _globals['_CONNECTIONSERVICE'].methods_by_name['GetEnvironmentConnection']._serialized_options = b'\222A\347\001\n\013Connections\022\033Retrieve connection details\032SObtain detailed information about a specific connection using its unique identifierJf\n\003200\022_\n)Successfully retrieved connection details\0222\n0\032..scalekit.v1.connections.GetConnectionResponse\202\265\030\003\030\304\001\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002%\022#/api/v1/connections/{connection_id}' + _globals['_CONNECTIONSERVICE'].methods_by_name['GetEnvironmentConnection']._serialized_options = b'\222A\347\001\n\013Connections\022\033Retrieve connection details\032SObtain detailed information about a specific connection using its unique identifierJf\n\003200\022_\n)Successfully retrieved connection details\0222\n0\032..scalekit.v1.connections.GetConnectionResponse\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002%\022#/api/v1/connections/{connection_id}' _globals['_CONNECTIONSERVICE'].methods_by_name['GetConnection']._loaded_options = None - _globals['_CONNECTIONSERVICE'].methods_by_name['GetConnection']._serialized_options = b'\222A\201\003\n\013Connections\022\026Get connection details\032\321\001Retrieves the complete configuration and status details for a specific connection by its ID within an organization. Returns all connection properties including provider settings, protocols, and current status.J\205\001\n\003200\022~\nHSuccessfully retrieved connection details for the specified organization\0222\n0\032..scalekit.v1.connections.GetConnectionResponse\202\265\030\025\n\020connections_read\030\364\001\202\323\344\223\002:\0228/api/v1/organizations/{organization_id}/connections/{id}' + _globals['_CONNECTIONSERVICE'].methods_by_name['GetConnection']._serialized_options = b'\222A\201\003\n\013Connections\022\026Get connection details\032\321\001Retrieves the complete configuration and status details for a specific connection by its ID within an organization. Returns all connection properties including provider settings, protocols, and current status.J\205\001\n\003200\022~\nHSuccessfully retrieved connection details for the specified organization\0222\n0\032..scalekit.v1.connections.GetConnectionResponse\202\265\030\024\n\020connections_read\030t\202\323\344\223\002:\0228/api/v1/organizations/{organization_id}/connections/{id}' _globals['_CONNECTIONSERVICE'].methods_by_name['ListConnections']._loaded_options = None _globals['_CONNECTIONSERVICE'].methods_by_name['ListConnections']._serialized_options = b'\222A\266\001\n\013Connections\022\020List connections\0322Retrieves a list of connections in the environmentJa\n\003200\022Z\n\"Successfully retrieved connections\0224\n2\0320.scalekit.v1.connections.ListConnectionsResponse\202\265\030\024\n\020connections_read\030t\202\323\344\223\002\025\022\023/api/v1/connections' _globals['_CONNECTIONSERVICE'].methods_by_name['ListOrganizationConnections']._loaded_options = None @@ -517,47 +495,43 @@ _globals['_CONNECTIONSERVICE'].methods_by_name['DeleteEnvironmentConnection']._loaded_options = None _globals['_CONNECTIONSERVICE'].methods_by_name['DeleteEnvironmentConnection']._serialized_options = b'\222AZ\n\013Connections\022\023Delete a connection\032\027Delete a SSO ConnectionJ\035\n\003200\022\026\n\024Deleted Successfully\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002%*#/api/v1/connections/{connection_id}' _globals['_CONNECTIONSERVICE'].methods_by_name['DeleteConnection']._loaded_options = None - _globals['_CONNECTIONSERVICE'].methods_by_name['DeleteConnection']._serialized_options = b'\222A\316\002\n\013Connections\022\025Delete SSO connection\032\371\001Deletes an SSO connection from the specified organization by connection ID. Use this endpoint when an identity provider integration is no longer needed for the organization. Returns an empty response after the SSO connection is deleted successfully.J,\n\003200\022%\n#SSO connection deleted successfully\202\265\030\002\030d\202\323\344\223\002:*8/api/v1/organizations/{organization_id}/connections/{id}' + _globals['_CONNECTIONSERVICE'].methods_by_name['DeleteConnection']._serialized_options = b'\222Ak\n\013Connections\022$Delete a connection for organization\032\027Delete a SSO ConnectionJ\035\n\003200\022\026\n\024Deleted Successfully\202\265\030\002\030d\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002:*8/api/v1/organizations/{organization_id}/connections/{id}' _globals['_CONNECTIONSERVICE'].methods_by_name['EnableEnvironmentConnection']._loaded_options = None _globals['_CONNECTIONSERVICE'].methods_by_name['EnableEnvironmentConnection']._serialized_options = b'\222A\204\001\n\013Connections\022\023Enable a connection\032\027Enable a SSO ConnectionJG\n\003200\022@\n\007Success\0225\n3\0321.scalekit.v1.connections.ToggleConnectionResponse\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002,2*/api/v1/connections/{connection_id}:enable' _globals['_CONNECTIONSERVICE'].methods_by_name['EnableConnection']._loaded_options = None - _globals['_CONNECTIONSERVICE'].methods_by_name['EnableConnection']._serialized_options = b'\222A\366\002\n\013Connections\022\025Enable SSO connection\032\356\001Activate an existing connection for the specified organization. When enabled, users can authenticate using this connection. This endpoint changes the connection state from disabled to enabled without modifying other configuration settingsJ_\n\003200\022X\n\037Connection enabled successfully\0225\n3\0321.scalekit.v1.connections.ToggleConnectionResponse\202\265\030\025\n\021connections_write\030t\202\323\344\223\002A2?/api/v1/organizations/{organization_id}/connections/{id}:enable' + _globals['_CONNECTIONSERVICE'].methods_by_name['EnableConnection']._serialized_options = b'\222A\377\002\n\013Connections\022\036Enable organization connection\032\356\001Activate an existing connection for the specified organization. When enabled, users can authenticate using this connection. This endpoint changes the connection state from disabled to enabled without modifying other configuration settingsJ_\n\003200\022X\n\037Connection enabled successfully\0225\n3\0321.scalekit.v1.connections.ToggleConnectionResponse\202\265\030\025\n\021connections_write\030t\202\323\344\223\002A2?/api/v1/organizations/{organization_id}/connections/{id}:enable' _globals['_CONNECTIONSERVICE'].methods_by_name['DisableEnvironmentConnection']._loaded_options = None _globals['_CONNECTIONSERVICE'].methods_by_name['DisableEnvironmentConnection']._serialized_options = b'\222A\206\001\n\013Connections\022\024Disable a connection\032\030Disable a SSO ConnectionJG\n\003200\022@\n\007Success\0225\n3\0321.scalekit.v1.connections.ToggleConnectionResponse\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002-2+/api/v1/connections/{connection_id}:disable' _globals['_CONNECTIONSERVICE'].methods_by_name['DisableConnection']._loaded_options = None - _globals['_CONNECTIONSERVICE'].methods_by_name['DisableConnection']._serialized_options = b'\222A\376\002\n\013Connections\022\026Disable SSO connection\032\364\001Deactivate an existing connection for the specified organization. When disabled, users cannot authenticate using this connection. This endpoint changes the connection state from enabled to disabled without modifying other configuration settingsJ`\n\003200\022Y\n Connection disabled successfully\0225\n3\0321.scalekit.v1.connections.ToggleConnectionResponse\202\265\030\025\n\021connections_write\030t\202\323\344\223\002B2@/api/v1/organizations/{organization_id}/connections/{id}:disable' + _globals['_CONNECTIONSERVICE'].methods_by_name['DisableConnection']._serialized_options = b'\222A\207\003\n\013Connections\022\037Disable organization connection\032\364\001Deactivate an existing connection for the specified organization. When disabled, users cannot authenticate using this connection. This endpoint changes the connection state from enabled to disabled without modifying other configuration settingsJ`\n\003200\022Y\n Connection disabled successfully\0225\n3\0321.scalekit.v1.connections.ToggleConnectionResponse\202\265\030\025\n\021connections_write\030t\202\323\344\223\002B2@/api/v1/organizations/{organization_id}/connections/{id}:disable' _globals['_CONNECTIONSERVICE'].methods_by_name['GetConnectionTestResult']._loaded_options = None _globals['_CONNECTIONSERVICE'].methods_by_name['GetConnectionTestResult']._serialized_options = b'\222A\215\001\n\013Connections\022\026Test connection result\032\026Connection test resultJN\n\003200\022G\n\007Success\022<\n:\0328.scalekit.v1.connections.GetConnectionTestResultResponse\202\265\030\002\030t\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002E\022C/api/v1/connections/{connection_id}/test-requests/{test_request_id}' _globals['_CONNECTIONSERVICE'].methods_by_name['ListAppConnections']._loaded_options = None _globals['_CONNECTIONSERVICE'].methods_by_name['ListAppConnections']._serialized_options = b'\222A\276\001\n\013Connections\022\024List App connections\0326Retrieves a list of app connections in the environmentJa\n\003200\022Z\n\"Successfully retrieved connections\0224\n2\0320.scalekit.v1.connections.ListConnectionsResponse\202\265\030\002\030d\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\031\022\027/api/v1/connections/app' - _globals['_CONNECTIONSERVICE'].methods_by_name['GetConnectionContext']._loaded_options = None - _globals['_CONNECTIONSERVICE'].methods_by_name['GetConnectionContext']._serialized_options = b'\222A\255\001\n\013Connections\022\026Get connection context\032 None: ... class OAuthConnectionConfig(_message.Message): - __slots__ = ("authorize_uri", "token_uri", "user_info_uri", "client_id", "client_secret", "scopes", "redirect_uri", "pkce_enabled", "prompt", "use_platform_creds", "access_type", "custom_scope_name", "sync_user_profile_on_login", "token_access_type", "tenant_id", "is_cimd", "app_name", "optional_scopes") + __slots__ = ("authorize_uri", "token_uri", "user_info_uri", "client_id", "client_secret", "scopes", "redirect_uri", "pkce_enabled", "prompt", "use_platform_creds", "access_type", "custom_scope_name", "sync_user_profile_on_login") AUTHORIZE_URI_FIELD_NUMBER: _ClassVar[int] TOKEN_URI_FIELD_NUMBER: _ClassVar[int] USER_INFO_URI_FIELD_NUMBER: _ClassVar[int] @@ -585,11 +581,6 @@ class OAuthConnectionConfig(_message.Message): ACCESS_TYPE_FIELD_NUMBER: _ClassVar[int] CUSTOM_SCOPE_NAME_FIELD_NUMBER: _ClassVar[int] SYNC_USER_PROFILE_ON_LOGIN_FIELD_NUMBER: _ClassVar[int] - TOKEN_ACCESS_TYPE_FIELD_NUMBER: _ClassVar[int] - TENANT_ID_FIELD_NUMBER: _ClassVar[int] - IS_CIMD_FIELD_NUMBER: _ClassVar[int] - APP_NAME_FIELD_NUMBER: _ClassVar[int] - OPTIONAL_SCOPES_FIELD_NUMBER: _ClassVar[int] authorize_uri: _wrappers_pb2.StringValue token_uri: _wrappers_pb2.StringValue user_info_uri: _wrappers_pb2.StringValue @@ -603,20 +594,7 @@ class OAuthConnectionConfig(_message.Message): access_type: _wrappers_pb2.StringValue custom_scope_name: _wrappers_pb2.StringValue sync_user_profile_on_login: _wrappers_pb2.BoolValue - token_access_type: _wrappers_pb2.StringValue - tenant_id: _wrappers_pb2.StringValue - is_cimd: _wrappers_pb2.BoolValue - app_name: _wrappers_pb2.StringValue - optional_scopes: OptionalScopes - def __init__(self, authorize_uri: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., token_uri: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., user_info_uri: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., client_id: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., client_secret: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., scopes: _Optional[_Iterable[str]] = ..., redirect_uri: _Optional[str] = ..., pkce_enabled: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., prompt: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., use_platform_creds: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., access_type: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., custom_scope_name: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., sync_user_profile_on_login: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., token_access_type: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., tenant_id: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., is_cimd: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., app_name: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., optional_scopes: _Optional[_Union[OptionalScopes, _Mapping]] = ...) -> None: ... - -class OptionalScopes(_message.Message): - __slots__ = ("scopes", "field_name") - SCOPES_FIELD_NUMBER: _ClassVar[int] - FIELD_NAME_FIELD_NUMBER: _ClassVar[int] - scopes: _containers.RepeatedScalarFieldContainer[str] - field_name: str - def __init__(self, scopes: _Optional[_Iterable[str]] = ..., field_name: _Optional[str] = ...) -> None: ... + def __init__(self, authorize_uri: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., token_uri: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., user_info_uri: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., client_id: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., client_secret: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., scopes: _Optional[_Iterable[str]] = ..., redirect_uri: _Optional[str] = ..., pkce_enabled: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., prompt: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., use_platform_creds: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., access_type: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., custom_scope_name: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., sync_user_profile_on_login: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ...) -> None: ... class PasswordLessConfig(_message.Message): __slots__ = ("type", "frequency", "validity", "enforce_same_browser_origin", "code_challenge_length", "code_challenge_type", "regenerate_passwordless_credentials_on_resend") @@ -958,27 +936,3 @@ class ListAppConnectionsResponse(_message.Message): prev_page_token: str total_size: int def __init__(self, connections: _Optional[_Iterable[_Union[ListConnection, _Mapping]]] = ..., next_page_token: _Optional[str] = ..., prev_page_token: _Optional[str] = ..., total_size: _Optional[int] = ...) -> None: ... - -class GetConnectionContextRequest(_message.Message): - __slots__ = ("connection_id", "organization_id") - CONNECTION_ID_FIELD_NUMBER: _ClassVar[int] - ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] - connection_id: str - organization_id: str - def __init__(self, connection_id: _Optional[str] = ..., organization_id: _Optional[str] = ...) -> None: ... - -class GetConnectionContextResponse(_message.Message): - __slots__ = ("context",) - CONTEXT_FIELD_NUMBER: _ClassVar[int] - context: _struct_pb2.Struct - def __init__(self, context: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... - -class UpdateConnectionContextRequest(_message.Message): - __slots__ = ("connection_id", "organization_id", "context") - CONNECTION_ID_FIELD_NUMBER: _ClassVar[int] - ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] - CONTEXT_FIELD_NUMBER: _ClassVar[int] - connection_id: str - organization_id: str - context: _struct_pb2.Struct - def __init__(self, connection_id: _Optional[str] = ..., organization_id: _Optional[str] = ..., context: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... diff --git a/scalekit/v1/connections/connections_pb2_grpc.py b/scalekit/v1/connections/connections_pb2_grpc.py index feede75..ba04339 100644 --- a/scalekit/v1/connections/connections_pb2_grpc.py +++ b/scalekit/v1/connections/connections_pb2_grpc.py @@ -105,16 +105,6 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.ListAppConnectionsRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.ListAppConnectionsResponse.FromString, ) - self.GetConnectionContext = channel.unary_unary( - '/scalekit.v1.connections.ConnectionService/GetConnectionContext', - request_serializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.GetConnectionContextRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.GetConnectionContextResponse.FromString, - ) - self.UpdateConnectionContext = channel.unary_unary( - '/scalekit.v1.connections.ConnectionService/UpdateConnectionContext', - request_serializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.UpdateConnectionContextRequest.SerializeToString, - response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - ) class ConnectionServiceServicer(object): @@ -228,18 +218,6 @@ def ListAppConnections(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') - def GetConnectionContext(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def UpdateConnectionContext(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - def add_ConnectionServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -333,16 +311,6 @@ def add_ConnectionServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.ListAppConnectionsRequest.FromString, response_serializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.ListAppConnectionsResponse.SerializeToString, ), - 'GetConnectionContext': grpc.unary_unary_rpc_method_handler( - servicer.GetConnectionContext, - request_deserializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.GetConnectionContextRequest.FromString, - response_serializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.GetConnectionContextResponse.SerializeToString, - ), - 'UpdateConnectionContext': grpc.unary_unary_rpc_method_handler( - servicer.UpdateConnectionContext, - request_deserializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.UpdateConnectionContextRequest.FromString, - response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, - ), } generic_handler = grpc.method_handlers_generic_handler( 'scalekit.v1.connections.ConnectionService', rpc_method_handlers) @@ -658,37 +626,3 @@ def ListAppConnections(request, scalekit_dot_v1_dot_connections_dot_connections__pb2.ListAppConnectionsResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - @staticmethod - def GetConnectionContext(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.connections.ConnectionService/GetConnectionContext', - scalekit_dot_v1_dot_connections_dot_connections__pb2.GetConnectionContextRequest.SerializeToString, - scalekit_dot_v1_dot_connections_dot_connections__pb2.GetConnectionContextResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - @staticmethod - def UpdateConnectionContext(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.connections.ConnectionService/UpdateConnectionContext', - scalekit_dot_v1_dot_connections_dot_connections__pb2.UpdateConnectionContextRequest.SerializeToString, - google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/directories/directories_pb2.py b/scalekit/v1/directories/directories_pb2.py index 3853f1f..9ea60be 100644 --- a/scalekit/v1/directories/directories_pb2.py +++ b/scalekit/v1/directories/directories_pb2.py @@ -25,7 +25,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n)scalekit/v1/directories/directories.proto\x12\x17scalekit.v1.directories\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"\xdb\x01\n\x13GetDirectoryRequest\x12S\n\x02id\x18\x01 \x01(\tBC\x92\x41\x37\x32\"Unique identifier of the directoryJ\x11\"dir_12131243412\"\xbaH\x06r\x04\x10\x01\x18 R\x02id\x12o\n\x0forganization_id\x18\x02 \x01(\tBF\x92\x41:2%Unique identifier of the organizationJ\x11\"org_12131243412\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\"\x91\x01\n\x14GetDirectoryResponse\x12y\n\tdirectory\x18\x01 \x01(\x0b\x32\".scalekit.v1.directories.DirectoryB7\x92\x41\x34\x32\x32\x44\x65tailed information about the requested directoryR\tdirectory\"\xf7\x01\n\x16\x43reateDirectoryRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41?2$Unique identifier to an OrganizationJ\x17\"org_12362474900684814\"\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x0eorganizationId\x12\x64\n\tdirectory\x18\x02 \x01(\x0b\x32(.scalekit.v1.directories.CreateDirectoryB\x1c\x92\x41\x13\x32\x11\x44irectory Details\xbaH\x03\xc8\x01\x01R\tdirectory\"\xf7\x01\n\x0f\x43reateDirectory\x12k\n\x0e\x64irectory_type\x18\x01 \x01(\x0e\x32&.scalekit.v1.directories.DirectoryTypeB\x1c\x92\x41\x0e\x32\x04TypeJ\x06\"SCIM\"\xbaH\x08\x82\x01\x02\x10\x01\xc8\x01\x01R\rdirectoryType\x12w\n\x12\x64irectory_provider\x18\x02 \x01(\x0e\x32*.scalekit.v1.directories.DirectoryProviderB\x1c\x92\x41\x11\x32\x07ProvideJ\x06\"OKTA\"\xbaH\x05\x82\x01\x02\x10\x01R\x11\x64irectoryProvider\"y\n\x17\x43reateDirectoryResponse\x12^\n\tdirectory\x18\x01 \x01(\x0b\x32\".scalekit.v1.directories.DirectoryB\x1c\x92\x41\x13\x32\x11\x44irectory Details\xbaH\x03\xc8\x01\x01R\tdirectory\"\xd9\x01\n\x16UpdateDirectoryRequest\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02id\x12\x38\n\x0forganization_id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x64\n\tdirectory\x18\x03 \x01(\x0b\x32(.scalekit.v1.directories.UpdateDirectoryB\x1c\x92\x41\x13\x32\x11\x44irectory Details\xbaH\x03\xc8\x01\x01R\tdirectory\"\x9a\x06\n\x0fUpdateDirectory\x12\x33\n\x04name\x18\x02 \x01(\tB\x1f\x92\x41\x12\x32\x04NameJ\n\"Azure AD\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x04name\x12h\n\x0e\x64irectory_type\x18\x03 \x01(\x0e\x32&.scalekit.v1.directories.DirectoryTypeB\x19\x92\x41\x0e\x32\x04TypeJ\x06\"SCIM\"\xbaH\x05\x82\x01\x02\x10\x01R\rdirectoryType\x12+\n\x07\x65nabled\x18\x07 \x01(\x08\x42\x11\x92\x41\x0e\x32\x06StatusJ\x04trueR\x07\x65nabled\x12\xec\x01\n\x12\x64irectory_provider\x18\x08 \x01(\x0e\x32*.scalekit.v1.directories.DirectoryProviderB\x90\x01\x92\x41\x84\x01\x32-Identity provider connected to this directoryJS\"OKTA\", \"GOOGLE\", \"MICROSOFT_AD\", \"AUTH0\", \"ONELOGIN\", \"JUMPCLOUD\", \"PING_IDENTITY\"\xbaH\x05\x82\x01\x02\x10\x01R\x11\x64irectoryProvider\x12h\n\x06status\x18\t \x01(\x0e\x32(.scalekit.v1.directories.DirectoryStatusB&\x92\x41\x1b\x32\x0cSetup StatusJ\x0b\"COMPLETED\"\xbaH\x05\x82\x01\x02\x10\x01R\x06status\x12\x45\n\x08mappings\x18\n \x03(\x0b\x32).scalekit.v1.directories.DirectoryMappingR\x08mappings\x12q\n\x06groups\x18\x0f \x03(\x0b\x32&.scalekit.v1.directories.ExternalGroupB1\x92\x41.2,List of groups associated with the directoryR\x06groupsJ\x04\x08\x01\x10\x02J\x04\x08\x04\x10\x05J\x04\x08\x06\x10\x07J\x04\x08\x0b\x10\x0cJ\x04\x08\x0c\x10\rJ\x04\x08\r\x10\x0eJ\x04\x08\x0e\x10\x0f\"y\n\x17UpdateDirectoryResponse\x12^\n\tdirectory\x18\x01 \x01(\x0b\x32\".scalekit.v1.directories.DirectoryB\x1c\x92\x41\x13\x32\x11\x44irectory Details\xbaH\x03\xc8\x01\x01R\tdirectory\"\xdf\x01\n\x1f\x41ssignGroupsForDirectoryRequest\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02id\x12\x38\n\x0forganization_id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x61\n\x0c\x65xternal_ids\x18\x03 \x03(\tB>\x92\x41\x35\x32\x33\x65xternal_ids of groups to be tracked during polling\xbaH\x03\xc8\x01\x01R\x0b\x65xternalIds\"\x92\x01\n\x16ListDirectoriesRequest\x12x\n\x0forganization_id\x18\x01 \x01(\tBO\x92\x41=2%Unique identifier of the organizationJ\x14\"org_12362474900684\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\"\xa1\x01\n\x17ListDirectoriesResponse\x12\x85\x01\n\x0b\x64irectories\x18\x01 \x03(\x0b\x32\".scalekit.v1.directories.DirectoryB?\x92\x41\x36\x32\x34List of directories associated with the organization\xbaH\x03\xc8\x01\x01R\x0b\x64irectories\"\xd6\t\n\x19ListDirectoryUsersRequest\x12x\n\x0forganization_id\x18\x01 \x01(\tBO\x92\x41=2%Unique identifier of the organizationJ\x14\"org_12131243412331\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x87\x01\n\x0c\x64irectory_id\x18\x02 \x01(\tBd\x92\x41R2:Unique identifier of the directory within the organizationJ\x14\"dir_12131243412331\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\x12\x86\x01\n\tpage_size\x18\x03 \x01(\rBi\x92\x41_2YNumber of users to return per page. Maximum value is 30. If not specified, defaults to 10J\x02\x31\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xb0\x01\n\npage_token\x18\x04 \x01(\tB\x90\x01\x92\x41\x8c\x01\x32\x89\x01Token for pagination. Use the value returned in the \'next_page_token\' field of the previous response to retrieve the next page of resultsR\tpageToken\x12\xe1\x01\n\x0einclude_detail\x18\x05 \x01(\x08\x42\xb4\x01\x92\x41\xb0\x01\x32\xa7\x01If set to true, the response will include the full user payload with all available details. If false or not specified, only essential user information will be returnedJ\x04trueH\x00R\rincludeDetail\x88\x01\x01\x12\xa1\x01\n\x12\x64irectory_group_id\x18\x06 \x01(\tBn\x92\x41W2>Filter users by their membership in a specific directory groupJ\x15\"dirgroup_1213124341\"\xbaH\x11r\x0f\x10\x01\x18%:\tdirgroup_H\x01R\x10\x64irectoryGroupId\x88\x01\x01\x12\xb4\x01\n\rupdated_after\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampBn\x92\x41k2QFilter users that were updated after the specified timestamp. Use ISO 8601 formatJ\x16\"2021-01-01T00:00:00Z\"H\x02R\x0cupdatedAfter\x88\x01\x01\x42\x11\n\x0f_include_detailB\x15\n\x13_directory_group_idB\x10\n\x0e_updated_after\"\xe1\x04\n\x1aListDirectoryUsersResponse\x12\x81\x01\n\x05users\x18\x01 \x03(\x0b\x32&.scalekit.v1.directories.DirectoryUserBC\x92\x41@2>List of directory users retrieved from the specified directoryR\x05users\x12t\n\ntotal_size\x18\x02 \x01(\rBU\x92\x41R2PTotal number of users available in the directory that match the request criteriaR\ttotalSize\x12\xa5\x01\n\x0fnext_page_token\x18\x03 \x01(\tB}\x92\x41z2xToken for pagination. Use this token in the \'page_token\' field of the next request to fetch the subsequent page of usersR\rnextPageToken\x12\xa0\x01\n\x0fprev_page_token\x18\x04 \x01(\tBx\x92\x41u2sToken for pagination. Use this token in the \'page_token\' field of the next request to fetch the prior page of usersR\rprevPageToken\"\xb6\x08\n\x1aListDirectoryGroupsRequest\x12y\n\x0forganization_id\x18\x01 \x01(\tBP\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12p\n\x0c\x64irectory_id\x18\x02 \x01(\tBM\x92\x41;2\"Unique identifier of the directoryJ\x15\"dir_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\x12\x87\x01\n\tpage_size\x18\x03 \x01(\rBj\x92\x41`2ZNumber of groups to return per page. Maximum value is 30. If not specified, defaults to 10J\x02\x31\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\x88\x01\n\npage_token\x18\x04 \x01(\tBi\x92\x41\x66\x32\x64Token for pagination. Use the value returned in the \'next_page_token\' field of the previous responseR\tpageToken\x12\xa2\x01\n\rupdated_after\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\\\x92\x41Y2?Filter groups updated after this timestamp. Use ISO 8601 formatJ\x16\"2021-01-01T00:00:00Z\"H\x00R\x0cupdatedAfter\x88\x01\x01\x12\x96\x01\n\x0einclude_detail\x18\x06 \x01(\x08\x42j\x92\x41g2_If true, includes full group details. If false or not specified, returns basic information onlyJ\x04trueH\x01R\rincludeDetail\x88\x01\x01\x12\x96\x01\n\x17include_external_groups\x18\x07 \x01(\x08\x42Y\x92\x41V2NIf true, returns group and its details from external provider (default: false)J\x04trueH\x02R\x15includeExternalGroups\x88\x01\x01\x42\x10\n\x0e_updated_afterB\x11\n\x0f_include_detailB\x1a\n\x18_include_external_groups\"\xcd\x04\n\x1bListDirectoryGroupsResponse\x12\x85\x01\n\x06groups\x18\x01 \x03(\x0b\x32\'.scalekit.v1.directories.DirectoryGroupBD\x92\x41\x41\x32?List of directory groups retrieved from the specified directoryR\x06groups\x12r\n\ntotal_size\x18\x02 \x01(\rBS\x92\x41P2NTotal number of groups matching the request criteria, regardless of paginationR\ttotalSize\x12\x95\x01\n\x0fnext_page_token\x18\x03 \x01(\tBm\x92\x41j2hToken to retrieve the next page of results. Use this token in the \'page_token\' field of the next requestR\rnextPageToken\x12\x99\x01\n\x0fprev_page_token\x18\x04 \x01(\tBq\x92\x41n2lToken to retrieve the previous page of results. Use this token in the \'page_token\' field of the next requestR\rprevPageToken\"\x90\x02\n!ListDirectoryGroupsSummaryRequest\x12y\n\x0forganization_id\x18\x01 \x01(\tBP\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12p\n\x0c\x64irectory_id\x18\x02 \x01(\tBM\x92\x41;2\"Unique identifier of the directoryJ\x15\"dir_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\"\x94\x13\n\tDirectory\x12]\n\x02id\x18\x01 \x01(\tBM\x92\x41;2\"Unique identifier of the directoryJ\x15\"dir_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02id\x12}\n\x04name\x18\x02 \x01(\tBi\x92\x41\\2NName of the directory, typically representing the connected Directory providerJ\n\"Azure AD\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x04name\x12\xb7\x01\n\x0e\x64irectory_type\x18\x03 \x01(\x0e\x32&.scalekit.v1.directories.DirectoryTypeBh\x92\x41]2SType of the directory, indicating the protocol or standard used for synchronizationJ\x06\"SCIM\"\xbaH\x05\x82\x01\x02\x10\x01R\rdirectoryType\x12\x98\x01\n\x0forganization_id\x18\x04 \x01(\tBo\x92\x41]2DUnique identifier of the organization to which the directory belongsJ\x15\"org_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x85\x01\n\x07\x65nabled\x18\x05 \x01(\x08\x42k\x92\x41h2`Indicates whether the directory is currently enabled and actively synchronizing users and groupsJ\x04trueR\x07\x65nabled\x12\x9d\x01\n\x12\x64irectory_provider\x18\x06 \x01(\x0e\x32*.scalekit.v1.directories.DirectoryProviderBB\x92\x41\x37\x32-Identity provider connected to this directoryJ\x06\"OKTA\"\xbaH\x05\x82\x01\x02\x10\x01R\x11\x64irectoryProvider\x12\xbf\x01\n\x0elast_synced_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB}\x92\x41z2`Timestamp of the last successful synchronization of users and groups from the Directory ProviderJ\x16\"2024-10-01T00:00:00Z\"R\x0clastSyncedAt\x12\xed\x01\n\x12\x64irectory_endpoint\x18\x08 \x01(\tB\xbd\x01\x92\x41\xaf\x01\x32\x65The endpoint URL generated by Scalekit for synchronizing users and groups from the Directory ProviderJF\"https://yourapp.scalekit.com/api/v1/directoies/dir_123212312/scim/v2\"\xbaH\x07r\x05\x10\x01\x18\xd0\x0fR\x11\x64irectoryEndpoint\x12P\n\x0btotal_users\x18\t \x01(\x05\x42/\x92\x41,2&Total number of users in the directoryJ\x02\x31\x30R\ntotalUsers\x12S\n\x0ctotal_groups\x18\n \x01(\x05\x42\x30\x92\x41-2\'Total number of groups in the directoryJ\x02\x31\x30R\x0btotalGroups\x12\x95\x01\n\x07secrets\x18\x0b \x03(\x0b\x32\x1f.scalekit.v1.directories.SecretBZ\x92\x41W2UList of secrets used for authenticating and synchronizing with the Directory ProviderR\x07secrets\x12\x9b\x01\n\x05stats\x18\x0c \x01(\x0b\x32\x1e.scalekit.v1.directories.StatsBe\x92\x41\x62\x32`Statistics and metrics related to the directory, such as synchronization status and error countsR\x05stats\x12\xaf\x01\n\x10role_assignments\x18\r \x01(\x0b\x32(.scalekit.v1.directories.RoleAssignmentsBZ\x92\x41W2URole assignments associated with the directory, defining group based role assignmentsR\x0froleAssignments\x12\xac\x01\n\x12\x61ttribute_mappings\x18\x0e \x01(\x0b\x32*.scalekit.v1.directories.AttributeMappingsBQ\x92\x41N2LMappings between directory attributes and Scalekit user and group attributesR\x11\x61ttributeMappings\x12\x44\n\x06status\x18\x0f \x01(\tB,\x92\x41!2\x10\x44irectory StatusJ\r\"IN_PROGRESS\"\xbaH\x05\x82\x01\x02\x10\x01R\x06status\x12~\n\x05\x65mail\x18\x10 \x01(\tBh\x92\x41\x65\x32HEmail Id associated with Directory whose access will be used for pollingJ\x19\"john.doe@scalekit.cloud\"R\x05\x65mail\x12v\n\x0egroups_tracked\x18\x11 \x01(\tBO\x92\x41L2CIt indicates if all groups are tracked or select groups are trackedJ\x05\"ALL\"R\rgroupsTracked\"\xaf\x03\n\x16ToggleDirectoryRequest\x12\xc8\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9e\x01\x92\x41\x8b\x01\x32rA unique identifier for the organization. The value must begin with \'org_\' and be between 1 and 32 characters longJ\x15\"org_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xc3\x01\n\x02id\x18\x03 \x01(\tB\xb2\x01\x92\x41\x9f\x01\x32\x85\x01\x41 unique identifier for a directory within the organization. The value must begin with \'dir_\' and be between 1 and 32 characters longJ\x15\"dir_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02idJ\x04\x08\x02\x10\x03\"\xac\x04\n\x17ToggleDirectoryResponse\x12\x96\x02\n\x07\x65nabled\x18\x01 \x01(\x08\x42\xfb\x01\x92\x41\xf7\x01\x32\xee\x01Specifies the directory\'s state after the toggle operation. A value of `true` indicates that the directory is enabled and actively synchronizing users and groups. A value of `false` means the directory is disabled, halting synchronizationJ\x04trueR\x07\x65nabled\x12\xe5\x01\n\rerror_message\x18\x02 \x01(\tB\xba\x01\x92\x41\xb6\x01\x32\x8f\x01\x43ontains a human-readable error message if the toggle operation encountered an issue. If the operation was successful, this field will be emptyJ\"\"The directory is already enabled\"H\x00R\x0c\x65rrorMessage\x88\x01\x01\x42\x10\n\x0e_error_message\"z\n\x10\x44irectoryMapping\x12\x1e\n\x03key\x18\x01 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x03key\x12#\n\x06map_to\x18\x02 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x05mapTo\x12!\n\x0c\x64isplay_name\x18\x03 \x01(\tR\x0b\x64isplayName\"\xae\x05\n\rDirectoryUser\x12J\n\x02id\x18\x01 \x01(\tB:\x92\x41$2\x07User IDJ\x19\"diruser_121312434123312\"\xbaH\x10r\x0e\x10\x01\x18$:\x08\x64iruser_R\x02id\x12\x35\n\x05\x65mail\x18\x02 \x01(\tB\x1f\x92\x41\x12\x32\x05\x45mailJ\t\"johndoe\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x05\x65mail\x12[\n\x12preferred_username\x18\x03 \x01(\tB,\x92\x41\x1f\x32\x12Preferred UsernameJ\t\"johndoe\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x11preferredUsername\x12@\n\ngiven_name\x18\x04 \x01(\tB!\x92\x41\x14\x32\nFirst NameJ\x06\"John\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\tgivenName\x12@\n\x0b\x66\x61mily_name\x18\x05 \x01(\tB\x1f\x92\x41\x12\x32\tLast NameJ\x05\"Doe\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\nfamilyName\x12\x62\n\nupdated_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\'\x92\x41$2\nUpdated AtJ\x16\"2024-10-01T00:00:00Z\"R\tupdatedAt\x12#\n\x06\x65mails\x18\x10 \x03(\tB\x0b\x92\x41\x08\x32\x06\x45mailsR\x06\x65mails\x12L\n\x06groups\x18\x11 \x03(\x0b\x32\'.scalekit.v1.directories.DirectoryGroupB\x0b\x92\x41\x08\x32\x06GroupsR\x06groups\x12\\\n\x0buser_detail\x18\x12 \x01(\x0b\x32\x17.google.protobuf.StructB\"\x92\x41\x1f\x32\x1d\x43omplete User Details PayloadR\nuserDetailJ\x04\x08\x07\x10\x10\"\xf3\x01\n\rExternalGroup\x12T\n\x0b\x65xternal_id\x18\x01 \x01(\tB3\x92\x41&2\x11\x45xternal Group IDJ\x11\"02y3w247124ccqi\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\nexternalId\x12H\n\x0c\x64isplay_name\x18\x02 \x01(\tB%\x92\x41\x18\x32\x0c\x44isplay NameJ\x08\"Admins\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x0b\x64isplayName\x12\x42\n\x05\x65mail\x18\x03 \x01(\tB,\x92\x41\x1f\x32\x05\x45mailJ\x16\"johndoe@scalekit.com\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x05\x65mail\"\xb2\x03\n\x0e\x44irectoryGroup\x12M\n\x02id\x18\x01 \x01(\tB=\x92\x41&2\x08Group IDJ\x1a\"dirgroup_121312434123312\"\xbaH\x11r\x0f\x10\x01\x18$:\tdirgroup_R\x02id\x12H\n\x0c\x64isplay_name\x18\x02 \x01(\tB%\x92\x41\x18\x32\x0c\x44isplay NameJ\x08\"Admins\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x0b\x64isplayName\x12\x42\n\x0btotal_users\x18\x03 \x01(\x05\x42!\x92\x41\x1e\x32\x18Total Users in the GroupJ\x02\x31\x30R\ntotalUsers\x12\x62\n\nupdated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\'\x92\x41$2\nUpdated AtJ\x16\"2024-10-01T00:00:00Z\"R\tupdatedAt\x12_\n\x0cgroup_detail\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructB#\x92\x41 2\x1e\x43omplete Group Details PayloadR\x0bgroupDetail\"\xb9\x01\n\x1c\x43reateDirectorySecretRequest\x12\x65\n\x0forganization_id\x18\x01 \x01(\tB<\x92\x41*2\x0fOrganization IDJ\x17\"org_12362474900684814\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x32\n\x0c\x64irectory_id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\"\xa4\x02\n\x1d\x43reateDirectorySecretResponse\x12\xb4\x01\n\x0cplain_secret\x18\x01 \x01(\tB\x90\x01\x92\x41\x8c\x01\x32VPlain Secret. This is only returned in Plain Text as response to the Creation Request.J2\"dXNlcm5hbWU6cGFzc3dvcmQ6c2VjcmV0a2V5MTIzNDU2Nzg5\"R\x0bplainSecret\x12L\n\x06secret\x18\x02 \x01(\x0b\x32\x1f.scalekit.v1.directories.SecretB\x13\x92\x41\x10\x32\x0eSecret DetailsR\x06secret\"\x90\x01\n RegenerateDirectorySecretRequest\x12\x38\n\x0forganization_id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x32\n\x0c\x64irectory_id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\"\xa8\x02\n!RegenerateDirectorySecretResponse\x12\xb4\x01\n\x0cplain_secret\x18\x01 \x01(\tB\x90\x01\x92\x41\x8c\x01\x32VPlain Secret. This is only returned in Plain Text as response to the Creation Request.J2\"dXNlcm5hbWU6cGFzc3dvcmQ6c2VjcmV0a2V5MTIzNDU2Nzg5\"R\x0bplainSecret\x12L\n\x06secret\x18\x02 \x01(\x0b\x32\x1f.scalekit.v1.directories.SecretB\x13\x92\x41\x10\x32\x0eSecret DetailsR\x06secret\"\xe6\x04\n\x06Secret\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04sec_R\x02id\x12g\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB*\x92\x41\'2\rCreation TimeJ\x16\"2024-10-01T00:00:00Z\"R\ncreateTime\x12?\n\rsecret_suffix\x18\x04 \x01(\tB\x1a\x92\x41\x17\x32\rSecret SuffixJ\x06\"Nzg5\"R\x0csecretSuffix\x12]\n\x06status\x18\x05 \x01(\x0e\x32%.scalekit.v1.directories.SecretStatusB\x1e\x92\x41\x1b\x32\rSecret StatusJ\n\"INACTIVE\"R\x06status\x12\x65\n\x0b\x65xpire_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB(\x92\x41%2\x0b\x45xpiry TimeJ\x16\"2025-10-01T00:00:00Z\"R\nexpireTime\x12m\n\x0elast_used_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB+\x92\x41(2\x0eLast Used TimeJ\x16\"2024-10-01T00:00:00Z\"R\x0clastUsedTime\x12\\\n\x0c\x64irectory_id\x18\t \x01(\tB9\x92\x41\'2\x0c\x44irectory IDJ\x17\"dir_12362474900684814\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\"\xb7\x03\n\x05Stats\x12\x46\n\x0btotal_users\x18\x01 \x01(\x05\x42%\x92\x41\"2\x1cTotal Users in the DirectoryJ\x02\x31\x30R\ntotalUsers\x12I\n\x0ctotal_groups\x18\x02 \x01(\x05\x42&\x92\x41#2\x1dTotal Groups in the DirectoryJ\x02\x31\x30R\x0btotalGroups\x12\x8d\x01\n\x10group_updated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBG\x92\x41\x44\x32*Max time of Group Updated At for DirectoryJ\x16\"2024-10-01T00:00:00Z\"R\x0egroupUpdatedAt\x12\x8a\x01\n\x0fuser_updated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampBF\x92\x41\x43\x32)Max time of User Updated At for DirectoryJ\x16\"2024-10-01T00:00:00Z\"R\ruserUpdatedAt\"\xb8\x01\n\x12\x41ssignRolesRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\x19\n\x02id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18 R\x02id\x12S\n\x10role_assignments\x18\x03 \x01(\x0b\x32(.scalekit.v1.directories.RoleAssignmentsR\x0froleAssignments\"\\\n\x0fRoleAssignments\x12I\n\x0b\x61ssignments\x18\x01 \x03(\x0b\x32\'.scalekit.v1.directories.RoleAssignmentR\x0b\x61ssignments\"j\n\x13\x41ssignRolesResponse\x12S\n\x10role_assignments\x18\x01 \x01(\x0b\x32(.scalekit.v1.directories.RoleAssignmentsR\x0froleAssignments\"\x99\x02\n\x0eRoleAssignment\x12_\n\x08group_id\x18\x01 \x01(\tBD\x92\x41\x38\x32\x1dgroup ID for the role mappingJ\x17\"dirgroup_121312434123\"\xbaH\x06r\x04\x10\x01\x18 R\x07groupId\x12?\n\trole_name\x18\x02 \x01(\tB\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\x65\n\x07role_id\x18\x03 \x01(\tBL\x92\x41\x33\x32\x1crole ID for the role mappingJ\x13\"role_121312434123\"\xbaH\x04r\x02\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\x06roleId\"\xcd\x01\n\x17UpdateAttributesRequest\x12\x38\n\x0forganization_id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x1f\n\x02id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02id\x12W\n\x11\x61ttribute_mapping\x18\x03 \x01(\x0b\x32*.scalekit.v1.directories.AttributeMappingsR\x10\x61ttributeMapping\"^\n\x11\x41ttributeMappings\x12I\n\nattributes\x18\x01 \x03(\x0b\x32).scalekit.v1.directories.AttributeMappingR\nattributes\"W\n\x10\x41ttributeMapping\x12\x1e\n\x03key\x18\x01 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x03key\x12#\n\x06map_to\x18\x02 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x05mapTo\"u\n\x18UpdateAttributesResponse\x12Y\n\x12\x61ttribute_mappings\x18\x01 \x01(\x0b\x32*.scalekit.v1.directories.AttributeMappingsR\x11\x61ttributeMappings\"y\n\x16\x44\x65leteDirectoryRequest\x12\x38\n\x0forganization_id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x1f\n\x02id\x18\x03 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02idJ\x04\x08\x02\x10\x03\"\xfb\x01\n\x1bTriggerDirectorySyncRequest\x12h\n\x0c\x64irectory_id\x18\x01 \x01(\tBE\x92\x41\x39\x32 Unique identifier of a DirectoryJ\x15\"dir_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0b\x64irectoryId\x12r\n\x0forganization_id\x18\x02 \x01(\tBI\x92\x41=2$Unique identifier to an OrganizationJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\"\x90\x01\n\x1aGetDirectoryContextRequest\x12\x35\n\x0c\x64irectory_id\x18\x01 \x01(\tB\x12\xbaH\x0fr\n\x10\x01\x18 :\x04\x64ir_\xc8\x01\x01R\x0b\x64irectoryId\x12;\n\x0forganization_id\x18\x02 \x01(\tB\x12\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\"P\n\x1bGetDirectoryContextResponse\x12\x31\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext\"\xc6\x01\n\x1dUpdateDirectoryContextRequest\x12\x35\n\x0c\x64irectory_id\x18\x01 \x01(\tB\x12\xbaH\x0fr\n\x10\x01\x18 :\x04\x64ir_\xc8\x01\x01R\x0b\x64irectoryId\x12;\n\x0forganization_id\x18\x02 \x01(\tB\x12\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\x12\x31\n\x07\x63ontext\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext*M\n\rDirectoryType\x12\x1e\n\x1a\x44IRECTORY_TYPE_UNSPECIFIED\x10\x00\x12\x08\n\x04SCIM\x10\x01\x12\x08\n\x04LDAP\x10\x02\x12\x08\n\x04POLL\x10\x03*\x9a\x01\n\x11\x44irectoryProvider\x12\"\n\x1e\x44IRECTORY_PROVIDER_UNSPECIFIED\x10\x00\x12\x08\n\x04OKTA\x10\x01\x12\n\n\x06GOOGLE\x10\x02\x12\x10\n\x0cMICROSOFT_AD\x10\x03\x12\t\n\x05\x41UTH0\x10\x04\x12\x0c\n\x08ONELOGIN\x10\x05\x12\r\n\tJUMPCLOUD\x10\x06\x12\x11\n\rPING_IDENTITY\x10\x07*^\n\x0f\x44irectoryStatus\x12 \n\x1c\x44IRECTORY_STATUS_UNSPECIFIED\x10\x00\x12\t\n\x05\x44RAFT\x10\x01\x12\x0f\n\x0bIN_PROGRESS\x10\x02\x12\r\n\tCOMPLETED\x10\x03*(\n\x0cSecretStatus\x12\n\n\x06\x41\x43TIVE\x10\x00\x12\x0c\n\x08INACTIVE\x10\x01\x32\xa9\x38\n\x10\x44irectoryService\x12\xe4\x01\n\x0f\x43reateDirectory\x12/.scalekit.v1.directories.CreateDirectoryRequest\x1a\x30.scalekit.v1.directories.CreateDirectoryResponse\"n\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02@\"3/api/v1/organizations/{organization_id}/directories:\tdirectory\x12\x9e\x02\n\x0f\x44\x65leteDirectory\x12/.scalekit.v1.directories.DeleteDirectoryRequest\x1a\x16.google.protobuf.Empty\"\xc1\x01\x92\x41i\n\tDirectory\x12\x12\x44\x65lete a directory\x1a)Delete a Directory within an organizationJ\x1d\n\x03\x32\x30\x30\x12\x16\n\x14\x44\x65leted Successfully\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02:*8/api/v1/organizations/{organization_id}/directories/{id}\x12\xe9\x01\n\x0fUpdateDirectory\x12/.scalekit.v1.directories.UpdateDirectoryRequest\x1a\x30.scalekit.v1.directories.UpdateDirectoryResponse\"s\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x45\x32\x38/api/v1/organizations/{organization_id}/directories/{id}:\tdirectory\x12\xe7\x01\n\x18\x41ssignGroupsForDirectory\x12\x38.scalekit.v1.directories.AssignGroupsForDirectoryRequest\x1a\x16.google.protobuf.Empty\"y\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02K\x1a\x46/api/v1/organizations/{organization_id}/directories/{id}/groups:assign:\x01*\x12\xfb\x01\n\x0b\x41ssignRoles\x12+.scalekit.v1.directories.AssignRolesRequest\x1a,.scalekit.v1.directories.AssignRolesResponse\"\x90\x01\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x62\x1aN/api/v1/organizations/{organization_id}/directories/{id}/groups/-/roles:assign:\x10role_assignments\x12\x80\x02\n\x10UpdateAttributes\x12\x30.scalekit.v1.directories.UpdateAttributesRequest\x1a\x31.scalekit.v1.directories.UpdateAttributesResponse\"\x86\x01\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02X\x1a\x43/api/v1/organizations/{organization_id}/directories/{id}/attributes:\x11\x61ttribute_mapping\x12\xa4\x03\n\x0cGetDirectory\x12,.scalekit.v1.directories.GetDirectoryRequest\x1a-.scalekit.v1.directories.GetDirectoryResponse\"\xb6\x02\x92\x41\xda\x01\n\tDirectory\x12\x15Get directory details\x1aPRetrieves detailed information about a specific directory within an organizationJd\n\x03\x32\x30\x30\x12]\n(Successfully retrieved directory details\x12\x31\n/\x1a-.scalekit.v1.directories.GetDirectoryResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\x82\xd3\xe4\x93\x02:\x12\x38/api/v1/organizations/{organization_id}/directories/{id}\x12\xfd\x02\n\x0fListDirectories\x12/.scalekit.v1.directories.ListDirectoriesRequest\x1a\x30.scalekit.v1.directories.ListDirectoriesResponse\"\x86\x02\x92\x41\xaf\x01\n\tDirectory\x12\x1dList organization directoriesJ\x82\x01\n\x03\x32\x30\x30\x12{\nCSuccessfully retrieved the list of directories for the organization\x12\x34\n2\x1a\x30.scalekit.v1.directories.ListDirectoriesResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\x82\xd3\xe4\x93\x02\x35\x12\x33/api/v1/organizations/{organization_id}/directories\x12\xc3\x03\n\x0f\x45nableDirectory\x12/.scalekit.v1.directories.ToggleDirectoryRequest\x1a\x30.scalekit.v1.directories.ToggleDirectoryResponse\"\xcc\x02\x92\x41\xe8\x01\n\tDirectory\x12\x12\x45nable a directory\x1a\x7f\x41\x63tivates a directory within an organization, allowing it to synchronize users and groups with the connected Directory providerJF\n\x03\x32\x30\x30\x12?\n\x07Success\x12\x34\n2\x1a\x30.scalekit.v1.directories.ToggleDirectoryResponse\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\x82\xd3\xe4\x93\x02\x41\x32?/api/v1/organizations/{organization_id}/directories/{id}:enable\x12\x8e\x04\n\x10\x44isableDirectory\x12/.scalekit.v1.directories.ToggleDirectoryRequest\x1a\x30.scalekit.v1.directories.ToggleDirectoryResponse\"\x96\x03\x92\x41\xb1\x02\n\tDirectory\x12\x13\x44isable a directory\x1a\xaa\x01Stops synchronization of users and groups from a specified directory within an organization. This operation prevents further updates from the connected Directory providerJb\n\x03\x32\x30\x30\x12[\n#Successfully disabled the directory\x12\x34\n2\x1a\x30.scalekit.v1.directories.ToggleDirectoryResponse\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\x82\xd3\xe4\x93\x02\x42\x32@/api/v1/organizations/{organization_id}/directories/{id}:disable\x12\xcd\x04\n\x12ListDirectoryUsers\x12\x32.scalekit.v1.directories.ListDirectoryUsersRequest\x1a\x33.scalekit.v1.directories.ListDirectoryUsersResponse\"\xcd\x03\x92\x41\xe1\x02\n\tDirectory\x12\x14List directory users\x1a\xb2\x01Retrieves a list of all users within a specified directory for an organization. This endpoint allows you to view user accounts associated with your connected Directory Providers.J\x88\x01\n\x03\x32\x30\x30\x12\x80\x01\nESuccessfully retrieved the list of users from the specified directory\x12\x37\n5\x1a\x33.scalekit.v1.directories.ListDirectoryUsersResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\x82\xd3\xe4\x93\x02J\x12H/api/v1/organizations/{organization_id}/directories/{directory_id}/users\x12\xa4\x04\n\x13ListDirectoryGroups\x12\x33.scalekit.v1.directories.ListDirectoryGroupsRequest\x1a\x34.scalekit.v1.directories.ListDirectoryGroupsResponse\"\xa1\x03\x92\x41\xb4\x02\n\tDirectory\x12\x15List directory groups\x1a\x82\x01Retrieves all groups from a specified directory. Use this endpoint to view group structures from your connected identity provider.J\x8a\x01\n\x03\x32\x30\x30\x12\x82\x01\nFSuccessfully retrieved the list of groups from the specified directory\x12\x38\n6\x1a\x34.scalekit.v1.directories.ListDirectoryGroupsResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\x82\xd3\xe4\x93\x02K\x12I/api/v1/organizations/{organization_id}/directories/{directory_id}/groups\x12\xd3\x04\n\x1aListDirectoryGroupsSummary\x12:.scalekit.v1.directories.ListDirectoryGroupsSummaryRequest\x1a\x34.scalekit.v1.directories.ListDirectoryGroupsResponse\"\xc2\x03\x92\x41\xbe\x02\n\tDirectory\x12\x1dList directory groups summary\x1a\x84\x01Retrieves all groups from a specified directory. This is not a paginated api. It gives a summary view with id and name of the group.J\x8a\x01\n\x03\x32\x30\x30\x12\x82\x01\nFSuccessfully retrieved the list of groups from the specified directory\x12\x38\n6\x1a\x34.scalekit.v1.directories.ListDirectoryGroupsResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02S\x12Q/api/v1/organizations/{organization_id}/directories/{directory_id}/groups/summary\x12\xfe\x02\n\x15\x43reateDirectorySecret\x12\x35.scalekit.v1.directories.CreateDirectorySecretRequest\x1a\x36.scalekit.v1.directories.CreateDirectorySecretResponse\"\xf5\x01\x92\x41x\n\tDirectory\x12\x1d\x43reate secret for a directoryJL\n\x03\x32\x30\x30\x12\x45\n\x07Success\x12:\n8\x1a\x36.scalekit.v1.directories.CreateDirectorySecretResponse\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02L\"J/api/v1/organizations/{organization_id}/directories/{directory_id}/secrets\x12\x9e\x03\n\x19RegenerateDirectorySecret\x12\x39.scalekit.v1.directories.RegenerateDirectorySecretRequest\x1a:.scalekit.v1.directories.RegenerateDirectorySecretResponse\"\x89\x02\x92\x41\x80\x01\n\tDirectory\x12!Regenerate secret for a directoryJP\n\x03\x32\x30\x30\x12I\n\x07Success\x12>\n<\x1a:.scalekit.v1.directories.RegenerateDirectorySecretResponse\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02W\"U/api/v1/organizations/{organization_id}/directories/{directory_id}/secrets:regenerate\x12\xdd\x01\n\x14TriggerDirectorySync\x12\x34.scalekit.v1.directories.TriggerDirectorySyncRequest\x1a\x16.google.protobuf.Empty\"w\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02I\x12G/api/v1/organizations/{organization_id}/directories/{directory_id}:sync\x12\x96\x03\n\x13GetDirectoryContext\x12\x33.scalekit.v1.directories.GetDirectoryContextRequest\x1a\x34.scalekit.v1.directories.GetDirectoryContextResponse\"\x93\x02\x92\x41\xa7\x01\n\tDirectory\x12\x15Get directory context\x1a;Retrieves the custom context data for a specific directory.J\'\n\x03\x32\x30\x30\x12 \n\x1eReturns the directory context.J\x1d\n\x03\x34\x30\x34\x12\x16\n\x14\x44irectory not found.\x82\xb5\x18\x02\x18p\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02M\x12K/api/v1/organizations/{organization_id}/directories/{directory_id}/contexts\x12\xa2\x03\n\x16UpdateDirectoryContext\x12\x36.scalekit.v1.directories.UpdateDirectoryContextRequest\x1a\x16.google.protobuf.Empty\"\xb7\x02\x92\x41\xc2\x01\n\tDirectory\x12\x18Update directory context\x1a\x39Updates the custom context data for a specific directory.J&\n\x03\x32\x30\x30\x12\x1f\n\x1d\x43ontext updated successfully.J\x19\n\x03\x34\x30\x30\x12\x12\n\x10Invalid request.J\x1d\n\x03\x34\x30\x34\x12\x16\n\x14\x44irectory not found.\x82\xb5\x18\x02\x18p\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02V\x1aK/api/v1/organizations/{organization_id}/directories/{directory_id}/contexts:\x07\x63ontext\x1a\xaa\x02\x92\x41\xa6\x02\n\tDirectory\x12\x98\x02\x44irectory management for viewing and controlling external identity provider connections in your Scalekit environment. This service provides endpoints for retrieving directory information, listing directories and their contents, and enabling or disabling directory synchronization.B7Z5github.com/scalekit-inc/scalekit/pkg/grpc/directoriesb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n)scalekit/v1/directories/directories.proto\x12\x17scalekit.v1.directories\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"\xdb\x01\n\x13GetDirectoryRequest\x12S\n\x02id\x18\x01 \x01(\tBC\x92\x41\x37\x32\"Unique identifier of the directoryJ\x11\"dir_12131243412\"\xbaH\x06r\x04\x10\x01\x18 R\x02id\x12o\n\x0forganization_id\x18\x02 \x01(\tBF\x92\x41:2%Unique identifier of the organizationJ\x11\"org_12131243412\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\"\x91\x01\n\x14GetDirectoryResponse\x12y\n\tdirectory\x18\x01 \x01(\x0b\x32\".scalekit.v1.directories.DirectoryB7\x92\x41\x34\x32\x32\x44\x65tailed information about the requested directoryR\tdirectory\"\xf7\x01\n\x16\x43reateDirectoryRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41?2$Unique identifier to an OrganizationJ\x17\"org_12362474900684814\"\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x0eorganizationId\x12\x64\n\tdirectory\x18\x02 \x01(\x0b\x32(.scalekit.v1.directories.CreateDirectoryB\x1c\x92\x41\x13\x32\x11\x44irectory Details\xbaH\x03\xc8\x01\x01R\tdirectory\"\xf7\x01\n\x0f\x43reateDirectory\x12k\n\x0e\x64irectory_type\x18\x01 \x01(\x0e\x32&.scalekit.v1.directories.DirectoryTypeB\x1c\x92\x41\x0e\x32\x04TypeJ\x06\"SCIM\"\xbaH\x08\x82\x01\x02\x10\x01\xc8\x01\x01R\rdirectoryType\x12w\n\x12\x64irectory_provider\x18\x02 \x01(\x0e\x32*.scalekit.v1.directories.DirectoryProviderB\x1c\x92\x41\x11\x32\x07ProvideJ\x06\"OKTA\"\xbaH\x05\x82\x01\x02\x10\x01R\x11\x64irectoryProvider\"y\n\x17\x43reateDirectoryResponse\x12^\n\tdirectory\x18\x01 \x01(\x0b\x32\".scalekit.v1.directories.DirectoryB\x1c\x92\x41\x13\x32\x11\x44irectory Details\xbaH\x03\xc8\x01\x01R\tdirectory\"\xd9\x01\n\x16UpdateDirectoryRequest\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02id\x12\x38\n\x0forganization_id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x64\n\tdirectory\x18\x03 \x01(\x0b\x32(.scalekit.v1.directories.UpdateDirectoryB\x1c\x92\x41\x13\x32\x11\x44irectory Details\xbaH\x03\xc8\x01\x01R\tdirectory\"\x9a\x06\n\x0fUpdateDirectory\x12\x33\n\x04name\x18\x02 \x01(\tB\x1f\x92\x41\x12\x32\x04NameJ\n\"Azure AD\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x04name\x12h\n\x0e\x64irectory_type\x18\x03 \x01(\x0e\x32&.scalekit.v1.directories.DirectoryTypeB\x19\x92\x41\x0e\x32\x04TypeJ\x06\"SCIM\"\xbaH\x05\x82\x01\x02\x10\x01R\rdirectoryType\x12+\n\x07\x65nabled\x18\x07 \x01(\x08\x42\x11\x92\x41\x0e\x32\x06StatusJ\x04trueR\x07\x65nabled\x12\xec\x01\n\x12\x64irectory_provider\x18\x08 \x01(\x0e\x32*.scalekit.v1.directories.DirectoryProviderB\x90\x01\x92\x41\x84\x01\x32-Identity provider connected to this directoryJS\"OKTA\", \"GOOGLE\", \"MICROSOFT_AD\", \"AUTH0\", \"ONELOGIN\", \"JUMPCLOUD\", \"PING_IDENTITY\"\xbaH\x05\x82\x01\x02\x10\x01R\x11\x64irectoryProvider\x12h\n\x06status\x18\t \x01(\x0e\x32(.scalekit.v1.directories.DirectoryStatusB&\x92\x41\x1b\x32\x0cSetup StatusJ\x0b\"COMPLETED\"\xbaH\x05\x82\x01\x02\x10\x01R\x06status\x12\x45\n\x08mappings\x18\n \x03(\x0b\x32).scalekit.v1.directories.DirectoryMappingR\x08mappings\x12q\n\x06groups\x18\x0f \x03(\x0b\x32&.scalekit.v1.directories.ExternalGroupB1\x92\x41.2,List of groups associated with the directoryR\x06groupsJ\x04\x08\x01\x10\x02J\x04\x08\x04\x10\x05J\x04\x08\x06\x10\x07J\x04\x08\x0b\x10\x0cJ\x04\x08\x0c\x10\rJ\x04\x08\r\x10\x0eJ\x04\x08\x0e\x10\x0f\"y\n\x17UpdateDirectoryResponse\x12^\n\tdirectory\x18\x01 \x01(\x0b\x32\".scalekit.v1.directories.DirectoryB\x1c\x92\x41\x13\x32\x11\x44irectory Details\xbaH\x03\xc8\x01\x01R\tdirectory\"\xdf\x01\n\x1f\x41ssignGroupsForDirectoryRequest\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02id\x12\x38\n\x0forganization_id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x61\n\x0c\x65xternal_ids\x18\x03 \x03(\tB>\x92\x41\x35\x32\x33\x65xternal_ids of groups to be tracked during polling\xbaH\x03\xc8\x01\x01R\x0b\x65xternalIds\"\x92\x01\n\x16ListDirectoriesRequest\x12x\n\x0forganization_id\x18\x01 \x01(\tBO\x92\x41=2%Unique identifier of the organizationJ\x14\"org_12362474900684\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\"\xa1\x01\n\x17ListDirectoriesResponse\x12\x85\x01\n\x0b\x64irectories\x18\x01 \x03(\x0b\x32\".scalekit.v1.directories.DirectoryB?\x92\x41\x36\x32\x34List of directories associated with the organization\xbaH\x03\xc8\x01\x01R\x0b\x64irectories\"\xd6\t\n\x19ListDirectoryUsersRequest\x12x\n\x0forganization_id\x18\x01 \x01(\tBO\x92\x41=2%Unique identifier of the organizationJ\x14\"org_12131243412331\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x87\x01\n\x0c\x64irectory_id\x18\x02 \x01(\tBd\x92\x41R2:Unique identifier of the directory within the organizationJ\x14\"dir_12131243412331\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\x12\x86\x01\n\tpage_size\x18\x03 \x01(\rBi\x92\x41_2YNumber of users to return per page. Maximum value is 30. If not specified, defaults to 10J\x02\x31\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xb0\x01\n\npage_token\x18\x04 \x01(\tB\x90\x01\x92\x41\x8c\x01\x32\x89\x01Token for pagination. Use the value returned in the \'next_page_token\' field of the previous response to retrieve the next page of resultsR\tpageToken\x12\xe1\x01\n\x0einclude_detail\x18\x05 \x01(\x08\x42\xb4\x01\x92\x41\xb0\x01\x32\xa7\x01If set to true, the response will include the full user payload with all available details. If false or not specified, only essential user information will be returnedJ\x04trueH\x00R\rincludeDetail\x88\x01\x01\x12\xa1\x01\n\x12\x64irectory_group_id\x18\x06 \x01(\tBn\x92\x41W2>Filter users by their membership in a specific directory groupJ\x15\"dirgroup_1213124341\"\xbaH\x11r\x0f\x10\x01\x18%:\tdirgroup_H\x01R\x10\x64irectoryGroupId\x88\x01\x01\x12\xb4\x01\n\rupdated_after\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampBn\x92\x41k2QFilter users that were updated after the specified timestamp. Use ISO 8601 formatJ\x16\"2021-01-01T00:00:00Z\"H\x02R\x0cupdatedAfter\x88\x01\x01\x42\x11\n\x0f_include_detailB\x15\n\x13_directory_group_idB\x10\n\x0e_updated_after\"\xe1\x04\n\x1aListDirectoryUsersResponse\x12\x81\x01\n\x05users\x18\x01 \x03(\x0b\x32&.scalekit.v1.directories.DirectoryUserBC\x92\x41@2>List of directory users retrieved from the specified directoryR\x05users\x12t\n\ntotal_size\x18\x02 \x01(\rBU\x92\x41R2PTotal number of users available in the directory that match the request criteriaR\ttotalSize\x12\xa5\x01\n\x0fnext_page_token\x18\x03 \x01(\tB}\x92\x41z2xToken for pagination. Use this token in the \'page_token\' field of the next request to fetch the subsequent page of usersR\rnextPageToken\x12\xa0\x01\n\x0fprev_page_token\x18\x04 \x01(\tBx\x92\x41u2sToken for pagination. Use this token in the \'page_token\' field of the next request to fetch the prior page of usersR\rprevPageToken\"\xb6\x08\n\x1aListDirectoryGroupsRequest\x12y\n\x0forganization_id\x18\x01 \x01(\tBP\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12p\n\x0c\x64irectory_id\x18\x02 \x01(\tBM\x92\x41;2\"Unique identifier of the directoryJ\x15\"dir_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\x12\x87\x01\n\tpage_size\x18\x03 \x01(\rBj\x92\x41`2ZNumber of groups to return per page. Maximum value is 30. If not specified, defaults to 10J\x02\x31\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\x88\x01\n\npage_token\x18\x04 \x01(\tBi\x92\x41\x66\x32\x64Token for pagination. Use the value returned in the \'next_page_token\' field of the previous responseR\tpageToken\x12\xa2\x01\n\rupdated_after\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\\\x92\x41Y2?Filter groups updated after this timestamp. Use ISO 8601 formatJ\x16\"2021-01-01T00:00:00Z\"H\x00R\x0cupdatedAfter\x88\x01\x01\x12\x96\x01\n\x0einclude_detail\x18\x06 \x01(\x08\x42j\x92\x41g2_If true, includes full group details. If false or not specified, returns basic information onlyJ\x04trueH\x01R\rincludeDetail\x88\x01\x01\x12\x96\x01\n\x17include_external_groups\x18\x07 \x01(\x08\x42Y\x92\x41V2NIf true, returns group and its details from external provider (default: false)J\x04trueH\x02R\x15includeExternalGroups\x88\x01\x01\x42\x10\n\x0e_updated_afterB\x11\n\x0f_include_detailB\x1a\n\x18_include_external_groups\"\xcd\x04\n\x1bListDirectoryGroupsResponse\x12\x85\x01\n\x06groups\x18\x01 \x03(\x0b\x32\'.scalekit.v1.directories.DirectoryGroupBD\x92\x41\x41\x32?List of directory groups retrieved from the specified directoryR\x06groups\x12r\n\ntotal_size\x18\x02 \x01(\rBS\x92\x41P2NTotal number of groups matching the request criteria, regardless of paginationR\ttotalSize\x12\x95\x01\n\x0fnext_page_token\x18\x03 \x01(\tBm\x92\x41j2hToken to retrieve the next page of results. Use this token in the \'page_token\' field of the next requestR\rnextPageToken\x12\x99\x01\n\x0fprev_page_token\x18\x04 \x01(\tBq\x92\x41n2lToken to retrieve the previous page of results. Use this token in the \'page_token\' field of the next requestR\rprevPageToken\"\x90\x02\n!ListDirectoryGroupsSummaryRequest\x12y\n\x0forganization_id\x18\x01 \x01(\tBP\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12p\n\x0c\x64irectory_id\x18\x02 \x01(\tBM\x92\x41;2\"Unique identifier of the directoryJ\x15\"dir_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\"\x94\x13\n\tDirectory\x12]\n\x02id\x18\x01 \x01(\tBM\x92\x41;2\"Unique identifier of the directoryJ\x15\"dir_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02id\x12}\n\x04name\x18\x02 \x01(\tBi\x92\x41\\2NName of the directory, typically representing the connected Directory providerJ\n\"Azure AD\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x04name\x12\xb7\x01\n\x0e\x64irectory_type\x18\x03 \x01(\x0e\x32&.scalekit.v1.directories.DirectoryTypeBh\x92\x41]2SType of the directory, indicating the protocol or standard used for synchronizationJ\x06\"SCIM\"\xbaH\x05\x82\x01\x02\x10\x01R\rdirectoryType\x12\x98\x01\n\x0forganization_id\x18\x04 \x01(\tBo\x92\x41]2DUnique identifier of the organization to which the directory belongsJ\x15\"org_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x85\x01\n\x07\x65nabled\x18\x05 \x01(\x08\x42k\x92\x41h2`Indicates whether the directory is currently enabled and actively synchronizing users and groupsJ\x04trueR\x07\x65nabled\x12\x9d\x01\n\x12\x64irectory_provider\x18\x06 \x01(\x0e\x32*.scalekit.v1.directories.DirectoryProviderBB\x92\x41\x37\x32-Identity provider connected to this directoryJ\x06\"OKTA\"\xbaH\x05\x82\x01\x02\x10\x01R\x11\x64irectoryProvider\x12\xbf\x01\n\x0elast_synced_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB}\x92\x41z2`Timestamp of the last successful synchronization of users and groups from the Directory ProviderJ\x16\"2024-10-01T00:00:00Z\"R\x0clastSyncedAt\x12\xed\x01\n\x12\x64irectory_endpoint\x18\x08 \x01(\tB\xbd\x01\x92\x41\xaf\x01\x32\x65The endpoint URL generated by Scalekit for synchronizing users and groups from the Directory ProviderJF\"https://yourapp.scalekit.com/api/v1/directoies/dir_123212312/scim/v2\"\xbaH\x07r\x05\x10\x01\x18\xd0\x0fR\x11\x64irectoryEndpoint\x12P\n\x0btotal_users\x18\t \x01(\x05\x42/\x92\x41,2&Total number of users in the directoryJ\x02\x31\x30R\ntotalUsers\x12S\n\x0ctotal_groups\x18\n \x01(\x05\x42\x30\x92\x41-2\'Total number of groups in the directoryJ\x02\x31\x30R\x0btotalGroups\x12\x95\x01\n\x07secrets\x18\x0b \x03(\x0b\x32\x1f.scalekit.v1.directories.SecretBZ\x92\x41W2UList of secrets used for authenticating and synchronizing with the Directory ProviderR\x07secrets\x12\x9b\x01\n\x05stats\x18\x0c \x01(\x0b\x32\x1e.scalekit.v1.directories.StatsBe\x92\x41\x62\x32`Statistics and metrics related to the directory, such as synchronization status and error countsR\x05stats\x12\xaf\x01\n\x10role_assignments\x18\r \x01(\x0b\x32(.scalekit.v1.directories.RoleAssignmentsBZ\x92\x41W2URole assignments associated with the directory, defining group based role assignmentsR\x0froleAssignments\x12\xac\x01\n\x12\x61ttribute_mappings\x18\x0e \x01(\x0b\x32*.scalekit.v1.directories.AttributeMappingsBQ\x92\x41N2LMappings between directory attributes and Scalekit user and group attributesR\x11\x61ttributeMappings\x12\x44\n\x06status\x18\x0f \x01(\tB,\x92\x41!2\x10\x44irectory StatusJ\r\"IN_PROGRESS\"\xbaH\x05\x82\x01\x02\x10\x01R\x06status\x12~\n\x05\x65mail\x18\x10 \x01(\tBh\x92\x41\x65\x32HEmail Id associated with Directory whose access will be used for pollingJ\x19\"john.doe@scalekit.cloud\"R\x05\x65mail\x12v\n\x0egroups_tracked\x18\x11 \x01(\tBO\x92\x41L2CIt indicates if all groups are tracked or select groups are trackedJ\x05\"ALL\"R\rgroupsTracked\"\xaf\x03\n\x16ToggleDirectoryRequest\x12\xc8\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9e\x01\x92\x41\x8b\x01\x32rA unique identifier for the organization. The value must begin with \'org_\' and be between 1 and 32 characters longJ\x15\"org_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xc3\x01\n\x02id\x18\x03 \x01(\tB\xb2\x01\x92\x41\x9f\x01\x32\x85\x01\x41 unique identifier for a directory within the organization. The value must begin with \'dir_\' and be between 1 and 32 characters longJ\x15\"dir_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02idJ\x04\x08\x02\x10\x03\"\xac\x04\n\x17ToggleDirectoryResponse\x12\x96\x02\n\x07\x65nabled\x18\x01 \x01(\x08\x42\xfb\x01\x92\x41\xf7\x01\x32\xee\x01Specifies the directory\'s state after the toggle operation. A value of `true` indicates that the directory is enabled and actively synchronizing users and groups. A value of `false` means the directory is disabled, halting synchronizationJ\x04trueR\x07\x65nabled\x12\xe5\x01\n\rerror_message\x18\x02 \x01(\tB\xba\x01\x92\x41\xb6\x01\x32\x8f\x01\x43ontains a human-readable error message if the toggle operation encountered an issue. If the operation was successful, this field will be emptyJ\"\"The directory is already enabled\"H\x00R\x0c\x65rrorMessage\x88\x01\x01\x42\x10\n\x0e_error_message\"z\n\x10\x44irectoryMapping\x12\x1e\n\x03key\x18\x01 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x03key\x12#\n\x06map_to\x18\x02 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x05mapTo\x12!\n\x0c\x64isplay_name\x18\x03 \x01(\tR\x0b\x64isplayName\"\xae\x05\n\rDirectoryUser\x12J\n\x02id\x18\x01 \x01(\tB:\x92\x41$2\x07User IDJ\x19\"diruser_121312434123312\"\xbaH\x10r\x0e\x10\x01\x18$:\x08\x64iruser_R\x02id\x12\x35\n\x05\x65mail\x18\x02 \x01(\tB\x1f\x92\x41\x12\x32\x05\x45mailJ\t\"johndoe\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x05\x65mail\x12[\n\x12preferred_username\x18\x03 \x01(\tB,\x92\x41\x1f\x32\x12Preferred UsernameJ\t\"johndoe\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x11preferredUsername\x12@\n\ngiven_name\x18\x04 \x01(\tB!\x92\x41\x14\x32\nFirst NameJ\x06\"John\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\tgivenName\x12@\n\x0b\x66\x61mily_name\x18\x05 \x01(\tB\x1f\x92\x41\x12\x32\tLast NameJ\x05\"Doe\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\nfamilyName\x12\x62\n\nupdated_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\'\x92\x41$2\nUpdated AtJ\x16\"2024-10-01T00:00:00Z\"R\tupdatedAt\x12#\n\x06\x65mails\x18\x10 \x03(\tB\x0b\x92\x41\x08\x32\x06\x45mailsR\x06\x65mails\x12L\n\x06groups\x18\x11 \x03(\x0b\x32\'.scalekit.v1.directories.DirectoryGroupB\x0b\x92\x41\x08\x32\x06GroupsR\x06groups\x12\\\n\x0buser_detail\x18\x12 \x01(\x0b\x32\x17.google.protobuf.StructB\"\x92\x41\x1f\x32\x1d\x43omplete User Details PayloadR\nuserDetailJ\x04\x08\x07\x10\x10\"\xf3\x01\n\rExternalGroup\x12T\n\x0b\x65xternal_id\x18\x01 \x01(\tB3\x92\x41&2\x11\x45xternal Group IDJ\x11\"02y3w247124ccqi\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\nexternalId\x12H\n\x0c\x64isplay_name\x18\x02 \x01(\tB%\x92\x41\x18\x32\x0c\x44isplay NameJ\x08\"Admins\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x0b\x64isplayName\x12\x42\n\x05\x65mail\x18\x03 \x01(\tB,\x92\x41\x1f\x32\x05\x45mailJ\x16\"johndoe@scalekit.com\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x05\x65mail\"\xb2\x03\n\x0e\x44irectoryGroup\x12M\n\x02id\x18\x01 \x01(\tB=\x92\x41&2\x08Group IDJ\x1a\"dirgroup_121312434123312\"\xbaH\x11r\x0f\x10\x01\x18$:\tdirgroup_R\x02id\x12H\n\x0c\x64isplay_name\x18\x02 \x01(\tB%\x92\x41\x18\x32\x0c\x44isplay NameJ\x08\"Admins\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x0b\x64isplayName\x12\x42\n\x0btotal_users\x18\x03 \x01(\x05\x42!\x92\x41\x1e\x32\x18Total Users in the GroupJ\x02\x31\x30R\ntotalUsers\x12\x62\n\nupdated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\'\x92\x41$2\nUpdated AtJ\x16\"2024-10-01T00:00:00Z\"R\tupdatedAt\x12_\n\x0cgroup_detail\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructB#\x92\x41 2\x1e\x43omplete Group Details PayloadR\x0bgroupDetail\"\xb9\x01\n\x1c\x43reateDirectorySecretRequest\x12\x65\n\x0forganization_id\x18\x01 \x01(\tB<\x92\x41*2\x0fOrganization IDJ\x17\"org_12362474900684814\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x32\n\x0c\x64irectory_id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\"\xa4\x02\n\x1d\x43reateDirectorySecretResponse\x12\xb4\x01\n\x0cplain_secret\x18\x01 \x01(\tB\x90\x01\x92\x41\x8c\x01\x32VPlain Secret. This is only returned in Plain Text as response to the Creation Request.J2\"dXNlcm5hbWU6cGFzc3dvcmQ6c2VjcmV0a2V5MTIzNDU2Nzg5\"R\x0bplainSecret\x12L\n\x06secret\x18\x02 \x01(\x0b\x32\x1f.scalekit.v1.directories.SecretB\x13\x92\x41\x10\x32\x0eSecret DetailsR\x06secret\"\x90\x01\n RegenerateDirectorySecretRequest\x12\x38\n\x0forganization_id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x32\n\x0c\x64irectory_id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\"\xa8\x02\n!RegenerateDirectorySecretResponse\x12\xb4\x01\n\x0cplain_secret\x18\x01 \x01(\tB\x90\x01\x92\x41\x8c\x01\x32VPlain Secret. This is only returned in Plain Text as response to the Creation Request.J2\"dXNlcm5hbWU6cGFzc3dvcmQ6c2VjcmV0a2V5MTIzNDU2Nzg5\"R\x0bplainSecret\x12L\n\x06secret\x18\x02 \x01(\x0b\x32\x1f.scalekit.v1.directories.SecretB\x13\x92\x41\x10\x32\x0eSecret DetailsR\x06secret\"\xe6\x04\n\x06Secret\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04sec_R\x02id\x12g\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB*\x92\x41\'2\rCreation TimeJ\x16\"2024-10-01T00:00:00Z\"R\ncreateTime\x12?\n\rsecret_suffix\x18\x04 \x01(\tB\x1a\x92\x41\x17\x32\rSecret SuffixJ\x06\"Nzg5\"R\x0csecretSuffix\x12]\n\x06status\x18\x05 \x01(\x0e\x32%.scalekit.v1.directories.SecretStatusB\x1e\x92\x41\x1b\x32\rSecret StatusJ\n\"INACTIVE\"R\x06status\x12\x65\n\x0b\x65xpire_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB(\x92\x41%2\x0b\x45xpiry TimeJ\x16\"2025-10-01T00:00:00Z\"R\nexpireTime\x12m\n\x0elast_used_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB+\x92\x41(2\x0eLast Used TimeJ\x16\"2024-10-01T00:00:00Z\"R\x0clastUsedTime\x12\\\n\x0c\x64irectory_id\x18\t \x01(\tB9\x92\x41\'2\x0c\x44irectory IDJ\x17\"dir_12362474900684814\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\"\xb7\x03\n\x05Stats\x12\x46\n\x0btotal_users\x18\x01 \x01(\x05\x42%\x92\x41\"2\x1cTotal Users in the DirectoryJ\x02\x31\x30R\ntotalUsers\x12I\n\x0ctotal_groups\x18\x02 \x01(\x05\x42&\x92\x41#2\x1dTotal Groups in the DirectoryJ\x02\x31\x30R\x0btotalGroups\x12\x8d\x01\n\x10group_updated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBG\x92\x41\x44\x32*Max time of Group Updated At for DirectoryJ\x16\"2024-10-01T00:00:00Z\"R\x0egroupUpdatedAt\x12\x8a\x01\n\x0fuser_updated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampBF\x92\x41\x43\x32)Max time of User Updated At for DirectoryJ\x16\"2024-10-01T00:00:00Z\"R\ruserUpdatedAt\"\xb8\x01\n\x12\x41ssignRolesRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\x19\n\x02id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18 R\x02id\x12S\n\x10role_assignments\x18\x03 \x01(\x0b\x32(.scalekit.v1.directories.RoleAssignmentsR\x0froleAssignments\"\\\n\x0fRoleAssignments\x12I\n\x0b\x61ssignments\x18\x01 \x03(\x0b\x32\'.scalekit.v1.directories.RoleAssignmentR\x0b\x61ssignments\"j\n\x13\x41ssignRolesResponse\x12S\n\x10role_assignments\x18\x01 \x01(\x0b\x32(.scalekit.v1.directories.RoleAssignmentsR\x0froleAssignments\"\x99\x02\n\x0eRoleAssignment\x12_\n\x08group_id\x18\x01 \x01(\tBD\x92\x41\x38\x32\x1dgroup ID for the role mappingJ\x17\"dirgroup_121312434123\"\xbaH\x06r\x04\x10\x01\x18 R\x07groupId\x12?\n\trole_name\x18\x02 \x01(\tB\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\x65\n\x07role_id\x18\x03 \x01(\tBL\x92\x41\x33\x32\x1crole ID for the role mappingJ\x13\"role_121312434123\"\xbaH\x04r\x02\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\x06roleId\"\xcd\x01\n\x17UpdateAttributesRequest\x12\x38\n\x0forganization_id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x1f\n\x02id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02id\x12W\n\x11\x61ttribute_mapping\x18\x03 \x01(\x0b\x32*.scalekit.v1.directories.AttributeMappingsR\x10\x61ttributeMapping\"^\n\x11\x41ttributeMappings\x12I\n\nattributes\x18\x01 \x03(\x0b\x32).scalekit.v1.directories.AttributeMappingR\nattributes\"W\n\x10\x41ttributeMapping\x12\x1e\n\x03key\x18\x01 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x03key\x12#\n\x06map_to\x18\x02 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x05mapTo\"u\n\x18UpdateAttributesResponse\x12Y\n\x12\x61ttribute_mappings\x18\x01 \x01(\x0b\x32*.scalekit.v1.directories.AttributeMappingsR\x11\x61ttributeMappings\"y\n\x16\x44\x65leteDirectoryRequest\x12\x38\n\x0forganization_id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x1f\n\x02id\x18\x03 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02idJ\x04\x08\x02\x10\x03\"\xfb\x01\n\x1bTriggerDirectorySyncRequest\x12h\n\x0c\x64irectory_id\x18\x01 \x01(\tBE\x92\x41\x39\x32 Unique identifier of a DirectoryJ\x15\"dir_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0b\x64irectoryId\x12r\n\x0forganization_id\x18\x02 \x01(\tBI\x92\x41=2$Unique identifier to an OrganizationJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId*M\n\rDirectoryType\x12\x1e\n\x1a\x44IRECTORY_TYPE_UNSPECIFIED\x10\x00\x12\x08\n\x04SCIM\x10\x01\x12\x08\n\x04LDAP\x10\x02\x12\x08\n\x04POLL\x10\x03*\x9a\x01\n\x11\x44irectoryProvider\x12\"\n\x1e\x44IRECTORY_PROVIDER_UNSPECIFIED\x10\x00\x12\x08\n\x04OKTA\x10\x01\x12\n\n\x06GOOGLE\x10\x02\x12\x10\n\x0cMICROSOFT_AD\x10\x03\x12\t\n\x05\x41UTH0\x10\x04\x12\x0c\n\x08ONELOGIN\x10\x05\x12\r\n\tJUMPCLOUD\x10\x06\x12\x11\n\rPING_IDENTITY\x10\x07*^\n\x0f\x44irectoryStatus\x12 \n\x1c\x44IRECTORY_STATUS_UNSPECIFIED\x10\x00\x12\t\n\x05\x44RAFT\x10\x01\x12\x0f\n\x0bIN_PROGRESS\x10\x02\x12\r\n\tCOMPLETED\x10\x03*(\n\x0cSecretStatus\x12\n\n\x06\x41\x43TIVE\x10\x00\x12\x0c\n\x08INACTIVE\x10\x01\x32\xeb\x31\n\x10\x44irectoryService\x12\xe4\x01\n\x0f\x43reateDirectory\x12/.scalekit.v1.directories.CreateDirectoryRequest\x1a\x30.scalekit.v1.directories.CreateDirectoryResponse\"n\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02@\"3/api/v1/organizations/{organization_id}/directories:\tdirectory\x12\x9e\x02\n\x0f\x44\x65leteDirectory\x12/.scalekit.v1.directories.DeleteDirectoryRequest\x1a\x16.google.protobuf.Empty\"\xc1\x01\x92\x41i\n\tDirectory\x12\x12\x44\x65lete a directory\x1a)Delete a Directory within an organizationJ\x1d\n\x03\x32\x30\x30\x12\x16\n\x14\x44\x65leted Successfully\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02:*8/api/v1/organizations/{organization_id}/directories/{id}\x12\xe9\x01\n\x0fUpdateDirectory\x12/.scalekit.v1.directories.UpdateDirectoryRequest\x1a\x30.scalekit.v1.directories.UpdateDirectoryResponse\"s\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x45\x32\x38/api/v1/organizations/{organization_id}/directories/{id}:\tdirectory\x12\xe7\x01\n\x18\x41ssignGroupsForDirectory\x12\x38.scalekit.v1.directories.AssignGroupsForDirectoryRequest\x1a\x16.google.protobuf.Empty\"y\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02K\x1a\x46/api/v1/organizations/{organization_id}/directories/{id}/groups:assign:\x01*\x12\xfb\x01\n\x0b\x41ssignRoles\x12+.scalekit.v1.directories.AssignRolesRequest\x1a,.scalekit.v1.directories.AssignRolesResponse\"\x90\x01\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x62\x1aN/api/v1/organizations/{organization_id}/directories/{id}/groups/-/roles:assign:\x10role_assignments\x12\x80\x02\n\x10UpdateAttributes\x12\x30.scalekit.v1.directories.UpdateAttributesRequest\x1a\x31.scalekit.v1.directories.UpdateAttributesResponse\"\x86\x01\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02X\x1a\x43/api/v1/organizations/{organization_id}/directories/{id}/attributes:\x11\x61ttribute_mapping\x12\xa4\x03\n\x0cGetDirectory\x12,.scalekit.v1.directories.GetDirectoryRequest\x1a-.scalekit.v1.directories.GetDirectoryResponse\"\xb6\x02\x92\x41\xda\x01\n\tDirectory\x12\x15Get directory details\x1aPRetrieves detailed information about a specific directory within an organizationJd\n\x03\x32\x30\x30\x12]\n(Successfully retrieved directory details\x12\x31\n/\x1a-.scalekit.v1.directories.GetDirectoryResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\x82\xd3\xe4\x93\x02:\x12\x38/api/v1/organizations/{organization_id}/directories/{id}\x12\xfd\x02\n\x0fListDirectories\x12/.scalekit.v1.directories.ListDirectoriesRequest\x1a\x30.scalekit.v1.directories.ListDirectoriesResponse\"\x86\x02\x92\x41\xaf\x01\n\tDirectory\x12\x1dList organization directoriesJ\x82\x01\n\x03\x32\x30\x30\x12{\nCSuccessfully retrieved the list of directories for the organization\x12\x34\n2\x1a\x30.scalekit.v1.directories.ListDirectoriesResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\x82\xd3\xe4\x93\x02\x35\x12\x33/api/v1/organizations/{organization_id}/directories\x12\xc3\x03\n\x0f\x45nableDirectory\x12/.scalekit.v1.directories.ToggleDirectoryRequest\x1a\x30.scalekit.v1.directories.ToggleDirectoryResponse\"\xcc\x02\x92\x41\xe8\x01\n\tDirectory\x12\x12\x45nable a directory\x1a\x7f\x41\x63tivates a directory within an organization, allowing it to synchronize users and groups with the connected Directory providerJF\n\x03\x32\x30\x30\x12?\n\x07Success\x12\x34\n2\x1a\x30.scalekit.v1.directories.ToggleDirectoryResponse\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\x82\xd3\xe4\x93\x02\x41\x32?/api/v1/organizations/{organization_id}/directories/{id}:enable\x12\x8e\x04\n\x10\x44isableDirectory\x12/.scalekit.v1.directories.ToggleDirectoryRequest\x1a\x30.scalekit.v1.directories.ToggleDirectoryResponse\"\x96\x03\x92\x41\xb1\x02\n\tDirectory\x12\x13\x44isable a directory\x1a\xaa\x01Stops synchronization of users and groups from a specified directory within an organization. This operation prevents further updates from the connected Directory providerJb\n\x03\x32\x30\x30\x12[\n#Successfully disabled the directory\x12\x34\n2\x1a\x30.scalekit.v1.directories.ToggleDirectoryResponse\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\x82\xd3\xe4\x93\x02\x42\x32@/api/v1/organizations/{organization_id}/directories/{id}:disable\x12\xcd\x04\n\x12ListDirectoryUsers\x12\x32.scalekit.v1.directories.ListDirectoryUsersRequest\x1a\x33.scalekit.v1.directories.ListDirectoryUsersResponse\"\xcd\x03\x92\x41\xe1\x02\n\tDirectory\x12\x14List directory users\x1a\xb2\x01Retrieves a list of all users within a specified directory for an organization. This endpoint allows you to view user accounts associated with your connected Directory Providers.J\x88\x01\n\x03\x32\x30\x30\x12\x80\x01\nESuccessfully retrieved the list of users from the specified directory\x12\x37\n5\x1a\x33.scalekit.v1.directories.ListDirectoryUsersResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\x82\xd3\xe4\x93\x02J\x12H/api/v1/organizations/{organization_id}/directories/{directory_id}/users\x12\xa4\x04\n\x13ListDirectoryGroups\x12\x33.scalekit.v1.directories.ListDirectoryGroupsRequest\x1a\x34.scalekit.v1.directories.ListDirectoryGroupsResponse\"\xa1\x03\x92\x41\xb4\x02\n\tDirectory\x12\x15List directory groups\x1a\x82\x01Retrieves all groups from a specified directory. Use this endpoint to view group structures from your connected identity provider.J\x8a\x01\n\x03\x32\x30\x30\x12\x82\x01\nFSuccessfully retrieved the list of groups from the specified directory\x12\x38\n6\x1a\x34.scalekit.v1.directories.ListDirectoryGroupsResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\x82\xd3\xe4\x93\x02K\x12I/api/v1/organizations/{organization_id}/directories/{directory_id}/groups\x12\xd3\x04\n\x1aListDirectoryGroupsSummary\x12:.scalekit.v1.directories.ListDirectoryGroupsSummaryRequest\x1a\x34.scalekit.v1.directories.ListDirectoryGroupsResponse\"\xc2\x03\x92\x41\xbe\x02\n\tDirectory\x12\x1dList directory groups summary\x1a\x84\x01Retrieves all groups from a specified directory. This is not a paginated api. It gives a summary view with id and name of the group.J\x8a\x01\n\x03\x32\x30\x30\x12\x82\x01\nFSuccessfully retrieved the list of groups from the specified directory\x12\x38\n6\x1a\x34.scalekit.v1.directories.ListDirectoryGroupsResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02S\x12Q/api/v1/organizations/{organization_id}/directories/{directory_id}/groups/summary\x12\xfe\x02\n\x15\x43reateDirectorySecret\x12\x35.scalekit.v1.directories.CreateDirectorySecretRequest\x1a\x36.scalekit.v1.directories.CreateDirectorySecretResponse\"\xf5\x01\x92\x41x\n\tDirectory\x12\x1d\x43reate secret for a directoryJL\n\x03\x32\x30\x30\x12\x45\n\x07Success\x12:\n8\x1a\x36.scalekit.v1.directories.CreateDirectorySecretResponse\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02L\"J/api/v1/organizations/{organization_id}/directories/{directory_id}/secrets\x12\x9e\x03\n\x19RegenerateDirectorySecret\x12\x39.scalekit.v1.directories.RegenerateDirectorySecretRequest\x1a:.scalekit.v1.directories.RegenerateDirectorySecretResponse\"\x89\x02\x92\x41\x80\x01\n\tDirectory\x12!Regenerate secret for a directoryJP\n\x03\x32\x30\x30\x12I\n\x07Success\x12>\n<\x1a:.scalekit.v1.directories.RegenerateDirectorySecretResponse\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02W\"U/api/v1/organizations/{organization_id}/directories/{directory_id}/secrets:regenerate\x12\xdd\x01\n\x14TriggerDirectorySync\x12\x34.scalekit.v1.directories.TriggerDirectorySyncRequest\x1a\x16.google.protobuf.Empty\"w\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02I\x12G/api/v1/organizations/{organization_id}/directories/{directory_id}:sync\x1a\xaa\x02\x92\x41\xa6\x02\n\tDirectory\x12\x98\x02\x44irectory management for viewing and controlling external identity provider connections in your Scalekit environment. This service provides endpoints for retrieving directory information, listing directories and their contents, and enabling or disabling directory synchronization.B7Z5github.com/scalekit-inc/scalekit/pkg/grpc/directoriesb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -271,14 +271,6 @@ _globals['_TRIGGERDIRECTORYSYNCREQUEST'].fields_by_name['directory_id']._serialized_options = b'\222A92 Unique identifier of a DirectoryJ\025\"dir_121312434123312\"\272H\006r\004\020\001\030 ' _globals['_TRIGGERDIRECTORYSYNCREQUEST'].fields_by_name['organization_id']._loaded_options = None _globals['_TRIGGERDIRECTORYSYNCREQUEST'].fields_by_name['organization_id']._serialized_options = b'\222A=2$Unique identifier to an OrganizationJ\025\"org_121312434123312\"\272H\006r\004\020\001\030 ' - _globals['_GETDIRECTORYCONTEXTREQUEST'].fields_by_name['directory_id']._loaded_options = None - _globals['_GETDIRECTORYCONTEXTREQUEST'].fields_by_name['directory_id']._serialized_options = b'\272H\017r\n\020\001\030 :\004dir_\310\001\001' - _globals['_GETDIRECTORYCONTEXTREQUEST'].fields_by_name['organization_id']._loaded_options = None - _globals['_GETDIRECTORYCONTEXTREQUEST'].fields_by_name['organization_id']._serialized_options = b'\272H\017r\n\020\001\030 :\004org_\310\001\001' - _globals['_UPDATEDIRECTORYCONTEXTREQUEST'].fields_by_name['directory_id']._loaded_options = None - _globals['_UPDATEDIRECTORYCONTEXTREQUEST'].fields_by_name['directory_id']._serialized_options = b'\272H\017r\n\020\001\030 :\004dir_\310\001\001' - _globals['_UPDATEDIRECTORYCONTEXTREQUEST'].fields_by_name['organization_id']._loaded_options = None - _globals['_UPDATEDIRECTORYCONTEXTREQUEST'].fields_by_name['organization_id']._serialized_options = b'\272H\017r\n\020\001\030 :\004org_\310\001\001' _globals['_DIRECTORYSERVICE']._loaded_options = None _globals['_DIRECTORYSERVICE']._serialized_options = b'\222A\246\002\n\tDirectory\022\230\002Directory management for viewing and controlling external identity provider connections in your Scalekit environment. This service provides endpoints for retrieving directory information, listing directories and their contents, and enabling or disabling directory synchronization.' _globals['_DIRECTORYSERVICE'].methods_by_name['CreateDirectory']._loaded_options = None @@ -313,18 +305,14 @@ _globals['_DIRECTORYSERVICE'].methods_by_name['RegenerateDirectorySecret']._serialized_options = b'\222A\200\001\n\tDirectory\022!Regenerate secret for a directoryJP\n\003200\022I\n\007Success\022>\n<\032:.scalekit.v1.directories.RegenerateDirectorySecretResponse\202\265\030\025\n\021directories_write\030t\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002W\"U/api/v1/organizations/{organization_id}/directories/{directory_id}/secrets:regenerate' _globals['_DIRECTORYSERVICE'].methods_by_name['TriggerDirectorySync']._loaded_options = None _globals['_DIRECTORYSERVICE'].methods_by_name['TriggerDirectorySync']._serialized_options = b'\202\265\030\025\n\021directories_write\030t\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002I\022G/api/v1/organizations/{organization_id}/directories/{directory_id}:sync' - _globals['_DIRECTORYSERVICE'].methods_by_name['GetDirectoryContext']._loaded_options = None - _globals['_DIRECTORYSERVICE'].methods_by_name['GetDirectoryContext']._serialized_options = b'\222A\247\001\n\tDirectory\022\025Get directory context\032;Retrieves the custom context data for a specific directory.J\'\n\003200\022 \n\036Returns the directory context.J\035\n\003404\022\026\n\024Directory not found.\202\265\030\002\030p\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002M\022K/api/v1/organizations/{organization_id}/directories/{directory_id}/contexts' - _globals['_DIRECTORYSERVICE'].methods_by_name['UpdateDirectoryContext']._loaded_options = None - _globals['_DIRECTORYSERVICE'].methods_by_name['UpdateDirectoryContext']._serialized_options = b'\222A\302\001\n\tDirectory\022\030Update directory context\0329Updates the custom context data for a specific directory.J&\n\003200\022\037\n\035Context updated successfully.J\031\n\003400\022\022\n\020Invalid request.J\035\n\003404\022\026\n\024Directory not found.\202\265\030\002\030p\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002V\032K/api/v1/organizations/{organization_id}/directories/{directory_id}/contexts:\007context' - _globals['_DIRECTORYTYPE']._serialized_start=15830 - _globals['_DIRECTORYTYPE']._serialized_end=15907 - _globals['_DIRECTORYPROVIDER']._serialized_start=15910 - _globals['_DIRECTORYPROVIDER']._serialized_end=16064 - _globals['_DIRECTORYSTATUS']._serialized_start=16066 - _globals['_DIRECTORYSTATUS']._serialized_end=16160 - _globals['_SECRETSTATUS']._serialized_start=16162 - _globals['_SECRETSTATUS']._serialized_end=16202 + _globals['_DIRECTORYTYPE']._serialized_start=15400 + _globals['_DIRECTORYTYPE']._serialized_end=15477 + _globals['_DIRECTORYPROVIDER']._serialized_start=15480 + _globals['_DIRECTORYPROVIDER']._serialized_end=15634 + _globals['_DIRECTORYSTATUS']._serialized_start=15636 + _globals['_DIRECTORYSTATUS']._serialized_end=15730 + _globals['_SECRETSTATUS']._serialized_start=15732 + _globals['_SECRETSTATUS']._serialized_end=15772 _globals['_GETDIRECTORYREQUEST']._serialized_start=434 _globals['_GETDIRECTORYREQUEST']._serialized_end=653 _globals['_GETDIRECTORYRESPONSE']._serialized_start=656 @@ -403,12 +391,6 @@ _globals['_DELETEDIRECTORYREQUEST']._serialized_end=15144 _globals['_TRIGGERDIRECTORYSYNCREQUEST']._serialized_start=15147 _globals['_TRIGGERDIRECTORYSYNCREQUEST']._serialized_end=15398 - _globals['_GETDIRECTORYCONTEXTREQUEST']._serialized_start=15401 - _globals['_GETDIRECTORYCONTEXTREQUEST']._serialized_end=15545 - _globals['_GETDIRECTORYCONTEXTRESPONSE']._serialized_start=15547 - _globals['_GETDIRECTORYCONTEXTRESPONSE']._serialized_end=15627 - _globals['_UPDATEDIRECTORYCONTEXTREQUEST']._serialized_start=15630 - _globals['_UPDATEDIRECTORYCONTEXTREQUEST']._serialized_end=15828 - _globals['_DIRECTORYSERVICE']._serialized_start=16205 - _globals['_DIRECTORYSERVICE']._serialized_end=23414 + _globals['_DIRECTORYSERVICE']._serialized_start=15775 + _globals['_DIRECTORYSERVICE']._serialized_end=22154 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/directories/directories_pb2.pyi b/scalekit/v1/directories/directories_pb2.pyi index 7b8a8b3..6949d63 100644 --- a/scalekit/v1/directories/directories_pb2.pyi +++ b/scalekit/v1/directories/directories_pb2.pyi @@ -474,27 +474,3 @@ class TriggerDirectorySyncRequest(_message.Message): directory_id: str organization_id: str def __init__(self, directory_id: _Optional[str] = ..., organization_id: _Optional[str] = ...) -> None: ... - -class GetDirectoryContextRequest(_message.Message): - __slots__ = ("directory_id", "organization_id") - DIRECTORY_ID_FIELD_NUMBER: _ClassVar[int] - ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] - directory_id: str - organization_id: str - def __init__(self, directory_id: _Optional[str] = ..., organization_id: _Optional[str] = ...) -> None: ... - -class GetDirectoryContextResponse(_message.Message): - __slots__ = ("context",) - CONTEXT_FIELD_NUMBER: _ClassVar[int] - context: _struct_pb2.Struct - def __init__(self, context: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... - -class UpdateDirectoryContextRequest(_message.Message): - __slots__ = ("directory_id", "organization_id", "context") - DIRECTORY_ID_FIELD_NUMBER: _ClassVar[int] - ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] - CONTEXT_FIELD_NUMBER: _ClassVar[int] - directory_id: str - organization_id: str - context: _struct_pb2.Struct - def __init__(self, directory_id: _Optional[str] = ..., organization_id: _Optional[str] = ..., context: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... diff --git a/scalekit/v1/directories/directories_pb2_grpc.py b/scalekit/v1/directories/directories_pb2_grpc.py index b744f6c..c91991d 100644 --- a/scalekit/v1/directories/directories_pb2_grpc.py +++ b/scalekit/v1/directories/directories_pb2_grpc.py @@ -95,16 +95,6 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_directories_dot_directories__pb2.TriggerDirectorySyncRequest.SerializeToString, response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, ) - self.GetDirectoryContext = channel.unary_unary( - '/scalekit.v1.directories.DirectoryService/GetDirectoryContext', - request_serializer=scalekit_dot_v1_dot_directories_dot_directories__pb2.GetDirectoryContextRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_directories_dot_directories__pb2.GetDirectoryContextResponse.FromString, - ) - self.UpdateDirectoryContext = channel.unary_unary( - '/scalekit.v1.directories.DirectoryService/UpdateDirectoryContext', - request_serializer=scalekit_dot_v1_dot_directories_dot_directories__pb2.UpdateDirectoryContextRequest.SerializeToString, - response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - ) class DirectoryServiceServicer(object): @@ -206,18 +196,6 @@ def TriggerDirectorySync(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') - def GetDirectoryContext(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def UpdateDirectoryContext(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - def add_DirectoryServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -301,16 +279,6 @@ def add_DirectoryServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_directories_dot_directories__pb2.TriggerDirectorySyncRequest.FromString, response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, ), - 'GetDirectoryContext': grpc.unary_unary_rpc_method_handler( - servicer.GetDirectoryContext, - request_deserializer=scalekit_dot_v1_dot_directories_dot_directories__pb2.GetDirectoryContextRequest.FromString, - response_serializer=scalekit_dot_v1_dot_directories_dot_directories__pb2.GetDirectoryContextResponse.SerializeToString, - ), - 'UpdateDirectoryContext': grpc.unary_unary_rpc_method_handler( - servicer.UpdateDirectoryContext, - request_deserializer=scalekit_dot_v1_dot_directories_dot_directories__pb2.UpdateDirectoryContextRequest.FromString, - response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, - ), } generic_handler = grpc.method_handlers_generic_handler( 'scalekit.v1.directories.DirectoryService', rpc_method_handlers) @@ -592,37 +560,3 @@ def TriggerDirectorySync(request, google_dot_protobuf_dot_empty__pb2.Empty.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - @staticmethod - def GetDirectoryContext(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.directories.DirectoryService/GetDirectoryContext', - scalekit_dot_v1_dot_directories_dot_directories__pb2.GetDirectoryContextRequest.SerializeToString, - scalekit_dot_v1_dot_directories_dot_directories__pb2.GetDirectoryContextResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - @staticmethod - def UpdateDirectoryContext(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.directories.DirectoryService/UpdateDirectoryContext', - scalekit_dot_v1_dot_directories_dot_directories__pb2.UpdateDirectoryContextRequest.SerializeToString, - google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/domains/domains_pb2.py b/scalekit/v1/domains/domains_pb2.py index ecf61ce..5945d7e 100644 --- a/scalekit/v1/domains/domains_pb2.py +++ b/scalekit/v1/domains/domains_pb2.py @@ -23,7 +23,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/domains/domains.proto\x12\x13scalekit.v1.domains\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\x8a\x06\n\x13\x43reateDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\xba\x01\n\rconnection_id\x18\x03 \x01(\tB\x8f\x01\x92\x41}2iOptional identity provider connection ID to associate with this domain for enterprise SSO configurations.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12x\n\x06\x64omain\x18\x04 \x01(\x0b\x32!.scalekit.v1.domains.CreateDomainB=\x92\x41:28Domain configuration including the domain name and type.R\x06\x64omainB\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\xb3\x01\n\x14\x43reateDomainResponse\x12\x9a\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBe\x92\x41\x62\x32`The newly created domain object with all configuration details and system-generated identifiers.R\x06\x64omain\"\xe6\x04\n\x0c\x43reateDomain\x12\xf6\x01\n\x06\x64omain\x18\x01 \x01(\tB\xdd\x01\x92\x41\xcc\x01\x32\xb3\x01The domain name to be configured. Must be a valid business domain you control. Public and disposable domains (gmail.com, outlook.com, etc.) are automatically blocked for security.J\x14\"customerdomain.com\"\xbaH\nr\x05\x10\x04\x18\xff\x01\xc8\x01\x01R\x06\x64omain\x12\xdc\x02\n\x0b\x64omain_type\x18\x02 \x01(\x0e\x32\x1f.scalekit.v1.domains.DomainTypeB\x99\x02\x92\x41\x95\x02\x32\xfb\x01The domain type.\n- ALLOWED_EMAIL_DOMAIN: trusted domain used to suggest the organization in the organization switcher during sign-in/sign-up.\n- ORGANIZATION_DOMAIN: SSO discovery domain used to route users to the correct SSO provider and enforce SSO.\nJ\x15\"ORGANIZATION_DOMAIN\"R\ndomainType\"\x84\x07\n\x13UpdateDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x9f\x01\n\rconnection_id\x18\x03 \x01(\tBu\x92\x41\x63\x32OOptional updated identity provider connection ID to associate with this domain.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12o\n\x02id\x18\x04 \x01(\tB_\x92\x41\\2AScalekit-generated unique identifier of the domain to be updated.J\x17\"dom_88351643129225005\"R\x02id\x12\x9b\x01\n\x06\x64omain\x18\x05 \x01(\x0b\x32!.scalekit.v1.domains.UpdateDomainB`\x92\x41]2[Domain update configuration. Currently empty as domain name cannot be changed once created.R\x06\x64omainB\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\x0e\n\x0cUpdateDomain\"\xa5\x01\n\x14UpdateDomainResponse\x12\x8c\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBW\x92\x41T2RThe updated domain object reflecting all changes made to the domain configuration.R\x06\x64omain\"\xad\x04\n\x10GetDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12m\n\x02id\x18\x03 \x01(\tB]\x92\x41Z2?Scalekit-generated unique identifier of the domain to retrieve.J\x17\"dom_88351643129225005\"R\x02idB\x0c\n\nidentities\"\xb6\x01\n\x11GetDomainResponse\x12\xa0\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBk\x92\x41h2fThe requested domain object with complete details including domain type, timestamps and configuration.R\x06\x64omain\"\xeb\x05\n\x13\x44\x65leteDomainRequest\x12{\n\x02id\x18\x01 \x01(\tBk\x92\x41h2MScalekit-generated unique identifier of the domain to be permanently deleted.J\x17\"dom_88351643129225005\"R\x02id\x12\xcb\x01\n\x0forganization_id\x18\x02 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x03 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x98\x01\n\rconnection_id\x18\x04 \x01(\tBn\x92\x41\\2HOptional connection ID for additional validation during domain deletion.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x42\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\xac\x0b\n\x11ListDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\xa8\x01\n\rconnection_id\x18\x03 \x01(\tB~\x92\x41l2XOptional filter to list domains associated with a specific identity provider connection.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12\xab\x01\n\x07include\x18\x04 \x01(\tB\x8b\x01\x92\x41\x87\x01\x32mOptional comma-separated list of additional fields to include in the response (e.g., \'verification_details\').J\x16\"verification_details\"H\x02R\x07include\x88\x01\x01\x12\x8f\x01\n\tpage_size\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueBU\x92\x41R2LMaximum number of domains to return per page. Default is 30, maximum is 100.J\x02\x33\x30R\x08pageSize\x12\x82\x01\n\x0bpage_number\x18\x06 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueBD\x92\x41\x41\x3224/api/v1/organizations/{organization_id}/domains/{id}:\x06\x64omain\x12\xff\x06\n\x0cVerifyDomain\x12(.scalekit.v1.domains.VerifyDomainRequest\x1a\x1a.google.protobuf.BoolValue\"\xa8\x06\x92\x41\xb7\x05\n\x07\x44omains\x12\rVerify Domain\x1a\x9e\x04Initiates domain ownership verification by checking the DNS TXT record that should be added to the domain\'s DNS configuration.\n\nUse this endpoint to manually trigger verification for domains that are in PENDING status. The system will check for the required TXT record and update the verification status accordingly.\n\nFor automatically verified domains, this endpoint will return true immediately. For domains requiring manual verification, ensure the TXT record has been properly configured in your DNS settings before calling this endpoint.J|\n\x03\x32\x30\x30\x12u\nSDomain verification result. Returns true if verification succeeds, false otherwise.\x12\x1e\n\x1c\x1a\x1a.google.protobuf.BoolValue\x82\xb5\x18\x17\n\x13organizations_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02=2;/api/v1/organizations/{organization_id}/domains/{id}:verify\x12\x9a\x03\n\tGetDomain\x12%.scalekit.v1.domains.GetDomainRequest\x1a&.scalekit.v1.domains.GetDomainResponse\"\xbd\x02\x92\x41\xe3\x01\n\x07\x44omains\x12\nGet Domain\x1akRetrieves complete details for a domain including domain type, timestamps, and configuration information.\n\nJ_\n\x03\x32\x30\x30\x12X\n*Successfully retrieved the domain details.\x12*\n(\x1a&.scalekit.v1.domains.GetDomainResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x36\x12\x34/api/v1/organizations/{organization_id}/domains/{id}\x12\xe4\x03\n\x0c\x44\x65leteDomain\x12(.scalekit.v1.domains.DeleteDomainRequest\x1a\x16.google.protobuf.Empty\"\x91\x03\x92\x41\xb6\x02\n\x07\x44omains\x12\rDelete Domain\x1a\xf4\x01Permanently removes a domain record from an organization.\n\n- Deleting an ORGANIZATION_DOMAIN disables SSO routing/enforcement for that domain.\n- Deleting an ALLOWED_EMAIL_DOMAIN stops organization suggestions for users with that email domain.\n\nJ%\n\x03\x32\x30\x30\x12\x1e\n\x1c\x44omain successfully deleted.\x82\xb5\x18\x17\n\x13organizations_write\x18t\x82\xd3\xe4\x93\x02\x36*4/api/v1/organizations/{organization_id}/domains/{id}\x12\x9b\x05\n\x0bListDomains\x12&.scalekit.v1.domains.ListDomainRequest\x1a\'.scalekit.v1.domains.ListDomainResponse\"\xba\x04\x92\x41\xe5\x03\n\x07\x44omains\x12\x0cList Domains\x1a\xe8\x02Retrieves a paginated list of all domains configured for the specified organization.\n\nDomain types:\n- ALLOWED_EMAIL_DOMAIN: Trusted domains used to suggest the organization in the organization switcher during sign-in/sign-up (auth-method agnostic).\n- ORGANIZATION_DOMAIN: SSO discovery domains used to route users to the correct SSO provider and enforce SSO.\n\nJa\n\x03\x32\x30\x30\x12Z\n+Successfully retrieved the list of domains.\x12+\n)\x1a\'.scalekit.v1.domains.ListDomainResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x31\x12//api/v1/organizations/{organization_id}/domains\x12\x90\x05\n\x15ListAuthorizedDomains\x12\x30.scalekit.v1.domains.ListAuthorizedDomainRequest\x1a\x31.scalekit.v1.domains.ListAuthorizedDomainResponse\"\x91\x04\x92\x41\xd8\x03\n\x07\x44omains\x12\x17List Authorized Domains\x1a\xbb\x02Retrieves a list of domains that are authorized for use with the specified origin URL.\n\nUse this endpoint to validate whether a particular domain is allowed for authentication or other domain-restricted operations.\n\nThis is commonly used by frontend applications to verify domain allowlists and CORS configurations.Jv\n\x03\x32\x30\x30\x12o\n6Successfully retrieved the list of authorized domains.\x12\x35\n3\x1a\x31.scalekit.v1.domains.ListAuthorizedDomainResponse\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1a\x12\x18/api/v1/domains/{origin}\x1a\xf8\x03\x92\x41\xf4\x03\n\x07\x44omains\x12\xe8\x03Manage organization-level domains. Scalekit supports two domain types:\n\n- ORGANIZATION_DOMAIN: Used for SSO domain discovery. When a user signs in with a matching email domain, Scalekit routes them to the organization\xe2\x80\x99s SSO provider and enforces SSO.\n- ALLOWED_EMAIL_DOMAIN: Used to mark trusted email domains for an organization. When a user signs in or signs up with a matching domain, Scalekit suggests the organization in the organization switcher (authentication-method agnostic).\nB3Z1github.com/scalekit-inc/scalekit/pkg/grpc/domainsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/domains/domains.proto\x12\x13scalekit.v1.domains\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\x8a\x06\n\x13\x43reateDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\xba\x01\n\rconnection_id\x18\x03 \x01(\tB\x8f\x01\x92\x41}2iOptional identity provider connection ID to associate with this domain for enterprise SSO configurations.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12x\n\x06\x64omain\x18\x04 \x01(\x0b\x32!.scalekit.v1.domains.CreateDomainB=\x92\x41:28Domain configuration including the domain name and type.R\x06\x64omainB\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\xb3\x01\n\x14\x43reateDomainResponse\x12\x9a\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBe\x92\x41\x62\x32`The newly created domain object with all configuration details and system-generated identifiers.R\x06\x64omain\"\xe6\x04\n\x0c\x43reateDomain\x12\xf6\x01\n\x06\x64omain\x18\x01 \x01(\tB\xdd\x01\x92\x41\xcc\x01\x32\xb3\x01The domain name to be configured. Must be a valid business domain you control. Public and disposable domains (gmail.com, outlook.com, etc.) are automatically blocked for security.J\x14\"customerdomain.com\"\xbaH\nr\x05\x10\x04\x18\xff\x01\xc8\x01\x01R\x06\x64omain\x12\xdc\x02\n\x0b\x64omain_type\x18\x02 \x01(\x0e\x32\x1f.scalekit.v1.domains.DomainTypeB\x99\x02\x92\x41\x95\x02\x32\xfb\x01The domain type.\n- ALLOWED_EMAIL_DOMAIN: trusted domain used to suggest the organization in the organization switcher during sign-in/sign-up.\n- ORGANIZATION_DOMAIN: SSO discovery domain used to route users to the correct SSO provider and enforce SSO.\nJ\x15\"ORGANIZATION_DOMAIN\"R\ndomainType\"\x84\x07\n\x13UpdateDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x9f\x01\n\rconnection_id\x18\x03 \x01(\tBu\x92\x41\x63\x32OOptional updated identity provider connection ID to associate with this domain.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12o\n\x02id\x18\x04 \x01(\tB_\x92\x41\\2AScalekit-generated unique identifier of the domain to be updated.J\x17\"dom_88351643129225005\"R\x02id\x12\x9b\x01\n\x06\x64omain\x18\x05 \x01(\x0b\x32!.scalekit.v1.domains.UpdateDomainB`\x92\x41]2[Domain update configuration. Currently empty as domain name cannot be changed once created.R\x06\x64omainB\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\x0e\n\x0cUpdateDomain\"\xa5\x01\n\x14UpdateDomainResponse\x12\x8c\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBW\x92\x41T2RThe updated domain object reflecting all changes made to the domain configuration.R\x06\x64omain\"\xad\x04\n\x10GetDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12m\n\x02id\x18\x03 \x01(\tB]\x92\x41Z2?Scalekit-generated unique identifier of the domain to retrieve.J\x17\"dom_88351643129225005\"R\x02idB\x0c\n\nidentities\"\xb6\x01\n\x11GetDomainResponse\x12\xa0\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBk\x92\x41h2fThe requested domain object with complete details including domain type, timestamps and configuration.R\x06\x64omain\"\xeb\x05\n\x13\x44\x65leteDomainRequest\x12{\n\x02id\x18\x01 \x01(\tBk\x92\x41h2MScalekit-generated unique identifier of the domain to be permanently deleted.J\x17\"dom_88351643129225005\"R\x02id\x12\xcb\x01\n\x0forganization_id\x18\x02 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x03 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x98\x01\n\rconnection_id\x18\x04 \x01(\tBn\x92\x41\\2HOptional connection ID for additional validation during domain deletion.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x42\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\xac\x0b\n\x11ListDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\xa8\x01\n\rconnection_id\x18\x03 \x01(\tB~\x92\x41l2XOptional filter to list domains associated with a specific identity provider connection.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12\xab\x01\n\x07include\x18\x04 \x01(\tB\x8b\x01\x92\x41\x87\x01\x32mOptional comma-separated list of additional fields to include in the response (e.g., \'verification_details\').J\x16\"verification_details\"H\x02R\x07include\x88\x01\x01\x12\x8f\x01\n\tpage_size\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueBU\x92\x41R2LMaximum number of domains to return per page. Default is 30, maximum is 100.J\x02\x33\x30R\x08pageSize\x12\x82\x01\n\x0bpage_number\x18\x06 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueBD\x92\x41\x41\x3224/api/v1/organizations/{organization_id}/domains/{id}:\x06\x64omain\x12\xea\x06\n\x0cVerifyDomain\x12(.scalekit.v1.domains.VerifyDomainRequest\x1a\x1a.google.protobuf.BoolValue\"\x93\x06\x92\x41\xb7\x05\n\x07\x44omains\x12\rVerify Domain\x1a\x9e\x04Initiates domain ownership verification by checking the DNS TXT record that should be added to the domain\'s DNS configuration.\n\nUse this endpoint to manually trigger verification for domains that are in PENDING status. The system will check for the required TXT record and update the verification status accordingly.\n\nFor automatically verified domains, this endpoint will return true immediately. For domains requiring manual verification, ensure the TXT record has been properly configured in your DNS settings before calling this endpoint.J|\n\x03\x32\x30\x30\x12u\nSDomain verification result. Returns true if verification succeeds, false otherwise.\x12\x1e\n\x1c\x1a\x1a.google.protobuf.BoolValue\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02=2;/api/v1/organizations/{organization_id}/domains/{id}:verify\x12\x9a\x03\n\tGetDomain\x12%.scalekit.v1.domains.GetDomainRequest\x1a&.scalekit.v1.domains.GetDomainResponse\"\xbd\x02\x92\x41\xe3\x01\n\x07\x44omains\x12\nGet Domain\x1akRetrieves complete details for a domain including domain type, timestamps, and configuration information.\n\nJ_\n\x03\x32\x30\x30\x12X\n*Successfully retrieved the domain details.\x12*\n(\x1a&.scalekit.v1.domains.GetDomainResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x36\x12\x34/api/v1/organizations/{organization_id}/domains/{id}\x12\xe4\x03\n\x0c\x44\x65leteDomain\x12(.scalekit.v1.domains.DeleteDomainRequest\x1a\x16.google.protobuf.Empty\"\x91\x03\x92\x41\xb6\x02\n\x07\x44omains\x12\rDelete Domain\x1a\xf4\x01Permanently removes a domain record from an organization.\n\n- Deleting an ORGANIZATION_DOMAIN disables SSO routing/enforcement for that domain.\n- Deleting an ALLOWED_EMAIL_DOMAIN stops organization suggestions for users with that email domain.\n\nJ%\n\x03\x32\x30\x30\x12\x1e\n\x1c\x44omain successfully deleted.\x82\xb5\x18\x17\n\x13organizations_write\x18t\x82\xd3\xe4\x93\x02\x36*4/api/v1/organizations/{organization_id}/domains/{id}\x12\x9b\x05\n\x0bListDomains\x12&.scalekit.v1.domains.ListDomainRequest\x1a\'.scalekit.v1.domains.ListDomainResponse\"\xba\x04\x92\x41\xe5\x03\n\x07\x44omains\x12\x0cList Domains\x1a\xe8\x02Retrieves a paginated list of all domains configured for the specified organization.\n\nDomain types:\n- ALLOWED_EMAIL_DOMAIN: Trusted domains used to suggest the organization in the organization switcher during sign-in/sign-up (auth-method agnostic).\n- ORGANIZATION_DOMAIN: SSO discovery domains used to route users to the correct SSO provider and enforce SSO.\n\nJa\n\x03\x32\x30\x30\x12Z\n+Successfully retrieved the list of domains.\x12+\n)\x1a\'.scalekit.v1.domains.ListDomainResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x31\x12//api/v1/organizations/{organization_id}/domains\x12\x90\x05\n\x15ListAuthorizedDomains\x12\x30.scalekit.v1.domains.ListAuthorizedDomainRequest\x1a\x31.scalekit.v1.domains.ListAuthorizedDomainResponse\"\x91\x04\x92\x41\xd8\x03\n\x07\x44omains\x12\x17List Authorized Domains\x1a\xbb\x02Retrieves a list of domains that are authorized for use with the specified origin URL.\n\nUse this endpoint to validate whether a particular domain is allowed for authentication or other domain-restricted operations.\n\nThis is commonly used by frontend applications to verify domain allowlists and CORS configurations.Jv\n\x03\x32\x30\x30\x12o\n6Successfully retrieved the list of authorized domains.\x12\x35\n3\x1a\x31.scalekit.v1.domains.ListAuthorizedDomainResponse\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1a\x12\x18/api/v1/domains/{origin}\x1a\xf8\x03\x92\x41\xf4\x03\n\x07\x44omains\x12\xe8\x03Manage organization-level domains. Scalekit supports two domain types:\n\n- ORGANIZATION_DOMAIN: Used for SSO domain discovery. When a user signs in with a matching email domain, Scalekit routes them to the organization\xe2\x80\x99s SSO provider and enforces SSO.\n- ALLOWED_EMAIL_DOMAIN: Used to mark trusted email domains for an organization. When a user signs in or signs up with a matching domain, Scalekit suggests the organization in the organization switcher (authentication-method agnostic).\nB3Z1github.com/scalekit-inc/scalekit/pkg/grpc/domainsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -101,8 +101,6 @@ _globals['_LISTDOMAINRESPONSE'].fields_by_name['domains']._serialized_options = b'\222Ah2fArray of domain objects containing all domain details including verification status and configuration.' _globals['_LISTAUTHORIZEDDOMAINREQUEST'].fields_by_name['origin']._loaded_options = None _globals['_LISTAUTHORIZEDDOMAINREQUEST'].fields_by_name['origin']._serialized_options = b'\222Af2OThe origin URL to check for authorized domains (e.g., https://app.example.com).J\023\"https://myapp.com\"' - _globals['_LISTAUTHORIZEDDOMAINREQUEST'].fields_by_name['link_id']._loaded_options = None - _globals['_LISTAUTHORIZEDDOMAINREQUEST'].fields_by_name['link_id']._serialized_options = b'\222A\344\0012\271\001Optional link key UUID used to resolve organization-specific template redirect URI origins for pre-authentication CSP evaluation. Scope suffixes (e.g. \'_pc\') are stripped automatically.J&\"a1b2c3d4-e5f6-7890-abcd-ef1234567890\"' _globals['_LISTAUTHORIZEDDOMAINRESPONSE'].fields_by_name['domains']._loaded_options = None _globals['_LISTAUTHORIZEDDOMAINRESPONSE'].fields_by_name['domains']._serialized_options = b'\222Ar2LArray of domain names that are authorized for use with the specified origin.J\"[\"example.com\", \"app.example.com\"]' _globals['_DOMAIN'].fields_by_name['id']._loaded_options = None @@ -132,7 +130,7 @@ _globals['_DOMAINSERVICE'].methods_by_name['UpdateDomain']._loaded_options = None _globals['_DOMAINSERVICE'].methods_by_name['UpdateDomain']._serialized_options = b'\222A\226\004\n\007Domains\022\rUpdate Domain\032\241\003Updates an existing domain\'s configuration within an organization. Currently supports updating domain metadata and configuration settings.\n\nUse this endpoint to modify domain properties after initial creation. Note that the domain name itself cannot be changed once created.\n\nThe domain must belong to the specified organization and you must provide either the organization ID or external ID along with the domain ID.JX\n\003200\022Q\n Successfully updated the domain.\022-\n+\032).scalekit.v1.domains.UpdateDomainResponse\202\265\030\027\n\023organizations_write\030t\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002>24/api/v1/organizations/{organization_id}/domains/{id}:\006domain' _globals['_DOMAINSERVICE'].methods_by_name['VerifyDomain']._loaded_options = None - _globals['_DOMAINSERVICE'].methods_by_name['VerifyDomain']._serialized_options = b'\222A\267\005\n\007Domains\022\rVerify Domain\032\236\004Initiates domain ownership verification by checking the DNS TXT record that should be added to the domain\'s DNS configuration.\n\nUse this endpoint to manually trigger verification for domains that are in PENDING status. The system will check for the required TXT record and update the verification status accordingly.\n\nFor automatically verified domains, this endpoint will return true immediately. For domains requiring manual verification, ensure the TXT record has been properly configured in your DNS settings before calling this endpoint.J|\n\003200\022u\nSDomain verification result. Returns true if verification succeeds, false otherwise.\022\036\n\034\032\032.google.protobuf.BoolValue\202\265\030\027\n\023organizations_write\030t\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002=2;/api/v1/organizations/{organization_id}/domains/{id}:verify' + _globals['_DOMAINSERVICE'].methods_by_name['VerifyDomain']._serialized_options = b'\222A\267\005\n\007Domains\022\rVerify Domain\032\236\004Initiates domain ownership verification by checking the DNS TXT record that should be added to the domain\'s DNS configuration.\n\nUse this endpoint to manually trigger verification for domains that are in PENDING status. The system will check for the required TXT record and update the verification status accordingly.\n\nFor automatically verified domains, this endpoint will return true immediately. For domains requiring manual verification, ensure the TXT record has been properly configured in your DNS settings before calling this endpoint.J|\n\003200\022u\nSDomain verification result. Returns true if verification succeeds, false otherwise.\022\036\n\034\032\032.google.protobuf.BoolValue\202\265\030\002\030d\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002=2;/api/v1/organizations/{organization_id}/domains/{id}:verify' _globals['_DOMAINSERVICE'].methods_by_name['GetDomain']._loaded_options = None _globals['_DOMAINSERVICE'].methods_by_name['GetDomain']._serialized_options = b'\222A\343\001\n\007Domains\022\nGet Domain\032kRetrieves complete details for a domain including domain type, timestamps, and configuration information.\n\nJ_\n\003200\022X\n*Successfully retrieved the domain details.\022*\n(\032&.scalekit.v1.domains.GetDomainResponse\202\265\030\026\n\022organizations_read\030t\202\323\344\223\0026\0224/api/v1/organizations/{organization_id}/domains/{id}' _globals['_DOMAINSERVICE'].methods_by_name['DeleteDomain']._loaded_options = None @@ -141,10 +139,10 @@ _globals['_DOMAINSERVICE'].methods_by_name['ListDomains']._serialized_options = b'\222A\345\003\n\007Domains\022\014List Domains\032\350\002Retrieves a paginated list of all domains configured for the specified organization.\n\nDomain types:\n- ALLOWED_EMAIL_DOMAIN: Trusted domains used to suggest the organization in the organization switcher during sign-in/sign-up (auth-method agnostic).\n- ORGANIZATION_DOMAIN: SSO discovery domains used to route users to the correct SSO provider and enforce SSO.\n\nJa\n\003200\022Z\n+Successfully retrieved the list of domains.\022+\n)\032\'.scalekit.v1.domains.ListDomainResponse\202\265\030\026\n\022organizations_read\030t\202\323\344\223\0021\022//api/v1/organizations/{organization_id}/domains' _globals['_DOMAINSERVICE'].methods_by_name['ListAuthorizedDomains']._loaded_options = None _globals['_DOMAINSERVICE'].methods_by_name['ListAuthorizedDomains']._serialized_options = b'\222A\330\003\n\007Domains\022\027List Authorized Domains\032\273\002Retrieves a list of domains that are authorized for use with the specified origin URL.\n\nUse this endpoint to validate whether a particular domain is allowed for authentication or other domain-restricted operations.\n\nThis is commonly used by frontend applications to verify domain allowlists and CORS configurations.Jv\n\003200\022o\n6Successfully retrieved the list of authorized domains.\0225\n3\0321.scalekit.v1.domains.ListAuthorizedDomainResponse\202\265\030\002\030\001\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\032\022\030/api/v1/domains/{origin}' - _globals['_VERIFICATIONSTATUS']._serialized_start=9391 - _globals['_VERIFICATIONSTATUS']._serialized_end=9506 - _globals['_DOMAINTYPE']._serialized_start=9508 - _globals['_DOMAINTYPE']._serialized_end=9600 + _globals['_VERIFICATIONSTATUS']._serialized_start=9130 + _globals['_VERIFICATIONSTATUS']._serialized_end=9245 + _globals['_DOMAINTYPE']._serialized_start=9247 + _globals['_DOMAINTYPE']._serialized_end=9339 _globals['_CREATEDOMAINREQUEST']._serialized_start=357 _globals['_CREATEDOMAINREQUEST']._serialized_end=1135 _globals['_CREATEDOMAINRESPONSE']._serialized_start=1138 @@ -170,11 +168,11 @@ _globals['_LISTDOMAINRESPONSE']._serialized_start=6582 _globals['_LISTDOMAINRESPONSE']._serialized_end=6936 _globals['_LISTAUTHORIZEDDOMAINREQUEST']._serialized_start=6939 - _globals['_LISTAUTHORIZEDDOMAINREQUEST']._serialized_end=7361 - _globals['_LISTAUTHORIZEDDOMAINRESPONSE']._serialized_start=7364 - _globals['_LISTAUTHORIZEDDOMAINRESPONSE']._serialized_end=7540 - _globals['_DOMAIN']._serialized_start=7543 - _globals['_DOMAIN']._serialized_end=9389 - _globals['_DOMAINSERVICE']._serialized_start=9603 - _globals['_DOMAINSERVICE']._serialized_end=15049 + _globals['_LISTAUTHORIZEDDOMAINREQUEST']._serialized_end=7100 + _globals['_LISTAUTHORIZEDDOMAINRESPONSE']._serialized_start=7103 + _globals['_LISTAUTHORIZEDDOMAINRESPONSE']._serialized_end=7279 + _globals['_DOMAIN']._serialized_start=7282 + _globals['_DOMAIN']._serialized_end=9128 + _globals['_DOMAINSERVICE']._serialized_start=9342 + _globals['_DOMAINSERVICE']._serialized_end=14767 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/domains/domains_pb2.pyi b/scalekit/v1/domains/domains_pb2.pyi index eb10967..acaa766 100644 --- a/scalekit/v1/domains/domains_pb2.pyi +++ b/scalekit/v1/domains/domains_pb2.pyi @@ -154,12 +154,10 @@ class ListDomainResponse(_message.Message): def __init__(self, page_size: _Optional[int] = ..., page_number: _Optional[int] = ..., domains: _Optional[_Iterable[_Union[Domain, _Mapping]]] = ...) -> None: ... class ListAuthorizedDomainRequest(_message.Message): - __slots__ = ("origin", "link_id") + __slots__ = ("origin",) ORIGIN_FIELD_NUMBER: _ClassVar[int] - LINK_ID_FIELD_NUMBER: _ClassVar[int] origin: str - link_id: str - def __init__(self, origin: _Optional[str] = ..., link_id: _Optional[str] = ...) -> None: ... + def __init__(self, origin: _Optional[str] = ...) -> None: ... class ListAuthorizedDomainResponse(_message.Message): __slots__ = ("domains",) diff --git a/scalekit/v1/emails/emails_pb2.py b/scalekit/v1/emails/emails_pb2.py index 55389ad..f0ceb15 100644 --- a/scalekit/v1/emails/emails_pb2.py +++ b/scalekit/v1/emails/emails_pb2.py @@ -15,7 +15,6 @@ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2 -from google.api import visibility_pb2 as google_dot_api_dot_visibility__pb2 from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 from google.protobuf import field_mask_pb2 as google_dot_protobuf_dot_field__mask__pb2 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 @@ -25,7 +24,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fscalekit/v1/emails/emails.proto\x12\x12scalekit.v1.emails\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"`\n\x16GetPlaceholdersRequest\x12\x46\n\x08use_case\x18\x01 \x01(\x0e\x32#.scalekit.v1.emails.TemplateUsecaseB\x06\xbaH\x03\xc8\x01\x01R\x07useCase\"B\n\x17GetPlaceholdersResponse\x12\'\n\x0cplaceholders\x18\x01 \x03(\tB\x03\xe0\x41\x03R\x0cplaceholders\"t\n\x1bGetTemplateUseCasesResponse\x12U\n\tuse_cases\x18\x01 \x03(\x0b\x32\x33.scalekit.v1.emails.TemplateUsecaseWithPlaceholdersB\x03\xe0\x41\x03R\x08useCases\"\xeb\x02\n\x1fTemplateUsecaseWithPlaceholders\x12\x46\n\x08use_case\x18\x01 \x01(\x0e\x32#.scalekit.v1.emails.TemplateUsecaseB\x06\xbaH\x03\xc8\x01\x01R\x07useCase\x12 \n\x05title\x18\x02 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x05title\x12,\n\x0b\x64\x65scription\x18\x03 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x0b\x64\x65scription\x12H\n\x0cplaceholders\x18\x04 \x03(\x0b\x32\x1f.scalekit.v1.emails.PlaceholderB\x03\xe0\x41\x03R\x0cplaceholders\x12\x18\n\x07\x64isplay\x18\x05 \x01(\x08R\x07\x64isplay\x12L\n\x10\x64\x65\x66\x61ult_template\x18\x06 \x01(\x0b\x32\x1c.scalekit.v1.emails.TemplateB\x03\xe0\x41\x03R\x0f\x64\x65\x66\x61ultTemplate\"\xe0\x01\n\x0bPlaceholder\x12\x1e\n\x04name\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x04name\x12 \n\x05title\x18\x02 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x05title\x12,\n\x0b\x64\x65scription\x18\x03 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x0b\x64\x65scription\x12\x18\n\x07\x64isplay\x18\x04 \x01(\x08R\x07\x64isplay\x12\x1a\n\x08\x63\x61tegory\x18\x05 \x01(\tR\x08\x63\x61tegory\x12+\n\x11\x63\x61tegory_priority\x18\x06 \x01(\x05R\x10\x63\x61tegoryPriority\"\xea\x02\n\x08Template\x12>\n\nupdated_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03R\tupdatedAt\x12\x13\n\x02id\x18\x02 \x01(\tB\x03\xe0\x41\x03R\x02id\x12>\n\x08use_case\x18\x03 \x01(\x0e\x32#.scalekit.v1.emails.TemplateUsecaseR\x07useCase\x12\x18\n\x07\x65nabled\x18\x04 \x01(\x08R\x07\x65nabled\x12$\n\x07subject\x18\x05 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x07subject\x12.\n\x0chtml_content\x18\x06 \x01(\tB\x0b\xbaH\x08r\x06\x10\x01(\x80\x80@R\x0bhtmlContent\x12\x30\n\rplain_content\x18\x07 \x01(\tB\x0b\xbaH\x08r\x06\x10\x01(\x80\x80@R\x0cplainContent\x12\'\n\x0cplaceholders\x18\x08 \x03(\tB\x03\xe0\x41\x03R\x0cplaceholders\"\xc8\x02\n\x13\x43reateEmailTemplate\x12>\n\nupdated_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03R\tupdatedAt\x12\x13\n\x02id\x18\x02 \x01(\tB\x03\xe0\x41\x03R\x02id\x12K\n\x08use_case\x18\x03 \x01(\x0e\x32#.scalekit.v1.emails.TemplateUsecaseB\x0b\xbaH\x08\x82\x01\x02\x10\x01\xc8\x01\x01R\x07useCase\x12\'\n\x07subject\x18\x04 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x07subject\x12\x31\n\x0chtml_content\x18\x05 \x01(\tB\x0e\xbaH\x0br\x06\x10\x01(\x80\x80@\xc8\x01\x01R\x0bhtmlContent\x12\x33\n\rplain_content\x18\x06 \x01(\tB\x0e\xbaH\x0br\x06\x10\x01(\x80\x80@\xc8\x01\x01R\x0cplainContent\"\x9d\x01\n\x1a\x43reateEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12K\n\x08template\x18\x02 \x01(\x0b\x32\'.scalekit.v1.emails.CreateEmailTemplateB\x06\xbaH\x03\xc8\x01\x01R\x08template\"_\n\x1b\x43reateEmailTemplateResponse\x12@\n\x08template\x18\x01 \x01(\x0b\x32\x1c.scalekit.v1.emails.TemplateB\x06\xbaH\x03\xc8\x01\x01R\x08template\"\x84\x01\n\x1a\x45nableEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\"\xde\x01\n\x1b\x45nableEmailTemplateResponse\x12Z\n\x12\x61\x63tive_template_id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03tplR\x10\x61\x63tiveTemplateId\x12\x63\n\x17last_active_template_id\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03tplR\x14lastActiveTemplateId\"\x85\x01\n\x1b\x44isableEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\"\x81\x01\n\x17GetEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\"T\n\x18GetEmailTemplateResponse\x12\x38\n\x08template\x18\x01 \x01(\x0b\x32\x1c.scalekit.v1.emails.TemplateR\x08template\"N\n\x18ListEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\"W\n\x19ListEmailTemplateResponse\x12:\n\ttemplates\x18\x01 \x03(\x0b\x32\x1c.scalekit.v1.emails.TemplateR\ttemplates\"\x90\x03\n\x0eUpdateTemplate\x12)\n\x07subject\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01H\x00R\x07subject\x88\x01\x01\x12\x33\n\x0chtml_content\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\x10\x01(\x80\x80@H\x01R\x0bhtmlContent\x88\x01\x01\x12\x35\n\rplain_content\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\x10\x01(\x80\x80@H\x02R\x0cplainContent\x88\x01\x01:\xb7\x01\xbaH\xb3\x01\x1a\xb0\x01\n\x1b\x61t_least_one_field_required\x12IAt least one of \'subject\', \'html_content\', or \'plain_content\' must be set\x1a\x46has(this.subject) || has(this.html_content) || has(this.plain_content)B\n\n\x08_subjectB\x0f\n\r_html_contentB\x10\n\x0e_plain_content\"\x96\x03\n\x1dGetEmailConfigurationResponse\x12i\n\x11\x64\x65\x66\x61ult_from_name\x18\x01 \x01(\tB=\x92\x41:28Default email from name when using scalekit email serverR\x0f\x64\x65\x66\x61ultFromName\x12x\n\x14\x64\x65\x66\x61ult_from_address\x18\x02 \x01(\tBF\x92\x41=2;Default email from address when using scalekit email server\xbaH\x03\xc8\x01\x01R\x12\x64\x65\x66\x61ultFromAddress\x12W\n\x15\x65mail_server_selected\x18\x03 \x01(\x0e\x32#.scalekit.v1.emails.EmailServerTypeR\x13\x65mailServerSelected\x12\x37\n\x06server\x18\x04 \x01(\x0b\x32\x1f.scalekit.v1.emails.EmailServerR\x06server\"\x99\x01\n\x1fUpsertEmailConfigurationRequest\x12*\n\x11\x64\x65\x66\x61ult_from_name\x18\x01 \x01(\tR\x0f\x64\x65\x66\x61ultFromName\x12J\n\x06server\x18\x02 \x01(\x0b\x32\x32.scalekit.v1.emails.UpsertEmailConfigurationServerR\x06server\"\x9f\x02\n\x1eUpsertEmailConfigurationServer\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12K\n\x08provider\x18\x02 \x01(\x0e\x32\'.scalekit.v1.emails.EmailServerProviderB\x06\xbaH\x03\xc8\x01\x01R\x08provider\x12<\n\x07\x65nabled\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x06\xbaH\x03\xc8\x01\x01R\x07\x65nabled\x12\x62\n\x08settings\x18\x04 \x01(\x0b\x32>.scalekit.v1.emails.UpsertEmailConfigurationSMTPServerSettingsB\x06\xbaH\x03\xc8\x01\x01R\x08settings\"\x8c\x02\n*UpsertEmailConfigurationSMTPServerSettings\x12!\n\x04host\x18\x01 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x04host\x12\x1a\n\x04port\x18\x02 \x01(\x03\x42\x06\xbaH\x03\xc8\x01\x01R\x04port\x12)\n\x08username\x18\x03 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08username\x12\x1a\n\x08password\x18\x04 \x01(\tR\x08password\x12,\n\nfrom_email\x18\x05 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\tfromEmail\x12*\n\tfrom_name\x18\x06 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08\x66romName\"\x92\x02\n UpsertEmailConfigurationResponse\x12*\n\x11\x64\x65\x66\x61ult_from_name\x18\x01 \x01(\tR\x0f\x64\x65\x66\x61ultFromName\x12\x30\n\x14\x64\x65\x66\x61ult_from_address\x18\x02 \x01(\tR\x12\x64\x65\x66\x61ultFromAddress\x12W\n\x15\x65mail_server_selected\x18\x03 \x01(\x0e\x32#.scalekit.v1.emails.EmailServerTypeR\x13\x65mailServerSelected\x12\x37\n\x06server\x18\x04 \x01(\x0b\x32\x1f.scalekit.v1.emails.EmailServerR\x06server\"\x88\x02\n\x19PatchEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\x12\x46\n\x08template\x18\x04 \x01(\x0b\x32\".scalekit.v1.emails.UpdateTemplateB\x06\xbaH\x03\xc8\x01\x01R\x08template\x12;\n\x0bupdate_mask\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskR\nupdateMask\"\x84\x01\n\x1a\x44\x65leteEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\"\xac\x02\n\x0b\x45mailServer\x12>\n\nupdated_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03R\tupdatedAt\x12\x13\n\x02id\x18\x02 \x01(\tB\x03\xe0\x41\x03R\x02id\x12K\n\x08provider\x18\x03 \x01(\x0e\x32\'.scalekit.v1.emails.EmailServerProviderB\x06\xbaH\x03\xc8\x01\x01R\x08provider\x12\x18\n\x07\x65nabled\x18\x04 \x01(\x08R\x07\x65nabled\x12U\n\rsmtp_settings\x18\x05 \x01(\x0b\x32&.scalekit.v1.emails.SMTPServerSettingsB\x06\xbaH\x03\xc8\x01\x01H\x00R\x0csmtpSettingsB\n\n\x08settings\"\x86\x02\n\x12SMTPServerSettings\x12!\n\x04host\x18\x01 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x04host\x12\x1a\n\x04port\x18\x02 \x01(\x03\x42\x06\xbaH\x03\xc8\x01\x01R\x04port\x12)\n\x08username\x18\x03 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08username\x12,\n\x08password\x18\x04 \x01(\tB\x10\xe0\x41\x04\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08password\x12,\n\nfrom_email\x18\x05 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\tfromEmail\x12*\n\tfrom_name\x18\x06 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08\x66romName\"\xfe\x01\n\x17PatchSMTPServerSettings\x12!\n\x04host\x18\x01 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x04host\x12\x1a\n\x04port\x18\x02 \x01(\x03\x42\x06\xbaH\x03\xc8\x01\x01R\x04port\x12)\n\x08username\x18\x03 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08username\x12\x1f\n\x08password\x18\x04 \x01(\tB\x03\xe0\x41\x04R\x08password\x12,\n\nfrom_email\x18\x05 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\tfromEmail\x12*\n\tfrom_name\x18\x06 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08\x66romName\"\xab\x01\n\x18\x43reateEmailServerRequest\x12K\n\x08provider\x18\x01 \x01(\x0e\x32\'.scalekit.v1.emails.EmailServerProviderB\x06\xbaH\x03\xc8\x01\x01R\x08provider\x12\x42\n\x08settings\x18\x02 \x01(\x0b\x32&.scalekit.v1.emails.SMTPServerSettingsR\x08settings\"\\\n\x19\x43reateEmailServerResponse\x12?\n\x06server\x18\x01 \x01(\x0b\x32\x1f.scalekit.v1.emails.EmailServerB\x06\xbaH\x03\xc8\x01\x01R\x06server\"G\n\x15GetEmailServerRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId\"Q\n\x16GetEmailServerResponse\x12\x37\n\x06server\x18\x01 \x01(\x0b\x32\x1f.scalekit.v1.emails.EmailServerR\x06server\"J\n\x18\x45nableEmailServerRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId\"\xd4\x01\n\x19\x45nableEmailServerResponse\x12V\n\x10\x61\x63tive_server_id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65srR\x0e\x61\x63tiveServerId\x12_\n\x15last_active_server_id\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65srR\x12lastActiveServerId\"K\n\x19\x44isableEmailServerRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId\"T\n\x17ListEmailServerResponse\x12\x39\n\x07servers\x18\x01 \x03(\x0b\x32\x1f.scalekit.v1.emails.EmailServerR\x07servers\"\xa2\x01\n\x1fPatchEmailServerSettingsRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId\x12O\n\x08settings\x18\x02 \x01(\x0b\x32+.scalekit.v1.emails.PatchSMTPServerSettingsB\x06\xbaH\x03\xc8\x01\x01R\x08settings\"J\n\x18\x44\x65leteEmailServerRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId*\x94\x02\n\x0fTemplateUsecase\x12 \n\x1cTEMPLATE_USECASE_UNSPECIFIED\x10\x00\x12\t\n\x05LOGIN\x10\x01\x12\r\n\tOTP_LOGIN\x10\x02\x12\x11\n\rMEMBER_INVITE\x10\x03\x12\x0f\n\x0bUSER_INVITE\x10\x04\x12\x0e\n\nUSER_LOGIN\x10\x05\x12\n\n\x06SIGNUP\x10\x06\x12\x12\n\x0eUSER_LOGIN_OTP\x10\x07\x12\x13\n\x0fUSER_LOGIN_LINK\x10\x08\x12\x17\n\x13USER_LOGIN_LINK_OTP\x10\t\x12\x13\n\x0fUSER_SIGNUP_OTP\x10\n\x12\x14\n\x10USER_SIGNUP_LINK\x10\x0b\x12\x18\n\x14USER_SIGNUP_LINK_OTP\x10\x0c*=\n\x0f\x45mailServerType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07INHOUSE\x10\x01\x12\x0c\n\x08\x43USTOMER\x10\x02*Z\n\x13\x45mailServerProvider\x12\x1c\n\x18\x45MAIL_SERVER_UNSPECIFIED\x10\x00\x12\x0c\n\x08SENDGRID\x10\x01\x12\x0c\n\x08POSTMARK\x10\x02\x12\t\n\x05OTHER\x10\x03\x32\xb7\x1d\n\x0c\x45mailService\x12\xb5\x01\n\x17GetTemplatePlaceholders\x12*.scalekit.v1.emails.GetPlaceholdersRequest\x1a+.scalekit.v1.emails.GetPlaceholdersResponse\"A\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02&\x12$/api/v1/email/templates/placeholders\x12\x8e\x01\n\x13GetTemplateUseCases\x12\x16.google.protobuf.Empty\x1a/.scalekit.v1.emails.GetTemplateUseCasesResponse\".\x82\xb5\x18\x02\x18\x01\x82\xd3\xe4\x93\x02\"\x12 /api/v1/email/templates/usecases\x12\x8c\x02\n\x13\x43reateEmailTemplate\x12..scalekit.v1.emails.CreateEmailTemplateRequest\x1a/.scalekit.v1.emails.CreateEmailTemplateResponse\"\x93\x01\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02x\"7/api/v1/organizations/{organization_id}/email/templates:\x08templateZ3\"\'/api/v1/organizations/-/email/templates:\x08template\x12\xa5\x02\n\x13UpdateEmailTemplate\x12-.scalekit.v1.emails.PatchEmailTemplateRequest\x1a,.scalekit.v1.emails.GetEmailTemplateResponse\"\xb0\x01\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x94\x01\x32\x45/api/v1/organizations/{organization_id}/email/templates/{template_id}:\x08templateZA25/api/v1/organizations/-/email/templates/{template_id}:\x08template\x12\x8e\x01\n\x15GetEmailConfiguration\x12\x16.google.protobuf.Empty\x1a\x31.scalekit.v1.emails.GetEmailConfigurationResponse\"*\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x1e\x12\x1c/api/v1/emails/configuration\x12\xb4\x01\n\x18UpsertEmailConfiguration\x12\x33.scalekit.v1.emails.UpsertEmailConfigurationRequest\x1a\x34.scalekit.v1.emails.UpsertEmailConfigurationResponse\"-\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02!\"\x1c/api/v1/emails/configuration:\x01*\x12\xa3\x02\n\x13\x45nableEmailTemplate\x12..scalekit.v1.emails.EnableEmailTemplateRequest\x1a/.scalekit.v1.emails.EnableEmailTemplateResponse\"\xaa\x01\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x8e\x01\x32L/api/v1/organizations/{organization_id}/email/templates/{template_id}:enableZ>2\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02#\x12!/api/v1/email/servers/{server_id}\x12\x8b\x01\n\x10ListEmailServers\x12\x16.google.protobuf.Empty\x1a+.scalekit.v1.emails.ListEmailServerResponse\"2\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x17\x12\x15/api/v1/email/servers\x12\x99\x01\n\x11\x44\x65leteEmailServer\x12,.scalekit.v1.emails.DeleteEmailServerRequest\x1a\x16.google.protobuf.Empty\">\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02#*!/api/v1/email/servers/{server_id}B2Z0github.com/scalekit-inc/scalekit/pkg/grpc/emailsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fscalekit/v1/emails/emails.proto\x12\x12scalekit.v1.emails\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"`\n\x16GetPlaceholdersRequest\x12\x46\n\x08use_case\x18\x01 \x01(\x0e\x32#.scalekit.v1.emails.TemplateUsecaseB\x06\xbaH\x03\xc8\x01\x01R\x07useCase\"B\n\x17GetPlaceholdersResponse\x12\'\n\x0cplaceholders\x18\x01 \x03(\tB\x03\xe0\x41\x03R\x0cplaceholders\"t\n\x1bGetTemplateUseCasesResponse\x12U\n\tuse_cases\x18\x01 \x03(\x0b\x32\x33.scalekit.v1.emails.TemplateUsecaseWithPlaceholdersB\x03\xe0\x41\x03R\x08useCases\"\xeb\x02\n\x1fTemplateUsecaseWithPlaceholders\x12\x46\n\x08use_case\x18\x01 \x01(\x0e\x32#.scalekit.v1.emails.TemplateUsecaseB\x06\xbaH\x03\xc8\x01\x01R\x07useCase\x12 \n\x05title\x18\x02 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x05title\x12,\n\x0b\x64\x65scription\x18\x03 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x0b\x64\x65scription\x12H\n\x0cplaceholders\x18\x04 \x03(\x0b\x32\x1f.scalekit.v1.emails.PlaceholderB\x03\xe0\x41\x03R\x0cplaceholders\x12\x18\n\x07\x64isplay\x18\x05 \x01(\x08R\x07\x64isplay\x12L\n\x10\x64\x65\x66\x61ult_template\x18\x06 \x01(\x0b\x32\x1c.scalekit.v1.emails.TemplateB\x03\xe0\x41\x03R\x0f\x64\x65\x66\x61ultTemplate\"\xe0\x01\n\x0bPlaceholder\x12\x1e\n\x04name\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x04name\x12 \n\x05title\x18\x02 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x05title\x12,\n\x0b\x64\x65scription\x18\x03 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x0b\x64\x65scription\x12\x18\n\x07\x64isplay\x18\x04 \x01(\x08R\x07\x64isplay\x12\x1a\n\x08\x63\x61tegory\x18\x05 \x01(\tR\x08\x63\x61tegory\x12+\n\x11\x63\x61tegory_priority\x18\x06 \x01(\x05R\x10\x63\x61tegoryPriority\"\xea\x02\n\x08Template\x12>\n\nupdated_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03R\tupdatedAt\x12\x13\n\x02id\x18\x02 \x01(\tB\x03\xe0\x41\x03R\x02id\x12>\n\x08use_case\x18\x03 \x01(\x0e\x32#.scalekit.v1.emails.TemplateUsecaseR\x07useCase\x12\x18\n\x07\x65nabled\x18\x04 \x01(\x08R\x07\x65nabled\x12$\n\x07subject\x18\x05 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x07subject\x12.\n\x0chtml_content\x18\x06 \x01(\tB\x0b\xbaH\x08r\x06\x10\x01(\x80\x80@R\x0bhtmlContent\x12\x30\n\rplain_content\x18\x07 \x01(\tB\x0b\xbaH\x08r\x06\x10\x01(\x80\x80@R\x0cplainContent\x12\'\n\x0cplaceholders\x18\x08 \x03(\tB\x03\xe0\x41\x03R\x0cplaceholders\"\xc8\x02\n\x13\x43reateEmailTemplate\x12>\n\nupdated_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03R\tupdatedAt\x12\x13\n\x02id\x18\x02 \x01(\tB\x03\xe0\x41\x03R\x02id\x12K\n\x08use_case\x18\x03 \x01(\x0e\x32#.scalekit.v1.emails.TemplateUsecaseB\x0b\xbaH\x08\x82\x01\x02\x10\x01\xc8\x01\x01R\x07useCase\x12\'\n\x07subject\x18\x04 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x07subject\x12\x31\n\x0chtml_content\x18\x05 \x01(\tB\x0e\xbaH\x0br\x06\x10\x01(\x80\x80@\xc8\x01\x01R\x0bhtmlContent\x12\x33\n\rplain_content\x18\x06 \x01(\tB\x0e\xbaH\x0br\x06\x10\x01(\x80\x80@\xc8\x01\x01R\x0cplainContent\"\x9d\x01\n\x1a\x43reateEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12K\n\x08template\x18\x02 \x01(\x0b\x32\'.scalekit.v1.emails.CreateEmailTemplateB\x06\xbaH\x03\xc8\x01\x01R\x08template\"_\n\x1b\x43reateEmailTemplateResponse\x12@\n\x08template\x18\x01 \x01(\x0b\x32\x1c.scalekit.v1.emails.TemplateB\x06\xbaH\x03\xc8\x01\x01R\x08template\"\x84\x01\n\x1a\x45nableEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\"\xde\x01\n\x1b\x45nableEmailTemplateResponse\x12Z\n\x12\x61\x63tive_template_id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03tplR\x10\x61\x63tiveTemplateId\x12\x63\n\x17last_active_template_id\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03tplR\x14lastActiveTemplateId\"\x85\x01\n\x1b\x44isableEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\"\x81\x01\n\x17GetEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\"T\n\x18GetEmailTemplateResponse\x12\x38\n\x08template\x18\x01 \x01(\x0b\x32\x1c.scalekit.v1.emails.TemplateR\x08template\"N\n\x18ListEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\"W\n\x19ListEmailTemplateResponse\x12:\n\ttemplates\x18\x01 \x03(\x0b\x32\x1c.scalekit.v1.emails.TemplateR\ttemplates\"\x90\x03\n\x0eUpdateTemplate\x12)\n\x07subject\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01H\x00R\x07subject\x88\x01\x01\x12\x33\n\x0chtml_content\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\x10\x01(\x80\x80@H\x01R\x0bhtmlContent\x88\x01\x01\x12\x35\n\rplain_content\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\x10\x01(\x80\x80@H\x02R\x0cplainContent\x88\x01\x01:\xb7\x01\xbaH\xb3\x01\x1a\xb0\x01\n\x1b\x61t_least_one_field_required\x12IAt least one of \'subject\', \'html_content\', or \'plain_content\' must be set\x1a\x46has(this.subject) || has(this.html_content) || has(this.plain_content)B\n\n\x08_subjectB\x0f\n\r_html_contentB\x10\n\x0e_plain_content\"\x96\x03\n\x1dGetEmailConfigurationResponse\x12i\n\x11\x64\x65\x66\x61ult_from_name\x18\x01 \x01(\tB=\x92\x41:28Default email from name when using scalekit email serverR\x0f\x64\x65\x66\x61ultFromName\x12x\n\x14\x64\x65\x66\x61ult_from_address\x18\x02 \x01(\tBF\x92\x41=2;Default email from address when using scalekit email server\xbaH\x03\xc8\x01\x01R\x12\x64\x65\x66\x61ultFromAddress\x12W\n\x15\x65mail_server_selected\x18\x03 \x01(\x0e\x32#.scalekit.v1.emails.EmailServerTypeR\x13\x65mailServerSelected\x12\x37\n\x06server\x18\x04 \x01(\x0b\x32\x1f.scalekit.v1.emails.EmailServerR\x06server\"\x99\x01\n\x1fUpsertEmailConfigurationRequest\x12*\n\x11\x64\x65\x66\x61ult_from_name\x18\x01 \x01(\tR\x0f\x64\x65\x66\x61ultFromName\x12J\n\x06server\x18\x02 \x01(\x0b\x32\x32.scalekit.v1.emails.UpsertEmailConfigurationServerR\x06server\"\x9f\x02\n\x1eUpsertEmailConfigurationServer\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12K\n\x08provider\x18\x02 \x01(\x0e\x32\'.scalekit.v1.emails.EmailServerProviderB\x06\xbaH\x03\xc8\x01\x01R\x08provider\x12<\n\x07\x65nabled\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x06\xbaH\x03\xc8\x01\x01R\x07\x65nabled\x12\x62\n\x08settings\x18\x04 \x01(\x0b\x32>.scalekit.v1.emails.UpsertEmailConfigurationSMTPServerSettingsB\x06\xbaH\x03\xc8\x01\x01R\x08settings\"\x8c\x02\n*UpsertEmailConfigurationSMTPServerSettings\x12!\n\x04host\x18\x01 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x04host\x12\x1a\n\x04port\x18\x02 \x01(\x03\x42\x06\xbaH\x03\xc8\x01\x01R\x04port\x12)\n\x08username\x18\x03 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08username\x12\x1a\n\x08password\x18\x04 \x01(\tR\x08password\x12,\n\nfrom_email\x18\x05 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\tfromEmail\x12*\n\tfrom_name\x18\x06 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08\x66romName\"\x92\x02\n UpsertEmailConfigurationResponse\x12*\n\x11\x64\x65\x66\x61ult_from_name\x18\x01 \x01(\tR\x0f\x64\x65\x66\x61ultFromName\x12\x30\n\x14\x64\x65\x66\x61ult_from_address\x18\x02 \x01(\tR\x12\x64\x65\x66\x61ultFromAddress\x12W\n\x15\x65mail_server_selected\x18\x03 \x01(\x0e\x32#.scalekit.v1.emails.EmailServerTypeR\x13\x65mailServerSelected\x12\x37\n\x06server\x18\x04 \x01(\x0b\x32\x1f.scalekit.v1.emails.EmailServerR\x06server\"\x88\x02\n\x19PatchEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\x12\x46\n\x08template\x18\x04 \x01(\x0b\x32\".scalekit.v1.emails.UpdateTemplateB\x06\xbaH\x03\xc8\x01\x01R\x08template\x12;\n\x0bupdate_mask\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskR\nupdateMask\"\x84\x01\n\x1a\x44\x65leteEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\"\xac\x02\n\x0b\x45mailServer\x12>\n\nupdated_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03R\tupdatedAt\x12\x13\n\x02id\x18\x02 \x01(\tB\x03\xe0\x41\x03R\x02id\x12K\n\x08provider\x18\x03 \x01(\x0e\x32\'.scalekit.v1.emails.EmailServerProviderB\x06\xbaH\x03\xc8\x01\x01R\x08provider\x12\x18\n\x07\x65nabled\x18\x04 \x01(\x08R\x07\x65nabled\x12U\n\rsmtp_settings\x18\x05 \x01(\x0b\x32&.scalekit.v1.emails.SMTPServerSettingsB\x06\xbaH\x03\xc8\x01\x01H\x00R\x0csmtpSettingsB\n\n\x08settings\"\x86\x02\n\x12SMTPServerSettings\x12!\n\x04host\x18\x01 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x04host\x12\x1a\n\x04port\x18\x02 \x01(\x03\x42\x06\xbaH\x03\xc8\x01\x01R\x04port\x12)\n\x08username\x18\x03 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08username\x12,\n\x08password\x18\x04 \x01(\tB\x10\xe0\x41\x04\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08password\x12,\n\nfrom_email\x18\x05 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\tfromEmail\x12*\n\tfrom_name\x18\x06 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08\x66romName\"\xfe\x01\n\x17PatchSMTPServerSettings\x12!\n\x04host\x18\x01 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x04host\x12\x1a\n\x04port\x18\x02 \x01(\x03\x42\x06\xbaH\x03\xc8\x01\x01R\x04port\x12)\n\x08username\x18\x03 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08username\x12\x1f\n\x08password\x18\x04 \x01(\tB\x03\xe0\x41\x04R\x08password\x12,\n\nfrom_email\x18\x05 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\tfromEmail\x12*\n\tfrom_name\x18\x06 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08\x66romName\"\xab\x01\n\x18\x43reateEmailServerRequest\x12K\n\x08provider\x18\x01 \x01(\x0e\x32\'.scalekit.v1.emails.EmailServerProviderB\x06\xbaH\x03\xc8\x01\x01R\x08provider\x12\x42\n\x08settings\x18\x02 \x01(\x0b\x32&.scalekit.v1.emails.SMTPServerSettingsR\x08settings\"\\\n\x19\x43reateEmailServerResponse\x12?\n\x06server\x18\x01 \x01(\x0b\x32\x1f.scalekit.v1.emails.EmailServerB\x06\xbaH\x03\xc8\x01\x01R\x06server\"G\n\x15GetEmailServerRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId\"Q\n\x16GetEmailServerResponse\x12\x37\n\x06server\x18\x01 \x01(\x0b\x32\x1f.scalekit.v1.emails.EmailServerR\x06server\"J\n\x18\x45nableEmailServerRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId\"\xd4\x01\n\x19\x45nableEmailServerResponse\x12V\n\x10\x61\x63tive_server_id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65srR\x0e\x61\x63tiveServerId\x12_\n\x15last_active_server_id\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65srR\x12lastActiveServerId\"K\n\x19\x44isableEmailServerRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId\"T\n\x17ListEmailServerResponse\x12\x39\n\x07servers\x18\x01 \x03(\x0b\x32\x1f.scalekit.v1.emails.EmailServerR\x07servers\"\xa2\x01\n\x1fPatchEmailServerSettingsRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId\x12O\n\x08settings\x18\x02 \x01(\x0b\x32+.scalekit.v1.emails.PatchSMTPServerSettingsB\x06\xbaH\x03\xc8\x01\x01R\x08settings\"J\n\x18\x44\x65leteEmailServerRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId*\x94\x02\n\x0fTemplateUsecase\x12 \n\x1cTEMPLATE_USECASE_UNSPECIFIED\x10\x00\x12\t\n\x05LOGIN\x10\x01\x12\r\n\tOTP_LOGIN\x10\x02\x12\x11\n\rMEMBER_INVITE\x10\x03\x12\x0f\n\x0bUSER_INVITE\x10\x04\x12\x0e\n\nUSER_LOGIN\x10\x05\x12\n\n\x06SIGNUP\x10\x06\x12\x12\n\x0eUSER_LOGIN_OTP\x10\x07\x12\x13\n\x0fUSER_LOGIN_LINK\x10\x08\x12\x17\n\x13USER_LOGIN_LINK_OTP\x10\t\x12\x13\n\x0fUSER_SIGNUP_OTP\x10\n\x12\x14\n\x10USER_SIGNUP_LINK\x10\x0b\x12\x18\n\x14USER_SIGNUP_LINK_OTP\x10\x0c*=\n\x0f\x45mailServerType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07INHOUSE\x10\x01\x12\x0c\n\x08\x43USTOMER\x10\x02*Z\n\x13\x45mailServerProvider\x12\x1c\n\x18\x45MAIL_SERVER_UNSPECIFIED\x10\x00\x12\x0c\n\x08SENDGRID\x10\x01\x12\x0c\n\x08POSTMARK\x10\x02\x12\t\n\x05OTHER\x10\x03\x32\xd5\x1b\n\x0c\x45mailService\x12\xa6\x01\n\x17GetTemplatePlaceholders\x12*.scalekit.v1.emails.GetPlaceholdersRequest\x1a+.scalekit.v1.emails.GetPlaceholdersResponse\"2\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02&\x12$/api/v1/email/templates/placeholders\x12\x8e\x01\n\x13GetTemplateUseCases\x12\x16.google.protobuf.Empty\x1a/.scalekit.v1.emails.GetTemplateUseCasesResponse\".\x82\xb5\x18\x02\x18\x01\x82\xd3\xe4\x93\x02\"\x12 /api/v1/email/templates/usecases\x12\xfd\x01\n\x13\x43reateEmailTemplate\x12..scalekit.v1.emails.CreateEmailTemplateRequest\x1a/.scalekit.v1.emails.CreateEmailTemplateResponse\"\x84\x01\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02x\"7/api/v1/organizations/{organization_id}/email/templates:\x08templateZ3\"\'/api/v1/organizations/-/email/templates:\x08template\x12\x96\x02\n\x13UpdateEmailTemplate\x12-.scalekit.v1.emails.PatchEmailTemplateRequest\x1a,.scalekit.v1.emails.GetEmailTemplateResponse\"\xa1\x01\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x94\x01\x32\x45/api/v1/organizations/{organization_id}/email/templates/{template_id}:\x08templateZA25/api/v1/organizations/-/email/templates/{template_id}:\x08template\x12\x8e\x01\n\x15GetEmailConfiguration\x12\x16.google.protobuf.Empty\x1a\x31.scalekit.v1.emails.GetEmailConfigurationResponse\"*\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x1e\x12\x1c/api/v1/emails/configuration\x12\xb4\x01\n\x18UpsertEmailConfiguration\x12\x33.scalekit.v1.emails.UpsertEmailConfigurationRequest\x1a\x34.scalekit.v1.emails.UpsertEmailConfigurationResponse\"-\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02!\"\x1c/api/v1/emails/configuration:\x01*\x12\x94\x02\n\x13\x45nableEmailTemplate\x12..scalekit.v1.emails.EnableEmailTemplateRequest\x1a/.scalekit.v1.emails.EnableEmailTemplateResponse\"\x9b\x01\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x8e\x01\x32L/api/v1/organizations/{organization_id}/email/templates/{template_id}:enableZ>222\n\x1cGetAgentActionsConfigRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"\x84\x01\n\x1dGetAgentActionsConfigResponse\x12\x63\n\x14\x61gent_actions_config\x18\x01 \x01(\x0b\x32,.scalekit.v1.environments.AgentActionsConfigB\x03\xe0\x41\x03R\x12\x61gentActionsConfig\"\xa6\x01\n\x1fUpdateAgentActionsConfigRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\x63\n\x14\x61gent_actions_config\x18\x02 \x01(\x0b\x32,.scalekit.v1.environments.AgentActionsConfigB\x03\xe0\x41\x02R\x12\x61gentActionsConfig\"\x87\x01\n UpdateAgentActionsConfigResponse\x12\x63\n\x14\x61gent_actions_config\x18\x01 \x01(\x0b\x32,.scalekit.v1.environments.AgentActionsConfigB\x03\xe0\x41\x03R\x12\x61gentActionsConfig*W\n\x12\x43ustomDomainStatus\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07PENDING\x10\x01\x12\n\n\x06\x41\x43TIVE\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\x12\x0b\n\x07INITIAL\x10\x04*O\n\rAssetCategory\x12\x1e\n\x1a\x41SSET_CATEGORY_UNSPECIFIED\x10\x00\x12\x1e\n\x1aPORTAL_CUSTOMIZATION_IMAGE\x10\x01*O\n\x08TimeUnit\x12!\n\x1dSESSION_TIME_UNIT_UNSPECIFIED\x10\x00\x12\x0b\n\x07MINUTES\x10\x01\x12\t\n\x05HOURS\x10\x02\x12\x08\n\x04\x44\x41YS\x10\x03*w\n\x17OrgUserRelationshipType\x12\'\n#OrgUserRelationshipType_UNSPECIFIED\x10\x00\x12\x17\n\x13SINGLE_ORGANIZATION\x10\x01\x12\x1a\n\x16MULTIPLE_ORGANIZATIONS\x10\x02*[\n\x15\x43ookiePersistenceType\x12%\n!CookiePersistenceType_UNSPECIFIED\x10\x00\x12\x0e\n\nPERSISTENT\x10\x01\x12\x0b\n\x07SESSION\x10\x02*[\n\x15\x43ookieSameSiteSetting\x12%\n!CookieSameSiteSetting_UNSPECIFIED\x10\x00\x12\x0c\n\x08LAX_MODE\x10\x01\x12\r\n\tNONE_MODE\x10\x02*\xb1\x01\n\x1e\x43onnectedAccountUserVerifyMode\x12\x32\n.CONNECTED_ACCOUNT_USER_VERIFY_MODE_UNSPECIFIED\x10\x00\x12\x19\n\x15USER_VERIFY_MODE_NONE\x10\x01\x12\x18\n\x14USER_VERIFY_MODE_B2B\x10\x02\x12&\n\"USER_VERIFY_MODE_SCALEKIT_PLATFORM\x10\x03\x32\xcb\x42\n\x12\x45nvironmentService\x12\xbc\x01\n\x11\x43reateEnvironment\x12\x32.scalekit.v1.environments.CreateEnvironmentRequest\x1a\x33.scalekit.v1.environments.CreateEnvironmentResponse\">\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02#\"\x14/api/v1/environments:\x0b\x65nvironment\x12\xb2\x01\n\x11UpdateEnvironment\x12\x32.scalekit.v1.environments.UpdateEnvironmentRequest\x1a\x33.scalekit.v1.environments.UpdateEnvironmentResponse\"4\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02(2\x19/api/v1/environments/{id}:\x0b\x65nvironment\x12\xc5\x01\n\x17UpdateEnvironmentDomain\x12\x38.scalekit.v1.environments.UpdateEnvironmentDomainRequest\x1a\x33.scalekit.v1.environments.UpdateEnvironmentResponse\";\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02/2 /api/v1/environments/{id}:update:\x0b\x65nvironment\x12\x9c\x01\n\x0eGetEnvironment\x12/.scalekit.v1.environments.GetEnvironmentRequest\x1a\x30.scalekit.v1.environments.GetEnvironmentResponse\"\'\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x1b\x12\x19/api/v1/environments/{id}\x12\x9c\x01\n\x0fListEnvironment\x12\x31.scalekit.v1.environments.ListEnvironmentsRequest\x1a\x32.scalekit.v1.environments.ListEnvironmentsResponse\"\"\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/environments\x12\x86\x01\n\x11\x44\x65leteEnvironment\x12\x32.scalekit.v1.environments.DeleteEnvironmentRequest\x1a\x16.google.protobuf.Empty\"%\x82\xb5\x18\x00\x82\xd3\xe4\x93\x02\x1b*\x19/api/v1/environments/{id}\x12\xa8\x01\n\x15GetRequiredDNSRecords\x12..scalekit.v1.environments.GetDNSRecordsRequest\x1a/.scalekit.v1.environments.GetDNSRecordsResponse\".\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\"\"\x1d/api/v1/environments/{id}/dns:\x01*\x12\x91\x01\n\x10VerifyDNSRecords\x12..scalekit.v1.environments.GetDNSRecordsRequest\x1a\x16.google.protobuf.Empty\"5\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02)\"$/api/v1/environments/{id}/dns:verify:\x01*\x12\xc9\x01\n\x12\x43reateCustomDomain\x12\x33.scalekit.v1.environments.CreateCustomDomainRequest\x1a\x34.scalekit.v1.environments.CreateCustomDomainResponse\"H\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02-\"(/api/v1/environments/{id}/custom-domains:\x01*\x12\xcc\x01\n\x17\x43heckCustomDomainStatus\x12/.scalekit.v1.environments.GetEnvironmentRequest\x1a\x30.scalekit.v1.environments.GetEnvironmentResponse\"N\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x33\"./api/v1/environments/{id}/custom-domains:check:\x01*\x12\xe7\x01\n\x1aGenerateNewSamlCertificate\x12\x38.scalekit.v1.environments.GenerateSamlCertificateRequest\x1a\x39.scalekit.v1.environments.GenerateSamlCertificateResponse\"T\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x39\"4/api/v1/environments/{id}/saml-certificates:generate:\x01*\x12\xc0\x02\n\x19UpdatePortalCustomization\x12:.scalekit.v1.environments.UpdatePortalCustomizationRequest\x1a;.scalekit.v1.environments.UpdatePortalCustomizationResponse\"\xa9\x01\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x8d\x01\x1a//api/v1/environments/{id}/portal_customizations:\x16\x63ustomization_settingsZB\x1a(/api/v1/environments/{id}/customizations:\x16\x63ustomization_settings\x12\xe9\x01\n\x16GetPortalCustomization\x12\x37.scalekit.v1.environments.GetPortalCustomizationRequest\x1a\x38.scalekit.v1.environments.GetPortalCustomizationResponse\"\\\x82\xb5\x18\x03\x18\xe0\x01\x82\xd3\xe4\x93\x02O\x12\x1d/api/v1/portal_customizationsZ.\x12,/api/v1/environments/-/portal_customizations\x12\xc4\x01\n\x14\x43reateAssetUploadURL\x12\x35.scalekit.v1.environments.CreateAssetUploadUrlRequest\x1a\x36.scalekit.v1.environments.CreateAssetUploadUrlResponse\"=\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x31\"\x1f/api/v1/environments/{id}/asset:\x0e\x61sset_settings\x12\xac\x01\n\x0eUpdateFeatures\x12/.scalekit.v1.environments.UpdateFeaturesRequest\x1a-.scalekit.v1.environments.GetFeaturesResponse\":\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02.\x1a\"/api/v1/environments/{id}/features:\x08\x66\x65\x61tures\x12\xcb\x01\n\x10\x45nableFSAFeature\x12\x31.scalekit.v1.environments.EnableFSAFeatureRequest\x1a\x16.google.protobuf.Empty\"l\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02Q\"-/api/v1/environments/{id}/features/fsa/enable:\x01*Z\x1d\"\x1b/api/v1/features/fsa/enable\x12\x81\x01\n\x11\x44isableFSAFeature\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"<\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\"\x1c/api/v1/features/fsa/disable:\x01*\x12\x9d\x01\n\rEnableFeature\x12..scalekit.v1.environments.EnableFeatureRequest\x1a\x16.google.protobuf.Empty\"D\x82\xb5\x18\x02\x18`\x82\xd3\xe4\x93\x02\x38\"6/api/v1/environments/{id}/features/{feature_id}:enable\x12\xa0\x01\n\x0e\x44isableFeature\x12/.scalekit.v1.environments.DisableFeatureRequest\x1a\x16.google.protobuf.Empty\"E\x82\xb5\x18\x02\x18`\x82\xd3\xe4\x93\x02\x39\"7/api/v1/environments/{id}/features/{feature_id}:disable\x12\x8a\x01\n\x0bGetFeatures\x12,.scalekit.v1.environments.GetFeaturesRequest\x1a-.scalekit.v1.environments.GetFeaturesResponse\"\x1e\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x12\x12\x10/api/v1/features\x12\xb9\x04\n\x1fGetHostScopedPublicFeatureFlags\x12\x16.google.protobuf.Empty\x1a\x41.scalekit.v1.environments.GetHostScopedPublicFeatureFlagsResponse\"\xba\x03\x92\x41\xf2\x02\n\x0c\x45nvironments\x12%List host-scoped public feature flags\x1a\xc5\x01Resolves the environment from the request host only (no environment path, query, or header). Returns allowlisted OpenFeature values; no bearer token. 404 if the host does not map to an environment.J2\n\x03\x32\x30\x30\x12+\n)Allowlisted flag keys and resolved valuesJ?\n\x03\x34\x30\x34\x12\x38\n6No environment resolved from host or workspace UI host\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)\x12\'/api/v1/environments:publicFeatureFlags\x12\x84\x02\n CreateEnvironmentSessionSettings\x12\x41.scalekit.v1.environments.CreateEnvironmentSessionSettingsRequest\x1a\x42.scalekit.v1.environments.CreateEnvironmentSessionSettingsResponse\"Y\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02>\"*/api/v1/environments/{id}/session-settings:\x10session_settings\x12\x88\x02\n\x1f\x43reateEnvironmentUserManagement\x12@.scalekit.v1.environments.CreateEnvironmentUserManagementRequest\x1a\x41.scalekit.v1.environments.CreateEnvironmentUserManagementResponse\"`\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x45\"2/api/v1/environments/{id}/settings/user-management:\x0fuser_management\x12\xda\x01\n\x1dGetEnvironmentSessionSettings\x12>.scalekit.v1.environments.GetEnvironmentSessionSettingsRequest\x1a?.scalekit.v1.environments.GetEnvironmentSessionSettingsResponse\"8\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02,\x12*/api/v1/environments/{id}/session-settings\x12\xdf\x01\n\x1cGetEnvironmentUserManagement\x12=.scalekit.v1.environments.GetEnvironmentUserManagementRequest\x1a>.scalekit.v1.environments.GetEnvironmentUserManagementResponse\"@\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x34\x12\x32/api/v1/environments/{id}/settings/user-management\x12\x84\x02\n UpdateEnvironmentSessionSettings\x12\x41.scalekit.v1.environments.UpdateEnvironmentSessionSettingsRequest\x1a\x42.scalekit.v1.environments.UpdateEnvironmentSessionSettingsResponse\"Y\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02>2*/api/v1/environments/{id}/session-settings:\x10session_settings\x12\x88\x02\n\x1fUpdateEnvironmentUserManagement\x12@.scalekit.v1.environments.UpdateEnvironmentUserManagementRequest\x1a\x41.scalekit.v1.environments.UpdateEnvironmentUserManagementResponse\"`\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x45\x32\x32/api/v1/environments/{id}/settings/user-management:\x0fuser_management\x12\x86\x04\n\x18\x43reateAgentActionsConfig\x12\x39.scalekit.v1.environments.CreateAgentActionsConfigRequest\x1a:.scalekit.v1.environments.CreateAgentActionsConfigResponse\"\xf2\x02\x92\x41\x8b\x02\n\x0c\x45nvironments\x12\x1b\x43reate agent actions config\x1a:Creates the agent actions configuration for an environmentJ2\n\x03\x32\x30\x30\x12+\n)Agent actions config created successfullyJN\n\x03\x34\x30\x30\x12G\nEInvalid request - missing or invalid fields, or config already existsJ\x1e\n\x03\x34\x30\x34\x12\x17\n\x15\x45nvironment not found\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02H\"0/api/v1/environments/{id}/settings/agent-actions:\x14\x61gent_actions_config\x12\xa3\x03\n\x15GetAgentActionsConfig\x12\x36.scalekit.v1.environments.GetAgentActionsConfigRequest\x1a\x37.scalekit.v1.environments.GetAgentActionsConfigResponse\"\x98\x02\x92\x41\xc7\x01\n\x0c\x45nvironments\x12\x18Get agent actions config\x1a=Retrieves the agent actions configuration for an environment.J4\n\x03\x32\x30\x30\x12-\n+Agent actions config retrieved successfullyJ(\n\x03\x34\x30\x34\x12!\n\x1f\x45nvironment or config not found\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x32\x12\x30/api/v1/environments/{id}/settings/agent-actions\x12\x96\x04\n\x18UpdateAgentActionsConfig\x12\x39.scalekit.v1.environments.UpdateAgentActionsConfigRequest\x1a:.scalekit.v1.environments.UpdateAgentActionsConfigResponse\"\x82\x03\x92\x41\x9b\x02\n\x0c\x45nvironments\x12\x1bUpdate agent actions config\x1a:Updates the agent actions configuration for an environmentJ2\n\x03\x32\x30\x30\x12+\n)Agent actions config updated successfullyJ^\n\x03\x34\x30\x30\x12W\nUInvalid request - missing or invalid fields, or mode not allowed for this environmentJ\x1e\n\x03\x34\x30\x34\x12\x17\n\x15\x45nvironment not found\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02H20/api/v1/environments/{id}/settings/agent-actions:\x14\x61gent_actions_config\x12\xa5\x01\n\nGetContext\x12+.scalekit.v1.environments.GetContextRequest\x1a,.scalekit.v1.environments.GetContextResponse\"<\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x30\x12./api/v1/environments/{environment_id}/contexts\x12\x9e\x01\n\rUpdateContext\x12..scalekit.v1.environments.UpdateContextRequest\x1a\x16.google.protobuf.Empty\"E\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x39\x1a./api/v1/environments/{environment_id}/contexts:\x07\x63ontext\x12\xef\x01\n\x11GetCurrentSession\x12\x32.scalekit.v1.environments.GetCurrentSessionRequest\x1a\x33.scalekit.v1.environments.GetCurrentSessionResponse\"q\x82\xb5\x18\x03\x18\xf0\x01\x82\xd3\xe4\x93\x02\x64\x12%/api/v1/environments/{id}/sessions:meZ$\x12\"/api/v1/environments/-/sessions:meZ\x15\x12\x13/api/v1/sessions:me\x12\xb1\x01\n\x14GetScalekitResources\x12\x31.scalekit.v1.environments.ScalekitResourceRequest\x1a\x32.scalekit.v1.environments.ScalekitResourceResponse\"2\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x17\"\x12/api/v1/fetch:bulk:\x01*\x12\xd0\x03\n\x0fPortalBootstrap\x12\x30.scalekit.v1.environments.PortalBootstrapRequest\x1a\x31.scalekit.v1.environments.PortalBootstrapResponse\"\xd7\x02\x92\x41\xad\x02\n\x06Portal\x12\x1eRetrieve portal bootstrap data\x1a\x97\x01Returns all data needed to initialize the customer portal in a single request, combining session, portal customizations, organization, and connections.J5\n\x03\x32\x30\x30\x12.\n,Successfully retrieved portal bootstrap dataJ2\n\x03\x34\x30\x31\x12+\n)Unauthorized - invalid or expired session\x82\xb5\x18\x02\x18`\x82\xd3\xe4\x93\x02\x1a\x12\x18/api/v1/portal/bootstrapB8Z6github.com/scalekit-inc/scalekit/pkg/grpc/environmentsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n+scalekit/v1/environments/environments.proto\x12\x18scalekit.v1.environments\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"o\n\x19\x43reateCustomDomainRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\x32\n\rcustom_domain\x18\x02 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xfa\x01\xc8\x01\x01R\x0c\x63ustomDomain\"e\n\x1a\x43reateCustomDomainResponse\x12G\n\x0b\x65nvironment\x18\x01 \x01(\x0b\x32%.scalekit.v1.environments.EnvironmentR\x0b\x65nvironment\"j\n\x14GetDNSRecordsRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\x32\n\rcustom_domain\x18\x02 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xfa\x01\xc8\x01\x01R\x0c\x63ustomDomain\"^\n\x15GetDNSRecordsResponse\x12\x45\n\x0b\x64ns_records\x18\x01 \x03(\x0b\x32$.scalekit.v1.environments.DNSRecordsR\ndnsRecords\"w\n\nDNSRecords\x12\'\n\thost_name\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xfa\x01R\x08hostName\x12\x1e\n\x04type\x18\x02 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xfa\x01R\x04type\x12 \n\x05value\x18\x03 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xfa\x01R\x05value\"\x92\x04\n\x0b\x45nvironment\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12;\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12;\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nupdateTime\x12-\n\x0c\x64isplay_name\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\"\n\x06\x64omain\x18\x05 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xfa\x01R\x06\x64omain\x12@\n\x0bregion_code\x18\x06 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeR\nregionCode\x12\x38\n\x04type\x18\x07 \x01(\x0e\x32$.scalekit.v1.commons.EnvironmentTypeR\x04type\x12(\n\rcustom_domain\x18\x08 \x01(\tH\x00R\x0c\x63ustomDomain\x88\x01\x01\x12^\n\x14\x63ustom_domain_status\x18\t \x01(\x0e\x32,.scalekit.v1.environments.CustomDomainStatusR\x12\x63ustomDomainStatusB\x10\n\x0e_custom_domain\"\xb1\x03\n\x11\x43reateEnvironment\x12-\n\x0c\x64isplay_name\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\x45\n\x0bregion_code\x18\x06 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeH\x00R\nregionCode\x88\x01\x01\x12=\n\x04type\x18\x07 \x01(\x0e\x32$.scalekit.v1.commons.EnvironmentTypeH\x01R\x04type\x88\x01\x01\x12\xaf\x01\n\x13\x61uthentication_mode\x18\x08 \x01(\x0e\x32\'.scalekit.v1.commons.AuthenticationModeBP\x92\x41M2KThe authentication mode for the environment. The default is FULL_STACK_AUTHH\x02R\x12\x61uthenticationMode\x88\x01\x01\x42\x0e\n\x0c_region_codeB\x07\n\x05_typeB\x16\n\x14_authentication_modeJ\x04\x08\x05\x10\x06\"j\n\x11UpdateEnvironment\x12\x32\n\x0c\x64isplay_name\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xd0\x0fH\x00R\x0b\x64isplayName\x88\x01\x01\x42\x0f\n\r_display_nameJ\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08\"S\n\x17UpdateEnvironmentDomain\x12\'\n\x06\x64omain\x18\x05 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xfa\x01H\x00R\x06\x64omain\x88\x01\x01\x42\t\n\x07_domainJ\x04\x08\x04\x10\x05\"q\n\x18\x43reateEnvironmentRequest\x12U\n\x0b\x65nvironment\x18\x01 \x01(\x0b\x32+.scalekit.v1.environments.CreateEnvironmentB\x06\xbaH\x03\xc8\x01\x01R\x0b\x65nvironment\"d\n\x19\x43reateEnvironmentResponse\x12G\n\x0b\x65nvironment\x18\x01 \x01(\x0b\x32%.scalekit.v1.environments.EnvironmentR\x0b\x65nvironment\"\x91\x01\n\x18UpdateEnvironmentRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12U\n\x0b\x65nvironment\x18\x02 \x01(\x0b\x32+.scalekit.v1.environments.UpdateEnvironmentB\x06\xbaH\x03\xc8\x01\x01R\x0b\x65nvironment\"\x9d\x01\n\x1eUpdateEnvironmentDomainRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12[\n\x0b\x65nvironment\x18\x02 \x01(\x0b\x32\x31.scalekit.v1.environments.UpdateEnvironmentDomainB\x06\xbaH\x03\xc8\x01\x01R\x0b\x65nvironment\"d\n\x19UpdateEnvironmentResponse\x12G\n\x0b\x65nvironment\x18\x01 \x01(\x0b\x32%.scalekit.v1.environments.EnvironmentR\x0b\x65nvironment\"7\n\x15GetEnvironmentRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"a\n\x16GetEnvironmentResponse\x12G\n\x0b\x65nvironment\x18\x01 \x01(\x0b\x32%.scalekit.v1.environments.EnvironmentR\x0b\x65nvironment\"U\n\x17ListEnvironmentsRequest\x12\x1b\n\tpage_size\x18\x01 \x01(\rR\x08pageSize\x12\x1d\n\npage_token\x18\x02 \x01(\tR\tpageToken\"\xac\x01\n\x18ListEnvironmentsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12I\n\x0c\x65nvironments\x18\x03 \x03(\x0b\x32%.scalekit.v1.environments.EnvironmentR\x0c\x65nvironments\":\n\x18\x44\x65leteEnvironmentRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"@\n\x1eGenerateSamlCertificateRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"k\n\x1fGenerateSamlCertificateResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12 \n\x0b\x63\x65rtificate\x18\x02 \x01(\tR\x0b\x63\x65rtificate\x12\x16\n\x06\x65xpiry\x18\x03 \x01(\x03R\x06\x65xpiry\"\x99\x01\n!UpdatePortalCustomizationResponse\x12$\n\renvironmentId\x18\x01 \x01(\tR\renvironmentId\x12N\n\x16\x63ustomization_settings\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\x15\x63ustomizationSettings\"\x9a\x01\n UpdatePortalCustomizationRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12V\n\x16\x63ustomization_settings\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructB\x06\xbaH\x03\xc8\x01\x01R\x15\x63ustomizationSettings\":\n\x1dGetPortalCustomizationRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x02id\"\xab\x01\n\x0ePortalSettings\x12\x98\x01\n\x0f\x63ustom_branding\x18\x01 \x01(\x08\x42o\x92\x41l2dIndicates whether custom portal branding is enabled for this workspace based on billing subscriptionJ\x04trueR\x0e\x63ustomBranding\"\xe1\x01\n\x1eGetPortalCustomizationResponse\x12$\n\renvironmentId\x18\x01 \x01(\tR\renvironmentId\x12N\n\x16\x63ustomization_settings\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\x15\x63ustomizationSettings\x12I\n\x08settings\x18\x03 \x01(\x0b\x32(.scalekit.v1.environments.PortalSettingsB\x03\xe0\x41\x03R\x08settings\"Z\n\x1c\x43reateAssetUploadUrlResponse\x12\x1d\n\nupload_url\x18\x01 \x01(\tR\tuploadUrl\x12\x1b\n\tfetch_url\x18\x02 \x01(\tR\x08\x66\x65tchUrl\"\x8d\x01\n\x1b\x43reateAssetUploadUrlRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12N\n\x0e\x61sset_settings\x18\x02 \x01(\x0b\x32\'.scalekit.v1.environments.AssetSettingsR\rassetSettings\"\x91\x01\n\rAssetSettings\x12K\n\x08\x63\x61tegory\x18\x01 \x01(\x0e\x32\'.scalekit.v1.environments.AssetCategoryB\x06\xbaH\x03\xc8\x01\x01R\x08\x63\x61tegory\x12\x33\n\textension\x18\x02 \x01(\tB\x15\xbaH\x12r\x10R\x03jpgR\x04jpegR\x03pngR\textension\"\x89\x01\n\x15UpdateFeaturesRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12P\n\x08\x66\x65\x61tures\x18\x02 \x03(\x0b\x32,.scalekit.v1.environments.EnvironmentFeatureB\x06\xbaH\x03\xc8\x01\x01R\x08\x66\x65\x61tures\"2\n\x17\x45nableFSAFeatureRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x02id\":\n\x18\x44isableFSAFeatureRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"7\n\x12GetFeaturesRequest\x12!\n\x02id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65nv\xd0\x01\x01R\x02id\"_\n\x13GetFeaturesResponse\x12H\n\x08\x66\x65\x61tures\x18\x01 \x03(\x0b\x32,.scalekit.v1.environments.EnvironmentFeatureR\x08\x66\x65\x61tures\"`\n\x14\x45nableFeatureRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12(\n\nfeature_id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18 R\tfeatureId\"a\n\x15\x44isableFeatureRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12(\n\nfeature_id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18 R\tfeatureId\"B\n\x12\x45nvironmentFeature\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x18\n\x07\x65nabled\x18\x02 \x01(\x08R\x07\x65nabled\"F\n$GetEnvironmentSessionSettingsRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"E\n#GetEnvironmentUserManagementRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"}\n%GetEnvironmentSessionSettingsResponse\x12T\n\x10session_settings\x18\x01 \x01(\x0b\x32).scalekit.v1.environments.SessionSettingsR\x0fsessionSettings\"y\n$GetEnvironmentUserManagementResponse\x12Q\n\x0fuser_management\x18\x01 \x01(\x0b\x32(.scalekit.v1.environments.UserManagementR\x0euserManagement\"\xa7\x01\n\'CreateEnvironmentSessionSettingsRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\\\n\x10session_settings\x18\x02 \x01(\x0b\x32).scalekit.v1.environments.SessionSettingsB\x06\xbaH\x03\xc8\x01\x01R\x0fsessionSettings\"\xa3\x01\n&CreateEnvironmentUserManagementRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12Y\n\x0fuser_management\x18\x02 \x01(\x0b\x32(.scalekit.v1.environments.UserManagementB\x06\xbaH\x03\xc8\x01\x01R\x0euserManagement\"\xa7\x01\n(CreateEnvironmentSessionSettingsResponse\x12%\n\x0e\x65nvironment_id\x18\x01 \x01(\tR\renvironmentId\x12T\n\x10session_settings\x18\x02 \x01(\x0b\x32).scalekit.v1.environments.SessionSettingsR\x0fsessionSettings\"\xa3\x01\n\'CreateEnvironmentUserManagementResponse\x12%\n\x0e\x65nvironment_id\x18\x01 \x01(\tR\renvironmentId\x12Q\n\x0fuser_management\x18\x02 \x01(\x0b\x32(.scalekit.v1.environments.UserManagementR\x0euserManagement\"\xa7\x01\n\'UpdateEnvironmentSessionSettingsRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\\\n\x10session_settings\x18\x02 \x01(\x0b\x32).scalekit.v1.environments.SessionSettingsB\x06\xbaH\x03\xc8\x01\x01R\x0fsessionSettings\"\xa3\x01\n&UpdateEnvironmentUserManagementRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12Y\n\x0fuser_management\x18\x02 \x01(\x0b\x32(.scalekit.v1.environments.UserManagementB\x06\xbaH\x03\xc8\x01\x01R\x0euserManagement\"\xa7\x01\n(UpdateEnvironmentSessionSettingsResponse\x12%\n\x0e\x65nvironment_id\x18\x01 \x01(\tR\renvironmentId\x12T\n\x10session_settings\x18\x02 \x01(\x0b\x32).scalekit.v1.environments.SessionSettingsR\x0fsessionSettings\"\xa3\x01\n\'UpdateEnvironmentUserManagementResponse\x12%\n\x0e\x65nvironment_id\x18\x01 \x01(\tR\renvironmentId\x12Q\n\x0fuser_management\x18\x02 \x01(\x0b\x32(.scalekit.v1.environments.UserManagementR\x0euserManagement\"\xff\x08\n\x0fSessionSettings\x12X\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x0b\xbaH\x08\x1a\x06\x18\xc0\xd1\x02(\x01R\x11\x61\x63\x63\x65ssTokenExpiry\x12\x65\n\x1a\x63lient_access_token_expiry\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x0b\xbaH\x08\x1a\x06\x18\xc0\xd1\x02(\x01R\x17\x63lientAccessTokenExpiry\x12\x62\n\x18\x61\x62solute_session_timeout\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x0b\xbaH\x08\x1a\x06\x18\xa0\x8a (\x01R\x16\x61\x62soluteSessionTimeout\x12X\n\x1asession_management_enabled\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x18sessionManagementEnabled\x12Y\n\x14idle_session_timeout\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\n\xbaH\x07\x1a\x05\x18\xe0N(\x01R\x12idleSessionTimeout\x12L\n\x14idle_session_enabled\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x12idleSessionEnabled\x12g\n\x17\x63ookie_persistence_type\x18\x07 \x01(\x0e\x32/.scalekit.v1.environments.CookiePersistenceTypeR\x15\x63ookiePersistenceType\x12h\n\x18\x63ookie_same_site_setting\x18\x08 \x01(\x0e\x32/.scalekit.v1.environments.CookieSameSiteSettingR\x15\x63ookieSameSiteSetting\x12N\n\x14\x63ookie_custom_domain\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueR\x12\x63ookieCustomDomain\x12[\n\x18\x61\x63\x63\x65ss_token_expiry_unit\x18\n \x01(\x0e\x32\".scalekit.v1.environments.TimeUnitR\x15\x61\x63\x63\x65ssTokenExpiryUnit\x12\x65\n\x1d\x61\x62solute_session_timeout_unit\x18\x0b \x01(\x0e\x32\".scalekit.v1.environments.TimeUnitR\x1a\x61\x62soluteSessionTimeoutUnit\x12]\n\x19idle_session_timeout_unit\x18\x0c \x01(\x0e\x32\".scalekit.v1.environments.TimeUnitR\x16idleSessionTimeoutUnit\"\xa5\x07\n\x0eUserManagement\x12\x61\n\x1f\x61llow_duplicate_user_identities\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x1c\x61llowDuplicateUserIdentities\x12X\n\x1a\x61llow_multiple_memberships\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x18\x61llowMultipleMemberships\x12V\n\x19\x61llow_organization_signup\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x17\x61llowOrganizationSignup\x12o\n\x15org_user_relationship\x18\x04 \x01(\x0e\x32\x31.scalekit.v1.environments.OrgUserRelationshipTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x13orgUserRelationship\x12O\n\x16\x65nable_max_users_limit\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x13\x65nableMaxUsersLimit\x12P\n\x0fmax_users_limit\x18\x06 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x0b\xbaH\x08\x1a\x06\x18\x9f\x8d\x06(\x01R\rmaxUsersLimit\x12V\n\x11invitation_expiry\x18\x07 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x0b\xbaH\x08*\x06\x18\xc0\xd1\x02(\x01R\x10invitationExpiry\x12_\n\x1e\x62lock_disposable_email_domains\x18\t \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x1b\x62lockDisposableEmailDomains\x12W\n\x1a\x62lock_public_email_domains\x18\n \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x17\x62lockPublicEmailDomains\x12X\n\x1bsync_user_profile_on_signin\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x17syncUserProfileOnSignin\":\n\x11GetContextRequest\x12%\n\x0e\x65nvironment_id\x18\x02 \x01(\tR\renvironmentId\"G\n\x12GetContextResponse\x12\x31\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext\"p\n\x14UpdateContextRequest\x12%\n\x0e\x65nvironment_id\x18\x02 \x01(\tR\renvironmentId\x12\x31\n\x07\x63ontext\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext\"*\n\x18GetCurrentSessionRequest\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\"\xc3\x02\n\x19GetCurrentSessionResponse\x12\x46\n\x0esession_expiry\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\rsessionExpiry\x88\x01\x01\x12J\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x11\x61\x63\x63\x65ssTokenExpiry\x12,\n\x0forganization_id\x18\x03 \x01(\tH\x01R\x0eorganizationId\x88\x01\x01\x12\x18\n\x07subject\x18\x04 \x01(\tR\x07subject\x12\x19\n\x05\x65mail\x18\x05 \x01(\tH\x02R\x05\x65mail\x88\x01\x01\x42\x11\n\x0f_session_expiryB\x12\n\x10_organization_idB\x08\n\x06_email\"\xc5\x01\n\x10ResourceMetadata\x12K\n\x04type\x18\x01 \x01(\x0e\x32\x37.scalekit.v1.environments.ResourceMetadata.ResourceTypeR\x04type\x12 \n\x0bidentifiers\x18\x02 \x03(\tR\x0bidentifiers\"B\n\x0cResourceType\x12\x10\n\x0corganization\x10\x00\x12\x0e\n\nconnection\x10\x01\x12\x10\n\x0c\x61uth_request\x10\x02\"c\n\x17ScalekitResourceRequest\x12H\n\tresources\x18\x01 \x03(\x0b\x32*.scalekit.v1.environments.ResourceMetadataR\tresources\"\xd2\x01\n\x18ScalekitResourceResponse\x12_\n\tresources\x18\x01 \x03(\x0b\x32\x41.scalekit.v1.environments.ScalekitResourceResponse.ResourcesEntryR\tresources\x1aU\n\x0eResourcesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\x05value:\x02\x38\x01*W\n\x12\x43ustomDomainStatus\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07PENDING\x10\x01\x12\n\n\x06\x41\x43TIVE\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\x12\x0b\n\x07INITIAL\x10\x04*O\n\rAssetCategory\x12\x1e\n\x1a\x41SSET_CATEGORY_UNSPECIFIED\x10\x00\x12\x1e\n\x1aPORTAL_CUSTOMIZATION_IMAGE\x10\x01*O\n\x08TimeUnit\x12!\n\x1dSESSION_TIME_UNIT_UNSPECIFIED\x10\x00\x12\x0b\n\x07MINUTES\x10\x01\x12\t\n\x05HOURS\x10\x02\x12\x08\n\x04\x44\x41YS\x10\x03*w\n\x17OrgUserRelationshipType\x12\'\n#OrgUserRelationshipType_UNSPECIFIED\x10\x00\x12\x17\n\x13SINGLE_ORGANIZATION\x10\x01\x12\x1a\n\x16MULTIPLE_ORGANIZATIONS\x10\x02*[\n\x15\x43ookiePersistenceType\x12%\n!CookiePersistenceType_UNSPECIFIED\x10\x00\x12\x0e\n\nPERSISTENT\x10\x01\x12\x0b\n\x07SESSION\x10\x02*[\n\x15\x43ookieSameSiteSetting\x12%\n!CookieSameSiteSetting_UNSPECIFIED\x10\x00\x12\x0c\n\x08LAX_MODE\x10\x01\x12\r\n\tNONE_MODE\x10\x02\x32\xbd-\n\x12\x45nvironmentService\x12\xad\x01\n\x11\x43reateEnvironment\x12\x32.scalekit.v1.environments.CreateEnvironmentRequest\x1a\x33.scalekit.v1.environments.CreateEnvironmentResponse\"/\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02#\"\x14/api/v1/environments:\x0b\x65nvironment\x12\xb2\x01\n\x11UpdateEnvironment\x12\x32.scalekit.v1.environments.UpdateEnvironmentRequest\x1a\x33.scalekit.v1.environments.UpdateEnvironmentResponse\"4\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02(2\x19/api/v1/environments/{id}:\x0b\x65nvironment\x12\xc5\x01\n\x17UpdateEnvironmentDomain\x12\x38.scalekit.v1.environments.UpdateEnvironmentDomainRequest\x1a\x33.scalekit.v1.environments.UpdateEnvironmentResponse\";\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02/2 /api/v1/environments/{id}:update:\x0b\x65nvironment\x12\x9c\x01\n\x0eGetEnvironment\x12/.scalekit.v1.environments.GetEnvironmentRequest\x1a\x30.scalekit.v1.environments.GetEnvironmentResponse\"\'\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x1b\x12\x19/api/v1/environments/{id}\x12\x9c\x01\n\x0fListEnvironment\x12\x31.scalekit.v1.environments.ListEnvironmentsRequest\x1a\x32.scalekit.v1.environments.ListEnvironmentsResponse\"\"\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/environments\x12\x86\x01\n\x11\x44\x65leteEnvironment\x12\x32.scalekit.v1.environments.DeleteEnvironmentRequest\x1a\x16.google.protobuf.Empty\"%\x82\xb5\x18\x00\x82\xd3\xe4\x93\x02\x1b*\x19/api/v1/environments/{id}\x12\xa8\x01\n\x15GetRequiredDNSRecords\x12..scalekit.v1.environments.GetDNSRecordsRequest\x1a/.scalekit.v1.environments.GetDNSRecordsResponse\".\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\"\"\x1d/api/v1/environments/{id}/dns:\x01*\x12\x91\x01\n\x10VerifyDNSRecords\x12..scalekit.v1.environments.GetDNSRecordsRequest\x1a\x16.google.protobuf.Empty\"5\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02)\"$/api/v1/environments/{id}/dns:verify:\x01*\x12\xba\x01\n\x12\x43reateCustomDomain\x12\x33.scalekit.v1.environments.CreateCustomDomainRequest\x1a\x34.scalekit.v1.environments.CreateCustomDomainResponse\"9\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02-\"(/api/v1/environments/{id}/custom-domains:\x01*\x12\xbd\x01\n\x17\x43heckCustomDomainStatus\x12/.scalekit.v1.environments.GetEnvironmentRequest\x1a\x30.scalekit.v1.environments.GetEnvironmentResponse\"?\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x33\"./api/v1/environments/{id}/custom-domains:check:\x01*\x12\xd8\x01\n\x1aGenerateNewSamlCertificate\x12\x38.scalekit.v1.environments.GenerateSamlCertificateRequest\x1a\x39.scalekit.v1.environments.GenerateSamlCertificateResponse\"E\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x39\"4/api/v1/environments/{id}/saml-certificates:generate:\x01*\x12\xb1\x02\n\x19UpdatePortalCustomization\x12:.scalekit.v1.environments.UpdatePortalCustomizationRequest\x1a;.scalekit.v1.environments.UpdatePortalCustomizationResponse\"\x9a\x01\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x8d\x01\x1a//api/v1/environments/{id}/portal_customizations:\x16\x63ustomization_settingsZB\x1a(/api/v1/environments/{id}/customizations:\x16\x63ustomization_settings\x12\xe8\x01\n\x16GetPortalCustomization\x12\x37.scalekit.v1.environments.GetPortalCustomizationRequest\x1a\x38.scalekit.v1.environments.GetPortalCustomizationResponse\"[\x82\xb5\x18\x02\x18`\x82\xd3\xe4\x93\x02O\x12\x1d/api/v1/portal_customizationsZ.\x12,/api/v1/environments/-/portal_customizations\x12\xc4\x01\n\x14\x43reateAssetUploadURL\x12\x35.scalekit.v1.environments.CreateAssetUploadUrlRequest\x1a\x36.scalekit.v1.environments.CreateAssetUploadUrlResponse\"=\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x31\"\x1f/api/v1/environments/{id}/asset:\x0e\x61sset_settings\x12\xac\x01\n\x0eUpdateFeatures\x12/.scalekit.v1.environments.UpdateFeaturesRequest\x1a-.scalekit.v1.environments.GetFeaturesResponse\":\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02.\x1a\"/api/v1/environments/{id}/features:\x08\x66\x65\x61tures\x12\xbc\x01\n\x10\x45nableFSAFeature\x12\x31.scalekit.v1.environments.EnableFSAFeatureRequest\x1a\x16.google.protobuf.Empty\"]\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02Q\"-/api/v1/environments/{id}/features/fsa/enable:\x01*Z\x1d\"\x1b/api/v1/features/fsa/enable\x12r\n\x11\x44isableFSAFeature\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"-\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02!\"\x1c/api/v1/features/fsa/disable:\x01*\x12\x9d\x01\n\rEnableFeature\x12..scalekit.v1.environments.EnableFeatureRequest\x1a\x16.google.protobuf.Empty\"D\x82\xb5\x18\x02\x18`\x82\xd3\xe4\x93\x02\x38\"6/api/v1/environments/{id}/features/{feature_id}:enable\x12\xa0\x01\n\x0e\x44isableFeature\x12/.scalekit.v1.environments.DisableFeatureRequest\x1a\x16.google.protobuf.Empty\"E\x82\xb5\x18\x02\x18`\x82\xd3\xe4\x93\x02\x39\"7/api/v1/environments/{id}/features/{feature_id}:disable\x12\x8a\x01\n\x0bGetFeatures\x12,.scalekit.v1.environments.GetFeaturesRequest\x1a-.scalekit.v1.environments.GetFeaturesResponse\"\x1e\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x12\x12\x10/api/v1/features\x12\xf5\x01\n CreateEnvironmentSessionSettings\x12\x41.scalekit.v1.environments.CreateEnvironmentSessionSettingsRequest\x1a\x42.scalekit.v1.environments.CreateEnvironmentSessionSettingsResponse\"J\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02>\"*/api/v1/environments/{id}/session-settings:\x10session_settings\x12\xf9\x01\n\x1f\x43reateEnvironmentUserManagement\x12@.scalekit.v1.environments.CreateEnvironmentUserManagementRequest\x1a\x41.scalekit.v1.environments.CreateEnvironmentUserManagementResponse\"Q\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x45\"2/api/v1/environments/{id}/settings/user-management:\x0fuser_management\x12\xda\x01\n\x1dGetEnvironmentSessionSettings\x12>.scalekit.v1.environments.GetEnvironmentSessionSettingsRequest\x1a?.scalekit.v1.environments.GetEnvironmentSessionSettingsResponse\"8\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02,\x12*/api/v1/environments/{id}/session-settings\x12\xdf\x01\n\x1cGetEnvironmentUserManagement\x12=.scalekit.v1.environments.GetEnvironmentUserManagementRequest\x1a>.scalekit.v1.environments.GetEnvironmentUserManagementResponse\"@\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x34\x12\x32/api/v1/environments/{id}/settings/user-management\x12\xf5\x01\n UpdateEnvironmentSessionSettings\x12\x41.scalekit.v1.environments.UpdateEnvironmentSessionSettingsRequest\x1a\x42.scalekit.v1.environments.UpdateEnvironmentSessionSettingsResponse\"J\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02>2*/api/v1/environments/{id}/session-settings:\x10session_settings\x12\xf9\x01\n\x1fUpdateEnvironmentUserManagement\x12@.scalekit.v1.environments.UpdateEnvironmentUserManagementRequest\x1a\x41.scalekit.v1.environments.UpdateEnvironmentUserManagementResponse\"Q\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x45\x32\x32/api/v1/environments/{id}/settings/user-management:\x0fuser_management\x12\xa5\x01\n\nGetContext\x12+.scalekit.v1.environments.GetContextRequest\x1a,.scalekit.v1.environments.GetContextResponse\"<\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x30\x12./api/v1/environments/{environment_id}/contexts\x12\x9e\x01\n\rUpdateContext\x12..scalekit.v1.environments.UpdateContextRequest\x1a\x16.google.protobuf.Empty\"E\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x39\x1a./api/v1/environments/{environment_id}/contexts:\x07\x63ontext\x12\xee\x01\n\x11GetCurrentSession\x12\x32.scalekit.v1.environments.GetCurrentSessionRequest\x1a\x33.scalekit.v1.environments.GetCurrentSessionResponse\"p\x82\xb5\x18\x02\x18p\x82\xd3\xe4\x93\x02\x64\x12%/api/v1/environments/{id}/sessions:meZ$\x12\"/api/v1/environments/-/sessions:meZ\x15\x12\x13/api/v1/sessions:me\x12\xa2\x01\n\x14GetScalekitResources\x12\x31.scalekit.v1.environments.ScalekitResourceRequest\x1a\x32.scalekit.v1.environments.ScalekitResourceResponse\"#\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x17\"\x12/api/v1/fetch:bulk:\x01*B8Z6github.com/scalekit-inc/scalekit/pkg/grpc/environmentsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -89,12 +86,6 @@ _globals['_GETPORTALCUSTOMIZATIONREQUEST'].fields_by_name['id']._serialized_options = b'\272H\006r\004\020\000\030 ' _globals['_PORTALSETTINGS'].fields_by_name['custom_branding']._loaded_options = None _globals['_PORTALSETTINGS'].fields_by_name['custom_branding']._serialized_options = b'\222Al2dIndicates whether custom portal branding is enabled for this workspace based on billing subscriptionJ\004true' - _globals['_PORTALSETTINGS'].fields_by_name['new_self_serve_sso_scim']._loaded_options = None - _globals['_PORTALSETTINGS'].fields_by_name['new_self_serve_sso_scim']._serialized_options = b'\222A\210\0012\177Indicates whether the new self-serve SSO/SCIM flow should be shown in the customer portal (rollout-driven, not billing-derived)J\005false' - _globals['_PORTALSETTINGS'].fields_by_name['enable_conn_delete']._loaded_options = None - _globals['_PORTALSETTINGS'].fields_by_name['enable_conn_delete']._serialized_options = b'\222Ax2oIndicates whether connection deletion is enabled for this environment (rollout-driven by environment allowlist)J\005false' - _globals['_GETPORTALCUSTOMIZATIONRESPONSE'].fields_by_name['customization_settings']._loaded_options = None - _globals['_GETPORTALCUSTOMIZATIONRESPONSE'].fields_by_name['customization_settings']._serialized_options = b'\340A\001' _globals['_GETPORTALCUSTOMIZATIONRESPONSE'].fields_by_name['settings']._loaded_options = None _globals['_GETPORTALCUSTOMIZATIONRESPONSE'].fields_by_name['settings']._serialized_options = b'\340A\003' _globals['_CREATEASSETUPLOADURLREQUEST'].fields_by_name['id']._loaded_options = None @@ -157,32 +148,8 @@ _globals['_USERMANAGEMENT'].fields_by_name['invitation_expiry']._serialized_options = b'\272H\010*\006\030\300\321\002(\001' _globals['_SCALEKITRESOURCERESPONSE_RESOURCESENTRY']._loaded_options = None _globals['_SCALEKITRESOURCERESPONSE_RESOURCESENTRY']._serialized_options = b'8\001' - _globals['_PORTALCUSTOMIZATIONBOOTSTRAP'].fields_by_name['customization_settings']._loaded_options = None - _globals['_PORTALCUSTOMIZATIONBOOTSTRAP'].fields_by_name['customization_settings']._serialized_options = b'\340A\001' - _globals['_PORTALCUSTOMIZATIONBOOTSTRAP'].fields_by_name['settings']._loaded_options = None - _globals['_PORTALCUSTOMIZATIONBOOTSTRAP'].fields_by_name['settings']._serialized_options = b'\340A\003' - _globals['_AGENTACTIONSCONFIG'].fields_by_name['user_verify_mode']._loaded_options = None - _globals['_AGENTACTIONSCONFIG'].fields_by_name['user_verify_mode']._serialized_options = b'\272H\005\202\001\002\020\001' - _globals['_AGENTACTIONSCONFIG'].fields_by_name['detailed_error_logging']._loaded_options = None - _globals['_AGENTACTIONSCONFIG'].fields_by_name['detailed_error_logging']._serialized_options = b'\222A\307\0012\304\001When true, full error messages from provider failures are captured in tool-call logs. When false (default), only the error code is retained. Omit the field to leave the existing setting unchanged.' - _globals['_CREATEAGENTACTIONSCONFIGREQUEST'].fields_by_name['id']._loaded_options = None - _globals['_CREATEAGENTACTIONSCONFIGREQUEST'].fields_by_name['id']._serialized_options = b'\272H\013r\t\020\001\030 :\003env' - _globals['_CREATEAGENTACTIONSCONFIGREQUEST'].fields_by_name['agent_actions_config']._loaded_options = None - _globals['_CREATEAGENTACTIONSCONFIGREQUEST'].fields_by_name['agent_actions_config']._serialized_options = b'\340A\002' - _globals['_CREATEAGENTACTIONSCONFIGRESPONSE'].fields_by_name['agent_actions_config']._loaded_options = None - _globals['_CREATEAGENTACTIONSCONFIGRESPONSE'].fields_by_name['agent_actions_config']._serialized_options = b'\340A\003' - _globals['_GETAGENTACTIONSCONFIGREQUEST'].fields_by_name['id']._loaded_options = None - _globals['_GETAGENTACTIONSCONFIGREQUEST'].fields_by_name['id']._serialized_options = b'\272H\013r\t\020\001\030 :\003env' - _globals['_GETAGENTACTIONSCONFIGRESPONSE'].fields_by_name['agent_actions_config']._loaded_options = None - _globals['_GETAGENTACTIONSCONFIGRESPONSE'].fields_by_name['agent_actions_config']._serialized_options = b'\340A\003' - _globals['_UPDATEAGENTACTIONSCONFIGREQUEST'].fields_by_name['id']._loaded_options = None - _globals['_UPDATEAGENTACTIONSCONFIGREQUEST'].fields_by_name['id']._serialized_options = b'\272H\013r\t\020\001\030 :\003env' - _globals['_UPDATEAGENTACTIONSCONFIGREQUEST'].fields_by_name['agent_actions_config']._loaded_options = None - _globals['_UPDATEAGENTACTIONSCONFIGREQUEST'].fields_by_name['agent_actions_config']._serialized_options = b'\340A\002' - _globals['_UPDATEAGENTACTIONSCONFIGRESPONSE'].fields_by_name['agent_actions_config']._loaded_options = None - _globals['_UPDATEAGENTACTIONSCONFIGRESPONSE'].fields_by_name['agent_actions_config']._serialized_options = b'\340A\003' _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateEnvironment']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateEnvironment']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002#\"\024/api/v1/environments:\013environment' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateEnvironment']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002#\"\024/api/v1/environments:\013environment' _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironment']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironment']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002(2\031/api/v1/environments/{id}:\013environment' _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironmentDomain']._loaded_options = None @@ -198,219 +165,183 @@ _globals['_ENVIRONMENTSERVICE'].methods_by_name['VerifyDNSRecords']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['VerifyDNSRecords']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002)\"$/api/v1/environments/{id}/dns:verify:\001*' _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateCustomDomain']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateCustomDomain']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002-\"(/api/v1/environments/{id}/custom-domains:\001*' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateCustomDomain']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002-\"(/api/v1/environments/{id}/custom-domains:\001*' _globals['_ENVIRONMENTSERVICE'].methods_by_name['CheckCustomDomainStatus']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['CheckCustomDomainStatus']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\0023\"./api/v1/environments/{id}/custom-domains:check:\001*' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['CheckCustomDomainStatus']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\0023\"./api/v1/environments/{id}/custom-domains:check:\001*' _globals['_ENVIRONMENTSERVICE'].methods_by_name['GenerateNewSamlCertificate']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['GenerateNewSamlCertificate']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\0029\"4/api/v1/environments/{id}/saml-certificates:generate:\001*' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['GenerateNewSamlCertificate']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\0029\"4/api/v1/environments/{id}/saml-certificates:generate:\001*' _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdatePortalCustomization']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdatePortalCustomization']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\215\001\032//api/v1/environments/{id}/portal_customizations:\026customization_settingsZB\032(/api/v1/environments/{id}/customizations:\026customization_settings' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdatePortalCustomization']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\215\001\032//api/v1/environments/{id}/portal_customizations:\026customization_settingsZB\032(/api/v1/environments/{id}/customizations:\026customization_settings' _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetPortalCustomization']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetPortalCustomization']._serialized_options = b'\202\265\030\003\030\340\001\202\323\344\223\002O\022\035/api/v1/portal_customizationsZ.\022,/api/v1/environments/-/portal_customizations' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetPortalCustomization']._serialized_options = b'\202\265\030\002\030`\202\323\344\223\002O\022\035/api/v1/portal_customizationsZ.\022,/api/v1/environments/-/portal_customizations' _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateAssetUploadURL']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateAssetUploadURL']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\0021\"\037/api/v1/environments/{id}/asset:\016asset_settings' _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateFeatures']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateFeatures']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002.\032\"/api/v1/environments/{id}/features:\010features' _globals['_ENVIRONMENTSERVICE'].methods_by_name['EnableFSAFeature']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['EnableFSAFeature']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002Q\"-/api/v1/environments/{id}/features/fsa/enable:\001*Z\035\"\033/api/v1/features/fsa/enable' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['EnableFSAFeature']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002Q\"-/api/v1/environments/{id}/features/fsa/enable:\001*Z\035\"\033/api/v1/features/fsa/enable' _globals['_ENVIRONMENTSERVICE'].methods_by_name['DisableFSAFeature']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['DisableFSAFeature']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002!\"\034/api/v1/features/fsa/disable:\001*' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['DisableFSAFeature']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002!\"\034/api/v1/features/fsa/disable:\001*' _globals['_ENVIRONMENTSERVICE'].methods_by_name['EnableFeature']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['EnableFeature']._serialized_options = b'\202\265\030\002\030`\202\323\344\223\0028\"6/api/v1/environments/{id}/features/{feature_id}:enable' _globals['_ENVIRONMENTSERVICE'].methods_by_name['DisableFeature']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['DisableFeature']._serialized_options = b'\202\265\030\002\030`\202\323\344\223\0029\"7/api/v1/environments/{id}/features/{feature_id}:disable' _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetFeatures']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetFeatures']._serialized_options = b'\202\265\030\002\030T\202\323\344\223\002\022\022\020/api/v1/features' - _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetHostScopedPublicFeatureFlags']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetHostScopedPublicFeatureFlags']._serialized_options = b'\222A\362\002\n\014Environments\022%List host-scoped public feature flags\032\305\001Resolves the environment from the request host only (no environment path, query, or header). Returns allowlisted OpenFeature values; no bearer token. 404 if the host does not map to an environment.J2\n\003200\022+\n)Allowlisted flag keys and resolved valuesJ?\n\003404\0228\n6No environment resolved from host or workspace UI host\202\265\030\002\030\001\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002)\022\'/api/v1/environments:publicFeatureFlags' _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateEnvironmentSessionSettings']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateEnvironmentSessionSettings']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002>\"*/api/v1/environments/{id}/session-settings:\020session_settings' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateEnvironmentSessionSettings']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002>\"*/api/v1/environments/{id}/session-settings:\020session_settings' _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateEnvironmentUserManagement']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateEnvironmentUserManagement']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002E\"2/api/v1/environments/{id}/settings/user-management:\017user_management' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateEnvironmentUserManagement']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002E\"2/api/v1/environments/{id}/settings/user-management:\017user_management' _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetEnvironmentSessionSettings']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetEnvironmentSessionSettings']._serialized_options = b'\202\265\030\002\030T\202\323\344\223\002,\022*/api/v1/environments/{id}/session-settings' _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetEnvironmentUserManagement']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetEnvironmentUserManagement']._serialized_options = b'\202\265\030\002\030T\202\323\344\223\0024\0222/api/v1/environments/{id}/settings/user-management' _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironmentSessionSettings']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironmentSessionSettings']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002>2*/api/v1/environments/{id}/session-settings:\020session_settings' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironmentSessionSettings']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002>2*/api/v1/environments/{id}/session-settings:\020session_settings' _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironmentUserManagement']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironmentUserManagement']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002E22/api/v1/environments/{id}/settings/user-management:\017user_management' - _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateAgentActionsConfig']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateAgentActionsConfig']._serialized_options = b'\222A\213\002\n\014Environments\022\033Create agent actions config\032:Creates the agent actions configuration for an environmentJ2\n\003200\022+\n)Agent actions config created successfullyJN\n\003400\022G\nEInvalid request - missing or invalid fields, or config already existsJ\036\n\003404\022\027\n\025Environment not found\202\265\030\002\030@\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002H\"0/api/v1/environments/{id}/settings/agent-actions:\024agent_actions_config' - _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetAgentActionsConfig']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetAgentActionsConfig']._serialized_options = b'\222A\307\001\n\014Environments\022\030Get agent actions config\032=Retrieves the agent actions configuration for an environment.J4\n\003200\022-\n+Agent actions config retrieved successfullyJ(\n\003404\022!\n\037Environment or config not found\202\265\030\002\030@\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\0022\0220/api/v1/environments/{id}/settings/agent-actions' - _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateAgentActionsConfig']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateAgentActionsConfig']._serialized_options = b'\222A\233\002\n\014Environments\022\033Update agent actions config\032:Updates the agent actions configuration for an environmentJ2\n\003200\022+\n)Agent actions config updated successfullyJ^\n\003400\022W\nUInvalid request - missing or invalid fields, or mode not allowed for this environmentJ\036\n\003404\022\027\n\025Environment not found\202\265\030\002\030@\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002H20/api/v1/environments/{id}/settings/agent-actions:\024agent_actions_config' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironmentUserManagement']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002E22/api/v1/environments/{id}/settings/user-management:\017user_management' _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetContext']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetContext']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\0020\022./api/v1/environments/{environment_id}/contexts' _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateContext']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateContext']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\0029\032./api/v1/environments/{environment_id}/contexts:\007context' _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetCurrentSession']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetCurrentSession']._serialized_options = b'\202\265\030\003\030\360\001\202\323\344\223\002d\022%/api/v1/environments/{id}/sessions:meZ$\022\"/api/v1/environments/-/sessions:meZ\025\022\023/api/v1/sessions:me' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetCurrentSession']._serialized_options = b'\202\265\030\002\030p\202\323\344\223\002d\022%/api/v1/environments/{id}/sessions:meZ$\022\"/api/v1/environments/-/sessions:meZ\025\022\023/api/v1/sessions:me' _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetScalekitResources']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetScalekitResources']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\027\"\022/api/v1/fetch:bulk:\001*' - _globals['_ENVIRONMENTSERVICE'].methods_by_name['PortalBootstrap']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['PortalBootstrap']._serialized_options = b'\222A\255\002\n\006Portal\022\036Retrieve portal bootstrap data\032\227\001Returns all data needed to initialize the customer portal in a single request, combining session, portal customizations, organization, and connections.J5\n\003200\022.\n,Successfully retrieved portal bootstrap dataJ2\n\003401\022+\n)Unauthorized - invalid or expired session\202\265\030\002\030`\202\323\344\223\002\032\022\030/api/v1/portal/bootstrap' - _globals['_CUSTOMDOMAINSTATUS']._serialized_start=12913 - _globals['_CUSTOMDOMAINSTATUS']._serialized_end=13000 - _globals['_ASSETCATEGORY']._serialized_start=13002 - _globals['_ASSETCATEGORY']._serialized_end=13081 - _globals['_TIMEUNIT']._serialized_start=13083 - _globals['_TIMEUNIT']._serialized_end=13162 - _globals['_ORGUSERRELATIONSHIPTYPE']._serialized_start=13164 - _globals['_ORGUSERRELATIONSHIPTYPE']._serialized_end=13283 - _globals['_COOKIEPERSISTENCETYPE']._serialized_start=13285 - _globals['_COOKIEPERSISTENCETYPE']._serialized_end=13376 - _globals['_COOKIESAMESITESETTING']._serialized_start=13378 - _globals['_COOKIESAMESITESETTING']._serialized_end=13469 - _globals['_CONNECTEDACCOUNTUSERVERIFYMODE']._serialized_start=13472 - _globals['_CONNECTEDACCOUNTUSERVERIFYMODE']._serialized_end=13649 - _globals['_CREATECUSTOMDOMAINREQUEST']._serialized_start=585 - _globals['_CREATECUSTOMDOMAINREQUEST']._serialized_end=696 - _globals['_CREATECUSTOMDOMAINRESPONSE']._serialized_start=698 - _globals['_CREATECUSTOMDOMAINRESPONSE']._serialized_end=799 - _globals['_GETDNSRECORDSREQUEST']._serialized_start=801 - _globals['_GETDNSRECORDSREQUEST']._serialized_end=907 - _globals['_GETDNSRECORDSRESPONSE']._serialized_start=909 - _globals['_GETDNSRECORDSRESPONSE']._serialized_end=1003 - _globals['_DNSRECORDS']._serialized_start=1005 - _globals['_DNSRECORDS']._serialized_end=1124 - _globals['_ENVIRONMENT']._serialized_start=1127 - _globals['_ENVIRONMENT']._serialized_end=1657 - _globals['_CREATEENVIRONMENT']._serialized_start=1660 - _globals['_CREATEENVIRONMENT']._serialized_end=2093 - _globals['_UPDATEENVIRONMENT']._serialized_start=2095 - _globals['_UPDATEENVIRONMENT']._serialized_end=2201 - _globals['_UPDATEENVIRONMENTDOMAIN']._serialized_start=2203 - _globals['_UPDATEENVIRONMENTDOMAIN']._serialized_end=2286 - _globals['_CREATEENVIRONMENTREQUEST']._serialized_start=2288 - _globals['_CREATEENVIRONMENTREQUEST']._serialized_end=2401 - _globals['_CREATEENVIRONMENTRESPONSE']._serialized_start=2403 - _globals['_CREATEENVIRONMENTRESPONSE']._serialized_end=2503 - _globals['_UPDATEENVIRONMENTREQUEST']._serialized_start=2506 - _globals['_UPDATEENVIRONMENTREQUEST']._serialized_end=2651 - _globals['_UPDATEENVIRONMENTDOMAINREQUEST']._serialized_start=2654 - _globals['_UPDATEENVIRONMENTDOMAINREQUEST']._serialized_end=2811 - _globals['_UPDATEENVIRONMENTRESPONSE']._serialized_start=2813 - _globals['_UPDATEENVIRONMENTRESPONSE']._serialized_end=2913 - _globals['_GETENVIRONMENTREQUEST']._serialized_start=2915 - _globals['_GETENVIRONMENTREQUEST']._serialized_end=2970 - _globals['_GETENVIRONMENTRESPONSE']._serialized_start=2972 - _globals['_GETENVIRONMENTRESPONSE']._serialized_end=3069 - _globals['_LISTENVIRONMENTSREQUEST']._serialized_start=3071 - _globals['_LISTENVIRONMENTSREQUEST']._serialized_end=3156 - _globals['_LISTENVIRONMENTSRESPONSE']._serialized_start=3159 - _globals['_LISTENVIRONMENTSRESPONSE']._serialized_end=3331 - _globals['_DELETEENVIRONMENTREQUEST']._serialized_start=3333 - _globals['_DELETEENVIRONMENTREQUEST']._serialized_end=3391 - _globals['_GENERATESAMLCERTIFICATEREQUEST']._serialized_start=3393 - _globals['_GENERATESAMLCERTIFICATEREQUEST']._serialized_end=3457 - _globals['_GENERATESAMLCERTIFICATERESPONSE']._serialized_start=3459 - _globals['_GENERATESAMLCERTIFICATERESPONSE']._serialized_end=3566 - _globals['_UPDATEPORTALCUSTOMIZATIONRESPONSE']._serialized_start=3569 - _globals['_UPDATEPORTALCUSTOMIZATIONRESPONSE']._serialized_end=3722 - _globals['_UPDATEPORTALCUSTOMIZATIONREQUEST']._serialized_start=3725 - _globals['_UPDATEPORTALCUSTOMIZATIONREQUEST']._serialized_end=3879 - _globals['_GETPORTALCUSTOMIZATIONREQUEST']._serialized_start=3881 - _globals['_GETPORTALCUSTOMIZATIONREQUEST']._serialized_end=3939 - _globals['_PORTALSETTINGS']._serialized_start=3942 - _globals['_PORTALSETTINGS']._serialized_end=4483 - _globals['_GETPORTALCUSTOMIZATIONRESPONSE']._serialized_start=4486 - _globals['_GETPORTALCUSTOMIZATIONRESPONSE']._serialized_end=4716 - _globals['_CREATEASSETUPLOADURLRESPONSE']._serialized_start=4718 - _globals['_CREATEASSETUPLOADURLRESPONSE']._serialized_end=4808 - _globals['_CREATEASSETUPLOADURLREQUEST']._serialized_start=4811 - _globals['_CREATEASSETUPLOADURLREQUEST']._serialized_end=4952 - _globals['_ASSETSETTINGS']._serialized_start=4955 - _globals['_ASSETSETTINGS']._serialized_end=5100 - _globals['_UPDATEFEATURESREQUEST']._serialized_start=5103 - _globals['_UPDATEFEATURESREQUEST']._serialized_end=5240 - _globals['_ENABLEFSAFEATUREREQUEST']._serialized_start=5242 - _globals['_ENABLEFSAFEATUREREQUEST']._serialized_end=5292 - _globals['_DISABLEFSAFEATUREREQUEST']._serialized_start=5294 - _globals['_DISABLEFSAFEATUREREQUEST']._serialized_end=5352 - _globals['_GETFEATURESREQUEST']._serialized_start=5354 - _globals['_GETFEATURESREQUEST']._serialized_end=5409 - _globals['_GETFEATURESRESPONSE']._serialized_start=5411 - _globals['_GETFEATURESRESPONSE']._serialized_end=5506 - _globals['_ENABLEFEATUREREQUEST']._serialized_start=5508 - _globals['_ENABLEFEATUREREQUEST']._serialized_end=5604 - _globals['_DISABLEFEATUREREQUEST']._serialized_start=5606 - _globals['_DISABLEFEATUREREQUEST']._serialized_end=5703 - _globals['_ENVIRONMENTFEATURE']._serialized_start=5705 - _globals['_ENVIRONMENTFEATURE']._serialized_end=5771 - _globals['_GETHOSTSCOPEDPUBLICFEATUREFLAGSRESPONSE']._serialized_start=5773 - _globals['_GETHOSTSCOPEDPUBLICFEATUREFLAGSRESPONSE']._serialized_end=5885 - _globals['_PUBLICHOSTFEATUREFLAG']._serialized_start=5888 - _globals['_PUBLICHOSTFEATUREFLAG']._serialized_end=6047 - _globals['_GETENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_start=6049 - _globals['_GETENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_end=6119 - _globals['_GETENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_start=6121 - _globals['_GETENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_end=6190 - _globals['_GETENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_start=6192 - _globals['_GETENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_end=6317 - _globals['_GETENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_start=6319 - _globals['_GETENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_end=6440 - _globals['_CREATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_start=6443 - _globals['_CREATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_end=6610 - _globals['_CREATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_start=6613 - _globals['_CREATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_end=6776 - _globals['_CREATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_start=6779 - _globals['_CREATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_end=6946 - _globals['_CREATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_start=6949 - _globals['_CREATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_end=7112 - _globals['_UPDATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_start=7115 - _globals['_UPDATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_end=7282 - _globals['_UPDATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_start=7285 - _globals['_UPDATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_end=7448 - _globals['_UPDATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_start=7451 - _globals['_UPDATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_end=7618 - _globals['_UPDATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_start=7621 - _globals['_UPDATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_end=7784 - _globals['_SESSIONSETTINGS']._serialized_start=7787 - _globals['_SESSIONSETTINGS']._serialized_end=8938 - _globals['_USERMANAGEMENT']._serialized_start=8941 - _globals['_USERMANAGEMENT']._serialized_end=9874 - _globals['_GETCONTEXTREQUEST']._serialized_start=9876 - _globals['_GETCONTEXTREQUEST']._serialized_end=9934 - _globals['_GETCONTEXTRESPONSE']._serialized_start=9936 - _globals['_GETCONTEXTRESPONSE']._serialized_end=10007 - _globals['_UPDATECONTEXTREQUEST']._serialized_start=10009 - _globals['_UPDATECONTEXTREQUEST']._serialized_end=10121 - _globals['_GETCURRENTSESSIONREQUEST']._serialized_start=10123 - _globals['_GETCURRENTSESSIONREQUEST']._serialized_end=10165 - _globals['_GETCURRENTSESSIONRESPONSE']._serialized_start=10168 - _globals['_GETCURRENTSESSIONRESPONSE']._serialized_end=10571 - _globals['_RESOURCEMETADATA']._serialized_start=10574 - _globals['_RESOURCEMETADATA']._serialized_end=10771 - _globals['_RESOURCEMETADATA_RESOURCETYPE']._serialized_start=10705 - _globals['_RESOURCEMETADATA_RESOURCETYPE']._serialized_end=10771 - _globals['_SCALEKITRESOURCEREQUEST']._serialized_start=10773 - _globals['_SCALEKITRESOURCEREQUEST']._serialized_end=10872 - _globals['_SCALEKITRESOURCERESPONSE']._serialized_start=10875 - _globals['_SCALEKITRESOURCERESPONSE']._serialized_end=11085 - _globals['_SCALEKITRESOURCERESPONSE_RESOURCESENTRY']._serialized_start=11000 - _globals['_SCALEKITRESOURCERESPONSE_RESOURCESENTRY']._serialized_end=11085 - _globals['_PORTALBOOTSTRAPREQUEST']._serialized_start=11087 - _globals['_PORTALBOOTSTRAPREQUEST']._serialized_end=11111 - _globals['_PORTALCUSTOMIZATIONBOOTSTRAP']._serialized_start=11114 - _globals['_PORTALCUSTOMIZATIONBOOTSTRAP']._serialized_end=11304 - _globals['_PORTALBOOTSTRAPRESPONSE']._serialized_start=11307 - _globals['_PORTALBOOTSTRAPRESPONSE']._serialized_end=11672 - _globals['_AGENTACTIONSCONFIG']._serialized_start=11675 - _globals['_AGENTACTIONSCONFIG']._serialized_end=12098 - _globals['_CREATEAGENTACTIONSCONFIGREQUEST']._serialized_start=12101 - _globals['_CREATEAGENTACTIONSCONFIGREQUEST']._serialized_end=12267 - _globals['_CREATEAGENTACTIONSCONFIGRESPONSE']._serialized_start=12270 - _globals['_CREATEAGENTACTIONSCONFIGRESPONSE']._serialized_end=12405 - _globals['_GETAGENTACTIONSCONFIGREQUEST']._serialized_start=12407 - _globals['_GETAGENTACTIONSCONFIGREQUEST']._serialized_end=12469 - _globals['_GETAGENTACTIONSCONFIGRESPONSE']._serialized_start=12472 - _globals['_GETAGENTACTIONSCONFIGRESPONSE']._serialized_end=12604 - _globals['_UPDATEAGENTACTIONSCONFIGREQUEST']._serialized_start=12607 - _globals['_UPDATEAGENTACTIONSCONFIGREQUEST']._serialized_end=12773 - _globals['_UPDATEAGENTACTIONSCONFIGRESPONSE']._serialized_start=12776 - _globals['_UPDATEAGENTACTIONSCONFIGRESPONSE']._serialized_end=12911 - _globals['_ENVIRONMENTSERVICE']._serialized_start=13652 - _globals['_ENVIRONMENTSERVICE']._serialized_end=22175 + _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetScalekitResources']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\027\"\022/api/v1/fetch:bulk:\001*' + _globals['_CUSTOMDOMAINSTATUS']._serialized_start=10237 + _globals['_CUSTOMDOMAINSTATUS']._serialized_end=10324 + _globals['_ASSETCATEGORY']._serialized_start=10326 + _globals['_ASSETCATEGORY']._serialized_end=10405 + _globals['_TIMEUNIT']._serialized_start=10407 + _globals['_TIMEUNIT']._serialized_end=10486 + _globals['_ORGUSERRELATIONSHIPTYPE']._serialized_start=10488 + _globals['_ORGUSERRELATIONSHIPTYPE']._serialized_end=10607 + _globals['_COOKIEPERSISTENCETYPE']._serialized_start=10609 + _globals['_COOKIEPERSISTENCETYPE']._serialized_end=10700 + _globals['_COOKIESAMESITESETTING']._serialized_start=10702 + _globals['_COOKIESAMESITESETTING']._serialized_end=10793 + _globals['_CREATECUSTOMDOMAINREQUEST']._serialized_start=466 + _globals['_CREATECUSTOMDOMAINREQUEST']._serialized_end=577 + _globals['_CREATECUSTOMDOMAINRESPONSE']._serialized_start=579 + _globals['_CREATECUSTOMDOMAINRESPONSE']._serialized_end=680 + _globals['_GETDNSRECORDSREQUEST']._serialized_start=682 + _globals['_GETDNSRECORDSREQUEST']._serialized_end=788 + _globals['_GETDNSRECORDSRESPONSE']._serialized_start=790 + _globals['_GETDNSRECORDSRESPONSE']._serialized_end=884 + _globals['_DNSRECORDS']._serialized_start=886 + _globals['_DNSRECORDS']._serialized_end=1005 + _globals['_ENVIRONMENT']._serialized_start=1008 + _globals['_ENVIRONMENT']._serialized_end=1538 + _globals['_CREATEENVIRONMENT']._serialized_start=1541 + _globals['_CREATEENVIRONMENT']._serialized_end=1974 + _globals['_UPDATEENVIRONMENT']._serialized_start=1976 + _globals['_UPDATEENVIRONMENT']._serialized_end=2082 + _globals['_UPDATEENVIRONMENTDOMAIN']._serialized_start=2084 + _globals['_UPDATEENVIRONMENTDOMAIN']._serialized_end=2167 + _globals['_CREATEENVIRONMENTREQUEST']._serialized_start=2169 + _globals['_CREATEENVIRONMENTREQUEST']._serialized_end=2282 + _globals['_CREATEENVIRONMENTRESPONSE']._serialized_start=2284 + _globals['_CREATEENVIRONMENTRESPONSE']._serialized_end=2384 + _globals['_UPDATEENVIRONMENTREQUEST']._serialized_start=2387 + _globals['_UPDATEENVIRONMENTREQUEST']._serialized_end=2532 + _globals['_UPDATEENVIRONMENTDOMAINREQUEST']._serialized_start=2535 + _globals['_UPDATEENVIRONMENTDOMAINREQUEST']._serialized_end=2692 + _globals['_UPDATEENVIRONMENTRESPONSE']._serialized_start=2694 + _globals['_UPDATEENVIRONMENTRESPONSE']._serialized_end=2794 + _globals['_GETENVIRONMENTREQUEST']._serialized_start=2796 + _globals['_GETENVIRONMENTREQUEST']._serialized_end=2851 + _globals['_GETENVIRONMENTRESPONSE']._serialized_start=2853 + _globals['_GETENVIRONMENTRESPONSE']._serialized_end=2950 + _globals['_LISTENVIRONMENTSREQUEST']._serialized_start=2952 + _globals['_LISTENVIRONMENTSREQUEST']._serialized_end=3037 + _globals['_LISTENVIRONMENTSRESPONSE']._serialized_start=3040 + _globals['_LISTENVIRONMENTSRESPONSE']._serialized_end=3212 + _globals['_DELETEENVIRONMENTREQUEST']._serialized_start=3214 + _globals['_DELETEENVIRONMENTREQUEST']._serialized_end=3272 + _globals['_GENERATESAMLCERTIFICATEREQUEST']._serialized_start=3274 + _globals['_GENERATESAMLCERTIFICATEREQUEST']._serialized_end=3338 + _globals['_GENERATESAMLCERTIFICATERESPONSE']._serialized_start=3340 + _globals['_GENERATESAMLCERTIFICATERESPONSE']._serialized_end=3447 + _globals['_UPDATEPORTALCUSTOMIZATIONRESPONSE']._serialized_start=3450 + _globals['_UPDATEPORTALCUSTOMIZATIONRESPONSE']._serialized_end=3603 + _globals['_UPDATEPORTALCUSTOMIZATIONREQUEST']._serialized_start=3606 + _globals['_UPDATEPORTALCUSTOMIZATIONREQUEST']._serialized_end=3760 + _globals['_GETPORTALCUSTOMIZATIONREQUEST']._serialized_start=3762 + _globals['_GETPORTALCUSTOMIZATIONREQUEST']._serialized_end=3820 + _globals['_PORTALSETTINGS']._serialized_start=3823 + _globals['_PORTALSETTINGS']._serialized_end=3994 + _globals['_GETPORTALCUSTOMIZATIONRESPONSE']._serialized_start=3997 + _globals['_GETPORTALCUSTOMIZATIONRESPONSE']._serialized_end=4222 + _globals['_CREATEASSETUPLOADURLRESPONSE']._serialized_start=4224 + _globals['_CREATEASSETUPLOADURLRESPONSE']._serialized_end=4314 + _globals['_CREATEASSETUPLOADURLREQUEST']._serialized_start=4317 + _globals['_CREATEASSETUPLOADURLREQUEST']._serialized_end=4458 + _globals['_ASSETSETTINGS']._serialized_start=4461 + _globals['_ASSETSETTINGS']._serialized_end=4606 + _globals['_UPDATEFEATURESREQUEST']._serialized_start=4609 + _globals['_UPDATEFEATURESREQUEST']._serialized_end=4746 + _globals['_ENABLEFSAFEATUREREQUEST']._serialized_start=4748 + _globals['_ENABLEFSAFEATUREREQUEST']._serialized_end=4798 + _globals['_DISABLEFSAFEATUREREQUEST']._serialized_start=4800 + _globals['_DISABLEFSAFEATUREREQUEST']._serialized_end=4858 + _globals['_GETFEATURESREQUEST']._serialized_start=4860 + _globals['_GETFEATURESREQUEST']._serialized_end=4915 + _globals['_GETFEATURESRESPONSE']._serialized_start=4917 + _globals['_GETFEATURESRESPONSE']._serialized_end=5012 + _globals['_ENABLEFEATUREREQUEST']._serialized_start=5014 + _globals['_ENABLEFEATUREREQUEST']._serialized_end=5110 + _globals['_DISABLEFEATUREREQUEST']._serialized_start=5112 + _globals['_DISABLEFEATUREREQUEST']._serialized_end=5209 + _globals['_ENVIRONMENTFEATURE']._serialized_start=5211 + _globals['_ENVIRONMENTFEATURE']._serialized_end=5277 + _globals['_GETENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_start=5279 + _globals['_GETENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_end=5349 + _globals['_GETENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_start=5351 + _globals['_GETENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_end=5420 + _globals['_GETENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_start=5422 + _globals['_GETENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_end=5547 + _globals['_GETENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_start=5549 + _globals['_GETENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_end=5670 + _globals['_CREATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_start=5673 + _globals['_CREATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_end=5840 + _globals['_CREATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_start=5843 + _globals['_CREATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_end=6006 + _globals['_CREATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_start=6009 + _globals['_CREATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_end=6176 + _globals['_CREATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_start=6179 + _globals['_CREATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_end=6342 + _globals['_UPDATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_start=6345 + _globals['_UPDATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_end=6512 + _globals['_UPDATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_start=6515 + _globals['_UPDATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_end=6678 + _globals['_UPDATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_start=6681 + _globals['_UPDATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_end=6848 + _globals['_UPDATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_start=6851 + _globals['_UPDATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_end=7014 + _globals['_SESSIONSETTINGS']._serialized_start=7017 + _globals['_SESSIONSETTINGS']._serialized_end=8168 + _globals['_USERMANAGEMENT']._serialized_start=8171 + _globals['_USERMANAGEMENT']._serialized_end=9104 + _globals['_GETCONTEXTREQUEST']._serialized_start=9106 + _globals['_GETCONTEXTREQUEST']._serialized_end=9164 + _globals['_GETCONTEXTRESPONSE']._serialized_start=9166 + _globals['_GETCONTEXTRESPONSE']._serialized_end=9237 + _globals['_UPDATECONTEXTREQUEST']._serialized_start=9239 + _globals['_UPDATECONTEXTREQUEST']._serialized_end=9351 + _globals['_GETCURRENTSESSIONREQUEST']._serialized_start=9353 + _globals['_GETCURRENTSESSIONREQUEST']._serialized_end=9395 + _globals['_GETCURRENTSESSIONRESPONSE']._serialized_start=9398 + _globals['_GETCURRENTSESSIONRESPONSE']._serialized_end=9721 + _globals['_RESOURCEMETADATA']._serialized_start=9724 + _globals['_RESOURCEMETADATA']._serialized_end=9921 + _globals['_RESOURCEMETADATA_RESOURCETYPE']._serialized_start=9855 + _globals['_RESOURCEMETADATA_RESOURCETYPE']._serialized_end=9921 + _globals['_SCALEKITRESOURCEREQUEST']._serialized_start=9923 + _globals['_SCALEKITRESOURCEREQUEST']._serialized_end=10022 + _globals['_SCALEKITRESOURCERESPONSE']._serialized_start=10025 + _globals['_SCALEKITRESOURCERESPONSE']._serialized_end=10235 + _globals['_SCALEKITRESOURCERESPONSE_RESOURCESENTRY']._serialized_start=10150 + _globals['_SCALEKITRESOURCERESPONSE_RESOURCESENTRY']._serialized_end=10235 + _globals['_ENVIRONMENTSERVICE']._serialized_start=10796 + _globals['_ENVIRONMENTSERVICE']._serialized_end=16617 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/environments/environments_pb2.pyi b/scalekit/v1/environments/environments_pb2.pyi index ec2f1bf..ca77562 100644 --- a/scalekit/v1/environments/environments_pb2.pyi +++ b/scalekit/v1/environments/environments_pb2.pyi @@ -1,7 +1,6 @@ from buf.validate import validate_pb2 as _validate_pb2 from google.api import annotations_pb2 as _annotations_pb2 from google.api import field_behavior_pb2 as _field_behavior_pb2 -from google.api import visibility_pb2 as _visibility_pb2 from google.protobuf import any_pb2 as _any_pb2 from google.protobuf import duration_pb2 as _duration_pb2 from google.protobuf import empty_pb2 as _empty_pb2 @@ -10,9 +9,7 @@ from google.protobuf import timestamp_pb2 as _timestamp_pb2 from google.protobuf import wrappers_pb2 as _wrappers_pb2 from protoc_gen_openapiv2.options import annotations_pb2 as _annotations_pb2_1 from scalekit.v1.commons import commons_pb2 as _commons_pb2 -from scalekit.v1.connections import connections_pb2 as _connections_pb2 from scalekit.v1.options import options_pb2 as _options_pb2 -from scalekit.v1.organizations import organizations_pb2 as _organizations_pb2 from google.protobuf.internal import containers as _containers from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper from google.protobuf import descriptor as _descriptor @@ -58,13 +55,6 @@ class CookieSameSiteSetting(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): CookieSameSiteSetting_UNSPECIFIED: _ClassVar[CookieSameSiteSetting] LAX_MODE: _ClassVar[CookieSameSiteSetting] NONE_MODE: _ClassVar[CookieSameSiteSetting] - -class ConnectedAccountUserVerifyMode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - CONNECTED_ACCOUNT_USER_VERIFY_MODE_UNSPECIFIED: _ClassVar[ConnectedAccountUserVerifyMode] - USER_VERIFY_MODE_NONE: _ClassVar[ConnectedAccountUserVerifyMode] - USER_VERIFY_MODE_B2B: _ClassVar[ConnectedAccountUserVerifyMode] - USER_VERIFY_MODE_SCALEKIT_PLATFORM: _ClassVar[ConnectedAccountUserVerifyMode] UNSPECIFIED: CustomDomainStatus PENDING: CustomDomainStatus ACTIVE: CustomDomainStatus @@ -85,10 +75,6 @@ SESSION: CookiePersistenceType CookieSameSiteSetting_UNSPECIFIED: CookieSameSiteSetting LAX_MODE: CookieSameSiteSetting NONE_MODE: CookieSameSiteSetting -CONNECTED_ACCOUNT_USER_VERIFY_MODE_UNSPECIFIED: ConnectedAccountUserVerifyMode -USER_VERIFY_MODE_NONE: ConnectedAccountUserVerifyMode -USER_VERIFY_MODE_B2B: ConnectedAccountUserVerifyMode -USER_VERIFY_MODE_SCALEKIT_PLATFORM: ConnectedAccountUserVerifyMode class CreateCustomDomainRequest(_message.Message): __slots__ = ("id", "custom_domain") @@ -283,14 +269,10 @@ class GetPortalCustomizationRequest(_message.Message): def __init__(self, id: _Optional[str] = ...) -> None: ... class PortalSettings(_message.Message): - __slots__ = ("custom_branding", "new_self_serve_sso_scim", "enable_conn_delete") + __slots__ = ("custom_branding",) CUSTOM_BRANDING_FIELD_NUMBER: _ClassVar[int] - NEW_SELF_SERVE_SSO_SCIM_FIELD_NUMBER: _ClassVar[int] - ENABLE_CONN_DELETE_FIELD_NUMBER: _ClassVar[int] custom_branding: bool - new_self_serve_sso_scim: bool - enable_conn_delete: bool - def __init__(self, custom_branding: bool = ..., new_self_serve_sso_scim: bool = ..., enable_conn_delete: bool = ...) -> None: ... + def __init__(self, custom_branding: bool = ...) -> None: ... class GetPortalCustomizationResponse(_message.Message): __slots__ = ("environmentId", "customization_settings", "settings") @@ -382,26 +364,6 @@ class EnvironmentFeature(_message.Message): enabled: bool def __init__(self, name: _Optional[str] = ..., enabled: bool = ...) -> None: ... -class GetHostScopedPublicFeatureFlagsResponse(_message.Message): - __slots__ = ("flags",) - FLAGS_FIELD_NUMBER: _ClassVar[int] - flags: _containers.RepeatedCompositeFieldContainer[PublicHostFeatureFlag] - def __init__(self, flags: _Optional[_Iterable[_Union[PublicHostFeatureFlag, _Mapping]]] = ...) -> None: ... - -class PublicHostFeatureFlag(_message.Message): - __slots__ = ("key", "value", "variant", "reason", "error") - KEY_FIELD_NUMBER: _ClassVar[int] - VALUE_FIELD_NUMBER: _ClassVar[int] - VARIANT_FIELD_NUMBER: _ClassVar[int] - REASON_FIELD_NUMBER: _ClassVar[int] - ERROR_FIELD_NUMBER: _ClassVar[int] - key: str - value: _struct_pb2.Value - variant: str - reason: str - error: str - def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., variant: _Optional[str] = ..., reason: _Optional[str] = ..., error: _Optional[str] = ...) -> None: ... - class GetEnvironmentSessionSettingsRequest(_message.Message): __slots__ = ("id",) ID_FIELD_NUMBER: _ClassVar[int] @@ -569,20 +531,18 @@ class GetCurrentSessionRequest(_message.Message): def __init__(self, id: _Optional[str] = ...) -> None: ... class GetCurrentSessionResponse(_message.Message): - __slots__ = ("session_expiry", "access_token_expiry", "organization_id", "subject", "email", "connected_account_id") + __slots__ = ("session_expiry", "access_token_expiry", "organization_id", "subject", "email") SESSION_EXPIRY_FIELD_NUMBER: _ClassVar[int] ACCESS_TOKEN_EXPIRY_FIELD_NUMBER: _ClassVar[int] ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] SUBJECT_FIELD_NUMBER: _ClassVar[int] EMAIL_FIELD_NUMBER: _ClassVar[int] - CONNECTED_ACCOUNT_ID_FIELD_NUMBER: _ClassVar[int] session_expiry: _timestamp_pb2.Timestamp access_token_expiry: _timestamp_pb2.Timestamp organization_id: str subject: str email: str - connected_account_id: str - def __init__(self, session_expiry: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., access_token_expiry: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., organization_id: _Optional[str] = ..., subject: _Optional[str] = ..., email: _Optional[str] = ..., connected_account_id: _Optional[str] = ...) -> None: ... + def __init__(self, session_expiry: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., access_token_expiry: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., organization_id: _Optional[str] = ..., subject: _Optional[str] = ..., email: _Optional[str] = ...) -> None: ... class ResourceMetadata(_message.Message): __slots__ = ("type", "identifiers") @@ -618,75 +578,3 @@ class ScalekitResourceResponse(_message.Message): RESOURCES_FIELD_NUMBER: _ClassVar[int] resources: _containers.MessageMap[str, _struct_pb2.Struct] def __init__(self, resources: _Optional[_Mapping[str, _struct_pb2.Struct]] = ...) -> None: ... - -class PortalBootstrapRequest(_message.Message): - __slots__ = () - def __init__(self) -> None: ... - -class PortalCustomizationBootstrap(_message.Message): - __slots__ = ("customization_settings", "settings") - CUSTOMIZATION_SETTINGS_FIELD_NUMBER: _ClassVar[int] - SETTINGS_FIELD_NUMBER: _ClassVar[int] - customization_settings: _struct_pb2.Struct - settings: PortalSettings - def __init__(self, customization_settings: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., settings: _Optional[_Union[PortalSettings, _Mapping]] = ...) -> None: ... - -class PortalBootstrapResponse(_message.Message): - __slots__ = ("session", "portal_customizations", "organization", "connections") - SESSION_FIELD_NUMBER: _ClassVar[int] - PORTAL_CUSTOMIZATIONS_FIELD_NUMBER: _ClassVar[int] - ORGANIZATION_FIELD_NUMBER: _ClassVar[int] - CONNECTIONS_FIELD_NUMBER: _ClassVar[int] - session: GetCurrentSessionResponse - portal_customizations: PortalCustomizationBootstrap - organization: _organizations_pb2.Organization - connections: _containers.RepeatedCompositeFieldContainer[_connections_pb2.ListConnection] - def __init__(self, session: _Optional[_Union[GetCurrentSessionResponse, _Mapping]] = ..., portal_customizations: _Optional[_Union[PortalCustomizationBootstrap, _Mapping]] = ..., organization: _Optional[_Union[_organizations_pb2.Organization, _Mapping]] = ..., connections: _Optional[_Iterable[_Union[_connections_pb2.ListConnection, _Mapping]]] = ...) -> None: ... - -class AgentActionsConfig(_message.Message): - __slots__ = ("user_verify_mode", "detailed_error_logging") - USER_VERIFY_MODE_FIELD_NUMBER: _ClassVar[int] - DETAILED_ERROR_LOGGING_FIELD_NUMBER: _ClassVar[int] - user_verify_mode: ConnectedAccountUserVerifyMode - detailed_error_logging: bool - def __init__(self, user_verify_mode: _Optional[_Union[ConnectedAccountUserVerifyMode, str]] = ..., detailed_error_logging: bool = ...) -> None: ... - -class CreateAgentActionsConfigRequest(_message.Message): - __slots__ = ("id", "agent_actions_config") - ID_FIELD_NUMBER: _ClassVar[int] - AGENT_ACTIONS_CONFIG_FIELD_NUMBER: _ClassVar[int] - id: str - agent_actions_config: AgentActionsConfig - def __init__(self, id: _Optional[str] = ..., agent_actions_config: _Optional[_Union[AgentActionsConfig, _Mapping]] = ...) -> None: ... - -class CreateAgentActionsConfigResponse(_message.Message): - __slots__ = ("agent_actions_config",) - AGENT_ACTIONS_CONFIG_FIELD_NUMBER: _ClassVar[int] - agent_actions_config: AgentActionsConfig - def __init__(self, agent_actions_config: _Optional[_Union[AgentActionsConfig, _Mapping]] = ...) -> None: ... - -class GetAgentActionsConfigRequest(_message.Message): - __slots__ = ("id",) - ID_FIELD_NUMBER: _ClassVar[int] - id: str - def __init__(self, id: _Optional[str] = ...) -> None: ... - -class GetAgentActionsConfigResponse(_message.Message): - __slots__ = ("agent_actions_config",) - AGENT_ACTIONS_CONFIG_FIELD_NUMBER: _ClassVar[int] - agent_actions_config: AgentActionsConfig - def __init__(self, agent_actions_config: _Optional[_Union[AgentActionsConfig, _Mapping]] = ...) -> None: ... - -class UpdateAgentActionsConfigRequest(_message.Message): - __slots__ = ("id", "agent_actions_config") - ID_FIELD_NUMBER: _ClassVar[int] - AGENT_ACTIONS_CONFIG_FIELD_NUMBER: _ClassVar[int] - id: str - agent_actions_config: AgentActionsConfig - def __init__(self, id: _Optional[str] = ..., agent_actions_config: _Optional[_Union[AgentActionsConfig, _Mapping]] = ...) -> None: ... - -class UpdateAgentActionsConfigResponse(_message.Message): - __slots__ = ("agent_actions_config",) - AGENT_ACTIONS_CONFIG_FIELD_NUMBER: _ClassVar[int] - agent_actions_config: AgentActionsConfig - def __init__(self, agent_actions_config: _Optional[_Union[AgentActionsConfig, _Mapping]] = ...) -> None: ... diff --git a/scalekit/v1/environments/environments_pb2_grpc.py b/scalekit/v1/environments/environments_pb2_grpc.py index acb9184..5119163 100644 --- a/scalekit/v1/environments/environments_pb2_grpc.py +++ b/scalekit/v1/environments/environments_pb2_grpc.py @@ -115,11 +115,6 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetFeaturesRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetFeaturesResponse.FromString, ) - self.GetHostScopedPublicFeatureFlags = channel.unary_unary( - '/scalekit.v1.environments.EnvironmentService/GetHostScopedPublicFeatureFlags', - request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetHostScopedPublicFeatureFlagsResponse.FromString, - ) self.CreateEnvironmentSessionSettings = channel.unary_unary( '/scalekit.v1.environments.EnvironmentService/CreateEnvironmentSessionSettings', request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.CreateEnvironmentSessionSettingsRequest.SerializeToString, @@ -150,21 +145,6 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateEnvironmentUserManagementRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateEnvironmentUserManagementResponse.FromString, ) - self.CreateAgentActionsConfig = channel.unary_unary( - '/scalekit.v1.environments.EnvironmentService/CreateAgentActionsConfig', - request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.CreateAgentActionsConfigRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.CreateAgentActionsConfigResponse.FromString, - ) - self.GetAgentActionsConfig = channel.unary_unary( - '/scalekit.v1.environments.EnvironmentService/GetAgentActionsConfig', - request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetAgentActionsConfigRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetAgentActionsConfigResponse.FromString, - ) - self.UpdateAgentActionsConfig = channel.unary_unary( - '/scalekit.v1.environments.EnvironmentService/UpdateAgentActionsConfig', - request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateAgentActionsConfigRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateAgentActionsConfigResponse.FromString, - ) self.GetContext = channel.unary_unary( '/scalekit.v1.environments.EnvironmentService/GetContext', request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetContextRequest.SerializeToString, @@ -185,11 +165,6 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.ScalekitResourceRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.ScalekitResourceResponse.FromString, ) - self.PortalBootstrap = channel.unary_unary( - '/scalekit.v1.environments.EnvironmentService/PortalBootstrap', - request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.PortalBootstrapRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.PortalBootstrapResponse.FromString, - ) class EnvironmentServiceServicer(object): @@ -315,15 +290,6 @@ def GetFeatures(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') - def GetHostScopedPublicFeatureFlags(self, request, context): - """Returns allowlisted public feature flags for the environment implied by the request - host (typically HTTP Host). No environment id in path, query, or headers; unauthenticated. - 404 when the host does not resolve to an environment. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - def CreateEnvironmentSessionSettings(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -360,24 +326,6 @@ def UpdateEnvironmentUserManagement(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') - def CreateAgentActionsConfig(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def GetAgentActionsConfig(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def UpdateAgentActionsConfig(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - def GetContext(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -402,12 +350,6 @@ def GetScalekitResources(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') - def PortalBootstrap(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - def add_EnvironmentServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -511,11 +453,6 @@ def add_EnvironmentServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetFeaturesRequest.FromString, response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetFeaturesResponse.SerializeToString, ), - 'GetHostScopedPublicFeatureFlags': grpc.unary_unary_rpc_method_handler( - servicer.GetHostScopedPublicFeatureFlags, - request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetHostScopedPublicFeatureFlagsResponse.SerializeToString, - ), 'CreateEnvironmentSessionSettings': grpc.unary_unary_rpc_method_handler( servicer.CreateEnvironmentSessionSettings, request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.CreateEnvironmentSessionSettingsRequest.FromString, @@ -546,21 +483,6 @@ def add_EnvironmentServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateEnvironmentUserManagementRequest.FromString, response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateEnvironmentUserManagementResponse.SerializeToString, ), - 'CreateAgentActionsConfig': grpc.unary_unary_rpc_method_handler( - servicer.CreateAgentActionsConfig, - request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.CreateAgentActionsConfigRequest.FromString, - response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.CreateAgentActionsConfigResponse.SerializeToString, - ), - 'GetAgentActionsConfig': grpc.unary_unary_rpc_method_handler( - servicer.GetAgentActionsConfig, - request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetAgentActionsConfigRequest.FromString, - response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetAgentActionsConfigResponse.SerializeToString, - ), - 'UpdateAgentActionsConfig': grpc.unary_unary_rpc_method_handler( - servicer.UpdateAgentActionsConfig, - request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateAgentActionsConfigRequest.FromString, - response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateAgentActionsConfigResponse.SerializeToString, - ), 'GetContext': grpc.unary_unary_rpc_method_handler( servicer.GetContext, request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetContextRequest.FromString, @@ -581,11 +503,6 @@ def add_EnvironmentServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.ScalekitResourceRequest.FromString, response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.ScalekitResourceResponse.SerializeToString, ), - 'PortalBootstrap': grpc.unary_unary_rpc_method_handler( - servicer.PortalBootstrap, - request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.PortalBootstrapRequest.FromString, - response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.PortalBootstrapResponse.SerializeToString, - ), } generic_handler = grpc.method_handlers_generic_handler( 'scalekit.v1.environments.EnvironmentService', rpc_method_handlers) @@ -936,23 +853,6 @@ def GetFeatures(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - @staticmethod - def GetHostScopedPublicFeatureFlags(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.environments.EnvironmentService/GetHostScopedPublicFeatureFlags', - google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, - scalekit_dot_v1_dot_environments_dot_environments__pb2.GetHostScopedPublicFeatureFlagsResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - @staticmethod def CreateEnvironmentSessionSettings(request, target, @@ -1055,57 +955,6 @@ def UpdateEnvironmentUserManagement(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - @staticmethod - def CreateAgentActionsConfig(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.environments.EnvironmentService/CreateAgentActionsConfig', - scalekit_dot_v1_dot_environments_dot_environments__pb2.CreateAgentActionsConfigRequest.SerializeToString, - scalekit_dot_v1_dot_environments_dot_environments__pb2.CreateAgentActionsConfigResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - @staticmethod - def GetAgentActionsConfig(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.environments.EnvironmentService/GetAgentActionsConfig', - scalekit_dot_v1_dot_environments_dot_environments__pb2.GetAgentActionsConfigRequest.SerializeToString, - scalekit_dot_v1_dot_environments_dot_environments__pb2.GetAgentActionsConfigResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - @staticmethod - def UpdateAgentActionsConfig(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.environments.EnvironmentService/UpdateAgentActionsConfig', - scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateAgentActionsConfigRequest.SerializeToString, - scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateAgentActionsConfigResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - @staticmethod def GetContext(request, target, @@ -1173,20 +1022,3 @@ def GetScalekitResources(request, scalekit_dot_v1_dot_environments_dot_environments__pb2.ScalekitResourceResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - @staticmethod - def PortalBootstrap(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.environments.EnvironmentService/PortalBootstrap', - scalekit_dot_v1_dot_environments_dot_environments__pb2.PortalBootstrapRequest.SerializeToString, - scalekit_dot_v1_dot_environments_dot_environments__pb2.PortalBootstrapResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/errdetails/errdetails_pb2.py b/scalekit/v1/errdetails/errdetails_pb2.py index cd5e444..30fbba1 100644 --- a/scalekit/v1/errdetails/errdetails_pb2.py +++ b/scalekit/v1/errdetails/errdetails_pb2.py @@ -12,13 +12,10 @@ _sym_db = _symbol_database.Default() -from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2 -from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 -from protoc_gen_openapiv2.options import annotations_pb2 as protoc__gen__openapiv2_dot_options_dot_annotations__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'scalekit/v1/errdetails/errdetails.proto\x12\x16scalekit.v1.errdetails\x1a\x1cgoogle/api/annotations.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\"\xfe\x05\n\tErrorInfo\x12\x1d\n\nerror_code\x18\x01 \x01(\tR\terrorCode\x12\x45\n\ndebug_info\x18\x02 \x01(\x0b\x32!.scalekit.v1.errdetails.DebugInfoH\x00R\tdebugInfo\x88\x01\x01\x12\x42\n\thelp_info\x18\x03 \x01(\x0b\x32 .scalekit.v1.errdetails.HelpInfoH\x01R\x08helpInfo\x88\x01\x01\x12g\n\x16localized_message_info\x18\x04 \x01(\x0b\x32,.scalekit.v1.errdetails.LocalizedMessageInfoH\x02R\x14localizedMessageInfo\x88\x01\x01\x12N\n\rresource_info\x18\x05 \x01(\x0b\x32$.scalekit.v1.errdetails.ResourceInfoH\x03R\x0cresourceInfo\x88\x01\x01\x12K\n\x0crequest_info\x18\x06 \x01(\x0b\x32#.scalekit.v1.errdetails.RequestInfoH\x04R\x0brequestInfo\x88\x01\x01\x12\x64\n\x15validation_error_info\x18\x08 \x01(\x0b\x32+.scalekit.v1.errdetails.ValidationErrorInfoH\x05R\x13validationErrorInfo\x88\x01\x01\x12R\n\x0ftool_error_info\x18\t \x01(\x0b\x32%.scalekit.v1.errdetails.ToolErrorInfoH\x06R\rtoolErrorInfo\x88\x01\x01\x42\r\n\x0b_debug_infoB\x0c\n\n_help_infoB\x19\n\x17_localized_message_infoB\x10\n\x0e_resource_infoB\x0f\n\r_request_infoB\x18\n\x16_validation_error_infoB\x12\n\x10_tool_error_info\"H\n\tDebugInfo\x12#\n\rstack_entries\x18\x01 \x03(\tR\x0cstackEntries\x12\x16\n\x06\x64\x65tail\x18\x02 \x01(\tR\x06\x64\x65tail\"\xe6\x01\n\x13ValidationErrorInfo\x12\x65\n\x10\x66ield_violations\x18\x01 \x03(\x0b\x32:.scalekit.v1.errdetails.ValidationErrorInfo.FieldViolationR\x0f\x66ieldViolations\x1ah\n\x0e\x46ieldViolation\x12\x14\n\x05\x66ield\x18\x01 \x01(\tR\x05\x66ield\x12 \n\x0b\x64\x65scription\x18\x02 \x01(\tR\x0b\x64\x65scription\x12\x1e\n\nconstraint\x18\x03 \x01(\tR\nconstraint\"O\n\x0bRequestInfo\x12\x1d\n\nrequest_id\x18\x01 \x01(\tR\trequestId\x12!\n\x0cserving_data\x18\x02 \x01(\tR\x0bservingData\"\xb8\x01\n\x0cResourceInfo\x12#\n\rresource_name\x18\x02 \x01(\tR\x0cresourceName\x12\x14\n\x05owner\x18\x03 \x01(\tR\x05owner\x12 \n\x0b\x64\x65scription\x18\x04 \x01(\tR\x0b\x64\x65scription\x12\x31\n\x14required_permissions\x18\x05 \x03(\tR\x13requiredPermissions\x12\x12\n\x04user\x18\x06 \x01(\tR\x04userJ\x04\x08\x01\x10\x02\"\x83\x01\n\x08HelpInfo\x12;\n\x05links\x18\x01 \x03(\x0b\x32%.scalekit.v1.errdetails.HelpInfo.LinkR\x05links\x1a:\n\x04Link\x12 \n\x0b\x64\x65scription\x18\x01 \x01(\tR\x0b\x64\x65scription\x12\x10\n\x03url\x18\x02 \x01(\tR\x03url\"H\n\x14LocalizedMessageInfo\x12\x16\n\x06locale\x18\x01 \x01(\tR\x06locale\x12\x18\n\x07message\x18\x02 \x01(\tR\x07message\"\x88\x01\n\rToolErrorInfo\x12!\n\x0c\x65xecution_id\x18\x01 \x01(\tR\x0b\x65xecutionId\x12,\n\x12tool_error_message\x18\x02 \x01(\tR\x10toolErrorMessage\x12&\n\x0ftool_error_code\x18\x03 \x01(\tR\rtoolErrorCode2\x96\x01\n\x05\x44ummy\x12\x8c\x01\n\x0c\x44ummyService\x12\x16.google.protobuf.Empty\x1a!.scalekit.v1.errdetails.ErrorInfo\"A\x92\x41\x30J.\n\x03\x32\x30\x30\x12\'\x12%\n#\x1a!.scalekit.v1.errdetails.ErrorInfo\x82\xd3\xe4\x93\x02\x08\x12\x06/dummyB6Z4github.com/scalekit-inc/scalekit/pkg/grpc/errdetailsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'scalekit/v1/errdetails/errdetails.proto\x12\x16scalekit.v1.errdetails\x1a\x1egoogle/protobuf/duration.proto\"\xfe\x05\n\tErrorInfo\x12\x1d\n\nerror_code\x18\x01 \x01(\tR\terrorCode\x12\x45\n\ndebug_info\x18\x02 \x01(\x0b\x32!.scalekit.v1.errdetails.DebugInfoH\x00R\tdebugInfo\x88\x01\x01\x12\x42\n\thelp_info\x18\x03 \x01(\x0b\x32 .scalekit.v1.errdetails.HelpInfoH\x01R\x08helpInfo\x88\x01\x01\x12g\n\x16localized_message_info\x18\x04 \x01(\x0b\x32,.scalekit.v1.errdetails.LocalizedMessageInfoH\x02R\x14localizedMessageInfo\x88\x01\x01\x12N\n\rresource_info\x18\x05 \x01(\x0b\x32$.scalekit.v1.errdetails.ResourceInfoH\x03R\x0cresourceInfo\x88\x01\x01\x12K\n\x0crequest_info\x18\x06 \x01(\x0b\x32#.scalekit.v1.errdetails.RequestInfoH\x04R\x0brequestInfo\x88\x01\x01\x12\x64\n\x15validation_error_info\x18\x08 \x01(\x0b\x32+.scalekit.v1.errdetails.ValidationErrorInfoH\x05R\x13validationErrorInfo\x88\x01\x01\x12R\n\x0ftool_error_info\x18\t \x01(\x0b\x32%.scalekit.v1.errdetails.ToolErrorInfoH\x06R\rtoolErrorInfo\x88\x01\x01\x42\r\n\x0b_debug_infoB\x0c\n\n_help_infoB\x19\n\x17_localized_message_infoB\x10\n\x0e_resource_infoB\x0f\n\r_request_infoB\x18\n\x16_validation_error_infoB\x12\n\x10_tool_error_info\"H\n\tDebugInfo\x12#\n\rstack_entries\x18\x01 \x03(\tR\x0cstackEntries\x12\x16\n\x06\x64\x65tail\x18\x02 \x01(\tR\x06\x64\x65tail\"\xe6\x01\n\x13ValidationErrorInfo\x12\x65\n\x10\x66ield_violations\x18\x01 \x03(\x0b\x32:.scalekit.v1.errdetails.ValidationErrorInfo.FieldViolationR\x0f\x66ieldViolations\x1ah\n\x0e\x46ieldViolation\x12\x14\n\x05\x66ield\x18\x01 \x01(\tR\x05\x66ield\x12 \n\x0b\x64\x65scription\x18\x02 \x01(\tR\x0b\x64\x65scription\x12\x1e\n\nconstraint\x18\x03 \x01(\tR\nconstraint\"O\n\x0bRequestInfo\x12\x1d\n\nrequest_id\x18\x01 \x01(\tR\trequestId\x12!\n\x0cserving_data\x18\x02 \x01(\tR\x0bservingData\"\xb8\x01\n\x0cResourceInfo\x12#\n\rresource_name\x18\x02 \x01(\tR\x0cresourceName\x12\x14\n\x05owner\x18\x03 \x01(\tR\x05owner\x12 \n\x0b\x64\x65scription\x18\x04 \x01(\tR\x0b\x64\x65scription\x12\x31\n\x14required_permissions\x18\x05 \x03(\tR\x13requiredPermissions\x12\x12\n\x04user\x18\x06 \x01(\tR\x04userJ\x04\x08\x01\x10\x02\"\x83\x01\n\x08HelpInfo\x12;\n\x05links\x18\x01 \x03(\x0b\x32%.scalekit.v1.errdetails.HelpInfo.LinkR\x05links\x1a:\n\x04Link\x12 \n\x0b\x64\x65scription\x18\x01 \x01(\tR\x0b\x64\x65scription\x12\x10\n\x03url\x18\x02 \x01(\tR\x03url\"H\n\x14LocalizedMessageInfo\x12\x16\n\x06locale\x18\x01 \x01(\tR\x06locale\x12\x18\n\x07message\x18\x02 \x01(\tR\x07message\"\x88\x01\n\rToolErrorInfo\x12!\n\x0c\x65xecution_id\x18\x01 \x01(\tR\x0b\x65xecutionId\x12,\n\x12tool_error_message\x18\x02 \x01(\tR\x10toolErrorMessage\x12&\n\x0ftool_error_code\x18\x03 \x01(\tR\rtoolErrorCodeB6Z4github.com/scalekit-inc/scalekit/pkg/grpc/errdetailsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -26,28 +23,24 @@ if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'Z4github.com/scalekit-inc/scalekit/pkg/grpc/errdetails' - _globals['_DUMMY'].methods_by_name['DummyService']._loaded_options = None - _globals['_DUMMY'].methods_by_name['DummyService']._serialized_options = b'\222A0J.\n\003200\022\'\022%\n#\032!.scalekit.v1.errdetails.ErrorInfo\202\323\344\223\002\010\022\006/dummy' - _globals['_ERRORINFO']._serialized_start=207 - _globals['_ERRORINFO']._serialized_end=973 - _globals['_DEBUGINFO']._serialized_start=975 - _globals['_DEBUGINFO']._serialized_end=1047 - _globals['_VALIDATIONERRORINFO']._serialized_start=1050 - _globals['_VALIDATIONERRORINFO']._serialized_end=1280 - _globals['_VALIDATIONERRORINFO_FIELDVIOLATION']._serialized_start=1176 - _globals['_VALIDATIONERRORINFO_FIELDVIOLATION']._serialized_end=1280 - _globals['_REQUESTINFO']._serialized_start=1282 - _globals['_REQUESTINFO']._serialized_end=1361 - _globals['_RESOURCEINFO']._serialized_start=1364 - _globals['_RESOURCEINFO']._serialized_end=1548 - _globals['_HELPINFO']._serialized_start=1551 - _globals['_HELPINFO']._serialized_end=1682 - _globals['_HELPINFO_LINK']._serialized_start=1624 - _globals['_HELPINFO_LINK']._serialized_end=1682 - _globals['_LOCALIZEDMESSAGEINFO']._serialized_start=1684 - _globals['_LOCALIZEDMESSAGEINFO']._serialized_end=1756 - _globals['_TOOLERRORINFO']._serialized_start=1759 - _globals['_TOOLERRORINFO']._serialized_end=1895 - _globals['_DUMMY']._serialized_start=1898 - _globals['_DUMMY']._serialized_end=2048 + _globals['_ERRORINFO']._serialized_start=100 + _globals['_ERRORINFO']._serialized_end=866 + _globals['_DEBUGINFO']._serialized_start=868 + _globals['_DEBUGINFO']._serialized_end=940 + _globals['_VALIDATIONERRORINFO']._serialized_start=943 + _globals['_VALIDATIONERRORINFO']._serialized_end=1173 + _globals['_VALIDATIONERRORINFO_FIELDVIOLATION']._serialized_start=1069 + _globals['_VALIDATIONERRORINFO_FIELDVIOLATION']._serialized_end=1173 + _globals['_REQUESTINFO']._serialized_start=1175 + _globals['_REQUESTINFO']._serialized_end=1254 + _globals['_RESOURCEINFO']._serialized_start=1257 + _globals['_RESOURCEINFO']._serialized_end=1441 + _globals['_HELPINFO']._serialized_start=1444 + _globals['_HELPINFO']._serialized_end=1575 + _globals['_HELPINFO_LINK']._serialized_start=1517 + _globals['_HELPINFO_LINK']._serialized_end=1575 + _globals['_LOCALIZEDMESSAGEINFO']._serialized_start=1577 + _globals['_LOCALIZEDMESSAGEINFO']._serialized_end=1649 + _globals['_TOOLERRORINFO']._serialized_start=1652 + _globals['_TOOLERRORINFO']._serialized_end=1788 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/errdetails/errdetails_pb2.pyi b/scalekit/v1/errdetails/errdetails_pb2.pyi index 8848396..547b7ed 100644 --- a/scalekit/v1/errdetails/errdetails_pb2.pyi +++ b/scalekit/v1/errdetails/errdetails_pb2.pyi @@ -1,7 +1,4 @@ -from google.api import annotations_pb2 as _annotations_pb2 from google.protobuf import duration_pb2 as _duration_pb2 -from google.protobuf import empty_pb2 as _empty_pb2 -from protoc_gen_openapiv2.options import annotations_pb2 as _annotations_pb2_1 from google.protobuf.internal import containers as _containers from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message diff --git a/scalekit/v1/errdetails/errdetails_pb2_grpc.py b/scalekit/v1/errdetails/errdetails_pb2_grpc.py index 6ffc6eb..2daafff 100644 --- a/scalekit/v1/errdetails/errdetails_pb2_grpc.py +++ b/scalekit/v1/errdetails/errdetails_pb2_grpc.py @@ -2,66 +2,3 @@ """Client and server classes corresponding to protobuf-defined services.""" import grpc -from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 -from scalekit.v1.errdetails import errdetails_pb2 as scalekit_dot_v1_dot_errdetails_dot_errdetails__pb2 - - -class DummyStub(object): - """Missing associated documentation comment in .proto file.""" - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.DummyService = channel.unary_unary( - '/scalekit.v1.errdetails.Dummy/DummyService', - request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_errdetails_dot_errdetails__pb2.ErrorInfo.FromString, - ) - - -class DummyServicer(object): - """Missing associated documentation comment in .proto file.""" - - def DummyService(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - -def add_DummyServicer_to_server(servicer, server): - rpc_method_handlers = { - 'DummyService': grpc.unary_unary_rpc_method_handler( - servicer.DummyService, - request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - response_serializer=scalekit_dot_v1_dot_errdetails_dot_errdetails__pb2.ErrorInfo.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - 'scalekit.v1.errdetails.Dummy', rpc_method_handlers) - server.add_generic_rpc_handlers((generic_handler,)) - - - # This class is part of an EXPERIMENTAL API. -class Dummy(object): - """Missing associated documentation comment in .proto file.""" - - @staticmethod - def DummyService(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.errdetails.Dummy/DummyService', - google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, - scalekit_dot_v1_dot_errdetails_dot_errdetails__pb2.ErrorInfo.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/keys/__init__.py b/scalekit/v1/keys/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/scalekit/v1/keys/keys_pb2.py b/scalekit/v1/keys/keys_pb2.py deleted file mode 100644 index ecdf916..0000000 --- a/scalekit/v1/keys/keys_pb2.py +++ /dev/null @@ -1,111 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: scalekit/v1/keys/keys.proto -# Protobuf Python Version: 5.26.1 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 -from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 -from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2 -from google.api import visibility_pb2 as google_dot_api_dot_visibility__pb2 -from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 -from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -from protoc_gen_openapiv2.options import annotations_pb2 as protoc__gen__openapiv2_dot_options_dot_annotations__pb2 -from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bscalekit/v1/keys/keys.proto\x12\x10scalekit.v1.keys\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\xb5\x01\n\x10\x43reateDEKRequest\x12<\n\x08key_type\x18\x01 \x01(\x0e\x32\x1c.scalekit.v1.keys.DEKKeyTypeH\x00R\x07keyType\x88\x01\x01\x12\x1f\n\x08provider\x18\x02 \x01(\tH\x01R\x08provider\x88\x01\x01\x12\x1c\n\x07key_ref\x18\x03 \x01(\tH\x02R\x06keyRef\x88\x01\x01\x42\x0b\n\t_key_typeB\x0b\n\t_providerB\n\n\x08_key_ref\"G\n\x11\x43reateDEKResponse\x12\x32\n\x03\x64\x65k\x18\x01 \x01(\x0b\x32 .scalekit.v1.keys.EnvironmentKeyR\x03\x64\x65k\"\x12\n\x10RotateDEKRequest\"G\n\x11RotateDEKResponse\x12\x32\n\x03\x64\x65k\x18\x01 \x01(\x0b\x32 .scalekit.v1.keys.EnvironmentKeyR\x03\x64\x65k\"u\n\x0fListDEKsRequest\x12\x1b\n\x06status\x18\x01 \x01(\tH\x00R\x06status\x88\x01\x01\x12\x1b\n\tpage_size\x18\x02 \x01(\rR\x08pageSize\x12\x1d\n\npage_token\x18\x03 \x01(\tR\tpageTokenB\t\n\x07_status\"\x8f\x01\n\x10ListDEKsResponse\x12\x34\n\x04\x64\x65ks\x18\x01 \x03(\x0b\x32 .scalekit.v1.keys.EnvironmentKeyR\x04\x64\x65ks\x12&\n\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x03 \x01(\rR\ttotalSize\"<\n\x10\x44\x65leteDEKRequest\x12(\n\x0b\x64\x65k_version\x18\x01 \x01(\x05\x42\x07\xbaH\x04\x1a\x02 \x00R\ndekVersion\"\x18\n\x16RotateMasterKeyRequest\"\\\n\x17RotateMasterKeyResponse\x12\x41\n\x0enew_master_key\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.keys.MasterKeyR\x0cnewMasterKey\"\xbb\x02\n\x0e\x45nvironmentKey\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12%\n\x0e\x65nvironment_id\x18\x02 \x01(\tR\renvironmentId\x12\x1f\n\x0b\x64\x65k_version\x18\x03 \x01(\x05R\ndekVersion\x12%\n\x0emaster_version\x18\x04 \x01(\x05R\rmasterVersion\x12\x1c\n\talgorithm\x18\x05 \x01(\tR\talgorithm\x12\x16\n\x06status\x18\x06 \x01(\tR\x06status\x12\x39\n\ncreated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nrotated_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\trotatedAt\"\xf8\x01\n\tMasterKey\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1a\n\x08provider\x18\x02 \x01(\tR\x08provider\x12\x17\n\x07key_ref\x18\x03 \x01(\tR\x06keyRef\x12\x18\n\x07version\x18\x04 \x01(\x05R\x07version\x12\x16\n\x06status\x18\x05 \x01(\tR\x06status\x12\x39\n\ncreated_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nrotated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\trotatedAt\"\xa0\x01\n\x16\x43reateMasterKeyRequest\x12\x39\n\x08provider\x18\x01 \x01(\tB\x1d\xbaH\x1ar\x18R\x03GCPR\x03\x41WSR\x05\x41ZURER\x05LOCALR\x08provider\x12 \n\x07key_ref\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06keyRef\x12\x1d\n\x07version\x18\x03 \x01(\x05H\x00R\x07version\x88\x01\x01\x42\n\n\x08_version\"U\n\x17\x43reateMasterKeyResponse\x12:\n\nmaster_key\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.keys.MasterKeyR\tmasterKey\"?\n\x13SetActiveDEKRequest\x12(\n\x0b\x64\x65k_version\x18\x01 \x01(\x05\x42\x07\xbaH\x04\x1a\x02 \x00R\ndekVersion\"J\n\x14SetActiveDEKResponse\x12\x32\n\x03\x64\x65k\x18\x01 \x01(\x0b\x32 .scalekit.v1.keys.EnvironmentKeyR\x03\x64\x65k\">\n\x19SetActiveMasterKeyRequest\x12!\n\x07version\x18\x01 \x01(\x05\x42\x07\xbaH\x04\x1a\x02 \x00R\x07version\"X\n\x1aSetActiveMasterKeyResponse\x12:\n\nmaster_key\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.keys.MasterKeyR\tmasterKey\"=\n\x11\x44\x65stroyDEKRequest\x12(\n\x0b\x64\x65k_version\x18\x01 \x01(\x05\x42\x07\xbaH\x04\x1a\x02 \x00R\ndekVersion\"<\n\x17\x44\x65stroyMasterKeyRequest\x12!\n\x07version\x18\x01 \x01(\x05\x42\x07\xbaH\x04\x1a\x02 \x00R\x07version*c\n\nDEKKeyType\x12\x1c\n\x18\x44\x45K_KEY_TYPE_UNSPECIFIED\x10\x00\x12\x13\n\x0f\x45NVIRONMENT_KEY\x10\x01\x12\x08\n\x04\x42YOK\x10\x02\x12\x18\n\x14SCALEKIT_MANAGED_KEY\x10\x03\x32\xd1\x1c\n\x14KeyManagementService\x12\xed\x02\n\tCreateDEK\x12\".scalekit.v1.keys.CreateDEKRequest\x1a#.scalekit.v1.keys.CreateDEKResponse\"\x96\x02\x92\x41\xf0\x01\n\x0eKey Management\x12\x10\x43reate a new DEK\x1a\xcb\x01\x43reates a new Data Encryption Key (DEK) for the current environment. If a DEK already exists, this creates a new version. The DEK is automatically wrapped with the current master key and stored securely.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x16\"\x11/api/v1/keys/deks:\x01*\x12\xc2\x02\n\tRotateDEK\x12\".scalekit.v1.keys.RotateDEKRequest\x1a#.scalekit.v1.keys.RotateDEKResponse\"\xeb\x01\x92\x41\xbe\x01\n\x0eKey Management\x12\nRotate DEK\x1a\x9f\x01\x43reates a new DEK version for the environment. Re-encrypts existing data (oidc_client_secrets, connection client_secrets) and deprecates previous DEK versions.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1d\"\x18/api/v1/keys/deks:rotate:\x01*\x12\xd2\x02\n\x08ListDEKs\x12!.scalekit.v1.keys.ListDEKsRequest\x1a\".scalekit.v1.keys.ListDEKsResponse\"\xfe\x01\x92\x41\xdb\x01\n\x0eKey Management\x12\tList DEKs\x1a\xbd\x01Lists Data Encryption Keys (DEKs) for the current environment with pagination. Supports optional status filter (ACTIVE, DEPRECATED). Use page_token from the response to fetch the next page.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x13\x12\x11/api/v1/keys/deks\x12\x9e\x02\n\tDeleteDEK\x12\".scalekit.v1.keys.DeleteDEKRequest\x1a\x16.google.protobuf.Empty\"\xd4\x01\x92\x41\xa3\x01\n\x0eKey Management\x12\nDelete DEK\x1a\x84\x01\x44\x65precates a specific DEK version. Deprecated DEKs can still decrypt existing data but cannot be used for new encryption operations.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02!*\x1f/api/v1/keys/deks/{dek_version}\x12\xe4\x02\n\x0fRotateMasterKey\x12(.scalekit.v1.keys.RotateMasterKeyRequest\x1a).scalekit.v1.keys.RotateMasterKeyResponse\"\xfb\x01\x92\x41\xbd\x01\n\x0eKey Management\x12\x11Rotate Master Key\x1a\x97\x01\x43reates a new master key version, promotes it to primary, and rewraps all DEKs with the new master key. This operation supports zero-downtime rotation.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1f\"\x1a/api/v1/keys/master:rotate:\x01*\x12\x9f\x03\n\x0f\x43reateMasterKey\x12(.scalekit.v1.keys.CreateMasterKeyRequest\x1a).scalekit.v1.keys.CreateMasterKeyResponse\"\xb6\x02\x92\x41\xff\x01\n\x0eKey Management\x12\x11\x43reate Master Key\x1a\xd9\x01\x43reates a new master key version with the specified provider and key reference. The new key is created in CREATED status and is not used for encryption until it is explicitly promoted to ACTIVE via SetActiveMasterKey.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x18\"\x13/api/v1/keys/master:\x01*\x12\xd7\x02\n\x0cSetActiveDEK\x12%.scalekit.v1.keys.SetActiveDEKRequest\x1a&.scalekit.v1.keys.SetActiveDEKResponse\"\xf7\x01\x92\x41\xb9\x01\n\x0eKey Management\x12\x0eSet Active DEK\x1a\x96\x01Sets a specific DEK version as active for the environment and deprecates other versions. This allows switching back to an older DEK version if needed.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02.\")/api/v1/keys/deks/{dek_version}:setactive:\x01*\x12\x80\x03\n\x12SetActiveMasterKey\x12+.scalekit.v1.keys.SetActiveMasterKeyRequest\x1a,.scalekit.v1.keys.SetActiveMasterKeyResponse\"\x8e\x02\x92\x41\xc3\x01\n\x0eKey Management\x12\x15Set Active Master Key\x1a\x99\x01Sets a specific master key version as active and deprecates other versions. This promotes the specified version to primary for new encryption operations.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02,\"\'/api/v1/keys/master/{version}:setactive:\x01*\x12\xd8\x02\n\nDestroyDEK\x12#.scalekit.v1.keys.DestroyDEKRequest\x1a\x16.google.protobuf.Empty\"\x8c\x02\x92\x41\xd3\x01\n\x0eKey Management\x12\x0b\x44\x65stroy DEK\x1a\xb3\x01Permanently deletes a DEK version from the database. WARNING: This operation is irreversible. Any data encrypted with this DEK will become unrecoverable. Use with extreme caution.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02)*\'/api/v1/keys/deks/{dek_version}:destroy\x12\x84\x03\n\x10\x44\x65stroyMasterKey\x12).scalekit.v1.keys.DestroyMasterKeyRequest\x1a\x16.google.protobuf.Empty\"\xac\x02\x92\x41\xe6\x01\n\x0eKey Management\x12\x12\x44\x65stroy Master Key\x1a\xbf\x01Permanently deletes a master key version from the database. WARNING: This operation is irreversible. Any DEKs wrapped with this master key will become unrecoverable. Use with extreme caution.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\'*%/api/v1/keys/master/{version}:destroy\x1a\x46\x92\x41\x43\n\x0eKey Management\x12\x31\x45ncryption key management for envelope encryptionB0Z.github.com/scalekit-inc/scalekit/pkg/grpc/keysb\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'scalekit.v1.keys.keys_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'Z.github.com/scalekit-inc/scalekit/pkg/grpc/keys' - _globals['_DELETEDEKREQUEST'].fields_by_name['dek_version']._loaded_options = None - _globals['_DELETEDEKREQUEST'].fields_by_name['dek_version']._serialized_options = b'\272H\004\032\002 \000' - _globals['_CREATEMASTERKEYREQUEST'].fields_by_name['provider']._loaded_options = None - _globals['_CREATEMASTERKEYREQUEST'].fields_by_name['provider']._serialized_options = b'\272H\032r\030R\003GCPR\003AWSR\005AZURER\005LOCAL' - _globals['_CREATEMASTERKEYREQUEST'].fields_by_name['key_ref']._loaded_options = None - _globals['_CREATEMASTERKEYREQUEST'].fields_by_name['key_ref']._serialized_options = b'\272H\004r\002\020\001' - _globals['_SETACTIVEDEKREQUEST'].fields_by_name['dek_version']._loaded_options = None - _globals['_SETACTIVEDEKREQUEST'].fields_by_name['dek_version']._serialized_options = b'\272H\004\032\002 \000' - _globals['_SETACTIVEMASTERKEYREQUEST'].fields_by_name['version']._loaded_options = None - _globals['_SETACTIVEMASTERKEYREQUEST'].fields_by_name['version']._serialized_options = b'\272H\004\032\002 \000' - _globals['_DESTROYDEKREQUEST'].fields_by_name['dek_version']._loaded_options = None - _globals['_DESTROYDEKREQUEST'].fields_by_name['dek_version']._serialized_options = b'\272H\004\032\002 \000' - _globals['_DESTROYMASTERKEYREQUEST'].fields_by_name['version']._loaded_options = None - _globals['_DESTROYMASTERKEYREQUEST'].fields_by_name['version']._serialized_options = b'\272H\004\032\002 \000' - _globals['_KEYMANAGEMENTSERVICE']._loaded_options = None - _globals['_KEYMANAGEMENTSERVICE']._serialized_options = b'\222AC\n\016Key Management\0221Encryption key management for envelope encryption' - _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['CreateDEK']._loaded_options = None - _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['CreateDEK']._serialized_options = b'\222A\360\001\n\016Key Management\022\020Create a new DEK\032\313\001Creates a new Data Encryption Key (DEK) for the current environment. If a DEK already exists, this creates a new version. The DEK is automatically wrapped with the current master key and stored securely.\202\265\030\002\030D\202\323\344\223\002\026\"\021/api/v1/keys/deks:\001*' - _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['RotateDEK']._loaded_options = None - _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['RotateDEK']._serialized_options = b'\222A\276\001\n\016Key Management\022\nRotate DEK\032\237\001Creates a new DEK version for the environment. Re-encrypts existing data (oidc_client_secrets, connection client_secrets) and deprecates previous DEK versions.\202\265\030\002\030D\202\323\344\223\002\035\"\030/api/v1/keys/deks:rotate:\001*' - _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['ListDEKs']._loaded_options = None - _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['ListDEKs']._serialized_options = b'\222A\333\001\n\016Key Management\022\tList DEKs\032\275\001Lists Data Encryption Keys (DEKs) for the current environment with pagination. Supports optional status filter (ACTIVE, DEPRECATED). Use page_token from the response to fetch the next page.\202\265\030\002\030D\202\323\344\223\002\023\022\021/api/v1/keys/deks' - _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['DeleteDEK']._loaded_options = None - _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['DeleteDEK']._serialized_options = b'\222A\243\001\n\016Key Management\022\nDelete DEK\032\204\001Deprecates a specific DEK version. Deprecated DEKs can still decrypt existing data but cannot be used for new encryption operations.\202\265\030\002\030D\202\323\344\223\002!*\037/api/v1/keys/deks/{dek_version}' - _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['RotateMasterKey']._loaded_options = None - _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['RotateMasterKey']._serialized_options = b'\222A\275\001\n\016Key Management\022\021Rotate Master Key\032\227\001Creates a new master key version, promotes it to primary, and rewraps all DEKs with the new master key. This operation supports zero-downtime rotation.\202\265\030\002\030\004\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\037\"\032/api/v1/keys/master:rotate:\001*' - _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['CreateMasterKey']._loaded_options = None - _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['CreateMasterKey']._serialized_options = b'\222A\377\001\n\016Key Management\022\021Create Master Key\032\331\001Creates a new master key version with the specified provider and key reference. The new key is created in CREATED status and is not used for encryption until it is explicitly promoted to ACTIVE via SetActiveMasterKey.\202\265\030\002\030\004\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\030\"\023/api/v1/keys/master:\001*' - _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['SetActiveDEK']._loaded_options = None - _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['SetActiveDEK']._serialized_options = b'\222A\271\001\n\016Key Management\022\016Set Active DEK\032\226\001Sets a specific DEK version as active for the environment and deprecates other versions. This allows switching back to an older DEK version if needed.\202\265\030\002\030D\202\323\344\223\002.\")/api/v1/keys/deks/{dek_version}:setactive:\001*' - _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['SetActiveMasterKey']._loaded_options = None - _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['SetActiveMasterKey']._serialized_options = b'\222A\303\001\n\016Key Management\022\025Set Active Master Key\032\231\001Sets a specific master key version as active and deprecates other versions. This promotes the specified version to primary for new encryption operations.\202\265\030\002\030\004\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002,\"\'/api/v1/keys/master/{version}:setactive:\001*' - _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['DestroyDEK']._loaded_options = None - _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['DestroyDEK']._serialized_options = b'\222A\323\001\n\016Key Management\022\013Destroy DEK\032\263\001Permanently deletes a DEK version from the database. WARNING: This operation is irreversible. Any data encrypted with this DEK will become unrecoverable. Use with extreme caution.\202\265\030\002\030D\202\323\344\223\002)*\'/api/v1/keys/deks/{dek_version}:destroy' - _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['DestroyMasterKey']._loaded_options = None - _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['DestroyMasterKey']._serialized_options = b'\222A\346\001\n\016Key Management\022\022Destroy Master Key\032\277\001Permanently deletes a master key version from the database. WARNING: This operation is irreversible. Any DEKs wrapped with this master key will become unrecoverable. Use with extreme caution.\202\265\030\002\030\004\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\'*%/api/v1/keys/master/{version}:destroy' - _globals['_DEKKEYTYPE']._serialized_start=2351 - _globals['_DEKKEYTYPE']._serialized_end=2450 - _globals['_CREATEDEKREQUEST']._serialized_start=316 - _globals['_CREATEDEKREQUEST']._serialized_end=497 - _globals['_CREATEDEKRESPONSE']._serialized_start=499 - _globals['_CREATEDEKRESPONSE']._serialized_end=570 - _globals['_ROTATEDEKREQUEST']._serialized_start=572 - _globals['_ROTATEDEKREQUEST']._serialized_end=590 - _globals['_ROTATEDEKRESPONSE']._serialized_start=592 - _globals['_ROTATEDEKRESPONSE']._serialized_end=663 - _globals['_LISTDEKSREQUEST']._serialized_start=665 - _globals['_LISTDEKSREQUEST']._serialized_end=782 - _globals['_LISTDEKSRESPONSE']._serialized_start=785 - _globals['_LISTDEKSRESPONSE']._serialized_end=928 - _globals['_DELETEDEKREQUEST']._serialized_start=930 - _globals['_DELETEDEKREQUEST']._serialized_end=990 - _globals['_ROTATEMASTERKEYREQUEST']._serialized_start=992 - _globals['_ROTATEMASTERKEYREQUEST']._serialized_end=1016 - _globals['_ROTATEMASTERKEYRESPONSE']._serialized_start=1018 - _globals['_ROTATEMASTERKEYRESPONSE']._serialized_end=1110 - _globals['_ENVIRONMENTKEY']._serialized_start=1113 - _globals['_ENVIRONMENTKEY']._serialized_end=1428 - _globals['_MASTERKEY']._serialized_start=1431 - _globals['_MASTERKEY']._serialized_end=1679 - _globals['_CREATEMASTERKEYREQUEST']._serialized_start=1682 - _globals['_CREATEMASTERKEYREQUEST']._serialized_end=1842 - _globals['_CREATEMASTERKEYRESPONSE']._serialized_start=1844 - _globals['_CREATEMASTERKEYRESPONSE']._serialized_end=1929 - _globals['_SETACTIVEDEKREQUEST']._serialized_start=1931 - _globals['_SETACTIVEDEKREQUEST']._serialized_end=1994 - _globals['_SETACTIVEDEKRESPONSE']._serialized_start=1996 - _globals['_SETACTIVEDEKRESPONSE']._serialized_end=2070 - _globals['_SETACTIVEMASTERKEYREQUEST']._serialized_start=2072 - _globals['_SETACTIVEMASTERKEYREQUEST']._serialized_end=2134 - _globals['_SETACTIVEMASTERKEYRESPONSE']._serialized_start=2136 - _globals['_SETACTIVEMASTERKEYRESPONSE']._serialized_end=2224 - _globals['_DESTROYDEKREQUEST']._serialized_start=2226 - _globals['_DESTROYDEKREQUEST']._serialized_end=2287 - _globals['_DESTROYMASTERKEYREQUEST']._serialized_start=2289 - _globals['_DESTROYMASTERKEYREQUEST']._serialized_end=2349 - _globals['_KEYMANAGEMENTSERVICE']._serialized_start=2453 - _globals['_KEYMANAGEMENTSERVICE']._serialized_end=6118 -# @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/keys/keys_pb2.pyi b/scalekit/v1/keys/keys_pb2.pyi deleted file mode 100644 index 18b70e8..0000000 --- a/scalekit/v1/keys/keys_pb2.pyi +++ /dev/null @@ -1,178 +0,0 @@ -from buf.validate import validate_pb2 as _validate_pb2 -from google.api import annotations_pb2 as _annotations_pb2 -from google.api import field_behavior_pb2 as _field_behavior_pb2 -from google.api import visibility_pb2 as _visibility_pb2 -from google.protobuf import empty_pb2 as _empty_pb2 -from google.protobuf import timestamp_pb2 as _timestamp_pb2 -from protoc_gen_openapiv2.options import annotations_pb2 as _annotations_pb2_1 -from scalekit.v1.options import options_pb2 as _options_pb2 -from google.protobuf.internal import containers as _containers -from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union - -DESCRIPTOR: _descriptor.FileDescriptor - -class DEKKeyType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - DEK_KEY_TYPE_UNSPECIFIED: _ClassVar[DEKKeyType] - ENVIRONMENT_KEY: _ClassVar[DEKKeyType] - BYOK: _ClassVar[DEKKeyType] - SCALEKIT_MANAGED_KEY: _ClassVar[DEKKeyType] -DEK_KEY_TYPE_UNSPECIFIED: DEKKeyType -ENVIRONMENT_KEY: DEKKeyType -BYOK: DEKKeyType -SCALEKIT_MANAGED_KEY: DEKKeyType - -class CreateDEKRequest(_message.Message): - __slots__ = ("key_type", "provider", "key_ref") - KEY_TYPE_FIELD_NUMBER: _ClassVar[int] - PROVIDER_FIELD_NUMBER: _ClassVar[int] - KEY_REF_FIELD_NUMBER: _ClassVar[int] - key_type: DEKKeyType - provider: str - key_ref: str - def __init__(self, key_type: _Optional[_Union[DEKKeyType, str]] = ..., provider: _Optional[str] = ..., key_ref: _Optional[str] = ...) -> None: ... - -class CreateDEKResponse(_message.Message): - __slots__ = ("dek",) - DEK_FIELD_NUMBER: _ClassVar[int] - dek: EnvironmentKey - def __init__(self, dek: _Optional[_Union[EnvironmentKey, _Mapping]] = ...) -> None: ... - -class RotateDEKRequest(_message.Message): - __slots__ = () - def __init__(self) -> None: ... - -class RotateDEKResponse(_message.Message): - __slots__ = ("dek",) - DEK_FIELD_NUMBER: _ClassVar[int] - dek: EnvironmentKey - def __init__(self, dek: _Optional[_Union[EnvironmentKey, _Mapping]] = ...) -> None: ... - -class ListDEKsRequest(_message.Message): - __slots__ = ("status", "page_size", "page_token") - STATUS_FIELD_NUMBER: _ClassVar[int] - PAGE_SIZE_FIELD_NUMBER: _ClassVar[int] - PAGE_TOKEN_FIELD_NUMBER: _ClassVar[int] - status: str - page_size: int - page_token: str - def __init__(self, status: _Optional[str] = ..., page_size: _Optional[int] = ..., page_token: _Optional[str] = ...) -> None: ... - -class ListDEKsResponse(_message.Message): - __slots__ = ("deks", "next_page_token", "total_size") - DEKS_FIELD_NUMBER: _ClassVar[int] - NEXT_PAGE_TOKEN_FIELD_NUMBER: _ClassVar[int] - TOTAL_SIZE_FIELD_NUMBER: _ClassVar[int] - deks: _containers.RepeatedCompositeFieldContainer[EnvironmentKey] - next_page_token: str - total_size: int - def __init__(self, deks: _Optional[_Iterable[_Union[EnvironmentKey, _Mapping]]] = ..., next_page_token: _Optional[str] = ..., total_size: _Optional[int] = ...) -> None: ... - -class DeleteDEKRequest(_message.Message): - __slots__ = ("dek_version",) - DEK_VERSION_FIELD_NUMBER: _ClassVar[int] - dek_version: int - def __init__(self, dek_version: _Optional[int] = ...) -> None: ... - -class RotateMasterKeyRequest(_message.Message): - __slots__ = () - def __init__(self) -> None: ... - -class RotateMasterKeyResponse(_message.Message): - __slots__ = ("new_master_key",) - NEW_MASTER_KEY_FIELD_NUMBER: _ClassVar[int] - new_master_key: MasterKey - def __init__(self, new_master_key: _Optional[_Union[MasterKey, _Mapping]] = ...) -> None: ... - -class EnvironmentKey(_message.Message): - __slots__ = ("id", "environment_id", "dek_version", "master_version", "algorithm", "status", "created_at", "rotated_at") - ID_FIELD_NUMBER: _ClassVar[int] - ENVIRONMENT_ID_FIELD_NUMBER: _ClassVar[int] - DEK_VERSION_FIELD_NUMBER: _ClassVar[int] - MASTER_VERSION_FIELD_NUMBER: _ClassVar[int] - ALGORITHM_FIELD_NUMBER: _ClassVar[int] - STATUS_FIELD_NUMBER: _ClassVar[int] - CREATED_AT_FIELD_NUMBER: _ClassVar[int] - ROTATED_AT_FIELD_NUMBER: _ClassVar[int] - id: str - environment_id: str - dek_version: int - master_version: int - algorithm: str - status: str - created_at: _timestamp_pb2.Timestamp - rotated_at: _timestamp_pb2.Timestamp - def __init__(self, id: _Optional[str] = ..., environment_id: _Optional[str] = ..., dek_version: _Optional[int] = ..., master_version: _Optional[int] = ..., algorithm: _Optional[str] = ..., status: _Optional[str] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., rotated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ... - -class MasterKey(_message.Message): - __slots__ = ("id", "provider", "key_ref", "version", "status", "created_at", "rotated_at") - ID_FIELD_NUMBER: _ClassVar[int] - PROVIDER_FIELD_NUMBER: _ClassVar[int] - KEY_REF_FIELD_NUMBER: _ClassVar[int] - VERSION_FIELD_NUMBER: _ClassVar[int] - STATUS_FIELD_NUMBER: _ClassVar[int] - CREATED_AT_FIELD_NUMBER: _ClassVar[int] - ROTATED_AT_FIELD_NUMBER: _ClassVar[int] - id: str - provider: str - key_ref: str - version: int - status: str - created_at: _timestamp_pb2.Timestamp - rotated_at: _timestamp_pb2.Timestamp - def __init__(self, id: _Optional[str] = ..., provider: _Optional[str] = ..., key_ref: _Optional[str] = ..., version: _Optional[int] = ..., status: _Optional[str] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., rotated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ... - -class CreateMasterKeyRequest(_message.Message): - __slots__ = ("provider", "key_ref", "version") - PROVIDER_FIELD_NUMBER: _ClassVar[int] - KEY_REF_FIELD_NUMBER: _ClassVar[int] - VERSION_FIELD_NUMBER: _ClassVar[int] - provider: str - key_ref: str - version: int - def __init__(self, provider: _Optional[str] = ..., key_ref: _Optional[str] = ..., version: _Optional[int] = ...) -> None: ... - -class CreateMasterKeyResponse(_message.Message): - __slots__ = ("master_key",) - MASTER_KEY_FIELD_NUMBER: _ClassVar[int] - master_key: MasterKey - def __init__(self, master_key: _Optional[_Union[MasterKey, _Mapping]] = ...) -> None: ... - -class SetActiveDEKRequest(_message.Message): - __slots__ = ("dek_version",) - DEK_VERSION_FIELD_NUMBER: _ClassVar[int] - dek_version: int - def __init__(self, dek_version: _Optional[int] = ...) -> None: ... - -class SetActiveDEKResponse(_message.Message): - __slots__ = ("dek",) - DEK_FIELD_NUMBER: _ClassVar[int] - dek: EnvironmentKey - def __init__(self, dek: _Optional[_Union[EnvironmentKey, _Mapping]] = ...) -> None: ... - -class SetActiveMasterKeyRequest(_message.Message): - __slots__ = ("version",) - VERSION_FIELD_NUMBER: _ClassVar[int] - version: int - def __init__(self, version: _Optional[int] = ...) -> None: ... - -class SetActiveMasterKeyResponse(_message.Message): - __slots__ = ("master_key",) - MASTER_KEY_FIELD_NUMBER: _ClassVar[int] - master_key: MasterKey - def __init__(self, master_key: _Optional[_Union[MasterKey, _Mapping]] = ...) -> None: ... - -class DestroyDEKRequest(_message.Message): - __slots__ = ("dek_version",) - DEK_VERSION_FIELD_NUMBER: _ClassVar[int] - dek_version: int - def __init__(self, dek_version: _Optional[int] = ...) -> None: ... - -class DestroyMasterKeyRequest(_message.Message): - __slots__ = ("version",) - VERSION_FIELD_NUMBER: _ClassVar[int] - version: int - def __init__(self, version: _Optional[int] = ...) -> None: ... diff --git a/scalekit/v1/keys/keys_pb2_grpc.py b/scalekit/v1/keys/keys_pb2_grpc.py deleted file mode 100644 index 0c7bedb..0000000 --- a/scalekit/v1/keys/keys_pb2_grpc.py +++ /dev/null @@ -1,386 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc - -from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 -from scalekit.v1.keys import keys_pb2 as scalekit_dot_v1_dot_keys_dot_keys__pb2 - - -class KeyManagementServiceStub(object): - """KeyManagementService provides operations for managing encryption keys - including Data Encryption Keys (DEKs) and master key rotation. - """ - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.CreateDEK = channel.unary_unary( - '/scalekit.v1.keys.KeyManagementService/CreateDEK', - request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateDEKRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateDEKResponse.FromString, - ) - self.RotateDEK = channel.unary_unary( - '/scalekit.v1.keys.KeyManagementService/RotateDEK', - request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateDEKRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateDEKResponse.FromString, - ) - self.ListDEKs = channel.unary_unary( - '/scalekit.v1.keys.KeyManagementService/ListDEKs', - request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.ListDEKsRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.ListDEKsResponse.FromString, - ) - self.DeleteDEK = channel.unary_unary( - '/scalekit.v1.keys.KeyManagementService/DeleteDEK', - request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.DeleteDEKRequest.SerializeToString, - response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - ) - self.RotateMasterKey = channel.unary_unary( - '/scalekit.v1.keys.KeyManagementService/RotateMasterKey', - request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateMasterKeyRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateMasterKeyResponse.FromString, - ) - self.CreateMasterKey = channel.unary_unary( - '/scalekit.v1.keys.KeyManagementService/CreateMasterKey', - request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateMasterKeyRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateMasterKeyResponse.FromString, - ) - self.SetActiveDEK = channel.unary_unary( - '/scalekit.v1.keys.KeyManagementService/SetActiveDEK', - request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveDEKRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveDEKResponse.FromString, - ) - self.SetActiveMasterKey = channel.unary_unary( - '/scalekit.v1.keys.KeyManagementService/SetActiveMasterKey', - request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveMasterKeyRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveMasterKeyResponse.FromString, - ) - self.DestroyDEK = channel.unary_unary( - '/scalekit.v1.keys.KeyManagementService/DestroyDEK', - request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.DestroyDEKRequest.SerializeToString, - response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - ) - self.DestroyMasterKey = channel.unary_unary( - '/scalekit.v1.keys.KeyManagementService/DestroyMasterKey', - request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.DestroyMasterKeyRequest.SerializeToString, - response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - ) - - -class KeyManagementServiceServicer(object): - """KeyManagementService provides operations for managing encryption keys - including Data Encryption Keys (DEKs) and master key rotation. - """ - - def CreateDEK(self, request, context): - """CreateDEK creates a new Data Encryption Key (DEK) for an environment. - If a DEK already exists, this will create a new version. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def RotateDEK(self, request, context): - """RotateDEK creates a new DEK version for an environment. - Re-encrypts existing data (oidc_client_secrets, connection client_secrets) and deprecates old DEK versions. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def ListDEKs(self, request, context): - """ListDEKs lists DEKs for an environment with pagination. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def DeleteDEK(self, request, context): - """DeleteDEK deprecates or permanently deletes a DEK version. - Deprecated DEKs can still be used for decryption but not for encryption. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def RotateMasterKey(self, request, context): - """RotateMasterKey rotates the master key and rewraps all DEKs. - This operation is idempotent and supports zero-downtime rotation. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def CreateMasterKey(self, request, context): - """CreateMasterKey creates a new master key version (in a non-active state). - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def SetActiveDEK(self, request, context): - """SetActiveDEK sets a specific DEK version as active for an environment. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def SetActiveMasterKey(self, request, context): - """SetActiveMasterKey sets a specific master key version as active. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def DestroyDEK(self, request, context): - """DestroyDEK permanently deletes a DEK version. - WARNING: This operation is irreversible and will make data encrypted with this DEK unrecoverable. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def DestroyMasterKey(self, request, context): - """DestroyMasterKey permanently deletes a master key version. - WARNING: This operation is irreversible and will make DEKs wrapped with this master key unrecoverable. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - -def add_KeyManagementServiceServicer_to_server(servicer, server): - rpc_method_handlers = { - 'CreateDEK': grpc.unary_unary_rpc_method_handler( - servicer.CreateDEK, - request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateDEKRequest.FromString, - response_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateDEKResponse.SerializeToString, - ), - 'RotateDEK': grpc.unary_unary_rpc_method_handler( - servicer.RotateDEK, - request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateDEKRequest.FromString, - response_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateDEKResponse.SerializeToString, - ), - 'ListDEKs': grpc.unary_unary_rpc_method_handler( - servicer.ListDEKs, - request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.ListDEKsRequest.FromString, - response_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.ListDEKsResponse.SerializeToString, - ), - 'DeleteDEK': grpc.unary_unary_rpc_method_handler( - servicer.DeleteDEK, - request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.DeleteDEKRequest.FromString, - response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, - ), - 'RotateMasterKey': grpc.unary_unary_rpc_method_handler( - servicer.RotateMasterKey, - request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateMasterKeyRequest.FromString, - response_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateMasterKeyResponse.SerializeToString, - ), - 'CreateMasterKey': grpc.unary_unary_rpc_method_handler( - servicer.CreateMasterKey, - request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateMasterKeyRequest.FromString, - response_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateMasterKeyResponse.SerializeToString, - ), - 'SetActiveDEK': grpc.unary_unary_rpc_method_handler( - servicer.SetActiveDEK, - request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveDEKRequest.FromString, - response_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveDEKResponse.SerializeToString, - ), - 'SetActiveMasterKey': grpc.unary_unary_rpc_method_handler( - servicer.SetActiveMasterKey, - request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveMasterKeyRequest.FromString, - response_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveMasterKeyResponse.SerializeToString, - ), - 'DestroyDEK': grpc.unary_unary_rpc_method_handler( - servicer.DestroyDEK, - request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.DestroyDEKRequest.FromString, - response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, - ), - 'DestroyMasterKey': grpc.unary_unary_rpc_method_handler( - servicer.DestroyMasterKey, - request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.DestroyMasterKeyRequest.FromString, - response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - 'scalekit.v1.keys.KeyManagementService', rpc_method_handlers) - server.add_generic_rpc_handlers((generic_handler,)) - - - # This class is part of an EXPERIMENTAL API. -class KeyManagementService(object): - """KeyManagementService provides operations for managing encryption keys - including Data Encryption Keys (DEKs) and master key rotation. - """ - - @staticmethod - def CreateDEK(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/CreateDEK', - scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateDEKRequest.SerializeToString, - scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateDEKResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - @staticmethod - def RotateDEK(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/RotateDEK', - scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateDEKRequest.SerializeToString, - scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateDEKResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - @staticmethod - def ListDEKs(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/ListDEKs', - scalekit_dot_v1_dot_keys_dot_keys__pb2.ListDEKsRequest.SerializeToString, - scalekit_dot_v1_dot_keys_dot_keys__pb2.ListDEKsResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - @staticmethod - def DeleteDEK(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/DeleteDEK', - scalekit_dot_v1_dot_keys_dot_keys__pb2.DeleteDEKRequest.SerializeToString, - google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - @staticmethod - def RotateMasterKey(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/RotateMasterKey', - scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateMasterKeyRequest.SerializeToString, - scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateMasterKeyResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - @staticmethod - def CreateMasterKey(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/CreateMasterKey', - scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateMasterKeyRequest.SerializeToString, - scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateMasterKeyResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - @staticmethod - def SetActiveDEK(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/SetActiveDEK', - scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveDEKRequest.SerializeToString, - scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveDEKResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - @staticmethod - def SetActiveMasterKey(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/SetActiveMasterKey', - scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveMasterKeyRequest.SerializeToString, - scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveMasterKeyResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - @staticmethod - def DestroyDEK(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/DestroyDEK', - scalekit_dot_v1_dot_keys_dot_keys__pb2.DestroyDEKRequest.SerializeToString, - google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - @staticmethod - def DestroyMasterKey(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/DestroyMasterKey', - scalekit_dot_v1_dot_keys_dot_keys__pb2.DestroyMasterKeyRequest.SerializeToString, - google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/members/members_pb2.py b/scalekit/v1/members/members_pb2.py index e7f4dd8..277d8bf 100644 --- a/scalekit/v1/members/members_pb2.py +++ b/scalekit/v1/members/members_pb2.py @@ -15,7 +15,6 @@ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2 -from google.api import visibility_pb2 as google_dot_api_dot_visibility__pb2 from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 from protoc_gen_openapiv2.options import annotations_pb2 as protoc__gen__openapiv2_dot_options_dot_annotations__pb2 @@ -24,7 +23,7 @@ from scalekit.v1.users import users_pb2 as scalekit_dot_v1_dot_users_dot_users__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/members/members.proto\x12\x13scalekit.v1.members\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\x1a\x1dscalekit/v1/users/users.proto\"\xba\x07\n\x06Member\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12;\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12;\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nupdateTime\x12!\n\x0cworkspace_id\x18\x04 \x01(\tR\x0bworkspaceId\x12\x33\n\x04role\x18\x05 \x01(\x0e\x32\x1f.scalekit.v1.members.MemberRoleR\x04role\x12,\n\nfirst_name\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\x18\xc8\x01H\x00R\tfirstName\x88\x01\x01\x12*\n\tlast_name\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\x18\xc8\x01H\x01R\x08lastName\x88\x01\x01\x12\x1d\n\x05\x65mail\x18\x08 \x01(\tB\x07\xbaH\x04r\x02`\x01R\x05\x65mail\x12`\n\x08metadata\x18\t \x03(\x0b\x32).scalekit.v1.members.Member.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12V\n\rorganizations\x18\n \x03(\x0b\x32+.scalekit.v1.commons.OrganizationMembershipB\x03\xe0\x41\x03R\rorganizations\x12\x43\n\x0cuser_profile\x18\x0b \x01(\x0b\x32 .scalekit.v1.commons.UserProfileR\x0buserProfile\x12$\n\x0b\x65xternal_id\x18\x0c \x01(\tB\x03\xe0\x41\x03R\nexternalId\x12#\n\rworkspace_ids\x18\r \x03(\tR\x0cworkspaceIds\x12\x8f\x01\n\x1c\x61\x63tive_workspace_external_id\x18\x0e \x01(\tBI\x92\x41\x43\x32(Members session current active workspaceJ\x17\"org_72289897007874151\"\xe0\x41\x03H\x02R\x19\x61\x63tiveWorkspaceExternalId\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\r\n\x0b_first_nameB\x0c\n\n_last_nameB\x1f\n\x1d_active_workspace_external_id\"R\n\x13\x43reateMemberRequest\x12;\n\x06member\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.members.MemberB\x06\xbaH\x03\xc8\x01\x01R\x06member\"K\n\x14\x43reateMemberResponse\x12\x33\n\x06member\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.members.MemberR\x06member\"\x83\x03\n\x0cUpdateMember\x12.\n\nfirst_name\x18\x06 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01H\x00R\tfirstName\x88\x01\x01\x12,\n\tlast_name\x18\x07 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01H\x01R\x08lastName\x88\x01\x01\x12\x66\n\x08metadata\x18\t \x03(\x0b\x32/.scalekit.v1.members.UpdateMember.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12G\n\x0cuser_profile\x18\n \x01(\x0b\x32$.scalekit.v1.users.UpdateUserProfileR\x0buserProfile\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\r\n\x0b_first_nameB\x0c\n\n_last_nameJ\x04\x08\x04\x10\x05J\x04\x08\x08\x10\t\"W\n\x1aUpdateCurrentMemberRequest\x12\x39\n\x06member\x18\x01 \x01(\x0b\x32!.scalekit.v1.members.UpdateMemberR\x06member\"k\n\x13UpdateMemberRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x13\x18\x19R\x02id\x12\x39\n\x06member\x18\x02 \x01(\x0b\x32!.scalekit.v1.members.UpdateMemberR\x06member\"K\n\x14UpdateMemberResponse\x12\x33\n\x06member\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.members.MemberR\x06member\"\x19\n\x17GetCurrentMemberRequest\"-\n\x10GetMemberRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x13\x18\x19R\x02id\"H\n\x11GetMemberResponse\x12\x33\n\x06member\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.members.MemberR\x06member\"O\n\x11ListMemberRequest\x12\x1b\n\tpage_size\x18\x01 \x01(\rR\x08pageSize\x12\x1d\n\npage_token\x18\x02 \x01(\tR\tpageToken\"\x92\x01\n\x12ListMemberResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12\x35\n\x07members\x18\x03 \x03(\x0b\x32\x1b.scalekit.v1.members.MemberR\x07members\"0\n\x13\x44\x65leteMemberRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x13\x18\x19R\x02id*>\n\nMemberRole\x12\x1b\n\x17MEMBER_ROLE_UNSPECIFIED\x10\x00\x12\t\n\x05\x41\x44MIN\x10\x01\x12\x08\n\x04USER\x10\x02\x32\xbf\x08\n\x0eMembersService\x12\x99\x01\n\x0c\x43reateMember\x12(.scalekit.v1.members.CreateMemberRequest\x1a).scalekit.v1.members.CreateMemberResponse\"4\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\"\x0f/api/v1/members:\x06member\x12\xac\x01\n\x13UpdateCurrentMember\x12/.scalekit.v1.members.UpdateCurrentMemberRequest\x1a).scalekit.v1.members.UpdateMemberResponse\"9\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\x32\x14/api/v1/members:this:\x06member\x12\x9e\x01\n\x0cUpdateMember\x12(.scalekit.v1.members.UpdateMemberRequest\x1a).scalekit.v1.members.UpdateMemberResponse\"9\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\x32\x14/api/v1/members/{id}:\x06member\x12\x9b\x01\n\x10GetCurrentMember\x12,.scalekit.v1.members.GetCurrentMemberRequest\x1a&.scalekit.v1.members.GetMemberResponse\"1\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/members:this\x12\x8d\x01\n\tGetMember\x12%.scalekit.v1.members.GetMemberRequest\x1a&.scalekit.v1.members.GetMemberResponse\"1\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/members/{id}\x12\x8c\x01\n\x0bListMembers\x12&.scalekit.v1.members.ListMemberRequest\x1a\'.scalekit.v1.members.ListMemberResponse\",\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x11\x12\x0f/api/v1/members\x12\x83\x01\n\x0c\x44\x65leteMember\x12(.scalekit.v1.members.DeleteMemberRequest\x1a\x16.google.protobuf.Empty\"1\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x16*\x14/api/v1/members/{id}B3Z1github.com/scalekit-inc/scalekit/pkg/grpc/membersb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/members/members.proto\x12\x13scalekit.v1.members\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\x1a\x1dscalekit/v1/users/users.proto\"\xba\x07\n\x06Member\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12;\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12;\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nupdateTime\x12!\n\x0cworkspace_id\x18\x04 \x01(\tR\x0bworkspaceId\x12\x33\n\x04role\x18\x05 \x01(\x0e\x32\x1f.scalekit.v1.members.MemberRoleR\x04role\x12,\n\nfirst_name\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\x18\xc8\x01H\x00R\tfirstName\x88\x01\x01\x12*\n\tlast_name\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\x18\xc8\x01H\x01R\x08lastName\x88\x01\x01\x12\x1d\n\x05\x65mail\x18\x08 \x01(\tB\x07\xbaH\x04r\x02`\x01R\x05\x65mail\x12`\n\x08metadata\x18\t \x03(\x0b\x32).scalekit.v1.members.Member.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12V\n\rorganizations\x18\n \x03(\x0b\x32+.scalekit.v1.commons.OrganizationMembershipB\x03\xe0\x41\x03R\rorganizations\x12\x43\n\x0cuser_profile\x18\x0b \x01(\x0b\x32 .scalekit.v1.commons.UserProfileR\x0buserProfile\x12$\n\x0b\x65xternal_id\x18\x0c \x01(\tB\x03\xe0\x41\x03R\nexternalId\x12#\n\rworkspace_ids\x18\r \x03(\tR\x0cworkspaceIds\x12\x8f\x01\n\x1c\x61\x63tive_workspace_external_id\x18\x0e \x01(\tBI\x92\x41\x43\x32(Members session current active workspaceJ\x17\"org_72289897007874151\"\xe0\x41\x03H\x02R\x19\x61\x63tiveWorkspaceExternalId\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\r\n\x0b_first_nameB\x0c\n\n_last_nameB\x1f\n\x1d_active_workspace_external_id\"R\n\x13\x43reateMemberRequest\x12;\n\x06member\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.members.MemberB\x06\xbaH\x03\xc8\x01\x01R\x06member\"K\n\x14\x43reateMemberResponse\x12\x33\n\x06member\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.members.MemberR\x06member\"\x83\x03\n\x0cUpdateMember\x12.\n\nfirst_name\x18\x06 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01H\x00R\tfirstName\x88\x01\x01\x12,\n\tlast_name\x18\x07 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01H\x01R\x08lastName\x88\x01\x01\x12\x66\n\x08metadata\x18\t \x03(\x0b\x32/.scalekit.v1.members.UpdateMember.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12G\n\x0cuser_profile\x18\n \x01(\x0b\x32$.scalekit.v1.users.UpdateUserProfileR\x0buserProfile\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\r\n\x0b_first_nameB\x0c\n\n_last_nameJ\x04\x08\x04\x10\x05J\x04\x08\x08\x10\t\"W\n\x1aUpdateCurrentMemberRequest\x12\x39\n\x06member\x18\x01 \x01(\x0b\x32!.scalekit.v1.members.UpdateMemberR\x06member\"k\n\x13UpdateMemberRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x13\x18\x19R\x02id\x12\x39\n\x06member\x18\x02 \x01(\x0b\x32!.scalekit.v1.members.UpdateMemberR\x06member\"K\n\x14UpdateMemberResponse\x12\x33\n\x06member\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.members.MemberR\x06member\"\x19\n\x17GetCurrentMemberRequest\"-\n\x10GetMemberRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x13\x18\x19R\x02id\"H\n\x11GetMemberResponse\x12\x33\n\x06member\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.members.MemberR\x06member\"O\n\x11ListMemberRequest\x12\x1b\n\tpage_size\x18\x01 \x01(\rR\x08pageSize\x12\x1d\n\npage_token\x18\x02 \x01(\tR\tpageToken\"\x92\x01\n\x12ListMemberResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12\x35\n\x07members\x18\x03 \x03(\x0b\x32\x1b.scalekit.v1.members.MemberR\x07members\"0\n\x13\x44\x65leteMemberRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x13\x18\x19R\x02id*>\n\nMemberRole\x12\x1b\n\x17MEMBER_ROLE_UNSPECIFIED\x10\x00\x12\t\n\x05\x41\x44MIN\x10\x01\x12\x08\n\x04USER\x10\x02\x32\xd3\x07\n\x0eMembersService\x12\x8a\x01\n\x0c\x43reateMember\x12(.scalekit.v1.members.CreateMemberRequest\x1a).scalekit.v1.members.CreateMemberResponse\"%\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x19\"\x0f/api/v1/members:\x06member\x12\x9d\x01\n\x13UpdateCurrentMember\x12/.scalekit.v1.members.UpdateCurrentMemberRequest\x1a).scalekit.v1.members.UpdateMemberResponse\"*\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1e\x32\x14/api/v1/members:this:\x06member\x12\x8f\x01\n\x0cUpdateMember\x12(.scalekit.v1.members.UpdateMemberRequest\x1a).scalekit.v1.members.UpdateMemberResponse\"*\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1e\x32\x14/api/v1/members/{id}:\x06member\x12\x8c\x01\n\x10GetCurrentMember\x12,.scalekit.v1.members.GetCurrentMemberRequest\x1a&.scalekit.v1.members.GetMemberResponse\"\"\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/members:this\x12~\n\tGetMember\x12%.scalekit.v1.members.GetMemberRequest\x1a&.scalekit.v1.members.GetMemberResponse\"\"\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/members/{id}\x12}\n\x0bListMembers\x12&.scalekit.v1.members.ListMemberRequest\x1a\'.scalekit.v1.members.ListMemberResponse\"\x1d\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x11\x12\x0f/api/v1/members\x12t\n\x0c\x44\x65leteMember\x12(.scalekit.v1.members.DeleteMemberRequest\x1a\x16.google.protobuf.Empty\"\"\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x16*\x14/api/v1/members/{id}B3Z1github.com/scalekit-inc/scalekit/pkg/grpc/membersb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -65,51 +64,51 @@ _globals['_DELETEMEMBERREQUEST'].fields_by_name['id']._loaded_options = None _globals['_DELETEMEMBERREQUEST'].fields_by_name['id']._serialized_options = b'\272H\006r\004\020\023\030\031' _globals['_MEMBERSSERVICE'].methods_by_name['CreateMember']._loaded_options = None - _globals['_MEMBERSSERVICE'].methods_by_name['CreateMember']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\031\"\017/api/v1/members:\006member' + _globals['_MEMBERSSERVICE'].methods_by_name['CreateMember']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\031\"\017/api/v1/members:\006member' _globals['_MEMBERSSERVICE'].methods_by_name['UpdateCurrentMember']._loaded_options = None - _globals['_MEMBERSSERVICE'].methods_by_name['UpdateCurrentMember']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\0362\024/api/v1/members:this:\006member' + _globals['_MEMBERSSERVICE'].methods_by_name['UpdateCurrentMember']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\0362\024/api/v1/members:this:\006member' _globals['_MEMBERSSERVICE'].methods_by_name['UpdateMember']._loaded_options = None - _globals['_MEMBERSSERVICE'].methods_by_name['UpdateMember']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\0362\024/api/v1/members/{id}:\006member' + _globals['_MEMBERSSERVICE'].methods_by_name['UpdateMember']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\0362\024/api/v1/members/{id}:\006member' _globals['_MEMBERSSERVICE'].methods_by_name['GetCurrentMember']._loaded_options = None - _globals['_MEMBERSSERVICE'].methods_by_name['GetCurrentMember']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\026\022\024/api/v1/members:this' + _globals['_MEMBERSSERVICE'].methods_by_name['GetCurrentMember']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\026\022\024/api/v1/members:this' _globals['_MEMBERSSERVICE'].methods_by_name['GetMember']._loaded_options = None - _globals['_MEMBERSSERVICE'].methods_by_name['GetMember']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\026\022\024/api/v1/members/{id}' + _globals['_MEMBERSSERVICE'].methods_by_name['GetMember']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\026\022\024/api/v1/members/{id}' _globals['_MEMBERSSERVICE'].methods_by_name['ListMembers']._loaded_options = None - _globals['_MEMBERSSERVICE'].methods_by_name['ListMembers']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\021\022\017/api/v1/members' + _globals['_MEMBERSSERVICE'].methods_by_name['ListMembers']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\021\022\017/api/v1/members' _globals['_MEMBERSSERVICE'].methods_by_name['DeleteMember']._loaded_options = None - _globals['_MEMBERSSERVICE'].methods_by_name['DeleteMember']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\026*\024/api/v1/members/{id}' - _globals['_MEMBERROLE']._serialized_start=2601 - _globals['_MEMBERROLE']._serialized_end=2663 - _globals['_MEMBER']._serialized_start=391 - _globals['_MEMBER']._serialized_end=1345 - _globals['_MEMBER_METADATAENTRY']._serialized_start=1224 - _globals['_MEMBER_METADATAENTRY']._serialized_end=1283 - _globals['_CREATEMEMBERREQUEST']._serialized_start=1347 - _globals['_CREATEMEMBERREQUEST']._serialized_end=1429 - _globals['_CREATEMEMBERRESPONSE']._serialized_start=1431 - _globals['_CREATEMEMBERRESPONSE']._serialized_end=1506 - _globals['_UPDATEMEMBER']._serialized_start=1509 - _globals['_UPDATEMEMBER']._serialized_end=1896 - _globals['_UPDATEMEMBER_METADATAENTRY']._serialized_start=1224 - _globals['_UPDATEMEMBER_METADATAENTRY']._serialized_end=1283 - _globals['_UPDATECURRENTMEMBERREQUEST']._serialized_start=1898 - _globals['_UPDATECURRENTMEMBERREQUEST']._serialized_end=1985 - _globals['_UPDATEMEMBERREQUEST']._serialized_start=1987 - _globals['_UPDATEMEMBERREQUEST']._serialized_end=2094 - _globals['_UPDATEMEMBERRESPONSE']._serialized_start=2096 - _globals['_UPDATEMEMBERRESPONSE']._serialized_end=2171 - _globals['_GETCURRENTMEMBERREQUEST']._serialized_start=2173 - _globals['_GETCURRENTMEMBERREQUEST']._serialized_end=2198 - _globals['_GETMEMBERREQUEST']._serialized_start=2200 - _globals['_GETMEMBERREQUEST']._serialized_end=2245 - _globals['_GETMEMBERRESPONSE']._serialized_start=2247 - _globals['_GETMEMBERRESPONSE']._serialized_end=2319 - _globals['_LISTMEMBERREQUEST']._serialized_start=2321 - _globals['_LISTMEMBERREQUEST']._serialized_end=2400 - _globals['_LISTMEMBERRESPONSE']._serialized_start=2403 - _globals['_LISTMEMBERRESPONSE']._serialized_end=2549 - _globals['_DELETEMEMBERREQUEST']._serialized_start=2551 - _globals['_DELETEMEMBERREQUEST']._serialized_end=2599 - _globals['_MEMBERSSERVICE']._serialized_start=2666 - _globals['_MEMBERSSERVICE']._serialized_end=3753 + _globals['_MEMBERSSERVICE'].methods_by_name['DeleteMember']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\026*\024/api/v1/members/{id}' + _globals['_MEMBERROLE']._serialized_start=2572 + _globals['_MEMBERROLE']._serialized_end=2634 + _globals['_MEMBER']._serialized_start=362 + _globals['_MEMBER']._serialized_end=1316 + _globals['_MEMBER_METADATAENTRY']._serialized_start=1195 + _globals['_MEMBER_METADATAENTRY']._serialized_end=1254 + _globals['_CREATEMEMBERREQUEST']._serialized_start=1318 + _globals['_CREATEMEMBERREQUEST']._serialized_end=1400 + _globals['_CREATEMEMBERRESPONSE']._serialized_start=1402 + _globals['_CREATEMEMBERRESPONSE']._serialized_end=1477 + _globals['_UPDATEMEMBER']._serialized_start=1480 + _globals['_UPDATEMEMBER']._serialized_end=1867 + _globals['_UPDATEMEMBER_METADATAENTRY']._serialized_start=1195 + _globals['_UPDATEMEMBER_METADATAENTRY']._serialized_end=1254 + _globals['_UPDATECURRENTMEMBERREQUEST']._serialized_start=1869 + _globals['_UPDATECURRENTMEMBERREQUEST']._serialized_end=1956 + _globals['_UPDATEMEMBERREQUEST']._serialized_start=1958 + _globals['_UPDATEMEMBERREQUEST']._serialized_end=2065 + _globals['_UPDATEMEMBERRESPONSE']._serialized_start=2067 + _globals['_UPDATEMEMBERRESPONSE']._serialized_end=2142 + _globals['_GETCURRENTMEMBERREQUEST']._serialized_start=2144 + _globals['_GETCURRENTMEMBERREQUEST']._serialized_end=2169 + _globals['_GETMEMBERREQUEST']._serialized_start=2171 + _globals['_GETMEMBERREQUEST']._serialized_end=2216 + _globals['_GETMEMBERRESPONSE']._serialized_start=2218 + _globals['_GETMEMBERRESPONSE']._serialized_end=2290 + _globals['_LISTMEMBERREQUEST']._serialized_start=2292 + _globals['_LISTMEMBERREQUEST']._serialized_end=2371 + _globals['_LISTMEMBERRESPONSE']._serialized_start=2374 + _globals['_LISTMEMBERRESPONSE']._serialized_end=2520 + _globals['_DELETEMEMBERREQUEST']._serialized_start=2522 + _globals['_DELETEMEMBERREQUEST']._serialized_end=2570 + _globals['_MEMBERSSERVICE']._serialized_start=2637 + _globals['_MEMBERSSERVICE']._serialized_end=3616 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/members/members_pb2.pyi b/scalekit/v1/members/members_pb2.pyi index beac5a8..23e0f61 100644 --- a/scalekit/v1/members/members_pb2.pyi +++ b/scalekit/v1/members/members_pb2.pyi @@ -1,7 +1,6 @@ from buf.validate import validate_pb2 as _validate_pb2 from google.api import annotations_pb2 as _annotations_pb2 from google.api import field_behavior_pb2 as _field_behavior_pb2 -from google.api import visibility_pb2 as _visibility_pb2 from google.protobuf import empty_pb2 as _empty_pb2 from google.protobuf import timestamp_pb2 as _timestamp_pb2 from protoc_gen_openapiv2.options import annotations_pb2 as _annotations_pb2_1 diff --git a/scalekit/v1/migrations/migrations_pb2.py b/scalekit/v1/migrations/migrations_pb2.py index 9eadb56..386aa80 100644 --- a/scalekit/v1/migrations/migrations_pb2.py +++ b/scalekit/v1/migrations/migrations_pb2.py @@ -21,7 +21,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'scalekit/v1/migrations/migrations.proto\x12\x16scalekit.v1.migrations\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"@\n\x15MigrateEnvKeysRequest\x12\'\n\x0f\x65nvironment_ids\x18\x01 \x03(\tR\x0e\x65nvironmentIds\"O\n\x16MigrateEnvKeysResponse\x12\x35\n\x16\x65nvironments_processed\x18\x01 \x01(\x05R\x15\x65nvironmentsProcessed\"~\n\x18MigrationServiceResponse\x12\x31\n\x14success_environments\x18\x01 \x01(\x05R\x13successEnvironments\x12/\n\x13\x66\x61iled_environments\x18\x02 \x01(\x05R\x12\x66\x61iledEnvironments\"f\n\x14MigrationSAMLRequest\x12\'\n\x0f\x65nvironment_ids\x18\x01 \x03(\x03R\x0e\x65nvironmentIds\x12%\n\nbatch_size\x18\x02 \x01(\x05\x42\x06\xbaH\x03\xc8\x01\x01R\tbatchSize\"\xad\x01\n\x11MigrateFSARequest\x12\'\n\x0f\x65nvironment_ids\x18\x01 \x03(\x03R\x0e\x65nvironmentIds\x12H\n\tdata_type\x18\x02 \x01(\x0e\x32#.scalekit.v1.migrations.FSADataTypeB\x06\xbaH\x03\xc8\x01\x01R\x08\x64\x61taType\x12%\n\nbatch_size\x18\x03 \x01(\x05\x42\x06\xbaH\x03\xc8\x01\x01R\tbatchSize\"z\n\x14MigrationFSAResponse\x12\x31\n\x14success_environments\x18\x01 \x01(\x05R\x13successEnvironments\x12/\n\x13\x66\x61iled_environments\x18\x02 \x01(\x05R\x12\x66\x61iledEnvironments\"\x91\x01\n\x1dMigrateStripeCustomersRequest\x12p\n\x18migrate_stripe_customers\x18\x01 \x01(\x0b\x32..scalekit.v1.migrations.MigrateStripeCustomersB\x06\xbaH\x03\xc8\x01\x01R\x16migrateStripeCustomers\"\xad\x01\n\x16MigrateStripeCustomers\x12#\n\rworkspace_ids\x18\x01 \x03(\x03R\x0cworkspaceIds\x12\x1b\n\tplan_name\x18\x02 \x01(\tR\x08planName\x12\x1d\n\nbatch_size\x18\x03 \x01(\x05R\tbatchSize\x12\x32\n\x15include_test_accounts\x18\x04 \x01(\x08R\x13includeTestAccounts\"\xc1\x01\n\x1eMigrateStripeCustomersResponse\x12#\n\rsuccess_count\x18\x01 \x01(\x05R\x0csuccessCount\x12!\n\x0c\x66\x61iled_count\x18\x02 \x01(\x05R\x0b\x66\x61iledCount\x12\x30\n\x14\x66\x61iled_workspace_ids\x18\x03 \x03(\x03R\x12\x66\x61iledWorkspaceIds\x12%\n\x0e\x65rror_messages\x18\x04 \x03(\tR\rerrorMessages\"{\n\x15MigrationSAMLResponse\x12\x31\n\x14success_environments\x18\x01 \x01(\x05R\x13successEnvironments\x12/\n\x13\x66\x61iled_environments\x18\x02 \x01(\x05R\x12\x66\x61iledEnvironments\"\x96\x02\n\x1aMigrateWorkspaceFGARequest\x12#\n\rworkspace_ids\x18\x01 \x03(\x03R\x0cworkspaceIds\x12\x14\n\x05\x61sync\x18\x02 \x01(\x08R\x05\x61sync\x12)\n\x10organization_ids\x18\x03 \x03(\x03R\x0forganizationIds\x12#\n\rdirectory_ids\x18\x04 \x03(\x03R\x0c\x64irectoryIds\x12%\n\x0e\x63onnection_ids\x18\x05 \x03(\x03R\rconnectionIds\x12\x1d\n\nclient_ids\x18\x06 \x03(\x03R\tclientIds\x12\'\n\x0f\x65nvironment_ids\x18\x07 \x03(\x03R\x0e\x65nvironmentIds\"2\n\x0ePermissionList\x12 \n\x0bpermissions\x18\x01 \x03(\tR\x0bpermissions\"\xbb\x02\n\x1dMigrateRolePermissionsRequest\x12}\n\x10role_permissions\x18\x01 \x03(\x0b\x32J.scalekit.v1.migrations.MigrateRolePermissionsRequest.RolePermissionsEntryB\x06\xbaH\x03\xc8\x01\x01R\x0frolePermissions\x12/\n\x0f\x65nvironment_ids\x18\x02 \x03(\x03\x42\x06\xbaH\x03\xc8\x01\x01R\x0e\x65nvironmentIds\x1aj\n\x14RolePermissionsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12<\n\x05value\x18\x02 \x01(\x0b\x32&.scalekit.v1.migrations.PermissionListR\x05value:\x02\x38\x01\"\xca\x02\n\x1eMigrateRolePermissionsResponse\x12\x31\n\x14success_environments\x18\x01 \x01(\x05R\x13successEnvironments\x12/\n\x13\x66\x61iled_environments\x18\x02 \x01(\x05R\x12\x66\x61iledEnvironments\x12%\n\x0e\x65rror_messages\x18\x03 \x03(\tR\rerrorMessages\x12#\n\rroles_created\x18\x04 \x01(\x05R\x0crolesCreated\x12/\n\x13permissions_created\x18\x05 \x01(\x05R\x12permissionsCreated\x12G\n role_permission_mappings_created\x18\x06 \x01(\x05R\x1drolePermissionMappingsCreated*\x88\x01\n\x0b\x46SADataType\x12\x1d\n\x19\x46SA_DATA_TYPE_UNSPECIFIED\x10\x00\x12\x1c\n\x18\x46SA_DATA_TYPE_CONNECTION\x10\x01\x12\x19\n\x15\x46SA_DATA_TYPE_SESSION\x10\x02\x12!\n\x1d\x46SA_DATA_TYPE_USER_MANAGEMENT\x10\x03\x32\x8f\n\n\x10MigrationService\x12\x9c\x01\n\x0eMigrateFSAData\x12).scalekit.v1.migrations.MigrateFSARequest\x1a,.scalekit.v1.migrations.MigrationFSAResponse\"1\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x16\"\x14/migrations/fsa-data\x12\xdc\x01\n\x16MigrateStripeCustomers\x12\x35.scalekit.v1.migrations.MigrateStripeCustomersRequest\x1a\x36.scalekit.v1.migrations.MigrateStripeCustomersResponse\"S\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x38\"\x1c/migrations/stripe-customers:\x18migrate_stripe_customers\x12\x9c\x01\n\x13MigrateWorkspaceFGA\x12\x32.scalekit.v1.migrations.MigrateWorkspaceFGARequest\x1a\x16.google.protobuf.Empty\"9\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\"\x19/migrations/workspace-fga:\x01*\x12\xc5\x01\n\x16MigrateRolePermissions\x12\x35.scalekit.v1.migrations.MigrateRolePermissionsRequest\x1a\x36.scalekit.v1.migrations.MigrateRolePermissionsResponse\"<\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\"\x1c/migrations/role-permissions:\x01*\x12\x95\x04\n\x0eMigrateEnvKeys\x12-.scalekit.v1.migrations.MigrateEnvKeysRequest\x1a..scalekit.v1.migrations.MigrateEnvKeysResponse\"\xa3\x03\x92\x41\xeb\x02\n\x0eKey Management\x12&Ensure DEKs for specified environments\x1a\xb0\x02\x45nsures each listed environment has at least one active DEK. Only callable from the Scalekit platform environment. Provide environment_ids (e.g. env_123) in the request. Creates a DEK only for environments that do not have one (idempotent per environment). Use to backfill DEKs for specific environments.\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\"\x14/migrations/env-keys:\x01*B6Z4github.com/scalekit-inc/scalekit/pkg/grpc/migrationsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'scalekit/v1/migrations/migrations.proto\x12\x16scalekit.v1.migrations\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"~\n\x18MigrationServiceResponse\x12\x31\n\x14success_environments\x18\x01 \x01(\x05R\x13successEnvironments\x12/\n\x13\x66\x61iled_environments\x18\x02 \x01(\x05R\x12\x66\x61iledEnvironments\"f\n\x14MigrationSAMLRequest\x12\'\n\x0f\x65nvironment_ids\x18\x01 \x03(\x03R\x0e\x65nvironmentIds\x12%\n\nbatch_size\x18\x02 \x01(\x05\x42\x06\xbaH\x03\xc8\x01\x01R\tbatchSize\"\xad\x01\n\x11MigrateFSARequest\x12\'\n\x0f\x65nvironment_ids\x18\x01 \x03(\x03R\x0e\x65nvironmentIds\x12H\n\tdata_type\x18\x02 \x01(\x0e\x32#.scalekit.v1.migrations.FSADataTypeB\x06\xbaH\x03\xc8\x01\x01R\x08\x64\x61taType\x12%\n\nbatch_size\x18\x03 \x01(\x05\x42\x06\xbaH\x03\xc8\x01\x01R\tbatchSize\"z\n\x14MigrationFSAResponse\x12\x31\n\x14success_environments\x18\x01 \x01(\x05R\x13successEnvironments\x12/\n\x13\x66\x61iled_environments\x18\x02 \x01(\x05R\x12\x66\x61iledEnvironments\"\x91\x01\n\x1dMigrateStripeCustomersRequest\x12p\n\x18migrate_stripe_customers\x18\x01 \x01(\x0b\x32..scalekit.v1.migrations.MigrateStripeCustomersB\x06\xbaH\x03\xc8\x01\x01R\x16migrateStripeCustomers\"\xad\x01\n\x16MigrateStripeCustomers\x12#\n\rworkspace_ids\x18\x01 \x03(\x03R\x0cworkspaceIds\x12\x1b\n\tplan_name\x18\x02 \x01(\tR\x08planName\x12\x1d\n\nbatch_size\x18\x03 \x01(\x05R\tbatchSize\x12\x32\n\x15include_test_accounts\x18\x04 \x01(\x08R\x13includeTestAccounts\"\xc1\x01\n\x1eMigrateStripeCustomersResponse\x12#\n\rsuccess_count\x18\x01 \x01(\x05R\x0csuccessCount\x12!\n\x0c\x66\x61iled_count\x18\x02 \x01(\x05R\x0b\x66\x61iledCount\x12\x30\n\x14\x66\x61iled_workspace_ids\x18\x03 \x03(\x03R\x12\x66\x61iledWorkspaceIds\x12%\n\x0e\x65rror_messages\x18\x04 \x03(\tR\rerrorMessages\"{\n\x15MigrationSAMLResponse\x12\x31\n\x14success_environments\x18\x01 \x01(\x05R\x13successEnvironments\x12/\n\x13\x66\x61iled_environments\x18\x02 \x01(\x05R\x12\x66\x61iledEnvironments\"\x96\x02\n\x1aMigrateWorkspaceFGARequest\x12#\n\rworkspace_ids\x18\x01 \x03(\x03R\x0cworkspaceIds\x12\x14\n\x05\x61sync\x18\x02 \x01(\x08R\x05\x61sync\x12)\n\x10organization_ids\x18\x03 \x03(\x03R\x0forganizationIds\x12#\n\rdirectory_ids\x18\x04 \x03(\x03R\x0c\x64irectoryIds\x12%\n\x0e\x63onnection_ids\x18\x05 \x03(\x03R\rconnectionIds\x12\x1d\n\nclient_ids\x18\x06 \x03(\x03R\tclientIds\x12\'\n\x0f\x65nvironment_ids\x18\x07 \x03(\x03R\x0e\x65nvironmentIds\"2\n\x0ePermissionList\x12 \n\x0bpermissions\x18\x01 \x03(\tR\x0bpermissions\"\xbb\x02\n\x1dMigrateRolePermissionsRequest\x12}\n\x10role_permissions\x18\x01 \x03(\x0b\x32J.scalekit.v1.migrations.MigrateRolePermissionsRequest.RolePermissionsEntryB\x06\xbaH\x03\xc8\x01\x01R\x0frolePermissions\x12/\n\x0f\x65nvironment_ids\x18\x02 \x03(\x03\x42\x06\xbaH\x03\xc8\x01\x01R\x0e\x65nvironmentIds\x1aj\n\x14RolePermissionsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12<\n\x05value\x18\x02 \x01(\x0b\x32&.scalekit.v1.migrations.PermissionListR\x05value:\x02\x38\x01\"\xca\x02\n\x1eMigrateRolePermissionsResponse\x12\x31\n\x14success_environments\x18\x01 \x01(\x05R\x13successEnvironments\x12/\n\x13\x66\x61iled_environments\x18\x02 \x01(\x05R\x12\x66\x61iledEnvironments\x12%\n\x0e\x65rror_messages\x18\x03 \x03(\tR\rerrorMessages\x12#\n\rroles_created\x18\x04 \x01(\x05R\x0crolesCreated\x12/\n\x13permissions_created\x18\x05 \x01(\x05R\x12permissionsCreated\x12G\n role_permission_mappings_created\x18\x06 \x01(\x05R\x1drolePermissionMappingsCreated*\x88\x01\n\x0b\x46SADataType\x12\x1d\n\x19\x46SA_DATA_TYPE_UNSPECIFIED\x10\x00\x12\x1c\n\x18\x46SA_DATA_TYPE_CONNECTION\x10\x01\x12\x19\n\x15\x46SA_DATA_TYPE_SESSION\x10\x02\x12!\n\x1d\x46SA_DATA_TYPE_USER_MANAGEMENT\x10\x03\x32\xf7\x05\n\x10MigrationService\x12\x9c\x01\n\x0eMigrateFSAData\x12).scalekit.v1.migrations.MigrateFSARequest\x1a,.scalekit.v1.migrations.MigrationFSAResponse\"1\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x16\"\x14/migrations/fsa-data\x12\xdc\x01\n\x16MigrateStripeCustomers\x12\x35.scalekit.v1.migrations.MigrateStripeCustomersRequest\x1a\x36.scalekit.v1.migrations.MigrateStripeCustomersResponse\"S\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x38\"\x1c/migrations/stripe-customers:\x18migrate_stripe_customers\x12\x9c\x01\n\x13MigrateWorkspaceFGA\x12\x32.scalekit.v1.migrations.MigrateWorkspaceFGARequest\x1a\x16.google.protobuf.Empty\"9\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\"\x19/migrations/workspace-fga:\x01*\x12\xc5\x01\n\x16MigrateRolePermissions\x12\x35.scalekit.v1.migrations.MigrateRolePermissionsRequest\x1a\x36.scalekit.v1.migrations.MigrateRolePermissionsResponse\"<\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\"\x1c/migrations/role-permissions:\x01*B6Z4github.com/scalekit-inc/scalekit/pkg/grpc/migrationsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -51,40 +51,34 @@ _globals['_MIGRATIONSERVICE'].methods_by_name['MigrateWorkspaceFGA']._serialized_options = b'\202\265\030\002\030\001\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\036\"\031/migrations/workspace-fga:\001*' _globals['_MIGRATIONSERVICE'].methods_by_name['MigrateRolePermissions']._loaded_options = None _globals['_MIGRATIONSERVICE'].methods_by_name['MigrateRolePermissions']._serialized_options = b'\202\265\030\002\030\001\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002!\"\034/migrations/role-permissions:\001*' - _globals['_MIGRATIONSERVICE'].methods_by_name['MigrateEnvKeys']._loaded_options = None - _globals['_MIGRATIONSERVICE'].methods_by_name['MigrateEnvKeys']._serialized_options = b'\222A\353\002\n\016Key Management\022&Ensure DEKs for specified environments\032\260\002Ensures each listed environment has at least one active DEK. Only callable from the Scalekit platform environment. Provide environment_ids (e.g. env_123) in the request. Creates a DEK only for environments that do not have one (idempotent per environment). Use to backfill DEKs for specific environments.\202\265\030\002\030\001\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\031\"\024/migrations/env-keys:\001*' - _globals['_FSADATATYPE']._serialized_start=2611 - _globals['_FSADATATYPE']._serialized_end=2747 - _globals['_MIGRATEENVKEYSREQUEST']._serialized_start=302 - _globals['_MIGRATEENVKEYSREQUEST']._serialized_end=366 - _globals['_MIGRATEENVKEYSRESPONSE']._serialized_start=368 - _globals['_MIGRATEENVKEYSRESPONSE']._serialized_end=447 - _globals['_MIGRATIONSERVICERESPONSE']._serialized_start=449 - _globals['_MIGRATIONSERVICERESPONSE']._serialized_end=575 - _globals['_MIGRATIONSAMLREQUEST']._serialized_start=577 - _globals['_MIGRATIONSAMLREQUEST']._serialized_end=679 - _globals['_MIGRATEFSAREQUEST']._serialized_start=682 - _globals['_MIGRATEFSAREQUEST']._serialized_end=855 - _globals['_MIGRATIONFSARESPONSE']._serialized_start=857 - _globals['_MIGRATIONFSARESPONSE']._serialized_end=979 - _globals['_MIGRATESTRIPECUSTOMERSREQUEST']._serialized_start=982 - _globals['_MIGRATESTRIPECUSTOMERSREQUEST']._serialized_end=1127 - _globals['_MIGRATESTRIPECUSTOMERS']._serialized_start=1130 - _globals['_MIGRATESTRIPECUSTOMERS']._serialized_end=1303 - _globals['_MIGRATESTRIPECUSTOMERSRESPONSE']._serialized_start=1306 - _globals['_MIGRATESTRIPECUSTOMERSRESPONSE']._serialized_end=1499 - _globals['_MIGRATIONSAMLRESPONSE']._serialized_start=1501 - _globals['_MIGRATIONSAMLRESPONSE']._serialized_end=1624 - _globals['_MIGRATEWORKSPACEFGAREQUEST']._serialized_start=1627 - _globals['_MIGRATEWORKSPACEFGAREQUEST']._serialized_end=1905 - _globals['_PERMISSIONLIST']._serialized_start=1907 - _globals['_PERMISSIONLIST']._serialized_end=1957 - _globals['_MIGRATEROLEPERMISSIONSREQUEST']._serialized_start=1960 - _globals['_MIGRATEROLEPERMISSIONSREQUEST']._serialized_end=2275 - _globals['_MIGRATEROLEPERMISSIONSREQUEST_ROLEPERMISSIONSENTRY']._serialized_start=2169 - _globals['_MIGRATEROLEPERMISSIONSREQUEST_ROLEPERMISSIONSENTRY']._serialized_end=2275 - _globals['_MIGRATEROLEPERMISSIONSRESPONSE']._serialized_start=2278 - _globals['_MIGRATEROLEPERMISSIONSRESPONSE']._serialized_end=2608 - _globals['_MIGRATIONSERVICE']._serialized_start=2750 - _globals['_MIGRATIONSERVICE']._serialized_end=4045 + _globals['_FSADATATYPE']._serialized_start=2464 + _globals['_FSADATATYPE']._serialized_end=2600 + _globals['_MIGRATIONSERVICERESPONSE']._serialized_start=302 + _globals['_MIGRATIONSERVICERESPONSE']._serialized_end=428 + _globals['_MIGRATIONSAMLREQUEST']._serialized_start=430 + _globals['_MIGRATIONSAMLREQUEST']._serialized_end=532 + _globals['_MIGRATEFSAREQUEST']._serialized_start=535 + _globals['_MIGRATEFSAREQUEST']._serialized_end=708 + _globals['_MIGRATIONFSARESPONSE']._serialized_start=710 + _globals['_MIGRATIONFSARESPONSE']._serialized_end=832 + _globals['_MIGRATESTRIPECUSTOMERSREQUEST']._serialized_start=835 + _globals['_MIGRATESTRIPECUSTOMERSREQUEST']._serialized_end=980 + _globals['_MIGRATESTRIPECUSTOMERS']._serialized_start=983 + _globals['_MIGRATESTRIPECUSTOMERS']._serialized_end=1156 + _globals['_MIGRATESTRIPECUSTOMERSRESPONSE']._serialized_start=1159 + _globals['_MIGRATESTRIPECUSTOMERSRESPONSE']._serialized_end=1352 + _globals['_MIGRATIONSAMLRESPONSE']._serialized_start=1354 + _globals['_MIGRATIONSAMLRESPONSE']._serialized_end=1477 + _globals['_MIGRATEWORKSPACEFGAREQUEST']._serialized_start=1480 + _globals['_MIGRATEWORKSPACEFGAREQUEST']._serialized_end=1758 + _globals['_PERMISSIONLIST']._serialized_start=1760 + _globals['_PERMISSIONLIST']._serialized_end=1810 + _globals['_MIGRATEROLEPERMISSIONSREQUEST']._serialized_start=1813 + _globals['_MIGRATEROLEPERMISSIONSREQUEST']._serialized_end=2128 + _globals['_MIGRATEROLEPERMISSIONSREQUEST_ROLEPERMISSIONSENTRY']._serialized_start=2022 + _globals['_MIGRATEROLEPERMISSIONSREQUEST_ROLEPERMISSIONSENTRY']._serialized_end=2128 + _globals['_MIGRATEROLEPERMISSIONSRESPONSE']._serialized_start=2131 + _globals['_MIGRATEROLEPERMISSIONSRESPONSE']._serialized_end=2461 + _globals['_MIGRATIONSERVICE']._serialized_start=2603 + _globals['_MIGRATIONSERVICE']._serialized_end=3362 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/migrations/migrations_pb2.pyi b/scalekit/v1/migrations/migrations_pb2.pyi index 720a665..42ffaf4 100644 --- a/scalekit/v1/migrations/migrations_pb2.pyi +++ b/scalekit/v1/migrations/migrations_pb2.pyi @@ -24,18 +24,6 @@ FSA_DATA_TYPE_CONNECTION: FSADataType FSA_DATA_TYPE_SESSION: FSADataType FSA_DATA_TYPE_USER_MANAGEMENT: FSADataType -class MigrateEnvKeysRequest(_message.Message): - __slots__ = ("environment_ids",) - ENVIRONMENT_IDS_FIELD_NUMBER: _ClassVar[int] - environment_ids: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, environment_ids: _Optional[_Iterable[str]] = ...) -> None: ... - -class MigrateEnvKeysResponse(_message.Message): - __slots__ = ("environments_processed",) - ENVIRONMENTS_PROCESSED_FIELD_NUMBER: _ClassVar[int] - environments_processed: int - def __init__(self, environments_processed: _Optional[int] = ...) -> None: ... - class MigrationServiceResponse(_message.Message): __slots__ = ("success_environments", "failed_environments") SUCCESS_ENVIRONMENTS_FIELD_NUMBER: _ClassVar[int] diff --git a/scalekit/v1/migrations/migrations_pb2_grpc.py b/scalekit/v1/migrations/migrations_pb2_grpc.py index b039e15..d5b5796 100644 --- a/scalekit/v1/migrations/migrations_pb2_grpc.py +++ b/scalekit/v1/migrations/migrations_pb2_grpc.py @@ -35,11 +35,6 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateRolePermissionsRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateRolePermissionsResponse.FromString, ) - self.MigrateEnvKeys = channel.unary_unary( - '/scalekit.v1.migrations.MigrationService/MigrateEnvKeys', - request_serializer=scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateEnvKeysRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateEnvKeysResponse.FromString, - ) class MigrationServiceServicer(object): @@ -69,12 +64,6 @@ def MigrateRolePermissions(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') - def MigrateEnvKeys(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - def add_MigrationServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -98,11 +87,6 @@ def add_MigrationServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateRolePermissionsRequest.FromString, response_serializer=scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateRolePermissionsResponse.SerializeToString, ), - 'MigrateEnvKeys': grpc.unary_unary_rpc_method_handler( - servicer.MigrateEnvKeys, - request_deserializer=scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateEnvKeysRequest.FromString, - response_serializer=scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateEnvKeysResponse.SerializeToString, - ), } generic_handler = grpc.method_handlers_generic_handler( 'scalekit.v1.migrations.MigrationService', rpc_method_handlers) @@ -180,20 +164,3 @@ def MigrateRolePermissions(request, scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateRolePermissionsResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - @staticmethod - def MigrateEnvKeys(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.migrations.MigrationService/MigrateEnvKeys', - scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateEnvKeysRequest.SerializeToString, - scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateEnvKeysResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/options/options_pb2.py b/scalekit/v1/options/options_pb2.py index 0f7fe0f..02373b9 100644 --- a/scalekit/v1/options/options_pb2.py +++ b/scalekit/v1/options/options_pb2.py @@ -15,7 +15,7 @@ from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/options/options.proto\x12\x13scalekit.v1.options\x1a google/protobuf/descriptor.proto\"\xbd\x01\n\nAuthOption\x12X\n\x13\x61uthentication_type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.options.AuthenticationTypeR\x12\x61uthenticationType\x12 \n\x0bpermissions\x18\x01 \x03(\tR\x0bpermissions\x12\x33\n\x06policy\x18\x02 \x01(\x0e\x32\x1b.scalekit.v1.options.PolicyR\x06policy**\n\x06Policy\x12\x08\n\x04\x44\x45NY\x10\x00\x12\x0b\n\x07PARTIAL\x10\x01\x12\t\n\x05\x41LLOW\x10\x02*\xd5\x05\n\x12\x41uthenticationType\x12\x0b\n\x07\x42LOCKED\x10\x00\x12\x08\n\x04NONE\x10\x01\x12\r\n\tWORKSPACE\x10@\x12\x13\n\x0f\x43USTOMER_PORTAL\x10 \x12\x0b\n\x07SESSION\x10\x10\x12\x15\n\x11WORKSPACE_SESSION\x10P\x12\x14\n\x10WORKSPACE_CLIENT\x10\x44\x12%\n!WORKSPACE_SESSION_CUSTOMER_PORTAL\x10p\x12,\n(WORKSPACE_SESSION_CUSTOMER_PORTAL_CLIENT\x10t\x12$\n WORKSPACE_CUSTOMER_PORTAL_CLIENT\x10\x64\x12\x1d\n\x19WORKSPACE_CUSTOMER_PORTAL\x10`\x12\x08\n\x04USER\x10\x08\x12\n\n\x06\x43LIENT\x10\x04\x12\x12\n\x0eSESSION_CLIENT\x10\x14\x12\x1c\n\x18WORKSPACE_SESSION_CLIENT\x10T\x12\"\n\x1e\x43USTOMER_PORTAL_SESSION_CLIENT\x10\x34\x12\x10\n\x0cSESSION_USER\x10\x18\x12\x13\n\x0e\x41\x43TIONS_PORTAL\x10\x80\x01\x12\x35\n0WORKSPACE_SESSION_CUSTOMER_PORTAL_ACTIONS_PORTAL\x10\xf0\x01\x12<\n7WORKSPACE_SESSION_CUSTOMER_PORTAL_ACTIONS_PORTAL_CLIENT\x10\xf4\x01\x12\x1d\n\x18WORKSPACE_ACTIONS_PORTAL\x10\xc0\x01\x12$\n\x1fWORKSPACE_ACTIONS_PORTAL_CLIENT\x10\xc4\x01\x12\x34\n/WORKSPACE_ACTIONS_PORTAL_CUSTOMER_PORTAL_CLIENT\x10\xe4\x01\x12-\n(WORKSPACE_CUSTOMER_PORTAL_ACTIONS_PORTAL\x10\xe0\x01:b\n\x0b\x61uth_option\x12\x1e.google.protobuf.MethodOptions\x18\xd0\x86\x03 \x01(\x0b\x32\x1f.scalekit.v1.options.AuthOptionR\nauthOptionB6Z4github.com/scalekit-inc/scalekit/pkg/grpc/authoptionb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/options/options.proto\x12\x13scalekit.v1.options\x1a google/protobuf/descriptor.proto\"\xbd\x01\n\nAuthOption\x12X\n\x13\x61uthentication_type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.options.AuthenticationTypeR\x12\x61uthenticationType\x12 \n\x0bpermissions\x18\x01 \x03(\tR\x0bpermissions\x12\x33\n\x06policy\x18\x02 \x01(\x0e\x32\x1b.scalekit.v1.options.PolicyR\x06policy**\n\x06Policy\x12\x08\n\x04\x44\x45NY\x10\x00\x12\x0b\n\x07PARTIAL\x10\x01\x12\t\n\x05\x41LLOW\x10\x02*\x8f\x03\n\x12\x41uthenticationType\x12\x0b\n\x07\x42LOCKED\x10\x00\x12\x08\n\x04NONE\x10\x01\x12\r\n\tWORKSPACE\x10@\x12\x13\n\x0f\x43USTOMER_PORTAL\x10 \x12\x0b\n\x07SESSION\x10\x10\x12\x15\n\x11WORKSPACE_SESSION\x10P\x12\x14\n\x10WORKSPACE_CLIENT\x10\x44\x12%\n!WORKSPACE_SESSION_CUSTOMER_PORTAL\x10p\x12,\n(WORKSPACE_SESSION_CUSTOMER_PORTAL_CLIENT\x10t\x12$\n WORKSPACE_CUSTOMER_PORTAL_CLIENT\x10\x64\x12\x1d\n\x19WORKSPACE_CUSTOMER_PORTAL\x10`\x12\x08\n\x04USER\x10\x08\x12\n\n\x06\x43LIENT\x10\x04\x12\x12\n\x0eSESSION_CLIENT\x10\x14\x12\x1c\n\x18WORKSPACE_SESSION_CLIENT\x10T\x12\"\n\x1e\x43USTOMER_PORTAL_SESSION_CLIENT\x10\x34:b\n\x0b\x61uth_option\x12\x1e.google.protobuf.MethodOptions\x18\xd0\x86\x03 \x01(\x0b\x32\x1f.scalekit.v1.options.AuthOptionR\nauthOptionB6Z4github.com/scalekit-inc/scalekit/pkg/grpc/authoptionb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -26,7 +26,7 @@ _globals['_POLICY']._serialized_start=284 _globals['_POLICY']._serialized_end=326 _globals['_AUTHENTICATIONTYPE']._serialized_start=329 - _globals['_AUTHENTICATIONTYPE']._serialized_end=1054 + _globals['_AUTHENTICATIONTYPE']._serialized_end=728 _globals['_AUTHOPTION']._serialized_start=93 _globals['_AUTHOPTION']._serialized_end=282 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/options/options_pb2.pyi b/scalekit/v1/options/options_pb2.pyi index 2017e38..6f4fea7 100644 --- a/scalekit/v1/options/options_pb2.pyi +++ b/scalekit/v1/options/options_pb2.pyi @@ -31,14 +31,6 @@ class AuthenticationType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): SESSION_CLIENT: _ClassVar[AuthenticationType] WORKSPACE_SESSION_CLIENT: _ClassVar[AuthenticationType] CUSTOMER_PORTAL_SESSION_CLIENT: _ClassVar[AuthenticationType] - SESSION_USER: _ClassVar[AuthenticationType] - ACTIONS_PORTAL: _ClassVar[AuthenticationType] - WORKSPACE_SESSION_CUSTOMER_PORTAL_ACTIONS_PORTAL: _ClassVar[AuthenticationType] - WORKSPACE_SESSION_CUSTOMER_PORTAL_ACTIONS_PORTAL_CLIENT: _ClassVar[AuthenticationType] - WORKSPACE_ACTIONS_PORTAL: _ClassVar[AuthenticationType] - WORKSPACE_ACTIONS_PORTAL_CLIENT: _ClassVar[AuthenticationType] - WORKSPACE_ACTIONS_PORTAL_CUSTOMER_PORTAL_CLIENT: _ClassVar[AuthenticationType] - WORKSPACE_CUSTOMER_PORTAL_ACTIONS_PORTAL: _ClassVar[AuthenticationType] DENY: Policy PARTIAL: Policy ALLOW: Policy @@ -58,14 +50,6 @@ CLIENT: AuthenticationType SESSION_CLIENT: AuthenticationType WORKSPACE_SESSION_CLIENT: AuthenticationType CUSTOMER_PORTAL_SESSION_CLIENT: AuthenticationType -SESSION_USER: AuthenticationType -ACTIONS_PORTAL: AuthenticationType -WORKSPACE_SESSION_CUSTOMER_PORTAL_ACTIONS_PORTAL: AuthenticationType -WORKSPACE_SESSION_CUSTOMER_PORTAL_ACTIONS_PORTAL_CLIENT: AuthenticationType -WORKSPACE_ACTIONS_PORTAL: AuthenticationType -WORKSPACE_ACTIONS_PORTAL_CLIENT: AuthenticationType -WORKSPACE_ACTIONS_PORTAL_CUSTOMER_PORTAL_CLIENT: AuthenticationType -WORKSPACE_CUSTOMER_PORTAL_ACTIONS_PORTAL: AuthenticationType AUTH_OPTION_FIELD_NUMBER: _ClassVar[int] auth_option: _descriptor.FieldDescriptor diff --git a/scalekit/v1/providers/providers_pb2.py b/scalekit/v1/providers/providers_pb2.py index ecde0df..4dcb5cf 100644 --- a/scalekit/v1/providers/providers_pb2.py +++ b/scalekit/v1/providers/providers_pb2.py @@ -23,7 +23,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%scalekit/v1/providers/providers.proto\x12\x15scalekit.v1.providers\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\xf5\x04\n\x08Provider\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1e\n\nidentifier\x18\x02 \x01(\tR\nidentifier\x12!\n\x0c\x64isplay_name\x18\x03 \x01(\tR\x0b\x64isplayName\x12 \n\x0b\x64\x65scription\x18\x04 \x01(\tR\x0b\x64\x65scription\x12\x1e\n\ncategories\x18\x05 \x03(\tR\ncategories\x12?\n\rauth_patterns\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.ListValueR\x0c\x61uthPatterns\x12\x19\n\x08icon_src\x18\x07 \x01(\tR\x07iconSrc\x12)\n\x10\x64isplay_priority\x18\x08 \x01(\x05R\x0f\x64isplayPriority\x12\x1f\n\x0b\x63oming_soon\x18\t \x01(\x08R\ncomingSoon\x12\x1b\n\tproxy_url\x18\n \x01(\tR\x08proxyUrl\x12#\n\rproxy_enabled\x18\x0b \x01(\x08R\x0cproxyEnabled\x12o\n\tis_custom\x18\x0c \x01(\x08\x42R\x92\x41O2FIndicates whether the provider is environment-scoped (custom provider)J\x05\x66\x61lseR\x08isCustom\x12y\n\ris_custom_mcp\x18\r \x01(\x08\x42U\x92\x41R2IIndicates whether this is an environment-scoped MCP-based custom providerJ\x05\x66\x61lseR\x0bisCustomMcp\"\xf1\n\n\x0e\x43reateProvider\x12\xf7\x01\n\nidentifier\x18\x02 \x01(\tB\xd6\x01\x92\x41\xb4\x01\x32\x9d\x01Unique identifier for the connected app provider. Spaces are not allowed, and the character : is reserved for internal suffixing and cannot be used in input.J\x12\"google_workspace\"\xbaH\x1br\x16\x10\x01\x18\x64\x32\x10^[a-zA-Z0-9_-]*$\xc8\x01\x01R\nidentifier\x12t\n\x0c\x64isplay_name\x18\x03 \x01(\tBQ\x92\x41\x41\x32+Display name for the connected app providerJ\x12\"Google Workspace\"\xbaH\nr\x05\x10\x01\x18\xc8\x01\xc8\x01\x01R\x0b\x64isplayName\x12\x92\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tBp\x92\x41m2)Description of the connected app providerJ@\"Connect to Google Workspace for email and calendar integration\"R\x0b\x64\x65scription\x12i\n\ncategories\x18\x05 \x03(\tBI\x92\x41\x46\x32)Categories for the connected app providerJ\x19[\"productivity\", \"email\"]R\ncategories\x12\x82\x01\n\rauth_patterns\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.ListValueBA\x92\x41\x38\x32\x36\x41uthentication patterns for the connected app provider\xbaH\x03\xc8\x01\x01R\x0c\x61uthPatterns\x12\x82\x01\n\x08icon_src\x18\x07 \x01(\tBg\x92\x41\x64\x32/Image source URL for the connected app providerJ1\"https://example.com/images/google_workspace.png\"R\x07iconSrc\x12)\n\x10\x64isplay_priority\x18\x08 \x01(\x05R\x0f\x64isplayPriority\x12\x63\n\x0b\x63oming_soon\x18\t \x01(\x08\x42\x42\x92\x41?26Indicates if the connected app provider is coming soonJ\x05\x66\x61lseR\ncomingSoon\x12k\n\tproxy_url\x18\n \x01(\tBN\x92\x41K2(Proxy URL for the connected app providerJ\x1f\"https://workspace.google.com/\"R\x08proxyUrl\x12\xe1\x01\n\rproxy_enabled\x18\x0b \x01(\x08\x42\xbb\x01\x92\x41\xb7\x01\x32\xae\x01This flag indicates whether proxying is turned on for the connected app provider. When enabled, requests are routed through the provider proxy instead of being sent directly.J\x04trueR\x0cproxyEnabledJ\x04\x08\x01\x10\x02\"\x96\x01\n\x15\x43reateProviderRequest\x12}\n\x08provider\x18\x01 \x01(\x0b\x32%.scalekit.v1.providers.CreateProviderB:\x92\x41\x31\x32/Details of the connected app provider to create\xbaH\x03\xc8\x01\x01R\x08provider\"\xb3\x08\n\x14\x43reateCustomProvider\x12\x9d\x01\n\x0c\x64isplay_name\x18\x01 \x01(\tBz\x92\x41\x41\x32+Display name for the connected app providerJ\x12\"Google Workspace\"\xbaH3r.\x10\x01\x18\xc8\x01\x32\'^[a-zA-Z0-9 ]*[a-zA-Z0-9][a-zA-Z0-9 ]*$\xc8\x01\x01R\x0b\x64isplayName\x12\x92\x01\n\x0b\x64\x65scription\x18\x02 \x01(\tBp\x92\x41m2)Description of the connected app providerJ@\"Connect to Google Workspace for email and calendar integration\"R\x0b\x64\x65scription\x12\x82\x01\n\rauth_patterns\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.ListValueBA\x92\x41\x38\x32\x36\x41uthentication patterns for the connected app provider\xbaH\x03\xc8\x01\x01R\x0c\x61uthPatterns\x12\x98\x01\n\tproxy_url\x18\x07 \x01(\tB{\x92\x41\x63\x32\x42Proxy URL for the connected app provider. Must start with https://J\x1d\"https://mcp.example.com/mcp\"\xbaH\x12r\x10\x10\x01\x18\x80\x10\x32\t^https://R\x08proxyUrl\x12\xe1\x01\n\rproxy_enabled\x18\x08 \x01(\x08\x42\xbb\x01\x92\x41\xb7\x01\x32\xae\x01This flag indicates whether proxying is turned on for the connected app provider. When enabled, requests are routed through the provider proxy instead of being sent directly.J\x04trueR\x0cproxyEnabled\x12\xcf\x01\n\x08icon_src\x18\t \x01(\tB\xb3\x01\x92\x41\x96\x01\x32\x65URL for the provider icon. Should be an SVG image sized 800x800 pixels for best rendering experience.J-\"https://example.com/images/my-connector.svg\"\xbaH\x16r\x14\x18\x80\x10\x32\x0f^(https://.*)?$R\x07iconSrcJ\x04\x08\x03\x10\x04J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07\"\xad\x02\n\x1b\x43reateCustomProviderRequest\x12\x8d\x02\n\x08provider\x18\x01 \x01(\x0b\x32+.scalekit.v1.providers.CreateCustomProviderB\xc3\x01\x92\x41\xb9\x01\x32\xb6\x01\x44\x65tails of the custom connected app provider to create. Identifier is derived by the system and the identifier returned in the response must be used for update and delete operations.\xbaH\x03\xc8\x01\x01R\x08provider\"U\n\x16\x43reateProviderResponse\x12;\n\x08provider\x18\x01 \x01(\x0b\x32\x1f.scalekit.v1.providers.ProviderR\x08provider\"\xb9\x08\n\x0eUpdateProvider\x12t\n\x0c\x64isplay_name\x18\x03 \x01(\tBQ\x92\x41\x41\x32+Display name for the connected app providerJ\x12\"Google Workspace\"\xbaH\nr\x05\x10\x01\x18\xc8\x01\xc8\x01\x01R\x0b\x64isplayName\x12\x92\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tBp\x92\x41m2)Description of the connected app providerJ@\"Connect to Google Workspace for email and calendar integration\"R\x0b\x64\x65scription\x12i\n\ncategories\x18\x05 \x03(\tBI\x92\x41\x46\x32)Categories for the connected app providerJ\x19[\"productivity\", \"email\"]R\ncategories\x12|\n\rauth_patterns\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.ListValueB;\x92\x41\x38\x32\x36\x41uthentication patterns for the connected app providerR\x0c\x61uthPatterns\x12\x82\x01\n\x08icon_src\x18\x07 \x01(\tBg\x92\x41\x64\x32/Image source URL for the connected app providerJ1\"https://example.com/images/google_workspace.png\"R\x07iconSrc\x12)\n\x10\x64isplay_priority\x18\x08 \x01(\x05R\x0f\x64isplayPriority\x12\x7f\n\x0b\x63oming_soon\x18\t \x01(\x0b\x32\x1a.google.protobuf.BoolValueBB\x92\x41?26Indicates if the connected app provider is coming soonJ\x05\x66\x61lseR\ncomingSoon\x12k\n\tproxy_url\x18\n \x01(\tBN\x92\x41K2(Proxy URL for the connected app providerJ\x1f\"https://workspace.google.com/\"R\x08proxyUrl\x12\x88\x01\n\rproxy_enabled\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.BoolValueBG\x92\x41\x44\x32 None: ... + def __init__(self, id: _Optional[str] = ..., identifier: _Optional[str] = ..., display_name: _Optional[str] = ..., description: _Optional[str] = ..., categories: _Optional[_Iterable[str]] = ..., auth_patterns: _Optional[_Union[_struct_pb2.ListValue, _Mapping]] = ..., icon_src: _Optional[str] = ..., display_priority: _Optional[int] = ..., coming_soon: bool = ..., proxy_url: _Optional[str] = ..., proxy_enabled: bool = ...) -> None: ... class CreateProvider(_message.Message): __slots__ = ("identifier", "display_name", "description", "categories", "auth_patterns", "icon_src", "display_priority", "coming_soon", "proxy_url", "proxy_enabled") @@ -84,28 +70,6 @@ class CreateProviderRequest(_message.Message): provider: CreateProvider def __init__(self, provider: _Optional[_Union[CreateProvider, _Mapping]] = ...) -> None: ... -class CreateCustomProvider(_message.Message): - __slots__ = ("display_name", "description", "auth_patterns", "proxy_url", "proxy_enabled", "icon_src") - DISPLAY_NAME_FIELD_NUMBER: _ClassVar[int] - DESCRIPTION_FIELD_NUMBER: _ClassVar[int] - AUTH_PATTERNS_FIELD_NUMBER: _ClassVar[int] - PROXY_URL_FIELD_NUMBER: _ClassVar[int] - PROXY_ENABLED_FIELD_NUMBER: _ClassVar[int] - ICON_SRC_FIELD_NUMBER: _ClassVar[int] - display_name: str - description: str - auth_patterns: _struct_pb2.ListValue - proxy_url: str - proxy_enabled: bool - icon_src: str - def __init__(self, display_name: _Optional[str] = ..., description: _Optional[str] = ..., auth_patterns: _Optional[_Union[_struct_pb2.ListValue, _Mapping]] = ..., proxy_url: _Optional[str] = ..., proxy_enabled: bool = ..., icon_src: _Optional[str] = ...) -> None: ... - -class CreateCustomProviderRequest(_message.Message): - __slots__ = ("provider",) - PROVIDER_FIELD_NUMBER: _ClassVar[int] - provider: CreateCustomProvider - def __init__(self, provider: _Optional[_Union[CreateCustomProvider, _Mapping]] = ...) -> None: ... - class CreateProviderResponse(_message.Message): __slots__ = ("provider",) PROVIDER_FIELD_NUMBER: _ClassVar[int] @@ -142,30 +106,6 @@ class UpdateProviderRequest(_message.Message): provider: UpdateProvider def __init__(self, identifier: _Optional[str] = ..., provider: _Optional[_Union[UpdateProvider, _Mapping]] = ...) -> None: ... -class UpdateCustomProvider(_message.Message): - __slots__ = ("display_name", "description", "auth_patterns", "proxy_url", "proxy_enabled", "icon_src") - DISPLAY_NAME_FIELD_NUMBER: _ClassVar[int] - DESCRIPTION_FIELD_NUMBER: _ClassVar[int] - AUTH_PATTERNS_FIELD_NUMBER: _ClassVar[int] - PROXY_URL_FIELD_NUMBER: _ClassVar[int] - PROXY_ENABLED_FIELD_NUMBER: _ClassVar[int] - ICON_SRC_FIELD_NUMBER: _ClassVar[int] - display_name: str - description: str - auth_patterns: _struct_pb2.ListValue - proxy_url: str - proxy_enabled: bool - icon_src: str - def __init__(self, display_name: _Optional[str] = ..., description: _Optional[str] = ..., auth_patterns: _Optional[_Union[_struct_pb2.ListValue, _Mapping]] = ..., proxy_url: _Optional[str] = ..., proxy_enabled: bool = ..., icon_src: _Optional[str] = ...) -> None: ... - -class UpdateCustomProviderRequest(_message.Message): - __slots__ = ("identifier", "provider") - IDENTIFIER_FIELD_NUMBER: _ClassVar[int] - PROVIDER_FIELD_NUMBER: _ClassVar[int] - identifier: str - provider: UpdateCustomProvider - def __init__(self, identifier: _Optional[str] = ..., provider: _Optional[_Union[UpdateCustomProvider, _Mapping]] = ...) -> None: ... - class UpdateProviderResponse(_message.Message): __slots__ = ("provider",) PROVIDER_FIELD_NUMBER: _ClassVar[int] @@ -173,21 +113,14 @@ class UpdateProviderResponse(_message.Message): def __init__(self, provider: _Optional[_Union[Provider, _Mapping]] = ...) -> None: ... class ListProvidersRequest(_message.Message): - __slots__ = ("identifier", "page_size", "page_token", "filter") - class Filter(_message.Message): - __slots__ = ("provider_type",) - PROVIDER_TYPE_FIELD_NUMBER: _ClassVar[int] - provider_type: ProviderType - def __init__(self, provider_type: _Optional[_Union[ProviderType, str]] = ...) -> None: ... + __slots__ = ("identifier", "page_size", "page_token") IDENTIFIER_FIELD_NUMBER: _ClassVar[int] PAGE_SIZE_FIELD_NUMBER: _ClassVar[int] PAGE_TOKEN_FIELD_NUMBER: _ClassVar[int] - FILTER_FIELD_NUMBER: _ClassVar[int] identifier: str page_size: int page_token: str - filter: ListProvidersRequest.Filter - def __init__(self, identifier: _Optional[str] = ..., page_size: _Optional[int] = ..., page_token: _Optional[str] = ..., filter: _Optional[_Union[ListProvidersRequest.Filter, _Mapping]] = ...) -> None: ... + def __init__(self, identifier: _Optional[str] = ..., page_size: _Optional[int] = ..., page_token: _Optional[str] = ...) -> None: ... class ListProvidersResponse(_message.Message): __slots__ = ("providers", "next_page_token", "total_size", "prev_page_token") diff --git a/scalekit/v1/providers/providers_pb2_grpc.py b/scalekit/v1/providers/providers_pb2_grpc.py index a64aa76..2e78b3c 100644 --- a/scalekit/v1/providers/providers_pb2_grpc.py +++ b/scalekit/v1/providers/providers_pb2_grpc.py @@ -20,31 +20,16 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateProviderRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateProviderResponse.FromString, ) - self.CreateCustomProvider = channel.unary_unary( - '/scalekit.v1.providers.ProviderService/CreateCustomProvider', - request_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateCustomProviderRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateProviderResponse.FromString, - ) self.UpdateProvider = channel.unary_unary( '/scalekit.v1.providers.ProviderService/UpdateProvider', request_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateProviderRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateProviderResponse.FromString, ) - self.UpdateCustomProvider = channel.unary_unary( - '/scalekit.v1.providers.ProviderService/UpdateCustomProvider', - request_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateCustomProviderRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateProviderResponse.FromString, - ) self.DeleteProvider = channel.unary_unary( '/scalekit.v1.providers.ProviderService/DeleteProvider', request_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderResponse.FromString, ) - self.DeleteCustomProvider = channel.unary_unary( - '/scalekit.v1.providers.ProviderService/DeleteCustomProvider', - request_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderResponse.FromString, - ) self.ListProviders = channel.unary_unary( '/scalekit.v1.providers.ProviderService/ListProviders', request_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.ListProvidersRequest.SerializeToString, @@ -62,36 +47,18 @@ def CreateProvider(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') - def CreateCustomProvider(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - def UpdateProvider(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') - def UpdateCustomProvider(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - def DeleteProvider(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') - def DeleteCustomProvider(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - def ListProviders(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -106,31 +73,16 @@ def add_ProviderServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateProviderRequest.FromString, response_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateProviderResponse.SerializeToString, ), - 'CreateCustomProvider': grpc.unary_unary_rpc_method_handler( - servicer.CreateCustomProvider, - request_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateCustomProviderRequest.FromString, - response_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateProviderResponse.SerializeToString, - ), 'UpdateProvider': grpc.unary_unary_rpc_method_handler( servicer.UpdateProvider, request_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateProviderRequest.FromString, response_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateProviderResponse.SerializeToString, ), - 'UpdateCustomProvider': grpc.unary_unary_rpc_method_handler( - servicer.UpdateCustomProvider, - request_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateCustomProviderRequest.FromString, - response_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateProviderResponse.SerializeToString, - ), 'DeleteProvider': grpc.unary_unary_rpc_method_handler( servicer.DeleteProvider, request_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderRequest.FromString, response_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderResponse.SerializeToString, ), - 'DeleteCustomProvider': grpc.unary_unary_rpc_method_handler( - servicer.DeleteCustomProvider, - request_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderRequest.FromString, - response_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderResponse.SerializeToString, - ), 'ListProviders': grpc.unary_unary_rpc_method_handler( servicer.ListProviders, request_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.ListProvidersRequest.FromString, @@ -164,23 +116,6 @@ def CreateProvider(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - @staticmethod - def CreateCustomProvider(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.providers.ProviderService/CreateCustomProvider', - scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateCustomProviderRequest.SerializeToString, - scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateProviderResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - @staticmethod def UpdateProvider(request, target, @@ -198,23 +133,6 @@ def UpdateProvider(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - @staticmethod - def UpdateCustomProvider(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.providers.ProviderService/UpdateCustomProvider', - scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateCustomProviderRequest.SerializeToString, - scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateProviderResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - @staticmethod def DeleteProvider(request, target, @@ -232,23 +150,6 @@ def DeleteProvider(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - @staticmethod - def DeleteCustomProvider(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.providers.ProviderService/DeleteCustomProvider', - scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderRequest.SerializeToString, - scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - @staticmethod def ListProviders(request, target, diff --git a/scalekit/v1/roles/roles_pb2.py b/scalekit/v1/roles/roles_pb2.py index f0dc7e0..1520db7 100644 --- a/scalekit/v1/roles/roles_pb2.py +++ b/scalekit/v1/roles/roles_pb2.py @@ -26,7 +26,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dscalekit/v1/roles/roles.proto\x12\x11scalekit.v1.roles\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"\x8b\r\n\x04Role\x12y\n\x02id\x18\x01 \x01(\tBi\x92\x41\x63\x32HUnique system-generated identifier for the role. Immutable once created.J\x17\"role_1234abcd5678efgh\"\xe0\x41\x03R\x02id\x12\x95\x01\n\x04name\x18\x02 \x01(\tB\x80\x01\x92\x41q2]Unique name identifier for the role. Must be alphanumeric with underscores, 1-100 characters.J\x10\"content_editor\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x04name\x12\x94\x01\n\x0c\x64isplay_name\x18\x03 \x01(\tBq\x92\x41\x62\x32NHuman-readable display name for the role. Used in user interfaces and reports.J\x10\"Content Editor\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x0b\x64isplayName\x12\xc9\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tB\xa6\x01\x92\x41\xa2\x01\x32UDetailed description of the role\'s purpose and capabilities. Maximum 2000 characters.JI\"Can create, edit, and publish content but cannot delete or manage users\"R\x0b\x64\x65scription\x12}\n\x0f\x64\x65\x66\x61ult_creator\x18\x06 \x01(\x08\x42T\x92\x41Q2IIndicates if this role is the default creator role for new organizations.J\x04trueR\x0e\x64\x65\x66\x61ultCreator\x12r\n\x0e\x64\x65\x66\x61ult_member\x18\x07 \x01(\x08\x42K\x92\x41H2@Indicates if this role is the default member role for new users.J\x04trueR\rdefaultMember\x12\xa6\x01\n\x07\x65xtends\x18\x08 \x01(\tB\x86\x01\x92\x41\x64\x32TName of the base role that this role extends. Enables hierarchical role inheritance.J\x0c\"admin_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x07\x65xtends\x88\x01\x01\x12\xef\x02\n\x0bpermissions\x18\t \x03(\x0b\x32!.scalekit.v1.roles.RolePermissionB\xa9\x02\x92\x41\xa5\x02\x32uList of permissions with role source information. Only included when \'include\' parameter is specified in the request.J\xab\x01[{\"name\": \"read:content\", \"description\": \"Read Content\", \"role_name\": \"admin_role\"}, {\"name\": \"write:content\", \"description\": \"Write Content\", \"role_name\": \"editor_role\"}]R\x0bpermissions\x12\x90\x01\n\x15\x64\x65pendent_roles_count\x18\n \x01(\x05\x42\\\x92\x41Y2TNumber of roles that extend from this role (dependent roles count). Read-only field.J\x01\x33R\x13\x64\x65pendentRolesCount\x12Z\n\x0bis_org_role\x18\x0b \x01(\x08\x42:\x92\x41\x37\x32/Indicates if this role is an organization role.J\x04trueR\tisOrgRoleB\n\n\x08_extendsJ\x04\x08\x05\x10\x06\"\xce\t\n\nCreateRole\x12\xf1\x01\n\x04name\x18\x02 \x01(\tB\xdc\x01\x92\x41\xb6\x01\x32\xa1\x01Unique name identifier for the role. Must be alphanumeric with underscores, 1-64 characters. This name is used in API calls and cannot be changed after creation.J\x10\"content_editor\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x04name\x12\xb2\x01\n\x0c\x64isplay_name\x18\x03 \x01(\tB\x8e\x01\x92\x41\x7f\x32kHuman-readable display name for the role. Used in user interfaces, reports, and user-facing communications.J\x10\"Content Editor\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x0b\x64isplayName\x12\xfb\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tB\xd3\x01\x92\x41\xc7\x01\x32jDetailed description of the role\'s purpose, capabilities, and intended use cases. Maximum 2000 characters.JY\"Can create, edit, and publish content but cannot delete content or manage user accounts\"\xbaH\x05r\x03\x18\xd0\x0fH\x00R\x0b\x64\x65scription\x88\x01\x01\x12\xe0\x01\n\x07\x65xtends\x18\x08 \x01(\tB\xc0\x01\x92\x41\x9d\x01\x32\x90\x01Name of the base role that this role extends. Enables hierarchical role inheritance where this role inherits all permissions from the base role.J\x08\"viewer\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x01R\x07\x65xtends\x88\x01\x01\x12\x87\x02\n\x0bpermissions\x18\t \x03(\tB\xe4\x01\x92\x41\xbe\x01\x32\x85\x01List of permission names to assign to this role. Permissions must exist in the current environment. Maximum 100 permissions per role.J4[\"read:content\", \"write:content\", \"publish:content\"]\xbaH\x1f\x92\x01\x1c\x10\x64\"\x18r\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$R\x0bpermissionsB\x0e\n\x0c_descriptionB\n\n\x08_extendsJ\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08\"\xa4\x06\n\x16\x43reateOrganizationRole\x12t\n\x04name\x18\x02 \x01(\tB`\x92\x41;2&Unique name of the organization\'s roleJ\x11\"org_viewer_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x04name\x12w\n\x0c\x64isplay_name\x18\x03 \x01(\tBT\x92\x41\x45\x32\'Display name of the organization\'s roleJ\x1a\"Organization Viewer Role\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x0b\x64isplayName\x12\xa0\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tBy\x92\x41n2&Description of the organization\'s roleJD\"Organization Viewer Role will be used only for viewing the objects\"\xbaH\x05r\x03\x18\xd0\x0fH\x00R\x0b\x64\x65scription\x88\x01\x01\x12v\n\x07\x65xtends\x18\x08 \x01(\tBW\x92\x41\x35\x32%Base role name for hierarchical rolesJ\x0c\"admin_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x01R\x07\x65xtends\x88\x01\x01\x12\xd1\x01\n\x0bpermissions\x18\t \x03(\tB\xae\x01\x92\x41\x88\x01\x32\x63List of permission names to assign to this role. Permissions must exist in the current environment.J![\"read:users\", \"write:documents\"]\xbaH\x1f\x92\x01\x1c\x10\x64\"\x18r\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$R\x0bpermissionsB\x0e\n\x0c_descriptionB\n\n\x08_extendsJ\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08\"\xdc\x02\n\x11\x43reateRoleRequest\x12\xc0\x02\n\x04role\x18\x02 \x01(\x0b\x32\x1d.scalekit.v1.roles.CreateRoleB\x8c\x02\x92\x41\x82\x02\x32lRole configuration details including name, display name, description, permissions, and inheritance settings.J\x91\x01{\"name\": \"content_editor\", \"display_name\": \"Content Editor\", \"description\": \"Can edit content\", \"permissions\": [\"read:content\", \"write:content\"]}\xbaH\x03\xc8\x01\x01R\x04roleJ\x04\x08\x01\x10\x02\"\x9a\x02\n\x12\x43reateRoleResponse\x12\x83\x02\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\xd5\x01\x92\x41\xd1\x01\x32OThe created role object with system-generated ID and all configuration details.J~{\"id\": \"role_1234abcd5678efgh\", \"name\": \"content_editor\", \"display_name\": \"Content Editor\", \"description\": \"Can edit content\"}R\x04role\"\xe7\x03\n\x0eGetRoleRequest\x12\xbe\x01\n\trole_name\x18\x02 \x01(\tB\xa0\x01\x92\x41{2gUnique name identifier of the role to retrieve. Must be alphanumeric with underscores, 1-64 characters.J\x10\"content_editor\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\x81\x02\n\x07include\x18\x03 \x01(\tB\xe1\x01\x92\x41\xb8\x01\x32\xa6\x01Include additional data in the response. Valid values: \'permissions\' (direct permissions only), \'permissions:all\' (includes inherited permissions from role hierarchy)J\r\"permissions\"\xbaH\"r R\x00R\x0bpermissionsR\x0fpermissions:allH\x00R\x07include\x88\x01\x01\x42\n\n\x08_includeJ\x04\x08\x01\x10\x02\"\xbe\x02\n\x0fGetRoleResponse\x12\xaa\x02\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\xfc\x01\x92\x41\xf8\x01\x32QThe complete role object with all metadata, permissions, and inheritance details.J\xa2\x01{\"id\": \"role_1234abcd5678efgh\", \"name\": \"content_editor\", \"display_name\": \"Content Editor\", \"permissions\": [{\"name\": \"read:content\"}], \"dependent_roles_count\": 2}R\x04role\"\xa8\x02\n\x10ListRolesRequest\x12\x81\x02\n\x07include\x18\x02 \x01(\tB\xe1\x01\x92\x41\xb8\x01\x32\xa6\x01Include additional data in the response. Valid values: \'permissions\' (direct permissions only), \'permissions:all\' (includes inherited permissions from role hierarchy)J\r\"permissions\"\xbaH\"r R\x00R\x0bpermissionsR\x0fpermissions:allH\x00R\x07include\x88\x01\x01\x42\n\n\x08_includeJ\x04\x08\x01\x10\x02\"\xc9\x02\n\x11ListRolesResponse\x12\xb3\x02\n\x05roles\x18\x01 \x03(\x0b\x32\x17.scalekit.v1.roles.RoleB\x83\x02\x92\x41\xff\x01\x32ZList of all roles in the environment with their metadata and optionally their permissions.J\xa0\x01[{\"id\": \"role_1234abcd5678efgh\", \"name\": \"admin\", \"display_name\": \"Administrator\"}, {\"id\": \"role_9876zyxw5432vuts\", \"name\": \"viewer\", \"display_name\": \"Viewer\"}]R\x05roles\"\xdd\x08\n\nUpdateRole\x12\xbc\x01\n\x0c\x64isplay_name\x18\x01 \x01(\tB\x93\x01\x92\x41\x86\x01\x32kHuman-readable display name for the role. Used in user interfaces, reports, and user-facing communications.J\x17\"Senior Content Editor\"\xbaH\x06r\x04\x10\x01\x18\x64H\x00R\x0b\x64isplayName\x88\x01\x01\x12\x84\x02\n\x0b\x64\x65scription\x18\x02 \x01(\tB\xdc\x01\x92\x41\xce\x01\x32jDetailed description of the role\'s purpose, capabilities, and intended use cases. Maximum 2000 characters.J`\"Can create, edit, publish, and approve content. Cannot delete content or manage user accounts.\"\xbaH\x07r\x05\x10\x01\x18\xd0\x0fH\x01R\x0b\x64\x65scription\x88\x01\x01\x12\xe8\x01\n\x07\x65xtends\x18\x06 \x01(\tB\xc8\x01\x92\x41\xa5\x01\x32\x90\x01Name of the base role that this role extends. Enables hierarchical role inheritance where this role inherits all permissions from the base role.J\x10\"content_editor\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x02R\x07\x65xtends\x88\x01\x01\x12\xde\x02\n\x0bpermissions\x18\x07 \x03(\tB\xbb\x02\x92\x41\x95\x02\x32\xc9\x01List of permission names to assign to this role. When provided, this replaces all existing role-permission mappings. Permissions must exist in the current environment. Maximum 100 permissions per role.JG[\"read:content\", \"write:content\", \"publish:content\", \"approve:content\"]\xbaH\x1f\x92\x01\x1c\x10\x64\"\x18r\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$R\x0bpermissionsB\x0f\n\r_display_nameB\x0e\n\x0c_descriptionB\n\n\x08_extendsJ\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06\"\xab\x03\n\x11UpdateRoleRequest\x12\xbc\x01\n\trole_name\x18\x02 \x01(\tB\x9e\x01\x92\x41y2eUnique name identifier of the role to update. Must be alphanumeric with underscores, 1-64 characters.J\x10\"content_editor\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\xd0\x01\n\x04role\x18\x03 \x01(\x0b\x32\x1d.scalekit.v1.roles.UpdateRoleB\x9c\x01\x92\x41\x92\x01\x32>Role fields to update. Only specified fields will be modified.JP{\"display_name\": \"Senior Editor\", \"description\": \"Can edit and approve content\"}\xbaH\x03\xc8\x01\x01R\x04roleJ\x04\x08\x01\x10\x02\"\x96\x02\n\x12UpdateRoleResponse\x12\xff\x01\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\xd1\x01\x92\x41\xcd\x01\x32?The updated role object with all current configuration details.J\x89\x01{\"id\": \"role_1234abcd5678efgh\", \"name\": \"content_editor\", \"display_name\": \"Senior Editor\", \"description\": \"Can edit and approve content\"}R\x04role\"\xba\x04\n\x11\x44\x65leteRoleRequest\x12\xb6\x01\n\trole_name\x18\x02 \x01(\tB\x98\x01\x92\x41s2eUnique name identifier of the role to delete. Must be alphanumeric with underscores, 1-64 characters.J\n\"old_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\x9a\x01\n\x10reassign_role_id\x18\x03 \x01(\tBk\x18\x01\x92\x41G26Role name to reassign users to when deleting this roleJ\r\"member_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x0ereassignRoleId\x88\x01\x01\x12\x9c\x01\n\x12reassign_role_name\x18\x04 \x01(\tBi\x92\x41G26Role name to reassign users to when deleting this roleJ\r\"member_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x01R\x10reassignRoleName\x88\x01\x01\x42\x13\n\x11_reassign_role_idB\x15\n\x13_reassign_role_nameJ\x04\x08\x01\x10\x02\"\xec\x01\n\x1d\x43reateOrganizationRoleRequest\x12\x66\n\x06org_id\x18\x01 \x01(\tBO\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12\x63\n\x04role\x18\x02 \x01(\x0b\x32).scalekit.v1.roles.CreateOrganizationRoleB$\x92\x41\x1b\x32\x19Organization role details\xbaH\x03\xc8\x01\x01R\x04role\"M\n\x1e\x43reateOrganizationRoleResponse\x12+\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleR\x04role\"\xeb\x03\n\x1aGetOrganizationRoleRequest\x12\x66\n\x06org_id\x18\x01 \x01(\tBO\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12i\n\trole_name\x18\x02 \x01(\tBL\x92\x41\'2\x17Unique name of the roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\xed\x01\n\x07include\x18\x03 \x01(\tB\xcd\x01\x92\x41\xa4\x01\x32\x92\x01Include additional data in the response. Valid values: \'permissions\' (direct permissions only), \'permissions:all\' (includes inherited permissions)J\r\"permissions\"\xbaH\"r R\x00R\x0bpermissionsR\x0fpermissions:allH\x00R\x07include\x88\x01\x01\x42\n\n\x08_include\"J\n\x1bGetOrganizationRoleResponse\x12+\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleR\x04role\"\xe2\x04\n\x1cListOrganizationRolesRequest\x12i\n\x06org_id\x18\x01 \x01(\tBR\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0er\t\x10\x01\x18 :\x03org\xc8\x01\x01R\x05orgId\x12\xed\x01\n\x07include\x18\x02 \x01(\tB\xcd\x01\x92\x41\xa4\x01\x32\x92\x01Include additional data in the response. Valid values: \'permissions\' (direct permissions only), \'permissions:all\' (includes inherited permissions)J\r\"permissions\"\xbaH\"r R\x00R\x0bpermissionsR\x0fpermissions:allH\x00R\x07include\x88\x01\x01:\xda\x01\x92\x41\xd6\x01\n\xb0\x01*\x17List organization roles2\x8b\x01Retrieves a paginated list of all roles within the organization. Use the page_token from the response to access subsequent pages of results\xd2\x01\x06org_id2!{\"org_id\" : \"org_8756865685762\" }B\n\n\x08_include\"j\n\x1dListOrganizationRolesResponse\x12I\n\x05roles\x18\x01 \x03(\x0b\x32\x17.scalekit.v1.roles.RoleB\x1a\x92\x41\x17\x32\x15List of roles objectsR\x05roles\"\xcb\x02\n\x1dUpdateOrganizationRoleRequest\x12\x66\n\x06org_id\x18\x01 \x01(\tBO\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12i\n\trole_name\x18\x02 \x01(\tBL\x92\x41\'2\x17Unique name of the roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12W\n\x04role\x18\x03 \x01(\x0b\x32\x1d.scalekit.v1.roles.UpdateRoleB$\x92\x41\x1b\x32\x19Organization role details\xbaH\x03\xc8\x01\x01R\x04role\"M\n\x1eUpdateOrganizationRoleResponse\x12+\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleR\x04role\"\xa8\x03\n\x1d\x44\x65leteOrganizationRoleRequest\x12\x66\n\x06org_id\x18\x01 \x01(\tBO\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12i\n\trole_name\x18\x02 \x01(\tBL\x92\x41\'2\x17Unique name of the roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\x9c\x01\n\x12reassign_role_name\x18\x03 \x01(\tBi\x92\x41G26Role name to reassign users to when deleting this roleJ\r\"member_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x10reassignRoleName\x88\x01\x01\x42\x15\n\x13_reassign_role_name\"\x8b\x01\n\x18GetRoleUsersCountRequest\x12i\n\trole_name\x18\x02 \x01(\tBL\x92\x41\'2\x17Unique name of the roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleNameJ\x04\x08\x01\x10\x02\"k\n\x19GetRoleUsersCountResponse\x12N\n\x05\x63ount\x18\x01 \x01(\x03\x42\x38\x92\x41.2(Number of users associated with the roleJ\x02\x31\x30\xbaH\x04\x1a\x02 \x00R\x05\x63ount\"\xff\x01\n$GetOrganizationRoleUsersCountRequest\x12_\n\x06org_id\x18\x01 \x01(\tBH\x92\x41\x39\x32%Unique identifier of the organizationJ\x10\"org_1234567890\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x05orgId\x12v\n\trole_name\x18\x02 \x01(\tBY\x92\x41\x34\x32$Unique name of the organization roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\"\x83\x01\n%GetOrganizationRoleUsersCountResponse\x12Z\n\x05\x63ount\x18\x01 \x01(\x03\x42\x44\x92\x41:25Number of users associated with the organization roleJ\x01\x35\xbaH\x04\x1a\x02 \x00R\x05\x63ount\"\xf0\t\n\x19UpdateDefaultRolesRequest\x12\x9e\x02\n\x0f\x64\x65\x66\x61ult_creator\x18\x02 \x01(\x0b\x32$.scalekit.v1.roles.UpdateDefaultRoleB\xce\x01\x18\x01\x92\x41\xc8\x01\x32JDefault creator role (deprecated - use default_creator_role field instead)Jz{\"id\": \"role_1234567890\", \"name\": \"creator\", \"display_name\": \"Creator Role\", \"description\": \"Role for creating resources\"}R\x0e\x64\x65\x66\x61ultCreator\x12\x95\x02\n\x0e\x64\x65\x66\x61ult_member\x18\x03 \x01(\x0b\x32$.scalekit.v1.roles.UpdateDefaultRoleB\xc7\x01\x18\x01\x92\x41\xc1\x01\x32HDefault member role (deprecated - use default_member_role field instead)Ju{\"id\": \"role_0987654321\", \"name\": \"member\", \"display_name\": \"Member Role\", \"description\": \"Role for regular members\"}R\rdefaultMember\x12\xb6\x02\n\x14\x64\x65\x66\x61ult_creator_role\x18\x04 \x01(\tB\xfe\x01\x92\x41\xdb\x01\x32\xcd\x01Name of the role to set as the default creator role. This role will be automatically assigned to users who create new resources in the environment. Must be a valid role name that exists in the environment.J\t\"creator\"\xbaH\x1cr\x1a\x10\x00\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x12\x64\x65\x66\x61ultCreatorRole\x88\x01\x01\x12\xa9\x02\n\x13\x64\x65\x66\x61ult_member_role\x18\x05 \x01(\tB\xf3\x01\x92\x41\xd0\x01\x32\xc3\x01Name of the role to set as the default member role. This role will be automatically assigned to new users when they join the environment. Must be a valid role name that exists in the environment.J\x08\"member\"\xbaH\x1cr\x1a\x10\x00\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x01R\x11\x64\x65\x66\x61ultMemberRole\x88\x01\x01\x42\x17\n\x15_default_creator_roleB\x16\n\x14_default_member_roleJ\x04\x08\x01\x10\x02\"\x9c\x02\n%UpdateDefaultOrganizationRolesRequest\x12i\n\x06org_id\x18\x01 \x01(\tBR\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0er\t\x10\x01\x18 :\x03org\xc8\x01\x01R\x05orgId\x12\x87\x01\n\x13\x64\x65\x66\x61ult_member_role\x18\x02 \x01(\tBW\x92\x41\x32\x32&Unique name of the default member roleJ\x08\"member\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x11\x64\x65\x66\x61ultMemberRole\"\xc6\x05\n\x1aUpdateDefaultRolesResponse\x12\xd6\x02\n\x0f\x64\x65\x66\x61ult_creator\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\x93\x02\x92\x41\x8f\x02\x32\x90\x01The role that is now set as the default creator role for the environment. Contains complete role information including permissions and metadata.Jz{\"id\": \"role_1234567890\", \"name\": \"creator\", \"display_name\": \"Creator Role\", \"description\": \"Role for creating resources\"}R\x0e\x64\x65\x66\x61ultCreator\x12\xce\x02\n\x0e\x64\x65\x66\x61ult_member\x18\x02 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\x8d\x02\x92\x41\x89\x02\x32\x8f\x01The role that is now set as the default member role for the environment. Contains complete role information including permissions and metadata.Ju{\"id\": \"role_0987654321\", \"name\": \"member\", \"display_name\": \"Member Role\", \"description\": \"Role for regular members\"}R\rdefaultMember\"\x84\x02\n&UpdateDefaultOrganizationRolesResponse\x12\xd9\x01\n\x0e\x64\x65\x66\x61ult_member\x18\x02 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\x98\x01\x92\x41\x94\x01\x32\x1bUpdated default member roleJu{\"id\": \"role_0987654321\", \"name\": \"member\", \"display_name\": \"Member Role\", \"description\": \"Role for regular members\"}R\rdefaultMember\"\x9e\x01\n\x11UpdateDefaultRole\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04roleR\x02id\x12_\n\x04name\x18\x02 \x01(\tBF\x92\x41$2\x17Unique name of the roleJ\t\"creator\"\xbaH\x1cr\x1a\x10\x00\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x04name\x88\x01\x01\x42\x07\n\x05_name\"\x85\x03\n\nPermission\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04permR\x02id\x12\x32\n\x04name\x18\x02 \x01(\tB\x1e\xbaH\x1br\x16\x10\x01\x18\x64\x32\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\x12;\n\x0b\x63reate_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12;\n\x0bupdate_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nupdateTime\x12|\n\x16is_scalekit_permission\x18\x06 \x01(\x08\x42\x46\x92\x41\x43\x32;Indicates whether this permission is predefined by ScalekitJ\x04trueR\x14isScalekitPermission\"\x97\x03\n\x0eRolePermission\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04permR\x02id\x12\x32\n\x04name\x18\x02 \x01(\tB\x1e\xbaH\x1br\x16\x10\x01\x18\x64\x32\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\x12;\n\x0b\x63reate_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12;\n\x0bupdate_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nupdateTime\x12\x89\x01\n\trole_name\x18\x06 \x01(\tBl\x92\x41G27Name of the role from which this permission was sourcedJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\"\x81\x02\n\x10\x43reatePermission\x12n\n\x04name\x18\x01 \x01(\tBZ\x92\x41\x34\x32 Unique name/ID of the permissionJ\x10\"read:documents\"\xbaH r\x1b\x10\x01\x18\x64\x32\x15^[a-zA-Z0-9_:]{1,64}$\xc8\x01\x01R\x04name\x12}\n\x0b\x64\x65scription\x18\x02 \x01(\tB[\x92\x41P2\x1d\x44\x65scription of the permissionJ/\"Allows user to read documents from the system\"\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\"f\n\x17\x43reatePermissionRequest\x12K\n\npermission\x18\x01 \x01(\x0b\x32#.scalekit.v1.roles.CreatePermissionB\x06\xbaH\x03\xc8\x01\x01R\npermission\"Y\n\x18\x43reatePermissionResponse\x12=\n\npermission\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.roles.PermissionR\npermission\"\x88\x01\n\x14GetPermissionRequest\x12p\n\x0fpermission_name\x18\x01 \x01(\tBG\x92\x41&2\x16Name of the permissionJ\x0c\"read:users\"\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x0epermissionName\"V\n\x15GetPermissionResponse\x12=\n\npermission\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.roles.PermissionR\npermission\"\xd8\x01\n\x17UpdatePermissionRequest\x12p\n\x0fpermission_name\x18\x01 \x01(\tBG\x92\x41&2\x16Name of the permissionJ\x0c\"read_users\"\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x0epermissionName\x12K\n\npermission\x18\x03 \x01(\x0b\x32#.scalekit.v1.roles.CreatePermissionB\x06\xbaH\x03\xc8\x01\x01R\npermission\"Y\n\x18UpdatePermissionResponse\x12=\n\npermission\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.roles.PermissionR\npermission\"\x89\x04\n\x16ListPermissionsRequest\x12\x64\n\npage_token\x18\x01 \x01(\tB@\x92\x41=2+Page token to retrieve next page of resultsJ\x0e\"token_abc123\"H\x00R\tpageToken\x88\x01\x01\x12\x66\n\tpage_size\x18\x02 \x01(\rBD\x92\x41\x38\x32\x32Number of permissions to return per page (max 100)J\x02\x35\x30\xbaH\x06*\x04\x18\x64(\x01H\x01R\x08pageSize\x88\x01\x01\x12\x83\x02\n\x04type\x18\x03 \x01(\x0e\x32!.scalekit.v1.roles.PermissionTypeB\xcb\x01\x92\x41\xc7\x01\x32\xbf\x01\x46ilter permissions by type: ALL, SCALEKIT, or ENVIRONMENT, where SCALEKIT are predefined Scalekit permissions and ENVIRONMENT are custom permissions created in the environment, default is ALLJ\x03\x41LLR\x04typeB\r\n\x0b_page_tokenB\x0c\n\n_page_size\"\xf8\x02\n\x17ListPermissionsResponse\x12?\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x1d.scalekit.v1.roles.PermissionR\x0bpermissions\x12g\n\x0fprev_page_token\x18\x02 \x01(\tB?\x92\x41<2*Token to retrieve previous page of resultsJ\x0e\"token_def456\"R\rprevPageToken\x12\x63\n\x0fnext_page_token\x18\x03 \x01(\tB;\x92\x41\x38\x32&Token to retrieve next page of resultsJ\x0e\"token_def456\"R\rnextPageToken\x12N\n\ntotal_size\x18\x04 \x01(\rB/\x92\x41,2%Total number of permissions availableJ\x03\x31\x35\x30R\ttotalSize\"\x8b\x01\n\x17\x44\x65letePermissionRequest\x12p\n\x0fpermission_name\x18\x01 \x01(\tBG\x92\x41&2\x16Name of the permissionJ\x0c\"read_users\"\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x0epermissionName\"u\n\x1aListRolePermissionsRequest\x12W\n\trole_name\x18\x01 \x01(\tB:\x92\x41\x19\x32\x10Name of the roleJ\x05\x61\x64min\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_-]+$\xc8\x01\x01R\x08roleName\"\x96\x01\n\x1bListRolePermissionsResponse\x12w\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x1d.scalekit.v1.roles.PermissionB6\x92\x41\x33\x32\x31List of permissions directly assigned to the roleR\x0bpermissions\"\xfb\x01\n\x1b\x41\x64\x64PermissionsToRoleRequest\x12W\n\trole_name\x18\x01 \x01(\tB:\x92\x41\x19\x32\x10Name of the roleJ\x05\x61\x64min\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x08roleName\x12\x82\x01\n\x10permission_names\x18\x02 \x03(\tBW\x92\x41-2+List of permission names to add to the role\xbaH$\x92\x01\x1e\x08\x01\x10\x64\"\x18r\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x0fpermissionNames\"\xa3\x01\n\x1c\x41\x64\x64PermissionsToRoleResponse\x12\x82\x01\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x1d.scalekit.v1.roles.PermissionBA\x92\x41>2\x92\x41\x1e\x32\x15Name of the base roleJ\x05\x61\x64min\xbaH\x1ar\x15\x10\x01\x18@2\x0f^[a-zA-Z0-9_]+$\xc8\x01\x01R\x08roleName\"i\n\x1aListDependentRolesResponse\x12K\n\x05roles\x18\x01 \x03(\x0b\x32\x17.scalekit.v1.roles.RoleB\x1c\x92\x41\x19\x32\x17List of dependent rolesR\x05roles\"\xfd\x01\n\x15\x44\x65leteRoleBaseRequest\x12\xe3\x01\n\trole_name\x18\x01 \x01(\tB\xc5\x01\x92\x41\xa4\x01\x32\x91\x01Unique name identifier of the role whose base inheritance relationship should be removed. Must be alphanumeric with underscores, 1-64 characters.J\x0e\x63ontent_editor\xbaH\x1ar\x15\x10\x01\x18@2\x0f^[a-zA-Z0-9_]+$\xc8\x01\x01R\x08roleName\"\x88\x02\n!DeleteOrganizationRoleBaseRequest\x12\x65\n\x06org_id\x18\x01 \x01(\tBN\x92\x41=2$Unique identifier to an OrganizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12|\n\trole_name\x18\x02 \x01(\tB_\x92\x41:21Name of the organization role to remove base fromJ\x05\x61\x64min\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName*8\n\x0ePermissionType\x12\x07\n\x03\x41LL\x10\x00\x12\x0c\n\x08SCALEKIT\x10\x01\x12\x0f\n\x0b\x45NVIRONMENT\x10\x02\x32\x84\xbc\x01\n\x0cRolesService\x12\xcf\x05\n\nCreateRole\x12$.scalekit.v1.roles.CreateRoleRequest\x1a%.scalekit.v1.roles.CreateRoleResponse\"\xf3\x04\x92\x41\xce\x04\n\x05Roles\x12\x1e\x43reate new role in environment\x1a\x88\x03\x43reates a new role within the environment with specified permissions and metadata. Use this endpoint to define custom roles that can be assigned to users or groups. You can create hierarchical roles by extending existing roles, assign specific permissions, and configure display information. Roles are the foundation of your access control system and determine what actions users can perform.J\x99\x01\n\x03\x32\x30\x31\x12\x91\x01\ndRole created successfully. Returns the complete role object with system-generated ID and timestamps.\x12)\n\'\x1a%.scalekit.v1.roles.CreateRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x15\"\r/api/v1/roles:\x04role\x12\xb2\x05\n\nUpdateRole\x12$.scalekit.v1.roles.UpdateRoleRequest\x1a%.scalekit.v1.roles.UpdateRoleResponse\"\xd6\x04\x92\x41\xa5\x04\n\x05Roles\x12\x17Update role information\x1a\xf6\x02Modifies an existing role\'s properties including display name, description, permissions, and inheritance. Use this endpoint to update role metadata, change permission assignments, or modify role hierarchy. Only the fields you specify will be updated, leaving other properties unchanged. When updating permissions, the new list replaces all existing permissions for the role.J\x89\x01\n\x03\x32\x30\x30\x12\x81\x01\nTRole updated successfully. Returns the modified role object with updated timestamps.\x12)\n\'\x1a%.scalekit.v1.roles.UpdateRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02!\x1a\x19/api/v1/roles/{role_name}:\x04role\x12\xff\x04\n\x07GetRole\x12!.scalekit.v1.roles.GetRoleRequest\x1a\".scalekit.v1.roles.GetRoleResponse\"\xac\x04\x92\x41\x81\x04\n\x05Roles\x12\x10Get role details\x1a\xa9\x02Retrieves complete information for a specific role including metadata and inheritance details (base role and dependent role count). Use this endpoint to audit role configuration and understand the role\'s place in the hierarchy. To view the role\'s permissions, use the ListRolePermissions endpoint.J\xb9\x01\n\x03\x32\x30\x30\x12\xb1\x01\n\x86\x01Successfully retrieved role details. Returns the role object including metadata and inheritance details. Permissions are not included.\x12&\n$\x1a\".scalekit.v1.roles.GetRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1b\x12\x19/api/v1/roles/{role_name}\x12\x89\x06\n\tListRoles\x12#.scalekit.v1.roles.ListRolesRequest\x1a$.scalekit.v1.roles.ListRolesResponse\"\xb0\x05\x92\x41\x91\x05\n\x05Roles\x12\x1dList all roles in environment\x1a\xc4\x03Retrieves a comprehensive list of all roles available within the specified environment including organization roles. Use this endpoint to view all role definitions, including custom roles and their configurations. You can optionally include permission details for each role to understand their capabilities. This is useful for role management, auditing organization access controls, or understanding the available access levels within the organization.J\xa1\x01\n\x03\x32\x30\x30\x12\x99\x01\nmSuccessfully retrieved list of roles. Returns all roles with their metadata and optionally their permissions.\x12(\n&\x1a$.scalekit.v1.roles.ListRolesResponse\x82\xb5\x18\x02\x18\x64\x82\xd3\xe4\x93\x02\x0f\x12\r/api/v1/roles\x12\xac\x06\n\nDeleteRole\x12$.scalekit.v1.roles.DeleteRoleRequest\x1a\x16.google.protobuf.Empty\"\xdf\x05\x92\x41\xb4\x05\n\x05Roles\x12\x1e\x44\x65lete role and reassign users\x1a\xbb\x04Permanently removes a role from the environment and reassigns users who had that role to a different role. Use this endpoint when you need to clean up unused roles or restructure your access control system. The role cannot be deleted if it has dependent roles (roles that extend it) unless you specify a replacement role. If users are assigned to the role being deleted, you must provide a reassign_role_name to move those users to a different role before deletion can proceed. This action cannot be undone, so ensure no critical users depend on the role before deletion.JM\n\x03\x32\x30\x30\x12\x46\nDRole successfully deleted and users reassigned. No content returned.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1b*\x19/api/v1/roles/{role_name}\x12\xdc\x06\n\x16\x43reateOrganizationRole\x12\x30.scalekit.v1.roles.CreateOrganizationRoleRequest\x1a\x31.scalekit.v1.roles.CreateOrganizationRoleResponse\"\xdc\x05\x92\x41\xa0\x05\n\x05Roles\x12\x18\x43reate organization role\x1a\xc7\x03\x43reates a new role within the specified organization with basic configuration including name, display name, description, and permissions. Use this endpoint to define custom roles that can be assigned to users within the organization. You can create hierarchical roles by extending existing roles and assign specific permissions to control access levels. The role will be scoped to the organization and can be used for organization-specific access control.J\xb2\x01\n\x03\x32\x30\x31\x12\xaa\x01\nqOrganization role created successfully. Returns the complete role object with system-generated ID and timestamps.\x12\x35\n3\x1a\x31.scalekit.v1.roles.CreateOrganizationRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02,\"$/api/v1/organizations/{org_id}/roles:\x04role\x12\xb5\x06\n\x16UpdateOrganizationRole\x12\x30.scalekit.v1.roles.UpdateOrganizationRoleRequest\x1a\x31.scalekit.v1.roles.UpdateOrganizationRoleResponse\"\xb5\x05\x92\x41\xed\x04\n\x05Roles\x12\x18Update organization role\x1a\xa4\x03Modifies an existing organization role\'s properties including display name, description, permissions, and inheritance settings. Use this endpoint to update role metadata, change permission assignments, or modify role hierarchy within the organization. Only the fields you specify will be updated, leaving other properties unchanged. When updating permissions, the new list replaces all existing permissions for the role.J\xa2\x01\n\x03\x32\x30\x30\x12\x9a\x01\naOrganization role updated successfully. Returns the modified role object with updated timestamps.\x12\x35\n3\x1a\x31.scalekit.v1.roles.UpdateOrganizationRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x38\x1a\x30/api/v1/organizations/{org_id}/roles/{role_name}:\x04role\x12\xb4\x07\n\x13GetOrganizationRole\x12-.scalekit.v1.roles.GetOrganizationRoleRequest\x1a..scalekit.v1.roles.GetOrganizationRoleResponse\"\xbd\x06\x92\x41\xe7\x05\n\x05Roles\x12\x1dGet organization role details\x1a\xbf\x03Retrieves complete information for a specific organization role including metadata, inheritance details, and optionally permissions. Use this endpoint to audit role configuration and understand the role\'s place in the organization\'s role hierarchy. You can include permission details to see what capabilities the role provides. This operation is useful for role management, user assignment decisions, or understanding organization access controls.J\xfc\x01\n\x03\x32\x30\x30\x12\xf4\x01\n\xbd\x01Successfully retrieved organization role details. Returns the role object including metadata and inheritance details. Permissions are included only when requested via the include parameter.\x12\x32\n0\x1a..scalekit.v1.roles.GetOrganizationRoleResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x32\x12\x30/api/v1/organizations/{org_id}/roles/{role_name}\x12\xb7\x06\n\x15ListOrganizationRoles\x12/.scalekit.v1.roles.ListOrganizationRolesRequest\x1a\x30.scalekit.v1.roles.ListOrganizationRolesResponse\"\xba\x05\x92\x41\xf0\x04\n\x05Roles\x12\x17List organization roles\x1a\x90\x03Retrieves all environment roles and organization specific roles. Use this endpoint to view all role definitions, including custom roles and their configurations. You can optionally include permission details for each role to understand their capabilities. This is useful for role management, auditing organization access controls, or understanding the available access levels within the organization.J\xba\x01\n\x03\x32\x30\x30\x12\xb2\x01\nzSuccessfully retrieved list of organization roles. Returns all roles with their metadata and optionally their permissions.\x12\x34\n2\x1a\x30.scalekit.v1.roles.ListOrganizationRolesResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02&\x12$/api/v1/organizations/{org_id}/roles\x12\x8a\x06\n\x16\x44\x65leteOrganizationRole\x12\x30.scalekit.v1.roles.DeleteOrganizationRoleRequest\x1a\x16.google.protobuf.Empty\"\xa5\x05\x92\x41\xe3\x04\n\x05Roles\x12\x18\x44\x65lete organization role\x1a\xd6\x03Permanently removes a role from the organization and optionally reassigns users who had that role to a different role. Use this endpoint when you need to clean up unused roles or restructure your organization\'s access control system. If users are assigned to the role being deleted, you can provide a reassign_role_name to move those users to a different role before deletion. This action cannot be undone, so ensure no critical users depend on the role before deletion.Jg\n\x03\x32\x30\x30\x12`\n^Organization role successfully deleted and users reassigned if specified. No content returned.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x32*0/api/v1/organizations/{org_id}/roles/{role_name}\x12\xdb\x08\n\x11GetRoleUsersCount\x12+.scalekit.v1.roles.GetRoleUsersCountRequest\x1a,.scalekit.v1.roles.GetRoleUsersCountResponse\"\xea\x07\x92\x41\xb3\x07\n\x05Roles\x12\x1cRetrieve user count for role\x1a\x93\x05Retrieves the total number of users currently assigned to the specified role within the environment. Use this endpoint to monitor role usage, enforce user limits, or understand the scope of role assignments. Provide the role\'s unique name as a path parameter, and the response will include the current user count for that role. This operation is read-only and does not modify any data or user assignments. The count reflects all users who have the role either directly assigned or inherited through organization membership. This information is useful for capacity planning, security auditing, or understanding the impact of role changes across your user base.J\xf5\x01\n\x03\x32\x30\x30\x12\xed\x01\n\xb8\x01Successfully retrieved user count for the specified role. Returns the total number of users currently assigned to the role, including both direct assignments and inherited assignments.\x12\x30\n.\x1a,.scalekit.v1.roles.GetRoleUsersCountResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\'\x12%/api/v1/roles/{role_name}/users:count\x12\xb2\x07\n\x1dGetOrganizationRoleUsersCount\x12\x37.scalekit.v1.roles.GetOrganizationRoleUsersCountRequest\x1a\x38.scalekit.v1.roles.GetOrganizationRoleUsersCountResponse\"\x9d\x06\x92\x41\xc0\x05\n\x05Roles\x12 Get organization role user count\x1a\xc0\x03Retrieves the total number of users currently assigned to the specified organization role. Use this endpoint to monitor organization role usage, enforce user limits, or understand the scope of role assignments within the organization. Provide the organization ID and role name as path parameters. The response includes the user count for the requested organization role. This operation is read-only and does not modify any data or user assignments.J\xd1\x01\n\x03\x32\x30\x30\x12\xc9\x01\n\x88\x01Successfully retrieved user count for the specified organization role. Returns the total number of users currently assigned to the role.\x12<\n:\x1a\x38.scalekit.v1.roles.GetOrganizationRoleUsersCountResponse\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02>\x12\n\x03\x32\x30\x30\x12\x37\n5Permission successfully deleted. No content returned.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\'*%/api/v1/permissions/{permission_name}\x12\x80\t\n\x13ListRolePermissions\x12-.scalekit.v1.roles.ListRolePermissionsRequest\x1a..scalekit.v1.roles.ListRolePermissionsResponse\"\x89\x08\x92\x41\xd2\x07\n\x05Roles\x12\x19List permissions for role\x1a\xd7\x05Retrieves all permissions directly assigned to the specified role, excluding permissions inherited from base roles. Use this endpoint to view the explicit permission assignments for a role, which is useful for understanding direct role capabilities, auditing permission assignments, or managing role-permission relationships. Provide the role name as a path parameter, and the response will include only the permissions that are directly assigned to that role. This operation does not include inherited permissions from role hierarchies - use ListEffectiveRolePermissions to see the complete set of permissions including inheritance. Returns a list of permission objects with their names, descriptions, and assignment metadata.J\xd3\x01\n\x03\x32\x30\x30\x12\xcb\x01\n\x94\x01Successfully retrieved role permissions. Returns a list of all permissions directly assigned to the specified role, excluding inherited permissions.\x12\x32\n0\x1a..scalekit.v1.roles.ListRolePermissionsResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\'\x12%/api/v1/roles/{role_name}/permissions\x12\xfa\x08\n\x14\x41\x64\x64PermissionsToRole\x12..scalekit.v1.roles.AddPermissionsToRoleRequest\x1a/.scalekit.v1.roles.AddPermissionsToRoleResponse\"\x80\x08\x92\x41\xc6\x07\n\x05Roles\x12\x17\x41\x64\x64 permissions to role\x1a\xbd\x05\x41\x64\x64s one or more permissions to the specified role while preserving existing permission assignments. Use this endpoint to grant additional capabilities to a role without affecting its current permission set. Provide the role name as a path parameter and a list of permission names in the request body. The system will validate that all specified permissions exist in the environment and add them to the role. Existing permission assignments remain unchanged, making this operation safe for incremental permission management. This is useful for gradually expanding role capabilities or adding new permissions as your system evolves. Returns the updated list of all permissions now assigned to the role.J\xe3\x01\n\x03\x32\x30\x30\x12\xdb\x01\n\xa3\x01Permissions added to role successfully. Returns the complete list of all permissions now assigned to the role, including both existing and newly added permissions.\x12\x33\n1\x1a/.scalekit.v1.roles.AddPermissionsToRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02*\"%/api/v1/roles/{role_name}/permissions:\x01*\x12\xb7\x07\n\x18RemovePermissionFromRole\x12\x32.scalekit.v1.roles.RemovePermissionFromRoleRequest\x1a\x16.google.protobuf.Empty\"\xce\x06\x92\x41\x85\x06\n\x05Roles\x12\x1bRemove permission from role\x1a\x94\x05Removes a specific permission from the specified role, revoking that capability from all users assigned to the role. Use this endpoint to restrict role capabilities or remove unnecessary permissions. Provide both the role name and permission name as path parameters. This operation only affects the direct permission assignment and does not impact permissions inherited from base roles. If the permission is inherited through role hierarchy, you may need to modify the base role instead. This is useful for fine-tuning role permissions, implementing least-privilege access controls, or removing deprecated permissions. Returns no content on successful removal.JH\n\x03\x32\x30\x30\x12\x41\n?Permission removed from role successfully. No content returned.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x39*7/api/v1/roles/{role_name}/permissions/{permission_name}\x12\xdf\t\n\x1cListEffectiveRolePermissions\x12\x36.scalekit.v1.roles.ListEffectiveRolePermissionsRequest\x1a\x37.scalekit.v1.roles.ListEffectiveRolePermissionsResponse\"\xcd\x08\x92\x41\x92\x08\n\x05Roles\x12#List effective permissions for role\x1a\xd9\x05Retrieves the complete set of effective permissions for a role, including both directly assigned permissions and permissions inherited from base roles through the role hierarchy. Use this endpoint to understand the full scope of capabilities available to users assigned to a specific role. Provide the role name as a path parameter, and the response will include all permissions that apply to the role, accounting for inheritance relationships. This operation is essential for auditing role capabilities, understanding permission inheritance, or verifying the complete access scope before role assignment. Returns a comprehensive list of permission names representing the full set of effective permissions for the specified role.J\x87\x02\n\x03\x32\x30\x30\x12\xff\x01\n\xbf\x01Successfully retrieved effective permissions. Returns the complete list of all permissions that apply to the role, including both direct assignments and inherited permissions from base roles.\x12;\n9\x1a\x37.scalekit.v1.roles.ListEffectiveRolePermissionsResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02+\x12)/api/v1/roles/{role_name}/permissions:all\x1a\xe2\x02\x92\x41\xde\x02\n\x05Roles\x12\xd4\x02Role-based access control (RBAC) for defining and managing permissions in an environment. Create and update custom roles with explicit permissions, model role hierarchies through inheritance, view dependent roles, manage role-permission assignments, and list roles and permissions. Also provides a utility to count users assigned to a role.B1Z/github.com/scalekit-inc/scalekit/pkg/grpc/rolesb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dscalekit/v1/roles/roles.proto\x12\x11scalekit.v1.roles\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"\x8b\r\n\x04Role\x12y\n\x02id\x18\x01 \x01(\tBi\x92\x41\x63\x32HUnique system-generated identifier for the role. Immutable once created.J\x17\"role_1234abcd5678efgh\"\xe0\x41\x03R\x02id\x12\x95\x01\n\x04name\x18\x02 \x01(\tB\x80\x01\x92\x41q2]Unique name identifier for the role. Must be alphanumeric with underscores, 1-100 characters.J\x10\"content_editor\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x04name\x12\x94\x01\n\x0c\x64isplay_name\x18\x03 \x01(\tBq\x92\x41\x62\x32NHuman-readable display name for the role. Used in user interfaces and reports.J\x10\"Content Editor\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x0b\x64isplayName\x12\xc9\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tB\xa6\x01\x92\x41\xa2\x01\x32UDetailed description of the role\'s purpose and capabilities. Maximum 2000 characters.JI\"Can create, edit, and publish content but cannot delete or manage users\"R\x0b\x64\x65scription\x12}\n\x0f\x64\x65\x66\x61ult_creator\x18\x06 \x01(\x08\x42T\x92\x41Q2IIndicates if this role is the default creator role for new organizations.J\x04trueR\x0e\x64\x65\x66\x61ultCreator\x12r\n\x0e\x64\x65\x66\x61ult_member\x18\x07 \x01(\x08\x42K\x92\x41H2@Indicates if this role is the default member role for new users.J\x04trueR\rdefaultMember\x12\xa6\x01\n\x07\x65xtends\x18\x08 \x01(\tB\x86\x01\x92\x41\x64\x32TName of the base role that this role extends. Enables hierarchical role inheritance.J\x0c\"admin_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x07\x65xtends\x88\x01\x01\x12\xef\x02\n\x0bpermissions\x18\t \x03(\x0b\x32!.scalekit.v1.roles.RolePermissionB\xa9\x02\x92\x41\xa5\x02\x32uList of permissions with role source information. Only included when \'include\' parameter is specified in the request.J\xab\x01[{\"name\": \"read:content\", \"description\": \"Read Content\", \"role_name\": \"admin_role\"}, {\"name\": \"write:content\", \"description\": \"Write Content\", \"role_name\": \"editor_role\"}]R\x0bpermissions\x12\x90\x01\n\x15\x64\x65pendent_roles_count\x18\n \x01(\x05\x42\\\x92\x41Y2TNumber of roles that extend from this role (dependent roles count). Read-only field.J\x01\x33R\x13\x64\x65pendentRolesCount\x12Z\n\x0bis_org_role\x18\x0b \x01(\x08\x42:\x92\x41\x37\x32/Indicates if this role is an organization role.J\x04trueR\tisOrgRoleB\n\n\x08_extendsJ\x04\x08\x05\x10\x06\"\xce\t\n\nCreateRole\x12\xf1\x01\n\x04name\x18\x02 \x01(\tB\xdc\x01\x92\x41\xb6\x01\x32\xa1\x01Unique name identifier for the role. Must be alphanumeric with underscores, 1-64 characters. This name is used in API calls and cannot be changed after creation.J\x10\"content_editor\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x04name\x12\xb2\x01\n\x0c\x64isplay_name\x18\x03 \x01(\tB\x8e\x01\x92\x41\x7f\x32kHuman-readable display name for the role. Used in user interfaces, reports, and user-facing communications.J\x10\"Content Editor\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x0b\x64isplayName\x12\xfb\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tB\xd3\x01\x92\x41\xc7\x01\x32jDetailed description of the role\'s purpose, capabilities, and intended use cases. Maximum 2000 characters.JY\"Can create, edit, and publish content but cannot delete content or manage user accounts\"\xbaH\x05r\x03\x18\xd0\x0fH\x00R\x0b\x64\x65scription\x88\x01\x01\x12\xe0\x01\n\x07\x65xtends\x18\x08 \x01(\tB\xc0\x01\x92\x41\x9d\x01\x32\x90\x01Name of the base role that this role extends. Enables hierarchical role inheritance where this role inherits all permissions from the base role.J\x08\"viewer\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x01R\x07\x65xtends\x88\x01\x01\x12\x87\x02\n\x0bpermissions\x18\t \x03(\tB\xe4\x01\x92\x41\xbe\x01\x32\x85\x01List of permission names to assign to this role. Permissions must exist in the current environment. Maximum 100 permissions per role.J4[\"read:content\", \"write:content\", \"publish:content\"]\xbaH\x1f\x92\x01\x1c\x10\x64\"\x18r\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$R\x0bpermissionsB\x0e\n\x0c_descriptionB\n\n\x08_extendsJ\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08\"\xa4\x06\n\x16\x43reateOrganizationRole\x12t\n\x04name\x18\x02 \x01(\tB`\x92\x41;2&Unique name of the organization\'s roleJ\x11\"org_viewer_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x04name\x12w\n\x0c\x64isplay_name\x18\x03 \x01(\tBT\x92\x41\x45\x32\'Display name of the organization\'s roleJ\x1a\"Organization Viewer Role\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x0b\x64isplayName\x12\xa0\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tBy\x92\x41n2&Description of the organization\'s roleJD\"Organization Viewer Role will be used only for viewing the objects\"\xbaH\x05r\x03\x18\xd0\x0fH\x00R\x0b\x64\x65scription\x88\x01\x01\x12v\n\x07\x65xtends\x18\x08 \x01(\tBW\x92\x41\x35\x32%Base role name for hierarchical rolesJ\x0c\"admin_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x01R\x07\x65xtends\x88\x01\x01\x12\xd1\x01\n\x0bpermissions\x18\t \x03(\tB\xae\x01\x92\x41\x88\x01\x32\x63List of permission names to assign to this role. Permissions must exist in the current environment.J![\"read:users\", \"write:documents\"]\xbaH\x1f\x92\x01\x1c\x10\x64\"\x18r\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$R\x0bpermissionsB\x0e\n\x0c_descriptionB\n\n\x08_extendsJ\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08\"\xdc\x02\n\x11\x43reateRoleRequest\x12\xc0\x02\n\x04role\x18\x02 \x01(\x0b\x32\x1d.scalekit.v1.roles.CreateRoleB\x8c\x02\x92\x41\x82\x02\x32lRole configuration details including name, display name, description, permissions, and inheritance settings.J\x91\x01{\"name\": \"content_editor\", \"display_name\": \"Content Editor\", \"description\": \"Can edit content\", \"permissions\": [\"read:content\", \"write:content\"]}\xbaH\x03\xc8\x01\x01R\x04roleJ\x04\x08\x01\x10\x02\"\x9a\x02\n\x12\x43reateRoleResponse\x12\x83\x02\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\xd5\x01\x92\x41\xd1\x01\x32OThe created role object with system-generated ID and all configuration details.J~{\"id\": \"role_1234abcd5678efgh\", \"name\": \"content_editor\", \"display_name\": \"Content Editor\", \"description\": \"Can edit content\"}R\x04role\"\xe7\x03\n\x0eGetRoleRequest\x12\xbe\x01\n\trole_name\x18\x02 \x01(\tB\xa0\x01\x92\x41{2gUnique name identifier of the role to retrieve. Must be alphanumeric with underscores, 1-64 characters.J\x10\"content_editor\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\x81\x02\n\x07include\x18\x03 \x01(\tB\xe1\x01\x92\x41\xb8\x01\x32\xa6\x01Include additional data in the response. Valid values: \'permissions\' (direct permissions only), \'permissions:all\' (includes inherited permissions from role hierarchy)J\r\"permissions\"\xbaH\"r R\x00R\x0bpermissionsR\x0fpermissions:allH\x00R\x07include\x88\x01\x01\x42\n\n\x08_includeJ\x04\x08\x01\x10\x02\"\xbe\x02\n\x0fGetRoleResponse\x12\xaa\x02\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\xfc\x01\x92\x41\xf8\x01\x32QThe complete role object with all metadata, permissions, and inheritance details.J\xa2\x01{\"id\": \"role_1234abcd5678efgh\", \"name\": \"content_editor\", \"display_name\": \"Content Editor\", \"permissions\": [{\"name\": \"read:content\"}], \"dependent_roles_count\": 2}R\x04role\"\xa8\x02\n\x10ListRolesRequest\x12\x81\x02\n\x07include\x18\x02 \x01(\tB\xe1\x01\x92\x41\xb8\x01\x32\xa6\x01Include additional data in the response. Valid values: \'permissions\' (direct permissions only), \'permissions:all\' (includes inherited permissions from role hierarchy)J\r\"permissions\"\xbaH\"r R\x00R\x0bpermissionsR\x0fpermissions:allH\x00R\x07include\x88\x01\x01\x42\n\n\x08_includeJ\x04\x08\x01\x10\x02\"\xc9\x02\n\x11ListRolesResponse\x12\xb3\x02\n\x05roles\x18\x01 \x03(\x0b\x32\x17.scalekit.v1.roles.RoleB\x83\x02\x92\x41\xff\x01\x32ZList of all roles in the environment with their metadata and optionally their permissions.J\xa0\x01[{\"id\": \"role_1234abcd5678efgh\", \"name\": \"admin\", \"display_name\": \"Administrator\"}, {\"id\": \"role_9876zyxw5432vuts\", \"name\": \"viewer\", \"display_name\": \"Viewer\"}]R\x05roles\"\xdd\x08\n\nUpdateRole\x12\xbc\x01\n\x0c\x64isplay_name\x18\x01 \x01(\tB\x93\x01\x92\x41\x86\x01\x32kHuman-readable display name for the role. Used in user interfaces, reports, and user-facing communications.J\x17\"Senior Content Editor\"\xbaH\x06r\x04\x10\x01\x18\x64H\x00R\x0b\x64isplayName\x88\x01\x01\x12\x84\x02\n\x0b\x64\x65scription\x18\x02 \x01(\tB\xdc\x01\x92\x41\xce\x01\x32jDetailed description of the role\'s purpose, capabilities, and intended use cases. Maximum 2000 characters.J`\"Can create, edit, publish, and approve content. Cannot delete content or manage user accounts.\"\xbaH\x07r\x05\x10\x01\x18\xd0\x0fH\x01R\x0b\x64\x65scription\x88\x01\x01\x12\xe8\x01\n\x07\x65xtends\x18\x06 \x01(\tB\xc8\x01\x92\x41\xa5\x01\x32\x90\x01Name of the base role that this role extends. Enables hierarchical role inheritance where this role inherits all permissions from the base role.J\x10\"content_editor\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x02R\x07\x65xtends\x88\x01\x01\x12\xde\x02\n\x0bpermissions\x18\x07 \x03(\tB\xbb\x02\x92\x41\x95\x02\x32\xc9\x01List of permission names to assign to this role. When provided, this replaces all existing role-permission mappings. Permissions must exist in the current environment. Maximum 100 permissions per role.JG[\"read:content\", \"write:content\", \"publish:content\", \"approve:content\"]\xbaH\x1f\x92\x01\x1c\x10\x64\"\x18r\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$R\x0bpermissionsB\x0f\n\r_display_nameB\x0e\n\x0c_descriptionB\n\n\x08_extendsJ\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06\"\xab\x03\n\x11UpdateRoleRequest\x12\xbc\x01\n\trole_name\x18\x02 \x01(\tB\x9e\x01\x92\x41y2eUnique name identifier of the role to update. Must be alphanumeric with underscores, 1-64 characters.J\x10\"content_editor\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\xd0\x01\n\x04role\x18\x03 \x01(\x0b\x32\x1d.scalekit.v1.roles.UpdateRoleB\x9c\x01\x92\x41\x92\x01\x32>Role fields to update. Only specified fields will be modified.JP{\"display_name\": \"Senior Editor\", \"description\": \"Can edit and approve content\"}\xbaH\x03\xc8\x01\x01R\x04roleJ\x04\x08\x01\x10\x02\"\x96\x02\n\x12UpdateRoleResponse\x12\xff\x01\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\xd1\x01\x92\x41\xcd\x01\x32?The updated role object with all current configuration details.J\x89\x01{\"id\": \"role_1234abcd5678efgh\", \"name\": \"content_editor\", \"display_name\": \"Senior Editor\", \"description\": \"Can edit and approve content\"}R\x04role\"\xba\x04\n\x11\x44\x65leteRoleRequest\x12\xb6\x01\n\trole_name\x18\x02 \x01(\tB\x98\x01\x92\x41s2eUnique name identifier of the role to delete. Must be alphanumeric with underscores, 1-64 characters.J\n\"old_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\x9a\x01\n\x10reassign_role_id\x18\x03 \x01(\tBk\x18\x01\x92\x41G26Role name to reassign users to when deleting this roleJ\r\"member_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x0ereassignRoleId\x88\x01\x01\x12\x9c\x01\n\x12reassign_role_name\x18\x04 \x01(\tBi\x92\x41G26Role name to reassign users to when deleting this roleJ\r\"member_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x01R\x10reassignRoleName\x88\x01\x01\x42\x13\n\x11_reassign_role_idB\x15\n\x13_reassign_role_nameJ\x04\x08\x01\x10\x02\"\xec\x01\n\x1d\x43reateOrganizationRoleRequest\x12\x66\n\x06org_id\x18\x01 \x01(\tBO\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12\x63\n\x04role\x18\x02 \x01(\x0b\x32).scalekit.v1.roles.CreateOrganizationRoleB$\x92\x41\x1b\x32\x19Organization role details\xbaH\x03\xc8\x01\x01R\x04role\"M\n\x1e\x43reateOrganizationRoleResponse\x12+\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleR\x04role\"\xeb\x03\n\x1aGetOrganizationRoleRequest\x12\x66\n\x06org_id\x18\x01 \x01(\tBO\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12i\n\trole_name\x18\x02 \x01(\tBL\x92\x41\'2\x17Unique name of the roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\xed\x01\n\x07include\x18\x03 \x01(\tB\xcd\x01\x92\x41\xa4\x01\x32\x92\x01Include additional data in the response. Valid values: \'permissions\' (direct permissions only), \'permissions:all\' (includes inherited permissions)J\r\"permissions\"\xbaH\"r R\x00R\x0bpermissionsR\x0fpermissions:allH\x00R\x07include\x88\x01\x01\x42\n\n\x08_include\"J\n\x1bGetOrganizationRoleResponse\x12+\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleR\x04role\"\xe2\x04\n\x1cListOrganizationRolesRequest\x12i\n\x06org_id\x18\x01 \x01(\tBR\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0er\t\x10\x01\x18 :\x03org\xc8\x01\x01R\x05orgId\x12\xed\x01\n\x07include\x18\x02 \x01(\tB\xcd\x01\x92\x41\xa4\x01\x32\x92\x01Include additional data in the response. Valid values: \'permissions\' (direct permissions only), \'permissions:all\' (includes inherited permissions)J\r\"permissions\"\xbaH\"r R\x00R\x0bpermissionsR\x0fpermissions:allH\x00R\x07include\x88\x01\x01:\xda\x01\x92\x41\xd6\x01\n\xb0\x01*\x17List organization roles2\x8b\x01Retrieves a paginated list of all roles within the organization. Use the page_token from the response to access subsequent pages of results\xd2\x01\x06org_id2!{\"org_id\" : \"org_8756865685762\" }B\n\n\x08_include\"j\n\x1dListOrganizationRolesResponse\x12I\n\x05roles\x18\x01 \x03(\x0b\x32\x17.scalekit.v1.roles.RoleB\x1a\x92\x41\x17\x32\x15List of roles objectsR\x05roles\"\xcb\x02\n\x1dUpdateOrganizationRoleRequest\x12\x66\n\x06org_id\x18\x01 \x01(\tBO\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12i\n\trole_name\x18\x02 \x01(\tBL\x92\x41\'2\x17Unique name of the roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12W\n\x04role\x18\x03 \x01(\x0b\x32\x1d.scalekit.v1.roles.UpdateRoleB$\x92\x41\x1b\x32\x19Organization role details\xbaH\x03\xc8\x01\x01R\x04role\"M\n\x1eUpdateOrganizationRoleResponse\x12+\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleR\x04role\"\xa8\x03\n\x1d\x44\x65leteOrganizationRoleRequest\x12\x66\n\x06org_id\x18\x01 \x01(\tBO\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12i\n\trole_name\x18\x02 \x01(\tBL\x92\x41\'2\x17Unique name of the roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\x9c\x01\n\x12reassign_role_name\x18\x03 \x01(\tBi\x92\x41G26Role name to reassign users to when deleting this roleJ\r\"member_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x10reassignRoleName\x88\x01\x01\x42\x15\n\x13_reassign_role_name\"\x8b\x01\n\x18GetRoleUsersCountRequest\x12i\n\trole_name\x18\x02 \x01(\tBL\x92\x41\'2\x17Unique name of the roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleNameJ\x04\x08\x01\x10\x02\"k\n\x19GetRoleUsersCountResponse\x12N\n\x05\x63ount\x18\x01 \x01(\x03\x42\x38\x92\x41.2(Number of users associated with the roleJ\x02\x31\x30\xbaH\x04\x1a\x02 \x00R\x05\x63ount\"\xff\x01\n$GetOrganizationRoleUsersCountRequest\x12_\n\x06org_id\x18\x01 \x01(\tBH\x92\x41\x39\x32%Unique identifier of the organizationJ\x10\"org_1234567890\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x05orgId\x12v\n\trole_name\x18\x02 \x01(\tBY\x92\x41\x34\x32$Unique name of the organization roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\"\x83\x01\n%GetOrganizationRoleUsersCountResponse\x12Z\n\x05\x63ount\x18\x01 \x01(\x03\x42\x44\x92\x41:25Number of users associated with the organization roleJ\x01\x35\xbaH\x04\x1a\x02 \x00R\x05\x63ount\"\xf0\t\n\x19UpdateDefaultRolesRequest\x12\x9e\x02\n\x0f\x64\x65\x66\x61ult_creator\x18\x02 \x01(\x0b\x32$.scalekit.v1.roles.UpdateDefaultRoleB\xce\x01\x18\x01\x92\x41\xc8\x01\x32JDefault creator role (deprecated - use default_creator_role field instead)Jz{\"id\": \"role_1234567890\", \"name\": \"creator\", \"display_name\": \"Creator Role\", \"description\": \"Role for creating resources\"}R\x0e\x64\x65\x66\x61ultCreator\x12\x95\x02\n\x0e\x64\x65\x66\x61ult_member\x18\x03 \x01(\x0b\x32$.scalekit.v1.roles.UpdateDefaultRoleB\xc7\x01\x18\x01\x92\x41\xc1\x01\x32HDefault member role (deprecated - use default_member_role field instead)Ju{\"id\": \"role_0987654321\", \"name\": \"member\", \"display_name\": \"Member Role\", \"description\": \"Role for regular members\"}R\rdefaultMember\x12\xb6\x02\n\x14\x64\x65\x66\x61ult_creator_role\x18\x04 \x01(\tB\xfe\x01\x92\x41\xdb\x01\x32\xcd\x01Name of the role to set as the default creator role. This role will be automatically assigned to users who create new resources in the environment. Must be a valid role name that exists in the environment.J\t\"creator\"\xbaH\x1cr\x1a\x10\x00\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x12\x64\x65\x66\x61ultCreatorRole\x88\x01\x01\x12\xa9\x02\n\x13\x64\x65\x66\x61ult_member_role\x18\x05 \x01(\tB\xf3\x01\x92\x41\xd0\x01\x32\xc3\x01Name of the role to set as the default member role. This role will be automatically assigned to new users when they join the environment. Must be a valid role name that exists in the environment.J\x08\"member\"\xbaH\x1cr\x1a\x10\x00\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x01R\x11\x64\x65\x66\x61ultMemberRole\x88\x01\x01\x42\x17\n\x15_default_creator_roleB\x16\n\x14_default_member_roleJ\x04\x08\x01\x10\x02\"\x9c\x02\n%UpdateDefaultOrganizationRolesRequest\x12i\n\x06org_id\x18\x01 \x01(\tBR\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0er\t\x10\x01\x18 :\x03org\xc8\x01\x01R\x05orgId\x12\x87\x01\n\x13\x64\x65\x66\x61ult_member_role\x18\x02 \x01(\tBW\x92\x41\x32\x32&Unique name of the default member roleJ\x08\"member\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x11\x64\x65\x66\x61ultMemberRole\"\xc6\x05\n\x1aUpdateDefaultRolesResponse\x12\xd6\x02\n\x0f\x64\x65\x66\x61ult_creator\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\x93\x02\x92\x41\x8f\x02\x32\x90\x01The role that is now set as the default creator role for the environment. Contains complete role information including permissions and metadata.Jz{\"id\": \"role_1234567890\", \"name\": \"creator\", \"display_name\": \"Creator Role\", \"description\": \"Role for creating resources\"}R\x0e\x64\x65\x66\x61ultCreator\x12\xce\x02\n\x0e\x64\x65\x66\x61ult_member\x18\x02 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\x8d\x02\x92\x41\x89\x02\x32\x8f\x01The role that is now set as the default member role for the environment. Contains complete role information including permissions and metadata.Ju{\"id\": \"role_0987654321\", \"name\": \"member\", \"display_name\": \"Member Role\", \"description\": \"Role for regular members\"}R\rdefaultMember\"\x84\x02\n&UpdateDefaultOrganizationRolesResponse\x12\xd9\x01\n\x0e\x64\x65\x66\x61ult_member\x18\x02 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\x98\x01\x92\x41\x94\x01\x32\x1bUpdated default member roleJu{\"id\": \"role_0987654321\", \"name\": \"member\", \"display_name\": \"Member Role\", \"description\": \"Role for regular members\"}R\rdefaultMember\"\x9e\x01\n\x11UpdateDefaultRole\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04roleR\x02id\x12_\n\x04name\x18\x02 \x01(\tBF\x92\x41$2\x17Unique name of the roleJ\t\"creator\"\xbaH\x1cr\x1a\x10\x00\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x04name\x88\x01\x01\x42\x07\n\x05_name\"\x85\x03\n\nPermission\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04permR\x02id\x12\x32\n\x04name\x18\x02 \x01(\tB\x1e\xbaH\x1br\x16\x10\x01\x18\x64\x32\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\x12;\n\x0b\x63reate_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12;\n\x0bupdate_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nupdateTime\x12|\n\x16is_scalekit_permission\x18\x06 \x01(\x08\x42\x46\x92\x41\x43\x32;Indicates whether this permission is predefined by ScalekitJ\x04trueR\x14isScalekitPermission\"\x97\x03\n\x0eRolePermission\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04permR\x02id\x12\x32\n\x04name\x18\x02 \x01(\tB\x1e\xbaH\x1br\x16\x10\x01\x18\x64\x32\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\x12;\n\x0b\x63reate_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12;\n\x0bupdate_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nupdateTime\x12\x89\x01\n\trole_name\x18\x06 \x01(\tBl\x92\x41G27Name of the role from which this permission was sourcedJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\"\x81\x02\n\x10\x43reatePermission\x12n\n\x04name\x18\x01 \x01(\tBZ\x92\x41\x34\x32 Unique name/ID of the permissionJ\x10\"read:documents\"\xbaH r\x1b\x10\x01\x18\x64\x32\x15^[a-zA-Z0-9_:]{1,64}$\xc8\x01\x01R\x04name\x12}\n\x0b\x64\x65scription\x18\x02 \x01(\tB[\x92\x41P2\x1d\x44\x65scription of the permissionJ/\"Allows user to read documents from the system\"\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\"f\n\x17\x43reatePermissionRequest\x12K\n\npermission\x18\x01 \x01(\x0b\x32#.scalekit.v1.roles.CreatePermissionB\x06\xbaH\x03\xc8\x01\x01R\npermission\"Y\n\x18\x43reatePermissionResponse\x12=\n\npermission\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.roles.PermissionR\npermission\"\x88\x01\n\x14GetPermissionRequest\x12p\n\x0fpermission_name\x18\x01 \x01(\tBG\x92\x41&2\x16Name of the permissionJ\x0c\"read:users\"\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x0epermissionName\"V\n\x15GetPermissionResponse\x12=\n\npermission\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.roles.PermissionR\npermission\"\xd8\x01\n\x17UpdatePermissionRequest\x12p\n\x0fpermission_name\x18\x01 \x01(\tBG\x92\x41&2\x16Name of the permissionJ\x0c\"read_users\"\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x0epermissionName\x12K\n\npermission\x18\x03 \x01(\x0b\x32#.scalekit.v1.roles.CreatePermissionB\x06\xbaH\x03\xc8\x01\x01R\npermission\"Y\n\x18UpdatePermissionResponse\x12=\n\npermission\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.roles.PermissionR\npermission\"\x89\x04\n\x16ListPermissionsRequest\x12\x64\n\npage_token\x18\x01 \x01(\tB@\x92\x41=2+Page token to retrieve next page of resultsJ\x0e\"token_abc123\"H\x00R\tpageToken\x88\x01\x01\x12\x66\n\tpage_size\x18\x02 \x01(\rBD\x92\x41\x38\x32\x32Number of permissions to return per page (max 100)J\x02\x35\x30\xbaH\x06*\x04\x18\x64(\x01H\x01R\x08pageSize\x88\x01\x01\x12\x83\x02\n\x04type\x18\x03 \x01(\x0e\x32!.scalekit.v1.roles.PermissionTypeB\xcb\x01\x92\x41\xc7\x01\x32\xbf\x01\x46ilter permissions by type: ALL, SCALEKIT, or ENVIRONMENT, where SCALEKIT are predefined Scalekit permissions and ENVIRONMENT are custom permissions created in the environment, default is ALLJ\x03\x41LLR\x04typeB\r\n\x0b_page_tokenB\x0c\n\n_page_size\"\xf8\x02\n\x17ListPermissionsResponse\x12?\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x1d.scalekit.v1.roles.PermissionR\x0bpermissions\x12g\n\x0fprev_page_token\x18\x02 \x01(\tB?\x92\x41<2*Token to retrieve previous page of resultsJ\x0e\"token_def456\"R\rprevPageToken\x12\x63\n\x0fnext_page_token\x18\x03 \x01(\tB;\x92\x41\x38\x32&Token to retrieve next page of resultsJ\x0e\"token_def456\"R\rnextPageToken\x12N\n\ntotal_size\x18\x04 \x01(\rB/\x92\x41,2%Total number of permissions availableJ\x03\x31\x35\x30R\ttotalSize\"\x8b\x01\n\x17\x44\x65letePermissionRequest\x12p\n\x0fpermission_name\x18\x01 \x01(\tBG\x92\x41&2\x16Name of the permissionJ\x0c\"read_users\"\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x0epermissionName\"u\n\x1aListRolePermissionsRequest\x12W\n\trole_name\x18\x01 \x01(\tB:\x92\x41\x19\x32\x10Name of the roleJ\x05\x61\x64min\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_-]+$\xc8\x01\x01R\x08roleName\"\x96\x01\n\x1bListRolePermissionsResponse\x12w\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x1d.scalekit.v1.roles.PermissionB6\x92\x41\x33\x32\x31List of permissions directly assigned to the roleR\x0bpermissions\"\xfb\x01\n\x1b\x41\x64\x64PermissionsToRoleRequest\x12W\n\trole_name\x18\x01 \x01(\tB:\x92\x41\x19\x32\x10Name of the roleJ\x05\x61\x64min\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x08roleName\x12\x82\x01\n\x10permission_names\x18\x02 \x03(\tBW\x92\x41-2+List of permission names to add to the role\xbaH$\x92\x01\x1e\x08\x01\x10\x64\"\x18r\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x0fpermissionNames\"\xa3\x01\n\x1c\x41\x64\x64PermissionsToRoleResponse\x12\x82\x01\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x1d.scalekit.v1.roles.PermissionBA\x92\x41>2\x92\x41\x1e\x32\x15Name of the base roleJ\x05\x61\x64min\xbaH\x1ar\x15\x10\x01\x18@2\x0f^[a-zA-Z0-9_]+$\xc8\x01\x01R\x08roleName\"i\n\x1aListDependentRolesResponse\x12K\n\x05roles\x18\x01 \x03(\x0b\x32\x17.scalekit.v1.roles.RoleB\x1c\x92\x41\x19\x32\x17List of dependent rolesR\x05roles\"\xfd\x01\n\x15\x44\x65leteRoleBaseRequest\x12\xe3\x01\n\trole_name\x18\x01 \x01(\tB\xc5\x01\x92\x41\xa4\x01\x32\x91\x01Unique name identifier of the role whose base inheritance relationship should be removed. Must be alphanumeric with underscores, 1-64 characters.J\x0e\x63ontent_editor\xbaH\x1ar\x15\x10\x01\x18@2\x0f^[a-zA-Z0-9_]+$\xc8\x01\x01R\x08roleName\"\x88\x02\n!DeleteOrganizationRoleBaseRequest\x12\x65\n\x06org_id\x18\x01 \x01(\tBN\x92\x41=2$Unique identifier to an OrganizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12|\n\trole_name\x18\x02 \x01(\tB_\x92\x41:21Name of the organization role to remove base fromJ\x05\x61\x64min\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName*8\n\x0ePermissionType\x12\x07\n\x03\x41LL\x10\x00\x12\x0c\n\x08SCALEKIT\x10\x01\x12\x0f\n\x0b\x45NVIRONMENT\x10\x02\x32\x93\xbc\x01\n\x0cRolesService\x12\xcf\x05\n\nCreateRole\x12$.scalekit.v1.roles.CreateRoleRequest\x1a%.scalekit.v1.roles.CreateRoleResponse\"\xf3\x04\x92\x41\xce\x04\n\x05Roles\x12\x1e\x43reate new role in environment\x1a\x88\x03\x43reates a new role within the environment with specified permissions and metadata. Use this endpoint to define custom roles that can be assigned to users or groups. You can create hierarchical roles by extending existing roles, assign specific permissions, and configure display information. Roles are the foundation of your access control system and determine what actions users can perform.J\x99\x01\n\x03\x32\x30\x31\x12\x91\x01\ndRole created successfully. Returns the complete role object with system-generated ID and timestamps.\x12)\n\'\x1a%.scalekit.v1.roles.CreateRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x15\"\r/api/v1/roles:\x04role\x12\xb2\x05\n\nUpdateRole\x12$.scalekit.v1.roles.UpdateRoleRequest\x1a%.scalekit.v1.roles.UpdateRoleResponse\"\xd6\x04\x92\x41\xa5\x04\n\x05Roles\x12\x17Update role information\x1a\xf6\x02Modifies an existing role\'s properties including display name, description, permissions, and inheritance. Use this endpoint to update role metadata, change permission assignments, or modify role hierarchy. Only the fields you specify will be updated, leaving other properties unchanged. When updating permissions, the new list replaces all existing permissions for the role.J\x89\x01\n\x03\x32\x30\x30\x12\x81\x01\nTRole updated successfully. Returns the modified role object with updated timestamps.\x12)\n\'\x1a%.scalekit.v1.roles.UpdateRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02!\x1a\x19/api/v1/roles/{role_name}:\x04role\x12\xff\x04\n\x07GetRole\x12!.scalekit.v1.roles.GetRoleRequest\x1a\".scalekit.v1.roles.GetRoleResponse\"\xac\x04\x92\x41\x81\x04\n\x05Roles\x12\x10Get role details\x1a\xa9\x02Retrieves complete information for a specific role including metadata and inheritance details (base role and dependent role count). Use this endpoint to audit role configuration and understand the role\'s place in the hierarchy. To view the role\'s permissions, use the ListRolePermissions endpoint.J\xb9\x01\n\x03\x32\x30\x30\x12\xb1\x01\n\x86\x01Successfully retrieved role details. Returns the role object including metadata and inheritance details. Permissions are not included.\x12&\n$\x1a\".scalekit.v1.roles.GetRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1b\x12\x19/api/v1/roles/{role_name}\x12\x89\x06\n\tListRoles\x12#.scalekit.v1.roles.ListRolesRequest\x1a$.scalekit.v1.roles.ListRolesResponse\"\xb0\x05\x92\x41\x91\x05\n\x05Roles\x12\x1dList all roles in environment\x1a\xc4\x03Retrieves a comprehensive list of all roles available within the specified environment including organization roles. Use this endpoint to view all role definitions, including custom roles and their configurations. You can optionally include permission details for each role to understand their capabilities. This is useful for role management, auditing organization access controls, or understanding the available access levels within the organization.J\xa1\x01\n\x03\x32\x30\x30\x12\x99\x01\nmSuccessfully retrieved list of roles. Returns all roles with their metadata and optionally their permissions.\x12(\n&\x1a$.scalekit.v1.roles.ListRolesResponse\x82\xb5\x18\x02\x18\x64\x82\xd3\xe4\x93\x02\x0f\x12\r/api/v1/roles\x12\xac\x06\n\nDeleteRole\x12$.scalekit.v1.roles.DeleteRoleRequest\x1a\x16.google.protobuf.Empty\"\xdf\x05\x92\x41\xb4\x05\n\x05Roles\x12\x1e\x44\x65lete role and reassign users\x1a\xbb\x04Permanently removes a role from the environment and reassigns users who had that role to a different role. Use this endpoint when you need to clean up unused roles or restructure your access control system. The role cannot be deleted if it has dependent roles (roles that extend it) unless you specify a replacement role. If users are assigned to the role being deleted, you must provide a reassign_role_name to move those users to a different role before deletion can proceed. This action cannot be undone, so ensure no critical users depend on the role before deletion.JM\n\x03\x32\x30\x30\x12\x46\nDRole successfully deleted and users reassigned. No content returned.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1b*\x19/api/v1/roles/{role_name}\x12\xdc\x06\n\x16\x43reateOrganizationRole\x12\x30.scalekit.v1.roles.CreateOrganizationRoleRequest\x1a\x31.scalekit.v1.roles.CreateOrganizationRoleResponse\"\xdc\x05\x92\x41\xa0\x05\n\x05Roles\x12\x18\x43reate organization role\x1a\xc7\x03\x43reates a new role within the specified organization with basic configuration including name, display name, description, and permissions. Use this endpoint to define custom roles that can be assigned to users within the organization. You can create hierarchical roles by extending existing roles and assign specific permissions to control access levels. The role will be scoped to the organization and can be used for organization-specific access control.J\xb2\x01\n\x03\x32\x30\x31\x12\xaa\x01\nqOrganization role created successfully. Returns the complete role object with system-generated ID and timestamps.\x12\x35\n3\x1a\x31.scalekit.v1.roles.CreateOrganizationRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02,\"$/api/v1/organizations/{org_id}/roles:\x04role\x12\xb5\x06\n\x16UpdateOrganizationRole\x12\x30.scalekit.v1.roles.UpdateOrganizationRoleRequest\x1a\x31.scalekit.v1.roles.UpdateOrganizationRoleResponse\"\xb5\x05\x92\x41\xed\x04\n\x05Roles\x12\x18Update organization role\x1a\xa4\x03Modifies an existing organization role\'s properties including display name, description, permissions, and inheritance settings. Use this endpoint to update role metadata, change permission assignments, or modify role hierarchy within the organization. Only the fields you specify will be updated, leaving other properties unchanged. When updating permissions, the new list replaces all existing permissions for the role.J\xa2\x01\n\x03\x32\x30\x30\x12\x9a\x01\naOrganization role updated successfully. Returns the modified role object with updated timestamps.\x12\x35\n3\x1a\x31.scalekit.v1.roles.UpdateOrganizationRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x38\x1a\x30/api/v1/organizations/{org_id}/roles/{role_name}:\x04role\x12\xb4\x07\n\x13GetOrganizationRole\x12-.scalekit.v1.roles.GetOrganizationRoleRequest\x1a..scalekit.v1.roles.GetOrganizationRoleResponse\"\xbd\x06\x92\x41\xe7\x05\n\x05Roles\x12\x1dGet organization role details\x1a\xbf\x03Retrieves complete information for a specific organization role including metadata, inheritance details, and optionally permissions. Use this endpoint to audit role configuration and understand the role\'s place in the organization\'s role hierarchy. You can include permission details to see what capabilities the role provides. This operation is useful for role management, user assignment decisions, or understanding organization access controls.J\xfc\x01\n\x03\x32\x30\x30\x12\xf4\x01\n\xbd\x01Successfully retrieved organization role details. Returns the role object including metadata and inheritance details. Permissions are included only when requested via the include parameter.\x12\x32\n0\x1a..scalekit.v1.roles.GetOrganizationRoleResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x32\x12\x30/api/v1/organizations/{org_id}/roles/{role_name}\x12\xb7\x06\n\x15ListOrganizationRoles\x12/.scalekit.v1.roles.ListOrganizationRolesRequest\x1a\x30.scalekit.v1.roles.ListOrganizationRolesResponse\"\xba\x05\x92\x41\xf0\x04\n\x05Roles\x12\x17List organization roles\x1a\x90\x03Retrieves all environment roles and organization specific roles. Use this endpoint to view all role definitions, including custom roles and their configurations. You can optionally include permission details for each role to understand their capabilities. This is useful for role management, auditing organization access controls, or understanding the available access levels within the organization.J\xba\x01\n\x03\x32\x30\x30\x12\xb2\x01\nzSuccessfully retrieved list of organization roles. Returns all roles with their metadata and optionally their permissions.\x12\x34\n2\x1a\x30.scalekit.v1.roles.ListOrganizationRolesResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02&\x12$/api/v1/organizations/{org_id}/roles\x12\x8a\x06\n\x16\x44\x65leteOrganizationRole\x12\x30.scalekit.v1.roles.DeleteOrganizationRoleRequest\x1a\x16.google.protobuf.Empty\"\xa5\x05\x92\x41\xe3\x04\n\x05Roles\x12\x18\x44\x65lete organization role\x1a\xd6\x03Permanently removes a role from the organization and optionally reassigns users who had that role to a different role. Use this endpoint when you need to clean up unused roles or restructure your organization\'s access control system. If users are assigned to the role being deleted, you can provide a reassign_role_name to move those users to a different role before deletion. This action cannot be undone, so ensure no critical users depend on the role before deletion.Jg\n\x03\x32\x30\x30\x12`\n^Organization role successfully deleted and users reassigned if specified. No content returned.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x32*0/api/v1/organizations/{org_id}/roles/{role_name}\x12\xdb\x08\n\x11GetRoleUsersCount\x12+.scalekit.v1.roles.GetRoleUsersCountRequest\x1a,.scalekit.v1.roles.GetRoleUsersCountResponse\"\xea\x07\x92\x41\xb3\x07\n\x05Roles\x12\x1cRetrieve user count for role\x1a\x93\x05Retrieves the total number of users currently assigned to the specified role within the environment. Use this endpoint to monitor role usage, enforce user limits, or understand the scope of role assignments. Provide the role\'s unique name as a path parameter, and the response will include the current user count for that role. This operation is read-only and does not modify any data or user assignments. The count reflects all users who have the role either directly assigned or inherited through organization membership. This information is useful for capacity planning, security auditing, or understanding the impact of role changes across your user base.J\xf5\x01\n\x03\x32\x30\x30\x12\xed\x01\n\xb8\x01Successfully retrieved user count for the specified role. Returns the total number of users currently assigned to the role, including both direct assignments and inherited assignments.\x12\x30\n.\x1a,.scalekit.v1.roles.GetRoleUsersCountResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\'\x12%/api/v1/roles/{role_name}/users:count\x12\xb2\x07\n\x1dGetOrganizationRoleUsersCount\x12\x37.scalekit.v1.roles.GetOrganizationRoleUsersCountRequest\x1a\x38.scalekit.v1.roles.GetOrganizationRoleUsersCountResponse\"\x9d\x06\x92\x41\xc0\x05\n\x05Roles\x12 Get organization role user count\x1a\xc0\x03Retrieves the total number of users currently assigned to the specified organization role. Use this endpoint to monitor organization role usage, enforce user limits, or understand the scope of role assignments within the organization. Provide the organization ID and role name as path parameters. The response includes the user count for the requested organization role. This operation is read-only and does not modify any data or user assignments.J\xd1\x01\n\x03\x32\x30\x30\x12\xc9\x01\n\x88\x01Successfully retrieved user count for the specified organization role. Returns the total number of users currently assigned to the role.\x12<\n:\x1a\x38.scalekit.v1.roles.GetOrganizationRoleUsersCountResponse\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02>\x12\n\x03\x32\x30\x30\x12\x37\n5Permission successfully deleted. No content returned.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\'*%/api/v1/permissions/{permission_name}\x12\x80\t\n\x13ListRolePermissions\x12-.scalekit.v1.roles.ListRolePermissionsRequest\x1a..scalekit.v1.roles.ListRolePermissionsResponse\"\x89\x08\x92\x41\xd2\x07\n\x05Roles\x12\x19List permissions for role\x1a\xd7\x05Retrieves all permissions directly assigned to the specified role, excluding permissions inherited from base roles. Use this endpoint to view the explicit permission assignments for a role, which is useful for understanding direct role capabilities, auditing permission assignments, or managing role-permission relationships. Provide the role name as a path parameter, and the response will include only the permissions that are directly assigned to that role. This operation does not include inherited permissions from role hierarchies - use ListEffectiveRolePermissions to see the complete set of permissions including inheritance. Returns a list of permission objects with their names, descriptions, and assignment metadata.J\xd3\x01\n\x03\x32\x30\x30\x12\xcb\x01\n\x94\x01Successfully retrieved role permissions. Returns a list of all permissions directly assigned to the specified role, excluding inherited permissions.\x12\x32\n0\x1a..scalekit.v1.roles.ListRolePermissionsResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\'\x12%/api/v1/roles/{role_name}/permissions\x12\xfa\x08\n\x14\x41\x64\x64PermissionsToRole\x12..scalekit.v1.roles.AddPermissionsToRoleRequest\x1a/.scalekit.v1.roles.AddPermissionsToRoleResponse\"\x80\x08\x92\x41\xc6\x07\n\x05Roles\x12\x17\x41\x64\x64 permissions to role\x1a\xbd\x05\x41\x64\x64s one or more permissions to the specified role while preserving existing permission assignments. Use this endpoint to grant additional capabilities to a role without affecting its current permission set. Provide the role name as a path parameter and a list of permission names in the request body. The system will validate that all specified permissions exist in the environment and add them to the role. Existing permission assignments remain unchanged, making this operation safe for incremental permission management. This is useful for gradually expanding role capabilities or adding new permissions as your system evolves. Returns the updated list of all permissions now assigned to the role.J\xe3\x01\n\x03\x32\x30\x30\x12\xdb\x01\n\xa3\x01Permissions added to role successfully. Returns the complete list of all permissions now assigned to the role, including both existing and newly added permissions.\x12\x33\n1\x1a/.scalekit.v1.roles.AddPermissionsToRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02*\"%/api/v1/roles/{role_name}/permissions:\x01*\x12\xb7\x07\n\x18RemovePermissionFromRole\x12\x32.scalekit.v1.roles.RemovePermissionFromRoleRequest\x1a\x16.google.protobuf.Empty\"\xce\x06\x92\x41\x85\x06\n\x05Roles\x12\x1bRemove permission from role\x1a\x94\x05Removes a specific permission from the specified role, revoking that capability from all users assigned to the role. Use this endpoint to restrict role capabilities or remove unnecessary permissions. Provide both the role name and permission name as path parameters. This operation only affects the direct permission assignment and does not impact permissions inherited from base roles. If the permission is inherited through role hierarchy, you may need to modify the base role instead. This is useful for fine-tuning role permissions, implementing least-privilege access controls, or removing deprecated permissions. Returns no content on successful removal.JH\n\x03\x32\x30\x30\x12\x41\n?Permission removed from role successfully. No content returned.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x39*7/api/v1/roles/{role_name}/permissions/{permission_name}\x12\xdf\t\n\x1cListEffectiveRolePermissions\x12\x36.scalekit.v1.roles.ListEffectiveRolePermissionsRequest\x1a\x37.scalekit.v1.roles.ListEffectiveRolePermissionsResponse\"\xcd\x08\x92\x41\x92\x08\n\x05Roles\x12#List effective permissions for role\x1a\xd9\x05Retrieves the complete set of effective permissions for a role, including both directly assigned permissions and permissions inherited from base roles through the role hierarchy. Use this endpoint to understand the full scope of capabilities available to users assigned to a specific role. Provide the role name as a path parameter, and the response will include all permissions that apply to the role, accounting for inheritance relationships. This operation is essential for auditing role capabilities, understanding permission inheritance, or verifying the complete access scope before role assignment. Returns a comprehensive list of permission names representing the full set of effective permissions for the specified role.J\x87\x02\n\x03\x32\x30\x30\x12\xff\x01\n\xbf\x01Successfully retrieved effective permissions. Returns the complete list of all permissions that apply to the role, including both direct assignments and inherited permissions from base roles.\x12;\n9\x1a\x37.scalekit.v1.roles.ListEffectiveRolePermissionsResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02+\x12)/api/v1/roles/{role_name}/permissions:all\x1a\xe2\x02\x92\x41\xde\x02\n\x05Roles\x12\xd4\x02Role-based access control (RBAC) for defining and managing permissions in an environment. Create and update custom roles with explicit permissions, model role hierarchies through inheritance, view dependent roles, manage role-permission assignments, and list roles and permissions. Also provides a utility to count users assigned to a role.B1Z/github.com/scalekit-inc/scalekit/pkg/grpc/rolesb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -275,7 +275,7 @@ _globals['_ROLESSERVICE'].methods_by_name['DeleteRoleBase']._loaded_options = None _globals['_ROLESSERVICE'].methods_by_name['DeleteRoleBase']._serialized_options = b'\222A\262\005\n\005Roles\022$Delete role inheritance relationship\032\206\004Removes the base role inheritance relationship for a specified role, effectively eliminating all inherited permissions from the base role. Use this endpoint when you want to break the hierarchical relationship between roles and remove inherited permissions. The role will retain only its directly assigned permissions after this operation. This action cannot be undone, so ensure the role has sufficient direct permissions before removing inheritance. Returns no content on successful removal of the base relationship.Jz\n\003200\022s\nqBase role inheritance relationship successfully removed. The role now has only its directly assigned permissions.\202\265\030\002\030D\202\323\344\223\002 *\036/api/v1/roles/{role_name}/base' _globals['_ROLESSERVICE'].methods_by_name['DeleteOrganizationRoleBase']._loaded_options = None - _globals['_ROLESSERVICE'].methods_by_name['DeleteOrganizationRoleBase']._serialized_options = b'\222A\243\005\n\005Roles\022$Remove organization role inheritance\032\350\003Removes the base role inheritance relationship for a specified organization role, effectively eliminating all inherited permissions from the base role. Use this endpoint when you want to break the hierarchical relationship between roles and remove inherited permissions within the organization. The role will retain only its directly assigned permissions after this operation. This action cannot be undone, so ensure the role has sufficient direct permissions before removing inheritance.J\210\001\n\003200\022\200\001\n~Organization role base inheritance relationship successfully removed. The role now has only its directly assigned permissions.\202\265\030\002\030D\202\323\344\223\0027*5/api/v1/organizations/{org_id}/roles/{role_name}/base' + _globals['_ROLESSERVICE'].methods_by_name['DeleteOrganizationRoleBase']._serialized_options = b'\222A\243\005\n\005Roles\022$Remove organization role inheritance\032\350\003Removes the base role inheritance relationship for a specified organization role, effectively eliminating all inherited permissions from the base role. Use this endpoint when you want to break the hierarchical relationship between roles and remove inherited permissions within the organization. The role will retain only its directly assigned permissions after this operation. This action cannot be undone, so ensure the role has sufficient direct permissions before removing inheritance.J\210\001\n\003200\022\200\001\n~Organization role base inheritance relationship successfully removed. The role now has only its directly assigned permissions.\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\0027*5/api/v1/organizations/{org_id}/roles/{role_name}/base' _globals['_ROLESSERVICE'].methods_by_name['CreatePermission']._loaded_options = None _globals['_ROLESSERVICE'].methods_by_name['CreatePermission']._serialized_options = b'\222A\260\006\n\013Permissions\022\025Create new permission\032\306\004Creates a new permission that represents a specific action users can perform within the environment. Use this endpoint to define granular access controls for your RBAC system. You can provide a unique permission name following the format \'action:resource\' (for example, \'read:documents\', \'write:users\') and an optional description explaining the permission\'s purpose. The permission name must be unique across the environment and follows alphanumeric naming conventions with colons and underscores. Returns the created permission object including system-generated ID and timestamps.J\300\001\n\003201\022\270\001\n\204\001Permission created successfully. Returns the complete permission object with system-generated ID, name, description, and timestamps.\022/\n-\032+.scalekit.v1.roles.CreatePermissionResponse\202\265\030\002\030D\202\323\344\223\002!\"\023/api/v1/permissions:\npermission' _globals['_ROLESSERVICE'].methods_by_name['GetPermission']._loaded_options = None @@ -405,5 +405,5 @@ _globals['_DELETEORGANIZATIONROLEBASEREQUEST']._serialized_start=19004 _globals['_DELETEORGANIZATIONROLEBASEREQUEST']._serialized_end=19268 _globals['_ROLESSERVICE']._serialized_start=19330 - _globals['_ROLESSERVICE']._serialized_end=43398 + _globals['_ROLESSERVICE']._serialized_end=43413 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/tools/tools_pb2.py b/scalekit/v1/tools/tools_pb2.py index 4344b6a..df5fce8 100644 --- a/scalekit/v1/tools/tools_pb2.py +++ b/scalekit/v1/tools/tools_pb2.py @@ -24,7 +24,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dscalekit/v1/tools/tools.proto\x12\x11scalekit.v1.tools\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\x88\x01\n\x11\x43reateToolRequest\x12s\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolBF\x92\x41=2;Tool details including name, schema version, and definition\xbaH\x03\xc8\x01\x01R\x04tool\"c\n\x12\x43reateToolResponse\x12M\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB \x92\x41\x1d\x32\x1b\x44\x65tails of the created toolR\x04tool\"\xf0\x05\n\x04Tool\x12\x38\n\x02id\x18\x01 \x01(\tB(\x92\x41\"2\x15Unique ID of the toolJ\t\"tol_123\"\xe0\x41\x03R\x02id\x12I\n\x08provider\x18\x02 \x01(\tB-\x92\x41\'2\x1bProvider name (e.g. GOOGLE)J\x08\"GOOGLE\"\xe0\x41\x03R\x08provider\x12\x87\x01\n\ndefinition\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructBN\x92\x41\x45\x32$Tool definition in structured formatJ\x1d{\"input\": {\"type\": \"object\"}}\xbaH\x03\xc8\x01\x01R\ndefinition\x12s\n\x08metadata\x18\x04 \x01(\x0b\x32\x17.google.protobuf.StructB>\x92\x41;2\"Additional metadata about the toolJ\x15{\"category\": \"email\"}R\x08metadata\x12X\n\x04tags\x18\x05 \x03(\tBD\x92\x41\x41\x32$Tags for categorization or filteringJ\x19[\"notification\", \"email\"]R\x04tags\x12\x83\x01\n\nis_default\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBH\x92\x41\x42\x32:Marks this tool as the default version for the combinationJ\x04true\xe0\x41\x03R\tisDefault\x12\x83\x01\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampBH\x92\x41\x42\x32(Timestamp when the tool was last updatedJ\x16\"2023-10-01T12:00:00Z\"\xe0\x41\x03R\tupdatedAt\"\xd3\x01\n\nScopedTool\x12+\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolR\x04tool\x12\x1e\n\nidentifier\x18\x02 \x01(\tR\nidentifier\x12x\n\x14\x63onnected_account_id\x18\x03 \x01(\tBF\x92\x41<20ID of the connected account for this scoped toolJ\x08\"ca_123\"\xbaH\x04r\x02\x18\x64R\x12\x63onnectedAccountId\"\xfe\x01\n\x10ListToolsRequest\x12[\n\x06\x66ilter\x18\x01 \x01(\x0b\x32\x19.scalekit.v1.tools.FilterB(\x92\x41%2#Filter parameters for listing toolsR\x06\x66ilter\x12\x1b\n\tpage_size\x18\x02 \x01(\rR\x08pageSize\x12p\n\npage_token\x18\x03 \x01(\tBQ\x92\x41N2.Token from a previous response for pagination.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\x85\n\n\x06\x46ilter\x12t\n\x07summary\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB>\x92\x41;23Return only tool names instead of full tool detailsJ\x04trueR\x07summary\x12I\n\x08provider\x18\x02 \x01(\tB-\x92\x41#2\x17\x46ilter by tool providerJ\x08\"GOOGLE\"\xbaH\x04r\x02\x18\x32R\x08provider\x12j\n\nidentifier\x18\x03 \x01(\tBJ\x92\x41@2&Filter by connected account identifierJ\x16\"app_google_workspace\"\xbaH\x04r\x02\x18\x64R\nidentifier\x12I\n\ttool_name\x18\x04 \x03(\tB,\x92\x41)2\x13\x46ilter by tool nameJ\x12\"gmail_send_email\"R\x08toolName\x12g\n\x05query\x18\x05 \x01(\tBL\x92\x41@2&Filter by connected account identifierJ\x16\"gmail get attachment\"\xbaH\x06r\x04\x10\x03\x18\x64H\x00R\x05query\x88\x01\x01\x12\xdf\x01\n\tconnector\x18\x06 \x01(\tB\xbb\x01\x92\x41\xaf\x01\x32\xa0\x01\x43onnector name (e.g. \'My Gmail\'). When set together with identifier, resolves to a specific connected account and includes its custom MCP tools in the response.J\n\"My Gmail\"\xbaH\x05r\x03\x18\x90\x03H\x01R\tconnector\x88\x01\x01\x12\x87\x01\n\x0forganization_id\x18\x07 \x01(\tBY\x92\x41O26Organization ID to scope the connected account lookup.J\x15\"org_121312434123312\"\xbaH\x04r\x02\x18 H\x02R\x0eorganizationId\x88\x01\x01\x12p\n\x07user_id\x18\x08 \x01(\tBR\x92\x41H2.User ID to scope the connected account lookup.J\x16\"user_121312434123312\"\xbaH\x04r\x02\x18 H\x03R\x06userId\x88\x01\x01\x12\xea\x01\n\x14\x63onnected_account_id\x18\t \x01(\tB\xb2\x01\x92\x41\xa2\x01\x32\x95\x01\x43onnected account ID. Alternative to identifier + connector for directly identifying the connected account whose custom MCP tools should be included.J\x08\"ca_123\"\xbaH\tr\x07\x18\x64:\x03\x63\x61_H\x04R\x12\x63onnectedAccountId\x88\x01\x01\x42\x08\n\x06_queryB\x0c\n\n_connectorB\x12\n\x10_organization_idB\n\n\x08_user_idB\x17\n\x15_connected_account_id\"\x9b\x04\n\x11ListToolsResponse\x12v\n\x0fnext_page_token\x18\x01 \x01(\tBN\x92\x41K2)Token for fetching the next page of toolsJ\x1e\"eyJwYWdlIjozLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12Q\n\ntotal_size\x18\x02 \x01(\rB2\x92\x41/2(Total number of tools matching the queryJ\x03\x31\x30\x34R\ttotalSize\x12z\n\x0fprev_page_token\x18\x03 \x01(\tBR\x92\x41O2-Token for fetching the previous page of toolsJ\x1e\"eyJwYWdlIjoxLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12^\n\ntool_names\x18\x04 \x03(\tB?\x92\x41<2$List of tool names (if summary=true)J\x14[\"gmail_send_email\"]R\ttoolNames\x12_\n\x05tools\x18\x05 \x03(\x0b\x32\x17.scalekit.v1.tools.ToolB0\x92\x41-2+List of tools (if summary=false or omitted)R\x05tools\"\xe5\x0e\n\x12\x45xecuteToolRequest\x12Q\n\ttool_name\x18\x01 \x01(\tB4\x92\x41+2\x1bName of the tool to executeJ\x0c\"send_email\"\xbaH\x03\xc8\x01\x01R\x08toolName\x12\x99\x02\n\nidentifier\x18\x02 \x01(\tB\xf3\x01\x92\x41\xef\x01\x32\xd8\x01Optional. The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier). Use this in combination with connector to identify the connected account.J\x12\"user@example.com\"H\x00R\nidentifier\x88\x01\x01\x12\xfc\x01\n\x06params\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructB\xca\x01\x92\x41\xc6\x01\x32}JSON object containing the parameters required for tool execution. The structure depends on the specific tool being executed.JE{\"to\": \"user@example.com\", \"subject\": \"Hello\", \"body\": \"Hello World\"}R\x06params\x12\xea\x01\n\x14\x63onnected_account_id\x18\x04 \x01(\tB\xb2\x01\x92\x41\xa7\x01\x32\x9a\x01Optional. The unique ID of the connected account. Use this to directly identify the connected account instead of using identifier + connector combination.J\x08\"ca_123\"\xbaH\x04r\x02\x18\x64H\x01R\x12\x63onnectedAccountId\x88\x01\x01\x12\xed\x01\n\tconnector\x18\x05 \x01(\tB\xc9\x01\x92\x41\xbd\x01\x32\xa6\x01Optional. The name of the connector/provider (e.g., \'Google Workspace\', \'Slack\', \'Notion\'). Use this in combination with identifier to identify the connected account.J\x12\"Google Workspace\"\xbaH\x05r\x03\x18\x90\x03H\x02R\tconnector\x88\x01\x01\x12\xee\x01\n\x0forganization_id\x18\x06 \x01(\tB\xbf\x01\x92\x41\xb4\x01\x32\xa6\x01Optional. The organization ID to scope the connected account lookup. Use this to narrow down the search when the same identifier exists across multiple organizations.J\t\"org_123\"\xbaH\x04r\x02\x18\x64H\x03R\x0eorganizationId\x88\x01\x01\x12\xcf\x01\n\x07user_id\x18\x07 \x01(\tB\xb0\x01\x92\x41\xa5\x01\x32\x96\x01Optional. The user ID to scope the connected account lookup. Use this to narrow down the search when the same identifier exists across multiple users.J\n\"user_123\"\xbaH\x04r\x02\x18\x64H\x04R\x06userId\x88\x01\x01\x12\xd9\x01\n\x0c\x61gent_run_id\x18\x08 \x01(\tB\xb1\x01\x92\x41\xa5\x01\x32\x94\x01Optional. Customer-supplied identifier grouping multiple tool calls into a single agent run. Useful for correlating logs across an agentic workflow.J\x0c\"run_abc123\"\xbaH\x05r\x03\x18\xff\x01H\x05R\nagentRunId\x88\x01\x01\x42\r\n\x0b_identifierB\x17\n\x15_connected_account_idB\x0c\n\n_connectorB\x12\n\x10_organization_idB\n\n\x08_user_idB\x0f\n\r_agent_run_id\"\xa3\x02\n\x13\x45xecuteToolResponse\x12\xac\x01\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\x7f\x92\x41|23Free-flowing JSON parameters for the tool executionJE{\"to\": \"user@example.com\", \"subject\": \"Hello\", \"body\": \"Hello World\"}R\x04\x64\x61ta\x12]\n\x0c\x65xecution_id\x18\x02 \x01(\tB:\x92\x41\x37\x32(Unique identifier for the tool executionJ\x0b\"123456789\"R\x0b\x65xecutionId\"\xad\x02\n\x15SetToolDefaultRequest\x12\x61\n\x04name\x18\x01 \x01(\tBM\x92\x41/2\x19\x46ully qualified tool nameJ\x12\"gmail_send_email\"\xbaH\x18r\x13\x10\x01\x18\x64\x32\r^[a-z0-9_].*$\xc8\x01\x01R\x04name\x12W\n\x0eschema_version\x18\x02 \x01(\tB0\x92\x41!2\x1aSchema version of the toolJ\x03\"1\"\xbaH\tr\x04\x10\x01\x18\n\xc8\x01\x01R\rschemaVersion\x12X\n\x0ctool_version\x18\x03 \x01(\tB5\x92\x41&2\x1fTool version to mark as defaultJ\x03\"1\"\xbaH\tr\x04\x10\x01\x18\n\xc8\x01\x01R\x0btoolVersion\"j\n\x16SetToolDefaultResponse\x12P\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB#\x92\x41 2\x1eThe tool now marked as defaultR\x04tool\"^\n\x11UpdateToolRequest\x12I\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB\x1c\x92\x41\x13\x32\x11Updated tool data\xbaH\x03\xc8\x01\x01R\x04tool\"X\n\x12UpdateToolResponse\x12\x42\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB\x15\x92\x41\x12\x32\x10The updated toolR\x04tool\"0\n\x11\x44\x65leteToolRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06:\x04tol_R\x02id\"\x97\x03\n\x16ListScopedToolsRequest\x12z\n\nidentifier\x18\x01 \x01(\tBZ\x92\x41M23Identifier of the connected account to filter toolsJ\x16\"app_google_workspace\"\xbaH\x07r\x02\x18\x64\xc8\x01\x01R\nidentifier\x12r\n\x06\x66ilter\x18\x02 \x01(\x0b\x32#.scalekit.v1.tools.ScopedToolFilterB5\x92\x41,2*Filter parameters for listing scoped tools\xbaH\x03\xc8\x01\x01R\x06\x66ilter\x12\x1b\n\tpage_size\x18\x03 \x01(\rR\x08pageSize\x12p\n\npage_token\x18\x04 \x01(\tBQ\x92\x41N2.Token from a previous response for pagination.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\x95\x03\n\x17ListScopedToolsResponse\x12v\n\x0fnext_page_token\x18\x01 \x01(\tBN\x92\x41K2)Token for fetching the next page of toolsJ\x1e\"eyJwYWdlIjozLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12Q\n\ntotal_size\x18\x02 \x01(\rB2\x92\x41/2(Total number of tools matching the queryJ\x03\x31\x30\x34R\ttotalSize\x12z\n\x0fprev_page_token\x18\x03 \x01(\tBR\x92\x41O2-Token for fetching the previous page of toolsJ\x1e\"eyJwYWdlIjoxLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12\x33\n\x05tools\x18\x05 \x03(\x0b\x32\x1d.scalekit.v1.tools.ScopedToolR\x05tools\"z\n\x10ScopedToolFilter\x12\x1c\n\tproviders\x18\x01 \x03(\tR\tproviders\x12\x1d\n\ntool_names\x18\x02 \x03(\tR\ttoolNames\x12)\n\x10\x63onnection_names\x18\x03 \x03(\tR\x0f\x63onnectionNames\"\xb3\x02\n\x19ListAvailableToolsRequest\x12\x86\x01\n\nidentifier\x18\x01 \x01(\tBf\x92\x41Y2?Identifier of the connected account to list available tools forJ\x16\"app_google_workspace\"\xbaH\x07r\x02\x18\x64\xc8\x01\x01R\nidentifier\x12\x1b\n\tpage_size\x18\x02 \x01(\rR\x08pageSize\x12p\n\npage_token\x18\x03 \x01(\tBQ\x92\x41N2.Token from a previous response for pagination.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\xcd\x03\n\x1aListAvailableToolsResponse\x12v\n\x0fnext_page_token\x18\x01 \x01(\tBN\x92\x41K2)Token for fetching the next page of toolsJ\x1e\"eyJwYWdlIjozLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12[\n\ntotal_size\x18\x02 \x01(\rB<\x92\x41\x39\x32\x32Total number of available tools matching the queryJ\x03\x31\x30\x34R\ttotalSize\x12z\n\x0fprev_page_token\x18\x03 \x01(\tBR\x92\x41O2-Token for fetching the previous page of toolsJ\x1e\"eyJwYWdlIjoxLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12^\n\x05tools\x18\x04 \x03(\x0b\x32\x17.scalekit.v1.tools.ToolB/\x92\x41,2*List of tools available for the identifierR\x05tools2\xe8\x18\n\x0bToolService\x12\xf2\x01\n\nCreateTool\x12$.scalekit.v1.tools.CreateToolRequest\x1a%.scalekit.v1.tools.CreateToolResponse\"\x96\x01\x92\x41\x63\n\x05Tools\x12\x11\x43reate a new tool\x1aGRegister a new tool with its schema, metadata, and other configuration.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\"\r/api/v1/tools:\x04tool\x12\xfa\x01\n\tListTools\x12#.scalekit.v1.tools.ListToolsRequest\x1a$.scalekit.v1.tools.ListToolsResponse\"\xa1\x01\x92\x41t\n\x05Tools\x12\nList tools\x1a_Fetch tools by provider, identifier, and connector. If `summary=true`, returns only tool names.\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x0f\x12\r/api/v1/tools\x12\x9b\x01\n\x0fListScopedTools\x12).scalekit.v1.tools.ListScopedToolsRequest\x1a*.scalekit.v1.tools.ListScopedToolsResponse\"1\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/tools/scoped\x12\x84\x04\n\x12ListAvailableTools\x12,.scalekit.v1.tools.ListAvailableToolsRequest\x1a-.scalekit.v1.tools.ListAvailableToolsResponse\"\x90\x03\x92\x41\xd8\x02\n\x05Tools\x12\x31List all tools for a connected account identifier\x1aQLists all tools for a given Connected Account Identifier. Identifier is required.J*\n\x03\x32\x30\x30\x12#\n!Paginated list of available toolsJ:\n\x03\x34\x30\x30\x12\x33\n1Invalid request - missing or malformed identifierJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJ\x1d\n\x03\x34\x30\x34\x12\x16\n\x14Identifier not found\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\x12\x17/api/v1/tools/available\x12\xac\x02\n\x0eSetToolDefault\x12(.scalekit.v1.tools.SetToolDefaultRequest\x1a).scalekit.v1.tools.SetToolDefaultResponse\"\xc4\x01\x92\x41\x87\x01\n\x05Tools\x12#Marks a tool as the default version\x1aYSet a specific tool (by name, schema version, tool version, and provider) as the default.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\"\x19/api/v1/tools:set_default:\x01*\x12\xd8\x01\n\nUpdateTool\x12$.scalekit.v1.tools.UpdateToolRequest\x1a%.scalekit.v1.tools.UpdateToolResponse\"}\x92\x41J\n\x05Tools\x12\rUpdate a tool\x1a\x32Update an existing tool by provider and tool name.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\x1a\r/api/v1/tools:\x04tool\x12\xd9\x01\n\nDeleteTool\x12$.scalekit.v1.tools.DeleteToolRequest\x1a\x16.google.protobuf.Empty\"\x8c\x01\x92\x41Z\n\x05Tools\x12\rDelete a tool\x1a\x42\x44\x65lete a tool by name, schema version, tool version, and provider.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x14*\x12/api/v1/tools/{id}\x12\xc2\t\n\x0b\x45xecuteTool\x12%.scalekit.v1.tools.ExecuteToolRequest\x1a&.scalekit.v1.tools.ExecuteToolResponse\"\xe3\x08\x92\x41\xba\x08\n\x12\x43onnected Accounts\x12(Execute a tool using a connected account\x1a\xcf\x03\x45xecutes a tool action using authentication credentials from a connected account. Specify the tool by name and provide required parameters as JSON. The connected account can be identified by ID, or by combination of organization/user, connector, and identifier. Returns the execution result data and a unique execution ID for tracking. Use this endpoint to perform actions like sending emails, creating calendar events, or managing resources in external services.Jq\n\x03\x32\x30\x30\x12j\n\x92\x41;2\"Additional metadata about the toolJ\x15{\"category\": \"email\"}R\x08metadata\x12X\n\x04tags\x18\x05 \x03(\tBD\x92\x41\x41\x32$Tags for categorization or filteringJ\x19[\"notification\", \"email\"]R\x04tags\x12\x83\x01\n\nis_default\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBH\x92\x41\x42\x32:Marks this tool as the default version for the combinationJ\x04true\xe0\x41\x03R\tisDefault\x12\x83\x01\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampBH\x92\x41\x42\x32(Timestamp when the tool was last updatedJ\x16\"2023-10-01T12:00:00Z\"\xe0\x41\x03R\tupdatedAt\"\xd3\x01\n\nScopedTool\x12+\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolR\x04tool\x12\x1e\n\nidentifier\x18\x02 \x01(\tR\nidentifier\x12x\n\x14\x63onnected_account_id\x18\x03 \x01(\tBF\x92\x41<20ID of the connected account for this scoped toolJ\x08\"ca_123\"\xbaH\x04r\x02\x18\x64R\x12\x63onnectedAccountId\"\xfe\x01\n\x10ListToolsRequest\x12[\n\x06\x66ilter\x18\x01 \x01(\x0b\x32\x19.scalekit.v1.tools.FilterB(\x92\x41%2#Filter parameters for listing toolsR\x06\x66ilter\x12\x1b\n\tpage_size\x18\x02 \x01(\rR\x08pageSize\x12p\n\npage_token\x18\x03 \x01(\tBQ\x92\x41N2.Token from a previous response for pagination.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\xf3\x03\n\x06\x46ilter\x12t\n\x07summary\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB>\x92\x41;23Return only tool names instead of full tool detailsJ\x04trueR\x07summary\x12I\n\x08provider\x18\x02 \x01(\tB-\x92\x41#2\x17\x46ilter by tool providerJ\x08\"GOOGLE\"\xbaH\x04r\x02\x18\x32R\x08provider\x12j\n\nidentifier\x18\x03 \x01(\tBJ\x92\x41@2&Filter by connected account identifierJ\x16\"app_google_workspace\"\xbaH\x04r\x02\x18\x64R\nidentifier\x12I\n\ttool_name\x18\x04 \x03(\tB,\x92\x41)2\x13\x46ilter by tool nameJ\x12\"gmail_send_email\"R\x08toolName\x12g\n\x05query\x18\x05 \x01(\tBL\x92\x41@2&Filter by connected account identifierJ\x16\"gmail get attachment\"\xbaH\x06r\x04\x10\x03\x18\x64H\x00R\x05query\x88\x01\x01\x42\x08\n\x06_query\"\x9b\x04\n\x11ListToolsResponse\x12v\n\x0fnext_page_token\x18\x01 \x01(\tBN\x92\x41K2)Token for fetching the next page of toolsJ\x1e\"eyJwYWdlIjozLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12Q\n\ntotal_size\x18\x02 \x01(\rB2\x92\x41/2(Total number of tools matching the queryJ\x03\x31\x30\x34R\ttotalSize\x12z\n\x0fprev_page_token\x18\x03 \x01(\tBR\x92\x41O2-Token for fetching the previous page of toolsJ\x1e\"eyJwYWdlIjoxLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12^\n\ntool_names\x18\x04 \x03(\tB?\x92\x41<2$List of tool names (if summary=true)J\x14[\"gmail_send_email\"]R\ttoolNames\x12_\n\x05tools\x18\x05 \x03(\x0b\x32\x17.scalekit.v1.tools.ToolB0\x92\x41-2+List of tools (if summary=false or omitted)R\x05tools\"\xf7\x0c\n\x12\x45xecuteToolRequest\x12Q\n\ttool_name\x18\x01 \x01(\tB4\x92\x41+2\x1bName of the tool to executeJ\x0c\"send_email\"\xbaH\x03\xc8\x01\x01R\x08toolName\x12\x99\x02\n\nidentifier\x18\x02 \x01(\tB\xf3\x01\x92\x41\xef\x01\x32\xd8\x01Optional. The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier). Use this in combination with connector to identify the connected account.J\x12\"user@example.com\"H\x00R\nidentifier\x88\x01\x01\x12\xfc\x01\n\x06params\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructB\xca\x01\x92\x41\xc6\x01\x32}JSON object containing the parameters required for tool execution. The structure depends on the specific tool being executed.JE{\"to\": \"user@example.com\", \"subject\": \"Hello\", \"body\": \"Hello World\"}R\x06params\x12\xea\x01\n\x14\x63onnected_account_id\x18\x04 \x01(\tB\xb2\x01\x92\x41\xa7\x01\x32\x9a\x01Optional. The unique ID of the connected account. Use this to directly identify the connected account instead of using identifier + connector combination.J\x08\"ca_123\"\xbaH\x04r\x02\x18\x64H\x01R\x12\x63onnectedAccountId\x88\x01\x01\x12\xec\x01\n\tconnector\x18\x05 \x01(\tB\xc8\x01\x92\x41\xbd\x01\x32\xa6\x01Optional. The name of the connector/provider (e.g., \'Google Workspace\', \'Slack\', \'Notion\'). Use this in combination with identifier to identify the connected account.J\x12\"Google Workspace\"\xbaH\x04r\x02\x18\x64H\x02R\tconnector\x88\x01\x01\x12\xee\x01\n\x0forganization_id\x18\x06 \x01(\tB\xbf\x01\x92\x41\xb4\x01\x32\xa6\x01Optional. The organization ID to scope the connected account lookup. Use this to narrow down the search when the same identifier exists across multiple organizations.J\t\"org_123\"\xbaH\x04r\x02\x18\x64H\x03R\x0eorganizationId\x88\x01\x01\x12\xcf\x01\n\x07user_id\x18\x07 \x01(\tB\xb0\x01\x92\x41\xa5\x01\x32\x96\x01Optional. The user ID to scope the connected account lookup. Use this to narrow down the search when the same identifier exists across multiple users.J\n\"user_123\"\xbaH\x04r\x02\x18\x64H\x04R\x06userId\x88\x01\x01\x42\r\n\x0b_identifierB\x17\n\x15_connected_account_idB\x0c\n\n_connectorB\x12\n\x10_organization_idB\n\n\x08_user_id\"\xa3\x02\n\x13\x45xecuteToolResponse\x12\xac\x01\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\x7f\x92\x41|23Free-flowing JSON parameters for the tool executionJE{\"to\": \"user@example.com\", \"subject\": \"Hello\", \"body\": \"Hello World\"}R\x04\x64\x61ta\x12]\n\x0c\x65xecution_id\x18\x02 \x01(\tB:\x92\x41\x37\x32(Unique identifier for the tool executionJ\x0b\"123456789\"R\x0b\x65xecutionId\"\xad\x02\n\x15SetToolDefaultRequest\x12\x61\n\x04name\x18\x01 \x01(\tBM\x92\x41/2\x19\x46ully qualified tool nameJ\x12\"gmail_send_email\"\xbaH\x18r\x13\x10\x01\x18\x64\x32\r^[a-z0-9_].*$\xc8\x01\x01R\x04name\x12W\n\x0eschema_version\x18\x02 \x01(\tB0\x92\x41!2\x1aSchema version of the toolJ\x03\"1\"\xbaH\tr\x04\x10\x01\x18\n\xc8\x01\x01R\rschemaVersion\x12X\n\x0ctool_version\x18\x03 \x01(\tB5\x92\x41&2\x1fTool version to mark as defaultJ\x03\"1\"\xbaH\tr\x04\x10\x01\x18\n\xc8\x01\x01R\x0btoolVersion\"j\n\x16SetToolDefaultResponse\x12P\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB#\x92\x41 2\x1eThe tool now marked as defaultR\x04tool\"^\n\x11UpdateToolRequest\x12I\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB\x1c\x92\x41\x13\x32\x11Updated tool data\xbaH\x03\xc8\x01\x01R\x04tool\"X\n\x12UpdateToolResponse\x12\x42\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB\x15\x92\x41\x12\x32\x10The updated toolR\x04tool\"0\n\x11\x44\x65leteToolRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06:\x04tol_R\x02id\"\x91\x03\n\x16ListScopedToolsRequest\x12z\n\nidentifier\x18\x01 \x01(\tBZ\x92\x41M23Identifier of the connected account to filter toolsJ\x16\"app_google_workspace\"\xbaH\x07r\x02\x18\x64\xc8\x01\x01R\nidentifier\x12l\n\x06\x66ilter\x18\x02 \x01(\x0b\x32#.scalekit.v1.tools.ScopedToolFilterB/\x92\x41,2*Filter parameters for listing scoped toolsR\x06\x66ilter\x12\x1b\n\tpage_size\x18\x03 \x01(\rR\x08pageSize\x12p\n\npage_token\x18\x04 \x01(\tBQ\x92\x41N2.Token from a previous response for pagination.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\x95\x03\n\x17ListScopedToolsResponse\x12v\n\x0fnext_page_token\x18\x01 \x01(\tBN\x92\x41K2)Token for fetching the next page of toolsJ\x1e\"eyJwYWdlIjozLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12Q\n\ntotal_size\x18\x02 \x01(\rB2\x92\x41/2(Total number of tools matching the queryJ\x03\x31\x30\x34R\ttotalSize\x12z\n\x0fprev_page_token\x18\x03 \x01(\tBR\x92\x41O2-Token for fetching the previous page of toolsJ\x1e\"eyJwYWdlIjoxLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12\x33\n\x05tools\x18\x05 \x03(\x0b\x32\x1d.scalekit.v1.tools.ScopedToolR\x05tools\"z\n\x10ScopedToolFilter\x12\x1c\n\tproviders\x18\x01 \x03(\tR\tproviders\x12\x1d\n\ntool_names\x18\x02 \x03(\tR\ttoolNames\x12)\n\x10\x63onnection_names\x18\x03 \x03(\tR\x0f\x63onnectionNames2\xe1\x14\n\x0bToolService\x12\xf2\x01\n\nCreateTool\x12$.scalekit.v1.tools.CreateToolRequest\x1a%.scalekit.v1.tools.CreateToolResponse\"\x96\x01\x92\x41\x63\n\x05Tools\x12\x11\x43reate a new tool\x1aGRegister a new tool with its schema, metadata, and other configuration.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\"\r/api/v1/tools:\x04tool\x12\xfa\x01\n\tListTools\x12#.scalekit.v1.tools.ListToolsRequest\x1a$.scalekit.v1.tools.ListToolsResponse\"\xa1\x01\x92\x41t\n\x05Tools\x12\nList tools\x1a_Fetch tools by provider, identifier, and connector. If `summary=true`, returns only tool names.\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x0f\x12\r/api/v1/tools\x12\x9b\x01\n\x0fListScopedTools\x12).scalekit.v1.tools.ListScopedToolsRequest\x1a*.scalekit.v1.tools.ListScopedToolsResponse\"1\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/tools/scoped\x12\xac\x02\n\x0eSetToolDefault\x12(.scalekit.v1.tools.SetToolDefaultRequest\x1a).scalekit.v1.tools.SetToolDefaultResponse\"\xc4\x01\x92\x41\x87\x01\n\x05Tools\x12#Marks a tool as the default version\x1aYSet a specific tool (by name, schema version, tool version, and provider) as the default.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\"\x19/api/v1/tools:set_default:\x01*\x12\xd8\x01\n\nUpdateTool\x12$.scalekit.v1.tools.UpdateToolRequest\x1a%.scalekit.v1.tools.UpdateToolResponse\"}\x92\x41J\n\x05Tools\x12\rUpdate a tool\x1a\x32Update an existing tool by provider and tool name.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\x1a\r/api/v1/tools:\x04tool\x12\xd9\x01\n\nDeleteTool\x12$.scalekit.v1.tools.DeleteToolRequest\x1a\x16.google.protobuf.Empty\"\x8c\x01\x92\x41Z\n\x05Tools\x12\rDelete a tool\x1a\x42\x44\x65lete a tool by name, schema version, tool version, and provider.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x14*\x12/api/v1/tools/{id}\x12\xc2\t\n\x0b\x45xecuteTool\x12%.scalekit.v1.tools.ExecuteToolRequest\x1a&.scalekit.v1.tools.ExecuteToolResponse\"\xe3\x08\x92\x41\xba\x08\n\x12\x43onnected Accounts\x12(Execute a tool using a connected account\x1a\xcf\x03\x45xecutes a tool action using authentication credentials from a connected account. Specify the tool by name and provide required parameters as JSON. The connected account can be identified by ID, or by combination of organization/user, connector, and identifier. Returns the execution result data and a unique execution ID for tracking. Use this endpoint to perform actions like sending emails, creating calendar events, or managing resources in external services.Jq\n\x03\x32\x30\x30\x12j\n None: ... class Filter(_message.Message): - __slots__ = ("summary", "provider", "identifier", "tool_name", "query", "connector", "organization_id", "user_id", "connected_account_id") + __slots__ = ("summary", "provider", "identifier", "tool_name", "query") SUMMARY_FIELD_NUMBER: _ClassVar[int] PROVIDER_FIELD_NUMBER: _ClassVar[int] IDENTIFIER_FIELD_NUMBER: _ClassVar[int] TOOL_NAME_FIELD_NUMBER: _ClassVar[int] QUERY_FIELD_NUMBER: _ClassVar[int] - CONNECTOR_FIELD_NUMBER: _ClassVar[int] - ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] - USER_ID_FIELD_NUMBER: _ClassVar[int] - CONNECTED_ACCOUNT_ID_FIELD_NUMBER: _ClassVar[int] summary: _wrappers_pb2.BoolValue provider: str identifier: str tool_name: _containers.RepeatedScalarFieldContainer[str] query: str - connector: str - organization_id: str - user_id: str - connected_account_id: str - def __init__(self, summary: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., provider: _Optional[str] = ..., identifier: _Optional[str] = ..., tool_name: _Optional[_Iterable[str]] = ..., query: _Optional[str] = ..., connector: _Optional[str] = ..., organization_id: _Optional[str] = ..., user_id: _Optional[str] = ..., connected_account_id: _Optional[str] = ...) -> None: ... + def __init__(self, summary: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., provider: _Optional[str] = ..., identifier: _Optional[str] = ..., tool_name: _Optional[_Iterable[str]] = ..., query: _Optional[str] = ...) -> None: ... class ListToolsResponse(_message.Message): __slots__ = ("next_page_token", "total_size", "prev_page_token", "tool_names", "tools") @@ -102,7 +94,7 @@ class ListToolsResponse(_message.Message): def __init__(self, next_page_token: _Optional[str] = ..., total_size: _Optional[int] = ..., prev_page_token: _Optional[str] = ..., tool_names: _Optional[_Iterable[str]] = ..., tools: _Optional[_Iterable[_Union[Tool, _Mapping]]] = ...) -> None: ... class ExecuteToolRequest(_message.Message): - __slots__ = ("tool_name", "identifier", "params", "connected_account_id", "connector", "organization_id", "user_id", "agent_run_id") + __slots__ = ("tool_name", "identifier", "params", "connected_account_id", "connector", "organization_id", "user_id") TOOL_NAME_FIELD_NUMBER: _ClassVar[int] IDENTIFIER_FIELD_NUMBER: _ClassVar[int] PARAMS_FIELD_NUMBER: _ClassVar[int] @@ -110,7 +102,6 @@ class ExecuteToolRequest(_message.Message): CONNECTOR_FIELD_NUMBER: _ClassVar[int] ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] USER_ID_FIELD_NUMBER: _ClassVar[int] - AGENT_RUN_ID_FIELD_NUMBER: _ClassVar[int] tool_name: str identifier: str params: _struct_pb2.Struct @@ -118,8 +109,7 @@ class ExecuteToolRequest(_message.Message): connector: str organization_id: str user_id: str - agent_run_id: str - def __init__(self, tool_name: _Optional[str] = ..., identifier: _Optional[str] = ..., params: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., connected_account_id: _Optional[str] = ..., connector: _Optional[str] = ..., organization_id: _Optional[str] = ..., user_id: _Optional[str] = ..., agent_run_id: _Optional[str] = ...) -> None: ... + def __init__(self, tool_name: _Optional[str] = ..., identifier: _Optional[str] = ..., params: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., connected_account_id: _Optional[str] = ..., connector: _Optional[str] = ..., organization_id: _Optional[str] = ..., user_id: _Optional[str] = ...) -> None: ... class ExecuteToolResponse(_message.Message): __slots__ = ("data", "execution_id") @@ -196,25 +186,3 @@ class ScopedToolFilter(_message.Message): tool_names: _containers.RepeatedScalarFieldContainer[str] connection_names: _containers.RepeatedScalarFieldContainer[str] def __init__(self, providers: _Optional[_Iterable[str]] = ..., tool_names: _Optional[_Iterable[str]] = ..., connection_names: _Optional[_Iterable[str]] = ...) -> None: ... - -class ListAvailableToolsRequest(_message.Message): - __slots__ = ("identifier", "page_size", "page_token") - IDENTIFIER_FIELD_NUMBER: _ClassVar[int] - PAGE_SIZE_FIELD_NUMBER: _ClassVar[int] - PAGE_TOKEN_FIELD_NUMBER: _ClassVar[int] - identifier: str - page_size: int - page_token: str - def __init__(self, identifier: _Optional[str] = ..., page_size: _Optional[int] = ..., page_token: _Optional[str] = ...) -> None: ... - -class ListAvailableToolsResponse(_message.Message): - __slots__ = ("next_page_token", "total_size", "prev_page_token", "tools") - NEXT_PAGE_TOKEN_FIELD_NUMBER: _ClassVar[int] - TOTAL_SIZE_FIELD_NUMBER: _ClassVar[int] - PREV_PAGE_TOKEN_FIELD_NUMBER: _ClassVar[int] - TOOLS_FIELD_NUMBER: _ClassVar[int] - next_page_token: str - total_size: int - prev_page_token: str - tools: _containers.RepeatedCompositeFieldContainer[Tool] - def __init__(self, next_page_token: _Optional[str] = ..., total_size: _Optional[int] = ..., prev_page_token: _Optional[str] = ..., tools: _Optional[_Iterable[_Union[Tool, _Mapping]]] = ...) -> None: ... diff --git a/scalekit/v1/tools/tools_pb2_grpc.py b/scalekit/v1/tools/tools_pb2_grpc.py index 41ded94..aefad8e 100644 --- a/scalekit/v1/tools/tools_pb2_grpc.py +++ b/scalekit/v1/tools/tools_pb2_grpc.py @@ -30,11 +30,6 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.ListScopedToolsRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.ListScopedToolsResponse.FromString, ) - self.ListAvailableTools = channel.unary_unary( - '/scalekit.v1.tools.ToolService/ListAvailableTools', - request_serializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.ListAvailableToolsRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.ListAvailableToolsResponse.FromString, - ) self.SetToolDefault = channel.unary_unary( '/scalekit.v1.tools.ToolService/SetToolDefault', request_serializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.SetToolDefaultRequest.SerializeToString, @@ -78,12 +73,6 @@ def ListScopedTools(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') - def ListAvailableTools(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - def SetToolDefault(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -127,11 +116,6 @@ def add_ToolServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.ListScopedToolsRequest.FromString, response_serializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.ListScopedToolsResponse.SerializeToString, ), - 'ListAvailableTools': grpc.unary_unary_rpc_method_handler( - servicer.ListAvailableTools, - request_deserializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.ListAvailableToolsRequest.FromString, - response_serializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.ListAvailableToolsResponse.SerializeToString, - ), 'SetToolDefault': grpc.unary_unary_rpc_method_handler( servicer.SetToolDefault, request_deserializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.SetToolDefaultRequest.FromString, @@ -213,23 +197,6 @@ def ListScopedTools(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - @staticmethod - def ListAvailableTools(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.tools.ToolService/ListAvailableTools', - scalekit_dot_v1_dot_tools_dot_tools__pb2.ListAvailableToolsRequest.SerializeToString, - scalekit_dot_v1_dot_tools_dot_tools__pb2.ListAvailableToolsResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - @staticmethod def SetToolDefault(request, target, diff --git a/scalekit/v1/users/users_pb2.py b/scalekit/v1/users/users_pb2.py index 4bc8441..c69f3ee 100644 --- a/scalekit/v1/users/users_pb2.py +++ b/scalekit/v1/users/users_pb2.py @@ -24,7 +24,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dscalekit/v1/users/users.proto\x12\x11scalekit.v1.users\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a\'scalekit/v1/errdetails/errdetails.proto\x1a!scalekit/v1/options/options.proto\"\xf1\r\n\x04User\x12u\n\x02id\x18\x01 \x01(\tBe\x92\x41\x62\x32HUnique system-generated identifier for the user. Immutable once created.J\x16\"usr_1234abcd5678efgh\"R\x02id\x12\xaf\x01\n\x0e\x65nvironment_id\x18\x02 \x01(\tB\x87\x01\x92\x41r2XIdentifier of the environment where the user was created. System-assigned and read-only.J\x16\"env_9876zyxw5432vuts\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\renvironmentId\x12\x9c\x01\n\x0b\x63reate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB_\x92\x41Y2WTimestamp when the user account was initially created. Automatically set by the server.\xe0\x41\x03R\ncreateTime\x12\xa1\x01\n\x0bupdate_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampBd\x92\x41^2\\Timestamp of the last modification to the user account. Automatically updated by the server.\xe0\x41\x03R\nupdateTime\x12\x98\x01\n\x05\x65mail\x18\x05 \x01(\tB\x81\x01\x92\x41w2aPrimary email address for the user. Must be unique across the environment and valid per RFC 5322.J\x12\"user@example.com\"\xbaH\x04r\x02`\x01R\x05\x65mail\x12\xa2\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tB|\x92\x41y2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x12\"ext_12345a67b89c\"H\x00R\nexternalId\x88\x01\x01\x12\xa9\x01\n\x0bmemberships\x18\x07 \x03(\x0b\x32+.scalekit.v1.commons.OrganizationMembershipBZ\x92\x41W2UList of organization memberships. Automatically populated based on group assignments.R\x0bmemberships\x12\x9c\x01\n\x0cuser_profile\x18\x08 \x01(\x0b\x32 .scalekit.v1.commons.UserProfileBW\x92\x41T2RUser\'s personal information including name, address, and other profile attributes.R\x0buserProfile\x12\x80\x02\n\x08metadata\x18\t \x03(\x0b\x32%.scalekit.v1.users.User.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xa1\x01\n\x0flast_login_time\x18\n \x01(\x0b\x32\x1a.google.protobuf.TimestampB]\x92\x41W2UTimestamp of the user\'s most recent successful authentication. Updated automatically.\xe0\x41\x03R\rlastLoginTime\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_id\"\xa6\x02\n\x1e\x43reateUserAndMembershipRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x39\n\x04user\x18\x02 \x01(\x0b\x32\x1d.scalekit.v1.users.CreateUserB\x06\xbaH\x03\xc8\x01\x01R\x04user\x12\x85\x01\n\x15send_invitation_email\x18\x03 \x01(\x08\x42L\x92\x41I2AIf true, sends an activation email to the user. Defaults to true.J\x04trueH\x00R\x13sendInvitationEmail\x88\x01\x01\x42\x18\n\x16_send_invitation_email\"N\n\x1f\x43reateUserAndMembershipResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\xbc\x05\n\nUpdateUser\x12\xa2\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tB|\x92\x41y2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x12\"ext_12345a67b89c\"H\x00R\nexternalId\x88\x01\x01\x12\xa0\x01\n\x0cuser_profile\x18\x08 \x01(\x0b\x32$.scalekit.v1.users.UpdateUserProfileBW\x92\x41T2RUser\'s personal information including name, address, and other profile attributes.R\x0buserProfile\x12\x86\x02\n\x08metadata\x18\t \x03(\x0b\x32+.scalekit.v1.users.UpdateUser.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idJ\x04\x08\x01\x10\x06J\x04\x08\x07\x10\x08J\x04\x08\n\x10\x0b\"\xab\x04\n\x11UpdateUserRequest\x12\x8c\x01\n\x02id\x18\x01 \x01(\tBz\x92\x41h2NSystem-generated user ID. Must start with \'usr_\' and be 19-25 characters long.J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12\x9a\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tBw\x92\x41t2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\r\"ext_7890xyz\"H\x00R\nexternalId\x12\xdb\x01\n\x04user\x18\x03 \x01(\x0b\x32\x1d.scalekit.v1.users.UpdateUserB\xa7\x01\x92\x41\x9d\x01\x32qUser fields to update. Only specified fields will be modified. Required fields must be provided if being changed.J({\"firstName\": \"John\", \"lastName\": \"Doe\"}\xbaH\x03\xc8\x01\x01R\x04userB\x0c\n\nidentities\"A\n\x12UpdateUserResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\x93\x02\n\x0eGetUserRequest\x12V\n\x02id\x18\x01 \x01(\tBD\x92\x41\x32\x32\x18System-generated user IDJ\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04usr_H\x00R\x02id\x12\x9a\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tBw\x92\x41t2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\r\"ext_7890xyz\"H\x00R\nexternalIdB\x0c\n\nidentities\">\n\x0fGetUserResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\xd8\x01\n\x16GetCurrentUserResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\x12\x90\x01\n\x12\x63urrent_session_id\x18\x02 \x01(\tBb\x92\x41_2EThe ID of the current session associated with the authenticated user.J\x16\"ses_1234567890123456\"R\x10\x63urrentSessionId\"\x17\n\x15GetCurrentUserRequest\"\xf4\x04\n\x1cListOrganizationUsersRequest\x12\xc9\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x8c\x01\x32rUnique identifier of the organization for which to list users. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xa9\x01\n\tpage_size\x18\x02 \x01(\rB\x8b\x01\x92\x41\x7f\x32yMaximum number of users to return in a single response. Valid range: 1-100. Server may return fewer users than specified.J\x02\x35\x30\xbaH\x06*\x04\x18\x64(\x00R\x08pageSize\x12\xdb\x01\n\npage_token\x18\x03 \x01(\tB\xbb\x01\x92\x41\xb7\x01\x32\x80\x01Pagination token from a previous ListUserResponse. Used to retrieve the next page of results. Leave empty for the first request.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\tpageToken\"\xa4\x05\n\x1dListOrganizationUsersResponse\x12\xba\x01\n\x0fnext_page_token\x18\x01 \x01(\tB\x91\x01\x92\x41\x8d\x01\x32WOpaque token for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x02 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12\x92\x01\n\x05users\x18\x03 \x03(\x0b\x32\x17.scalekit.v1.users.UserBc\x92\x41`2^List of user objects for the current page. May contain fewer entries than requested page_size.R\x05users\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SOpaque token for retrieving the previous page of results. Empty for the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\xfd\x04\n\x17\x44\x65leteMembershipRequest\x12\xa7\x01\n\x0forganization_id\x18\x01 \x01(\tB~\x92\x41l2RUnique organization identifier. Must start with \'org_\' and be 1-32 characters longJ\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x81\x01\n\x02id\x18\x02 \x01(\tBo\x92\x41]2CSystem-generated user ID. Must start with \'usr_\' (19-25 characters)J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12\x89\x01\n\x0b\x65xternal_id\x18\x03 \x01(\tBf\x92\x41\x63\x32RExternal system identifier from connected directories. Must match existing recordsJ\r\"ext_7890xyz\"H\x00R\nexternalId\x12\x8d\x01\n\x07\x63\x61scade\x18\x05 \x01(\x08\x42n\x92\x41\\2SIf true, if user has no memberships left the user is also deleted. defaults to trueJ\x05\x66\x61lse\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x07\x63\x61scade\x88\x01\x01\x42\x0c\n\nidentitiesB\n\n\x08_cascade\"\xbd\x06\n\x17\x43reateMembershipRequest\x12\xb7\x01\n\x0forganization_id\x18\x01 \x01(\tB\x8d\x01\x92\x41{2aUnique identifier of the target organization. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xa2\x01\n\nmembership\x18\x02 \x01(\x0b\x32#.scalekit.v1.users.CreateMembershipB]\x92\x41Q2?Membership details to create. Required fields must be provided.\xca>\r\xfa\x02\nmembership\xe0\x41\x02\xbaH\x03\xc8\x01\x01R\nmembership\x12\x81\x01\n\x02id\x18\x03 \x01(\tBo\x92\x41]2CSystem-generated user ID. Must start with \'usr_\' (19-25 characters)J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12\x8e\x01\n\x0b\x65xternal_id\x18\x04 \x01(\tBk\x92\x41h2WExternal system identifier from connected directories. Must be unique across the systemJ\r\"ext_7890xyz\"H\x00R\nexternalId\x12\x85\x01\n\x15send_invitation_email\x18\x05 \x01(\x08\x42L\x92\x41I2AIf true, sends an activation email to the user. Defaults to true.J\x04trueH\x01R\x13sendInvitationEmail\x88\x01\x01\x42\x0c\n\nidentitiesB\x18\n\x16_send_invitation_email\"G\n\x18\x43reateMembershipResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\x9a\x02\n\x10ListUsersRequest\x12t\n\tpage_size\x18\x01 \x01(\rBW\x92\x41T2NMaximum number of organizations to return per page. Must be between 10 and 100J\x02\x33\x30R\x08pageSize\x12\x8f\x01\n\npage_token\x18\x02 \x01(\tBp\x92\x41m2[Pagination token from the previous response. Use to retrieve the next page of organizationsJ\x0e\"\"R\tpageToken\"\xc0\x04\n\x11ListUsersResponse\x12\x42\n\x05users\x18\x01 \x03(\x0b\x32\x17.scalekit.v1.users.UserB\x13\x92\x41\x10\x32\x0eList of users.R\x05users\x12\xb3\x01\n\x0fnext_page_token\x18\x02 \x01(\tB\x8a\x01\x92\x41\x86\x01\x32PToken for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x03 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SToken for retrieving the previous page of results. Empty if this is the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\xfb\x03\n\x12SearchUsersRequest\x12\xaf\x01\n\x05query\x18\x01 \x01(\tB\x98\x01\x92\x41\x88\x01\x32oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\x10john@example.comxd\x80\x01\x03\xbaH\tr\x04\x10\x03\x18\x64\xc8\x01\x01R\x05query\x12\x8a\x01\n\tpage_size\x18\x02 \x01(\rBm\x92\x41\x63\x32KMaximum number of users to return per page. Value must be between 1 and 30.J\x02\x33\x30Y\x00\x00\x00\x00\x00\x00>@i\x00\x00\x00\x00\x00\x00\xf0?\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x03 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\xcb\x04\n\x13SearchUsersResponse\x12\xb3\x01\n\x0fnext_page_token\x18\x01 \x01(\tB\x8a\x01\x92\x41\x86\x01\x32PToken for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x02 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12K\n\x05users\x18\x03 \x03(\x0b\x32\x17.scalekit.v1.users.UserB\x1c\x92\x41\x19\x32\x17List of matching users.R\x05users\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SToken for retrieving the previous page of results. Empty if this is the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\xb1\x02\n\x11\x44\x65leteUserRequest\x12\x81\x01\n\x02id\x18\x01 \x01(\tBo\x92\x41]2CSystem-generated user ID. Must start with \'usr_\' (19-25 characters)J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12\x89\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tBf\x92\x41\x63\x32RExternal system identifier from connected directories. Must match existing recordsJ\r\"ext_7890xyz\"H\x00R\nexternalIdB\x0c\n\nidentities\"\x9a\x05\n\x17UpdateMembershipRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\xa1\x01\x92\x41\x8e\x01\x32tUnique identifier of the organization containing the membership. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x8c\x01\n\x02id\x18\x02 \x01(\tBz\x92\x41h2NSystem-generated user ID. Must start with \'usr_\' and be 19-25 characters long.J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12j\n\x0b\x65xternal_id\x18\x03 \x01(\tBG\x92\x41\x44\x32\x33Your application\'s unique identifier for this user.J\r\"ext_7890xyz\"H\x00R\nexternalId\x12\xa7\x01\n\nmembership\x18\x05 \x01(\x0b\x32#.scalekit.v1.users.UpdateMembershipBb\x92\x41Y2DMembership fields to update. Only specified fields will be modified.J\x11{\"role\": \"admin\"}\xbaH\x03\xc8\x01\x01R\nmembershipB\x0c\n\nidentities\"\xfb\x03\n\x10UpdateMembership\x12}\n\x05roles\x18\x04 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleBL\x92\x41I22Role to assign to the user within the organizationJ\x13[{\"name\": \"admin\"}]R\x05roles\x12\x8c\x02\n\x08metadata\x18\x07 \x03(\x0b\x32\x31.scalekit.v1.users.UpdateMembership.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01J\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07\"\xb4\x05\n\x10\x43reateMembership\x12}\n\x05roles\x18\x04 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleBL\x92\x41I22Role to assign to the user within the organizationJ\x13[{\"name\": \"admin\"}]R\x05roles\x12\x8c\x02\n\x08metadata\x18\x07 \x03(\x0b\x32\x31.scalekit.v1.users.CreateMembership.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xa4\x01\n\rinviter_email\x18\x08 \x01(\tBz\x92\x41k2QEmail address of the user who invited this member. Must be a valid email address.J\x16\"john.doe@example.com\"\xbaH\tr\x07\x10\x05\x18\xfe\x01`\x01H\x00R\x0cinviterEmail\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x10\n\x0e_inviter_emailJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07\"G\n\x18UpdateMembershipResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\xcf\x05\n\x1eSearchOrganizationUsersRequest\x12\xc5\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9b\x01\x92\x41\x85\x01\x32kUnique identifier of the organization to search within. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\x12\xaf\x01\n\x05query\x18\x02 \x01(\tB\x98\x01\x92\x41\x88\x01\x32oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\x10john@example.comxd\x80\x01\x03\xbaH\tr\x04\x10\x03\x18\x64\xc8\x01\x01R\x05query\x12\x8a\x01\n\tpage_size\x18\x03 \x01(\rBm\x92\x41\x63\x32KMaximum number of users to return per page. Value must be between 1 and 30.J\x02\x33\x30Y\x00\x00\x00\x00\x00\x00>@i\x00\x00\x00\x00\x00\x00\xf0?\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x04 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\xd7\x04\n\x1fSearchOrganizationUsersResponse\x12\xb3\x01\n\x0fnext_page_token\x18\x01 \x01(\tB\x8a\x01\x92\x41\x86\x01\x32PToken for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x02 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12K\n\x05users\x18\x03 \x03(\x0b\x32\x17.scalekit.v1.users.UserB\x1c\x92\x41\x19\x32\x17List of matching users.R\x05users\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SToken for retrieving the previous page of results. Empty if this is the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\x85\x08\n\nCreateUser\x12\x98\x01\n\x05\x65mail\x18\x05 \x01(\tB\x81\x01\x92\x41w2aPrimary email address for the user. Must be unique across the environment and valid per RFC 5322.J\x12\"user@example.com\"\xbaH\x04r\x02`\x01R\x05\x65mail\x12\xa2\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tB|\x92\x41y2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x12\"ext_12345a67b89c\"H\x00R\nexternalId\x88\x01\x01\x12\x9f\x01\n\nmembership\x18\x07 \x01(\x0b\x32#.scalekit.v1.users.CreateMembershipBZ\x92\x41W2UList of organization memberships. Automatically populated based on group assignments.R\nmembership\x12\xa0\x01\n\x0cuser_profile\x18\x08 \x01(\x0b\x32$.scalekit.v1.users.CreateUserProfileBW\x92\x41T2RUser\'s personal information including name, address, and other profile attributes.R\x0buserProfile\x12\x86\x02\n\x08metadata\x18\t \x03(\x0b\x32+.scalekit.v1.users.CreateUser.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\n\x10\x0b\"\xbe\x10\n\x11\x43reateUserProfile\x12^\n\ngiven_name\x18\x02 \x01(\tB?\x92\x41\x34\x32*User\'s given name. Maximum 255 characters.J\x06\"John\"\xbaH\x05r\x03\x18\xff\x01R\tgivenName\x12`\n\x0b\x66\x61mily_name\x18\x03 \x01(\tB?\x92\x41\x34\x32+User\'s family name. Maximum 255 characters.J\x05\"Doe\"\xbaH\x05r\x03\x18\xff\x01R\nfamilyName\x12v\n\x04name\x18\x04 \x01(\tBb\x92\x41_2IFull name in display format. Typically combines first_name and last_name.J\x12\"John Michael Doe\"R\x04name\x12y\n\x06locale\x18\x05 \x01(\tBa\x92\x41^2SUser\'s localization preference in BCP-47 format. Defaults to organization settings.J\x07\"en-US\"R\x06locale\x12\x8a\x01\n\x0cphone_number\x18\x07 \x01(\tBg\x92\x41\x64\x32RPhone number in E.164 international format. Required for SMS-based authentication.J\x0e\"+14155552671\"R\x0bphoneNumber\x12\x8b\x02\n\x08metadata\x18\x08 \x03(\x0b\x32\x32.scalekit.v1.users.CreateUserProfile.MetadataEntryB\xba\x01\x92\x41\x9d\x01\x32^System-managed key-value pairs for internal tracking. Keys (3-25 chars), values (1-256 chars).J;{\"account_status\": \"active\", \"signup_source\": \"mobile_app\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xa2\x02\n\x11\x63ustom_attributes\x18\t \x03(\x0b\x32:.scalekit.v1.users.CreateUserProfile.CustomAttributesEntryB\xb8\x01\x92\x41\x9b\x01\x32ZCustom attributes for extended user profile data. Keys (3-25 chars), values (1-256 chars).J={\"department\": \"engineering\", \"security_clearance\": \"level2\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x10\x63ustomAttributes\x12\x7f\n\x12preferred_username\x18\n \x01(\tBP\x92\x41\x45\x32/User\'s preferred username for display purposes.J\x12\"John Michael Doe\"\xbaH\x05r\x03\x18\x80\x04R\x11preferredUsername\x12z\n\x07picture\x18\x0b \x01(\tB[\x92\x41P2,URL to the user\'s profile picture or avatar.J \"https://example.com/avatar.jpg\"\xbaH\x05r\x03\x18\x80\x10H\x00R\x07picture\x88\x01\x01\x12\x41\n\x06gender\x18\x0c \x01(\tB$\x92\x41!2\x17User\'s gender identity.J\x06\"male\"H\x01R\x06gender\x88\x01\x01\x12\xa1\x01\n\x06groups\x18\r \x03(\tB\x88\x01\x92\x41p2QList of group names the user belongs to. Each group name must be 1-250 charactersJ\x1b[\"engineering\", \"managers\"]\xbaH\x12\x92\x01\x0f\x08\x00\x10\x32\x18\x01\"\x07r\x05\x10\x01\x18\xfa\x01R\x06groups\x12\x94\x01\n\nfirst_name\x18\x15 \x01(\tBu\x18\x01\x92\x41Y2O[DEPRECATED] Use given_name instead. User\'s given name. Maximum 200 characters.J\x06\"John\"\xbaH\x05r\x03\x18\xc8\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\tfirstName\x12\x93\x01\n\tlast_name\x18\x16 \x01(\tBv\x18\x01\x92\x41Z2Q[DEPRECATED] Use family_name instead. User\'s family name. Maximum 200 characters.J\x05\"Doe\"\xbaH\x05r\x03\x18\xc8\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\x08lastName\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a\x43\n\x15\x43ustomAttributesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\n\n\x08_pictureB\t\n\x07_genderJ\x04\x08\x01\x10\x02J\x04\x08\x06\x10\x07\"\xe5(\n\x11UpdateUserProfile\x12\xe5\x01\n\ngiven_name\x18\x02 \x01(\tB\xc0\x01\x92\x41\xb4\x01\x32\xa9\x01Updates the user\'s given name (first name). Use this field to modify how the user\'s first name appears in the system and user interfaces. Maximum 255 characters allowed.J\x06\"John\"\xbaH\x05r\x03\x18\xff\x01H\x00R\tgivenName\x88\x01\x01\x12\xe4\x01\n\x0b\x66\x61mily_name\x18\x03 \x01(\tB\xbd\x01\x92\x41\xb1\x01\x32\xa7\x01Updates the user\'s family name (last name or surname). Use this field to modify how the user\'s last name appears throughout the system. Maximum 255 characters allowed.J\x05\"Doe\"\xbaH\x05r\x03\x18\xff\x01H\x01R\nfamilyName\x88\x01\x01\x12\xae\x02\n\x04name\x18\x04 \x01(\tB\x94\x02\x92\x41\x90\x02\x32\x81\x02Updates the user\'s complete display name. Use this field when you want to set the full name as a single string rather than using separate given and family names. This name appears in user interfaces, reports, and anywhere a formatted display name is needed.J\n\"John Doe\"H\x02R\x04name\x88\x01\x01\x12\x97\x03\n\x06locale\x18\x05 \x01(\tB\xf9\x02\x92\x41\xf5\x02\x32\xe9\x02Updates the user\'s preferred language and region settings using BCP-47 format codes. Use this field to customize the user\'s experience with localized content, date formats, number formatting, and UI language. When not specified, the user inherits the organization\'s default locale settings. Common values include `en-US`, `en-GB`, `fr-FR`, `de-DE`, and `es-ES`.J\x07\"en-US\"H\x03R\x06locale\x88\x01\x01\x12\xb1\x03\n\x0cphone_number\x18\x07 \x01(\tB\x88\x03\x92\x41\x84\x03\x32\xf1\x02Updates the user\'s phone number in E.164 international format. Use this field to enable SMS-based authentication methods, two-factor authentication, or phone-based account recovery. The phone number must include the country code and be formatted according to E.164 standards (e.g., `+1` for US numbers). This field is required when enabling SMS authentication features.J\x0e\"+14155552671\"H\x04R\x0bphoneNumber\x88\x01\x01\x12\xd1\x04\n\x08metadata\x18\x08 \x03(\x0b\x32\x32.scalekit.v1.users.UpdateUserProfile.MetadataEntryB\x80\x04\x92\x41\xe3\x03\x32\xa3\x03Updates system-managed key-value pairs for internal tracking and operational data. Use this field to store system-generated metadata like account status, signup source, last activity tracking, or integration-specific identifiers. These fields are typically managed by automated processes rather than direct user input. Keys must be 3-25 characters, values must be 1-256 characters, with a maximum of 20 key-value pairs.J;{\"account_status\": \"active\", \"signup_source\": \"mobile_app\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xc7\x05\n\x11\x63ustom_attributes\x18\t \x03(\x0b\x32:.scalekit.v1.users.UpdateUserProfile.CustomAttributesEntryB\xdd\x04\x92\x41\xc0\x04\x32\xfe\x03Updates custom attributes for extended user profile data and application-specific information. Use this field to store business-specific user data like department, job title, security clearances, project assignments, or any other organizational attributes your application requires. Unlike system metadata, these attributes are typically managed by administrators or applications and are visible to end users. Keys must be 3-25 characters, values must be 1-256 characters, with a maximum of 20 key-value pairs.J={\"department\": \"engineering\", \"security_clearance\": \"level2\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x10\x63ustomAttributes\x12\x8a\x01\n\nfirst_name\x18\x15 \x01(\tBf\x18\x01\x92\x41Y2O[DEPRECATED] Use given_name instead. User\'s given name. Maximum 200 characters.J\x06\"John\"\xbaH\x05r\x03\x18\xc8\x01H\x05R\tfirstName\x88\x01\x01\x12\x89\x01\n\tlast_name\x18\x16 \x01(\tBg\x18\x01\x92\x41Z2Q[DEPRECATED] Use family_name instead. User\'s family name. Maximum 200 characters.J\x05\"Doe\"\xbaH\x05r\x03\x18\xc8\x01H\x06R\x08lastName\x88\x01\x01\x12\x97\x03\n\x12preferred_username\x18\n \x01(\tB\xe2\x02\x92\x41\xd6\x02\x32\xbf\x02Updates the user\'s preferred username for display and identification purposes. Use this field to set a custom username that the user prefers to be known by, which may differ from their email or formal name. This username appears in user interfaces, mentions, and informal communications. Maximum 512 characters allowed.J\x12\"John Michael Doe\"\xbaH\x05r\x03\x18\x80\x04H\x07R\x11preferredUsername\x88\x01\x01\x12\xb2\x03\n\x07picture\x18\x0b \x01(\tB\x92\x03\x92\x41\x86\x03\x32\xe1\x02Updates the URL to the user\'s profile picture or avatar image. Use this field to set or change the user\'s profile photo that appears in user interfaces, directory listings, and collaborative features. The URL should point to a publicly accessible image file. Supported formats typically include JPEG, PNG, and GIF. Maximum URL length is 2048 characters.J \"https://example.com/avatar.jpg\"\xbaH\x05r\x03\x18\x80\x10H\x08R\x07picture\x88\x01\x01\x12\xfe\x02\n\x06gender\x18\x0c \x01(\tB\xe0\x02\x92\x41\xdc\x02\x32\xd1\x02Updates the user\'s gender identity information. Use this field to store the user\'s gender identity for personalization, compliance, or reporting purposes. This field supports any string value to accommodate diverse gender identities and should be handled with appropriate privacy considerations according to your organization\'s policies.J\x06\"male\"H\tR\x06gender\x88\x01\x01\x12\xdd\x03\n\x06groups\x18\r \x03(\tB\xc4\x03\x92\x41\xab\x03\x32\x8b\x03Updates the list of group names the user belongs to within the organization. Use this field to manage the user\'s group memberships for role-based access control, team assignments, or organizational structure. Groups are typically used for permission management and collaborative access. Each group name must be unique within the list, 1-250 characters long, with a maximum of 50 groups per user.J\x1b[\"engineering\", \"managers\"]\xbaH\x12\x92\x01\x0f\x08\x00\x10\x32\x18\x01\"\x07r\x05\x10\x01\x18\xfa\x01R\x06groups\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a\x43\n\x15\x43ustomAttributesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\r\n\x0b_given_nameB\x0e\n\x0c_family_nameB\x07\n\x05_nameB\t\n\x07_localeB\x0f\n\r_phone_numberB\r\n\x0b_first_nameB\x0c\n\n_last_nameB\x15\n\x13_preferred_usernameB\n\n\x08_pictureB\t\n\x07_genderJ\x04\x08\x01\x10\x02J\x04\x08\x06\x10\x07\"\xf9\x07\n\x06Invite\x12l\n\x0forganization_id\x18\x01 \x01(\tBC\x92\x41@2-The organization to which the invite belongs.J\x0f\"org_987654321\"R\x0eorganizationId\x12\x7f\n\x07user_id\x18\x02 \x01(\tBf\x92\x41\x63\x32SUser ID to whom the invite is sent. May be empty if the user has not signed up yet.J\x0c\"usr_123456\"R\x06userId\x12\x7f\n\rinviter_email\x18\x03 \x01(\tBU\x92\x41R2;Identifier of the user or system that initiated the invite.J\x13\"admin@example.com\"H\x00R\x0cinviterEmail\x88\x01\x01\x12x\n\x06status\x18\x04 \x01(\tB`\x92\x41]2ICurrent status of the invite (e.g., pending, accepted, expired, revoked).J\x10\"pending_invite\"R\x06status\x12\x89\x01\n\ncreated_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampBN\x92\x41K21Timestamp when the invite was originally created.J\x16\"2025-07-10T08:00:00Z\"R\tcreatedAt\x12}\n\nexpires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampBB\x92\x41?2%The time at which the invite expires.J\x16\"2025-12-31T23:59:59Z\"R\texpiresAt\x12\x8f\x01\n\tresent_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampBV\x92\x41S29Timestamp when the invite was last resent, if applicable.J\x16\"2025-07-15T09:30:00Z\"R\x08resentAt\x12V\n\x0cresent_count\x18\x08 \x01(\x05\x42\x33\x92\x41\x30\x32+Number of times the invite has been resent.J\x01\x32R\x0bresentCountB\x10\n\x0e_inviter_email\"\xa3\x03\n\x13ResendInviteRequest\x12\xd3\x01\n\x0forganization_id\x18\x01 \x01(\tB\xa9\x01\x92\x41\x96\x01\x32|Unique identifier of the organization containing the pending invitation. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xb5\x01\n\x02id\x18\x02 \x01(\tB\xa4\x01\x92\x41\x91\x01\x32wSystem-generated user ID of the user who has a pending invitation. Must start with \'usr_\' and be 19-25 characters long.J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_R\x02id\"\xe1\x02\n\x14ResendInviteResponse\x12\xc8\x02\n\x06invite\x18\x01 \x01(\x0b\x32\x19.scalekit.v1.users.InviteB\x94\x02\x92\x41\x90\x02\x32\x81\x01Updated invitation object containing the resent invitation details, including new expiration time and incremented resend counter.J\x89\x01{\"organization_id\": \"org_123\", \"user_id\": \"usr_456\", \"status\": \"pending_invite\", \"expires_at\": \"2025-12-31T23:59:59Z\", \"resent_count\": 2}R\x06invite\"\xf0\x01\n\x14ListUserRolesRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\"q\n\x15ListUserRolesResponse\x12X\n\x05roles\x18\x01 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleB\'\x92\x41$2\"List of roles assigned to the userR\x05roles\"\xde\x02\n\x16\x41ssignUserRolesRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\x12j\n\x05roles\x18\x03 \x03(\x0b\x32$.scalekit.v1.users.AssignRoleRequestB.\x92\x41%2#List of roles to assign to the user\xbaH\x03\xc8\x01\x01R\x05roles\"\xb2\x01\n\x11\x41ssignRoleRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x18\x01\x92\x41\x39\x32\x1eUnique identifier for the roleJ\x17\"role_1234abcd5678efgh\"R\x02id\x12M\n\trole_name\x18\x02 \x01(\tB0\x92\x41$2\x18Unique name for the roleJ\x08\"viewer\"\xbaH\x06r\x04\x10\x00\x18\x64R\x08roleName\"\x81\x01\n\x17\x41ssignUserRolesResponse\x12\x66\n\x05roles\x18\x01 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleB5\x92\x41\x32\x32\x30List of all roles currently assigned to the userR\x05roles\"\xd6\x02\n\x15RemoveUserRoleRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\x12\x63\n\trole_name\x18\x03 \x01(\tBF\x92\x41\x43\x32(Unique identifier for the role to removeJ\x17\"role_1234abcd5678efgh\"R\x08roleName\"\xf6\x01\n\x1aListUserPermissionsRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\"\x97\x03\n\nPermission\x12U\n\x02id\x18\x01 \x01(\tBE\x92\x41?2$Unique identifier for the permissionJ\x17\"perm_1234abcd5678efgh\"\xe0\x41\x03R\x02id\x12R\n\x04name\x18\x02 \x01(\tB>\x92\x41;2)Unique name identifier for the permissionJ\x0e\"users:create\"R\x04name\x12u\n\x0b\x64\x65scription\x18\x03 \x01(\tBS\x92\x41P2)Description of what the permission allowsJ#\"Allows creating new user accounts\"R\x0b\x64\x65scription\x12g\n\x04tags\x18\x04 \x03(\tBS\x92\x41\x41\x32!Tags for categorizing permissionsJ\x1c[\"user-management\", \"admin\"]\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\x04tags\";\n\x16GetSupportHashResponse\x12!\n\x0csupport_hash\x18\x01 \x01(\tR\x0bsupportHash\"\x8f\x01\n\x1bListUserPermissionsResponse\x12p\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x1d.scalekit.v1.users.PermissionB/\x92\x41,2*List of permissions the user has access toR\x0bpermissions2\x9e\x62\n\x0bUserService\x12\xb8\x03\n\x07GetUser\x12!.scalekit.v1.users.GetUserRequest\x1a\".scalekit.v1.users.GetUserResponse\"\xe5\x02\x92\x41\xc1\x02\n\x05Users\x12\x08Get user\x1a\x8e\x01Retrieves all details for a user by system-generated user ID or external ID. The response includes organization memberships and user metadata.J\x9c\x01\n\x03\x32\x30\x30\x12\x94\x01\njUser details retrieved successfully. Returns full user object with system-generated fields and timestamps.\x12&\n$\x1a\".scalekit.v1.users.GetUserResponse\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x14\x12\x12/api/v1/users/{id}\x12\xd5\x03\n\x0eGetCurrentUser\x12(.scalekit.v1.users.GetCurrentUserRequest\x1a).scalekit.v1.users.GetCurrentUserResponse\"\xed\x02\x92\x41\xa6\x02\n\x05Users\x12\x16Get authenticated user\x1a\x9e\x01Retrieves details for the currently authenticated user. Returns the same user object as GetUser but uses the authenticated user\'s ID from the session context.Jd\n\x03\x32\x30\x30\x12]\n,Current user details retrieved successfully.\x12-\n+\x1a).scalekit.v1.users.GetCurrentUserResponse\x82\xb5\x18\x02\x18\x18\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02(\x12\x12/api/v1/users:thisZ\x12\x12\x10/api/v1/users/me\x12\xf0\x02\n\x0eGetSupportHash\x12\x16.google.protobuf.Empty\x1a).scalekit.v1.users.GetSupportHashResponse\"\x9a\x02\x92\x41\xdf\x01\n\x05Users\x12\x10Get support hash\x1a\x66Retrieves the support email hash for the current logged in user, used for the Scalekit support system.J\\\n\x03\x32\x30\x30\x12U\n$Support hash retrieved successfully.\x12-\n+\x1a).scalekit.v1.users.GetSupportHashResponse\x82\xb5\x18\x02\x18P\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/users/support-hash\x12\xa0\x04\n\tListUsers\x12#.scalekit.v1.users.ListUsersRequest\x1a$.scalekit.v1.users.ListUsersResponse\"\xc7\x03\x92\x41\xa8\x03\n\x05Users\x12\x1dList all users in environment\x1a\xbc\x02Retrieves a paginated list of all users across your entire environment. Use this endpoint to view all users regardless of their organization memberships. This is useful for administrative purposes, user audits, or when you need to see all users in your Scalekit environment. Supports pagination for large user bases.JA\n\x03\x32\x30\x30\x12:\n\x0eList of users.\x12(\n&\x1a$.scalekit.v1.users.ListUsersResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x0f\x12\r/api/v1/users\x12\xb8\x05\n\x0bSearchUsers\x12%.scalekit.v1.users.SearchUsersRequest\x1a&.scalekit.v1.users.SearchUsersResponse\"\xd9\x04\x92\x41\xb3\x04\n\x05Users\x12\x0cSearch users\x1a\xaf\x02Searches for users across the entire environment by email address, user ID, or external ID. The query must be at least 3 characters and is case-insensitive. Returns a paginated list of matching users with up to 30 results per page. Use the next_page_token from the response to retrieve subsequent pages.J\x8c\x01\n\x03\x32\x30\x30\x12\x84\x01\nVMatching users returned; includes pagination cursors for navigating large result sets.\x12*\n(\x1a&.scalekit.v1.users.SearchUsersResponseJ[\n\x03\x34\x30\x30\x12T\nRBad Request - query must be at least 3 characters and no more than 100 characters.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/users:search\x12\xd0\x07\n\x17SearchOrganizationUsers\x12\x31.scalekit.v1.users.SearchOrganizationUsersRequest\x1a\x32.scalekit.v1.users.SearchOrganizationUsersResponse\"\xcd\x06\x92\x41\x87\x06\n\x05Users\x12\x19Search organization users\x1a\xe3\x02Searches for users within a specific organization by email address, user ID, or external ID. The query must be at least 3 characters and is case-insensitive. Scopes results strictly to the given organization. Returns a paginated list of matching users with up to 30 results per page. Use the next_page_token from the response to retrieve subsequent pages.J\xb0\x01\n\x03\x32\x30\x30\x12\xa8\x01\nnMatching users within the organization returned; includes pagination cursors for navigating large result sets.\x12\x36\n4\x1a\x32.scalekit.v1.users.SearchOrganizationUsersResponseJ\x9b\x01\n\x03\x34\x30\x30\x12\x93\x01\n\x90\x01\x42\x61\x64 Request - query must be at least 3 characters and no more than 100 characters, and organization_id must be a valid org_ prefixed identifier.J,\n\x03\x34\x30\x34\x12%\n#Not Found - organization not found.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x36\x12\x34/api/v1/organizations/{organization_id}/users:search\x12\x96\x05\n\nUpdateUser\x12$.scalekit.v1.users.UpdateUserRequest\x1a%.scalekit.v1.users.UpdateUserResponse\"\xba\x04\x92\x41\x90\x04\n\x05Users\x12\x17Update user information\x1a\xe1\x02Modifies user account information including profile details, metadata, and external ID. Use this endpoint to update a user\'s personal information, contact details, or custom metadata. You can update the user\'s profile, phone number, and metadata fields. Note that fields like user ID, email address, environment ID, and creation time cannot be modified.J\x89\x01\n\x03\x32\x30\x30\x12\x81\x01\nTUser updated successfully. Returns the modified user object with updated timestamps.\x12)\n\'\x1a%.scalekit.v1.users.UpdateUserResponse\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x1a\x32\x12/api/v1/users/{id}:\x04user\x12\xfd\x03\n\nDeleteUser\x12$.scalekit.v1.users.DeleteUserRequest\x1a\x16.google.protobuf.Empty\"\xb0\x03\x92\x41\x8c\x03\n\x05Users\x12\x17\x44\x65lete user permanently\x1a\xb0\x02Permanently removes a user from your environment and deletes all associated data. Use this endpoint when you need to completely remove a user account. This action deletes the user\'s profile, memberships, and all related data across all organizations. This operation cannot be undone, so use with caution.J7\n\x03\x32\x30\x30\x12\x30\n.User successfully deleted. No content returned\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x14*\x12/api/v1/users/{id}\x12\xc4\x05\n\x10\x43reateMembership\x12*.scalekit.v1.users.CreateMembershipRequest\x1a+.scalekit.v1.users.CreateMembershipResponse\"\xd6\x04\x92\x41\xde\x03\n\x05Users\x12!Add existing user to organization\x1a\x95\x02\x41\x64\x64s an existing user to an organization and assigns them specific roles and permissions. Use this endpoint when you want to grant an existing user access to a particular organization. You can specify roles, metadata, and other membership details during the invitation process.J\x99\x01\n\x03\x32\x30\x31\x12\x91\x01\n^User successfully added to the organization. Returns details of the updated membership details\x12/\n-\x1a+.scalekit.v1.users.CreateMembershipResponse\x82\xb5\x18\x1e\n\x1aorganizations_users_invite\x18T\x82\xd3\xe4\x93\x02L\">/api/v1/memberships/organizations/{organization_id}/users/{id}:\nmembership\x12\x99\x04\n\x10\x44\x65leteMembership\x12*.scalekit.v1.users.DeleteMembershipRequest\x1a\x16.google.protobuf.Empty\"\xc0\x03\x92\x41\xd4\x02\n\x05Users\x12\'Delete organization membership for user\x1a\xdc\x01Removes a user from an organization by user ID or external ID. If the user has no memberships left and cascade is true, the user is also deleted. This action is irreversible and may also remove related group memberships.JC\n\x03\x32\x30\x30\x12<\n:User successfully marked for deletion. No content returned\x82\xb5\x18\x1e\n\x1aorganizations_users_remove\x18T\x82\xd3\xe4\x93\x02@*>/api/v1/memberships/organizations/{organization_id}/users/{id}\x12\x9e\x04\n\x10UpdateMembership\x12*.scalekit.v1.users.UpdateMembershipRequest\x1a+.scalekit.v1.users.UpdateMembershipResponse\"\xb0\x03\x92\x41\xb3\x02\n\x05Users\x12\'Update organization membership for user\x1a\x83\x01Updates a user\'s membership details within an organization by user ID or external ID. You can update roles and membership metadata.J{\n\x03\x32\x30\x30\x12t\nAMembership updated successfully. Returns the updated user object.\x12/\n-\x1a+.scalekit.v1.users.UpdateMembershipResponse\x82\xb5\x18#\n\x1forganizations_users_role_update\x18T\x82\xd3\xe4\x93\x02L2>/api/v1/memberships/organizations/{organization_id}/users/{id}:\nmembership\x12\xc8\x06\n\x17\x43reateUserAndMembership\x12\x31.scalekit.v1.users.CreateUserAndMembershipRequest\x1a\x32.scalekit.v1.users.CreateUserAndMembershipResponse\"\xc5\x05\x92\x41\xe4\x04\n\x05Users\x12\x1f\x43reate new user in organization\x1a\x83\x03\x43reates a new user account and immediately adds them to the specified organization. Use this endpoint when you want to create a user and grant them access to an organization in a single operation. You can provide user profile information, assign roles, and configure membership metadata. The user receives an activation email unless this feature is disabled in the organization settings.J\xb3\x01\n\x03\x32\x30\x31\x12\xab\x01\nqUser created successfully. Returns the created user object, including system-generated identifiers and timestamps\x12\x36\n4\x1a\x32.scalekit.v1.users.CreateUserAndMembershipResponse\x82\xb5\x18\x1e\n\x1aorganizations_users_invite\x18T\x82\xd3\xe4\x93\x02\x35\"-/api/v1/organizations/{organization_id}/users:\x04user\x12\xfd\x04\n\x15ListOrganizationUsers\x12/.scalekit.v1.users.ListOrganizationUsersRequest\x1a\x30.scalekit.v1.users.ListOrganizationUsersResponse\"\x80\x04\x92\x41\xa7\x03\n\x05Users\x12\x17List organization users\x1a\x87\x02Retrieves a paginated list of all users who are members of the specified organization. Use this endpoint to view all users with access to a particular organization, including their roles, metadata, and membership details. Supports pagination for large user lists.J{\n\x03\x32\x30\x30\x12t\n\n\x0fGetUserResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\xd9\x01\n\x16GetCurrentUserResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\x12\x91\x01\n\x12\x63urrent_session_id\x18\x02 \x01(\tBc\x92\x41`2EThe ID of the current session associated with the authenticated user.J\x17\"sess_1234abcd5678efgh\"R\x10\x63urrentSessionId\"\x17\n\x15GetCurrentUserRequest\"\xf4\x04\n\x1cListOrganizationUsersRequest\x12\xc9\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x8c\x01\x32rUnique identifier of the organization for which to list users. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xa9\x01\n\tpage_size\x18\x02 \x01(\rB\x8b\x01\x92\x41\x7f\x32yMaximum number of users to return in a single response. Valid range: 1-100. Server may return fewer users than specified.J\x02\x35\x30\xbaH\x06*\x04\x18\x64(\x00R\x08pageSize\x12\xdb\x01\n\npage_token\x18\x03 \x01(\tB\xbb\x01\x92\x41\xb7\x01\x32\x80\x01Pagination token from a previous ListUserResponse. Used to retrieve the next page of results. Leave empty for the first request.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\tpageToken\"\xa4\x05\n\x1dListOrganizationUsersResponse\x12\xba\x01\n\x0fnext_page_token\x18\x01 \x01(\tB\x91\x01\x92\x41\x8d\x01\x32WOpaque token for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x02 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12\x92\x01\n\x05users\x18\x03 \x03(\x0b\x32\x17.scalekit.v1.users.UserBc\x92\x41`2^List of user objects for the current page. May contain fewer entries than requested page_size.R\x05users\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SOpaque token for retrieving the previous page of results. Empty for the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\xfd\x04\n\x17\x44\x65leteMembershipRequest\x12\xa7\x01\n\x0forganization_id\x18\x01 \x01(\tB~\x92\x41l2RUnique organization identifier. Must start with \'org_\' and be 1-32 characters longJ\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x81\x01\n\x02id\x18\x02 \x01(\tBo\x92\x41]2CSystem-generated user ID. Must start with \'usr_\' (19-25 characters)J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12\x89\x01\n\x0b\x65xternal_id\x18\x03 \x01(\tBf\x92\x41\x63\x32RExternal system identifier from connected directories. Must match existing recordsJ\r\"ext_7890xyz\"H\x00R\nexternalId\x12\x8d\x01\n\x07\x63\x61scade\x18\x05 \x01(\x08\x42n\x92\x41\\2SIf true, if user has no memberships left the user is also deleted. defaults to trueJ\x05\x66\x61lse\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x07\x63\x61scade\x88\x01\x01\x42\x0c\n\nidentitiesB\n\n\x08_cascade\"\xaa\x06\n\x17\x43reateMembershipRequest\x12\xb7\x01\n\x0forganization_id\x18\x01 \x01(\tB\x8d\x01\x92\x41{2aUnique identifier of the target organization. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x8f\x01\n\nmembership\x18\x02 \x01(\x0b\x32#.scalekit.v1.users.CreateMembershipBJ\x92\x41\x41\x32?Membership details to create. Required fields must be provided.\xbaH\x03\xc8\x01\x01R\nmembership\x12\x81\x01\n\x02id\x18\x03 \x01(\tBo\x92\x41]2CSystem-generated user ID. Must start with \'usr_\' (19-25 characters)J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12\x8e\x01\n\x0b\x65xternal_id\x18\x04 \x01(\tBk\x92\x41h2WExternal system identifier from connected directories. Must be unique across the systemJ\r\"ext_7890xyz\"H\x00R\nexternalId\x12\x85\x01\n\x15send_invitation_email\x18\x05 \x01(\x08\x42L\x92\x41I2AIf true, sends an activation email to the user. Defaults to true.J\x04trueH\x01R\x13sendInvitationEmail\x88\x01\x01\x42\x0c\n\nidentitiesB\x18\n\x16_send_invitation_email\"G\n\x18\x43reateMembershipResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\x9a\x02\n\x10ListUsersRequest\x12t\n\tpage_size\x18\x01 \x01(\rBW\x92\x41T2NMaximum number of organizations to return per page. Must be between 10 and 100J\x02\x33\x30R\x08pageSize\x12\x8f\x01\n\npage_token\x18\x02 \x01(\tBp\x92\x41m2[Pagination token from the previous response. Use to retrieve the next page of organizationsJ\x0e\"\"R\tpageToken\"\xc0\x04\n\x11ListUsersResponse\x12\x42\n\x05users\x18\x01 \x03(\x0b\x32\x17.scalekit.v1.users.UserB\x13\x92\x41\x10\x32\x0eList of users.R\x05users\x12\xb3\x01\n\x0fnext_page_token\x18\x02 \x01(\tB\x8a\x01\x92\x41\x86\x01\x32PToken for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x03 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SToken for retrieving the previous page of results. Empty if this is the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\xe3\x03\n\x12SearchUsersRequest\x12\xaa\x01\n\x05query\x18\x01 \x01(\tB\x93\x01\x92\x41\x83\x01\x32oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\x10john@example.com\xbaH\tr\x04\x10\x03\x18\x64\xc8\x01\x01R\x05query\x12x\n\tpage_size\x18\x02 \x01(\rB[\x92\x41Q2KMaximum number of users to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x03 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\xcb\x04\n\x13SearchUsersResponse\x12\xb3\x01\n\x0fnext_page_token\x18\x01 \x01(\tB\x8a\x01\x92\x41\x86\x01\x32PToken for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x02 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12K\n\x05users\x18\x03 \x03(\x0b\x32\x17.scalekit.v1.users.UserB\x1c\x92\x41\x19\x32\x17List of matching users.R\x05users\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SToken for retrieving the previous page of results. Empty if this is the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\xb1\x02\n\x11\x44\x65leteUserRequest\x12\x81\x01\n\x02id\x18\x01 \x01(\tBo\x92\x41]2CSystem-generated user ID. Must start with \'usr_\' (19-25 characters)J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12\x89\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tBf\x92\x41\x63\x32RExternal system identifier from connected directories. Must match existing recordsJ\r\"ext_7890xyz\"H\x00R\nexternalIdB\x0c\n\nidentities\"\x9a\x05\n\x17UpdateMembershipRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\xa1\x01\x92\x41\x8e\x01\x32tUnique identifier of the organization containing the membership. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x8c\x01\n\x02id\x18\x02 \x01(\tBz\x92\x41h2NSystem-generated user ID. Must start with \'usr_\' and be 19-25 characters long.J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12j\n\x0b\x65xternal_id\x18\x03 \x01(\tBG\x92\x41\x44\x32\x33Your application\'s unique identifier for this user.J\r\"ext_7890xyz\"H\x00R\nexternalId\x12\xa7\x01\n\nmembership\x18\x05 \x01(\x0b\x32#.scalekit.v1.users.UpdateMembershipBb\x92\x41Y2DMembership fields to update. Only specified fields will be modified.J\x11{\"role\": \"admin\"}\xbaH\x03\xc8\x01\x01R\nmembershipB\x0c\n\nidentities\"\xfb\x03\n\x10UpdateMembership\x12}\n\x05roles\x18\x04 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleBL\x92\x41I22Role to assign to the user within the organizationJ\x13[{\"name\": \"admin\"}]R\x05roles\x12\x8c\x02\n\x08metadata\x18\x07 \x03(\x0b\x32\x31.scalekit.v1.users.UpdateMembership.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01J\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07\"\xb4\x05\n\x10\x43reateMembership\x12}\n\x05roles\x18\x04 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleBL\x92\x41I22Role to assign to the user within the organizationJ\x13[{\"name\": \"admin\"}]R\x05roles\x12\x8c\x02\n\x08metadata\x18\x07 \x03(\x0b\x32\x31.scalekit.v1.users.CreateMembership.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xa4\x01\n\rinviter_email\x18\x08 \x01(\tBz\x92\x41k2QEmail address of the user who invited this member. Must be a valid email address.J\x16\"john.doe@example.com\"\xbaH\tr\x07\x10\x05\x18\xfe\x01`\x01H\x00R\x0cinviterEmail\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x10\n\x0e_inviter_emailJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07\"G\n\x18UpdateMembershipResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\xb7\x05\n\x1eSearchOrganizationUsersRequest\x12\xc5\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9b\x01\x92\x41\x85\x01\x32kUnique identifier of the organization to search within. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\x12\xaa\x01\n\x05query\x18\x02 \x01(\tB\x93\x01\x92\x41\x83\x01\x32oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\x10john@example.com\xbaH\tr\x04\x10\x03\x18\x64\xc8\x01\x01R\x05query\x12x\n\tpage_size\x18\x03 \x01(\rB[\x92\x41Q2KMaximum number of users to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x04 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\xd7\x04\n\x1fSearchOrganizationUsersResponse\x12\xb3\x01\n\x0fnext_page_token\x18\x01 \x01(\tB\x8a\x01\x92\x41\x86\x01\x32PToken for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x02 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12K\n\x05users\x18\x03 \x03(\x0b\x32\x17.scalekit.v1.users.UserB\x1c\x92\x41\x19\x32\x17List of matching users.R\x05users\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SToken for retrieving the previous page of results. Empty if this is the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\x85\x08\n\nCreateUser\x12\x98\x01\n\x05\x65mail\x18\x05 \x01(\tB\x81\x01\x92\x41w2aPrimary email address for the user. Must be unique across the environment and valid per RFC 5322.J\x12\"user@example.com\"\xbaH\x04r\x02`\x01R\x05\x65mail\x12\xa2\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tB|\x92\x41y2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x12\"ext_12345a67b89c\"H\x00R\nexternalId\x88\x01\x01\x12\x9f\x01\n\nmembership\x18\x07 \x01(\x0b\x32#.scalekit.v1.users.CreateMembershipBZ\x92\x41W2UList of organization memberships. Automatically populated based on group assignments.R\nmembership\x12\xa0\x01\n\x0cuser_profile\x18\x08 \x01(\x0b\x32$.scalekit.v1.users.CreateUserProfileBW\x92\x41T2RUser\'s personal information including name, address, and other profile attributes.R\x0buserProfile\x12\x86\x02\n\x08metadata\x18\t \x03(\x0b\x32+.scalekit.v1.users.CreateUser.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\n\x10\x0b\"\xbe\x10\n\x11\x43reateUserProfile\x12^\n\ngiven_name\x18\x02 \x01(\tB?\x92\x41\x34\x32*User\'s given name. Maximum 255 characters.J\x06\"John\"\xbaH\x05r\x03\x18\xff\x01R\tgivenName\x12`\n\x0b\x66\x61mily_name\x18\x03 \x01(\tB?\x92\x41\x34\x32+User\'s family name. Maximum 255 characters.J\x05\"Doe\"\xbaH\x05r\x03\x18\xff\x01R\nfamilyName\x12v\n\x04name\x18\x04 \x01(\tBb\x92\x41_2IFull name in display format. Typically combines first_name and last_name.J\x12\"John Michael Doe\"R\x04name\x12y\n\x06locale\x18\x05 \x01(\tBa\x92\x41^2SUser\'s localization preference in BCP-47 format. Defaults to organization settings.J\x07\"en-US\"R\x06locale\x12\x8a\x01\n\x0cphone_number\x18\x07 \x01(\tBg\x92\x41\x64\x32RPhone number in E.164 international format. Required for SMS-based authentication.J\x0e\"+14155552671\"R\x0bphoneNumber\x12\x8b\x02\n\x08metadata\x18\x08 \x03(\x0b\x32\x32.scalekit.v1.users.CreateUserProfile.MetadataEntryB\xba\x01\x92\x41\x9d\x01\x32^System-managed key-value pairs for internal tracking. Keys (3-25 chars), values (1-256 chars).J;{\"account_status\": \"active\", \"signup_source\": \"mobile_app\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xa2\x02\n\x11\x63ustom_attributes\x18\t \x03(\x0b\x32:.scalekit.v1.users.CreateUserProfile.CustomAttributesEntryB\xb8\x01\x92\x41\x9b\x01\x32ZCustom attributes for extended user profile data. Keys (3-25 chars), values (1-256 chars).J={\"department\": \"engineering\", \"security_clearance\": \"level2\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x10\x63ustomAttributes\x12\x7f\n\x12preferred_username\x18\n \x01(\tBP\x92\x41\x45\x32/User\'s preferred username for display purposes.J\x12\"John Michael Doe\"\xbaH\x05r\x03\x18\x80\x04R\x11preferredUsername\x12z\n\x07picture\x18\x0b \x01(\tB[\x92\x41P2,URL to the user\'s profile picture or avatar.J \"https://example.com/avatar.jpg\"\xbaH\x05r\x03\x18\x80\x10H\x00R\x07picture\x88\x01\x01\x12\x41\n\x06gender\x18\x0c \x01(\tB$\x92\x41!2\x17User\'s gender identity.J\x06\"male\"H\x01R\x06gender\x88\x01\x01\x12\xa1\x01\n\x06groups\x18\r \x03(\tB\x88\x01\x92\x41p2QList of group names the user belongs to. Each group name must be 1-250 charactersJ\x1b[\"engineering\", \"managers\"]\xbaH\x12\x92\x01\x0f\x08\x00\x10\x32\x18\x01\"\x07r\x05\x10\x01\x18\xfa\x01R\x06groups\x12\x94\x01\n\nfirst_name\x18\x15 \x01(\tBu\x18\x01\x92\x41Y2O[DEPRECATED] Use given_name instead. User\'s given name. Maximum 200 characters.J\x06\"John\"\xbaH\x05r\x03\x18\xc8\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\tfirstName\x12\x93\x01\n\tlast_name\x18\x16 \x01(\tBv\x18\x01\x92\x41Z2Q[DEPRECATED] Use family_name instead. User\'s family name. Maximum 200 characters.J\x05\"Doe\"\xbaH\x05r\x03\x18\xc8\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\x08lastName\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a\x43\n\x15\x43ustomAttributesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\n\n\x08_pictureB\t\n\x07_genderJ\x04\x08\x01\x10\x02J\x04\x08\x06\x10\x07\"\xe5(\n\x11UpdateUserProfile\x12\xe5\x01\n\ngiven_name\x18\x02 \x01(\tB\xc0\x01\x92\x41\xb4\x01\x32\xa9\x01Updates the user\'s given name (first name). Use this field to modify how the user\'s first name appears in the system and user interfaces. Maximum 255 characters allowed.J\x06\"John\"\xbaH\x05r\x03\x18\xff\x01H\x00R\tgivenName\x88\x01\x01\x12\xe4\x01\n\x0b\x66\x61mily_name\x18\x03 \x01(\tB\xbd\x01\x92\x41\xb1\x01\x32\xa7\x01Updates the user\'s family name (last name or surname). Use this field to modify how the user\'s last name appears throughout the system. Maximum 255 characters allowed.J\x05\"Doe\"\xbaH\x05r\x03\x18\xff\x01H\x01R\nfamilyName\x88\x01\x01\x12\xae\x02\n\x04name\x18\x04 \x01(\tB\x94\x02\x92\x41\x90\x02\x32\x81\x02Updates the user\'s complete display name. Use this field when you want to set the full name as a single string rather than using separate given and family names. This name appears in user interfaces, reports, and anywhere a formatted display name is needed.J\n\"John Doe\"H\x02R\x04name\x88\x01\x01\x12\x97\x03\n\x06locale\x18\x05 \x01(\tB\xf9\x02\x92\x41\xf5\x02\x32\xe9\x02Updates the user\'s preferred language and region settings using BCP-47 format codes. Use this field to customize the user\'s experience with localized content, date formats, number formatting, and UI language. When not specified, the user inherits the organization\'s default locale settings. Common values include `en-US`, `en-GB`, `fr-FR`, `de-DE`, and `es-ES`.J\x07\"en-US\"H\x03R\x06locale\x88\x01\x01\x12\xb1\x03\n\x0cphone_number\x18\x07 \x01(\tB\x88\x03\x92\x41\x84\x03\x32\xf1\x02Updates the user\'s phone number in E.164 international format. Use this field to enable SMS-based authentication methods, two-factor authentication, or phone-based account recovery. The phone number must include the country code and be formatted according to E.164 standards (e.g., `+1` for US numbers). This field is required when enabling SMS authentication features.J\x0e\"+14155552671\"H\x04R\x0bphoneNumber\x88\x01\x01\x12\xd1\x04\n\x08metadata\x18\x08 \x03(\x0b\x32\x32.scalekit.v1.users.UpdateUserProfile.MetadataEntryB\x80\x04\x92\x41\xe3\x03\x32\xa3\x03Updates system-managed key-value pairs for internal tracking and operational data. Use this field to store system-generated metadata like account status, signup source, last activity tracking, or integration-specific identifiers. These fields are typically managed by automated processes rather than direct user input. Keys must be 3-25 characters, values must be 1-256 characters, with a maximum of 20 key-value pairs.J;{\"account_status\": \"active\", \"signup_source\": \"mobile_app\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xc7\x05\n\x11\x63ustom_attributes\x18\t \x03(\x0b\x32:.scalekit.v1.users.UpdateUserProfile.CustomAttributesEntryB\xdd\x04\x92\x41\xc0\x04\x32\xfe\x03Updates custom attributes for extended user profile data and application-specific information. Use this field to store business-specific user data like department, job title, security clearances, project assignments, or any other organizational attributes your application requires. Unlike system metadata, these attributes are typically managed by administrators or applications and are visible to end users. Keys must be 3-25 characters, values must be 1-256 characters, with a maximum of 20 key-value pairs.J={\"department\": \"engineering\", \"security_clearance\": \"level2\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x10\x63ustomAttributes\x12\x8a\x01\n\nfirst_name\x18\x15 \x01(\tBf\x18\x01\x92\x41Y2O[DEPRECATED] Use given_name instead. User\'s given name. Maximum 200 characters.J\x06\"John\"\xbaH\x05r\x03\x18\xc8\x01H\x05R\tfirstName\x88\x01\x01\x12\x89\x01\n\tlast_name\x18\x16 \x01(\tBg\x18\x01\x92\x41Z2Q[DEPRECATED] Use family_name instead. User\'s family name. Maximum 200 characters.J\x05\"Doe\"\xbaH\x05r\x03\x18\xc8\x01H\x06R\x08lastName\x88\x01\x01\x12\x97\x03\n\x12preferred_username\x18\n \x01(\tB\xe2\x02\x92\x41\xd6\x02\x32\xbf\x02Updates the user\'s preferred username for display and identification purposes. Use this field to set a custom username that the user prefers to be known by, which may differ from their email or formal name. This username appears in user interfaces, mentions, and informal communications. Maximum 512 characters allowed.J\x12\"John Michael Doe\"\xbaH\x05r\x03\x18\x80\x04H\x07R\x11preferredUsername\x88\x01\x01\x12\xb2\x03\n\x07picture\x18\x0b \x01(\tB\x92\x03\x92\x41\x86\x03\x32\xe1\x02Updates the URL to the user\'s profile picture or avatar image. Use this field to set or change the user\'s profile photo that appears in user interfaces, directory listings, and collaborative features. The URL should point to a publicly accessible image file. Supported formats typically include JPEG, PNG, and GIF. Maximum URL length is 2048 characters.J \"https://example.com/avatar.jpg\"\xbaH\x05r\x03\x18\x80\x10H\x08R\x07picture\x88\x01\x01\x12\xfe\x02\n\x06gender\x18\x0c \x01(\tB\xe0\x02\x92\x41\xdc\x02\x32\xd1\x02Updates the user\'s gender identity information. Use this field to store the user\'s gender identity for personalization, compliance, or reporting purposes. This field supports any string value to accommodate diverse gender identities and should be handled with appropriate privacy considerations according to your organization\'s policies.J\x06\"male\"H\tR\x06gender\x88\x01\x01\x12\xdd\x03\n\x06groups\x18\r \x03(\tB\xc4\x03\x92\x41\xab\x03\x32\x8b\x03Updates the list of group names the user belongs to within the organization. Use this field to manage the user\'s group memberships for role-based access control, team assignments, or organizational structure. Groups are typically used for permission management and collaborative access. Each group name must be unique within the list, 1-250 characters long, with a maximum of 50 groups per user.J\x1b[\"engineering\", \"managers\"]\xbaH\x12\x92\x01\x0f\x08\x00\x10\x32\x18\x01\"\x07r\x05\x10\x01\x18\xfa\x01R\x06groups\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a\x43\n\x15\x43ustomAttributesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\r\n\x0b_given_nameB\x0e\n\x0c_family_nameB\x07\n\x05_nameB\t\n\x07_localeB\x0f\n\r_phone_numberB\r\n\x0b_first_nameB\x0c\n\n_last_nameB\x15\n\x13_preferred_usernameB\n\n\x08_pictureB\t\n\x07_genderJ\x04\x08\x01\x10\x02J\x04\x08\x06\x10\x07\"\xf9\x07\n\x06Invite\x12l\n\x0forganization_id\x18\x01 \x01(\tBC\x92\x41@2-The organization to which the invite belongs.J\x0f\"org_987654321\"R\x0eorganizationId\x12\x7f\n\x07user_id\x18\x02 \x01(\tBf\x92\x41\x63\x32SUser ID to whom the invite is sent. May be empty if the user has not signed up yet.J\x0c\"usr_123456\"R\x06userId\x12\x7f\n\rinviter_email\x18\x03 \x01(\tBU\x92\x41R2;Identifier of the user or system that initiated the invite.J\x13\"admin@example.com\"H\x00R\x0cinviterEmail\x88\x01\x01\x12x\n\x06status\x18\x04 \x01(\tB`\x92\x41]2ICurrent status of the invite (e.g., pending, accepted, expired, revoked).J\x10\"pending_invite\"R\x06status\x12\x89\x01\n\ncreated_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampBN\x92\x41K21Timestamp when the invite was originally created.J\x16\"2025-07-10T08:00:00Z\"R\tcreatedAt\x12}\n\nexpires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampBB\x92\x41?2%The time at which the invite expires.J\x16\"2025-12-31T23:59:59Z\"R\texpiresAt\x12\x8f\x01\n\tresent_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampBV\x92\x41S29Timestamp when the invite was last resent, if applicable.J\x16\"2025-07-15T09:30:00Z\"R\x08resentAt\x12V\n\x0cresent_count\x18\x08 \x01(\x05\x42\x33\x92\x41\x30\x32+Number of times the invite has been resent.J\x01\x32R\x0bresentCountB\x10\n\x0e_inviter_email\"\xa3\x03\n\x13ResendInviteRequest\x12\xd3\x01\n\x0forganization_id\x18\x01 \x01(\tB\xa9\x01\x92\x41\x96\x01\x32|Unique identifier of the organization containing the pending invitation. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xb5\x01\n\x02id\x18\x02 \x01(\tB\xa4\x01\x92\x41\x91\x01\x32wSystem-generated user ID of the user who has a pending invitation. Must start with \'usr_\' and be 19-25 characters long.J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_R\x02id\"\xe1\x02\n\x14ResendInviteResponse\x12\xc8\x02\n\x06invite\x18\x01 \x01(\x0b\x32\x19.scalekit.v1.users.InviteB\x94\x02\x92\x41\x90\x02\x32\x81\x01Updated invitation object containing the resent invitation details, including new expiration time and incremented resend counter.J\x89\x01{\"organization_id\": \"org_123\", \"user_id\": \"usr_456\", \"status\": \"pending_invite\", \"expires_at\": \"2025-12-31T23:59:59Z\", \"resent_count\": 2}R\x06invite\"\xf0\x01\n\x14ListUserRolesRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\"q\n\x15ListUserRolesResponse\x12X\n\x05roles\x18\x01 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleB\'\x92\x41$2\"List of roles assigned to the userR\x05roles\"\xde\x02\n\x16\x41ssignUserRolesRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\x12j\n\x05roles\x18\x03 \x03(\x0b\x32$.scalekit.v1.users.AssignRoleRequestB.\x92\x41%2#List of roles to assign to the user\xbaH\x03\xc8\x01\x01R\x05roles\"\xb2\x01\n\x11\x41ssignRoleRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x18\x01\x92\x41\x39\x32\x1eUnique identifier for the roleJ\x17\"role_1234abcd5678efgh\"R\x02id\x12M\n\trole_name\x18\x02 \x01(\tB0\x92\x41$2\x18Unique name for the roleJ\x08\"viewer\"\xbaH\x06r\x04\x10\x00\x18\x64R\x08roleName\"\x81\x01\n\x17\x41ssignUserRolesResponse\x12\x66\n\x05roles\x18\x01 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleB5\x92\x41\x32\x32\x30List of all roles currently assigned to the userR\x05roles\"\xd6\x02\n\x15RemoveUserRoleRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\x12\x63\n\trole_name\x18\x03 \x01(\tBF\x92\x41\x43\x32(Unique identifier for the role to removeJ\x17\"role_1234abcd5678efgh\"R\x08roleName\"\xf6\x01\n\x1aListUserPermissionsRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\"\x97\x03\n\nPermission\x12U\n\x02id\x18\x01 \x01(\tBE\x92\x41?2$Unique identifier for the permissionJ\x17\"perm_1234abcd5678efgh\"\xe0\x41\x03R\x02id\x12R\n\x04name\x18\x02 \x01(\tB>\x92\x41;2)Unique name identifier for the permissionJ\x0e\"users:create\"R\x04name\x12u\n\x0b\x64\x65scription\x18\x03 \x01(\tBS\x92\x41P2)Description of what the permission allowsJ#\"Allows creating new user accounts\"R\x0b\x64\x65scription\x12g\n\x04tags\x18\x04 \x03(\tBS\x92\x41\x41\x32!Tags for categorizing permissionsJ\x1c[\"user-management\", \"admin\"]\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\x04tags\";\n\x16GetSupportHashResponse\x12!\n\x0csupport_hash\x18\x01 \x01(\tR\x0bsupportHash\"\x8f\x01\n\x1bListUserPermissionsResponse\x12p\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x1d.scalekit.v1.users.PermissionB/\x92\x41,2*List of permissions the user has access toR\x0bpermissions2\x97]\n\x0bUserService\x12\xb8\x03\n\x07GetUser\x12!.scalekit.v1.users.GetUserRequest\x1a\".scalekit.v1.users.GetUserResponse\"\xe5\x02\x92\x41\xc1\x02\n\x05Users\x12\x08Get user\x1a\x8e\x01Retrieves all details for a user by system-generated user ID or external ID. The response includes organization memberships and user metadata.J\x9c\x01\n\x03\x32\x30\x30\x12\x94\x01\njUser details retrieved successfully. Returns full user object with system-generated fields and timestamps.\x12&\n$\x1a\".scalekit.v1.users.GetUserResponse\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x14\x12\x12/api/v1/users/{id}\x12\xba\x03\n\x0eGetCurrentUser\x12(.scalekit.v1.users.GetCurrentUserRequest\x1a).scalekit.v1.users.GetCurrentUserResponse\"\xd2\x02\x92\x41\x9f\x02\n\x05Users\x12\x16Get authenticated user\x1a\x9e\x01Retrieves details for the currently authenticated user. Returns the same user object as GetUser but uses the authenticated user\'s ID from the session context.J]\n\x03\x32\x30\x30\x12V\n,Current user details retrieved successfully.\x12&\n$\x1a\".scalekit.v1.users.GetUserResponse\x82\xb5\x18\x02\x18\x10\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x14\x12\x12/api/v1/users:this\x12\xe1\x02\n\x0eGetSupportHash\x12\x16.google.protobuf.Empty\x1a).scalekit.v1.users.GetSupportHashResponse\"\x8b\x02\x92\x41\xdf\x01\n\x05Users\x12\x10Get support hash\x1a\x66Retrieves the support email hash for the current logged in user, used for the Scalekit support system.J\\\n\x03\x32\x30\x30\x12U\n$Support hash retrieved successfully.\x12-\n+\x1a).scalekit.v1.users.GetSupportHashResponse\x82\xb5\x18\x02\x18P\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/users/support-hash\x12\xa0\x04\n\tListUsers\x12#.scalekit.v1.users.ListUsersRequest\x1a$.scalekit.v1.users.ListUsersResponse\"\xc7\x03\x92\x41\xa8\x03\n\x05Users\x12\x1dList all users in environment\x1a\xbc\x02Retrieves a paginated list of all users across your entire environment. Use this endpoint to view all users regardless of their organization memberships. This is useful for administrative purposes, user audits, or when you need to see all users in your Scalekit environment. Supports pagination for large user bases.JA\n\x03\x32\x30\x30\x12:\n\x0eList of users.\x12(\n&\x1a$.scalekit.v1.users.ListUsersResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x0f\x12\r/api/v1/users\x12\xcb\x03\n\x0bSearchUsers\x12%.scalekit.v1.users.SearchUsersRequest\x1a&.scalekit.v1.users.SearchUsersResponse\"\xec\x02\x92\x41\xb7\x02\n\x05Users\x12\x0cSearch users\x1a\x85\x01Searches for users in the environment by email, user ID, or external ID. Returns all users that match the query. Supports pagination.J\x97\x01\n\x03\x32\x30\x30\x12\x8f\x01\naReturns a list of matching users and a page token for pagination if there are additional results.\x12*\n(\x1a&.scalekit.v1.users.SearchUsersResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/users:search\x12\xe0\x04\n\x17SearchOrganizationUsers\x12\x31.scalekit.v1.users.SearchOrganizationUsersRequest\x1a\x32.scalekit.v1.users.SearchOrganizationUsersResponse\"\xdd\x03\x92\x41\x88\x03\n\x05Users\x12\x19Search organization users\x1a\xa5\x01Searches for users within a specific organization by email, user ID, or external ID. Returns all users in the organization that match the query. Supports pagination.J\xbb\x01\n\x03\x32\x30\x30\x12\xb3\x01\nyReturns a list of matching users within the organization and a page token for pagination if there are additional results.\x12\x36\n4\x1a\x32.scalekit.v1.users.SearchOrganizationUsersResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x36\x12\x34/api/v1/organizations/{organization_id}/users:search\x12\x96\x05\n\nUpdateUser\x12$.scalekit.v1.users.UpdateUserRequest\x1a%.scalekit.v1.users.UpdateUserResponse\"\xba\x04\x92\x41\x90\x04\n\x05Users\x12\x17Update user information\x1a\xe1\x02Modifies user account information including profile details, metadata, and external ID. Use this endpoint to update a user\'s personal information, contact details, or custom metadata. You can update the user\'s profile, phone number, and metadata fields. Note that fields like user ID, email address, environment ID, and creation time cannot be modified.J\x89\x01\n\x03\x32\x30\x30\x12\x81\x01\nTUser updated successfully. Returns the modified user object with updated timestamps.\x12)\n\'\x1a%.scalekit.v1.users.UpdateUserResponse\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x1a\x32\x12/api/v1/users/{id}:\x04user\x12\xfd\x03\n\nDeleteUser\x12$.scalekit.v1.users.DeleteUserRequest\x1a\x16.google.protobuf.Empty\"\xb0\x03\x92\x41\x8c\x03\n\x05Users\x12\x17\x44\x65lete user permanently\x1a\xb0\x02Permanently removes a user from your environment and deletes all associated data. Use this endpoint when you need to completely remove a user account. This action deletes the user\'s profile, memberships, and all related data across all organizations. This operation cannot be undone, so use with caution.J7\n\x03\x32\x30\x30\x12\x30\n.User successfully deleted. No content returned\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x14*\x12/api/v1/users/{id}\x12\xc4\x05\n\x10\x43reateMembership\x12*.scalekit.v1.users.CreateMembershipRequest\x1a+.scalekit.v1.users.CreateMembershipResponse\"\xd6\x04\x92\x41\xde\x03\n\x05Users\x12!Add existing user to organization\x1a\x95\x02\x41\x64\x64s an existing user to an organization and assigns them specific roles and permissions. Use this endpoint when you want to grant an existing user access to a particular organization. You can specify roles, metadata, and other membership details during the invitation process.J\x99\x01\n\x03\x32\x30\x31\x12\x91\x01\n^User successfully added to the organization. Returns details of the updated membership details\x12/\n-\x1a+.scalekit.v1.users.CreateMembershipResponse\x82\xb5\x18\x1e\n\x1aorganizations_users_invite\x18T\x82\xd3\xe4\x93\x02L\">/api/v1/memberships/organizations/{organization_id}/users/{id}:\nmembership\x12\x99\x04\n\x10\x44\x65leteMembership\x12*.scalekit.v1.users.DeleteMembershipRequest\x1a\x16.google.protobuf.Empty\"\xc0\x03\x92\x41\xd4\x02\n\x05Users\x12\'Delete organization membership for user\x1a\xdc\x01Removes a user from an organization by user ID or external ID. If the user has no memberships left and cascade is true, the user is also deleted. This action is irreversible and may also remove related group memberships.JC\n\x03\x32\x30\x30\x12<\n:User successfully marked for deletion. No content returned\x82\xb5\x18\x1e\n\x1aorganizations_users_remove\x18T\x82\xd3\xe4\x93\x02@*>/api/v1/memberships/organizations/{organization_id}/users/{id}\x12\x9e\x04\n\x10UpdateMembership\x12*.scalekit.v1.users.UpdateMembershipRequest\x1a+.scalekit.v1.users.UpdateMembershipResponse\"\xb0\x03\x92\x41\xb3\x02\n\x05Users\x12\'Update organization membership for user\x1a\x83\x01Updates a user\'s membership details within an organization by user ID or external ID. You can update roles and membership metadata.J{\n\x03\x32\x30\x30\x12t\nAMembership updated successfully. Returns the updated user object.\x12/\n-\x1a+.scalekit.v1.users.UpdateMembershipResponse\x82\xb5\x18#\n\x1forganizations_users_role_update\x18T\x82\xd3\xe4\x93\x02L2>/api/v1/memberships/organizations/{organization_id}/users/{id}:\nmembership\x12\xc8\x06\n\x17\x43reateUserAndMembership\x12\x31.scalekit.v1.users.CreateUserAndMembershipRequest\x1a\x32.scalekit.v1.users.CreateUserAndMembershipResponse\"\xc5\x05\x92\x41\xe4\x04\n\x05Users\x12\x1f\x43reate new user in organization\x1a\x83\x03\x43reates a new user account and immediately adds them to the specified organization. Use this endpoint when you want to create a user and grant them access to an organization in a single operation. You can provide user profile information, assign roles, and configure membership metadata. The user receives an activation email unless this feature is disabled in the organization settings.J\xb3\x01\n\x03\x32\x30\x31\x12\xab\x01\nqUser created successfully. Returns the created user object, including system-generated identifiers and timestamps\x12\x36\n4\x1a\x32.scalekit.v1.users.CreateUserAndMembershipResponse\x82\xb5\x18\x1e\n\x1aorganizations_users_invite\x18T\x82\xd3\xe4\x93\x02\x35\"-/api/v1/organizations/{organization_id}/users:\x04user\x12\xfd\x04\n\x15ListOrganizationUsers\x12/.scalekit.v1.users.ListOrganizationUsersRequest\x1a\x30.scalekit.v1.users.ListOrganizationUsersResponse\"\x80\x04\x92\x41\xa7\x03\n\x05Users\x12\x17List organization users\x1a\x87\x02Retrieves a paginated list of all users who are members of the specified organization. Use this endpoint to view all users with access to a particular organization, including their roles, metadata, and membership details. Supports pagination for large user lists.J{\n\x03\x32\x30\x30\x12t\n\r\372\002\nmembership\340A\002\272H\003\310\001\001' + _globals['_CREATEMEMBERSHIPREQUEST'].fields_by_name['membership']._serialized_options = b'\222AA2?Membership details to create. Required fields must be provided.\272H\003\310\001\001' _globals['_CREATEMEMBERSHIPREQUEST'].fields_by_name['id']._loaded_options = None _globals['_CREATEMEMBERSHIPREQUEST'].fields_by_name['id']._serialized_options = b'\222A]2CSystem-generated user ID. Must start with \'usr_\' (19-25 characters)J\026\"usr_1234abcd5678efgh\"\272H\014r\n\020\023\030\031:\004usr_' _globals['_CREATEMEMBERSHIPREQUEST'].fields_by_name['external_id']._loaded_options = None @@ -123,9 +123,9 @@ _globals['_LISTUSERSRESPONSE'].fields_by_name['prev_page_token']._loaded_options = None _globals['_LISTUSERSRESPONSE'].fields_by_name['prev_page_token']._serialized_options = b'\222A\211\0012SToken for retrieving the previous page of results. Empty if this is the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"' _globals['_SEARCHUSERSREQUEST'].fields_by_name['query']._loaded_options = None - _globals['_SEARCHUSERSREQUEST'].fields_by_name['query']._serialized_options = b'\222A\210\0012oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\020john@example.comxd\200\001\003\272H\tr\004\020\003\030d\310\001\001' + _globals['_SEARCHUSERSREQUEST'].fields_by_name['query']._serialized_options = b'\222A\203\0012oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\020john@example.com\272H\tr\004\020\003\030d\310\001\001' _globals['_SEARCHUSERSREQUEST'].fields_by_name['page_size']._loaded_options = None - _globals['_SEARCHUSERSREQUEST'].fields_by_name['page_size']._serialized_options = b'\222Ac2KMaximum number of users to return per page. Value must be between 1 and 30.J\00230Y\000\000\000\000\000\000>@i\000\000\000\000\000\000\360?\272H\004*\002\030\036' + _globals['_SEARCHUSERSREQUEST'].fields_by_name['page_size']._serialized_options = b'\222AQ2KMaximum number of users to return per page. Value must be between 1 and 30.J\00230\272H\004*\002\030\036' _globals['_SEARCHUSERSREQUEST'].fields_by_name['page_token']._loaded_options = None _globals['_SEARCHUSERSREQUEST'].fields_by_name['page_token']._serialized_options = b'\222A\201\0012aToken from a previous response for pagination. Provide this to retrieve the next page of results.J\034eyJwYWdlIjoyLCJsaW1pdCI6MzB9' _globals['_SEARCHUSERSRESPONSE'].fields_by_name['next_page_token']._loaded_options = None @@ -165,9 +165,9 @@ _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['organization_id']._loaded_options = None _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['organization_id']._serialized_options = b'\222A\205\0012kUnique identifier of the organization to search within. Must start with \'org_\' and be 1-32 characters long.J\026\"org_1234abcd5678efgh\"\272H\017r\n\020\001\030 :\004org_\310\001\001' _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['query']._loaded_options = None - _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['query']._serialized_options = b'\222A\210\0012oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\020john@example.comxd\200\001\003\272H\tr\004\020\003\030d\310\001\001' + _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['query']._serialized_options = b'\222A\203\0012oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\020john@example.com\272H\tr\004\020\003\030d\310\001\001' _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['page_size']._loaded_options = None - _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['page_size']._serialized_options = b'\222Ac2KMaximum number of users to return per page. Value must be between 1 and 30.J\00230Y\000\000\000\000\000\000>@i\000\000\000\000\000\000\360?\272H\004*\002\030\036' + _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['page_size']._serialized_options = b'\222AQ2KMaximum number of users to return per page. Value must be between 1 and 30.J\00230\272H\004*\002\030\036' _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['page_token']._loaded_options = None _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['page_token']._serialized_options = b'\222A\201\0012aToken from a previous response for pagination. Provide this to retrieve the next page of results.J\034eyJwYWdlIjoyLCJsaW1pdCI6MzB9' _globals['_SEARCHORGANIZATIONUSERSRESPONSE'].fields_by_name['next_page_token']._loaded_options = None @@ -315,15 +315,15 @@ _globals['_USERSERVICE'].methods_by_name['GetUser']._loaded_options = None _globals['_USERSERVICE'].methods_by_name['GetUser']._serialized_options = b'\222A\301\002\n\005Users\022\010Get user\032\216\001Retrieves all details for a user by system-generated user ID or external ID. The response includes organization memberships and user metadata.J\234\001\n\003200\022\224\001\njUser details retrieved successfully. Returns full user object with system-generated fields and timestamps.\022&\n$\032\".scalekit.v1.users.GetUserResponse\202\265\030\002\030T\202\323\344\223\002\024\022\022/api/v1/users/{id}' _globals['_USERSERVICE'].methods_by_name['GetCurrentUser']._loaded_options = None - _globals['_USERSERVICE'].methods_by_name['GetCurrentUser']._serialized_options = b'\222A\246\002\n\005Users\022\026Get authenticated user\032\236\001Retrieves details for the currently authenticated user. Returns the same user object as GetUser but uses the authenticated user\'s ID from the session context.Jd\n\003200\022]\n,Current user details retrieved successfully.\022-\n+\032).scalekit.v1.users.GetCurrentUserResponse\202\265\030\002\030\030\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002(\022\022/api/v1/users:thisZ\022\022\020/api/v1/users/me' + _globals['_USERSERVICE'].methods_by_name['GetCurrentUser']._serialized_options = b'\222A\237\002\n\005Users\022\026Get authenticated user\032\236\001Retrieves details for the currently authenticated user. Returns the same user object as GetUser but uses the authenticated user\'s ID from the session context.J]\n\003200\022V\n,Current user details retrieved successfully.\022&\n$\032\".scalekit.v1.users.GetUserResponse\202\265\030\002\030\020\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\024\022\022/api/v1/users:this' _globals['_USERSERVICE'].methods_by_name['GetSupportHash']._loaded_options = None - _globals['_USERSERVICE'].methods_by_name['GetSupportHash']._serialized_options = b'\222A\337\001\n\005Users\022\020Get support hash\032fRetrieves the support email hash for the current logged in user, used for the Scalekit support system.J\\\n\003200\022U\n$Support hash retrieved successfully.\022-\n+\032).scalekit.v1.users.GetSupportHashResponse\202\265\030\002\030P\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\034\022\032/api/v1/users/support-hash' + _globals['_USERSERVICE'].methods_by_name['GetSupportHash']._serialized_options = b'\222A\337\001\n\005Users\022\020Get support hash\032fRetrieves the support email hash for the current logged in user, used for the Scalekit support system.J\\\n\003200\022U\n$Support hash retrieved successfully.\022-\n+\032).scalekit.v1.users.GetSupportHashResponse\202\265\030\002\030P\202\323\344\223\002\034\022\032/api/v1/users/support-hash' _globals['_USERSERVICE'].methods_by_name['ListUsers']._loaded_options = None _globals['_USERSERVICE'].methods_by_name['ListUsers']._serialized_options = b'\222A\250\003\n\005Users\022\035List all users in environment\032\274\002Retrieves a paginated list of all users across your entire environment. Use this endpoint to view all users regardless of their organization memberships. This is useful for administrative purposes, user audits, or when you need to see all users in your Scalekit environment. Supports pagination for large user bases.JA\n\003200\022:\n\016List of users.\022(\n&\032$.scalekit.v1.users.ListUsersResponse\202\265\030\002\030D\202\323\344\223\002\017\022\r/api/v1/users' _globals['_USERSERVICE'].methods_by_name['SearchUsers']._loaded_options = None - _globals['_USERSERVICE'].methods_by_name['SearchUsers']._serialized_options = b'\222A\263\004\n\005Users\022\014Search users\032\257\002Searches for users across the entire environment by email address, user ID, or external ID. The query must be at least 3 characters and is case-insensitive. Returns a paginated list of matching users with up to 30 results per page. Use the next_page_token from the response to retrieve subsequent pages.J\214\001\n\003200\022\204\001\nVMatching users returned; includes pagination cursors for navigating large result sets.\022*\n(\032&.scalekit.v1.users.SearchUsersResponseJ[\n\003400\022T\nRBad Request - query must be at least 3 characters and no more than 100 characters.\202\265\030\002\030D\202\323\344\223\002\026\022\024/api/v1/users:search' + _globals['_USERSERVICE'].methods_by_name['SearchUsers']._serialized_options = b'\222A\267\002\n\005Users\022\014Search users\032\205\001Searches for users in the environment by email, user ID, or external ID. Returns all users that match the query. Supports pagination.J\227\001\n\003200\022\217\001\naReturns a list of matching users and a page token for pagination if there are additional results.\022*\n(\032&.scalekit.v1.users.SearchUsersResponse\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\026\022\024/api/v1/users:search' _globals['_USERSERVICE'].methods_by_name['SearchOrganizationUsers']._loaded_options = None - _globals['_USERSERVICE'].methods_by_name['SearchOrganizationUsers']._serialized_options = b'\222A\207\006\n\005Users\022\031Search organization users\032\343\002Searches for users within a specific organization by email address, user ID, or external ID. The query must be at least 3 characters and is case-insensitive. Scopes results strictly to the given organization. Returns a paginated list of matching users with up to 30 results per page. Use the next_page_token from the response to retrieve subsequent pages.J\260\001\n\003200\022\250\001\nnMatching users within the organization returned; includes pagination cursors for navigating large result sets.\0226\n4\0322.scalekit.v1.users.SearchOrganizationUsersResponseJ\233\001\n\003400\022\223\001\n\220\001Bad Request - query must be at least 3 characters and no more than 100 characters, and organization_id must be a valid org_ prefixed identifier.J,\n\003404\022%\n#Not Found - organization not found.\202\265\030\002\030D\202\323\344\223\0026\0224/api/v1/organizations/{organization_id}/users:search' + _globals['_USERSERVICE'].methods_by_name['SearchOrganizationUsers']._serialized_options = b'\222A\210\003\n\005Users\022\031Search organization users\032\245\001Searches for users within a specific organization by email, user ID, or external ID. Returns all users in the organization that match the query. Supports pagination.J\273\001\n\003200\022\263\001\nyReturns a list of matching users within the organization and a page token for pagination if there are additional results.\0226\n4\0322.scalekit.v1.users.SearchOrganizationUsersResponse\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\0026\0224/api/v1/organizations/{organization_id}/users:search' _globals['_USERSERVICE'].methods_by_name['UpdateUser']._loaded_options = None _globals['_USERSERVICE'].methods_by_name['UpdateUser']._serialized_options = b'\222A\220\004\n\005Users\022\027Update user information\032\341\002Modifies user account information including profile details, metadata, and external ID. Use this endpoint to update a user\'s personal information, contact details, or custom metadata. You can update the user\'s profile, phone number, and metadata fields. Note that fields like user ID, email address, environment ID, and creation time cannot be modified.J\211\001\n\003200\022\201\001\nTUser updated successfully. Returns the modified user object with updated timestamps.\022)\n\'\032%.scalekit.v1.users.UpdateUserResponse\202\265\030\002\030T\202\323\344\223\002\0322\022/api/v1/users/{id}:\004user' _globals['_USERSERVICE'].methods_by_name['DeleteUser']._loaded_options = None @@ -339,7 +339,7 @@ _globals['_USERSERVICE'].methods_by_name['ListOrganizationUsers']._loaded_options = None _globals['_USERSERVICE'].methods_by_name['ListOrganizationUsers']._serialized_options = b'\222A\247\003\n\005Users\022\027List organization users\032\207\002Retrieves a paginated list of all users who are members of the specified organization. Use this endpoint to view all users with access to a particular organization, including their roles, metadata, and membership details. Supports pagination for large user lists.J{\n\003200\022t\n\n\x05items\x18\x08 \x03(\x0b\x32(.scalekit.v1.workspaces.SubscriptionItemR\x05items\"\xe1\x01\n\x10SubscriptionItem\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x19\n\x08price_id\x18\x02 \x01(\tR\x07priceId\x12\x1a\n\x08quantity\x18\x03 \x01(\x03R\x08quantity\x12\x45\n\x07product\x18\x04 \x01(\x0b\x32+.scalekit.v1.workspaces.SubscriptionProductR\x07product\x12?\n\x05price\x18\x05 \x01(\x0b\x32).scalekit.v1.workspaces.SubscriptionPriceR\x05price\"s\n\x13SubscriptionProduct\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x16\n\x06\x61\x63tive\x18\x04 \x01(\x08R\x06\x61\x63tive\"\xba\x02\n\x11SubscriptionPrice\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\x12\x12\n\x04type\x18\x03 \x01(\tR\x04type\x12\x1a\n\x08interval\x18\x04 \x01(\tR\x08interval\x12%\n\x0e\x62illing_scheme\x18\x05 \x01(\tR\rbillingScheme\x12\x1d\n\nusage_type\x18\x06 \x01(\tR\tusageType\x12\x37\n\x05tiers\x18\x07 \x03(\x0b\x32!.scalekit.v1.workspaces.PriceTierR\x05tiers\x12\x1f\n\x0btotal_usage\x18\x08 \x01(\x03R\ntotalUsage\x12-\n\x12\x61ggregation_method\x18\t \x01(\tR\x11\x61ggregationMethod\"8\n\tPriceTier\x12\x13\n\x05up_to\x18\x01 \x01(\x03R\x04upTo\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\"\x97\x03\n\x0e\x43urrentInvoice\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\x12=\n\x06status\x18\x04 \x01(\x0e\x32%.scalekit.v1.workspaces.InvoiceStatusR\x06status\x12\x35\n\x08\x64ue_date\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x64ueDate\x12;\n\x0bissued_date\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nissuedDate\x12H\n\x12\x62illing_start_date\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x10\x62illingStartDate\x12\x44\n\x10\x62illing_end_date\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0e\x62illingEndDate\"\x84\x02\n\x0bLastInvoice\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\x12=\n\x06status\x18\x04 \x01(\x0e\x32%.scalekit.v1.workspaces.InvoiceStatusR\x06status\x12\x35\n\x08\x64ue_date\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x64ueDate\x12;\n\x0bissued_date\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nissuedDate\"\xe6\x03\n\rPaymentMethod\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x37\n\x04type\x18\x02 \x01(\x0e\x32#.scalekit.v1.workspaces.PaymentTypeR\x04type\x12%\n\x0e\x61\x63\x63ount_number\x18\x03 \x01(\tR\raccountNumber\x12!\n\x0c\x61\x63\x63ount_type\x18\x04 \x01(\tR\x0b\x61\x63\x63ountType\x12\x43\n\x06status\x18\x05 \x01(\x0e\x32+.scalekit.v1.workspaces.PaymentMethodStatusR\x06status\x12!\n\x0c\x61\x63\x63ount_name\x18\x06 \x01(\tR\x0b\x61\x63\x63ountName\x12\x99\x01\n\x0cpayment_info\x18\x07 \x03(\x0b\x32\x36.scalekit.v1.workspaces.PaymentMethod.PaymentInfoEntryB>\xbaH;\x9a\x01\x38\x10\x05\",r*R\x05\x62randR\x05last4R\texp_monthR\x08\x65xp_yearR\x05\x65mail*\x06r\x04\x10\x01\x18@R\x0bpaymentInfo\x1a>\n\x10PaymentInfoEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xcf\x01\n\x12\x42illingContactInfo\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n\x05\x65mail\x18\x02 \x01(\tR\x05\x65mail\x12\x14\n\x05line1\x18\x03 \x01(\tR\x05line1\x12\x14\n\x05line2\x18\x04 \x01(\tR\x05line2\x12\x12\n\x04\x63ity\x18\x05 \x01(\tR\x04\x63ity\x12\x14\n\x05state\x18\x06 \x01(\tR\x05state\x12\x1f\n\x0bpostal_code\x18\x07 \x01(\tR\npostalCode\x12\x18\n\x07\x63ountry\x18\x08 \x01(\tR\x07\x63ountry\"\x99\x01\n\x05\x41\x64\x64on\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x1a\n\x08\x66\x65\x61tures\x18\x04 \x03(\tR\x08\x66\x65\x61tures\x12\x18\n\x07\x65nabled\x18\x05 \x01(\x08R\x07\x65nabled\x12\x14\n\x05price\x18\x06 \x01(\x01R\x05price\x12\x1a\n\x08\x63urrency\x18\x07 \x01(\tR\x08\x63urrencyJ\x04\x08\x03\x10\x04\"\x18\n\x16GetProductUsageRequest\"\x9a\x01\n\x17GetProductUsageResponse\x12@\n\x08products\x18\x01 \x03(\x0b\x32$.scalekit.v1.workspaces.ProductUsageR\x08products\x12!\n\x0ctotal_amount\x18\x02 \x01(\x01R\x0btotalAmount\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\"\xba\x02\n\x0cProductUsage\x12\x1d\n\nproduct_id\x18\x01 \x01(\tR\tproductId\x12!\n\x0cproduct_name\x18\x02 \x01(\tR\x0bproductName\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x37\n\x05tiers\x18\x04 \x03(\x0b\x32!.scalekit.v1.workspaces.UsageTierR\x05tiers\x12!\n\x0ctotal_amount\x18\x05 \x01(\x01R\x0btotalAmount\x12\x1f\n\x0btotal_count\x18\x06 \x01(\x01R\ntotalCount\x12\x1a\n\x08\x63urrency\x18\x07 \x01(\tR\x08\x63urrency\x12-\n\x12\x61ggregation_method\x18\x08 \x01(\tR\x11\x61ggregationMethod\"\xf4\x01\n\tUsageTier\x12\x1b\n\ttier_name\x18\x01 \x01(\tR\x08tierName\x12#\n\rcurrent_count\x18\x02 \x01(\x03R\x0c\x63urrentCount\x12\x32\n\x15total_available_count\x18\x03 \x01(\x03R\x13totalAvailableCount\x12\x33\n\x16price_for_current_tier\x18\x04 \x01(\x01R\x13priceForCurrentTier\x12\x1a\n\x08\x63urrency\x18\x05 \x01(\tR\x08\x63urrency\x12 \n\x0cis_free_tier\x18\x06 \x01(\x08R\nisFreeTier\"\x1a\n\x18GetProductCatalogRequest\"]\n\x19GetProductCatalogResponse\x12@\n\x07\x63\x61talog\x18\x01 \x01(\x0b\x32&.scalekit.v1.workspaces.ProductCatalogR\x07\x63\x61talog\"X\n\x0eProductCatalog\x12\x46\n\x08products\x18\x01 \x03(\x0b\x32*.scalekit.v1.workspaces.ProductCatalogItemR\x08products\"\xb7\x01\n\x12ProductCatalogItem\x12@\n\x07product\x18\x01 \x01(\x0b\x32&.scalekit.v1.workspaces.CatalogProductR\x07product\x12<\n\x06prices\x18\x02 \x03(\x0b\x32$.scalekit.v1.workspaces.CatalogPriceR\x06prices\x12!\n\x0c\x62illing_type\x18\x03 \x01(\tR\x0b\x62illingType\"\xc2\x02\n\x0e\x43\x61talogProduct\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x16\n\x06\x61\x63tive\x18\x04 \x01(\x08R\x06\x61\x63tive\x12k\n\x08metadata\x18\x05 \x03(\x0b\x32\x34.scalekit.v1.workspaces.CatalogProduct.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12(\n\x10\x64\x65\x66\x61ult_price_id\x18\x06 \x01(\tR\x0e\x64\x65\x66\x61ultPriceId\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x81\x02\n\x0c\x43\x61talogPrice\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\x12\x12\n\x04type\x18\x04 \x01(\tR\x04type\x12\x1a\n\x08interval\x18\x05 \x01(\tR\x08interval\x12%\n\x0e\x62illing_scheme\x18\x06 \x01(\tR\rbillingScheme\x12\x1d\n\nusage_type\x18\x07 \x01(\tR\tusageType\x12\x37\n\x05tiers\x18\x08 \x03(\x0b\x32!.scalekit.v1.workspaces.PriceTierR\x05tiers\"\xdb\x01\n\x16\x41\x64\x64SubscriptionRequest\x12!\n\x0cproduct_name\x18\x01 \x01(\tR\x0bproductName\x12\x1d\n\nproduct_id\x18\x02 \x01(\tR\tproductId:\x7f\xbaH|\x1az\n\x12product_name_or_id\x12\x32\x65ither product_id or product_name must be provided\x1a\x30this.product_id != \'\' || this.product_name != \'\'\"}\n\x17\x41\x64\x64SubscriptionResponse\x12\'\n\x0fsubscription_id\x18\x01 \x01(\tR\x0esubscriptionId\x12\x1d\n\nproduct_id\x18\x02 \x01(\tR\tproductId\x12\x1a\n\x08quantity\x18\x03 \x01(\x03R\x08quantity\"\xe5\x02\n\x1c\x43reateCheckoutSessionRequest\x12?\n\x04mode\x18\x01 \x01(\x0e\x32+.scalekit.v1.workspaces.CheckoutSessionModeR\x04mode\x12\"\n\nreturn_url\x18\x02 \x01(\tH\x00R\treturnUrl\x88\x01\x01\x12$\n\x0bsuccess_url\x18\x03 \x01(\tH\x01R\nsuccessUrl\x88\x01\x01\x12\x37\n\x07ui_mode\x18\x04 \x01(\x0e\x32\x1e.scalekit.v1.workspaces.UiModeR\x06uiMode\x12\x62\n\x16redirect_on_completion\x18\x05 \x01(\x0e\x32,.scalekit.v1.workspaces.RedirectOnCompletionR\x14redirectOnCompletionB\r\n\x0b_return_urlB\x0e\n\x0c_success_url\"s\n\x1d\x43reateCheckoutSessionResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12#\n\rclient_secret\x18\x02 \x01(\tR\x0c\x63lientSecret\x12\x15\n\x03url\x18\x03 \x01(\tH\x00R\x03url\x88\x01\x01\x42\x06\n\x04_url\"Z\n\x1dUpdateWorkspaceContextRequest\x12\x39\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\x06\xbaH\x03\xc8\x01\x01R\x07\x63ontext\"S\n\x1eUpdateWorkspaceContextResponse\x12\x31\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext\" \n\x1eValidateWorkspaceDomainRequest\"a\n\x1c\x43reateWorkspaceDomainRequest\x12\x41\n\x06\x64omain\x18\x01 \x01(\x0b\x32!.scalekit.v1.domains.CreateDomainB\x06\xbaH\x03\xc8\x01\x01R\x06\x64omain\"T\n\x1d\x43reateWorkspaceDomainResponse\x12\x33\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainR\x06\x64omain\"\xd7\x01\n\x1bListWorkspaceDomainsRequest\x12\x38\n\tpage_size\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueR\x08pageSize\x12<\n\x0bpage_number\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueR\npageNumber\x12@\n\x0b\x64omain_type\x18\x03 \x01(\x0e\x32\x1f.scalekit.v1.domains.DomainTypeR\ndomainType\"\x93\x01\n\x1cListWorkspaceDomainsResponse\x12\x1b\n\tpage_size\x18\x01 \x01(\x05R\x08pageSize\x12\x1f\n\x0bpage_number\x18\x02 \x01(\x05R\npageNumber\x12\x35\n\x07\x64omains\x18\x03 \x03(\x0b\x32\x1b.scalekit.v1.domains.DomainR\x07\x64omains\":\n\x1c\x44\x65leteWorkspaceDomainRequest\x12\x1a\n\x02id\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x01R\x02id*\xaf\x01\n\x19\x42illingSubscriptionStatus\x12+\n\'BILLING_SUBSCRIPTION_STATUS_UNSPECIFIED\x10\x00\x12\x1f\n\x1b\x42ILLING_SUBSCRIPTION_ACTIVE\x10\x01\x12!\n\x1d\x42ILLING_SUBSCRIPTION_CANCELED\x10\x02\x12!\n\x1d\x42ILLING_SUBSCRIPTION_PAST_DUE\x10\x03*y\n\rInvoiceStatus\x12\x1e\n\x1aINVOICE_STATUS_UNSPECIFIED\x10\x00\x12\x10\n\x0cINVOICE_PAID\x10\x01\x12\x0f\n\x0bINVOICE_DUE\x10\x02\x12\x13\n\x0fINVOICE_OVERDUE\x10\x03\x12\x10\n\x0cINVOICE_VOID\x10\x04*j\n\x0bPaymentType\x12\x1c\n\x18PAYMENT_TYPE_UNSPECIFIED\x10\x00\x12\x08\n\x04\x43\x41RD\x10\x01\x12\x10\n\x0c\x42\x41NK_ACCOUNT\x10\x02\x12\x0b\n\x07OFFLINE\x10\x03\x12\x08\n\x04LINK\x10\x04\x12\n\n\x06PAYPAL\x10\x05*\x8e\x01\n\x13PaymentMethodStatus\x12%\n!PAYMENT_METHOD_STATUS_UNSPECIFIED\x10\x00\x12\x19\n\x15PAYMENT_METHOD_ACTIVE\x10\x01\x12\x1a\n\x16PAYMENT_METHOD_EXPIRED\x10\x02\x12\x19\n\x15PAYMENT_METHOD_FAILED\x10\x03*f\n\x14RedirectOnCompletion\x12&\n\"REDIRECT_ON_COMPLETION_UNSPECIFIED\x10\x00\x12\t\n\x05never\x10\x01\x12\n\n\x06\x61lways\x10\x02\x12\x0f\n\x0bif_required\x10\x03*G\n\x06UiMode\x12\x17\n\x13UI_MODE_UNSPECIFIED\x10\x00\x12\x0c\n\x08\x65mbedded\x10\x01\x12\n\n\x06hosted\x10\x02\x12\n\n\x06\x63ustom\x10\x03*f\n\x13\x43heckoutSessionMode\x12%\n!CHECKOUT_SESSION_MODE_UNSPECIFIED\x10\x00\x12\t\n\x05setup\x10\x01\x12\x10\n\x0csubscription\x10\x02\x12\x0b\n\x07payment\x10\x03\x32\x96\x1b\n\x10WorkspaceService\x12\x9b\x01\n\x0f\x43reateWorkspace\x12..scalekit.v1.workspaces.CreateWorkspaceRequest\x1a/.scalekit.v1.workspaces.CreateWorkspaceResponse\"\'\x82\xb5\x18\x02\x18\x01\x82\xd3\xe4\x93\x02\x1b\"\x0e/api/v1/signup:\tworkspace\x12\x90\x01\n\x0cGetWorkspace\x12+.scalekit.v1.workspaces.GetWorkspaceRequest\x1a,.scalekit.v1.workspaces.GetWorkspaceResponse\"%\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x19\x12\x17/api/v1/workspaces/{id}\x12\xad\x01\n\x13GetCurrentWorkspace\x12\x32.scalekit.v1.workspaces.GetCurrentWorkspaceRequest\x1a,.scalekit.v1.workspaces.GetWorkspaceResponse\"4\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\x12\x17/api/v1/workspaces:this\x12\xa4\x01\n\x0fUpdateWorkspace\x12..scalekit.v1.workspaces.UpdateWorkspaceRequest\x1a/.scalekit.v1.workspaces.UpdateWorkspaceResponse\"0\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02$2\x17/api/v1/workspaces/{id}:\tworkspace\x12\x90\x01\n\x10OnboardWorkspace\x12/.scalekit.v1.workspaces.OnboardWorkspaceRequest\x1a\x16.google.protobuf.Empty\"3\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\'2\x1a/api/v1/workspaces:onboard:\tworkspace\x12\xb2\x01\n\x16UpdateCurrentWorkspace\x12\x35.scalekit.v1.workspaces.UpdateCurrentWorkspaceRequest\x1a/.scalekit.v1.workspaces.UpdateWorkspaceResponse\"0\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02$2\x17/api/v1/workspaces:this:\tworkspace\x12\xcd\x01\n\x19GetWorkspaceSubscriptions\x12\x38.scalekit.v1.workspaces.GetWorkspaceSubscriptionsRequest\x1a\x39.scalekit.v1.workspaces.GetWorkspaceSubscriptionsResponse\";\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02/\x12-/api/v1/workspaces/{id}/billing/subscriptions\x12\xca\x01\n\x18GetWorkspacePricingTable\x12\x37.scalekit.v1.workspaces.GetWorkspacePricingTableRequest\x1a\x38.scalekit.v1.workspaces.GetWorkspacePricingTableResponse\";\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02/\x12-/api/v1/workspaces/{id}/billing/pricing-table\x12\xc3\x01\n\x10GetBillingPortal\x12/.scalekit.v1.workspaces.GetBillingPortalRequest\x1a\x30.scalekit.v1.workspaces.GetBillingPortalResponse\"L\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\x12//api/v1/workspaces:this/billing/customer-portal\x12\xb2\x01\n\x0eGetBillingInfo\x12-.scalekit.v1.workspaces.GetBillingInfoRequest\x1a..scalekit.v1.workspaces.GetBillingInfoResponse\"A\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02&\x12$/api/v1/workspaces:this/billing:info\x12\xbe\x01\n\x0fGetProductUsage\x12..scalekit.v1.workspaces.GetProductUsageRequest\x1a/.scalekit.v1.workspaces.GetProductUsageResponse\"J\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02/\x12-/api/v1/workspaces:this/billing:product-usage\x12\xb5\x01\n\x11GetProductCatalog\x12\x30.scalekit.v1.workspaces.GetProductCatalogRequest\x1a\x31.scalekit.v1.workspaces.GetProductCatalogResponse\";\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02 \x12\x1e/api/v1/billing/productcatalog\x12\xc5\x01\n\x0f\x41\x64\x64Subscription\x12..scalekit.v1.workspaces.AddSubscriptionRequest\x1a/.scalekit.v1.workspaces.AddSubscriptionResponse\"Q\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x36\"1/api/v1/workspaces:this/billing/subscriptions:add:\x01*\x12\xd7\x01\n\x15\x43reateCheckoutSession\x12\x34.scalekit.v1.workspaces.CreateCheckoutSessionRequest\x1a\x35.scalekit.v1.workspaces.CreateCheckoutSessionResponse\"Q\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x36\"1/api/v1/workspaces:this/billing/checkout_sessions:\x01*\x12\xcf\x01\n\x16UpdateWorkspaceContext\x12\x35.scalekit.v1.workspaces.UpdateWorkspaceContextRequest\x1a\x36.scalekit.v1.workspaces.UpdateWorkspaceContextResponse\"F\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02+\" /api/v1/workspaces:this/contexts:\x07\x63ontext\x12\xb0\x01\n\x14ListWorkspaceDomains\x12\x33.scalekit.v1.workspaces.ListWorkspaceDomainsRequest\x1a\x34.scalekit.v1.workspaces.ListWorkspaceDomainsResponse\"-\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02!\x12\x1f/api/v1/workspaces:this/domains\x12\xbb\x01\n\x15\x43reateWorkspaceDomain\x12\x34.scalekit.v1.workspaces.CreateWorkspaceDomainRequest\x1a\x35.scalekit.v1.workspaces.CreateWorkspaceDomainResponse\"5\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02)\"\x1f/api/v1/workspaces:this/domains:\x06\x64omain\x12\x99\x01\n\x15\x44\x65leteWorkspaceDomain\x12\x34.scalekit.v1.workspaces.DeleteWorkspaceDomainRequest\x1a\x16.google.protobuf.Empty\"2\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02&*$/api/v1/workspaces:this/domains/{id}\x12\x9f\x01\n\x17ValidateWorkspaceDomain\x12\x36.scalekit.v1.workspaces.ValidateWorkspaceDomainRequest\x1a\x1a.google.protobuf.BoolValue\"0\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02$\x12\"/api/v1/workspaces:validate_domainB6Z4github.com/scalekit-inc/scalekit/pkg/grpc/workspacesb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'scalekit/v1/workspaces/workspaces.proto\x12\x16scalekit.v1.workspaces\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"\xa6\x01\n\x15WorkspaceExtendedInfo\x12\'\n\x0fpayment_overdue\x18\x01 \x01(\x08R\x0epaymentOverdue\x12\x34\n\x16payment_method_present\x18\x02 \x01(\x08R\x14paymentMethodPresent\x12.\n\x13\x66ree_quota_exceeded\x18\x03 \x01(\x08R\x11\x66reeQuotaExceeded\"\xcc\x05\n\tWorkspace\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12;\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12;\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nupdateTime\x12-\n\x0c\x64isplay_name\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12@\n\x0bregion_code\x18\x06 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeR\nregionCode\x12R\n\rextended_info\x18\x07 \x01(\x0b\x32-.scalekit.v1.workspaces.WorkspaceExtendedInfoR\x0c\x65xtendedInfo\x12.\n\x13\x62illing_customer_id\x18\x08 \x01(\tR\x11\x62illingCustomerId\x12\x36\n\x17\x62illing_subscription_id\x18\t \x01(\tR\x15\x62illingSubscriptionId\x12]\n\x0b\x61uth_domain\x18\n \x01(\tB<\x92\x41\x36\x32 Auth Domain of current workspaceJ\x12\"auth.example.com\"\xe0\x41\x03R\nauthDomain\x12\x98\x01\n\ndeployment\x18\x0b \x01(\tBx\x92\x41r2hSystem-generated deployment environment (staging or prod). Read-only; clients should not set this field.J\x06\"prod\"\xe0\x41\x03R\ndeployment\"\xa0\x01\n\x0f\x43reateWorkspace\x12V\n\x05\x65mail\x18\x01 \x01(\tB@\xbaH=\xba\x01:\n\x0bvalid_email\x12\x1b\x65mail must be a valid email\x1a\x0ethis.isEmail()R\x05\x65mail\x12)\n\x07\x63ompany\x18\x02 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x02H\x00R\x07\x63ompany\x88\x01\x01\x42\n\n\x08_company\"@\n\x0fUpdateWorkspace\x12-\n\x0c\x64isplay_name\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x0b\x64isplayName\"\xdf\x02\n\x10OnboardWorkspace\x12@\n\x16workspace_display_name\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x14workspaceDisplayName\x12\x32\n\x0fuser_given_name\x18\x02 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x02R\ruserGivenName\x12(\n\x10user_family_name\x18\x03 \x01(\tR\x0euserFamilyName\x12\xaa\x01\n\x13\x61uthentication_mode\x18\x04 \x01(\x0e\x32\'.scalekit.v1.commons.AuthenticationModeBP\x92\x41M2KThe authentication mode for the environment. The default is FULL_STACK_AUTHR\x12\x61uthenticationMode\"g\n\x16\x43reateWorkspaceRequest\x12M\n\tworkspace\x18\x01 \x01(\x0b\x32\'.scalekit.v1.workspaces.CreateWorkspaceB\x06\xbaH\x03\xc8\x01\x01R\tworkspace\"n\n\x17\x43reateWorkspaceResponse\x12?\n\tworkspace\x18\x01 \x01(\x0b\x32!.scalekit.v1.workspaces.WorkspaceR\tworkspace\x12\x12\n\x04link\x18\x02 \x01(\tR\x04link\"\x87\x01\n\x16UpdateWorkspaceRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03wksR\x02id\x12M\n\tworkspace\x18\x02 \x01(\x0b\x32\'.scalekit.v1.workspaces.UpdateWorkspaceB\x06\xbaH\x03\xc8\x01\x01R\tworkspace\"i\n\x17OnboardWorkspaceRequest\x12N\n\tworkspace\x18\x02 \x01(\x0b\x32(.scalekit.v1.workspaces.OnboardWorkspaceB\x06\xbaH\x03\xc8\x01\x01R\tworkspace\"n\n\x1dUpdateCurrentWorkspaceRequest\x12M\n\tworkspace\x18\x01 \x01(\x0b\x32\'.scalekit.v1.workspaces.UpdateWorkspaceB\x06\xbaH\x03\xc8\x01\x01R\tworkspace\"Z\n\x17UpdateWorkspaceResponse\x12?\n\tworkspace\x18\x01 \x01(\x0b\x32!.scalekit.v1.workspaces.WorkspaceR\tworkspace\"5\n\x13GetWorkspaceRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03wksR\x02id\"\x1c\n\x1aGetCurrentWorkspaceRequest\"\x8f\x01\n\x14GetWorkspaceResponse\x12?\n\tworkspace\x18\x01 \x01(\x0b\x32!.scalekit.v1.workspaces.WorkspaceR\tworkspace\x12\x36\n\x07\x63ontext\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructB\x03\xe0\x41\x03R\x07\x63ontext\"d\n\x17GetBillingPortalRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x02id\x12 \n\tflow_type\x18\x02 \x01(\tH\x00R\x08\x66lowType\x88\x01\x01\x42\x0c\n\n_flow_type\"<\n\x18GetBillingPortalResponse\x12\x10\n\x03url\x18\x01 \x01(\tR\x03url\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\"A\n\x1fGetWorkspacePricingTableRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03wksR\x02id\"\x82\x02\n GetWorkspacePricingTableResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12(\n\x10pricing_table_id\x18\x02 \x01(\tR\x0epricingTableId\x12+\n\x11publishable_token\x18\x03 \x01(\tR\x10publishableToken\x12\x43\n\x1e\x63ustomer_session_client_secret\x18\x04 \x01(\tR\x1b\x63ustomerSessionClientSecret\x12\x32\n\x06\x65xpiry\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x06\x65xpiry\"B\n GetWorkspaceSubscriptionsRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03wksR\x02id\"\x8f\x01\n!GetWorkspaceSubscriptionsResponse\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03wksR\x02id\x12J\n\rsubscriptions\x18\x02 \x03(\x0b\x32$.scalekit.v1.workspaces.SubscriptionR\rsubscriptions\"6\n\x0cSubscription\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12\x16\n\x06status\x18\x07 \x01(\tR\x06status\"8\n\x15GetBillingInfoRequest\x12\x1f\n\x0bonly_addons\x18\x01 \x01(\x08R\nonlyAddons\"`\n\x16GetBillingInfoResponse\x12\x46\n\x0c\x62illing_info\x18\x01 \x01(\x0b\x32#.scalekit.v1.workspaces.BillingInfoR\x0b\x62illingInfo\"\xde\x03\n\x0b\x42illingInfo\x12\x1b\n\tplan_name\x18\x01 \x01(\tR\x08planName\x12O\n\x0f\x63urrent_invoice\x18\x03 \x01(\x0b\x32&.scalekit.v1.workspaces.CurrentInvoiceR\x0e\x63urrentInvoice\x12L\n\x0epayment_method\x18\x04 \x01(\x0b\x32%.scalekit.v1.workspaces.PaymentMethodR\rpaymentMethod\x12\\\n\x14\x62illing_contact_info\x18\x05 \x01(\x0b\x32*.scalekit.v1.workspaces.BillingContactInfoR\x12\x62illingContactInfo\x12\x35\n\x06\x61\x64\x64ons\x18\x06 \x03(\x0b\x32\x1d.scalekit.v1.workspaces.AddonR\x06\x61\x64\x64ons\x12\x46\n\x0clast_invoice\x18\x07 \x01(\x0b\x32#.scalekit.v1.workspaces.LastInvoiceR\x0blastInvoice\x12\x30\n\x11publishable_token\x18\x08 \x01(\tB\x03\xe0\x41\x03R\x10publishableTokenJ\x04\x08\x02\x10\x03\"\xd6\x02\n\x13\x42illingSubscription\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12I\n\x06status\x18\x03 \x01(\x0e\x32\x31.scalekit.v1.workspaces.BillingSubscriptionStatusR\x06status\x12\x39\n\nstart_date\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartDate\x12\x35\n\x08\x65nd_date\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x65ndDate\x12\x16\n\x06\x61mount\x18\x06 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x07 \x01(\tR\x08\x63urrency\x12>\n\x05items\x18\x08 \x03(\x0b\x32(.scalekit.v1.workspaces.SubscriptionItemR\x05items\"\xe1\x01\n\x10SubscriptionItem\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x19\n\x08price_id\x18\x02 \x01(\tR\x07priceId\x12\x1a\n\x08quantity\x18\x03 \x01(\x03R\x08quantity\x12\x45\n\x07product\x18\x04 \x01(\x0b\x32+.scalekit.v1.workspaces.SubscriptionProductR\x07product\x12?\n\x05price\x18\x05 \x01(\x0b\x32).scalekit.v1.workspaces.SubscriptionPriceR\x05price\"s\n\x13SubscriptionProduct\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x16\n\x06\x61\x63tive\x18\x04 \x01(\x08R\x06\x61\x63tive\"\xba\x02\n\x11SubscriptionPrice\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\x12\x12\n\x04type\x18\x03 \x01(\tR\x04type\x12\x1a\n\x08interval\x18\x04 \x01(\tR\x08interval\x12%\n\x0e\x62illing_scheme\x18\x05 \x01(\tR\rbillingScheme\x12\x1d\n\nusage_type\x18\x06 \x01(\tR\tusageType\x12\x37\n\x05tiers\x18\x07 \x03(\x0b\x32!.scalekit.v1.workspaces.PriceTierR\x05tiers\x12\x1f\n\x0btotal_usage\x18\x08 \x01(\x03R\ntotalUsage\x12-\n\x12\x61ggregation_method\x18\t \x01(\tR\x11\x61ggregationMethod\"8\n\tPriceTier\x12\x13\n\x05up_to\x18\x01 \x01(\x03R\x04upTo\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\"\x97\x03\n\x0e\x43urrentInvoice\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\x12=\n\x06status\x18\x04 \x01(\x0e\x32%.scalekit.v1.workspaces.InvoiceStatusR\x06status\x12\x35\n\x08\x64ue_date\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x64ueDate\x12;\n\x0bissued_date\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nissuedDate\x12H\n\x12\x62illing_start_date\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x10\x62illingStartDate\x12\x44\n\x10\x62illing_end_date\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0e\x62illingEndDate\"\x84\x02\n\x0bLastInvoice\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\x12=\n\x06status\x18\x04 \x01(\x0e\x32%.scalekit.v1.workspaces.InvoiceStatusR\x06status\x12\x35\n\x08\x64ue_date\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x64ueDate\x12;\n\x0bissued_date\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nissuedDate\"\xe6\x03\n\rPaymentMethod\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x37\n\x04type\x18\x02 \x01(\x0e\x32#.scalekit.v1.workspaces.PaymentTypeR\x04type\x12%\n\x0e\x61\x63\x63ount_number\x18\x03 \x01(\tR\raccountNumber\x12!\n\x0c\x61\x63\x63ount_type\x18\x04 \x01(\tR\x0b\x61\x63\x63ountType\x12\x43\n\x06status\x18\x05 \x01(\x0e\x32+.scalekit.v1.workspaces.PaymentMethodStatusR\x06status\x12!\n\x0c\x61\x63\x63ount_name\x18\x06 \x01(\tR\x0b\x61\x63\x63ountName\x12\x99\x01\n\x0cpayment_info\x18\x07 \x03(\x0b\x32\x36.scalekit.v1.workspaces.PaymentMethod.PaymentInfoEntryB>\xbaH;\x9a\x01\x38\x10\x05\",r*R\x05\x62randR\x05last4R\texp_monthR\x08\x65xp_yearR\x05\x65mail*\x06r\x04\x10\x01\x18@R\x0bpaymentInfo\x1a>\n\x10PaymentInfoEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xcf\x01\n\x12\x42illingContactInfo\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n\x05\x65mail\x18\x02 \x01(\tR\x05\x65mail\x12\x14\n\x05line1\x18\x03 \x01(\tR\x05line1\x12\x14\n\x05line2\x18\x04 \x01(\tR\x05line2\x12\x12\n\x04\x63ity\x18\x05 \x01(\tR\x04\x63ity\x12\x14\n\x05state\x18\x06 \x01(\tR\x05state\x12\x1f\n\x0bpostal_code\x18\x07 \x01(\tR\npostalCode\x12\x18\n\x07\x63ountry\x18\x08 \x01(\tR\x07\x63ountry\"\x99\x01\n\x05\x41\x64\x64on\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x1a\n\x08\x66\x65\x61tures\x18\x04 \x03(\tR\x08\x66\x65\x61tures\x12\x18\n\x07\x65nabled\x18\x05 \x01(\x08R\x07\x65nabled\x12\x14\n\x05price\x18\x06 \x01(\x01R\x05price\x12\x1a\n\x08\x63urrency\x18\x07 \x01(\tR\x08\x63urrencyJ\x04\x08\x03\x10\x04\"\x18\n\x16GetProductUsageRequest\"\x9a\x01\n\x17GetProductUsageResponse\x12@\n\x08products\x18\x01 \x03(\x0b\x32$.scalekit.v1.workspaces.ProductUsageR\x08products\x12!\n\x0ctotal_amount\x18\x02 \x01(\x01R\x0btotalAmount\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\"\xba\x02\n\x0cProductUsage\x12\x1d\n\nproduct_id\x18\x01 \x01(\tR\tproductId\x12!\n\x0cproduct_name\x18\x02 \x01(\tR\x0bproductName\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x37\n\x05tiers\x18\x04 \x03(\x0b\x32!.scalekit.v1.workspaces.UsageTierR\x05tiers\x12!\n\x0ctotal_amount\x18\x05 \x01(\x01R\x0btotalAmount\x12\x1f\n\x0btotal_count\x18\x06 \x01(\x01R\ntotalCount\x12\x1a\n\x08\x63urrency\x18\x07 \x01(\tR\x08\x63urrency\x12-\n\x12\x61ggregation_method\x18\x08 \x01(\tR\x11\x61ggregationMethod\"\xf4\x01\n\tUsageTier\x12\x1b\n\ttier_name\x18\x01 \x01(\tR\x08tierName\x12#\n\rcurrent_count\x18\x02 \x01(\x03R\x0c\x63urrentCount\x12\x32\n\x15total_available_count\x18\x03 \x01(\x03R\x13totalAvailableCount\x12\x33\n\x16price_for_current_tier\x18\x04 \x01(\x01R\x13priceForCurrentTier\x12\x1a\n\x08\x63urrency\x18\x05 \x01(\tR\x08\x63urrency\x12 \n\x0cis_free_tier\x18\x06 \x01(\x08R\nisFreeTier\"\x1a\n\x18GetProductCatalogRequest\"]\n\x19GetProductCatalogResponse\x12@\n\x07\x63\x61talog\x18\x01 \x01(\x0b\x32&.scalekit.v1.workspaces.ProductCatalogR\x07\x63\x61talog\"X\n\x0eProductCatalog\x12\x46\n\x08products\x18\x01 \x03(\x0b\x32*.scalekit.v1.workspaces.ProductCatalogItemR\x08products\"\xb7\x01\n\x12ProductCatalogItem\x12@\n\x07product\x18\x01 \x01(\x0b\x32&.scalekit.v1.workspaces.CatalogProductR\x07product\x12<\n\x06prices\x18\x02 \x03(\x0b\x32$.scalekit.v1.workspaces.CatalogPriceR\x06prices\x12!\n\x0c\x62illing_type\x18\x03 \x01(\tR\x0b\x62illingType\"\xc2\x02\n\x0e\x43\x61talogProduct\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x16\n\x06\x61\x63tive\x18\x04 \x01(\x08R\x06\x61\x63tive\x12k\n\x08metadata\x18\x05 \x03(\x0b\x32\x34.scalekit.v1.workspaces.CatalogProduct.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12(\n\x10\x64\x65\x66\x61ult_price_id\x18\x06 \x01(\tR\x0e\x64\x65\x66\x61ultPriceId\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x81\x02\n\x0c\x43\x61talogPrice\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\x12\x12\n\x04type\x18\x04 \x01(\tR\x04type\x12\x1a\n\x08interval\x18\x05 \x01(\tR\x08interval\x12%\n\x0e\x62illing_scheme\x18\x06 \x01(\tR\rbillingScheme\x12\x1d\n\nusage_type\x18\x07 \x01(\tR\tusageType\x12\x37\n\x05tiers\x18\x08 \x03(\x0b\x32!.scalekit.v1.workspaces.PriceTierR\x05tiers\"\xdb\x01\n\x16\x41\x64\x64SubscriptionRequest\x12!\n\x0cproduct_name\x18\x01 \x01(\tR\x0bproductName\x12\x1d\n\nproduct_id\x18\x02 \x01(\tR\tproductId:\x7f\xbaH|\x1az\n\x12product_name_or_id\x12\x32\x65ither product_id or product_name must be provided\x1a\x30this.product_id != \'\' || this.product_name != \'\'\"}\n\x17\x41\x64\x64SubscriptionResponse\x12\'\n\x0fsubscription_id\x18\x01 \x01(\tR\x0esubscriptionId\x12\x1d\n\nproduct_id\x18\x02 \x01(\tR\tproductId\x12\x1a\n\x08quantity\x18\x03 \x01(\x03R\x08quantity\"\xe5\x02\n\x1c\x43reateCheckoutSessionRequest\x12?\n\x04mode\x18\x01 \x01(\x0e\x32+.scalekit.v1.workspaces.CheckoutSessionModeR\x04mode\x12\"\n\nreturn_url\x18\x02 \x01(\tH\x00R\treturnUrl\x88\x01\x01\x12$\n\x0bsuccess_url\x18\x03 \x01(\tH\x01R\nsuccessUrl\x88\x01\x01\x12\x37\n\x07ui_mode\x18\x04 \x01(\x0e\x32\x1e.scalekit.v1.workspaces.UiModeR\x06uiMode\x12\x62\n\x16redirect_on_completion\x18\x05 \x01(\x0e\x32,.scalekit.v1.workspaces.RedirectOnCompletionR\x14redirectOnCompletionB\r\n\x0b_return_urlB\x0e\n\x0c_success_url\"s\n\x1d\x43reateCheckoutSessionResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12#\n\rclient_secret\x18\x02 \x01(\tR\x0c\x63lientSecret\x12\x15\n\x03url\x18\x03 \x01(\tH\x00R\x03url\x88\x01\x01\x42\x06\n\x04_url\"Z\n\x1dUpdateWorkspaceContextRequest\x12\x39\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\x06\xbaH\x03\xc8\x01\x01R\x07\x63ontext\"S\n\x1eUpdateWorkspaceContextResponse\x12\x31\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext*\xaf\x01\n\x19\x42illingSubscriptionStatus\x12+\n\'BILLING_SUBSCRIPTION_STATUS_UNSPECIFIED\x10\x00\x12\x1f\n\x1b\x42ILLING_SUBSCRIPTION_ACTIVE\x10\x01\x12!\n\x1d\x42ILLING_SUBSCRIPTION_CANCELED\x10\x02\x12!\n\x1d\x42ILLING_SUBSCRIPTION_PAST_DUE\x10\x03*y\n\rInvoiceStatus\x12\x1e\n\x1aINVOICE_STATUS_UNSPECIFIED\x10\x00\x12\x10\n\x0cINVOICE_PAID\x10\x01\x12\x0f\n\x0bINVOICE_DUE\x10\x02\x12\x13\n\x0fINVOICE_OVERDUE\x10\x03\x12\x10\n\x0cINVOICE_VOID\x10\x04*j\n\x0bPaymentType\x12\x1c\n\x18PAYMENT_TYPE_UNSPECIFIED\x10\x00\x12\x08\n\x04\x43\x41RD\x10\x01\x12\x10\n\x0c\x42\x41NK_ACCOUNT\x10\x02\x12\x0b\n\x07OFFLINE\x10\x03\x12\x08\n\x04LINK\x10\x04\x12\n\n\x06PAYPAL\x10\x05*\x8e\x01\n\x13PaymentMethodStatus\x12%\n!PAYMENT_METHOD_STATUS_UNSPECIFIED\x10\x00\x12\x19\n\x15PAYMENT_METHOD_ACTIVE\x10\x01\x12\x1a\n\x16PAYMENT_METHOD_EXPIRED\x10\x02\x12\x19\n\x15PAYMENT_METHOD_FAILED\x10\x03*f\n\x14RedirectOnCompletion\x12&\n\"REDIRECT_ON_COMPLETION_UNSPECIFIED\x10\x00\x12\t\n\x05never\x10\x01\x12\n\n\x06\x61lways\x10\x02\x12\x0f\n\x0bif_required\x10\x03*G\n\x06UiMode\x12\x17\n\x13UI_MODE_UNSPECIFIED\x10\x00\x12\x0c\n\x08\x65mbedded\x10\x01\x12\n\n\x06hosted\x10\x02\x12\n\n\x06\x63ustom\x10\x03*f\n\x13\x43heckoutSessionMode\x12%\n!CHECKOUT_SESSION_MODE_UNSPECIFIED\x10\x00\x12\t\n\x05setup\x10\x01\x12\x10\n\x0csubscription\x10\x02\x12\x0b\n\x07payment\x10\x03\x32\xc9\x15\n\x10WorkspaceService\x12\x9b\x01\n\x0f\x43reateWorkspace\x12..scalekit.v1.workspaces.CreateWorkspaceRequest\x1a/.scalekit.v1.workspaces.CreateWorkspaceResponse\"\'\x82\xb5\x18\x02\x18\x01\x82\xd3\xe4\x93\x02\x1b\"\x0e/api/v1/signup:\tworkspace\x12\x90\x01\n\x0cGetWorkspace\x12+.scalekit.v1.workspaces.GetWorkspaceRequest\x1a,.scalekit.v1.workspaces.GetWorkspaceResponse\"%\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x19\x12\x17/api/v1/workspaces/{id}\x12\x9e\x01\n\x13GetCurrentWorkspace\x12\x32.scalekit.v1.workspaces.GetCurrentWorkspaceRequest\x1a,.scalekit.v1.workspaces.GetWorkspaceResponse\"%\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x19\x12\x17/api/v1/workspaces:this\x12\xa4\x01\n\x0fUpdateWorkspace\x12..scalekit.v1.workspaces.UpdateWorkspaceRequest\x1a/.scalekit.v1.workspaces.UpdateWorkspaceResponse\"0\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02$2\x17/api/v1/workspaces/{id}:\tworkspace\x12\x90\x01\n\x10OnboardWorkspace\x12/.scalekit.v1.workspaces.OnboardWorkspaceRequest\x1a\x16.google.protobuf.Empty\"3\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\'2\x1a/api/v1/workspaces:onboard:\tworkspace\x12\xb2\x01\n\x16UpdateCurrentWorkspace\x12\x35.scalekit.v1.workspaces.UpdateCurrentWorkspaceRequest\x1a/.scalekit.v1.workspaces.UpdateWorkspaceResponse\"0\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02$2\x17/api/v1/workspaces:this:\tworkspace\x12\xcd\x01\n\x19GetWorkspaceSubscriptions\x12\x38.scalekit.v1.workspaces.GetWorkspaceSubscriptionsRequest\x1a\x39.scalekit.v1.workspaces.GetWorkspaceSubscriptionsResponse\";\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02/\x12-/api/v1/workspaces/{id}/billing/subscriptions\x12\xca\x01\n\x18GetWorkspacePricingTable\x12\x37.scalekit.v1.workspaces.GetWorkspacePricingTableRequest\x1a\x38.scalekit.v1.workspaces.GetWorkspacePricingTableResponse\";\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02/\x12-/api/v1/workspaces/{id}/billing/pricing-table\x12\xc3\x01\n\x10GetBillingPortal\x12/.scalekit.v1.workspaces.GetBillingPortalRequest\x1a\x30.scalekit.v1.workspaces.GetBillingPortalResponse\"L\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\x12//api/v1/workspaces:this/billing/customer-portal\x12\xb2\x01\n\x0eGetBillingInfo\x12-.scalekit.v1.workspaces.GetBillingInfoRequest\x1a..scalekit.v1.workspaces.GetBillingInfoResponse\"A\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02&\x12$/api/v1/workspaces:this/billing:info\x12\xbe\x01\n\x0fGetProductUsage\x12..scalekit.v1.workspaces.GetProductUsageRequest\x1a/.scalekit.v1.workspaces.GetProductUsageResponse\"J\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02/\x12-/api/v1/workspaces:this/billing:product-usage\x12\xb5\x01\n\x11GetProductCatalog\x12\x30.scalekit.v1.workspaces.GetProductCatalogRequest\x1a\x31.scalekit.v1.workspaces.GetProductCatalogResponse\";\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02 \x12\x1e/api/v1/billing/productcatalog\x12\xc5\x01\n\x0f\x41\x64\x64Subscription\x12..scalekit.v1.workspaces.AddSubscriptionRequest\x1a/.scalekit.v1.workspaces.AddSubscriptionResponse\"Q\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x36\"1/api/v1/workspaces:this/billing/subscriptions:add:\x01*\x12\xd7\x01\n\x15\x43reateCheckoutSession\x12\x34.scalekit.v1.workspaces.CreateCheckoutSessionRequest\x1a\x35.scalekit.v1.workspaces.CreateCheckoutSessionResponse\"Q\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x36\"1/api/v1/workspaces:this/billing/checkout_sessions:\x01*\x12\xc0\x01\n\x16UpdateWorkspaceContext\x12\x35.scalekit.v1.workspaces.UpdateWorkspaceContextRequest\x1a\x36.scalekit.v1.workspaces.UpdateWorkspaceContextResponse\"7\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02+\" /api/v1/workspaces:this/contexts:\x07\x63ontextB6Z4github.com/scalekit-inc/scalekit/pkg/grpc/workspacesb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -92,16 +90,12 @@ _globals['_ADDSUBSCRIPTIONREQUEST']._serialized_options = b'\272H|\032z\n\022product_name_or_id\0222either product_id or product_name must be provided\0320this.product_id != \'\' || this.product_name != \'\'' _globals['_UPDATEWORKSPACECONTEXTREQUEST'].fields_by_name['context']._loaded_options = None _globals['_UPDATEWORKSPACECONTEXTREQUEST'].fields_by_name['context']._serialized_options = b'\272H\003\310\001\001' - _globals['_CREATEWORKSPACEDOMAINREQUEST'].fields_by_name['domain']._loaded_options = None - _globals['_CREATEWORKSPACEDOMAINREQUEST'].fields_by_name['domain']._serialized_options = b'\272H\003\310\001\001' - _globals['_DELETEWORKSPACEDOMAINREQUEST'].fields_by_name['id']._loaded_options = None - _globals['_DELETEWORKSPACEDOMAINREQUEST'].fields_by_name['id']._serialized_options = b'\272H\007r\005\020\001\030\200\001' _globals['_WORKSPACESERVICE'].methods_by_name['CreateWorkspace']._loaded_options = None _globals['_WORKSPACESERVICE'].methods_by_name['CreateWorkspace']._serialized_options = b'\202\265\030\002\030\001\202\323\344\223\002\033\"\016/api/v1/signup:\tworkspace' _globals['_WORKSPACESERVICE'].methods_by_name['GetWorkspace']._loaded_options = None _globals['_WORKSPACESERVICE'].methods_by_name['GetWorkspace']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002\031\022\027/api/v1/workspaces/{id}' _globals['_WORKSPACESERVICE'].methods_by_name['GetCurrentWorkspace']._loaded_options = None - _globals['_WORKSPACESERVICE'].methods_by_name['GetCurrentWorkspace']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\031\022\027/api/v1/workspaces:this' + _globals['_WORKSPACESERVICE'].methods_by_name['GetCurrentWorkspace']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\031\022\027/api/v1/workspaces:this' _globals['_WORKSPACESERVICE'].methods_by_name['UpdateWorkspace']._loaded_options = None _globals['_WORKSPACESERVICE'].methods_by_name['UpdateWorkspace']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002$2\027/api/v1/workspaces/{id}:\tworkspace' _globals['_WORKSPACESERVICE'].methods_by_name['OnboardWorkspace']._loaded_options = None @@ -125,145 +119,125 @@ _globals['_WORKSPACESERVICE'].methods_by_name['CreateCheckoutSession']._loaded_options = None _globals['_WORKSPACESERVICE'].methods_by_name['CreateCheckoutSession']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\0026\"1/api/v1/workspaces:this/billing/checkout_sessions:\001*' _globals['_WORKSPACESERVICE'].methods_by_name['UpdateWorkspaceContext']._loaded_options = None - _globals['_WORKSPACESERVICE'].methods_by_name['UpdateWorkspaceContext']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002+\" /api/v1/workspaces:this/contexts:\007context' - _globals['_WORKSPACESERVICE'].methods_by_name['ListWorkspaceDomains']._loaded_options = None - _globals['_WORKSPACESERVICE'].methods_by_name['ListWorkspaceDomains']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002!\022\037/api/v1/workspaces:this/domains' - _globals['_WORKSPACESERVICE'].methods_by_name['CreateWorkspaceDomain']._loaded_options = None - _globals['_WORKSPACESERVICE'].methods_by_name['CreateWorkspaceDomain']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002)\"\037/api/v1/workspaces:this/domains:\006domain' - _globals['_WORKSPACESERVICE'].methods_by_name['DeleteWorkspaceDomain']._loaded_options = None - _globals['_WORKSPACESERVICE'].methods_by_name['DeleteWorkspaceDomain']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002&*$/api/v1/workspaces:this/domains/{id}' - _globals['_WORKSPACESERVICE'].methods_by_name['ValidateWorkspaceDomain']._loaded_options = None - _globals['_WORKSPACESERVICE'].methods_by_name['ValidateWorkspaceDomain']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002$\022\"/api/v1/workspaces:validate_domain' - _globals['_BILLINGSUBSCRIPTIONSTATUS']._serialized_start=10327 - _globals['_BILLINGSUBSCRIPTIONSTATUS']._serialized_end=10502 - _globals['_INVOICESTATUS']._serialized_start=10504 - _globals['_INVOICESTATUS']._serialized_end=10625 - _globals['_PAYMENTTYPE']._serialized_start=10627 - _globals['_PAYMENTTYPE']._serialized_end=10733 - _globals['_PAYMENTMETHODSTATUS']._serialized_start=10736 - _globals['_PAYMENTMETHODSTATUS']._serialized_end=10878 - _globals['_REDIRECTONCOMPLETION']._serialized_start=10880 - _globals['_REDIRECTONCOMPLETION']._serialized_end=10982 - _globals['_UIMODE']._serialized_start=10984 - _globals['_UIMODE']._serialized_end=11055 - _globals['_CHECKOUTSESSIONMODE']._serialized_start=11057 - _globals['_CHECKOUTSESSIONMODE']._serialized_end=11159 - _globals['_WORKSPACEEXTENDEDINFO']._serialized_start=525 - _globals['_WORKSPACEEXTENDEDINFO']._serialized_end=691 - _globals['_WORKSPACE']._serialized_start=694 - _globals['_WORKSPACE']._serialized_end=1410 - _globals['_CREATEWORKSPACE']._serialized_start=1413 - _globals['_CREATEWORKSPACE']._serialized_end=1573 - _globals['_UPDATEWORKSPACE']._serialized_start=1575 - _globals['_UPDATEWORKSPACE']._serialized_end=1639 - _globals['_ONBOARDWORKSPACE']._serialized_start=1642 - _globals['_ONBOARDWORKSPACE']._serialized_end=2054 - _globals['_CREATEWORKSPACEREQUEST']._serialized_start=2056 - _globals['_CREATEWORKSPACEREQUEST']._serialized_end=2159 - _globals['_CREATEWORKSPACERESPONSE']._serialized_start=2161 - _globals['_CREATEWORKSPACERESPONSE']._serialized_end=2271 - _globals['_UPDATEWORKSPACEREQUEST']._serialized_start=2274 - _globals['_UPDATEWORKSPACEREQUEST']._serialized_end=2409 - _globals['_ONBOARDWORKSPACEREQUEST']._serialized_start=2411 - _globals['_ONBOARDWORKSPACEREQUEST']._serialized_end=2516 - _globals['_UPDATECURRENTWORKSPACEREQUEST']._serialized_start=2518 - _globals['_UPDATECURRENTWORKSPACEREQUEST']._serialized_end=2628 - _globals['_UPDATEWORKSPACERESPONSE']._serialized_start=2630 - _globals['_UPDATEWORKSPACERESPONSE']._serialized_end=2720 - _globals['_GETWORKSPACEREQUEST']._serialized_start=2722 - _globals['_GETWORKSPACEREQUEST']._serialized_end=2775 - _globals['_GETCURRENTWORKSPACEREQUEST']._serialized_start=2777 - _globals['_GETCURRENTWORKSPACEREQUEST']._serialized_end=2805 - _globals['_GETWORKSPACERESPONSE']._serialized_start=2808 - _globals['_GETWORKSPACERESPONSE']._serialized_end=2951 - _globals['_GETBILLINGPORTALREQUEST']._serialized_start=2953 - _globals['_GETBILLINGPORTALREQUEST']._serialized_end=3053 - _globals['_GETBILLINGPORTALRESPONSE']._serialized_start=3055 - _globals['_GETBILLINGPORTALRESPONSE']._serialized_end=3115 - _globals['_GETWORKSPACEPRICINGTABLEREQUEST']._serialized_start=3117 - _globals['_GETWORKSPACEPRICINGTABLEREQUEST']._serialized_end=3182 - _globals['_GETWORKSPACEPRICINGTABLERESPONSE']._serialized_start=3185 - _globals['_GETWORKSPACEPRICINGTABLERESPONSE']._serialized_end=3443 - _globals['_GETWORKSPACESUBSCRIPTIONSREQUEST']._serialized_start=3445 - _globals['_GETWORKSPACESUBSCRIPTIONSREQUEST']._serialized_end=3511 - _globals['_GETWORKSPACESUBSCRIPTIONSRESPONSE']._serialized_start=3514 - _globals['_GETWORKSPACESUBSCRIPTIONSRESPONSE']._serialized_end=3657 - _globals['_SUBSCRIPTION']._serialized_start=3659 - _globals['_SUBSCRIPTION']._serialized_end=3713 - _globals['_GETBILLINGINFOREQUEST']._serialized_start=3715 - _globals['_GETBILLINGINFOREQUEST']._serialized_end=3771 - _globals['_GETBILLINGINFORESPONSE']._serialized_start=3773 - _globals['_GETBILLINGINFORESPONSE']._serialized_end=3869 - _globals['_BILLINGINFO']._serialized_start=3872 - _globals['_BILLINGINFO']._serialized_end=4350 - _globals['_BILLINGSUBSCRIPTION']._serialized_start=4353 - _globals['_BILLINGSUBSCRIPTION']._serialized_end=4695 - _globals['_SUBSCRIPTIONITEM']._serialized_start=4698 - _globals['_SUBSCRIPTIONITEM']._serialized_end=4923 - _globals['_SUBSCRIPTIONPRODUCT']._serialized_start=4925 - _globals['_SUBSCRIPTIONPRODUCT']._serialized_end=5040 - _globals['_SUBSCRIPTIONPRICE']._serialized_start=5043 - _globals['_SUBSCRIPTIONPRICE']._serialized_end=5357 - _globals['_PRICETIER']._serialized_start=5359 - _globals['_PRICETIER']._serialized_end=5415 - _globals['_CURRENTINVOICE']._serialized_start=5418 - _globals['_CURRENTINVOICE']._serialized_end=5825 - _globals['_LASTINVOICE']._serialized_start=5828 - _globals['_LASTINVOICE']._serialized_end=6088 - _globals['_PAYMENTMETHOD']._serialized_start=6091 - _globals['_PAYMENTMETHOD']._serialized_end=6577 - _globals['_PAYMENTMETHOD_PAYMENTINFOENTRY']._serialized_start=6515 - _globals['_PAYMENTMETHOD_PAYMENTINFOENTRY']._serialized_end=6577 - _globals['_BILLINGCONTACTINFO']._serialized_start=6580 - _globals['_BILLINGCONTACTINFO']._serialized_end=6787 - _globals['_ADDON']._serialized_start=6790 - _globals['_ADDON']._serialized_end=6943 - _globals['_GETPRODUCTUSAGEREQUEST']._serialized_start=6945 - _globals['_GETPRODUCTUSAGEREQUEST']._serialized_end=6969 - _globals['_GETPRODUCTUSAGERESPONSE']._serialized_start=6972 - _globals['_GETPRODUCTUSAGERESPONSE']._serialized_end=7126 - _globals['_PRODUCTUSAGE']._serialized_start=7129 - _globals['_PRODUCTUSAGE']._serialized_end=7443 - _globals['_USAGETIER']._serialized_start=7446 - _globals['_USAGETIER']._serialized_end=7690 - _globals['_GETPRODUCTCATALOGREQUEST']._serialized_start=7692 - _globals['_GETPRODUCTCATALOGREQUEST']._serialized_end=7718 - _globals['_GETPRODUCTCATALOGRESPONSE']._serialized_start=7720 - _globals['_GETPRODUCTCATALOGRESPONSE']._serialized_end=7813 - _globals['_PRODUCTCATALOG']._serialized_start=7815 - _globals['_PRODUCTCATALOG']._serialized_end=7903 - _globals['_PRODUCTCATALOGITEM']._serialized_start=7906 - _globals['_PRODUCTCATALOGITEM']._serialized_end=8089 - _globals['_CATALOGPRODUCT']._serialized_start=8092 - _globals['_CATALOGPRODUCT']._serialized_end=8414 - _globals['_CATALOGPRODUCT_METADATAENTRY']._serialized_start=8355 - _globals['_CATALOGPRODUCT_METADATAENTRY']._serialized_end=8414 - _globals['_CATALOGPRICE']._serialized_start=8417 - _globals['_CATALOGPRICE']._serialized_end=8674 - _globals['_ADDSUBSCRIPTIONREQUEST']._serialized_start=8677 - _globals['_ADDSUBSCRIPTIONREQUEST']._serialized_end=8896 - _globals['_ADDSUBSCRIPTIONRESPONSE']._serialized_start=8898 - _globals['_ADDSUBSCRIPTIONRESPONSE']._serialized_end=9023 - _globals['_CREATECHECKOUTSESSIONREQUEST']._serialized_start=9026 - _globals['_CREATECHECKOUTSESSIONREQUEST']._serialized_end=9383 - _globals['_CREATECHECKOUTSESSIONRESPONSE']._serialized_start=9385 - _globals['_CREATECHECKOUTSESSIONRESPONSE']._serialized_end=9500 - _globals['_UPDATEWORKSPACECONTEXTREQUEST']._serialized_start=9502 - _globals['_UPDATEWORKSPACECONTEXTREQUEST']._serialized_end=9592 - _globals['_UPDATEWORKSPACECONTEXTRESPONSE']._serialized_start=9594 - _globals['_UPDATEWORKSPACECONTEXTRESPONSE']._serialized_end=9677 - _globals['_VALIDATEWORKSPACEDOMAINREQUEST']._serialized_start=9679 - _globals['_VALIDATEWORKSPACEDOMAINREQUEST']._serialized_end=9711 - _globals['_CREATEWORKSPACEDOMAINREQUEST']._serialized_start=9713 - _globals['_CREATEWORKSPACEDOMAINREQUEST']._serialized_end=9810 - _globals['_CREATEWORKSPACEDOMAINRESPONSE']._serialized_start=9812 - _globals['_CREATEWORKSPACEDOMAINRESPONSE']._serialized_end=9896 - _globals['_LISTWORKSPACEDOMAINSREQUEST']._serialized_start=9899 - _globals['_LISTWORKSPACEDOMAINSREQUEST']._serialized_end=10114 - _globals['_LISTWORKSPACEDOMAINSRESPONSE']._serialized_start=10117 - _globals['_LISTWORKSPACEDOMAINSRESPONSE']._serialized_end=10264 - _globals['_DELETEWORKSPACEDOMAINREQUEST']._serialized_start=10266 - _globals['_DELETEWORKSPACEDOMAINREQUEST']._serialized_end=10324 - _globals['_WORKSPACESERVICE']._serialized_start=11162 - _globals['_WORKSPACESERVICE']._serialized_end=14640 + _globals['_WORKSPACESERVICE'].methods_by_name['UpdateWorkspaceContext']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002+\" /api/v1/workspaces:this/contexts:\007context' + _globals['_BILLINGSUBSCRIPTIONSTATUS']._serialized_start=9552 + _globals['_BILLINGSUBSCRIPTIONSTATUS']._serialized_end=9727 + _globals['_INVOICESTATUS']._serialized_start=9729 + _globals['_INVOICESTATUS']._serialized_end=9850 + _globals['_PAYMENTTYPE']._serialized_start=9852 + _globals['_PAYMENTTYPE']._serialized_end=9958 + _globals['_PAYMENTMETHODSTATUS']._serialized_start=9961 + _globals['_PAYMENTMETHODSTATUS']._serialized_end=10103 + _globals['_REDIRECTONCOMPLETION']._serialized_start=10105 + _globals['_REDIRECTONCOMPLETION']._serialized_end=10207 + _globals['_UIMODE']._serialized_start=10209 + _globals['_UIMODE']._serialized_end=10280 + _globals['_CHECKOUTSESSIONMODE']._serialized_start=10282 + _globals['_CHECKOUTSESSIONMODE']._serialized_end=10384 + _globals['_WORKSPACEEXTENDEDINFO']._serialized_start=458 + _globals['_WORKSPACEEXTENDEDINFO']._serialized_end=624 + _globals['_WORKSPACE']._serialized_start=627 + _globals['_WORKSPACE']._serialized_end=1343 + _globals['_CREATEWORKSPACE']._serialized_start=1346 + _globals['_CREATEWORKSPACE']._serialized_end=1506 + _globals['_UPDATEWORKSPACE']._serialized_start=1508 + _globals['_UPDATEWORKSPACE']._serialized_end=1572 + _globals['_ONBOARDWORKSPACE']._serialized_start=1575 + _globals['_ONBOARDWORKSPACE']._serialized_end=1926 + _globals['_CREATEWORKSPACEREQUEST']._serialized_start=1928 + _globals['_CREATEWORKSPACEREQUEST']._serialized_end=2031 + _globals['_CREATEWORKSPACERESPONSE']._serialized_start=2033 + _globals['_CREATEWORKSPACERESPONSE']._serialized_end=2143 + _globals['_UPDATEWORKSPACEREQUEST']._serialized_start=2146 + _globals['_UPDATEWORKSPACEREQUEST']._serialized_end=2281 + _globals['_ONBOARDWORKSPACEREQUEST']._serialized_start=2283 + _globals['_ONBOARDWORKSPACEREQUEST']._serialized_end=2388 + _globals['_UPDATECURRENTWORKSPACEREQUEST']._serialized_start=2390 + _globals['_UPDATECURRENTWORKSPACEREQUEST']._serialized_end=2500 + _globals['_UPDATEWORKSPACERESPONSE']._serialized_start=2502 + _globals['_UPDATEWORKSPACERESPONSE']._serialized_end=2592 + _globals['_GETWORKSPACEREQUEST']._serialized_start=2594 + _globals['_GETWORKSPACEREQUEST']._serialized_end=2647 + _globals['_GETCURRENTWORKSPACEREQUEST']._serialized_start=2649 + _globals['_GETCURRENTWORKSPACEREQUEST']._serialized_end=2677 + _globals['_GETWORKSPACERESPONSE']._serialized_start=2680 + _globals['_GETWORKSPACERESPONSE']._serialized_end=2823 + _globals['_GETBILLINGPORTALREQUEST']._serialized_start=2825 + _globals['_GETBILLINGPORTALREQUEST']._serialized_end=2925 + _globals['_GETBILLINGPORTALRESPONSE']._serialized_start=2927 + _globals['_GETBILLINGPORTALRESPONSE']._serialized_end=2987 + _globals['_GETWORKSPACEPRICINGTABLEREQUEST']._serialized_start=2989 + _globals['_GETWORKSPACEPRICINGTABLEREQUEST']._serialized_end=3054 + _globals['_GETWORKSPACEPRICINGTABLERESPONSE']._serialized_start=3057 + _globals['_GETWORKSPACEPRICINGTABLERESPONSE']._serialized_end=3315 + _globals['_GETWORKSPACESUBSCRIPTIONSREQUEST']._serialized_start=3317 + _globals['_GETWORKSPACESUBSCRIPTIONSREQUEST']._serialized_end=3383 + _globals['_GETWORKSPACESUBSCRIPTIONSRESPONSE']._serialized_start=3386 + _globals['_GETWORKSPACESUBSCRIPTIONSRESPONSE']._serialized_end=3529 + _globals['_SUBSCRIPTION']._serialized_start=3531 + _globals['_SUBSCRIPTION']._serialized_end=3585 + _globals['_GETBILLINGINFOREQUEST']._serialized_start=3587 + _globals['_GETBILLINGINFOREQUEST']._serialized_end=3643 + _globals['_GETBILLINGINFORESPONSE']._serialized_start=3645 + _globals['_GETBILLINGINFORESPONSE']._serialized_end=3741 + _globals['_BILLINGINFO']._serialized_start=3744 + _globals['_BILLINGINFO']._serialized_end=4222 + _globals['_BILLINGSUBSCRIPTION']._serialized_start=4225 + _globals['_BILLINGSUBSCRIPTION']._serialized_end=4567 + _globals['_SUBSCRIPTIONITEM']._serialized_start=4570 + _globals['_SUBSCRIPTIONITEM']._serialized_end=4795 + _globals['_SUBSCRIPTIONPRODUCT']._serialized_start=4797 + _globals['_SUBSCRIPTIONPRODUCT']._serialized_end=4912 + _globals['_SUBSCRIPTIONPRICE']._serialized_start=4915 + _globals['_SUBSCRIPTIONPRICE']._serialized_end=5229 + _globals['_PRICETIER']._serialized_start=5231 + _globals['_PRICETIER']._serialized_end=5287 + _globals['_CURRENTINVOICE']._serialized_start=5290 + _globals['_CURRENTINVOICE']._serialized_end=5697 + _globals['_LASTINVOICE']._serialized_start=5700 + _globals['_LASTINVOICE']._serialized_end=5960 + _globals['_PAYMENTMETHOD']._serialized_start=5963 + _globals['_PAYMENTMETHOD']._serialized_end=6449 + _globals['_PAYMENTMETHOD_PAYMENTINFOENTRY']._serialized_start=6387 + _globals['_PAYMENTMETHOD_PAYMENTINFOENTRY']._serialized_end=6449 + _globals['_BILLINGCONTACTINFO']._serialized_start=6452 + _globals['_BILLINGCONTACTINFO']._serialized_end=6659 + _globals['_ADDON']._serialized_start=6662 + _globals['_ADDON']._serialized_end=6815 + _globals['_GETPRODUCTUSAGEREQUEST']._serialized_start=6817 + _globals['_GETPRODUCTUSAGEREQUEST']._serialized_end=6841 + _globals['_GETPRODUCTUSAGERESPONSE']._serialized_start=6844 + _globals['_GETPRODUCTUSAGERESPONSE']._serialized_end=6998 + _globals['_PRODUCTUSAGE']._serialized_start=7001 + _globals['_PRODUCTUSAGE']._serialized_end=7315 + _globals['_USAGETIER']._serialized_start=7318 + _globals['_USAGETIER']._serialized_end=7562 + _globals['_GETPRODUCTCATALOGREQUEST']._serialized_start=7564 + _globals['_GETPRODUCTCATALOGREQUEST']._serialized_end=7590 + _globals['_GETPRODUCTCATALOGRESPONSE']._serialized_start=7592 + _globals['_GETPRODUCTCATALOGRESPONSE']._serialized_end=7685 + _globals['_PRODUCTCATALOG']._serialized_start=7687 + _globals['_PRODUCTCATALOG']._serialized_end=7775 + _globals['_PRODUCTCATALOGITEM']._serialized_start=7778 + _globals['_PRODUCTCATALOGITEM']._serialized_end=7961 + _globals['_CATALOGPRODUCT']._serialized_start=7964 + _globals['_CATALOGPRODUCT']._serialized_end=8286 + _globals['_CATALOGPRODUCT_METADATAENTRY']._serialized_start=8227 + _globals['_CATALOGPRODUCT_METADATAENTRY']._serialized_end=8286 + _globals['_CATALOGPRICE']._serialized_start=8289 + _globals['_CATALOGPRICE']._serialized_end=8546 + _globals['_ADDSUBSCRIPTIONREQUEST']._serialized_start=8549 + _globals['_ADDSUBSCRIPTIONREQUEST']._serialized_end=8768 + _globals['_ADDSUBSCRIPTIONRESPONSE']._serialized_start=8770 + _globals['_ADDSUBSCRIPTIONRESPONSE']._serialized_end=8895 + _globals['_CREATECHECKOUTSESSIONREQUEST']._serialized_start=8898 + _globals['_CREATECHECKOUTSESSIONREQUEST']._serialized_end=9255 + _globals['_CREATECHECKOUTSESSIONRESPONSE']._serialized_start=9257 + _globals['_CREATECHECKOUTSESSIONRESPONSE']._serialized_end=9372 + _globals['_UPDATEWORKSPACECONTEXTREQUEST']._serialized_start=9374 + _globals['_UPDATEWORKSPACECONTEXTREQUEST']._serialized_end=9464 + _globals['_UPDATEWORKSPACECONTEXTRESPONSE']._serialized_start=9466 + _globals['_UPDATEWORKSPACECONTEXTRESPONSE']._serialized_end=9549 + _globals['_WORKSPACESERVICE']._serialized_start=10387 + _globals['_WORKSPACESERVICE']._serialized_end=13148 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/workspaces/workspaces_pb2.pyi b/scalekit/v1/workspaces/workspaces_pb2.pyi index 2a281ce..1cf9c94 100644 --- a/scalekit/v1/workspaces/workspaces_pb2.pyi +++ b/scalekit/v1/workspaces/workspaces_pb2.pyi @@ -7,10 +7,8 @@ from google.protobuf import duration_pb2 as _duration_pb2 from google.protobuf import empty_pb2 as _empty_pb2 from google.protobuf import struct_pb2 as _struct_pb2 from google.protobuf import timestamp_pb2 as _timestamp_pb2 -from google.protobuf import wrappers_pb2 as _wrappers_pb2 from protoc_gen_openapiv2.options import annotations_pb2 as _annotations_pb2_1 from scalekit.v1.commons import commons_pb2 as _commons_pb2 -from scalekit.v1.domains import domains_pb2 as _domains_pb2 from scalekit.v1.options import options_pb2 as _options_pb2 from google.protobuf.internal import containers as _containers from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper @@ -152,18 +150,16 @@ class UpdateWorkspace(_message.Message): def __init__(self, display_name: _Optional[str] = ...) -> None: ... class OnboardWorkspace(_message.Message): - __slots__ = ("workspace_display_name", "user_given_name", "user_family_name", "authentication_mode", "enable_allowed_domain_join") + __slots__ = ("workspace_display_name", "user_given_name", "user_family_name", "authentication_mode") WORKSPACE_DISPLAY_NAME_FIELD_NUMBER: _ClassVar[int] USER_GIVEN_NAME_FIELD_NUMBER: _ClassVar[int] USER_FAMILY_NAME_FIELD_NUMBER: _ClassVar[int] AUTHENTICATION_MODE_FIELD_NUMBER: _ClassVar[int] - ENABLE_ALLOWED_DOMAIN_JOIN_FIELD_NUMBER: _ClassVar[int] workspace_display_name: str user_given_name: str user_family_name: str authentication_mode: _commons_pb2.AuthenticationMode - enable_allowed_domain_join: bool - def __init__(self, workspace_display_name: _Optional[str] = ..., user_given_name: _Optional[str] = ..., user_family_name: _Optional[str] = ..., authentication_mode: _Optional[_Union[_commons_pb2.AuthenticationMode, str]] = ..., enable_allowed_domain_join: bool = ...) -> None: ... + def __init__(self, workspace_display_name: _Optional[str] = ..., user_given_name: _Optional[str] = ..., user_family_name: _Optional[str] = ..., authentication_mode: _Optional[_Union[_commons_pb2.AuthenticationMode, str]] = ...) -> None: ... class CreateWorkspaceRequest(_message.Message): __slots__ = ("workspace",) @@ -654,45 +650,3 @@ class UpdateWorkspaceContextResponse(_message.Message): CONTEXT_FIELD_NUMBER: _ClassVar[int] context: _struct_pb2.Struct def __init__(self, context: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... - -class ValidateWorkspaceDomainRequest(_message.Message): - __slots__ = () - def __init__(self) -> None: ... - -class CreateWorkspaceDomainRequest(_message.Message): - __slots__ = ("domain",) - DOMAIN_FIELD_NUMBER: _ClassVar[int] - domain: _domains_pb2.CreateDomain - def __init__(self, domain: _Optional[_Union[_domains_pb2.CreateDomain, _Mapping]] = ...) -> None: ... - -class CreateWorkspaceDomainResponse(_message.Message): - __slots__ = ("domain",) - DOMAIN_FIELD_NUMBER: _ClassVar[int] - domain: _domains_pb2.Domain - def __init__(self, domain: _Optional[_Union[_domains_pb2.Domain, _Mapping]] = ...) -> None: ... - -class ListWorkspaceDomainsRequest(_message.Message): - __slots__ = ("page_size", "page_number", "domain_type") - PAGE_SIZE_FIELD_NUMBER: _ClassVar[int] - PAGE_NUMBER_FIELD_NUMBER: _ClassVar[int] - DOMAIN_TYPE_FIELD_NUMBER: _ClassVar[int] - page_size: _wrappers_pb2.Int32Value - page_number: _wrappers_pb2.Int32Value - domain_type: _domains_pb2.DomainType - def __init__(self, page_size: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., page_number: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., domain_type: _Optional[_Union[_domains_pb2.DomainType, str]] = ...) -> None: ... - -class ListWorkspaceDomainsResponse(_message.Message): - __slots__ = ("page_size", "page_number", "domains") - PAGE_SIZE_FIELD_NUMBER: _ClassVar[int] - PAGE_NUMBER_FIELD_NUMBER: _ClassVar[int] - DOMAINS_FIELD_NUMBER: _ClassVar[int] - page_size: int - page_number: int - domains: _containers.RepeatedCompositeFieldContainer[_domains_pb2.Domain] - def __init__(self, page_size: _Optional[int] = ..., page_number: _Optional[int] = ..., domains: _Optional[_Iterable[_Union[_domains_pb2.Domain, _Mapping]]] = ...) -> None: ... - -class DeleteWorkspaceDomainRequest(_message.Message): - __slots__ = ("id",) - ID_FIELD_NUMBER: _ClassVar[int] - id: str - def __init__(self, id: _Optional[str] = ...) -> None: ... diff --git a/scalekit/v1/workspaces/workspaces_pb2_grpc.py b/scalekit/v1/workspaces/workspaces_pb2_grpc.py index 0039189..686d770 100644 --- a/scalekit/v1/workspaces/workspaces_pb2_grpc.py +++ b/scalekit/v1/workspaces/workspaces_pb2_grpc.py @@ -3,7 +3,6 @@ import grpc from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 -from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2 from scalekit.v1.workspaces import workspaces_pb2 as scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2 @@ -91,26 +90,6 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.UpdateWorkspaceContextRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.UpdateWorkspaceContextResponse.FromString, ) - self.ListWorkspaceDomains = channel.unary_unary( - '/scalekit.v1.workspaces.WorkspaceService/ListWorkspaceDomains', - request_serializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.ListWorkspaceDomainsRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.ListWorkspaceDomainsResponse.FromString, - ) - self.CreateWorkspaceDomain = channel.unary_unary( - '/scalekit.v1.workspaces.WorkspaceService/CreateWorkspaceDomain', - request_serializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.CreateWorkspaceDomainRequest.SerializeToString, - response_deserializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.CreateWorkspaceDomainResponse.FromString, - ) - self.DeleteWorkspaceDomain = channel.unary_unary( - '/scalekit.v1.workspaces.WorkspaceService/DeleteWorkspaceDomain', - request_serializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.DeleteWorkspaceDomainRequest.SerializeToString, - response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - ) - self.ValidateWorkspaceDomain = channel.unary_unary( - '/scalekit.v1.workspaces.WorkspaceService/ValidateWorkspaceDomain', - request_serializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.ValidateWorkspaceDomainRequest.SerializeToString, - response_deserializer=google_dot_protobuf_dot_wrappers__pb2.BoolValue.FromString, - ) class WorkspaceServiceServicer(object): @@ -286,30 +265,6 @@ def UpdateWorkspaceContext(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') - def ListWorkspaceDomains(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def CreateWorkspaceDomain(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def DeleteWorkspaceDomain(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def ValidateWorkspaceDomain(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - def add_WorkspaceServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -388,26 +343,6 @@ def add_WorkspaceServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.UpdateWorkspaceContextRequest.FromString, response_serializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.UpdateWorkspaceContextResponse.SerializeToString, ), - 'ListWorkspaceDomains': grpc.unary_unary_rpc_method_handler( - servicer.ListWorkspaceDomains, - request_deserializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.ListWorkspaceDomainsRequest.FromString, - response_serializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.ListWorkspaceDomainsResponse.SerializeToString, - ), - 'CreateWorkspaceDomain': grpc.unary_unary_rpc_method_handler( - servicer.CreateWorkspaceDomain, - request_deserializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.CreateWorkspaceDomainRequest.FromString, - response_serializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.CreateWorkspaceDomainResponse.SerializeToString, - ), - 'DeleteWorkspaceDomain': grpc.unary_unary_rpc_method_handler( - servicer.DeleteWorkspaceDomain, - request_deserializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.DeleteWorkspaceDomainRequest.FromString, - response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, - ), - 'ValidateWorkspaceDomain': grpc.unary_unary_rpc_method_handler( - servicer.ValidateWorkspaceDomain, - request_deserializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.ValidateWorkspaceDomainRequest.FromString, - response_serializer=google_dot_protobuf_dot_wrappers__pb2.BoolValue.SerializeToString, - ), } generic_handler = grpc.method_handlers_generic_handler( 'scalekit.v1.workspaces.WorkspaceService', rpc_method_handlers) @@ -672,71 +607,3 @@ def UpdateWorkspaceContext(request, scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.UpdateWorkspaceContextResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - @staticmethod - def ListWorkspaceDomains(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.workspaces.WorkspaceService/ListWorkspaceDomains', - scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.ListWorkspaceDomainsRequest.SerializeToString, - scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.ListWorkspaceDomainsResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - @staticmethod - def CreateWorkspaceDomain(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.workspaces.WorkspaceService/CreateWorkspaceDomain', - scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.CreateWorkspaceDomainRequest.SerializeToString, - scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.CreateWorkspaceDomainResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - @staticmethod - def DeleteWorkspaceDomain(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.workspaces.WorkspaceService/DeleteWorkspaceDomain', - scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.DeleteWorkspaceDomainRequest.SerializeToString, - google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) - - @staticmethod - def ValidateWorkspaceDomain(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/scalekit.v1.workspaces.WorkspaceService/ValidateWorkspaceDomain', - scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.ValidateWorkspaceDomainRequest.SerializeToString, - google_dot_protobuf_dot_wrappers__pb2.BoolValue.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) From dbf259b5753e106be5b81f4ff27491b0918c6c5d Mon Sep 17 00:00:00 2001 From: Srinivas Karre Date: Sun, 10 May 2026 20:52:20 +0530 Subject: [PATCH 06/19] chore: ignore proto/ directory (local generate-local output) --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index dcbd450..e3780cf 100644 --- a/.gitignore +++ b/.gitignore @@ -170,3 +170,4 @@ proto # Claude Code documentation CLAUDE.md +proto/ From 57c8e16deb82a0de5ecdf746a6503cdb5c654b7f Mon Sep 17 00:00:00 2001 From: Srinivas Karre Date: Mon, 11 May 2026 10:18:03 +0530 Subject: [PATCH 07/19] chore: regenerate all proto stubs for v0.1.120.2 --- scalekit/v1/agentkit_logs/__init__.py | 0 .../agentkit_logs/agentkit_analytics_pb2.py | 62 +++ .../agentkit_logs/agentkit_analytics_pb2.pyi | 91 +++++ .../agentkit_analytics_pb2_grpc.py | 66 +++ .../v1/agentkit_logs/agentkit_logs_pb2.py | 80 ++++ .../v1/agentkit_logs/agentkit_logs_pb2.pyi | 101 +++++ .../agentkit_logs/agentkit_logs_pb2_grpc.py | 99 +++++ scalekit/v1/auditlogs/auditlogs_pb2.py | 27 +- scalekit/v1/auditlogs/auditlogs_pb2.pyi | 1 + scalekit/v1/auth/auth_pb2.py | 84 ++-- scalekit/v1/auth/auth_pb2.pyi | 20 +- scalekit/v1/auth/totp_pb2.py | 61 +-- scalekit/v1/auth/totp_pb2.pyi | 1 + scalekit/v1/clients/clients_pb2.py | 200 ++++----- scalekit/v1/clients/clients_pb2.pyi | 30 +- .../connected_accounts_pb2.py | 152 ++++--- .../connected_accounts_pb2.pyi | 54 ++- .../connected_accounts_pb2_grpc.py | 136 ++++++ scalekit/v1/connections/connections_pb2.py | 278 +++++++------ scalekit/v1/connections/connections_pb2.pyi | 50 ++- .../v1/connections/connections_pb2_grpc.py | 66 +++ scalekit/v1/directories/directories_pb2.py | 40 +- scalekit/v1/directories/directories_pb2.pyi | 24 ++ .../v1/directories/directories_pb2_grpc.py | 66 +++ scalekit/v1/domains/domains_pb2.py | 28 +- scalekit/v1/domains/domains_pb2.pyi | 6 +- scalekit/v1/emails/emails_pb2.py | 197 ++++----- scalekit/v1/emails/emails_pb2.pyi | 1 + scalekit/v1/environments/environments_pb2.py | 371 ++++++++++------- scalekit/v1/environments/environments_pb2.pyi | 120 +++++- .../v1/environments/environments_pb2_grpc.py | 168 ++++++++ scalekit/v1/errdetails/errdetails_pb2.py | 49 ++- scalekit/v1/errdetails/errdetails_pb2.pyi | 3 + scalekit/v1/errdetails/errdetails_pb2_grpc.py | 63 +++ scalekit/v1/keys/__init__.py | 0 scalekit/v1/keys/keys_pb2.py | 111 +++++ scalekit/v1/keys/keys_pb2.pyi | 178 ++++++++ scalekit/v1/keys/keys_pb2_grpc.py | 386 ++++++++++++++++++ scalekit/v1/members/members_pb2.py | 85 ++-- scalekit/v1/members/members_pb2.pyi | 1 + scalekit/v1/migrations/migrations_pb2.py | 68 +-- scalekit/v1/migrations/migrations_pb2.pyi | 12 + scalekit/v1/migrations/migrations_pb2_grpc.py | 33 ++ scalekit/v1/options/options_pb2.py | 4 +- scalekit/v1/options/options_pb2.pyi | 16 + scalekit/v1/providers/providers_pb2.py | 114 ++++-- scalekit/v1/providers/providers_pb2.pyi | 75 +++- scalekit/v1/providers/providers_pb2_grpc.py | 99 +++++ scalekit/v1/roles/roles_pb2.py | 6 +- scalekit/v1/tools/tools_pb2.py | 84 ++-- scalekit/v1/tools/tools_pb2.pyi | 40 +- scalekit/v1/tools/tools_pb2_grpc.py | 33 ++ scalekit/v1/users/users_pb2.py | 170 ++++---- scalekit/v1/workspaces/workspaces_pb2.py | 272 ++++++------ scalekit/v1/workspaces/workspaces_pb2.pyi | 50 ++- scalekit/v1/workspaces/workspaces_pb2_grpc.py | 133 ++++++ 56 files changed, 3728 insertions(+), 1037 deletions(-) create mode 100644 scalekit/v1/agentkit_logs/__init__.py create mode 100644 scalekit/v1/agentkit_logs/agentkit_analytics_pb2.py create mode 100644 scalekit/v1/agentkit_logs/agentkit_analytics_pb2.pyi create mode 100644 scalekit/v1/agentkit_logs/agentkit_analytics_pb2_grpc.py create mode 100644 scalekit/v1/agentkit_logs/agentkit_logs_pb2.py create mode 100644 scalekit/v1/agentkit_logs/agentkit_logs_pb2.pyi create mode 100644 scalekit/v1/agentkit_logs/agentkit_logs_pb2_grpc.py create mode 100644 scalekit/v1/keys/__init__.py create mode 100644 scalekit/v1/keys/keys_pb2.py create mode 100644 scalekit/v1/keys/keys_pb2.pyi create mode 100644 scalekit/v1/keys/keys_pb2_grpc.py diff --git a/scalekit/v1/agentkit_logs/__init__.py b/scalekit/v1/agentkit_logs/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/scalekit/v1/agentkit_logs/agentkit_analytics_pb2.py b/scalekit/v1/agentkit_logs/agentkit_analytics_pb2.py new file mode 100644 index 0000000..ca09db0 --- /dev/null +++ b/scalekit/v1/agentkit_logs/agentkit_analytics_pb2.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: scalekit/v1/agentkit_logs/agentkit_analytics.proto +# Protobuf Python Version: 5.26.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 +from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 +from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2 +from google.api import visibility_pb2 as google_dot_api_dot_visibility__pb2 +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 +from protoc_gen_openapiv2.options import annotations_pb2 as protoc__gen__openapiv2_dot_options_dot_annotations__pb2 +from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n2scalekit/v1/agentkit_logs/agentkit_analytics.proto\x12\x19scalekit.v1.agentkit_logs\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\xbe\x04\n\x17GetOverviewStatsRequest\x12>\n\nstart_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x02R\tstartTime\x12:\n\x08\x65nd_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x02R\x07\x65ndTime\x12O\n\x08provider\x18\x03 \x03(\tB3\x92\x41\x30\x32.Filter by connector provider slug, e.g. gmail.R\x08provider\x12g\n\x06status\x18\x04 \x03(\tBO\x92\x41L2JFilter by status. Allowed values: success, provider_error, platform_error.R\x06status\x12>\n\nerror_code\x18\x05 \x03(\tB\x1f\x92\x41\x1c\x32\x1a\x46ilter by error code slug.R\terrorCode\x12\x98\x01\n\x0f\x63onnection_name\x18\x06 \x01(\tBj\x92\x41_2OFilter by connection name (partial, case-insensitive match). e.g. \'gmail-prod\'.J\x0c\"gmail-prod\"\xbaH\x05r\x03\x18\xff\x01H\x00R\x0e\x63onnectionName\x88\x01\x01\x42\x12\n\x10_connection_name\"\xa5\x03\n\rOverviewStats\x12\x14\n\x05total\x18\x01 \x01(\x03R\x05total\x12\x18\n\x07success\x18\x02 \x01(\x03R\x07success\x12\x16\n\x06\x65rrors\x18\x03 \x01(\x03R\x06\x65rrors\x12\'\n\x0fprovider_errors\x18\x04 \x01(\x03R\x0eproviderErrors\x12\'\n\x0fplatform_errors\x18\x05 \x01(\x03R\x0eplatformErrors\x12Q\n\x0ftop_error_codes\x18\x06 \x03(\x0b\x32).scalekit.v1.agentkit_logs.ErrorCodeCountR\rtopErrorCodes\x12Y\n\x13\x63onnector_breakdown\x18\x07 \x03(\x0b\x32(.scalekit.v1.agentkit_logs.ConnectorStatR\x12\x63onnectorBreakdown\x12L\n\x0btime_series\x18\x08 \x03(\x0b\x32+.scalekit.v1.agentkit_logs.TimeSeriesBucketR\ntimeSeries\"E\n\x0e\x45rrorCodeCount\x12\x1d\n\nerror_code\x18\x01 \x01(\tR\terrorCode\x12\x14\n\x05\x63ount\x18\x02 \x01(\x03R\x05\x63ount\"\xc5\x01\n\rConnectorStat\x12\x1a\n\x08provider\x18\x01 \x01(\tR\x08provider\x12\x14\n\x05total\x18\x02 \x01(\x03R\x05total\x12\x18\n\x07success\x18\x03 \x01(\x03R\x07success\x12\x16\n\x06\x65rrors\x18\x04 \x01(\x03R\x06\x65rrors\x12\'\n\x0fprovider_errors\x18\x05 \x01(\x03R\x0eproviderErrors\x12\'\n\x0fplatform_errors\x18\x06 \x01(\x03R\x0eplatformErrors\"\xc8\x03\n\x10TimeSeriesBucket\x12\x32\n\x06\x62ucket\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x06\x62ucket\x12\x14\n\x05total\x18\x02 \x01(\x03R\x05total\x12\x18\n\x07success\x18\x03 \x01(\x03R\x07success\x12\x16\n\x06\x65rrors\x18\x04 \x01(\x03R\x06\x65rrors\x12\xe5\x01\n\x17\x62ucket_duration_seconds\x18\x05 \x01(\x03\x42\xac\x01\x92\x41\xa8\x01\x32\xa5\x01Width of this bucket in seconds. The server picks granularity adaptively (5m, 15m, 30m, 1h, 2h, 6h, 12h, 1d, 3d, or 7d) so that any window returns at most 30 points.R\x15\x62ucketDurationSeconds\x12\'\n\x0fprovider_errors\x18\x06 \x01(\x03R\x0eproviderErrors\x12\'\n\x0fplatform_errors\x18\x07 \x01(\x03R\x0eplatformErrors2\xf7\x03\n\x18\x41gentkitAnalyticsService\x12\xc1\x03\n\x10GetOverviewStats\x12\x32.scalekit.v1.agentkit_logs.GetOverviewStatsRequest\x1a(.scalekit.v1.agentkit_logs.OverviewStats\"\xce\x02\x92\x41\x8a\x02\n\x12\x41gentKit Analytics\x12!Get tool call overview statistics\x1a~Returns aggregated tool call metrics for the environment over the specified time window. Used to power the Overview dashboard.J3\n\x03\x32\x30\x30\x12,\n*Overview statistics retrieved successfullyJ\x1c\n\x03\x34\x30\x30\x12\x15\n\x13Invalid time window\x82\xb5\x18\x02\x18T\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\x12#/api/v1/agentkit/analytics/overview\x1a\x17\x92\x41\x14\n\x12\x41gentKit AnalyticsB9Z7github.com/scalekit-inc/scalekit/pkg/grpc/agentkit_logsb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'scalekit.v1.agentkit_logs.agentkit_analytics_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'Z7github.com/scalekit-inc/scalekit/pkg/grpc/agentkit_logs' + _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['start_time']._loaded_options = None + _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['start_time']._serialized_options = b'\340A\002' + _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['end_time']._loaded_options = None + _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['end_time']._serialized_options = b'\340A\002' + _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['provider']._loaded_options = None + _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['provider']._serialized_options = b'\222A02.Filter by connector provider slug, e.g. gmail.' + _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['status']._loaded_options = None + _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['status']._serialized_options = b'\222AL2JFilter by status. Allowed values: success, provider_error, platform_error.' + _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['error_code']._loaded_options = None + _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['error_code']._serialized_options = b'\222A\0342\032Filter by error code slug.' + _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['connection_name']._loaded_options = None + _globals['_GETOVERVIEWSTATSREQUEST'].fields_by_name['connection_name']._serialized_options = b'\222A_2OFilter by connection name (partial, case-insensitive match). e.g. \'gmail-prod\'.J\014\"gmail-prod\"\272H\005r\003\030\377\001' + _globals['_TIMESERIESBUCKET'].fields_by_name['bucket_duration_seconds']._loaded_options = None + _globals['_TIMESERIESBUCKET'].fields_by_name['bucket_duration_seconds']._serialized_options = b'\222A\250\0012\245\001Width of this bucket in seconds. The server picks granularity adaptively (5m, 15m, 30m, 1h, 2h, 6h, 12h, 1d, 3d, or 7d) so that any window returns at most 30 points.' + _globals['_AGENTKITANALYTICSSERVICE']._loaded_options = None + _globals['_AGENTKITANALYTICSSERVICE']._serialized_options = b'\222A\024\n\022AgentKit Analytics' + _globals['_AGENTKITANALYTICSSERVICE'].methods_by_name['GetOverviewStats']._loaded_options = None + _globals['_AGENTKITANALYTICSSERVICE'].methods_by_name['GetOverviewStats']._serialized_options = b'\222A\212\002\n\022AgentKit Analytics\022!Get tool call overview statistics\032~Returns aggregated tool call metrics for the environment over the specified time window. Used to power the Overview dashboard.J3\n\003200\022,\n*Overview statistics retrieved successfullyJ\034\n\003400\022\025\n\023Invalid time window\202\265\030\002\030T\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002%\022#/api/v1/agentkit/analytics/overview' + _globals['_GETOVERVIEWSTATSREQUEST']._serialized_start=319 + _globals['_GETOVERVIEWSTATSREQUEST']._serialized_end=893 + _globals['_OVERVIEWSTATS']._serialized_start=896 + _globals['_OVERVIEWSTATS']._serialized_end=1317 + _globals['_ERRORCODECOUNT']._serialized_start=1319 + _globals['_ERRORCODECOUNT']._serialized_end=1388 + _globals['_CONNECTORSTAT']._serialized_start=1391 + _globals['_CONNECTORSTAT']._serialized_end=1588 + _globals['_TIMESERIESBUCKET']._serialized_start=1591 + _globals['_TIMESERIESBUCKET']._serialized_end=2047 + _globals['_AGENTKITANALYTICSSERVICE']._serialized_start=2050 + _globals['_AGENTKITANALYTICSSERVICE']._serialized_end=2553 +# @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/agentkit_logs/agentkit_analytics_pb2.pyi b/scalekit/v1/agentkit_logs/agentkit_analytics_pb2.pyi new file mode 100644 index 0000000..363b77b --- /dev/null +++ b/scalekit/v1/agentkit_logs/agentkit_analytics_pb2.pyi @@ -0,0 +1,91 @@ +from buf.validate import validate_pb2 as _validate_pb2 +from google.api import annotations_pb2 as _annotations_pb2 +from google.api import field_behavior_pb2 as _field_behavior_pb2 +from google.api import visibility_pb2 as _visibility_pb2 +from google.protobuf import timestamp_pb2 as _timestamp_pb2 +from protoc_gen_openapiv2.options import annotations_pb2 as _annotations_pb2_1 +from scalekit.v1.options import options_pb2 as _options_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class GetOverviewStatsRequest(_message.Message): + __slots__ = ("start_time", "end_time", "provider", "status", "error_code", "connection_name") + START_TIME_FIELD_NUMBER: _ClassVar[int] + END_TIME_FIELD_NUMBER: _ClassVar[int] + PROVIDER_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + ERROR_CODE_FIELD_NUMBER: _ClassVar[int] + CONNECTION_NAME_FIELD_NUMBER: _ClassVar[int] + start_time: _timestamp_pb2.Timestamp + end_time: _timestamp_pb2.Timestamp + provider: _containers.RepeatedScalarFieldContainer[str] + status: _containers.RepeatedScalarFieldContainer[str] + error_code: _containers.RepeatedScalarFieldContainer[str] + connection_name: str + def __init__(self, start_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., end_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., provider: _Optional[_Iterable[str]] = ..., status: _Optional[_Iterable[str]] = ..., error_code: _Optional[_Iterable[str]] = ..., connection_name: _Optional[str] = ...) -> None: ... + +class OverviewStats(_message.Message): + __slots__ = ("total", "success", "errors", "provider_errors", "platform_errors", "top_error_codes", "connector_breakdown", "time_series") + TOTAL_FIELD_NUMBER: _ClassVar[int] + SUCCESS_FIELD_NUMBER: _ClassVar[int] + ERRORS_FIELD_NUMBER: _ClassVar[int] + PROVIDER_ERRORS_FIELD_NUMBER: _ClassVar[int] + PLATFORM_ERRORS_FIELD_NUMBER: _ClassVar[int] + TOP_ERROR_CODES_FIELD_NUMBER: _ClassVar[int] + CONNECTOR_BREAKDOWN_FIELD_NUMBER: _ClassVar[int] + TIME_SERIES_FIELD_NUMBER: _ClassVar[int] + total: int + success: int + errors: int + provider_errors: int + platform_errors: int + top_error_codes: _containers.RepeatedCompositeFieldContainer[ErrorCodeCount] + connector_breakdown: _containers.RepeatedCompositeFieldContainer[ConnectorStat] + time_series: _containers.RepeatedCompositeFieldContainer[TimeSeriesBucket] + def __init__(self, total: _Optional[int] = ..., success: _Optional[int] = ..., errors: _Optional[int] = ..., provider_errors: _Optional[int] = ..., platform_errors: _Optional[int] = ..., top_error_codes: _Optional[_Iterable[_Union[ErrorCodeCount, _Mapping]]] = ..., connector_breakdown: _Optional[_Iterable[_Union[ConnectorStat, _Mapping]]] = ..., time_series: _Optional[_Iterable[_Union[TimeSeriesBucket, _Mapping]]] = ...) -> None: ... + +class ErrorCodeCount(_message.Message): + __slots__ = ("error_code", "count") + ERROR_CODE_FIELD_NUMBER: _ClassVar[int] + COUNT_FIELD_NUMBER: _ClassVar[int] + error_code: str + count: int + def __init__(self, error_code: _Optional[str] = ..., count: _Optional[int] = ...) -> None: ... + +class ConnectorStat(_message.Message): + __slots__ = ("provider", "total", "success", "errors", "provider_errors", "platform_errors") + PROVIDER_FIELD_NUMBER: _ClassVar[int] + TOTAL_FIELD_NUMBER: _ClassVar[int] + SUCCESS_FIELD_NUMBER: _ClassVar[int] + ERRORS_FIELD_NUMBER: _ClassVar[int] + PROVIDER_ERRORS_FIELD_NUMBER: _ClassVar[int] + PLATFORM_ERRORS_FIELD_NUMBER: _ClassVar[int] + provider: str + total: int + success: int + errors: int + provider_errors: int + platform_errors: int + def __init__(self, provider: _Optional[str] = ..., total: _Optional[int] = ..., success: _Optional[int] = ..., errors: _Optional[int] = ..., provider_errors: _Optional[int] = ..., platform_errors: _Optional[int] = ...) -> None: ... + +class TimeSeriesBucket(_message.Message): + __slots__ = ("bucket", "total", "success", "errors", "bucket_duration_seconds", "provider_errors", "platform_errors") + BUCKET_FIELD_NUMBER: _ClassVar[int] + TOTAL_FIELD_NUMBER: _ClassVar[int] + SUCCESS_FIELD_NUMBER: _ClassVar[int] + ERRORS_FIELD_NUMBER: _ClassVar[int] + BUCKET_DURATION_SECONDS_FIELD_NUMBER: _ClassVar[int] + PROVIDER_ERRORS_FIELD_NUMBER: _ClassVar[int] + PLATFORM_ERRORS_FIELD_NUMBER: _ClassVar[int] + bucket: _timestamp_pb2.Timestamp + total: int + success: int + errors: int + bucket_duration_seconds: int + provider_errors: int + platform_errors: int + def __init__(self, bucket: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., total: _Optional[int] = ..., success: _Optional[int] = ..., errors: _Optional[int] = ..., bucket_duration_seconds: _Optional[int] = ..., provider_errors: _Optional[int] = ..., platform_errors: _Optional[int] = ...) -> None: ... diff --git a/scalekit/v1/agentkit_logs/agentkit_analytics_pb2_grpc.py b/scalekit/v1/agentkit_logs/agentkit_analytics_pb2_grpc.py new file mode 100644 index 0000000..7119e59 --- /dev/null +++ b/scalekit/v1/agentkit_logs/agentkit_analytics_pb2_grpc.py @@ -0,0 +1,66 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc + +from scalekit.v1.agentkit_logs import agentkit_analytics_pb2 as scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__analytics__pb2 + + +class AgentkitAnalyticsServiceStub(object): + """Missing associated documentation comment in .proto file.""" + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.GetOverviewStats = channel.unary_unary( + '/scalekit.v1.agentkit_logs.AgentkitAnalyticsService/GetOverviewStats', + request_serializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__analytics__pb2.GetOverviewStatsRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__analytics__pb2.OverviewStats.FromString, + ) + + +class AgentkitAnalyticsServiceServicer(object): + """Missing associated documentation comment in .proto file.""" + + def GetOverviewStats(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_AgentkitAnalyticsServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'GetOverviewStats': grpc.unary_unary_rpc_method_handler( + servicer.GetOverviewStats, + request_deserializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__analytics__pb2.GetOverviewStatsRequest.FromString, + response_serializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__analytics__pb2.OverviewStats.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'scalekit.v1.agentkit_logs.AgentkitAnalyticsService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + # This class is part of an EXPERIMENTAL API. +class AgentkitAnalyticsService(object): + """Missing associated documentation comment in .proto file.""" + + @staticmethod + def GetOverviewStats(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.agentkit_logs.AgentkitAnalyticsService/GetOverviewStats', + scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__analytics__pb2.GetOverviewStatsRequest.SerializeToString, + scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__analytics__pb2.OverviewStats.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/agentkit_logs/agentkit_logs_pb2.py b/scalekit/v1/agentkit_logs/agentkit_logs_pb2.py new file mode 100644 index 0000000..67c4f5e --- /dev/null +++ b/scalekit/v1/agentkit_logs/agentkit_logs_pb2.py @@ -0,0 +1,80 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: scalekit/v1/agentkit_logs/agentkit_logs.proto +# Protobuf Python Version: 5.26.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 +from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 +from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2 +from google.api import visibility_pb2 as google_dot_api_dot_visibility__pb2 +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 +from protoc_gen_openapiv2.options import annotations_pb2 as protoc__gen__openapiv2_dot_options_dot_annotations__pb2 +from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n-scalekit/v1/agentkit_logs/agentkit_logs.proto\x12\x19scalekit.v1.agentkit_logs\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\xc6\t\n\x17ListToolCallLogsRequest\x12\x39\n\nstart_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartTime\x12\x35\n\x08\x65nd_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x65ndTime\x12g\n\x06status\x18\x03 \x03(\tBO\x92\x41L2JFilter by status. Allowed values: success, provider_error, platform_error.R\x06status\x12O\n\x08provider\x18\x04 \x03(\tB3\x92\x41\x30\x32.Filter by connector provider slug, e.g. gmail.R\x08provider\x12Z\n\rconnection_id\x18\x05 \x01(\tB0\x92\x41-2\x18\x46ilter by connection ID.J\x11\"conn_1234567890\"H\x00R\x0c\x63onnectionId\x88\x01\x01\x12l\n\x14\x63onnected_account_id\x18\x06 \x01(\tB5\x92\x41\x32\x32\x1f\x46ilter by connected account ID.J\x0f\"ca_1234567890\"H\x01R\x12\x63onnectedAccountId\x88\x01\x01\x12{\n\nidentifier\x18\x07 \x01(\tBV\x92\x41K2IFilter by connected account identifier (customer-defined end-user label).\xbaH\x05r\x03\x18\xff\x01H\x02R\nidentifier\x88\x01\x01\x12\x86\x01\n\x0c\x61gent_run_id\x18\x08 \x01(\tB_\x92\x41T2DFilter by agent run ID to see all tool calls for a single agent run.J\x0c\"run_abc123\"\xbaH\x05r\x03\x18\xff\x01H\x03R\nagentRunId\x88\x01\x01\x12\\\n\tpage_size\x18\t \x01(\rB?\x92\x41<2:Maximum number of records to return (1\xe2\x80\x93\x31\x30\x30, default 20).R\x08pageSize\x12i\n\npage_token\x18\n \x01(\tBJ\x92\x41G2EOpaque pagination token returned by a previous ListToolCallLogs call.R\tpageToken\x12\x86\x01\n\x0f\x63onnection_name\x18\x0b \x01(\tBX\x92\x41M2=Filter by connection name (partial match). e.g. \'gmail-prod\'.J\x0c\"gmail-prod\"\xbaH\x05r\x03\x18\xff\x01H\x04R\x0e\x63onnectionName\x88\x01\x01\x42\x10\n\x0e_connection_idB\x17\n\x15_connected_account_idB\r\n\x0b_identifierB\x0f\n\r_agent_run_idB\x12\n\x10_connection_name\"\xb4\x02\n\x18ListToolCallLogsResponse\x12L\n\x0etool_call_logs\x18\x01 \x03(\x0b\x32&.scalekit.v1.agentkit_logs.ToolCallLogR\x0ctoolCallLogs\x12&\n\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x03 \x01(\x03R\ttotalSize\x12\x82\x01\n\x0fprev_page_token\x18\x04 \x01(\tBZ\x92\x41W2UPagination token to fetch the previous page of results. Empty when on the first page.R\rprevPageToken\"z\n\x15GetToolCallLogRequest\x12\x61\n\x0c\x65xecution_id\x18\x01 \x01(\tB>\x92\x41/2\x1e\x45xecution ID of the tool call.J\r\"exec_abc123\"\xe0\x41\x02\xbaH\x06r\x04\x10\x01\x18@R\x0b\x65xecutionId\"\xf8\x07\n\x0bToolCallLog\x12\x46\n\x02id\x18\x01 \x01(\tB6\x92\x41\x33\x32\x1fUnique tool call log record ID.J\x10\"tcl_1234567890\"R\x02id\x12%\n\x0e\x65nvironment_id\x18\x02 \x01(\tR\renvironmentId\x12O\n\x0c\x65xecution_id\x18\x03 \x01(\tB,\x92\x41)2\'Unique execution ID for this tool call.R\x0b\x65xecutionId\x12%\n\x0c\x61gent_run_id\x18\x04 \x01(\tH\x00R\nagentRunId\x88\x01\x01\x12\x1b\n\ttool_name\x18\x05 \x01(\tR\x08toolName\x12\x1a\n\x08provider\x18\x06 \x01(\tR\x08provider\x12\x30\n\x14\x63onnected_account_id\x18\x07 \x01(\tR\x12\x63onnectedAccountId\x12#\n\rconnection_id\x18\x08 \x01(\tR\x0c\x63onnectionId\x12\'\n\x0f\x63onnection_name\x18\t \x01(\tR\x0e\x63onnectionName\x12\x1e\n\nidentifier\x18\n \x01(\tR\nidentifier\x12\x17\n\x07user_id\x18\x0b \x01(\tR\x06userId\x12,\n\x0forganization_id\x18\x0c \x01(\tH\x01R\x0eorganizationId\x88\x01\x01\x12;\n\x06source\x18\r \x01(\tB#\x92\x41 2\x1eInvocation source: API or MCP.R\x06source\x12Q\n\x06status\x18\x0e \x01(\tB9\x92\x41\x36\x32\x34Outcome: success, provider_error, or platform_error.R\x06status\x12\x1d\n\nerror_tier\x18\x0f \x01(\tR\terrorTier\x12\x1d\n\nerror_code\x18\x10 \x01(\tR\terrorCode\x12#\n\rerror_message\x18\x11 \x01(\tR\x0c\x65rrorMessage\x12\x1f\n\x0b\x64uration_ms\x18\x12 \x01(\x03R\ndurationMs\x12\x39\n\nstarted_at\x18\x13 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartedAt\x12]\n\x0cworkspace_id\x18\x14 \x01(\tB5\x92\x41\x32\x32\x1eWorkspace this log belongs to.J\x10\"wks_1234567890\"H\x02R\x0bworkspaceId\x88\x01\x01\x42\x0f\n\r_agent_run_idB\x12\n\x10_organization_idB\x0f\n\r_workspace_id2\xd7\x06\n\x13\x41gentkitLogsService\x12\xba\x03\n\x10ListToolCallLogs\x12\x32.scalekit.v1.agentkit_logs.ListToolCallLogsRequest\x1a\x33.scalekit.v1.agentkit_logs.ListToolCallLogsResponse\"\xbc\x02\x92\x41\xfc\x01\n\rAgentKit Logs\x12\x13List tool call logs\x1a\x80\x01Returns paginated tool call execution records for the environment. Filter by time range, status, provider, or connected account.J.\n\x03\x32\x30\x30\x12\'\n%Tool call logs retrieved successfullyJ#\n\x03\x34\x30\x30\x12\x1c\n\x1aInvalid request parameters\x82\xb5\x18\x02\x18T\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\x12\x1f/api/v1/agentkit/tool_call_logs\x12\xee\x02\n\x0eGetToolCallLog\x12\x30.scalekit.v1.agentkit_logs.GetToolCallLogRequest\x1a&.scalekit.v1.agentkit_logs.ToolCallLog\"\x81\x02\x92\x41\xb2\x01\n\rAgentKit Logs\x12\x13Get a tool call log\x1a None: ... + +class ListToolCallLogsResponse(_message.Message): + __slots__ = ("tool_call_logs", "next_page_token", "total_size", "prev_page_token") + TOOL_CALL_LOGS_FIELD_NUMBER: _ClassVar[int] + NEXT_PAGE_TOKEN_FIELD_NUMBER: _ClassVar[int] + TOTAL_SIZE_FIELD_NUMBER: _ClassVar[int] + PREV_PAGE_TOKEN_FIELD_NUMBER: _ClassVar[int] + tool_call_logs: _containers.RepeatedCompositeFieldContainer[ToolCallLog] + next_page_token: str + total_size: int + prev_page_token: str + def __init__(self, tool_call_logs: _Optional[_Iterable[_Union[ToolCallLog, _Mapping]]] = ..., next_page_token: _Optional[str] = ..., total_size: _Optional[int] = ..., prev_page_token: _Optional[str] = ...) -> None: ... + +class GetToolCallLogRequest(_message.Message): + __slots__ = ("execution_id",) + EXECUTION_ID_FIELD_NUMBER: _ClassVar[int] + execution_id: str + def __init__(self, execution_id: _Optional[str] = ...) -> None: ... + +class ToolCallLog(_message.Message): + __slots__ = ("id", "environment_id", "execution_id", "agent_run_id", "tool_name", "provider", "connected_account_id", "connection_id", "connection_name", "identifier", "user_id", "organization_id", "source", "status", "error_tier", "error_code", "error_message", "duration_ms", "started_at", "workspace_id") + ID_FIELD_NUMBER: _ClassVar[int] + ENVIRONMENT_ID_FIELD_NUMBER: _ClassVar[int] + EXECUTION_ID_FIELD_NUMBER: _ClassVar[int] + AGENT_RUN_ID_FIELD_NUMBER: _ClassVar[int] + TOOL_NAME_FIELD_NUMBER: _ClassVar[int] + PROVIDER_FIELD_NUMBER: _ClassVar[int] + CONNECTED_ACCOUNT_ID_FIELD_NUMBER: _ClassVar[int] + CONNECTION_ID_FIELD_NUMBER: _ClassVar[int] + CONNECTION_NAME_FIELD_NUMBER: _ClassVar[int] + IDENTIFIER_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] + SOURCE_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + ERROR_TIER_FIELD_NUMBER: _ClassVar[int] + ERROR_CODE_FIELD_NUMBER: _ClassVar[int] + ERROR_MESSAGE_FIELD_NUMBER: _ClassVar[int] + DURATION_MS_FIELD_NUMBER: _ClassVar[int] + STARTED_AT_FIELD_NUMBER: _ClassVar[int] + WORKSPACE_ID_FIELD_NUMBER: _ClassVar[int] + id: str + environment_id: str + execution_id: str + agent_run_id: str + tool_name: str + provider: str + connected_account_id: str + connection_id: str + connection_name: str + identifier: str + user_id: str + organization_id: str + source: str + status: str + error_tier: str + error_code: str + error_message: str + duration_ms: int + started_at: _timestamp_pb2.Timestamp + workspace_id: str + def __init__(self, id: _Optional[str] = ..., environment_id: _Optional[str] = ..., execution_id: _Optional[str] = ..., agent_run_id: _Optional[str] = ..., tool_name: _Optional[str] = ..., provider: _Optional[str] = ..., connected_account_id: _Optional[str] = ..., connection_id: _Optional[str] = ..., connection_name: _Optional[str] = ..., identifier: _Optional[str] = ..., user_id: _Optional[str] = ..., organization_id: _Optional[str] = ..., source: _Optional[str] = ..., status: _Optional[str] = ..., error_tier: _Optional[str] = ..., error_code: _Optional[str] = ..., error_message: _Optional[str] = ..., duration_ms: _Optional[int] = ..., started_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., workspace_id: _Optional[str] = ...) -> None: ... diff --git a/scalekit/v1/agentkit_logs/agentkit_logs_pb2_grpc.py b/scalekit/v1/agentkit_logs/agentkit_logs_pb2_grpc.py new file mode 100644 index 0000000..384ee32 --- /dev/null +++ b/scalekit/v1/agentkit_logs/agentkit_logs_pb2_grpc.py @@ -0,0 +1,99 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc + +from scalekit.v1.agentkit_logs import agentkit_logs_pb2 as scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2 + + +class AgentkitLogsServiceStub(object): + """Missing associated documentation comment in .proto file.""" + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.ListToolCallLogs = channel.unary_unary( + '/scalekit.v1.agentkit_logs.AgentkitLogsService/ListToolCallLogs', + request_serializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.ListToolCallLogsRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.ListToolCallLogsResponse.FromString, + ) + self.GetToolCallLog = channel.unary_unary( + '/scalekit.v1.agentkit_logs.AgentkitLogsService/GetToolCallLog', + request_serializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.GetToolCallLogRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.ToolCallLog.FromString, + ) + + +class AgentkitLogsServiceServicer(object): + """Missing associated documentation comment in .proto file.""" + + def ListToolCallLogs(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetToolCallLog(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_AgentkitLogsServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'ListToolCallLogs': grpc.unary_unary_rpc_method_handler( + servicer.ListToolCallLogs, + request_deserializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.ListToolCallLogsRequest.FromString, + response_serializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.ListToolCallLogsResponse.SerializeToString, + ), + 'GetToolCallLog': grpc.unary_unary_rpc_method_handler( + servicer.GetToolCallLog, + request_deserializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.GetToolCallLogRequest.FromString, + response_serializer=scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.ToolCallLog.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'scalekit.v1.agentkit_logs.AgentkitLogsService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + # This class is part of an EXPERIMENTAL API. +class AgentkitLogsService(object): + """Missing associated documentation comment in .proto file.""" + + @staticmethod + def ListToolCallLogs(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.agentkit_logs.AgentkitLogsService/ListToolCallLogs', + scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.ListToolCallLogsRequest.SerializeToString, + scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.ListToolCallLogsResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def GetToolCallLog(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.agentkit_logs.AgentkitLogsService/GetToolCallLog', + scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.GetToolCallLogRequest.SerializeToString, + scalekit_dot_v1_dot_agentkit__logs_dot_agentkit__logs__pb2.ToolCallLog.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/auditlogs/auditlogs_pb2.py b/scalekit/v1/auditlogs/auditlogs_pb2.py index 9417e8c..58d34a5 100644 --- a/scalekit/v1/auditlogs/auditlogs_pb2.py +++ b/scalekit/v1/auditlogs/auditlogs_pb2.py @@ -14,12 +14,13 @@ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 +from google.api import visibility_pb2 as google_dot_api_dot_visibility__pb2 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 from protoc_gen_openapiv2.options import annotations_pb2 as protoc__gen__openapiv2_dot_options_dot_annotations__pb2 from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%scalekit/v1/auditlogs/auditlogs.proto\x12\x15scalekit.v1.auditlogs\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\xb0\x03\n\x12ListAuthLogRequest\x12\x1b\n\tpage_size\x18\x01 \x01(\rR\x08pageSize\x12\x1d\n\npage_token\x18\x02 \x01(\tR\tpageToken\x12\x14\n\x05\x65mail\x18\x03 \x01(\tR\x05\x65mail\x12\x16\n\x06status\x18\x04 \x03(\tR\x06status\x12\x39\n\nstart_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartTime\x12\x35\n\x08\x65nd_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x65ndTime\x12\x1f\n\x0bresource_id\x18\x07 \x01(\tR\nresourceId\x12@\n\x1c\x63onnected_account_identifier\x18\x08 \x01(\tR\x1a\x63onnectedAccountIdentifier\x12[\n\tclient_id\x18\t \x01(\tB>\x92\x41;2\'Filter authentication logs by client IDJ\x10\"skc_1234567890\"R\x08\x63lientId\"\xcf\x01\n\x13ListAuthLogResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12&\n\x0fprev_page_token\x18\x02 \x01(\tR\rprevPageToken\x12\x1d\n\ntotal_size\x18\x03 \x01(\rR\ttotalSize\x12I\n\x0c\x61uthRequests\x18\x04 \x03(\x0b\x32%.scalekit.v1.auditlogs.AuthLogRequestR\x0c\x61uthRequests\"\xc5\x07\n\x0e\x41uthLogRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12%\n\x0e\x65nvironment_id\x18\x02 \x01(\tR\renvironmentId\x12#\n\rconnection_id\x18\x03 \x01(\tR\x0c\x63onnectionId\x12&\n\x0f\x61uth_request_id\x18\x04 \x01(\tR\rauthRequestId\x12\x14\n\x05\x65mail\x18\x05 \x01(\tR\x05\x65mail\x12\'\n\x0f\x63onnection_type\x18\x06 \x01(\tR\x0e\x63onnectionType\x12/\n\x13\x63onnection_provider\x18\x07 \x01(\tR\x12\x63onnectionProvider\x12\x16\n\x06status\x18\x08 \x01(\tR\x06status\x12\x38\n\ttimestamp\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ttimestamp\x12W\n\x12\x63onnection_details\x18\n \x03(\x0b\x32(.scalekit.v1.auditlogs.ConnectionDetailsR\x11\x63onnectionDetails\x12\x1a\n\x08workflow\x18\x0b \x01(\tR\x08workflow\x12\x1f\n\x0bresource_id\x18\x0c \x01(\tR\nresourceId\x12#\n\rresource_name\x18\r \x01(\tR\x0cresourceName\x12#\n\rresource_type\x18\x0e \x01(\tR\x0cresourceType\x12@\n\x1c\x63onnected_account_identifier\x18\x0f \x01(\tR\x1a\x63onnectedAccountIdentifier\x12}\n\tclient_id\x18\x10 \x01(\tB`\x92\x41]2IUnique identifier of the client associated with this authentication eventJ\x10\"skc_1234567890\"R\x08\x63lientId\x12K\n\x0b\x63lient_name\x18\x11 \x01(\tB*\x92\x41\'2\x1a\x44isplay name of the clientJ\t\"Default\"R\nclientName\x12\x66\n\x0b\x63lient_type\x18\x12 \x01(\tBE\x92\x41\x42\x32\x39Type of the client application (e.g., WEB, NTV, SPA, M2M)J\x05\"WEB\"R\nclientType\"\xbb\x01\n\x11\x43onnectionDetails\x12#\n\rconnection_id\x18\x01 \x01(\tR\x0c\x63onnectionId\x12\'\n\x0forganization_id\x18\x02 \x01(\tR\x0eorganizationId\x12\'\n\x0f\x63onnection_type\x18\x03 \x01(\tR\x0e\x63onnectionType\x12/\n\x13\x63onnection_provider\x18\x04 \x01(\tR\x12\x63onnectionProvider2\xb2\x01\n\x10\x41uditLogsService\x12\x9d\x01\n\x10ListAuthRequests\x12).scalekit.v1.auditlogs.ListAuthLogRequest\x1a*.scalekit.v1.auditlogs.ListAuthLogResponse\"2\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02&\x12$/api/v1/logs/authentication/requestsB5Z3github.com/scalekit-inc/scalekit/pkg/grpc/auditlogsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%scalekit/v1/auditlogs/auditlogs.proto\x12\x15scalekit.v1.auditlogs\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\xb0\x03\n\x12ListAuthLogRequest\x12\x1b\n\tpage_size\x18\x01 \x01(\rR\x08pageSize\x12\x1d\n\npage_token\x18\x02 \x01(\tR\tpageToken\x12\x14\n\x05\x65mail\x18\x03 \x01(\tR\x05\x65mail\x12\x16\n\x06status\x18\x04 \x03(\tR\x06status\x12\x39\n\nstart_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartTime\x12\x35\n\x08\x65nd_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x65ndTime\x12\x1f\n\x0bresource_id\x18\x07 \x01(\tR\nresourceId\x12@\n\x1c\x63onnected_account_identifier\x18\x08 \x01(\tR\x1a\x63onnectedAccountIdentifier\x12[\n\tclient_id\x18\t \x01(\tB>\x92\x41;2\'Filter authentication logs by client IDJ\x10\"skc_1234567890\"R\x08\x63lientId\"\xcf\x01\n\x13ListAuthLogResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12&\n\x0fprev_page_token\x18\x02 \x01(\tR\rprevPageToken\x12\x1d\n\ntotal_size\x18\x03 \x01(\rR\ttotalSize\x12I\n\x0c\x61uthRequests\x18\x04 \x03(\x0b\x32%.scalekit.v1.auditlogs.AuthLogRequestR\x0c\x61uthRequests\"\xc5\x07\n\x0e\x41uthLogRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12%\n\x0e\x65nvironment_id\x18\x02 \x01(\tR\renvironmentId\x12#\n\rconnection_id\x18\x03 \x01(\tR\x0c\x63onnectionId\x12&\n\x0f\x61uth_request_id\x18\x04 \x01(\tR\rauthRequestId\x12\x14\n\x05\x65mail\x18\x05 \x01(\tR\x05\x65mail\x12\'\n\x0f\x63onnection_type\x18\x06 \x01(\tR\x0e\x63onnectionType\x12/\n\x13\x63onnection_provider\x18\x07 \x01(\tR\x12\x63onnectionProvider\x12\x16\n\x06status\x18\x08 \x01(\tR\x06status\x12\x38\n\ttimestamp\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ttimestamp\x12W\n\x12\x63onnection_details\x18\n \x03(\x0b\x32(.scalekit.v1.auditlogs.ConnectionDetailsR\x11\x63onnectionDetails\x12\x1a\n\x08workflow\x18\x0b \x01(\tR\x08workflow\x12\x1f\n\x0bresource_id\x18\x0c \x01(\tR\nresourceId\x12#\n\rresource_name\x18\r \x01(\tR\x0cresourceName\x12#\n\rresource_type\x18\x0e \x01(\tR\x0cresourceType\x12@\n\x1c\x63onnected_account_identifier\x18\x0f \x01(\tR\x1a\x63onnectedAccountIdentifier\x12}\n\tclient_id\x18\x10 \x01(\tB`\x92\x41]2IUnique identifier of the client associated with this authentication eventJ\x10\"skc_1234567890\"R\x08\x63lientId\x12K\n\x0b\x63lient_name\x18\x11 \x01(\tB*\x92\x41\'2\x1a\x44isplay name of the clientJ\t\"Default\"R\nclientName\x12\x66\n\x0b\x63lient_type\x18\x12 \x01(\tBE\x92\x41\x42\x32\x39Type of the client application (e.g., ENV, NTV, SPA, M2M)J\x05\"ENV\"R\nclientType\"\xbb\x01\n\x11\x43onnectionDetails\x12#\n\rconnection_id\x18\x01 \x01(\tR\x0c\x63onnectionId\x12\'\n\x0forganization_id\x18\x02 \x01(\tR\x0eorganizationId\x12\'\n\x0f\x63onnection_type\x18\x03 \x01(\tR\x0e\x63onnectionType\x12/\n\x13\x63onnection_provider\x18\x04 \x01(\tR\x12\x63onnectionProvider2\xc1\x01\n\x10\x41uditLogsService\x12\xac\x01\n\x10ListAuthRequests\x12).scalekit.v1.auditlogs.ListAuthLogRequest\x1a*.scalekit.v1.auditlogs.ListAuthLogResponse\"A\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02&\x12$/api/v1/logs/authentication/requestsB5Z3github.com/scalekit-inc/scalekit/pkg/grpc/auditlogsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -34,17 +35,17 @@ _globals['_AUTHLOGREQUEST'].fields_by_name['client_name']._loaded_options = None _globals['_AUTHLOGREQUEST'].fields_by_name['client_name']._serialized_options = b'\222A\'2\032Display name of the clientJ\t\"Default\"' _globals['_AUTHLOGREQUEST'].fields_by_name['client_type']._loaded_options = None - _globals['_AUTHLOGREQUEST'].fields_by_name['client_type']._serialized_options = b'\222AB29Type of the client application (e.g., WEB, NTV, SPA, M2M)J\005\"WEB\"' + _globals['_AUTHLOGREQUEST'].fields_by_name['client_type']._serialized_options = b'\222AB29Type of the client application (e.g., ENV, NTV, SPA, M2M)J\005\"ENV\"' _globals['_AUDITLOGSSERVICE'].methods_by_name['ListAuthRequests']._loaded_options = None - _globals['_AUDITLOGSSERVICE'].methods_by_name['ListAuthRequests']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002&\022$/api/v1/logs/authentication/requests' - _globals['_LISTAUTHLOGREQUEST']._serialized_start=240 - _globals['_LISTAUTHLOGREQUEST']._serialized_end=672 - _globals['_LISTAUTHLOGRESPONSE']._serialized_start=675 - _globals['_LISTAUTHLOGRESPONSE']._serialized_end=882 - _globals['_AUTHLOGREQUEST']._serialized_start=885 - _globals['_AUTHLOGREQUEST']._serialized_end=1850 - _globals['_CONNECTIONDETAILS']._serialized_start=1853 - _globals['_CONNECTIONDETAILS']._serialized_end=2040 - _globals['_AUDITLOGSSERVICE']._serialized_start=2043 - _globals['_AUDITLOGSSERVICE']._serialized_end=2221 + _globals['_AUDITLOGSSERVICE'].methods_by_name['ListAuthRequests']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002&\022$/api/v1/logs/authentication/requests' + _globals['_LISTAUTHLOGREQUEST']._serialized_start=269 + _globals['_LISTAUTHLOGREQUEST']._serialized_end=701 + _globals['_LISTAUTHLOGRESPONSE']._serialized_start=704 + _globals['_LISTAUTHLOGRESPONSE']._serialized_end=911 + _globals['_AUTHLOGREQUEST']._serialized_start=914 + _globals['_AUTHLOGREQUEST']._serialized_end=1879 + _globals['_CONNECTIONDETAILS']._serialized_start=1882 + _globals['_CONNECTIONDETAILS']._serialized_end=2069 + _globals['_AUDITLOGSSERVICE']._serialized_start=2072 + _globals['_AUDITLOGSSERVICE']._serialized_end=2265 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/auditlogs/auditlogs_pb2.pyi b/scalekit/v1/auditlogs/auditlogs_pb2.pyi index ad034a0..184d0ed 100644 --- a/scalekit/v1/auditlogs/auditlogs_pb2.pyi +++ b/scalekit/v1/auditlogs/auditlogs_pb2.pyi @@ -1,5 +1,6 @@ from buf.validate import validate_pb2 as _validate_pb2 from google.api import annotations_pb2 as _annotations_pb2 +from google.api import visibility_pb2 as _visibility_pb2 from google.protobuf import timestamp_pb2 as _timestamp_pb2 from protoc_gen_openapiv2.options import annotations_pb2 as _annotations_pb2_1 from scalekit.v1.options import options_pb2 as _options_pb2 diff --git a/scalekit/v1/auth/auth_pb2.py b/scalekit/v1/auth/auth_pb2.py index 17fef01..f7dfa04 100644 --- a/scalekit/v1/auth/auth_pb2.py +++ b/scalekit/v1/auth/auth_pb2.py @@ -25,7 +25,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bscalekit/v1/auth/auth.proto\x12\x10scalekit.v1.auth\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a)scalekit/v1/connections/connections.proto\x1a!scalekit/v1/options/options.proto\"0\n\x16ListAuthMethodsRequest\x12\x16\n\x06intent\x18\x01 \x01(\tR\x06intent\"Z\n\x17ListAuthMethodsResponse\x12?\n\x0c\x61uth_methods\x18\x01 \x03(\x0b\x32\x1c.scalekit.v1.auth.AuthMethodR\x0b\x61uthMethods\"\x89\t\n\nAuthMethod\x12}\n\rconnection_id\x18\x01 \x01(\tBX\x92\x41L22Unique identifier for the connection to be toggledJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\x12P\n\x0f\x63onnection_type\x18\x02 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeR\x0e\x63onnectionType\x12\x1a\n\x08provider\x18\x03 \x01(\tR\x08provider\x12\x93\x01\n\x13\x61uth_initiation_uri\x18\x04 \x01(\tBc\x92\x41V2\x1eURI to initiate the connectionJ4\"https://sso.acmecorp.com/sso/v1/oidc/conn_123/init\"\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x11\x61uthInitiationUri\x12z\n\x11passwordless_type\x18\x05 \x01(\x0e\x32).scalekit.v1.connections.PasswordlessTypeB\x1d\x92\x41\x1a\x32\x11Passwordless typeJ\x05\"OTP\"H\x00R\x10passwordlessType\x88\x01\x01\x12W\n\x15\x63ode_challenge_length\x18\x06 \x01(\rB\x1e\x92\x41\x1b\x32\x16Length of the OTP codeJ\x01\x36H\x01R\x13\x63odeChallengeLength\x88\x01\x01\x12\xa3\x01\n!enable_webauthn_auto_registration\x18\x07 \x01(\x08\x42S\x92\x41P2GIndicates if WebAuthn auto-registration is enabled for this auth method:\x05\x66\x61lseH\x02R\x1e\x65nableWebauthnAutoRegistration\x88\x01\x01\x12\x63\n\x13show_passkey_button\x18\x08 \x01(\x08\x42.\x92\x41+2#Show passkey button on login screen:\x04trueH\x03R\x11showPasskeyButton\x88\x01\x01\x12\x83\x01\n!enable_webauthn_conditional_login\x18\t \x01(\x08\x42\x33\x92\x41\x30\x32(Allow autofill of passkeys in login page:\x04trueH\x04R\x1e\x65nableWebauthnConditionalLogin\x88\x01\x01\x42\x14\n\x12_passwordless_typeB\x18\n\x16_code_challenge_lengthB$\n\"_enable_webauthn_auto_registrationB\x16\n\x14_show_passkey_buttonB$\n\"_enable_webauthn_conditional_login\"m\n\x1a\x44iscoveryAuthMethodRequest\x12O\n\x11\x64iscovery_request\x18\x02 \x01(\x0b\x32\".scalekit.v1.auth.DiscoveryRequestR\x10\x64iscoveryRequest\"\xb3\x01\n\x10\x44iscoveryRequest\x12\x63\n\x05\x65mail\x18\x01 \x01(\tBM\x92\x41\x41\x32*user identifier like email or phone numberJ\x13\"john@acmecorp.com\"\xbaH\x06r\x04\x10\x03\x18\x64R\x05\x65mail\x12:\n\x06intent\x18\x02 \x01(\x0e\x32\x18.scalekit.v1.auth.IntentB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x06intent\"\\\n\x1b\x44iscoveryAuthMethodResponse\x12=\n\x0b\x61uth_method\x18\x01 \x01(\x0b\x32\x1c.scalekit.v1.auth.AuthMethodR\nauthMethod\"\x1e\n\x1cGetAuthCustomizationsRequest\"\xab\x01\n\x0ePortalSettings\x12\x98\x01\n\x0f\x63ustom_branding\x18\x01 \x01(\x08\x42o\x92\x41l2dIndicates whether custom portal branding is enabled for this workspace based on billing subscriptionJ\x04trueR\x0e\x63ustomBranding\"\xb2\x01\n\x1dGetAuthCustomizationsResponse\x12N\n\x16\x63ustomization_settings\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\x15\x63ustomizationSettings\x12\x41\n\x08settings\x18\x03 \x01(\x0b\x32 .scalekit.v1.auth.PortalSettingsB\x03\xe0\x41\x03R\x08settings\"N\n\x17GetAuthFeaturesResponse\x12\x33\n\x08\x66\x65\x61tures\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x08\x66\x65\x61tures\"U\n\x1cVerifyPasswordLessOtpRequest\x12\x35\n\x07otp_req\x18\x02 \x01(\x0b\x32\x1c.scalekit.v1.auth.OTPRequestR\x06otpReq\"\x1f\n\x1dVerifyPasswordLessOtpResponse\"i\n\nOTPRequest\x12[\n\x0e\x63ode_challenge\x18\x01 \x01(\tB4\x92\x41(2\x1cOTP sent to the user\'s emailJ\x08\"123456\"\xbaH\x06r\x04\x10\x05\x18\x06R\rcodeChallenge\"\xd4\x01\n\x1dListUserOrganizationsResponse\x12\x44\n\rorganizations\x18\x01 \x03(\x0b\x32\x1e.scalekit.v1.auth.OrganizationR\rorganizations\x12\x31\n\x04user\x18\x02 \x01(\x0b\x32\x1d.scalekit.v1.auth.UserDetailsR\x04user\x12:\n\x06intent\x18\x03 \x01(\x0e\x32\x18.scalekit.v1.auth.IntentB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x06intent\"\x8b\x04\n\x0cOrganization\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12+\n\x11membership_status\x18\x03 \x01(\tR\x10membershipStatus\x12=\n\x18invitation_inviter_email\x18\x04 \x01(\tH\x00R\x16invitationInviterEmail\x88\x01\x01\x12U\n\x16invitation_accepted_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\x14invitationAcceptedAt\x88\x01\x01\x12S\n\x15invitation_created_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02R\x13invitationCreatedAt\x88\x01\x01\x12S\n\x15invitation_expires_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x03R\x13invitationExpiresAt\x88\x01\x01\x42\x1b\n\x19_invitation_inviter_emailB\x19\n\x17_invitation_accepted_atB\x18\n\x16_invitation_created_atB\x18\n\x16_invitation_expires_at\"_\n\x0bUserDetails\x12\x14\n\x05\x65mail\x18\x01 \x01(\tR\x05\x65mail\x12\x1d\n\nfirst_name\x18\x02 \x01(\tR\tfirstName\x12\x1b\n\tlast_name\x18\x03 \x01(\tR\x08lastName\"\xc4\x01\n\x19SignupOrganizationRequest\x12+\n\x11organization_name\x18\x01 \x01(\tR\x10organizationName\x12\x1d\n\nfirst_name\x18\x02 \x01(\tR\tfirstName\x12\x1b\n\tlast_name\x18\x03 \x01(\tR\x08lastName\x12\x1b\n\tfull_name\x18\x04 \x01(\tR\x08\x66ullName\x12!\n\x0cphone_number\x18\x05 \x01(\tR\x0bphoneNumber\"r\n\x1aSignupOrganizationResponse\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12+\n\x11organization_name\x18\x02 \x01(\tR\x10organizationName\"\xd6\x02\n\x1dUpdateLoginUserDetailsRequest\x12v\n\rconnection_id\x18\x01 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\x12\x90\x01\n\x10login_request_id\x18\x02 \x01(\tBf\x92\x41]2BLogin Request ID that was shared as part of authorization initiateJ\x17\"lri_73415099636808061\"\xbaH\x03\xc8\x01\x01R\x0eloginRequestId\x12*\n\x04user\x18\x03 \x01(\x0b\x32\x16.scalekit.v1.auth.UserR\x04user\"\xe1\r\n\x04User\x12\x83\x01\n\x03sub\x18\x01 \x01(\tBq\x92\x41g2WSubject identifier for the user (typically a unique user ID from the identity provider)J\x0c\"1234567890\"\xbaH\x04r\x02\x10\x01R\x03sub\x12R\n\x05\x65mail\x18\x02 \x01(\tB<\x92\x41\x32\x32\x1cUser\'s primary email addressJ\x12\"user@example.com\"\xbaH\x04r\x02\x10\x01R\x05\x65mail\x12=\n\ngiven_name\x18\x03 \x01(\tB\x1e\x92\x41\x1b\x32\x11User\'s first nameJ\x06\"John\"R\tgivenName\x12=\n\x0b\x66\x61mily_name\x18\x04 \x01(\tB\x1c\x92\x41\x19\x32\x10User\'s last nameJ\x05\"Doe\"R\nfamilyName\x12\x88\x01\n\x0e\x65mail_verified\x18\x05 \x01(\x08\x42\x61\x92\x41^2VIndicates whether the user\'s email address has been verified by the identity provider.J\x04trueR\remailVerified\x12\x63\n\x0cphone_number\x18\x06 \x01(\tB@\x92\x41=2,User\'s primary phone number in E.164 format.J\r\"+1234567890\"R\x0bphoneNumber\x12\x95\x01\n\x15phone_number_verified\x18\x07 \x01(\x08\x42\x61\x92\x41^2UIndicates whether the user\'s phone number has been verified by the identity provider.J\x05\x66\x61lseR\x13phoneNumberVerified\x12\x42\n\x04name\x18\x08 \x01(\tB.\x92\x41+2\x1d\x46ull display name of the userJ\n\"John Doe\"R\x04name\x12\x62\n\x12preferred_username\x18\t \x01(\tB3\x92\x41\x30\x32#User\'s preferred username or handleJ\t\"johndoe\"R\x11preferredUsername\x12\x62\n\x07picture\x18\n \x01(\tBH\x92\x41\x45\x32!URL to the user\'s profile pictureJ \"https://example.com/avatar.jpg\"R\x07picture\x12X\n\x06gender\x18\x0b \x01(\tB@\x92\x41=23User\'s gender as reported by the identity provider.J\x06\"male\"R\x06gender\x12\x65\n\x06locale\x18\x0c \x01(\tBM\x92\x41J2?User\'s locale or language preference (IETF BCP 47 language tag)J\x07\"en-US\"R\x06locale\x12\x66\n\x06groups\x18\r \x03(\tBN\x92\x41K2/List of group names or IDs the user belongs to.J\x18[\"admins\", \"developers\"]R\x06groups\x12\xf2\x01\n\x11\x63ustom_attributes\x18\x0e \x01(\x0b\x32\x17.google.protobuf.StructB\xab\x01\x92\x41\xa7\x01\x32mCustom attributes for the user, represented as a key-value map. Used for additional identity provider claims.J6{\"department\": \"Engineering\", \"employee_id\": \"E12345\"}R\x10\x63ustomAttributes\x12\xb1\x01\n\x18organization_external_id\x18\x0f \x01(\tBr\x92\x41o2EIdentifier for the user\xe2\x80\x99s organization within the identity providerJ&\"132d085d-d89d-4a2e-95bb-49bde680d14f\"H\x00R\x16organizationExternalId\x88\x01\x01\x42\x1b\n\x19_organization_external_id\"\x85\x01\n\x14GetAuthStateResponse\x12:\n\nauth_state\x18\x01 \x01(\x0e\x32\x1b.scalekit.v1.auth.AuthStateR\tauthState\x12\x31\n\x04user\x18\x02 \x01(\x0b\x32\x1d.scalekit.v1.auth.UserDetailsR\x04user\"\x8c\x01\n\x13GetAuthErrorRequest\x12u\n\x08\x65rror_id\x18\x01 \x01(\tBZ\x92\x41H2.Unique identifier for the authentication errorJ\x16\"err_1234567890abcdef\"\xbaH\x0cr\n\x10\x01\x18@:\x04\x65rr_R\x07\x65rrorId\"Y\n\x14GetAuthErrorResponse\x12\x14\n\x05\x65rror\x18\x01 \x01(\tR\x05\x65rror\x12+\n\x11\x65rror_description\x18\x02 \x01(\tR\x10\x65rrorDescription*:\n\x06Intent\x12\x16\n\x12INTENT_UNSPECIFIED\x10\x00\x12\x0b\n\x07sign_in\x10\x01\x12\x0b\n\x07sign_up\x10\x02*\xb4\x04\n\tAuthState\x12\x1a\n\x16\x41UTH_STATE_UNSPECIFIED\x10\x00\x12\x1e\n\x1a\x41UTHENTICATION_IN_PROGRESS\x10\x01\x12\x19\n\x15ORGANIZATION_SWITCHER\x10\x02\x12\x19\n\x15ORGANIZATION_SELECTED\x10\x03\x12\x17\n\x13ORGANIZATION_SIGNUP\x10\x04\x12 \n\x1cORGANIZATION_SWITCHER_SIGNUP\x10\x05\x12\x1c\n\x18OTP_VERIFICATION_PENDING\x10\x06\x12\x13\n\x0fMAGIC_LINK_SENT\x10\x07\x12&\n\"LINK_SENT_OTP_VERIFICATION_PENDING\x10\x08\x12\x10\n\x0cOTP_VERIFIED\x10\t\x12\x11\n\rLINK_VERIFIED\x10\n\x12\x15\n\x11SSO_AUTHENTICATED\x10\x0b\x12\x14\n\x10ORG_USER_CREATED\x10\x0c\x12\x1c\n\x18\x41UTHENTICATION_COMPLETED\x10\r\x12\x19\n\x15\x41UTHENTICATION_FAILED\x10\x0e\x12\x15\n\x11WEBAUTHN_VERIFIED\x10\x0f\x12 \n\x1cVERIFICATION_MAGIC_LINK_SENT\x10\x10\x12$\n VERIFICATION_MAGIC_LINK_OTP_SENT\x10\x11\x12\x19\n\x15VERIFICATION_OTP_SENT\x10\x12\x12\x1a\n\x16VERIFICATION_COMPLETED\x10\x13\x32\xa7\x10\n\x0b\x41uthService\x12\x98\x01\n\x0fListAuthMethods\x12(.scalekit.v1.auth.ListAuthMethodsRequest\x1a).scalekit.v1.auth.ListAuthMethodsResponse\"0\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\x12\x13/api/v1/authmethods\x12\xba\x01\n\x13\x44iscoveryAuthMethod\x12,.scalekit.v1.auth.DiscoveryAuthMethodRequest\x1a-.scalekit.v1.auth.DiscoveryAuthMethodResponse\"F\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02+\"\x16/api/v1/auth:discovery:\x11\x64iscovery_request\x12\xc0\x01\n\x15VerifyPasswordLessOtp\x12..scalekit.v1.auth.VerifyPasswordLessOtpRequest\x1a/.scalekit.v1.auth.VerifyPasswordLessOtpResponse\"F\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02+\" /api/v1/auth/passwordless:verify:\x07otp_req\x12\x83\x01\n\x12ResendPasswordless\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"=\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\"\" /api/v1/auth/passwordless:resend\x12\x99\x01\n\x15ListUserOrganizations\x12\x16.google.protobuf.Empty\x1a/.scalekit.v1.auth.ListUserOrganizationsResponse\"7\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/auth:organizations\x12\xa4\x01\n\x12SignupOrganization\x12+.scalekit.v1.auth.SignupOrganizationRequest\x1a,.scalekit.v1.auth.SignupOrganizationResponse\"3\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x18\"\x13/api/v1/auth:signup:\x01*\x12\x7f\n\x0cGetAuthState\x12\x16.google.protobuf.Empty\x1a&.scalekit.v1.auth.GetAuthStateResponse\"/\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x14\x12\x12/api/v1/auth/state\x12\xb6\x01\n\x0cGetAuthError\x12%.scalekit.v1.auth.GetAuthErrorRequest\x1a&.scalekit.v1.auth.GetAuthErrorResponse\"W\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02<\x12\x19/api/v1/errors/{error_id}Z\x1f\x12\x1d/api/v1/auth/error/{error_id}\x12j\n\x06Logout\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"0\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\"\x13/api/v1/auth/logout\x12\xb2\x01\n\x15GetAuthCustomizations\x12..scalekit.v1.auth.GetAuthCustomizationsRequest\x1a/.scalekit.v1.auth.GetAuthCustomizationsResponse\"8\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1d\x12\x1b/api/v1/auth:customizations\x12\x88\x01\n\x0fGetAuthFeatures\x12\x16.google.protobuf.Empty\x1a).scalekit.v1.auth.GetAuthFeaturesResponse\"2\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x17\x12\x15/api/v1/auth:features\x12\xcd\x02\n\x16UpdateLoginUserDetails\x12/.scalekit.v1.auth.UpdateLoginUserDetailsRequest\x1a\x16.google.protobuf.Empty\"\xe9\x01\x92\x41z\n\x0b\x43onnections\x12%Update User Details for login request\x1a%Update User Details for login requestJ\x1d\n\x03\x32\x30\x30\x12\x16\n\x14\x44\x65leted Successfully\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02Q\"I/api/v1/connections/{connection_id}/auth-requests/{login_request_id}/user:\x04userB0Z.github.com/scalekit-inc/scalekit/pkg/grpc/authb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bscalekit/v1/auth/auth.proto\x12\x10scalekit.v1.auth\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a)scalekit/v1/connections/connections.proto\x1a!scalekit/v1/options/options.proto\"0\n\x16ListAuthMethodsRequest\x12\x16\n\x06intent\x18\x01 \x01(\tR\x06intent\"Z\n\x17ListAuthMethodsResponse\x12?\n\x0c\x61uth_methods\x18\x01 \x03(\x0b\x32\x1c.scalekit.v1.auth.AuthMethodR\x0b\x61uthMethods\"\x89\t\n\nAuthMethod\x12}\n\rconnection_id\x18\x01 \x01(\tBX\x92\x41L22Unique identifier for the connection to be toggledJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\x12P\n\x0f\x63onnection_type\x18\x02 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeR\x0e\x63onnectionType\x12\x1a\n\x08provider\x18\x03 \x01(\tR\x08provider\x12\x93\x01\n\x13\x61uth_initiation_uri\x18\x04 \x01(\tBc\x92\x41V2\x1eURI to initiate the connectionJ4\"https://sso.acmecorp.com/sso/v1/oidc/conn_123/init\"\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x11\x61uthInitiationUri\x12z\n\x11passwordless_type\x18\x05 \x01(\x0e\x32).scalekit.v1.connections.PasswordlessTypeB\x1d\x92\x41\x1a\x32\x11Passwordless typeJ\x05\"OTP\"H\x00R\x10passwordlessType\x88\x01\x01\x12W\n\x15\x63ode_challenge_length\x18\x06 \x01(\rB\x1e\x92\x41\x1b\x32\x16Length of the OTP codeJ\x01\x36H\x01R\x13\x63odeChallengeLength\x88\x01\x01\x12\xa3\x01\n!enable_webauthn_auto_registration\x18\x07 \x01(\x08\x42S\x92\x41P2GIndicates if WebAuthn auto-registration is enabled for this auth method:\x05\x66\x61lseH\x02R\x1e\x65nableWebauthnAutoRegistration\x88\x01\x01\x12\x63\n\x13show_passkey_button\x18\x08 \x01(\x08\x42.\x92\x41+2#Show passkey button on login screen:\x04trueH\x03R\x11showPasskeyButton\x88\x01\x01\x12\x83\x01\n!enable_webauthn_conditional_login\x18\t \x01(\x08\x42\x33\x92\x41\x30\x32(Allow autofill of passkeys in login page:\x04trueH\x04R\x1e\x65nableWebauthnConditionalLogin\x88\x01\x01\x42\x14\n\x12_passwordless_typeB\x18\n\x16_code_challenge_lengthB$\n\"_enable_webauthn_auto_registrationB\x16\n\x14_show_passkey_buttonB$\n\"_enable_webauthn_conditional_login\"m\n\x1a\x44iscoveryAuthMethodRequest\x12O\n\x11\x64iscovery_request\x18\x02 \x01(\x0b\x32\".scalekit.v1.auth.DiscoveryRequestR\x10\x64iscoveryRequest\"\xb3\x01\n\x10\x44iscoveryRequest\x12\x63\n\x05\x65mail\x18\x01 \x01(\tBM\x92\x41\x41\x32*user identifier like email or phone numberJ\x13\"john@acmecorp.com\"\xbaH\x06r\x04\x10\x03\x18\x64R\x05\x65mail\x12:\n\x06intent\x18\x02 \x01(\x0e\x32\x18.scalekit.v1.auth.IntentB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x06intent\"\\\n\x1b\x44iscoveryAuthMethodResponse\x12=\n\x0b\x61uth_method\x18\x01 \x01(\x0b\x32\x1c.scalekit.v1.auth.AuthMethodR\nauthMethod\"\x1e\n\x1cGetAuthCustomizationsRequest\"\x8f\x03\n\x0ePortalSettings\x12\x98\x01\n\x0f\x63ustom_branding\x18\x01 \x01(\x08\x42o\x92\x41l2dIndicates whether custom portal branding is enabled for this workspace based on billing subscriptionJ\x04trueR\x0e\x63ustomBranding\x12\xc5\x01\n\x17new_self_serve_sso_scim\x18\x02 \x01(\x08\x42\x89\x01\x92\x41\x85\x01\x32|Indicates whether the new self-serve SSO/SCIM flow should be shown in the hosted pages (rollout-driven, not billing-derived)J\x05\x66\x61lseH\x00R\x13newSelfServeSsoScim\x88\x01\x01\x42\x1a\n\x18_new_self_serve_sso_scim\"\xb2\x01\n\x1dGetAuthCustomizationsResponse\x12N\n\x16\x63ustomization_settings\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\x15\x63ustomizationSettings\x12\x41\n\x08settings\x18\x03 \x01(\x0b\x32 .scalekit.v1.auth.PortalSettingsB\x03\xe0\x41\x03R\x08settings\"N\n\x17GetAuthFeaturesResponse\x12\x33\n\x08\x66\x65\x61tures\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x08\x66\x65\x61tures\"U\n\x1cVerifyPasswordLessOtpRequest\x12\x35\n\x07otp_req\x18\x02 \x01(\x0b\x32\x1c.scalekit.v1.auth.OTPRequestR\x06otpReq\"\x1f\n\x1dVerifyPasswordLessOtpResponse\"i\n\nOTPRequest\x12[\n\x0e\x63ode_challenge\x18\x01 \x01(\tB4\x92\x41(2\x1cOTP sent to the user\'s emailJ\x08\"123456\"\xbaH\x06r\x04\x10\x05\x18\x06R\rcodeChallenge\"\xd4\x01\n\x1dListUserOrganizationsResponse\x12\x44\n\rorganizations\x18\x01 \x03(\x0b\x32\x1e.scalekit.v1.auth.OrganizationR\rorganizations\x12\x31\n\x04user\x18\x02 \x01(\x0b\x32\x1d.scalekit.v1.auth.UserDetailsR\x04user\x12:\n\x06intent\x18\x03 \x01(\x0e\x32\x18.scalekit.v1.auth.IntentB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x06intent\"\x8b\x04\n\x0cOrganization\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12+\n\x11membership_status\x18\x03 \x01(\tR\x10membershipStatus\x12=\n\x18invitation_inviter_email\x18\x04 \x01(\tH\x00R\x16invitationInviterEmail\x88\x01\x01\x12U\n\x16invitation_accepted_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\x14invitationAcceptedAt\x88\x01\x01\x12S\n\x15invitation_created_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02R\x13invitationCreatedAt\x88\x01\x01\x12S\n\x15invitation_expires_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x03R\x13invitationExpiresAt\x88\x01\x01\x42\x1b\n\x19_invitation_inviter_emailB\x19\n\x17_invitation_accepted_atB\x18\n\x16_invitation_created_atB\x18\n\x16_invitation_expires_at\"_\n\x0bUserDetails\x12\x14\n\x05\x65mail\x18\x01 \x01(\tR\x05\x65mail\x12\x1d\n\nfirst_name\x18\x02 \x01(\tR\tfirstName\x12\x1b\n\tlast_name\x18\x03 \x01(\tR\x08lastName\"\xc4\x01\n\x19SignupOrganizationRequest\x12+\n\x11organization_name\x18\x01 \x01(\tR\x10organizationName\x12\x1d\n\nfirst_name\x18\x02 \x01(\tR\tfirstName\x12\x1b\n\tlast_name\x18\x03 \x01(\tR\x08lastName\x12\x1b\n\tfull_name\x18\x04 \x01(\tR\x08\x66ullName\x12!\n\x0cphone_number\x18\x05 \x01(\tR\x0bphoneNumber\"r\n\x1aSignupOrganizationResponse\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12+\n\x11organization_name\x18\x02 \x01(\tR\x10organizationName\"\xd6\x02\n\x1dUpdateLoginUserDetailsRequest\x12v\n\rconnection_id\x18\x01 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\x12\x90\x01\n\x10login_request_id\x18\x02 \x01(\tBf\x92\x41]2BLogin Request ID that was shared as part of authorization initiateJ\x17\"lri_73415099636808061\"\xbaH\x03\xc8\x01\x01R\x0eloginRequestId\x12*\n\x04user\x18\x03 \x01(\x0b\x32\x16.scalekit.v1.auth.UserR\x04user\"\x95\x10\n\x04User\x12\x83\x01\n\x03sub\x18\x01 \x01(\tBq\x92\x41g2WSubject identifier for the user (typically a unique user ID from the identity provider)J\x0c\"1234567890\"\xbaH\x04r\x02\x10\x01R\x03sub\x12R\n\x05\x65mail\x18\x02 \x01(\tB<\x92\x41\x32\x32\x1cUser\'s primary email addressJ\x12\"user@example.com\"\xbaH\x04r\x02\x10\x01R\x05\x65mail\x12=\n\ngiven_name\x18\x03 \x01(\tB\x1e\x92\x41\x1b\x32\x11User\'s first nameJ\x06\"John\"R\tgivenName\x12=\n\x0b\x66\x61mily_name\x18\x04 \x01(\tB\x1c\x92\x41\x19\x32\x10User\'s last nameJ\x05\"Doe\"R\nfamilyName\x12\x88\x01\n\x0e\x65mail_verified\x18\x05 \x01(\x08\x42\x61\x92\x41^2VIndicates whether the user\'s email address has been verified by the identity provider.J\x04trueR\remailVerified\x12\x63\n\x0cphone_number\x18\x06 \x01(\tB@\x92\x41=2,User\'s primary phone number in E.164 format.J\r\"+1234567890\"R\x0bphoneNumber\x12\x95\x01\n\x15phone_number_verified\x18\x07 \x01(\x08\x42\x61\x92\x41^2UIndicates whether the user\'s phone number has been verified by the identity provider.J\x05\x66\x61lseR\x13phoneNumberVerified\x12\x42\n\x04name\x18\x08 \x01(\tB.\x92\x41+2\x1d\x46ull display name of the userJ\n\"John Doe\"R\x04name\x12\x62\n\x12preferred_username\x18\t \x01(\tB3\x92\x41\x30\x32#User\'s preferred username or handleJ\t\"johndoe\"R\x11preferredUsername\x12\x62\n\x07picture\x18\n \x01(\tBH\x92\x41\x45\x32!URL to the user\'s profile pictureJ \"https://example.com/avatar.jpg\"R\x07picture\x12X\n\x06gender\x18\x0b \x01(\tB@\x92\x41=23User\'s gender as reported by the identity provider.J\x06\"male\"R\x06gender\x12\x65\n\x06locale\x18\x0c \x01(\tBM\x92\x41J2?User\'s locale or language preference (IETF BCP 47 language tag)J\x07\"en-US\"R\x06locale\x12\x66\n\x06groups\x18\r \x03(\tBN\x92\x41K2/List of group names or IDs the user belongs to.J\x18[\"admins\", \"developers\"]R\x06groups\x12\xf2\x01\n\x11\x63ustom_attributes\x18\x0e \x01(\x0b\x32\x17.google.protobuf.StructB\xab\x01\x92\x41\xa7\x01\x32mCustom attributes for the user, represented as a key-value map. Used for additional identity provider claims.J6{\"department\": \"Engineering\", \"employee_id\": \"E12345\"}R\x10\x63ustomAttributes\x12\xb1\x01\n\x18organization_external_id\x18\x0f \x01(\tBr\x92\x41o2EIdentifier for the user\xe2\x80\x99s organization within the identity providerJ&\"132d085d-d89d-4a2e-95bb-49bde680d14f\"H\x00R\x16organizationExternalId\x88\x01\x01\x12S\n\x05roles\x18\x10 \x03(\tB=\x92\x41:2#List of roles assigned to the user.J\x13[\"admin\", \"editor\"]R\x05roles\x12\xbd\x01\n\x1aorganization_external_name\x18\x11 \x01(\tBz\x92\x41o2`Name of the organization the user is authenticating into. Used to display on the consent screen.J\x0b\"Acme Corp\"\xbaH\x05r\x03\x18\xc8\x01H\x01R\x18organizationExternalName\x88\x01\x01\x42\x1b\n\x19_organization_external_idB\x1d\n\x1b_organization_external_name\"\xb1\x02\n\x14GetAuthStateResponse\x12:\n\nauth_state\x18\x01 \x01(\x0e\x32\x1b.scalekit.v1.auth.AuthStateR\tauthState\x12\x31\n\x04user\x18\x02 \x01(\x0b\x32\x1d.scalekit.v1.auth.UserDetailsR\x04user\x12\xa9\x01\n\nlogin_hint\x18\x03 \x01(\tB\x89\x01\x92\x41\x85\x01\x32oLogin hint from the original authorize request. Typically an email address used to pre-fill the login UI input.J\x12\"user@example.com\"R\tloginHint\"\x8c\x01\n\x13GetAuthErrorRequest\x12u\n\x08\x65rror_id\x18\x01 \x01(\tBZ\x92\x41H2.Unique identifier for the authentication errorJ\x16\"err_1234567890abcdef\"\xbaH\x0cr\n\x10\x01\x18@:\x04\x65rr_R\x07\x65rrorId\"Y\n\x14GetAuthErrorResponse\x12\x14\n\x05\x65rror\x18\x01 \x01(\tR\x05\x65rror\x12+\n\x11\x65rror_description\x18\x02 \x01(\tR\x10\x65rrorDescription*:\n\x06Intent\x12\x16\n\x12INTENT_UNSPECIFIED\x10\x00\x12\x0b\n\x07sign_in\x10\x01\x12\x0b\n\x07sign_up\x10\x02*\xb4\x04\n\tAuthState\x12\x1a\n\x16\x41UTH_STATE_UNSPECIFIED\x10\x00\x12\x1e\n\x1a\x41UTHENTICATION_IN_PROGRESS\x10\x01\x12\x19\n\x15ORGANIZATION_SWITCHER\x10\x02\x12\x19\n\x15ORGANIZATION_SELECTED\x10\x03\x12\x17\n\x13ORGANIZATION_SIGNUP\x10\x04\x12 \n\x1cORGANIZATION_SWITCHER_SIGNUP\x10\x05\x12\x1c\n\x18OTP_VERIFICATION_PENDING\x10\x06\x12\x13\n\x0fMAGIC_LINK_SENT\x10\x07\x12&\n\"LINK_SENT_OTP_VERIFICATION_PENDING\x10\x08\x12\x10\n\x0cOTP_VERIFIED\x10\t\x12\x11\n\rLINK_VERIFIED\x10\n\x12\x15\n\x11SSO_AUTHENTICATED\x10\x0b\x12\x14\n\x10ORG_USER_CREATED\x10\x0c\x12\x1c\n\x18\x41UTHENTICATION_COMPLETED\x10\r\x12\x19\n\x15\x41UTHENTICATION_FAILED\x10\x0e\x12\x15\n\x11WEBAUTHN_VERIFIED\x10\x0f\x12 \n\x1cVERIFICATION_MAGIC_LINK_SENT\x10\x10\x12$\n VERIFICATION_MAGIC_LINK_OTP_SENT\x10\x11\x12\x19\n\x15VERIFICATION_OTP_SENT\x10\x12\x12\x1a\n\x16VERIFICATION_COMPLETED\x10\x13\x32\xa7\x10\n\x0b\x41uthService\x12\x98\x01\n\x0fListAuthMethods\x12(.scalekit.v1.auth.ListAuthMethodsRequest\x1a).scalekit.v1.auth.ListAuthMethodsResponse\"0\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\x12\x13/api/v1/authmethods\x12\xba\x01\n\x13\x44iscoveryAuthMethod\x12,.scalekit.v1.auth.DiscoveryAuthMethodRequest\x1a-.scalekit.v1.auth.DiscoveryAuthMethodResponse\"F\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02+\"\x16/api/v1/auth:discovery:\x11\x64iscovery_request\x12\xc0\x01\n\x15VerifyPasswordLessOtp\x12..scalekit.v1.auth.VerifyPasswordLessOtpRequest\x1a/.scalekit.v1.auth.VerifyPasswordLessOtpResponse\"F\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02+\" /api/v1/auth/passwordless:verify:\x07otp_req\x12\x83\x01\n\x12ResendPasswordless\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"=\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\"\" /api/v1/auth/passwordless:resend\x12\x99\x01\n\x15ListUserOrganizations\x12\x16.google.protobuf.Empty\x1a/.scalekit.v1.auth.ListUserOrganizationsResponse\"7\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/auth:organizations\x12\xa4\x01\n\x12SignupOrganization\x12+.scalekit.v1.auth.SignupOrganizationRequest\x1a,.scalekit.v1.auth.SignupOrganizationResponse\"3\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x18\"\x13/api/v1/auth:signup:\x01*\x12\x7f\n\x0cGetAuthState\x12\x16.google.protobuf.Empty\x1a&.scalekit.v1.auth.GetAuthStateResponse\"/\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x14\x12\x12/api/v1/auth/state\x12\xb6\x01\n\x0cGetAuthError\x12%.scalekit.v1.auth.GetAuthErrorRequest\x1a&.scalekit.v1.auth.GetAuthErrorResponse\"W\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02<\x12\x19/api/v1/errors/{error_id}Z\x1f\x12\x1d/api/v1/auth/error/{error_id}\x12j\n\x06Logout\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"0\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\"\x13/api/v1/auth/logout\x12\xb2\x01\n\x15GetAuthCustomizations\x12..scalekit.v1.auth.GetAuthCustomizationsRequest\x1a/.scalekit.v1.auth.GetAuthCustomizationsResponse\"8\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1d\x12\x1b/api/v1/auth:customizations\x12\x88\x01\n\x0fGetAuthFeatures\x12\x16.google.protobuf.Empty\x1a).scalekit.v1.auth.GetAuthFeaturesResponse\"2\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x17\x12\x15/api/v1/auth:features\x12\xcd\x02\n\x16UpdateLoginUserDetails\x12/.scalekit.v1.auth.UpdateLoginUserDetailsRequest\x1a\x16.google.protobuf.Empty\"\xe9\x01\x92\x41z\n\x0b\x43onnections\x12%Update User Details for login request\x1a%Update User Details for login requestJ\x1d\n\x03\x32\x30\x30\x12\x16\n\x14\x44\x65leted Successfully\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02Q\"I/api/v1/connections/{connection_id}/auth-requests/{login_request_id}/user:\x04userB0Z.github.com/scalekit-inc/scalekit/pkg/grpc/authb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -53,6 +53,8 @@ _globals['_DISCOVERYREQUEST'].fields_by_name['intent']._serialized_options = b'\272H\005\202\001\002\020\001' _globals['_PORTALSETTINGS'].fields_by_name['custom_branding']._loaded_options = None _globals['_PORTALSETTINGS'].fields_by_name['custom_branding']._serialized_options = b'\222Al2dIndicates whether custom portal branding is enabled for this workspace based on billing subscriptionJ\004true' + _globals['_PORTALSETTINGS'].fields_by_name['new_self_serve_sso_scim']._loaded_options = None + _globals['_PORTALSETTINGS'].fields_by_name['new_self_serve_sso_scim']._serialized_options = b'\222A\205\0012|Indicates whether the new self-serve SSO/SCIM flow should be shown in the hosted pages (rollout-driven, not billing-derived)J\005false' _globals['_GETAUTHCUSTOMIZATIONSRESPONSE'].fields_by_name['settings']._loaded_options = None _globals['_GETAUTHCUSTOMIZATIONSRESPONSE'].fields_by_name['settings']._serialized_options = b'\340A\003' _globals['_OTPREQUEST'].fields_by_name['code_challenge']._loaded_options = None @@ -93,6 +95,12 @@ _globals['_USER'].fields_by_name['custom_attributes']._serialized_options = b'\222A\247\0012mCustom attributes for the user, represented as a key-value map. Used for additional identity provider claims.J6{\"department\": \"Engineering\", \"employee_id\": \"E12345\"}' _globals['_USER'].fields_by_name['organization_external_id']._loaded_options = None _globals['_USER'].fields_by_name['organization_external_id']._serialized_options = b'\222Ao2EIdentifier for the user\342\200\231s organization within the identity providerJ&\"132d085d-d89d-4a2e-95bb-49bde680d14f\"' + _globals['_USER'].fields_by_name['roles']._loaded_options = None + _globals['_USER'].fields_by_name['roles']._serialized_options = b'\222A:2#List of roles assigned to the user.J\023[\"admin\", \"editor\"]' + _globals['_USER'].fields_by_name['organization_external_name']._loaded_options = None + _globals['_USER'].fields_by_name['organization_external_name']._serialized_options = b'\222Ao2`Name of the organization the user is authenticating into. Used to display on the consent screen.J\013\"Acme Corp\"\272H\005r\003\030\310\001' + _globals['_GETAUTHSTATERESPONSE'].fields_by_name['login_hint']._loaded_options = None + _globals['_GETAUTHSTATERESPONSE'].fields_by_name['login_hint']._serialized_options = b'\222A\205\0012oLogin hint from the original authorize request. Typically an email address used to pre-fill the login UI input.J\022\"user@example.com\"' _globals['_GETAUTHERRORREQUEST'].fields_by_name['error_id']._loaded_options = None _globals['_GETAUTHERRORREQUEST'].fields_by_name['error_id']._serialized_options = b'\222AH2.Unique identifier for the authentication errorJ\026\"err_1234567890abcdef\"\272H\014r\n\020\001\030@:\004err_' _globals['_AUTHSERVICE'].methods_by_name['ListAuthMethods']._loaded_options = None @@ -119,10 +127,10 @@ _globals['_AUTHSERVICE'].methods_by_name['GetAuthFeatures']._serialized_options = b'\202\265\030\002\030\001\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\027\022\025/api/v1/auth:features' _globals['_AUTHSERVICE'].methods_by_name['UpdateLoginUserDetails']._loaded_options = None _globals['_AUTHSERVICE'].methods_by_name['UpdateLoginUserDetails']._serialized_options = b'\222Az\n\013Connections\022%Update User Details for login request\032%Update User Details for login requestJ\035\n\003200\022\026\n\024Deleted Successfully\202\265\030\002\030\004\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002Q\"I/api/v1/connections/{connection_id}/auth-requests/{login_request_id}/user:\004user' - _globals['_INTENT']._serialized_start=6442 - _globals['_INTENT']._serialized_end=6500 - _globals['_AUTHSTATE']._serialized_start=6503 - _globals['_AUTHSTATE']._serialized_end=7067 + _globals['_INTENT']._serialized_start=7150 + _globals['_INTENT']._serialized_end=7208 + _globals['_AUTHSTATE']._serialized_start=7211 + _globals['_AUTHSTATE']._serialized_end=7775 _globals['_LISTAUTHMETHODSREQUEST']._serialized_start=423 _globals['_LISTAUTHMETHODSREQUEST']._serialized_end=471 _globals['_LISTAUTHMETHODSRESPONSE']._serialized_start=473 @@ -138,37 +146,37 @@ _globals['_GETAUTHCUSTOMIZATIONSREQUEST']._serialized_start=2116 _globals['_GETAUTHCUSTOMIZATIONSREQUEST']._serialized_end=2146 _globals['_PORTALSETTINGS']._serialized_start=2149 - _globals['_PORTALSETTINGS']._serialized_end=2320 - _globals['_GETAUTHCUSTOMIZATIONSRESPONSE']._serialized_start=2323 - _globals['_GETAUTHCUSTOMIZATIONSRESPONSE']._serialized_end=2501 - _globals['_GETAUTHFEATURESRESPONSE']._serialized_start=2503 - _globals['_GETAUTHFEATURESRESPONSE']._serialized_end=2581 - _globals['_VERIFYPASSWORDLESSOTPREQUEST']._serialized_start=2583 - _globals['_VERIFYPASSWORDLESSOTPREQUEST']._serialized_end=2668 - _globals['_VERIFYPASSWORDLESSOTPRESPONSE']._serialized_start=2670 - _globals['_VERIFYPASSWORDLESSOTPRESPONSE']._serialized_end=2701 - _globals['_OTPREQUEST']._serialized_start=2703 - _globals['_OTPREQUEST']._serialized_end=2808 - _globals['_LISTUSERORGANIZATIONSRESPONSE']._serialized_start=2811 - _globals['_LISTUSERORGANIZATIONSRESPONSE']._serialized_end=3023 - _globals['_ORGANIZATION']._serialized_start=3026 - _globals['_ORGANIZATION']._serialized_end=3549 - _globals['_USERDETAILS']._serialized_start=3551 - _globals['_USERDETAILS']._serialized_end=3646 - _globals['_SIGNUPORGANIZATIONREQUEST']._serialized_start=3649 - _globals['_SIGNUPORGANIZATIONREQUEST']._serialized_end=3845 - _globals['_SIGNUPORGANIZATIONRESPONSE']._serialized_start=3847 - _globals['_SIGNUPORGANIZATIONRESPONSE']._serialized_end=3961 - _globals['_UPDATELOGINUSERDETAILSREQUEST']._serialized_start=3964 - _globals['_UPDATELOGINUSERDETAILSREQUEST']._serialized_end=4306 - _globals['_USER']._serialized_start=4309 - _globals['_USER']._serialized_end=6070 - _globals['_GETAUTHSTATERESPONSE']._serialized_start=6073 - _globals['_GETAUTHSTATERESPONSE']._serialized_end=6206 - _globals['_GETAUTHERRORREQUEST']._serialized_start=6209 - _globals['_GETAUTHERRORREQUEST']._serialized_end=6349 - _globals['_GETAUTHERRORRESPONSE']._serialized_start=6351 - _globals['_GETAUTHERRORRESPONSE']._serialized_end=6440 - _globals['_AUTHSERVICE']._serialized_start=7070 - _globals['_AUTHSERVICE']._serialized_end=9157 + _globals['_PORTALSETTINGS']._serialized_end=2548 + _globals['_GETAUTHCUSTOMIZATIONSRESPONSE']._serialized_start=2551 + _globals['_GETAUTHCUSTOMIZATIONSRESPONSE']._serialized_end=2729 + _globals['_GETAUTHFEATURESRESPONSE']._serialized_start=2731 + _globals['_GETAUTHFEATURESRESPONSE']._serialized_end=2809 + _globals['_VERIFYPASSWORDLESSOTPREQUEST']._serialized_start=2811 + _globals['_VERIFYPASSWORDLESSOTPREQUEST']._serialized_end=2896 + _globals['_VERIFYPASSWORDLESSOTPRESPONSE']._serialized_start=2898 + _globals['_VERIFYPASSWORDLESSOTPRESPONSE']._serialized_end=2929 + _globals['_OTPREQUEST']._serialized_start=2931 + _globals['_OTPREQUEST']._serialized_end=3036 + _globals['_LISTUSERORGANIZATIONSRESPONSE']._serialized_start=3039 + _globals['_LISTUSERORGANIZATIONSRESPONSE']._serialized_end=3251 + _globals['_ORGANIZATION']._serialized_start=3254 + _globals['_ORGANIZATION']._serialized_end=3777 + _globals['_USERDETAILS']._serialized_start=3779 + _globals['_USERDETAILS']._serialized_end=3874 + _globals['_SIGNUPORGANIZATIONREQUEST']._serialized_start=3877 + _globals['_SIGNUPORGANIZATIONREQUEST']._serialized_end=4073 + _globals['_SIGNUPORGANIZATIONRESPONSE']._serialized_start=4075 + _globals['_SIGNUPORGANIZATIONRESPONSE']._serialized_end=4189 + _globals['_UPDATELOGINUSERDETAILSREQUEST']._serialized_start=4192 + _globals['_UPDATELOGINUSERDETAILSREQUEST']._serialized_end=4534 + _globals['_USER']._serialized_start=4537 + _globals['_USER']._serialized_end=6606 + _globals['_GETAUTHSTATERESPONSE']._serialized_start=6609 + _globals['_GETAUTHSTATERESPONSE']._serialized_end=6914 + _globals['_GETAUTHERRORREQUEST']._serialized_start=6917 + _globals['_GETAUTHERRORREQUEST']._serialized_end=7057 + _globals['_GETAUTHERRORRESPONSE']._serialized_start=7059 + _globals['_GETAUTHERRORRESPONSE']._serialized_end=7148 + _globals['_AUTHSERVICE']._serialized_start=7778 + _globals['_AUTHSERVICE']._serialized_end=9865 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/auth/auth_pb2.pyi b/scalekit/v1/auth/auth_pb2.pyi index 33fa9cc..06084bc 100644 --- a/scalekit/v1/auth/auth_pb2.pyi +++ b/scalekit/v1/auth/auth_pb2.pyi @@ -128,10 +128,12 @@ class GetAuthCustomizationsRequest(_message.Message): def __init__(self) -> None: ... class PortalSettings(_message.Message): - __slots__ = ("custom_branding",) + __slots__ = ("custom_branding", "new_self_serve_sso_scim") CUSTOM_BRANDING_FIELD_NUMBER: _ClassVar[int] + NEW_SELF_SERVE_SSO_SCIM_FIELD_NUMBER: _ClassVar[int] custom_branding: bool - def __init__(self, custom_branding: bool = ...) -> None: ... + new_self_serve_sso_scim: bool + def __init__(self, custom_branding: bool = ..., new_self_serve_sso_scim: bool = ...) -> None: ... class GetAuthCustomizationsResponse(_message.Message): __slots__ = ("customization_settings", "settings") @@ -234,7 +236,7 @@ class UpdateLoginUserDetailsRequest(_message.Message): def __init__(self, connection_id: _Optional[str] = ..., login_request_id: _Optional[str] = ..., user: _Optional[_Union[User, _Mapping]] = ...) -> None: ... class User(_message.Message): - __slots__ = ("sub", "email", "given_name", "family_name", "email_verified", "phone_number", "phone_number_verified", "name", "preferred_username", "picture", "gender", "locale", "groups", "custom_attributes", "organization_external_id") + __slots__ = ("sub", "email", "given_name", "family_name", "email_verified", "phone_number", "phone_number_verified", "name", "preferred_username", "picture", "gender", "locale", "groups", "custom_attributes", "organization_external_id", "roles", "organization_external_name") SUB_FIELD_NUMBER: _ClassVar[int] EMAIL_FIELD_NUMBER: _ClassVar[int] GIVEN_NAME_FIELD_NUMBER: _ClassVar[int] @@ -250,6 +252,8 @@ class User(_message.Message): GROUPS_FIELD_NUMBER: _ClassVar[int] CUSTOM_ATTRIBUTES_FIELD_NUMBER: _ClassVar[int] ORGANIZATION_EXTERNAL_ID_FIELD_NUMBER: _ClassVar[int] + ROLES_FIELD_NUMBER: _ClassVar[int] + ORGANIZATION_EXTERNAL_NAME_FIELD_NUMBER: _ClassVar[int] sub: str email: str given_name: str @@ -265,15 +269,19 @@ class User(_message.Message): groups: _containers.RepeatedScalarFieldContainer[str] custom_attributes: _struct_pb2.Struct organization_external_id: str - def __init__(self, sub: _Optional[str] = ..., email: _Optional[str] = ..., given_name: _Optional[str] = ..., family_name: _Optional[str] = ..., email_verified: bool = ..., phone_number: _Optional[str] = ..., phone_number_verified: bool = ..., name: _Optional[str] = ..., preferred_username: _Optional[str] = ..., picture: _Optional[str] = ..., gender: _Optional[str] = ..., locale: _Optional[str] = ..., groups: _Optional[_Iterable[str]] = ..., custom_attributes: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., organization_external_id: _Optional[str] = ...) -> None: ... + roles: _containers.RepeatedScalarFieldContainer[str] + organization_external_name: str + def __init__(self, sub: _Optional[str] = ..., email: _Optional[str] = ..., given_name: _Optional[str] = ..., family_name: _Optional[str] = ..., email_verified: bool = ..., phone_number: _Optional[str] = ..., phone_number_verified: bool = ..., name: _Optional[str] = ..., preferred_username: _Optional[str] = ..., picture: _Optional[str] = ..., gender: _Optional[str] = ..., locale: _Optional[str] = ..., groups: _Optional[_Iterable[str]] = ..., custom_attributes: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., organization_external_id: _Optional[str] = ..., roles: _Optional[_Iterable[str]] = ..., organization_external_name: _Optional[str] = ...) -> None: ... class GetAuthStateResponse(_message.Message): - __slots__ = ("auth_state", "user") + __slots__ = ("auth_state", "user", "login_hint") AUTH_STATE_FIELD_NUMBER: _ClassVar[int] USER_FIELD_NUMBER: _ClassVar[int] + LOGIN_HINT_FIELD_NUMBER: _ClassVar[int] auth_state: AuthState user: UserDetails - def __init__(self, auth_state: _Optional[_Union[AuthState, str]] = ..., user: _Optional[_Union[UserDetails, _Mapping]] = ...) -> None: ... + login_hint: str + def __init__(self, auth_state: _Optional[_Union[AuthState, str]] = ..., user: _Optional[_Union[UserDetails, _Mapping]] = ..., login_hint: _Optional[str] = ...) -> None: ... class GetAuthErrorRequest(_message.Message): __slots__ = ("error_id",) diff --git a/scalekit/v1/auth/totp_pb2.py b/scalekit/v1/auth/totp_pb2.py index db94313..d8eacf1 100644 --- a/scalekit/v1/auth/totp_pb2.py +++ b/scalekit/v1/auth/totp_pb2.py @@ -15,6 +15,7 @@ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2 +from google.api import visibility_pb2 as google_dot_api_dot_visibility__pb2 from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 @@ -23,7 +24,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bscalekit/v1/auth/totp.proto\x12\x15scalekit.v1.auth.totp\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"t\n\x17TOTPRegistrationRequest\x12Y\n\x11totp_registration\x18\x01 \x01(\x0b\x32\'.scalekit.v1.auth.totp.TOTPRegistrationB\x03\xbaH\x00R\x10totpRegistration\"u\n\x18TOTPRegistrationResponse\x12Y\n\x11totp_registration\x18\x01 \x01(\x0b\x32\'.scalekit.v1.auth.totp.TOTPRegistrationB\x03\xbaH\x00R\x10totpRegistration\"\x84\x07\n\x10TOTPRegistration\x12{\n\x02id\x18\x01 \x01(\tBk\x92\x41h2MUnique scalekit-generated identifier that uniquely references an organizationJ\x17\"org_59615193906282635\"R\x02id\x12\x8c\x01\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBO\x92\x41I2+Timestamp when the organization was createdJ\x1a\"2025-02-15T06:23:44.560Z\"\xe0\x41\x02R\ncreateTime\x12\x8e\x01\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBQ\x92\x41N20Timestamp when the organization was last updatedJ\x1a\"2025-02-15T06:23:44.560Z\"R\nupdateTime\x12y\n\x07user_id\x18\x04 \x01(\tB^\x92\x41L21The user ID associated with the TOTP registrationJ\x17\"usr_59615193906282635\"\xbaH\x0cr\n\x10\x01\x18 :\x04usr_H\x00R\x06userId\x12|\n\x0c\x61\x63\x63ount_name\x18\x05 \x01(\tBW\x92\x41J26The account name associated with the TOTP registrationJ\x10\"me@example.com\"\xbaH\x07r\x05\x10\x01\x18\xe3\x02H\x00R\x0b\x61\x63\x63ountName\x12\xb2\x01\n\x0bqr_code_uri\x18\x06 \x01(\tB\x8c\x01\x92\x41|2+The URI for the QR code used to set up TOTPJM\"otpauth://totp/Scalekit:usr_59615193906282635?secret=ABC123&issuer=Scalekit\"\xe0\x41\x03\xbaH\x07r\x05\x10\x01\x18\x80\x08H\x01R\tqrCodeUri\x88\x01\x01\x42\x15\n\x13UserIdOrAccountNameB\x0e\n\x0c_qr_code_uri\"l\n\x1d\x45nableRegistrationTOTPRequest\x12/\n\x0fregistration_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x0eregistrationId\x12\x1a\n\x04\x63ode\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x04\x63ode\"[\n\x1e\x45nableRegistrationTOTPResponse\x12\x16\n\x02id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x02id\x12!\n\x0c\x62\x61\x63kup_codes\x18\x03 \x03(\tR\x0b\x62\x61\x63kupCodes\"m\n\x1e\x44isableRegistrationTOTPRequest\x12/\n\x0fregistration_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x0eregistrationId\x12\x1a\n\x04\x63ode\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x04\x63ode\"\x87\x01\n\x15GenerateQRCodeRequest\x12-\n\x0e\x65nvironment_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\renvironmentId\x12&\n\nidentifier\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\nidentifier\x12\x17\n\x07is_user\x18\x03 \x01(\x08R\x06isUser\"1\n\x16GenerateQRCodeResponse\x12\x17\n\x07qr_code\x18\x01 \x01(\tR\x06qrCode\"T\n\x15VerifyUserCodeRequest\x12\x1f\n\x07user_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x06userId\x12\x1a\n\x04\x63ode\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x04\x63ode\"*\n\x12VerifyCodeResponse\x12\x14\n\x05valid\x18\x01 \x01(\x08R\x05valid\"l\n\x1dVerifyRegistrationCodeRequest\x12/\n\x0fregistration_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x0eregistrationId\x12\x1a\n\x04\x63ode\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x04\x63ode2\xdc\x06\n\x0bTOTPService\x12\xab\x01\n\x0cRegisterTOTP\x12..scalekit.v1.auth.totp.TOTPRegistrationRequest\x1a/.scalekit.v1.auth.totp.TOTPRegistrationResponse\":\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02.\"\x19/api/v1/totp/registration:\x11totp_registration\x12\xb1\x01\n\nEnableTOTP\x12\x34.scalekit.v1.auth.totp.EnableRegistrationTOTPRequest\x1a\x35.scalekit.v1.auth.totp.EnableRegistrationTOTPResponse\"6\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02*\"%/api/v1/totp/{registration_id}/enable:\x01*\x12\x9e\x01\n\x0eVerifyUserCode\x12,.scalekit.v1.auth.totp.VerifyUserCodeRequest\x1a).scalekit.v1.auth.totp.VerifyCodeResponse\"3\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\'\"\"/api/v1/user/{user_id}/totp:verify:\x01*\x12\xb1\x01\n\x16VerifyRegistrationCode\x12\x34.scalekit.v1.auth.totp.VerifyRegistrationCodeRequest\x1a).scalekit.v1.auth.totp.VerifyCodeResponse\"6\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02*\"%/api/v1/totp/{registration_id}/verify:\x01*\x12\x95\x01\n\x0b\x44isableTOTP\x12\x35.scalekit.v1.auth.totp.DisableRegistrationTOTPRequest\x1a\x16.google.protobuf.Empty\"7\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02+\"&/api/v1/totp/{registration_id}/disable:\x01*B5Z3github.com/scalekit-inc/scalekit/pkg/grpc/auth/totpb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bscalekit/v1/auth/totp.proto\x12\x15scalekit.v1.auth.totp\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"t\n\x17TOTPRegistrationRequest\x12Y\n\x11totp_registration\x18\x01 \x01(\x0b\x32\'.scalekit.v1.auth.totp.TOTPRegistrationB\x03\xbaH\x00R\x10totpRegistration\"u\n\x18TOTPRegistrationResponse\x12Y\n\x11totp_registration\x18\x01 \x01(\x0b\x32\'.scalekit.v1.auth.totp.TOTPRegistrationB\x03\xbaH\x00R\x10totpRegistration\"\x84\x07\n\x10TOTPRegistration\x12{\n\x02id\x18\x01 \x01(\tBk\x92\x41h2MUnique scalekit-generated identifier that uniquely references an organizationJ\x17\"org_59615193906282635\"R\x02id\x12\x8c\x01\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBO\x92\x41I2+Timestamp when the organization was createdJ\x1a\"2025-02-15T06:23:44.560Z\"\xe0\x41\x02R\ncreateTime\x12\x8e\x01\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBQ\x92\x41N20Timestamp when the organization was last updatedJ\x1a\"2025-02-15T06:23:44.560Z\"R\nupdateTime\x12y\n\x07user_id\x18\x04 \x01(\tB^\x92\x41L21The user ID associated with the TOTP registrationJ\x17\"usr_59615193906282635\"\xbaH\x0cr\n\x10\x01\x18 :\x04usr_H\x00R\x06userId\x12|\n\x0c\x61\x63\x63ount_name\x18\x05 \x01(\tBW\x92\x41J26The account name associated with the TOTP registrationJ\x10\"me@example.com\"\xbaH\x07r\x05\x10\x01\x18\xe3\x02H\x00R\x0b\x61\x63\x63ountName\x12\xb2\x01\n\x0bqr_code_uri\x18\x06 \x01(\tB\x8c\x01\x92\x41|2+The URI for the QR code used to set up TOTPJM\"otpauth://totp/Scalekit:usr_59615193906282635?secret=ABC123&issuer=Scalekit\"\xe0\x41\x03\xbaH\x07r\x05\x10\x01\x18\x80\x08H\x01R\tqrCodeUri\x88\x01\x01\x42\x15\n\x13UserIdOrAccountNameB\x0e\n\x0c_qr_code_uri\"l\n\x1d\x45nableRegistrationTOTPRequest\x12/\n\x0fregistration_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x0eregistrationId\x12\x1a\n\x04\x63ode\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x04\x63ode\"[\n\x1e\x45nableRegistrationTOTPResponse\x12\x16\n\x02id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x02id\x12!\n\x0c\x62\x61\x63kup_codes\x18\x03 \x03(\tR\x0b\x62\x61\x63kupCodes\"m\n\x1e\x44isableRegistrationTOTPRequest\x12/\n\x0fregistration_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x0eregistrationId\x12\x1a\n\x04\x63ode\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x04\x63ode\"\x87\x01\n\x15GenerateQRCodeRequest\x12-\n\x0e\x65nvironment_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\renvironmentId\x12&\n\nidentifier\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\nidentifier\x12\x17\n\x07is_user\x18\x03 \x01(\x08R\x06isUser\"1\n\x16GenerateQRCodeResponse\x12\x17\n\x07qr_code\x18\x01 \x01(\tR\x06qrCode\"T\n\x15VerifyUserCodeRequest\x12\x1f\n\x07user_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x06userId\x12\x1a\n\x04\x63ode\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x04\x63ode\"*\n\x12VerifyCodeResponse\x12\x14\n\x05valid\x18\x01 \x01(\x08R\x05valid\"l\n\x1dVerifyRegistrationCodeRequest\x12/\n\x0fregistration_id\x18\x01 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x0eregistrationId\x12\x1a\n\x04\x63ode\x18\x02 \x01(\tB\x06\xbaH\x03\xc8\x01\x01R\x04\x63ode2\xa7\x07\n\x0bTOTPService\x12\xba\x01\n\x0cRegisterTOTP\x12..scalekit.v1.auth.totp.TOTPRegistrationRequest\x1a/.scalekit.v1.auth.totp.TOTPRegistrationResponse\"I\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02.\"\x19/api/v1/totp/registration:\x11totp_registration\x12\xc0\x01\n\nEnableTOTP\x12\x34.scalekit.v1.auth.totp.EnableRegistrationTOTPRequest\x1a\x35.scalekit.v1.auth.totp.EnableRegistrationTOTPResponse\"E\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02*\"%/api/v1/totp/{registration_id}/enable:\x01*\x12\xad\x01\n\x0eVerifyUserCode\x12,.scalekit.v1.auth.totp.VerifyUserCodeRequest\x1a).scalekit.v1.auth.totp.VerifyCodeResponse\"B\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\'\"\"/api/v1/user/{user_id}/totp:verify:\x01*\x12\xc0\x01\n\x16VerifyRegistrationCode\x12\x34.scalekit.v1.auth.totp.VerifyRegistrationCodeRequest\x1a).scalekit.v1.auth.totp.VerifyCodeResponse\"E\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02*\"%/api/v1/totp/{registration_id}/verify:\x01*\x12\xa4\x01\n\x0b\x44isableTOTP\x12\x35.scalekit.v1.auth.totp.DisableRegistrationTOTPRequest\x1a\x16.google.protobuf.Empty\"F\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02+\"&/api/v1/totp/{registration_id}/disable:\x01*B5Z3github.com/scalekit-inc/scalekit/pkg/grpc/auth/totpb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -70,37 +71,37 @@ _globals['_VERIFYREGISTRATIONCODEREQUEST'].fields_by_name['code']._loaded_options = None _globals['_VERIFYREGISTRATIONCODEREQUEST'].fields_by_name['code']._serialized_options = b'\272H\003\310\001\001' _globals['_TOTPSERVICE'].methods_by_name['RegisterTOTP']._loaded_options = None - _globals['_TOTPSERVICE'].methods_by_name['RegisterTOTP']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002.\"\031/api/v1/totp/registration:\021totp_registration' + _globals['_TOTPSERVICE'].methods_by_name['RegisterTOTP']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002.\"\031/api/v1/totp/registration:\021totp_registration' _globals['_TOTPSERVICE'].methods_by_name['EnableTOTP']._loaded_options = None - _globals['_TOTPSERVICE'].methods_by_name['EnableTOTP']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002*\"%/api/v1/totp/{registration_id}/enable:\001*' + _globals['_TOTPSERVICE'].methods_by_name['EnableTOTP']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002*\"%/api/v1/totp/{registration_id}/enable:\001*' _globals['_TOTPSERVICE'].methods_by_name['VerifyUserCode']._loaded_options = None - _globals['_TOTPSERVICE'].methods_by_name['VerifyUserCode']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\'\"\"/api/v1/user/{user_id}/totp:verify:\001*' + _globals['_TOTPSERVICE'].methods_by_name['VerifyUserCode']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\'\"\"/api/v1/user/{user_id}/totp:verify:\001*' _globals['_TOTPSERVICE'].methods_by_name['VerifyRegistrationCode']._loaded_options = None - _globals['_TOTPSERVICE'].methods_by_name['VerifyRegistrationCode']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002*\"%/api/v1/totp/{registration_id}/verify:\001*' + _globals['_TOTPSERVICE'].methods_by_name['VerifyRegistrationCode']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002*\"%/api/v1/totp/{registration_id}/verify:\001*' _globals['_TOTPSERVICE'].methods_by_name['DisableTOTP']._loaded_options = None - _globals['_TOTPSERVICE'].methods_by_name['DisableTOTP']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002+\"&/api/v1/totp/{registration_id}/disable:\001*' - _globals['_TOTPREGISTRATIONREQUEST']._serialized_start=356 - _globals['_TOTPREGISTRATIONREQUEST']._serialized_end=472 - _globals['_TOTPREGISTRATIONRESPONSE']._serialized_start=474 - _globals['_TOTPREGISTRATIONRESPONSE']._serialized_end=591 - _globals['_TOTPREGISTRATION']._serialized_start=594 - _globals['_TOTPREGISTRATION']._serialized_end=1494 - _globals['_ENABLEREGISTRATIONTOTPREQUEST']._serialized_start=1496 - _globals['_ENABLEREGISTRATIONTOTPREQUEST']._serialized_end=1604 - _globals['_ENABLEREGISTRATIONTOTPRESPONSE']._serialized_start=1606 - _globals['_ENABLEREGISTRATIONTOTPRESPONSE']._serialized_end=1697 - _globals['_DISABLEREGISTRATIONTOTPREQUEST']._serialized_start=1699 - _globals['_DISABLEREGISTRATIONTOTPREQUEST']._serialized_end=1808 - _globals['_GENERATEQRCODEREQUEST']._serialized_start=1811 - _globals['_GENERATEQRCODEREQUEST']._serialized_end=1946 - _globals['_GENERATEQRCODERESPONSE']._serialized_start=1948 - _globals['_GENERATEQRCODERESPONSE']._serialized_end=1997 - _globals['_VERIFYUSERCODEREQUEST']._serialized_start=1999 - _globals['_VERIFYUSERCODEREQUEST']._serialized_end=2083 - _globals['_VERIFYCODERESPONSE']._serialized_start=2085 - _globals['_VERIFYCODERESPONSE']._serialized_end=2127 - _globals['_VERIFYREGISTRATIONCODEREQUEST']._serialized_start=2129 - _globals['_VERIFYREGISTRATIONCODEREQUEST']._serialized_end=2237 - _globals['_TOTPSERVICE']._serialized_start=2240 - _globals['_TOTPSERVICE']._serialized_end=3100 + _globals['_TOTPSERVICE'].methods_by_name['DisableTOTP']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002+\"&/api/v1/totp/{registration_id}/disable:\001*' + _globals['_TOTPREGISTRATIONREQUEST']._serialized_start=385 + _globals['_TOTPREGISTRATIONREQUEST']._serialized_end=501 + _globals['_TOTPREGISTRATIONRESPONSE']._serialized_start=503 + _globals['_TOTPREGISTRATIONRESPONSE']._serialized_end=620 + _globals['_TOTPREGISTRATION']._serialized_start=623 + _globals['_TOTPREGISTRATION']._serialized_end=1523 + _globals['_ENABLEREGISTRATIONTOTPREQUEST']._serialized_start=1525 + _globals['_ENABLEREGISTRATIONTOTPREQUEST']._serialized_end=1633 + _globals['_ENABLEREGISTRATIONTOTPRESPONSE']._serialized_start=1635 + _globals['_ENABLEREGISTRATIONTOTPRESPONSE']._serialized_end=1726 + _globals['_DISABLEREGISTRATIONTOTPREQUEST']._serialized_start=1728 + _globals['_DISABLEREGISTRATIONTOTPREQUEST']._serialized_end=1837 + _globals['_GENERATEQRCODEREQUEST']._serialized_start=1840 + _globals['_GENERATEQRCODEREQUEST']._serialized_end=1975 + _globals['_GENERATEQRCODERESPONSE']._serialized_start=1977 + _globals['_GENERATEQRCODERESPONSE']._serialized_end=2026 + _globals['_VERIFYUSERCODEREQUEST']._serialized_start=2028 + _globals['_VERIFYUSERCODEREQUEST']._serialized_end=2112 + _globals['_VERIFYCODERESPONSE']._serialized_start=2114 + _globals['_VERIFYCODERESPONSE']._serialized_end=2156 + _globals['_VERIFYREGISTRATIONCODEREQUEST']._serialized_start=2158 + _globals['_VERIFYREGISTRATIONCODEREQUEST']._serialized_end=2266 + _globals['_TOTPSERVICE']._serialized_start=2269 + _globals['_TOTPSERVICE']._serialized_end=3204 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/auth/totp_pb2.pyi b/scalekit/v1/auth/totp_pb2.pyi index 7b8d52d..7a8b6b8 100644 --- a/scalekit/v1/auth/totp_pb2.pyi +++ b/scalekit/v1/auth/totp_pb2.pyi @@ -1,6 +1,7 @@ from buf.validate import validate_pb2 as _validate_pb2 from google.api import annotations_pb2 as _annotations_pb2 from google.api import field_behavior_pb2 as _field_behavior_pb2 +from google.api import visibility_pb2 as _visibility_pb2 from google.protobuf import empty_pb2 as _empty_pb2 from google.protobuf import struct_pb2 as _struct_pb2 from google.protobuf import timestamp_pb2 as _timestamp_pb2 diff --git a/scalekit/v1/clients/clients_pb2.py b/scalekit/v1/clients/clients_pb2.py index 087dc72..55fdcfe 100644 --- a/scalekit/v1/clients/clients_pb2.py +++ b/scalekit/v1/clients/clients_pb2.py @@ -29,7 +29,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/clients/clients.proto\x12\x13scalekit.v1.clients\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a)scalekit/v1/connections/connections.proto\x1a!scalekit/v1/options/options.proto\"\x8a\x01\n\x15\x43reateResourceRequest\x12q\n\x08resource\x18\x01 \x01(\x0b\x32#.scalekit.v1.clients.CreateResourceB0\x92\x41\'2%Details of the resource to be created\xbaH\x03\xc8\x01\x01R\x08resource\"\x8e\r\n\x0e\x43reateResource\x12|\n\rresource_type\x18\x01 \x01(\x0e\x32!.scalekit.v1.clients.ResourceTypeB4\x92\x41+2\"Type of the resource to be createdJ\x05\"WEB\"\xbaH\x03\xc8\x01\x01R\x0cresourceType\x12K\n\x04name\x18\x02 \x01(\tB7\x92\x41)2\x14Name of the resourceJ\x11\"My API Resource\"\xbaH\x08r\x03\x18\x80\x01\xc8\x01\x01R\x04name\x12\x86\x01\n\x0b\x64\x65scription\x18\x03 \x01(\tBd\x92\x41Y2\x1b\x44\x65scription of the resourceJ:\"Resource for accessing your organization\'s API resources\"\xbaH\x05r\x03\x18\x80\x04R\x0b\x64\x65scription\x12\xab\x01\n\x0cresource_uri\x18\x04 \x01(\tB\x87\x01\x92\x41\x83\x01\x32\x61Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"R\x0bresourceUri\x12g\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x05 \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30R\x11\x61\x63\x63\x65ssTokenExpiry\x12k\n\x14refresh_token_expiry\x18\x06 \x01(\x03\x42\x39\x92\x41\x36\x32-Expiry time in seconds for the refresh token.J\x05\x38\x36\x34\x30\x30R\x12refreshTokenExpiry\x12\x9f\x01\n#disable_dynamic_client_registration\x18\x07 \x01(\x08\x42P\x92\x41M2EIndicates if dynamic client registration is allowed for this resourceJ\x04trueR disableDynamicClientRegistration\x12\x61\n\x08logo_uri\x18\x08 \x01(\tBF\x92\x41;2\x19Logo URI for the resourceJ\x1e\"https://example.com/logo.png\"\xbaH\x05r\x03\x18\x80\x04R\x07logoUri\x12X\n\x08provider\x18\t \x01(\tB<\x92\x41\x31\x32$Connection provider for the resourceJ\t\"DESCOPE\"\xbaH\x05r\x03\x18\x80\x04R\x08provider\x12\xa9\x01\n\x0bresource_id\x18\n \x01(\tB\x87\x01\x92\x41\x83\x01\x32\x61Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"R\nresourceId\x12i\n\x06scopes\x18\x0b \x03(\tBQ\x92\x41N21List of OAuth scopes associated with the resourceJ\x19[\"usr:read\", \"usr:write\"]R\x06scopes\x12\xac\x01\n intersect_scopes_user_permission\x18\x0c \x01(\x08\x42\x63\x92\x41`2XIndicates if the scopes should be intersected with user permissions for granular controlJ\x04trueR\x1dintersectScopesUserPermission\x12\x7f\n\x0b\x65nable_cimd\x18\r \x01(\x08\x42^\x92\x41[2RSpecifies whether Client ID Metadata Document (CIMD) is activated for the resourceJ\x05\x66\x61lseR\nenableCimd\"\x8c\x06\n\x0eResourceClient\x12\x44\n\x04name\x18\x01 \x01(\tB0\x92\x41%2\x12Name of the clientJ\x0f\"My API Client\"\xbaH\x05r\x03\x18\x80\x01R\x04name\x12\x82\x01\n\x0b\x64\x65scription\x18\x02 \x01(\tB`\x92\x41U2\x19\x44\x65scription of the clientJ8\"Client for accessing your organization\'s API resources\"\xbaH\x05r\x03\x18\x80\x04R\x0b\x64\x65scription\x12\x38\n\x06scopes\x18\x03 \x03(\tB \x92\x41\x1d\x32\x1bOAuth scopes for the clientR\x06scopes\x12\x62\n\x08\x61udience\x18\x04 \x03(\tBF\x92\x41\x43\x32$OAuth audience values for the clientJ\x1b[\"https://api.example.com\"]R\x08\x61udience\x12\xc6\x01\n\rcustom_claims\x18\x05 \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\x7f\x92\x41|2zCustom claims to be included in access tokens. Please keep this to the essentials as this increases the size of the token.R\x0c\x63ustomClaims\x12_\n\x06\x65xpiry\x18\x06 \x01(\x03\x42G\x92\x41\x44\x32\"https://example.com/.well-known/oauth-protected-resource/mcp\"R\x14protectedMetadataUri\x12\xb2\x01\n\x0bresource_id\x18\x0f \x01(\tB\x90\x01\x92\x41\x84\x01\x32\x62Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"\xbaH\x05r\x03\x18\x80\x04R\nresourceId\x12\xfb\x01\n\x06scopes\x18\x10 \x03(\x0b\x32\x1a.scalekit.v1.clients.ScopeB\xc6\x01\x92\x41\xc2\x01\x32OList of OAuth scopes associated with the resource with enabled or disabled flagJo[{\"id\": \"perm_\", \"name\": \"usr:read\", \"description\": \"Reading basic information of the users\", \"enabled\": true}]R\x06scopes\x12\xc3\x01\n\x12\x63onnection_details\x18\x11 \x01(\x0b\x32\'.scalekit.v1.clients.ResourceConnectionBk\x92\x41\x65\x32\x63\x44\x65tails of the own auth connection if any. For full stack this field will be empty or not populated\xe0\x41\x03R\x11\x63onnectionDetails\x12\x91\x01\n\x1a\x64isallow_connection_update\x18\x12 \x01(\x08\x42S\x92\x41M2DIndicates if updating the connection is disallowed for this resourceJ\x05\x66\x61lse\xe0\x41\x03R\x18\x64isallowConnectionUpdate\x12\xac\x01\n intersect_scopes_user_permission\x18\x13 \x01(\x08\x42\x63\x92\x41`2XIndicates if the scopes should be intersected with user permissions for granular controlJ\x04trueR\x1dintersectScopesUserPermission\x12\x7f\n\x0b\x65nable_cimd\x18\x14 \x01(\x08\x42^\x92\x41[2RSpecifies whether Client ID Metadata Document (CIMD) is activated for the resourceJ\x05\x66\x61lseR\nenableCimd\"\xf2\x01\n\x15RegisterClientRequest\x12i\n\x06res_id\x18\x01 \x01(\tBR\x92\x41\x43\x32(Unique identifier of the client resourceJ\x17\"app_69388798466720005\"\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x05resId\x12n\n\x06\x63lient\x18\x02 \x01(\x0b\x32#.scalekit.v1.clients.RegisterClientB1\x92\x41(2&Details of the client to be registered\xbaH\x03\xc8\x01\x01R\x06\x63lient\"\x96\x06\n\x0eRegisterClient\x12Q\n\x0b\x63lient_name\x18\x01 \x01(\tB0\x92\x41%2\x12Name of the clientJ\x0f\"My API Client\"\xbaH\x05r\x03\x18\x80\x01R\nclientName\x12\x82\x01\n\x0b\x64\x65scription\x18\x02 \x01(\tB`\x92\x41U2\x19\x44\x65scription of the clientJ8\"Client for accessing your organization\'s API resources\"\xbaH\x05r\x03\x18\x80\x04R\x0b\x64\x65scription\x12g\n\rredirect_uris\x18\x03 \x03(\tBB\x92\x41?2\x1bRedirect URI for the clientJ [\"https://example.com/callback\"]R\x0credirectUris\x12Y\n\x05scope\x18\x04 \x01(\tBC\x92\x41@2\x1bOAuth scopes for the clientJ![\"read:users\", \"write:resources\"]R\x05scope\x12T\n\nclient_uri\x18\x05 \x01(\tB5\x92\x41\x32\x32\x19\x43lient URI for the clientJ\x15\"https://example.com\"R\tclientUri\x12W\n\x08logo_uri\x18\x06 \x01(\tB<\x92\x41\x39\x32\x17Logo URI for the clientJ\x1e\"https://example.com/logo.png\"R\x07logoUri\x12\\\n\x07tos_uri\x18\x07 \x01(\tBC\x92\x41@2#Terms of Service URI for the clientJ\x19\"https://example.com/tos\"R\x06tosUri\x12[\n\npolicy_uri\x18\x08 \x01(\tB<\x92\x41\x39\x32\x19Policy URI for the clientJ\x1c\"https://example.com/policy\"R\tpolicyUri\"\xb9\x17\n\x16RegisterClientResponse\x12\xfc\x01\n\tclient_id\x18\x01 \x01(\tB\xde\x01\x92\x41\xda\x01\x32\xbc\x01The unique identifier for this M2M client. This ID is used to identify the client in API requests and logs. It is automatically generated when the client is created and cannot be modified.J\x19\"m2morg_1231234233424344\"R\x08\x63lientId\x12\xb3\x02\n\x07secrets\x18\x02 \x03(\x0b\x32!.scalekit.v1.clients.ClientSecretB\xf5\x01\x92\x41\xf1\x01\x32\xee\x01List of client secrets associated with this client. Each secret can be used for authentication, but only the most recently created secret is typically active. Secrets are stored securely and their values are never returned after creation.R\x07secrets\x12\xa2\x01\n\x04name\x18\x03 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32\x62The display name of the M2M client. This name helps identify the client in the dashboard and logs.J#\"GitHub Actions Deployment Service\"R\x04name\x12\xda\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tB\xb7\x01\x92\x41\xb3\x01\x32{A detailed description of the client\'s purpose and usage. This helps administrators understand what the client is used for.J4\"Service account for automated deployment processes\"R\x0b\x64\x65scription\x12\xd5\x01\n\x0b\x63reate_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x97\x01\x92\x41\x93\x01\x32uThe timestamp when this M2M client was created. This field is automatically set by the server and cannot be modified.J\x1a\"2024-01-05T14:48:00.000Z\"R\ncreateTime\x12\xf4\x01\n\x0bupdate_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xb6\x01\x92\x41\xb2\x01\x32\x93\x01The timestamp when this M2M client was last updated. This field is automatically updated by the server whenever the client\'s configuration changes.J\x1a\"2024-01-05T14:48:00.000Z\"R\nupdateTime\x12\xbe\x01\n\x06scopes\x18\x07 \x03(\tB\xa5\x01\x92\x41\xa1\x01\x32uThe OAuth 2.0 scopes granted to this client. These scopes determine what resources and actions the client can access.J([\"deploy:resources\", \"read:deployments\"]R\x06scopes\x12\xc7\x01\n\x08\x61udience\x18\x08 \x03(\tB\xaa\x01\x92\x41\xa6\x01\x32\x86\x01The intended recipients of access tokens issued to this client. Each audience value should be a URI that identifies an API or service.J\x1b[\"https://api.example.com\"]R\x08\x61udience\x12\xec\x01\n\rcustom_claims\x18\t \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\xa4\x01\x92\x41\xa0\x01\x32\x9d\x01\x41\x64\x64itional claims included in access tokens issued to this client. These claims provide context about the client and can be used for authorization decisions.R\x0c\x63ustomClaims\x12\xb2\x01\n\x06\x65xpiry\x18\n \x01(\x03\x42\x99\x01\x92\x41\x95\x01\x32\x8c\x01The lifetime of access tokens issued to this client, in seconds. This determines how long a token remains valid before it must be refreshed.J\x04\x33\x36\x30\x30R\x06\x65xpiry\x12\xc4\x01\n\x0bresource_id\x18\x0b \x01(\tB\xa2\x01\x92\x41\x9e\x01\x32\x83\x01The ID of the resource associated with this M2M client. This field is used to link the client to a specific resource in the system.J\x16\"app_1231234233424344\"R\nresourceId\x12\xd1\x01\n\rredirect_uris\x18\x0c \x03(\tB\xab\x01\x92\x41\xa7\x01\x32\x82\x01The redirect URI for this M2M client. This URI is used in the OAuth 2.0 authorization flow to redirect users after authentication.J [\"https://example.com/callback\"]R\x0credirectUris\x12~\n\rclient_secret\x18\r \x01(\tBY\x92\x41V24Client secret value (only returned once at creation)J\x1e\"CdExsdErfccxDDssddfffgfeFHH1\"R\x0c\x63lientSecret\x12\xce\x01\n\x18\x63lient_secret_expires_at\x18\x0e \x01(\x05\x42\x94\x01\x92\x41\x90\x01\x32rClient secret expiry time in RFC3339 format. If the client secret does not expire, this field will be set to null.J\x1a\"2024-12-31T23:59:59.000Z\"R\x15\x63lientSecretExpiresAt\"\xdd\x02\n\x14ListResourcesRequest\x12r\n\rresource_type\x18\x01 \x01(\x0e\x32!.scalekit.v1.clients.ResourceTypeB*\x92\x41!2\x18\x46ilter resources by typeJ\x05\"WEB\"\xbaH\x03\xc8\x01\x01R\x0cresourceType\x12]\n\npage_token\x18\x02 \x01(\tB>\x92\x41;2\"Token for the next page of resultsJ\x15\"next_page_token_123\"R\tpageToken\x12r\n\tpage_size\x18\x03 \x01(\rBU\x92\x41K2ENumber of resources to return per page. Maximum is 30. Default is 10.J\x02\x32\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\"\xdb\x02\n\x15ListResourcesResponse\x12G\n\ntotal_size\x18\x01 \x01(\rB(\x92\x41%2#Total number of resources availableR\ttotalSize\x12O\n\x0fnext_page_token\x18\x02 \x01(\tB\'\x92\x41$2\"Token for the next page of resultsR\rnextPageToken\x12S\n\tresources\x18\x03 \x03(\x0b\x32\x1d.scalekit.v1.clients.ResourceB\x16\x92\x41\x13\x32\x11List of resourcesR\tresources\x12S\n\x0fprev_page_token\x18\x04 \x01(\tB+\x92\x41(2&Token for the previous page of resultsR\rprevPageToken\"\xaf\x02\n\x15UpdateResourceRequest\x12s\n\x0bresource_id\x18\x01 \x01(\tBR\x92\x41\x46\x32+Unique identifier of the resource to updateJ\x17\"app_69388798466720005\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\x12\x64\n\x08resource\x18\x02 \x01(\x0b\x32#.scalekit.v1.clients.UpdateResourceB#\x92\x41\x1a\x32\x18Updated resource details\xbaH\x03\xc8\x01\x01R\x08resource\x12;\n\x0bupdate_mask\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskR\nupdateMask\"\xa1\x0e\n\x0eUpdateResource\x12P\n\x04name\x18\x01 \x01(\tB<\x92\x41\x31\x32\x14Name of the resourceJ\x19\"My Updated API Resource\"\xbaH\x05r\x03\x18\x80\x01R\x04name\x12\x8e\x01\n\x0b\x64\x65scription\x18\x02 \x01(\tBl\x92\x41\x61\x32\x1b\x44\x65scription of the resourceJB\"Updated resource for accessing your organization\'s API resources\"\xbaH\x05r\x03\x18\x80\x04R\x0b\x64\x65scription\x12\xab\x01\n\x0cresource_uri\x18\x03 \x01(\tB\x87\x01\x92\x41\x83\x01\x32\x61Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"R\x0bresourceUri\x12g\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x04 \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30R\x11\x61\x63\x63\x65ssTokenExpiry\x12k\n\x14refresh_token_expiry\x18\x05 \x01(\x03\x42\x39\x92\x41\x36\x32-Expiry time in seconds for the refresh token.J\x05\x38\x36\x34\x30\x30R\x12refreshTokenExpiry\x12\xbb\x01\n#disable_dynamic_client_registration\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBP\x92\x41M2EIndicates if dynamic client registration is allowed for this resourceJ\x04trueR disableDynamicClientRegistration\x12\x61\n\x08logo_uri\x18\x07 \x01(\tBF\x92\x41;2\x19Logo URI for the resourceJ\x1e\"https://example.com/logo.png\"\xbaH\x05r\x03\x18\x80\x04R\x07logoUri\x12X\n\x08provider\x18\n \x01(\tB<\x92\x41\x31\x32$Connection provider for the resourceJ\t\"DESCOPE\"\xbaH\x05r\x03\x18\x80\x04R\x08provider\x12\xa9\x01\n\x0bresource_id\x18\x0b \x01(\tB\x87\x01\x92\x41\x83\x01\x32\x61Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"R\nresourceId\x12i\n\x06scopes\x18\x0c \x03(\tBQ\x92\x41N21List of OAuth scopes associated with the resourceJ\x19[\"usr:read\", \"usr:write\"]R\x06scopes\x12\xa7\x01\n\x1a\x63ustom_connection_settings\x18\r \x01(\x0b\x32\x35.scalekit.v1.clients.ResourceCustomConnectionSettingsB0\x92\x41-2+Custom connection settings for the resourceH\x00R\x18\x63ustomConnectionSettings\x12\xc8\x01\n intersect_scopes_user_permission\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueBc\x92\x41`2XIndicates if the scopes should be intersected with user permissions for granular controlJ\x04trueR\x1dintersectScopesUserPermission\x12\x94\x01\n\x0b\x65nable_cimd\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueBW\x92\x41T2KIndicates if CIMD (Client ID Metadata Document) is enabled for the resourceJ\x05\x66\x61lseR\nenableCimdB\n\n\x08settings\"y\n\x16UpdateResourceResponse\x12_\n\x08resource\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.clients.ResourceB$\x92\x41!2\x1f\x44\x65tails of the updated resourceR\x08resource\"\xfc\x01\n\x1b\x43reateResourceClientRequest\x12p\n\x0bresource_id\x18\x01 \x01(\tBO\x92\x41\x43\x32(Unique identifier of the client resourceJ\x17\"app_69388798466720005\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\x12k\n\x06\x63lient\x18\x02 \x01(\x0b\x32#.scalekit.v1.clients.ResourceClientB.\x92\x41%2#Details of the client to be created\xbaH\x03\xc8\x01\x01R\x06\x63lient\"\xf8\x01\n\x1c\x43reateResourceClientResponse\x12Z\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1e.scalekit.v1.clients.M2MClientB\"\x92\x41\x1f\x32\x1d\x44\x65tails of the created clientR\x06\x63lient\x12|\n\x0cplain_secret\x18\x02 \x01(\tBY\x92\x41V24Client secret value (only returned once at creation)J\x1e\"CdExsdErfccxDDssddfffgfeFHH1\"R\x0bplainSecret\"\xc7\x03\n\x1bUpdateResourceClientRequest\x12i\n\x0bresource_id\x18\x01 \x01(\tBH\x92\x41<2!Unique identifier of the resourceJ\x17\"res_69388798466720005\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\x12\x63\n\tclient_id\x18\x02 \x01(\tBF\x92\x41:2\x1fUnique identifier of the clientJ\x17\"m2m_12345678901234567\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\x12\x66\n\x06\x63lient\x18\x03 \x01(\x0b\x32#.scalekit.v1.clients.ResourceClientB)\x92\x41 2\x1e\x46ields of the client to update\xbaH\x03\xc8\x01\x01R\x06\x63lient\x12p\n\x0bupdate_mask\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB3\x92\x41\x30\x32.Mask specifying which fields should be updatedR\nupdateMask\"s\n\x1cUpdateResourceClientResponse\x12S\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1e.scalekit.v1.clients.M2MClientB\x1b\x92\x41\x18\x32\x16Updated client detailsR\x06\x63lient\"\x96\x02\n\x18GetResourceClientRequest\x12u\n\x0bresource_id\x18\x01 \x01(\tBT\x92\x41H24Unique identifier of the client resource to retrieveJ\x10\"skc_1234567890\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\x12\x82\x01\n\tclient_id\x18\x02 \x01(\tBe\x92\x41Y2\x92\x41;2.Case-insensitive search over external user IDsJ\t\"usr_123\"R\x06search\x12[\n\tpage_size\x18\x03 \x01(\rB>\x92\x41\x34\x32.Number of consents to return per page (max 30)J\x02\x32\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\x63\n\npage_token\x18\x04 \x01(\tBD\x92\x41\x41\x32\x33Pagination token to fetch the next or previous pageJ\n\">:abc123\"R\tpageToken\"\x8c\x03\n ListResourceUserConsentsResponse\x12V\n\ntotal_size\x18\x01 \x01(\rB7\x92\x41\x34\x32\x32Total number of user consents matching the requestR\ttotalSize\x12T\n\x0fnext_page_token\x18\x02 \x01(\tB,\x92\x41)2\'Pagination token to fetch the next pageR\rnextPageToken\x12`\n\x08\x63onsents\x18\x03 \x03(\x0b\x32(.scalekit.v1.clients.ResourceUserConsentB\x1a\x92\x41\x17\x32\x15List of user consentsR\x08\x63onsents\x12X\n\x0fprev_page_token\x18\x04 \x01(\tB0\x92\x41-2+Pagination token to fetch the previous pageR\rprevPageToken\"\xdc\x04\n\x13ResourceUserConsent\x12X\n\x02id\x18\x01 \x01(\tBH\x92\x41\x45\x32%Unique identifier of the user consentJ\x1c\"usrcnst_102709535608668163\"R\x02id\x12r\n\x10\x65xternal_user_id\x18\x02 \x01(\tBH\x92\x41\x45\x32*External identifier of the consenting userJ\x17\"usr_83562895790637841\"R\x0e\x65xternalUserId\x12`\n\tclient_id\x18\x03 \x01(\tBC\x92\x41@2-Client identifier associated with the consentJ\x0f\"m2m_123123123\"R\x08\x63lientId\x12\x44\n\x0b\x63lient_name\x18\x04 \x01(\tB#\x92\x41 2\x14Readable client nameJ\x08\"MCPJam\"R\nclientName\x12O\n\x06scopes\x18\x05 \x03(\tB7\x92\x41\x34\x32\x1dScopes granted in the consentJ\x13[\"openid\", \"email\"]R\x06scopes\x12~\n\ngranted_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampBC\x92\x41@2\"Timestamp when consent was grantedJ\x1a\"2025-12-09T13:27:29.810Z\"R\tgrantedAt\"\xa0\x01\n\x1aListResourceClientsRequest\x12\x81\x01\n\x0bresource_id\x18\x01 \x01(\tB`\x92\x41T2@Unique identifier of the resource whose clients are to be listedJ\x10\"skc_1234567890\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\"\xf0\x02\n\x1bListResourceClientsResponse\x12k\n\x07\x63lients\x18\x02 \x03(\x0b\x32\x1e.scalekit.v1.clients.M2MClientB1\x92\x41.2,List of clients associated with the resourceR\x07\x63lients\x12i\n\x11total_dcr_clients\x18\x03 \x01(\x05\x42=\x92\x41:28Total number of DCR clients associated with the resourceR\x0ftotalDcrClients\x12s\n\x14total_static_clients\x18\x04 \x01(\x05\x42\x41\x92\x41>2\"R\tpageToken:\xec\x01\x92\x41\xe8\x01\n\xa8\x01*!List Organization Clients Request2\x82\x01Request message for listing API clients within a specific organization. Supports pagination for handling large numbers of clients.*;\n\x11\x41PI Documentation\x12&https://docs.scalekit.com/m2m/overview\"\xa5\x06\n\x1fListOrganizationClientsResponse\x12\x97\x01\n\x0fnext_page_token\x18\x01 \x01(\tBo\x92\x41l2UPagination token for the next page of results. Use this token to fetch the next page.J\x13\"\"R\rnextPageToken\x12X\n\ntotal_size\x18\x02 \x01(\rB9\x92\x41\x36\x32\x30Total number of API clients in the organization.J\x02\x33\x30R\ttotalSize\x12\xe0\x01\n\x07\x63lients\x18\x03 \x03(\x0b\x32\x1e.scalekit.v1.clients.M2MClientB\xa5\x01\x92\x41\xa1\x01\x32\x9e\x01List of API client objects for the organization. Each client includes its configuration, metadata, and active secrets (without exposing actual secret values).R\x07\x63lients\x12\x9f\x01\n\x0fprev_page_token\x18\x04 \x01(\tBw\x92\x41t2]Pagination token for the previous page of results. Use this token to fetch the previous page.J\x13\"\"R\rprevPageToken:\x88\x01\x92\x41\x84\x01\n\x81\x01*\"List Organization Clients Response2[Response message containing a paginated list of API clients for the specified organization.\"\x83\x03\n\x1f\x44\x65leteOrganizationClientRequest\x12\xb0\x01\n\x0forganization_id\x18\x01 \x01(\tB\x86\x01\x92\x41t2ZUnique identifier of the organization that owns the client. Must start with \'org_\' prefix.J\x16\"org_1231234233424344\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xac\x01\n\tclient_id\x18\x02 \x01(\tB\x8e\x01\x92\x41y2\\Unique identifier of the API client to permanently delete. Must start with \'m2morg_\' prefix.J\x19\"m2morg_1231234233424344\"\xbaH\x0fr\r\x10\x01\x18 :\x07m2morg_R\x08\x63lientId\"\xa5\x01\n\x10GetClientRequest\x12\x90\x01\n\tclient_id\x18\x01 \x01(\tBs\x92\x41g2SUnique identifier of the client resource to retrieve. Must be 1-32 characters long.J\x10\"skc_1234567890\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\"\xf5\x01\n\x11GetClientResponse\x12\xdf\x01\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.clients.ClientB\xa9\x01\x92\x41\xa5\x01\x32\xa2\x01\x43omplete client configuration including authentication settings, redirect URIs, and secrets. This contains all current settings for the requested client resource.R\x06\x63lient\"\xeb\x06\n\x12ListClientsRequest\x12\xf2\x01\n\x14include_plain_secret\x18\x01 \x01(\x08\x42\xbf\x01\x92\x41\xbb\x01\x32\xb1\x01Whether to include plain secret values in the response. Enable only during initial client creation, then store secrets securely. Not available when filtering by ALL client typesJ\x05\x66\x61lseR\x12includePlainSecret\x12\x8a\x01\n\x06\x66ilter\x18\x03 \x01(\x0b\x32..scalekit.v1.clients.ListClientsRequest.FilterBB\x92\x41?2=Filters clients by type: WEB, ENV, WEB_APP, NTV, SPA, or ALL.R\x06\x66ilter\x12]\n\npage_token\x18\x04 \x01(\tB>\x92\x41;2\"Token for the next page of resultsJ\x15\"next_page_token_123\"R\tpageToken\x12\x64\n\tpage_size\x18\x05 \x01(\rBG\x92\x41=27Number of clients per page. Defaults to 10, maximum 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x1a\x87\x02\n\x06\x46ilter\x12\xfc\x01\n\x0b\x63lient_type\x18\x01 \x03(\tB\xda\x01\x92\x41\xd6\x01\x32\xd3\x01\x46ilters clients by type. Valid values: WEB, ENV, WEB_APP, NTV, SPA, ALL. Defaults to WEB. ALL takes precedence and other types are ignored. For resource-specific clients (e.g., M2M), use ListResourceClients API.R\nclientTypeJ\x04\x08\x02\x10\x03\"\xf1\x03\n\x13ListClientsResponse\x12Z\n\ntotal_size\x18\x01 \x01(\rB;\x92\x41\x38\x32\x32Total number of client resources in the workspace.J\x02\x31\x32R\ttotalSize\x12\xc1\x01\n\x07\x63lients\x18\x02 \x03(\x0b\x32\x1b.scalekit.v1.clients.ClientB\x89\x01\x92\x41\x85\x01\x32\x82\x01List of client resource configurations matching the query criteria. Each client includes its metadata and authentication settings.R\x07\x63lients\x12\x65\n\x0fnext_page_token\x18\x03 \x01(\tB=\x92\x41:28Pagination token that retrieves the next page of resultsR\rnextPageToken\x12S\n\x0fprev_page_token\x18\x04 \x01(\tB+\x92\x41(2&Token for the previous page of resultsR\rprevPageToken\"\xed\x01\n\x13\x43reateClientRequest\x12\xd5\x01\n\x06\x63lient\x18\x01 \x01(\x0b\x32!.scalekit.v1.clients.CreateClientB\x99\x01\x92\x41\x8f\x01\x32\x1b\x43lient parameters to createJp{\"post_login_uris\": [\"https://app.example.com/callback\"], \"initiate_login_uri\": \"https://app.example.com/login\"}\xbaH\x03\xc8\x01\x01R\x06\x63lient\"\xc8\x17\n\x0c\x43reateClient\x12\xde\x01\n\x04name\x18\x01 \x01(\tB\xc9\x01\x92\x41\xba\x01\x32\x9e\x01\x41 descriptive name for the API client that helps identify its purpose. This name is displayed in the dashboard and logs. Must be between 1 and 128 characters.J\x17\"My Application Client\"\xbaH\x08r\x03\x18\x80\x01\xc8\x01\x01R\x04name\x12\xd6\x01\n\x0b\x63lient_type\x18\x02 \x01(\tB\xb4\x01\x92\x41\xa5\x01\x32\x99\x01\x43lient application type. Valid values: WEB_APP (web applications), SPA (single-page applications), NTV (native applications including mobile and desktop)J\x07WEB_APP\xbaH\x08r\x03\x18\x80\x01\xc8\x01\x01R\nclientType\x12\xb6\x02\n\x18\x62\x61\x63k_channel_logout_uris\x18\x03 \x03(\tB\xfc\x01\x92\x41\xe9\x01\x32wHTTPS endpoints that receive back-channel logout notifications for application-initiated logout and session management.Jn[\"https://app.example.com/backchannel-logout-internal\", \"https://app.example.com/backchannel-logout-external\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\x15\x62\x61\x63kChannelLogoutUris\x12\xb6\x02\n\x19post_logout_redirect_uris\x18\x04 \x03(\tB\xfa\x01\x92\x41\xe7\x01\x32\x9c\x01\x41llowed URIs for post-logout redirection. These URIs are used when a user is redirected after logout. Must use HTTPS and conform to security specifications.JF[\"https://app.example.com/logged-out\", \"https://app.example.com/home\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\x16postLogoutRedirectUris\x12\xff\x01\n\x12initiate_login_uri\x18\x05 \x01(\tB\xcb\x01\x92\x41\xc7\x01\x32\xa3\x01Pre-configured URI for initiating login flows. This URI is used to start authentication flows programmatically. Must use HTTPS protocol and contain a valid domain.J\x1f\"https://app.example.com/login\"H\x00R\x10initiateLoginUri\x88\x01\x01\x12\xf9\x01\n\x0fpost_login_uris\x18\x06 \x03(\tB\xd0\x01\x92\x41\xbd\x01\x32uList of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\rpostLoginUris\x12g\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x07 \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30R\x11\x61\x63\x63\x65ssTokenExpiry\x12\xb3\x01\n\x06scopes\x18\x08 \x03(\tB\x9a\x01\x92\x41\x96\x01\x32wList of scopes to be attached to this client. These scopes must be a subset of the scopes available in the environment.J\x1b[\"data:read\", \"data:write\"]R\x06scopes\x12\xc6\x01\n\rcustom_claims\x18\t \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\x7f\x92\x41|2zCustom claims to be included in access tokens. Please keep this to the essentials as this increases the size of the token.R\x0c\x63ustomClaims\x12\xf0\x01\n\x1c\x64isallow_scalekit_api_access\x18\n \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x92\x01\x92\x41\x8e\x01\x32\x85\x01If set to true, the client will be restricted from accessing Scalekit APIs directly, enhancing security by limiting its capabilities.J\x04trueR\x19\x64isallowScalekitApiAccess\x12\xe0\x01\n\x0bgrant_types\x18\x0b \x03(\tB\xbe\x01\x92\x41\xba\x01\x32yList of OAuth 2.0 grant types that the client is authorized to use. This defines how the client can obtain access tokens.J=[\"authorization_code\", \"refresh_token\", \"client_credentials\"]R\ngrantTypes\x12\xe1\x01\n\x0c\x65nforce_pkce\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xa1\x01\x92\x41\x9d\x01\x32\x94\x01Whether Proof Key for Code Exchange (PKCE) is required. PKCE mitigates authorization code interception attacks. Defaults to true for public clients.J\x04trueR\x0b\x65nforcePkce:\xd4\x01\x92\x41\xd0\x01\n\x9c\x01*\rCreate Client2\x8a\x01Request message for creating a new API client with specified configuration parameters including redirect URIs and authentication settings.*/\n\x11\x41PI Documentation\x12\x1ahttps://docs.scalekit.com/B\x15\n\x13_initiate_login_uri\"\x8c\x01\n\x14\x43reateClientResponse\x12t\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.clients.ClientB?\x92\x41<2:Created client with all settings reflected in the responseR\x06\x63lient\"\xfa\x03\n\x13UpdateClientRequest\x12}\n\tclient_id\x18\x01 \x01(\tB`\x92\x41T2:Unique identifier of the registered application to update.J\x16\"skc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\x12\x9f\x02\n\x06\x63lient\x18\x02 \x01(\x0b\x32!.scalekit.v1.clients.UpdateClientB\xe3\x01\x92\x41\xd9\x01\x32\x62\x41pplication configuration parameters to update. Contains redirect URIs and authentication settingsJs{\"redirect_uris\": [\"https://app.example.com/callback\"], \"default_redirect_uri\": \"https://app.example.com/callback\"}\xbaH\x03\xc8\x01\x01R\x06\x63lient\x12\x42\n\x04mask\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB\x12\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\x04mask\"\xa0\x1b\n\x0cUpdateClient\x12\x9e\x02\n\rredirect_uris\x18\x02 \x03(\tB\xf8\x01\x92\x41\xe5\x01\x32\x9c\x01List of allowed redirect URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTPS in production environments. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\x0credirectUris\x12\x9b\x02\n\x14\x64\x65\x66\x61ult_redirect_uri\x18\x03 \x01(\tB\xe3\x01\x92\x41\xa7\x01\x32\x80\x01Primary redirect URI used when none is specified in authorization requests. Must exactly match one of the URIs in redirect_uris.J\"\"https://app.example.com/callback\"\xbaH5\xba\x01\x32\n\tvalid_uri\x12\x17uri must be a valid URI\x1a\x0cthis.isUri()H\x00R\x12\x64\x65\x66\x61ultRedirectUri\x88\x01\x01\x12\xc3\x02\n\x18\x62\x61\x63k_channel_logout_uris\x18\x04 \x03(\tB\x89\x02\x92\x41\xf6\x01\x32\x95\x01HTTPS endpoints for receiving back-channel logout notifications. Required for implementing application-initiated logout flows and session management.J\\[\"https://app.example.com/backchannel-logout\", \"https://app.example.com/backchannel-logout\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\x15\x62\x61\x63kChannelLogoutUris\x12\xb6\x02\n\x19post_logout_redirect_uris\x18\x05 \x03(\tB\xfa\x01\x92\x41\xe7\x01\x32\x9c\x01\x41llowed URIs for post-logout redirection. These URIs are used when a user is redirected after logout. Must use HTTPS and conform to security specifications.JF[\"https://app.example.com/logged-out\", \"https://app.example.com/home\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\x16postLogoutRedirectUris\x12\xff\x01\n\x12initiate_login_uri\x18\x06 \x01(\tB\xcb\x01\x92\x41\xc7\x01\x32\xa3\x01Pre-configured URI for initiating login flows. This URI is used to start authentication flows programmatically. Must use HTTPS protocol and contain a valid domain.J\x1f\"https://app.example.com/login\"H\x01R\x10initiateLoginUri\x88\x01\x01\x12\xa3\x02\n\x0fpost_login_uris\x18\x07 \x03(\tB\xfa\x01\x92\x41\xe7\x01\x32\x9e\x01List of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTPS in production environments. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\rpostLoginUris\x12\xd3\x01\n\x04name\x18\x08 \x01(\tB\xbe\x01\x92\x41\xba\x01\x32\x9e\x01\x41 descriptive name for the API client that helps identify its purpose. This name is displayed in the dashboard and logs. Must be between 1 and 128 characters.J\x17\"My Application Client\"R\x04name\x12g\n\x13\x61\x63\x63\x65ss_token_expiry\x18\t \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30R\x11\x61\x63\x63\x65ssTokenExpiry\x12\xb3\x01\n\x06scopes\x18\x0b \x03(\tB\x9a\x01\x92\x41\x96\x01\x32wList of scopes to be attached to this client. These scopes must be a subset of the scopes available in the environment.J\x1b[\"data:read\", \"data:write\"]R\x06scopes\x12\xc6\x01\n\rcustom_claims\x18\x0c \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\x7f\x92\x41|2zCustom claims to be included in access tokens. Please keep this to the essentials as this increases the size of the token.R\x0c\x63ustomClaims\x12\xf0\x01\n\x1c\x64isallow_scalekit_api_access\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x92\x01\x92\x41\x8e\x01\x32\x85\x01If set to true, the client will be restricted from accessing Scalekit APIs directly, enhancing security by limiting its capabilities.J\x04trueR\x19\x64isallowScalekitApiAccess\x12\xe0\x01\n\x0bgrant_types\x18\x0e \x03(\tB\xbe\x01\x92\x41\xba\x01\x32yList of OAuth 2.0 grant types that the client is authorized to use. This defines how the client can obtain access tokens.J=[\"authorization_code\", \"refresh_token\", \"client_credentials\"]R\ngrantTypes\x12\xe1\x01\n\x0c\x65nforce_pkce\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xa1\x01\x92\x41\x9d\x01\x32\x94\x01Whether Proof Key for Code Exchange (PKCE) is required. PKCE mitigates authorization code interception attacks. Defaults to true for public clients.J\x04trueR\x0b\x65nforcePkce:\x81\x02\x92\x41\xfd\x01\n\xbd\x01*\x1bUpdate Client Configuration2\x9d\x01Parameters for updating an API client application\'s configuration. This allows modification of redirect URIs, logout settings, and other security parameters.*;\n\x11\x41PI Documentation\x12&https://docs.scalekit.com/m2m/overviewB\x17\n\x15_default_redirect_uriB\x15\n\x13_initiate_login_uri\"\xa8\x01\n\x14UpdateClientResponse\x12\x8f\x01\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.clients.ClientBZ\x92\x41W2UUpdated application configuration with all current settings reflected in the responseR\x06\x63lient\"\xae\x01\n\x19\x43reateClientSecretRequest\x12\x90\x01\n\tclient_id\x18\x01 \x01(\tBs\x92\x41g2MUnique identifier of the client application for which to create a new secret.J\x16\"skc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\"\xad\x03\n\x1a\x43reateClientSecretResponse\x12\xc6\x01\n\x0cplain_secret\x18\x01 \x01(\tB\xa2\x01\x92\x41\x9e\x01\x32\x84\x01Plaintext secret value. This value is only returned once at creation time and must be stored securely. It cannot be retrieved again.J\x15\"sec_plaintext123456\"R\x0bplainSecret\x12\xc5\x01\n\x06secret\x18\x02 \x01(\x0b\x32!.scalekit.v1.clients.ClientSecretB\x89\x01\x92\x41\x85\x01\x32\x82\x01Metadata about the newly created secret, including its ID, creation time, and status. Does not include the plaintext secret value.R\x06secret\"\x83\x05\n\x19UpdateClientSecretRequest\x12\x8f\x01\n\tclient_id\x18\x01 \x01(\tBr\x92\x41\x66\x32LUnique identifier of the client application containing the secret to update.J\x16\"skc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\x12\xab\x01\n\tsecret_id\x18\x02 \x01(\tB\x8d\x01\x92\x41\x80\x01\x32\x66Unique identifier of the client secret to update. This references a specific secret within the client.J\x16\"sec_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08secretId\x12\xb0\x01\n\x06secret\x18\x03 \x01(\x0b\x32\'.scalekit.v1.clients.UpdateClientSecretBo\x92\x41\x66\x32\x64Updated settings for the secret. Currently supports modifying the secret\'s status (active/inactive).\xbaH\x03\xc8\x01\x01R\x06secret\x12s\n\x04mask\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskBC\x92\x41@2>Specifies which fields to update. System-controlled parameter.R\x04mask\"\xec\x01\n\x12UpdateClientSecret\x12\xd5\x01\n\x06status\x18\x01 \x01(\x0e\x32\'.scalekit.v1.clients.ClientSecretStatusB\x93\x01\x92\x41\x8f\x01\x32\x82\x01Status to set for the client secret. Set to ACTIVE to enable the secret for authentication, or INACTIVE to temporarily disable it.J\x08INACTIVER\x06status\"\xe7\x01\n\x1aUpdateClientSecretResponse\x12\xc8\x01\n\x06secret\x18\x01 \x01(\x0b\x32!.scalekit.v1.clients.ClientSecretB\x8c\x01\x92\x41\x88\x01\x32\x85\x01Updated secret metadata, reflecting the changes made by the update operation. Note that the plaintext secret value is never returned.R\x06secret\"\x85\x01\n\x13\x44\x65leteClientRequest\x12n\n\tclient_id\x18\x01 \x01(\tBQ\x92\x41\x45\x32*Unique identifier of the client to delete.J\x17\"webc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\"\xb3\x02\n\x19\x44\x65leteClientSecretRequest\x12q\n\tclient_id\x18\x01 \x01(\tBT\x92\x41H2.Identifier of the client containing the secretJ\x16\"skc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\x12\xa2\x01\n\tsecret_id\x18\x02 \x01(\tB\x84\x01\x92\x41x2^Unique identifier of the client secret to permanently delete. This operation cannot be undone.J\x16\"sec_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08secretId\"\xd7\"\n\x06\x43lient\x12\xe2\x01\n\x02id\x18\x01 \x01(\tB\xd1\x01\x92\x41\xcd\x01\x32\xb2\x01Unique identifier for the client application. This ID is automatically generated when the client is created and cannot be modified. Used in API requests and authentication flows.J\x16\"skc_1234abcd5678efgh\"R\x02id\x12\xd7\x01\n\x05keyId\x18\x02 \x01(\tB\xc0\x01\x92\x41\xbc\x01\x32\xa1\x01Identifier for the cryptographic key pair used to sign tokens. This key is used for JWT signing operations. Keys can be rotated by generating new client secrets.J\x16\"key_9876zyxw5432vuts\"R\x05keyId\x12\xf0\x01\n\x0b\x63reate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xb2\x01\x92\x41\xae\x01\x32\x8f\x01Timestamp indicating when the client configuration was initially created. This field is automatically set by the server and cannot be modified.J\x1a\"2024-01-05T14:48:00.000Z\"R\ncreateTime\x12\x81\x02\n\x0bupdate_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xc3\x01\x92\x41\xbf\x01\x32\xa0\x01Timestamp of the last modification to the client configuration. This field is automatically updated by the server whenever any aspect of the client is modified.J\x1a\"2024-01-10T09:12:00.000Z\"R\nupdateTime\x12\xd5\x02\n\rredirect_uris\x18\x05 \x03(\tB\xaf\x02\x92\x41\xab\x02\x32\xdb\x01List of allowed redirect URIs for OAuth 2.0 authorization flows. These URIs must use HTTPS protocol in production environments and comply with RFC 6749. Users will be redirected to one of these URIs after authorization.JK[\"https://auth.your-app.com/callback\", \"https://scalekit.example.org/auth\"]R\x0credirectUris\x12\x80\x02\n\x14\x64\x65\x66\x61ult_redirect_uri\x18\x06 \x01(\tB\xcd\x01\x92\x41\xc9\x01\x32\xa0\x01Primary redirect URI used when none is explicitly specified in authorization requests. This URI must exactly match one of the entries in the redirect_uris list.J$\"https://auth.your-app.com/callback\"R\x12\x64\x65\x66\x61ultRedirectUri\x12\xa5\x02\n\x07secrets\x18\x07 \x03(\x0b\x32!.scalekit.v1.clients.ClientSecretB\xe7\x01\x92\x41\xe3\x01\x32\xe0\x01List of client secrets used for authentication. Each secret is stored securely using one-way hashing (bcrypt). The plaintext secret values are only displayed during initial creation and must be stored securely by the client.R\x07secrets\x12\xa3\x02\n\x19post_logout_redirect_uris\x18\x08 \x03(\tB\xe7\x01\x92\x41\xe3\x01\x32\xba\x01\x41llowed URIs for post-logout redirection. These URIs are used when a user is redirected after signing out. Must use HTTPS and conform to OpenID Connect Session Management specifications.J$[\"https://auth.your-app.com/logout\"]R\x16postLogoutRedirectUris\x12\xc9\x02\n\x18\x62\x61\x63k_channel_logout_uris\x18\t \x03(\tB\x8f\x02\x92\x41\x8b\x02\x32\xd8\x01HTTPS endpoint for receiving back-channel logout notifications. This URI is called by the authentication server when a session expires or is terminated. Required for implementing relying party-initiated logout flows.J.\"https://auth.your-app.com/backchannel-logout\"R\x15\x62\x61\x63kChannelLogoutUris\x12\xa0\x02\n\x12initiate_login_uri\x18\n \x01(\tB\xf1\x01\x92\x41\xed\x01\x32\xbf\x01Pre-configured URI for initiating login flows programmatically. This URI must use the HTTPS scheme and contain a valid domain. Used for starting authentication flows without user interaction.J)\"https://auth.your-app.com/initiate-auth\"R\x10initiateLoginUri\x12\xab\x02\n\x0fpost_login_uris\x18\x0b \x03(\tB\x82\x02\x92\x41\xfe\x01\x32\xb3\x01List of allowed redirect URIs for OAuth 2.0 authorization flows. These URIs must use HTTPS protocol in production environments and comply with RFC 6749. Maximum of 5 URIs allowed.JF[\"https://auth.your-app.com/callback\", \"https://dev.example.com/auth\"]R\rpostLoginUris\x12t\n\x04name\x18\x0c \x01(\tB`\x92\x41]2BA descriptive name for the client that helps identify its purpose.J\x17\"My Application Client\"R\x04name\x12l\n\x13\x61\x63\x63\x65ss_token_expiry\x18\r \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30H\x00R\x11\x61\x63\x63\x65ssTokenExpiry\x88\x01\x01\x12g\n\x06scopes\x18\x0e \x03(\tBO\x92\x41L2-List of scopes to be attached to this client.J\x1b[\"data:read\", \"data:write\"]R\x06scopes\x12\xc6\x01\n\rcustom_claims\x18\x0f \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\x7f\x92\x41|2zCustom claims to be included in access tokens. Please keep this to the essentials as this increases the size of the token.R\x0c\x63ustomClaims\x12\x8f\x01\n\x1c\x64isallow_scalekit_api_access\x18\x10 \x01(\x08\x42N\x92\x41K2CIf true, the client will be restricted from accessing Scalekit APIsJ\x04trueR\x19\x64isallowScalekitApiAccess\x12\xaa\x01\n\x0bgrant_types\x18\x11 \x03(\tB\x88\x01\x92\x41\x84\x01\x32\x43List of OAuth 2.0 grant types that the client is authorized to use.J=[\"authorization_code\", \"refresh_token\", \"client_credentials\"]R\ngrantTypes\x12\x66\n\x0b\x63lient_type\x18\x12 \x01(\tBE\x92\x41\x42\x32\x39Type of client. Valid values: WEB, ENV, WEB_APP, NTV, SPAJ\x05\"WEB\"R\nclientType\x12\xc5\x01\n\x0c\x65nforce_pkce\x18\x13 \x01(\x08\x42\xa1\x01\x92\x41\x9d\x01\x32\x94\x01Whether Proof Key for Code Exchange (PKCE) is required. PKCE mitigates authorization code interception attacks. Defaults to true for public clients.J\x04trueR\x0b\x65nforcePkce:\xb3\x01\x92\x41\xaf\x01\n\xac\x01*\x12\x43lient Application2\x95\x01\x43onfiguration for an API client application registered with Scalekit. Contains authentication settings, redirect URIs, and other security parameters.B\x16\n\x14_access_token_expiry\"\xc1\x13\n\x0c\x43lientSecret\x12\xd5\x01\n\x02id\x18\x01 \x01(\tB\xc4\x01\x92\x41\xc0\x01\x32\xa5\x01The unique identifier for this client secret. This ID is used to reference the secret in API requests for management operations like updating or deleting the secret.J\x16\"sec_1234abcd5678efgh\"R\x02id\x12\xd1\x01\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x93\x01\x92\x41\x8f\x01\x32qThe timestamp when this secret was created. This field is automatically set by the server and cannot be modified.J\x1a\"2024-01-05T14:48:00.000Z\"R\ncreateTime\x12\x86\x02\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xc8\x01\x92\x41\xc4\x01\x32\xa5\x01The timestamp when this secret was last updated. This field is automatically updated by the server when the secret\'s status changes or other properties are modified.J\x1a\"2024-01-10T09:12:00.000Z\"R\nupdateTime\x12\x82\x02\n\rsecret_suffix\x18\x04 \x01(\tB\xdc\x01\x92\x41\xd8\x01\x32\xcd\x01\x41 suffix that helps identify this secret. This is the last few characters of the full secret value but is not sufficient for authentication. Helps identify which secret is being used in logs and debugging.J\x06\"xyzw\"R\x0csecretSuffix\x12\xc9\x01\n\ncreated_by\x18\x05 \x01(\tB\xa4\x01\x92\x41\xa0\x01\x32\x8f\x01The identifier of the user or system that created this secret. This field helps track who created the secret for audit and compliance purposes.J\x0c\"user_12345\"H\x00R\tcreatedBy\x88\x01\x01\x12\x86\x02\n\x06status\x18\x06 \x01(\x0e\x32\'.scalekit.v1.clients.ClientSecretStatusB\xc4\x01\x92\x41\xc0\x01\x32\xb1\x01The current status of this secret. A secret must be ACTIVE to be used for authentication. INACTIVE secrets cannot be used for authentication but are retained for audit purposes.J\n\"INACTIVE\"R\x06status\x12\x8c\x02\n\x0b\x65xpire_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xce\x01\x92\x41\xca\x01\x32\xab\x01The timestamp when this secret will expire. After this time, the secret cannot be used for authentication regardless of its status. If not set, the secret does not expire.J\x1a\"2025-01-05T14:48:00.000Z\"R\nexpireTime\x12\xa6\x02\n\x0elast_used_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xe3\x01\x92\x41\xdf\x01\x32\xc0\x01The timestamp when this secret was last used for authentication. This field helps track secret usage for security monitoring and identifying unused secrets that may be candidates for rotation.J\x1a\"2024-02-15T10:30:00.000Z\"R\x0clastUsedTime\x12\xb3\x02\n\x0cplain_secret\x18\t \x01(\tB\x8a\x02\x92\x41\x86\x02\x32\xd7\x01The full plaintext secret value. This field is only populated when the secret is first created and is never stored by the server. It must be securely stored by the client application as it cannot be retrieved again.J*\"sec_1234567890abcdefghijklmnopqrstuvwxyz\"H\x01R\x0bplainSecret\x88\x01\x01:\x93\x01\x92\x41\x8f\x01\n\x8c\x01*\rClient Secret2{A secure credential used for authenticating an API client. Each client can have multiple secrets for key rotation purposes.B\r\n\x0b_created_byB\x0f\n\r_plain_secret\"\xb8\x02\n\x05Scope\x12\xa8\x01\n\x02id\x18\x01 \x01(\tB\x97\x01\x92\x41\x8a\x01\x32tUnique identifier for the scope resource. Must be between 1 and 100 characters long and match the specified pattern.J\x12\"scope_1234567890\"\xbaH\x06r\x04\x10\x01\x18\x64R\x02id\x12\x36\n\x04name\x18\x02 \x01(\tB\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9:]{1,64}$\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\x12 \n\x07\x65nabled\x18\x04 \x01(\x08\x42\x06\xbaH\x03\xc8\x01\x01R\x07\x65nabled\"q\n\x0b\x43reateScope\x12\x36\n\x04name\x18\x01 \x01(\tB\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9:]{1,64}$\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\"\xf3\x01\n\x12\x43reateScopeRequest\x12>\n\x05scope\x18\x01 \x01(\x0b\x32 .scalekit.v1.clients.CreateScopeB\x06\xbaH\x03\xc8\x01\x01R\x05scope\x12\x9c\x01\n\x06\x65nv_id\x18\x02 \x01(\tB\x84\x01\x92\x41x2dUnique identifier of the environment where the scope will be created. Must start with \'env_\' prefix.J\x10\"env_1234567890\"\xbaH\x06r\x04\x10\x00\x18 R\x05\x65nvId\"G\n\x13\x43reateScopeResponse\x12\x30\n\x05scope\x18\x01 \x01(\x0b\x32\x1a.scalekit.v1.clients.ScopeR\x05scope\"\xaa\x01\n\x11ListScopesRequest\x12\x94\x01\n\x06\x65nv_id\x18\x01 \x01(\tB}\x92\x41q2]Unique identifier of the environment for which to list scopes. Must start with \'env_\' prefix.J\x10\"env_1234567890\"\xbaH\x06r\x04\x10\x00\x18 R\x05\x65nvId\"H\n\x12ListScopesResponse\x12\x32\n\x06scopes\x18\x01 \x03(\x0b\x32\x1a.scalekit.v1.clients.ScopeR\x06scopes\"o\n\x12UpdateScopeRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18\x64R\x02id\x12>\n\x05scope\x18\x02 \x01(\x0b\x32 .scalekit.v1.clients.UpdateScopeB\x06\xbaH\x03\xc8\x01\x01R\x05scope\"o\n\x0bUpdateScope\x12*\n\x0b\x64\x65scription\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\x12\x34\n\x07\x65nabled\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x07\x65nabled\"G\n\x13UpdateScopeResponse\x12\x30\n\x05scope\x18\x01 \x01(\x0b\x32\x1a.scalekit.v1.clients.ScopeR\x05scope\"1\n\x12\x44\x65leteScopeRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06:\x04scp_R\x02id\"\xdc\x04\n\x19GetConsentDetailsResponse\x12\x61\n\x08resource\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.clients.ResourceB&\x92\x41#2!Details of the requested resourceR\x08resource\x12[\n\x04user\x18\x02 \x01(\x0b\x32\x19.scalekit.v1.clients.UserB,\x92\x41)2\'Details of the user who granted consentR\x04user\x12r\n\x06\x63lient\x18\x03 \x01(\x0b\x32\".scalekit.v1.clients.ConsentClientB6\x92\x41\x33\x32\x31\x44\x65tails of the client resource requesting consentR\x06\x63lient\x12\x9b\x01\n\x06scopes\x18\x04 \x03(\x0b\x32!.scalekit.v1.clients.ConsentScopeB`\x92\x41]2[List of scopes for which consent was granted. Each scope includes its name and description.R\x06scopes\x12m\n\x0b\x61pplication\x18\x05 \x01(\x0b\x32 .scalekit.v1.clients.ApplicationB)\x92\x41&2$Details of the requested applicationR\x0b\x61pplication\"\xba\x05\n\rConsentClient\x12R\n\x04name\x18\x01 \x01(\tB>\x92\x41;2.Name of the client resource requesting consentJ\t\"VS Code\"R\x04name\x12x\n\x0bprivacy_uri\x18\x02 \x01(\tBW\x92\x41M2,Privacy policy URI of the client applicationJ\x1d\"https://yourapp.com/privacy\"\xbaH\x04r\x02\x18\x64R\nprivacyUri\x12q\n\x07tos_uri\x18\x03 \x01(\tBX\x92\x41M2.Terms of service URI of the client applicationJ\x1b\"https://yourapp.com/terms\"\xbaH\x05r\x03\x18\xd0\x0fR\x06tosUri\x12o\n\tclient_id\x18\x04 \x01(\tBR\x92\x41O2;Unique identifier of the client resource requesting consentJ\x10\"m2m_1234567890\"R\x08\x63lientId\x12\x8e\x01\n\x0cmetadata_uri\x18\x05 \x01(\tBk\x92\x41h2AMetadata URI of the client application - applicable for CIMD onlyJ#\"https://example.com/metadata.json\"R\x0bmetadataUri\x12\x66\n\x08logo_uri\x18\x06 \x01(\tBK\x92\x41H2\"Logo URI of the client applicationJ\"\"https://cdn.example.com/logo.png\"R\x07logoUri\"\\\n\x0c\x43onsentScope\x12 \n\x04name\x18\x01 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\"r\n\x04User\x12j\n\x05\x65mail\x18\x01 \x01(\tBT\x92\x41Q28Email address of the user. Must be a valid email format.J\x15\x61lice.doe@example.comR\x05\x65mail\"\xa2\x02\n\x18RevokeUserConsentRequest\x12\x87\x01\n\tclient_id\x18\x01 \x01(\tBj\x92\x41X2DUnique identifier of the client resource for which to revoke consentJ\x10\"m2m_1234567890\"\xbaH\x0cr\n\x10\x01\x18 :\x04m2m_R\x08\x63lientId\x12|\n\nconsent_id\x18\x02 \x01(\tB]\x92\x41G2/Unique identifier of the user consent to revokeJ\x14\"usrcnst_1234567890\"\xbaH\x10r\x0e\x10\x01\x18 :\x08usrcnst_R\tconsentId\"\x1b\n\x19RevokeUserConsentResponse\"\x9f\x01\n\x1f\x45nsureResourceConnectionRequest\x12|\n\x0bresource_id\x18\x01 \x01(\tB[\x92\x41O24Unique identifier of the client resource to retrieveJ\x17\"app_69388798466720005\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\"\xd4\x01\n EnsureResourceConnectionResponse\x12\xaf\x01\n\nconnection\x18\x01 \x01(\x0b\x32\'.scalekit.v1.clients.ResourceConnectionBf\x92\x41]2[Details of the connection resource. Contains configuration settings and status information.\xbaH\x03\xc8\x01\x01R\nconnection\"\xb0\x07\n\x12ResourceConnection\x12T\n\x02id\x18\x01 \x01(\tBD\x92\x41\x41\x32,Unique identifier of the connection resourceJ\x11\"conn_1234567890\"R\x02id\x12\xa1\x01\n\x04type\x18\x02 \x01(\x0e\x32+.scalekit.v1.clients.ResourceConnectionTypeB`\x92\x41]2QType of connection. Determines the authentication method used for the connection.J\x08\"CUSTOM\"R\x04type\x12\x94\x01\n\x06status\x18\x03 \x01(\tB|\x92\x41y2mCurrent status of the connection. Indicates whether the connection is active, inactive, or in an error state.J\x08\"ACTIVE\"R\x06status\x12\x89\x01\n\x07\x65nabled\x18\x04 \x01(\x08\x42o\x92\x41l2dIndicates whether the connection is enabled. Disabled connections cannot be used for authentication.J\x04trueR\x07\x65nabled\x12\xe7\x01\n\x08settings\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructB\xb1\x01\x92\x41\xad\x01\x32kConfiguration settings for the connection. The structure of this field varies based on the connection type.J>{\"api_key\": \"abcd1234\", \"endpoint\": \"https://api.example.com\"}R\x08settings\x12\x92\x01\n\x08provider\x18\x06 \x01(\tBv\x92\x41s2^The provider of the connection. Indicates the service or platform that manages the connection.J\x11\"custom_provider\"R\x08provider\"\xdc\x01\n ResourceCustomConnectionSettings\x12\xb7\x01\n\rauthorize_uri\x18\x01 \x01(\tB\x91\x01\x92\x41\x83\x01\x32[The URI where users are redirected to authorize the application. Must be a valid HTTPS URL.J$\"https://auth.example.com/authorize\"\xbaH\x07r\x05\x10\x01\x88\x01\x01R\x0c\x61uthorizeUri*k\n\x0cResourceType\x12\x1d\n\x19RESOURCE_TYPE_UNSPECIFIED\x10\x00\x12\x07\n\x03WEB\x10\x01\x12\n\n\x06MOBILE\x10\x02\x12\x0b\n\x07\x44\x45SKTOP\x10\x03\x12\n\n\x06SERVER\x10\x04\x12\x0e\n\nMCP_SERVER\x10\x05*.\n\x12\x43lientSecretStatus\x12\n\n\x06\x41\x43TIVE\x10\x00\x12\x0c\n\x08INACTIVE\x10\x01*1\n\x16ResourceConnectionType\x12\x0b\n\x07INVALID\x10\x00\x12\n\n\x06\x43USTOM\x10\x01\x32\xb9\x8a\x01\n\rClientService\x12\xa0\x03\n\nListClient\x12\'.scalekit.v1.clients.ListClientsRequest\x1a(.scalekit.v1.clients.ListClientsResponse\"\xbe\x02\x92\x41\x8e\x02\n\x08\x41PI Auth\x12\x10List API clients\x1a\x90\x01Retrieves a paginated list of API client applications in the environment. Returns only environment-level clients, not resource-specific clients.J]\n\x03\x32\x30\x30\x12V\n&List of clients returned successfully.\x12,\n*\x1a(.scalekit.v1.clients.ListClientsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x11\x12\x0f/api/v1/clients\x12\xb4\x03\n\x0c\x43reateClient\x12(.scalekit.v1.clients.CreateClientRequest\x1a).scalekit.v1.clients.CreateClientResponse\"\xce\x02\x92\x41\x96\x02\n\x06\x43lient\x12\rCreate Client\x1a\x81\x01\x43reates an OAuth client with properties including post-login URIs, scopes, and custom claims. Required fields: name, client_type.Jy\n\x03\x32\x30\x30\x12r\nAClient created successfully. Returns the created client resource.\x12-\n+\x1a).scalekit.v1.clients.CreateClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\"\x0f/api/v1/clients:\x06\x63lient\x12\xd0\x04\n\tGetClient\x12%.scalekit.v1.clients.GetClientRequest\x1a&.scalekit.v1.clients.GetClientResponse\"\xf3\x03\x92\x41\xb7\x03\n\x0e\x43lient Configs\x12\x18Get Client Configuration\x1a\xc5\x01Retrieves complete client configuration including scopes, custom claims, redirect URIs, and access token expiration time. Use this endpoint to view or verify client settings and security parametersJ\xc2\x01\n\x03\x32\x30\x30\x12\xba\x01\n\x8b\x01\x43lient configuration retrieved successfully. Returns full client metadata including scopes, audience, custom claims, and security settings.\x12*\n(\x1a&.scalekit.v1.clients.GetClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1d\x12\x1b/api/v1/clients/{client_id}\x12\xc3\x05\n\x0cUpdateClient\x12(.scalekit.v1.clients.UpdateClientRequest\x1a).scalekit.v1.clients.UpdateClientResponse\"\xdd\x04\x92\x41\x99\x04\n\x0e\x43lient Configs\x12\x1bUpdate Client Configuration\x1a\xb0\x02Updates the configuration settings for an M2M client. This endpoint allows you to modify client properties such as redirect URIs, scopes, audience, and custom claims. Required fields include redirect_uris and default_redirect_uri. Note that client_id and create_time are immutable and cannot be modified.J\xb6\x01\n\x03\x32\x30\x31\x12\xae\x01\n}Client configuration updated successfully. Returns the updated client resource with new update_time and all current settings.\x12-\n+\x1a).scalekit.v1.clients.UpdateClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%2\x1b/api/v1/clients/{client_id}:\x06\x63lient\x12\x9a\x03\n\x0c\x44\x65leteClient\x12(.scalekit.v1.clients.DeleteClientRequest\x1a\x16.google.protobuf.Empty\"\xc7\x02\x92\x41\x8b\x02\n\x06\x43lient\x12\rDelete Client\x1a\xb2\x01Permanently deletes a client and associated secrets. This operation cannot be undone. Supports WEB_APP, NTV, and SPA client types only. Cannot delete default environment clients.J=\n\x03\x32\x30\x30\x12\x36\n4Client successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1d*\x1b/api/v1/clients/{client_id}\x12\xa4\x05\n\x12\x43reateClientSecret\x12..scalekit.v1.clients.CreateClientSecretRequest\x1a/.scalekit.v1.clients.CreateClientSecretResponse\"\xac\x04\x92\x41\xe8\x03\n\x0e\x43lient Configs\x12\x14\x43reate Client Secret\x1a\x82\x02Generates a new client secret for an API client. This endpoint creates a secure credential that can be used for OAuth 2.0 client credentials flow. The plain secret is only returned once during creation and should be stored securely by the client application.J\xba\x01\n\x03\x32\x30\x31\x12\xb2\x01\n{Client secret created successfully. Returns the new secret ID and the plain secret value (only available at creation time).\x12\x33\n1\x1a/.scalekit.v1.clients.CreateClientSecretResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\"#/api/v1/clients/{client_id}/secrets\x12\xca\x05\n\x12UpdateClientSecret\x12..scalekit.v1.clients.UpdateClientSecretRequest\x1a/.scalekit.v1.clients.UpdateClientSecretResponse\"\xd2\x04\x92\x41\xbf\x03\n\x0e\x43lient Configs\x12\x14Update Client Secret\x1a\xfd\x01Updates the status of a client secret. This endpoint allows you to activate or deactivate a client secret. Use this to rotate secrets or revoke access for compromised credentials. The secret value itself cannot be modified - create a new secret instead.J\x96\x01\n\x03\x32\x30\x30\x12\x8e\x01\nWClient secret updated successfully. Returns the updated secret with its current status.\x12\x33\n1\x1a/.scalekit.v1.clients.UpdateClientSecretResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02t\x1a//api/v1/clients/{client_id}/secrets/{secret_id}:\x06secretZ92//api/v1/clients/{client_id}/secrets/{secret_id}:\x06secret\x12\xe3\x03\n\x12\x44\x65leteClientSecret\x12..scalekit.v1.clients.DeleteClientSecretRequest\x1a\x16.google.protobuf.Empty\"\x84\x03\x92\x41\xb4\x02\n\x0e\x43lient Configs\x12\x14\x44\x65lete Client Secret\x1a\xc5\x01Permanently deletes a client secret. This operation cannot be undone. Use this endpoint to remove compromised or unused secrets. After deletion, the secret can no longer be used for authentication.JD\n\x03\x32\x30\x30\x12=\n;Client secret successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31*//api/v1/clients/{client_id}/secrets/{secret_id}\x12\x92\x05\n\x18\x43reateOrganizationClient\x12\x34.scalekit.v1.clients.CreateOrganizationClientRequest\x1a\x35.scalekit.v1.clients.CreateOrganizationClientResponse\"\x88\x04\x92\x41\xbf\x03\n\x08\x41PI Auth\x12\x1e\x43reate organization API client\x1arCreates a new API client for an organization. Returns the client details and a plain secret (available only once).J\x9e\x02\n\x03\x32\x30\x31\x12\x96\x02\n\xd8\x01\x41PI client created successfully. Returns the client ID and plain secret (only available at creation time). The client can be configured with scopes, audience values, and custom claims for fine-grained access control.\x12\x39\n7\x1a\x35.scalekit.v1.clients.CreateOrganizationClientResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x39\"//api/v1/organizations/{organization_id}/clients:\x06\x63lient\x12\xb5\x04\n\x15GetOrganizationClient\x12\x31.scalekit.v1.clients.GetOrganizationClientRequest\x1a\x32.scalekit.v1.clients.GetOrganizationClientResponse\"\xb4\x03\x92\x41\xe7\x02\n\x08\x41PI Auth\x12\x1bGet organization API client\x1a>Retrieves details of a specific API client in an organization.J\xfd\x01\n\x03\x32\x30\x30\x12\xf5\x01\n\xba\x01Returns the complete API client configuration, including all current settings and a list of active secrets. Note that secret values are not included in the response for security reasons.\x12\x36\n4\x1a\x32.scalekit.v1.clients.GetOrganizationClientResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02=\x12;/api/v1/organizations/{organization_id}/clients/{client_id}\x12\x89\x05\n\x1e\x43reateOrganizationClientSecret\x12:.scalekit.v1.clients.CreateOrganizationClientSecretRequest\x1a;.scalekit.v1.clients.CreateOrganizationClientSecretResponse\"\xed\x03\x92\x41\x98\x03\n\x08\x41PI Auth\x12%Create organization API client secret\x1a\x64\x43reates a new secret for an organization API client. Returns the plain secret (available only once).J\xfe\x01\n\x03\x32\x30\x31\x12\xf6\x01\n\xb2\x01\x43lient secret created successfully. Returns the new secret ID and the plain secret value (only available at creation time). The secret can be used immediately for authentication.\x12?\n=\x1a;.scalekit.v1.clients.CreateOrganizationClientSecretResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x45\"C/api/v1/organizations/{organization_id}/clients/{client_id}/secrets\x12\xaf\x03\n\x1e\x44\x65leteOrganizationClientSecret\x12:.scalekit.v1.clients.DeleteOrganizationClientSecretRequest\x1a\x16.google.protobuf.Empty\"\xb8\x02\x92\x41\xd7\x01\n\x08\x41PI Auth\x12%Delete organization API client secret\x1a^Permanently deletes a secret from an organization API client. This operation cannot be undone.JD\n\x03\x32\x30\x30\x12=\n;Client secret successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02Q*O/api/v1/organizations/{organization_id}/clients/{client_id}/secrets/{secret_id}\x12\xc2\x04\n\x18UpdateOrganizationClient\x12\x34.scalekit.v1.clients.UpdateOrganizationClientRequest\x1a\x35.scalekit.v1.clients.UpdateOrganizationClientResponse\"\xb8\x03\x92\x41\xe3\x02\n\x08\x41PI Auth\x12\x1eUpdate organization API client\x1aPUpdates an existing organization API client. Only specified fields are modified.J\xe4\x01\n\x03\x32\x30\x30\x12\xdc\x01\n\x9e\x01Returns the updated organization API client with all current details reflected in the response, including modified scopes, audience values, and custom claims.\x12\x39\n7\x1a\x35.scalekit.v1.clients.UpdateOrganizationClientResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x45\x32;/api/v1/organizations/{organization_id}/clients/{client_id}:\x06\x63lient\x12\xa3\x04\n\x18\x44\x65leteOrganizationClient\x12\x34.scalekit.v1.clients.DeleteOrganizationClientRequest\x1a\x16.google.protobuf.Empty\"\xb8\x03\x92\x41\xeb\x02\n\x08\x41PI Auth\x12\x1e\x44\x65lete organization API client\x1a\xee\x01Permanently deletes an API client from an organization. This operation cannot be undone and will revoke all access for the client. All associated secrets will also be invalidated. Use this endpoint to remove unused or compromised clients.JN\n\x03\x32\x30\x30\x12G\nEOrganization API client successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02=*;/api/v1/organizations/{organization_id}/clients/{client_id}\x12\xe8\x04\n\x17ListOrganizationClients\x12\x33.scalekit.v1.clients.ListOrganizationClientsRequest\x1a\x34.scalekit.v1.clients.ListOrganizationClientsResponse\"\xe1\x03\x92\x41\xa0\x03\n\x08\x41PI Auth\x12\x1dList organization API clients\x1a\xb9\x01Retrieves a paginated list of API clients for a specific organization. Returns client details including metadata, scopes, and secret information (without exposing actual secret values).J\xb8\x01\n\x03\x32\x30\x30\x12\xb0\x01\ntList of organization API clients returned successfully. Each client includes its configuration details and metadata.\x12\x38\n6\x1a\x34.scalekit.v1.clients.ListOrganizationClientsResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x31\x12//api/v1/organizations/{organization_id}/clients\x12\x95\x03\n\x0e\x43reateResource\x12*.scalekit.v1.clients.CreateResourceRequest\x1a+.scalekit.v1.clients.CreateResourceResponse\"\xa9\x02\x92\x41\xed\x01\n\x08\x41PI Auth\x12\x0f\x43reate Resource\x1aXCreates a new client resource. The response includes the resource ID and other metadata.Jv\n\x03\x32\x30\x31\x12o\nResource details retrieved successfully. Returns the resource.\x12,\n*\x1a(.scalekit.v1.clients.GetResourceResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\x12\x1f/api/v1/resources/{resource_id}\x12\xd3\x02\n\rListResources\x12).scalekit.v1.clients.ListResourcesRequest\x1a*.scalekit.v1.clients.ListResourcesResponse\"\xea\x01\x92\x41\xb8\x01\n\x08\x41PI Auth\x12\x11List applications\x1a\x36Retrieves a paginated list of API client applications.Ja\n\x03\x32\x30\x30\x12Z\n(List of resources returned successfully.\x12.\n,\x1a*.scalekit.v1.clients.ListResourcesResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x13\x12\x11/api/v1/resources\x12\x93\x03\n\x0eUpdateResource\x12*.scalekit.v1.clients.UpdateResourceRequest\x1a+.scalekit.v1.clients.UpdateResourceResponse\"\xa7\x02\x92\x41\xdd\x01\n\x08\x41PI Auth\x12\x0fUpdate Resource\x1aHUpdates an existing client resource. Only specified fields are modified.Jv\n\x03\x32\x30\x30\x12o\nResource details retrieved successfully. Returns the resource.\x12,\n*\x1a(.scalekit.v1.clients.GetResourceResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\x1a//api/v1/resources/{resource_id}/provider:delete\x12\xf5\x03\n\x14\x43reateResourceClient\x12\x30.scalekit.v1.clients.CreateResourceClientRequest\x1a\x31.scalekit.v1.clients.CreateResourceClientResponse\"\xf7\x02\x92\x41\xa7\x02\n\x08\x41PI Auth\x12\x16\x43reate Resource Client\x1apCreates a new API client under the specified resource. Returns client details and the plain secret (shown once).J\x90\x01\n\x03\x32\x30\x31\x12\x88\x01\nOClient created successfully. Returns the client configuration and plain secret.\x12\x35\n3\x1a\x31.scalekit.v1.clients.CreateResourceClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\"\'/api/v1/resources/{resource_id}/clients:\x06\x63lient\x12\xcf\x03\n\x14UpdateResourceClient\x12\x30.scalekit.v1.clients.UpdateResourceClientRequest\x1a\x31.scalekit.v1.clients.UpdateResourceClientResponse\"\xd1\x02\x92\x41\xf5\x01\n\x08\x41PI Auth\x12\x16Update Resource Client\x1aHUpdates the configuration of an API client under the specified resource.J\x86\x01\n\x03\x32\x30\x30\x12\x7f\nFClient updated successfully. Returns the updated client configuration.\x12\x35\n3\x1a\x31.scalekit.v1.clients.UpdateResourceClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02=23/api/v1/resources/{resource_id}/clients/{client_id}:\x06\x63lient\x12\xce\x03\n\x11GetResourceClient\x12-.scalekit.v1.clients.GetResourceClientRequest\x1a..scalekit.v1.clients.GetResourceClientResponse\"\xd9\x02\x92\x41\x85\x02\n\x08\x41PI Auth\x12\x17Get Resource API Client\x1aJRetrieves details of a specific API client associated with an application.J\x93\x01\n\x03\x32\x30\x30\x12\x8b\x01\nUClient details retrieved successfully. Returns the resource and client configuration.\x12\x32\n0\x1a..scalekit.v1.clients.GetResourceClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x35\x12\x33/api/v1/resources/{resource_id}/clients/{client_id}\x12\xe7\x03\n\x13ListResourceClients\x12/.scalekit.v1.clients.ListResourceClientsRequest\x1a\x30.scalekit.v1.clients.ListResourceClientsResponse\"\xec\x02\x92\x41\xa4\x02\n\x08\x41PI Auth\x12\x19List Resource API Clients\x1aPRetrieves a list of API clients associated with a specific application resource.J\xaa\x01\n\x03\x32\x30\x30\x12\xa2\x01\njList of clients retrieved successfully. Returns the resource details and associated client configurations.\x12\x34\n2\x1a\x30.scalekit.v1.clients.ListResourceClientsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)\x12\'/api/v1/resources/{resource_id}/clients\x12\xcb\x03\n\x18ListResourceUserConsents\x12\x34.scalekit.v1.clients.ListResourceUserConsentsRequest\x1a\x35.scalekit.v1.clients.ListResourceUserConsentsResponse\"\xc1\x02\x92\x41\x8b\x02\n\x08\x41PI Auth\x12!List user consents for a resource\x1ajRetrieves a paginated list of user consents for a given resource, with optional search by external user IDJp\n\x03\x32\x30\x30\x12i\n,List of user consents retrieved successfully\x12\x39\n7\x1a\x35.scalekit.v1.clients.ListResourceUserConsentsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x17\x12\x15/api/v1/user_consents\x12\x87\x03\n\x14\x44\x65leteResourceClient\x12\x30.scalekit.v1.clients.DeleteResourceClientRequest\x1a\x31.scalekit.v1.clients.DeleteResourceClientResponse\"\x89\x02\x92\x41\xb5\x01\n\x08\x41PI Auth\x12\x16\x44\x65lete Resource Client\x1a\x33\x44\x65letes an API client under the specified resource.J\\\n\x03\x32\x30\x30\x12U\n\x1c\x43lient deleted successfully.\x12\x35\n3\x1a\x31.scalekit.v1.clients.DeleteResourceClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x35*3/api/v1/resources/{resource_id}/clients/{client_id}\x12\x82\x04\n\x0eRegisterClient\x12*.scalekit.v1.clients.RegisterClientRequest\x1a+.scalekit.v1.clients.RegisterClientResponse\"\x96\x03\x92\x41\xc2\x02\n\x08\x41PI Auth\x12\x13Register API client\x1a\x84\x01Registers a new API client under an existing resource using dynamic client registration. Returns the created client and its secrets.J\x99\x01\n\x03\x32\x30\x31\x12\x91\x01\n^Client registered successfully. Returns client details and plain secret (available only once).\x12/\n-\x1a+.scalekit.v1.clients.RegisterClientResponse\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x35\"+/api/v1/resources/{res_id}/clients:register:\x06\x63lient\x12\xb6\x05\n\x0b\x43reateScope\x12\'.scalekit.v1.clients.CreateScopeRequest\x1a(.scalekit.v1.clients.CreateScopeResponse\"\xd3\x04\x88\x02\x01\x92\x41\xeb\x03\x12\x19\x43reate scope (Deprecated)\x1a\xa1\x02\x44\x45PRECATED: Use permission management APIs instead. Creates a new OAuth scope for API authorization. Scopes define the level of access granted to API clients. Reserved OpenID Connect scopes (profile, email, address, phone) cannot be created as they are automatically managed by the system.J\xa9\x01\n\x03\x32\x30\x31\x12\xa1\x01\nqOAuth scope created successfully. Returns the newly created scope with its name, description, and enabled status.\x12,\n*\x1a(.scalekit.v1.clients.CreateScopeResponse\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x46\"\x0e/api/v1/scopes:\x05scopeZ-\"$/api/v1/environments/{env_id}/scopes:\x05scope\x12\xe9\x03\n\nListScopes\x12&.scalekit.v1.clients.ListScopesRequest\x1a\'.scalekit.v1.clients.ListScopesResponse\"\x89\x03\x92\x41\xb2\x02\x12\x0bList scopes\x1a\x7fRetrieves all OAuth scopes configured for the environment. Returns both custom scopes and system-managed OpenID Connect scopes.J\xa1\x01\n\x03\x32\x30\x30\x12\x99\x01\njList of OAuth scopes returned successfully. Each scope includes its name, description, and enabled status.\x12+\n)\x1a\'.scalekit.v1.clients.ListScopesResponse\x82\xb5\x18\x02\x18`\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x38\x12\x0e/api/v1/scopesZ&\x12$/api/v1/environments/{env_id}/scopes\x12\xaf\x04\n\x0bUpdateScope\x12\'.scalekit.v1.clients.UpdateScopeRequest\x1a(.scalekit.v1.clients.UpdateScopeResponse\"\xcc\x03\x88\x02\x01\x92\x41\x8e\x03\x12\x19Update scope (Deprecated)\x1a\xe0\x01\x44\x45PRECATED: Use permission management APIs instead. Updates an existing OAuth scope\'s description and enabled status. Reserved OpenID Connect scopes (profile, email, address, phone) cannot be modified through this endpoint.J\x8d\x01\n\x03\x32\x30\x30\x12\x85\x01\nUOAuth scope updated successfully. Returns the updated scope with all current details.\x12,\n*\x1a(.scalekit.v1.clients.UpdateScopeResponse\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1c\x32\x13/api/v1/scopes/{id}:\x05scope\x12\xe0\x03\n\x0b\x44\x65leteScope\x12\'.scalekit.v1.clients.DeleteScopeRequest\x1a\x16.google.protobuf.Empty\"\x8f\x03\x88\x02\x01\x92\x41\xd8\x02\x12\x19\x44\x65lete scope (Deprecated)\x1a\xf6\x01\x44\x45PRECATED: Use permission management APIs instead. Permanently deletes an OAuth scope from the environment. This operation cannot be undone. Reserved OpenID Connect scopes (profile, email, address, phone) cannot be deleted through this endpoint.JB\n\x03\x32\x30\x30\x12;\n9OAuth scope successfully deleted and no longer accessible\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15*\x13/api/v1/scopes/{id}\x12\x97\x01\n\x11GetConsentDetails\x12\x16.google.protobuf.Empty\x1a..scalekit.v1.clients.GetConsentDetailsResponse\":\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1f\x12\x1d/api/v1/oauth/consent/details\x12\xc2\x01\n\x11RevokeUserConsent\x12-.scalekit.v1.clients.RevokeUserConsentRequest\x1a..scalekit.v1.clients.RevokeUserConsentResponse\"N\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x33*1/api/v1/clients/{client_id}/consents/{consent_id}\x12\xea\x03\n\x18\x45nsureResourceConnection\x12\x34.scalekit.v1.clients.EnsureResourceConnectionRequest\x1a\x35.scalekit.v1.clients.EnsureResourceConnectionResponse\"\xe0\x02\x92\x41\x91\x02\n\x08\x41PI Auth\x12!Get or Create Resource Connection\x1aSRetrieves an existing resource connection or creates a new one if it doesn\'t exist.J\x8c\x01\n\x03\x32\x30\x30\x12\x84\x01\nBReturns the existing or newly created resource connection details.\x12>\n<\x1a:.scalekit.v1.clients.GetOrCreateResourceConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x30\"+/api/v1/resources/{resource_id}/connections:\x01*\x1a\xb8\x03\x92\x41\xb4\x03\n\x08\x41PI Auth\x12\xfd\x02\x45ndpoints for managing API client applications. API clients enable secure, automated interactions between software systems without human intervention. Each client is uniquely identified by a `client_id` and can be configured with authentication settings, redirect URIs, and security parameters. Use these endpoints to create, manage, and configure API clients for your API clients.\x1a(\x12&https://docs.scalekit.com/m2m/overviewB3Z1github.com/scalekit-inc/scalekit/pkg/grpc/clientsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/clients/clients.proto\x12\x13scalekit.v1.clients\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a)scalekit/v1/connections/connections.proto\x1a!scalekit/v1/options/options.proto\"\x8a\x01\n\x15\x43reateResourceRequest\x12q\n\x08resource\x18\x01 \x01(\x0b\x32#.scalekit.v1.clients.CreateResourceB0\x92\x41\'2%Details of the resource to be created\xbaH\x03\xc8\x01\x01R\x08resource\"\x8e\r\n\x0e\x43reateResource\x12|\n\rresource_type\x18\x01 \x01(\x0e\x32!.scalekit.v1.clients.ResourceTypeB4\x92\x41+2\"Type of the resource to be createdJ\x05\"WEB\"\xbaH\x03\xc8\x01\x01R\x0cresourceType\x12K\n\x04name\x18\x02 \x01(\tB7\x92\x41)2\x14Name of the resourceJ\x11\"My API Resource\"\xbaH\x08r\x03\x18\x80\x01\xc8\x01\x01R\x04name\x12\x86\x01\n\x0b\x64\x65scription\x18\x03 \x01(\tBd\x92\x41Y2\x1b\x44\x65scription of the resourceJ:\"Resource for accessing your organization\'s API resources\"\xbaH\x05r\x03\x18\x80\x04R\x0b\x64\x65scription\x12\xab\x01\n\x0cresource_uri\x18\x04 \x01(\tB\x87\x01\x92\x41\x83\x01\x32\x61Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"R\x0bresourceUri\x12g\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x05 \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30R\x11\x61\x63\x63\x65ssTokenExpiry\x12k\n\x14refresh_token_expiry\x18\x06 \x01(\x03\x42\x39\x92\x41\x36\x32-Expiry time in seconds for the refresh token.J\x05\x38\x36\x34\x30\x30R\x12refreshTokenExpiry\x12\x9f\x01\n#disable_dynamic_client_registration\x18\x07 \x01(\x08\x42P\x92\x41M2EIndicates if dynamic client registration is allowed for this resourceJ\x04trueR disableDynamicClientRegistration\x12\x61\n\x08logo_uri\x18\x08 \x01(\tBF\x92\x41;2\x19Logo URI for the resourceJ\x1e\"https://example.com/logo.png\"\xbaH\x05r\x03\x18\x80\x04R\x07logoUri\x12X\n\x08provider\x18\t \x01(\tB<\x92\x41\x31\x32$Connection provider for the resourceJ\t\"DESCOPE\"\xbaH\x05r\x03\x18\x80\x04R\x08provider\x12\xa9\x01\n\x0bresource_id\x18\n \x01(\tB\x87\x01\x92\x41\x83\x01\x32\x61Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"R\nresourceId\x12i\n\x06scopes\x18\x0b \x03(\tBQ\x92\x41N21List of OAuth scopes associated with the resourceJ\x19[\"usr:read\", \"usr:write\"]R\x06scopes\x12\xac\x01\n intersect_scopes_user_permission\x18\x0c \x01(\x08\x42\x63\x92\x41`2XIndicates if the scopes should be intersected with user permissions for granular controlJ\x04trueR\x1dintersectScopesUserPermission\x12\x7f\n\x0b\x65nable_cimd\x18\r \x01(\x08\x42^\x92\x41[2RSpecifies whether Client ID Metadata Document (CIMD) is activated for the resourceJ\x05\x66\x61lseR\nenableCimd\"\x8c\x06\n\x0eResourceClient\x12\x44\n\x04name\x18\x01 \x01(\tB0\x92\x41%2\x12Name of the clientJ\x0f\"My API Client\"\xbaH\x05r\x03\x18\x80\x01R\x04name\x12\x82\x01\n\x0b\x64\x65scription\x18\x02 \x01(\tB`\x92\x41U2\x19\x44\x65scription of the clientJ8\"Client for accessing your organization\'s API resources\"\xbaH\x05r\x03\x18\x80\x04R\x0b\x64\x65scription\x12\x38\n\x06scopes\x18\x03 \x03(\tB \x92\x41\x1d\x32\x1bOAuth scopes for the clientR\x06scopes\x12\x62\n\x08\x61udience\x18\x04 \x03(\tBF\x92\x41\x43\x32$OAuth audience values for the clientJ\x1b[\"https://api.example.com\"]R\x08\x61udience\x12\xc6\x01\n\rcustom_claims\x18\x05 \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\x7f\x92\x41|2zCustom claims to be included in access tokens. Please keep this to the essentials as this increases the size of the token.R\x0c\x63ustomClaims\x12_\n\x06\x65xpiry\x18\x06 \x01(\x03\x42G\x92\x41\x44\x32\"https://example.com/.well-known/oauth-protected-resource/mcp\"R\x14protectedMetadataUri\x12\xb2\x01\n\x0bresource_id\x18\x0f \x01(\tB\x90\x01\x92\x41\x84\x01\x32\x62Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"\xbaH\x05r\x03\x18\x80\x04R\nresourceId\x12\xfb\x01\n\x06scopes\x18\x10 \x03(\x0b\x32\x1a.scalekit.v1.clients.ScopeB\xc6\x01\x92\x41\xc2\x01\x32OList of OAuth scopes associated with the resource with enabled or disabled flagJo[{\"id\": \"perm_\", \"name\": \"usr:read\", \"description\": \"Reading basic information of the users\", \"enabled\": true}]R\x06scopes\x12\xc3\x01\n\x12\x63onnection_details\x18\x11 \x01(\x0b\x32\'.scalekit.v1.clients.ResourceConnectionBk\x92\x41\x65\x32\x63\x44\x65tails of the own auth connection if any. For full stack this field will be empty or not populated\xe0\x41\x03R\x11\x63onnectionDetails\x12\x91\x01\n\x1a\x64isallow_connection_update\x18\x12 \x01(\x08\x42S\x92\x41M2DIndicates if updating the connection is disallowed for this resourceJ\x05\x66\x61lse\xe0\x41\x03R\x18\x64isallowConnectionUpdate\x12\xac\x01\n intersect_scopes_user_permission\x18\x13 \x01(\x08\x42\x63\x92\x41`2XIndicates if the scopes should be intersected with user permissions for granular controlJ\x04trueR\x1dintersectScopesUserPermission\x12\x7f\n\x0b\x65nable_cimd\x18\x14 \x01(\x08\x42^\x92\x41[2RSpecifies whether Client ID Metadata Document (CIMD) is activated for the resourceJ\x05\x66\x61lseR\nenableCimd\"\xf2\x01\n\x15RegisterClientRequest\x12i\n\x06res_id\x18\x01 \x01(\tBR\x92\x41\x43\x32(Unique identifier of the client resourceJ\x17\"app_69388798466720005\"\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x05resId\x12n\n\x06\x63lient\x18\x02 \x01(\x0b\x32#.scalekit.v1.clients.RegisterClientB1\x92\x41(2&Details of the client to be registered\xbaH\x03\xc8\x01\x01R\x06\x63lient\"\x96\x06\n\x0eRegisterClient\x12Q\n\x0b\x63lient_name\x18\x01 \x01(\tB0\x92\x41%2\x12Name of the clientJ\x0f\"My API Client\"\xbaH\x05r\x03\x18\x80\x01R\nclientName\x12\x82\x01\n\x0b\x64\x65scription\x18\x02 \x01(\tB`\x92\x41U2\x19\x44\x65scription of the clientJ8\"Client for accessing your organization\'s API resources\"\xbaH\x05r\x03\x18\x80\x04R\x0b\x64\x65scription\x12g\n\rredirect_uris\x18\x03 \x03(\tBB\x92\x41?2\x1bRedirect URI for the clientJ [\"https://example.com/callback\"]R\x0credirectUris\x12Y\n\x05scope\x18\x04 \x01(\tBC\x92\x41@2\x1bOAuth scopes for the clientJ![\"read:users\", \"write:resources\"]R\x05scope\x12T\n\nclient_uri\x18\x05 \x01(\tB5\x92\x41\x32\x32\x19\x43lient URI for the clientJ\x15\"https://example.com\"R\tclientUri\x12W\n\x08logo_uri\x18\x06 \x01(\tB<\x92\x41\x39\x32\x17Logo URI for the clientJ\x1e\"https://example.com/logo.png\"R\x07logoUri\x12\\\n\x07tos_uri\x18\x07 \x01(\tBC\x92\x41@2#Terms of Service URI for the clientJ\x19\"https://example.com/tos\"R\x06tosUri\x12[\n\npolicy_uri\x18\x08 \x01(\tB<\x92\x41\x39\x32\x19Policy URI for the clientJ\x1c\"https://example.com/policy\"R\tpolicyUri\"\xb9\x17\n\x16RegisterClientResponse\x12\xfc\x01\n\tclient_id\x18\x01 \x01(\tB\xde\x01\x92\x41\xda\x01\x32\xbc\x01The unique identifier for this M2M client. This ID is used to identify the client in API requests and logs. It is automatically generated when the client is created and cannot be modified.J\x19\"m2morg_1231234233424344\"R\x08\x63lientId\x12\xb3\x02\n\x07secrets\x18\x02 \x03(\x0b\x32!.scalekit.v1.clients.ClientSecretB\xf5\x01\x92\x41\xf1\x01\x32\xee\x01List of client secrets associated with this client. Each secret can be used for authentication, but only the most recently created secret is typically active. Secrets are stored securely and their values are never returned after creation.R\x07secrets\x12\xa2\x01\n\x04name\x18\x03 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32\x62The display name of the M2M client. This name helps identify the client in the dashboard and logs.J#\"GitHub Actions Deployment Service\"R\x04name\x12\xda\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tB\xb7\x01\x92\x41\xb3\x01\x32{A detailed description of the client\'s purpose and usage. This helps administrators understand what the client is used for.J4\"Service account for automated deployment processes\"R\x0b\x64\x65scription\x12\xd5\x01\n\x0b\x63reate_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x97\x01\x92\x41\x93\x01\x32uThe timestamp when this M2M client was created. This field is automatically set by the server and cannot be modified.J\x1a\"2024-01-05T14:48:00.000Z\"R\ncreateTime\x12\xf4\x01\n\x0bupdate_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xb6\x01\x92\x41\xb2\x01\x32\x93\x01The timestamp when this M2M client was last updated. This field is automatically updated by the server whenever the client\'s configuration changes.J\x1a\"2024-01-05T14:48:00.000Z\"R\nupdateTime\x12\xbe\x01\n\x06scopes\x18\x07 \x03(\tB\xa5\x01\x92\x41\xa1\x01\x32uThe OAuth 2.0 scopes granted to this client. These scopes determine what resources and actions the client can access.J([\"deploy:resources\", \"read:deployments\"]R\x06scopes\x12\xc7\x01\n\x08\x61udience\x18\x08 \x03(\tB\xaa\x01\x92\x41\xa6\x01\x32\x86\x01The intended recipients of access tokens issued to this client. Each audience value should be a URI that identifies an API or service.J\x1b[\"https://api.example.com\"]R\x08\x61udience\x12\xec\x01\n\rcustom_claims\x18\t \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\xa4\x01\x92\x41\xa0\x01\x32\x9d\x01\x41\x64\x64itional claims included in access tokens issued to this client. These claims provide context about the client and can be used for authorization decisions.R\x0c\x63ustomClaims\x12\xb2\x01\n\x06\x65xpiry\x18\n \x01(\x03\x42\x99\x01\x92\x41\x95\x01\x32\x8c\x01The lifetime of access tokens issued to this client, in seconds. This determines how long a token remains valid before it must be refreshed.J\x04\x33\x36\x30\x30R\x06\x65xpiry\x12\xc4\x01\n\x0bresource_id\x18\x0b \x01(\tB\xa2\x01\x92\x41\x9e\x01\x32\x83\x01The ID of the resource associated with this M2M client. This field is used to link the client to a specific resource in the system.J\x16\"app_1231234233424344\"R\nresourceId\x12\xd1\x01\n\rredirect_uris\x18\x0c \x03(\tB\xab\x01\x92\x41\xa7\x01\x32\x82\x01The redirect URI for this M2M client. This URI is used in the OAuth 2.0 authorization flow to redirect users after authentication.J [\"https://example.com/callback\"]R\x0credirectUris\x12~\n\rclient_secret\x18\r \x01(\tBY\x92\x41V24Client secret value (only returned once at creation)J\x1e\"CdExsdErfccxDDssddfffgfeFHH1\"R\x0c\x63lientSecret\x12\xce\x01\n\x18\x63lient_secret_expires_at\x18\x0e \x01(\x05\x42\x94\x01\x92\x41\x90\x01\x32rClient secret expiry time in RFC3339 format. If the client secret does not expire, this field will be set to null.J\x1a\"2024-12-31T23:59:59.000Z\"R\x15\x63lientSecretExpiresAt\"\xdd\x02\n\x14ListResourcesRequest\x12r\n\rresource_type\x18\x01 \x01(\x0e\x32!.scalekit.v1.clients.ResourceTypeB*\x92\x41!2\x18\x46ilter resources by typeJ\x05\"WEB\"\xbaH\x03\xc8\x01\x01R\x0cresourceType\x12]\n\npage_token\x18\x02 \x01(\tB>\x92\x41;2\"Token for the next page of resultsJ\x15\"next_page_token_123\"R\tpageToken\x12r\n\tpage_size\x18\x03 \x01(\rBU\x92\x41K2ENumber of resources to return per page. Maximum is 30. Default is 10.J\x02\x32\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\"\xdb\x02\n\x15ListResourcesResponse\x12G\n\ntotal_size\x18\x01 \x01(\rB(\x92\x41%2#Total number of resources availableR\ttotalSize\x12O\n\x0fnext_page_token\x18\x02 \x01(\tB\'\x92\x41$2\"Token for the next page of resultsR\rnextPageToken\x12S\n\tresources\x18\x03 \x03(\x0b\x32\x1d.scalekit.v1.clients.ResourceB\x16\x92\x41\x13\x32\x11List of resourcesR\tresources\x12S\n\x0fprev_page_token\x18\x04 \x01(\tB+\x92\x41(2&Token for the previous page of resultsR\rprevPageToken\"\xaf\x02\n\x15UpdateResourceRequest\x12s\n\x0bresource_id\x18\x01 \x01(\tBR\x92\x41\x46\x32+Unique identifier of the resource to updateJ\x17\"app_69388798466720005\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\x12\x64\n\x08resource\x18\x02 \x01(\x0b\x32#.scalekit.v1.clients.UpdateResourceB#\x92\x41\x1a\x32\x18Updated resource details\xbaH\x03\xc8\x01\x01R\x08resource\x12;\n\x0bupdate_mask\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskR\nupdateMask\"\xa1\x0e\n\x0eUpdateResource\x12P\n\x04name\x18\x01 \x01(\tB<\x92\x41\x31\x32\x14Name of the resourceJ\x19\"My Updated API Resource\"\xbaH\x05r\x03\x18\x80\x01R\x04name\x12\x8e\x01\n\x0b\x64\x65scription\x18\x02 \x01(\tBl\x92\x41\x61\x32\x1b\x44\x65scription of the resourceJB\"Updated resource for accessing your organization\'s API resources\"\xbaH\x05r\x03\x18\x80\x04R\x0b\x64\x65scription\x12\xab\x01\n\x0cresource_uri\x18\x03 \x01(\tB\x87\x01\x92\x41\x83\x01\x32\x61Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"R\x0bresourceUri\x12g\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x04 \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30R\x11\x61\x63\x63\x65ssTokenExpiry\x12k\n\x14refresh_token_expiry\x18\x05 \x01(\x03\x42\x39\x92\x41\x36\x32-Expiry time in seconds for the refresh token.J\x05\x38\x36\x34\x30\x30R\x12refreshTokenExpiry\x12\xbb\x01\n#disable_dynamic_client_registration\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBP\x92\x41M2EIndicates if dynamic client registration is allowed for this resourceJ\x04trueR disableDynamicClientRegistration\x12\x61\n\x08logo_uri\x18\x07 \x01(\tBF\x92\x41;2\x19Logo URI for the resourceJ\x1e\"https://example.com/logo.png\"\xbaH\x05r\x03\x18\x80\x04R\x07logoUri\x12X\n\x08provider\x18\n \x01(\tB<\x92\x41\x31\x32$Connection provider for the resourceJ\t\"DESCOPE\"\xbaH\x05r\x03\x18\x80\x04R\x08provider\x12\xa9\x01\n\x0bresource_id\x18\x0b \x01(\tB\x87\x01\x92\x41\x83\x01\x32\x61Resource identifier for the resource. This could be the URL used to access the resource resourcesJ\x1e\"https://resource.example.com\"R\nresourceId\x12i\n\x06scopes\x18\x0c \x03(\tBQ\x92\x41N21List of OAuth scopes associated with the resourceJ\x19[\"usr:read\", \"usr:write\"]R\x06scopes\x12\xa7\x01\n\x1a\x63ustom_connection_settings\x18\r \x01(\x0b\x32\x35.scalekit.v1.clients.ResourceCustomConnectionSettingsB0\x92\x41-2+Custom connection settings for the resourceH\x00R\x18\x63ustomConnectionSettings\x12\xc8\x01\n intersect_scopes_user_permission\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueBc\x92\x41`2XIndicates if the scopes should be intersected with user permissions for granular controlJ\x04trueR\x1dintersectScopesUserPermission\x12\x94\x01\n\x0b\x65nable_cimd\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueBW\x92\x41T2KIndicates if CIMD (Client ID Metadata Document) is enabled for the resourceJ\x05\x66\x61lseR\nenableCimdB\n\n\x08settings\"y\n\x16UpdateResourceResponse\x12_\n\x08resource\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.clients.ResourceB$\x92\x41!2\x1f\x44\x65tails of the updated resourceR\x08resource\"\xfc\x01\n\x1b\x43reateResourceClientRequest\x12p\n\x0bresource_id\x18\x01 \x01(\tBO\x92\x41\x43\x32(Unique identifier of the client resourceJ\x17\"app_69388798466720005\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\x12k\n\x06\x63lient\x18\x02 \x01(\x0b\x32#.scalekit.v1.clients.ResourceClientB.\x92\x41%2#Details of the client to be created\xbaH\x03\xc8\x01\x01R\x06\x63lient\"\xf8\x01\n\x1c\x43reateResourceClientResponse\x12Z\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1e.scalekit.v1.clients.M2MClientB\"\x92\x41\x1f\x32\x1d\x44\x65tails of the created clientR\x06\x63lient\x12|\n\x0cplain_secret\x18\x02 \x01(\tBY\x92\x41V24Client secret value (only returned once at creation)J\x1e\"CdExsdErfccxDDssddfffgfeFHH1\"R\x0bplainSecret\"\xc7\x03\n\x1bUpdateResourceClientRequest\x12i\n\x0bresource_id\x18\x01 \x01(\tBH\x92\x41<2!Unique identifier of the resourceJ\x17\"res_69388798466720005\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\x12\x63\n\tclient_id\x18\x02 \x01(\tBF\x92\x41:2\x1fUnique identifier of the clientJ\x17\"m2m_12345678901234567\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\x12\x66\n\x06\x63lient\x18\x03 \x01(\x0b\x32#.scalekit.v1.clients.ResourceClientB)\x92\x41 2\x1e\x46ields of the client to update\xbaH\x03\xc8\x01\x01R\x06\x63lient\x12p\n\x0bupdate_mask\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB3\x92\x41\x30\x32.Mask specifying which fields should be updatedR\nupdateMask\"s\n\x1cUpdateResourceClientResponse\x12S\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1e.scalekit.v1.clients.M2MClientB\x1b\x92\x41\x18\x32\x16Updated client detailsR\x06\x63lient\"\x96\x02\n\x18GetResourceClientRequest\x12u\n\x0bresource_id\x18\x01 \x01(\tBT\x92\x41H24Unique identifier of the client resource to retrieveJ\x10\"skc_1234567890\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\x12\x82\x01\n\tclient_id\x18\x02 \x01(\tBe\x92\x41Y2\x92\x41;2.Case-insensitive search over external user IDsJ\t\"usr_123\"R\x06search\x12[\n\tpage_size\x18\x03 \x01(\rB>\x92\x41\x34\x32.Number of consents to return per page (max 30)J\x02\x32\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\x63\n\npage_token\x18\x04 \x01(\tBD\x92\x41\x41\x32\x33Pagination token to fetch the next or previous pageJ\n\">:abc123\"R\tpageToken\"\x8c\x03\n ListResourceUserConsentsResponse\x12V\n\ntotal_size\x18\x01 \x01(\rB7\x92\x41\x34\x32\x32Total number of user consents matching the requestR\ttotalSize\x12T\n\x0fnext_page_token\x18\x02 \x01(\tB,\x92\x41)2\'Pagination token to fetch the next pageR\rnextPageToken\x12`\n\x08\x63onsents\x18\x03 \x03(\x0b\x32(.scalekit.v1.clients.ResourceUserConsentB\x1a\x92\x41\x17\x32\x15List of user consentsR\x08\x63onsents\x12X\n\x0fprev_page_token\x18\x04 \x01(\tB0\x92\x41-2+Pagination token to fetch the previous pageR\rprevPageToken\"\xdc\x04\n\x13ResourceUserConsent\x12X\n\x02id\x18\x01 \x01(\tBH\x92\x41\x45\x32%Unique identifier of the user consentJ\x1c\"usrcnst_102709535608668163\"R\x02id\x12r\n\x10\x65xternal_user_id\x18\x02 \x01(\tBH\x92\x41\x45\x32*External identifier of the consenting userJ\x17\"usr_83562895790637841\"R\x0e\x65xternalUserId\x12`\n\tclient_id\x18\x03 \x01(\tBC\x92\x41@2-Client identifier associated with the consentJ\x0f\"m2m_123123123\"R\x08\x63lientId\x12\x44\n\x0b\x63lient_name\x18\x04 \x01(\tB#\x92\x41 2\x14Readable client nameJ\x08\"MCPJam\"R\nclientName\x12O\n\x06scopes\x18\x05 \x03(\tB7\x92\x41\x34\x32\x1dScopes granted in the consentJ\x13[\"openid\", \"email\"]R\x06scopes\x12~\n\ngranted_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampBC\x92\x41@2\"Timestamp when consent was grantedJ\x1a\"2025-12-09T13:27:29.810Z\"R\tgrantedAt\"\xa0\x01\n\x1aListResourceClientsRequest\x12\x81\x01\n\x0bresource_id\x18\x01 \x01(\tB`\x92\x41T2@Unique identifier of the resource whose clients are to be listedJ\x10\"skc_1234567890\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\"\xf0\x02\n\x1bListResourceClientsResponse\x12k\n\x07\x63lients\x18\x02 \x03(\x0b\x32\x1e.scalekit.v1.clients.M2MClientB1\x92\x41.2,List of clients associated with the resourceR\x07\x63lients\x12i\n\x11total_dcr_clients\x18\x03 \x01(\x05\x42=\x92\x41:28Total number of DCR clients associated with the resourceR\x0ftotalDcrClients\x12s\n\x14total_static_clients\x18\x04 \x01(\x05\x42\x41\x92\x41>2\"R\tpageToken:\xec\x01\x92\x41\xe8\x01\n\xa8\x01*!List Organization Clients Request2\x82\x01Request message for listing API clients within a specific organization. Supports pagination for handling large numbers of clients.*;\n\x11\x41PI Documentation\x12&https://docs.scalekit.com/m2m/overview\"\xa5\x06\n\x1fListOrganizationClientsResponse\x12\x97\x01\n\x0fnext_page_token\x18\x01 \x01(\tBo\x92\x41l2UPagination token for the next page of results. Use this token to fetch the next page.J\x13\"\"R\rnextPageToken\x12X\n\ntotal_size\x18\x02 \x01(\rB9\x92\x41\x36\x32\x30Total number of API clients in the organization.J\x02\x33\x30R\ttotalSize\x12\xe0\x01\n\x07\x63lients\x18\x03 \x03(\x0b\x32\x1e.scalekit.v1.clients.M2MClientB\xa5\x01\x92\x41\xa1\x01\x32\x9e\x01List of API client objects for the organization. Each client includes its configuration, metadata, and active secrets (without exposing actual secret values).R\x07\x63lients\x12\x9f\x01\n\x0fprev_page_token\x18\x04 \x01(\tBw\x92\x41t2]Pagination token for the previous page of results. Use this token to fetch the previous page.J\x13\"\"R\rprevPageToken:\x88\x01\x92\x41\x84\x01\n\x81\x01*\"List Organization Clients Response2[Response message containing a paginated list of API clients for the specified organization.\"\x83\x03\n\x1f\x44\x65leteOrganizationClientRequest\x12\xb0\x01\n\x0forganization_id\x18\x01 \x01(\tB\x86\x01\x92\x41t2ZUnique identifier of the organization that owns the client. Must start with \'org_\' prefix.J\x16\"org_1231234233424344\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xac\x01\n\tclient_id\x18\x02 \x01(\tB\x8e\x01\x92\x41y2\\Unique identifier of the API client to permanently delete. Must start with \'m2morg_\' prefix.J\x19\"m2morg_1231234233424344\"\xbaH\x0fr\r\x10\x01\x18 :\x07m2morg_R\x08\x63lientId\"\xa5\x01\n\x10GetClientRequest\x12\x90\x01\n\tclient_id\x18\x01 \x01(\tBs\x92\x41g2SUnique identifier of the client resource to retrieve. Must be 1-32 characters long.J\x10\"skc_1234567890\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\"\xf5\x01\n\x11GetClientResponse\x12\xdf\x01\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.clients.ClientB\xa9\x01\x92\x41\xa5\x01\x32\xa2\x01\x43omplete client configuration including authentication settings, redirect URIs, and secrets. This contains all current settings for the requested client resource.R\x06\x63lient\"\xe1\x06\n\x12ListClientsRequest\x12\xf2\x01\n\x14include_plain_secret\x18\x01 \x01(\x08\x42\xbf\x01\x92\x41\xbb\x01\x32\xb1\x01Whether to include plain secret values in the response. Enable only during initial client creation, then store secrets securely. Not available when filtering by ALL client typesJ\x05\x66\x61lseR\x12includePlainSecret\x12\x85\x01\n\x06\x66ilter\x18\x03 \x01(\x0b\x32..scalekit.v1.clients.ListClientsRequest.FilterB=\x92\x41:28Filters clients by type: ENV, WEB_APP, NTV, SPA, or ALL.R\x06\x66ilter\x12]\n\npage_token\x18\x04 \x01(\tB>\x92\x41;2\"Token for the next page of resultsJ\x15\"next_page_token_123\"R\tpageToken\x12\x64\n\tpage_size\x18\x05 \x01(\rBG\x92\x41=27Number of clients per page. Defaults to 10, maximum 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x1a\x82\x02\n\x06\x46ilter\x12\xf7\x01\n\x0b\x63lient_type\x18\x01 \x03(\tB\xd5\x01\x92\x41\xd1\x01\x32\xce\x01\x46ilters clients by type. Valid values: ENV, WEB_APP, NTV, SPA, ALL. Defaults to ENV. ALL takes precedence and other types are ignored. For resource-specific clients (e.g., M2M), use ListResourceClients API.R\nclientTypeJ\x04\x08\x02\x10\x03\"\xf1\x03\n\x13ListClientsResponse\x12Z\n\ntotal_size\x18\x01 \x01(\rB;\x92\x41\x38\x32\x32Total number of client resources in the workspace.J\x02\x31\x32R\ttotalSize\x12\xc1\x01\n\x07\x63lients\x18\x02 \x03(\x0b\x32\x1b.scalekit.v1.clients.ClientB\x89\x01\x92\x41\x85\x01\x32\x82\x01List of client resource configurations matching the query criteria. Each client includes its metadata and authentication settings.R\x07\x63lients\x12\x65\n\x0fnext_page_token\x18\x03 \x01(\tB=\x92\x41:28Pagination token that retrieves the next page of resultsR\rnextPageToken\x12S\n\x0fprev_page_token\x18\x04 \x01(\tB+\x92\x41(2&Token for the previous page of resultsR\rprevPageToken\"\xed\x01\n\x13\x43reateClientRequest\x12\xd5\x01\n\x06\x63lient\x18\x01 \x01(\x0b\x32!.scalekit.v1.clients.CreateClientB\x99\x01\x92\x41\x8f\x01\x32\x1b\x43lient parameters to createJp{\"post_login_uris\": [\"https://app.example.com/callback\"], \"initiate_login_uri\": \"https://app.example.com/login\"}\xbaH\x03\xc8\x01\x01R\x06\x63lient\"\xeb\x17\n\x0c\x43reateClient\x12\xde\x01\n\x04name\x18\x01 \x01(\tB\xc9\x01\x92\x41\xba\x01\x32\x9e\x01\x41 descriptive name for the API client that helps identify its purpose. This name is displayed in the dashboard and logs. Must be between 1 and 128 characters.J\x17\"My Application Client\"\xbaH\x08r\x03\x18\x80\x01\xc8\x01\x01R\x04name\x12\xd6\x01\n\x0b\x63lient_type\x18\x02 \x01(\tB\xb4\x01\x92\x41\xa5\x01\x32\x99\x01\x43lient application type. Valid values: WEB_APP (web applications), SPA (single-page applications), NTV (native applications including mobile and desktop)J\x07WEB_APP\xbaH\x08r\x03\x18\x80\x01\xc8\x01\x01R\nclientType\x12\xb6\x02\n\x18\x62\x61\x63k_channel_logout_uris\x18\x03 \x03(\tB\xfc\x01\x92\x41\xe9\x01\x32wHTTPS endpoints that receive back-channel logout notifications for application-initiated logout and session management.Jn[\"https://app.example.com/backchannel-logout-internal\", \"https://app.example.com/backchannel-logout-external\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\x15\x62\x61\x63kChannelLogoutUris\x12\xb6\x02\n\x19post_logout_redirect_uris\x18\x04 \x03(\tB\xfa\x01\x92\x41\xe7\x01\x32\x9c\x01\x41llowed URIs for post-logout redirection. These URIs are used when a user is redirected after logout. Must use HTTPS and conform to security specifications.JF[\"https://app.example.com/logged-out\", \"https://app.example.com/home\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\x16postLogoutRedirectUris\x12\xff\x01\n\x12initiate_login_uri\x18\x05 \x01(\tB\xcb\x01\x92\x41\xc7\x01\x32\xa3\x01Pre-configured URI for initiating login flows. This URI is used to start authentication flows programmatically. Must use HTTPS protocol and contain a valid domain.J\x1f\"https://app.example.com/login\"H\x00R\x10initiateLoginUri\x88\x01\x01\x12\x9c\x02\n\x0fpost_login_uris\x18\x06 \x03(\tB\xf3\x01\x92\x41\xe7\x01\x32\x9e\x01List of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTPS in production environments. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\xbaH\x05\x92\x01\x02\x18\x01R\rpostLoginUris\x12g\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x07 \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30R\x11\x61\x63\x63\x65ssTokenExpiry\x12\xb3\x01\n\x06scopes\x18\x08 \x03(\tB\x9a\x01\x92\x41\x96\x01\x32wList of scopes to be attached to this client. These scopes must be a subset of the scopes available in the environment.J\x1b[\"data:read\", \"data:write\"]R\x06scopes\x12\xc6\x01\n\rcustom_claims\x18\t \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\x7f\x92\x41|2zCustom claims to be included in access tokens. Please keep this to the essentials as this increases the size of the token.R\x0c\x63ustomClaims\x12\xf0\x01\n\x1c\x64isallow_scalekit_api_access\x18\n \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x92\x01\x92\x41\x8e\x01\x32\x85\x01If set to true, the client will be restricted from accessing Scalekit APIs directly, enhancing security by limiting its capabilities.J\x04trueR\x19\x64isallowScalekitApiAccess\x12\xe0\x01\n\x0bgrant_types\x18\x0b \x03(\tB\xbe\x01\x92\x41\xba\x01\x32yList of OAuth 2.0 grant types that the client is authorized to use. This defines how the client can obtain access tokens.J=[\"authorization_code\", \"refresh_token\", \"client_credentials\"]R\ngrantTypes\x12\xe1\x01\n\x0c\x65nforce_pkce\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xa1\x01\x92\x41\x9d\x01\x32\x94\x01Whether Proof Key for Code Exchange (PKCE) is required. PKCE mitigates authorization code interception attacks. Defaults to true for public clients.J\x04trueR\x0b\x65nforcePkce:\xd4\x01\x92\x41\xd0\x01\n\x9c\x01*\rCreate Client2\x8a\x01Request message for creating a new API client with specified configuration parameters including redirect URIs and authentication settings.*/\n\x11\x41PI Documentation\x12\x1ahttps://docs.scalekit.com/B\x15\n\x13_initiate_login_uri\"\x8c\x01\n\x14\x43reateClientResponse\x12t\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.clients.ClientB?\x92\x41<2:Created client with all settings reflected in the responseR\x06\x63lient\"\xc3\x03\n\x13UpdateClientRequest\x12}\n\tclient_id\x18\x01 \x01(\tB`\x92\x41T2:Unique identifier of the registered application to update.J\x16\"skc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\x12\xe8\x01\n\x06\x63lient\x18\x02 \x01(\x0b\x32!.scalekit.v1.clients.UpdateClientB\xac\x01\x92\x41\xa2\x01\x32\x65\x41pplication configuration parameters to update. Contains post_login_uris and authentication settings.J9{\"post_login_uris\": [\"https://app.example.com/callback\"]}\xbaH\x03\xc8\x01\x01R\x06\x63lient\x12\x42\n\x04mask\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB\x12\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\x04mask\"\xf4\x16\n\x0cUpdateClient\x12\xc3\x02\n\x18\x62\x61\x63k_channel_logout_uris\x18\x04 \x03(\tB\x89\x02\x92\x41\xf6\x01\x32\x95\x01HTTPS endpoints for receiving back-channel logout notifications. Required for implementing application-initiated logout flows and session management.J\\[\"https://app.example.com/backchannel-logout\", \"https://app.example.com/backchannel-logout\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\x15\x62\x61\x63kChannelLogoutUris\x12\xb6\x02\n\x19post_logout_redirect_uris\x18\x05 \x03(\tB\xfa\x01\x92\x41\xe7\x01\x32\x9c\x01\x41llowed URIs for post-logout redirection. These URIs are used when a user is redirected after logout. Must use HTTPS and conform to security specifications.JF[\"https://app.example.com/logged-out\", \"https://app.example.com/home\"]\xbaH\x0c\x92\x01\t\x18\x01\"\x05r\x03\x88\x01\x01R\x16postLogoutRedirectUris\x12\xff\x01\n\x12initiate_login_uri\x18\x06 \x01(\tB\xcb\x01\x92\x41\xc7\x01\x32\xa3\x01Pre-configured URI for initiating login flows. This URI is used to start authentication flows programmatically. Must use HTTPS protocol and contain a valid domain.J\x1f\"https://app.example.com/login\"H\x00R\x10initiateLoginUri\x88\x01\x01\x12\x9c\x02\n\x0fpost_login_uris\x18\x07 \x03(\tB\xf3\x01\x92\x41\xe7\x01\x32\x9e\x01List of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTPS in production environments. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\xbaH\x05\x92\x01\x02\x18\x01R\rpostLoginUris\x12\xd3\x01\n\x04name\x18\x08 \x01(\tB\xbe\x01\x92\x41\xba\x01\x32\x9e\x01\x41 descriptive name for the API client that helps identify its purpose. This name is displayed in the dashboard and logs. Must be between 1 and 128 characters.J\x17\"My Application Client\"R\x04name\x12g\n\x13\x61\x63\x63\x65ss_token_expiry\x18\t \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30R\x11\x61\x63\x63\x65ssTokenExpiry\x12\xb3\x01\n\x06scopes\x18\x0b \x03(\tB\x9a\x01\x92\x41\x96\x01\x32wList of scopes to be attached to this client. These scopes must be a subset of the scopes available in the environment.J\x1b[\"data:read\", \"data:write\"]R\x06scopes\x12\xc6\x01\n\rcustom_claims\x18\x0c \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\x7f\x92\x41|2zCustom claims to be included in access tokens. Please keep this to the essentials as this increases the size of the token.R\x0c\x63ustomClaims\x12\xf0\x01\n\x1c\x64isallow_scalekit_api_access\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x92\x01\x92\x41\x8e\x01\x32\x85\x01If set to true, the client will be restricted from accessing Scalekit APIs directly, enhancing security by limiting its capabilities.J\x04trueR\x19\x64isallowScalekitApiAccess\x12\xe0\x01\n\x0bgrant_types\x18\x0e \x03(\tB\xbe\x01\x92\x41\xba\x01\x32yList of OAuth 2.0 grant types that the client is authorized to use. This defines how the client can obtain access tokens.J=[\"authorization_code\", \"refresh_token\", \"client_credentials\"]R\ngrantTypes\x12\xe1\x01\n\x0c\x65nforce_pkce\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xa1\x01\x92\x41\x9d\x01\x32\x94\x01Whether Proof Key for Code Exchange (PKCE) is required. PKCE mitigates authorization code interception attacks. Defaults to true for public clients.J\x04trueR\x0b\x65nforcePkce:\x83\x02\x92\x41\xff\x01\n\xbf\x01*\x1bUpdate Client Configuration2\x9f\x01Parameters for updating an API client application\'s configuration. This allows modification of post_login_uris, logout settings, and other security parameters.*;\n\x11\x41PI Documentation\x12&https://docs.scalekit.com/m2m/overviewB\x15\n\x13_initiate_login_uriJ\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04R\rredirect_urisR\x14\x64\x65\x66\x61ult_redirect_uri\"\xa8\x01\n\x14UpdateClientResponse\x12\x8f\x01\n\x06\x63lient\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.clients.ClientBZ\x92\x41W2UUpdated application configuration with all current settings reflected in the responseR\x06\x63lient\"\xae\x01\n\x19\x43reateClientSecretRequest\x12\x90\x01\n\tclient_id\x18\x01 \x01(\tBs\x92\x41g2MUnique identifier of the client application for which to create a new secret.J\x16\"skc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\"\xad\x03\n\x1a\x43reateClientSecretResponse\x12\xc6\x01\n\x0cplain_secret\x18\x01 \x01(\tB\xa2\x01\x92\x41\x9e\x01\x32\x84\x01Plaintext secret value. This value is only returned once at creation time and must be stored securely. It cannot be retrieved again.J\x15\"sec_plaintext123456\"R\x0bplainSecret\x12\xc5\x01\n\x06secret\x18\x02 \x01(\x0b\x32!.scalekit.v1.clients.ClientSecretB\x89\x01\x92\x41\x85\x01\x32\x82\x01Metadata about the newly created secret, including its ID, creation time, and status. Does not include the plaintext secret value.R\x06secret\"\x83\x05\n\x19UpdateClientSecretRequest\x12\x8f\x01\n\tclient_id\x18\x01 \x01(\tBr\x92\x41\x66\x32LUnique identifier of the client application containing the secret to update.J\x16\"skc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\x12\xab\x01\n\tsecret_id\x18\x02 \x01(\tB\x8d\x01\x92\x41\x80\x01\x32\x66Unique identifier of the client secret to update. This references a specific secret within the client.J\x16\"sec_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08secretId\x12\xb0\x01\n\x06secret\x18\x03 \x01(\x0b\x32\'.scalekit.v1.clients.UpdateClientSecretBo\x92\x41\x66\x32\x64Updated settings for the secret. Currently supports modifying the secret\'s status (active/inactive).\xbaH\x03\xc8\x01\x01R\x06secret\x12s\n\x04mask\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskBC\x92\x41@2>Specifies which fields to update. System-controlled parameter.R\x04mask\"\xec\x01\n\x12UpdateClientSecret\x12\xd5\x01\n\x06status\x18\x01 \x01(\x0e\x32\'.scalekit.v1.clients.ClientSecretStatusB\x93\x01\x92\x41\x8f\x01\x32\x82\x01Status to set for the client secret. Set to ACTIVE to enable the secret for authentication, or INACTIVE to temporarily disable it.J\x08INACTIVER\x06status\"\xe7\x01\n\x1aUpdateClientSecretResponse\x12\xc8\x01\n\x06secret\x18\x01 \x01(\x0b\x32!.scalekit.v1.clients.ClientSecretB\x8c\x01\x92\x41\x88\x01\x32\x85\x01Updated secret metadata, reflecting the changes made by the update operation. Note that the plaintext secret value is never returned.R\x06secret\"\x85\x01\n\x13\x44\x65leteClientRequest\x12n\n\tclient_id\x18\x01 \x01(\tBQ\x92\x41\x45\x32*Unique identifier of the client to delete.J\x17\"webc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\"\xb3\x02\n\x19\x44\x65leteClientSecretRequest\x12q\n\tclient_id\x18\x01 \x01(\tBT\x92\x41H2.Identifier of the client containing the secretJ\x16\"skc_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08\x63lientId\x12\xa2\x01\n\tsecret_id\x18\x02 \x01(\tB\x84\x01\x92\x41x2^Unique identifier of the client secret to permanently delete. This operation cannot be undone.J\x16\"sec_01H9XPQR7ZY2AJKL\"\xbaH\x06r\x04\x10\x01\x18 R\x08secretId\"\xa8\x1e\n\x06\x43lient\x12\xe2\x01\n\x02id\x18\x01 \x01(\tB\xd1\x01\x92\x41\xcd\x01\x32\xb2\x01Unique identifier for the client application. This ID is automatically generated when the client is created and cannot be modified. Used in API requests and authentication flows.J\x16\"skc_1234abcd5678efgh\"R\x02id\x12\xd7\x01\n\x05keyId\x18\x02 \x01(\tB\xc0\x01\x92\x41\xbc\x01\x32\xa1\x01Identifier for the cryptographic key pair used to sign tokens. This key is used for JWT signing operations. Keys can be rotated by generating new client secrets.J\x16\"key_9876zyxw5432vuts\"R\x05keyId\x12\xf0\x01\n\x0b\x63reate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xb2\x01\x92\x41\xae\x01\x32\x8f\x01Timestamp indicating when the client configuration was initially created. This field is automatically set by the server and cannot be modified.J\x1a\"2024-01-05T14:48:00.000Z\"R\ncreateTime\x12\x81\x02\n\x0bupdate_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xc3\x01\x92\x41\xbf\x01\x32\xa0\x01Timestamp of the last modification to the client configuration. This field is automatically updated by the server whenever any aspect of the client is modified.J\x1a\"2024-01-10T09:12:00.000Z\"R\nupdateTime\x12\xa5\x02\n\x07secrets\x18\x07 \x03(\x0b\x32!.scalekit.v1.clients.ClientSecretB\xe7\x01\x92\x41\xe3\x01\x32\xe0\x01List of client secrets used for authentication. Each secret is stored securely using one-way hashing (bcrypt). The plaintext secret values are only displayed during initial creation and must be stored securely by the client.R\x07secrets\x12\xa3\x02\n\x19post_logout_redirect_uris\x18\x08 \x03(\tB\xe7\x01\x92\x41\xe3\x01\x32\xba\x01\x41llowed URIs for post-logout redirection. These URIs are used when a user is redirected after signing out. Must use HTTPS and conform to OpenID Connect Session Management specifications.J$[\"https://auth.your-app.com/logout\"]R\x16postLogoutRedirectUris\x12\xc9\x02\n\x18\x62\x61\x63k_channel_logout_uris\x18\t \x03(\tB\x8f\x02\x92\x41\x8b\x02\x32\xd8\x01HTTPS endpoint for receiving back-channel logout notifications. This URI is called by the authentication server when a session expires or is terminated. Required for implementing relying party-initiated logout flows.J.\"https://auth.your-app.com/backchannel-logout\"R\x15\x62\x61\x63kChannelLogoutUris\x12\xa0\x02\n\x12initiate_login_uri\x18\n \x01(\tB\xf1\x01\x92\x41\xed\x01\x32\xbf\x01Pre-configured URI for initiating login flows programmatically. This URI must use the HTTPS scheme and contain a valid domain. Used for starting authentication flows without user interaction.J)\"https://auth.your-app.com/initiate-auth\"R\x10initiateLoginUri\x12\xab\x02\n\x0fpost_login_uris\x18\x0b \x03(\tB\x82\x02\x92\x41\xfe\x01\x32\xb3\x01List of allowed redirect URIs for OAuth 2.0 authorization flows. These URIs must use HTTPS protocol in production environments and comply with RFC 6749. Maximum of 5 URIs allowed.JF[\"https://auth.your-app.com/callback\", \"https://dev.example.com/auth\"]R\rpostLoginUris\x12t\n\x04name\x18\x0c \x01(\tB`\x92\x41]2BA descriptive name for the client that helps identify its purpose.J\x17\"My Application Client\"R\x04name\x12l\n\x13\x61\x63\x63\x65ss_token_expiry\x18\r \x01(\x03\x42\x37\x92\x41\x34\x32,Expiry time in seconds for the access token.J\x04\x33\x36\x30\x30H\x00R\x11\x61\x63\x63\x65ssTokenExpiry\x88\x01\x01\x12g\n\x06scopes\x18\x0e \x03(\tBO\x92\x41L2-List of scopes to be attached to this client.J\x1b[\"data:read\", \"data:write\"]R\x06scopes\x12\xc6\x01\n\rcustom_claims\x18\x0f \x03(\x0b\x32 .scalekit.v1.clients.CustomClaimB\x7f\x92\x41|2zCustom claims to be included in access tokens. Please keep this to the essentials as this increases the size of the token.R\x0c\x63ustomClaims\x12\x8f\x01\n\x1c\x64isallow_scalekit_api_access\x18\x10 \x01(\x08\x42N\x92\x41K2CIf true, the client will be restricted from accessing Scalekit APIsJ\x04trueR\x19\x64isallowScalekitApiAccess\x12\xaa\x01\n\x0bgrant_types\x18\x11 \x03(\tB\x88\x01\x92\x41\x84\x01\x32\x43List of OAuth 2.0 grant types that the client is authorized to use.J=[\"authorization_code\", \"refresh_token\", \"client_credentials\"]R\ngrantTypes\x12\x61\n\x0b\x63lient_type\x18\x12 \x01(\tB@\x92\x41=24Type of client. Valid values: ENV, WEB_APP, NTV, SPAJ\x05\"ENV\"R\nclientType\x12\xc5\x01\n\x0c\x65nforce_pkce\x18\x13 \x01(\x08\x42\xa1\x01\x92\x41\x9d\x01\x32\x94\x01Whether Proof Key for Code Exchange (PKCE) is required. PKCE mitigates authorization code interception attacks. Defaults to true for public clients.J\x04trueR\x0b\x65nforcePkce:\xb3\x01\x92\x41\xaf\x01\n\xac\x01*\x12\x43lient Application2\x95\x01\x43onfiguration for an API client application registered with Scalekit. Contains authentication settings, redirect URIs, and other security parameters.B\x16\n\x14_access_token_expiryJ\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07R\rredirect_urisR\x14\x64\x65\x66\x61ult_redirect_uri\"\xc1\x13\n\x0c\x43lientSecret\x12\xd5\x01\n\x02id\x18\x01 \x01(\tB\xc4\x01\x92\x41\xc0\x01\x32\xa5\x01The unique identifier for this client secret. This ID is used to reference the secret in API requests for management operations like updating or deleting the secret.J\x16\"sec_1234abcd5678efgh\"R\x02id\x12\xd1\x01\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x93\x01\x92\x41\x8f\x01\x32qThe timestamp when this secret was created. This field is automatically set by the server and cannot be modified.J\x1a\"2024-01-05T14:48:00.000Z\"R\ncreateTime\x12\x86\x02\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xc8\x01\x92\x41\xc4\x01\x32\xa5\x01The timestamp when this secret was last updated. This field is automatically updated by the server when the secret\'s status changes or other properties are modified.J\x1a\"2024-01-10T09:12:00.000Z\"R\nupdateTime\x12\x82\x02\n\rsecret_suffix\x18\x04 \x01(\tB\xdc\x01\x92\x41\xd8\x01\x32\xcd\x01\x41 suffix that helps identify this secret. This is the last few characters of the full secret value but is not sufficient for authentication. Helps identify which secret is being used in logs and debugging.J\x06\"xyzw\"R\x0csecretSuffix\x12\xc9\x01\n\ncreated_by\x18\x05 \x01(\tB\xa4\x01\x92\x41\xa0\x01\x32\x8f\x01The identifier of the user or system that created this secret. This field helps track who created the secret for audit and compliance purposes.J\x0c\"user_12345\"H\x00R\tcreatedBy\x88\x01\x01\x12\x86\x02\n\x06status\x18\x06 \x01(\x0e\x32\'.scalekit.v1.clients.ClientSecretStatusB\xc4\x01\x92\x41\xc0\x01\x32\xb1\x01The current status of this secret. A secret must be ACTIVE to be used for authentication. INACTIVE secrets cannot be used for authentication but are retained for audit purposes.J\n\"INACTIVE\"R\x06status\x12\x8c\x02\n\x0b\x65xpire_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xce\x01\x92\x41\xca\x01\x32\xab\x01The timestamp when this secret will expire. After this time, the secret cannot be used for authentication regardless of its status. If not set, the secret does not expire.J\x1a\"2025-01-05T14:48:00.000Z\"R\nexpireTime\x12\xa6\x02\n\x0elast_used_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xe3\x01\x92\x41\xdf\x01\x32\xc0\x01The timestamp when this secret was last used for authentication. This field helps track secret usage for security monitoring and identifying unused secrets that may be candidates for rotation.J\x1a\"2024-02-15T10:30:00.000Z\"R\x0clastUsedTime\x12\xb3\x02\n\x0cplain_secret\x18\t \x01(\tB\x8a\x02\x92\x41\x86\x02\x32\xd7\x01The full plaintext secret value. This field is only populated when the secret is first created and is never stored by the server. It must be securely stored by the client application as it cannot be retrieved again.J*\"sec_1234567890abcdefghijklmnopqrstuvwxyz\"H\x01R\x0bplainSecret\x88\x01\x01:\x93\x01\x92\x41\x8f\x01\n\x8c\x01*\rClient Secret2{A secure credential used for authenticating an API client. Each client can have multiple secrets for key rotation purposes.B\r\n\x0b_created_byB\x0f\n\r_plain_secret\"\xb8\x02\n\x05Scope\x12\xa8\x01\n\x02id\x18\x01 \x01(\tB\x97\x01\x92\x41\x8a\x01\x32tUnique identifier for the scope resource. Must be between 1 and 100 characters long and match the specified pattern.J\x12\"scope_1234567890\"\xbaH\x06r\x04\x10\x01\x18\x64R\x02id\x12\x36\n\x04name\x18\x02 \x01(\tB\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9:]{1,64}$\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\x12 \n\x07\x65nabled\x18\x04 \x01(\x08\x42\x06\xbaH\x03\xc8\x01\x01R\x07\x65nabled\"q\n\x0b\x43reateScope\x12\x36\n\x04name\x18\x01 \x01(\tB\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9:]{1,64}$\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\"\xf3\x01\n\x12\x43reateScopeRequest\x12>\n\x05scope\x18\x01 \x01(\x0b\x32 .scalekit.v1.clients.CreateScopeB\x06\xbaH\x03\xc8\x01\x01R\x05scope\x12\x9c\x01\n\x06\x65nv_id\x18\x02 \x01(\tB\x84\x01\x92\x41x2dUnique identifier of the environment where the scope will be created. Must start with \'env_\' prefix.J\x10\"env_1234567890\"\xbaH\x06r\x04\x10\x00\x18 R\x05\x65nvId\"G\n\x13\x43reateScopeResponse\x12\x30\n\x05scope\x18\x01 \x01(\x0b\x32\x1a.scalekit.v1.clients.ScopeR\x05scope\"\xaa\x01\n\x11ListScopesRequest\x12\x94\x01\n\x06\x65nv_id\x18\x01 \x01(\tB}\x92\x41q2]Unique identifier of the environment for which to list scopes. Must start with \'env_\' prefix.J\x10\"env_1234567890\"\xbaH\x06r\x04\x10\x00\x18 R\x05\x65nvId\"H\n\x12ListScopesResponse\x12\x32\n\x06scopes\x18\x01 \x03(\x0b\x32\x1a.scalekit.v1.clients.ScopeR\x06scopes\"o\n\x12UpdateScopeRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18\x64R\x02id\x12>\n\x05scope\x18\x02 \x01(\x0b\x32 .scalekit.v1.clients.UpdateScopeB\x06\xbaH\x03\xc8\x01\x01R\x05scope\"o\n\x0bUpdateScope\x12*\n\x0b\x64\x65scription\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\x12\x34\n\x07\x65nabled\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x07\x65nabled\"G\n\x13UpdateScopeResponse\x12\x30\n\x05scope\x18\x01 \x01(\x0b\x32\x1a.scalekit.v1.clients.ScopeR\x05scope\"1\n\x12\x44\x65leteScopeRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06:\x04scp_R\x02id\"\xdd\x05\n\x19GetConsentDetailsResponse\x12\x61\n\x08resource\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.clients.ResourceB&\x92\x41#2!Details of the requested resourceR\x08resource\x12[\n\x04user\x18\x02 \x01(\x0b\x32\x19.scalekit.v1.clients.UserB,\x92\x41)2\'Details of the user who granted consentR\x04user\x12r\n\x06\x63lient\x18\x03 \x01(\x0b\x32\".scalekit.v1.clients.ConsentClientB6\x92\x41\x33\x32\x31\x44\x65tails of the client resource requesting consentR\x06\x63lient\x12\x9b\x01\n\x06scopes\x18\x04 \x03(\x0b\x32!.scalekit.v1.clients.ConsentScopeB`\x92\x41]2[List of scopes for which consent was granted. Each scope includes its name and description.R\x06scopes\x12m\n\x0b\x61pplication\x18\x05 \x01(\x0b\x32 .scalekit.v1.clients.ApplicationB)\x92\x41&2$Details of the requested applicationR\x0b\x61pplication\x12\x7f\n\x0corganization\x18\x06 \x01(\x0b\x32(.scalekit.v1.clients.ConsentOrganizationB1\x92\x41.2,Organization context for the consent screen.R\x0corganization\"\xf7\x02\n\x13\x43onsentOrganization\x12\x99\x01\n\x11organization_name\x18\x01 \x01(\tBg\x92\x41\x64\x32UName of the organization the user is authenticating into. Omitted when not available.J\x0b\"Acme Corp\"H\x00R\x10organizationName\x88\x01\x01\x12\xad\x01\n\x16organization_meta_name\x18\x02 \x01(\tBw\x92\x41t2bEnvironment-level label for what an organization is called (e.g. Workspace, Team). Always present.J\x0e\"Organization\"R\x14organizationMetaNameB\x14\n\x12_organization_name\"\xba\x05\n\rConsentClient\x12R\n\x04name\x18\x01 \x01(\tB>\x92\x41;2.Name of the client resource requesting consentJ\t\"VS Code\"R\x04name\x12x\n\x0bprivacy_uri\x18\x02 \x01(\tBW\x92\x41M2,Privacy policy URI of the client applicationJ\x1d\"https://yourapp.com/privacy\"\xbaH\x04r\x02\x18\x64R\nprivacyUri\x12q\n\x07tos_uri\x18\x03 \x01(\tBX\x92\x41M2.Terms of service URI of the client applicationJ\x1b\"https://yourapp.com/terms\"\xbaH\x05r\x03\x18\xd0\x0fR\x06tosUri\x12o\n\tclient_id\x18\x04 \x01(\tBR\x92\x41O2;Unique identifier of the client resource requesting consentJ\x10\"m2m_1234567890\"R\x08\x63lientId\x12\x8e\x01\n\x0cmetadata_uri\x18\x05 \x01(\tBk\x92\x41h2AMetadata URI of the client application - applicable for CIMD onlyJ#\"https://example.com/metadata.json\"R\x0bmetadataUri\x12\x66\n\x08logo_uri\x18\x06 \x01(\tBK\x92\x41H2\"Logo URI of the client applicationJ\"\"https://cdn.example.com/logo.png\"R\x07logoUri\"\\\n\x0c\x43onsentScope\x12 \n\x04name\x18\x01 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\"r\n\x04User\x12j\n\x05\x65mail\x18\x01 \x01(\tBT\x92\x41Q28Email address of the user. Must be a valid email format.J\x15\x61lice.doe@example.comR\x05\x65mail\"\xa2\x02\n\x18RevokeUserConsentRequest\x12\x87\x01\n\tclient_id\x18\x01 \x01(\tBj\x92\x41X2DUnique identifier of the client resource for which to revoke consentJ\x10\"m2m_1234567890\"\xbaH\x0cr\n\x10\x01\x18 :\x04m2m_R\x08\x63lientId\x12|\n\nconsent_id\x18\x02 \x01(\tB]\x92\x41G2/Unique identifier of the user consent to revokeJ\x14\"usrcnst_1234567890\"\xbaH\x10r\x0e\x10\x01\x18 :\x08usrcnst_R\tconsentId\"\x1b\n\x19RevokeUserConsentResponse\"\x9f\x01\n\x1f\x45nsureResourceConnectionRequest\x12|\n\x0bresource_id\x18\x01 \x01(\tB[\x92\x41O24Unique identifier of the client resource to retrieveJ\x17\"app_69388798466720005\"\xbaH\x06r\x04\x10\x01\x18 R\nresourceId\"\xd4\x01\n EnsureResourceConnectionResponse\x12\xaf\x01\n\nconnection\x18\x01 \x01(\x0b\x32\'.scalekit.v1.clients.ResourceConnectionBf\x92\x41]2[Details of the connection resource. Contains configuration settings and status information.\xbaH\x03\xc8\x01\x01R\nconnection\"\xb0\x07\n\x12ResourceConnection\x12T\n\x02id\x18\x01 \x01(\tBD\x92\x41\x41\x32,Unique identifier of the connection resourceJ\x11\"conn_1234567890\"R\x02id\x12\xa1\x01\n\x04type\x18\x02 \x01(\x0e\x32+.scalekit.v1.clients.ResourceConnectionTypeB`\x92\x41]2QType of connection. Determines the authentication method used for the connection.J\x08\"CUSTOM\"R\x04type\x12\x94\x01\n\x06status\x18\x03 \x01(\tB|\x92\x41y2mCurrent status of the connection. Indicates whether the connection is active, inactive, or in an error state.J\x08\"ACTIVE\"R\x06status\x12\x89\x01\n\x07\x65nabled\x18\x04 \x01(\x08\x42o\x92\x41l2dIndicates whether the connection is enabled. Disabled connections cannot be used for authentication.J\x04trueR\x07\x65nabled\x12\xe7\x01\n\x08settings\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructB\xb1\x01\x92\x41\xad\x01\x32kConfiguration settings for the connection. The structure of this field varies based on the connection type.J>{\"api_key\": \"abcd1234\", \"endpoint\": \"https://api.example.com\"}R\x08settings\x12\x92\x01\n\x08provider\x18\x06 \x01(\tBv\x92\x41s2^The provider of the connection. Indicates the service or platform that manages the connection.J\x11\"custom_provider\"R\x08provider\"\xdc\x01\n ResourceCustomConnectionSettings\x12\xb7\x01\n\rauthorize_uri\x18\x01 \x01(\tB\x91\x01\x92\x41\x83\x01\x32[The URI where users are redirected to authorize the application. Must be a valid HTTPS URL.J$\"https://auth.example.com/authorize\"\xbaH\x07r\x05\x10\x01\x88\x01\x01R\x0c\x61uthorizeUri*k\n\x0cResourceType\x12\x1d\n\x19RESOURCE_TYPE_UNSPECIFIED\x10\x00\x12\x07\n\x03WEB\x10\x01\x12\n\n\x06MOBILE\x10\x02\x12\x0b\n\x07\x44\x45SKTOP\x10\x03\x12\n\n\x06SERVER\x10\x04\x12\x0e\n\nMCP_SERVER\x10\x05*.\n\x12\x43lientSecretStatus\x12\n\n\x06\x41\x43TIVE\x10\x00\x12\x0c\n\x08INACTIVE\x10\x01*1\n\x16ResourceConnectionType\x12\x0b\n\x07INVALID\x10\x00\x12\n\n\x06\x43USTOM\x10\x01\x32\xc3\x8a\x01\n\rClientService\x12\xa0\x03\n\nListClient\x12\'.scalekit.v1.clients.ListClientsRequest\x1a(.scalekit.v1.clients.ListClientsResponse\"\xbe\x02\x92\x41\x8e\x02\n\x08\x41PI Auth\x12\x10List API clients\x1a\x90\x01Retrieves a paginated list of API client applications in the environment. Returns only environment-level clients, not resource-specific clients.J]\n\x03\x32\x30\x30\x12V\n&List of clients returned successfully.\x12,\n*\x1a(.scalekit.v1.clients.ListClientsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x11\x12\x0f/api/v1/clients\x12\xb4\x03\n\x0c\x43reateClient\x12(.scalekit.v1.clients.CreateClientRequest\x1a).scalekit.v1.clients.CreateClientResponse\"\xce\x02\x92\x41\x96\x02\n\x06\x43lient\x12\rCreate Client\x1a\x81\x01\x43reates an OAuth client with properties including post-login URIs, scopes, and custom claims. Required fields: name, client_type.Jy\n\x03\x32\x30\x30\x12r\nAClient created successfully. Returns the created client resource.\x12-\n+\x1a).scalekit.v1.clients.CreateClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\"\x0f/api/v1/clients:\x06\x63lient\x12\xd0\x04\n\tGetClient\x12%.scalekit.v1.clients.GetClientRequest\x1a&.scalekit.v1.clients.GetClientResponse\"\xf3\x03\x92\x41\xb7\x03\n\x0e\x43lient Configs\x12\x18Get Client Configuration\x1a\xc5\x01Retrieves complete client configuration including scopes, custom claims, redirect URIs, and access token expiration time. Use this endpoint to view or verify client settings and security parametersJ\xc2\x01\n\x03\x32\x30\x30\x12\xba\x01\n\x8b\x01\x43lient configuration retrieved successfully. Returns full client metadata including scopes, audience, custom claims, and security settings.\x12*\n(\x1a&.scalekit.v1.clients.GetClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1d\x12\x1b/api/v1/clients/{client_id}\x12\xcd\x05\n\x0cUpdateClient\x12(.scalekit.v1.clients.UpdateClientRequest\x1a).scalekit.v1.clients.UpdateClientResponse\"\xe7\x04\x92\x41\xa3\x04\n\x0e\x43lient Configs\x12\x1bUpdate Client Configuration\x1a\xba\x02Updates the configuration settings for a client. Only fields included in the request are modified. Updatable fields include post_login_uris, post_logout_redirect_uris, back_channel_logout_uris, initiate_login_uri, scopes, audience, and custom claims. client_id and create_time are immutable and cannot be modified.J\xb6\x01\n\x03\x32\x30\x31\x12\xae\x01\n}Client configuration updated successfully. Returns the updated client resource with new update_time and all current settings.\x12-\n+\x1a).scalekit.v1.clients.UpdateClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%2\x1b/api/v1/clients/{client_id}:\x06\x63lient\x12\x9a\x03\n\x0c\x44\x65leteClient\x12(.scalekit.v1.clients.DeleteClientRequest\x1a\x16.google.protobuf.Empty\"\xc7\x02\x92\x41\x8b\x02\n\x06\x43lient\x12\rDelete Client\x1a\xb2\x01Permanently deletes a client and associated secrets. This operation cannot be undone. Supports WEB_APP, NTV, and SPA client types only. Cannot delete default environment clients.J=\n\x03\x32\x30\x30\x12\x36\n4Client successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1d*\x1b/api/v1/clients/{client_id}\x12\xa4\x05\n\x12\x43reateClientSecret\x12..scalekit.v1.clients.CreateClientSecretRequest\x1a/.scalekit.v1.clients.CreateClientSecretResponse\"\xac\x04\x92\x41\xe8\x03\n\x0e\x43lient Configs\x12\x14\x43reate Client Secret\x1a\x82\x02Generates a new client secret for an API client. This endpoint creates a secure credential that can be used for OAuth 2.0 client credentials flow. The plain secret is only returned once during creation and should be stored securely by the client application.J\xba\x01\n\x03\x32\x30\x31\x12\xb2\x01\n{Client secret created successfully. Returns the new secret ID and the plain secret value (only available at creation time).\x12\x33\n1\x1a/.scalekit.v1.clients.CreateClientSecretResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\"#/api/v1/clients/{client_id}/secrets\x12\xca\x05\n\x12UpdateClientSecret\x12..scalekit.v1.clients.UpdateClientSecretRequest\x1a/.scalekit.v1.clients.UpdateClientSecretResponse\"\xd2\x04\x92\x41\xbf\x03\n\x0e\x43lient Configs\x12\x14Update Client Secret\x1a\xfd\x01Updates the status of a client secret. This endpoint allows you to activate or deactivate a client secret. Use this to rotate secrets or revoke access for compromised credentials. The secret value itself cannot be modified - create a new secret instead.J\x96\x01\n\x03\x32\x30\x30\x12\x8e\x01\nWClient secret updated successfully. Returns the updated secret with its current status.\x12\x33\n1\x1a/.scalekit.v1.clients.UpdateClientSecretResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02t\x1a//api/v1/clients/{client_id}/secrets/{secret_id}:\x06secretZ92//api/v1/clients/{client_id}/secrets/{secret_id}:\x06secret\x12\xe3\x03\n\x12\x44\x65leteClientSecret\x12..scalekit.v1.clients.DeleteClientSecretRequest\x1a\x16.google.protobuf.Empty\"\x84\x03\x92\x41\xb4\x02\n\x0e\x43lient Configs\x12\x14\x44\x65lete Client Secret\x1a\xc5\x01Permanently deletes a client secret. This operation cannot be undone. Use this endpoint to remove compromised or unused secrets. After deletion, the secret can no longer be used for authentication.JD\n\x03\x32\x30\x30\x12=\n;Client secret successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31*//api/v1/clients/{client_id}/secrets/{secret_id}\x12\x92\x05\n\x18\x43reateOrganizationClient\x12\x34.scalekit.v1.clients.CreateOrganizationClientRequest\x1a\x35.scalekit.v1.clients.CreateOrganizationClientResponse\"\x88\x04\x92\x41\xbf\x03\n\x08\x41PI Auth\x12\x1e\x43reate organization API client\x1arCreates a new API client for an organization. Returns the client details and a plain secret (available only once).J\x9e\x02\n\x03\x32\x30\x31\x12\x96\x02\n\xd8\x01\x41PI client created successfully. Returns the client ID and plain secret (only available at creation time). The client can be configured with scopes, audience values, and custom claims for fine-grained access control.\x12\x39\n7\x1a\x35.scalekit.v1.clients.CreateOrganizationClientResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x39\"//api/v1/organizations/{organization_id}/clients:\x06\x63lient\x12\xb5\x04\n\x15GetOrganizationClient\x12\x31.scalekit.v1.clients.GetOrganizationClientRequest\x1a\x32.scalekit.v1.clients.GetOrganizationClientResponse\"\xb4\x03\x92\x41\xe7\x02\n\x08\x41PI Auth\x12\x1bGet organization API client\x1a>Retrieves details of a specific API client in an organization.J\xfd\x01\n\x03\x32\x30\x30\x12\xf5\x01\n\xba\x01Returns the complete API client configuration, including all current settings and a list of active secrets. Note that secret values are not included in the response for security reasons.\x12\x36\n4\x1a\x32.scalekit.v1.clients.GetOrganizationClientResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02=\x12;/api/v1/organizations/{organization_id}/clients/{client_id}\x12\x89\x05\n\x1e\x43reateOrganizationClientSecret\x12:.scalekit.v1.clients.CreateOrganizationClientSecretRequest\x1a;.scalekit.v1.clients.CreateOrganizationClientSecretResponse\"\xed\x03\x92\x41\x98\x03\n\x08\x41PI Auth\x12%Create organization API client secret\x1a\x64\x43reates a new secret for an organization API client. Returns the plain secret (available only once).J\xfe\x01\n\x03\x32\x30\x31\x12\xf6\x01\n\xb2\x01\x43lient secret created successfully. Returns the new secret ID and the plain secret value (only available at creation time). The secret can be used immediately for authentication.\x12?\n=\x1a;.scalekit.v1.clients.CreateOrganizationClientSecretResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x45\"C/api/v1/organizations/{organization_id}/clients/{client_id}/secrets\x12\xaf\x03\n\x1e\x44\x65leteOrganizationClientSecret\x12:.scalekit.v1.clients.DeleteOrganizationClientSecretRequest\x1a\x16.google.protobuf.Empty\"\xb8\x02\x92\x41\xd7\x01\n\x08\x41PI Auth\x12%Delete organization API client secret\x1a^Permanently deletes a secret from an organization API client. This operation cannot be undone.JD\n\x03\x32\x30\x30\x12=\n;Client secret successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02Q*O/api/v1/organizations/{organization_id}/clients/{client_id}/secrets/{secret_id}\x12\xc2\x04\n\x18UpdateOrganizationClient\x12\x34.scalekit.v1.clients.UpdateOrganizationClientRequest\x1a\x35.scalekit.v1.clients.UpdateOrganizationClientResponse\"\xb8\x03\x92\x41\xe3\x02\n\x08\x41PI Auth\x12\x1eUpdate organization API client\x1aPUpdates an existing organization API client. Only specified fields are modified.J\xe4\x01\n\x03\x32\x30\x30\x12\xdc\x01\n\x9e\x01Returns the updated organization API client with all current details reflected in the response, including modified scopes, audience values, and custom claims.\x12\x39\n7\x1a\x35.scalekit.v1.clients.UpdateOrganizationClientResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x45\x32;/api/v1/organizations/{organization_id}/clients/{client_id}:\x06\x63lient\x12\xa3\x04\n\x18\x44\x65leteOrganizationClient\x12\x34.scalekit.v1.clients.DeleteOrganizationClientRequest\x1a\x16.google.protobuf.Empty\"\xb8\x03\x92\x41\xeb\x02\n\x08\x41PI Auth\x12\x1e\x44\x65lete organization API client\x1a\xee\x01Permanently deletes an API client from an organization. This operation cannot be undone and will revoke all access for the client. All associated secrets will also be invalidated. Use this endpoint to remove unused or compromised clients.JN\n\x03\x32\x30\x30\x12G\nEOrganization API client successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02=*;/api/v1/organizations/{organization_id}/clients/{client_id}\x12\xe8\x04\n\x17ListOrganizationClients\x12\x33.scalekit.v1.clients.ListOrganizationClientsRequest\x1a\x34.scalekit.v1.clients.ListOrganizationClientsResponse\"\xe1\x03\x92\x41\xa0\x03\n\x08\x41PI Auth\x12\x1dList organization API clients\x1a\xb9\x01Retrieves a paginated list of API clients for a specific organization. Returns client details including metadata, scopes, and secret information (without exposing actual secret values).J\xb8\x01\n\x03\x32\x30\x30\x12\xb0\x01\ntList of organization API clients returned successfully. Each client includes its configuration details and metadata.\x12\x38\n6\x1a\x34.scalekit.v1.clients.ListOrganizationClientsResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x31\x12//api/v1/organizations/{organization_id}/clients\x12\x95\x03\n\x0e\x43reateResource\x12*.scalekit.v1.clients.CreateResourceRequest\x1a+.scalekit.v1.clients.CreateResourceResponse\"\xa9\x02\x92\x41\xed\x01\n\x08\x41PI Auth\x12\x0f\x43reate Resource\x1aXCreates a new client resource. The response includes the resource ID and other metadata.Jv\n\x03\x32\x30\x31\x12o\nResource details retrieved successfully. Returns the resource.\x12,\n*\x1a(.scalekit.v1.clients.GetResourceResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\x12\x1f/api/v1/resources/{resource_id}\x12\xd3\x02\n\rListResources\x12).scalekit.v1.clients.ListResourcesRequest\x1a*.scalekit.v1.clients.ListResourcesResponse\"\xea\x01\x92\x41\xb8\x01\n\x08\x41PI Auth\x12\x11List applications\x1a\x36Retrieves a paginated list of API client applications.Ja\n\x03\x32\x30\x30\x12Z\n(List of resources returned successfully.\x12.\n,\x1a*.scalekit.v1.clients.ListResourcesResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x13\x12\x11/api/v1/resources\x12\x93\x03\n\x0eUpdateResource\x12*.scalekit.v1.clients.UpdateResourceRequest\x1a+.scalekit.v1.clients.UpdateResourceResponse\"\xa7\x02\x92\x41\xdd\x01\n\x08\x41PI Auth\x12\x0fUpdate Resource\x1aHUpdates an existing client resource. Only specified fields are modified.Jv\n\x03\x32\x30\x30\x12o\nResource details retrieved successfully. Returns the resource.\x12,\n*\x1a(.scalekit.v1.clients.GetResourceResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\x1a//api/v1/resources/{resource_id}/provider:delete\x12\xf5\x03\n\x14\x43reateResourceClient\x12\x30.scalekit.v1.clients.CreateResourceClientRequest\x1a\x31.scalekit.v1.clients.CreateResourceClientResponse\"\xf7\x02\x92\x41\xa7\x02\n\x08\x41PI Auth\x12\x16\x43reate Resource Client\x1apCreates a new API client under the specified resource. Returns client details and the plain secret (shown once).J\x90\x01\n\x03\x32\x30\x31\x12\x88\x01\nOClient created successfully. Returns the client configuration and plain secret.\x12\x35\n3\x1a\x31.scalekit.v1.clients.CreateResourceClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\"\'/api/v1/resources/{resource_id}/clients:\x06\x63lient\x12\xcf\x03\n\x14UpdateResourceClient\x12\x30.scalekit.v1.clients.UpdateResourceClientRequest\x1a\x31.scalekit.v1.clients.UpdateResourceClientResponse\"\xd1\x02\x92\x41\xf5\x01\n\x08\x41PI Auth\x12\x16Update Resource Client\x1aHUpdates the configuration of an API client under the specified resource.J\x86\x01\n\x03\x32\x30\x30\x12\x7f\nFClient updated successfully. Returns the updated client configuration.\x12\x35\n3\x1a\x31.scalekit.v1.clients.UpdateResourceClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02=23/api/v1/resources/{resource_id}/clients/{client_id}:\x06\x63lient\x12\xce\x03\n\x11GetResourceClient\x12-.scalekit.v1.clients.GetResourceClientRequest\x1a..scalekit.v1.clients.GetResourceClientResponse\"\xd9\x02\x92\x41\x85\x02\n\x08\x41PI Auth\x12\x17Get Resource API Client\x1aJRetrieves details of a specific API client associated with an application.J\x93\x01\n\x03\x32\x30\x30\x12\x8b\x01\nUClient details retrieved successfully. Returns the resource and client configuration.\x12\x32\n0\x1a..scalekit.v1.clients.GetResourceClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x35\x12\x33/api/v1/resources/{resource_id}/clients/{client_id}\x12\xe7\x03\n\x13ListResourceClients\x12/.scalekit.v1.clients.ListResourceClientsRequest\x1a\x30.scalekit.v1.clients.ListResourceClientsResponse\"\xec\x02\x92\x41\xa4\x02\n\x08\x41PI Auth\x12\x19List Resource API Clients\x1aPRetrieves a list of API clients associated with a specific application resource.J\xaa\x01\n\x03\x32\x30\x30\x12\xa2\x01\njList of clients retrieved successfully. Returns the resource details and associated client configurations.\x12\x34\n2\x1a\x30.scalekit.v1.clients.ListResourceClientsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)\x12\'/api/v1/resources/{resource_id}/clients\x12\xcb\x03\n\x18ListResourceUserConsents\x12\x34.scalekit.v1.clients.ListResourceUserConsentsRequest\x1a\x35.scalekit.v1.clients.ListResourceUserConsentsResponse\"\xc1\x02\x92\x41\x8b\x02\n\x08\x41PI Auth\x12!List user consents for a resource\x1ajRetrieves a paginated list of user consents for a given resource, with optional search by external user IDJp\n\x03\x32\x30\x30\x12i\n,List of user consents retrieved successfully\x12\x39\n7\x1a\x35.scalekit.v1.clients.ListResourceUserConsentsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x17\x12\x15/api/v1/user_consents\x12\x87\x03\n\x14\x44\x65leteResourceClient\x12\x30.scalekit.v1.clients.DeleteResourceClientRequest\x1a\x31.scalekit.v1.clients.DeleteResourceClientResponse\"\x89\x02\x92\x41\xb5\x01\n\x08\x41PI Auth\x12\x16\x44\x65lete Resource Client\x1a\x33\x44\x65letes an API client under the specified resource.J\\\n\x03\x32\x30\x30\x12U\n\x1c\x43lient deleted successfully.\x12\x35\n3\x1a\x31.scalekit.v1.clients.DeleteResourceClientResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x35*3/api/v1/resources/{resource_id}/clients/{client_id}\x12\x82\x04\n\x0eRegisterClient\x12*.scalekit.v1.clients.RegisterClientRequest\x1a+.scalekit.v1.clients.RegisterClientResponse\"\x96\x03\x92\x41\xc2\x02\n\x08\x41PI Auth\x12\x13Register API client\x1a\x84\x01Registers a new API client under an existing resource using dynamic client registration. Returns the created client and its secrets.J\x99\x01\n\x03\x32\x30\x31\x12\x91\x01\n^Client registered successfully. Returns client details and plain secret (available only once).\x12/\n-\x1a+.scalekit.v1.clients.RegisterClientResponse\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x35\"+/api/v1/resources/{res_id}/clients:register:\x06\x63lient\x12\xb6\x05\n\x0b\x43reateScope\x12\'.scalekit.v1.clients.CreateScopeRequest\x1a(.scalekit.v1.clients.CreateScopeResponse\"\xd3\x04\x88\x02\x01\x92\x41\xeb\x03\x12\x19\x43reate scope (Deprecated)\x1a\xa1\x02\x44\x45PRECATED: Use permission management APIs instead. Creates a new OAuth scope for API authorization. Scopes define the level of access granted to API clients. Reserved OpenID Connect scopes (profile, email, address, phone) cannot be created as they are automatically managed by the system.J\xa9\x01\n\x03\x32\x30\x31\x12\xa1\x01\nqOAuth scope created successfully. Returns the newly created scope with its name, description, and enabled status.\x12,\n*\x1a(.scalekit.v1.clients.CreateScopeResponse\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x46\"\x0e/api/v1/scopes:\x05scopeZ-\"$/api/v1/environments/{env_id}/scopes:\x05scope\x12\xe9\x03\n\nListScopes\x12&.scalekit.v1.clients.ListScopesRequest\x1a\'.scalekit.v1.clients.ListScopesResponse\"\x89\x03\x92\x41\xb2\x02\x12\x0bList scopes\x1a\x7fRetrieves all OAuth scopes configured for the environment. Returns both custom scopes and system-managed OpenID Connect scopes.J\xa1\x01\n\x03\x32\x30\x30\x12\x99\x01\njList of OAuth scopes returned successfully. Each scope includes its name, description, and enabled status.\x12+\n)\x1a\'.scalekit.v1.clients.ListScopesResponse\x82\xb5\x18\x02\x18`\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x38\x12\x0e/api/v1/scopesZ&\x12$/api/v1/environments/{env_id}/scopes\x12\xaf\x04\n\x0bUpdateScope\x12\'.scalekit.v1.clients.UpdateScopeRequest\x1a(.scalekit.v1.clients.UpdateScopeResponse\"\xcc\x03\x88\x02\x01\x92\x41\x8e\x03\x12\x19Update scope (Deprecated)\x1a\xe0\x01\x44\x45PRECATED: Use permission management APIs instead. Updates an existing OAuth scope\'s description and enabled status. Reserved OpenID Connect scopes (profile, email, address, phone) cannot be modified through this endpoint.J\x8d\x01\n\x03\x32\x30\x30\x12\x85\x01\nUOAuth scope updated successfully. Returns the updated scope with all current details.\x12,\n*\x1a(.scalekit.v1.clients.UpdateScopeResponse\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1c\x32\x13/api/v1/scopes/{id}:\x05scope\x12\xe0\x03\n\x0b\x44\x65leteScope\x12\'.scalekit.v1.clients.DeleteScopeRequest\x1a\x16.google.protobuf.Empty\"\x8f\x03\x88\x02\x01\x92\x41\xd8\x02\x12\x19\x44\x65lete scope (Deprecated)\x1a\xf6\x01\x44\x45PRECATED: Use permission management APIs instead. Permanently deletes an OAuth scope from the environment. This operation cannot be undone. Reserved OpenID Connect scopes (profile, email, address, phone) cannot be deleted through this endpoint.JB\n\x03\x32\x30\x30\x12;\n9OAuth scope successfully deleted and no longer accessible\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15*\x13/api/v1/scopes/{id}\x12\x97\x01\n\x11GetConsentDetails\x12\x16.google.protobuf.Empty\x1a..scalekit.v1.clients.GetConsentDetailsResponse\":\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1f\x12\x1d/api/v1/oauth/consent/details\x12\xc2\x01\n\x11RevokeUserConsent\x12-.scalekit.v1.clients.RevokeUserConsentRequest\x1a..scalekit.v1.clients.RevokeUserConsentResponse\"N\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x33*1/api/v1/clients/{client_id}/consents/{consent_id}\x12\xea\x03\n\x18\x45nsureResourceConnection\x12\x34.scalekit.v1.clients.EnsureResourceConnectionRequest\x1a\x35.scalekit.v1.clients.EnsureResourceConnectionResponse\"\xe0\x02\x92\x41\x91\x02\n\x08\x41PI Auth\x12!Get or Create Resource Connection\x1aSRetrieves an existing resource connection or creates a new one if it doesn\'t exist.J\x8c\x01\n\x03\x32\x30\x30\x12\x84\x01\nBReturns the existing or newly created resource connection details.\x12>\n<\x1a:.scalekit.v1.clients.GetOrCreateResourceConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x30\"+/api/v1/resources/{resource_id}/connections:\x01*\x1a\xb8\x03\x92\x41\xb4\x03\n\x08\x41PI Auth\x12\xfd\x02\x45ndpoints for managing API client applications. API clients enable secure, automated interactions between software systems without human intervention. Each client is uniquely identified by a `client_id` and can be configured with authentication settings, redirect URIs, and security parameters. Use these endpoints to create, manage, and configure API clients for your API clients.\x1a(\x12&https://docs.scalekit.com/m2m/overviewB3Z1github.com/scalekit-inc/scalekit/pkg/grpc/clientsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -430,11 +430,11 @@ _globals['_GETCLIENTRESPONSE'].fields_by_name['client']._loaded_options = None _globals['_GETCLIENTRESPONSE'].fields_by_name['client']._serialized_options = b'\222A\245\0012\242\001Complete client configuration including authentication settings, redirect URIs, and secrets. This contains all current settings for the requested client resource.' _globals['_LISTCLIENTSREQUEST_FILTER'].fields_by_name['client_type']._loaded_options = None - _globals['_LISTCLIENTSREQUEST_FILTER'].fields_by_name['client_type']._serialized_options = b'\222A\326\0012\323\001Filters clients by type. Valid values: WEB, ENV, WEB_APP, NTV, SPA, ALL. Defaults to WEB. ALL takes precedence and other types are ignored. For resource-specific clients (e.g., M2M), use ListResourceClients API.' + _globals['_LISTCLIENTSREQUEST_FILTER'].fields_by_name['client_type']._serialized_options = b'\222A\321\0012\316\001Filters clients by type. Valid values: ENV, WEB_APP, NTV, SPA, ALL. Defaults to ENV. ALL takes precedence and other types are ignored. For resource-specific clients (e.g., M2M), use ListResourceClients API.' _globals['_LISTCLIENTSREQUEST'].fields_by_name['include_plain_secret']._loaded_options = None _globals['_LISTCLIENTSREQUEST'].fields_by_name['include_plain_secret']._serialized_options = b'\222A\273\0012\261\001Whether to include plain secret values in the response. Enable only during initial client creation, then store secrets securely. Not available when filtering by ALL client typesJ\005false' _globals['_LISTCLIENTSREQUEST'].fields_by_name['filter']._loaded_options = None - _globals['_LISTCLIENTSREQUEST'].fields_by_name['filter']._serialized_options = b'\222A?2=Filters clients by type: WEB, ENV, WEB_APP, NTV, SPA, or ALL.' + _globals['_LISTCLIENTSREQUEST'].fields_by_name['filter']._serialized_options = b'\222A:28Filters clients by type: ENV, WEB_APP, NTV, SPA, or ALL.' _globals['_LISTCLIENTSREQUEST'].fields_by_name['page_token']._loaded_options = None _globals['_LISTCLIENTSREQUEST'].fields_by_name['page_token']._serialized_options = b'\222A;2\"Token for the next page of resultsJ\025\"next_page_token_123\"' _globals['_LISTCLIENTSREQUEST'].fields_by_name['page_size']._loaded_options = None @@ -460,7 +460,7 @@ _globals['_CREATECLIENT'].fields_by_name['initiate_login_uri']._loaded_options = None _globals['_CREATECLIENT'].fields_by_name['initiate_login_uri']._serialized_options = b'\222A\307\0012\243\001Pre-configured URI for initiating login flows. This URI is used to start authentication flows programmatically. Must use HTTPS protocol and contain a valid domain.J\037\"https://app.example.com/login\"' _globals['_CREATECLIENT'].fields_by_name['post_login_uris']._loaded_options = None - _globals['_CREATECLIENT'].fields_by_name['post_login_uris']._serialized_options = b'\222A\275\0012uList of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\272H\014\222\001\t\030\001\"\005r\003\210\001\001' + _globals['_CREATECLIENT'].fields_by_name['post_login_uris']._serialized_options = b'\222A\347\0012\236\001List of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTPS in production environments. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\272H\005\222\001\002\030\001' _globals['_CREATECLIENT'].fields_by_name['access_token_expiry']._loaded_options = None _globals['_CREATECLIENT'].fields_by_name['access_token_expiry']._serialized_options = b'\222A42,Expiry time in seconds for the access token.J\0043600' _globals['_CREATECLIENT'].fields_by_name['scopes']._loaded_options = None @@ -480,13 +480,9 @@ _globals['_UPDATECLIENTREQUEST'].fields_by_name['client_id']._loaded_options = None _globals['_UPDATECLIENTREQUEST'].fields_by_name['client_id']._serialized_options = b'\222AT2:Unique identifier of the registered application to update.J\026\"skc_01H9XPQR7ZY2AJKL\"\272H\006r\004\020\001\030 ' _globals['_UPDATECLIENTREQUEST'].fields_by_name['client']._loaded_options = None - _globals['_UPDATECLIENTREQUEST'].fields_by_name['client']._serialized_options = b'\222A\331\0012bApplication configuration parameters to update. Contains redirect URIs and authentication settingsJs{\"redirect_uris\": [\"https://app.example.com/callback\"], \"default_redirect_uri\": \"https://app.example.com/callback\"}\272H\003\310\001\001' + _globals['_UPDATECLIENTREQUEST'].fields_by_name['client']._serialized_options = b'\222A\242\0012eApplication configuration parameters to update. Contains post_login_uris and authentication settings.J9{\"post_login_uris\": [\"https://app.example.com/callback\"]}\272H\003\310\001\001' _globals['_UPDATECLIENTREQUEST'].fields_by_name['mask']._loaded_options = None _globals['_UPDATECLIENTREQUEST'].fields_by_name['mask']._serialized_options = b'\340A\003\372\322\344\223\002\t\022\007PREVIEW' - _globals['_UPDATECLIENT'].fields_by_name['redirect_uris']._loaded_options = None - _globals['_UPDATECLIENT'].fields_by_name['redirect_uris']._serialized_options = b'\222A\345\0012\234\001List of allowed redirect URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTPS in production environments. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\272H\014\222\001\t\030\001\"\005r\003\210\001\001' - _globals['_UPDATECLIENT'].fields_by_name['default_redirect_uri']._loaded_options = None - _globals['_UPDATECLIENT'].fields_by_name['default_redirect_uri']._serialized_options = b'\222A\247\0012\200\001Primary redirect URI used when none is specified in authorization requests. Must exactly match one of the URIs in redirect_uris.J\"\"https://app.example.com/callback\"\272H5\272\0012\n\tvalid_uri\022\027uri must be a valid URI\032\014this.isUri()' _globals['_UPDATECLIENT'].fields_by_name['back_channel_logout_uris']._loaded_options = None _globals['_UPDATECLIENT'].fields_by_name['back_channel_logout_uris']._serialized_options = b'\222A\366\0012\225\001HTTPS endpoints for receiving back-channel logout notifications. Required for implementing application-initiated logout flows and session management.J\\[\"https://app.example.com/backchannel-logout\", \"https://app.example.com/backchannel-logout\"]\272H\014\222\001\t\030\001\"\005r\003\210\001\001' _globals['_UPDATECLIENT'].fields_by_name['post_logout_redirect_uris']._loaded_options = None @@ -494,7 +490,7 @@ _globals['_UPDATECLIENT'].fields_by_name['initiate_login_uri']._loaded_options = None _globals['_UPDATECLIENT'].fields_by_name['initiate_login_uri']._serialized_options = b'\222A\307\0012\243\001Pre-configured URI for initiating login flows. This URI is used to start authentication flows programmatically. Must use HTTPS protocol and contain a valid domain.J\037\"https://app.example.com/login\"' _globals['_UPDATECLIENT'].fields_by_name['post_login_uris']._loaded_options = None - _globals['_UPDATECLIENT'].fields_by_name['post_login_uris']._serialized_options = b'\222A\347\0012\236\001List of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTPS in production environments. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\272H\014\222\001\t\030\001\"\005r\003\210\001\001' + _globals['_UPDATECLIENT'].fields_by_name['post_login_uris']._serialized_options = b'\222A\347\0012\236\001List of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTPS in production environments. Maximum of 5 URIs allowed.JD[\"https://app.example.com/callback\", \"https://dev.example.com/auth\"]\272H\005\222\001\002\030\001' _globals['_UPDATECLIENT'].fields_by_name['name']._loaded_options = None _globals['_UPDATECLIENT'].fields_by_name['name']._serialized_options = b'\222A\272\0012\236\001A descriptive name for the API client that helps identify its purpose. This name is displayed in the dashboard and logs. Must be between 1 and 128 characters.J\027\"My Application Client\"' _globals['_UPDATECLIENT'].fields_by_name['access_token_expiry']._loaded_options = None @@ -510,7 +506,7 @@ _globals['_UPDATECLIENT'].fields_by_name['enforce_pkce']._loaded_options = None _globals['_UPDATECLIENT'].fields_by_name['enforce_pkce']._serialized_options = b'\222A\235\0012\224\001Whether Proof Key for Code Exchange (PKCE) is required. PKCE mitigates authorization code interception attacks. Defaults to true for public clients.J\004true' _globals['_UPDATECLIENT']._loaded_options = None - _globals['_UPDATECLIENT']._serialized_options = b'\222A\375\001\n\275\001*\033Update Client Configuration2\235\001Parameters for updating an API client application\'s configuration. This allows modification of redirect URIs, logout settings, and other security parameters.*;\n\021API Documentation\022&https://docs.scalekit.com/m2m/overview' + _globals['_UPDATECLIENT']._serialized_options = b'\222A\377\001\n\277\001*\033Update Client Configuration2\237\001Parameters for updating an API client application\'s configuration. This allows modification of post_login_uris, logout settings, and other security parameters.*;\n\021API Documentation\022&https://docs.scalekit.com/m2m/overview' _globals['_UPDATECLIENTRESPONSE'].fields_by_name['client']._loaded_options = None _globals['_UPDATECLIENTRESPONSE'].fields_by_name['client']._serialized_options = b'\222AW2UUpdated application configuration with all current settings reflected in the response' _globals['_CREATECLIENTSECRETREQUEST'].fields_by_name['client_id']._loaded_options = None @@ -545,10 +541,6 @@ _globals['_CLIENT'].fields_by_name['create_time']._serialized_options = b'\222A\256\0012\217\001Timestamp indicating when the client configuration was initially created. This field is automatically set by the server and cannot be modified.J\032\"2024-01-05T14:48:00.000Z\"' _globals['_CLIENT'].fields_by_name['update_time']._loaded_options = None _globals['_CLIENT'].fields_by_name['update_time']._serialized_options = b'\222A\277\0012\240\001Timestamp of the last modification to the client configuration. This field is automatically updated by the server whenever any aspect of the client is modified.J\032\"2024-01-10T09:12:00.000Z\"' - _globals['_CLIENT'].fields_by_name['redirect_uris']._loaded_options = None - _globals['_CLIENT'].fields_by_name['redirect_uris']._serialized_options = b'\222A\253\0022\333\001List of allowed redirect URIs for OAuth 2.0 authorization flows. These URIs must use HTTPS protocol in production environments and comply with RFC 6749. Users will be redirected to one of these URIs after authorization.JK[\"https://auth.your-app.com/callback\", \"https://scalekit.example.org/auth\"]' - _globals['_CLIENT'].fields_by_name['default_redirect_uri']._loaded_options = None - _globals['_CLIENT'].fields_by_name['default_redirect_uri']._serialized_options = b'\222A\311\0012\240\001Primary redirect URI used when none is explicitly specified in authorization requests. This URI must exactly match one of the entries in the redirect_uris list.J$\"https://auth.your-app.com/callback\"' _globals['_CLIENT'].fields_by_name['secrets']._loaded_options = None _globals['_CLIENT'].fields_by_name['secrets']._serialized_options = b'\222A\343\0012\340\001List of client secrets used for authentication. Each secret is stored securely using one-way hashing (bcrypt). The plaintext secret values are only displayed during initial creation and must be stored securely by the client.' _globals['_CLIENT'].fields_by_name['post_logout_redirect_uris']._loaded_options = None @@ -572,7 +564,7 @@ _globals['_CLIENT'].fields_by_name['grant_types']._loaded_options = None _globals['_CLIENT'].fields_by_name['grant_types']._serialized_options = b'\222A\204\0012CList of OAuth 2.0 grant types that the client is authorized to use.J=[\"authorization_code\", \"refresh_token\", \"client_credentials\"]' _globals['_CLIENT'].fields_by_name['client_type']._loaded_options = None - _globals['_CLIENT'].fields_by_name['client_type']._serialized_options = b'\222AB29Type of client. Valid values: WEB, ENV, WEB_APP, NTV, SPAJ\005\"WEB\"' + _globals['_CLIENT'].fields_by_name['client_type']._serialized_options = b'\222A=24Type of client. Valid values: ENV, WEB_APP, NTV, SPAJ\005\"ENV\"' _globals['_CLIENT'].fields_by_name['enforce_pkce']._loaded_options = None _globals['_CLIENT'].fields_by_name['enforce_pkce']._serialized_options = b'\222A\235\0012\224\001Whether Proof Key for Code Exchange (PKCE) is required. PKCE mitigates authorization code interception attacks. Defaults to true for public clients.J\004true' _globals['_CLIENT']._loaded_options = None @@ -633,6 +625,12 @@ _globals['_GETCONSENTDETAILSRESPONSE'].fields_by_name['scopes']._serialized_options = b'\222A]2[List of scopes for which consent was granted. Each scope includes its name and description.' _globals['_GETCONSENTDETAILSRESPONSE'].fields_by_name['application']._loaded_options = None _globals['_GETCONSENTDETAILSRESPONSE'].fields_by_name['application']._serialized_options = b'\222A&2$Details of the requested application' + _globals['_GETCONSENTDETAILSRESPONSE'].fields_by_name['organization']._loaded_options = None + _globals['_GETCONSENTDETAILSRESPONSE'].fields_by_name['organization']._serialized_options = b'\222A.2,Organization context for the consent screen.' + _globals['_CONSENTORGANIZATION'].fields_by_name['organization_name']._loaded_options = None + _globals['_CONSENTORGANIZATION'].fields_by_name['organization_name']._serialized_options = b'\222Ad2UName of the organization the user is authenticating into. Omitted when not available.J\013\"Acme Corp\"' + _globals['_CONSENTORGANIZATION'].fields_by_name['organization_meta_name']._loaded_options = None + _globals['_CONSENTORGANIZATION'].fields_by_name['organization_meta_name']._serialized_options = b'\222At2bEnvironment-level label for what an organization is called (e.g. Workspace, Team). Always present.J\016\"Organization\"' _globals['_CONSENTCLIENT'].fields_by_name['name']._loaded_options = None _globals['_CONSENTCLIENT'].fields_by_name['name']._serialized_options = b'\222A;2.Name of the client resource requesting consentJ\t\"VS Code\"' _globals['_CONSENTCLIENT'].fields_by_name['privacy_uri']._loaded_options = None @@ -682,7 +680,7 @@ _globals['_CLIENTSERVICE'].methods_by_name['GetClient']._loaded_options = None _globals['_CLIENTSERVICE'].methods_by_name['GetClient']._serialized_options = b'\222A\267\003\n\016Client Configs\022\030Get Client Configuration\032\305\001Retrieves complete client configuration including scopes, custom claims, redirect URIs, and access token expiration time. Use this endpoint to view or verify client settings and security parametersJ\302\001\n\003200\022\272\001\n\213\001Client configuration retrieved successfully. Returns full client metadata including scopes, audience, custom claims, and security settings.\022*\n(\032&.scalekit.v1.clients.GetClientResponse\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\035\022\033/api/v1/clients/{client_id}' _globals['_CLIENTSERVICE'].methods_by_name['UpdateClient']._loaded_options = None - _globals['_CLIENTSERVICE'].methods_by_name['UpdateClient']._serialized_options = b'\222A\231\004\n\016Client Configs\022\033Update Client Configuration\032\260\002Updates the configuration settings for an M2M client. This endpoint allows you to modify client properties such as redirect URIs, scopes, audience, and custom claims. Required fields include redirect_uris and default_redirect_uri. Note that client_id and create_time are immutable and cannot be modified.J\266\001\n\003201\022\256\001\n}Client configuration updated successfully. Returns the updated client resource with new update_time and all current settings.\022-\n+\032).scalekit.v1.clients.UpdateClientResponse\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002%2\033/api/v1/clients/{client_id}:\006client' + _globals['_CLIENTSERVICE'].methods_by_name['UpdateClient']._serialized_options = b'\222A\243\004\n\016Client Configs\022\033Update Client Configuration\032\272\002Updates the configuration settings for a client. Only fields included in the request are modified. Updatable fields include post_login_uris, post_logout_redirect_uris, back_channel_logout_uris, initiate_login_uri, scopes, audience, and custom claims. client_id and create_time are immutable and cannot be modified.J\266\001\n\003201\022\256\001\n}Client configuration updated successfully. Returns the updated client resource with new update_time and all current settings.\022-\n+\032).scalekit.v1.clients.UpdateClientResponse\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002%2\033/api/v1/clients/{client_id}:\006client' _globals['_CLIENTSERVICE'].methods_by_name['DeleteClient']._loaded_options = None _globals['_CLIENTSERVICE'].methods_by_name['DeleteClient']._serialized_options = b'\222A\213\002\n\006Client\022\rDelete Client\032\262\001Permanently deletes a client and associated secrets. This operation cannot be undone. Supports WEB_APP, NTV, and SPA client types only. Cannot delete default environment clients.J=\n\003200\0226\n4Client successfully deleted and no longer accessible\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\035*\033/api/v1/clients/{client_id}' _globals['_CLIENTSERVICE'].methods_by_name['CreateClientSecret']._loaded_options = None @@ -745,12 +743,12 @@ _globals['_CLIENTSERVICE'].methods_by_name['RevokeUserConsent']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\0023*1/api/v1/clients/{client_id}/consents/{consent_id}' _globals['_CLIENTSERVICE'].methods_by_name['EnsureResourceConnection']._loaded_options = None _globals['_CLIENTSERVICE'].methods_by_name['EnsureResourceConnection']._serialized_options = b'\222A\221\002\n\010API Auth\022!Get or Create Resource Connection\032SRetrieves an existing resource connection or creates a new one if it doesn\'t exist.J\214\001\n\003200\022\204\001\nBReturns the existing or newly created resource connection details.\022>\n<\032:.scalekit.v1.clients.GetOrCreateResourceConnectionResponse\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\0020\"+/api/v1/resources/{resource_id}/connections:\001*' - _globals['_RESOURCETYPE']._serialized_start=52841 - _globals['_RESOURCETYPE']._serialized_end=52948 - _globals['_CLIENTSECRETSTATUS']._serialized_start=52950 - _globals['_CLIENTSECRETSTATUS']._serialized_end=52996 - _globals['_RESOURCECONNECTIONTYPE']._serialized_start=52998 - _globals['_RESOURCECONNECTIONTYPE']._serialized_end=53047 + _globals['_RESOURCETYPE']._serialized_start=52203 + _globals['_RESOURCETYPE']._serialized_end=52310 + _globals['_CLIENTSECRETSTATUS']._serialized_start=52312 + _globals['_CLIENTSECRETSTATUS']._serialized_end=52358 + _globals['_RESOURCECONNECTIONTYPE']._serialized_start=52360 + _globals['_RESOURCECONNECTIONTYPE']._serialized_end=52409 _globals['_CREATERESOURCEREQUEST']._serialized_start=558 _globals['_CREATERESOURCEREQUEST']._serialized_end=696 _globals['_CREATERESOURCE']._serialized_start=699 @@ -850,81 +848,83 @@ _globals['_GETCLIENTRESPONSE']._serialized_start=29794 _globals['_GETCLIENTRESPONSE']._serialized_end=30039 _globals['_LISTCLIENTSREQUEST']._serialized_start=30042 - _globals['_LISTCLIENTSREQUEST']._serialized_end=30917 - _globals['_LISTCLIENTSREQUEST_FILTER']._serialized_start=30648 - _globals['_LISTCLIENTSREQUEST_FILTER']._serialized_end=30911 - _globals['_LISTCLIENTSRESPONSE']._serialized_start=30920 - _globals['_LISTCLIENTSRESPONSE']._serialized_end=31417 - _globals['_CREATECLIENTREQUEST']._serialized_start=31420 - _globals['_CREATECLIENTREQUEST']._serialized_end=31657 - _globals['_CREATECLIENT']._serialized_start=31660 - _globals['_CREATECLIENT']._serialized_end=34676 - _globals['_CREATECLIENTRESPONSE']._serialized_start=34679 - _globals['_CREATECLIENTRESPONSE']._serialized_end=34819 - _globals['_UPDATECLIENTREQUEST']._serialized_start=34822 - _globals['_UPDATECLIENTREQUEST']._serialized_end=35328 - _globals['_UPDATECLIENT']._serialized_start=35331 - _globals['_UPDATECLIENT']._serialized_end=38819 - _globals['_UPDATECLIENTRESPONSE']._serialized_start=38822 - _globals['_UPDATECLIENTRESPONSE']._serialized_end=38990 - _globals['_CREATECLIENTSECRETREQUEST']._serialized_start=38993 - _globals['_CREATECLIENTSECRETREQUEST']._serialized_end=39167 - _globals['_CREATECLIENTSECRETRESPONSE']._serialized_start=39170 - _globals['_CREATECLIENTSECRETRESPONSE']._serialized_end=39599 - _globals['_UPDATECLIENTSECRETREQUEST']._serialized_start=39602 - _globals['_UPDATECLIENTSECRETREQUEST']._serialized_end=40245 - _globals['_UPDATECLIENTSECRET']._serialized_start=40248 - _globals['_UPDATECLIENTSECRET']._serialized_end=40484 - _globals['_UPDATECLIENTSECRETRESPONSE']._serialized_start=40487 - _globals['_UPDATECLIENTSECRETRESPONSE']._serialized_end=40718 - _globals['_DELETECLIENTREQUEST']._serialized_start=40721 - _globals['_DELETECLIENTREQUEST']._serialized_end=40854 - _globals['_DELETECLIENTSECRETREQUEST']._serialized_start=40857 - _globals['_DELETECLIENTSECRETREQUEST']._serialized_end=41164 - _globals['_CLIENT']._serialized_start=41167 - _globals['_CLIENT']._serialized_end=45606 - _globals['_CLIENTSECRET']._serialized_start=45609 - _globals['_CLIENTSECRET']._serialized_end=48106 - _globals['_SCOPE']._serialized_start=48109 - _globals['_SCOPE']._serialized_end=48421 - _globals['_CREATESCOPE']._serialized_start=48423 - _globals['_CREATESCOPE']._serialized_end=48536 - _globals['_CREATESCOPEREQUEST']._serialized_start=48539 - _globals['_CREATESCOPEREQUEST']._serialized_end=48782 - _globals['_CREATESCOPERESPONSE']._serialized_start=48784 - _globals['_CREATESCOPERESPONSE']._serialized_end=48855 - _globals['_LISTSCOPESREQUEST']._serialized_start=48858 - _globals['_LISTSCOPESREQUEST']._serialized_end=49028 - _globals['_LISTSCOPESRESPONSE']._serialized_start=49030 - _globals['_LISTSCOPESRESPONSE']._serialized_end=49102 - _globals['_UPDATESCOPEREQUEST']._serialized_start=49104 - _globals['_UPDATESCOPEREQUEST']._serialized_end=49215 - _globals['_UPDATESCOPE']._serialized_start=49217 - _globals['_UPDATESCOPE']._serialized_end=49328 - _globals['_UPDATESCOPERESPONSE']._serialized_start=49330 - _globals['_UPDATESCOPERESPONSE']._serialized_end=49401 - _globals['_DELETESCOPEREQUEST']._serialized_start=49403 - _globals['_DELETESCOPEREQUEST']._serialized_end=49452 - _globals['_GETCONSENTDETAILSRESPONSE']._serialized_start=49455 - _globals['_GETCONSENTDETAILSRESPONSE']._serialized_end=50059 - _globals['_CONSENTCLIENT']._serialized_start=50062 - _globals['_CONSENTCLIENT']._serialized_end=50760 - _globals['_CONSENTSCOPE']._serialized_start=50762 - _globals['_CONSENTSCOPE']._serialized_end=50854 - _globals['_USER']._serialized_start=50856 - _globals['_USER']._serialized_end=50970 - _globals['_REVOKEUSERCONSENTREQUEST']._serialized_start=50973 - _globals['_REVOKEUSERCONSENTREQUEST']._serialized_end=51263 - _globals['_REVOKEUSERCONSENTRESPONSE']._serialized_start=51265 - _globals['_REVOKEUSERCONSENTRESPONSE']._serialized_end=51292 - _globals['_ENSURERESOURCECONNECTIONREQUEST']._serialized_start=51295 - _globals['_ENSURERESOURCECONNECTIONREQUEST']._serialized_end=51454 - _globals['_ENSURERESOURCECONNECTIONRESPONSE']._serialized_start=51457 - _globals['_ENSURERESOURCECONNECTIONRESPONSE']._serialized_end=51669 - _globals['_RESOURCECONNECTION']._serialized_start=51672 - _globals['_RESOURCECONNECTION']._serialized_end=52616 - _globals['_RESOURCECUSTOMCONNECTIONSETTINGS']._serialized_start=52619 - _globals['_RESOURCECUSTOMCONNECTIONSETTINGS']._serialized_end=52839 - _globals['_CLIENTSERVICE']._serialized_start=53051 - _globals['_CLIENTSERVICE']._serialized_end=70772 + _globals['_LISTCLIENTSREQUEST']._serialized_end=30907 + _globals['_LISTCLIENTSREQUEST_FILTER']._serialized_start=30643 + _globals['_LISTCLIENTSREQUEST_FILTER']._serialized_end=30901 + _globals['_LISTCLIENTSRESPONSE']._serialized_start=30910 + _globals['_LISTCLIENTSRESPONSE']._serialized_end=31407 + _globals['_CREATECLIENTREQUEST']._serialized_start=31410 + _globals['_CREATECLIENTREQUEST']._serialized_end=31647 + _globals['_CREATECLIENT']._serialized_start=31650 + _globals['_CREATECLIENT']._serialized_end=34701 + _globals['_CREATECLIENTRESPONSE']._serialized_start=34704 + _globals['_CREATECLIENTRESPONSE']._serialized_end=34844 + _globals['_UPDATECLIENTREQUEST']._serialized_start=34847 + _globals['_UPDATECLIENTREQUEST']._serialized_end=35298 + _globals['_UPDATECLIENT']._serialized_start=35301 + _globals['_UPDATECLIENT']._serialized_end=38233 + _globals['_UPDATECLIENTRESPONSE']._serialized_start=38236 + _globals['_UPDATECLIENTRESPONSE']._serialized_end=38404 + _globals['_CREATECLIENTSECRETREQUEST']._serialized_start=38407 + _globals['_CREATECLIENTSECRETREQUEST']._serialized_end=38581 + _globals['_CREATECLIENTSECRETRESPONSE']._serialized_start=38584 + _globals['_CREATECLIENTSECRETRESPONSE']._serialized_end=39013 + _globals['_UPDATECLIENTSECRETREQUEST']._serialized_start=39016 + _globals['_UPDATECLIENTSECRETREQUEST']._serialized_end=39659 + _globals['_UPDATECLIENTSECRET']._serialized_start=39662 + _globals['_UPDATECLIENTSECRET']._serialized_end=39898 + _globals['_UPDATECLIENTSECRETRESPONSE']._serialized_start=39901 + _globals['_UPDATECLIENTSECRETRESPONSE']._serialized_end=40132 + _globals['_DELETECLIENTREQUEST']._serialized_start=40135 + _globals['_DELETECLIENTREQUEST']._serialized_end=40268 + _globals['_DELETECLIENTSECRETREQUEST']._serialized_start=40271 + _globals['_DELETECLIENTSECRETREQUEST']._serialized_end=40578 + _globals['_CLIENT']._serialized_start=40581 + _globals['_CLIENT']._serialized_end=44461 + _globals['_CLIENTSECRET']._serialized_start=44464 + _globals['_CLIENTSECRET']._serialized_end=46961 + _globals['_SCOPE']._serialized_start=46964 + _globals['_SCOPE']._serialized_end=47276 + _globals['_CREATESCOPE']._serialized_start=47278 + _globals['_CREATESCOPE']._serialized_end=47391 + _globals['_CREATESCOPEREQUEST']._serialized_start=47394 + _globals['_CREATESCOPEREQUEST']._serialized_end=47637 + _globals['_CREATESCOPERESPONSE']._serialized_start=47639 + _globals['_CREATESCOPERESPONSE']._serialized_end=47710 + _globals['_LISTSCOPESREQUEST']._serialized_start=47713 + _globals['_LISTSCOPESREQUEST']._serialized_end=47883 + _globals['_LISTSCOPESRESPONSE']._serialized_start=47885 + _globals['_LISTSCOPESRESPONSE']._serialized_end=47957 + _globals['_UPDATESCOPEREQUEST']._serialized_start=47959 + _globals['_UPDATESCOPEREQUEST']._serialized_end=48070 + _globals['_UPDATESCOPE']._serialized_start=48072 + _globals['_UPDATESCOPE']._serialized_end=48183 + _globals['_UPDATESCOPERESPONSE']._serialized_start=48185 + _globals['_UPDATESCOPERESPONSE']._serialized_end=48256 + _globals['_DELETESCOPEREQUEST']._serialized_start=48258 + _globals['_DELETESCOPEREQUEST']._serialized_end=48307 + _globals['_GETCONSENTDETAILSRESPONSE']._serialized_start=48310 + _globals['_GETCONSENTDETAILSRESPONSE']._serialized_end=49043 + _globals['_CONSENTORGANIZATION']._serialized_start=49046 + _globals['_CONSENTORGANIZATION']._serialized_end=49421 + _globals['_CONSENTCLIENT']._serialized_start=49424 + _globals['_CONSENTCLIENT']._serialized_end=50122 + _globals['_CONSENTSCOPE']._serialized_start=50124 + _globals['_CONSENTSCOPE']._serialized_end=50216 + _globals['_USER']._serialized_start=50218 + _globals['_USER']._serialized_end=50332 + _globals['_REVOKEUSERCONSENTREQUEST']._serialized_start=50335 + _globals['_REVOKEUSERCONSENTREQUEST']._serialized_end=50625 + _globals['_REVOKEUSERCONSENTRESPONSE']._serialized_start=50627 + _globals['_REVOKEUSERCONSENTRESPONSE']._serialized_end=50654 + _globals['_ENSURERESOURCECONNECTIONREQUEST']._serialized_start=50657 + _globals['_ENSURERESOURCECONNECTIONREQUEST']._serialized_end=50816 + _globals['_ENSURERESOURCECONNECTIONRESPONSE']._serialized_start=50819 + _globals['_ENSURERESOURCECONNECTIONRESPONSE']._serialized_end=51031 + _globals['_RESOURCECONNECTION']._serialized_start=51034 + _globals['_RESOURCECONNECTION']._serialized_end=51978 + _globals['_RESOURCECUSTOMCONNECTIONSETTINGS']._serialized_start=51981 + _globals['_RESOURCECUSTOMCONNECTIONSETTINGS']._serialized_end=52201 + _globals['_CLIENTSERVICE']._serialized_start=52413 + _globals['_CLIENTSERVICE']._serialized_end=70144 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/clients/clients_pb2.pyi b/scalekit/v1/clients/clients_pb2.pyi index 314b43f..f3f99f8 100644 --- a/scalekit/v1/clients/clients_pb2.pyi +++ b/scalekit/v1/clients/clients_pb2.pyi @@ -716,9 +716,7 @@ class UpdateClientRequest(_message.Message): def __init__(self, client_id: _Optional[str] = ..., client: _Optional[_Union[UpdateClient, _Mapping]] = ..., mask: _Optional[_Union[_field_mask_pb2.FieldMask, _Mapping]] = ...) -> None: ... class UpdateClient(_message.Message): - __slots__ = ("redirect_uris", "default_redirect_uri", "back_channel_logout_uris", "post_logout_redirect_uris", "initiate_login_uri", "post_login_uris", "name", "access_token_expiry", "scopes", "custom_claims", "disallow_scalekit_api_access", "grant_types", "enforce_pkce") - REDIRECT_URIS_FIELD_NUMBER: _ClassVar[int] - DEFAULT_REDIRECT_URI_FIELD_NUMBER: _ClassVar[int] + __slots__ = ("back_channel_logout_uris", "post_logout_redirect_uris", "initiate_login_uri", "post_login_uris", "name", "access_token_expiry", "scopes", "custom_claims", "disallow_scalekit_api_access", "grant_types", "enforce_pkce") BACK_CHANNEL_LOGOUT_URIS_FIELD_NUMBER: _ClassVar[int] POST_LOGOUT_REDIRECT_URIS_FIELD_NUMBER: _ClassVar[int] INITIATE_LOGIN_URI_FIELD_NUMBER: _ClassVar[int] @@ -730,8 +728,6 @@ class UpdateClient(_message.Message): DISALLOW_SCALEKIT_API_ACCESS_FIELD_NUMBER: _ClassVar[int] GRANT_TYPES_FIELD_NUMBER: _ClassVar[int] ENFORCE_PKCE_FIELD_NUMBER: _ClassVar[int] - redirect_uris: _containers.RepeatedScalarFieldContainer[str] - default_redirect_uri: str back_channel_logout_uris: _containers.RepeatedScalarFieldContainer[str] post_logout_redirect_uris: _containers.RepeatedScalarFieldContainer[str] initiate_login_uri: str @@ -743,7 +739,7 @@ class UpdateClient(_message.Message): disallow_scalekit_api_access: _wrappers_pb2.BoolValue grant_types: _containers.RepeatedScalarFieldContainer[str] enforce_pkce: _wrappers_pb2.BoolValue - def __init__(self, redirect_uris: _Optional[_Iterable[str]] = ..., default_redirect_uri: _Optional[str] = ..., back_channel_logout_uris: _Optional[_Iterable[str]] = ..., post_logout_redirect_uris: _Optional[_Iterable[str]] = ..., initiate_login_uri: _Optional[str] = ..., post_login_uris: _Optional[_Iterable[str]] = ..., name: _Optional[str] = ..., access_token_expiry: _Optional[int] = ..., scopes: _Optional[_Iterable[str]] = ..., custom_claims: _Optional[_Iterable[_Union[CustomClaim, _Mapping]]] = ..., disallow_scalekit_api_access: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., grant_types: _Optional[_Iterable[str]] = ..., enforce_pkce: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ...) -> None: ... + def __init__(self, back_channel_logout_uris: _Optional[_Iterable[str]] = ..., post_logout_redirect_uris: _Optional[_Iterable[str]] = ..., initiate_login_uri: _Optional[str] = ..., post_login_uris: _Optional[_Iterable[str]] = ..., name: _Optional[str] = ..., access_token_expiry: _Optional[int] = ..., scopes: _Optional[_Iterable[str]] = ..., custom_claims: _Optional[_Iterable[_Union[CustomClaim, _Mapping]]] = ..., disallow_scalekit_api_access: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., grant_types: _Optional[_Iterable[str]] = ..., enforce_pkce: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ...) -> None: ... class UpdateClientResponse(_message.Message): __slots__ = ("client",) @@ -804,13 +800,11 @@ class DeleteClientSecretRequest(_message.Message): def __init__(self, client_id: _Optional[str] = ..., secret_id: _Optional[str] = ...) -> None: ... class Client(_message.Message): - __slots__ = ("id", "keyId", "create_time", "update_time", "redirect_uris", "default_redirect_uri", "secrets", "post_logout_redirect_uris", "back_channel_logout_uris", "initiate_login_uri", "post_login_uris", "name", "access_token_expiry", "scopes", "custom_claims", "disallow_scalekit_api_access", "grant_types", "client_type", "enforce_pkce") + __slots__ = ("id", "keyId", "create_time", "update_time", "secrets", "post_logout_redirect_uris", "back_channel_logout_uris", "initiate_login_uri", "post_login_uris", "name", "access_token_expiry", "scopes", "custom_claims", "disallow_scalekit_api_access", "grant_types", "client_type", "enforce_pkce") ID_FIELD_NUMBER: _ClassVar[int] KEYID_FIELD_NUMBER: _ClassVar[int] CREATE_TIME_FIELD_NUMBER: _ClassVar[int] UPDATE_TIME_FIELD_NUMBER: _ClassVar[int] - REDIRECT_URIS_FIELD_NUMBER: _ClassVar[int] - DEFAULT_REDIRECT_URI_FIELD_NUMBER: _ClassVar[int] SECRETS_FIELD_NUMBER: _ClassVar[int] POST_LOGOUT_REDIRECT_URIS_FIELD_NUMBER: _ClassVar[int] BACK_CHANNEL_LOGOUT_URIS_FIELD_NUMBER: _ClassVar[int] @@ -828,8 +822,6 @@ class Client(_message.Message): keyId: str create_time: _timestamp_pb2.Timestamp update_time: _timestamp_pb2.Timestamp - redirect_uris: _containers.RepeatedScalarFieldContainer[str] - default_redirect_uri: str secrets: _containers.RepeatedCompositeFieldContainer[ClientSecret] post_logout_redirect_uris: _containers.RepeatedScalarFieldContainer[str] back_channel_logout_uris: _containers.RepeatedScalarFieldContainer[str] @@ -843,7 +835,7 @@ class Client(_message.Message): grant_types: _containers.RepeatedScalarFieldContainer[str] client_type: str enforce_pkce: bool - def __init__(self, id: _Optional[str] = ..., keyId: _Optional[str] = ..., create_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., update_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., redirect_uris: _Optional[_Iterable[str]] = ..., default_redirect_uri: _Optional[str] = ..., secrets: _Optional[_Iterable[_Union[ClientSecret, _Mapping]]] = ..., post_logout_redirect_uris: _Optional[_Iterable[str]] = ..., back_channel_logout_uris: _Optional[_Iterable[str]] = ..., initiate_login_uri: _Optional[str] = ..., post_login_uris: _Optional[_Iterable[str]] = ..., name: _Optional[str] = ..., access_token_expiry: _Optional[int] = ..., scopes: _Optional[_Iterable[str]] = ..., custom_claims: _Optional[_Iterable[_Union[CustomClaim, _Mapping]]] = ..., disallow_scalekit_api_access: bool = ..., grant_types: _Optional[_Iterable[str]] = ..., client_type: _Optional[str] = ..., enforce_pkce: bool = ...) -> None: ... + def __init__(self, id: _Optional[str] = ..., keyId: _Optional[str] = ..., create_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., update_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., secrets: _Optional[_Iterable[_Union[ClientSecret, _Mapping]]] = ..., post_logout_redirect_uris: _Optional[_Iterable[str]] = ..., back_channel_logout_uris: _Optional[_Iterable[str]] = ..., initiate_login_uri: _Optional[str] = ..., post_login_uris: _Optional[_Iterable[str]] = ..., name: _Optional[str] = ..., access_token_expiry: _Optional[int] = ..., scopes: _Optional[_Iterable[str]] = ..., custom_claims: _Optional[_Iterable[_Union[CustomClaim, _Mapping]]] = ..., disallow_scalekit_api_access: bool = ..., grant_types: _Optional[_Iterable[str]] = ..., client_type: _Optional[str] = ..., enforce_pkce: bool = ...) -> None: ... class ClientSecret(_message.Message): __slots__ = ("id", "create_time", "update_time", "secret_suffix", "created_by", "status", "expire_time", "last_used_time", "plain_secret") @@ -942,18 +934,28 @@ class DeleteScopeRequest(_message.Message): def __init__(self, id: _Optional[str] = ...) -> None: ... class GetConsentDetailsResponse(_message.Message): - __slots__ = ("resource", "user", "client", "scopes", "application") + __slots__ = ("resource", "user", "client", "scopes", "application", "organization") RESOURCE_FIELD_NUMBER: _ClassVar[int] USER_FIELD_NUMBER: _ClassVar[int] CLIENT_FIELD_NUMBER: _ClassVar[int] SCOPES_FIELD_NUMBER: _ClassVar[int] APPLICATION_FIELD_NUMBER: _ClassVar[int] + ORGANIZATION_FIELD_NUMBER: _ClassVar[int] resource: Resource user: User client: ConsentClient scopes: _containers.RepeatedCompositeFieldContainer[ConsentScope] application: Application - def __init__(self, resource: _Optional[_Union[Resource, _Mapping]] = ..., user: _Optional[_Union[User, _Mapping]] = ..., client: _Optional[_Union[ConsentClient, _Mapping]] = ..., scopes: _Optional[_Iterable[_Union[ConsentScope, _Mapping]]] = ..., application: _Optional[_Union[Application, _Mapping]] = ...) -> None: ... + organization: ConsentOrganization + def __init__(self, resource: _Optional[_Union[Resource, _Mapping]] = ..., user: _Optional[_Union[User, _Mapping]] = ..., client: _Optional[_Union[ConsentClient, _Mapping]] = ..., scopes: _Optional[_Iterable[_Union[ConsentScope, _Mapping]]] = ..., application: _Optional[_Union[Application, _Mapping]] = ..., organization: _Optional[_Union[ConsentOrganization, _Mapping]] = ...) -> None: ... + +class ConsentOrganization(_message.Message): + __slots__ = ("organization_name", "organization_meta_name") + ORGANIZATION_NAME_FIELD_NUMBER: _ClassVar[int] + ORGANIZATION_META_NAME_FIELD_NUMBER: _ClassVar[int] + organization_name: str + organization_meta_name: str + def __init__(self, organization_name: _Optional[str] = ..., organization_meta_name: _Optional[str] = ...) -> None: ... class ConsentClient(_message.Message): __slots__ = ("name", "privacy_uri", "tos_uri", "client_id", "metadata_uri", "logo_uri") diff --git a/scalekit/v1/connected_accounts/connected_accounts_pb2.py b/scalekit/v1/connected_accounts/connected_accounts_pb2.py index f4f95f9..d5b1d54 100644 --- a/scalekit/v1/connected_accounts/connected_accounts_pb2.py +++ b/scalekit/v1/connected_accounts/connected_accounts_pb2.py @@ -22,7 +22,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n7scalekit/v1/connected_accounts/connected_accounts.proto\x12\x1escalekit.v1.connected_accounts\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\x95\x0c\n\x1cListConnectedAccountsRequest\x12\xb1\x01\n\x0forganization_id\x18\x01 \x01(\tB\x82\x01\x92\x41v2]Filter by organization ID. Returns only connected accounts associated with this organization.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12\x91\x01\n\x07user_id\x18\x02 \x01(\tBs\x92\x41g2MFilter by user ID. Returns only connected accounts associated with this user.J\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12\xdb\x01\n\tconnector\x18\x03 \x01(\tB\xb7\x01\x92\x41\x98\x01\x32\x8b\x01\x46ilter by connector type. Connector identifier such as \'notion\', \'slack\', \'google\', etc. Alphanumeric with hyphens and underscores allowed.J\x08\"notion\"\xbaH\x18r\x16\x10\x00\x18\x32\x32\x10^[a-zA-Z0-9_-]*$H\x02R\tconnector\x88\x01\x01\x12\xdb\x01\n\nidentifier\x18\x04 \x01(\tB\xb5\x01\x92\x41\xa8\x01\x32\x91\x01\x46ilter by account identifier. The unique identifier for the connected account within the third-party service (e.g., email address, workspace ID).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12\x9d\x01\n\x08provider\x18\x05 \x01(\tB\x80\x01\x92\x41t2hFilter by OAuth provider. The authentication provider name such as \'google\', \'microsoft\', \'github\', etc.J\x08\"google\"\xbaH\x06r\x04\x10\x00\x18\x32R\x08provider\x12\x9b\x01\n\tpage_size\x18\x06 \x01(\rB~\x92\x41r2lMaximum number of connected accounts to return per page. Must be between 0 and 100. Default is typically 10.J\x02\x31\x30\xbaH\x06*\x04\x10\x64(\x00R\x08pageSize\x12\xcb\x01\n\npage_token\x18\x07 \x01(\tB\xab\x01\x92\x41\x9e\x01\x32\x83\x01Pagination token from a previous response. Use the next_page_token value from ListConnectedAccountsResponse to fetch the next page.J\x16\"eyJvZmZzZXQiOjEwfQ==\"\xbaH\x06r\x04\x10\x00\x18\x64R\tpageToken\x12\xa7\x01\n\x05query\x18\x08 \x01(\tB\x90\x01\x92\x41\x83\x01\x32qText search query to filter connected accounts by name, identifier, or other searchable fields. Case-insensitive.J\x0e\"john@example\"\xbaH\x06r\x04\x10\x00\x18\x64R\x05queryB\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifier\"\xbb\x06\n\x1dListConnectedAccountsResponse\x12\xdc\x01\n\x12\x63onnected_accounts\x18\x01 \x03(\x0b\x32\x37.scalekit.v1.connected_accounts.ConnectedAccountForListBt\x92\x41q2oList of connected accounts matching the filter criteria. Excludes sensitive authorization details for security.R\x11\x63onnectedAccounts\x12\x99\x01\n\ntotal_size\x18\x02 \x01(\rBz\x92\x41w2pTotal count of connected accounts matching the filter criteria across all pages. Use for calculating pagination.J\x03\x31\x30\x30R\ttotalSize\x12\xd2\x01\n\x0fnext_page_token\x18\x03 \x01(\tB\xa9\x01\x92\x41\x9c\x01\x32\x81\x01Pagination token for retrieving the next page. Empty if this is the last page. Pass this value to page_token in the next request.J\x16\"eyJvZmZzZXQiOjIwfQ==\"\xbaH\x06r\x04\x10\x00\x18 R\rnextPageToken\x12\xc9\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\xa0\x01\x92\x41\x93\x01\x32}Pagination token for retrieving the previous page. Empty if this is the first page. Pass this value to page_token to go back.J\x12\"eyJvZmZzZXQiOjB9\"\xbaH\x06r\x04\x10\x00\x18 R\rprevPageToken\"\xe0\x06\n\x1eSearchConnectedAccountsRequest\x12\xb9\x01\n\x05query\x18\x01 \x01(\tB\xa2\x01\x92\x41\x91\x01\x32\x86\x01Search term to match against connected account identifiers, providers, or connectors. Must be at least 3 characters. Case insensitive.J\x06google\xbaH\nr\x05\x10\x03\x18\xc8\x01\xc8\x01\x01R\x05query\x12\x85\x01\n\tpage_size\x18\x02 \x01(\rBh\x92\x41^2XMaximum number of connected accounts to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x03 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\x12i\n\rconnection_id\x18\x04 \x01(\tBD\x92\x41\x38\x32*Connection ID to filter connected accountsJ\n\"conn_123\"\xbaH\x06r\x04\x10\x00\x18 R\x0c\x63onnectionId:\xe6\x01\x92\x41\xe2\x01\n\x9c\x01*\x19Search Connected Accounts2\x7fSearch for connected accounts in your environment using a text query that matches against identifiers, providers, or connectors2Aquery=google&page_size=30&page_token=eyJwYWdlIjoyLCJsaW1pdCI6MzB9\"\x87\x05\n\x1fSearchConnectedAccountsResponse\x12\xcc\x01\n\x12\x63onnected_accounts\x18\x01 \x03(\x0b\x32\x37.scalekit.v1.connected_accounts.ConnectedAccountForListBd\x92\x41\x61\x32_List of connected accounts matching the search query. Excludes sensitive authorization details.R\x11\x63onnectedAccounts\x12l\n\ntotal_size\x18\x02 \x01(\rBM\x92\x41J2CTotal count of accounts matching the search query across all pages.J\x03\x31\x30\x30R\ttotalSize\x12\x91\x01\n\x0fnext_page_token\x18\x03 \x01(\tBi\x92\x41]2CPagination token for the next page. Empty if this is the last page.J\x16\"eyJvZmZzZXQiOjMwfQ==\"\xbaH\x06r\x04\x10\x00\x18 R\rnextPageToken\x12\x92\x01\n\x0fprev_page_token\x18\x04 \x01(\tBj\x92\x41^2HPagination token for the previous page. Empty if this is the first page.J\x12\"eyJvZmZzZXQiOjB9\"\xbaH\x06r\x04\x10\x00\x18 R\rprevPageToken\"\xa5\x07\n\x1d\x43reateConnectedAccountRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12\x61\n\tconnector\x18\x03 \x01(\tB>\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x18r\x16\x10\x00\x18\x32\x32\x10^[a-zA-Z0-9_-]*$H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12\xbd\x02\n\x11\x63onnected_account\x18\x05 \x01(\x0b\x32\x36.scalekit.v1.connected_accounts.CreateConnectedAccountB\xd7\x01\x92\x41\xcd\x01\x32*Details of the connected account to createJ\x9e\x01{ \"authorization_type\": \"OAUTH2\", \"authorization_details\": { \"oauth_token\": { \"access_token\": \"...\", \"refresh_token\": \"...\", \"scopes\": [\"read\", \"write\"] } } }\xbaH\x03\xc8\x01\x01R\x10\x63onnectedAccountB\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifier\"\x8d\x02\n\x1e\x43reateConnectedAccountResponse\x12\xea\x01\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountB\x8a\x01\x92\x41\x86\x01\x32\x83\x01The newly created connected account with its unique identifier, status, and complete authorization details including access tokens.R\x10\x63onnectedAccount\"\x83\x08\n\x1dUpdateConnectedAccountRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12O\n\tconnector\x18\x03 \x01(\tB,\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x06r\x04\x10\x00\x18\x32H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12g\n\x02id\x18\x06 \x01(\tBR\x92\x41\x41\x32\x35Unique identifier for the connected account to updateJ\x08\"ca_123\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_H\x04R\x02id\x88\x01\x01\x12\xbd\x02\n\x11\x63onnected_account\x18\x05 \x01(\x0b\x32\x36.scalekit.v1.connected_accounts.UpdateConnectedAccountB\xd7\x01\x92\x41\xcd\x01\x32*Details of the connected account to updateJ\x9e\x01{ \"authorization_type\": \"OAUTH2\", \"authorization_details\": { \"oauth_token\": { \"access_token\": \"...\", \"refresh_token\": \"...\", \"scopes\": [\"read\", \"write\"] } } }\xbaH\x03\xc8\x01\x01R\x10\x63onnectedAccountB\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifierB\x05\n\x03_id\"\xf7\x01\n\x1eUpdateConnectedAccountResponse\x12\xd4\x01\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountBu\x92\x41r2pThe updated connected account with refreshed credentials, new token expiry, and modified configuration settings.R\x10\x63onnectedAccount\"\xd5\x05\n\x1d\x44\x65leteConnectedAccountRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12\x61\n\tconnector\x18\x03 \x01(\tB>\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x18r\x16\x10\x00\x18\x32\x32\x10^[a-zA-Z0-9_-]*$H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12g\n\x02id\x18\x05 \x01(\tBR\x92\x41\x41\x32\x35Unique identifier for the connected account to deleteJ\x08\"ca_123\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_H\x04R\x02id\x88\x01\x01\x42\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifierB\x05\n\x03_id\" \n\x1e\x44\x65leteConnectedAccountResponse\"\xc2\x05\n&GetMagicLinkForConnectedAccountRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12O\n\tconnector\x18\x03 \x01(\tB,\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x06r\x04\x10\x00\x18\x32H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12]\n\x02id\x18\x05 \x01(\tBH\x92\x41\x37\x32+Unique identifier for the connected accountJ\x08\"ca_123\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_H\x04R\x02id\x88\x01\x01\x42\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifierB\x05\n\x03_id\"\x9c\x02\n\'GetMagicLinkForConnectedAccountResponse\x12r\n\x04link\x18\x01 \x01(\tB^\x92\x41[2%Authentication link for the connectorJ2\"https://notion.com/oauth/authorize?client_id=...\"R\x04link\x12}\n\x06\x65xpiry\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBI\x92\x41\x46\x32,Expiry timestamp for the authentication linkJ\x16\"2024-03-20T15:04:05Z\"R\x06\x65xpiry\"\xc2\x05\n&GetConnectedAccountByIdentifierRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12O\n\tconnector\x18\x03 \x01(\tB,\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x06r\x04\x10\x00\x18\x32H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12]\n\x02id\x18\x05 \x01(\tBH\x92\x41\x37\x32+Unique identifier for the connected accountJ\x08\"ca_123\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_H\x04R\x02id\x88\x01\x01\x42\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifierB\x05\n\x03_id\"\xbe\x02\n\'GetConnectedAccountByIdentifierResponse\x12\x92\x02\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountB\xb2\x01\x92\x41\xae\x01\x32\xab\x01The connected account with complete details including sensitive authorization credentials (access tokens, refresh tokens, scopes). Handle with appropriate access controls.R\x10\x63onnectedAccount\"\xbc\x13\n\x10\x43onnectedAccount\x12\xbc\x01\n\nidentifier\x18\x01 \x01(\tB\x9b\x01\x92\x41\x97\x01\x32\x80\x01The unique identifier for this account in the third-party service. Typically an email address, user ID, or workspace identifier.J\x12\"user@example.com\"R\nidentifier\x12\xaa\x01\n\x08provider\x18\x02 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32}OAuth provider name (e.g., \'google\', \'microsoft\', \'github\'). Identifies which authentication service manages this connection.J\x08\"google\"R\x08provider\x12\xbd\x01\n\x06status\x18\x03 \x01(\x0e\x32/.scalekit.v1.connected_accounts.ConnectorStatusBt\x92\x41q2oCurrent status of the connected account. Indicates if the account is active, expired, or pending authorization.R\x06status\x12\xe9\x01\n\x12\x61uthorization_type\x18\x04 \x01(\x0e\x32-.scalekit.v1.connected_accounts.ConnectorTypeB\x8a\x01\x92\x41\x86\x01\x32\x83\x01Type of authorization mechanism used. Specifies whether this connection uses OAuth, API keys, bearer tokens, or other auth methods.R\x11\x61uthorizationType\x12\x81\x02\n\x15\x61uthorization_details\x18\x05 \x01(\x0b\x32\x34.scalekit.v1.connected_accounts.AuthorizationDetailsB\x95\x01\x92\x41\x91\x01\x32\x8e\x01Sensitive authentication credentials including access tokens, refresh tokens, and scopes. Contains either OAuth tokens or static auth details.R\x14\x61uthorizationDetails\x12\xce\x01\n\x10token_expires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x87\x01\x92\x41\x83\x01\x32iExpiration timestamp for the access token. After this time, the token must be refreshed or re-authorized.J\x16\"2024-12-31T23:59:59Z\"R\x0etokenExpiresAt\x12\xc9\x01\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x8d\x01\x92\x41\x89\x01\x32oTimestamp when this connected account was last modified. Updated whenever credentials or configuration changes.J\x16\"2024-03-20T15:04:05Z\"R\tupdatedAt\x12\xae\x01\n\tconnector\x18\x08 \x01(\tB\x8f\x01\x92\x41\x8b\x01\x32\x7f\x43onnector identifier (e.g., \'notion\', \'slack\', \'salesforce\'). Indicates which third-party application this account connects to.J\x08\"notion\"R\tconnector\x12\xcd\x01\n\x0clast_used_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x8e\x01\x92\x41\x8a\x01\x32pTimestamp when this connected account was last used to make an API call. Useful for tracking active connections.J\x16\"2024-03-20T14:30:00Z\"R\nlastUsedAt\x12\x98\x01\n\x02id\x18\n \x01(\tB\x87\x01\x92\x41v2\\Unique Scalekit-generated identifier for this connected account. Always prefixed with \'ca_\'.J\x16\"ca_24834495392086178\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_R\x02id\x12\xc6\x01\n\rconnection_id\x18\x0b \x01(\tB\xa0\x01\x92\x41\x93\x01\x32wReference to the parent connection configuration. Links this account to a specific connector setup in your environment.J\x18\"conn_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x0c\x63onnectionId\x12\x89\x02\n\napi_config\x18\x0c \x01(\x0b\x32\x17.google.protobuf.StructB\xd0\x01\x92\x41\xcc\x01\x32xOptional JSON configuration for connector-specific API settings such as rate limits, custom endpoints, or feature flags.JP{\"rate_limit\": 1000, \"timeout\": 30, \"base_url\": \"https://api.custom-domain.com\"}R\tapiConfig\"\x8a\x06\n\x16\x43reateConnectedAccount\x12\x9e\x03\n\x15\x61uthorization_details\x18\x05 \x01(\x0b\x32\x34.scalekit.v1.connected_accounts.AuthorizationDetailsB\xb2\x02\x92\x41\xa8\x02\x32\xb7\x01Required authentication credentials for the connected account. Must include either OAuth tokens (access_token, refresh_token, scopes) or static auth details (API keys, bearer tokens).Jl{\"oauth_token\": {\"access_token\": \"ya29.a0...\", \"refresh_token\": \"1//0g...\", \"scopes\": [\"email\", \"profile\"]}}\xbaH\x03\xc8\x01\x01R\x14\x61uthorizationDetails\x12\x98\x02\n\napi_config\x18\x0b \x01(\x0b\x32\x17.google.protobuf.StructB\xdf\x01\x92\x41\xdb\x01\x32\x86\x01Optional JSON configuration for connector-specific API settings such as rate limits, custom API endpoints, timeouts, or feature flags.JP{\"rate_limit\": 1000, \"timeout\": 30, \"base_url\": \"https://api.custom-domain.com\"}R\tapiConfigJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08J\x04\x08\x08\x10\tJ\x04\x08\t\x10\nJ\x04\x08\n\x10\x0b\"\xbc\x05\n\x16UpdateConnectedAccount\x12\x8d\x03\n\x15\x61uthorization_details\x18\x05 \x01(\x0b\x32\x34.scalekit.v1.connected_accounts.AuthorizationDetailsB\xa1\x02\x92\x41\x9d\x02\x32\x99\x01Updated authentication credentials. Provide new OAuth tokens (e.g., after refresh) or updated static auth details. Only included fields will be modified.J\x7f{\"oauth_token\": {\"access_token\": \"ya29.new_token...\", \"refresh_token\": \"1//0g...\", \"scopes\": [\"email\", \"profile\", \"calendar\"]}}R\x14\x61uthorizationDetails\x12\xe1\x01\n\napi_config\x18\n \x01(\x0b\x32\x17.google.protobuf.StructB\xa8\x01\x92\x41\xa4\x01\x32}Updated JSON configuration for API-specific settings. Merges with existing configuration - only provided fields are modified.J#{\"rate_limit\": 2000, \"timeout\": 60}R\tapiConfigJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08J\x04\x08\x08\x10\tJ\x04\x08\t\x10\n\"\xe0\x08\n\x17\x43onnectedAccountForList\x12{\n\nidentifier\x18\x01 \x01(\tB[\x92\x41X2BThe unique identifier for this account in the third-party service.J\x12\"user@example.com\"R\nidentifier\x12]\n\x08provider\x18\x02 \x01(\tBA\x92\x41>22OAuth provider name (e.g., \'google\', \'microsoft\').J\x08\"google\"R\x08provider\x12h\n\x06status\x18\x03 \x01(\x0e\x32/.scalekit.v1.connected_accounts.ConnectorStatusB\x1f\x92\x41\x1c\x32\x1a\x43urrent connection status.R\x06status\x12\x80\x01\n\x12\x61uthorization_type\x18\x04 \x01(\x0e\x32-.scalekit.v1.connected_accounts.ConnectorTypeB\"\x92\x41\x1f\x32\x1d\x41uthorization mechanism type.R\x11\x61uthorizationType\x12~\n\x10token_expires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB8\x92\x41\x35\x32\x1bToken expiration timestamp.J\x16\"2024-12-31T23:59:59Z\"R\x0etokenExpiresAt\x12t\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB9\x92\x41\x36\x32\x1cLast modification timestamp.J\x16\"2024-03-20T15:04:05Z\"R\tupdatedAt\x12\x42\n\tconnector\x18\x08 \x01(\tB$\x92\x41!2\x15\x43onnector identifier.J\x08\"notion\"R\tconnector\x12p\n\x0clast_used_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampB2\x92\x41/2\x15Last usage timestamp.J\x16\"2024-03-20T14:30:00Z\"R\nlastUsedAt\x12Q\n\x02id\x18\n \x01(\tBA\x92\x41>2$Unique connected account identifier.J\x16\"ca_24834495392086178\"R\x02id\x12w\n\rconnection_id\x18\x0b \x01(\tBR\x92\x41\x46\x32*Parent connection configuration reference.J\x18\"conn_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x0c\x63onnectionIdJ\x04\x08\x05\x10\x06\"\xbf\x01\n\x14\x41uthorizationDetails\x12M\n\x0boauth_token\x18\x01 \x01(\x0b\x32*.scalekit.v1.connected_accounts.OauthTokenH\x00R\noauthToken\x12M\n\x0bstatic_auth\x18\x02 \x01(\x0b\x32*.scalekit.v1.connected_accounts.StaticAuthH\x00R\nstaticAuthB\t\n\x07\x64\x65tails\"\xdc\x05\n\nOauthToken\x12\xa0\x01\n\x0c\x61\x63\x63\x65ss_token\x18\x01 \x01(\tB}\x92\x41z2bOAuth access token for API requests. Typically short-lived and must be refreshed after expiration.J\x14\"ya29.a0AfH6SMBx...\"R\x0b\x61\x63\x63\x65ssToken\x12\xae\x01\n\rrefresh_token\x18\x02 \x01(\tB\x88\x01\x92\x41\x84\x01\x32nOAuth refresh token for obtaining new access tokens. Long-lived and used to maintain persistent authorization.J\x12\"1//0gHJxZ-Lb2...\"R\x0crefreshToken\x12\xe1\x01\n\x06scopes\x18\x03 \x03(\tB\xc8\x01\x92\x41\xc4\x01\x32\\List of granted OAuth scopes defining the permissions and access levels for this connection.Jd[\"https://www.googleapis.com/auth/drive.readonly\", \"https://www.googleapis.com/auth/userinfo.email\"]R\x06scopes\x12\x95\x01\n\x06\x64omain\x18\x04 \x01(\tB}\x92\x41z2iAssociated domain for workspace or organization-scoped OAuth connections (e.g., Google Workspace domain).J\r\"example.com\"R\x06\x64omain\"\xf4\x01\n\nStaticAuth\x12\xe5\x01\n\x07\x64\x65tails\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\xb1\x01\x92\x41\xad\x01\x32zFlexible JSON structure containing static credentials. Format varies by connector type (API key, username/password, etc.).J/{\"api_key\": \"sk_live_...\", \"api_secret\": \"...\"}R\x07\x64\x65tails*_\n\x0f\x43onnectorStatus\x12!\n\x1d\x43ONNECTION_STATUS_UNSPECIFIED\x10\x00\x12\n\n\x06\x41\x43TIVE\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x12\x10\n\x0cPENDING_AUTH\x10\x03*\x81\x01\n\rConnectorType\x12\x1f\n\x1b\x43ONNECTION_TYPE_UNSPECIFIED\x10\x00\x12\t\n\x05OAUTH\x10\x01\x12\x0b\n\x07\x41PI_KEY\x10\x02\x12\x0e\n\nBASIC_AUTH\x10\x03\x12\x10\n\x0c\x42\x45\x41RER_TOKEN\x10\x04\x12\n\n\x06\x43USTOM\x10\x05\x12\t\n\x05\x42\x41SIC\x10\x06\x32\xba\x34\n\x17\x43onnectedAccountService\x12\xde\x06\n\x15ListConnectedAccounts\x12<.scalekit.v1.connected_accounts.ListConnectedAccountsRequest\x1a=.scalekit.v1.connected_accounts.ListConnectedAccountsResponse\"\xc7\x05\x92\x41\x9b\x05\n\x12\x43onnected Accounts\x12\x17List connected accounts\x1a\x9a\x02Retrieves a paginated list of connected accounts for third-party integrations. Filter by organization, user, connector type, provider, or identifier. Returns OAuth tokens, API keys, and connection status for each account. Use pagination tokens to navigate through large result sets.J\xaf\x01\n\x03\x32\x30\x30\x12\xa7\x01\nbSuccessfully retrieved the list of connected accounts with their authentication details and status\x12\x41\n?\x1a=.scalekit.v1.connected_accounts.ListConnectedAccountsResponseJY\n\x03\x34\x30\x30\x12R\nPInvalid request - occurs when query parameters are malformed or validation failsJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/connected_accounts\x12\xe0\x06\n\x17SearchConnectedAccounts\x12>.scalekit.v1.connected_accounts.SearchConnectedAccountsRequest\x1a?.scalekit.v1.connected_accounts.SearchConnectedAccountsResponse\"\xc3\x05\x92\x41\x90\x05\n\x12\x43onnected Accounts\x12\x19Search connected accounts\x1a\x99\x02Search for connected accounts in your environment using a text query that matches against identifiers, providers, or connectors. The search performs case-insensitive matching across account details. Returns paginated results with account status and authentication type information.J\x99\x01\n\x03\x32\x30\x30\x12\x91\x01\nJSuccessfully retrieved matching connected accounts with pagination support\x12\x43\nA\x1a?.scalekit.v1.connected_accounts.SearchConnectedAccountsResponseJc\n\x03\x34\x30\x30\x12\\\nZInvalid request - query parameter is too short (minimum 3 characters) or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02#\x12!/api/v1/connected_accounts:search\x12\xfe\x07\n\x16\x43reateConnectedAccount\x12=.scalekit.v1.connected_accounts.CreateConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.CreateConnectedAccountResponse\"\xe4\x06\x92\x41\xb5\x06\n\x12\x43onnected Accounts\x12\x1a\x43reate a connected account\x1a\xdf\x02\x43reates a new connected account with OAuth tokens or API credentials for third-party service integration. Supply authorization details including access tokens, refresh tokens, scopes, and optional API configuration. The account can be scoped to an organization or user. Returns the created account with its unique identifier and authentication status.J\xa4\x01\n\x03\x32\x30\x31\x12\x9c\x01\nVConnected account created successfully with authentication credentials stored securely\x12\x42\n@\x1a>.scalekit.v1.connected_accounts.CreateConnectedAccountResponseJg\n\x03\x34\x30\x30\x12`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJM\n\x03\x34\x30\x39\x12\x46\nDConflict - connected account with the same identifier already exists\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1f\"\x1a/api/v1/connected_accounts:\x01*\x12\xef\x07\n\x16UpdateConnectedAccount\x12=.scalekit.v1.connected_accounts.UpdateConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.UpdateConnectedAccountResponse\"\xd5\x06\x92\x41\xa6\x06\n\x12\x43onnected Accounts\x12$Update connected account credentials\x1a\xd2\x02Updates authentication credentials and configuration for an existing connected account. Modify OAuth tokens, refresh tokens, access scopes, or API configuration settings. Specify the account by ID, or by combination of organization/user, connector, and identifier. Returns the updated account with new token expiry and status information.J\x9a\x01\n\x03\x32\x30\x30\x12\x92\x01\nLConnected account updated successfully with new credentials or configuration\x12\x42\n@\x1a>.scalekit.v1.connected_accounts.UpdateConnectedAccountResponseJg\n\x03\x34\x30\x30\x12`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJK\n\x03\x34\x30\x34\x12\x44\nBConnected account not found - the specified account does not exist\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1f\x1a\x1a/api/v1/connected_accounts:\x01*\x12\xc6\x06\n\x16\x44\x65leteConnectedAccount\x12=.scalekit.v1.connected_accounts.DeleteConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.DeleteConnectedAccountResponse\"\xac\x05\x92\x41\xf6\x04\n\x12\x43onnected Accounts\x12\x1a\x44\x65lete a connected account\x1a\x9f\x02Permanently removes a connected account and revokes all associated authentication credentials. Identify the account by ID, or by combination of organization/user, connector, and identifier. This action cannot be undone. All OAuth tokens and API keys for this account will be invalidated.JK\n\x03\x32\x30\x30\x12\x44\nBConnected account deleted successfully and all credentials revokedJD\n\x03\x34\x30\x30\x12=\n;Invalid request - malformed parameters or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJK\n\x03\x34\x30\x34\x12\x44\nBConnected account not found - the specified account does not exist\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02&\"!/api/v1/connected_accounts:delete:\x01*\x12\xff\x06\n\x1fGetMagicLinkForConnectedAccount\x12\x46.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountRequest\x1aG.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountResponse\"\xca\x05\x92\x41\x90\x05\n\x12\x43onnected Accounts\x12\"Generate authentication magic link\x1a\xa2\x02\x43reates a time-limited magic link for connecting or re-authorizing a third-party account. The link directs users to the OAuth authorization flow for the specified connector. Returns the generated link URL and expiration timestamp. Links typically expire after a short duration for security.J\x9f\x01\n\x03\x32\x30\x30\x12\x97\x01\nHMagic link generated successfully with authorization URL and expiry time\x12K\nI\x1aG.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountResponseJK\n\x03\x34\x30\x30\x12\x44\nBInvalid request - missing required parameters or invalid connectorJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02*\"%/api/v1/connected_accounts/magic_link:\x01*\x12\xb6\x07\n\x17GetConnectedAccountAuth\x12\x46.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierRequest\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponse\"\x89\x06\x92\x41\xd8\x05\n\x12\x43onnected Accounts\x12\x1dGet connected account details\x1a\xab\x02Retrieves complete authentication details for a connected account including OAuth tokens, refresh tokens, scopes, and API configuration. Query by account ID or by combination of organization/user, connector, and identifier. Returns sensitive credential information - use appropriate access controls.J\xa0\x01\n\x03\x32\x30\x30\x12\x98\x01\nISuccessfully retrieved connected account with full authentication details\x12K\nI\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponseJ<\n\x03\x34\x30\x30\x12\x35\n3Invalid request - missing required query parametersJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJP\n\x03\x34\x30\x34\x12I\nGConnected account not found - no account matches the specified criteria\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02!\x12\x1f/api/v1/connected_accounts/auth\x1a\xe3\x01\x92\x41\xdf\x01\n\x12\x43onnected Accounts\x12\xc8\x01Manage connected accounts for third-party integrations and OAuth connections. Connected accounts represent authenticated access to external services like Google, Notion, Slack, and other applications.B\xa4\x02Z22OAuth provider name (e.g., \'google\', \'microsoft\').J\x08\"google\"R\x08provider\x12h\n\x06status\x18\x03 \x01(\x0e\x32/.scalekit.v1.connected_accounts.ConnectorStatusB\x1f\x92\x41\x1c\x32\x1a\x43urrent connection status.R\x06status\x12\x80\x01\n\x12\x61uthorization_type\x18\x04 \x01(\x0e\x32-.scalekit.v1.connected_accounts.ConnectorTypeB\"\x92\x41\x1f\x32\x1d\x41uthorization mechanism type.R\x11\x61uthorizationType\x12~\n\x10token_expires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB8\x92\x41\x35\x32\x1bToken expiration timestamp.J\x16\"2024-12-31T23:59:59Z\"R\x0etokenExpiresAt\x12t\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB9\x92\x41\x36\x32\x1cLast modification timestamp.J\x16\"2024-03-20T15:04:05Z\"R\tupdatedAt\x12\x42\n\tconnector\x18\x08 \x01(\tB$\x92\x41!2\x15\x43onnector identifier.J\x08\"notion\"R\tconnector\x12p\n\x0clast_used_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampB2\x92\x41/2\x15Last usage timestamp.J\x16\"2024-03-20T14:30:00Z\"R\nlastUsedAt\x12Q\n\x02id\x18\n \x01(\tBA\x92\x41>2$Unique connected account identifier.J\x16\"ca_24834495392086178\"R\x02id\x12w\n\rconnection_id\x18\x0b \x01(\tBR\x92\x41\x46\x32*Parent connection configuration reference.J\x18\"conn_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x0c\x63onnectionIdJ\x04\x08\x05\x10\x06\"\xbf\x01\n\x14\x41uthorizationDetails\x12M\n\x0boauth_token\x18\x01 \x01(\x0b\x32*.scalekit.v1.connected_accounts.OauthTokenH\x00R\noauthToken\x12M\n\x0bstatic_auth\x18\x02 \x01(\x0b\x32*.scalekit.v1.connected_accounts.StaticAuthH\x00R\nstaticAuthB\t\n\x07\x64\x65tails\"\xdc\x05\n\nOauthToken\x12\xa0\x01\n\x0c\x61\x63\x63\x65ss_token\x18\x01 \x01(\tB}\x92\x41z2bOAuth access token for API requests. Typically short-lived and must be refreshed after expiration.J\x14\"ya29.a0AfH6SMBx...\"R\x0b\x61\x63\x63\x65ssToken\x12\xae\x01\n\rrefresh_token\x18\x02 \x01(\tB\x88\x01\x92\x41\x84\x01\x32nOAuth refresh token for obtaining new access tokens. Long-lived and used to maintain persistent authorization.J\x12\"1//0gHJxZ-Lb2...\"R\x0crefreshToken\x12\xe1\x01\n\x06scopes\x18\x03 \x03(\tB\xc8\x01\x92\x41\xc4\x01\x32\\List of granted OAuth scopes defining the permissions and access levels for this connection.Jd[\"https://www.googleapis.com/auth/drive.readonly\", \"https://www.googleapis.com/auth/userinfo.email\"]R\x06scopes\x12\x95\x01\n\x06\x64omain\x18\x04 \x01(\tB}\x92\x41z2iAssociated domain for workspace or organization-scoped OAuth connections (e.g., Google Workspace domain).J\r\"example.com\"R\x06\x64omain\"\xf4\x01\n\nStaticAuth\x12\xe5\x01\n\x07\x64\x65tails\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\xb1\x01\x92\x41\xad\x01\x32zFlexible JSON structure containing static credentials. Format varies by connector type (API key, username/password, etc.).J/{\"api_key\": \"sk_live_...\", \"api_secret\": \"...\"}R\x07\x64\x65tails\"\x83\x02\n\x1aGetConnectedAccountRequest\x12\xe4\x01\n\x02id\x18\x01 \x01(\tB\xd3\x01\x92\x41\xc6\x01\x32\xab\x01Unique identifier for the connected account. Always prefixed with \'ca_\'. If omitted (via the /this path), the connected account is resolved from the current token context.J\x16\"ca_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x02id\"\xc5\x01\n\x1bGetConnectedAccountResponse\x12\xa5\x01\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountBF\x92\x41\x43\x32\x41The connected account with its details and authentication status.R\x10\x63onnectedAccount\"\xb2\x01\n!DisconnectConnectedAccountRequest\x12\x8c\x01\n\x02id\x18\x01 \x01(\tB|\x92\x41p2VUnique identifier for the connected account to disconnect. Always prefixed with \'ca_\'.J\x16\"ca_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x02id\"\xc6\x01\n\"DisconnectConnectedAccountResponse\x12\x9f\x01\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountB@\x92\x41=2;The connected account with its updated DISCONNECTED status.R\x10\x63onnectedAccount*\x8b\x01\n\x0f\x43onnectorStatus\x12!\n\x1d\x43ONNECTION_STATUS_UNSPECIFIED\x10\x00\x12\n\n\x06\x41\x43TIVE\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x12\x10\n\x0cPENDING_AUTH\x10\x03\x12\x18\n\x14PENDING_VERIFICATION\x10\x04\x12\x10\n\x0c\x44ISCONNECTED\x10\x05*\xa3\x01\n\rConnectorType\x12\x1f\n\x1b\x43ONNECTION_TYPE_UNSPECIFIED\x10\x00\x12\t\n\x05OAUTH\x10\x01\x12\x0b\n\x07\x41PI_KEY\x10\x02\x12\x0e\n\nBASIC_AUTH\x10\x03\x12\x10\n\x0c\x42\x45\x41RER_TOKEN\x10\x04\x12\n\n\x06\x43USTOM\x10\x05\x12\t\n\x05\x42\x41SIC\x10\x06\x12\r\n\tOAUTH_M2M\x10\x07\x12\x11\n\rTRELLO_OAUTH1\x10\x08\x32\xf8N\n\x17\x43onnectedAccountService\x12\xde\x06\n\x15ListConnectedAccounts\x12<.scalekit.v1.connected_accounts.ListConnectedAccountsRequest\x1a=.scalekit.v1.connected_accounts.ListConnectedAccountsResponse\"\xc7\x05\x92\x41\x9b\x05\n\x12\x43onnected Accounts\x12\x17List connected accounts\x1a\x9a\x02Retrieves a paginated list of connected accounts for third-party integrations. Filter by organization, user, connector type, provider, or identifier. Returns OAuth tokens, API keys, and connection status for each account. Use pagination tokens to navigate through large result sets.J\xaf\x01\n\x03\x32\x30\x30\x12\xa7\x01\nbSuccessfully retrieved the list of connected accounts with their authentication details and status\x12\x41\n?\x1a=.scalekit.v1.connected_accounts.ListConnectedAccountsResponseJY\n\x03\x34\x30\x30\x12R\nPInvalid request - occurs when query parameters are malformed or validation failsJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/connected_accounts\x12\xe0\x06\n\x17SearchConnectedAccounts\x12>.scalekit.v1.connected_accounts.SearchConnectedAccountsRequest\x1a?.scalekit.v1.connected_accounts.SearchConnectedAccountsResponse\"\xc3\x05\x92\x41\x90\x05\n\x12\x43onnected Accounts\x12\x19Search connected accounts\x1a\x99\x02Search for connected accounts in your environment using a text query that matches against identifiers, providers, or connectors. The search performs case-insensitive matching across account details. Returns paginated results with account status and authentication type information.J\x99\x01\n\x03\x32\x30\x30\x12\x91\x01\nJSuccessfully retrieved matching connected accounts with pagination support\x12\x43\nA\x1a?.scalekit.v1.connected_accounts.SearchConnectedAccountsResponseJc\n\x03\x34\x30\x30\x12\\\nZInvalid request - query parameter is too short (minimum 3 characters) or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02#\x12!/api/v1/connected_accounts:search\x12\xfe\x07\n\x16\x43reateConnectedAccount\x12=.scalekit.v1.connected_accounts.CreateConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.CreateConnectedAccountResponse\"\xe4\x06\x92\x41\xb5\x06\n\x12\x43onnected Accounts\x12\x1a\x43reate a connected account\x1a\xdf\x02\x43reates a new connected account with OAuth tokens or API credentials for third-party service integration. Supply authorization details including access tokens, refresh tokens, scopes, and optional API configuration. The account can be scoped to an organization or user. Returns the created account with its unique identifier and authentication status.J\xa4\x01\n\x03\x32\x30\x31\x12\x9c\x01\nVConnected account created successfully with authentication credentials stored securely\x12\x42\n@\x1a>.scalekit.v1.connected_accounts.CreateConnectedAccountResponseJg\n\x03\x34\x30\x30\x12`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJM\n\x03\x34\x30\x39\x12\x46\nDConflict - connected account with the same identifier already exists\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1f\"\x1a/api/v1/connected_accounts:\x01*\x12\xf0\x07\n\x16UpdateConnectedAccount\x12=.scalekit.v1.connected_accounts.UpdateConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.UpdateConnectedAccountResponse\"\xd6\x06\x92\x41\xa6\x06\n\x12\x43onnected Accounts\x12$Update connected account credentials\x1a\xd2\x02Updates authentication credentials and configuration for an existing connected account. Modify OAuth tokens, refresh tokens, access scopes, or API configuration settings. Specify the account by ID, or by combination of organization/user, connector, and identifier. Returns the updated account with new token expiry and status information.J\x9a\x01\n\x03\x32\x30\x30\x12\x92\x01\nLConnected account updated successfully with new credentials or configuration\x12\x42\n@\x1a>.scalekit.v1.connected_accounts.UpdateConnectedAccountResponseJg\n\x03\x34\x30\x30\x12`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJK\n\x03\x34\x30\x34\x12\x44\nBConnected account not found - the specified account does not exist\x82\xb5\x18\x03\x18\xc4\x01\x82\xd3\xe4\x93\x02\x1f\x1a\x1a/api/v1/connected_accounts:\x01*\x12\xc6\x06\n\x16\x44\x65leteConnectedAccount\x12=.scalekit.v1.connected_accounts.DeleteConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.DeleteConnectedAccountResponse\"\xac\x05\x92\x41\xf6\x04\n\x12\x43onnected Accounts\x12\x1a\x44\x65lete a connected account\x1a\x9f\x02Permanently removes a connected account and revokes all associated authentication credentials. Identify the account by ID, or by combination of organization/user, connector, and identifier. This action cannot be undone. All OAuth tokens and API keys for this account will be invalidated.JK\n\x03\x32\x30\x30\x12\x44\nBConnected account deleted successfully and all credentials revokedJD\n\x03\x34\x30\x30\x12=\n;Invalid request - malformed parameters or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJK\n\x03\x34\x30\x34\x12\x44\nBConnected account not found - the specified account does not exist\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02&\"!/api/v1/connected_accounts:delete:\x01*\x12\xff\x06\n\x1fGetMagicLinkForConnectedAccount\x12\x46.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountRequest\x1aG.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountResponse\"\xca\x05\x92\x41\x90\x05\n\x12\x43onnected Accounts\x12\"Generate authentication magic link\x1a\xa2\x02\x43reates a time-limited magic link for connecting or re-authorizing a third-party account. The link directs users to the OAuth authorization flow for the specified connector. Returns the generated link URL and expiration timestamp. Links typically expire after a short duration for security.J\x9f\x01\n\x03\x32\x30\x30\x12\x97\x01\nHMagic link generated successfully with authorization URL and expiry time\x12K\nI\x1aG.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountResponseJK\n\x03\x34\x30\x30\x12\x44\nBInvalid request - missing required parameters or invalid connectorJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02*\"%/api/v1/connected_accounts/magic_link:\x01*\x12\xf6\x05\n\x13GetConnectedAccount\x12:.scalekit.v1.connected_accounts.GetConnectedAccountRequest\x1a;.scalekit.v1.connected_accounts.GetConnectedAccountResponse\"\xe5\x04\x92\x41\x90\x04\n\x12\x43onnected Accounts\x12\x17Get a connected account\x1a\xb8\x01Retrieves a connected account by its unique ID. Use the path \'/this\' (e.g. /api/v1/connected_accounts/this) to retrieve the connected account associated with the current token context.Jv\n\x03\x32\x30\x30\x12o\n,Successfully retrieved the connected account\x12?\n=\x1a;.scalekit.v1.connected_accounts.GetConnectedAccountResponseJD\n\x03\x34\x30\x30\x12=\n;Invalid request - missing or malformed connected account IDJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJ$\n\x03\x34\x30\x34\x12\x1d\n\x1b\x43onnected account not found\x82\xb5\x18\x03\x18\xc4\x01\x82\xd3\xe4\x93\x02\x44\x12\x1f/api/v1/connected_accounts/thisZ!\x12\x1f/api/v1/connected_accounts/{id}\x12\x86\x06\n\x1a\x44isconnectConnectedAccount\x12\x41.scalekit.v1.connected_accounts.DisconnectConnectedAccountRequest\x1a\x42.scalekit.v1.connected_accounts.DisconnectConnectedAccountResponse\"\xe0\x04\x92\x41\xf2\x03\n\x12\x43onnected Accounts\x12\x1e\x44isconnect a connected account\x1a\x88\x01\x44isconnects a connected account by setting its status to DISCONNECTED. The account record is retained but is marked as no longer active.J\x80\x01\n\x03\x32\x30\x30\x12y\n/Successfully disconnected the connected account\x12\x46\nD\x1a\x42.scalekit.v1.connected_accounts.DisconnectConnectedAccountResponseJD\n\x03\x34\x30\x30\x12=\n;Invalid request - missing or malformed connected account IDJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJ$\n\x03\x34\x30\x34\x12\x1d\n\x1b\x43onnected account not found\x82\xb5\x18\x03\x18\xc4\x01\x82\xd3\xe4\x93\x02]\"*/api/v1/connected_accounts/{id}:disconnect:\x01*Z,\"\'/api/v1/connected_accounts/-:disconnect:\x01*\x12\xb6\x07\n\x17GetConnectedAccountAuth\x12\x46.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierRequest\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponse\"\x89\x06\x92\x41\xd8\x05\n\x12\x43onnected Accounts\x12\x1dGet connected account details\x1a\xab\x02Retrieves complete authentication details for a connected account including OAuth tokens, refresh tokens, scopes, and API configuration. Query by account ID or by combination of organization/user, connector, and identifier. Returns sensitive credential information - use appropriate access controls.J\xa0\x01\n\x03\x32\x30\x30\x12\x98\x01\nISuccessfully retrieved connected account with full authentication details\x12K\nI\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponseJ<\n\x03\x34\x30\x30\x12\x35\n3Invalid request - missing required query parametersJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJP\n\x03\x34\x30\x34\x12I\nGConnected account not found - no account matches the specified criteria\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02!\x12\x1f/api/v1/connected_accounts/auth\x12\xfa\x06\n\x1aGetConnectedAccountDetails\x12\x46.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierRequest\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponse\"\xca\x05\x92\x41\x96\x05\n\x12\x43onnected Accounts\x12\x1dGet connected account details\x1a\x83\x02Returns metadata for a connected account including status, connector type, provider, and configuration without exposing stored authorization credentials. Look up by account ID, or by a combination of organization (or user), connector, and external identifier.J\x86\x01\n\x03\x32\x30\x30\x12\x7f\n0Successfully retrieved connected account details\x12K\nI\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponseJ<\n\x03\x34\x30\x30\x12\x35\n3Invalid request - missing required query parametersJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJP\n\x03\x34\x30\x34\x12I\nGConnected account not found - no account matches the specified criteria\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02$\x12\"/api/v1/connected_accounts/details\x12\xbb\x07\n\x1aVerifyConnectedAccountUser\x12\x41.scalekit.v1.connected_accounts.VerifyConnectedAccountUserRequest\x1a\x42.scalekit.v1.connected_accounts.VerifyConnectedAccountUserResponse\"\x95\x06\x92\x41\xda\x05\n\x12\x43onnected Accounts\x12\x1dVerify connected account user\x1a\xa4\x02\x43onfirms the user assertion and activates the connected account after the user completes third-party OAuth. Called by the B2B app server with auth_request_id and identifier. Validates that the asserted identifier matches the one stored on the auth request and promotes pending tokens to live.J\x8a\x01\n\x03\x32\x30\x30\x12\x82\x01\n8Verification successful; connected account is now ACTIVE\x12\x46\nD\x1a\x42.scalekit.v1.connected_accounts.VerifyConnectedAccountUserResponseJ6\n\x03\x34\x30\x30\x12/\n-Invalid request - missing or malformed fieldsJ7\n\x03\x34\x30\x31\x12\x30\n.Unauthorized - invalid or missing access tokenJ(\n\x03\x34\x30\x33\x12!\n\x1f\x46orbidden - identifier mismatchJV\n\x03\x34\x30\x34\x12O\nMNot found - no pending flow for the given auth_request_id or already consumed\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02+\"&/api/v1/connected_accounts/user/verify:\x01*\x1a\xe3\x01\x92\x41\xdf\x01\n\x12\x43onnected Accounts\x12\xc8\x01Manage connected accounts for third-party integrations and OAuth connections. Connected accounts represent authenticated access to external services like Google, Notion, Slack, and other applications.B\xa4\x02Z.scalekit.v1.connected_accounts.CreateConnectedAccountResponseJg\n\003400\022`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\003401\022;\n9Authentication required - missing or invalid access tokenJM\n\003409\022F\nDConflict - connected account with the same identifier already exists\202\265\030\002\030D\202\323\344\223\002\037\"\032/api/v1/connected_accounts:\001*' _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['UpdateConnectedAccount']._loaded_options = None - _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['UpdateConnectedAccount']._serialized_options = b'\222A\246\006\n\022Connected Accounts\022$Update connected account credentials\032\322\002Updates authentication credentials and configuration for an existing connected account. Modify OAuth tokens, refresh tokens, access scopes, or API configuration settings. Specify the account by ID, or by combination of organization/user, connector, and identifier. Returns the updated account with new token expiry and status information.J\232\001\n\003200\022\222\001\nLConnected account updated successfully with new credentials or configuration\022B\n@\032>.scalekit.v1.connected_accounts.UpdateConnectedAccountResponseJg\n\003400\022`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\003401\022;\n9Authentication required - missing or invalid access tokenJK\n\003404\022D\nBConnected account not found - the specified account does not exist\202\265\030\002\030D\202\323\344\223\002\037\032\032/api/v1/connected_accounts:\001*' + _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['UpdateConnectedAccount']._serialized_options = b'\222A\246\006\n\022Connected Accounts\022$Update connected account credentials\032\322\002Updates authentication credentials and configuration for an existing connected account. Modify OAuth tokens, refresh tokens, access scopes, or API configuration settings. Specify the account by ID, or by combination of organization/user, connector, and identifier. Returns the updated account with new token expiry and status information.J\232\001\n\003200\022\222\001\nLConnected account updated successfully with new credentials or configuration\022B\n@\032>.scalekit.v1.connected_accounts.UpdateConnectedAccountResponseJg\n\003400\022`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\003401\022;\n9Authentication required - missing or invalid access tokenJK\n\003404\022D\nBConnected account not found - the specified account does not exist\202\265\030\003\030\304\001\202\323\344\223\002\037\032\032/api/v1/connected_accounts:\001*' _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['DeleteConnectedAccount']._loaded_options = None _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['DeleteConnectedAccount']._serialized_options = b'\222A\366\004\n\022Connected Accounts\022\032Delete a connected account\032\237\002Permanently removes a connected account and revokes all associated authentication credentials. Identify the account by ID, or by combination of organization/user, connector, and identifier. This action cannot be undone. All OAuth tokens and API keys for this account will be invalidated.JK\n\003200\022D\nBConnected account deleted successfully and all credentials revokedJD\n\003400\022=\n;Invalid request - malformed parameters or validation failedJB\n\003401\022;\n9Authentication required - missing or invalid access tokenJK\n\003404\022D\nBConnected account not found - the specified account does not exist\202\265\030\002\030D\202\323\344\223\002&\"!/api/v1/connected_accounts:delete:\001*' _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['GetMagicLinkForConnectedAccount']._loaded_options = None _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['GetMagicLinkForConnectedAccount']._serialized_options = b'\222A\220\005\n\022Connected Accounts\022\"Generate authentication magic link\032\242\002Creates a time-limited magic link for connecting or re-authorizing a third-party account. The link directs users to the OAuth authorization flow for the specified connector. Returns the generated link URL and expiration timestamp. Links typically expire after a short duration for security.J\237\001\n\003200\022\227\001\nHMagic link generated successfully with authorization URL and expiry time\022K\nI\032G.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountResponseJK\n\003400\022D\nBInvalid request - missing required parameters or invalid connectorJB\n\003401\022;\n9Authentication required - missing or invalid access token\202\265\030\002\030D\202\323\344\223\002*\"%/api/v1/connected_accounts/magic_link:\001*' + _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['GetConnectedAccount']._loaded_options = None + _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['GetConnectedAccount']._serialized_options = b'\222A\220\004\n\022Connected Accounts\022\027Get a connected account\032\270\001Retrieves a connected account by its unique ID. Use the path \'/this\' (e.g. /api/v1/connected_accounts/this) to retrieve the connected account associated with the current token context.Jv\n\003200\022o\n,Successfully retrieved the connected account\022?\n=\032;.scalekit.v1.connected_accounts.GetConnectedAccountResponseJD\n\003400\022=\n;Invalid request - missing or malformed connected account IDJB\n\003401\022;\n9Authentication required - missing or invalid access tokenJ$\n\003404\022\035\n\033Connected account not found\202\265\030\003\030\304\001\202\323\344\223\002D\022\037/api/v1/connected_accounts/thisZ!\022\037/api/v1/connected_accounts/{id}' + _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['DisconnectConnectedAccount']._loaded_options = None + _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['DisconnectConnectedAccount']._serialized_options = b'\222A\362\003\n\022Connected Accounts\022\036Disconnect a connected account\032\210\001Disconnects a connected account by setting its status to DISCONNECTED. The account record is retained but is marked as no longer active.J\200\001\n\003200\022y\n/Successfully disconnected the connected account\022F\nD\032B.scalekit.v1.connected_accounts.DisconnectConnectedAccountResponseJD\n\003400\022=\n;Invalid request - missing or malformed connected account IDJB\n\003401\022;\n9Authentication required - missing or invalid access tokenJ$\n\003404\022\035\n\033Connected account not found\202\265\030\003\030\304\001\202\323\344\223\002]\"*/api/v1/connected_accounts/{id}:disconnect:\001*Z,\"\'/api/v1/connected_accounts/-:disconnect:\001*' _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['GetConnectedAccountAuth']._loaded_options = None _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['GetConnectedAccountAuth']._serialized_options = b'\222A\330\005\n\022Connected Accounts\022\035Get connected account details\032\253\002Retrieves complete authentication details for a connected account including OAuth tokens, refresh tokens, scopes, and API configuration. Query by account ID or by combination of organization/user, connector, and identifier. Returns sensitive credential information - use appropriate access controls.J\240\001\n\003200\022\230\001\nISuccessfully retrieved connected account with full authentication details\022K\nI\032G.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponseJ<\n\003400\0225\n3Invalid request - missing required query parametersJB\n\003401\022;\n9Authentication required - missing or invalid access tokenJP\n\003404\022I\nGConnected account not found - no account matches the specified criteria\202\265\030\002\030D\202\323\344\223\002!\022\037/api/v1/connected_accounts/auth' - _globals['_CONNECTORSTATUS']._serialized_start=15819 - _globals['_CONNECTORSTATUS']._serialized_end=15914 - _globals['_CONNECTORTYPE']._serialized_start=15917 - _globals['_CONNECTORTYPE']._serialized_end=16046 + _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['GetConnectedAccountDetails']._loaded_options = None + _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['GetConnectedAccountDetails']._serialized_options = b'\222A\226\005\n\022Connected Accounts\022\035Get connected account details\032\203\002Returns metadata for a connected account including status, connector type, provider, and configuration without exposing stored authorization credentials. Look up by account ID, or by a combination of organization (or user), connector, and external identifier.J\206\001\n\003200\022\177\n0Successfully retrieved connected account details\022K\nI\032G.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponseJ<\n\003400\0225\n3Invalid request - missing required query parametersJB\n\003401\022;\n9Authentication required - missing or invalid access tokenJP\n\003404\022I\nGConnected account not found - no account matches the specified criteria\202\265\030\002\030D\202\323\344\223\002$\022\"/api/v1/connected_accounts/details' + _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['VerifyConnectedAccountUser']._loaded_options = None + _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['VerifyConnectedAccountUser']._serialized_options = b'\222A\332\005\n\022Connected Accounts\022\035Verify connected account user\032\244\002Confirms the user assertion and activates the connected account after the user completes third-party OAuth. Called by the B2B app server with auth_request_id and identifier. Validates that the asserted identifier matches the one stored on the auth request and promotes pending tokens to live.J\212\001\n\003200\022\202\001\n8Verification successful; connected account is now ACTIVE\022F\nD\032B.scalekit.v1.connected_accounts.VerifyConnectedAccountUserResponseJ6\n\003400\022/\n-Invalid request - missing or malformed fieldsJ7\n\003401\0220\n.Unauthorized - invalid or missing access tokenJ(\n\003403\022!\n\037Forbidden - identifier mismatchJV\n\003404\022O\nMNot found - no pending flow for the given auth_request_id or already consumed\202\265\030\002\030D\202\323\344\223\002+\"&/api/v1/connected_accounts/user/verify:\001*' + _globals['_CONNECTORSTATUS']._serialized_start=17728 + _globals['_CONNECTORSTATUS']._serialized_end=17867 + _globals['_CONNECTORTYPE']._serialized_start=17870 + _globals['_CONNECTORTYPE']._serialized_end=18033 _globals['_LISTCONNECTEDACCOUNTSREQUEST']._serialized_start=359 - _globals['_LISTCONNECTEDACCOUNTSREQUEST']._serialized_end=1916 - _globals['_LISTCONNECTEDACCOUNTSRESPONSE']._serialized_start=1919 - _globals['_LISTCONNECTEDACCOUNTSRESPONSE']._serialized_end=2746 - _globals['_SEARCHCONNECTEDACCOUNTSREQUEST']._serialized_start=2749 - _globals['_SEARCHCONNECTEDACCOUNTSREQUEST']._serialized_end=3613 - _globals['_SEARCHCONNECTEDACCOUNTSRESPONSE']._serialized_start=3616 - _globals['_SEARCHCONNECTEDACCOUNTSRESPONSE']._serialized_end=4263 - _globals['_CREATECONNECTEDACCOUNTREQUEST']._serialized_start=4266 - _globals['_CREATECONNECTEDACCOUNTREQUEST']._serialized_end=5199 - _globals['_CREATECONNECTEDACCOUNTRESPONSE']._serialized_start=5202 - _globals['_CREATECONNECTEDACCOUNTRESPONSE']._serialized_end=5471 - _globals['_UPDATECONNECTEDACCOUNTREQUEST']._serialized_start=5474 - _globals['_UPDATECONNECTEDACCOUNTREQUEST']._serialized_end=6501 - _globals['_UPDATECONNECTEDACCOUNTRESPONSE']._serialized_start=6504 - _globals['_UPDATECONNECTEDACCOUNTRESPONSE']._serialized_end=6751 - _globals['_DELETECONNECTEDACCOUNTREQUEST']._serialized_start=6754 - _globals['_DELETECONNECTEDACCOUNTREQUEST']._serialized_end=7479 - _globals['_DELETECONNECTEDACCOUNTRESPONSE']._serialized_start=7481 - _globals['_DELETECONNECTEDACCOUNTRESPONSE']._serialized_end=7513 - _globals['_GETMAGICLINKFORCONNECTEDACCOUNTREQUEST']._serialized_start=7516 - _globals['_GETMAGICLINKFORCONNECTEDACCOUNTREQUEST']._serialized_end=8222 - _globals['_GETMAGICLINKFORCONNECTEDACCOUNTRESPONSE']._serialized_start=8225 - _globals['_GETMAGICLINKFORCONNECTEDACCOUNTRESPONSE']._serialized_end=8509 - _globals['_GETCONNECTEDACCOUNTBYIDENTIFIERREQUEST']._serialized_start=8512 - _globals['_GETCONNECTEDACCOUNTBYIDENTIFIERREQUEST']._serialized_end=9218 - _globals['_GETCONNECTEDACCOUNTBYIDENTIFIERRESPONSE']._serialized_start=9221 - _globals['_GETCONNECTEDACCOUNTBYIDENTIFIERRESPONSE']._serialized_end=9539 - _globals['_CONNECTEDACCOUNT']._serialized_start=9542 - _globals['_CONNECTEDACCOUNT']._serialized_end=12034 - _globals['_CREATECONNECTEDACCOUNT']._serialized_start=12037 - _globals['_CREATECONNECTEDACCOUNT']._serialized_end=12815 - _globals['_UPDATECONNECTEDACCOUNT']._serialized_start=12818 - _globals['_UPDATECONNECTEDACCOUNT']._serialized_end=13518 - _globals['_CONNECTEDACCOUNTFORLIST']._serialized_start=13521 - _globals['_CONNECTEDACCOUNTFORLIST']._serialized_end=14641 - _globals['_AUTHORIZATIONDETAILS']._serialized_start=14644 - _globals['_AUTHORIZATIONDETAILS']._serialized_end=14835 - _globals['_OAUTHTOKEN']._serialized_start=14838 - _globals['_OAUTHTOKEN']._serialized_end=15570 - _globals['_STATICAUTH']._serialized_start=15573 - _globals['_STATICAUTH']._serialized_end=15817 - _globals['_CONNECTEDACCOUNTSERVICE']._serialized_start=16049 - _globals['_CONNECTEDACCOUNTSERVICE']._serialized_end=22763 + _globals['_LISTCONNECTEDACCOUNTSREQUEST']._serialized_end=1936 + _globals['_LISTCONNECTEDACCOUNTSRESPONSE']._serialized_start=1939 + _globals['_LISTCONNECTEDACCOUNTSRESPONSE']._serialized_end=2766 + _globals['_SEARCHCONNECTEDACCOUNTSREQUEST']._serialized_start=2769 + _globals['_SEARCHCONNECTEDACCOUNTSREQUEST']._serialized_end=3633 + _globals['_SEARCHCONNECTEDACCOUNTSRESPONSE']._serialized_start=3636 + _globals['_SEARCHCONNECTEDACCOUNTSRESPONSE']._serialized_end=4283 + _globals['_CREATECONNECTEDACCOUNTREQUEST']._serialized_start=4286 + _globals['_CREATECONNECTEDACCOUNTREQUEST']._serialized_end=5222 + _globals['_CREATECONNECTEDACCOUNTRESPONSE']._serialized_start=5225 + _globals['_CREATECONNECTEDACCOUNTRESPONSE']._serialized_end=5494 + _globals['_UPDATECONNECTEDACCOUNTREQUEST']._serialized_start=5497 + _globals['_UPDATECONNECTEDACCOUNTREQUEST']._serialized_end=6525 + _globals['_UPDATECONNECTEDACCOUNTRESPONSE']._serialized_start=6528 + _globals['_UPDATECONNECTEDACCOUNTRESPONSE']._serialized_end=6775 + _globals['_DELETECONNECTEDACCOUNTREQUEST']._serialized_start=6778 + _globals['_DELETECONNECTEDACCOUNTREQUEST']._serialized_end=7506 + _globals['_DELETECONNECTEDACCOUNTRESPONSE']._serialized_start=7508 + _globals['_DELETECONNECTEDACCOUNTRESPONSE']._serialized_end=7540 + _globals['_GETMAGICLINKFORCONNECTEDACCOUNTREQUEST']._serialized_start=7543 + _globals['_GETMAGICLINKFORCONNECTEDACCOUNTREQUEST']._serialized_end=8650 + _globals['_GETMAGICLINKFORCONNECTEDACCOUNTRESPONSE']._serialized_start=8653 + _globals['_GETMAGICLINKFORCONNECTEDACCOUNTRESPONSE']._serialized_end=8937 + _globals['_VERIFYCONNECTEDACCOUNTUSERREQUEST']._serialized_start=8940 + _globals['_VERIFYCONNECTEDACCOUNTUSERREQUEST']._serialized_end=9303 + _globals['_VERIFYCONNECTEDACCOUNTUSERRESPONSE']._serialized_start=9306 + _globals['_VERIFYCONNECTEDACCOUNTUSERRESPONSE']._serialized_end=9517 + _globals['_GETCONNECTEDACCOUNTBYIDENTIFIERREQUEST']._serialized_start=9520 + _globals['_GETCONNECTEDACCOUNTBYIDENTIFIERREQUEST']._serialized_end=10227 + _globals['_GETCONNECTEDACCOUNTBYIDENTIFIERRESPONSE']._serialized_start=10230 + _globals['_GETCONNECTEDACCOUNTBYIDENTIFIERRESPONSE']._serialized_end=10548 + _globals['_CONNECTEDACCOUNT']._serialized_start=10551 + _globals['_CONNECTEDACCOUNT']._serialized_end=13082 + _globals['_CREATECONNECTEDACCOUNT']._serialized_start=13085 + _globals['_CREATECONNECTEDACCOUNT']._serialized_end=13879 + _globals['_UPDATECONNECTEDACCOUNT']._serialized_start=13882 + _globals['_UPDATECONNECTEDACCOUNT']._serialized_end=14582 + _globals['_CONNECTEDACCOUNTFORLIST']._serialized_start=14585 + _globals['_CONNECTEDACCOUNTFORLIST']._serialized_end=15705 + _globals['_AUTHORIZATIONDETAILS']._serialized_start=15708 + _globals['_AUTHORIZATIONDETAILS']._serialized_end=15899 + _globals['_OAUTHTOKEN']._serialized_start=15902 + _globals['_OAUTHTOKEN']._serialized_end=16634 + _globals['_STATICAUTH']._serialized_start=16637 + _globals['_STATICAUTH']._serialized_end=16881 + _globals['_GETCONNECTEDACCOUNTREQUEST']._serialized_start=16884 + _globals['_GETCONNECTEDACCOUNTREQUEST']._serialized_end=17143 + _globals['_GETCONNECTEDACCOUNTRESPONSE']._serialized_start=17146 + _globals['_GETCONNECTEDACCOUNTRESPONSE']._serialized_end=17343 + _globals['_DISCONNECTCONNECTEDACCOUNTREQUEST']._serialized_start=17346 + _globals['_DISCONNECTCONNECTEDACCOUNTREQUEST']._serialized_end=17524 + _globals['_DISCONNECTCONNECTEDACCOUNTRESPONSE']._serialized_start=17527 + _globals['_DISCONNECTCONNECTEDACCOUNTRESPONSE']._serialized_end=17725 + _globals['_CONNECTEDACCOUNTSERVICE']._serialized_start=18036 + _globals['_CONNECTEDACCOUNTSERVICE']._serialized_end=28140 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/connected_accounts/connected_accounts_pb2.pyi b/scalekit/v1/connected_accounts/connected_accounts_pb2.pyi index 9cdc6a3..1e10adb 100644 --- a/scalekit/v1/connected_accounts/connected_accounts_pb2.pyi +++ b/scalekit/v1/connected_accounts/connected_accounts_pb2.pyi @@ -20,6 +20,8 @@ class ConnectorStatus(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): ACTIVE: _ClassVar[ConnectorStatus] EXPIRED: _ClassVar[ConnectorStatus] PENDING_AUTH: _ClassVar[ConnectorStatus] + PENDING_VERIFICATION: _ClassVar[ConnectorStatus] + DISCONNECTED: _ClassVar[ConnectorStatus] class ConnectorType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): __slots__ = () @@ -30,10 +32,14 @@ class ConnectorType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): BEARER_TOKEN: _ClassVar[ConnectorType] CUSTOM: _ClassVar[ConnectorType] BASIC: _ClassVar[ConnectorType] + OAUTH_M2M: _ClassVar[ConnectorType] + TRELLO_OAUTH1: _ClassVar[ConnectorType] CONNECTION_STATUS_UNSPECIFIED: ConnectorStatus ACTIVE: ConnectorStatus EXPIRED: ConnectorStatus PENDING_AUTH: ConnectorStatus +PENDING_VERIFICATION: ConnectorStatus +DISCONNECTED: ConnectorStatus CONNECTION_TYPE_UNSPECIFIED: ConnectorType OAUTH: ConnectorType API_KEY: ConnectorType @@ -41,6 +47,8 @@ BASIC_AUTH: ConnectorType BEARER_TOKEN: ConnectorType CUSTOM: ConnectorType BASIC: ConnectorType +OAUTH_M2M: ConnectorType +TRELLO_OAUTH1: ConnectorType class ListConnectedAccountsRequest(_message.Message): __slots__ = ("organization_id", "user_id", "connector", "identifier", "provider", "page_size", "page_token", "query") @@ -159,18 +167,22 @@ class DeleteConnectedAccountResponse(_message.Message): def __init__(self) -> None: ... class GetMagicLinkForConnectedAccountRequest(_message.Message): - __slots__ = ("organization_id", "user_id", "connector", "identifier", "id") + __slots__ = ("organization_id", "user_id", "connector", "identifier", "id", "state", "user_verify_url") ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] USER_ID_FIELD_NUMBER: _ClassVar[int] CONNECTOR_FIELD_NUMBER: _ClassVar[int] IDENTIFIER_FIELD_NUMBER: _ClassVar[int] ID_FIELD_NUMBER: _ClassVar[int] + STATE_FIELD_NUMBER: _ClassVar[int] + USER_VERIFY_URL_FIELD_NUMBER: _ClassVar[int] organization_id: str user_id: str connector: str identifier: str id: str - def __init__(self, organization_id: _Optional[str] = ..., user_id: _Optional[str] = ..., connector: _Optional[str] = ..., identifier: _Optional[str] = ..., id: _Optional[str] = ...) -> None: ... + state: str + user_verify_url: str + def __init__(self, organization_id: _Optional[str] = ..., user_id: _Optional[str] = ..., connector: _Optional[str] = ..., identifier: _Optional[str] = ..., id: _Optional[str] = ..., state: _Optional[str] = ..., user_verify_url: _Optional[str] = ...) -> None: ... class GetMagicLinkForConnectedAccountResponse(_message.Message): __slots__ = ("link", "expiry") @@ -180,6 +192,20 @@ class GetMagicLinkForConnectedAccountResponse(_message.Message): expiry: _timestamp_pb2.Timestamp def __init__(self, link: _Optional[str] = ..., expiry: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ... +class VerifyConnectedAccountUserRequest(_message.Message): + __slots__ = ("auth_request_id", "identifier") + AUTH_REQUEST_ID_FIELD_NUMBER: _ClassVar[int] + IDENTIFIER_FIELD_NUMBER: _ClassVar[int] + auth_request_id: str + identifier: str + def __init__(self, auth_request_id: _Optional[str] = ..., identifier: _Optional[str] = ...) -> None: ... + +class VerifyConnectedAccountUserResponse(_message.Message): + __slots__ = ("post_user_verify_redirect_url",) + POST_USER_VERIFY_REDIRECT_URL_FIELD_NUMBER: _ClassVar[int] + post_user_verify_redirect_url: str + def __init__(self, post_user_verify_redirect_url: _Optional[str] = ...) -> None: ... + class GetConnectedAccountByIdentifierRequest(_message.Message): __slots__ = ("organization_id", "user_id", "connector", "identifier", "id") ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] @@ -293,3 +319,27 @@ class StaticAuth(_message.Message): DETAILS_FIELD_NUMBER: _ClassVar[int] details: _struct_pb2.Struct def __init__(self, details: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... + +class GetConnectedAccountRequest(_message.Message): + __slots__ = ("id",) + ID_FIELD_NUMBER: _ClassVar[int] + id: str + def __init__(self, id: _Optional[str] = ...) -> None: ... + +class GetConnectedAccountResponse(_message.Message): + __slots__ = ("connected_account",) + CONNECTED_ACCOUNT_FIELD_NUMBER: _ClassVar[int] + connected_account: ConnectedAccount + def __init__(self, connected_account: _Optional[_Union[ConnectedAccount, _Mapping]] = ...) -> None: ... + +class DisconnectConnectedAccountRequest(_message.Message): + __slots__ = ("id",) + ID_FIELD_NUMBER: _ClassVar[int] + id: str + def __init__(self, id: _Optional[str] = ...) -> None: ... + +class DisconnectConnectedAccountResponse(_message.Message): + __slots__ = ("connected_account",) + CONNECTED_ACCOUNT_FIELD_NUMBER: _ClassVar[int] + connected_account: ConnectedAccount + def __init__(self, connected_account: _Optional[_Union[ConnectedAccount, _Mapping]] = ...) -> None: ... diff --git a/scalekit/v1/connected_accounts/connected_accounts_pb2_grpc.py b/scalekit/v1/connected_accounts/connected_accounts_pb2_grpc.py index 98b85dc..53109b7 100644 --- a/scalekit/v1/connected_accounts/connected_accounts_pb2_grpc.py +++ b/scalekit/v1/connected_accounts/connected_accounts_pb2_grpc.py @@ -44,11 +44,31 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetMagicLinkForConnectedAccountRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetMagicLinkForConnectedAccountResponse.FromString, ) + self.GetConnectedAccount = channel.unary_unary( + '/scalekit.v1.connected_accounts.ConnectedAccountService/GetConnectedAccount', + request_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountResponse.FromString, + ) + self.DisconnectConnectedAccount = channel.unary_unary( + '/scalekit.v1.connected_accounts.ConnectedAccountService/DisconnectConnectedAccount', + request_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.DisconnectConnectedAccountRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.DisconnectConnectedAccountResponse.FromString, + ) self.GetConnectedAccountAuth = channel.unary_unary( '/scalekit.v1.connected_accounts.ConnectedAccountService/GetConnectedAccountAuth', request_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierResponse.FromString, ) + self.GetConnectedAccountDetails = channel.unary_unary( + '/scalekit.v1.connected_accounts.ConnectedAccountService/GetConnectedAccountDetails', + request_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierResponse.FromString, + ) + self.VerifyConnectedAccountUser = channel.unary_unary( + '/scalekit.v1.connected_accounts.ConnectedAccountService/VerifyConnectedAccountUser', + request_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.VerifyConnectedAccountUserRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.VerifyConnectedAccountUserResponse.FromString, + ) class ConnectedAccountServiceServicer(object): @@ -96,6 +116,20 @@ def GetMagicLinkForConnectedAccount(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def GetConnectedAccount(self, request, context): + """Get Connected Account by ID + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DisconnectConnectedAccount(self, request, context): + """Disconnect a Connected Account + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def GetConnectedAccountAuth(self, request, context): """Get Connected Account Authentication Details """ @@ -103,6 +137,20 @@ def GetConnectedAccountAuth(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def GetConnectedAccountDetails(self, request, context): + """Get Connected Account Details (without auth credentials) + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def VerifyConnectedAccountUser(self, request, context): + """Verify connected account user after OAuth callback + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def add_ConnectedAccountServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -136,11 +184,31 @@ def add_ConnectedAccountServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetMagicLinkForConnectedAccountRequest.FromString, response_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetMagicLinkForConnectedAccountResponse.SerializeToString, ), + 'GetConnectedAccount': grpc.unary_unary_rpc_method_handler( + servicer.GetConnectedAccount, + request_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountRequest.FromString, + response_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountResponse.SerializeToString, + ), + 'DisconnectConnectedAccount': grpc.unary_unary_rpc_method_handler( + servicer.DisconnectConnectedAccount, + request_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.DisconnectConnectedAccountRequest.FromString, + response_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.DisconnectConnectedAccountResponse.SerializeToString, + ), 'GetConnectedAccountAuth': grpc.unary_unary_rpc_method_handler( servicer.GetConnectedAccountAuth, request_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierRequest.FromString, response_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierResponse.SerializeToString, ), + 'GetConnectedAccountDetails': grpc.unary_unary_rpc_method_handler( + servicer.GetConnectedAccountDetails, + request_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierRequest.FromString, + response_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierResponse.SerializeToString, + ), + 'VerifyConnectedAccountUser': grpc.unary_unary_rpc_method_handler( + servicer.VerifyConnectedAccountUser, + request_deserializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.VerifyConnectedAccountUserRequest.FromString, + response_serializer=scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.VerifyConnectedAccountUserResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'scalekit.v1.connected_accounts.ConnectedAccountService', rpc_method_handlers) @@ -253,6 +321,40 @@ def GetMagicLinkForConnectedAccount(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod + def GetConnectedAccount(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.connected_accounts.ConnectedAccountService/GetConnectedAccount', + scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountRequest.SerializeToString, + scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def DisconnectConnectedAccount(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.connected_accounts.ConnectedAccountService/DisconnectConnectedAccount', + scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.DisconnectConnectedAccountRequest.SerializeToString, + scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.DisconnectConnectedAccountResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod def GetConnectedAccountAuth(request, target, @@ -269,3 +371,37 @@ def GetConnectedAccountAuth(request, scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def GetConnectedAccountDetails(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.connected_accounts.ConnectedAccountService/GetConnectedAccountDetails', + scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierRequest.SerializeToString, + scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.GetConnectedAccountByIdentifierResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def VerifyConnectedAccountUser(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.connected_accounts.ConnectedAccountService/VerifyConnectedAccountUser', + scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.VerifyConnectedAccountUserRequest.SerializeToString, + scalekit_dot_v1_dot_connected__accounts_dot_connected__accounts__pb2.VerifyConnectedAccountUserResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/connections/connections_pb2.py b/scalekit/v1/connections/connections_pb2.py index 40e1d20..dffbca0 100644 --- a/scalekit/v1/connections/connections_pb2.py +++ b/scalekit/v1/connections/connections_pb2.py @@ -28,7 +28,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n)scalekit/v1/connections/connections.proto\x12\x17scalekit.v1.connections\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a\x1fscalekit/v1/auth/webauthn.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/domains/domains.proto\x1a!scalekit/v1/options/options.proto\"\xc4\x01\n AssignDomainsToConnectionRequest\x12;\n\x0forganization_id\x18\x01 \x01(\tB\x12\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\x12\x38\n\rconnection_id\x18\x02 \x01(\tB\x13\xbaH\x10r\x0b\x10\x01\x18 :\x05\x63onn_\xc8\x01\x01R\x0c\x63onnectionId\x12)\n\ndomain_ids\x18\x03 \x03(\tB\n\xbaH\x07\x92\x01\x04\x08\x00\x10\x32R\tdomainIds\"\xe6\x03\n!AssignDomainsToConnectionResponse\x12\xc0\x03\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\xfa\x02\x92\x41\xf6\x02\x32 Connection with assigned domainsJ\xd1\x02{\n \"id\": \"conn_1234567890\",\n \"provider\": \"OKTA\",\n \"type\": \"OIDC\",\n \"status\": \"CONFIGURED\",\n \"enabled\": true,\n \"debug_enabled\": false,\n \"organization_id\": \"org_1234567890\",\n \"ui_button_title\": \"Login with SSO\",\n \"configuration_type\": \"MANUAL\",\n \"test_connection_uri\": \"https://auth.example.com/test-connection/conn_1234567890\"\n}R\nconnection\"\x15\n\x13GetProvidersRequest\"W\n\x14GetProvidersResponse\x12?\n\tproviders\x18\x01 \x03(\x0b\x32!.scalekit.v1.connections.ProviderR\tproviders\"\xf3\x01\n\x08Provider\x12\x35\n\x06key_id\x18\x01 \x01(\tB\x1e\x92\x41\x1b\x32\x0fProvider Key IDJ\x08\"google\"R\x05keyId\x12G\n\x0c\x64isplay_name\x18\x02 \x01(\tB$\x92\x41!2\x15Provider Display NameJ\x08\"Google\"R\x0b\x64isplayName\x12W\n\x0b\x64\x65scription\x18\x03 \x01(\tB0\x92\x41-2\x14Provider DescriptionJ\x15\"Sign In With Google\"H\x00R\x0b\x64\x65scription\x88\x01\x01\x42\x0e\n\x0c_description\"\xae\x02\n\"CreateEnvironmentConnectionRequest\x12Q\n\nconnection\x18\x01 \x01(\x0b\x32).scalekit.v1.connections.CreateConnectionB\x06\xbaH\x03\xc8\x01\x01R\nconnection\x12\xaa\x01\n\x05\x66lags\x18\x02 \x01(\x0b\x32\x1e.scalekit.v1.connections.FlagsBo\x92\x41l2SOptional flags to control connection creation behavior, such as enabling debug modeJ\x15{ \"is_social\": true }H\x00R\x05\x66lags\x88\x01\x01\x42\x08\n\x06_flags\"\xe4\x02\n\x17\x43reateConnectionRequest\x12\x9a\x01\n\x0forganization_id\x18\x01 \x01(\tBq\x92\x41\x65\x32JUnique identifier of the organization for which the connection is created.J\x17\"org_12362474900684814\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\xa5\x01\n\nconnection\x18\x03 \x01(\x0b\x32).scalekit.v1.connections.CreateConnectionBZ\xbaHW\xba\x01Q\x12\x36OAUTH, PASSWORDLESS and WEBAUTHN are not supported yet\x1a\x17!(this.type in [4,5,9])\xc8\x01\x01R\nconnectionJ\x04\x08\x02\x10\x03\"\xf7\x05\n\x10\x43reateConnection\x12\xcb\x01\n\x08provider\x18\x01 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderB\x81\x01\x92\x41v2lIdentity provider service that handles authentication (such as OKTA, Google, Azure AD, or a custom provider)J\x06\"OKTA\"\xbaH\x05\x82\x01\x02\x10\x01R\x08provider\x12\x45\n\x04type\x18\x02 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04type\x12\x98\x01\n\x0cprovider_key\x18\x03 \x01(\tBu\x92\x41r2fKey ID of the identity provider. This is used to identify the specific configuration for the provider.J\x08\"google\"R\x0bproviderKey\x12\x1a\n\x06key_id\x18\x04 \x01(\tH\x00R\x05keyId\x88\x01\x01:\x8b\x02\xbaH\x87\x02\x1aT\x12$provider or provider_key is required\x1a,has(this.provider_key) || this.provider != 0\x1a`\x12\x1einvalid value for provider_key\x1a>this.provider == 15 ? this.provider_key in [\'SCALEKIT\'] : true\x1aM\x12\x18invalid value for key_id\x1a\x31this.type == 9 ? this.key_id == \'WEBAUTHN\' : trueB\t\n\x07_key_id\"\xcb \n\nConnection\x12\x8d\x01\n\x02id\x18\x01 \x01(\tB}\x92\x41z2_Unique identifier for this connection. Used in API calls to reference this specific connection.J\x17\"conn_2123312131125533\"R\x02id\x12\xc2\x01\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderBy\x92\x41v2lIdentity provider service that handles authentication (such as OKTA, Google, Azure AD, or a custom provider)J\x06\"OKTA\"R\x08provider\x12\xb4\x01\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeBw\x92\x41t2jAuthentication protocol used by this connection. Can be OIDC (OpenID Connect), SAML, OAUTH, or MAGIC_LINK.J\x06\"OIDC\"R\x04type\x12\xc6\x01\n\x06status\x18\x04 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusB\x82\x01\x92\x41|2kCurrent configuration status of the connection. Possible values include IN_PROGRESS, CONFIGURED, and ERROR.J\r\"IN_PROGRESS\"\xe0\x41\x03R\x06status\x12\xab\x01\n\x07\x65nabled\x18\x05 \x01(\x08\x42\x90\x01\x92\x41\x8c\x01\x32\x82\x01\x43ontrols whether users can sign in using this connection. When false, the connection exists but cannot be used for authentication.J\x05\x66\x61lseR\x07\x65nabled\x12\xb0\x01\n\rdebug_enabled\x18\x06 \x01(\x08\x42\x8a\x01\x92\x41\x86\x01\x32~Enables testing mode that allows non-HTTPS endpoints. Should only be enabled in development environments, never in production.J\x04trueR\x0c\x64\x65\x62ugEnabled\x12\xc1\x01\n\x0forganization_id\x18\x07 \x01(\tB\x92\x01\x92\x41\x8e\x01\x32tIdentifier of the organization that owns this connection. Connections are typically scoped to a single organization.J\x16\"org_2123312131125533\"H\x01R\x0eorganizationId\x88\x01\x01\x12\xbd\x01\n\x0fui_button_title\x18\x08 \x01(\tB\x94\x01\x92\x41\x81\x01\x32mCustom text shown on the login button in the user interface. Helps users identify which SSO option to select.J\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12\xd5\x01\n\x12\x63onfiguration_type\x18\t \x01(\x0e\x32*.scalekit.v1.connections.ConfigurationTypeBz\x92\x41w2kHow the connection was configured: DISCOVERY (automatic configuration) or MANUAL (administrator configured)J\x08\"MANUAL\"R\x11\x63onfigurationType\x12\xdf\x01\n\x13test_connection_uri\x18\x0c \x01(\tB\xae\x01\x92\x41\xaa\x01\x32\x66URI that can be used to test this connection. Visit this URL to verify the connection works correctly.J@\"https://auth.example.com/test-connection/conn_2123312131125533\"R\x11testConnectionUri\x12\x81\x02\n\x11\x61ttribute_mapping\x18\x0f \x03(\x0b\x32\x39.scalekit.v1.connections.Connection.AttributeMappingEntryB\x98\x01\x92\x41|2zMaps identity provider attributes to user profile fields. For example, {\'email\': \'user.mail\', \'name\': \'user.displayName\'}.\xbaH\x16\x9a\x01\x13\x10\x1e\"\x06r\x04\x10\x01\x18\x64*\x07r\x05\x10\x01\x18\x80\x02R\x10\x61ttributeMapping\x12\xb1\x01\n\x0b\x63reate_time\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.TimestampBt\x92\x41_2EWhen this connection was first created. Format is RFC 3339 timestamp.J\x16\"2023-01-15T14:30:00Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ncreateTime\x12\xb1\x01\n\x0bupdate_time\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.TimestampBt\x92\x41_2EWhen this connection was last modified. Format is RFC 3339 timestamp.J\x16\"2023-02-20T09:15:30Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\nupdateTime\x12\xb3\x01\n\x0boidc_config\x18\x12 \x01(\x0b\x32-.scalekit.v1.connections.OIDCConnectionConfigBa\x92\x41^2\\Configuration details for OpenID Connect (OIDC) connections. Present only when type is OIDC.H\x00R\noidcConfig\x12\xaa\x01\n\x0bsaml_config\x18\x13 \x01(\x0b\x32\x35.scalekit.v1.connections.SAMLConnectionConfigResponseBP\x92\x41M2KConfiguration details for SAML connections. Present only when type is SAML.H\x00R\nsamlConfig\x12\xa7\x01\n\x0coauth_config\x18\x14 \x01(\x0b\x32..scalekit.v1.connections.OAuthConnectionConfigBR\x92\x41O2MConfiguration details for OAuth connections. Present only when type is OAUTH.H\x00R\x0boauthConfig\x12\xbf\x01\n\x13passwordless_config\x18\x16 \x01(\x0b\x32+.scalekit.v1.connections.PasswordLessConfigB_\x92\x41\\2ZConfiguration details for Magic Link authentication. Present only when type is MAGIC_LINK.H\x00R\x12passwordlessConfig\x12\xc0\x01\n\rstatic_config\x18\x1a \x01(\x0b\x32).scalekit.v1.connections.StaticAuthConfigBn\x92\x41k2iStatic configuration for custom connections. Present only when type is BASIC, BEARER, API_KEY, or custom.H\x00R\x0cstaticConfig\x12\xb1\x01\n\x0fwebauthn_config\x18\x1b \x01(\x0b\x32-.scalekit.v1.connections.WebAuthConfigurationBW\x92\x41T2RConfiguration details for WebAuthn (passkeys). Present only when type is WEBAUTHN.H\x00R\x0ewebauthnConfig\x12}\n\x06key_id\x18\x19 \x01(\tBa\x92\x41^2\\Alternative identifier for this connection, typically used in frontend applications or URLs.H\x02R\x05keyId\x88\x01\x01\x12u\n\x0cprovider_key\x18\x17 \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x12\xaa\x01\n\x07\x64omains\x18\x18 \x03(\x0b\x32\x1b.scalekit.v1.domains.DomainBs\x92\x41p2SDomain associated with this connection, used for domain-based authentication flows.J\x19[{\"name\": \"example.com\"}]R\x07\x64omains\x1a\x43\n\x15\x41ttributeMappingEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\n\n\x08settingsB\x12\n\x10_organization_idB\t\n\x07_key_idJ\x04\x08\r\x10\x0f\"w\n\x18\x43reateConnectionResponse\x12[\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\x16\x92\x41\x13\x32\x11\x43onnection DetailR\nconnection\"\xa8\x02\n\"UpdateEnvironmentConnectionRequest\x12~\n\rconnection_id\x18\x01 \x01(\tBY\x92\x41M2+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xca>\x05\xfa\x02\x02id\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\x12\x81\x01\n\nconnection\x18\x03 \x01(\x0b\x32).scalekit.v1.connections.UpdateConnectionB6\x92\x41-2#Connection properties to be updated\xca>\x05\xfa\x02\x02id\xbaH\x03\xc8\x01\x01R\nconnection\"\xce\x03\n\x17UpdateConnectionRequest\x12q\n\x0forganization_id\x18\x01 \x01(\tBH\x92\x41<2#Organization ID for the Connection.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\x61\n\x02id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02id\x12\xd6\x01\n\nconnection\x18\x04 \x01(\x0b\x32).scalekit.v1.connections.UpdateConnectionB\x8a\x01\x92\x41-2#Connection properties to be updated\xca>\x05\xfa\x02\x02id\xbaHW\xba\x01Q\x12\x36OAUTH, PASSWORDLESS and WEBAUTHN are not supported yet\x1a\x17!(this.type in [4,5,9])\xc8\x01\x01R\nconnectionJ\x04\x08\x02\x10\x03\"\xca\x11\n\x10UpdateConnection\x12w\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderB.\x92\x41#2\x17SSO Connection ProviderJ\x08\"CUSTOM\"\xbaH\x05\x82\x01\x02\x10\x01R\x08provider\x12r\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB5\x92\x41*2 Connection Protocol OIDC / SAML J\x06\"OIDC\"\xbaH\x05\x82\x01\x02\x10\x01R\x04type\x12\xae\x01\n\rdebug_enabled\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBm\x92\x41j2bDebug mode for the connection. Debug would allow non HTTPS endpoint to be used with the connectionJ\x04trueR\x0c\x64\x65\x62ugEnabled\x12\x8d\x01\n\x0fui_button_title\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueBG\x92\x41\x35\x32!Display name for the Login ButtonJ\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12~\n\x12\x63onfiguration_type\x18\x0b \x01(\x0e\x32*.scalekit.v1.connections.ConfigurationTypeB#\x92\x41 2\x14\x43onfiguration Type. J\x08\"MANUAL\"R\x11\x63onfigurationType\x12\x9d\x01\n\x11\x61ttribute_mapping\x18\x0f \x03(\x0b\x32?.scalekit.v1.connections.UpdateConnection.AttributeMappingEntryB/\x92\x41\x13\x32\x11\x41ttribute Mapping\xbaH\x16\x9a\x01\x13\x10\x1e\"\x06r\x04\x10\x01\x18\x64*\x07r\x05\x10\x01\x18\x80\x02R\x10\x61ttributeMapping\x12\x83\x01\n\x0boidc_config\x18\x10 \x01(\x0b\x32-.scalekit.v1.connections.OIDCConnectionConfigB1\x92\x41.2,OIDC Configuration if ConnectionType == OIDCH\x00R\noidcConfig\x12\x8a\x01\n\x0bsaml_config\x18\x11 \x01(\x0b\x32\x34.scalekit.v1.connections.SAMLConnectionConfigRequestB1\x92\x41.2,SAML Configuration if ConnectionType == SAMLH\x00R\nsamlConfig\x12\x88\x01\n\x0coauth_config\x18\x12 \x01(\x0b\x32..scalekit.v1.connections.OAuthConnectionConfigB3\x92\x41\x30\x32.OAuth Configuration if ConnectionType == OAUTHH\x00R\x0boauthConfig\x12\x9d\x01\n\x13passwordless_config\x18\x14 \x01(\x0b\x32+.scalekit.v1.connections.PasswordLessConfigB=\x92\x41:28Magic Link Configuration if ConnectionType == MAGIC_LINKH\x00R\x12passwordlessConfig\x12P\n\rstatic_config\x18\x17 \x01(\x0b\x32).scalekit.v1.connections.StaticAuthConfigH\x00R\x0cstaticConfig\x12\xb1\x01\n\x0fwebauthn_config\x18\x18 \x01(\x0b\x32-.scalekit.v1.connections.WebAuthConfigurationBW\x92\x41T2RConfiguration details for WebAuthn (passkeys). Present only when type is WEBAUTHN.H\x00R\x0ewebauthnConfig\x12%\n\x06key_id\x18\x16 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18 H\x01R\x05keyId\x88\x01\x01\x12u\n\x0cprovider_key\x18\x15 \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x1a\x43\n\x15\x41ttributeMappingEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01:\x8b\x02\xbaH\x87\x02\x1aT\x12$provider or provider_key is required\x1a,has(this.provider_key) || this.provider != 0\x1a`\x12\x1einvalid value for provider_key\x1a>this.provider == 15 ? this.provider_key in [\'SCALEKIT\'] : true\x1aM\x12\x18invalid value for key_id\x1a\x31this.type == 9 ? this.key_id == \'WEBAUTHN\' : trueB\n\n\x08settingsB\t\n\x07_key_idJ\x04\x08\x01\x10\x02J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06J\x04\x08\t\x10\x0bJ\x04\x08\x0c\x10\x0f\"\x80\x01\n\x18UpdateConnectionResponse\x12\x64\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\x1f\x92\x41\x1c\x32\x1aUpdated Connection detailsR\nconnection\"\x9c\x01\n\"DeleteEnvironmentConnectionRequest\x12v\n\rconnection_id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\xf5\x01\n\x17\x44\x65leteConnectionRequest\x12q\n\x0forganization_id\x18\x01 \x01(\tBH\x92\x41<2#Organization ID for the Connection.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\x61\n\x02id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\x92\x01\n\x1fGetEnvironmentConnectionRequest\x12o\n\rconnection_id\x18\x01 \x01(\tBJ\x92\x41>2$Unique identifier for the ConnectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\xfc\x02\n\x14GetConnectionRequest\x12\xba\x01\n\x0forganization_id\x18\x01 \x01(\tB\x90\x01\x92\x41\x83\x01\x32jOrganization identifier (required). Specifies which organization owns the connection you want to retrieve.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\xa0\x01\n\x02id\x18\x03 \x01(\tB\x8f\x01\x92\x41\x82\x01\x32hConnection identifier (required). Specifies which specific connection to retrieve from the organization.J\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\x9a\x02\n\x15GetConnectionResponse\x12\x80\x02\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\xba\x01\x92\x41\xb6\x01\x32\xb3\x01\x43omplete connection details including provider configuration, protocol settings, status, and all metadata. Contains everything needed to understand the connection\'s current state.R\nconnection\"\x96\x04\n\x16ListConnectionsRequest\x12\x80\x01\n\x0forganization_id\x18\x01 \x01(\tBR\x92\x41\x46\x32-Filter connections by organization identifierJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12\x7f\n\x06\x64omain\x18\x03 \x01(\tBb\x92\x41V2CFilter connections by email domain associated with the organizationJ\x0f\"hero-saas.app\"\xbaH\x06r\x04\x10\x01\x18 H\x01R\x06\x64omain\x88\x01\x01\x12\xc6\x01\n\x07include\x18\x04 \x01(\tB\xa6\x01\x92\x41\xa2\x01\x32\x9f\x01\x46ilter connections by status. Use \'all\' to include all connections regardless of status. Default behavior shows only active (completed and enabled) connectionsH\x02R\x07include\x88\x01\x01\x42\x12\n\x10_organization_idB\t\n\x07_domainB\n\n\x08_includeJ\x04\x08\x02\x10\x03\"\x9d\x01\n\x17ListConnectionsResponse\x12\x81\x01\n\x0b\x63onnections\x18\x01 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB6\x92\x41\x33\x32\x31List of connections matching the request criteriaR\x0b\x63onnections\"\xfa\x0b\n\x0eListConnection\x12Q\n\x02id\x18\x01 \x01(\tBA\x92\x41>2#Unique identifier of the connectionJ\x17\"conn_2123312131125533\"R\x02id\x12\x8d\x01\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderBD\x92\x41\x41\x32\x35Identity provider type (e.g., OKTA, Google, Azure AD)J\x08\"CUSTOM\"R\x08provider\x12x\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB;\x92\x41\x38\x32.Authentication protocol used by the connectionJ\x06\"OIDC\"R\x04type\x12\x88\x01\n\x06status\x18\x04 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusBE\x92\x41?2.Current configuration status of the connectionJ\r\"IN_PROGRESS\"\xe0\x41\x03R\x06status\x12g\n\x07\x65nabled\x18\x05 \x01(\x08\x42M\x92\x41J2AWhether the connection is currently active for organization usersJ\x05\x66\x61lseR\x07\x65nabled\x12\x85\x01\n\x0forganization_id\x18\x06 \x01(\tB\\\x92\x41Y2?Unique identifier of the organization that owns this connectionJ\x16\"org_2123312131125533\"R\x0eorganizationId\x12\x88\x01\n\x0fui_button_title\x18\x07 \x01(\tB`\x92\x41N2:Text displayed on the SSO login button for this connectionJ\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12t\n\x07\x64omains\x18\x08 \x03(\tBZ\x92\x41W2/List of domains configured with this connectionJ$[\"yourapp.com\", \"yourworkspace.com\"]R\x07\x64omains\x12q\n\x11organization_name\x18\t \x01(\tBD\x92\x41\x41\x32*Name of the organization of the connectionJ\x13\"Your Organization\"R\x10organizationName\x12u\n\x0cprovider_key\x18\n \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x12\x90\x01\n\x06key_id\x18\x0b \x01(\tBy\x92\x41v2[Alternative identifier for this connection, typically used in frontend applications or URLsJ\x17\"conn_2123312131125533\"R\x05keyId\x12\x90\x01\n\ncreated_at\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.TimestampBU\x92\x41@2&When this connection was first createdJ\x16\"2023-01-15T14:30:00Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\tcreatedAt\"\xcf\x02\n\"ListOrganizationConnectionsRequest\x12\x80\x01\n\tpage_size\x18\x01 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x02 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\x97\x02\n#ListOrganizationConnectionsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12&\n\x0fprev_page_token\x18\x03 \x01(\tR\rprevPageToken\x12\x80\x01\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB5\x92\x41\x32\x32\x30List of connections matching the filter criteriaR\x0b\x63onnections\"\xa2\x07\n$SearchOrganizationConnectionsRequest\x12l\n\x05query\x18\x01 \x01(\tBQ\x92\x41G2-Search query Connection ID or Organization IDJ\x16\"conn_121312434123312\"\xbaH\x04r\x02\x18\x64H\x00R\x05query\x88\x01\x01\x12@\n\x08provider\x18\x02 \x01(\tB\x1f\x92\x41\x1c\x32\x12\x46ilter by providerJ\x06\"OKTA\"H\x01R\x08provider\x88\x01\x01\x12}\n\x06status\x18\x03 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusB5\x92\x41*2\x1b\x46ilter by connection statusJ\x0b\"COMPLETED\"\xbaH\x05\x82\x01\x02\x10\x01H\x02R\x06status\x88\x01\x01\x12\x8c\x01\n\x0f\x63onnection_type\x18\x04 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB5\x92\x41*2\x1b\x46ilter by connection statusJ\x0b\"COMPLETED\"\xbaH\x05\x82\x01\x02\x10\x01H\x03R\x0e\x63onnectionType\x88\x01\x01\x12O\n\x07\x65nabled\x18\x07 \x01(\x08\x42\x30\x92\x41-2#Filter by connection enabled statusJ\x06\"true\"H\x04R\x07\x65nabled\x88\x01\x01\x12\x80\x01\n\tpage_size\x18\x05 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x06 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageTokenB\x08\n\x06_queryB\x0b\n\t_providerB\t\n\x07_statusB\x12\n\x10_connection_typeB\n\n\x08_enabled\"\x99\x02\n%SearchOrganizationConnectionsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12&\n\x0fprev_page_token\x18\x03 \x01(\tR\rprevPageToken\x12\x80\x01\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB5\x92\x41\x32\x32\x30List of connections matching the filter criteriaR\x0b\x63onnections\"\x9c\x01\n\"ToggleEnvironmentConnectionRequest\x12v\n\rconnection_id\x18\x02 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\x9e\x02\n\x17ToggleConnectionRequest\x12\x92\x01\n\x0forganization_id\x18\x01 \x01(\tBi\x92\x41]2DUnique identifier of the organization associated with the connectionJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12h\n\x02id\x18\x03 \x01(\tBX\x92\x41L22Unique identifier for the connection to be toggledJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\xbc\x02\n\x18ToggleConnectionResponse\x12\xa9\x01\n\x07\x65nabled\x18\x01 \x01(\x08\x42\x8e\x01\x92\x41\x8a\x01\x32\x81\x01\x43urrent state of the connection after the operation. True means the connection is now enabled and can be used for authentication.J\x04trueR\x07\x65nabled\x12\x62\n\rerror_message\x18\x02 \x01(\tB8\x92\x41\x35\x32$Error message if the operation failsJ\r\"placeholder\"H\x00R\x0c\x65rrorMessage\x88\x01\x01\x42\x10\n\x0e_error_message\"\xa0\x12\n\x14OIDCConnectionConfig\x12j\n\x06issuer\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB4\x92\x41\x31\x32\nIssuer URLJ#\"https://youridp.com/service/oauth\"R\x06issuer\x12\xaa\x01\n\x12\x64iscovery_endpoint\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB]\x92\x41Z2\x12\x44iscovery EndpointJD\"https://youridp.com/service/oauth/.well-known/openid-configuration\"R\x11\x64iscoveryEndpoint\x12\x84\x01\n\rauthorize_uri\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValueBA\x92\x41>2\rAuthorize URIJ-\"https://youridp.com/service/oauth/authorize\"R\x0c\x61uthorizeUri\x12t\n\ttoken_uri\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueB9\x92\x41\x36\x32\tToken URIJ)\"https://youridp.com/service/oauth/token\"R\x08tokenUri\x12\x82\x01\n\ruser_info_uri\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB@\x92\x41=2\rUser Info URIJ,\"https://youridp.com/service/oauth/userinfo\"R\x0buserInfoUri\x12p\n\x08jwks_uri\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValueB7\x92\x41\x34\x32\x08JWKS URIJ(\"https://youridp.com/service/oauth/jwks\"R\x07jwksUri\x12\\\n\tclient_id\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB!\x92\x41\x1e\x32\tClient IDJ\x11\"oauth_client_id\"R\x08\x63lientId\x12l\n\rclient_secret\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB)\x92\x41&2\rClient SecretJ\x15\"oauth_client_secret\"R\x0c\x63lientSecret\x12\x63\n\x06scopes\x18\n \x03(\x0e\x32\".scalekit.v1.connections.OIDCScopeB\'\x92\x41$2\x0bOIDC ScopesJ\x15[\"openid\", \"profile\"]R\x06scopes\x12r\n\x0ftoken_auth_type\x18\x0b \x01(\x0e\x32&.scalekit.v1.connections.TokenAuthTypeB\"\x92\x41\x1f\x32\x0fToken Auth TypeJ\x0c\"URL_PARAMS\"R\rtokenAuthType\x12j\n\x0credirect_uri\x18\x0c \x01(\tBG\x92\x41\x44\x32\x0cRedirect URIJ4\"https://yourapp.com/sso/v1/oidc/conn_1234/callback\"R\x0bredirectUri\x12V\n\x0cpkce_enabled\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x17\x92\x41\x14\x32\x0cPKCE EnabledJ\x04trueR\x0bpkceEnabled\x12h\n\x13idp_logout_required\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1c\x92\x41\x19\x32\x11\x45nable IDP logoutJ\x04trueR\x11idpLogoutRequired\x12\xb4\x01\n\x18post_logout_redirect_uri\x18\x0f \x01(\x0b\x32\x1c.google.protobuf.StringValueB]\x92\x41W2\x18post logout redirect uriJ;\"https://yourapp.com/sso/v1/oidc/conn_1234/logout/callback\"\xe0\x41\x03R\x15postLogoutRedirectUri\x12\xea\x01\n\x1f\x62\x61\x63kchannel_logout_redirect_uri\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x84\x01\x92\x41~2\"https://yourapp.com/sso/v1/oidc/conn_1234/backchannel-logout\"\xe0\x41\x03R\x1c\x62\x61\x63kchannelLogoutRedirectUri\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\x12\xba\x01\n!jit_provisioning_with_sso_enabled\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBT\x92\x41Q2IIndicates if Just In Time user provisioning is enabled for the connectionJ\x04trueR\x1djitProvisioningWithSsoEnabled\"\xbe\x0b\n\x15OAuthConnectionConfig\x12\x84\x01\n\rauthorize_uri\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValueBA\x92\x41>2\rAuthorize URIJ-\"https://youridp.com/service/oauth/authorize\"R\x0c\x61uthorizeUri\x12t\n\ttoken_uri\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueB9\x92\x41\x36\x32\tToken URIJ)\"https://youridp.com/service/oauth/token\"R\x08tokenUri\x12\x82\x01\n\ruser_info_uri\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB@\x92\x41=2\rUser Info URIJ,\"https://youridp.com/service/oauth/userinfo\"R\x0buserInfoUri\x12\\\n\tclient_id\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB!\x92\x41\x1e\x32\tClient IDJ\x11\"oauth_client_id\"R\x08\x63lientId\x12l\n\rclient_secret\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB)\x92\x41&2\rClient SecretJ\x15\"oauth_client_secret\"R\x0c\x63lientSecret\x12?\n\x06scopes\x18\n \x03(\tB\'\x92\x41$2\x0bOIDC ScopesJ\x15[\"openid\", \"profile\"]R\x06scopes\x12\x62\n\x0credirect_uri\x18\x0c \x01(\tB?\x92\x41<2\x0cRedirect URIJ,\"https://yourapp.com/service/oauth/redirect\"R\x0bredirectUri\x12V\n\x0cpkce_enabled\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x17\x92\x41\x14\x32\x0cPKCE EnabledJ\x04trueR\x0bpkceEnabled\x12V\n\x06prompt\x18\x0e \x01(\x0b\x32\x1c.google.protobuf.StringValueB \x92\x41\x1d\x32\x13Prompt for the userJ\x06\"none\"R\x06prompt\x12m\n\x12use_platform_creds\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueB#\x92\x41 2\x18Use Scalekit credentialsJ\x04trueR\x10usePlatformCreds\x12Z\n\x0b\x61\x63\x63\x65ss_type\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1b\x92\x41\x18\x32\x0b\x41\x63\x63\x65ss TypeJ\t\"offline\"R\naccessType\x12n\n\x11\x63ustom_scope_name\x18\x11 \x01(\x0b\x32\x1c.google.protobuf.StringValueB$\x92\x41!2\x11\x43ustom Scope NameJ\x0c\"user_scope\"R\x0f\x63ustomScopeName\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\"\xf4\x07\n\x12PasswordLessConfig\x12]\n\x04type\x18\x01 \x01(\x0e\x32).scalekit.v1.connections.PasswordlessTypeB\x1e\x92\x41\x1b\x32\x11Passwordless TypeJ\x06\"LINK\"R\x04type\x12W\n\tfrequency\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x16\x92\x41\x13\x32\x0eLink FrequencyJ\x01\x31H\x00R\tfrequency\x88\x01\x01\x12\x61\n\x08validity\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\"\x92\x41\x1f\x32\x18Link Validity in SecondsJ\x03\x36\x30\x30H\x01R\x08validity\x88\x01\x01\x12\x86\x01\n\x1b\x65nforce_same_browser_origin\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB&\x92\x41#2\x1b\x45nforce Same Browser OriginJ\x04trueH\x02R\x18\x65nforceSameBrowserOrigin\x88\x01\x01\x12t\n\x15\x63ode_challenge_length\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x1d\x92\x41\x1a\x32\x15\x43ode Challenge LengthJ\x01\x36H\x03R\x13\x63odeChallengeLength\x88\x01\x01\x12\x84\x01\n\x13\x63ode_challenge_type\x18\x06 \x01(\x0e\x32*.scalekit.v1.connections.CodeChallengeTypeB#\x92\x41 2\x13\x43ode Challenge TypeJ\t\"NUMERIC\"H\x04R\x11\x63odeChallengeType\x88\x01\x01\x12\x9d\x01\n-regenerate_passwordless_credentials_on_resend\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1a\x92\x41\x17\x32\x0fRegenerate the J\x04trueH\x05R)regeneratePasswordlessCredentialsOnResend\x88\x01\x01\x42\x0c\n\n_frequencyB\x0b\n\t_validityB\x1e\n\x1c_enforce_same_browser_originB\x18\n\x16_code_challenge_lengthB\x16\n\x14_code_challenge_typeB0\n._regenerate_passwordless_credentials_on_resend\"P\n\x10StaticAuthConfig\x12<\n\rstatic_config\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x0cstaticConfig\"\xc4\"\n\x14WebAuthConfiguration\x12@\n\x02rp\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connections.WebAuthConfiguration.RpR\x02rp\x12[\n\x0b\x61ttestation\x18\x02 \x01(\x0b\x32\x39.scalekit.v1.connections.WebAuthConfiguration.AttestationR\x0b\x61ttestation\x12\x64\n\x0e\x61uthenticators\x18\x03 \x01(\x0b\x32<.scalekit.v1.connections.WebAuthConfiguration.AuthenticatorsR\x0e\x61uthenticators\x12}\n\x17\x61uthenticator_selection\x18\x04 \x01(\x0b\x32\x44.scalekit.v1.connections.WebAuthConfiguration.AuthenticatorSelectionR\x16\x61uthenticatorSelection\x12O\n\x07timeout\x18\x05 \x01(\x0b\x32\x35.scalekit.v1.connections.WebAuthConfiguration.TimeoutR\x07timeout\x12\x64\n\x18\x65nable_auto_registration\x18\x06 \x01(\x08\x42*\x92\x41\'2%Enable auto registration for WebAuthnR\x16\x65nableAutoRegistration\x12X\n\x13show_passkey_button\x18\x07 \x01(\x08\x42(\x92\x41%2#Show passkey button on login screenR\x11showPasskeyButton\x12g\n\x18\x65nable_conditional_login\x18\x08 \x01(\x08\x42-\x92\x41*2(Allow autofill of passkeys in login pageR\x16\x65nableConditionalLogin\x1aH\n\x02Rp\x12\x1c\n\x03ids\x18\x01 \x03(\tB\n\xbaH\x07\x92\x01\x04\x08\x01\x10\nR\x03ids\x12$\n\x07origins\x18\x02 \x03(\tB\n\xbaH\x07\x92\x01\x04\x08\x01\x10\nR\x07origins\x1a\xc1\x01\n\x0b\x41ttestation\x12p\n\x15\x63onveyance_preference\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1d\xbaH\x1ar\x18R\x04noneR\x08indirectR\x06\x64irectR\x14\x63onveyancePreference\x12@\n\x17\x65nterprise_approved_ids\x18\x02 \x03(\tB\x08\xbaH\x05\x92\x01\x02\x10\x32R\x15\x65nterpriseApprovedIds\x1a\xf0\x13\n\x0e\x41uthenticators\x12\xdb\x02\n\x0evalidate_entry\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x97\x02\x92\x41\x93\x02\x1a\x1a.google.protobuf.BoolValue2\xf4\x01requires that the provided metadata has an entry for the given authenticator to be considered valid. By default an AAGUID which has a zero value should fail validation if validate_entry_permit_zero_aaguid is not provided with the value of true.R\rvalidateEntry\x12\x8f\x02\n!validate_entry_permit_zero_aaguid\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xa8\x01\x92\x41\xa4\x01\x32\xa1\x01is an option that permits a zero\'d AAGUID from an attestation statement to automatically pass metadata validations. Generally helpful to use with validate_entry.R\x1dvalidateEntryPermitZeroAaguid\x12\xc6\x01\n\x10validate_anchors\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x7f\x92\x41|2zwhen set to true enables the validation of the attestation statement against the trust anchor from the metadata statement.R\x0fvalidateAnchors\x12\xbe\x01\n\x0fvalidate_status\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBy\x92\x41v2twhen set to true enables the validation of the attestation statements AAGUID against the desired and undesired listsR\x0evalidateStatus\x12\xe1\x01\n\x19validate_attestation_type\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x88\x01\x92\x41\x84\x01\x32\x81\x01when set to true enables the validation of the attestation statements type against the known types the authenticator can produce.R\x17validateAttestationType\x12\xbb\x04\n\x1c\x64\x65sired_authenticator_status\x18\x06 \x03(\tB\xf8\x03\x92\x41\x9d\x01\x32\x96\x01provides the list of statuses which are considered undesirable for status report validation purposes. Should be used with validate_status set to true.:\x02[]\xbaH\xd3\x02\x92\x01\xcf\x02\x10\n\"\xca\x02r\xc7\x02R\x12NOT_FIDO_CERTIFIEDR\x0e\x46IDO_CERTIFIEDR\x18USER_VERIFICATION_BYPASSR\x1a\x41TTESTATION_KEY_COMPROMISER\x1aUSER_KEY_REMOTE_COMPROMISER\x1cUSER_KEY_PHYSICAL_COMPROMISER\x10UPDATE_AVAILABLER\x07REVOKEDR\x18SELF_ASSERTION_SUBMITTEDR\x11\x46IDO_CERTIFIED_L1R\x15\x46IDO_CERTIFIED_L1plusR\x11\x46IDO_CERTIFIED_L2R\x15\x46IDO_CERTIFIED_L2plusR\x11\x46IDO_CERTIFIED_L3R\x15\x46IDO_CERTIFIED_L3plusR\x1a\x64\x65siredAuthenticatorStatus\x12\xc1\x05\n\x1eundesired_authenticator_status\x18\x07 \x03(\tB\xfa\x04\x92\x41\x9f\x02\x32\x96\x01provides the list of statuses which are considered undesirable for status report validation purposes. Should be used with validate_status set to true.:\x83\x01[\'ATTESTATION_KEY_COMPROMISE\', \'USER_VERIFICATION_BYPASS\', \'USER_KEY_REMOTE_COMPROMISE\', \'USER_KEY_PHYSICAL_COMPROMISE\', \'REVOKED\']\xbaH\xd3\x02\x92\x01\xcf\x02\x10\n\"\xca\x02r\xc7\x02R\x12NOT_FIDO_CERTIFIEDR\x0e\x46IDO_CERTIFIEDR\x18USER_VERIFICATION_BYPASSR\x1a\x41TTESTATION_KEY_COMPROMISER\x1aUSER_KEY_REMOTE_COMPROMISER\x1cUSER_KEY_PHYSICAL_COMPROMISER\x10UPDATE_AVAILABLER\x07REVOKEDR\x18SELF_ASSERTION_SUBMITTEDR\x11\x46IDO_CERTIFIED_L1R\x15\x46IDO_CERTIFIED_L1plusR\x11\x46IDO_CERTIFIED_L2R\x15\x46IDO_CERTIFIED_L2plusR\x11\x46IDO_CERTIFIED_L3R\x15\x46IDO_CERTIFIED_L3plusR\x1cundesiredAuthenticatorStatus\x1a\x86\x02\n\x16\x41uthenticatorSelection\x12r\n\x11user_verification\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\'\xbaH$r\"R\x08requiredR\tpreferredR\x0b\x64iscouragedR\x10userVerification\x12x\n\x18\x61uthenticator_attachment\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1f\xbaH\x1cr\x1aR\x08platformR\x0e\x63ross-platformR\x17\x61uthenticatorAttachment\x1a\xa3\x04\n\x07Timeout\x12x\n\x0cregistration\x18\x01 \x01(\x0b\x32\x19.google.protobuf.DurationB9\x92\x41\'2\x1dRegistration timeout duration:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x0cregistration\x12\xa5\x01\n\x10registration_uvd\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationB_\x92\x41M2CRegistration timeout duration when user verification is discouraged:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x0fregistrationUvd\x12\x63\n\x05login\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationB2\x92\x41 2\x16Login timeout duration:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x05login\x12\x90\x01\n\tlogin_uvd\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationBX\x92\x41\x46\x322\x0fSP Metadata URLJ+\"https://youridp.com/service/saml/metadata\"R\rspMetadataUrl\x12\x8a\x01\n\x10idp_metadata_url\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueBB\x92\x41?2\x10IDP Metadata URLJ+\"https://youridp.com/service/saml/metadata\"R\x0eidpMetadataUrl\x12x\n\ridp_entity_id\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB6\x92\x41\x33\x32\rIDP Entity IDJ\"\"https://youridp.com/service/saml\"R\x0bidpEntityId\x12v\n\x0bidp_sso_url\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValueB8\x92\x41\x35\x32\x0bIDP SSO URLJ&\"https://youridp.com/service/saml/sso\"R\tidpSsoUrl\x12i\n\x10idp_certificates\x18\x07 \x03(\x0b\x32\'.scalekit.v1.connections.IDPCertificateB\x15\x92\x41\x12\x32\x10IDP CertificatesR\x0fidpCertificates\x12v\n\x0bidp_slo_url\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB8\x92\x41\x35\x32\x0bIDP SLO URLJ&\"https://youridp.com/service/saml/slo\"R\tidpSloUrl\x12l\n\x0fui_button_title\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB&\x92\x41#2\x0fUI Button TitleJ\x10\"Login with SSO\"R\ruiButtonTitle\x12t\n\x12idp_name_id_format\x18\n \x01(\x0e\x32%.scalekit.v1.connections.NameIdFormatB \x92\x41\x1d\x32\x12IDP Name ID FormatJ\x07\"EMAIL\"R\x0fidpNameIdFormat\x12\x89\x01\n\x17idp_sso_request_binding\x18\x0b \x01(\x0e\x32\'.scalekit.v1.connections.RequestBindingB)\x92\x41&2\x17IDP SSO Request BindingJ\x0b\"HTTP_POST\"R\x14idpSsoRequestBinding\x12\x89\x01\n\x17idp_slo_request_binding\x18\x0c \x01(\x0e\x32\'.scalekit.v1.connections.RequestBindingB)\x92\x41&2\x17IDP SLO Request BindingJ\x0b\"HTTP_POST\"R\x14idpSloRequestBinding\x12\x93\x01\n\x13saml_signing_option\x18\r \x01(\x0e\x32+.scalekit.v1.connections.SAMLSigningOptionsB6\x92\x41\x33\x32\x13SAML Signing OptionJ\x1c\"SAML_ONLY_RESPONSE_SIGNING\"R\x11samlSigningOption\x12{\n\x19\x61llow_idp_initiated_login\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueB$\x92\x41!2\x19\x41llow IDP Initiated LoginJ\x04trueR\x16\x61llowIdpInitiatedLogin\x12S\n\x0b\x66orce_authn\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x16\x92\x41\x13\x32\x0b\x46orce AuthnJ\x04trueR\nforceAuthn\x12\x96\x01\n\x14\x64\x65\x66\x61ult_redirect_uri\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueBF\x92\x41\x43\x32\x14\x44\x65\x66\x61ult Redirect URIJ+\"https://yourapp.com/service/saml/redirect\"R\x12\x64\x65\x66\x61ultRedirectUri\x12k\n\x13\x61ssertion_encrypted\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1e\x92\x41\x1b\x32\x13\x41ssertion EncryptedJ\x04trueR\x12\x61ssertionEncrypted\x12j\n\x13want_request_signed\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1e\x92\x41\x1b\x32\x13Want Request SignedJ\x04trueR\x11wantRequestSigned\x12q\n\x0e\x63\x65rtificate_id\x18\x13 \x01(\x0b\x32\x1c.google.protobuf.StringValueB,\x92\x41)2\x0e\x43\x65rtificate IDJ\x17\"cer_35585423166144613\"R\rcertificateId\x12\x62\n\x10idp_slo_required\x18\x14 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1c\x92\x41\x19\x32\x11\x45nable IDP logoutJ\x04trueR\x0eidpSloRequired\x12\x96\x01\n\nsp_slo_url\x18\x15 \x01(\x0b\x32\x1c.google.protobuf.StringValueBZ\x92\x41T2\x18Service Provider SLO urlJ8\"https://yourapp.com/sso/v1/saml/conn_1234/slo/callback\"\xe0\x41\x03R\x08spSloUrl\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x16 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\x12\xba\x01\n!jit_provisioning_with_sso_enabled\x18\x17 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBT\x92\x41Q2IIndicates if Just In Time user provisioning is enabled for the connectionJ\x04trueR\x1djitProvisioningWithSsoEnabled\"\xbf\x03\n\x0eIDPCertificate\x12\x36\n\x0b\x63\x65rtificate\x18\x01 \x01(\tB\x14\x92\x41\x11\x32\x0fIDP CertificateR\x0b\x63\x65rtificate\x12s\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB6\x92\x41\x33\x32\x19\x43\x65rtificate Creation TimeJ\x16\"2021-09-01T00:00:00Z\"R\ncreateTime\x12q\n\x0b\x65xpiry_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB4\x92\x41\x31\x32\x17\x43\x65rtificate Expiry TimeJ\x16\"2021-09-01T00:00:00Z\"R\nexpiryTime\x12\x38\n\x02id\x18\x04 \x01(\tB(\x92\x41%2\x0e\x43\x65rtificate IDJ\x13\"cert_123123123123\"R\x02id\x12S\n\x06issuer\x18\x05 \x01(\tB;\x92\x41\x38\x32\x12\x43\x65rtificate IssuerJ\"\"https://youridp.com/service/saml\"R\x06issuer\"b\n\x16GetOIDCMetadataRequest\x12H\n\x08metadata\x18\x01 \x01(\x0b\x32,.scalekit.v1.connections.OIDCMetadataRequestR\x08metadata\"9\n\x13OIDCMetadataRequest\x12\"\n\x06issuer\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x06issuer\"\xd7\x01\n\x17GetOIDCMetadataResponse\x12\x16\n\x06issuer\x18\x01 \x01(\tR\x06issuer\x12\x35\n\x16\x61uthorization_endpoint\x18\x02 \x01(\tR\x15\x61uthorizationEndpoint\x12%\n\x0etoken_endpoint\x18\x03 \x01(\tR\rtokenEndpoint\x12+\n\x11userinfo_endpoint\x18\x04 \x01(\tR\x10userinfoEndpoint\x12\x19\n\x08jwks_uri\x18\x05 \x01(\tR\x07jwksUri\"b\n\x16GetSAMLMetadataRequest\x12H\n\x08metadata\x18\x01 \x01(\x0b\x32,.scalekit.v1.connections.SAMLMetadataRequestR\x08metadata\"D\n\x13SAMLMetadataRequest\x12-\n\x0cmetadata_url\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0bmetadataUrl\"\xb4\x02\n\x17GetSAMLMetadataResponse\x12\"\n\ridp_entity_id\x18\x01 \x01(\tR\x0bidpEntityId\x12\x1e\n\x0bidp_sso_url\x18\x02 \x01(\tR\tidpSsoUrl\x12\x1e\n\x0bidp_slo_url\x18\x03 \x01(\tR\tidpSloUrl\x12)\n\x10idp_certificates\x18\x04 \x03(\tR\x0fidpCertificates\x12+\n\x12idp_name_id_format\x18\x05 \x01(\tR\x0fidpNameIdFormat\x12\'\n\x0frequest_binding\x18\x06 \x01(\tR\x0erequestBinding\x12\x34\n\x16want_assertions_signed\x18\x07 \x01(\x08R\x14wantAssertionsSigned\"u\n GetSAMLCertificateDetailsRequest\x12Q\n\x0b\x63\x65rtificate\x18\x01 \x01(\x0b\x32/.scalekit.v1.connections.SAMLCertificateRequestR\x0b\x63\x65rtificate\"5\n\x16SAMLCertificateRequest\x12\x1b\n\x04text\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04text\"\xa5\x01\n!GetSAMLCertificateDetailsResponse\x12\x12\n\x04text\x18\x01 \x01(\tR\x04text\x12\x1b\n\tnot_after\x18\x02 \x01(\x03R\x08notAfter\x12\x1d\n\nnot_before\x18\x03 \x01(\x03R\tnotBefore\x12\x18\n\x07subject\x18\x04 \x01(\tR\x07subject\x12\x16\n\x06issuer\x18\x05 \x01(\tR\x06issuer\"\x86\x01\n\x1eGetConnectionTestResultRequest\x12,\n\rconnection_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0c\x63onnectionId\x12\x36\n\x0ftest_request_id\x18\x02 \x01(\tB\x0e\xbaH\x0br\t\x10\x01:\x05test_R\rtestRequestId\"\xbd\x02\n\x1fGetConnectionTestResultResponse\x12\x41\n\x06status\x18\x01 \x01(\x0e\x32).scalekit.v1.connections.TestResultStatusR\x06status\x12 \n\tuser_info\x18\x02 \x01(\tH\x00R\x08userInfo\x88\x01\x01\x12\x19\n\x05\x65rror\x18\x03 \x01(\tH\x01R\x05\x65rror\x88\x01\x01\x12\x30\n\x11\x65rror_description\x18\x04 \x01(\tH\x02R\x10\x65rrorDescription\x88\x01\x01\x12(\n\rerror_details\x18\x05 \x01(\tH\x03R\x0c\x65rrorDetails\x88\x01\x01\x42\x0c\n\n_user_infoB\x08\n\x06_errorB\x14\n\x12_error_descriptionB\x10\n\x0e_error_details\"\x1a\n\x18PasswordConnectionConfig\"9\n\x05\x46lags\x12\x19\n\x08is_login\x18\x01 \x01(\x08R\x07isLogin\x12\x15\n\x06is_app\x18\x02 \x01(\x08R\x05isApp\"\xaa\x03\n\x19ListAppConnectionsRequest\x12\x80\x01\n\tpage_size\x18\x01 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x02 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\x12U\n\x08provider\x18\x03 \x01(\tB4\x92\x41(2\x1e\x46ilter connections by providerJ\x06\"OKTA\"\xbaH\x06r\x04\x10\x01\x18\x32H\x00R\x08provider\x88\x01\x01\x42\x0b\n\t_provider\"\xea\x03\n\x1aListAppConnectionsResponse\x12\x81\x01\n\x0b\x63onnections\x18\x01 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB6\x92\x41\x33\x32\x31List of connections matching the request criteriaR\x0b\x63onnections\x12o\n\x0fnext_page_token\x18\x02 \x01(\tBG\x92\x41\x44\x32\"Token for the next page of resultsJ\x1e\"eyJwYWdlIjoyLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12s\n\x0fprev_page_token\x18\x03 \x01(\tBK\x92\x41H2&Token for the previous page of resultsJ\x1e\"eyJwYWdlIjoyLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12\x62\n\ntotal_size\x18\x04 \x01(\rBC\x92\x41@29Total number of connections matching the request criteriaJ\x03\x31\x30\x30R\ttotalSize*W\n\x11\x43odeChallengeType\x12#\n\x1f\x43ODE_CHALLENGE_TYPE_UNSPECIFIED\x10\x00\x12\x0b\n\x07NUMERIC\x10\x01\x12\x10\n\x0c\x41LPHANUMERIC\x10\x02*R\n\x11\x43onfigurationType\x12\"\n\x1e\x43ONFIGURATION_TYPE_UNSPECIFIED\x10\x00\x12\r\n\tDISCOVERY\x10\x01\x12\n\n\x06MANUAL\x10\x02*a\n\x0cNameIdFormat\x12\x16\n\x12NAME_ID_FORMAT_NIL\x10\x00\x12\x0f\n\x0bUNSPECIFIED\x10\x01\x12\t\n\x05\x45MAIL\x10\x02\x12\r\n\tTRANSIENT\x10\x03\x12\x0e\n\nPERSISTENT\x10\x04*U\n\x10PasswordlessType\x12 \n\x1cPasswordlessType_UNSPECIFIED\x10\x00\x12\x08\n\x04LINK\x10\x01\x12\x07\n\x03OTP\x10\x02\x12\x0c\n\x08LINK_OTP\x10\x03*9\n\x10TestResultStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0b\n\x07SUCCESS\x10\x01\x12\x0b\n\x07\x46\x41ILURE\x10\x02*\xd8\x01\n\x12SAMLSigningOptions\x12$\n SAML_SIGNING_OPTIONS_UNSPECIFIED\x10\x00\x12\x0e\n\nNO_SIGNING\x10\x01\x12\x1e\n\x1aSAML_ONLY_RESPONSE_SIGNING\x10\x02\x12\x1f\n\x1bSAML_ONLY_ASSERTION_SIGNING\x10\x03\x12#\n\x1fSAML_RESPONSE_ASSERTION_SIGNING\x10\x04\x12&\n\"SAML_RESPONSE_OR_ASSERTION_SIGNING\x10\x05*S\n\x0eRequestBinding\x12\x1f\n\x1bREQUEST_BINDING_UNSPECIFIED\x10\x00\x12\r\n\tHTTP_POST\x10\x01\x12\x11\n\rHTTP_REDIRECT\x10\x02*P\n\rTokenAuthType\x12\x1f\n\x1bTOKEN_AUTH_TYPE_UNSPECIFIED\x10\x00\x12\x0e\n\nURL_PARAMS\x10\x01\x12\x0e\n\nBASIC_AUTH\x10\x02*c\n\tOIDCScope\x12\x1a\n\x16OIDC_SCOPE_UNSPECIFIED\x10\x00\x12\n\n\x06openid\x10\x01\x12\x0b\n\x07profile\x10\x02\x12\t\n\x05\x65mail\x10\x03\x12\x0b\n\x07\x61\x64\x64ress\x10\x04\x12\t\n\x05phone\x10\x05*\x8e\x01\n\x0e\x43onnectionType\x12\x0b\n\x07INVALID\x10\x00\x12\x08\n\x04OIDC\x10\x01\x12\x08\n\x04SAML\x10\x02\x12\x0c\n\x08PASSWORD\x10\x03\x12\t\n\x05OAUTH\x10\x04\x12\x10\n\x0cPASSWORDLESS\x10\x05\x12\t\n\x05\x42\x41SIC\x10\x06\x12\n\n\x06\x42\x45\x41RER\x10\x07\x12\x0b\n\x07\x41PI_KEY\x10\x08\x12\x0c\n\x08WEBAUTHN\x10\t*`\n\x10\x43onnectionStatus\x12!\n\x1d\x43ONNECTION_STATUS_UNSPECIFIED\x10\x00\x12\t\n\x05\x44RAFT\x10\x01\x12\x0f\n\x0bIN_PROGRESS\x10\x02\x12\r\n\tCOMPLETED\x10\x03*\x98\x02\n\x12\x43onnectionProvider\x12#\n\x1f\x43ONNECTION_PROVIDER_UNSPECIFIED\x10\x00\x12\x08\n\x04OKTA\x10\x01\x12\n\n\x06GOOGLE\x10\x02\x12\x10\n\x0cMICROSOFT_AD\x10\x03\x12\t\n\x05\x41UTH0\x10\x04\x12\x0c\n\x08ONELOGIN\x10\x05\x12\x11\n\rPING_IDENTITY\x10\x06\x12\r\n\tJUMPCLOUD\x10\x07\x12\n\n\x06\x43USTOM\x10\x08\x12\n\n\x06GITHUB\x10\t\x12\n\n\x06GITLAB\x10\n\x12\x0c\n\x08LINKEDIN\x10\x0b\x12\x0e\n\nSALESFORCE\x10\x0c\x12\r\n\tMICROSOFT\x10\r\x12\x11\n\rIDP_SIMULATOR\x10\x0e\x12\x0c\n\x08SCALEKIT\x10\x0f\x12\x08\n\x04\x41\x44\x46S\x10\x10\x32\x92>\n\x11\x43onnectionService\x12\x91\x03\n\x1b\x43reateEnvironmentConnection\x12;.scalekit.v1.connections.CreateEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\"\x81\x02\x92\x41\xc1\x01\n\x0b\x43onnections\x12\x17\x43reate a new connection\x1a\x38\x45stablish a new connection for the specified environmentJ_\n\x03\x32\x30\x31\x12X\n\x1f\x43onnection created successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\"\x13/api/v1/connections:\nconnection\x12\xb3\x03\n\x10\x43reateConnection\x12\x30.scalekit.v1.connections.CreateConnectionRequest\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\"\xb9\x02\x92\x41\xc6\x01\n\x0b\x43onnections\x12\x17\x43reate a new connection\x1a=Establish a new SSO connection for the specified organizationJ_\n\x03\x32\x30\x31\x12X\n\x1f\x43onnection created successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x41\"3/api/v1/organizations/{organization_id}/connections:\nconnection\x12\xcd\x04\n\x19\x41ssignDomainsToConnection\x12\x39.scalekit.v1.connections.AssignDomainsToConnectionRequest\x1a:.scalekit.v1.connections.AssignDomainsToConnectionResponse\"\xb8\x03\x92\x41\xb6\x02\n\x0b\x43onnections\x12\x1e\x41ssign domains to a connection\x1a\x9e\x01\x41ssigns one or more domains to a specific connection within an organization. This allows the connection to be used for authentication on the specified domainsJf\n\x03\x32\x30\x30\x12_\n\x1d\x44omains assigned successfully\x12>\n<\x1a:.scalekit.v1.connections.AssignDomainsToConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02P\x1aK/api/v1/organizations/{organization_id}/connections/{connection_id}/domains:\x01*\x12\xb2\x03\n\x18GetEnvironmentConnection\x12\x38.scalekit.v1.connections.GetEnvironmentConnectionRequest\x1a..scalekit.v1.connections.GetConnectionResponse\"\xab\x02\x92\x41\xe7\x01\n\x0b\x43onnections\x12\x1bRetrieve connection details\x1aSObtain detailed information about a specific connection using its unique identifierJf\n\x03\x32\x30\x30\x12_\n)Successfully retrieved connection details\x12\x32\n0\x1a..scalekit.v1.connections.GetConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\x12#/api/v1/connections/{connection_id}\x12\xce\x04\n\rGetConnection\x12-.scalekit.v1.connections.GetConnectionRequest\x1a..scalekit.v1.connections.GetConnectionResponse\"\xdd\x03\x92\x41\x81\x03\n\x0b\x43onnections\x12\x16Get connection details\x1a\xd1\x01Retrieves the complete configuration and status details for a specific connection by its ID within an organization. Returns all connection properties including provider settings, protocols, and current status.J\x85\x01\n\x03\x32\x30\x30\x12~\nHSuccessfully retrieved connection details for the specified organization\x12\x32\n0\x1a..scalekit.v1.connections.GetConnectionResponse\x82\xb5\x18\x14\n\x10\x63onnections_read\x18t\x82\xd3\xe4\x93\x02:\x12\x38/api/v1/organizations/{organization_id}/connections/{id}\x12\xe4\x02\n\x0fListConnections\x12/.scalekit.v1.connections.ListConnectionsRequest\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\"\xed\x01\x92\x41\xb6\x01\n\x0b\x43onnections\x12\x10List connections\x1a\x32Retrieves a list of connections in the environmentJa\n\x03\x32\x30\x30\x12Z\n\"Successfully retrieved connections\x12\x34\n2\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\x82\xb5\x18\x14\n\x10\x63onnections_read\x18t\x82\xd3\xe4\x93\x02\x15\x12\x13/api/v1/connections\x12\xb5\x03\n\x1bListOrganizationConnections\x12;.scalekit.v1.connections.ListOrganizationConnectionsRequest\x1a<.scalekit.v1.connections.ListOrganizationConnectionsResponse\"\x9a\x02\x92\x41\xd6\x01\n\x0b\x43onnections\x12\x1dList organization connections\x1a\x39Retrieves a list of connections for all the organizationsJm\n\x03\x32\x30\x30\x12\x66\n\"Successfully retrieved connections\x12@\n>\x1a<.scalekit.v1.connections.ListOrganizationConnectionsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\x12#/api/v1/organizations/-/connections\x12\xcd\x03\n\x1dSearchOrganizationConnections\x12=.scalekit.v1.connections.SearchOrganizationConnectionsRequest\x1a>.scalekit.v1.connections.SearchOrganizationConnectionsResponse\"\xac\x02\x92\x41\xe1\x01\n\x0b\x43onnections\x12\x1fSearch organization connections\x1a\x44Search with query or filters provided and return list of connectionsJk\n\x03\x32\x30\x30\x12\x64\n\x1eSuccessfully found connections\x12\x42\n@\x1a>.scalekit.v1.connections.SearchOrganizationConnectionsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02,\x12*/api/v1/organizations/-/connections:search\x12\xf1\x02\n\x1bUpdateEnvironmentConnection\x12;.scalekit.v1.connections.UpdateEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\"\xe1\x01\x92\x41\x91\x01\n\x0b\x43onnections\x12\x13Update a connection\x1a\x17Update a SSO ConnectionJT\n\x03\x32\x30\x30\x12M\n\x14Updated Successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\x32#/api/v1/connections/{connection_id}:\nconnection\x12\x94\x03\n\x10UpdateConnection\x12\x30.scalekit.v1.connections.UpdateConnectionRequest\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\"\x9a\x02\x92\x41\xa2\x01\n\x0b\x43onnections\x12$Update a connection for organization\x1a\x17Update a SSO ConnectionJT\n\x03\x32\x30\x30\x12M\n\x14Updated Successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x46\x32\x38/api/v1/organizations/{organization_id}/connections/{id}:\nconnection\x12\x92\x02\n\x1b\x44\x65leteEnvironmentConnection\x12;.scalekit.v1.connections.DeleteEnvironmentConnectionRequest\x1a\x16.google.protobuf.Empty\"\x9d\x01\x92\x41Z\n\x0b\x43onnections\x12\x13\x44\x65lete a connection\x1a\x17\x44\x65lete a SSO ConnectionJ\x1d\n\x03\x32\x30\x30\x12\x16\n\x14\x44\x65leted Successfully\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%*#/api/v1/connections/{connection_id}\x12\xa2\x02\n\x10\x44\x65leteConnection\x12\x30.scalekit.v1.connections.DeleteConnectionRequest\x1a\x16.google.protobuf.Empty\"\xc3\x01\x92\x41k\n\x0b\x43onnections\x12$Delete a connection for organization\x1a\x17\x44\x65lete a SSO ConnectionJ\x1d\n\x03\x32\x30\x30\x12\x16\n\x14\x44\x65leted Successfully\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02:*8/api/v1/organizations/{organization_id}/connections/{id}\x12\xdf\x02\n\x1b\x45nableEnvironmentConnection\x12;.scalekit.v1.connections.ToggleEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xcf\x01\x92\x41\x84\x01\n\x0b\x43onnections\x12\x13\x45nable a connection\x1a\x17\x45nable a SSO ConnectionJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02,2*/api/v1/connections/{connection_id}:enable\x12\xdd\x04\n\x10\x45nableConnection\x12\x30.scalekit.v1.connections.ToggleConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xe3\x03\x92\x41\xff\x02\n\x0b\x43onnections\x12\x1e\x45nable organization connection\x1a\xee\x01\x41\x63tivate an existing connection for the specified organization. When enabled, users can authenticate using this connection. This endpoint changes the connection state from disabled to enabled without modifying other configuration settingsJ_\n\x03\x32\x30\x30\x12X\n\x1f\x43onnection enabled successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\x82\xd3\xe4\x93\x02\x41\x32?/api/v1/organizations/{organization_id}/connections/{id}:enable\x12\xe3\x02\n\x1c\x44isableEnvironmentConnection\x12;.scalekit.v1.connections.ToggleEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xd2\x01\x92\x41\x86\x01\n\x0b\x43onnections\x12\x14\x44isable a connection\x1a\x18\x44isable a SSO ConnectionJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02-2+/api/v1/connections/{connection_id}:disable\x12\xe7\x04\n\x11\x44isableConnection\x12\x30.scalekit.v1.connections.ToggleConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xec\x03\x92\x41\x87\x03\n\x0b\x43onnections\x12\x1f\x44isable organization connection\x1a\xf4\x01\x44\x65\x61\x63tivate an existing connection for the specified organization. When disabled, users cannot authenticate using this connection. This endpoint changes the connection state from enabled to disabled without modifying other configuration settingsJ`\n\x03\x32\x30\x30\x12Y\n Connection disabled successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\x82\xd3\xe4\x93\x02\x42\x32@/api/v1/organizations/{organization_id}/connections/{id}:disable\x12\x80\x03\n\x17GetConnectionTestResult\x12\x37.scalekit.v1.connections.GetConnectionTestResultRequest\x1a\x38.scalekit.v1.connections.GetConnectionTestResultResponse\"\xf1\x01\x92\x41\x8d\x01\n\x0b\x43onnections\x12\x16Test connection result\x1a\x16\x43onnection test resultJN\n\x03\x32\x30\x30\x12G\n\x07Success\x12<\n:\x1a\x38.scalekit.v1.connections.GetConnectionTestResultResponse\x82\xb5\x18\x02\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x45\x12\x43/api/v1/connections/{connection_id}/test-requests/{test_request_id}\x12\xf6\x02\n\x12ListAppConnections\x12\x32.scalekit.v1.connections.ListAppConnectionsRequest\x1a\x33.scalekit.v1.connections.ListAppConnectionsResponse\"\xf6\x01\x92\x41\xbe\x01\n\x0b\x43onnections\x12\x14List App connections\x1a\x36Retrieves a list of app connections in the environmentJa\n\x03\x32\x30\x30\x12Z\n\"Successfully retrieved connections\x12\x34\n2\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\x12\x17/api/v1/connections/app\x1a\x9a\x01\x92\x41\x96\x01\n\x0b\x43onnections\x12\x86\x01Manage enterprise connections for your Scalekit environment. This service provides endpoints for retrieving, and updating connections.B7Z5github.com/scalekit-inc/scalekit/pkg/grpc/connectionsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n)scalekit/v1/connections/connections.proto\x12\x17scalekit.v1.connections\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a\x1fscalekit/v1/auth/webauthn.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/domains/domains.proto\x1a!scalekit/v1/options/options.proto\"\xc4\x01\n AssignDomainsToConnectionRequest\x12;\n\x0forganization_id\x18\x01 \x01(\tB\x12\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\x12\x38\n\rconnection_id\x18\x02 \x01(\tB\x13\xbaH\x10r\x0b\x10\x01\x18 :\x05\x63onn_\xc8\x01\x01R\x0c\x63onnectionId\x12)\n\ndomain_ids\x18\x03 \x03(\tB\n\xbaH\x07\x92\x01\x04\x08\x00\x10\x32R\tdomainIds\"\xe6\x03\n!AssignDomainsToConnectionResponse\x12\xc0\x03\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\xfa\x02\x92\x41\xf6\x02\x32 Connection with assigned domainsJ\xd1\x02{\n \"id\": \"conn_1234567890\",\n \"provider\": \"OKTA\",\n \"type\": \"OIDC\",\n \"status\": \"CONFIGURED\",\n \"enabled\": true,\n \"debug_enabled\": false,\n \"organization_id\": \"org_1234567890\",\n \"ui_button_title\": \"Login with SSO\",\n \"configuration_type\": \"MANUAL\",\n \"test_connection_uri\": \"https://auth.example.com/test-connection/conn_1234567890\"\n}R\nconnection\"\x15\n\x13GetProvidersRequest\"W\n\x14GetProvidersResponse\x12?\n\tproviders\x18\x01 \x03(\x0b\x32!.scalekit.v1.connections.ProviderR\tproviders\"\xf3\x01\n\x08Provider\x12\x35\n\x06key_id\x18\x01 \x01(\tB\x1e\x92\x41\x1b\x32\x0fProvider Key IDJ\x08\"google\"R\x05keyId\x12G\n\x0c\x64isplay_name\x18\x02 \x01(\tB$\x92\x41!2\x15Provider Display NameJ\x08\"Google\"R\x0b\x64isplayName\x12W\n\x0b\x64\x65scription\x18\x03 \x01(\tB0\x92\x41-2\x14Provider DescriptionJ\x15\"Sign In With Google\"H\x00R\x0b\x64\x65scription\x88\x01\x01\x42\x0e\n\x0c_description\"\xae\x02\n\"CreateEnvironmentConnectionRequest\x12Q\n\nconnection\x18\x01 \x01(\x0b\x32).scalekit.v1.connections.CreateConnectionB\x06\xbaH\x03\xc8\x01\x01R\nconnection\x12\xaa\x01\n\x05\x66lags\x18\x02 \x01(\x0b\x32\x1e.scalekit.v1.connections.FlagsBo\x92\x41l2SOptional flags to control connection creation behavior, such as enabling debug modeJ\x15{ \"is_social\": true }H\x00R\x05\x66lags\x88\x01\x01\x42\x08\n\x06_flags\"\xe4\x02\n\x17\x43reateConnectionRequest\x12\x9a\x01\n\x0forganization_id\x18\x01 \x01(\tBq\x92\x41\x65\x32JUnique identifier of the organization for which the connection is created.J\x17\"org_12362474900684814\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\xa5\x01\n\nconnection\x18\x03 \x01(\x0b\x32).scalekit.v1.connections.CreateConnectionBZ\xbaHW\xba\x01Q\x12\x36OAUTH, PASSWORDLESS and WEBAUTHN are not supported yet\x1a\x17!(this.type in [4,5,9])\xc8\x01\x01R\nconnectionJ\x04\x08\x02\x10\x03\"\xf7\x05\n\x10\x43reateConnection\x12\xcb\x01\n\x08provider\x18\x01 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderB\x81\x01\x92\x41v2lIdentity provider service that handles authentication (such as OKTA, Google, Azure AD, or a custom provider)J\x06\"OKTA\"\xbaH\x05\x82\x01\x02\x10\x01R\x08provider\x12\x45\n\x04type\x18\x02 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04type\x12\x98\x01\n\x0cprovider_key\x18\x03 \x01(\tBu\x92\x41r2fKey ID of the identity provider. This is used to identify the specific configuration for the provider.J\x08\"google\"R\x0bproviderKey\x12\x1a\n\x06key_id\x18\x04 \x01(\tH\x00R\x05keyId\x88\x01\x01:\x8b\x02\xbaH\x87\x02\x1aT\x12$provider or provider_key is required\x1a,has(this.provider_key) || this.provider != 0\x1a`\x12\x1einvalid value for provider_key\x1a>this.provider == 15 ? this.provider_key in [\'SCALEKIT\'] : true\x1aM\x12\x18invalid value for key_id\x1a\x31this.type == 9 ? this.key_id == \'WEBAUTHN\' : trueB\t\n\x07_key_id\"\xcb \n\nConnection\x12\x8d\x01\n\x02id\x18\x01 \x01(\tB}\x92\x41z2_Unique identifier for this connection. Used in API calls to reference this specific connection.J\x17\"conn_2123312131125533\"R\x02id\x12\xc2\x01\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderBy\x92\x41v2lIdentity provider service that handles authentication (such as OKTA, Google, Azure AD, or a custom provider)J\x06\"OKTA\"R\x08provider\x12\xb4\x01\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeBw\x92\x41t2jAuthentication protocol used by this connection. Can be OIDC (OpenID Connect), SAML, OAUTH, or MAGIC_LINK.J\x06\"OIDC\"R\x04type\x12\xc6\x01\n\x06status\x18\x04 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusB\x82\x01\x92\x41|2kCurrent configuration status of the connection. Possible values include IN_PROGRESS, CONFIGURED, and ERROR.J\r\"IN_PROGRESS\"\xe0\x41\x03R\x06status\x12\xab\x01\n\x07\x65nabled\x18\x05 \x01(\x08\x42\x90\x01\x92\x41\x8c\x01\x32\x82\x01\x43ontrols whether users can sign in using this connection. When false, the connection exists but cannot be used for authentication.J\x05\x66\x61lseR\x07\x65nabled\x12\xb0\x01\n\rdebug_enabled\x18\x06 \x01(\x08\x42\x8a\x01\x92\x41\x86\x01\x32~Enables testing mode that allows non-HTTPS endpoints. Should only be enabled in development environments, never in production.J\x04trueR\x0c\x64\x65\x62ugEnabled\x12\xc1\x01\n\x0forganization_id\x18\x07 \x01(\tB\x92\x01\x92\x41\x8e\x01\x32tIdentifier of the organization that owns this connection. Connections are typically scoped to a single organization.J\x16\"org_2123312131125533\"H\x01R\x0eorganizationId\x88\x01\x01\x12\xbd\x01\n\x0fui_button_title\x18\x08 \x01(\tB\x94\x01\x92\x41\x81\x01\x32mCustom text shown on the login button in the user interface. Helps users identify which SSO option to select.J\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12\xd5\x01\n\x12\x63onfiguration_type\x18\t \x01(\x0e\x32*.scalekit.v1.connections.ConfigurationTypeBz\x92\x41w2kHow the connection was configured: DISCOVERY (automatic configuration) or MANUAL (administrator configured)J\x08\"MANUAL\"R\x11\x63onfigurationType\x12\xdf\x01\n\x13test_connection_uri\x18\x0c \x01(\tB\xae\x01\x92\x41\xaa\x01\x32\x66URI that can be used to test this connection. Visit this URL to verify the connection works correctly.J@\"https://auth.example.com/test-connection/conn_2123312131125533\"R\x11testConnectionUri\x12\x81\x02\n\x11\x61ttribute_mapping\x18\x0f \x03(\x0b\x32\x39.scalekit.v1.connections.Connection.AttributeMappingEntryB\x98\x01\x92\x41|2zMaps identity provider attributes to user profile fields. For example, {\'email\': \'user.mail\', \'name\': \'user.displayName\'}.\xbaH\x16\x9a\x01\x13\x10\x1e\"\x06r\x04\x10\x01\x18\x64*\x07r\x05\x10\x01\x18\x80\x02R\x10\x61ttributeMapping\x12\xb1\x01\n\x0b\x63reate_time\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.TimestampBt\x92\x41_2EWhen this connection was first created. Format is RFC 3339 timestamp.J\x16\"2023-01-15T14:30:00Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ncreateTime\x12\xb1\x01\n\x0bupdate_time\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.TimestampBt\x92\x41_2EWhen this connection was last modified. Format is RFC 3339 timestamp.J\x16\"2023-02-20T09:15:30Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\nupdateTime\x12\xb3\x01\n\x0boidc_config\x18\x12 \x01(\x0b\x32-.scalekit.v1.connections.OIDCConnectionConfigBa\x92\x41^2\\Configuration details for OpenID Connect (OIDC) connections. Present only when type is OIDC.H\x00R\noidcConfig\x12\xaa\x01\n\x0bsaml_config\x18\x13 \x01(\x0b\x32\x35.scalekit.v1.connections.SAMLConnectionConfigResponseBP\x92\x41M2KConfiguration details for SAML connections. Present only when type is SAML.H\x00R\nsamlConfig\x12\xa7\x01\n\x0coauth_config\x18\x14 \x01(\x0b\x32..scalekit.v1.connections.OAuthConnectionConfigBR\x92\x41O2MConfiguration details for OAuth connections. Present only when type is OAUTH.H\x00R\x0boauthConfig\x12\xbf\x01\n\x13passwordless_config\x18\x16 \x01(\x0b\x32+.scalekit.v1.connections.PasswordLessConfigB_\x92\x41\\2ZConfiguration details for Magic Link authentication. Present only when type is MAGIC_LINK.H\x00R\x12passwordlessConfig\x12\xc0\x01\n\rstatic_config\x18\x1a \x01(\x0b\x32).scalekit.v1.connections.StaticAuthConfigBn\x92\x41k2iStatic configuration for custom connections. Present only when type is BASIC, BEARER, API_KEY, or custom.H\x00R\x0cstaticConfig\x12\xb1\x01\n\x0fwebauthn_config\x18\x1b \x01(\x0b\x32-.scalekit.v1.connections.WebAuthConfigurationBW\x92\x41T2RConfiguration details for WebAuthn (passkeys). Present only when type is WEBAUTHN.H\x00R\x0ewebauthnConfig\x12}\n\x06key_id\x18\x19 \x01(\tBa\x92\x41^2\\Alternative identifier for this connection, typically used in frontend applications or URLs.H\x02R\x05keyId\x88\x01\x01\x12u\n\x0cprovider_key\x18\x17 \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x12\xaa\x01\n\x07\x64omains\x18\x18 \x03(\x0b\x32\x1b.scalekit.v1.domains.DomainBs\x92\x41p2SDomain associated with this connection, used for domain-based authentication flows.J\x19[{\"name\": \"example.com\"}]R\x07\x64omains\x1a\x43\n\x15\x41ttributeMappingEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\n\n\x08settingsB\x12\n\x10_organization_idB\t\n\x07_key_idJ\x04\x08\r\x10\x0f\"w\n\x18\x43reateConnectionResponse\x12[\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\x16\x92\x41\x13\x32\x11\x43onnection DetailR\nconnection\"\xa8\x02\n\"UpdateEnvironmentConnectionRequest\x12~\n\rconnection_id\x18\x01 \x01(\tBY\x92\x41M2+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xca>\x05\xfa\x02\x02id\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\x12\x81\x01\n\nconnection\x18\x03 \x01(\x0b\x32).scalekit.v1.connections.UpdateConnectionB6\x92\x41-2#Connection properties to be updated\xca>\x05\xfa\x02\x02id\xbaH\x03\xc8\x01\x01R\nconnection\"\xce\x03\n\x17UpdateConnectionRequest\x12q\n\x0forganization_id\x18\x01 \x01(\tBH\x92\x41<2#Organization ID for the Connection.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\x61\n\x02id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02id\x12\xd6\x01\n\nconnection\x18\x04 \x01(\x0b\x32).scalekit.v1.connections.UpdateConnectionB\x8a\x01\x92\x41-2#Connection properties to be updated\xca>\x05\xfa\x02\x02id\xbaHW\xba\x01Q\x12\x36OAUTH, PASSWORDLESS and WEBAUTHN are not supported yet\x1a\x17!(this.type in [4,5,9])\xc8\x01\x01R\nconnectionJ\x04\x08\x02\x10\x03\"\xcb\x11\n\x10UpdateConnection\x12w\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderB.\x92\x41#2\x17SSO Connection ProviderJ\x08\"CUSTOM\"\xbaH\x05\x82\x01\x02\x10\x01R\x08provider\x12r\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB5\x92\x41*2 Connection Protocol OIDC / SAML J\x06\"OIDC\"\xbaH\x05\x82\x01\x02\x10\x01R\x04type\x12\xae\x01\n\rdebug_enabled\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBm\x92\x41j2bDebug mode for the connection. Debug would allow non HTTPS endpoint to be used with the connectionJ\x04trueR\x0c\x64\x65\x62ugEnabled\x12\x8d\x01\n\x0fui_button_title\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueBG\x92\x41\x35\x32!Display name for the Login ButtonJ\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12~\n\x12\x63onfiguration_type\x18\x0b \x01(\x0e\x32*.scalekit.v1.connections.ConfigurationTypeB#\x92\x41 2\x14\x43onfiguration Type. J\x08\"MANUAL\"R\x11\x63onfigurationType\x12\x9d\x01\n\x11\x61ttribute_mapping\x18\x0f \x03(\x0b\x32?.scalekit.v1.connections.UpdateConnection.AttributeMappingEntryB/\x92\x41\x13\x32\x11\x41ttribute Mapping\xbaH\x16\x9a\x01\x13\x10\x1e\"\x06r\x04\x10\x01\x18\x64*\x07r\x05\x10\x01\x18\x80\x02R\x10\x61ttributeMapping\x12\x83\x01\n\x0boidc_config\x18\x10 \x01(\x0b\x32-.scalekit.v1.connections.OIDCConnectionConfigB1\x92\x41.2,OIDC Configuration if ConnectionType == OIDCH\x00R\noidcConfig\x12\x8a\x01\n\x0bsaml_config\x18\x11 \x01(\x0b\x32\x34.scalekit.v1.connections.SAMLConnectionConfigRequestB1\x92\x41.2,SAML Configuration if ConnectionType == SAMLH\x00R\nsamlConfig\x12\x88\x01\n\x0coauth_config\x18\x12 \x01(\x0b\x32..scalekit.v1.connections.OAuthConnectionConfigB3\x92\x41\x30\x32.OAuth Configuration if ConnectionType == OAUTHH\x00R\x0boauthConfig\x12\x9d\x01\n\x13passwordless_config\x18\x14 \x01(\x0b\x32+.scalekit.v1.connections.PasswordLessConfigB=\x92\x41:28Magic Link Configuration if ConnectionType == MAGIC_LINKH\x00R\x12passwordlessConfig\x12P\n\rstatic_config\x18\x17 \x01(\x0b\x32).scalekit.v1.connections.StaticAuthConfigH\x00R\x0cstaticConfig\x12\xb1\x01\n\x0fwebauthn_config\x18\x18 \x01(\x0b\x32-.scalekit.v1.connections.WebAuthConfigurationBW\x92\x41T2RConfiguration details for WebAuthn (passkeys). Present only when type is WEBAUTHN.H\x00R\x0ewebauthnConfig\x12&\n\x06key_id\x18\x16 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xac\x02H\x01R\x05keyId\x88\x01\x01\x12u\n\x0cprovider_key\x18\x15 \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x1a\x43\n\x15\x41ttributeMappingEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01:\x8b\x02\xbaH\x87\x02\x1aT\x12$provider or provider_key is required\x1a,has(this.provider_key) || this.provider != 0\x1a`\x12\x1einvalid value for provider_key\x1a>this.provider == 15 ? this.provider_key in [\'SCALEKIT\'] : true\x1aM\x12\x18invalid value for key_id\x1a\x31this.type == 9 ? this.key_id == \'WEBAUTHN\' : trueB\n\n\x08settingsB\t\n\x07_key_idJ\x04\x08\x01\x10\x02J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06J\x04\x08\t\x10\x0bJ\x04\x08\x0c\x10\x0f\"\x80\x01\n\x18UpdateConnectionResponse\x12\x64\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\x1f\x92\x41\x1c\x32\x1aUpdated Connection detailsR\nconnection\"\x9c\x01\n\"DeleteEnvironmentConnectionRequest\x12v\n\rconnection_id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\xf5\x01\n\x17\x44\x65leteConnectionRequest\x12q\n\x0forganization_id\x18\x01 \x01(\tBH\x92\x41<2#Organization ID for the Connection.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\x61\n\x02id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\x92\x01\n\x1fGetEnvironmentConnectionRequest\x12o\n\rconnection_id\x18\x01 \x01(\tBJ\x92\x41>2$Unique identifier for the ConnectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\xfc\x02\n\x14GetConnectionRequest\x12\xba\x01\n\x0forganization_id\x18\x01 \x01(\tB\x90\x01\x92\x41\x83\x01\x32jOrganization identifier (required). Specifies which organization owns the connection you want to retrieve.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\xa0\x01\n\x02id\x18\x03 \x01(\tB\x8f\x01\x92\x41\x82\x01\x32hConnection identifier (required). Specifies which specific connection to retrieve from the organization.J\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\x9a\x02\n\x15GetConnectionResponse\x12\x80\x02\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\xba\x01\x92\x41\xb6\x01\x32\xb3\x01\x43omplete connection details including provider configuration, protocol settings, status, and all metadata. Contains everything needed to understand the connection\'s current state.R\nconnection\"\x96\x04\n\x16ListConnectionsRequest\x12\x80\x01\n\x0forganization_id\x18\x01 \x01(\tBR\x92\x41\x46\x32-Filter connections by organization identifierJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12\x7f\n\x06\x64omain\x18\x03 \x01(\tBb\x92\x41V2CFilter connections by email domain associated with the organizationJ\x0f\"hero-saas.app\"\xbaH\x06r\x04\x10\x01\x18 H\x01R\x06\x64omain\x88\x01\x01\x12\xc6\x01\n\x07include\x18\x04 \x01(\tB\xa6\x01\x92\x41\xa2\x01\x32\x9f\x01\x46ilter connections by status. Use \'all\' to include all connections regardless of status. Default behavior shows only active (completed and enabled) connectionsH\x02R\x07include\x88\x01\x01\x42\x12\n\x10_organization_idB\t\n\x07_domainB\n\n\x08_includeJ\x04\x08\x02\x10\x03\"\x9d\x01\n\x17ListConnectionsResponse\x12\x81\x01\n\x0b\x63onnections\x18\x01 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB6\x92\x41\x33\x32\x31List of connections matching the request criteriaR\x0b\x63onnections\"\xfa\x0b\n\x0eListConnection\x12Q\n\x02id\x18\x01 \x01(\tBA\x92\x41>2#Unique identifier of the connectionJ\x17\"conn_2123312131125533\"R\x02id\x12\x8d\x01\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderBD\x92\x41\x41\x32\x35Identity provider type (e.g., OKTA, Google, Azure AD)J\x08\"CUSTOM\"R\x08provider\x12x\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB;\x92\x41\x38\x32.Authentication protocol used by the connectionJ\x06\"OIDC\"R\x04type\x12\x88\x01\n\x06status\x18\x04 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusBE\x92\x41?2.Current configuration status of the connectionJ\r\"IN_PROGRESS\"\xe0\x41\x03R\x06status\x12g\n\x07\x65nabled\x18\x05 \x01(\x08\x42M\x92\x41J2AWhether the connection is currently active for organization usersJ\x05\x66\x61lseR\x07\x65nabled\x12\x85\x01\n\x0forganization_id\x18\x06 \x01(\tB\\\x92\x41Y2?Unique identifier of the organization that owns this connectionJ\x16\"org_2123312131125533\"R\x0eorganizationId\x12\x88\x01\n\x0fui_button_title\x18\x07 \x01(\tB`\x92\x41N2:Text displayed on the SSO login button for this connectionJ\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12t\n\x07\x64omains\x18\x08 \x03(\tBZ\x92\x41W2/List of domains configured with this connectionJ$[\"yourapp.com\", \"yourworkspace.com\"]R\x07\x64omains\x12q\n\x11organization_name\x18\t \x01(\tBD\x92\x41\x41\x32*Name of the organization of the connectionJ\x13\"Your Organization\"R\x10organizationName\x12u\n\x0cprovider_key\x18\n \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x12\x90\x01\n\x06key_id\x18\x0b \x01(\tBy\x92\x41v2[Alternative identifier for this connection, typically used in frontend applications or URLsJ\x17\"conn_2123312131125533\"R\x05keyId\x12\x90\x01\n\ncreated_at\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.TimestampBU\x92\x41@2&When this connection was first createdJ\x16\"2023-01-15T14:30:00Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\tcreatedAt\"\xcf\x02\n\"ListOrganizationConnectionsRequest\x12\x80\x01\n\tpage_size\x18\x01 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x02 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\x97\x02\n#ListOrganizationConnectionsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12&\n\x0fprev_page_token\x18\x03 \x01(\tR\rprevPageToken\x12\x80\x01\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB5\x92\x41\x32\x32\x30List of connections matching the filter criteriaR\x0b\x63onnections\"\xa2\x07\n$SearchOrganizationConnectionsRequest\x12l\n\x05query\x18\x01 \x01(\tBQ\x92\x41G2-Search query Connection ID or Organization IDJ\x16\"conn_121312434123312\"\xbaH\x04r\x02\x18\x64H\x00R\x05query\x88\x01\x01\x12@\n\x08provider\x18\x02 \x01(\tB\x1f\x92\x41\x1c\x32\x12\x46ilter by providerJ\x06\"OKTA\"H\x01R\x08provider\x88\x01\x01\x12}\n\x06status\x18\x03 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusB5\x92\x41*2\x1b\x46ilter by connection statusJ\x0b\"COMPLETED\"\xbaH\x05\x82\x01\x02\x10\x01H\x02R\x06status\x88\x01\x01\x12\x8c\x01\n\x0f\x63onnection_type\x18\x04 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB5\x92\x41*2\x1b\x46ilter by connection statusJ\x0b\"COMPLETED\"\xbaH\x05\x82\x01\x02\x10\x01H\x03R\x0e\x63onnectionType\x88\x01\x01\x12O\n\x07\x65nabled\x18\x07 \x01(\x08\x42\x30\x92\x41-2#Filter by connection enabled statusJ\x06\"true\"H\x04R\x07\x65nabled\x88\x01\x01\x12\x80\x01\n\tpage_size\x18\x05 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x06 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageTokenB\x08\n\x06_queryB\x0b\n\t_providerB\t\n\x07_statusB\x12\n\x10_connection_typeB\n\n\x08_enabled\"\x99\x02\n%SearchOrganizationConnectionsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12&\n\x0fprev_page_token\x18\x03 \x01(\tR\rprevPageToken\x12\x80\x01\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB5\x92\x41\x32\x32\x30List of connections matching the filter criteriaR\x0b\x63onnections\"\x9c\x01\n\"ToggleEnvironmentConnectionRequest\x12v\n\rconnection_id\x18\x02 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\x9e\x02\n\x17ToggleConnectionRequest\x12\x92\x01\n\x0forganization_id\x18\x01 \x01(\tBi\x92\x41]2DUnique identifier of the organization associated with the connectionJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12h\n\x02id\x18\x03 \x01(\tBX\x92\x41L22Unique identifier for the connection to be toggledJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\xbc\x02\n\x18ToggleConnectionResponse\x12\xa9\x01\n\x07\x65nabled\x18\x01 \x01(\x08\x42\x8e\x01\x92\x41\x8a\x01\x32\x81\x01\x43urrent state of the connection after the operation. True means the connection is now enabled and can be used for authentication.J\x04trueR\x07\x65nabled\x12\x62\n\rerror_message\x18\x02 \x01(\tB8\x92\x41\x35\x32$Error message if the operation failsJ\r\"placeholder\"H\x00R\x0c\x65rrorMessage\x88\x01\x01\x42\x10\n\x0e_error_message\"\xa0\x12\n\x14OIDCConnectionConfig\x12j\n\x06issuer\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB4\x92\x41\x31\x32\nIssuer URLJ#\"https://youridp.com/service/oauth\"R\x06issuer\x12\xaa\x01\n\x12\x64iscovery_endpoint\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB]\x92\x41Z2\x12\x44iscovery EndpointJD\"https://youridp.com/service/oauth/.well-known/openid-configuration\"R\x11\x64iscoveryEndpoint\x12\x84\x01\n\rauthorize_uri\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValueBA\x92\x41>2\rAuthorize URIJ-\"https://youridp.com/service/oauth/authorize\"R\x0c\x61uthorizeUri\x12t\n\ttoken_uri\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueB9\x92\x41\x36\x32\tToken URIJ)\"https://youridp.com/service/oauth/token\"R\x08tokenUri\x12\x82\x01\n\ruser_info_uri\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB@\x92\x41=2\rUser Info URIJ,\"https://youridp.com/service/oauth/userinfo\"R\x0buserInfoUri\x12p\n\x08jwks_uri\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValueB7\x92\x41\x34\x32\x08JWKS URIJ(\"https://youridp.com/service/oauth/jwks\"R\x07jwksUri\x12\\\n\tclient_id\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB!\x92\x41\x1e\x32\tClient IDJ\x11\"oauth_client_id\"R\x08\x63lientId\x12l\n\rclient_secret\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB)\x92\x41&2\rClient SecretJ\x15\"oauth_client_secret\"R\x0c\x63lientSecret\x12\x63\n\x06scopes\x18\n \x03(\x0e\x32\".scalekit.v1.connections.OIDCScopeB\'\x92\x41$2\x0bOIDC ScopesJ\x15[\"openid\", \"profile\"]R\x06scopes\x12r\n\x0ftoken_auth_type\x18\x0b \x01(\x0e\x32&.scalekit.v1.connections.TokenAuthTypeB\"\x92\x41\x1f\x32\x0fToken Auth TypeJ\x0c\"URL_PARAMS\"R\rtokenAuthType\x12j\n\x0credirect_uri\x18\x0c \x01(\tBG\x92\x41\x44\x32\x0cRedirect URIJ4\"https://yourapp.com/sso/v1/oidc/conn_1234/callback\"R\x0bredirectUri\x12V\n\x0cpkce_enabled\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x17\x92\x41\x14\x32\x0cPKCE EnabledJ\x04trueR\x0bpkceEnabled\x12h\n\x13idp_logout_required\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1c\x92\x41\x19\x32\x11\x45nable IDP logoutJ\x04trueR\x11idpLogoutRequired\x12\xb4\x01\n\x18post_logout_redirect_uri\x18\x0f \x01(\x0b\x32\x1c.google.protobuf.StringValueB]\x92\x41W2\x18post logout redirect uriJ;\"https://yourapp.com/sso/v1/oidc/conn_1234/logout/callback\"\xe0\x41\x03R\x15postLogoutRedirectUri\x12\xea\x01\n\x1f\x62\x61\x63kchannel_logout_redirect_uri\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x84\x01\x92\x41~2\"https://yourapp.com/sso/v1/oidc/conn_1234/backchannel-logout\"\xe0\x41\x03R\x1c\x62\x61\x63kchannelLogoutRedirectUri\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\x12\xba\x01\n!jit_provisioning_with_sso_enabled\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBT\x92\x41Q2IIndicates if Just In Time user provisioning is enabled for the connectionJ\x04trueR\x1djitProvisioningWithSsoEnabled\"\xce\x13\n\x15OAuthConnectionConfig\x12\x84\x01\n\rauthorize_uri\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValueBA\x92\x41>2\rAuthorize URIJ-\"https://youridp.com/service/oauth/authorize\"R\x0c\x61uthorizeUri\x12t\n\ttoken_uri\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueB9\x92\x41\x36\x32\tToken URIJ)\"https://youridp.com/service/oauth/token\"R\x08tokenUri\x12\x82\x01\n\ruser_info_uri\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB@\x92\x41=2\rUser Info URIJ,\"https://youridp.com/service/oauth/userinfo\"R\x0buserInfoUri\x12\\\n\tclient_id\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB!\x92\x41\x1e\x32\tClient IDJ\x11\"oauth_client_id\"R\x08\x63lientId\x12l\n\rclient_secret\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB)\x92\x41&2\rClient SecretJ\x15\"oauth_client_secret\"R\x0c\x63lientSecret\x12?\n\x06scopes\x18\n \x03(\tB\'\x92\x41$2\x0bOIDC ScopesJ\x15[\"openid\", \"profile\"]R\x06scopes\x12\x62\n\x0credirect_uri\x18\x0c \x01(\tB?\x92\x41<2\x0cRedirect URIJ,\"https://yourapp.com/service/oauth/redirect\"R\x0bredirectUri\x12V\n\x0cpkce_enabled\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x17\x92\x41\x14\x32\x0cPKCE EnabledJ\x04trueR\x0bpkceEnabled\x12V\n\x06prompt\x18\x0e \x01(\x0b\x32\x1c.google.protobuf.StringValueB \x92\x41\x1d\x32\x13Prompt for the userJ\x06\"none\"R\x06prompt\x12m\n\x12use_platform_creds\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueB#\x92\x41 2\x18Use Scalekit credentialsJ\x04trueR\x10usePlatformCreds\x12Z\n\x0b\x61\x63\x63\x65ss_type\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1b\x92\x41\x18\x32\x0b\x41\x63\x63\x65ss TypeJ\t\"offline\"R\naccessType\x12n\n\x11\x63ustom_scope_name\x18\x11 \x01(\x0b\x32\x1c.google.protobuf.StringValueB$\x92\x41!2\x11\x43ustom Scope NameJ\x0c\"user_scope\"R\x0f\x63ustomScopeName\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\x12k\n\x11token_access_type\x18\x13 \x01(\x0b\x32\x1c.google.protobuf.StringValueB!\x92\x41\x1e\x32\x11Token Access TypeJ\t\"offline\"R\x0ftokenAccessType\x12\x84\x02\n\ttenant_id\x18\x14 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\xc8\x01\x92\x41\xc4\x01\x32\x99\x01Microsoft Entra tenant ID. Required when using a single-tenant or multi-tenant app registered in Microsoft Entra. Leave empty to use the common endpoint.J&\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"R\x08tenantId\x12\xc7\x01\n\x07is_cimd\x18\x15 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x91\x01\x92\x41\x8a\x01\x32\x81\x01Indicates whether this connection was registered using Client ID Metadata Document (CIMD) instead of Dynamic Client Registration.J\x04true\xe0\x41\x03R\x06isCimd\x12\xbe\x01\n\x08\x61pp_name\x18\x16 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x84\x01\x92\x41\x80\x01\x32mApplication name used by providers that require it as an authorize query parameter (e.g., Trello\'s app_name).J\x0f\"My Trello App\"R\x07\x61ppName\x12\xfa\x01\n\x0foptional_scopes\x18\x17 \x01(\x0b\x32\'.scalekit.v1.connections.OptionalScopesB\xa2\x01\x92\x41\x9e\x01\x32\x9b\x01Optional scopes configuration for identity providers that support or require additional scopes to be sent in a custom field during authentication requests.H\x00R\x0eoptionalScopes\x88\x01\x01\x42\x12\n\x10_optional_scopes\"\xa6\x03\n\x0eOptionalScopes\x12v\n\x06scopes\x18\x01 \x03(\tB^\x92\x41[2CList of optional scopes that can be requested during authenticationJ\x14[\"scope1\", \"scope2\"]R\x06scopes\x12\x9b\x02\n\nfield_name\x18\x02 \x01(\tB\xfb\x01\x92\x41\xf7\x01\x32\xd5\x01Name of the field in which scope should be sent in the authentication request. This is required by some identity providers that expect scopes to be sent in a custom field instead of the standard \'scope\' parameter.J\x1d\"optional_scope or bot_scope\"R\tfieldName\"\xf4\x07\n\x12PasswordLessConfig\x12]\n\x04type\x18\x01 \x01(\x0e\x32).scalekit.v1.connections.PasswordlessTypeB\x1e\x92\x41\x1b\x32\x11Passwordless TypeJ\x06\"LINK\"R\x04type\x12W\n\tfrequency\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x16\x92\x41\x13\x32\x0eLink FrequencyJ\x01\x31H\x00R\tfrequency\x88\x01\x01\x12\x61\n\x08validity\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\"\x92\x41\x1f\x32\x18Link Validity in SecondsJ\x03\x36\x30\x30H\x01R\x08validity\x88\x01\x01\x12\x86\x01\n\x1b\x65nforce_same_browser_origin\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB&\x92\x41#2\x1b\x45nforce Same Browser OriginJ\x04trueH\x02R\x18\x65nforceSameBrowserOrigin\x88\x01\x01\x12t\n\x15\x63ode_challenge_length\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x1d\x92\x41\x1a\x32\x15\x43ode Challenge LengthJ\x01\x36H\x03R\x13\x63odeChallengeLength\x88\x01\x01\x12\x84\x01\n\x13\x63ode_challenge_type\x18\x06 \x01(\x0e\x32*.scalekit.v1.connections.CodeChallengeTypeB#\x92\x41 2\x13\x43ode Challenge TypeJ\t\"NUMERIC\"H\x04R\x11\x63odeChallengeType\x88\x01\x01\x12\x9d\x01\n-regenerate_passwordless_credentials_on_resend\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1a\x92\x41\x17\x32\x0fRegenerate the J\x04trueH\x05R)regeneratePasswordlessCredentialsOnResend\x88\x01\x01\x42\x0c\n\n_frequencyB\x0b\n\t_validityB\x1e\n\x1c_enforce_same_browser_originB\x18\n\x16_code_challenge_lengthB\x16\n\x14_code_challenge_typeB0\n._regenerate_passwordless_credentials_on_resend\"P\n\x10StaticAuthConfig\x12<\n\rstatic_config\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x0cstaticConfig\"\xc4\"\n\x14WebAuthConfiguration\x12@\n\x02rp\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connections.WebAuthConfiguration.RpR\x02rp\x12[\n\x0b\x61ttestation\x18\x02 \x01(\x0b\x32\x39.scalekit.v1.connections.WebAuthConfiguration.AttestationR\x0b\x61ttestation\x12\x64\n\x0e\x61uthenticators\x18\x03 \x01(\x0b\x32<.scalekit.v1.connections.WebAuthConfiguration.AuthenticatorsR\x0e\x61uthenticators\x12}\n\x17\x61uthenticator_selection\x18\x04 \x01(\x0b\x32\x44.scalekit.v1.connections.WebAuthConfiguration.AuthenticatorSelectionR\x16\x61uthenticatorSelection\x12O\n\x07timeout\x18\x05 \x01(\x0b\x32\x35.scalekit.v1.connections.WebAuthConfiguration.TimeoutR\x07timeout\x12\x64\n\x18\x65nable_auto_registration\x18\x06 \x01(\x08\x42*\x92\x41\'2%Enable auto registration for WebAuthnR\x16\x65nableAutoRegistration\x12X\n\x13show_passkey_button\x18\x07 \x01(\x08\x42(\x92\x41%2#Show passkey button on login screenR\x11showPasskeyButton\x12g\n\x18\x65nable_conditional_login\x18\x08 \x01(\x08\x42-\x92\x41*2(Allow autofill of passkeys in login pageR\x16\x65nableConditionalLogin\x1aH\n\x02Rp\x12\x1c\n\x03ids\x18\x01 \x03(\tB\n\xbaH\x07\x92\x01\x04\x08\x01\x10\nR\x03ids\x12$\n\x07origins\x18\x02 \x03(\tB\n\xbaH\x07\x92\x01\x04\x08\x01\x10\nR\x07origins\x1a\xc1\x01\n\x0b\x41ttestation\x12p\n\x15\x63onveyance_preference\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1d\xbaH\x1ar\x18R\x04noneR\x08indirectR\x06\x64irectR\x14\x63onveyancePreference\x12@\n\x17\x65nterprise_approved_ids\x18\x02 \x03(\tB\x08\xbaH\x05\x92\x01\x02\x10\x32R\x15\x65nterpriseApprovedIds\x1a\xf0\x13\n\x0e\x41uthenticators\x12\xdb\x02\n\x0evalidate_entry\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x97\x02\x92\x41\x93\x02\x1a\x1a.google.protobuf.BoolValue2\xf4\x01requires that the provided metadata has an entry for the given authenticator to be considered valid. By default an AAGUID which has a zero value should fail validation if validate_entry_permit_zero_aaguid is not provided with the value of true.R\rvalidateEntry\x12\x8f\x02\n!validate_entry_permit_zero_aaguid\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xa8\x01\x92\x41\xa4\x01\x32\xa1\x01is an option that permits a zero\'d AAGUID from an attestation statement to automatically pass metadata validations. Generally helpful to use with validate_entry.R\x1dvalidateEntryPermitZeroAaguid\x12\xc6\x01\n\x10validate_anchors\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x7f\x92\x41|2zwhen set to true enables the validation of the attestation statement against the trust anchor from the metadata statement.R\x0fvalidateAnchors\x12\xbe\x01\n\x0fvalidate_status\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBy\x92\x41v2twhen set to true enables the validation of the attestation statements AAGUID against the desired and undesired listsR\x0evalidateStatus\x12\xe1\x01\n\x19validate_attestation_type\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x88\x01\x92\x41\x84\x01\x32\x81\x01when set to true enables the validation of the attestation statements type against the known types the authenticator can produce.R\x17validateAttestationType\x12\xbb\x04\n\x1c\x64\x65sired_authenticator_status\x18\x06 \x03(\tB\xf8\x03\x92\x41\x9d\x01\x32\x96\x01provides the list of statuses which are considered undesirable for status report validation purposes. Should be used with validate_status set to true.:\x02[]\xbaH\xd3\x02\x92\x01\xcf\x02\x10\n\"\xca\x02r\xc7\x02R\x12NOT_FIDO_CERTIFIEDR\x0e\x46IDO_CERTIFIEDR\x18USER_VERIFICATION_BYPASSR\x1a\x41TTESTATION_KEY_COMPROMISER\x1aUSER_KEY_REMOTE_COMPROMISER\x1cUSER_KEY_PHYSICAL_COMPROMISER\x10UPDATE_AVAILABLER\x07REVOKEDR\x18SELF_ASSERTION_SUBMITTEDR\x11\x46IDO_CERTIFIED_L1R\x15\x46IDO_CERTIFIED_L1plusR\x11\x46IDO_CERTIFIED_L2R\x15\x46IDO_CERTIFIED_L2plusR\x11\x46IDO_CERTIFIED_L3R\x15\x46IDO_CERTIFIED_L3plusR\x1a\x64\x65siredAuthenticatorStatus\x12\xc1\x05\n\x1eundesired_authenticator_status\x18\x07 \x03(\tB\xfa\x04\x92\x41\x9f\x02\x32\x96\x01provides the list of statuses which are considered undesirable for status report validation purposes. Should be used with validate_status set to true.:\x83\x01[\'ATTESTATION_KEY_COMPROMISE\', \'USER_VERIFICATION_BYPASS\', \'USER_KEY_REMOTE_COMPROMISE\', \'USER_KEY_PHYSICAL_COMPROMISE\', \'REVOKED\']\xbaH\xd3\x02\x92\x01\xcf\x02\x10\n\"\xca\x02r\xc7\x02R\x12NOT_FIDO_CERTIFIEDR\x0e\x46IDO_CERTIFIEDR\x18USER_VERIFICATION_BYPASSR\x1a\x41TTESTATION_KEY_COMPROMISER\x1aUSER_KEY_REMOTE_COMPROMISER\x1cUSER_KEY_PHYSICAL_COMPROMISER\x10UPDATE_AVAILABLER\x07REVOKEDR\x18SELF_ASSERTION_SUBMITTEDR\x11\x46IDO_CERTIFIED_L1R\x15\x46IDO_CERTIFIED_L1plusR\x11\x46IDO_CERTIFIED_L2R\x15\x46IDO_CERTIFIED_L2plusR\x11\x46IDO_CERTIFIED_L3R\x15\x46IDO_CERTIFIED_L3plusR\x1cundesiredAuthenticatorStatus\x1a\x86\x02\n\x16\x41uthenticatorSelection\x12r\n\x11user_verification\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\'\xbaH$r\"R\x08requiredR\tpreferredR\x0b\x64iscouragedR\x10userVerification\x12x\n\x18\x61uthenticator_attachment\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1f\xbaH\x1cr\x1aR\x08platformR\x0e\x63ross-platformR\x17\x61uthenticatorAttachment\x1a\xa3\x04\n\x07Timeout\x12x\n\x0cregistration\x18\x01 \x01(\x0b\x32\x19.google.protobuf.DurationB9\x92\x41\'2\x1dRegistration timeout duration:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x0cregistration\x12\xa5\x01\n\x10registration_uvd\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationB_\x92\x41M2CRegistration timeout duration when user verification is discouraged:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x0fregistrationUvd\x12\x63\n\x05login\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationB2\x92\x41 2\x16Login timeout duration:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x05login\x12\x90\x01\n\tlogin_uvd\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationBX\x92\x41\x46\x322\x0fSP Metadata URLJ+\"https://youridp.com/service/saml/metadata\"R\rspMetadataUrl\x12\x8a\x01\n\x10idp_metadata_url\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueBB\x92\x41?2\x10IDP Metadata URLJ+\"https://youridp.com/service/saml/metadata\"R\x0eidpMetadataUrl\x12x\n\ridp_entity_id\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB6\x92\x41\x33\x32\rIDP Entity IDJ\"\"https://youridp.com/service/saml\"R\x0bidpEntityId\x12v\n\x0bidp_sso_url\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValueB8\x92\x41\x35\x32\x0bIDP SSO URLJ&\"https://youridp.com/service/saml/sso\"R\tidpSsoUrl\x12i\n\x10idp_certificates\x18\x07 \x03(\x0b\x32\'.scalekit.v1.connections.IDPCertificateB\x15\x92\x41\x12\x32\x10IDP CertificatesR\x0fidpCertificates\x12v\n\x0bidp_slo_url\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB8\x92\x41\x35\x32\x0bIDP SLO URLJ&\"https://youridp.com/service/saml/slo\"R\tidpSloUrl\x12l\n\x0fui_button_title\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB&\x92\x41#2\x0fUI Button TitleJ\x10\"Login with SSO\"R\ruiButtonTitle\x12t\n\x12idp_name_id_format\x18\n \x01(\x0e\x32%.scalekit.v1.connections.NameIdFormatB \x92\x41\x1d\x32\x12IDP Name ID FormatJ\x07\"EMAIL\"R\x0fidpNameIdFormat\x12\x89\x01\n\x17idp_sso_request_binding\x18\x0b \x01(\x0e\x32\'.scalekit.v1.connections.RequestBindingB)\x92\x41&2\x17IDP SSO Request BindingJ\x0b\"HTTP_POST\"R\x14idpSsoRequestBinding\x12\x89\x01\n\x17idp_slo_request_binding\x18\x0c \x01(\x0e\x32\'.scalekit.v1.connections.RequestBindingB)\x92\x41&2\x17IDP SLO Request BindingJ\x0b\"HTTP_POST\"R\x14idpSloRequestBinding\x12\x93\x01\n\x13saml_signing_option\x18\r \x01(\x0e\x32+.scalekit.v1.connections.SAMLSigningOptionsB6\x92\x41\x33\x32\x13SAML Signing OptionJ\x1c\"SAML_ONLY_RESPONSE_SIGNING\"R\x11samlSigningOption\x12{\n\x19\x61llow_idp_initiated_login\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueB$\x92\x41!2\x19\x41llow IDP Initiated LoginJ\x04trueR\x16\x61llowIdpInitiatedLogin\x12S\n\x0b\x66orce_authn\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x16\x92\x41\x13\x32\x0b\x46orce AuthnJ\x04trueR\nforceAuthn\x12\x96\x01\n\x14\x64\x65\x66\x61ult_redirect_uri\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueBF\x92\x41\x43\x32\x14\x44\x65\x66\x61ult Redirect URIJ+\"https://yourapp.com/service/saml/redirect\"R\x12\x64\x65\x66\x61ultRedirectUri\x12k\n\x13\x61ssertion_encrypted\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1e\x92\x41\x1b\x32\x13\x41ssertion EncryptedJ\x04trueR\x12\x61ssertionEncrypted\x12j\n\x13want_request_signed\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1e\x92\x41\x1b\x32\x13Want Request SignedJ\x04trueR\x11wantRequestSigned\x12q\n\x0e\x63\x65rtificate_id\x18\x13 \x01(\x0b\x32\x1c.google.protobuf.StringValueB,\x92\x41)2\x0e\x43\x65rtificate IDJ\x17\"cer_35585423166144613\"R\rcertificateId\x12\x62\n\x10idp_slo_required\x18\x14 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1c\x92\x41\x19\x32\x11\x45nable IDP logoutJ\x04trueR\x0eidpSloRequired\x12\x96\x01\n\nsp_slo_url\x18\x15 \x01(\x0b\x32\x1c.google.protobuf.StringValueBZ\x92\x41T2\x18Service Provider SLO urlJ8\"https://yourapp.com/sso/v1/saml/conn_1234/slo/callback\"\xe0\x41\x03R\x08spSloUrl\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x16 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\x12\xba\x01\n!jit_provisioning_with_sso_enabled\x18\x17 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBT\x92\x41Q2IIndicates if Just In Time user provisioning is enabled for the connectionJ\x04trueR\x1djitProvisioningWithSsoEnabled\"\xbf\x03\n\x0eIDPCertificate\x12\x36\n\x0b\x63\x65rtificate\x18\x01 \x01(\tB\x14\x92\x41\x11\x32\x0fIDP CertificateR\x0b\x63\x65rtificate\x12s\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB6\x92\x41\x33\x32\x19\x43\x65rtificate Creation TimeJ\x16\"2021-09-01T00:00:00Z\"R\ncreateTime\x12q\n\x0b\x65xpiry_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB4\x92\x41\x31\x32\x17\x43\x65rtificate Expiry TimeJ\x16\"2021-09-01T00:00:00Z\"R\nexpiryTime\x12\x38\n\x02id\x18\x04 \x01(\tB(\x92\x41%2\x0e\x43\x65rtificate IDJ\x13\"cert_123123123123\"R\x02id\x12S\n\x06issuer\x18\x05 \x01(\tB;\x92\x41\x38\x32\x12\x43\x65rtificate IssuerJ\"\"https://youridp.com/service/saml\"R\x06issuer\"b\n\x16GetOIDCMetadataRequest\x12H\n\x08metadata\x18\x01 \x01(\x0b\x32,.scalekit.v1.connections.OIDCMetadataRequestR\x08metadata\"9\n\x13OIDCMetadataRequest\x12\"\n\x06issuer\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x06issuer\"\xd7\x01\n\x17GetOIDCMetadataResponse\x12\x16\n\x06issuer\x18\x01 \x01(\tR\x06issuer\x12\x35\n\x16\x61uthorization_endpoint\x18\x02 \x01(\tR\x15\x61uthorizationEndpoint\x12%\n\x0etoken_endpoint\x18\x03 \x01(\tR\rtokenEndpoint\x12+\n\x11userinfo_endpoint\x18\x04 \x01(\tR\x10userinfoEndpoint\x12\x19\n\x08jwks_uri\x18\x05 \x01(\tR\x07jwksUri\"b\n\x16GetSAMLMetadataRequest\x12H\n\x08metadata\x18\x01 \x01(\x0b\x32,.scalekit.v1.connections.SAMLMetadataRequestR\x08metadata\"D\n\x13SAMLMetadataRequest\x12-\n\x0cmetadata_url\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0bmetadataUrl\"\xb4\x02\n\x17GetSAMLMetadataResponse\x12\"\n\ridp_entity_id\x18\x01 \x01(\tR\x0bidpEntityId\x12\x1e\n\x0bidp_sso_url\x18\x02 \x01(\tR\tidpSsoUrl\x12\x1e\n\x0bidp_slo_url\x18\x03 \x01(\tR\tidpSloUrl\x12)\n\x10idp_certificates\x18\x04 \x03(\tR\x0fidpCertificates\x12+\n\x12idp_name_id_format\x18\x05 \x01(\tR\x0fidpNameIdFormat\x12\'\n\x0frequest_binding\x18\x06 \x01(\tR\x0erequestBinding\x12\x34\n\x16want_assertions_signed\x18\x07 \x01(\x08R\x14wantAssertionsSigned\"u\n GetSAMLCertificateDetailsRequest\x12Q\n\x0b\x63\x65rtificate\x18\x01 \x01(\x0b\x32/.scalekit.v1.connections.SAMLCertificateRequestR\x0b\x63\x65rtificate\"5\n\x16SAMLCertificateRequest\x12\x1b\n\x04text\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04text\"\xa5\x01\n!GetSAMLCertificateDetailsResponse\x12\x12\n\x04text\x18\x01 \x01(\tR\x04text\x12\x1b\n\tnot_after\x18\x02 \x01(\x03R\x08notAfter\x12\x1d\n\nnot_before\x18\x03 \x01(\x03R\tnotBefore\x12\x18\n\x07subject\x18\x04 \x01(\tR\x07subject\x12\x16\n\x06issuer\x18\x05 \x01(\tR\x06issuer\"\x86\x01\n\x1eGetConnectionTestResultRequest\x12,\n\rconnection_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0c\x63onnectionId\x12\x36\n\x0ftest_request_id\x18\x02 \x01(\tB\x0e\xbaH\x0br\t\x10\x01:\x05test_R\rtestRequestId\"\xbd\x02\n\x1fGetConnectionTestResultResponse\x12\x41\n\x06status\x18\x01 \x01(\x0e\x32).scalekit.v1.connections.TestResultStatusR\x06status\x12 \n\tuser_info\x18\x02 \x01(\tH\x00R\x08userInfo\x88\x01\x01\x12\x19\n\x05\x65rror\x18\x03 \x01(\tH\x01R\x05\x65rror\x88\x01\x01\x12\x30\n\x11\x65rror_description\x18\x04 \x01(\tH\x02R\x10\x65rrorDescription\x88\x01\x01\x12(\n\rerror_details\x18\x05 \x01(\tH\x03R\x0c\x65rrorDetails\x88\x01\x01\x42\x0c\n\n_user_infoB\x08\n\x06_errorB\x14\n\x12_error_descriptionB\x10\n\x0e_error_details\"\x1a\n\x18PasswordConnectionConfig\"9\n\x05\x46lags\x12\x19\n\x08is_login\x18\x01 \x01(\x08R\x07isLogin\x12\x15\n\x06is_app\x18\x02 \x01(\x08R\x05isApp\"\xaa\x03\n\x19ListAppConnectionsRequest\x12\x80\x01\n\tpage_size\x18\x01 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x02 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\x12U\n\x08provider\x18\x03 \x01(\tB4\x92\x41(2\x1e\x46ilter connections by providerJ\x06\"OKTA\"\xbaH\x06r\x04\x10\x01\x18\x32H\x00R\x08provider\x88\x01\x01\x42\x0b\n\t_provider\"\xea\x03\n\x1aListAppConnectionsResponse\x12\x81\x01\n\x0b\x63onnections\x18\x01 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB6\x92\x41\x33\x32\x31List of connections matching the request criteriaR\x0b\x63onnections\x12o\n\x0fnext_page_token\x18\x02 \x01(\tBG\x92\x41\x44\x32\"Token for the next page of resultsJ\x1e\"eyJwYWdlIjoyLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12s\n\x0fprev_page_token\x18\x03 \x01(\tBK\x92\x41H2&Token for the previous page of resultsJ\x1e\"eyJwYWdlIjoyLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12\x62\n\ntotal_size\x18\x04 \x01(\rBC\x92\x41@29Total number of connections matching the request criteriaJ\x03\x31\x30\x30R\ttotalSize\"\x8b\x01\n\x1bGetConnectionContextRequest\x12\x38\n\rconnection_id\x18\x01 \x01(\tB\x13\xbaH\x10r\x0b\x10\x01\x18 :\x05\x63onn_\xc8\x01\x01R\x0c\x63onnectionId\x12\x32\n\x0forganization_id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\"Q\n\x1cGetConnectionContextResponse\x12\x31\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext\"\xc1\x01\n\x1eUpdateConnectionContextRequest\x12\x38\n\rconnection_id\x18\x01 \x01(\tB\x13\xbaH\x10r\x0b\x10\x01\x18 :\x05\x63onn_\xc8\x01\x01R\x0c\x63onnectionId\x12\x32\n\x0forganization_id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x31\n\x07\x63ontext\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext*W\n\x11\x43odeChallengeType\x12#\n\x1f\x43ODE_CHALLENGE_TYPE_UNSPECIFIED\x10\x00\x12\x0b\n\x07NUMERIC\x10\x01\x12\x10\n\x0c\x41LPHANUMERIC\x10\x02*R\n\x11\x43onfigurationType\x12\"\n\x1e\x43ONFIGURATION_TYPE_UNSPECIFIED\x10\x00\x12\r\n\tDISCOVERY\x10\x01\x12\n\n\x06MANUAL\x10\x02*a\n\x0cNameIdFormat\x12\x16\n\x12NAME_ID_FORMAT_NIL\x10\x00\x12\x0f\n\x0bUNSPECIFIED\x10\x01\x12\t\n\x05\x45MAIL\x10\x02\x12\r\n\tTRANSIENT\x10\x03\x12\x0e\n\nPERSISTENT\x10\x04*U\n\x10PasswordlessType\x12 \n\x1cPasswordlessType_UNSPECIFIED\x10\x00\x12\x08\n\x04LINK\x10\x01\x12\x07\n\x03OTP\x10\x02\x12\x0c\n\x08LINK_OTP\x10\x03*9\n\x10TestResultStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0b\n\x07SUCCESS\x10\x01\x12\x0b\n\x07\x46\x41ILURE\x10\x02*\xd8\x01\n\x12SAMLSigningOptions\x12$\n SAML_SIGNING_OPTIONS_UNSPECIFIED\x10\x00\x12\x0e\n\nNO_SIGNING\x10\x01\x12\x1e\n\x1aSAML_ONLY_RESPONSE_SIGNING\x10\x02\x12\x1f\n\x1bSAML_ONLY_ASSERTION_SIGNING\x10\x03\x12#\n\x1fSAML_RESPONSE_ASSERTION_SIGNING\x10\x04\x12&\n\"SAML_RESPONSE_OR_ASSERTION_SIGNING\x10\x05*S\n\x0eRequestBinding\x12\x1f\n\x1bREQUEST_BINDING_UNSPECIFIED\x10\x00\x12\r\n\tHTTP_POST\x10\x01\x12\x11\n\rHTTP_REDIRECT\x10\x02*P\n\rTokenAuthType\x12\x1f\n\x1bTOKEN_AUTH_TYPE_UNSPECIFIED\x10\x00\x12\x0e\n\nURL_PARAMS\x10\x01\x12\x0e\n\nBASIC_AUTH\x10\x02*c\n\tOIDCScope\x12\x1a\n\x16OIDC_SCOPE_UNSPECIFIED\x10\x00\x12\n\n\x06openid\x10\x01\x12\x0b\n\x07profile\x10\x02\x12\t\n\x05\x65mail\x10\x03\x12\x0b\n\x07\x61\x64\x64ress\x10\x04\x12\t\n\x05phone\x10\x05*\xb0\x01\n\x0e\x43onnectionType\x12\x0b\n\x07INVALID\x10\x00\x12\x08\n\x04OIDC\x10\x01\x12\x08\n\x04SAML\x10\x02\x12\x0c\n\x08PASSWORD\x10\x03\x12\t\n\x05OAUTH\x10\x04\x12\x10\n\x0cPASSWORDLESS\x10\x05\x12\t\n\x05\x42\x41SIC\x10\x06\x12\n\n\x06\x42\x45\x41RER\x10\x07\x12\x0b\n\x07\x41PI_KEY\x10\x08\x12\x0c\n\x08WEBAUTHN\x10\t\x12\r\n\tOAUTH_M2M\x10\n\x12\x11\n\rTRELLO_OAUTH1\x10\x0b*`\n\x10\x43onnectionStatus\x12!\n\x1d\x43ONNECTION_STATUS_UNSPECIFIED\x10\x00\x12\t\n\x05\x44RAFT\x10\x01\x12\x0f\n\x0bIN_PROGRESS\x10\x02\x12\r\n\tCOMPLETED\x10\x03*\x98\x02\n\x12\x43onnectionProvider\x12#\n\x1f\x43ONNECTION_PROVIDER_UNSPECIFIED\x10\x00\x12\x08\n\x04OKTA\x10\x01\x12\n\n\x06GOOGLE\x10\x02\x12\x10\n\x0cMICROSOFT_AD\x10\x03\x12\t\n\x05\x41UTH0\x10\x04\x12\x0c\n\x08ONELOGIN\x10\x05\x12\x11\n\rPING_IDENTITY\x10\x06\x12\r\n\tJUMPCLOUD\x10\x07\x12\n\n\x06\x43USTOM\x10\x08\x12\n\n\x06GITHUB\x10\t\x12\n\n\x06GITLAB\x10\n\x12\x0c\n\x08LINKEDIN\x10\x0b\x12\x0e\n\nSALESFORCE\x10\x0c\x12\r\n\tMICROSOFT\x10\r\x12\x11\n\rIDP_SIMULATOR\x10\x0e\x12\x0c\n\x08SCALEKIT\x10\x0f\x12\x08\n\x04\x41\x44\x46S\x10\x10\x32\x92G\n\x11\x43onnectionService\x12\x91\x03\n\x1b\x43reateEnvironmentConnection\x12;.scalekit.v1.connections.CreateEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\"\x81\x02\x92\x41\xc1\x01\n\x0b\x43onnections\x12\x17\x43reate a new connection\x1a\x38\x45stablish a new connection for the specified environmentJ_\n\x03\x32\x30\x31\x12X\n\x1f\x43onnection created successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\"\x13/api/v1/connections:\nconnection\x12\xb3\x03\n\x10\x43reateConnection\x12\x30.scalekit.v1.connections.CreateConnectionRequest\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\"\xb9\x02\x92\x41\xc6\x01\n\x0b\x43onnections\x12\x17\x43reate a new connection\x1a=Establish a new SSO connection for the specified organizationJ_\n\x03\x32\x30\x31\x12X\n\x1f\x43onnection created successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x41\"3/api/v1/organizations/{organization_id}/connections:\nconnection\x12\xcd\x04\n\x19\x41ssignDomainsToConnection\x12\x39.scalekit.v1.connections.AssignDomainsToConnectionRequest\x1a:.scalekit.v1.connections.AssignDomainsToConnectionResponse\"\xb8\x03\x92\x41\xb6\x02\n\x0b\x43onnections\x12\x1e\x41ssign domains to a connection\x1a\x9e\x01\x41ssigns one or more domains to a specific connection within an organization. This allows the connection to be used for authentication on the specified domainsJf\n\x03\x32\x30\x30\x12_\n\x1d\x44omains assigned successfully\x12>\n<\x1a:.scalekit.v1.connections.AssignDomainsToConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02P\x1aK/api/v1/organizations/{organization_id}/connections/{connection_id}/domains:\x01*\x12\xb3\x03\n\x18GetEnvironmentConnection\x12\x38.scalekit.v1.connections.GetEnvironmentConnectionRequest\x1a..scalekit.v1.connections.GetConnectionResponse\"\xac\x02\x92\x41\xe7\x01\n\x0b\x43onnections\x12\x1bRetrieve connection details\x1aSObtain detailed information about a specific connection using its unique identifierJf\n\x03\x32\x30\x30\x12_\n)Successfully retrieved connection details\x12\x32\n0\x1a..scalekit.v1.connections.GetConnectionResponse\x82\xb5\x18\x03\x18\xc4\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\x12#/api/v1/connections/{connection_id}\x12\xcf\x04\n\rGetConnection\x12-.scalekit.v1.connections.GetConnectionRequest\x1a..scalekit.v1.connections.GetConnectionResponse\"\xde\x03\x92\x41\x81\x03\n\x0b\x43onnections\x12\x16Get connection details\x1a\xd1\x01Retrieves the complete configuration and status details for a specific connection by its ID within an organization. Returns all connection properties including provider settings, protocols, and current status.J\x85\x01\n\x03\x32\x30\x30\x12~\nHSuccessfully retrieved connection details for the specified organization\x12\x32\n0\x1a..scalekit.v1.connections.GetConnectionResponse\x82\xb5\x18\x15\n\x10\x63onnections_read\x18\xf4\x01\x82\xd3\xe4\x93\x02:\x12\x38/api/v1/organizations/{organization_id}/connections/{id}\x12\xe4\x02\n\x0fListConnections\x12/.scalekit.v1.connections.ListConnectionsRequest\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\"\xed\x01\x92\x41\xb6\x01\n\x0b\x43onnections\x12\x10List connections\x1a\x32Retrieves a list of connections in the environmentJa\n\x03\x32\x30\x30\x12Z\n\"Successfully retrieved connections\x12\x34\n2\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\x82\xb5\x18\x14\n\x10\x63onnections_read\x18t\x82\xd3\xe4\x93\x02\x15\x12\x13/api/v1/connections\x12\xb5\x03\n\x1bListOrganizationConnections\x12;.scalekit.v1.connections.ListOrganizationConnectionsRequest\x1a<.scalekit.v1.connections.ListOrganizationConnectionsResponse\"\x9a\x02\x92\x41\xd6\x01\n\x0b\x43onnections\x12\x1dList organization connections\x1a\x39Retrieves a list of connections for all the organizationsJm\n\x03\x32\x30\x30\x12\x66\n\"Successfully retrieved connections\x12@\n>\x1a<.scalekit.v1.connections.ListOrganizationConnectionsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\x12#/api/v1/organizations/-/connections\x12\xcd\x03\n\x1dSearchOrganizationConnections\x12=.scalekit.v1.connections.SearchOrganizationConnectionsRequest\x1a>.scalekit.v1.connections.SearchOrganizationConnectionsResponse\"\xac\x02\x92\x41\xe1\x01\n\x0b\x43onnections\x12\x1fSearch organization connections\x1a\x44Search with query or filters provided and return list of connectionsJk\n\x03\x32\x30\x30\x12\x64\n\x1eSuccessfully found connections\x12\x42\n@\x1a>.scalekit.v1.connections.SearchOrganizationConnectionsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02,\x12*/api/v1/organizations/-/connections:search\x12\xf1\x02\n\x1bUpdateEnvironmentConnection\x12;.scalekit.v1.connections.UpdateEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\"\xe1\x01\x92\x41\x91\x01\n\x0b\x43onnections\x12\x13Update a connection\x1a\x17Update a SSO ConnectionJT\n\x03\x32\x30\x30\x12M\n\x14Updated Successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\x32#/api/v1/connections/{connection_id}:\nconnection\x12\x94\x03\n\x10UpdateConnection\x12\x30.scalekit.v1.connections.UpdateConnectionRequest\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\"\x9a\x02\x92\x41\xa2\x01\n\x0b\x43onnections\x12$Update a connection for organization\x1a\x17Update a SSO ConnectionJT\n\x03\x32\x30\x30\x12M\n\x14Updated Successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x46\x32\x38/api/v1/organizations/{organization_id}/connections/{id}:\nconnection\x12\x92\x02\n\x1b\x44\x65leteEnvironmentConnection\x12;.scalekit.v1.connections.DeleteEnvironmentConnectionRequest\x1a\x16.google.protobuf.Empty\"\x9d\x01\x92\x41Z\n\x0b\x43onnections\x12\x13\x44\x65lete a connection\x1a\x17\x44\x65lete a SSO ConnectionJ\x1d\n\x03\x32\x30\x30\x12\x16\n\x14\x44\x65leted Successfully\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%*#/api/v1/connections/{connection_id}\x12\xf7\x03\n\x10\x44\x65leteConnection\x12\x30.scalekit.v1.connections.DeleteConnectionRequest\x1a\x16.google.protobuf.Empty\"\x98\x03\x92\x41\xce\x02\n\x0b\x43onnections\x12\x15\x44\x65lete SSO connection\x1a\xf9\x01\x44\x65letes an SSO connection from the specified organization by connection ID. Use this endpoint when an identity provider integration is no longer needed for the organization. Returns an empty response after the SSO connection is deleted successfully.J,\n\x03\x32\x30\x30\x12%\n#SSO connection deleted successfully\x82\xb5\x18\x02\x18\x64\x82\xd3\xe4\x93\x02:*8/api/v1/organizations/{organization_id}/connections/{id}\x12\xdf\x02\n\x1b\x45nableEnvironmentConnection\x12;.scalekit.v1.connections.ToggleEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xcf\x01\x92\x41\x84\x01\n\x0b\x43onnections\x12\x13\x45nable a connection\x1a\x17\x45nable a SSO ConnectionJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02,2*/api/v1/connections/{connection_id}:enable\x12\xd4\x04\n\x10\x45nableConnection\x12\x30.scalekit.v1.connections.ToggleConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xda\x03\x92\x41\xf6\x02\n\x0b\x43onnections\x12\x15\x45nable SSO connection\x1a\xee\x01\x41\x63tivate an existing connection for the specified organization. When enabled, users can authenticate using this connection. This endpoint changes the connection state from disabled to enabled without modifying other configuration settingsJ_\n\x03\x32\x30\x30\x12X\n\x1f\x43onnection enabled successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\x82\xd3\xe4\x93\x02\x41\x32?/api/v1/organizations/{organization_id}/connections/{id}:enable\x12\xe3\x02\n\x1c\x44isableEnvironmentConnection\x12;.scalekit.v1.connections.ToggleEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xd2\x01\x92\x41\x86\x01\n\x0b\x43onnections\x12\x14\x44isable a connection\x1a\x18\x44isable a SSO ConnectionJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02-2+/api/v1/connections/{connection_id}:disable\x12\xde\x04\n\x11\x44isableConnection\x12\x30.scalekit.v1.connections.ToggleConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xe3\x03\x92\x41\xfe\x02\n\x0b\x43onnections\x12\x16\x44isable SSO connection\x1a\xf4\x01\x44\x65\x61\x63tivate an existing connection for the specified organization. When disabled, users cannot authenticate using this connection. This endpoint changes the connection state from enabled to disabled without modifying other configuration settingsJ`\n\x03\x32\x30\x30\x12Y\n Connection disabled successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\x82\xd3\xe4\x93\x02\x42\x32@/api/v1/organizations/{organization_id}/connections/{id}:disable\x12\x80\x03\n\x17GetConnectionTestResult\x12\x37.scalekit.v1.connections.GetConnectionTestResultRequest\x1a\x38.scalekit.v1.connections.GetConnectionTestResultResponse\"\xf1\x01\x92\x41\x8d\x01\n\x0b\x43onnections\x12\x16Test connection result\x1a\x16\x43onnection test resultJN\n\x03\x32\x30\x30\x12G\n\x07Success\x12<\n:\x1a\x38.scalekit.v1.connections.GetConnectionTestResultResponse\x82\xb5\x18\x02\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x45\x12\x43/api/v1/connections/{connection_id}/test-requests/{test_request_id}\x12\xf6\x02\n\x12ListAppConnections\x12\x32.scalekit.v1.connections.ListAppConnectionsRequest\x1a\x33.scalekit.v1.connections.ListAppConnectionsResponse\"\xf6\x01\x92\x41\xbe\x01\n\x0b\x43onnections\x12\x14List App connections\x1a\x36Retrieves a list of app connections in the environmentJa\n\x03\x32\x30\x30\x12Z\n\"Successfully retrieved connections\x12\x34\n2\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\x12\x17/api/v1/connections/app\x12\xd1\x03\n\x14GetConnectionContext\x12\x34.scalekit.v1.connections.GetConnectionContextRequest\x1a\x35.scalekit.v1.connections.GetConnectionContextResponse\"\xcb\x02\x92\x41\xad\x01\n\x0b\x43onnections\x12\x16Get connection context\x1a\n<\032:.scalekit.v1.connections.AssignDomainsToConnectionResponse\202\265\030\025\n\021connections_write\030t\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002P\032K/api/v1/organizations/{organization_id}/connections/{connection_id}/domains:\001*' _globals['_CONNECTIONSERVICE'].methods_by_name['GetEnvironmentConnection']._loaded_options = None - _globals['_CONNECTIONSERVICE'].methods_by_name['GetEnvironmentConnection']._serialized_options = b'\222A\347\001\n\013Connections\022\033Retrieve connection details\032SObtain detailed information about a specific connection using its unique identifierJf\n\003200\022_\n)Successfully retrieved connection details\0222\n0\032..scalekit.v1.connections.GetConnectionResponse\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002%\022#/api/v1/connections/{connection_id}' + _globals['_CONNECTIONSERVICE'].methods_by_name['GetEnvironmentConnection']._serialized_options = b'\222A\347\001\n\013Connections\022\033Retrieve connection details\032SObtain detailed information about a specific connection using its unique identifierJf\n\003200\022_\n)Successfully retrieved connection details\0222\n0\032..scalekit.v1.connections.GetConnectionResponse\202\265\030\003\030\304\001\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002%\022#/api/v1/connections/{connection_id}' _globals['_CONNECTIONSERVICE'].methods_by_name['GetConnection']._loaded_options = None - _globals['_CONNECTIONSERVICE'].methods_by_name['GetConnection']._serialized_options = b'\222A\201\003\n\013Connections\022\026Get connection details\032\321\001Retrieves the complete configuration and status details for a specific connection by its ID within an organization. Returns all connection properties including provider settings, protocols, and current status.J\205\001\n\003200\022~\nHSuccessfully retrieved connection details for the specified organization\0222\n0\032..scalekit.v1.connections.GetConnectionResponse\202\265\030\024\n\020connections_read\030t\202\323\344\223\002:\0228/api/v1/organizations/{organization_id}/connections/{id}' + _globals['_CONNECTIONSERVICE'].methods_by_name['GetConnection']._serialized_options = b'\222A\201\003\n\013Connections\022\026Get connection details\032\321\001Retrieves the complete configuration and status details for a specific connection by its ID within an organization. Returns all connection properties including provider settings, protocols, and current status.J\205\001\n\003200\022~\nHSuccessfully retrieved connection details for the specified organization\0222\n0\032..scalekit.v1.connections.GetConnectionResponse\202\265\030\025\n\020connections_read\030\364\001\202\323\344\223\002:\0228/api/v1/organizations/{organization_id}/connections/{id}' _globals['_CONNECTIONSERVICE'].methods_by_name['ListConnections']._loaded_options = None _globals['_CONNECTIONSERVICE'].methods_by_name['ListConnections']._serialized_options = b'\222A\266\001\n\013Connections\022\020List connections\0322Retrieves a list of connections in the environmentJa\n\003200\022Z\n\"Successfully retrieved connections\0224\n2\0320.scalekit.v1.connections.ListConnectionsResponse\202\265\030\024\n\020connections_read\030t\202\323\344\223\002\025\022\023/api/v1/connections' _globals['_CONNECTIONSERVICE'].methods_by_name['ListOrganizationConnections']._loaded_options = None @@ -495,43 +517,47 @@ _globals['_CONNECTIONSERVICE'].methods_by_name['DeleteEnvironmentConnection']._loaded_options = None _globals['_CONNECTIONSERVICE'].methods_by_name['DeleteEnvironmentConnection']._serialized_options = b'\222AZ\n\013Connections\022\023Delete a connection\032\027Delete a SSO ConnectionJ\035\n\003200\022\026\n\024Deleted Successfully\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002%*#/api/v1/connections/{connection_id}' _globals['_CONNECTIONSERVICE'].methods_by_name['DeleteConnection']._loaded_options = None - _globals['_CONNECTIONSERVICE'].methods_by_name['DeleteConnection']._serialized_options = b'\222Ak\n\013Connections\022$Delete a connection for organization\032\027Delete a SSO ConnectionJ\035\n\003200\022\026\n\024Deleted Successfully\202\265\030\002\030d\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002:*8/api/v1/organizations/{organization_id}/connections/{id}' + _globals['_CONNECTIONSERVICE'].methods_by_name['DeleteConnection']._serialized_options = b'\222A\316\002\n\013Connections\022\025Delete SSO connection\032\371\001Deletes an SSO connection from the specified organization by connection ID. Use this endpoint when an identity provider integration is no longer needed for the organization. Returns an empty response after the SSO connection is deleted successfully.J,\n\003200\022%\n#SSO connection deleted successfully\202\265\030\002\030d\202\323\344\223\002:*8/api/v1/organizations/{organization_id}/connections/{id}' _globals['_CONNECTIONSERVICE'].methods_by_name['EnableEnvironmentConnection']._loaded_options = None _globals['_CONNECTIONSERVICE'].methods_by_name['EnableEnvironmentConnection']._serialized_options = b'\222A\204\001\n\013Connections\022\023Enable a connection\032\027Enable a SSO ConnectionJG\n\003200\022@\n\007Success\0225\n3\0321.scalekit.v1.connections.ToggleConnectionResponse\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002,2*/api/v1/connections/{connection_id}:enable' _globals['_CONNECTIONSERVICE'].methods_by_name['EnableConnection']._loaded_options = None - _globals['_CONNECTIONSERVICE'].methods_by_name['EnableConnection']._serialized_options = b'\222A\377\002\n\013Connections\022\036Enable organization connection\032\356\001Activate an existing connection for the specified organization. When enabled, users can authenticate using this connection. This endpoint changes the connection state from disabled to enabled without modifying other configuration settingsJ_\n\003200\022X\n\037Connection enabled successfully\0225\n3\0321.scalekit.v1.connections.ToggleConnectionResponse\202\265\030\025\n\021connections_write\030t\202\323\344\223\002A2?/api/v1/organizations/{organization_id}/connections/{id}:enable' + _globals['_CONNECTIONSERVICE'].methods_by_name['EnableConnection']._serialized_options = b'\222A\366\002\n\013Connections\022\025Enable SSO connection\032\356\001Activate an existing connection for the specified organization. When enabled, users can authenticate using this connection. This endpoint changes the connection state from disabled to enabled without modifying other configuration settingsJ_\n\003200\022X\n\037Connection enabled successfully\0225\n3\0321.scalekit.v1.connections.ToggleConnectionResponse\202\265\030\025\n\021connections_write\030t\202\323\344\223\002A2?/api/v1/organizations/{organization_id}/connections/{id}:enable' _globals['_CONNECTIONSERVICE'].methods_by_name['DisableEnvironmentConnection']._loaded_options = None _globals['_CONNECTIONSERVICE'].methods_by_name['DisableEnvironmentConnection']._serialized_options = b'\222A\206\001\n\013Connections\022\024Disable a connection\032\030Disable a SSO ConnectionJG\n\003200\022@\n\007Success\0225\n3\0321.scalekit.v1.connections.ToggleConnectionResponse\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002-2+/api/v1/connections/{connection_id}:disable' _globals['_CONNECTIONSERVICE'].methods_by_name['DisableConnection']._loaded_options = None - _globals['_CONNECTIONSERVICE'].methods_by_name['DisableConnection']._serialized_options = b'\222A\207\003\n\013Connections\022\037Disable organization connection\032\364\001Deactivate an existing connection for the specified organization. When disabled, users cannot authenticate using this connection. This endpoint changes the connection state from enabled to disabled without modifying other configuration settingsJ`\n\003200\022Y\n Connection disabled successfully\0225\n3\0321.scalekit.v1.connections.ToggleConnectionResponse\202\265\030\025\n\021connections_write\030t\202\323\344\223\002B2@/api/v1/organizations/{organization_id}/connections/{id}:disable' + _globals['_CONNECTIONSERVICE'].methods_by_name['DisableConnection']._serialized_options = b'\222A\376\002\n\013Connections\022\026Disable SSO connection\032\364\001Deactivate an existing connection for the specified organization. When disabled, users cannot authenticate using this connection. This endpoint changes the connection state from enabled to disabled without modifying other configuration settingsJ`\n\003200\022Y\n Connection disabled successfully\0225\n3\0321.scalekit.v1.connections.ToggleConnectionResponse\202\265\030\025\n\021connections_write\030t\202\323\344\223\002B2@/api/v1/organizations/{organization_id}/connections/{id}:disable' _globals['_CONNECTIONSERVICE'].methods_by_name['GetConnectionTestResult']._loaded_options = None _globals['_CONNECTIONSERVICE'].methods_by_name['GetConnectionTestResult']._serialized_options = b'\222A\215\001\n\013Connections\022\026Test connection result\032\026Connection test resultJN\n\003200\022G\n\007Success\022<\n:\0328.scalekit.v1.connections.GetConnectionTestResultResponse\202\265\030\002\030t\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002E\022C/api/v1/connections/{connection_id}/test-requests/{test_request_id}' _globals['_CONNECTIONSERVICE'].methods_by_name['ListAppConnections']._loaded_options = None _globals['_CONNECTIONSERVICE'].methods_by_name['ListAppConnections']._serialized_options = b'\222A\276\001\n\013Connections\022\024List App connections\0326Retrieves a list of app connections in the environmentJa\n\003200\022Z\n\"Successfully retrieved connections\0224\n2\0320.scalekit.v1.connections.ListConnectionsResponse\202\265\030\002\030d\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\031\022\027/api/v1/connections/app' - _globals['_CODECHALLENGETYPE']._serialized_start=34710 - _globals['_CODECHALLENGETYPE']._serialized_end=34797 - _globals['_CONFIGURATIONTYPE']._serialized_start=34799 - _globals['_CONFIGURATIONTYPE']._serialized_end=34881 - _globals['_NAMEIDFORMAT']._serialized_start=34883 - _globals['_NAMEIDFORMAT']._serialized_end=34980 - _globals['_PASSWORDLESSTYPE']._serialized_start=34982 - _globals['_PASSWORDLESSTYPE']._serialized_end=35067 - _globals['_TESTRESULTSTATUS']._serialized_start=35069 - _globals['_TESTRESULTSTATUS']._serialized_end=35126 - _globals['_SAMLSIGNINGOPTIONS']._serialized_start=35129 - _globals['_SAMLSIGNINGOPTIONS']._serialized_end=35345 - _globals['_REQUESTBINDING']._serialized_start=35347 - _globals['_REQUESTBINDING']._serialized_end=35430 - _globals['_TOKENAUTHTYPE']._serialized_start=35432 - _globals['_TOKENAUTHTYPE']._serialized_end=35512 - _globals['_OIDCSCOPE']._serialized_start=35514 - _globals['_OIDCSCOPE']._serialized_end=35613 - _globals['_CONNECTIONTYPE']._serialized_start=35616 - _globals['_CONNECTIONTYPE']._serialized_end=35758 - _globals['_CONNECTIONSTATUS']._serialized_start=35760 - _globals['_CONNECTIONSTATUS']._serialized_end=35856 - _globals['_CONNECTIONPROVIDER']._serialized_start=35859 - _globals['_CONNECTIONPROVIDER']._serialized_end=36139 + _globals['_CONNECTIONSERVICE'].methods_by_name['GetConnectionContext']._loaded_options = None + _globals['_CONNECTIONSERVICE'].methods_by_name['GetConnectionContext']._serialized_options = b'\222A\255\001\n\013Connections\022\026Get connection context\032 None: ... class OAuthConnectionConfig(_message.Message): - __slots__ = ("authorize_uri", "token_uri", "user_info_uri", "client_id", "client_secret", "scopes", "redirect_uri", "pkce_enabled", "prompt", "use_platform_creds", "access_type", "custom_scope_name", "sync_user_profile_on_login") + __slots__ = ("authorize_uri", "token_uri", "user_info_uri", "client_id", "client_secret", "scopes", "redirect_uri", "pkce_enabled", "prompt", "use_platform_creds", "access_type", "custom_scope_name", "sync_user_profile_on_login", "token_access_type", "tenant_id", "is_cimd", "app_name", "optional_scopes") AUTHORIZE_URI_FIELD_NUMBER: _ClassVar[int] TOKEN_URI_FIELD_NUMBER: _ClassVar[int] USER_INFO_URI_FIELD_NUMBER: _ClassVar[int] @@ -581,6 +585,11 @@ class OAuthConnectionConfig(_message.Message): ACCESS_TYPE_FIELD_NUMBER: _ClassVar[int] CUSTOM_SCOPE_NAME_FIELD_NUMBER: _ClassVar[int] SYNC_USER_PROFILE_ON_LOGIN_FIELD_NUMBER: _ClassVar[int] + TOKEN_ACCESS_TYPE_FIELD_NUMBER: _ClassVar[int] + TENANT_ID_FIELD_NUMBER: _ClassVar[int] + IS_CIMD_FIELD_NUMBER: _ClassVar[int] + APP_NAME_FIELD_NUMBER: _ClassVar[int] + OPTIONAL_SCOPES_FIELD_NUMBER: _ClassVar[int] authorize_uri: _wrappers_pb2.StringValue token_uri: _wrappers_pb2.StringValue user_info_uri: _wrappers_pb2.StringValue @@ -594,7 +603,20 @@ class OAuthConnectionConfig(_message.Message): access_type: _wrappers_pb2.StringValue custom_scope_name: _wrappers_pb2.StringValue sync_user_profile_on_login: _wrappers_pb2.BoolValue - def __init__(self, authorize_uri: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., token_uri: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., user_info_uri: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., client_id: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., client_secret: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., scopes: _Optional[_Iterable[str]] = ..., redirect_uri: _Optional[str] = ..., pkce_enabled: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., prompt: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., use_platform_creds: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., access_type: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., custom_scope_name: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., sync_user_profile_on_login: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ...) -> None: ... + token_access_type: _wrappers_pb2.StringValue + tenant_id: _wrappers_pb2.StringValue + is_cimd: _wrappers_pb2.BoolValue + app_name: _wrappers_pb2.StringValue + optional_scopes: OptionalScopes + def __init__(self, authorize_uri: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., token_uri: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., user_info_uri: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., client_id: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., client_secret: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., scopes: _Optional[_Iterable[str]] = ..., redirect_uri: _Optional[str] = ..., pkce_enabled: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., prompt: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., use_platform_creds: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., access_type: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., custom_scope_name: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., sync_user_profile_on_login: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., token_access_type: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., tenant_id: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., is_cimd: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., app_name: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., optional_scopes: _Optional[_Union[OptionalScopes, _Mapping]] = ...) -> None: ... + +class OptionalScopes(_message.Message): + __slots__ = ("scopes", "field_name") + SCOPES_FIELD_NUMBER: _ClassVar[int] + FIELD_NAME_FIELD_NUMBER: _ClassVar[int] + scopes: _containers.RepeatedScalarFieldContainer[str] + field_name: str + def __init__(self, scopes: _Optional[_Iterable[str]] = ..., field_name: _Optional[str] = ...) -> None: ... class PasswordLessConfig(_message.Message): __slots__ = ("type", "frequency", "validity", "enforce_same_browser_origin", "code_challenge_length", "code_challenge_type", "regenerate_passwordless_credentials_on_resend") @@ -936,3 +958,27 @@ class ListAppConnectionsResponse(_message.Message): prev_page_token: str total_size: int def __init__(self, connections: _Optional[_Iterable[_Union[ListConnection, _Mapping]]] = ..., next_page_token: _Optional[str] = ..., prev_page_token: _Optional[str] = ..., total_size: _Optional[int] = ...) -> None: ... + +class GetConnectionContextRequest(_message.Message): + __slots__ = ("connection_id", "organization_id") + CONNECTION_ID_FIELD_NUMBER: _ClassVar[int] + ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] + connection_id: str + organization_id: str + def __init__(self, connection_id: _Optional[str] = ..., organization_id: _Optional[str] = ...) -> None: ... + +class GetConnectionContextResponse(_message.Message): + __slots__ = ("context",) + CONTEXT_FIELD_NUMBER: _ClassVar[int] + context: _struct_pb2.Struct + def __init__(self, context: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... + +class UpdateConnectionContextRequest(_message.Message): + __slots__ = ("connection_id", "organization_id", "context") + CONNECTION_ID_FIELD_NUMBER: _ClassVar[int] + ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] + CONTEXT_FIELD_NUMBER: _ClassVar[int] + connection_id: str + organization_id: str + context: _struct_pb2.Struct + def __init__(self, connection_id: _Optional[str] = ..., organization_id: _Optional[str] = ..., context: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... diff --git a/scalekit/v1/connections/connections_pb2_grpc.py b/scalekit/v1/connections/connections_pb2_grpc.py index ba04339..feede75 100644 --- a/scalekit/v1/connections/connections_pb2_grpc.py +++ b/scalekit/v1/connections/connections_pb2_grpc.py @@ -105,6 +105,16 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.ListAppConnectionsRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.ListAppConnectionsResponse.FromString, ) + self.GetConnectionContext = channel.unary_unary( + '/scalekit.v1.connections.ConnectionService/GetConnectionContext', + request_serializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.GetConnectionContextRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.GetConnectionContextResponse.FromString, + ) + self.UpdateConnectionContext = channel.unary_unary( + '/scalekit.v1.connections.ConnectionService/UpdateConnectionContext', + request_serializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.UpdateConnectionContextRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + ) class ConnectionServiceServicer(object): @@ -218,6 +228,18 @@ def ListAppConnections(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def GetConnectionContext(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def UpdateConnectionContext(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def add_ConnectionServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -311,6 +333,16 @@ def add_ConnectionServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.ListAppConnectionsRequest.FromString, response_serializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.ListAppConnectionsResponse.SerializeToString, ), + 'GetConnectionContext': grpc.unary_unary_rpc_method_handler( + servicer.GetConnectionContext, + request_deserializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.GetConnectionContextRequest.FromString, + response_serializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.GetConnectionContextResponse.SerializeToString, + ), + 'UpdateConnectionContext': grpc.unary_unary_rpc_method_handler( + servicer.UpdateConnectionContext, + request_deserializer=scalekit_dot_v1_dot_connections_dot_connections__pb2.UpdateConnectionContextRequest.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'scalekit.v1.connections.ConnectionService', rpc_method_handlers) @@ -626,3 +658,37 @@ def ListAppConnections(request, scalekit_dot_v1_dot_connections_dot_connections__pb2.ListAppConnectionsResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def GetConnectionContext(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.connections.ConnectionService/GetConnectionContext', + scalekit_dot_v1_dot_connections_dot_connections__pb2.GetConnectionContextRequest.SerializeToString, + scalekit_dot_v1_dot_connections_dot_connections__pb2.GetConnectionContextResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def UpdateConnectionContext(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.connections.ConnectionService/UpdateConnectionContext', + scalekit_dot_v1_dot_connections_dot_connections__pb2.UpdateConnectionContextRequest.SerializeToString, + google_dot_protobuf_dot_empty__pb2.Empty.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/directories/directories_pb2.py b/scalekit/v1/directories/directories_pb2.py index 9ea60be..3853f1f 100644 --- a/scalekit/v1/directories/directories_pb2.py +++ b/scalekit/v1/directories/directories_pb2.py @@ -25,7 +25,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n)scalekit/v1/directories/directories.proto\x12\x17scalekit.v1.directories\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"\xdb\x01\n\x13GetDirectoryRequest\x12S\n\x02id\x18\x01 \x01(\tBC\x92\x41\x37\x32\"Unique identifier of the directoryJ\x11\"dir_12131243412\"\xbaH\x06r\x04\x10\x01\x18 R\x02id\x12o\n\x0forganization_id\x18\x02 \x01(\tBF\x92\x41:2%Unique identifier of the organizationJ\x11\"org_12131243412\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\"\x91\x01\n\x14GetDirectoryResponse\x12y\n\tdirectory\x18\x01 \x01(\x0b\x32\".scalekit.v1.directories.DirectoryB7\x92\x41\x34\x32\x32\x44\x65tailed information about the requested directoryR\tdirectory\"\xf7\x01\n\x16\x43reateDirectoryRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41?2$Unique identifier to an OrganizationJ\x17\"org_12362474900684814\"\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x0eorganizationId\x12\x64\n\tdirectory\x18\x02 \x01(\x0b\x32(.scalekit.v1.directories.CreateDirectoryB\x1c\x92\x41\x13\x32\x11\x44irectory Details\xbaH\x03\xc8\x01\x01R\tdirectory\"\xf7\x01\n\x0f\x43reateDirectory\x12k\n\x0e\x64irectory_type\x18\x01 \x01(\x0e\x32&.scalekit.v1.directories.DirectoryTypeB\x1c\x92\x41\x0e\x32\x04TypeJ\x06\"SCIM\"\xbaH\x08\x82\x01\x02\x10\x01\xc8\x01\x01R\rdirectoryType\x12w\n\x12\x64irectory_provider\x18\x02 \x01(\x0e\x32*.scalekit.v1.directories.DirectoryProviderB\x1c\x92\x41\x11\x32\x07ProvideJ\x06\"OKTA\"\xbaH\x05\x82\x01\x02\x10\x01R\x11\x64irectoryProvider\"y\n\x17\x43reateDirectoryResponse\x12^\n\tdirectory\x18\x01 \x01(\x0b\x32\".scalekit.v1.directories.DirectoryB\x1c\x92\x41\x13\x32\x11\x44irectory Details\xbaH\x03\xc8\x01\x01R\tdirectory\"\xd9\x01\n\x16UpdateDirectoryRequest\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02id\x12\x38\n\x0forganization_id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x64\n\tdirectory\x18\x03 \x01(\x0b\x32(.scalekit.v1.directories.UpdateDirectoryB\x1c\x92\x41\x13\x32\x11\x44irectory Details\xbaH\x03\xc8\x01\x01R\tdirectory\"\x9a\x06\n\x0fUpdateDirectory\x12\x33\n\x04name\x18\x02 \x01(\tB\x1f\x92\x41\x12\x32\x04NameJ\n\"Azure AD\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x04name\x12h\n\x0e\x64irectory_type\x18\x03 \x01(\x0e\x32&.scalekit.v1.directories.DirectoryTypeB\x19\x92\x41\x0e\x32\x04TypeJ\x06\"SCIM\"\xbaH\x05\x82\x01\x02\x10\x01R\rdirectoryType\x12+\n\x07\x65nabled\x18\x07 \x01(\x08\x42\x11\x92\x41\x0e\x32\x06StatusJ\x04trueR\x07\x65nabled\x12\xec\x01\n\x12\x64irectory_provider\x18\x08 \x01(\x0e\x32*.scalekit.v1.directories.DirectoryProviderB\x90\x01\x92\x41\x84\x01\x32-Identity provider connected to this directoryJS\"OKTA\", \"GOOGLE\", \"MICROSOFT_AD\", \"AUTH0\", \"ONELOGIN\", \"JUMPCLOUD\", \"PING_IDENTITY\"\xbaH\x05\x82\x01\x02\x10\x01R\x11\x64irectoryProvider\x12h\n\x06status\x18\t \x01(\x0e\x32(.scalekit.v1.directories.DirectoryStatusB&\x92\x41\x1b\x32\x0cSetup StatusJ\x0b\"COMPLETED\"\xbaH\x05\x82\x01\x02\x10\x01R\x06status\x12\x45\n\x08mappings\x18\n \x03(\x0b\x32).scalekit.v1.directories.DirectoryMappingR\x08mappings\x12q\n\x06groups\x18\x0f \x03(\x0b\x32&.scalekit.v1.directories.ExternalGroupB1\x92\x41.2,List of groups associated with the directoryR\x06groupsJ\x04\x08\x01\x10\x02J\x04\x08\x04\x10\x05J\x04\x08\x06\x10\x07J\x04\x08\x0b\x10\x0cJ\x04\x08\x0c\x10\rJ\x04\x08\r\x10\x0eJ\x04\x08\x0e\x10\x0f\"y\n\x17UpdateDirectoryResponse\x12^\n\tdirectory\x18\x01 \x01(\x0b\x32\".scalekit.v1.directories.DirectoryB\x1c\x92\x41\x13\x32\x11\x44irectory Details\xbaH\x03\xc8\x01\x01R\tdirectory\"\xdf\x01\n\x1f\x41ssignGroupsForDirectoryRequest\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02id\x12\x38\n\x0forganization_id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x61\n\x0c\x65xternal_ids\x18\x03 \x03(\tB>\x92\x41\x35\x32\x33\x65xternal_ids of groups to be tracked during polling\xbaH\x03\xc8\x01\x01R\x0b\x65xternalIds\"\x92\x01\n\x16ListDirectoriesRequest\x12x\n\x0forganization_id\x18\x01 \x01(\tBO\x92\x41=2%Unique identifier of the organizationJ\x14\"org_12362474900684\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\"\xa1\x01\n\x17ListDirectoriesResponse\x12\x85\x01\n\x0b\x64irectories\x18\x01 \x03(\x0b\x32\".scalekit.v1.directories.DirectoryB?\x92\x41\x36\x32\x34List of directories associated with the organization\xbaH\x03\xc8\x01\x01R\x0b\x64irectories\"\xd6\t\n\x19ListDirectoryUsersRequest\x12x\n\x0forganization_id\x18\x01 \x01(\tBO\x92\x41=2%Unique identifier of the organizationJ\x14\"org_12131243412331\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x87\x01\n\x0c\x64irectory_id\x18\x02 \x01(\tBd\x92\x41R2:Unique identifier of the directory within the organizationJ\x14\"dir_12131243412331\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\x12\x86\x01\n\tpage_size\x18\x03 \x01(\rBi\x92\x41_2YNumber of users to return per page. Maximum value is 30. If not specified, defaults to 10J\x02\x31\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xb0\x01\n\npage_token\x18\x04 \x01(\tB\x90\x01\x92\x41\x8c\x01\x32\x89\x01Token for pagination. Use the value returned in the \'next_page_token\' field of the previous response to retrieve the next page of resultsR\tpageToken\x12\xe1\x01\n\x0einclude_detail\x18\x05 \x01(\x08\x42\xb4\x01\x92\x41\xb0\x01\x32\xa7\x01If set to true, the response will include the full user payload with all available details. If false or not specified, only essential user information will be returnedJ\x04trueH\x00R\rincludeDetail\x88\x01\x01\x12\xa1\x01\n\x12\x64irectory_group_id\x18\x06 \x01(\tBn\x92\x41W2>Filter users by their membership in a specific directory groupJ\x15\"dirgroup_1213124341\"\xbaH\x11r\x0f\x10\x01\x18%:\tdirgroup_H\x01R\x10\x64irectoryGroupId\x88\x01\x01\x12\xb4\x01\n\rupdated_after\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampBn\x92\x41k2QFilter users that were updated after the specified timestamp. Use ISO 8601 formatJ\x16\"2021-01-01T00:00:00Z\"H\x02R\x0cupdatedAfter\x88\x01\x01\x42\x11\n\x0f_include_detailB\x15\n\x13_directory_group_idB\x10\n\x0e_updated_after\"\xe1\x04\n\x1aListDirectoryUsersResponse\x12\x81\x01\n\x05users\x18\x01 \x03(\x0b\x32&.scalekit.v1.directories.DirectoryUserBC\x92\x41@2>List of directory users retrieved from the specified directoryR\x05users\x12t\n\ntotal_size\x18\x02 \x01(\rBU\x92\x41R2PTotal number of users available in the directory that match the request criteriaR\ttotalSize\x12\xa5\x01\n\x0fnext_page_token\x18\x03 \x01(\tB}\x92\x41z2xToken for pagination. Use this token in the \'page_token\' field of the next request to fetch the subsequent page of usersR\rnextPageToken\x12\xa0\x01\n\x0fprev_page_token\x18\x04 \x01(\tBx\x92\x41u2sToken for pagination. Use this token in the \'page_token\' field of the next request to fetch the prior page of usersR\rprevPageToken\"\xb6\x08\n\x1aListDirectoryGroupsRequest\x12y\n\x0forganization_id\x18\x01 \x01(\tBP\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12p\n\x0c\x64irectory_id\x18\x02 \x01(\tBM\x92\x41;2\"Unique identifier of the directoryJ\x15\"dir_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\x12\x87\x01\n\tpage_size\x18\x03 \x01(\rBj\x92\x41`2ZNumber of groups to return per page. Maximum value is 30. If not specified, defaults to 10J\x02\x31\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\x88\x01\n\npage_token\x18\x04 \x01(\tBi\x92\x41\x66\x32\x64Token for pagination. Use the value returned in the \'next_page_token\' field of the previous responseR\tpageToken\x12\xa2\x01\n\rupdated_after\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\\\x92\x41Y2?Filter groups updated after this timestamp. Use ISO 8601 formatJ\x16\"2021-01-01T00:00:00Z\"H\x00R\x0cupdatedAfter\x88\x01\x01\x12\x96\x01\n\x0einclude_detail\x18\x06 \x01(\x08\x42j\x92\x41g2_If true, includes full group details. If false or not specified, returns basic information onlyJ\x04trueH\x01R\rincludeDetail\x88\x01\x01\x12\x96\x01\n\x17include_external_groups\x18\x07 \x01(\x08\x42Y\x92\x41V2NIf true, returns group and its details from external provider (default: false)J\x04trueH\x02R\x15includeExternalGroups\x88\x01\x01\x42\x10\n\x0e_updated_afterB\x11\n\x0f_include_detailB\x1a\n\x18_include_external_groups\"\xcd\x04\n\x1bListDirectoryGroupsResponse\x12\x85\x01\n\x06groups\x18\x01 \x03(\x0b\x32\'.scalekit.v1.directories.DirectoryGroupBD\x92\x41\x41\x32?List of directory groups retrieved from the specified directoryR\x06groups\x12r\n\ntotal_size\x18\x02 \x01(\rBS\x92\x41P2NTotal number of groups matching the request criteria, regardless of paginationR\ttotalSize\x12\x95\x01\n\x0fnext_page_token\x18\x03 \x01(\tBm\x92\x41j2hToken to retrieve the next page of results. Use this token in the \'page_token\' field of the next requestR\rnextPageToken\x12\x99\x01\n\x0fprev_page_token\x18\x04 \x01(\tBq\x92\x41n2lToken to retrieve the previous page of results. Use this token in the \'page_token\' field of the next requestR\rprevPageToken\"\x90\x02\n!ListDirectoryGroupsSummaryRequest\x12y\n\x0forganization_id\x18\x01 \x01(\tBP\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12p\n\x0c\x64irectory_id\x18\x02 \x01(\tBM\x92\x41;2\"Unique identifier of the directoryJ\x15\"dir_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\"\x94\x13\n\tDirectory\x12]\n\x02id\x18\x01 \x01(\tBM\x92\x41;2\"Unique identifier of the directoryJ\x15\"dir_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02id\x12}\n\x04name\x18\x02 \x01(\tBi\x92\x41\\2NName of the directory, typically representing the connected Directory providerJ\n\"Azure AD\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x04name\x12\xb7\x01\n\x0e\x64irectory_type\x18\x03 \x01(\x0e\x32&.scalekit.v1.directories.DirectoryTypeBh\x92\x41]2SType of the directory, indicating the protocol or standard used for synchronizationJ\x06\"SCIM\"\xbaH\x05\x82\x01\x02\x10\x01R\rdirectoryType\x12\x98\x01\n\x0forganization_id\x18\x04 \x01(\tBo\x92\x41]2DUnique identifier of the organization to which the directory belongsJ\x15\"org_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x85\x01\n\x07\x65nabled\x18\x05 \x01(\x08\x42k\x92\x41h2`Indicates whether the directory is currently enabled and actively synchronizing users and groupsJ\x04trueR\x07\x65nabled\x12\x9d\x01\n\x12\x64irectory_provider\x18\x06 \x01(\x0e\x32*.scalekit.v1.directories.DirectoryProviderBB\x92\x41\x37\x32-Identity provider connected to this directoryJ\x06\"OKTA\"\xbaH\x05\x82\x01\x02\x10\x01R\x11\x64irectoryProvider\x12\xbf\x01\n\x0elast_synced_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB}\x92\x41z2`Timestamp of the last successful synchronization of users and groups from the Directory ProviderJ\x16\"2024-10-01T00:00:00Z\"R\x0clastSyncedAt\x12\xed\x01\n\x12\x64irectory_endpoint\x18\x08 \x01(\tB\xbd\x01\x92\x41\xaf\x01\x32\x65The endpoint URL generated by Scalekit for synchronizing users and groups from the Directory ProviderJF\"https://yourapp.scalekit.com/api/v1/directoies/dir_123212312/scim/v2\"\xbaH\x07r\x05\x10\x01\x18\xd0\x0fR\x11\x64irectoryEndpoint\x12P\n\x0btotal_users\x18\t \x01(\x05\x42/\x92\x41,2&Total number of users in the directoryJ\x02\x31\x30R\ntotalUsers\x12S\n\x0ctotal_groups\x18\n \x01(\x05\x42\x30\x92\x41-2\'Total number of groups in the directoryJ\x02\x31\x30R\x0btotalGroups\x12\x95\x01\n\x07secrets\x18\x0b \x03(\x0b\x32\x1f.scalekit.v1.directories.SecretBZ\x92\x41W2UList of secrets used for authenticating and synchronizing with the Directory ProviderR\x07secrets\x12\x9b\x01\n\x05stats\x18\x0c \x01(\x0b\x32\x1e.scalekit.v1.directories.StatsBe\x92\x41\x62\x32`Statistics and metrics related to the directory, such as synchronization status and error countsR\x05stats\x12\xaf\x01\n\x10role_assignments\x18\r \x01(\x0b\x32(.scalekit.v1.directories.RoleAssignmentsBZ\x92\x41W2URole assignments associated with the directory, defining group based role assignmentsR\x0froleAssignments\x12\xac\x01\n\x12\x61ttribute_mappings\x18\x0e \x01(\x0b\x32*.scalekit.v1.directories.AttributeMappingsBQ\x92\x41N2LMappings between directory attributes and Scalekit user and group attributesR\x11\x61ttributeMappings\x12\x44\n\x06status\x18\x0f \x01(\tB,\x92\x41!2\x10\x44irectory StatusJ\r\"IN_PROGRESS\"\xbaH\x05\x82\x01\x02\x10\x01R\x06status\x12~\n\x05\x65mail\x18\x10 \x01(\tBh\x92\x41\x65\x32HEmail Id associated with Directory whose access will be used for pollingJ\x19\"john.doe@scalekit.cloud\"R\x05\x65mail\x12v\n\x0egroups_tracked\x18\x11 \x01(\tBO\x92\x41L2CIt indicates if all groups are tracked or select groups are trackedJ\x05\"ALL\"R\rgroupsTracked\"\xaf\x03\n\x16ToggleDirectoryRequest\x12\xc8\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9e\x01\x92\x41\x8b\x01\x32rA unique identifier for the organization. The value must begin with \'org_\' and be between 1 and 32 characters longJ\x15\"org_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xc3\x01\n\x02id\x18\x03 \x01(\tB\xb2\x01\x92\x41\x9f\x01\x32\x85\x01\x41 unique identifier for a directory within the organization. The value must begin with \'dir_\' and be between 1 and 32 characters longJ\x15\"dir_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02idJ\x04\x08\x02\x10\x03\"\xac\x04\n\x17ToggleDirectoryResponse\x12\x96\x02\n\x07\x65nabled\x18\x01 \x01(\x08\x42\xfb\x01\x92\x41\xf7\x01\x32\xee\x01Specifies the directory\'s state after the toggle operation. A value of `true` indicates that the directory is enabled and actively synchronizing users and groups. A value of `false` means the directory is disabled, halting synchronizationJ\x04trueR\x07\x65nabled\x12\xe5\x01\n\rerror_message\x18\x02 \x01(\tB\xba\x01\x92\x41\xb6\x01\x32\x8f\x01\x43ontains a human-readable error message if the toggle operation encountered an issue. If the operation was successful, this field will be emptyJ\"\"The directory is already enabled\"H\x00R\x0c\x65rrorMessage\x88\x01\x01\x42\x10\n\x0e_error_message\"z\n\x10\x44irectoryMapping\x12\x1e\n\x03key\x18\x01 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x03key\x12#\n\x06map_to\x18\x02 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x05mapTo\x12!\n\x0c\x64isplay_name\x18\x03 \x01(\tR\x0b\x64isplayName\"\xae\x05\n\rDirectoryUser\x12J\n\x02id\x18\x01 \x01(\tB:\x92\x41$2\x07User IDJ\x19\"diruser_121312434123312\"\xbaH\x10r\x0e\x10\x01\x18$:\x08\x64iruser_R\x02id\x12\x35\n\x05\x65mail\x18\x02 \x01(\tB\x1f\x92\x41\x12\x32\x05\x45mailJ\t\"johndoe\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x05\x65mail\x12[\n\x12preferred_username\x18\x03 \x01(\tB,\x92\x41\x1f\x32\x12Preferred UsernameJ\t\"johndoe\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x11preferredUsername\x12@\n\ngiven_name\x18\x04 \x01(\tB!\x92\x41\x14\x32\nFirst NameJ\x06\"John\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\tgivenName\x12@\n\x0b\x66\x61mily_name\x18\x05 \x01(\tB\x1f\x92\x41\x12\x32\tLast NameJ\x05\"Doe\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\nfamilyName\x12\x62\n\nupdated_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\'\x92\x41$2\nUpdated AtJ\x16\"2024-10-01T00:00:00Z\"R\tupdatedAt\x12#\n\x06\x65mails\x18\x10 \x03(\tB\x0b\x92\x41\x08\x32\x06\x45mailsR\x06\x65mails\x12L\n\x06groups\x18\x11 \x03(\x0b\x32\'.scalekit.v1.directories.DirectoryGroupB\x0b\x92\x41\x08\x32\x06GroupsR\x06groups\x12\\\n\x0buser_detail\x18\x12 \x01(\x0b\x32\x17.google.protobuf.StructB\"\x92\x41\x1f\x32\x1d\x43omplete User Details PayloadR\nuserDetailJ\x04\x08\x07\x10\x10\"\xf3\x01\n\rExternalGroup\x12T\n\x0b\x65xternal_id\x18\x01 \x01(\tB3\x92\x41&2\x11\x45xternal Group IDJ\x11\"02y3w247124ccqi\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\nexternalId\x12H\n\x0c\x64isplay_name\x18\x02 \x01(\tB%\x92\x41\x18\x32\x0c\x44isplay NameJ\x08\"Admins\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x0b\x64isplayName\x12\x42\n\x05\x65mail\x18\x03 \x01(\tB,\x92\x41\x1f\x32\x05\x45mailJ\x16\"johndoe@scalekit.com\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x05\x65mail\"\xb2\x03\n\x0e\x44irectoryGroup\x12M\n\x02id\x18\x01 \x01(\tB=\x92\x41&2\x08Group IDJ\x1a\"dirgroup_121312434123312\"\xbaH\x11r\x0f\x10\x01\x18$:\tdirgroup_R\x02id\x12H\n\x0c\x64isplay_name\x18\x02 \x01(\tB%\x92\x41\x18\x32\x0c\x44isplay NameJ\x08\"Admins\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x0b\x64isplayName\x12\x42\n\x0btotal_users\x18\x03 \x01(\x05\x42!\x92\x41\x1e\x32\x18Total Users in the GroupJ\x02\x31\x30R\ntotalUsers\x12\x62\n\nupdated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\'\x92\x41$2\nUpdated AtJ\x16\"2024-10-01T00:00:00Z\"R\tupdatedAt\x12_\n\x0cgroup_detail\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructB#\x92\x41 2\x1e\x43omplete Group Details PayloadR\x0bgroupDetail\"\xb9\x01\n\x1c\x43reateDirectorySecretRequest\x12\x65\n\x0forganization_id\x18\x01 \x01(\tB<\x92\x41*2\x0fOrganization IDJ\x17\"org_12362474900684814\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x32\n\x0c\x64irectory_id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\"\xa4\x02\n\x1d\x43reateDirectorySecretResponse\x12\xb4\x01\n\x0cplain_secret\x18\x01 \x01(\tB\x90\x01\x92\x41\x8c\x01\x32VPlain Secret. This is only returned in Plain Text as response to the Creation Request.J2\"dXNlcm5hbWU6cGFzc3dvcmQ6c2VjcmV0a2V5MTIzNDU2Nzg5\"R\x0bplainSecret\x12L\n\x06secret\x18\x02 \x01(\x0b\x32\x1f.scalekit.v1.directories.SecretB\x13\x92\x41\x10\x32\x0eSecret DetailsR\x06secret\"\x90\x01\n RegenerateDirectorySecretRequest\x12\x38\n\x0forganization_id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x32\n\x0c\x64irectory_id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\"\xa8\x02\n!RegenerateDirectorySecretResponse\x12\xb4\x01\n\x0cplain_secret\x18\x01 \x01(\tB\x90\x01\x92\x41\x8c\x01\x32VPlain Secret. This is only returned in Plain Text as response to the Creation Request.J2\"dXNlcm5hbWU6cGFzc3dvcmQ6c2VjcmV0a2V5MTIzNDU2Nzg5\"R\x0bplainSecret\x12L\n\x06secret\x18\x02 \x01(\x0b\x32\x1f.scalekit.v1.directories.SecretB\x13\x92\x41\x10\x32\x0eSecret DetailsR\x06secret\"\xe6\x04\n\x06Secret\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04sec_R\x02id\x12g\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB*\x92\x41\'2\rCreation TimeJ\x16\"2024-10-01T00:00:00Z\"R\ncreateTime\x12?\n\rsecret_suffix\x18\x04 \x01(\tB\x1a\x92\x41\x17\x32\rSecret SuffixJ\x06\"Nzg5\"R\x0csecretSuffix\x12]\n\x06status\x18\x05 \x01(\x0e\x32%.scalekit.v1.directories.SecretStatusB\x1e\x92\x41\x1b\x32\rSecret StatusJ\n\"INACTIVE\"R\x06status\x12\x65\n\x0b\x65xpire_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB(\x92\x41%2\x0b\x45xpiry TimeJ\x16\"2025-10-01T00:00:00Z\"R\nexpireTime\x12m\n\x0elast_used_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB+\x92\x41(2\x0eLast Used TimeJ\x16\"2024-10-01T00:00:00Z\"R\x0clastUsedTime\x12\\\n\x0c\x64irectory_id\x18\t \x01(\tB9\x92\x41\'2\x0c\x44irectory IDJ\x17\"dir_12362474900684814\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\"\xb7\x03\n\x05Stats\x12\x46\n\x0btotal_users\x18\x01 \x01(\x05\x42%\x92\x41\"2\x1cTotal Users in the DirectoryJ\x02\x31\x30R\ntotalUsers\x12I\n\x0ctotal_groups\x18\x02 \x01(\x05\x42&\x92\x41#2\x1dTotal Groups in the DirectoryJ\x02\x31\x30R\x0btotalGroups\x12\x8d\x01\n\x10group_updated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBG\x92\x41\x44\x32*Max time of Group Updated At for DirectoryJ\x16\"2024-10-01T00:00:00Z\"R\x0egroupUpdatedAt\x12\x8a\x01\n\x0fuser_updated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampBF\x92\x41\x43\x32)Max time of User Updated At for DirectoryJ\x16\"2024-10-01T00:00:00Z\"R\ruserUpdatedAt\"\xb8\x01\n\x12\x41ssignRolesRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\x19\n\x02id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18 R\x02id\x12S\n\x10role_assignments\x18\x03 \x01(\x0b\x32(.scalekit.v1.directories.RoleAssignmentsR\x0froleAssignments\"\\\n\x0fRoleAssignments\x12I\n\x0b\x61ssignments\x18\x01 \x03(\x0b\x32\'.scalekit.v1.directories.RoleAssignmentR\x0b\x61ssignments\"j\n\x13\x41ssignRolesResponse\x12S\n\x10role_assignments\x18\x01 \x01(\x0b\x32(.scalekit.v1.directories.RoleAssignmentsR\x0froleAssignments\"\x99\x02\n\x0eRoleAssignment\x12_\n\x08group_id\x18\x01 \x01(\tBD\x92\x41\x38\x32\x1dgroup ID for the role mappingJ\x17\"dirgroup_121312434123\"\xbaH\x06r\x04\x10\x01\x18 R\x07groupId\x12?\n\trole_name\x18\x02 \x01(\tB\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\x65\n\x07role_id\x18\x03 \x01(\tBL\x92\x41\x33\x32\x1crole ID for the role mappingJ\x13\"role_121312434123\"\xbaH\x04r\x02\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\x06roleId\"\xcd\x01\n\x17UpdateAttributesRequest\x12\x38\n\x0forganization_id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x1f\n\x02id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02id\x12W\n\x11\x61ttribute_mapping\x18\x03 \x01(\x0b\x32*.scalekit.v1.directories.AttributeMappingsR\x10\x61ttributeMapping\"^\n\x11\x41ttributeMappings\x12I\n\nattributes\x18\x01 \x03(\x0b\x32).scalekit.v1.directories.AttributeMappingR\nattributes\"W\n\x10\x41ttributeMapping\x12\x1e\n\x03key\x18\x01 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x03key\x12#\n\x06map_to\x18\x02 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x05mapTo\"u\n\x18UpdateAttributesResponse\x12Y\n\x12\x61ttribute_mappings\x18\x01 \x01(\x0b\x32*.scalekit.v1.directories.AttributeMappingsR\x11\x61ttributeMappings\"y\n\x16\x44\x65leteDirectoryRequest\x12\x38\n\x0forganization_id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x1f\n\x02id\x18\x03 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02idJ\x04\x08\x02\x10\x03\"\xfb\x01\n\x1bTriggerDirectorySyncRequest\x12h\n\x0c\x64irectory_id\x18\x01 \x01(\tBE\x92\x41\x39\x32 Unique identifier of a DirectoryJ\x15\"dir_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0b\x64irectoryId\x12r\n\x0forganization_id\x18\x02 \x01(\tBI\x92\x41=2$Unique identifier to an OrganizationJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId*M\n\rDirectoryType\x12\x1e\n\x1a\x44IRECTORY_TYPE_UNSPECIFIED\x10\x00\x12\x08\n\x04SCIM\x10\x01\x12\x08\n\x04LDAP\x10\x02\x12\x08\n\x04POLL\x10\x03*\x9a\x01\n\x11\x44irectoryProvider\x12\"\n\x1e\x44IRECTORY_PROVIDER_UNSPECIFIED\x10\x00\x12\x08\n\x04OKTA\x10\x01\x12\n\n\x06GOOGLE\x10\x02\x12\x10\n\x0cMICROSOFT_AD\x10\x03\x12\t\n\x05\x41UTH0\x10\x04\x12\x0c\n\x08ONELOGIN\x10\x05\x12\r\n\tJUMPCLOUD\x10\x06\x12\x11\n\rPING_IDENTITY\x10\x07*^\n\x0f\x44irectoryStatus\x12 \n\x1c\x44IRECTORY_STATUS_UNSPECIFIED\x10\x00\x12\t\n\x05\x44RAFT\x10\x01\x12\x0f\n\x0bIN_PROGRESS\x10\x02\x12\r\n\tCOMPLETED\x10\x03*(\n\x0cSecretStatus\x12\n\n\x06\x41\x43TIVE\x10\x00\x12\x0c\n\x08INACTIVE\x10\x01\x32\xeb\x31\n\x10\x44irectoryService\x12\xe4\x01\n\x0f\x43reateDirectory\x12/.scalekit.v1.directories.CreateDirectoryRequest\x1a\x30.scalekit.v1.directories.CreateDirectoryResponse\"n\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02@\"3/api/v1/organizations/{organization_id}/directories:\tdirectory\x12\x9e\x02\n\x0f\x44\x65leteDirectory\x12/.scalekit.v1.directories.DeleteDirectoryRequest\x1a\x16.google.protobuf.Empty\"\xc1\x01\x92\x41i\n\tDirectory\x12\x12\x44\x65lete a directory\x1a)Delete a Directory within an organizationJ\x1d\n\x03\x32\x30\x30\x12\x16\n\x14\x44\x65leted Successfully\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02:*8/api/v1/organizations/{organization_id}/directories/{id}\x12\xe9\x01\n\x0fUpdateDirectory\x12/.scalekit.v1.directories.UpdateDirectoryRequest\x1a\x30.scalekit.v1.directories.UpdateDirectoryResponse\"s\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x45\x32\x38/api/v1/organizations/{organization_id}/directories/{id}:\tdirectory\x12\xe7\x01\n\x18\x41ssignGroupsForDirectory\x12\x38.scalekit.v1.directories.AssignGroupsForDirectoryRequest\x1a\x16.google.protobuf.Empty\"y\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02K\x1a\x46/api/v1/organizations/{organization_id}/directories/{id}/groups:assign:\x01*\x12\xfb\x01\n\x0b\x41ssignRoles\x12+.scalekit.v1.directories.AssignRolesRequest\x1a,.scalekit.v1.directories.AssignRolesResponse\"\x90\x01\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x62\x1aN/api/v1/organizations/{organization_id}/directories/{id}/groups/-/roles:assign:\x10role_assignments\x12\x80\x02\n\x10UpdateAttributes\x12\x30.scalekit.v1.directories.UpdateAttributesRequest\x1a\x31.scalekit.v1.directories.UpdateAttributesResponse\"\x86\x01\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02X\x1a\x43/api/v1/organizations/{organization_id}/directories/{id}/attributes:\x11\x61ttribute_mapping\x12\xa4\x03\n\x0cGetDirectory\x12,.scalekit.v1.directories.GetDirectoryRequest\x1a-.scalekit.v1.directories.GetDirectoryResponse\"\xb6\x02\x92\x41\xda\x01\n\tDirectory\x12\x15Get directory details\x1aPRetrieves detailed information about a specific directory within an organizationJd\n\x03\x32\x30\x30\x12]\n(Successfully retrieved directory details\x12\x31\n/\x1a-.scalekit.v1.directories.GetDirectoryResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\x82\xd3\xe4\x93\x02:\x12\x38/api/v1/organizations/{organization_id}/directories/{id}\x12\xfd\x02\n\x0fListDirectories\x12/.scalekit.v1.directories.ListDirectoriesRequest\x1a\x30.scalekit.v1.directories.ListDirectoriesResponse\"\x86\x02\x92\x41\xaf\x01\n\tDirectory\x12\x1dList organization directoriesJ\x82\x01\n\x03\x32\x30\x30\x12{\nCSuccessfully retrieved the list of directories for the organization\x12\x34\n2\x1a\x30.scalekit.v1.directories.ListDirectoriesResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\x82\xd3\xe4\x93\x02\x35\x12\x33/api/v1/organizations/{organization_id}/directories\x12\xc3\x03\n\x0f\x45nableDirectory\x12/.scalekit.v1.directories.ToggleDirectoryRequest\x1a\x30.scalekit.v1.directories.ToggleDirectoryResponse\"\xcc\x02\x92\x41\xe8\x01\n\tDirectory\x12\x12\x45nable a directory\x1a\x7f\x41\x63tivates a directory within an organization, allowing it to synchronize users and groups with the connected Directory providerJF\n\x03\x32\x30\x30\x12?\n\x07Success\x12\x34\n2\x1a\x30.scalekit.v1.directories.ToggleDirectoryResponse\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\x82\xd3\xe4\x93\x02\x41\x32?/api/v1/organizations/{organization_id}/directories/{id}:enable\x12\x8e\x04\n\x10\x44isableDirectory\x12/.scalekit.v1.directories.ToggleDirectoryRequest\x1a\x30.scalekit.v1.directories.ToggleDirectoryResponse\"\x96\x03\x92\x41\xb1\x02\n\tDirectory\x12\x13\x44isable a directory\x1a\xaa\x01Stops synchronization of users and groups from a specified directory within an organization. This operation prevents further updates from the connected Directory providerJb\n\x03\x32\x30\x30\x12[\n#Successfully disabled the directory\x12\x34\n2\x1a\x30.scalekit.v1.directories.ToggleDirectoryResponse\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\x82\xd3\xe4\x93\x02\x42\x32@/api/v1/organizations/{organization_id}/directories/{id}:disable\x12\xcd\x04\n\x12ListDirectoryUsers\x12\x32.scalekit.v1.directories.ListDirectoryUsersRequest\x1a\x33.scalekit.v1.directories.ListDirectoryUsersResponse\"\xcd\x03\x92\x41\xe1\x02\n\tDirectory\x12\x14List directory users\x1a\xb2\x01Retrieves a list of all users within a specified directory for an organization. This endpoint allows you to view user accounts associated with your connected Directory Providers.J\x88\x01\n\x03\x32\x30\x30\x12\x80\x01\nESuccessfully retrieved the list of users from the specified directory\x12\x37\n5\x1a\x33.scalekit.v1.directories.ListDirectoryUsersResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\x82\xd3\xe4\x93\x02J\x12H/api/v1/organizations/{organization_id}/directories/{directory_id}/users\x12\xa4\x04\n\x13ListDirectoryGroups\x12\x33.scalekit.v1.directories.ListDirectoryGroupsRequest\x1a\x34.scalekit.v1.directories.ListDirectoryGroupsResponse\"\xa1\x03\x92\x41\xb4\x02\n\tDirectory\x12\x15List directory groups\x1a\x82\x01Retrieves all groups from a specified directory. Use this endpoint to view group structures from your connected identity provider.J\x8a\x01\n\x03\x32\x30\x30\x12\x82\x01\nFSuccessfully retrieved the list of groups from the specified directory\x12\x38\n6\x1a\x34.scalekit.v1.directories.ListDirectoryGroupsResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\x82\xd3\xe4\x93\x02K\x12I/api/v1/organizations/{organization_id}/directories/{directory_id}/groups\x12\xd3\x04\n\x1aListDirectoryGroupsSummary\x12:.scalekit.v1.directories.ListDirectoryGroupsSummaryRequest\x1a\x34.scalekit.v1.directories.ListDirectoryGroupsResponse\"\xc2\x03\x92\x41\xbe\x02\n\tDirectory\x12\x1dList directory groups summary\x1a\x84\x01Retrieves all groups from a specified directory. This is not a paginated api. It gives a summary view with id and name of the group.J\x8a\x01\n\x03\x32\x30\x30\x12\x82\x01\nFSuccessfully retrieved the list of groups from the specified directory\x12\x38\n6\x1a\x34.scalekit.v1.directories.ListDirectoryGroupsResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02S\x12Q/api/v1/organizations/{organization_id}/directories/{directory_id}/groups/summary\x12\xfe\x02\n\x15\x43reateDirectorySecret\x12\x35.scalekit.v1.directories.CreateDirectorySecretRequest\x1a\x36.scalekit.v1.directories.CreateDirectorySecretResponse\"\xf5\x01\x92\x41x\n\tDirectory\x12\x1d\x43reate secret for a directoryJL\n\x03\x32\x30\x30\x12\x45\n\x07Success\x12:\n8\x1a\x36.scalekit.v1.directories.CreateDirectorySecretResponse\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02L\"J/api/v1/organizations/{organization_id}/directories/{directory_id}/secrets\x12\x9e\x03\n\x19RegenerateDirectorySecret\x12\x39.scalekit.v1.directories.RegenerateDirectorySecretRequest\x1a:.scalekit.v1.directories.RegenerateDirectorySecretResponse\"\x89\x02\x92\x41\x80\x01\n\tDirectory\x12!Regenerate secret for a directoryJP\n\x03\x32\x30\x30\x12I\n\x07Success\x12>\n<\x1a:.scalekit.v1.directories.RegenerateDirectorySecretResponse\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02W\"U/api/v1/organizations/{organization_id}/directories/{directory_id}/secrets:regenerate\x12\xdd\x01\n\x14TriggerDirectorySync\x12\x34.scalekit.v1.directories.TriggerDirectorySyncRequest\x1a\x16.google.protobuf.Empty\"w\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02I\x12G/api/v1/organizations/{organization_id}/directories/{directory_id}:sync\x1a\xaa\x02\x92\x41\xa6\x02\n\tDirectory\x12\x98\x02\x44irectory management for viewing and controlling external identity provider connections in your Scalekit environment. This service provides endpoints for retrieving directory information, listing directories and their contents, and enabling or disabling directory synchronization.B7Z5github.com/scalekit-inc/scalekit/pkg/grpc/directoriesb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n)scalekit/v1/directories/directories.proto\x12\x17scalekit.v1.directories\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"\xdb\x01\n\x13GetDirectoryRequest\x12S\n\x02id\x18\x01 \x01(\tBC\x92\x41\x37\x32\"Unique identifier of the directoryJ\x11\"dir_12131243412\"\xbaH\x06r\x04\x10\x01\x18 R\x02id\x12o\n\x0forganization_id\x18\x02 \x01(\tBF\x92\x41:2%Unique identifier of the organizationJ\x11\"org_12131243412\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\"\x91\x01\n\x14GetDirectoryResponse\x12y\n\tdirectory\x18\x01 \x01(\x0b\x32\".scalekit.v1.directories.DirectoryB7\x92\x41\x34\x32\x32\x44\x65tailed information about the requested directoryR\tdirectory\"\xf7\x01\n\x16\x43reateDirectoryRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41?2$Unique identifier to an OrganizationJ\x17\"org_12362474900684814\"\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x0eorganizationId\x12\x64\n\tdirectory\x18\x02 \x01(\x0b\x32(.scalekit.v1.directories.CreateDirectoryB\x1c\x92\x41\x13\x32\x11\x44irectory Details\xbaH\x03\xc8\x01\x01R\tdirectory\"\xf7\x01\n\x0f\x43reateDirectory\x12k\n\x0e\x64irectory_type\x18\x01 \x01(\x0e\x32&.scalekit.v1.directories.DirectoryTypeB\x1c\x92\x41\x0e\x32\x04TypeJ\x06\"SCIM\"\xbaH\x08\x82\x01\x02\x10\x01\xc8\x01\x01R\rdirectoryType\x12w\n\x12\x64irectory_provider\x18\x02 \x01(\x0e\x32*.scalekit.v1.directories.DirectoryProviderB\x1c\x92\x41\x11\x32\x07ProvideJ\x06\"OKTA\"\xbaH\x05\x82\x01\x02\x10\x01R\x11\x64irectoryProvider\"y\n\x17\x43reateDirectoryResponse\x12^\n\tdirectory\x18\x01 \x01(\x0b\x32\".scalekit.v1.directories.DirectoryB\x1c\x92\x41\x13\x32\x11\x44irectory Details\xbaH\x03\xc8\x01\x01R\tdirectory\"\xd9\x01\n\x16UpdateDirectoryRequest\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02id\x12\x38\n\x0forganization_id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x64\n\tdirectory\x18\x03 \x01(\x0b\x32(.scalekit.v1.directories.UpdateDirectoryB\x1c\x92\x41\x13\x32\x11\x44irectory Details\xbaH\x03\xc8\x01\x01R\tdirectory\"\x9a\x06\n\x0fUpdateDirectory\x12\x33\n\x04name\x18\x02 \x01(\tB\x1f\x92\x41\x12\x32\x04NameJ\n\"Azure AD\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x04name\x12h\n\x0e\x64irectory_type\x18\x03 \x01(\x0e\x32&.scalekit.v1.directories.DirectoryTypeB\x19\x92\x41\x0e\x32\x04TypeJ\x06\"SCIM\"\xbaH\x05\x82\x01\x02\x10\x01R\rdirectoryType\x12+\n\x07\x65nabled\x18\x07 \x01(\x08\x42\x11\x92\x41\x0e\x32\x06StatusJ\x04trueR\x07\x65nabled\x12\xec\x01\n\x12\x64irectory_provider\x18\x08 \x01(\x0e\x32*.scalekit.v1.directories.DirectoryProviderB\x90\x01\x92\x41\x84\x01\x32-Identity provider connected to this directoryJS\"OKTA\", \"GOOGLE\", \"MICROSOFT_AD\", \"AUTH0\", \"ONELOGIN\", \"JUMPCLOUD\", \"PING_IDENTITY\"\xbaH\x05\x82\x01\x02\x10\x01R\x11\x64irectoryProvider\x12h\n\x06status\x18\t \x01(\x0e\x32(.scalekit.v1.directories.DirectoryStatusB&\x92\x41\x1b\x32\x0cSetup StatusJ\x0b\"COMPLETED\"\xbaH\x05\x82\x01\x02\x10\x01R\x06status\x12\x45\n\x08mappings\x18\n \x03(\x0b\x32).scalekit.v1.directories.DirectoryMappingR\x08mappings\x12q\n\x06groups\x18\x0f \x03(\x0b\x32&.scalekit.v1.directories.ExternalGroupB1\x92\x41.2,List of groups associated with the directoryR\x06groupsJ\x04\x08\x01\x10\x02J\x04\x08\x04\x10\x05J\x04\x08\x06\x10\x07J\x04\x08\x0b\x10\x0cJ\x04\x08\x0c\x10\rJ\x04\x08\r\x10\x0eJ\x04\x08\x0e\x10\x0f\"y\n\x17UpdateDirectoryResponse\x12^\n\tdirectory\x18\x01 \x01(\x0b\x32\".scalekit.v1.directories.DirectoryB\x1c\x92\x41\x13\x32\x11\x44irectory Details\xbaH\x03\xc8\x01\x01R\tdirectory\"\xdf\x01\n\x1f\x41ssignGroupsForDirectoryRequest\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02id\x12\x38\n\x0forganization_id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x61\n\x0c\x65xternal_ids\x18\x03 \x03(\tB>\x92\x41\x35\x32\x33\x65xternal_ids of groups to be tracked during polling\xbaH\x03\xc8\x01\x01R\x0b\x65xternalIds\"\x92\x01\n\x16ListDirectoriesRequest\x12x\n\x0forganization_id\x18\x01 \x01(\tBO\x92\x41=2%Unique identifier of the organizationJ\x14\"org_12362474900684\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\"\xa1\x01\n\x17ListDirectoriesResponse\x12\x85\x01\n\x0b\x64irectories\x18\x01 \x03(\x0b\x32\".scalekit.v1.directories.DirectoryB?\x92\x41\x36\x32\x34List of directories associated with the organization\xbaH\x03\xc8\x01\x01R\x0b\x64irectories\"\xd6\t\n\x19ListDirectoryUsersRequest\x12x\n\x0forganization_id\x18\x01 \x01(\tBO\x92\x41=2%Unique identifier of the organizationJ\x14\"org_12131243412331\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x87\x01\n\x0c\x64irectory_id\x18\x02 \x01(\tBd\x92\x41R2:Unique identifier of the directory within the organizationJ\x14\"dir_12131243412331\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\x12\x86\x01\n\tpage_size\x18\x03 \x01(\rBi\x92\x41_2YNumber of users to return per page. Maximum value is 30. If not specified, defaults to 10J\x02\x31\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xb0\x01\n\npage_token\x18\x04 \x01(\tB\x90\x01\x92\x41\x8c\x01\x32\x89\x01Token for pagination. Use the value returned in the \'next_page_token\' field of the previous response to retrieve the next page of resultsR\tpageToken\x12\xe1\x01\n\x0einclude_detail\x18\x05 \x01(\x08\x42\xb4\x01\x92\x41\xb0\x01\x32\xa7\x01If set to true, the response will include the full user payload with all available details. If false or not specified, only essential user information will be returnedJ\x04trueH\x00R\rincludeDetail\x88\x01\x01\x12\xa1\x01\n\x12\x64irectory_group_id\x18\x06 \x01(\tBn\x92\x41W2>Filter users by their membership in a specific directory groupJ\x15\"dirgroup_1213124341\"\xbaH\x11r\x0f\x10\x01\x18%:\tdirgroup_H\x01R\x10\x64irectoryGroupId\x88\x01\x01\x12\xb4\x01\n\rupdated_after\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampBn\x92\x41k2QFilter users that were updated after the specified timestamp. Use ISO 8601 formatJ\x16\"2021-01-01T00:00:00Z\"H\x02R\x0cupdatedAfter\x88\x01\x01\x42\x11\n\x0f_include_detailB\x15\n\x13_directory_group_idB\x10\n\x0e_updated_after\"\xe1\x04\n\x1aListDirectoryUsersResponse\x12\x81\x01\n\x05users\x18\x01 \x03(\x0b\x32&.scalekit.v1.directories.DirectoryUserBC\x92\x41@2>List of directory users retrieved from the specified directoryR\x05users\x12t\n\ntotal_size\x18\x02 \x01(\rBU\x92\x41R2PTotal number of users available in the directory that match the request criteriaR\ttotalSize\x12\xa5\x01\n\x0fnext_page_token\x18\x03 \x01(\tB}\x92\x41z2xToken for pagination. Use this token in the \'page_token\' field of the next request to fetch the subsequent page of usersR\rnextPageToken\x12\xa0\x01\n\x0fprev_page_token\x18\x04 \x01(\tBx\x92\x41u2sToken for pagination. Use this token in the \'page_token\' field of the next request to fetch the prior page of usersR\rprevPageToken\"\xb6\x08\n\x1aListDirectoryGroupsRequest\x12y\n\x0forganization_id\x18\x01 \x01(\tBP\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12p\n\x0c\x64irectory_id\x18\x02 \x01(\tBM\x92\x41;2\"Unique identifier of the directoryJ\x15\"dir_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\x12\x87\x01\n\tpage_size\x18\x03 \x01(\rBj\x92\x41`2ZNumber of groups to return per page. Maximum value is 30. If not specified, defaults to 10J\x02\x31\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\x88\x01\n\npage_token\x18\x04 \x01(\tBi\x92\x41\x66\x32\x64Token for pagination. Use the value returned in the \'next_page_token\' field of the previous responseR\tpageToken\x12\xa2\x01\n\rupdated_after\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\\\x92\x41Y2?Filter groups updated after this timestamp. Use ISO 8601 formatJ\x16\"2021-01-01T00:00:00Z\"H\x00R\x0cupdatedAfter\x88\x01\x01\x12\x96\x01\n\x0einclude_detail\x18\x06 \x01(\x08\x42j\x92\x41g2_If true, includes full group details. If false or not specified, returns basic information onlyJ\x04trueH\x01R\rincludeDetail\x88\x01\x01\x12\x96\x01\n\x17include_external_groups\x18\x07 \x01(\x08\x42Y\x92\x41V2NIf true, returns group and its details from external provider (default: false)J\x04trueH\x02R\x15includeExternalGroups\x88\x01\x01\x42\x10\n\x0e_updated_afterB\x11\n\x0f_include_detailB\x1a\n\x18_include_external_groups\"\xcd\x04\n\x1bListDirectoryGroupsResponse\x12\x85\x01\n\x06groups\x18\x01 \x03(\x0b\x32\'.scalekit.v1.directories.DirectoryGroupBD\x92\x41\x41\x32?List of directory groups retrieved from the specified directoryR\x06groups\x12r\n\ntotal_size\x18\x02 \x01(\rBS\x92\x41P2NTotal number of groups matching the request criteria, regardless of paginationR\ttotalSize\x12\x95\x01\n\x0fnext_page_token\x18\x03 \x01(\tBm\x92\x41j2hToken to retrieve the next page of results. Use this token in the \'page_token\' field of the next requestR\rnextPageToken\x12\x99\x01\n\x0fprev_page_token\x18\x04 \x01(\tBq\x92\x41n2lToken to retrieve the previous page of results. Use this token in the \'page_token\' field of the next requestR\rprevPageToken\"\x90\x02\n!ListDirectoryGroupsSummaryRequest\x12y\n\x0forganization_id\x18\x01 \x01(\tBP\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12p\n\x0c\x64irectory_id\x18\x02 \x01(\tBM\x92\x41;2\"Unique identifier of the directoryJ\x15\"dir_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\"\x94\x13\n\tDirectory\x12]\n\x02id\x18\x01 \x01(\tBM\x92\x41;2\"Unique identifier of the directoryJ\x15\"dir_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02id\x12}\n\x04name\x18\x02 \x01(\tBi\x92\x41\\2NName of the directory, typically representing the connected Directory providerJ\n\"Azure AD\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x04name\x12\xb7\x01\n\x0e\x64irectory_type\x18\x03 \x01(\x0e\x32&.scalekit.v1.directories.DirectoryTypeBh\x92\x41]2SType of the directory, indicating the protocol or standard used for synchronizationJ\x06\"SCIM\"\xbaH\x05\x82\x01\x02\x10\x01R\rdirectoryType\x12\x98\x01\n\x0forganization_id\x18\x04 \x01(\tBo\x92\x41]2DUnique identifier of the organization to which the directory belongsJ\x15\"org_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x85\x01\n\x07\x65nabled\x18\x05 \x01(\x08\x42k\x92\x41h2`Indicates whether the directory is currently enabled and actively synchronizing users and groupsJ\x04trueR\x07\x65nabled\x12\x9d\x01\n\x12\x64irectory_provider\x18\x06 \x01(\x0e\x32*.scalekit.v1.directories.DirectoryProviderBB\x92\x41\x37\x32-Identity provider connected to this directoryJ\x06\"OKTA\"\xbaH\x05\x82\x01\x02\x10\x01R\x11\x64irectoryProvider\x12\xbf\x01\n\x0elast_synced_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB}\x92\x41z2`Timestamp of the last successful synchronization of users and groups from the Directory ProviderJ\x16\"2024-10-01T00:00:00Z\"R\x0clastSyncedAt\x12\xed\x01\n\x12\x64irectory_endpoint\x18\x08 \x01(\tB\xbd\x01\x92\x41\xaf\x01\x32\x65The endpoint URL generated by Scalekit for synchronizing users and groups from the Directory ProviderJF\"https://yourapp.scalekit.com/api/v1/directoies/dir_123212312/scim/v2\"\xbaH\x07r\x05\x10\x01\x18\xd0\x0fR\x11\x64irectoryEndpoint\x12P\n\x0btotal_users\x18\t \x01(\x05\x42/\x92\x41,2&Total number of users in the directoryJ\x02\x31\x30R\ntotalUsers\x12S\n\x0ctotal_groups\x18\n \x01(\x05\x42\x30\x92\x41-2\'Total number of groups in the directoryJ\x02\x31\x30R\x0btotalGroups\x12\x95\x01\n\x07secrets\x18\x0b \x03(\x0b\x32\x1f.scalekit.v1.directories.SecretBZ\x92\x41W2UList of secrets used for authenticating and synchronizing with the Directory ProviderR\x07secrets\x12\x9b\x01\n\x05stats\x18\x0c \x01(\x0b\x32\x1e.scalekit.v1.directories.StatsBe\x92\x41\x62\x32`Statistics and metrics related to the directory, such as synchronization status and error countsR\x05stats\x12\xaf\x01\n\x10role_assignments\x18\r \x01(\x0b\x32(.scalekit.v1.directories.RoleAssignmentsBZ\x92\x41W2URole assignments associated with the directory, defining group based role assignmentsR\x0froleAssignments\x12\xac\x01\n\x12\x61ttribute_mappings\x18\x0e \x01(\x0b\x32*.scalekit.v1.directories.AttributeMappingsBQ\x92\x41N2LMappings between directory attributes and Scalekit user and group attributesR\x11\x61ttributeMappings\x12\x44\n\x06status\x18\x0f \x01(\tB,\x92\x41!2\x10\x44irectory StatusJ\r\"IN_PROGRESS\"\xbaH\x05\x82\x01\x02\x10\x01R\x06status\x12~\n\x05\x65mail\x18\x10 \x01(\tBh\x92\x41\x65\x32HEmail Id associated with Directory whose access will be used for pollingJ\x19\"john.doe@scalekit.cloud\"R\x05\x65mail\x12v\n\x0egroups_tracked\x18\x11 \x01(\tBO\x92\x41L2CIt indicates if all groups are tracked or select groups are trackedJ\x05\"ALL\"R\rgroupsTracked\"\xaf\x03\n\x16ToggleDirectoryRequest\x12\xc8\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9e\x01\x92\x41\x8b\x01\x32rA unique identifier for the organization. The value must begin with \'org_\' and be between 1 and 32 characters longJ\x15\"org_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xc3\x01\n\x02id\x18\x03 \x01(\tB\xb2\x01\x92\x41\x9f\x01\x32\x85\x01\x41 unique identifier for a directory within the organization. The value must begin with \'dir_\' and be between 1 and 32 characters longJ\x15\"dir_121312434123312\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02idJ\x04\x08\x02\x10\x03\"\xac\x04\n\x17ToggleDirectoryResponse\x12\x96\x02\n\x07\x65nabled\x18\x01 \x01(\x08\x42\xfb\x01\x92\x41\xf7\x01\x32\xee\x01Specifies the directory\'s state after the toggle operation. A value of `true` indicates that the directory is enabled and actively synchronizing users and groups. A value of `false` means the directory is disabled, halting synchronizationJ\x04trueR\x07\x65nabled\x12\xe5\x01\n\rerror_message\x18\x02 \x01(\tB\xba\x01\x92\x41\xb6\x01\x32\x8f\x01\x43ontains a human-readable error message if the toggle operation encountered an issue. If the operation was successful, this field will be emptyJ\"\"The directory is already enabled\"H\x00R\x0c\x65rrorMessage\x88\x01\x01\x42\x10\n\x0e_error_message\"z\n\x10\x44irectoryMapping\x12\x1e\n\x03key\x18\x01 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x03key\x12#\n\x06map_to\x18\x02 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x05mapTo\x12!\n\x0c\x64isplay_name\x18\x03 \x01(\tR\x0b\x64isplayName\"\xae\x05\n\rDirectoryUser\x12J\n\x02id\x18\x01 \x01(\tB:\x92\x41$2\x07User IDJ\x19\"diruser_121312434123312\"\xbaH\x10r\x0e\x10\x01\x18$:\x08\x64iruser_R\x02id\x12\x35\n\x05\x65mail\x18\x02 \x01(\tB\x1f\x92\x41\x12\x32\x05\x45mailJ\t\"johndoe\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x05\x65mail\x12[\n\x12preferred_username\x18\x03 \x01(\tB,\x92\x41\x1f\x32\x12Preferred UsernameJ\t\"johndoe\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x11preferredUsername\x12@\n\ngiven_name\x18\x04 \x01(\tB!\x92\x41\x14\x32\nFirst NameJ\x06\"John\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\tgivenName\x12@\n\x0b\x66\x61mily_name\x18\x05 \x01(\tB\x1f\x92\x41\x12\x32\tLast NameJ\x05\"Doe\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\nfamilyName\x12\x62\n\nupdated_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\'\x92\x41$2\nUpdated AtJ\x16\"2024-10-01T00:00:00Z\"R\tupdatedAt\x12#\n\x06\x65mails\x18\x10 \x03(\tB\x0b\x92\x41\x08\x32\x06\x45mailsR\x06\x65mails\x12L\n\x06groups\x18\x11 \x03(\x0b\x32\'.scalekit.v1.directories.DirectoryGroupB\x0b\x92\x41\x08\x32\x06GroupsR\x06groups\x12\\\n\x0buser_detail\x18\x12 \x01(\x0b\x32\x17.google.protobuf.StructB\"\x92\x41\x1f\x32\x1d\x43omplete User Details PayloadR\nuserDetailJ\x04\x08\x07\x10\x10\"\xf3\x01\n\rExternalGroup\x12T\n\x0b\x65xternal_id\x18\x01 \x01(\tB3\x92\x41&2\x11\x45xternal Group IDJ\x11\"02y3w247124ccqi\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\nexternalId\x12H\n\x0c\x64isplay_name\x18\x02 \x01(\tB%\x92\x41\x18\x32\x0c\x44isplay NameJ\x08\"Admins\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x0b\x64isplayName\x12\x42\n\x05\x65mail\x18\x03 \x01(\tB,\x92\x41\x1f\x32\x05\x45mailJ\x16\"johndoe@scalekit.com\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x05\x65mail\"\xb2\x03\n\x0e\x44irectoryGroup\x12M\n\x02id\x18\x01 \x01(\tB=\x92\x41&2\x08Group IDJ\x1a\"dirgroup_121312434123312\"\xbaH\x11r\x0f\x10\x01\x18$:\tdirgroup_R\x02id\x12H\n\x0c\x64isplay_name\x18\x02 \x01(\tB%\x92\x41\x18\x32\x0c\x44isplay NameJ\x08\"Admins\"\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x0b\x64isplayName\x12\x42\n\x0btotal_users\x18\x03 \x01(\x05\x42!\x92\x41\x1e\x32\x18Total Users in the GroupJ\x02\x31\x30R\ntotalUsers\x12\x62\n\nupdated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\'\x92\x41$2\nUpdated AtJ\x16\"2024-10-01T00:00:00Z\"R\tupdatedAt\x12_\n\x0cgroup_detail\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructB#\x92\x41 2\x1e\x43omplete Group Details PayloadR\x0bgroupDetail\"\xb9\x01\n\x1c\x43reateDirectorySecretRequest\x12\x65\n\x0forganization_id\x18\x01 \x01(\tB<\x92\x41*2\x0fOrganization IDJ\x17\"org_12362474900684814\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x32\n\x0c\x64irectory_id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\"\xa4\x02\n\x1d\x43reateDirectorySecretResponse\x12\xb4\x01\n\x0cplain_secret\x18\x01 \x01(\tB\x90\x01\x92\x41\x8c\x01\x32VPlain Secret. This is only returned in Plain Text as response to the Creation Request.J2\"dXNlcm5hbWU6cGFzc3dvcmQ6c2VjcmV0a2V5MTIzNDU2Nzg5\"R\x0bplainSecret\x12L\n\x06secret\x18\x02 \x01(\x0b\x32\x1f.scalekit.v1.directories.SecretB\x13\x92\x41\x10\x32\x0eSecret DetailsR\x06secret\"\x90\x01\n RegenerateDirectorySecretRequest\x12\x38\n\x0forganization_id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x32\n\x0c\x64irectory_id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\"\xa8\x02\n!RegenerateDirectorySecretResponse\x12\xb4\x01\n\x0cplain_secret\x18\x01 \x01(\tB\x90\x01\x92\x41\x8c\x01\x32VPlain Secret. This is only returned in Plain Text as response to the Creation Request.J2\"dXNlcm5hbWU6cGFzc3dvcmQ6c2VjcmV0a2V5MTIzNDU2Nzg5\"R\x0bplainSecret\x12L\n\x06secret\x18\x02 \x01(\x0b\x32\x1f.scalekit.v1.directories.SecretB\x13\x92\x41\x10\x32\x0eSecret DetailsR\x06secret\"\xe6\x04\n\x06Secret\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04sec_R\x02id\x12g\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB*\x92\x41\'2\rCreation TimeJ\x16\"2024-10-01T00:00:00Z\"R\ncreateTime\x12?\n\rsecret_suffix\x18\x04 \x01(\tB\x1a\x92\x41\x17\x32\rSecret SuffixJ\x06\"Nzg5\"R\x0csecretSuffix\x12]\n\x06status\x18\x05 \x01(\x0e\x32%.scalekit.v1.directories.SecretStatusB\x1e\x92\x41\x1b\x32\rSecret StatusJ\n\"INACTIVE\"R\x06status\x12\x65\n\x0b\x65xpire_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB(\x92\x41%2\x0b\x45xpiry TimeJ\x16\"2025-10-01T00:00:00Z\"R\nexpireTime\x12m\n\x0elast_used_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB+\x92\x41(2\x0eLast Used TimeJ\x16\"2024-10-01T00:00:00Z\"R\x0clastUsedTime\x12\\\n\x0c\x64irectory_id\x18\t \x01(\tB9\x92\x41\'2\x0c\x44irectory IDJ\x17\"dir_12362474900684814\"\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x0b\x64irectoryId\"\xb7\x03\n\x05Stats\x12\x46\n\x0btotal_users\x18\x01 \x01(\x05\x42%\x92\x41\"2\x1cTotal Users in the DirectoryJ\x02\x31\x30R\ntotalUsers\x12I\n\x0ctotal_groups\x18\x02 \x01(\x05\x42&\x92\x41#2\x1dTotal Groups in the DirectoryJ\x02\x31\x30R\x0btotalGroups\x12\x8d\x01\n\x10group_updated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBG\x92\x41\x44\x32*Max time of Group Updated At for DirectoryJ\x16\"2024-10-01T00:00:00Z\"R\x0egroupUpdatedAt\x12\x8a\x01\n\x0fuser_updated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampBF\x92\x41\x43\x32)Max time of User Updated At for DirectoryJ\x16\"2024-10-01T00:00:00Z\"R\ruserUpdatedAt\"\xb8\x01\n\x12\x41ssignRolesRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\x19\n\x02id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18 R\x02id\x12S\n\x10role_assignments\x18\x03 \x01(\x0b\x32(.scalekit.v1.directories.RoleAssignmentsR\x0froleAssignments\"\\\n\x0fRoleAssignments\x12I\n\x0b\x61ssignments\x18\x01 \x03(\x0b\x32\'.scalekit.v1.directories.RoleAssignmentR\x0b\x61ssignments\"j\n\x13\x41ssignRolesResponse\x12S\n\x10role_assignments\x18\x01 \x01(\x0b\x32(.scalekit.v1.directories.RoleAssignmentsR\x0froleAssignments\"\x99\x02\n\x0eRoleAssignment\x12_\n\x08group_id\x18\x01 \x01(\tBD\x92\x41\x38\x32\x1dgroup ID for the role mappingJ\x17\"dirgroup_121312434123\"\xbaH\x06r\x04\x10\x01\x18 R\x07groupId\x12?\n\trole_name\x18\x02 \x01(\tB\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\x65\n\x07role_id\x18\x03 \x01(\tBL\x92\x41\x33\x32\x1crole ID for the role mappingJ\x13\"role_121312434123\"\xbaH\x04r\x02\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\x06roleId\"\xcd\x01\n\x17UpdateAttributesRequest\x12\x38\n\x0forganization_id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x1f\n\x02id\x18\x02 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02id\x12W\n\x11\x61ttribute_mapping\x18\x03 \x01(\x0b\x32*.scalekit.v1.directories.AttributeMappingsR\x10\x61ttributeMapping\"^\n\x11\x41ttributeMappings\x12I\n\nattributes\x18\x01 \x03(\x0b\x32).scalekit.v1.directories.AttributeMappingR\nattributes\"W\n\x10\x41ttributeMapping\x12\x1e\n\x03key\x18\x01 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x03key\x12#\n\x06map_to\x18\x02 \x01(\tB\x0c\xbaH\tr\x04\x10\x01\x18 \xc8\x01\x01R\x05mapTo\"u\n\x18UpdateAttributesResponse\x12Y\n\x12\x61ttribute_mappings\x18\x01 \x01(\x0b\x32*.scalekit.v1.directories.AttributeMappingsR\x11\x61ttributeMappings\"y\n\x16\x44\x65leteDirectoryRequest\x12\x38\n\x0forganization_id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x1f\n\x02id\x18\x03 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04\x64ir_R\x02idJ\x04\x08\x02\x10\x03\"\xfb\x01\n\x1bTriggerDirectorySyncRequest\x12h\n\x0c\x64irectory_id\x18\x01 \x01(\tBE\x92\x41\x39\x32 Unique identifier of a DirectoryJ\x15\"dir_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0b\x64irectoryId\x12r\n\x0forganization_id\x18\x02 \x01(\tBI\x92\x41=2$Unique identifier to an OrganizationJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\"\x90\x01\n\x1aGetDirectoryContextRequest\x12\x35\n\x0c\x64irectory_id\x18\x01 \x01(\tB\x12\xbaH\x0fr\n\x10\x01\x18 :\x04\x64ir_\xc8\x01\x01R\x0b\x64irectoryId\x12;\n\x0forganization_id\x18\x02 \x01(\tB\x12\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\"P\n\x1bGetDirectoryContextResponse\x12\x31\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext\"\xc6\x01\n\x1dUpdateDirectoryContextRequest\x12\x35\n\x0c\x64irectory_id\x18\x01 \x01(\tB\x12\xbaH\x0fr\n\x10\x01\x18 :\x04\x64ir_\xc8\x01\x01R\x0b\x64irectoryId\x12;\n\x0forganization_id\x18\x02 \x01(\tB\x12\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\x12\x31\n\x07\x63ontext\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext*M\n\rDirectoryType\x12\x1e\n\x1a\x44IRECTORY_TYPE_UNSPECIFIED\x10\x00\x12\x08\n\x04SCIM\x10\x01\x12\x08\n\x04LDAP\x10\x02\x12\x08\n\x04POLL\x10\x03*\x9a\x01\n\x11\x44irectoryProvider\x12\"\n\x1e\x44IRECTORY_PROVIDER_UNSPECIFIED\x10\x00\x12\x08\n\x04OKTA\x10\x01\x12\n\n\x06GOOGLE\x10\x02\x12\x10\n\x0cMICROSOFT_AD\x10\x03\x12\t\n\x05\x41UTH0\x10\x04\x12\x0c\n\x08ONELOGIN\x10\x05\x12\r\n\tJUMPCLOUD\x10\x06\x12\x11\n\rPING_IDENTITY\x10\x07*^\n\x0f\x44irectoryStatus\x12 \n\x1c\x44IRECTORY_STATUS_UNSPECIFIED\x10\x00\x12\t\n\x05\x44RAFT\x10\x01\x12\x0f\n\x0bIN_PROGRESS\x10\x02\x12\r\n\tCOMPLETED\x10\x03*(\n\x0cSecretStatus\x12\n\n\x06\x41\x43TIVE\x10\x00\x12\x0c\n\x08INACTIVE\x10\x01\x32\xa9\x38\n\x10\x44irectoryService\x12\xe4\x01\n\x0f\x43reateDirectory\x12/.scalekit.v1.directories.CreateDirectoryRequest\x1a\x30.scalekit.v1.directories.CreateDirectoryResponse\"n\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02@\"3/api/v1/organizations/{organization_id}/directories:\tdirectory\x12\x9e\x02\n\x0f\x44\x65leteDirectory\x12/.scalekit.v1.directories.DeleteDirectoryRequest\x1a\x16.google.protobuf.Empty\"\xc1\x01\x92\x41i\n\tDirectory\x12\x12\x44\x65lete a directory\x1a)Delete a Directory within an organizationJ\x1d\n\x03\x32\x30\x30\x12\x16\n\x14\x44\x65leted Successfully\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02:*8/api/v1/organizations/{organization_id}/directories/{id}\x12\xe9\x01\n\x0fUpdateDirectory\x12/.scalekit.v1.directories.UpdateDirectoryRequest\x1a\x30.scalekit.v1.directories.UpdateDirectoryResponse\"s\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x45\x32\x38/api/v1/organizations/{organization_id}/directories/{id}:\tdirectory\x12\xe7\x01\n\x18\x41ssignGroupsForDirectory\x12\x38.scalekit.v1.directories.AssignGroupsForDirectoryRequest\x1a\x16.google.protobuf.Empty\"y\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02K\x1a\x46/api/v1/organizations/{organization_id}/directories/{id}/groups:assign:\x01*\x12\xfb\x01\n\x0b\x41ssignRoles\x12+.scalekit.v1.directories.AssignRolesRequest\x1a,.scalekit.v1.directories.AssignRolesResponse\"\x90\x01\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x62\x1aN/api/v1/organizations/{organization_id}/directories/{id}/groups/-/roles:assign:\x10role_assignments\x12\x80\x02\n\x10UpdateAttributes\x12\x30.scalekit.v1.directories.UpdateAttributesRequest\x1a\x31.scalekit.v1.directories.UpdateAttributesResponse\"\x86\x01\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02X\x1a\x43/api/v1/organizations/{organization_id}/directories/{id}/attributes:\x11\x61ttribute_mapping\x12\xa4\x03\n\x0cGetDirectory\x12,.scalekit.v1.directories.GetDirectoryRequest\x1a-.scalekit.v1.directories.GetDirectoryResponse\"\xb6\x02\x92\x41\xda\x01\n\tDirectory\x12\x15Get directory details\x1aPRetrieves detailed information about a specific directory within an organizationJd\n\x03\x32\x30\x30\x12]\n(Successfully retrieved directory details\x12\x31\n/\x1a-.scalekit.v1.directories.GetDirectoryResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\x82\xd3\xe4\x93\x02:\x12\x38/api/v1/organizations/{organization_id}/directories/{id}\x12\xfd\x02\n\x0fListDirectories\x12/.scalekit.v1.directories.ListDirectoriesRequest\x1a\x30.scalekit.v1.directories.ListDirectoriesResponse\"\x86\x02\x92\x41\xaf\x01\n\tDirectory\x12\x1dList organization directoriesJ\x82\x01\n\x03\x32\x30\x30\x12{\nCSuccessfully retrieved the list of directories for the organization\x12\x34\n2\x1a\x30.scalekit.v1.directories.ListDirectoriesResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\x82\xd3\xe4\x93\x02\x35\x12\x33/api/v1/organizations/{organization_id}/directories\x12\xc3\x03\n\x0f\x45nableDirectory\x12/.scalekit.v1.directories.ToggleDirectoryRequest\x1a\x30.scalekit.v1.directories.ToggleDirectoryResponse\"\xcc\x02\x92\x41\xe8\x01\n\tDirectory\x12\x12\x45nable a directory\x1a\x7f\x41\x63tivates a directory within an organization, allowing it to synchronize users and groups with the connected Directory providerJF\n\x03\x32\x30\x30\x12?\n\x07Success\x12\x34\n2\x1a\x30.scalekit.v1.directories.ToggleDirectoryResponse\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\x82\xd3\xe4\x93\x02\x41\x32?/api/v1/organizations/{organization_id}/directories/{id}:enable\x12\x8e\x04\n\x10\x44isableDirectory\x12/.scalekit.v1.directories.ToggleDirectoryRequest\x1a\x30.scalekit.v1.directories.ToggleDirectoryResponse\"\x96\x03\x92\x41\xb1\x02\n\tDirectory\x12\x13\x44isable a directory\x1a\xaa\x01Stops synchronization of users and groups from a specified directory within an organization. This operation prevents further updates from the connected Directory providerJb\n\x03\x32\x30\x30\x12[\n#Successfully disabled the directory\x12\x34\n2\x1a\x30.scalekit.v1.directories.ToggleDirectoryResponse\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\x82\xd3\xe4\x93\x02\x42\x32@/api/v1/organizations/{organization_id}/directories/{id}:disable\x12\xcd\x04\n\x12ListDirectoryUsers\x12\x32.scalekit.v1.directories.ListDirectoryUsersRequest\x1a\x33.scalekit.v1.directories.ListDirectoryUsersResponse\"\xcd\x03\x92\x41\xe1\x02\n\tDirectory\x12\x14List directory users\x1a\xb2\x01Retrieves a list of all users within a specified directory for an organization. This endpoint allows you to view user accounts associated with your connected Directory Providers.J\x88\x01\n\x03\x32\x30\x30\x12\x80\x01\nESuccessfully retrieved the list of users from the specified directory\x12\x37\n5\x1a\x33.scalekit.v1.directories.ListDirectoryUsersResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\x82\xd3\xe4\x93\x02J\x12H/api/v1/organizations/{organization_id}/directories/{directory_id}/users\x12\xa4\x04\n\x13ListDirectoryGroups\x12\x33.scalekit.v1.directories.ListDirectoryGroupsRequest\x1a\x34.scalekit.v1.directories.ListDirectoryGroupsResponse\"\xa1\x03\x92\x41\xb4\x02\n\tDirectory\x12\x15List directory groups\x1a\x82\x01Retrieves all groups from a specified directory. Use this endpoint to view group structures from your connected identity provider.J\x8a\x01\n\x03\x32\x30\x30\x12\x82\x01\nFSuccessfully retrieved the list of groups from the specified directory\x12\x38\n6\x1a\x34.scalekit.v1.directories.ListDirectoryGroupsResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\x82\xd3\xe4\x93\x02K\x12I/api/v1/organizations/{organization_id}/directories/{directory_id}/groups\x12\xd3\x04\n\x1aListDirectoryGroupsSummary\x12:.scalekit.v1.directories.ListDirectoryGroupsSummaryRequest\x1a\x34.scalekit.v1.directories.ListDirectoryGroupsResponse\"\xc2\x03\x92\x41\xbe\x02\n\tDirectory\x12\x1dList directory groups summary\x1a\x84\x01Retrieves all groups from a specified directory. This is not a paginated api. It gives a summary view with id and name of the group.J\x8a\x01\n\x03\x32\x30\x30\x12\x82\x01\nFSuccessfully retrieved the list of groups from the specified directory\x12\x38\n6\x1a\x34.scalekit.v1.directories.ListDirectoryGroupsResponse\x82\xb5\x18\x14\n\x10\x64irectories_read\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02S\x12Q/api/v1/organizations/{organization_id}/directories/{directory_id}/groups/summary\x12\xfe\x02\n\x15\x43reateDirectorySecret\x12\x35.scalekit.v1.directories.CreateDirectorySecretRequest\x1a\x36.scalekit.v1.directories.CreateDirectorySecretResponse\"\xf5\x01\x92\x41x\n\tDirectory\x12\x1d\x43reate secret for a directoryJL\n\x03\x32\x30\x30\x12\x45\n\x07Success\x12:\n8\x1a\x36.scalekit.v1.directories.CreateDirectorySecretResponse\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02L\"J/api/v1/organizations/{organization_id}/directories/{directory_id}/secrets\x12\x9e\x03\n\x19RegenerateDirectorySecret\x12\x39.scalekit.v1.directories.RegenerateDirectorySecretRequest\x1a:.scalekit.v1.directories.RegenerateDirectorySecretResponse\"\x89\x02\x92\x41\x80\x01\n\tDirectory\x12!Regenerate secret for a directoryJP\n\x03\x32\x30\x30\x12I\n\x07Success\x12>\n<\x1a:.scalekit.v1.directories.RegenerateDirectorySecretResponse\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02W\"U/api/v1/organizations/{organization_id}/directories/{directory_id}/secrets:regenerate\x12\xdd\x01\n\x14TriggerDirectorySync\x12\x34.scalekit.v1.directories.TriggerDirectorySyncRequest\x1a\x16.google.protobuf.Empty\"w\x82\xb5\x18\x15\n\x11\x64irectories_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02I\x12G/api/v1/organizations/{organization_id}/directories/{directory_id}:sync\x12\x96\x03\n\x13GetDirectoryContext\x12\x33.scalekit.v1.directories.GetDirectoryContextRequest\x1a\x34.scalekit.v1.directories.GetDirectoryContextResponse\"\x93\x02\x92\x41\xa7\x01\n\tDirectory\x12\x15Get directory context\x1a;Retrieves the custom context data for a specific directory.J\'\n\x03\x32\x30\x30\x12 \n\x1eReturns the directory context.J\x1d\n\x03\x34\x30\x34\x12\x16\n\x14\x44irectory not found.\x82\xb5\x18\x02\x18p\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02M\x12K/api/v1/organizations/{organization_id}/directories/{directory_id}/contexts\x12\xa2\x03\n\x16UpdateDirectoryContext\x12\x36.scalekit.v1.directories.UpdateDirectoryContextRequest\x1a\x16.google.protobuf.Empty\"\xb7\x02\x92\x41\xc2\x01\n\tDirectory\x12\x18Update directory context\x1a\x39Updates the custom context data for a specific directory.J&\n\x03\x32\x30\x30\x12\x1f\n\x1d\x43ontext updated successfully.J\x19\n\x03\x34\x30\x30\x12\x12\n\x10Invalid request.J\x1d\n\x03\x34\x30\x34\x12\x16\n\x14\x44irectory not found.\x82\xb5\x18\x02\x18p\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02V\x1aK/api/v1/organizations/{organization_id}/directories/{directory_id}/contexts:\x07\x63ontext\x1a\xaa\x02\x92\x41\xa6\x02\n\tDirectory\x12\x98\x02\x44irectory management for viewing and controlling external identity provider connections in your Scalekit environment. This service provides endpoints for retrieving directory information, listing directories and their contents, and enabling or disabling directory synchronization.B7Z5github.com/scalekit-inc/scalekit/pkg/grpc/directoriesb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -271,6 +271,14 @@ _globals['_TRIGGERDIRECTORYSYNCREQUEST'].fields_by_name['directory_id']._serialized_options = b'\222A92 Unique identifier of a DirectoryJ\025\"dir_121312434123312\"\272H\006r\004\020\001\030 ' _globals['_TRIGGERDIRECTORYSYNCREQUEST'].fields_by_name['organization_id']._loaded_options = None _globals['_TRIGGERDIRECTORYSYNCREQUEST'].fields_by_name['organization_id']._serialized_options = b'\222A=2$Unique identifier to an OrganizationJ\025\"org_121312434123312\"\272H\006r\004\020\001\030 ' + _globals['_GETDIRECTORYCONTEXTREQUEST'].fields_by_name['directory_id']._loaded_options = None + _globals['_GETDIRECTORYCONTEXTREQUEST'].fields_by_name['directory_id']._serialized_options = b'\272H\017r\n\020\001\030 :\004dir_\310\001\001' + _globals['_GETDIRECTORYCONTEXTREQUEST'].fields_by_name['organization_id']._loaded_options = None + _globals['_GETDIRECTORYCONTEXTREQUEST'].fields_by_name['organization_id']._serialized_options = b'\272H\017r\n\020\001\030 :\004org_\310\001\001' + _globals['_UPDATEDIRECTORYCONTEXTREQUEST'].fields_by_name['directory_id']._loaded_options = None + _globals['_UPDATEDIRECTORYCONTEXTREQUEST'].fields_by_name['directory_id']._serialized_options = b'\272H\017r\n\020\001\030 :\004dir_\310\001\001' + _globals['_UPDATEDIRECTORYCONTEXTREQUEST'].fields_by_name['organization_id']._loaded_options = None + _globals['_UPDATEDIRECTORYCONTEXTREQUEST'].fields_by_name['organization_id']._serialized_options = b'\272H\017r\n\020\001\030 :\004org_\310\001\001' _globals['_DIRECTORYSERVICE']._loaded_options = None _globals['_DIRECTORYSERVICE']._serialized_options = b'\222A\246\002\n\tDirectory\022\230\002Directory management for viewing and controlling external identity provider connections in your Scalekit environment. This service provides endpoints for retrieving directory information, listing directories and their contents, and enabling or disabling directory synchronization.' _globals['_DIRECTORYSERVICE'].methods_by_name['CreateDirectory']._loaded_options = None @@ -305,14 +313,18 @@ _globals['_DIRECTORYSERVICE'].methods_by_name['RegenerateDirectorySecret']._serialized_options = b'\222A\200\001\n\tDirectory\022!Regenerate secret for a directoryJP\n\003200\022I\n\007Success\022>\n<\032:.scalekit.v1.directories.RegenerateDirectorySecretResponse\202\265\030\025\n\021directories_write\030t\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002W\"U/api/v1/organizations/{organization_id}/directories/{directory_id}/secrets:regenerate' _globals['_DIRECTORYSERVICE'].methods_by_name['TriggerDirectorySync']._loaded_options = None _globals['_DIRECTORYSERVICE'].methods_by_name['TriggerDirectorySync']._serialized_options = b'\202\265\030\025\n\021directories_write\030t\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002I\022G/api/v1/organizations/{organization_id}/directories/{directory_id}:sync' - _globals['_DIRECTORYTYPE']._serialized_start=15400 - _globals['_DIRECTORYTYPE']._serialized_end=15477 - _globals['_DIRECTORYPROVIDER']._serialized_start=15480 - _globals['_DIRECTORYPROVIDER']._serialized_end=15634 - _globals['_DIRECTORYSTATUS']._serialized_start=15636 - _globals['_DIRECTORYSTATUS']._serialized_end=15730 - _globals['_SECRETSTATUS']._serialized_start=15732 - _globals['_SECRETSTATUS']._serialized_end=15772 + _globals['_DIRECTORYSERVICE'].methods_by_name['GetDirectoryContext']._loaded_options = None + _globals['_DIRECTORYSERVICE'].methods_by_name['GetDirectoryContext']._serialized_options = b'\222A\247\001\n\tDirectory\022\025Get directory context\032;Retrieves the custom context data for a specific directory.J\'\n\003200\022 \n\036Returns the directory context.J\035\n\003404\022\026\n\024Directory not found.\202\265\030\002\030p\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002M\022K/api/v1/organizations/{organization_id}/directories/{directory_id}/contexts' + _globals['_DIRECTORYSERVICE'].methods_by_name['UpdateDirectoryContext']._loaded_options = None + _globals['_DIRECTORYSERVICE'].methods_by_name['UpdateDirectoryContext']._serialized_options = b'\222A\302\001\n\tDirectory\022\030Update directory context\0329Updates the custom context data for a specific directory.J&\n\003200\022\037\n\035Context updated successfully.J\031\n\003400\022\022\n\020Invalid request.J\035\n\003404\022\026\n\024Directory not found.\202\265\030\002\030p\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002V\032K/api/v1/organizations/{organization_id}/directories/{directory_id}/contexts:\007context' + _globals['_DIRECTORYTYPE']._serialized_start=15830 + _globals['_DIRECTORYTYPE']._serialized_end=15907 + _globals['_DIRECTORYPROVIDER']._serialized_start=15910 + _globals['_DIRECTORYPROVIDER']._serialized_end=16064 + _globals['_DIRECTORYSTATUS']._serialized_start=16066 + _globals['_DIRECTORYSTATUS']._serialized_end=16160 + _globals['_SECRETSTATUS']._serialized_start=16162 + _globals['_SECRETSTATUS']._serialized_end=16202 _globals['_GETDIRECTORYREQUEST']._serialized_start=434 _globals['_GETDIRECTORYREQUEST']._serialized_end=653 _globals['_GETDIRECTORYRESPONSE']._serialized_start=656 @@ -391,6 +403,12 @@ _globals['_DELETEDIRECTORYREQUEST']._serialized_end=15144 _globals['_TRIGGERDIRECTORYSYNCREQUEST']._serialized_start=15147 _globals['_TRIGGERDIRECTORYSYNCREQUEST']._serialized_end=15398 - _globals['_DIRECTORYSERVICE']._serialized_start=15775 - _globals['_DIRECTORYSERVICE']._serialized_end=22154 + _globals['_GETDIRECTORYCONTEXTREQUEST']._serialized_start=15401 + _globals['_GETDIRECTORYCONTEXTREQUEST']._serialized_end=15545 + _globals['_GETDIRECTORYCONTEXTRESPONSE']._serialized_start=15547 + _globals['_GETDIRECTORYCONTEXTRESPONSE']._serialized_end=15627 + _globals['_UPDATEDIRECTORYCONTEXTREQUEST']._serialized_start=15630 + _globals['_UPDATEDIRECTORYCONTEXTREQUEST']._serialized_end=15828 + _globals['_DIRECTORYSERVICE']._serialized_start=16205 + _globals['_DIRECTORYSERVICE']._serialized_end=23414 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/directories/directories_pb2.pyi b/scalekit/v1/directories/directories_pb2.pyi index 6949d63..7b8a8b3 100644 --- a/scalekit/v1/directories/directories_pb2.pyi +++ b/scalekit/v1/directories/directories_pb2.pyi @@ -474,3 +474,27 @@ class TriggerDirectorySyncRequest(_message.Message): directory_id: str organization_id: str def __init__(self, directory_id: _Optional[str] = ..., organization_id: _Optional[str] = ...) -> None: ... + +class GetDirectoryContextRequest(_message.Message): + __slots__ = ("directory_id", "organization_id") + DIRECTORY_ID_FIELD_NUMBER: _ClassVar[int] + ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] + directory_id: str + organization_id: str + def __init__(self, directory_id: _Optional[str] = ..., organization_id: _Optional[str] = ...) -> None: ... + +class GetDirectoryContextResponse(_message.Message): + __slots__ = ("context",) + CONTEXT_FIELD_NUMBER: _ClassVar[int] + context: _struct_pb2.Struct + def __init__(self, context: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... + +class UpdateDirectoryContextRequest(_message.Message): + __slots__ = ("directory_id", "organization_id", "context") + DIRECTORY_ID_FIELD_NUMBER: _ClassVar[int] + ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] + CONTEXT_FIELD_NUMBER: _ClassVar[int] + directory_id: str + organization_id: str + context: _struct_pb2.Struct + def __init__(self, directory_id: _Optional[str] = ..., organization_id: _Optional[str] = ..., context: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... diff --git a/scalekit/v1/directories/directories_pb2_grpc.py b/scalekit/v1/directories/directories_pb2_grpc.py index c91991d..b744f6c 100644 --- a/scalekit/v1/directories/directories_pb2_grpc.py +++ b/scalekit/v1/directories/directories_pb2_grpc.py @@ -95,6 +95,16 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_directories_dot_directories__pb2.TriggerDirectorySyncRequest.SerializeToString, response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, ) + self.GetDirectoryContext = channel.unary_unary( + '/scalekit.v1.directories.DirectoryService/GetDirectoryContext', + request_serializer=scalekit_dot_v1_dot_directories_dot_directories__pb2.GetDirectoryContextRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_directories_dot_directories__pb2.GetDirectoryContextResponse.FromString, + ) + self.UpdateDirectoryContext = channel.unary_unary( + '/scalekit.v1.directories.DirectoryService/UpdateDirectoryContext', + request_serializer=scalekit_dot_v1_dot_directories_dot_directories__pb2.UpdateDirectoryContextRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + ) class DirectoryServiceServicer(object): @@ -196,6 +206,18 @@ def TriggerDirectorySync(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def GetDirectoryContext(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def UpdateDirectoryContext(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def add_DirectoryServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -279,6 +301,16 @@ def add_DirectoryServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_directories_dot_directories__pb2.TriggerDirectorySyncRequest.FromString, response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, ), + 'GetDirectoryContext': grpc.unary_unary_rpc_method_handler( + servicer.GetDirectoryContext, + request_deserializer=scalekit_dot_v1_dot_directories_dot_directories__pb2.GetDirectoryContextRequest.FromString, + response_serializer=scalekit_dot_v1_dot_directories_dot_directories__pb2.GetDirectoryContextResponse.SerializeToString, + ), + 'UpdateDirectoryContext': grpc.unary_unary_rpc_method_handler( + servicer.UpdateDirectoryContext, + request_deserializer=scalekit_dot_v1_dot_directories_dot_directories__pb2.UpdateDirectoryContextRequest.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'scalekit.v1.directories.DirectoryService', rpc_method_handlers) @@ -560,3 +592,37 @@ def TriggerDirectorySync(request, google_dot_protobuf_dot_empty__pb2.Empty.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def GetDirectoryContext(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.directories.DirectoryService/GetDirectoryContext', + scalekit_dot_v1_dot_directories_dot_directories__pb2.GetDirectoryContextRequest.SerializeToString, + scalekit_dot_v1_dot_directories_dot_directories__pb2.GetDirectoryContextResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def UpdateDirectoryContext(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.directories.DirectoryService/UpdateDirectoryContext', + scalekit_dot_v1_dot_directories_dot_directories__pb2.UpdateDirectoryContextRequest.SerializeToString, + google_dot_protobuf_dot_empty__pb2.Empty.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/domains/domains_pb2.py b/scalekit/v1/domains/domains_pb2.py index 5945d7e..ecf61ce 100644 --- a/scalekit/v1/domains/domains_pb2.py +++ b/scalekit/v1/domains/domains_pb2.py @@ -23,7 +23,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/domains/domains.proto\x12\x13scalekit.v1.domains\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\x8a\x06\n\x13\x43reateDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\xba\x01\n\rconnection_id\x18\x03 \x01(\tB\x8f\x01\x92\x41}2iOptional identity provider connection ID to associate with this domain for enterprise SSO configurations.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12x\n\x06\x64omain\x18\x04 \x01(\x0b\x32!.scalekit.v1.domains.CreateDomainB=\x92\x41:28Domain configuration including the domain name and type.R\x06\x64omainB\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\xb3\x01\n\x14\x43reateDomainResponse\x12\x9a\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBe\x92\x41\x62\x32`The newly created domain object with all configuration details and system-generated identifiers.R\x06\x64omain\"\xe6\x04\n\x0c\x43reateDomain\x12\xf6\x01\n\x06\x64omain\x18\x01 \x01(\tB\xdd\x01\x92\x41\xcc\x01\x32\xb3\x01The domain name to be configured. Must be a valid business domain you control. Public and disposable domains (gmail.com, outlook.com, etc.) are automatically blocked for security.J\x14\"customerdomain.com\"\xbaH\nr\x05\x10\x04\x18\xff\x01\xc8\x01\x01R\x06\x64omain\x12\xdc\x02\n\x0b\x64omain_type\x18\x02 \x01(\x0e\x32\x1f.scalekit.v1.domains.DomainTypeB\x99\x02\x92\x41\x95\x02\x32\xfb\x01The domain type.\n- ALLOWED_EMAIL_DOMAIN: trusted domain used to suggest the organization in the organization switcher during sign-in/sign-up.\n- ORGANIZATION_DOMAIN: SSO discovery domain used to route users to the correct SSO provider and enforce SSO.\nJ\x15\"ORGANIZATION_DOMAIN\"R\ndomainType\"\x84\x07\n\x13UpdateDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x9f\x01\n\rconnection_id\x18\x03 \x01(\tBu\x92\x41\x63\x32OOptional updated identity provider connection ID to associate with this domain.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12o\n\x02id\x18\x04 \x01(\tB_\x92\x41\\2AScalekit-generated unique identifier of the domain to be updated.J\x17\"dom_88351643129225005\"R\x02id\x12\x9b\x01\n\x06\x64omain\x18\x05 \x01(\x0b\x32!.scalekit.v1.domains.UpdateDomainB`\x92\x41]2[Domain update configuration. Currently empty as domain name cannot be changed once created.R\x06\x64omainB\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\x0e\n\x0cUpdateDomain\"\xa5\x01\n\x14UpdateDomainResponse\x12\x8c\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBW\x92\x41T2RThe updated domain object reflecting all changes made to the domain configuration.R\x06\x64omain\"\xad\x04\n\x10GetDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12m\n\x02id\x18\x03 \x01(\tB]\x92\x41Z2?Scalekit-generated unique identifier of the domain to retrieve.J\x17\"dom_88351643129225005\"R\x02idB\x0c\n\nidentities\"\xb6\x01\n\x11GetDomainResponse\x12\xa0\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBk\x92\x41h2fThe requested domain object with complete details including domain type, timestamps and configuration.R\x06\x64omain\"\xeb\x05\n\x13\x44\x65leteDomainRequest\x12{\n\x02id\x18\x01 \x01(\tBk\x92\x41h2MScalekit-generated unique identifier of the domain to be permanently deleted.J\x17\"dom_88351643129225005\"R\x02id\x12\xcb\x01\n\x0forganization_id\x18\x02 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x03 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x98\x01\n\rconnection_id\x18\x04 \x01(\tBn\x92\x41\\2HOptional connection ID for additional validation during domain deletion.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x42\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\xac\x0b\n\x11ListDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\xa8\x01\n\rconnection_id\x18\x03 \x01(\tB~\x92\x41l2XOptional filter to list domains associated with a specific identity provider connection.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12\xab\x01\n\x07include\x18\x04 \x01(\tB\x8b\x01\x92\x41\x87\x01\x32mOptional comma-separated list of additional fields to include in the response (e.g., \'verification_details\').J\x16\"verification_details\"H\x02R\x07include\x88\x01\x01\x12\x8f\x01\n\tpage_size\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueBU\x92\x41R2LMaximum number of domains to return per page. Default is 30, maximum is 100.J\x02\x33\x30R\x08pageSize\x12\x82\x01\n\x0bpage_number\x18\x06 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueBD\x92\x41\x41\x3224/api/v1/organizations/{organization_id}/domains/{id}:\x06\x64omain\x12\xea\x06\n\x0cVerifyDomain\x12(.scalekit.v1.domains.VerifyDomainRequest\x1a\x1a.google.protobuf.BoolValue\"\x93\x06\x92\x41\xb7\x05\n\x07\x44omains\x12\rVerify Domain\x1a\x9e\x04Initiates domain ownership verification by checking the DNS TXT record that should be added to the domain\'s DNS configuration.\n\nUse this endpoint to manually trigger verification for domains that are in PENDING status. The system will check for the required TXT record and update the verification status accordingly.\n\nFor automatically verified domains, this endpoint will return true immediately. For domains requiring manual verification, ensure the TXT record has been properly configured in your DNS settings before calling this endpoint.J|\n\x03\x32\x30\x30\x12u\nSDomain verification result. Returns true if verification succeeds, false otherwise.\x12\x1e\n\x1c\x1a\x1a.google.protobuf.BoolValue\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02=2;/api/v1/organizations/{organization_id}/domains/{id}:verify\x12\x9a\x03\n\tGetDomain\x12%.scalekit.v1.domains.GetDomainRequest\x1a&.scalekit.v1.domains.GetDomainResponse\"\xbd\x02\x92\x41\xe3\x01\n\x07\x44omains\x12\nGet Domain\x1akRetrieves complete details for a domain including domain type, timestamps, and configuration information.\n\nJ_\n\x03\x32\x30\x30\x12X\n*Successfully retrieved the domain details.\x12*\n(\x1a&.scalekit.v1.domains.GetDomainResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x36\x12\x34/api/v1/organizations/{organization_id}/domains/{id}\x12\xe4\x03\n\x0c\x44\x65leteDomain\x12(.scalekit.v1.domains.DeleteDomainRequest\x1a\x16.google.protobuf.Empty\"\x91\x03\x92\x41\xb6\x02\n\x07\x44omains\x12\rDelete Domain\x1a\xf4\x01Permanently removes a domain record from an organization.\n\n- Deleting an ORGANIZATION_DOMAIN disables SSO routing/enforcement for that domain.\n- Deleting an ALLOWED_EMAIL_DOMAIN stops organization suggestions for users with that email domain.\n\nJ%\n\x03\x32\x30\x30\x12\x1e\n\x1c\x44omain successfully deleted.\x82\xb5\x18\x17\n\x13organizations_write\x18t\x82\xd3\xe4\x93\x02\x36*4/api/v1/organizations/{organization_id}/domains/{id}\x12\x9b\x05\n\x0bListDomains\x12&.scalekit.v1.domains.ListDomainRequest\x1a\'.scalekit.v1.domains.ListDomainResponse\"\xba\x04\x92\x41\xe5\x03\n\x07\x44omains\x12\x0cList Domains\x1a\xe8\x02Retrieves a paginated list of all domains configured for the specified organization.\n\nDomain types:\n- ALLOWED_EMAIL_DOMAIN: Trusted domains used to suggest the organization in the organization switcher during sign-in/sign-up (auth-method agnostic).\n- ORGANIZATION_DOMAIN: SSO discovery domains used to route users to the correct SSO provider and enforce SSO.\n\nJa\n\x03\x32\x30\x30\x12Z\n+Successfully retrieved the list of domains.\x12+\n)\x1a\'.scalekit.v1.domains.ListDomainResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x31\x12//api/v1/organizations/{organization_id}/domains\x12\x90\x05\n\x15ListAuthorizedDomains\x12\x30.scalekit.v1.domains.ListAuthorizedDomainRequest\x1a\x31.scalekit.v1.domains.ListAuthorizedDomainResponse\"\x91\x04\x92\x41\xd8\x03\n\x07\x44omains\x12\x17List Authorized Domains\x1a\xbb\x02Retrieves a list of domains that are authorized for use with the specified origin URL.\n\nUse this endpoint to validate whether a particular domain is allowed for authentication or other domain-restricted operations.\n\nThis is commonly used by frontend applications to verify domain allowlists and CORS configurations.Jv\n\x03\x32\x30\x30\x12o\n6Successfully retrieved the list of authorized domains.\x12\x35\n3\x1a\x31.scalekit.v1.domains.ListAuthorizedDomainResponse\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1a\x12\x18/api/v1/domains/{origin}\x1a\xf8\x03\x92\x41\xf4\x03\n\x07\x44omains\x12\xe8\x03Manage organization-level domains. Scalekit supports two domain types:\n\n- ORGANIZATION_DOMAIN: Used for SSO domain discovery. When a user signs in with a matching email domain, Scalekit routes them to the organization\xe2\x80\x99s SSO provider and enforces SSO.\n- ALLOWED_EMAIL_DOMAIN: Used to mark trusted email domains for an organization. When a user signs in or signs up with a matching domain, Scalekit suggests the organization in the organization switcher (authentication-method agnostic).\nB3Z1github.com/scalekit-inc/scalekit/pkg/grpc/domainsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/domains/domains.proto\x12\x13scalekit.v1.domains\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\x8a\x06\n\x13\x43reateDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\xba\x01\n\rconnection_id\x18\x03 \x01(\tB\x8f\x01\x92\x41}2iOptional identity provider connection ID to associate with this domain for enterprise SSO configurations.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12x\n\x06\x64omain\x18\x04 \x01(\x0b\x32!.scalekit.v1.domains.CreateDomainB=\x92\x41:28Domain configuration including the domain name and type.R\x06\x64omainB\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\xb3\x01\n\x14\x43reateDomainResponse\x12\x9a\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBe\x92\x41\x62\x32`The newly created domain object with all configuration details and system-generated identifiers.R\x06\x64omain\"\xe6\x04\n\x0c\x43reateDomain\x12\xf6\x01\n\x06\x64omain\x18\x01 \x01(\tB\xdd\x01\x92\x41\xcc\x01\x32\xb3\x01The domain name to be configured. Must be a valid business domain you control. Public and disposable domains (gmail.com, outlook.com, etc.) are automatically blocked for security.J\x14\"customerdomain.com\"\xbaH\nr\x05\x10\x04\x18\xff\x01\xc8\x01\x01R\x06\x64omain\x12\xdc\x02\n\x0b\x64omain_type\x18\x02 \x01(\x0e\x32\x1f.scalekit.v1.domains.DomainTypeB\x99\x02\x92\x41\x95\x02\x32\xfb\x01The domain type.\n- ALLOWED_EMAIL_DOMAIN: trusted domain used to suggest the organization in the organization switcher during sign-in/sign-up.\n- ORGANIZATION_DOMAIN: SSO discovery domain used to route users to the correct SSO provider and enforce SSO.\nJ\x15\"ORGANIZATION_DOMAIN\"R\ndomainType\"\x84\x07\n\x13UpdateDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x9f\x01\n\rconnection_id\x18\x03 \x01(\tBu\x92\x41\x63\x32OOptional updated identity provider connection ID to associate with this domain.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12o\n\x02id\x18\x04 \x01(\tB_\x92\x41\\2AScalekit-generated unique identifier of the domain to be updated.J\x17\"dom_88351643129225005\"R\x02id\x12\x9b\x01\n\x06\x64omain\x18\x05 \x01(\x0b\x32!.scalekit.v1.domains.UpdateDomainB`\x92\x41]2[Domain update configuration. Currently empty as domain name cannot be changed once created.R\x06\x64omainB\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\x0e\n\x0cUpdateDomain\"\xa5\x01\n\x14UpdateDomainResponse\x12\x8c\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBW\x92\x41T2RThe updated domain object reflecting all changes made to the domain configuration.R\x06\x64omain\"\xad\x04\n\x10GetDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12m\n\x02id\x18\x03 \x01(\tB]\x92\x41Z2?Scalekit-generated unique identifier of the domain to retrieve.J\x17\"dom_88351643129225005\"R\x02idB\x0c\n\nidentities\"\xb6\x01\n\x11GetDomainResponse\x12\xa0\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBk\x92\x41h2fThe requested domain object with complete details including domain type, timestamps and configuration.R\x06\x64omain\"\xeb\x05\n\x13\x44\x65leteDomainRequest\x12{\n\x02id\x18\x01 \x01(\tBk\x92\x41h2MScalekit-generated unique identifier of the domain to be permanently deleted.J\x17\"dom_88351643129225005\"R\x02id\x12\xcb\x01\n\x0forganization_id\x18\x02 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x03 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x98\x01\n\rconnection_id\x18\x04 \x01(\tBn\x92\x41\\2HOptional connection ID for additional validation during domain deletion.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x42\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\xac\x0b\n\x11ListDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\xa8\x01\n\rconnection_id\x18\x03 \x01(\tB~\x92\x41l2XOptional filter to list domains associated with a specific identity provider connection.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12\xab\x01\n\x07include\x18\x04 \x01(\tB\x8b\x01\x92\x41\x87\x01\x32mOptional comma-separated list of additional fields to include in the response (e.g., \'verification_details\').J\x16\"verification_details\"H\x02R\x07include\x88\x01\x01\x12\x8f\x01\n\tpage_size\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueBU\x92\x41R2LMaximum number of domains to return per page. Default is 30, maximum is 100.J\x02\x33\x30R\x08pageSize\x12\x82\x01\n\x0bpage_number\x18\x06 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueBD\x92\x41\x41\x3224/api/v1/organizations/{organization_id}/domains/{id}:\x06\x64omain\x12\xff\x06\n\x0cVerifyDomain\x12(.scalekit.v1.domains.VerifyDomainRequest\x1a\x1a.google.protobuf.BoolValue\"\xa8\x06\x92\x41\xb7\x05\n\x07\x44omains\x12\rVerify Domain\x1a\x9e\x04Initiates domain ownership verification by checking the DNS TXT record that should be added to the domain\'s DNS configuration.\n\nUse this endpoint to manually trigger verification for domains that are in PENDING status. The system will check for the required TXT record and update the verification status accordingly.\n\nFor automatically verified domains, this endpoint will return true immediately. For domains requiring manual verification, ensure the TXT record has been properly configured in your DNS settings before calling this endpoint.J|\n\x03\x32\x30\x30\x12u\nSDomain verification result. Returns true if verification succeeds, false otherwise.\x12\x1e\n\x1c\x1a\x1a.google.protobuf.BoolValue\x82\xb5\x18\x17\n\x13organizations_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02=2;/api/v1/organizations/{organization_id}/domains/{id}:verify\x12\x9a\x03\n\tGetDomain\x12%.scalekit.v1.domains.GetDomainRequest\x1a&.scalekit.v1.domains.GetDomainResponse\"\xbd\x02\x92\x41\xe3\x01\n\x07\x44omains\x12\nGet Domain\x1akRetrieves complete details for a domain including domain type, timestamps, and configuration information.\n\nJ_\n\x03\x32\x30\x30\x12X\n*Successfully retrieved the domain details.\x12*\n(\x1a&.scalekit.v1.domains.GetDomainResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x36\x12\x34/api/v1/organizations/{organization_id}/domains/{id}\x12\xe4\x03\n\x0c\x44\x65leteDomain\x12(.scalekit.v1.domains.DeleteDomainRequest\x1a\x16.google.protobuf.Empty\"\x91\x03\x92\x41\xb6\x02\n\x07\x44omains\x12\rDelete Domain\x1a\xf4\x01Permanently removes a domain record from an organization.\n\n- Deleting an ORGANIZATION_DOMAIN disables SSO routing/enforcement for that domain.\n- Deleting an ALLOWED_EMAIL_DOMAIN stops organization suggestions for users with that email domain.\n\nJ%\n\x03\x32\x30\x30\x12\x1e\n\x1c\x44omain successfully deleted.\x82\xb5\x18\x17\n\x13organizations_write\x18t\x82\xd3\xe4\x93\x02\x36*4/api/v1/organizations/{organization_id}/domains/{id}\x12\x9b\x05\n\x0bListDomains\x12&.scalekit.v1.domains.ListDomainRequest\x1a\'.scalekit.v1.domains.ListDomainResponse\"\xba\x04\x92\x41\xe5\x03\n\x07\x44omains\x12\x0cList Domains\x1a\xe8\x02Retrieves a paginated list of all domains configured for the specified organization.\n\nDomain types:\n- ALLOWED_EMAIL_DOMAIN: Trusted domains used to suggest the organization in the organization switcher during sign-in/sign-up (auth-method agnostic).\n- ORGANIZATION_DOMAIN: SSO discovery domains used to route users to the correct SSO provider and enforce SSO.\n\nJa\n\x03\x32\x30\x30\x12Z\n+Successfully retrieved the list of domains.\x12+\n)\x1a\'.scalekit.v1.domains.ListDomainResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x31\x12//api/v1/organizations/{organization_id}/domains\x12\x90\x05\n\x15ListAuthorizedDomains\x12\x30.scalekit.v1.domains.ListAuthorizedDomainRequest\x1a\x31.scalekit.v1.domains.ListAuthorizedDomainResponse\"\x91\x04\x92\x41\xd8\x03\n\x07\x44omains\x12\x17List Authorized Domains\x1a\xbb\x02Retrieves a list of domains that are authorized for use with the specified origin URL.\n\nUse this endpoint to validate whether a particular domain is allowed for authentication or other domain-restricted operations.\n\nThis is commonly used by frontend applications to verify domain allowlists and CORS configurations.Jv\n\x03\x32\x30\x30\x12o\n6Successfully retrieved the list of authorized domains.\x12\x35\n3\x1a\x31.scalekit.v1.domains.ListAuthorizedDomainResponse\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1a\x12\x18/api/v1/domains/{origin}\x1a\xf8\x03\x92\x41\xf4\x03\n\x07\x44omains\x12\xe8\x03Manage organization-level domains. Scalekit supports two domain types:\n\n- ORGANIZATION_DOMAIN: Used for SSO domain discovery. When a user signs in with a matching email domain, Scalekit routes them to the organization\xe2\x80\x99s SSO provider and enforces SSO.\n- ALLOWED_EMAIL_DOMAIN: Used to mark trusted email domains for an organization. When a user signs in or signs up with a matching domain, Scalekit suggests the organization in the organization switcher (authentication-method agnostic).\nB3Z1github.com/scalekit-inc/scalekit/pkg/grpc/domainsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -101,6 +101,8 @@ _globals['_LISTDOMAINRESPONSE'].fields_by_name['domains']._serialized_options = b'\222Ah2fArray of domain objects containing all domain details including verification status and configuration.' _globals['_LISTAUTHORIZEDDOMAINREQUEST'].fields_by_name['origin']._loaded_options = None _globals['_LISTAUTHORIZEDDOMAINREQUEST'].fields_by_name['origin']._serialized_options = b'\222Af2OThe origin URL to check for authorized domains (e.g., https://app.example.com).J\023\"https://myapp.com\"' + _globals['_LISTAUTHORIZEDDOMAINREQUEST'].fields_by_name['link_id']._loaded_options = None + _globals['_LISTAUTHORIZEDDOMAINREQUEST'].fields_by_name['link_id']._serialized_options = b'\222A\344\0012\271\001Optional link key UUID used to resolve organization-specific template redirect URI origins for pre-authentication CSP evaluation. Scope suffixes (e.g. \'_pc\') are stripped automatically.J&\"a1b2c3d4-e5f6-7890-abcd-ef1234567890\"' _globals['_LISTAUTHORIZEDDOMAINRESPONSE'].fields_by_name['domains']._loaded_options = None _globals['_LISTAUTHORIZEDDOMAINRESPONSE'].fields_by_name['domains']._serialized_options = b'\222Ar2LArray of domain names that are authorized for use with the specified origin.J\"[\"example.com\", \"app.example.com\"]' _globals['_DOMAIN'].fields_by_name['id']._loaded_options = None @@ -130,7 +132,7 @@ _globals['_DOMAINSERVICE'].methods_by_name['UpdateDomain']._loaded_options = None _globals['_DOMAINSERVICE'].methods_by_name['UpdateDomain']._serialized_options = b'\222A\226\004\n\007Domains\022\rUpdate Domain\032\241\003Updates an existing domain\'s configuration within an organization. Currently supports updating domain metadata and configuration settings.\n\nUse this endpoint to modify domain properties after initial creation. Note that the domain name itself cannot be changed once created.\n\nThe domain must belong to the specified organization and you must provide either the organization ID or external ID along with the domain ID.JX\n\003200\022Q\n Successfully updated the domain.\022-\n+\032).scalekit.v1.domains.UpdateDomainResponse\202\265\030\027\n\023organizations_write\030t\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002>24/api/v1/organizations/{organization_id}/domains/{id}:\006domain' _globals['_DOMAINSERVICE'].methods_by_name['VerifyDomain']._loaded_options = None - _globals['_DOMAINSERVICE'].methods_by_name['VerifyDomain']._serialized_options = b'\222A\267\005\n\007Domains\022\rVerify Domain\032\236\004Initiates domain ownership verification by checking the DNS TXT record that should be added to the domain\'s DNS configuration.\n\nUse this endpoint to manually trigger verification for domains that are in PENDING status. The system will check for the required TXT record and update the verification status accordingly.\n\nFor automatically verified domains, this endpoint will return true immediately. For domains requiring manual verification, ensure the TXT record has been properly configured in your DNS settings before calling this endpoint.J|\n\003200\022u\nSDomain verification result. Returns true if verification succeeds, false otherwise.\022\036\n\034\032\032.google.protobuf.BoolValue\202\265\030\002\030d\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002=2;/api/v1/organizations/{organization_id}/domains/{id}:verify' + _globals['_DOMAINSERVICE'].methods_by_name['VerifyDomain']._serialized_options = b'\222A\267\005\n\007Domains\022\rVerify Domain\032\236\004Initiates domain ownership verification by checking the DNS TXT record that should be added to the domain\'s DNS configuration.\n\nUse this endpoint to manually trigger verification for domains that are in PENDING status. The system will check for the required TXT record and update the verification status accordingly.\n\nFor automatically verified domains, this endpoint will return true immediately. For domains requiring manual verification, ensure the TXT record has been properly configured in your DNS settings before calling this endpoint.J|\n\003200\022u\nSDomain verification result. Returns true if verification succeeds, false otherwise.\022\036\n\034\032\032.google.protobuf.BoolValue\202\265\030\027\n\023organizations_write\030t\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002=2;/api/v1/organizations/{organization_id}/domains/{id}:verify' _globals['_DOMAINSERVICE'].methods_by_name['GetDomain']._loaded_options = None _globals['_DOMAINSERVICE'].methods_by_name['GetDomain']._serialized_options = b'\222A\343\001\n\007Domains\022\nGet Domain\032kRetrieves complete details for a domain including domain type, timestamps, and configuration information.\n\nJ_\n\003200\022X\n*Successfully retrieved the domain details.\022*\n(\032&.scalekit.v1.domains.GetDomainResponse\202\265\030\026\n\022organizations_read\030t\202\323\344\223\0026\0224/api/v1/organizations/{organization_id}/domains/{id}' _globals['_DOMAINSERVICE'].methods_by_name['DeleteDomain']._loaded_options = None @@ -139,10 +141,10 @@ _globals['_DOMAINSERVICE'].methods_by_name['ListDomains']._serialized_options = b'\222A\345\003\n\007Domains\022\014List Domains\032\350\002Retrieves a paginated list of all domains configured for the specified organization.\n\nDomain types:\n- ALLOWED_EMAIL_DOMAIN: Trusted domains used to suggest the organization in the organization switcher during sign-in/sign-up (auth-method agnostic).\n- ORGANIZATION_DOMAIN: SSO discovery domains used to route users to the correct SSO provider and enforce SSO.\n\nJa\n\003200\022Z\n+Successfully retrieved the list of domains.\022+\n)\032\'.scalekit.v1.domains.ListDomainResponse\202\265\030\026\n\022organizations_read\030t\202\323\344\223\0021\022//api/v1/organizations/{organization_id}/domains' _globals['_DOMAINSERVICE'].methods_by_name['ListAuthorizedDomains']._loaded_options = None _globals['_DOMAINSERVICE'].methods_by_name['ListAuthorizedDomains']._serialized_options = b'\222A\330\003\n\007Domains\022\027List Authorized Domains\032\273\002Retrieves a list of domains that are authorized for use with the specified origin URL.\n\nUse this endpoint to validate whether a particular domain is allowed for authentication or other domain-restricted operations.\n\nThis is commonly used by frontend applications to verify domain allowlists and CORS configurations.Jv\n\003200\022o\n6Successfully retrieved the list of authorized domains.\0225\n3\0321.scalekit.v1.domains.ListAuthorizedDomainResponse\202\265\030\002\030\001\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\032\022\030/api/v1/domains/{origin}' - _globals['_VERIFICATIONSTATUS']._serialized_start=9130 - _globals['_VERIFICATIONSTATUS']._serialized_end=9245 - _globals['_DOMAINTYPE']._serialized_start=9247 - _globals['_DOMAINTYPE']._serialized_end=9339 + _globals['_VERIFICATIONSTATUS']._serialized_start=9391 + _globals['_VERIFICATIONSTATUS']._serialized_end=9506 + _globals['_DOMAINTYPE']._serialized_start=9508 + _globals['_DOMAINTYPE']._serialized_end=9600 _globals['_CREATEDOMAINREQUEST']._serialized_start=357 _globals['_CREATEDOMAINREQUEST']._serialized_end=1135 _globals['_CREATEDOMAINRESPONSE']._serialized_start=1138 @@ -168,11 +170,11 @@ _globals['_LISTDOMAINRESPONSE']._serialized_start=6582 _globals['_LISTDOMAINRESPONSE']._serialized_end=6936 _globals['_LISTAUTHORIZEDDOMAINREQUEST']._serialized_start=6939 - _globals['_LISTAUTHORIZEDDOMAINREQUEST']._serialized_end=7100 - _globals['_LISTAUTHORIZEDDOMAINRESPONSE']._serialized_start=7103 - _globals['_LISTAUTHORIZEDDOMAINRESPONSE']._serialized_end=7279 - _globals['_DOMAIN']._serialized_start=7282 - _globals['_DOMAIN']._serialized_end=9128 - _globals['_DOMAINSERVICE']._serialized_start=9342 - _globals['_DOMAINSERVICE']._serialized_end=14767 + _globals['_LISTAUTHORIZEDDOMAINREQUEST']._serialized_end=7361 + _globals['_LISTAUTHORIZEDDOMAINRESPONSE']._serialized_start=7364 + _globals['_LISTAUTHORIZEDDOMAINRESPONSE']._serialized_end=7540 + _globals['_DOMAIN']._serialized_start=7543 + _globals['_DOMAIN']._serialized_end=9389 + _globals['_DOMAINSERVICE']._serialized_start=9603 + _globals['_DOMAINSERVICE']._serialized_end=15049 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/domains/domains_pb2.pyi b/scalekit/v1/domains/domains_pb2.pyi index acaa766..eb10967 100644 --- a/scalekit/v1/domains/domains_pb2.pyi +++ b/scalekit/v1/domains/domains_pb2.pyi @@ -154,10 +154,12 @@ class ListDomainResponse(_message.Message): def __init__(self, page_size: _Optional[int] = ..., page_number: _Optional[int] = ..., domains: _Optional[_Iterable[_Union[Domain, _Mapping]]] = ...) -> None: ... class ListAuthorizedDomainRequest(_message.Message): - __slots__ = ("origin",) + __slots__ = ("origin", "link_id") ORIGIN_FIELD_NUMBER: _ClassVar[int] + LINK_ID_FIELD_NUMBER: _ClassVar[int] origin: str - def __init__(self, origin: _Optional[str] = ...) -> None: ... + link_id: str + def __init__(self, origin: _Optional[str] = ..., link_id: _Optional[str] = ...) -> None: ... class ListAuthorizedDomainResponse(_message.Message): __slots__ = ("domains",) diff --git a/scalekit/v1/emails/emails_pb2.py b/scalekit/v1/emails/emails_pb2.py index f0ceb15..55389ad 100644 --- a/scalekit/v1/emails/emails_pb2.py +++ b/scalekit/v1/emails/emails_pb2.py @@ -15,6 +15,7 @@ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2 +from google.api import visibility_pb2 as google_dot_api_dot_visibility__pb2 from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 from google.protobuf import field_mask_pb2 as google_dot_protobuf_dot_field__mask__pb2 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 @@ -24,7 +25,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fscalekit/v1/emails/emails.proto\x12\x12scalekit.v1.emails\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"`\n\x16GetPlaceholdersRequest\x12\x46\n\x08use_case\x18\x01 \x01(\x0e\x32#.scalekit.v1.emails.TemplateUsecaseB\x06\xbaH\x03\xc8\x01\x01R\x07useCase\"B\n\x17GetPlaceholdersResponse\x12\'\n\x0cplaceholders\x18\x01 \x03(\tB\x03\xe0\x41\x03R\x0cplaceholders\"t\n\x1bGetTemplateUseCasesResponse\x12U\n\tuse_cases\x18\x01 \x03(\x0b\x32\x33.scalekit.v1.emails.TemplateUsecaseWithPlaceholdersB\x03\xe0\x41\x03R\x08useCases\"\xeb\x02\n\x1fTemplateUsecaseWithPlaceholders\x12\x46\n\x08use_case\x18\x01 \x01(\x0e\x32#.scalekit.v1.emails.TemplateUsecaseB\x06\xbaH\x03\xc8\x01\x01R\x07useCase\x12 \n\x05title\x18\x02 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x05title\x12,\n\x0b\x64\x65scription\x18\x03 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x0b\x64\x65scription\x12H\n\x0cplaceholders\x18\x04 \x03(\x0b\x32\x1f.scalekit.v1.emails.PlaceholderB\x03\xe0\x41\x03R\x0cplaceholders\x12\x18\n\x07\x64isplay\x18\x05 \x01(\x08R\x07\x64isplay\x12L\n\x10\x64\x65\x66\x61ult_template\x18\x06 \x01(\x0b\x32\x1c.scalekit.v1.emails.TemplateB\x03\xe0\x41\x03R\x0f\x64\x65\x66\x61ultTemplate\"\xe0\x01\n\x0bPlaceholder\x12\x1e\n\x04name\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x04name\x12 \n\x05title\x18\x02 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x05title\x12,\n\x0b\x64\x65scription\x18\x03 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x0b\x64\x65scription\x12\x18\n\x07\x64isplay\x18\x04 \x01(\x08R\x07\x64isplay\x12\x1a\n\x08\x63\x61tegory\x18\x05 \x01(\tR\x08\x63\x61tegory\x12+\n\x11\x63\x61tegory_priority\x18\x06 \x01(\x05R\x10\x63\x61tegoryPriority\"\xea\x02\n\x08Template\x12>\n\nupdated_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03R\tupdatedAt\x12\x13\n\x02id\x18\x02 \x01(\tB\x03\xe0\x41\x03R\x02id\x12>\n\x08use_case\x18\x03 \x01(\x0e\x32#.scalekit.v1.emails.TemplateUsecaseR\x07useCase\x12\x18\n\x07\x65nabled\x18\x04 \x01(\x08R\x07\x65nabled\x12$\n\x07subject\x18\x05 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x07subject\x12.\n\x0chtml_content\x18\x06 \x01(\tB\x0b\xbaH\x08r\x06\x10\x01(\x80\x80@R\x0bhtmlContent\x12\x30\n\rplain_content\x18\x07 \x01(\tB\x0b\xbaH\x08r\x06\x10\x01(\x80\x80@R\x0cplainContent\x12\'\n\x0cplaceholders\x18\x08 \x03(\tB\x03\xe0\x41\x03R\x0cplaceholders\"\xc8\x02\n\x13\x43reateEmailTemplate\x12>\n\nupdated_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03R\tupdatedAt\x12\x13\n\x02id\x18\x02 \x01(\tB\x03\xe0\x41\x03R\x02id\x12K\n\x08use_case\x18\x03 \x01(\x0e\x32#.scalekit.v1.emails.TemplateUsecaseB\x0b\xbaH\x08\x82\x01\x02\x10\x01\xc8\x01\x01R\x07useCase\x12\'\n\x07subject\x18\x04 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x07subject\x12\x31\n\x0chtml_content\x18\x05 \x01(\tB\x0e\xbaH\x0br\x06\x10\x01(\x80\x80@\xc8\x01\x01R\x0bhtmlContent\x12\x33\n\rplain_content\x18\x06 \x01(\tB\x0e\xbaH\x0br\x06\x10\x01(\x80\x80@\xc8\x01\x01R\x0cplainContent\"\x9d\x01\n\x1a\x43reateEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12K\n\x08template\x18\x02 \x01(\x0b\x32\'.scalekit.v1.emails.CreateEmailTemplateB\x06\xbaH\x03\xc8\x01\x01R\x08template\"_\n\x1b\x43reateEmailTemplateResponse\x12@\n\x08template\x18\x01 \x01(\x0b\x32\x1c.scalekit.v1.emails.TemplateB\x06\xbaH\x03\xc8\x01\x01R\x08template\"\x84\x01\n\x1a\x45nableEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\"\xde\x01\n\x1b\x45nableEmailTemplateResponse\x12Z\n\x12\x61\x63tive_template_id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03tplR\x10\x61\x63tiveTemplateId\x12\x63\n\x17last_active_template_id\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03tplR\x14lastActiveTemplateId\"\x85\x01\n\x1b\x44isableEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\"\x81\x01\n\x17GetEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\"T\n\x18GetEmailTemplateResponse\x12\x38\n\x08template\x18\x01 \x01(\x0b\x32\x1c.scalekit.v1.emails.TemplateR\x08template\"N\n\x18ListEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\"W\n\x19ListEmailTemplateResponse\x12:\n\ttemplates\x18\x01 \x03(\x0b\x32\x1c.scalekit.v1.emails.TemplateR\ttemplates\"\x90\x03\n\x0eUpdateTemplate\x12)\n\x07subject\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01H\x00R\x07subject\x88\x01\x01\x12\x33\n\x0chtml_content\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\x10\x01(\x80\x80@H\x01R\x0bhtmlContent\x88\x01\x01\x12\x35\n\rplain_content\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\x10\x01(\x80\x80@H\x02R\x0cplainContent\x88\x01\x01:\xb7\x01\xbaH\xb3\x01\x1a\xb0\x01\n\x1b\x61t_least_one_field_required\x12IAt least one of \'subject\', \'html_content\', or \'plain_content\' must be set\x1a\x46has(this.subject) || has(this.html_content) || has(this.plain_content)B\n\n\x08_subjectB\x0f\n\r_html_contentB\x10\n\x0e_plain_content\"\x96\x03\n\x1dGetEmailConfigurationResponse\x12i\n\x11\x64\x65\x66\x61ult_from_name\x18\x01 \x01(\tB=\x92\x41:28Default email from name when using scalekit email serverR\x0f\x64\x65\x66\x61ultFromName\x12x\n\x14\x64\x65\x66\x61ult_from_address\x18\x02 \x01(\tBF\x92\x41=2;Default email from address when using scalekit email server\xbaH\x03\xc8\x01\x01R\x12\x64\x65\x66\x61ultFromAddress\x12W\n\x15\x65mail_server_selected\x18\x03 \x01(\x0e\x32#.scalekit.v1.emails.EmailServerTypeR\x13\x65mailServerSelected\x12\x37\n\x06server\x18\x04 \x01(\x0b\x32\x1f.scalekit.v1.emails.EmailServerR\x06server\"\x99\x01\n\x1fUpsertEmailConfigurationRequest\x12*\n\x11\x64\x65\x66\x61ult_from_name\x18\x01 \x01(\tR\x0f\x64\x65\x66\x61ultFromName\x12J\n\x06server\x18\x02 \x01(\x0b\x32\x32.scalekit.v1.emails.UpsertEmailConfigurationServerR\x06server\"\x9f\x02\n\x1eUpsertEmailConfigurationServer\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12K\n\x08provider\x18\x02 \x01(\x0e\x32\'.scalekit.v1.emails.EmailServerProviderB\x06\xbaH\x03\xc8\x01\x01R\x08provider\x12<\n\x07\x65nabled\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x06\xbaH\x03\xc8\x01\x01R\x07\x65nabled\x12\x62\n\x08settings\x18\x04 \x01(\x0b\x32>.scalekit.v1.emails.UpsertEmailConfigurationSMTPServerSettingsB\x06\xbaH\x03\xc8\x01\x01R\x08settings\"\x8c\x02\n*UpsertEmailConfigurationSMTPServerSettings\x12!\n\x04host\x18\x01 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x04host\x12\x1a\n\x04port\x18\x02 \x01(\x03\x42\x06\xbaH\x03\xc8\x01\x01R\x04port\x12)\n\x08username\x18\x03 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08username\x12\x1a\n\x08password\x18\x04 \x01(\tR\x08password\x12,\n\nfrom_email\x18\x05 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\tfromEmail\x12*\n\tfrom_name\x18\x06 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08\x66romName\"\x92\x02\n UpsertEmailConfigurationResponse\x12*\n\x11\x64\x65\x66\x61ult_from_name\x18\x01 \x01(\tR\x0f\x64\x65\x66\x61ultFromName\x12\x30\n\x14\x64\x65\x66\x61ult_from_address\x18\x02 \x01(\tR\x12\x64\x65\x66\x61ultFromAddress\x12W\n\x15\x65mail_server_selected\x18\x03 \x01(\x0e\x32#.scalekit.v1.emails.EmailServerTypeR\x13\x65mailServerSelected\x12\x37\n\x06server\x18\x04 \x01(\x0b\x32\x1f.scalekit.v1.emails.EmailServerR\x06server\"\x88\x02\n\x19PatchEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\x12\x46\n\x08template\x18\x04 \x01(\x0b\x32\".scalekit.v1.emails.UpdateTemplateB\x06\xbaH\x03\xc8\x01\x01R\x08template\x12;\n\x0bupdate_mask\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskR\nupdateMask\"\x84\x01\n\x1a\x44\x65leteEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\"\xac\x02\n\x0b\x45mailServer\x12>\n\nupdated_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03R\tupdatedAt\x12\x13\n\x02id\x18\x02 \x01(\tB\x03\xe0\x41\x03R\x02id\x12K\n\x08provider\x18\x03 \x01(\x0e\x32\'.scalekit.v1.emails.EmailServerProviderB\x06\xbaH\x03\xc8\x01\x01R\x08provider\x12\x18\n\x07\x65nabled\x18\x04 \x01(\x08R\x07\x65nabled\x12U\n\rsmtp_settings\x18\x05 \x01(\x0b\x32&.scalekit.v1.emails.SMTPServerSettingsB\x06\xbaH\x03\xc8\x01\x01H\x00R\x0csmtpSettingsB\n\n\x08settings\"\x86\x02\n\x12SMTPServerSettings\x12!\n\x04host\x18\x01 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x04host\x12\x1a\n\x04port\x18\x02 \x01(\x03\x42\x06\xbaH\x03\xc8\x01\x01R\x04port\x12)\n\x08username\x18\x03 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08username\x12,\n\x08password\x18\x04 \x01(\tB\x10\xe0\x41\x04\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08password\x12,\n\nfrom_email\x18\x05 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\tfromEmail\x12*\n\tfrom_name\x18\x06 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08\x66romName\"\xfe\x01\n\x17PatchSMTPServerSettings\x12!\n\x04host\x18\x01 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x04host\x12\x1a\n\x04port\x18\x02 \x01(\x03\x42\x06\xbaH\x03\xc8\x01\x01R\x04port\x12)\n\x08username\x18\x03 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08username\x12\x1f\n\x08password\x18\x04 \x01(\tB\x03\xe0\x41\x04R\x08password\x12,\n\nfrom_email\x18\x05 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\tfromEmail\x12*\n\tfrom_name\x18\x06 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08\x66romName\"\xab\x01\n\x18\x43reateEmailServerRequest\x12K\n\x08provider\x18\x01 \x01(\x0e\x32\'.scalekit.v1.emails.EmailServerProviderB\x06\xbaH\x03\xc8\x01\x01R\x08provider\x12\x42\n\x08settings\x18\x02 \x01(\x0b\x32&.scalekit.v1.emails.SMTPServerSettingsR\x08settings\"\\\n\x19\x43reateEmailServerResponse\x12?\n\x06server\x18\x01 \x01(\x0b\x32\x1f.scalekit.v1.emails.EmailServerB\x06\xbaH\x03\xc8\x01\x01R\x06server\"G\n\x15GetEmailServerRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId\"Q\n\x16GetEmailServerResponse\x12\x37\n\x06server\x18\x01 \x01(\x0b\x32\x1f.scalekit.v1.emails.EmailServerR\x06server\"J\n\x18\x45nableEmailServerRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId\"\xd4\x01\n\x19\x45nableEmailServerResponse\x12V\n\x10\x61\x63tive_server_id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65srR\x0e\x61\x63tiveServerId\x12_\n\x15last_active_server_id\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65srR\x12lastActiveServerId\"K\n\x19\x44isableEmailServerRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId\"T\n\x17ListEmailServerResponse\x12\x39\n\x07servers\x18\x01 \x03(\x0b\x32\x1f.scalekit.v1.emails.EmailServerR\x07servers\"\xa2\x01\n\x1fPatchEmailServerSettingsRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId\x12O\n\x08settings\x18\x02 \x01(\x0b\x32+.scalekit.v1.emails.PatchSMTPServerSettingsB\x06\xbaH\x03\xc8\x01\x01R\x08settings\"J\n\x18\x44\x65leteEmailServerRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId*\x94\x02\n\x0fTemplateUsecase\x12 \n\x1cTEMPLATE_USECASE_UNSPECIFIED\x10\x00\x12\t\n\x05LOGIN\x10\x01\x12\r\n\tOTP_LOGIN\x10\x02\x12\x11\n\rMEMBER_INVITE\x10\x03\x12\x0f\n\x0bUSER_INVITE\x10\x04\x12\x0e\n\nUSER_LOGIN\x10\x05\x12\n\n\x06SIGNUP\x10\x06\x12\x12\n\x0eUSER_LOGIN_OTP\x10\x07\x12\x13\n\x0fUSER_LOGIN_LINK\x10\x08\x12\x17\n\x13USER_LOGIN_LINK_OTP\x10\t\x12\x13\n\x0fUSER_SIGNUP_OTP\x10\n\x12\x14\n\x10USER_SIGNUP_LINK\x10\x0b\x12\x18\n\x14USER_SIGNUP_LINK_OTP\x10\x0c*=\n\x0f\x45mailServerType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07INHOUSE\x10\x01\x12\x0c\n\x08\x43USTOMER\x10\x02*Z\n\x13\x45mailServerProvider\x12\x1c\n\x18\x45MAIL_SERVER_UNSPECIFIED\x10\x00\x12\x0c\n\x08SENDGRID\x10\x01\x12\x0c\n\x08POSTMARK\x10\x02\x12\t\n\x05OTHER\x10\x03\x32\xd5\x1b\n\x0c\x45mailService\x12\xa6\x01\n\x17GetTemplatePlaceholders\x12*.scalekit.v1.emails.GetPlaceholdersRequest\x1a+.scalekit.v1.emails.GetPlaceholdersResponse\"2\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02&\x12$/api/v1/email/templates/placeholders\x12\x8e\x01\n\x13GetTemplateUseCases\x12\x16.google.protobuf.Empty\x1a/.scalekit.v1.emails.GetTemplateUseCasesResponse\".\x82\xb5\x18\x02\x18\x01\x82\xd3\xe4\x93\x02\"\x12 /api/v1/email/templates/usecases\x12\xfd\x01\n\x13\x43reateEmailTemplate\x12..scalekit.v1.emails.CreateEmailTemplateRequest\x1a/.scalekit.v1.emails.CreateEmailTemplateResponse\"\x84\x01\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02x\"7/api/v1/organizations/{organization_id}/email/templates:\x08templateZ3\"\'/api/v1/organizations/-/email/templates:\x08template\x12\x96\x02\n\x13UpdateEmailTemplate\x12-.scalekit.v1.emails.PatchEmailTemplateRequest\x1a,.scalekit.v1.emails.GetEmailTemplateResponse\"\xa1\x01\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x94\x01\x32\x45/api/v1/organizations/{organization_id}/email/templates/{template_id}:\x08templateZA25/api/v1/organizations/-/email/templates/{template_id}:\x08template\x12\x8e\x01\n\x15GetEmailConfiguration\x12\x16.google.protobuf.Empty\x1a\x31.scalekit.v1.emails.GetEmailConfigurationResponse\"*\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x1e\x12\x1c/api/v1/emails/configuration\x12\xb4\x01\n\x18UpsertEmailConfiguration\x12\x33.scalekit.v1.emails.UpsertEmailConfigurationRequest\x1a\x34.scalekit.v1.emails.UpsertEmailConfigurationResponse\"-\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02!\"\x1c/api/v1/emails/configuration:\x01*\x12\x94\x02\n\x13\x45nableEmailTemplate\x12..scalekit.v1.emails.EnableEmailTemplateRequest\x1a/.scalekit.v1.emails.EnableEmailTemplateResponse\"\x9b\x01\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x8e\x01\x32L/api/v1/organizations/{organization_id}/email/templates/{template_id}:enableZ>2\n\nupdated_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03R\tupdatedAt\x12\x13\n\x02id\x18\x02 \x01(\tB\x03\xe0\x41\x03R\x02id\x12>\n\x08use_case\x18\x03 \x01(\x0e\x32#.scalekit.v1.emails.TemplateUsecaseR\x07useCase\x12\x18\n\x07\x65nabled\x18\x04 \x01(\x08R\x07\x65nabled\x12$\n\x07subject\x18\x05 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01R\x07subject\x12.\n\x0chtml_content\x18\x06 \x01(\tB\x0b\xbaH\x08r\x06\x10\x01(\x80\x80@R\x0bhtmlContent\x12\x30\n\rplain_content\x18\x07 \x01(\tB\x0b\xbaH\x08r\x06\x10\x01(\x80\x80@R\x0cplainContent\x12\'\n\x0cplaceholders\x18\x08 \x03(\tB\x03\xe0\x41\x03R\x0cplaceholders\"\xc8\x02\n\x13\x43reateEmailTemplate\x12>\n\nupdated_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03R\tupdatedAt\x12\x13\n\x02id\x18\x02 \x01(\tB\x03\xe0\x41\x03R\x02id\x12K\n\x08use_case\x18\x03 \x01(\x0e\x32#.scalekit.v1.emails.TemplateUsecaseB\x0b\xbaH\x08\x82\x01\x02\x10\x01\xc8\x01\x01R\x07useCase\x12\'\n\x07subject\x18\x04 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x07subject\x12\x31\n\x0chtml_content\x18\x05 \x01(\tB\x0e\xbaH\x0br\x06\x10\x01(\x80\x80@\xc8\x01\x01R\x0bhtmlContent\x12\x33\n\rplain_content\x18\x06 \x01(\tB\x0e\xbaH\x0br\x06\x10\x01(\x80\x80@\xc8\x01\x01R\x0cplainContent\"\x9d\x01\n\x1a\x43reateEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12K\n\x08template\x18\x02 \x01(\x0b\x32\'.scalekit.v1.emails.CreateEmailTemplateB\x06\xbaH\x03\xc8\x01\x01R\x08template\"_\n\x1b\x43reateEmailTemplateResponse\x12@\n\x08template\x18\x01 \x01(\x0b\x32\x1c.scalekit.v1.emails.TemplateB\x06\xbaH\x03\xc8\x01\x01R\x08template\"\x84\x01\n\x1a\x45nableEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\"\xde\x01\n\x1b\x45nableEmailTemplateResponse\x12Z\n\x12\x61\x63tive_template_id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03tplR\x10\x61\x63tiveTemplateId\x12\x63\n\x17last_active_template_id\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03tplR\x14lastActiveTemplateId\"\x85\x01\n\x1b\x44isableEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\"\x81\x01\n\x17GetEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\"T\n\x18GetEmailTemplateResponse\x12\x38\n\x08template\x18\x01 \x01(\x0b\x32\x1c.scalekit.v1.emails.TemplateR\x08template\"N\n\x18ListEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\"W\n\x19ListEmailTemplateResponse\x12:\n\ttemplates\x18\x01 \x03(\x0b\x32\x1c.scalekit.v1.emails.TemplateR\ttemplates\"\x90\x03\n\x0eUpdateTemplate\x12)\n\x07subject\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xff\x01H\x00R\x07subject\x88\x01\x01\x12\x33\n\x0chtml_content\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\x10\x01(\x80\x80@H\x01R\x0bhtmlContent\x88\x01\x01\x12\x35\n\rplain_content\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\x10\x01(\x80\x80@H\x02R\x0cplainContent\x88\x01\x01:\xb7\x01\xbaH\xb3\x01\x1a\xb0\x01\n\x1b\x61t_least_one_field_required\x12IAt least one of \'subject\', \'html_content\', or \'plain_content\' must be set\x1a\x46has(this.subject) || has(this.html_content) || has(this.plain_content)B\n\n\x08_subjectB\x0f\n\r_html_contentB\x10\n\x0e_plain_content\"\x96\x03\n\x1dGetEmailConfigurationResponse\x12i\n\x11\x64\x65\x66\x61ult_from_name\x18\x01 \x01(\tB=\x92\x41:28Default email from name when using scalekit email serverR\x0f\x64\x65\x66\x61ultFromName\x12x\n\x14\x64\x65\x66\x61ult_from_address\x18\x02 \x01(\tBF\x92\x41=2;Default email from address when using scalekit email server\xbaH\x03\xc8\x01\x01R\x12\x64\x65\x66\x61ultFromAddress\x12W\n\x15\x65mail_server_selected\x18\x03 \x01(\x0e\x32#.scalekit.v1.emails.EmailServerTypeR\x13\x65mailServerSelected\x12\x37\n\x06server\x18\x04 \x01(\x0b\x32\x1f.scalekit.v1.emails.EmailServerR\x06server\"\x99\x01\n\x1fUpsertEmailConfigurationRequest\x12*\n\x11\x64\x65\x66\x61ult_from_name\x18\x01 \x01(\tR\x0f\x64\x65\x66\x61ultFromName\x12J\n\x06server\x18\x02 \x01(\x0b\x32\x32.scalekit.v1.emails.UpsertEmailConfigurationServerR\x06server\"\x9f\x02\n\x1eUpsertEmailConfigurationServer\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12K\n\x08provider\x18\x02 \x01(\x0e\x32\'.scalekit.v1.emails.EmailServerProviderB\x06\xbaH\x03\xc8\x01\x01R\x08provider\x12<\n\x07\x65nabled\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x06\xbaH\x03\xc8\x01\x01R\x07\x65nabled\x12\x62\n\x08settings\x18\x04 \x01(\x0b\x32>.scalekit.v1.emails.UpsertEmailConfigurationSMTPServerSettingsB\x06\xbaH\x03\xc8\x01\x01R\x08settings\"\x8c\x02\n*UpsertEmailConfigurationSMTPServerSettings\x12!\n\x04host\x18\x01 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x04host\x12\x1a\n\x04port\x18\x02 \x01(\x03\x42\x06\xbaH\x03\xc8\x01\x01R\x04port\x12)\n\x08username\x18\x03 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08username\x12\x1a\n\x08password\x18\x04 \x01(\tR\x08password\x12,\n\nfrom_email\x18\x05 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\tfromEmail\x12*\n\tfrom_name\x18\x06 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08\x66romName\"\x92\x02\n UpsertEmailConfigurationResponse\x12*\n\x11\x64\x65\x66\x61ult_from_name\x18\x01 \x01(\tR\x0f\x64\x65\x66\x61ultFromName\x12\x30\n\x14\x64\x65\x66\x61ult_from_address\x18\x02 \x01(\tR\x12\x64\x65\x66\x61ultFromAddress\x12W\n\x15\x65mail_server_selected\x18\x03 \x01(\x0e\x32#.scalekit.v1.emails.EmailServerTypeR\x13\x65mailServerSelected\x12\x37\n\x06server\x18\x04 \x01(\x0b\x32\x1f.scalekit.v1.emails.EmailServerR\x06server\"\x88\x02\n\x19PatchEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\x12\x46\n\x08template\x18\x04 \x01(\x0b\x32\".scalekit.v1.emails.UpdateTemplateB\x06\xbaH\x03\xc8\x01\x01R\x08template\x12;\n\x0bupdate_mask\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskR\nupdateMask\"\x84\x01\n\x1a\x44\x65leteEmailTemplateRequest\x12\x32\n\x0forganization_id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x32\n\x0btemplate_id\x18\x02 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03tpl\xc8\x01\x01R\ntemplateId\"\xac\x02\n\x0b\x45mailServer\x12>\n\nupdated_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x03\xe0\x41\x03R\tupdatedAt\x12\x13\n\x02id\x18\x02 \x01(\tB\x03\xe0\x41\x03R\x02id\x12K\n\x08provider\x18\x03 \x01(\x0e\x32\'.scalekit.v1.emails.EmailServerProviderB\x06\xbaH\x03\xc8\x01\x01R\x08provider\x12\x18\n\x07\x65nabled\x18\x04 \x01(\x08R\x07\x65nabled\x12U\n\rsmtp_settings\x18\x05 \x01(\x0b\x32&.scalekit.v1.emails.SMTPServerSettingsB\x06\xbaH\x03\xc8\x01\x01H\x00R\x0csmtpSettingsB\n\n\x08settings\"\x86\x02\n\x12SMTPServerSettings\x12!\n\x04host\x18\x01 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x04host\x12\x1a\n\x04port\x18\x02 \x01(\x03\x42\x06\xbaH\x03\xc8\x01\x01R\x04port\x12)\n\x08username\x18\x03 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08username\x12,\n\x08password\x18\x04 \x01(\tB\x10\xe0\x41\x04\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08password\x12,\n\nfrom_email\x18\x05 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\tfromEmail\x12*\n\tfrom_name\x18\x06 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08\x66romName\"\xfe\x01\n\x17PatchSMTPServerSettings\x12!\n\x04host\x18\x01 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x04host\x12\x1a\n\x04port\x18\x02 \x01(\x03\x42\x06\xbaH\x03\xc8\x01\x01R\x04port\x12)\n\x08username\x18\x03 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08username\x12\x1f\n\x08password\x18\x04 \x01(\tB\x03\xe0\x41\x04R\x08password\x12,\n\nfrom_email\x18\x05 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\tfromEmail\x12*\n\tfrom_name\x18\x06 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xff\x01\xc8\x01\x01R\x08\x66romName\"\xab\x01\n\x18\x43reateEmailServerRequest\x12K\n\x08provider\x18\x01 \x01(\x0e\x32\'.scalekit.v1.emails.EmailServerProviderB\x06\xbaH\x03\xc8\x01\x01R\x08provider\x12\x42\n\x08settings\x18\x02 \x01(\x0b\x32&.scalekit.v1.emails.SMTPServerSettingsR\x08settings\"\\\n\x19\x43reateEmailServerResponse\x12?\n\x06server\x18\x01 \x01(\x0b\x32\x1f.scalekit.v1.emails.EmailServerB\x06\xbaH\x03\xc8\x01\x01R\x06server\"G\n\x15GetEmailServerRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId\"Q\n\x16GetEmailServerResponse\x12\x37\n\x06server\x18\x01 \x01(\x0b\x32\x1f.scalekit.v1.emails.EmailServerR\x06server\"J\n\x18\x45nableEmailServerRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId\"\xd4\x01\n\x19\x45nableEmailServerResponse\x12V\n\x10\x61\x63tive_server_id\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65srR\x0e\x61\x63tiveServerId\x12_\n\x15last_active_server_id\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65srR\x12lastActiveServerId\"K\n\x19\x44isableEmailServerRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId\"T\n\x17ListEmailServerResponse\x12\x39\n\x07servers\x18\x01 \x03(\x0b\x32\x1f.scalekit.v1.emails.EmailServerR\x07servers\"\xa2\x01\n\x1fPatchEmailServerSettingsRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId\x12O\n\x08settings\x18\x02 \x01(\x0b\x32+.scalekit.v1.emails.PatchSMTPServerSettingsB\x06\xbaH\x03\xc8\x01\x01R\x08settings\"J\n\x18\x44\x65leteEmailServerRequest\x12.\n\tserver_id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65sr\xc8\x01\x01R\x08serverId*\x94\x02\n\x0fTemplateUsecase\x12 \n\x1cTEMPLATE_USECASE_UNSPECIFIED\x10\x00\x12\t\n\x05LOGIN\x10\x01\x12\r\n\tOTP_LOGIN\x10\x02\x12\x11\n\rMEMBER_INVITE\x10\x03\x12\x0f\n\x0bUSER_INVITE\x10\x04\x12\x0e\n\nUSER_LOGIN\x10\x05\x12\n\n\x06SIGNUP\x10\x06\x12\x12\n\x0eUSER_LOGIN_OTP\x10\x07\x12\x13\n\x0fUSER_LOGIN_LINK\x10\x08\x12\x17\n\x13USER_LOGIN_LINK_OTP\x10\t\x12\x13\n\x0fUSER_SIGNUP_OTP\x10\n\x12\x14\n\x10USER_SIGNUP_LINK\x10\x0b\x12\x18\n\x14USER_SIGNUP_LINK_OTP\x10\x0c*=\n\x0f\x45mailServerType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07INHOUSE\x10\x01\x12\x0c\n\x08\x43USTOMER\x10\x02*Z\n\x13\x45mailServerProvider\x12\x1c\n\x18\x45MAIL_SERVER_UNSPECIFIED\x10\x00\x12\x0c\n\x08SENDGRID\x10\x01\x12\x0c\n\x08POSTMARK\x10\x02\x12\t\n\x05OTHER\x10\x03\x32\xb7\x1d\n\x0c\x45mailService\x12\xb5\x01\n\x17GetTemplatePlaceholders\x12*.scalekit.v1.emails.GetPlaceholdersRequest\x1a+.scalekit.v1.emails.GetPlaceholdersResponse\"A\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02&\x12$/api/v1/email/templates/placeholders\x12\x8e\x01\n\x13GetTemplateUseCases\x12\x16.google.protobuf.Empty\x1a/.scalekit.v1.emails.GetTemplateUseCasesResponse\".\x82\xb5\x18\x02\x18\x01\x82\xd3\xe4\x93\x02\"\x12 /api/v1/email/templates/usecases\x12\x8c\x02\n\x13\x43reateEmailTemplate\x12..scalekit.v1.emails.CreateEmailTemplateRequest\x1a/.scalekit.v1.emails.CreateEmailTemplateResponse\"\x93\x01\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02x\"7/api/v1/organizations/{organization_id}/email/templates:\x08templateZ3\"\'/api/v1/organizations/-/email/templates:\x08template\x12\xa5\x02\n\x13UpdateEmailTemplate\x12-.scalekit.v1.emails.PatchEmailTemplateRequest\x1a,.scalekit.v1.emails.GetEmailTemplateResponse\"\xb0\x01\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x94\x01\x32\x45/api/v1/organizations/{organization_id}/email/templates/{template_id}:\x08templateZA25/api/v1/organizations/-/email/templates/{template_id}:\x08template\x12\x8e\x01\n\x15GetEmailConfiguration\x12\x16.google.protobuf.Empty\x1a\x31.scalekit.v1.emails.GetEmailConfigurationResponse\"*\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x1e\x12\x1c/api/v1/emails/configuration\x12\xb4\x01\n\x18UpsertEmailConfiguration\x12\x33.scalekit.v1.emails.UpsertEmailConfigurationRequest\x1a\x34.scalekit.v1.emails.UpsertEmailConfigurationResponse\"-\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02!\"\x1c/api/v1/emails/configuration:\x01*\x12\xa3\x02\n\x13\x45nableEmailTemplate\x12..scalekit.v1.emails.EnableEmailTemplateRequest\x1a/.scalekit.v1.emails.EnableEmailTemplateResponse\"\xaa\x01\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x8e\x01\x32L/api/v1/organizations/{organization_id}/email/templates/{template_id}:enableZ>2\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02#\x12!/api/v1/email/servers/{server_id}\x12\x8b\x01\n\x10ListEmailServers\x12\x16.google.protobuf.Empty\x1a+.scalekit.v1.emails.ListEmailServerResponse\"2\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x17\x12\x15/api/v1/email/servers\x12\x99\x01\n\x11\x44\x65leteEmailServer\x12,.scalekit.v1.emails.DeleteEmailServerRequest\x1a\x16.google.protobuf.Empty\">\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02#*!/api/v1/email/servers/{server_id}B2Z0github.com/scalekit-inc/scalekit/pkg/grpc/emailsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -193,121 +194,121 @@ _globals['_DELETEEMAILSERVERREQUEST'].fields_by_name['server_id']._loaded_options = None _globals['_DELETEEMAILSERVERREQUEST'].fields_by_name['server_id']._serialized_options = b'\272H\016r\t\020\001\030 :\003esr\310\001\001' _globals['_EMAILSERVICE'].methods_by_name['GetTemplatePlaceholders']._loaded_options = None - _globals['_EMAILSERVICE'].methods_by_name['GetTemplatePlaceholders']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002&\022$/api/v1/email/templates/placeholders' + _globals['_EMAILSERVICE'].methods_by_name['GetTemplatePlaceholders']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002&\022$/api/v1/email/templates/placeholders' _globals['_EMAILSERVICE'].methods_by_name['GetTemplateUseCases']._loaded_options = None _globals['_EMAILSERVICE'].methods_by_name['GetTemplateUseCases']._serialized_options = b'\202\265\030\002\030\001\202\323\344\223\002\"\022 /api/v1/email/templates/usecases' _globals['_EMAILSERVICE'].methods_by_name['CreateEmailTemplate']._loaded_options = None - _globals['_EMAILSERVICE'].methods_by_name['CreateEmailTemplate']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002x\"7/api/v1/organizations/{organization_id}/email/templates:\010templateZ3\"\'/api/v1/organizations/-/email/templates:\010template' + _globals['_EMAILSERVICE'].methods_by_name['CreateEmailTemplate']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002x\"7/api/v1/organizations/{organization_id}/email/templates:\010templateZ3\"\'/api/v1/organizations/-/email/templates:\010template' _globals['_EMAILSERVICE'].methods_by_name['UpdateEmailTemplate']._loaded_options = None - _globals['_EMAILSERVICE'].methods_by_name['UpdateEmailTemplate']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\224\0012E/api/v1/organizations/{organization_id}/email/templates/{template_id}:\010templateZA25/api/v1/organizations/-/email/templates/{template_id}:\010template' + _globals['_EMAILSERVICE'].methods_by_name['UpdateEmailTemplate']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\224\0012E/api/v1/organizations/{organization_id}/email/templates/{template_id}:\010templateZA25/api/v1/organizations/-/email/templates/{template_id}:\010template' _globals['_EMAILSERVICE'].methods_by_name['GetEmailConfiguration']._loaded_options = None _globals['_EMAILSERVICE'].methods_by_name['GetEmailConfiguration']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002\036\022\034/api/v1/emails/configuration' _globals['_EMAILSERVICE'].methods_by_name['UpsertEmailConfiguration']._loaded_options = None _globals['_EMAILSERVICE'].methods_by_name['UpsertEmailConfiguration']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002!\"\034/api/v1/emails/configuration:\001*' _globals['_EMAILSERVICE'].methods_by_name['EnableEmailTemplate']._loaded_options = None - _globals['_EMAILSERVICE'].methods_by_name['EnableEmailTemplate']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\216\0012L/api/v1/organizations/{organization_id}/email/templates/{template_id}:enableZ>22\"*/api/v1/environments/{id}/session-settings:\x10session_settings\x12\xf9\x01\n\x1f\x43reateEnvironmentUserManagement\x12@.scalekit.v1.environments.CreateEnvironmentUserManagementRequest\x1a\x41.scalekit.v1.environments.CreateEnvironmentUserManagementResponse\"Q\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x45\"2/api/v1/environments/{id}/settings/user-management:\x0fuser_management\x12\xda\x01\n\x1dGetEnvironmentSessionSettings\x12>.scalekit.v1.environments.GetEnvironmentSessionSettingsRequest\x1a?.scalekit.v1.environments.GetEnvironmentSessionSettingsResponse\"8\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02,\x12*/api/v1/environments/{id}/session-settings\x12\xdf\x01\n\x1cGetEnvironmentUserManagement\x12=.scalekit.v1.environments.GetEnvironmentUserManagementRequest\x1a>.scalekit.v1.environments.GetEnvironmentUserManagementResponse\"@\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x34\x12\x32/api/v1/environments/{id}/settings/user-management\x12\xf5\x01\n UpdateEnvironmentSessionSettings\x12\x41.scalekit.v1.environments.UpdateEnvironmentSessionSettingsRequest\x1a\x42.scalekit.v1.environments.UpdateEnvironmentSessionSettingsResponse\"J\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02>2*/api/v1/environments/{id}/session-settings:\x10session_settings\x12\xf9\x01\n\x1fUpdateEnvironmentUserManagement\x12@.scalekit.v1.environments.UpdateEnvironmentUserManagementRequest\x1a\x41.scalekit.v1.environments.UpdateEnvironmentUserManagementResponse\"Q\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x45\x32\x32/api/v1/environments/{id}/settings/user-management:\x0fuser_management\x12\xa5\x01\n\nGetContext\x12+.scalekit.v1.environments.GetContextRequest\x1a,.scalekit.v1.environments.GetContextResponse\"<\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x30\x12./api/v1/environments/{environment_id}/contexts\x12\x9e\x01\n\rUpdateContext\x12..scalekit.v1.environments.UpdateContextRequest\x1a\x16.google.protobuf.Empty\"E\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x39\x1a./api/v1/environments/{environment_id}/contexts:\x07\x63ontext\x12\xee\x01\n\x11GetCurrentSession\x12\x32.scalekit.v1.environments.GetCurrentSessionRequest\x1a\x33.scalekit.v1.environments.GetCurrentSessionResponse\"p\x82\xb5\x18\x02\x18p\x82\xd3\xe4\x93\x02\x64\x12%/api/v1/environments/{id}/sessions:meZ$\x12\"/api/v1/environments/-/sessions:meZ\x15\x12\x13/api/v1/sessions:me\x12\xa2\x01\n\x14GetScalekitResources\x12\x31.scalekit.v1.environments.ScalekitResourceRequest\x1a\x32.scalekit.v1.environments.ScalekitResourceResponse\"#\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x17\"\x12/api/v1/fetch:bulk:\x01*B8Z6github.com/scalekit-inc/scalekit/pkg/grpc/environmentsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n+scalekit/v1/environments/environments.proto\x12\x18scalekit.v1.environments\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a)scalekit/v1/connections/connections.proto\x1a!scalekit/v1/options/options.proto\x1a-scalekit/v1/organizations/organizations.proto\"o\n\x19\x43reateCustomDomainRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\x32\n\rcustom_domain\x18\x02 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xfa\x01\xc8\x01\x01R\x0c\x63ustomDomain\"e\n\x1a\x43reateCustomDomainResponse\x12G\n\x0b\x65nvironment\x18\x01 \x01(\x0b\x32%.scalekit.v1.environments.EnvironmentR\x0b\x65nvironment\"j\n\x14GetDNSRecordsRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\x32\n\rcustom_domain\x18\x02 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\xfa\x01\xc8\x01\x01R\x0c\x63ustomDomain\"^\n\x15GetDNSRecordsResponse\x12\x45\n\x0b\x64ns_records\x18\x01 \x03(\x0b\x32$.scalekit.v1.environments.DNSRecordsR\ndnsRecords\"w\n\nDNSRecords\x12\'\n\thost_name\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xfa\x01R\x08hostName\x12\x1e\n\x04type\x18\x02 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xfa\x01R\x04type\x12 \n\x05value\x18\x03 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xfa\x01R\x05value\"\x92\x04\n\x0b\x45nvironment\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12;\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12;\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nupdateTime\x12-\n\x0c\x64isplay_name\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\"\n\x06\x64omain\x18\x05 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xfa\x01R\x06\x64omain\x12@\n\x0bregion_code\x18\x06 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeR\nregionCode\x12\x38\n\x04type\x18\x07 \x01(\x0e\x32$.scalekit.v1.commons.EnvironmentTypeR\x04type\x12(\n\rcustom_domain\x18\x08 \x01(\tH\x00R\x0c\x63ustomDomain\x88\x01\x01\x12^\n\x14\x63ustom_domain_status\x18\t \x01(\x0e\x32,.scalekit.v1.environments.CustomDomainStatusR\x12\x63ustomDomainStatusB\x10\n\x0e_custom_domain\"\xb1\x03\n\x11\x43reateEnvironment\x12-\n\x0c\x64isplay_name\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\x45\n\x0bregion_code\x18\x06 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeH\x00R\nregionCode\x88\x01\x01\x12=\n\x04type\x18\x07 \x01(\x0e\x32$.scalekit.v1.commons.EnvironmentTypeH\x01R\x04type\x88\x01\x01\x12\xaf\x01\n\x13\x61uthentication_mode\x18\x08 \x01(\x0e\x32\'.scalekit.v1.commons.AuthenticationModeBP\x92\x41M2KThe authentication mode for the environment. The default is FULL_STACK_AUTHH\x02R\x12\x61uthenticationMode\x88\x01\x01\x42\x0e\n\x0c_region_codeB\x07\n\x05_typeB\x16\n\x14_authentication_modeJ\x04\x08\x05\x10\x06\"j\n\x11UpdateEnvironment\x12\x32\n\x0c\x64isplay_name\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xd0\x0fH\x00R\x0b\x64isplayName\x88\x01\x01\x42\x0f\n\r_display_nameJ\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08\"S\n\x17UpdateEnvironmentDomain\x12\'\n\x06\x64omain\x18\x05 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xfa\x01H\x00R\x06\x64omain\x88\x01\x01\x42\t\n\x07_domainJ\x04\x08\x04\x10\x05\"q\n\x18\x43reateEnvironmentRequest\x12U\n\x0b\x65nvironment\x18\x01 \x01(\x0b\x32+.scalekit.v1.environments.CreateEnvironmentB\x06\xbaH\x03\xc8\x01\x01R\x0b\x65nvironment\"d\n\x19\x43reateEnvironmentResponse\x12G\n\x0b\x65nvironment\x18\x01 \x01(\x0b\x32%.scalekit.v1.environments.EnvironmentR\x0b\x65nvironment\"\x91\x01\n\x18UpdateEnvironmentRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12U\n\x0b\x65nvironment\x18\x02 \x01(\x0b\x32+.scalekit.v1.environments.UpdateEnvironmentB\x06\xbaH\x03\xc8\x01\x01R\x0b\x65nvironment\"\x9d\x01\n\x1eUpdateEnvironmentDomainRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12[\n\x0b\x65nvironment\x18\x02 \x01(\x0b\x32\x31.scalekit.v1.environments.UpdateEnvironmentDomainB\x06\xbaH\x03\xc8\x01\x01R\x0b\x65nvironment\"d\n\x19UpdateEnvironmentResponse\x12G\n\x0b\x65nvironment\x18\x01 \x01(\x0b\x32%.scalekit.v1.environments.EnvironmentR\x0b\x65nvironment\"7\n\x15GetEnvironmentRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"a\n\x16GetEnvironmentResponse\x12G\n\x0b\x65nvironment\x18\x01 \x01(\x0b\x32%.scalekit.v1.environments.EnvironmentR\x0b\x65nvironment\"U\n\x17ListEnvironmentsRequest\x12\x1b\n\tpage_size\x18\x01 \x01(\rR\x08pageSize\x12\x1d\n\npage_token\x18\x02 \x01(\tR\tpageToken\"\xac\x01\n\x18ListEnvironmentsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12I\n\x0c\x65nvironments\x18\x03 \x03(\x0b\x32%.scalekit.v1.environments.EnvironmentR\x0c\x65nvironments\":\n\x18\x44\x65leteEnvironmentRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"@\n\x1eGenerateSamlCertificateRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"k\n\x1fGenerateSamlCertificateResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12 \n\x0b\x63\x65rtificate\x18\x02 \x01(\tR\x0b\x63\x65rtificate\x12\x16\n\x06\x65xpiry\x18\x03 \x01(\x03R\x06\x65xpiry\"\x99\x01\n!UpdatePortalCustomizationResponse\x12$\n\renvironmentId\x18\x01 \x01(\tR\renvironmentId\x12N\n\x16\x63ustomization_settings\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\x15\x63ustomizationSettings\"\x9a\x01\n UpdatePortalCustomizationRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12V\n\x16\x63ustomization_settings\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructB\x06\xbaH\x03\xc8\x01\x01R\x15\x63ustomizationSettings\":\n\x1dGetPortalCustomizationRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x02id\"\x9d\x04\n\x0ePortalSettings\x12\x98\x01\n\x0f\x63ustom_branding\x18\x01 \x01(\x08\x42o\x92\x41l2dIndicates whether custom portal branding is enabled for this workspace based on billing subscriptionJ\x04trueR\x0e\x63ustomBranding\x12\xc3\x01\n\x17new_self_serve_sso_scim\x18\x02 \x01(\x08\x42\x8c\x01\x92\x41\x88\x01\x32\x7fIndicates whether the new self-serve SSO/SCIM flow should be shown in the customer portal (rollout-driven, not billing-derived)J\x05\x66\x61lseR\x13newSelfServeSsoScim\x12\xa9\x01\n\x12\x65nable_conn_delete\x18\x03 \x01(\x08\x42{\x92\x41x2oIndicates whether connection deletion is enabled for this environment (rollout-driven by environment allowlist)J\x05\x66\x61lseR\x10\x65nableConnDelete\"\xe6\x01\n\x1eGetPortalCustomizationResponse\x12$\n\renvironmentId\x18\x01 \x01(\tR\renvironmentId\x12S\n\x16\x63ustomization_settings\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructB\x03\xe0\x41\x01R\x15\x63ustomizationSettings\x12I\n\x08settings\x18\x03 \x01(\x0b\x32(.scalekit.v1.environments.PortalSettingsB\x03\xe0\x41\x03R\x08settings\"Z\n\x1c\x43reateAssetUploadUrlResponse\x12\x1d\n\nupload_url\x18\x01 \x01(\tR\tuploadUrl\x12\x1b\n\tfetch_url\x18\x02 \x01(\tR\x08\x66\x65tchUrl\"\x8d\x01\n\x1b\x43reateAssetUploadUrlRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12N\n\x0e\x61sset_settings\x18\x02 \x01(\x0b\x32\'.scalekit.v1.environments.AssetSettingsR\rassetSettings\"\x91\x01\n\rAssetSettings\x12K\n\x08\x63\x61tegory\x18\x01 \x01(\x0e\x32\'.scalekit.v1.environments.AssetCategoryB\x06\xbaH\x03\xc8\x01\x01R\x08\x63\x61tegory\x12\x33\n\textension\x18\x02 \x01(\tB\x15\xbaH\x12r\x10R\x03jpgR\x04jpegR\x03pngR\textension\"\x89\x01\n\x15UpdateFeaturesRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12P\n\x08\x66\x65\x61tures\x18\x02 \x03(\x0b\x32,.scalekit.v1.environments.EnvironmentFeatureB\x06\xbaH\x03\xc8\x01\x01R\x08\x66\x65\x61tures\"2\n\x17\x45nableFSAFeatureRequest\x12\x17\n\x02id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x18 R\x02id\":\n\x18\x44isableFSAFeatureRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"7\n\x12GetFeaturesRequest\x12!\n\x02id\x18\x01 \x01(\tB\x11\xbaH\x0er\t\x10\x01\x18 :\x03\x65nv\xd0\x01\x01R\x02id\"_\n\x13GetFeaturesResponse\x12H\n\x08\x66\x65\x61tures\x18\x01 \x03(\x0b\x32,.scalekit.v1.environments.EnvironmentFeatureR\x08\x66\x65\x61tures\"`\n\x14\x45nableFeatureRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12(\n\nfeature_id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18 R\tfeatureId\"a\n\x15\x44isableFeatureRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12(\n\nfeature_id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x01\x18 R\tfeatureId\"B\n\x12\x45nvironmentFeature\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x18\n\x07\x65nabled\x18\x02 \x01(\x08R\x07\x65nabled\"p\n\'GetHostScopedPublicFeatureFlagsResponse\x12\x45\n\x05\x66lags\x18\x01 \x03(\x0b\x32/.scalekit.v1.environments.PublicHostFeatureFlagR\x05\x66lags\"\x9f\x01\n\x15PublicHostFeatureFlag\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.ValueR\x05value\x12\x18\n\x07variant\x18\x03 \x01(\tR\x07variant\x12\x16\n\x06reason\x18\x04 \x01(\tR\x06reason\x12\x14\n\x05\x65rror\x18\x05 \x01(\tR\x05\x65rror\"F\n$GetEnvironmentSessionSettingsRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"E\n#GetEnvironmentUserManagementRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"}\n%GetEnvironmentSessionSettingsResponse\x12T\n\x10session_settings\x18\x01 \x01(\x0b\x32).scalekit.v1.environments.SessionSettingsR\x0fsessionSettings\"y\n$GetEnvironmentUserManagementResponse\x12Q\n\x0fuser_management\x18\x01 \x01(\x0b\x32(.scalekit.v1.environments.UserManagementR\x0euserManagement\"\xa7\x01\n\'CreateEnvironmentSessionSettingsRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\\\n\x10session_settings\x18\x02 \x01(\x0b\x32).scalekit.v1.environments.SessionSettingsB\x06\xbaH\x03\xc8\x01\x01R\x0fsessionSettings\"\xa3\x01\n&CreateEnvironmentUserManagementRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12Y\n\x0fuser_management\x18\x02 \x01(\x0b\x32(.scalekit.v1.environments.UserManagementB\x06\xbaH\x03\xc8\x01\x01R\x0euserManagement\"\xa7\x01\n(CreateEnvironmentSessionSettingsResponse\x12%\n\x0e\x65nvironment_id\x18\x01 \x01(\tR\renvironmentId\x12T\n\x10session_settings\x18\x02 \x01(\x0b\x32).scalekit.v1.environments.SessionSettingsR\x0fsessionSettings\"\xa3\x01\n\'CreateEnvironmentUserManagementResponse\x12%\n\x0e\x65nvironment_id\x18\x01 \x01(\tR\renvironmentId\x12Q\n\x0fuser_management\x18\x02 \x01(\x0b\x32(.scalekit.v1.environments.UserManagementR\x0euserManagement\"\xa7\x01\n\'UpdateEnvironmentSessionSettingsRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\\\n\x10session_settings\x18\x02 \x01(\x0b\x32).scalekit.v1.environments.SessionSettingsB\x06\xbaH\x03\xc8\x01\x01R\x0fsessionSettings\"\xa3\x01\n&UpdateEnvironmentUserManagementRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12Y\n\x0fuser_management\x18\x02 \x01(\x0b\x32(.scalekit.v1.environments.UserManagementB\x06\xbaH\x03\xc8\x01\x01R\x0euserManagement\"\xa7\x01\n(UpdateEnvironmentSessionSettingsResponse\x12%\n\x0e\x65nvironment_id\x18\x01 \x01(\tR\renvironmentId\x12T\n\x10session_settings\x18\x02 \x01(\x0b\x32).scalekit.v1.environments.SessionSettingsR\x0fsessionSettings\"\xa3\x01\n\'UpdateEnvironmentUserManagementResponse\x12%\n\x0e\x65nvironment_id\x18\x01 \x01(\tR\renvironmentId\x12Q\n\x0fuser_management\x18\x02 \x01(\x0b\x32(.scalekit.v1.environments.UserManagementR\x0euserManagement\"\xff\x08\n\x0fSessionSettings\x12X\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x0b\xbaH\x08\x1a\x06\x18\xc0\xd1\x02(\x01R\x11\x61\x63\x63\x65ssTokenExpiry\x12\x65\n\x1a\x63lient_access_token_expiry\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x0b\xbaH\x08\x1a\x06\x18\xc0\xd1\x02(\x01R\x17\x63lientAccessTokenExpiry\x12\x62\n\x18\x61\x62solute_session_timeout\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x0b\xbaH\x08\x1a\x06\x18\xa0\x8a (\x01R\x16\x61\x62soluteSessionTimeout\x12X\n\x1asession_management_enabled\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x18sessionManagementEnabled\x12Y\n\x14idle_session_timeout\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\n\xbaH\x07\x1a\x05\x18\xe0N(\x01R\x12idleSessionTimeout\x12L\n\x14idle_session_enabled\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x12idleSessionEnabled\x12g\n\x17\x63ookie_persistence_type\x18\x07 \x01(\x0e\x32/.scalekit.v1.environments.CookiePersistenceTypeR\x15\x63ookiePersistenceType\x12h\n\x18\x63ookie_same_site_setting\x18\x08 \x01(\x0e\x32/.scalekit.v1.environments.CookieSameSiteSettingR\x15\x63ookieSameSiteSetting\x12N\n\x14\x63ookie_custom_domain\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueR\x12\x63ookieCustomDomain\x12[\n\x18\x61\x63\x63\x65ss_token_expiry_unit\x18\n \x01(\x0e\x32\".scalekit.v1.environments.TimeUnitR\x15\x61\x63\x63\x65ssTokenExpiryUnit\x12\x65\n\x1d\x61\x62solute_session_timeout_unit\x18\x0b \x01(\x0e\x32\".scalekit.v1.environments.TimeUnitR\x1a\x61\x62soluteSessionTimeoutUnit\x12]\n\x19idle_session_timeout_unit\x18\x0c \x01(\x0e\x32\".scalekit.v1.environments.TimeUnitR\x16idleSessionTimeoutUnit\"\xa5\x07\n\x0eUserManagement\x12\x61\n\x1f\x61llow_duplicate_user_identities\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x1c\x61llowDuplicateUserIdentities\x12X\n\x1a\x61llow_multiple_memberships\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x18\x61llowMultipleMemberships\x12V\n\x19\x61llow_organization_signup\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x17\x61llowOrganizationSignup\x12o\n\x15org_user_relationship\x18\x04 \x01(\x0e\x32\x31.scalekit.v1.environments.OrgUserRelationshipTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x13orgUserRelationship\x12O\n\x16\x65nable_max_users_limit\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x13\x65nableMaxUsersLimit\x12P\n\x0fmax_users_limit\x18\x06 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x0b\xbaH\x08\x1a\x06\x18\x9f\x8d\x06(\x01R\rmaxUsersLimit\x12V\n\x11invitation_expiry\x18\x07 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x0b\xbaH\x08*\x06\x18\xc0\xd1\x02(\x01R\x10invitationExpiry\x12_\n\x1e\x62lock_disposable_email_domains\x18\t \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x1b\x62lockDisposableEmailDomains\x12W\n\x1a\x62lock_public_email_domains\x18\n \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x17\x62lockPublicEmailDomains\x12X\n\x1bsync_user_profile_on_signin\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x17syncUserProfileOnSignin\":\n\x11GetContextRequest\x12%\n\x0e\x65nvironment_id\x18\x02 \x01(\tR\renvironmentId\"G\n\x12GetContextResponse\x12\x31\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext\"p\n\x14UpdateContextRequest\x12%\n\x0e\x65nvironment_id\x18\x02 \x01(\tR\renvironmentId\x12\x31\n\x07\x63ontext\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext\"*\n\x18GetCurrentSessionRequest\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\"\x93\x03\n\x19GetCurrentSessionResponse\x12\x46\n\x0esession_expiry\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\rsessionExpiry\x88\x01\x01\x12J\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x11\x61\x63\x63\x65ssTokenExpiry\x12,\n\x0forganization_id\x18\x03 \x01(\tH\x01R\x0eorganizationId\x88\x01\x01\x12\x18\n\x07subject\x18\x04 \x01(\tR\x07subject\x12\x19\n\x05\x65mail\x18\x05 \x01(\tH\x02R\x05\x65mail\x88\x01\x01\x12\x35\n\x14\x63onnected_account_id\x18\x06 \x01(\tH\x03R\x12\x63onnectedAccountId\x88\x01\x01\x42\x11\n\x0f_session_expiryB\x12\n\x10_organization_idB\x08\n\x06_emailB\x17\n\x15_connected_account_id\"\xc5\x01\n\x10ResourceMetadata\x12K\n\x04type\x18\x01 \x01(\x0e\x32\x37.scalekit.v1.environments.ResourceMetadata.ResourceTypeR\x04type\x12 \n\x0bidentifiers\x18\x02 \x03(\tR\x0bidentifiers\"B\n\x0cResourceType\x12\x10\n\x0corganization\x10\x00\x12\x0e\n\nconnection\x10\x01\x12\x10\n\x0c\x61uth_request\x10\x02\"c\n\x17ScalekitResourceRequest\x12H\n\tresources\x18\x01 \x03(\x0b\x32*.scalekit.v1.environments.ResourceMetadataR\tresources\"\xd2\x01\n\x18ScalekitResourceResponse\x12_\n\tresources\x18\x01 \x03(\x0b\x32\x41.scalekit.v1.environments.ScalekitResourceResponse.ResourcesEntryR\tresources\x1aU\n\x0eResourcesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\x05value:\x02\x38\x01\"\x18\n\x16PortalBootstrapRequest\"\xbe\x01\n\x1cPortalCustomizationBootstrap\x12S\n\x16\x63ustomization_settings\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\x03\xe0\x41\x01R\x15\x63ustomizationSettings\x12I\n\x08settings\x18\x02 \x01(\x0b\x32(.scalekit.v1.environments.PortalSettingsB\x03\xe0\x41\x03R\x08settings\"\xed\x02\n\x17PortalBootstrapResponse\x12M\n\x07session\x18\x01 \x01(\x0b\x32\x33.scalekit.v1.environments.GetCurrentSessionResponseR\x07session\x12k\n\x15portal_customizations\x18\x02 \x01(\x0b\x32\x36.scalekit.v1.environments.PortalCustomizationBootstrapR\x14portalCustomizations\x12K\n\x0corganization\x18\x03 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationR\x0corganization\x12I\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionR\x0b\x63onnections\"\xa7\x03\n\x12\x41gentActionsConfig\x12l\n\x10user_verify_mode\x18\x01 \x01(\x0e\x32\x38.scalekit.v1.environments.ConnectedAccountUserVerifyModeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0euserVerifyMode\x12\x87\x02\n\x16\x64\x65tailed_error_logging\x18\x02 \x01(\x08\x42\xcb\x01\x92\x41\xc7\x01\x32\xc4\x01When true, full error messages from provider failures are captured in tool-call logs. When false (default), only the error code is retained. Omit the field to leave the existing setting unchanged.H\x00R\x14\x64\x65tailedErrorLogging\x88\x01\x01\x42\x19\n\x17_detailed_error_logging\"\xa6\x01\n\x1f\x43reateAgentActionsConfigRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\x63\n\x14\x61gent_actions_config\x18\x02 \x01(\x0b\x32,.scalekit.v1.environments.AgentActionsConfigB\x03\xe0\x41\x02R\x12\x61gentActionsConfig\"\x87\x01\n CreateAgentActionsConfigResponse\x12\x63\n\x14\x61gent_actions_config\x18\x01 \x01(\x0b\x32,.scalekit.v1.environments.AgentActionsConfigB\x03\xe0\x41\x03R\x12\x61gentActionsConfig\">\n\x1cGetAgentActionsConfigRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\"\x84\x01\n\x1dGetAgentActionsConfigResponse\x12\x63\n\x14\x61gent_actions_config\x18\x01 \x01(\x0b\x32,.scalekit.v1.environments.AgentActionsConfigB\x03\xe0\x41\x03R\x12\x61gentActionsConfig\"\xa6\x01\n\x1fUpdateAgentActionsConfigRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12\x63\n\x14\x61gent_actions_config\x18\x02 \x01(\x0b\x32,.scalekit.v1.environments.AgentActionsConfigB\x03\xe0\x41\x02R\x12\x61gentActionsConfig\"\x87\x01\n UpdateAgentActionsConfigResponse\x12\x63\n\x14\x61gent_actions_config\x18\x01 \x01(\x0b\x32,.scalekit.v1.environments.AgentActionsConfigB\x03\xe0\x41\x03R\x12\x61gentActionsConfig*W\n\x12\x43ustomDomainStatus\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07PENDING\x10\x01\x12\n\n\x06\x41\x43TIVE\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\x12\x0b\n\x07INITIAL\x10\x04*O\n\rAssetCategory\x12\x1e\n\x1a\x41SSET_CATEGORY_UNSPECIFIED\x10\x00\x12\x1e\n\x1aPORTAL_CUSTOMIZATION_IMAGE\x10\x01*O\n\x08TimeUnit\x12!\n\x1dSESSION_TIME_UNIT_UNSPECIFIED\x10\x00\x12\x0b\n\x07MINUTES\x10\x01\x12\t\n\x05HOURS\x10\x02\x12\x08\n\x04\x44\x41YS\x10\x03*w\n\x17OrgUserRelationshipType\x12\'\n#OrgUserRelationshipType_UNSPECIFIED\x10\x00\x12\x17\n\x13SINGLE_ORGANIZATION\x10\x01\x12\x1a\n\x16MULTIPLE_ORGANIZATIONS\x10\x02*[\n\x15\x43ookiePersistenceType\x12%\n!CookiePersistenceType_UNSPECIFIED\x10\x00\x12\x0e\n\nPERSISTENT\x10\x01\x12\x0b\n\x07SESSION\x10\x02*[\n\x15\x43ookieSameSiteSetting\x12%\n!CookieSameSiteSetting_UNSPECIFIED\x10\x00\x12\x0c\n\x08LAX_MODE\x10\x01\x12\r\n\tNONE_MODE\x10\x02*\xb1\x01\n\x1e\x43onnectedAccountUserVerifyMode\x12\x32\n.CONNECTED_ACCOUNT_USER_VERIFY_MODE_UNSPECIFIED\x10\x00\x12\x19\n\x15USER_VERIFY_MODE_NONE\x10\x01\x12\x18\n\x14USER_VERIFY_MODE_B2B\x10\x02\x12&\n\"USER_VERIFY_MODE_SCALEKIT_PLATFORM\x10\x03\x32\xcb\x42\n\x12\x45nvironmentService\x12\xbc\x01\n\x11\x43reateEnvironment\x12\x32.scalekit.v1.environments.CreateEnvironmentRequest\x1a\x33.scalekit.v1.environments.CreateEnvironmentResponse\">\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02#\"\x14/api/v1/environments:\x0b\x65nvironment\x12\xb2\x01\n\x11UpdateEnvironment\x12\x32.scalekit.v1.environments.UpdateEnvironmentRequest\x1a\x33.scalekit.v1.environments.UpdateEnvironmentResponse\"4\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02(2\x19/api/v1/environments/{id}:\x0b\x65nvironment\x12\xc5\x01\n\x17UpdateEnvironmentDomain\x12\x38.scalekit.v1.environments.UpdateEnvironmentDomainRequest\x1a\x33.scalekit.v1.environments.UpdateEnvironmentResponse\";\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02/2 /api/v1/environments/{id}:update:\x0b\x65nvironment\x12\x9c\x01\n\x0eGetEnvironment\x12/.scalekit.v1.environments.GetEnvironmentRequest\x1a\x30.scalekit.v1.environments.GetEnvironmentResponse\"\'\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x1b\x12\x19/api/v1/environments/{id}\x12\x9c\x01\n\x0fListEnvironment\x12\x31.scalekit.v1.environments.ListEnvironmentsRequest\x1a\x32.scalekit.v1.environments.ListEnvironmentsResponse\"\"\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/environments\x12\x86\x01\n\x11\x44\x65leteEnvironment\x12\x32.scalekit.v1.environments.DeleteEnvironmentRequest\x1a\x16.google.protobuf.Empty\"%\x82\xb5\x18\x00\x82\xd3\xe4\x93\x02\x1b*\x19/api/v1/environments/{id}\x12\xa8\x01\n\x15GetRequiredDNSRecords\x12..scalekit.v1.environments.GetDNSRecordsRequest\x1a/.scalekit.v1.environments.GetDNSRecordsResponse\".\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\"\"\x1d/api/v1/environments/{id}/dns:\x01*\x12\x91\x01\n\x10VerifyDNSRecords\x12..scalekit.v1.environments.GetDNSRecordsRequest\x1a\x16.google.protobuf.Empty\"5\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02)\"$/api/v1/environments/{id}/dns:verify:\x01*\x12\xc9\x01\n\x12\x43reateCustomDomain\x12\x33.scalekit.v1.environments.CreateCustomDomainRequest\x1a\x34.scalekit.v1.environments.CreateCustomDomainResponse\"H\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02-\"(/api/v1/environments/{id}/custom-domains:\x01*\x12\xcc\x01\n\x17\x43heckCustomDomainStatus\x12/.scalekit.v1.environments.GetEnvironmentRequest\x1a\x30.scalekit.v1.environments.GetEnvironmentResponse\"N\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x33\"./api/v1/environments/{id}/custom-domains:check:\x01*\x12\xe7\x01\n\x1aGenerateNewSamlCertificate\x12\x38.scalekit.v1.environments.GenerateSamlCertificateRequest\x1a\x39.scalekit.v1.environments.GenerateSamlCertificateResponse\"T\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x39\"4/api/v1/environments/{id}/saml-certificates:generate:\x01*\x12\xc0\x02\n\x19UpdatePortalCustomization\x12:.scalekit.v1.environments.UpdatePortalCustomizationRequest\x1a;.scalekit.v1.environments.UpdatePortalCustomizationResponse\"\xa9\x01\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x8d\x01\x1a//api/v1/environments/{id}/portal_customizations:\x16\x63ustomization_settingsZB\x1a(/api/v1/environments/{id}/customizations:\x16\x63ustomization_settings\x12\xe9\x01\n\x16GetPortalCustomization\x12\x37.scalekit.v1.environments.GetPortalCustomizationRequest\x1a\x38.scalekit.v1.environments.GetPortalCustomizationResponse\"\\\x82\xb5\x18\x03\x18\xe0\x01\x82\xd3\xe4\x93\x02O\x12\x1d/api/v1/portal_customizationsZ.\x12,/api/v1/environments/-/portal_customizations\x12\xc4\x01\n\x14\x43reateAssetUploadURL\x12\x35.scalekit.v1.environments.CreateAssetUploadUrlRequest\x1a\x36.scalekit.v1.environments.CreateAssetUploadUrlResponse\"=\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x31\"\x1f/api/v1/environments/{id}/asset:\x0e\x61sset_settings\x12\xac\x01\n\x0eUpdateFeatures\x12/.scalekit.v1.environments.UpdateFeaturesRequest\x1a-.scalekit.v1.environments.GetFeaturesResponse\":\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02.\x1a\"/api/v1/environments/{id}/features:\x08\x66\x65\x61tures\x12\xcb\x01\n\x10\x45nableFSAFeature\x12\x31.scalekit.v1.environments.EnableFSAFeatureRequest\x1a\x16.google.protobuf.Empty\"l\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02Q\"-/api/v1/environments/{id}/features/fsa/enable:\x01*Z\x1d\"\x1b/api/v1/features/fsa/enable\x12\x81\x01\n\x11\x44isableFSAFeature\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"<\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\"\x1c/api/v1/features/fsa/disable:\x01*\x12\x9d\x01\n\rEnableFeature\x12..scalekit.v1.environments.EnableFeatureRequest\x1a\x16.google.protobuf.Empty\"D\x82\xb5\x18\x02\x18`\x82\xd3\xe4\x93\x02\x38\"6/api/v1/environments/{id}/features/{feature_id}:enable\x12\xa0\x01\n\x0e\x44isableFeature\x12/.scalekit.v1.environments.DisableFeatureRequest\x1a\x16.google.protobuf.Empty\"E\x82\xb5\x18\x02\x18`\x82\xd3\xe4\x93\x02\x39\"7/api/v1/environments/{id}/features/{feature_id}:disable\x12\x8a\x01\n\x0bGetFeatures\x12,.scalekit.v1.environments.GetFeaturesRequest\x1a-.scalekit.v1.environments.GetFeaturesResponse\"\x1e\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x12\x12\x10/api/v1/features\x12\xb9\x04\n\x1fGetHostScopedPublicFeatureFlags\x12\x16.google.protobuf.Empty\x1a\x41.scalekit.v1.environments.GetHostScopedPublicFeatureFlagsResponse\"\xba\x03\x92\x41\xf2\x02\n\x0c\x45nvironments\x12%List host-scoped public feature flags\x1a\xc5\x01Resolves the environment from the request host only (no environment path, query, or header). Returns allowlisted OpenFeature values; no bearer token. 404 if the host does not map to an environment.J2\n\x03\x32\x30\x30\x12+\n)Allowlisted flag keys and resolved valuesJ?\n\x03\x34\x30\x34\x12\x38\n6No environment resolved from host or workspace UI host\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)\x12\'/api/v1/environments:publicFeatureFlags\x12\x84\x02\n CreateEnvironmentSessionSettings\x12\x41.scalekit.v1.environments.CreateEnvironmentSessionSettingsRequest\x1a\x42.scalekit.v1.environments.CreateEnvironmentSessionSettingsResponse\"Y\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02>\"*/api/v1/environments/{id}/session-settings:\x10session_settings\x12\x88\x02\n\x1f\x43reateEnvironmentUserManagement\x12@.scalekit.v1.environments.CreateEnvironmentUserManagementRequest\x1a\x41.scalekit.v1.environments.CreateEnvironmentUserManagementResponse\"`\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x45\"2/api/v1/environments/{id}/settings/user-management:\x0fuser_management\x12\xda\x01\n\x1dGetEnvironmentSessionSettings\x12>.scalekit.v1.environments.GetEnvironmentSessionSettingsRequest\x1a?.scalekit.v1.environments.GetEnvironmentSessionSettingsResponse\"8\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02,\x12*/api/v1/environments/{id}/session-settings\x12\xdf\x01\n\x1cGetEnvironmentUserManagement\x12=.scalekit.v1.environments.GetEnvironmentUserManagementRequest\x1a>.scalekit.v1.environments.GetEnvironmentUserManagementResponse\"@\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x34\x12\x32/api/v1/environments/{id}/settings/user-management\x12\x84\x02\n UpdateEnvironmentSessionSettings\x12\x41.scalekit.v1.environments.UpdateEnvironmentSessionSettingsRequest\x1a\x42.scalekit.v1.environments.UpdateEnvironmentSessionSettingsResponse\"Y\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02>2*/api/v1/environments/{id}/session-settings:\x10session_settings\x12\x88\x02\n\x1fUpdateEnvironmentUserManagement\x12@.scalekit.v1.environments.UpdateEnvironmentUserManagementRequest\x1a\x41.scalekit.v1.environments.UpdateEnvironmentUserManagementResponse\"`\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x45\x32\x32/api/v1/environments/{id}/settings/user-management:\x0fuser_management\x12\x86\x04\n\x18\x43reateAgentActionsConfig\x12\x39.scalekit.v1.environments.CreateAgentActionsConfigRequest\x1a:.scalekit.v1.environments.CreateAgentActionsConfigResponse\"\xf2\x02\x92\x41\x8b\x02\n\x0c\x45nvironments\x12\x1b\x43reate agent actions config\x1a:Creates the agent actions configuration for an environmentJ2\n\x03\x32\x30\x30\x12+\n)Agent actions config created successfullyJN\n\x03\x34\x30\x30\x12G\nEInvalid request - missing or invalid fields, or config already existsJ\x1e\n\x03\x34\x30\x34\x12\x17\n\x15\x45nvironment not found\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02H\"0/api/v1/environments/{id}/settings/agent-actions:\x14\x61gent_actions_config\x12\xa3\x03\n\x15GetAgentActionsConfig\x12\x36.scalekit.v1.environments.GetAgentActionsConfigRequest\x1a\x37.scalekit.v1.environments.GetAgentActionsConfigResponse\"\x98\x02\x92\x41\xc7\x01\n\x0c\x45nvironments\x12\x18Get agent actions config\x1a=Retrieves the agent actions configuration for an environment.J4\n\x03\x32\x30\x30\x12-\n+Agent actions config retrieved successfullyJ(\n\x03\x34\x30\x34\x12!\n\x1f\x45nvironment or config not found\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x32\x12\x30/api/v1/environments/{id}/settings/agent-actions\x12\x96\x04\n\x18UpdateAgentActionsConfig\x12\x39.scalekit.v1.environments.UpdateAgentActionsConfigRequest\x1a:.scalekit.v1.environments.UpdateAgentActionsConfigResponse\"\x82\x03\x92\x41\x9b\x02\n\x0c\x45nvironments\x12\x1bUpdate agent actions config\x1a:Updates the agent actions configuration for an environmentJ2\n\x03\x32\x30\x30\x12+\n)Agent actions config updated successfullyJ^\n\x03\x34\x30\x30\x12W\nUInvalid request - missing or invalid fields, or mode not allowed for this environmentJ\x1e\n\x03\x34\x30\x34\x12\x17\n\x15\x45nvironment not found\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02H20/api/v1/environments/{id}/settings/agent-actions:\x14\x61gent_actions_config\x12\xa5\x01\n\nGetContext\x12+.scalekit.v1.environments.GetContextRequest\x1a,.scalekit.v1.environments.GetContextResponse\"<\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x30\x12./api/v1/environments/{environment_id}/contexts\x12\x9e\x01\n\rUpdateContext\x12..scalekit.v1.environments.UpdateContextRequest\x1a\x16.google.protobuf.Empty\"E\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x39\x1a./api/v1/environments/{environment_id}/contexts:\x07\x63ontext\x12\xef\x01\n\x11GetCurrentSession\x12\x32.scalekit.v1.environments.GetCurrentSessionRequest\x1a\x33.scalekit.v1.environments.GetCurrentSessionResponse\"q\x82\xb5\x18\x03\x18\xf0\x01\x82\xd3\xe4\x93\x02\x64\x12%/api/v1/environments/{id}/sessions:meZ$\x12\"/api/v1/environments/-/sessions:meZ\x15\x12\x13/api/v1/sessions:me\x12\xb1\x01\n\x14GetScalekitResources\x12\x31.scalekit.v1.environments.ScalekitResourceRequest\x1a\x32.scalekit.v1.environments.ScalekitResourceResponse\"2\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x17\"\x12/api/v1/fetch:bulk:\x01*\x12\xd0\x03\n\x0fPortalBootstrap\x12\x30.scalekit.v1.environments.PortalBootstrapRequest\x1a\x31.scalekit.v1.environments.PortalBootstrapResponse\"\xd7\x02\x92\x41\xad\x02\n\x06Portal\x12\x1eRetrieve portal bootstrap data\x1a\x97\x01Returns all data needed to initialize the customer portal in a single request, combining session, portal customizations, organization, and connections.J5\n\x03\x32\x30\x30\x12.\n,Successfully retrieved portal bootstrap dataJ2\n\x03\x34\x30\x31\x12+\n)Unauthorized - invalid or expired session\x82\xb5\x18\x02\x18`\x82\xd3\xe4\x93\x02\x1a\x12\x18/api/v1/portal/bootstrapB8Z6github.com/scalekit-inc/scalekit/pkg/grpc/environmentsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -86,6 +89,12 @@ _globals['_GETPORTALCUSTOMIZATIONREQUEST'].fields_by_name['id']._serialized_options = b'\272H\006r\004\020\000\030 ' _globals['_PORTALSETTINGS'].fields_by_name['custom_branding']._loaded_options = None _globals['_PORTALSETTINGS'].fields_by_name['custom_branding']._serialized_options = b'\222Al2dIndicates whether custom portal branding is enabled for this workspace based on billing subscriptionJ\004true' + _globals['_PORTALSETTINGS'].fields_by_name['new_self_serve_sso_scim']._loaded_options = None + _globals['_PORTALSETTINGS'].fields_by_name['new_self_serve_sso_scim']._serialized_options = b'\222A\210\0012\177Indicates whether the new self-serve SSO/SCIM flow should be shown in the customer portal (rollout-driven, not billing-derived)J\005false' + _globals['_PORTALSETTINGS'].fields_by_name['enable_conn_delete']._loaded_options = None + _globals['_PORTALSETTINGS'].fields_by_name['enable_conn_delete']._serialized_options = b'\222Ax2oIndicates whether connection deletion is enabled for this environment (rollout-driven by environment allowlist)J\005false' + _globals['_GETPORTALCUSTOMIZATIONRESPONSE'].fields_by_name['customization_settings']._loaded_options = None + _globals['_GETPORTALCUSTOMIZATIONRESPONSE'].fields_by_name['customization_settings']._serialized_options = b'\340A\001' _globals['_GETPORTALCUSTOMIZATIONRESPONSE'].fields_by_name['settings']._loaded_options = None _globals['_GETPORTALCUSTOMIZATIONRESPONSE'].fields_by_name['settings']._serialized_options = b'\340A\003' _globals['_CREATEASSETUPLOADURLREQUEST'].fields_by_name['id']._loaded_options = None @@ -148,8 +157,32 @@ _globals['_USERMANAGEMENT'].fields_by_name['invitation_expiry']._serialized_options = b'\272H\010*\006\030\300\321\002(\001' _globals['_SCALEKITRESOURCERESPONSE_RESOURCESENTRY']._loaded_options = None _globals['_SCALEKITRESOURCERESPONSE_RESOURCESENTRY']._serialized_options = b'8\001' + _globals['_PORTALCUSTOMIZATIONBOOTSTRAP'].fields_by_name['customization_settings']._loaded_options = None + _globals['_PORTALCUSTOMIZATIONBOOTSTRAP'].fields_by_name['customization_settings']._serialized_options = b'\340A\001' + _globals['_PORTALCUSTOMIZATIONBOOTSTRAP'].fields_by_name['settings']._loaded_options = None + _globals['_PORTALCUSTOMIZATIONBOOTSTRAP'].fields_by_name['settings']._serialized_options = b'\340A\003' + _globals['_AGENTACTIONSCONFIG'].fields_by_name['user_verify_mode']._loaded_options = None + _globals['_AGENTACTIONSCONFIG'].fields_by_name['user_verify_mode']._serialized_options = b'\272H\005\202\001\002\020\001' + _globals['_AGENTACTIONSCONFIG'].fields_by_name['detailed_error_logging']._loaded_options = None + _globals['_AGENTACTIONSCONFIG'].fields_by_name['detailed_error_logging']._serialized_options = b'\222A\307\0012\304\001When true, full error messages from provider failures are captured in tool-call logs. When false (default), only the error code is retained. Omit the field to leave the existing setting unchanged.' + _globals['_CREATEAGENTACTIONSCONFIGREQUEST'].fields_by_name['id']._loaded_options = None + _globals['_CREATEAGENTACTIONSCONFIGREQUEST'].fields_by_name['id']._serialized_options = b'\272H\013r\t\020\001\030 :\003env' + _globals['_CREATEAGENTACTIONSCONFIGREQUEST'].fields_by_name['agent_actions_config']._loaded_options = None + _globals['_CREATEAGENTACTIONSCONFIGREQUEST'].fields_by_name['agent_actions_config']._serialized_options = b'\340A\002' + _globals['_CREATEAGENTACTIONSCONFIGRESPONSE'].fields_by_name['agent_actions_config']._loaded_options = None + _globals['_CREATEAGENTACTIONSCONFIGRESPONSE'].fields_by_name['agent_actions_config']._serialized_options = b'\340A\003' + _globals['_GETAGENTACTIONSCONFIGREQUEST'].fields_by_name['id']._loaded_options = None + _globals['_GETAGENTACTIONSCONFIGREQUEST'].fields_by_name['id']._serialized_options = b'\272H\013r\t\020\001\030 :\003env' + _globals['_GETAGENTACTIONSCONFIGRESPONSE'].fields_by_name['agent_actions_config']._loaded_options = None + _globals['_GETAGENTACTIONSCONFIGRESPONSE'].fields_by_name['agent_actions_config']._serialized_options = b'\340A\003' + _globals['_UPDATEAGENTACTIONSCONFIGREQUEST'].fields_by_name['id']._loaded_options = None + _globals['_UPDATEAGENTACTIONSCONFIGREQUEST'].fields_by_name['id']._serialized_options = b'\272H\013r\t\020\001\030 :\003env' + _globals['_UPDATEAGENTACTIONSCONFIGREQUEST'].fields_by_name['agent_actions_config']._loaded_options = None + _globals['_UPDATEAGENTACTIONSCONFIGREQUEST'].fields_by_name['agent_actions_config']._serialized_options = b'\340A\002' + _globals['_UPDATEAGENTACTIONSCONFIGRESPONSE'].fields_by_name['agent_actions_config']._loaded_options = None + _globals['_UPDATEAGENTACTIONSCONFIGRESPONSE'].fields_by_name['agent_actions_config']._serialized_options = b'\340A\003' _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateEnvironment']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateEnvironment']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002#\"\024/api/v1/environments:\013environment' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateEnvironment']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002#\"\024/api/v1/environments:\013environment' _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironment']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironment']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002(2\031/api/v1/environments/{id}:\013environment' _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironmentDomain']._loaded_options = None @@ -165,183 +198,219 @@ _globals['_ENVIRONMENTSERVICE'].methods_by_name['VerifyDNSRecords']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['VerifyDNSRecords']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002)\"$/api/v1/environments/{id}/dns:verify:\001*' _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateCustomDomain']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateCustomDomain']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002-\"(/api/v1/environments/{id}/custom-domains:\001*' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateCustomDomain']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002-\"(/api/v1/environments/{id}/custom-domains:\001*' _globals['_ENVIRONMENTSERVICE'].methods_by_name['CheckCustomDomainStatus']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['CheckCustomDomainStatus']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\0023\"./api/v1/environments/{id}/custom-domains:check:\001*' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['CheckCustomDomainStatus']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\0023\"./api/v1/environments/{id}/custom-domains:check:\001*' _globals['_ENVIRONMENTSERVICE'].methods_by_name['GenerateNewSamlCertificate']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['GenerateNewSamlCertificate']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\0029\"4/api/v1/environments/{id}/saml-certificates:generate:\001*' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['GenerateNewSamlCertificate']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\0029\"4/api/v1/environments/{id}/saml-certificates:generate:\001*' _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdatePortalCustomization']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdatePortalCustomization']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\215\001\032//api/v1/environments/{id}/portal_customizations:\026customization_settingsZB\032(/api/v1/environments/{id}/customizations:\026customization_settings' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdatePortalCustomization']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\215\001\032//api/v1/environments/{id}/portal_customizations:\026customization_settingsZB\032(/api/v1/environments/{id}/customizations:\026customization_settings' _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetPortalCustomization']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetPortalCustomization']._serialized_options = b'\202\265\030\002\030`\202\323\344\223\002O\022\035/api/v1/portal_customizationsZ.\022,/api/v1/environments/-/portal_customizations' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetPortalCustomization']._serialized_options = b'\202\265\030\003\030\340\001\202\323\344\223\002O\022\035/api/v1/portal_customizationsZ.\022,/api/v1/environments/-/portal_customizations' _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateAssetUploadURL']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateAssetUploadURL']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\0021\"\037/api/v1/environments/{id}/asset:\016asset_settings' _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateFeatures']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateFeatures']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002.\032\"/api/v1/environments/{id}/features:\010features' _globals['_ENVIRONMENTSERVICE'].methods_by_name['EnableFSAFeature']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['EnableFSAFeature']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002Q\"-/api/v1/environments/{id}/features/fsa/enable:\001*Z\035\"\033/api/v1/features/fsa/enable' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['EnableFSAFeature']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002Q\"-/api/v1/environments/{id}/features/fsa/enable:\001*Z\035\"\033/api/v1/features/fsa/enable' _globals['_ENVIRONMENTSERVICE'].methods_by_name['DisableFSAFeature']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['DisableFSAFeature']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002!\"\034/api/v1/features/fsa/disable:\001*' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['DisableFSAFeature']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002!\"\034/api/v1/features/fsa/disable:\001*' _globals['_ENVIRONMENTSERVICE'].methods_by_name['EnableFeature']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['EnableFeature']._serialized_options = b'\202\265\030\002\030`\202\323\344\223\0028\"6/api/v1/environments/{id}/features/{feature_id}:enable' _globals['_ENVIRONMENTSERVICE'].methods_by_name['DisableFeature']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['DisableFeature']._serialized_options = b'\202\265\030\002\030`\202\323\344\223\0029\"7/api/v1/environments/{id}/features/{feature_id}:disable' _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetFeatures']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetFeatures']._serialized_options = b'\202\265\030\002\030T\202\323\344\223\002\022\022\020/api/v1/features' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetHostScopedPublicFeatureFlags']._loaded_options = None + _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetHostScopedPublicFeatureFlags']._serialized_options = b'\222A\362\002\n\014Environments\022%List host-scoped public feature flags\032\305\001Resolves the environment from the request host only (no environment path, query, or header). Returns allowlisted OpenFeature values; no bearer token. 404 if the host does not map to an environment.J2\n\003200\022+\n)Allowlisted flag keys and resolved valuesJ?\n\003404\0228\n6No environment resolved from host or workspace UI host\202\265\030\002\030\001\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002)\022\'/api/v1/environments:publicFeatureFlags' _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateEnvironmentSessionSettings']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateEnvironmentSessionSettings']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002>\"*/api/v1/environments/{id}/session-settings:\020session_settings' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateEnvironmentSessionSettings']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002>\"*/api/v1/environments/{id}/session-settings:\020session_settings' _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateEnvironmentUserManagement']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateEnvironmentUserManagement']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002E\"2/api/v1/environments/{id}/settings/user-management:\017user_management' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateEnvironmentUserManagement']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002E\"2/api/v1/environments/{id}/settings/user-management:\017user_management' _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetEnvironmentSessionSettings']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetEnvironmentSessionSettings']._serialized_options = b'\202\265\030\002\030T\202\323\344\223\002,\022*/api/v1/environments/{id}/session-settings' _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetEnvironmentUserManagement']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetEnvironmentUserManagement']._serialized_options = b'\202\265\030\002\030T\202\323\344\223\0024\0222/api/v1/environments/{id}/settings/user-management' _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironmentSessionSettings']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironmentSessionSettings']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002>2*/api/v1/environments/{id}/session-settings:\020session_settings' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironmentSessionSettings']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002>2*/api/v1/environments/{id}/session-settings:\020session_settings' _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironmentUserManagement']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironmentUserManagement']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002E22/api/v1/environments/{id}/settings/user-management:\017user_management' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironmentUserManagement']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002E22/api/v1/environments/{id}/settings/user-management:\017user_management' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateAgentActionsConfig']._loaded_options = None + _globals['_ENVIRONMENTSERVICE'].methods_by_name['CreateAgentActionsConfig']._serialized_options = b'\222A\213\002\n\014Environments\022\033Create agent actions config\032:Creates the agent actions configuration for an environmentJ2\n\003200\022+\n)Agent actions config created successfullyJN\n\003400\022G\nEInvalid request - missing or invalid fields, or config already existsJ\036\n\003404\022\027\n\025Environment not found\202\265\030\002\030@\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002H\"0/api/v1/environments/{id}/settings/agent-actions:\024agent_actions_config' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetAgentActionsConfig']._loaded_options = None + _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetAgentActionsConfig']._serialized_options = b'\222A\307\001\n\014Environments\022\030Get agent actions config\032=Retrieves the agent actions configuration for an environment.J4\n\003200\022-\n+Agent actions config retrieved successfullyJ(\n\003404\022!\n\037Environment or config not found\202\265\030\002\030@\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\0022\0220/api/v1/environments/{id}/settings/agent-actions' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateAgentActionsConfig']._loaded_options = None + _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateAgentActionsConfig']._serialized_options = b'\222A\233\002\n\014Environments\022\033Update agent actions config\032:Updates the agent actions configuration for an environmentJ2\n\003200\022+\n)Agent actions config updated successfullyJ^\n\003400\022W\nUInvalid request - missing or invalid fields, or mode not allowed for this environmentJ\036\n\003404\022\027\n\025Environment not found\202\265\030\002\030@\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002H20/api/v1/environments/{id}/settings/agent-actions:\024agent_actions_config' _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetContext']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetContext']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\0020\022./api/v1/environments/{environment_id}/contexts' _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateContext']._loaded_options = None _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateContext']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\0029\032./api/v1/environments/{environment_id}/contexts:\007context' _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetCurrentSession']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetCurrentSession']._serialized_options = b'\202\265\030\002\030p\202\323\344\223\002d\022%/api/v1/environments/{id}/sessions:meZ$\022\"/api/v1/environments/-/sessions:meZ\025\022\023/api/v1/sessions:me' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetCurrentSession']._serialized_options = b'\202\265\030\003\030\360\001\202\323\344\223\002d\022%/api/v1/environments/{id}/sessions:meZ$\022\"/api/v1/environments/-/sessions:meZ\025\022\023/api/v1/sessions:me' _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetScalekitResources']._loaded_options = None - _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetScalekitResources']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\027\"\022/api/v1/fetch:bulk:\001*' - _globals['_CUSTOMDOMAINSTATUS']._serialized_start=10237 - _globals['_CUSTOMDOMAINSTATUS']._serialized_end=10324 - _globals['_ASSETCATEGORY']._serialized_start=10326 - _globals['_ASSETCATEGORY']._serialized_end=10405 - _globals['_TIMEUNIT']._serialized_start=10407 - _globals['_TIMEUNIT']._serialized_end=10486 - _globals['_ORGUSERRELATIONSHIPTYPE']._serialized_start=10488 - _globals['_ORGUSERRELATIONSHIPTYPE']._serialized_end=10607 - _globals['_COOKIEPERSISTENCETYPE']._serialized_start=10609 - _globals['_COOKIEPERSISTENCETYPE']._serialized_end=10700 - _globals['_COOKIESAMESITESETTING']._serialized_start=10702 - _globals['_COOKIESAMESITESETTING']._serialized_end=10793 - _globals['_CREATECUSTOMDOMAINREQUEST']._serialized_start=466 - _globals['_CREATECUSTOMDOMAINREQUEST']._serialized_end=577 - _globals['_CREATECUSTOMDOMAINRESPONSE']._serialized_start=579 - _globals['_CREATECUSTOMDOMAINRESPONSE']._serialized_end=680 - _globals['_GETDNSRECORDSREQUEST']._serialized_start=682 - _globals['_GETDNSRECORDSREQUEST']._serialized_end=788 - _globals['_GETDNSRECORDSRESPONSE']._serialized_start=790 - _globals['_GETDNSRECORDSRESPONSE']._serialized_end=884 - _globals['_DNSRECORDS']._serialized_start=886 - _globals['_DNSRECORDS']._serialized_end=1005 - _globals['_ENVIRONMENT']._serialized_start=1008 - _globals['_ENVIRONMENT']._serialized_end=1538 - _globals['_CREATEENVIRONMENT']._serialized_start=1541 - _globals['_CREATEENVIRONMENT']._serialized_end=1974 - _globals['_UPDATEENVIRONMENT']._serialized_start=1976 - _globals['_UPDATEENVIRONMENT']._serialized_end=2082 - _globals['_UPDATEENVIRONMENTDOMAIN']._serialized_start=2084 - _globals['_UPDATEENVIRONMENTDOMAIN']._serialized_end=2167 - _globals['_CREATEENVIRONMENTREQUEST']._serialized_start=2169 - _globals['_CREATEENVIRONMENTREQUEST']._serialized_end=2282 - _globals['_CREATEENVIRONMENTRESPONSE']._serialized_start=2284 - _globals['_CREATEENVIRONMENTRESPONSE']._serialized_end=2384 - _globals['_UPDATEENVIRONMENTREQUEST']._serialized_start=2387 - _globals['_UPDATEENVIRONMENTREQUEST']._serialized_end=2532 - _globals['_UPDATEENVIRONMENTDOMAINREQUEST']._serialized_start=2535 - _globals['_UPDATEENVIRONMENTDOMAINREQUEST']._serialized_end=2692 - _globals['_UPDATEENVIRONMENTRESPONSE']._serialized_start=2694 - _globals['_UPDATEENVIRONMENTRESPONSE']._serialized_end=2794 - _globals['_GETENVIRONMENTREQUEST']._serialized_start=2796 - _globals['_GETENVIRONMENTREQUEST']._serialized_end=2851 - _globals['_GETENVIRONMENTRESPONSE']._serialized_start=2853 - _globals['_GETENVIRONMENTRESPONSE']._serialized_end=2950 - _globals['_LISTENVIRONMENTSREQUEST']._serialized_start=2952 - _globals['_LISTENVIRONMENTSREQUEST']._serialized_end=3037 - _globals['_LISTENVIRONMENTSRESPONSE']._serialized_start=3040 - _globals['_LISTENVIRONMENTSRESPONSE']._serialized_end=3212 - _globals['_DELETEENVIRONMENTREQUEST']._serialized_start=3214 - _globals['_DELETEENVIRONMENTREQUEST']._serialized_end=3272 - _globals['_GENERATESAMLCERTIFICATEREQUEST']._serialized_start=3274 - _globals['_GENERATESAMLCERTIFICATEREQUEST']._serialized_end=3338 - _globals['_GENERATESAMLCERTIFICATERESPONSE']._serialized_start=3340 - _globals['_GENERATESAMLCERTIFICATERESPONSE']._serialized_end=3447 - _globals['_UPDATEPORTALCUSTOMIZATIONRESPONSE']._serialized_start=3450 - _globals['_UPDATEPORTALCUSTOMIZATIONRESPONSE']._serialized_end=3603 - _globals['_UPDATEPORTALCUSTOMIZATIONREQUEST']._serialized_start=3606 - _globals['_UPDATEPORTALCUSTOMIZATIONREQUEST']._serialized_end=3760 - _globals['_GETPORTALCUSTOMIZATIONREQUEST']._serialized_start=3762 - _globals['_GETPORTALCUSTOMIZATIONREQUEST']._serialized_end=3820 - _globals['_PORTALSETTINGS']._serialized_start=3823 - _globals['_PORTALSETTINGS']._serialized_end=3994 - _globals['_GETPORTALCUSTOMIZATIONRESPONSE']._serialized_start=3997 - _globals['_GETPORTALCUSTOMIZATIONRESPONSE']._serialized_end=4222 - _globals['_CREATEASSETUPLOADURLRESPONSE']._serialized_start=4224 - _globals['_CREATEASSETUPLOADURLRESPONSE']._serialized_end=4314 - _globals['_CREATEASSETUPLOADURLREQUEST']._serialized_start=4317 - _globals['_CREATEASSETUPLOADURLREQUEST']._serialized_end=4458 - _globals['_ASSETSETTINGS']._serialized_start=4461 - _globals['_ASSETSETTINGS']._serialized_end=4606 - _globals['_UPDATEFEATURESREQUEST']._serialized_start=4609 - _globals['_UPDATEFEATURESREQUEST']._serialized_end=4746 - _globals['_ENABLEFSAFEATUREREQUEST']._serialized_start=4748 - _globals['_ENABLEFSAFEATUREREQUEST']._serialized_end=4798 - _globals['_DISABLEFSAFEATUREREQUEST']._serialized_start=4800 - _globals['_DISABLEFSAFEATUREREQUEST']._serialized_end=4858 - _globals['_GETFEATURESREQUEST']._serialized_start=4860 - _globals['_GETFEATURESREQUEST']._serialized_end=4915 - _globals['_GETFEATURESRESPONSE']._serialized_start=4917 - _globals['_GETFEATURESRESPONSE']._serialized_end=5012 - _globals['_ENABLEFEATUREREQUEST']._serialized_start=5014 - _globals['_ENABLEFEATUREREQUEST']._serialized_end=5110 - _globals['_DISABLEFEATUREREQUEST']._serialized_start=5112 - _globals['_DISABLEFEATUREREQUEST']._serialized_end=5209 - _globals['_ENVIRONMENTFEATURE']._serialized_start=5211 - _globals['_ENVIRONMENTFEATURE']._serialized_end=5277 - _globals['_GETENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_start=5279 - _globals['_GETENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_end=5349 - _globals['_GETENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_start=5351 - _globals['_GETENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_end=5420 - _globals['_GETENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_start=5422 - _globals['_GETENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_end=5547 - _globals['_GETENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_start=5549 - _globals['_GETENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_end=5670 - _globals['_CREATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_start=5673 - _globals['_CREATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_end=5840 - _globals['_CREATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_start=5843 - _globals['_CREATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_end=6006 - _globals['_CREATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_start=6009 - _globals['_CREATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_end=6176 - _globals['_CREATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_start=6179 - _globals['_CREATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_end=6342 - _globals['_UPDATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_start=6345 - _globals['_UPDATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_end=6512 - _globals['_UPDATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_start=6515 - _globals['_UPDATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_end=6678 - _globals['_UPDATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_start=6681 - _globals['_UPDATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_end=6848 - _globals['_UPDATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_start=6851 - _globals['_UPDATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_end=7014 - _globals['_SESSIONSETTINGS']._serialized_start=7017 - _globals['_SESSIONSETTINGS']._serialized_end=8168 - _globals['_USERMANAGEMENT']._serialized_start=8171 - _globals['_USERMANAGEMENT']._serialized_end=9104 - _globals['_GETCONTEXTREQUEST']._serialized_start=9106 - _globals['_GETCONTEXTREQUEST']._serialized_end=9164 - _globals['_GETCONTEXTRESPONSE']._serialized_start=9166 - _globals['_GETCONTEXTRESPONSE']._serialized_end=9237 - _globals['_UPDATECONTEXTREQUEST']._serialized_start=9239 - _globals['_UPDATECONTEXTREQUEST']._serialized_end=9351 - _globals['_GETCURRENTSESSIONREQUEST']._serialized_start=9353 - _globals['_GETCURRENTSESSIONREQUEST']._serialized_end=9395 - _globals['_GETCURRENTSESSIONRESPONSE']._serialized_start=9398 - _globals['_GETCURRENTSESSIONRESPONSE']._serialized_end=9721 - _globals['_RESOURCEMETADATA']._serialized_start=9724 - _globals['_RESOURCEMETADATA']._serialized_end=9921 - _globals['_RESOURCEMETADATA_RESOURCETYPE']._serialized_start=9855 - _globals['_RESOURCEMETADATA_RESOURCETYPE']._serialized_end=9921 - _globals['_SCALEKITRESOURCEREQUEST']._serialized_start=9923 - _globals['_SCALEKITRESOURCEREQUEST']._serialized_end=10022 - _globals['_SCALEKITRESOURCERESPONSE']._serialized_start=10025 - _globals['_SCALEKITRESOURCERESPONSE']._serialized_end=10235 - _globals['_SCALEKITRESOURCERESPONSE_RESOURCESENTRY']._serialized_start=10150 - _globals['_SCALEKITRESOURCERESPONSE_RESOURCESENTRY']._serialized_end=10235 - _globals['_ENVIRONMENTSERVICE']._serialized_start=10796 - _globals['_ENVIRONMENTSERVICE']._serialized_end=16617 + _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetScalekitResources']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\027\"\022/api/v1/fetch:bulk:\001*' + _globals['_ENVIRONMENTSERVICE'].methods_by_name['PortalBootstrap']._loaded_options = None + _globals['_ENVIRONMENTSERVICE'].methods_by_name['PortalBootstrap']._serialized_options = b'\222A\255\002\n\006Portal\022\036Retrieve portal bootstrap data\032\227\001Returns all data needed to initialize the customer portal in a single request, combining session, portal customizations, organization, and connections.J5\n\003200\022.\n,Successfully retrieved portal bootstrap dataJ2\n\003401\022+\n)Unauthorized - invalid or expired session\202\265\030\002\030`\202\323\344\223\002\032\022\030/api/v1/portal/bootstrap' + _globals['_CUSTOMDOMAINSTATUS']._serialized_start=12913 + _globals['_CUSTOMDOMAINSTATUS']._serialized_end=13000 + _globals['_ASSETCATEGORY']._serialized_start=13002 + _globals['_ASSETCATEGORY']._serialized_end=13081 + _globals['_TIMEUNIT']._serialized_start=13083 + _globals['_TIMEUNIT']._serialized_end=13162 + _globals['_ORGUSERRELATIONSHIPTYPE']._serialized_start=13164 + _globals['_ORGUSERRELATIONSHIPTYPE']._serialized_end=13283 + _globals['_COOKIEPERSISTENCETYPE']._serialized_start=13285 + _globals['_COOKIEPERSISTENCETYPE']._serialized_end=13376 + _globals['_COOKIESAMESITESETTING']._serialized_start=13378 + _globals['_COOKIESAMESITESETTING']._serialized_end=13469 + _globals['_CONNECTEDACCOUNTUSERVERIFYMODE']._serialized_start=13472 + _globals['_CONNECTEDACCOUNTUSERVERIFYMODE']._serialized_end=13649 + _globals['_CREATECUSTOMDOMAINREQUEST']._serialized_start=585 + _globals['_CREATECUSTOMDOMAINREQUEST']._serialized_end=696 + _globals['_CREATECUSTOMDOMAINRESPONSE']._serialized_start=698 + _globals['_CREATECUSTOMDOMAINRESPONSE']._serialized_end=799 + _globals['_GETDNSRECORDSREQUEST']._serialized_start=801 + _globals['_GETDNSRECORDSREQUEST']._serialized_end=907 + _globals['_GETDNSRECORDSRESPONSE']._serialized_start=909 + _globals['_GETDNSRECORDSRESPONSE']._serialized_end=1003 + _globals['_DNSRECORDS']._serialized_start=1005 + _globals['_DNSRECORDS']._serialized_end=1124 + _globals['_ENVIRONMENT']._serialized_start=1127 + _globals['_ENVIRONMENT']._serialized_end=1657 + _globals['_CREATEENVIRONMENT']._serialized_start=1660 + _globals['_CREATEENVIRONMENT']._serialized_end=2093 + _globals['_UPDATEENVIRONMENT']._serialized_start=2095 + _globals['_UPDATEENVIRONMENT']._serialized_end=2201 + _globals['_UPDATEENVIRONMENTDOMAIN']._serialized_start=2203 + _globals['_UPDATEENVIRONMENTDOMAIN']._serialized_end=2286 + _globals['_CREATEENVIRONMENTREQUEST']._serialized_start=2288 + _globals['_CREATEENVIRONMENTREQUEST']._serialized_end=2401 + _globals['_CREATEENVIRONMENTRESPONSE']._serialized_start=2403 + _globals['_CREATEENVIRONMENTRESPONSE']._serialized_end=2503 + _globals['_UPDATEENVIRONMENTREQUEST']._serialized_start=2506 + _globals['_UPDATEENVIRONMENTREQUEST']._serialized_end=2651 + _globals['_UPDATEENVIRONMENTDOMAINREQUEST']._serialized_start=2654 + _globals['_UPDATEENVIRONMENTDOMAINREQUEST']._serialized_end=2811 + _globals['_UPDATEENVIRONMENTRESPONSE']._serialized_start=2813 + _globals['_UPDATEENVIRONMENTRESPONSE']._serialized_end=2913 + _globals['_GETENVIRONMENTREQUEST']._serialized_start=2915 + _globals['_GETENVIRONMENTREQUEST']._serialized_end=2970 + _globals['_GETENVIRONMENTRESPONSE']._serialized_start=2972 + _globals['_GETENVIRONMENTRESPONSE']._serialized_end=3069 + _globals['_LISTENVIRONMENTSREQUEST']._serialized_start=3071 + _globals['_LISTENVIRONMENTSREQUEST']._serialized_end=3156 + _globals['_LISTENVIRONMENTSRESPONSE']._serialized_start=3159 + _globals['_LISTENVIRONMENTSRESPONSE']._serialized_end=3331 + _globals['_DELETEENVIRONMENTREQUEST']._serialized_start=3333 + _globals['_DELETEENVIRONMENTREQUEST']._serialized_end=3391 + _globals['_GENERATESAMLCERTIFICATEREQUEST']._serialized_start=3393 + _globals['_GENERATESAMLCERTIFICATEREQUEST']._serialized_end=3457 + _globals['_GENERATESAMLCERTIFICATERESPONSE']._serialized_start=3459 + _globals['_GENERATESAMLCERTIFICATERESPONSE']._serialized_end=3566 + _globals['_UPDATEPORTALCUSTOMIZATIONRESPONSE']._serialized_start=3569 + _globals['_UPDATEPORTALCUSTOMIZATIONRESPONSE']._serialized_end=3722 + _globals['_UPDATEPORTALCUSTOMIZATIONREQUEST']._serialized_start=3725 + _globals['_UPDATEPORTALCUSTOMIZATIONREQUEST']._serialized_end=3879 + _globals['_GETPORTALCUSTOMIZATIONREQUEST']._serialized_start=3881 + _globals['_GETPORTALCUSTOMIZATIONREQUEST']._serialized_end=3939 + _globals['_PORTALSETTINGS']._serialized_start=3942 + _globals['_PORTALSETTINGS']._serialized_end=4483 + _globals['_GETPORTALCUSTOMIZATIONRESPONSE']._serialized_start=4486 + _globals['_GETPORTALCUSTOMIZATIONRESPONSE']._serialized_end=4716 + _globals['_CREATEASSETUPLOADURLRESPONSE']._serialized_start=4718 + _globals['_CREATEASSETUPLOADURLRESPONSE']._serialized_end=4808 + _globals['_CREATEASSETUPLOADURLREQUEST']._serialized_start=4811 + _globals['_CREATEASSETUPLOADURLREQUEST']._serialized_end=4952 + _globals['_ASSETSETTINGS']._serialized_start=4955 + _globals['_ASSETSETTINGS']._serialized_end=5100 + _globals['_UPDATEFEATURESREQUEST']._serialized_start=5103 + _globals['_UPDATEFEATURESREQUEST']._serialized_end=5240 + _globals['_ENABLEFSAFEATUREREQUEST']._serialized_start=5242 + _globals['_ENABLEFSAFEATUREREQUEST']._serialized_end=5292 + _globals['_DISABLEFSAFEATUREREQUEST']._serialized_start=5294 + _globals['_DISABLEFSAFEATUREREQUEST']._serialized_end=5352 + _globals['_GETFEATURESREQUEST']._serialized_start=5354 + _globals['_GETFEATURESREQUEST']._serialized_end=5409 + _globals['_GETFEATURESRESPONSE']._serialized_start=5411 + _globals['_GETFEATURESRESPONSE']._serialized_end=5506 + _globals['_ENABLEFEATUREREQUEST']._serialized_start=5508 + _globals['_ENABLEFEATUREREQUEST']._serialized_end=5604 + _globals['_DISABLEFEATUREREQUEST']._serialized_start=5606 + _globals['_DISABLEFEATUREREQUEST']._serialized_end=5703 + _globals['_ENVIRONMENTFEATURE']._serialized_start=5705 + _globals['_ENVIRONMENTFEATURE']._serialized_end=5771 + _globals['_GETHOSTSCOPEDPUBLICFEATUREFLAGSRESPONSE']._serialized_start=5773 + _globals['_GETHOSTSCOPEDPUBLICFEATUREFLAGSRESPONSE']._serialized_end=5885 + _globals['_PUBLICHOSTFEATUREFLAG']._serialized_start=5888 + _globals['_PUBLICHOSTFEATUREFLAG']._serialized_end=6047 + _globals['_GETENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_start=6049 + _globals['_GETENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_end=6119 + _globals['_GETENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_start=6121 + _globals['_GETENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_end=6190 + _globals['_GETENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_start=6192 + _globals['_GETENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_end=6317 + _globals['_GETENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_start=6319 + _globals['_GETENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_end=6440 + _globals['_CREATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_start=6443 + _globals['_CREATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_end=6610 + _globals['_CREATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_start=6613 + _globals['_CREATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_end=6776 + _globals['_CREATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_start=6779 + _globals['_CREATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_end=6946 + _globals['_CREATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_start=6949 + _globals['_CREATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_end=7112 + _globals['_UPDATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_start=7115 + _globals['_UPDATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_end=7282 + _globals['_UPDATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_start=7285 + _globals['_UPDATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_end=7448 + _globals['_UPDATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_start=7451 + _globals['_UPDATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_end=7618 + _globals['_UPDATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_start=7621 + _globals['_UPDATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_end=7784 + _globals['_SESSIONSETTINGS']._serialized_start=7787 + _globals['_SESSIONSETTINGS']._serialized_end=8938 + _globals['_USERMANAGEMENT']._serialized_start=8941 + _globals['_USERMANAGEMENT']._serialized_end=9874 + _globals['_GETCONTEXTREQUEST']._serialized_start=9876 + _globals['_GETCONTEXTREQUEST']._serialized_end=9934 + _globals['_GETCONTEXTRESPONSE']._serialized_start=9936 + _globals['_GETCONTEXTRESPONSE']._serialized_end=10007 + _globals['_UPDATECONTEXTREQUEST']._serialized_start=10009 + _globals['_UPDATECONTEXTREQUEST']._serialized_end=10121 + _globals['_GETCURRENTSESSIONREQUEST']._serialized_start=10123 + _globals['_GETCURRENTSESSIONREQUEST']._serialized_end=10165 + _globals['_GETCURRENTSESSIONRESPONSE']._serialized_start=10168 + _globals['_GETCURRENTSESSIONRESPONSE']._serialized_end=10571 + _globals['_RESOURCEMETADATA']._serialized_start=10574 + _globals['_RESOURCEMETADATA']._serialized_end=10771 + _globals['_RESOURCEMETADATA_RESOURCETYPE']._serialized_start=10705 + _globals['_RESOURCEMETADATA_RESOURCETYPE']._serialized_end=10771 + _globals['_SCALEKITRESOURCEREQUEST']._serialized_start=10773 + _globals['_SCALEKITRESOURCEREQUEST']._serialized_end=10872 + _globals['_SCALEKITRESOURCERESPONSE']._serialized_start=10875 + _globals['_SCALEKITRESOURCERESPONSE']._serialized_end=11085 + _globals['_SCALEKITRESOURCERESPONSE_RESOURCESENTRY']._serialized_start=11000 + _globals['_SCALEKITRESOURCERESPONSE_RESOURCESENTRY']._serialized_end=11085 + _globals['_PORTALBOOTSTRAPREQUEST']._serialized_start=11087 + _globals['_PORTALBOOTSTRAPREQUEST']._serialized_end=11111 + _globals['_PORTALCUSTOMIZATIONBOOTSTRAP']._serialized_start=11114 + _globals['_PORTALCUSTOMIZATIONBOOTSTRAP']._serialized_end=11304 + _globals['_PORTALBOOTSTRAPRESPONSE']._serialized_start=11307 + _globals['_PORTALBOOTSTRAPRESPONSE']._serialized_end=11672 + _globals['_AGENTACTIONSCONFIG']._serialized_start=11675 + _globals['_AGENTACTIONSCONFIG']._serialized_end=12098 + _globals['_CREATEAGENTACTIONSCONFIGREQUEST']._serialized_start=12101 + _globals['_CREATEAGENTACTIONSCONFIGREQUEST']._serialized_end=12267 + _globals['_CREATEAGENTACTIONSCONFIGRESPONSE']._serialized_start=12270 + _globals['_CREATEAGENTACTIONSCONFIGRESPONSE']._serialized_end=12405 + _globals['_GETAGENTACTIONSCONFIGREQUEST']._serialized_start=12407 + _globals['_GETAGENTACTIONSCONFIGREQUEST']._serialized_end=12469 + _globals['_GETAGENTACTIONSCONFIGRESPONSE']._serialized_start=12472 + _globals['_GETAGENTACTIONSCONFIGRESPONSE']._serialized_end=12604 + _globals['_UPDATEAGENTACTIONSCONFIGREQUEST']._serialized_start=12607 + _globals['_UPDATEAGENTACTIONSCONFIGREQUEST']._serialized_end=12773 + _globals['_UPDATEAGENTACTIONSCONFIGRESPONSE']._serialized_start=12776 + _globals['_UPDATEAGENTACTIONSCONFIGRESPONSE']._serialized_end=12911 + _globals['_ENVIRONMENTSERVICE']._serialized_start=13652 + _globals['_ENVIRONMENTSERVICE']._serialized_end=22175 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/environments/environments_pb2.pyi b/scalekit/v1/environments/environments_pb2.pyi index ca77562..ec2f1bf 100644 --- a/scalekit/v1/environments/environments_pb2.pyi +++ b/scalekit/v1/environments/environments_pb2.pyi @@ -1,6 +1,7 @@ from buf.validate import validate_pb2 as _validate_pb2 from google.api import annotations_pb2 as _annotations_pb2 from google.api import field_behavior_pb2 as _field_behavior_pb2 +from google.api import visibility_pb2 as _visibility_pb2 from google.protobuf import any_pb2 as _any_pb2 from google.protobuf import duration_pb2 as _duration_pb2 from google.protobuf import empty_pb2 as _empty_pb2 @@ -9,7 +10,9 @@ from google.protobuf import timestamp_pb2 as _timestamp_pb2 from google.protobuf import wrappers_pb2 as _wrappers_pb2 from protoc_gen_openapiv2.options import annotations_pb2 as _annotations_pb2_1 from scalekit.v1.commons import commons_pb2 as _commons_pb2 +from scalekit.v1.connections import connections_pb2 as _connections_pb2 from scalekit.v1.options import options_pb2 as _options_pb2 +from scalekit.v1.organizations import organizations_pb2 as _organizations_pb2 from google.protobuf.internal import containers as _containers from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper from google.protobuf import descriptor as _descriptor @@ -55,6 +58,13 @@ class CookieSameSiteSetting(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): CookieSameSiteSetting_UNSPECIFIED: _ClassVar[CookieSameSiteSetting] LAX_MODE: _ClassVar[CookieSameSiteSetting] NONE_MODE: _ClassVar[CookieSameSiteSetting] + +class ConnectedAccountUserVerifyMode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + CONNECTED_ACCOUNT_USER_VERIFY_MODE_UNSPECIFIED: _ClassVar[ConnectedAccountUserVerifyMode] + USER_VERIFY_MODE_NONE: _ClassVar[ConnectedAccountUserVerifyMode] + USER_VERIFY_MODE_B2B: _ClassVar[ConnectedAccountUserVerifyMode] + USER_VERIFY_MODE_SCALEKIT_PLATFORM: _ClassVar[ConnectedAccountUserVerifyMode] UNSPECIFIED: CustomDomainStatus PENDING: CustomDomainStatus ACTIVE: CustomDomainStatus @@ -75,6 +85,10 @@ SESSION: CookiePersistenceType CookieSameSiteSetting_UNSPECIFIED: CookieSameSiteSetting LAX_MODE: CookieSameSiteSetting NONE_MODE: CookieSameSiteSetting +CONNECTED_ACCOUNT_USER_VERIFY_MODE_UNSPECIFIED: ConnectedAccountUserVerifyMode +USER_VERIFY_MODE_NONE: ConnectedAccountUserVerifyMode +USER_VERIFY_MODE_B2B: ConnectedAccountUserVerifyMode +USER_VERIFY_MODE_SCALEKIT_PLATFORM: ConnectedAccountUserVerifyMode class CreateCustomDomainRequest(_message.Message): __slots__ = ("id", "custom_domain") @@ -269,10 +283,14 @@ class GetPortalCustomizationRequest(_message.Message): def __init__(self, id: _Optional[str] = ...) -> None: ... class PortalSettings(_message.Message): - __slots__ = ("custom_branding",) + __slots__ = ("custom_branding", "new_self_serve_sso_scim", "enable_conn_delete") CUSTOM_BRANDING_FIELD_NUMBER: _ClassVar[int] + NEW_SELF_SERVE_SSO_SCIM_FIELD_NUMBER: _ClassVar[int] + ENABLE_CONN_DELETE_FIELD_NUMBER: _ClassVar[int] custom_branding: bool - def __init__(self, custom_branding: bool = ...) -> None: ... + new_self_serve_sso_scim: bool + enable_conn_delete: bool + def __init__(self, custom_branding: bool = ..., new_self_serve_sso_scim: bool = ..., enable_conn_delete: bool = ...) -> None: ... class GetPortalCustomizationResponse(_message.Message): __slots__ = ("environmentId", "customization_settings", "settings") @@ -364,6 +382,26 @@ class EnvironmentFeature(_message.Message): enabled: bool def __init__(self, name: _Optional[str] = ..., enabled: bool = ...) -> None: ... +class GetHostScopedPublicFeatureFlagsResponse(_message.Message): + __slots__ = ("flags",) + FLAGS_FIELD_NUMBER: _ClassVar[int] + flags: _containers.RepeatedCompositeFieldContainer[PublicHostFeatureFlag] + def __init__(self, flags: _Optional[_Iterable[_Union[PublicHostFeatureFlag, _Mapping]]] = ...) -> None: ... + +class PublicHostFeatureFlag(_message.Message): + __slots__ = ("key", "value", "variant", "reason", "error") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + VARIANT_FIELD_NUMBER: _ClassVar[int] + REASON_FIELD_NUMBER: _ClassVar[int] + ERROR_FIELD_NUMBER: _ClassVar[int] + key: str + value: _struct_pb2.Value + variant: str + reason: str + error: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., variant: _Optional[str] = ..., reason: _Optional[str] = ..., error: _Optional[str] = ...) -> None: ... + class GetEnvironmentSessionSettingsRequest(_message.Message): __slots__ = ("id",) ID_FIELD_NUMBER: _ClassVar[int] @@ -531,18 +569,20 @@ class GetCurrentSessionRequest(_message.Message): def __init__(self, id: _Optional[str] = ...) -> None: ... class GetCurrentSessionResponse(_message.Message): - __slots__ = ("session_expiry", "access_token_expiry", "organization_id", "subject", "email") + __slots__ = ("session_expiry", "access_token_expiry", "organization_id", "subject", "email", "connected_account_id") SESSION_EXPIRY_FIELD_NUMBER: _ClassVar[int] ACCESS_TOKEN_EXPIRY_FIELD_NUMBER: _ClassVar[int] ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] SUBJECT_FIELD_NUMBER: _ClassVar[int] EMAIL_FIELD_NUMBER: _ClassVar[int] + CONNECTED_ACCOUNT_ID_FIELD_NUMBER: _ClassVar[int] session_expiry: _timestamp_pb2.Timestamp access_token_expiry: _timestamp_pb2.Timestamp organization_id: str subject: str email: str - def __init__(self, session_expiry: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., access_token_expiry: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., organization_id: _Optional[str] = ..., subject: _Optional[str] = ..., email: _Optional[str] = ...) -> None: ... + connected_account_id: str + def __init__(self, session_expiry: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., access_token_expiry: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., organization_id: _Optional[str] = ..., subject: _Optional[str] = ..., email: _Optional[str] = ..., connected_account_id: _Optional[str] = ...) -> None: ... class ResourceMetadata(_message.Message): __slots__ = ("type", "identifiers") @@ -578,3 +618,75 @@ class ScalekitResourceResponse(_message.Message): RESOURCES_FIELD_NUMBER: _ClassVar[int] resources: _containers.MessageMap[str, _struct_pb2.Struct] def __init__(self, resources: _Optional[_Mapping[str, _struct_pb2.Struct]] = ...) -> None: ... + +class PortalBootstrapRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class PortalCustomizationBootstrap(_message.Message): + __slots__ = ("customization_settings", "settings") + CUSTOMIZATION_SETTINGS_FIELD_NUMBER: _ClassVar[int] + SETTINGS_FIELD_NUMBER: _ClassVar[int] + customization_settings: _struct_pb2.Struct + settings: PortalSettings + def __init__(self, customization_settings: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., settings: _Optional[_Union[PortalSettings, _Mapping]] = ...) -> None: ... + +class PortalBootstrapResponse(_message.Message): + __slots__ = ("session", "portal_customizations", "organization", "connections") + SESSION_FIELD_NUMBER: _ClassVar[int] + PORTAL_CUSTOMIZATIONS_FIELD_NUMBER: _ClassVar[int] + ORGANIZATION_FIELD_NUMBER: _ClassVar[int] + CONNECTIONS_FIELD_NUMBER: _ClassVar[int] + session: GetCurrentSessionResponse + portal_customizations: PortalCustomizationBootstrap + organization: _organizations_pb2.Organization + connections: _containers.RepeatedCompositeFieldContainer[_connections_pb2.ListConnection] + def __init__(self, session: _Optional[_Union[GetCurrentSessionResponse, _Mapping]] = ..., portal_customizations: _Optional[_Union[PortalCustomizationBootstrap, _Mapping]] = ..., organization: _Optional[_Union[_organizations_pb2.Organization, _Mapping]] = ..., connections: _Optional[_Iterable[_Union[_connections_pb2.ListConnection, _Mapping]]] = ...) -> None: ... + +class AgentActionsConfig(_message.Message): + __slots__ = ("user_verify_mode", "detailed_error_logging") + USER_VERIFY_MODE_FIELD_NUMBER: _ClassVar[int] + DETAILED_ERROR_LOGGING_FIELD_NUMBER: _ClassVar[int] + user_verify_mode: ConnectedAccountUserVerifyMode + detailed_error_logging: bool + def __init__(self, user_verify_mode: _Optional[_Union[ConnectedAccountUserVerifyMode, str]] = ..., detailed_error_logging: bool = ...) -> None: ... + +class CreateAgentActionsConfigRequest(_message.Message): + __slots__ = ("id", "agent_actions_config") + ID_FIELD_NUMBER: _ClassVar[int] + AGENT_ACTIONS_CONFIG_FIELD_NUMBER: _ClassVar[int] + id: str + agent_actions_config: AgentActionsConfig + def __init__(self, id: _Optional[str] = ..., agent_actions_config: _Optional[_Union[AgentActionsConfig, _Mapping]] = ...) -> None: ... + +class CreateAgentActionsConfigResponse(_message.Message): + __slots__ = ("agent_actions_config",) + AGENT_ACTIONS_CONFIG_FIELD_NUMBER: _ClassVar[int] + agent_actions_config: AgentActionsConfig + def __init__(self, agent_actions_config: _Optional[_Union[AgentActionsConfig, _Mapping]] = ...) -> None: ... + +class GetAgentActionsConfigRequest(_message.Message): + __slots__ = ("id",) + ID_FIELD_NUMBER: _ClassVar[int] + id: str + def __init__(self, id: _Optional[str] = ...) -> None: ... + +class GetAgentActionsConfigResponse(_message.Message): + __slots__ = ("agent_actions_config",) + AGENT_ACTIONS_CONFIG_FIELD_NUMBER: _ClassVar[int] + agent_actions_config: AgentActionsConfig + def __init__(self, agent_actions_config: _Optional[_Union[AgentActionsConfig, _Mapping]] = ...) -> None: ... + +class UpdateAgentActionsConfigRequest(_message.Message): + __slots__ = ("id", "agent_actions_config") + ID_FIELD_NUMBER: _ClassVar[int] + AGENT_ACTIONS_CONFIG_FIELD_NUMBER: _ClassVar[int] + id: str + agent_actions_config: AgentActionsConfig + def __init__(self, id: _Optional[str] = ..., agent_actions_config: _Optional[_Union[AgentActionsConfig, _Mapping]] = ...) -> None: ... + +class UpdateAgentActionsConfigResponse(_message.Message): + __slots__ = ("agent_actions_config",) + AGENT_ACTIONS_CONFIG_FIELD_NUMBER: _ClassVar[int] + agent_actions_config: AgentActionsConfig + def __init__(self, agent_actions_config: _Optional[_Union[AgentActionsConfig, _Mapping]] = ...) -> None: ... diff --git a/scalekit/v1/environments/environments_pb2_grpc.py b/scalekit/v1/environments/environments_pb2_grpc.py index 5119163..acb9184 100644 --- a/scalekit/v1/environments/environments_pb2_grpc.py +++ b/scalekit/v1/environments/environments_pb2_grpc.py @@ -115,6 +115,11 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetFeaturesRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetFeaturesResponse.FromString, ) + self.GetHostScopedPublicFeatureFlags = channel.unary_unary( + '/scalekit.v1.environments.EnvironmentService/GetHostScopedPublicFeatureFlags', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetHostScopedPublicFeatureFlagsResponse.FromString, + ) self.CreateEnvironmentSessionSettings = channel.unary_unary( '/scalekit.v1.environments.EnvironmentService/CreateEnvironmentSessionSettings', request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.CreateEnvironmentSessionSettingsRequest.SerializeToString, @@ -145,6 +150,21 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateEnvironmentUserManagementRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateEnvironmentUserManagementResponse.FromString, ) + self.CreateAgentActionsConfig = channel.unary_unary( + '/scalekit.v1.environments.EnvironmentService/CreateAgentActionsConfig', + request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.CreateAgentActionsConfigRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.CreateAgentActionsConfigResponse.FromString, + ) + self.GetAgentActionsConfig = channel.unary_unary( + '/scalekit.v1.environments.EnvironmentService/GetAgentActionsConfig', + request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetAgentActionsConfigRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetAgentActionsConfigResponse.FromString, + ) + self.UpdateAgentActionsConfig = channel.unary_unary( + '/scalekit.v1.environments.EnvironmentService/UpdateAgentActionsConfig', + request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateAgentActionsConfigRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateAgentActionsConfigResponse.FromString, + ) self.GetContext = channel.unary_unary( '/scalekit.v1.environments.EnvironmentService/GetContext', request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetContextRequest.SerializeToString, @@ -165,6 +185,11 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.ScalekitResourceRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.ScalekitResourceResponse.FromString, ) + self.PortalBootstrap = channel.unary_unary( + '/scalekit.v1.environments.EnvironmentService/PortalBootstrap', + request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.PortalBootstrapRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.PortalBootstrapResponse.FromString, + ) class EnvironmentServiceServicer(object): @@ -290,6 +315,15 @@ def GetFeatures(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def GetHostScopedPublicFeatureFlags(self, request, context): + """Returns allowlisted public feature flags for the environment implied by the request + host (typically HTTP Host). No environment id in path, query, or headers; unauthenticated. + 404 when the host does not resolve to an environment. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def CreateEnvironmentSessionSettings(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -326,6 +360,24 @@ def UpdateEnvironmentUserManagement(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def CreateAgentActionsConfig(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetAgentActionsConfig(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def UpdateAgentActionsConfig(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def GetContext(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -350,6 +402,12 @@ def GetScalekitResources(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def PortalBootstrap(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def add_EnvironmentServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -453,6 +511,11 @@ def add_EnvironmentServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetFeaturesRequest.FromString, response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetFeaturesResponse.SerializeToString, ), + 'GetHostScopedPublicFeatureFlags': grpc.unary_unary_rpc_method_handler( + servicer.GetHostScopedPublicFeatureFlags, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetHostScopedPublicFeatureFlagsResponse.SerializeToString, + ), 'CreateEnvironmentSessionSettings': grpc.unary_unary_rpc_method_handler( servicer.CreateEnvironmentSessionSettings, request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.CreateEnvironmentSessionSettingsRequest.FromString, @@ -483,6 +546,21 @@ def add_EnvironmentServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateEnvironmentUserManagementRequest.FromString, response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateEnvironmentUserManagementResponse.SerializeToString, ), + 'CreateAgentActionsConfig': grpc.unary_unary_rpc_method_handler( + servicer.CreateAgentActionsConfig, + request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.CreateAgentActionsConfigRequest.FromString, + response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.CreateAgentActionsConfigResponse.SerializeToString, + ), + 'GetAgentActionsConfig': grpc.unary_unary_rpc_method_handler( + servicer.GetAgentActionsConfig, + request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetAgentActionsConfigRequest.FromString, + response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetAgentActionsConfigResponse.SerializeToString, + ), + 'UpdateAgentActionsConfig': grpc.unary_unary_rpc_method_handler( + servicer.UpdateAgentActionsConfig, + request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateAgentActionsConfigRequest.FromString, + response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateAgentActionsConfigResponse.SerializeToString, + ), 'GetContext': grpc.unary_unary_rpc_method_handler( servicer.GetContext, request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetContextRequest.FromString, @@ -503,6 +581,11 @@ def add_EnvironmentServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.ScalekitResourceRequest.FromString, response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.ScalekitResourceResponse.SerializeToString, ), + 'PortalBootstrap': grpc.unary_unary_rpc_method_handler( + servicer.PortalBootstrap, + request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.PortalBootstrapRequest.FromString, + response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.PortalBootstrapResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'scalekit.v1.environments.EnvironmentService', rpc_method_handlers) @@ -853,6 +936,23 @@ def GetFeatures(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod + def GetHostScopedPublicFeatureFlags(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.environments.EnvironmentService/GetHostScopedPublicFeatureFlags', + google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + scalekit_dot_v1_dot_environments_dot_environments__pb2.GetHostScopedPublicFeatureFlagsResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod def CreateEnvironmentSessionSettings(request, target, @@ -955,6 +1055,57 @@ def UpdateEnvironmentUserManagement(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod + def CreateAgentActionsConfig(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.environments.EnvironmentService/CreateAgentActionsConfig', + scalekit_dot_v1_dot_environments_dot_environments__pb2.CreateAgentActionsConfigRequest.SerializeToString, + scalekit_dot_v1_dot_environments_dot_environments__pb2.CreateAgentActionsConfigResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def GetAgentActionsConfig(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.environments.EnvironmentService/GetAgentActionsConfig', + scalekit_dot_v1_dot_environments_dot_environments__pb2.GetAgentActionsConfigRequest.SerializeToString, + scalekit_dot_v1_dot_environments_dot_environments__pb2.GetAgentActionsConfigResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def UpdateAgentActionsConfig(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.environments.EnvironmentService/UpdateAgentActionsConfig', + scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateAgentActionsConfigRequest.SerializeToString, + scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateAgentActionsConfigResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod def GetContext(request, target, @@ -1022,3 +1173,20 @@ def GetScalekitResources(request, scalekit_dot_v1_dot_environments_dot_environments__pb2.ScalekitResourceResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def PortalBootstrap(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.environments.EnvironmentService/PortalBootstrap', + scalekit_dot_v1_dot_environments_dot_environments__pb2.PortalBootstrapRequest.SerializeToString, + scalekit_dot_v1_dot_environments_dot_environments__pb2.PortalBootstrapResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/errdetails/errdetails_pb2.py b/scalekit/v1/errdetails/errdetails_pb2.py index 30fbba1..cd5e444 100644 --- a/scalekit/v1/errdetails/errdetails_pb2.py +++ b/scalekit/v1/errdetails/errdetails_pb2.py @@ -12,10 +12,13 @@ _sym_db = _symbol_database.Default() +from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2 +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 +from protoc_gen_openapiv2.options import annotations_pb2 as protoc__gen__openapiv2_dot_options_dot_annotations__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'scalekit/v1/errdetails/errdetails.proto\x12\x16scalekit.v1.errdetails\x1a\x1egoogle/protobuf/duration.proto\"\xfe\x05\n\tErrorInfo\x12\x1d\n\nerror_code\x18\x01 \x01(\tR\terrorCode\x12\x45\n\ndebug_info\x18\x02 \x01(\x0b\x32!.scalekit.v1.errdetails.DebugInfoH\x00R\tdebugInfo\x88\x01\x01\x12\x42\n\thelp_info\x18\x03 \x01(\x0b\x32 .scalekit.v1.errdetails.HelpInfoH\x01R\x08helpInfo\x88\x01\x01\x12g\n\x16localized_message_info\x18\x04 \x01(\x0b\x32,.scalekit.v1.errdetails.LocalizedMessageInfoH\x02R\x14localizedMessageInfo\x88\x01\x01\x12N\n\rresource_info\x18\x05 \x01(\x0b\x32$.scalekit.v1.errdetails.ResourceInfoH\x03R\x0cresourceInfo\x88\x01\x01\x12K\n\x0crequest_info\x18\x06 \x01(\x0b\x32#.scalekit.v1.errdetails.RequestInfoH\x04R\x0brequestInfo\x88\x01\x01\x12\x64\n\x15validation_error_info\x18\x08 \x01(\x0b\x32+.scalekit.v1.errdetails.ValidationErrorInfoH\x05R\x13validationErrorInfo\x88\x01\x01\x12R\n\x0ftool_error_info\x18\t \x01(\x0b\x32%.scalekit.v1.errdetails.ToolErrorInfoH\x06R\rtoolErrorInfo\x88\x01\x01\x42\r\n\x0b_debug_infoB\x0c\n\n_help_infoB\x19\n\x17_localized_message_infoB\x10\n\x0e_resource_infoB\x0f\n\r_request_infoB\x18\n\x16_validation_error_infoB\x12\n\x10_tool_error_info\"H\n\tDebugInfo\x12#\n\rstack_entries\x18\x01 \x03(\tR\x0cstackEntries\x12\x16\n\x06\x64\x65tail\x18\x02 \x01(\tR\x06\x64\x65tail\"\xe6\x01\n\x13ValidationErrorInfo\x12\x65\n\x10\x66ield_violations\x18\x01 \x03(\x0b\x32:.scalekit.v1.errdetails.ValidationErrorInfo.FieldViolationR\x0f\x66ieldViolations\x1ah\n\x0e\x46ieldViolation\x12\x14\n\x05\x66ield\x18\x01 \x01(\tR\x05\x66ield\x12 \n\x0b\x64\x65scription\x18\x02 \x01(\tR\x0b\x64\x65scription\x12\x1e\n\nconstraint\x18\x03 \x01(\tR\nconstraint\"O\n\x0bRequestInfo\x12\x1d\n\nrequest_id\x18\x01 \x01(\tR\trequestId\x12!\n\x0cserving_data\x18\x02 \x01(\tR\x0bservingData\"\xb8\x01\n\x0cResourceInfo\x12#\n\rresource_name\x18\x02 \x01(\tR\x0cresourceName\x12\x14\n\x05owner\x18\x03 \x01(\tR\x05owner\x12 \n\x0b\x64\x65scription\x18\x04 \x01(\tR\x0b\x64\x65scription\x12\x31\n\x14required_permissions\x18\x05 \x03(\tR\x13requiredPermissions\x12\x12\n\x04user\x18\x06 \x01(\tR\x04userJ\x04\x08\x01\x10\x02\"\x83\x01\n\x08HelpInfo\x12;\n\x05links\x18\x01 \x03(\x0b\x32%.scalekit.v1.errdetails.HelpInfo.LinkR\x05links\x1a:\n\x04Link\x12 \n\x0b\x64\x65scription\x18\x01 \x01(\tR\x0b\x64\x65scription\x12\x10\n\x03url\x18\x02 \x01(\tR\x03url\"H\n\x14LocalizedMessageInfo\x12\x16\n\x06locale\x18\x01 \x01(\tR\x06locale\x12\x18\n\x07message\x18\x02 \x01(\tR\x07message\"\x88\x01\n\rToolErrorInfo\x12!\n\x0c\x65xecution_id\x18\x01 \x01(\tR\x0b\x65xecutionId\x12,\n\x12tool_error_message\x18\x02 \x01(\tR\x10toolErrorMessage\x12&\n\x0ftool_error_code\x18\x03 \x01(\tR\rtoolErrorCodeB6Z4github.com/scalekit-inc/scalekit/pkg/grpc/errdetailsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'scalekit/v1/errdetails/errdetails.proto\x12\x16scalekit.v1.errdetails\x1a\x1cgoogle/api/annotations.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\"\xfe\x05\n\tErrorInfo\x12\x1d\n\nerror_code\x18\x01 \x01(\tR\terrorCode\x12\x45\n\ndebug_info\x18\x02 \x01(\x0b\x32!.scalekit.v1.errdetails.DebugInfoH\x00R\tdebugInfo\x88\x01\x01\x12\x42\n\thelp_info\x18\x03 \x01(\x0b\x32 .scalekit.v1.errdetails.HelpInfoH\x01R\x08helpInfo\x88\x01\x01\x12g\n\x16localized_message_info\x18\x04 \x01(\x0b\x32,.scalekit.v1.errdetails.LocalizedMessageInfoH\x02R\x14localizedMessageInfo\x88\x01\x01\x12N\n\rresource_info\x18\x05 \x01(\x0b\x32$.scalekit.v1.errdetails.ResourceInfoH\x03R\x0cresourceInfo\x88\x01\x01\x12K\n\x0crequest_info\x18\x06 \x01(\x0b\x32#.scalekit.v1.errdetails.RequestInfoH\x04R\x0brequestInfo\x88\x01\x01\x12\x64\n\x15validation_error_info\x18\x08 \x01(\x0b\x32+.scalekit.v1.errdetails.ValidationErrorInfoH\x05R\x13validationErrorInfo\x88\x01\x01\x12R\n\x0ftool_error_info\x18\t \x01(\x0b\x32%.scalekit.v1.errdetails.ToolErrorInfoH\x06R\rtoolErrorInfo\x88\x01\x01\x42\r\n\x0b_debug_infoB\x0c\n\n_help_infoB\x19\n\x17_localized_message_infoB\x10\n\x0e_resource_infoB\x0f\n\r_request_infoB\x18\n\x16_validation_error_infoB\x12\n\x10_tool_error_info\"H\n\tDebugInfo\x12#\n\rstack_entries\x18\x01 \x03(\tR\x0cstackEntries\x12\x16\n\x06\x64\x65tail\x18\x02 \x01(\tR\x06\x64\x65tail\"\xe6\x01\n\x13ValidationErrorInfo\x12\x65\n\x10\x66ield_violations\x18\x01 \x03(\x0b\x32:.scalekit.v1.errdetails.ValidationErrorInfo.FieldViolationR\x0f\x66ieldViolations\x1ah\n\x0e\x46ieldViolation\x12\x14\n\x05\x66ield\x18\x01 \x01(\tR\x05\x66ield\x12 \n\x0b\x64\x65scription\x18\x02 \x01(\tR\x0b\x64\x65scription\x12\x1e\n\nconstraint\x18\x03 \x01(\tR\nconstraint\"O\n\x0bRequestInfo\x12\x1d\n\nrequest_id\x18\x01 \x01(\tR\trequestId\x12!\n\x0cserving_data\x18\x02 \x01(\tR\x0bservingData\"\xb8\x01\n\x0cResourceInfo\x12#\n\rresource_name\x18\x02 \x01(\tR\x0cresourceName\x12\x14\n\x05owner\x18\x03 \x01(\tR\x05owner\x12 \n\x0b\x64\x65scription\x18\x04 \x01(\tR\x0b\x64\x65scription\x12\x31\n\x14required_permissions\x18\x05 \x03(\tR\x13requiredPermissions\x12\x12\n\x04user\x18\x06 \x01(\tR\x04userJ\x04\x08\x01\x10\x02\"\x83\x01\n\x08HelpInfo\x12;\n\x05links\x18\x01 \x03(\x0b\x32%.scalekit.v1.errdetails.HelpInfo.LinkR\x05links\x1a:\n\x04Link\x12 \n\x0b\x64\x65scription\x18\x01 \x01(\tR\x0b\x64\x65scription\x12\x10\n\x03url\x18\x02 \x01(\tR\x03url\"H\n\x14LocalizedMessageInfo\x12\x16\n\x06locale\x18\x01 \x01(\tR\x06locale\x12\x18\n\x07message\x18\x02 \x01(\tR\x07message\"\x88\x01\n\rToolErrorInfo\x12!\n\x0c\x65xecution_id\x18\x01 \x01(\tR\x0b\x65xecutionId\x12,\n\x12tool_error_message\x18\x02 \x01(\tR\x10toolErrorMessage\x12&\n\x0ftool_error_code\x18\x03 \x01(\tR\rtoolErrorCode2\x96\x01\n\x05\x44ummy\x12\x8c\x01\n\x0c\x44ummyService\x12\x16.google.protobuf.Empty\x1a!.scalekit.v1.errdetails.ErrorInfo\"A\x92\x41\x30J.\n\x03\x32\x30\x30\x12\'\x12%\n#\x1a!.scalekit.v1.errdetails.ErrorInfo\x82\xd3\xe4\x93\x02\x08\x12\x06/dummyB6Z4github.com/scalekit-inc/scalekit/pkg/grpc/errdetailsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -23,24 +26,28 @@ if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'Z4github.com/scalekit-inc/scalekit/pkg/grpc/errdetails' - _globals['_ERRORINFO']._serialized_start=100 - _globals['_ERRORINFO']._serialized_end=866 - _globals['_DEBUGINFO']._serialized_start=868 - _globals['_DEBUGINFO']._serialized_end=940 - _globals['_VALIDATIONERRORINFO']._serialized_start=943 - _globals['_VALIDATIONERRORINFO']._serialized_end=1173 - _globals['_VALIDATIONERRORINFO_FIELDVIOLATION']._serialized_start=1069 - _globals['_VALIDATIONERRORINFO_FIELDVIOLATION']._serialized_end=1173 - _globals['_REQUESTINFO']._serialized_start=1175 - _globals['_REQUESTINFO']._serialized_end=1254 - _globals['_RESOURCEINFO']._serialized_start=1257 - _globals['_RESOURCEINFO']._serialized_end=1441 - _globals['_HELPINFO']._serialized_start=1444 - _globals['_HELPINFO']._serialized_end=1575 - _globals['_HELPINFO_LINK']._serialized_start=1517 - _globals['_HELPINFO_LINK']._serialized_end=1575 - _globals['_LOCALIZEDMESSAGEINFO']._serialized_start=1577 - _globals['_LOCALIZEDMESSAGEINFO']._serialized_end=1649 - _globals['_TOOLERRORINFO']._serialized_start=1652 - _globals['_TOOLERRORINFO']._serialized_end=1788 + _globals['_DUMMY'].methods_by_name['DummyService']._loaded_options = None + _globals['_DUMMY'].methods_by_name['DummyService']._serialized_options = b'\222A0J.\n\003200\022\'\022%\n#\032!.scalekit.v1.errdetails.ErrorInfo\202\323\344\223\002\010\022\006/dummy' + _globals['_ERRORINFO']._serialized_start=207 + _globals['_ERRORINFO']._serialized_end=973 + _globals['_DEBUGINFO']._serialized_start=975 + _globals['_DEBUGINFO']._serialized_end=1047 + _globals['_VALIDATIONERRORINFO']._serialized_start=1050 + _globals['_VALIDATIONERRORINFO']._serialized_end=1280 + _globals['_VALIDATIONERRORINFO_FIELDVIOLATION']._serialized_start=1176 + _globals['_VALIDATIONERRORINFO_FIELDVIOLATION']._serialized_end=1280 + _globals['_REQUESTINFO']._serialized_start=1282 + _globals['_REQUESTINFO']._serialized_end=1361 + _globals['_RESOURCEINFO']._serialized_start=1364 + _globals['_RESOURCEINFO']._serialized_end=1548 + _globals['_HELPINFO']._serialized_start=1551 + _globals['_HELPINFO']._serialized_end=1682 + _globals['_HELPINFO_LINK']._serialized_start=1624 + _globals['_HELPINFO_LINK']._serialized_end=1682 + _globals['_LOCALIZEDMESSAGEINFO']._serialized_start=1684 + _globals['_LOCALIZEDMESSAGEINFO']._serialized_end=1756 + _globals['_TOOLERRORINFO']._serialized_start=1759 + _globals['_TOOLERRORINFO']._serialized_end=1895 + _globals['_DUMMY']._serialized_start=1898 + _globals['_DUMMY']._serialized_end=2048 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/errdetails/errdetails_pb2.pyi b/scalekit/v1/errdetails/errdetails_pb2.pyi index 547b7ed..8848396 100644 --- a/scalekit/v1/errdetails/errdetails_pb2.pyi +++ b/scalekit/v1/errdetails/errdetails_pb2.pyi @@ -1,4 +1,7 @@ +from google.api import annotations_pb2 as _annotations_pb2 from google.protobuf import duration_pb2 as _duration_pb2 +from google.protobuf import empty_pb2 as _empty_pb2 +from protoc_gen_openapiv2.options import annotations_pb2 as _annotations_pb2_1 from google.protobuf.internal import containers as _containers from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message diff --git a/scalekit/v1/errdetails/errdetails_pb2_grpc.py b/scalekit/v1/errdetails/errdetails_pb2_grpc.py index 2daafff..6ffc6eb 100644 --- a/scalekit/v1/errdetails/errdetails_pb2_grpc.py +++ b/scalekit/v1/errdetails/errdetails_pb2_grpc.py @@ -2,3 +2,66 @@ """Client and server classes corresponding to protobuf-defined services.""" import grpc +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 +from scalekit.v1.errdetails import errdetails_pb2 as scalekit_dot_v1_dot_errdetails_dot_errdetails__pb2 + + +class DummyStub(object): + """Missing associated documentation comment in .proto file.""" + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.DummyService = channel.unary_unary( + '/scalekit.v1.errdetails.Dummy/DummyService', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_errdetails_dot_errdetails__pb2.ErrorInfo.FromString, + ) + + +class DummyServicer(object): + """Missing associated documentation comment in .proto file.""" + + def DummyService(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_DummyServicer_to_server(servicer, server): + rpc_method_handlers = { + 'DummyService': grpc.unary_unary_rpc_method_handler( + servicer.DummyService, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=scalekit_dot_v1_dot_errdetails_dot_errdetails__pb2.ErrorInfo.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'scalekit.v1.errdetails.Dummy', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + # This class is part of an EXPERIMENTAL API. +class Dummy(object): + """Missing associated documentation comment in .proto file.""" + + @staticmethod + def DummyService(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.errdetails.Dummy/DummyService', + google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + scalekit_dot_v1_dot_errdetails_dot_errdetails__pb2.ErrorInfo.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/keys/__init__.py b/scalekit/v1/keys/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/scalekit/v1/keys/keys_pb2.py b/scalekit/v1/keys/keys_pb2.py new file mode 100644 index 0000000..ecdf916 --- /dev/null +++ b/scalekit/v1/keys/keys_pb2.py @@ -0,0 +1,111 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: scalekit/v1/keys/keys.proto +# Protobuf Python Version: 5.26.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 +from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 +from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2 +from google.api import visibility_pb2 as google_dot_api_dot_visibility__pb2 +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 +from protoc_gen_openapiv2.options import annotations_pb2 as protoc__gen__openapiv2_dot_options_dot_annotations__pb2 +from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bscalekit/v1/keys/keys.proto\x12\x10scalekit.v1.keys\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\xb5\x01\n\x10\x43reateDEKRequest\x12<\n\x08key_type\x18\x01 \x01(\x0e\x32\x1c.scalekit.v1.keys.DEKKeyTypeH\x00R\x07keyType\x88\x01\x01\x12\x1f\n\x08provider\x18\x02 \x01(\tH\x01R\x08provider\x88\x01\x01\x12\x1c\n\x07key_ref\x18\x03 \x01(\tH\x02R\x06keyRef\x88\x01\x01\x42\x0b\n\t_key_typeB\x0b\n\t_providerB\n\n\x08_key_ref\"G\n\x11\x43reateDEKResponse\x12\x32\n\x03\x64\x65k\x18\x01 \x01(\x0b\x32 .scalekit.v1.keys.EnvironmentKeyR\x03\x64\x65k\"\x12\n\x10RotateDEKRequest\"G\n\x11RotateDEKResponse\x12\x32\n\x03\x64\x65k\x18\x01 \x01(\x0b\x32 .scalekit.v1.keys.EnvironmentKeyR\x03\x64\x65k\"u\n\x0fListDEKsRequest\x12\x1b\n\x06status\x18\x01 \x01(\tH\x00R\x06status\x88\x01\x01\x12\x1b\n\tpage_size\x18\x02 \x01(\rR\x08pageSize\x12\x1d\n\npage_token\x18\x03 \x01(\tR\tpageTokenB\t\n\x07_status\"\x8f\x01\n\x10ListDEKsResponse\x12\x34\n\x04\x64\x65ks\x18\x01 \x03(\x0b\x32 .scalekit.v1.keys.EnvironmentKeyR\x04\x64\x65ks\x12&\n\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x03 \x01(\rR\ttotalSize\"<\n\x10\x44\x65leteDEKRequest\x12(\n\x0b\x64\x65k_version\x18\x01 \x01(\x05\x42\x07\xbaH\x04\x1a\x02 \x00R\ndekVersion\"\x18\n\x16RotateMasterKeyRequest\"\\\n\x17RotateMasterKeyResponse\x12\x41\n\x0enew_master_key\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.keys.MasterKeyR\x0cnewMasterKey\"\xbb\x02\n\x0e\x45nvironmentKey\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12%\n\x0e\x65nvironment_id\x18\x02 \x01(\tR\renvironmentId\x12\x1f\n\x0b\x64\x65k_version\x18\x03 \x01(\x05R\ndekVersion\x12%\n\x0emaster_version\x18\x04 \x01(\x05R\rmasterVersion\x12\x1c\n\talgorithm\x18\x05 \x01(\tR\talgorithm\x12\x16\n\x06status\x18\x06 \x01(\tR\x06status\x12\x39\n\ncreated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nrotated_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\trotatedAt\"\xf8\x01\n\tMasterKey\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1a\n\x08provider\x18\x02 \x01(\tR\x08provider\x12\x17\n\x07key_ref\x18\x03 \x01(\tR\x06keyRef\x12\x18\n\x07version\x18\x04 \x01(\x05R\x07version\x12\x16\n\x06status\x18\x05 \x01(\tR\x06status\x12\x39\n\ncreated_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nrotated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\trotatedAt\"\xa0\x01\n\x16\x43reateMasterKeyRequest\x12\x39\n\x08provider\x18\x01 \x01(\tB\x1d\xbaH\x1ar\x18R\x03GCPR\x03\x41WSR\x05\x41ZURER\x05LOCALR\x08provider\x12 \n\x07key_ref\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06keyRef\x12\x1d\n\x07version\x18\x03 \x01(\x05H\x00R\x07version\x88\x01\x01\x42\n\n\x08_version\"U\n\x17\x43reateMasterKeyResponse\x12:\n\nmaster_key\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.keys.MasterKeyR\tmasterKey\"?\n\x13SetActiveDEKRequest\x12(\n\x0b\x64\x65k_version\x18\x01 \x01(\x05\x42\x07\xbaH\x04\x1a\x02 \x00R\ndekVersion\"J\n\x14SetActiveDEKResponse\x12\x32\n\x03\x64\x65k\x18\x01 \x01(\x0b\x32 .scalekit.v1.keys.EnvironmentKeyR\x03\x64\x65k\">\n\x19SetActiveMasterKeyRequest\x12!\n\x07version\x18\x01 \x01(\x05\x42\x07\xbaH\x04\x1a\x02 \x00R\x07version\"X\n\x1aSetActiveMasterKeyResponse\x12:\n\nmaster_key\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.keys.MasterKeyR\tmasterKey\"=\n\x11\x44\x65stroyDEKRequest\x12(\n\x0b\x64\x65k_version\x18\x01 \x01(\x05\x42\x07\xbaH\x04\x1a\x02 \x00R\ndekVersion\"<\n\x17\x44\x65stroyMasterKeyRequest\x12!\n\x07version\x18\x01 \x01(\x05\x42\x07\xbaH\x04\x1a\x02 \x00R\x07version*c\n\nDEKKeyType\x12\x1c\n\x18\x44\x45K_KEY_TYPE_UNSPECIFIED\x10\x00\x12\x13\n\x0f\x45NVIRONMENT_KEY\x10\x01\x12\x08\n\x04\x42YOK\x10\x02\x12\x18\n\x14SCALEKIT_MANAGED_KEY\x10\x03\x32\xd1\x1c\n\x14KeyManagementService\x12\xed\x02\n\tCreateDEK\x12\".scalekit.v1.keys.CreateDEKRequest\x1a#.scalekit.v1.keys.CreateDEKResponse\"\x96\x02\x92\x41\xf0\x01\n\x0eKey Management\x12\x10\x43reate a new DEK\x1a\xcb\x01\x43reates a new Data Encryption Key (DEK) for the current environment. If a DEK already exists, this creates a new version. The DEK is automatically wrapped with the current master key and stored securely.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x16\"\x11/api/v1/keys/deks:\x01*\x12\xc2\x02\n\tRotateDEK\x12\".scalekit.v1.keys.RotateDEKRequest\x1a#.scalekit.v1.keys.RotateDEKResponse\"\xeb\x01\x92\x41\xbe\x01\n\x0eKey Management\x12\nRotate DEK\x1a\x9f\x01\x43reates a new DEK version for the environment. Re-encrypts existing data (oidc_client_secrets, connection client_secrets) and deprecates previous DEK versions.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1d\"\x18/api/v1/keys/deks:rotate:\x01*\x12\xd2\x02\n\x08ListDEKs\x12!.scalekit.v1.keys.ListDEKsRequest\x1a\".scalekit.v1.keys.ListDEKsResponse\"\xfe\x01\x92\x41\xdb\x01\n\x0eKey Management\x12\tList DEKs\x1a\xbd\x01Lists Data Encryption Keys (DEKs) for the current environment with pagination. Supports optional status filter (ACTIVE, DEPRECATED). Use page_token from the response to fetch the next page.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x13\x12\x11/api/v1/keys/deks\x12\x9e\x02\n\tDeleteDEK\x12\".scalekit.v1.keys.DeleteDEKRequest\x1a\x16.google.protobuf.Empty\"\xd4\x01\x92\x41\xa3\x01\n\x0eKey Management\x12\nDelete DEK\x1a\x84\x01\x44\x65precates a specific DEK version. Deprecated DEKs can still decrypt existing data but cannot be used for new encryption operations.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02!*\x1f/api/v1/keys/deks/{dek_version}\x12\xe4\x02\n\x0fRotateMasterKey\x12(.scalekit.v1.keys.RotateMasterKeyRequest\x1a).scalekit.v1.keys.RotateMasterKeyResponse\"\xfb\x01\x92\x41\xbd\x01\n\x0eKey Management\x12\x11Rotate Master Key\x1a\x97\x01\x43reates a new master key version, promotes it to primary, and rewraps all DEKs with the new master key. This operation supports zero-downtime rotation.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1f\"\x1a/api/v1/keys/master:rotate:\x01*\x12\x9f\x03\n\x0f\x43reateMasterKey\x12(.scalekit.v1.keys.CreateMasterKeyRequest\x1a).scalekit.v1.keys.CreateMasterKeyResponse\"\xb6\x02\x92\x41\xff\x01\n\x0eKey Management\x12\x11\x43reate Master Key\x1a\xd9\x01\x43reates a new master key version with the specified provider and key reference. The new key is created in CREATED status and is not used for encryption until it is explicitly promoted to ACTIVE via SetActiveMasterKey.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x18\"\x13/api/v1/keys/master:\x01*\x12\xd7\x02\n\x0cSetActiveDEK\x12%.scalekit.v1.keys.SetActiveDEKRequest\x1a&.scalekit.v1.keys.SetActiveDEKResponse\"\xf7\x01\x92\x41\xb9\x01\n\x0eKey Management\x12\x0eSet Active DEK\x1a\x96\x01Sets a specific DEK version as active for the environment and deprecates other versions. This allows switching back to an older DEK version if needed.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02.\")/api/v1/keys/deks/{dek_version}:setactive:\x01*\x12\x80\x03\n\x12SetActiveMasterKey\x12+.scalekit.v1.keys.SetActiveMasterKeyRequest\x1a,.scalekit.v1.keys.SetActiveMasterKeyResponse\"\x8e\x02\x92\x41\xc3\x01\n\x0eKey Management\x12\x15Set Active Master Key\x1a\x99\x01Sets a specific master key version as active and deprecates other versions. This promotes the specified version to primary for new encryption operations.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02,\"\'/api/v1/keys/master/{version}:setactive:\x01*\x12\xd8\x02\n\nDestroyDEK\x12#.scalekit.v1.keys.DestroyDEKRequest\x1a\x16.google.protobuf.Empty\"\x8c\x02\x92\x41\xd3\x01\n\x0eKey Management\x12\x0b\x44\x65stroy DEK\x1a\xb3\x01Permanently deletes a DEK version from the database. WARNING: This operation is irreversible. Any data encrypted with this DEK will become unrecoverable. Use with extreme caution.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02)*\'/api/v1/keys/deks/{dek_version}:destroy\x12\x84\x03\n\x10\x44\x65stroyMasterKey\x12).scalekit.v1.keys.DestroyMasterKeyRequest\x1a\x16.google.protobuf.Empty\"\xac\x02\x92\x41\xe6\x01\n\x0eKey Management\x12\x12\x44\x65stroy Master Key\x1a\xbf\x01Permanently deletes a master key version from the database. WARNING: This operation is irreversible. Any DEKs wrapped with this master key will become unrecoverable. Use with extreme caution.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\'*%/api/v1/keys/master/{version}:destroy\x1a\x46\x92\x41\x43\n\x0eKey Management\x12\x31\x45ncryption key management for envelope encryptionB0Z.github.com/scalekit-inc/scalekit/pkg/grpc/keysb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'scalekit.v1.keys.keys_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'Z.github.com/scalekit-inc/scalekit/pkg/grpc/keys' + _globals['_DELETEDEKREQUEST'].fields_by_name['dek_version']._loaded_options = None + _globals['_DELETEDEKREQUEST'].fields_by_name['dek_version']._serialized_options = b'\272H\004\032\002 \000' + _globals['_CREATEMASTERKEYREQUEST'].fields_by_name['provider']._loaded_options = None + _globals['_CREATEMASTERKEYREQUEST'].fields_by_name['provider']._serialized_options = b'\272H\032r\030R\003GCPR\003AWSR\005AZURER\005LOCAL' + _globals['_CREATEMASTERKEYREQUEST'].fields_by_name['key_ref']._loaded_options = None + _globals['_CREATEMASTERKEYREQUEST'].fields_by_name['key_ref']._serialized_options = b'\272H\004r\002\020\001' + _globals['_SETACTIVEDEKREQUEST'].fields_by_name['dek_version']._loaded_options = None + _globals['_SETACTIVEDEKREQUEST'].fields_by_name['dek_version']._serialized_options = b'\272H\004\032\002 \000' + _globals['_SETACTIVEMASTERKEYREQUEST'].fields_by_name['version']._loaded_options = None + _globals['_SETACTIVEMASTERKEYREQUEST'].fields_by_name['version']._serialized_options = b'\272H\004\032\002 \000' + _globals['_DESTROYDEKREQUEST'].fields_by_name['dek_version']._loaded_options = None + _globals['_DESTROYDEKREQUEST'].fields_by_name['dek_version']._serialized_options = b'\272H\004\032\002 \000' + _globals['_DESTROYMASTERKEYREQUEST'].fields_by_name['version']._loaded_options = None + _globals['_DESTROYMASTERKEYREQUEST'].fields_by_name['version']._serialized_options = b'\272H\004\032\002 \000' + _globals['_KEYMANAGEMENTSERVICE']._loaded_options = None + _globals['_KEYMANAGEMENTSERVICE']._serialized_options = b'\222AC\n\016Key Management\0221Encryption key management for envelope encryption' + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['CreateDEK']._loaded_options = None + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['CreateDEK']._serialized_options = b'\222A\360\001\n\016Key Management\022\020Create a new DEK\032\313\001Creates a new Data Encryption Key (DEK) for the current environment. If a DEK already exists, this creates a new version. The DEK is automatically wrapped with the current master key and stored securely.\202\265\030\002\030D\202\323\344\223\002\026\"\021/api/v1/keys/deks:\001*' + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['RotateDEK']._loaded_options = None + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['RotateDEK']._serialized_options = b'\222A\276\001\n\016Key Management\022\nRotate DEK\032\237\001Creates a new DEK version for the environment. Re-encrypts existing data (oidc_client_secrets, connection client_secrets) and deprecates previous DEK versions.\202\265\030\002\030D\202\323\344\223\002\035\"\030/api/v1/keys/deks:rotate:\001*' + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['ListDEKs']._loaded_options = None + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['ListDEKs']._serialized_options = b'\222A\333\001\n\016Key Management\022\tList DEKs\032\275\001Lists Data Encryption Keys (DEKs) for the current environment with pagination. Supports optional status filter (ACTIVE, DEPRECATED). Use page_token from the response to fetch the next page.\202\265\030\002\030D\202\323\344\223\002\023\022\021/api/v1/keys/deks' + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['DeleteDEK']._loaded_options = None + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['DeleteDEK']._serialized_options = b'\222A\243\001\n\016Key Management\022\nDelete DEK\032\204\001Deprecates a specific DEK version. Deprecated DEKs can still decrypt existing data but cannot be used for new encryption operations.\202\265\030\002\030D\202\323\344\223\002!*\037/api/v1/keys/deks/{dek_version}' + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['RotateMasterKey']._loaded_options = None + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['RotateMasterKey']._serialized_options = b'\222A\275\001\n\016Key Management\022\021Rotate Master Key\032\227\001Creates a new master key version, promotes it to primary, and rewraps all DEKs with the new master key. This operation supports zero-downtime rotation.\202\265\030\002\030\004\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\037\"\032/api/v1/keys/master:rotate:\001*' + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['CreateMasterKey']._loaded_options = None + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['CreateMasterKey']._serialized_options = b'\222A\377\001\n\016Key Management\022\021Create Master Key\032\331\001Creates a new master key version with the specified provider and key reference. The new key is created in CREATED status and is not used for encryption until it is explicitly promoted to ACTIVE via SetActiveMasterKey.\202\265\030\002\030\004\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\030\"\023/api/v1/keys/master:\001*' + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['SetActiveDEK']._loaded_options = None + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['SetActiveDEK']._serialized_options = b'\222A\271\001\n\016Key Management\022\016Set Active DEK\032\226\001Sets a specific DEK version as active for the environment and deprecates other versions. This allows switching back to an older DEK version if needed.\202\265\030\002\030D\202\323\344\223\002.\")/api/v1/keys/deks/{dek_version}:setactive:\001*' + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['SetActiveMasterKey']._loaded_options = None + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['SetActiveMasterKey']._serialized_options = b'\222A\303\001\n\016Key Management\022\025Set Active Master Key\032\231\001Sets a specific master key version as active and deprecates other versions. This promotes the specified version to primary for new encryption operations.\202\265\030\002\030\004\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002,\"\'/api/v1/keys/master/{version}:setactive:\001*' + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['DestroyDEK']._loaded_options = None + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['DestroyDEK']._serialized_options = b'\222A\323\001\n\016Key Management\022\013Destroy DEK\032\263\001Permanently deletes a DEK version from the database. WARNING: This operation is irreversible. Any data encrypted with this DEK will become unrecoverable. Use with extreme caution.\202\265\030\002\030D\202\323\344\223\002)*\'/api/v1/keys/deks/{dek_version}:destroy' + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['DestroyMasterKey']._loaded_options = None + _globals['_KEYMANAGEMENTSERVICE'].methods_by_name['DestroyMasterKey']._serialized_options = b'\222A\346\001\n\016Key Management\022\022Destroy Master Key\032\277\001Permanently deletes a master key version from the database. WARNING: This operation is irreversible. Any DEKs wrapped with this master key will become unrecoverable. Use with extreme caution.\202\265\030\002\030\004\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\'*%/api/v1/keys/master/{version}:destroy' + _globals['_DEKKEYTYPE']._serialized_start=2351 + _globals['_DEKKEYTYPE']._serialized_end=2450 + _globals['_CREATEDEKREQUEST']._serialized_start=316 + _globals['_CREATEDEKREQUEST']._serialized_end=497 + _globals['_CREATEDEKRESPONSE']._serialized_start=499 + _globals['_CREATEDEKRESPONSE']._serialized_end=570 + _globals['_ROTATEDEKREQUEST']._serialized_start=572 + _globals['_ROTATEDEKREQUEST']._serialized_end=590 + _globals['_ROTATEDEKRESPONSE']._serialized_start=592 + _globals['_ROTATEDEKRESPONSE']._serialized_end=663 + _globals['_LISTDEKSREQUEST']._serialized_start=665 + _globals['_LISTDEKSREQUEST']._serialized_end=782 + _globals['_LISTDEKSRESPONSE']._serialized_start=785 + _globals['_LISTDEKSRESPONSE']._serialized_end=928 + _globals['_DELETEDEKREQUEST']._serialized_start=930 + _globals['_DELETEDEKREQUEST']._serialized_end=990 + _globals['_ROTATEMASTERKEYREQUEST']._serialized_start=992 + _globals['_ROTATEMASTERKEYREQUEST']._serialized_end=1016 + _globals['_ROTATEMASTERKEYRESPONSE']._serialized_start=1018 + _globals['_ROTATEMASTERKEYRESPONSE']._serialized_end=1110 + _globals['_ENVIRONMENTKEY']._serialized_start=1113 + _globals['_ENVIRONMENTKEY']._serialized_end=1428 + _globals['_MASTERKEY']._serialized_start=1431 + _globals['_MASTERKEY']._serialized_end=1679 + _globals['_CREATEMASTERKEYREQUEST']._serialized_start=1682 + _globals['_CREATEMASTERKEYREQUEST']._serialized_end=1842 + _globals['_CREATEMASTERKEYRESPONSE']._serialized_start=1844 + _globals['_CREATEMASTERKEYRESPONSE']._serialized_end=1929 + _globals['_SETACTIVEDEKREQUEST']._serialized_start=1931 + _globals['_SETACTIVEDEKREQUEST']._serialized_end=1994 + _globals['_SETACTIVEDEKRESPONSE']._serialized_start=1996 + _globals['_SETACTIVEDEKRESPONSE']._serialized_end=2070 + _globals['_SETACTIVEMASTERKEYREQUEST']._serialized_start=2072 + _globals['_SETACTIVEMASTERKEYREQUEST']._serialized_end=2134 + _globals['_SETACTIVEMASTERKEYRESPONSE']._serialized_start=2136 + _globals['_SETACTIVEMASTERKEYRESPONSE']._serialized_end=2224 + _globals['_DESTROYDEKREQUEST']._serialized_start=2226 + _globals['_DESTROYDEKREQUEST']._serialized_end=2287 + _globals['_DESTROYMASTERKEYREQUEST']._serialized_start=2289 + _globals['_DESTROYMASTERKEYREQUEST']._serialized_end=2349 + _globals['_KEYMANAGEMENTSERVICE']._serialized_start=2453 + _globals['_KEYMANAGEMENTSERVICE']._serialized_end=6118 +# @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/keys/keys_pb2.pyi b/scalekit/v1/keys/keys_pb2.pyi new file mode 100644 index 0000000..18b70e8 --- /dev/null +++ b/scalekit/v1/keys/keys_pb2.pyi @@ -0,0 +1,178 @@ +from buf.validate import validate_pb2 as _validate_pb2 +from google.api import annotations_pb2 as _annotations_pb2 +from google.api import field_behavior_pb2 as _field_behavior_pb2 +from google.api import visibility_pb2 as _visibility_pb2 +from google.protobuf import empty_pb2 as _empty_pb2 +from google.protobuf import timestamp_pb2 as _timestamp_pb2 +from protoc_gen_openapiv2.options import annotations_pb2 as _annotations_pb2_1 +from scalekit.v1.options import options_pb2 as _options_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class DEKKeyType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + DEK_KEY_TYPE_UNSPECIFIED: _ClassVar[DEKKeyType] + ENVIRONMENT_KEY: _ClassVar[DEKKeyType] + BYOK: _ClassVar[DEKKeyType] + SCALEKIT_MANAGED_KEY: _ClassVar[DEKKeyType] +DEK_KEY_TYPE_UNSPECIFIED: DEKKeyType +ENVIRONMENT_KEY: DEKKeyType +BYOK: DEKKeyType +SCALEKIT_MANAGED_KEY: DEKKeyType + +class CreateDEKRequest(_message.Message): + __slots__ = ("key_type", "provider", "key_ref") + KEY_TYPE_FIELD_NUMBER: _ClassVar[int] + PROVIDER_FIELD_NUMBER: _ClassVar[int] + KEY_REF_FIELD_NUMBER: _ClassVar[int] + key_type: DEKKeyType + provider: str + key_ref: str + def __init__(self, key_type: _Optional[_Union[DEKKeyType, str]] = ..., provider: _Optional[str] = ..., key_ref: _Optional[str] = ...) -> None: ... + +class CreateDEKResponse(_message.Message): + __slots__ = ("dek",) + DEK_FIELD_NUMBER: _ClassVar[int] + dek: EnvironmentKey + def __init__(self, dek: _Optional[_Union[EnvironmentKey, _Mapping]] = ...) -> None: ... + +class RotateDEKRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class RotateDEKResponse(_message.Message): + __slots__ = ("dek",) + DEK_FIELD_NUMBER: _ClassVar[int] + dek: EnvironmentKey + def __init__(self, dek: _Optional[_Union[EnvironmentKey, _Mapping]] = ...) -> None: ... + +class ListDEKsRequest(_message.Message): + __slots__ = ("status", "page_size", "page_token") + STATUS_FIELD_NUMBER: _ClassVar[int] + PAGE_SIZE_FIELD_NUMBER: _ClassVar[int] + PAGE_TOKEN_FIELD_NUMBER: _ClassVar[int] + status: str + page_size: int + page_token: str + def __init__(self, status: _Optional[str] = ..., page_size: _Optional[int] = ..., page_token: _Optional[str] = ...) -> None: ... + +class ListDEKsResponse(_message.Message): + __slots__ = ("deks", "next_page_token", "total_size") + DEKS_FIELD_NUMBER: _ClassVar[int] + NEXT_PAGE_TOKEN_FIELD_NUMBER: _ClassVar[int] + TOTAL_SIZE_FIELD_NUMBER: _ClassVar[int] + deks: _containers.RepeatedCompositeFieldContainer[EnvironmentKey] + next_page_token: str + total_size: int + def __init__(self, deks: _Optional[_Iterable[_Union[EnvironmentKey, _Mapping]]] = ..., next_page_token: _Optional[str] = ..., total_size: _Optional[int] = ...) -> None: ... + +class DeleteDEKRequest(_message.Message): + __slots__ = ("dek_version",) + DEK_VERSION_FIELD_NUMBER: _ClassVar[int] + dek_version: int + def __init__(self, dek_version: _Optional[int] = ...) -> None: ... + +class RotateMasterKeyRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class RotateMasterKeyResponse(_message.Message): + __slots__ = ("new_master_key",) + NEW_MASTER_KEY_FIELD_NUMBER: _ClassVar[int] + new_master_key: MasterKey + def __init__(self, new_master_key: _Optional[_Union[MasterKey, _Mapping]] = ...) -> None: ... + +class EnvironmentKey(_message.Message): + __slots__ = ("id", "environment_id", "dek_version", "master_version", "algorithm", "status", "created_at", "rotated_at") + ID_FIELD_NUMBER: _ClassVar[int] + ENVIRONMENT_ID_FIELD_NUMBER: _ClassVar[int] + DEK_VERSION_FIELD_NUMBER: _ClassVar[int] + MASTER_VERSION_FIELD_NUMBER: _ClassVar[int] + ALGORITHM_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + CREATED_AT_FIELD_NUMBER: _ClassVar[int] + ROTATED_AT_FIELD_NUMBER: _ClassVar[int] + id: str + environment_id: str + dek_version: int + master_version: int + algorithm: str + status: str + created_at: _timestamp_pb2.Timestamp + rotated_at: _timestamp_pb2.Timestamp + def __init__(self, id: _Optional[str] = ..., environment_id: _Optional[str] = ..., dek_version: _Optional[int] = ..., master_version: _Optional[int] = ..., algorithm: _Optional[str] = ..., status: _Optional[str] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., rotated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ... + +class MasterKey(_message.Message): + __slots__ = ("id", "provider", "key_ref", "version", "status", "created_at", "rotated_at") + ID_FIELD_NUMBER: _ClassVar[int] + PROVIDER_FIELD_NUMBER: _ClassVar[int] + KEY_REF_FIELD_NUMBER: _ClassVar[int] + VERSION_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + CREATED_AT_FIELD_NUMBER: _ClassVar[int] + ROTATED_AT_FIELD_NUMBER: _ClassVar[int] + id: str + provider: str + key_ref: str + version: int + status: str + created_at: _timestamp_pb2.Timestamp + rotated_at: _timestamp_pb2.Timestamp + def __init__(self, id: _Optional[str] = ..., provider: _Optional[str] = ..., key_ref: _Optional[str] = ..., version: _Optional[int] = ..., status: _Optional[str] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., rotated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ... + +class CreateMasterKeyRequest(_message.Message): + __slots__ = ("provider", "key_ref", "version") + PROVIDER_FIELD_NUMBER: _ClassVar[int] + KEY_REF_FIELD_NUMBER: _ClassVar[int] + VERSION_FIELD_NUMBER: _ClassVar[int] + provider: str + key_ref: str + version: int + def __init__(self, provider: _Optional[str] = ..., key_ref: _Optional[str] = ..., version: _Optional[int] = ...) -> None: ... + +class CreateMasterKeyResponse(_message.Message): + __slots__ = ("master_key",) + MASTER_KEY_FIELD_NUMBER: _ClassVar[int] + master_key: MasterKey + def __init__(self, master_key: _Optional[_Union[MasterKey, _Mapping]] = ...) -> None: ... + +class SetActiveDEKRequest(_message.Message): + __slots__ = ("dek_version",) + DEK_VERSION_FIELD_NUMBER: _ClassVar[int] + dek_version: int + def __init__(self, dek_version: _Optional[int] = ...) -> None: ... + +class SetActiveDEKResponse(_message.Message): + __slots__ = ("dek",) + DEK_FIELD_NUMBER: _ClassVar[int] + dek: EnvironmentKey + def __init__(self, dek: _Optional[_Union[EnvironmentKey, _Mapping]] = ...) -> None: ... + +class SetActiveMasterKeyRequest(_message.Message): + __slots__ = ("version",) + VERSION_FIELD_NUMBER: _ClassVar[int] + version: int + def __init__(self, version: _Optional[int] = ...) -> None: ... + +class SetActiveMasterKeyResponse(_message.Message): + __slots__ = ("master_key",) + MASTER_KEY_FIELD_NUMBER: _ClassVar[int] + master_key: MasterKey + def __init__(self, master_key: _Optional[_Union[MasterKey, _Mapping]] = ...) -> None: ... + +class DestroyDEKRequest(_message.Message): + __slots__ = ("dek_version",) + DEK_VERSION_FIELD_NUMBER: _ClassVar[int] + dek_version: int + def __init__(self, dek_version: _Optional[int] = ...) -> None: ... + +class DestroyMasterKeyRequest(_message.Message): + __slots__ = ("version",) + VERSION_FIELD_NUMBER: _ClassVar[int] + version: int + def __init__(self, version: _Optional[int] = ...) -> None: ... diff --git a/scalekit/v1/keys/keys_pb2_grpc.py b/scalekit/v1/keys/keys_pb2_grpc.py new file mode 100644 index 0000000..0c7bedb --- /dev/null +++ b/scalekit/v1/keys/keys_pb2_grpc.py @@ -0,0 +1,386 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc + +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 +from scalekit.v1.keys import keys_pb2 as scalekit_dot_v1_dot_keys_dot_keys__pb2 + + +class KeyManagementServiceStub(object): + """KeyManagementService provides operations for managing encryption keys + including Data Encryption Keys (DEKs) and master key rotation. + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.CreateDEK = channel.unary_unary( + '/scalekit.v1.keys.KeyManagementService/CreateDEK', + request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateDEKRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateDEKResponse.FromString, + ) + self.RotateDEK = channel.unary_unary( + '/scalekit.v1.keys.KeyManagementService/RotateDEK', + request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateDEKRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateDEKResponse.FromString, + ) + self.ListDEKs = channel.unary_unary( + '/scalekit.v1.keys.KeyManagementService/ListDEKs', + request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.ListDEKsRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.ListDEKsResponse.FromString, + ) + self.DeleteDEK = channel.unary_unary( + '/scalekit.v1.keys.KeyManagementService/DeleteDEK', + request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.DeleteDEKRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + ) + self.RotateMasterKey = channel.unary_unary( + '/scalekit.v1.keys.KeyManagementService/RotateMasterKey', + request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateMasterKeyRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateMasterKeyResponse.FromString, + ) + self.CreateMasterKey = channel.unary_unary( + '/scalekit.v1.keys.KeyManagementService/CreateMasterKey', + request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateMasterKeyRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateMasterKeyResponse.FromString, + ) + self.SetActiveDEK = channel.unary_unary( + '/scalekit.v1.keys.KeyManagementService/SetActiveDEK', + request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveDEKRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveDEKResponse.FromString, + ) + self.SetActiveMasterKey = channel.unary_unary( + '/scalekit.v1.keys.KeyManagementService/SetActiveMasterKey', + request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveMasterKeyRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveMasterKeyResponse.FromString, + ) + self.DestroyDEK = channel.unary_unary( + '/scalekit.v1.keys.KeyManagementService/DestroyDEK', + request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.DestroyDEKRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + ) + self.DestroyMasterKey = channel.unary_unary( + '/scalekit.v1.keys.KeyManagementService/DestroyMasterKey', + request_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.DestroyMasterKeyRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + ) + + +class KeyManagementServiceServicer(object): + """KeyManagementService provides operations for managing encryption keys + including Data Encryption Keys (DEKs) and master key rotation. + """ + + def CreateDEK(self, request, context): + """CreateDEK creates a new Data Encryption Key (DEK) for an environment. + If a DEK already exists, this will create a new version. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def RotateDEK(self, request, context): + """RotateDEK creates a new DEK version for an environment. + Re-encrypts existing data (oidc_client_secrets, connection client_secrets) and deprecates old DEK versions. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListDEKs(self, request, context): + """ListDEKs lists DEKs for an environment with pagination. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DeleteDEK(self, request, context): + """DeleteDEK deprecates or permanently deletes a DEK version. + Deprecated DEKs can still be used for decryption but not for encryption. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def RotateMasterKey(self, request, context): + """RotateMasterKey rotates the master key and rewraps all DEKs. + This operation is idempotent and supports zero-downtime rotation. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CreateMasterKey(self, request, context): + """CreateMasterKey creates a new master key version (in a non-active state). + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def SetActiveDEK(self, request, context): + """SetActiveDEK sets a specific DEK version as active for an environment. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def SetActiveMasterKey(self, request, context): + """SetActiveMasterKey sets a specific master key version as active. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DestroyDEK(self, request, context): + """DestroyDEK permanently deletes a DEK version. + WARNING: This operation is irreversible and will make data encrypted with this DEK unrecoverable. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DestroyMasterKey(self, request, context): + """DestroyMasterKey permanently deletes a master key version. + WARNING: This operation is irreversible and will make DEKs wrapped with this master key unrecoverable. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_KeyManagementServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'CreateDEK': grpc.unary_unary_rpc_method_handler( + servicer.CreateDEK, + request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateDEKRequest.FromString, + response_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateDEKResponse.SerializeToString, + ), + 'RotateDEK': grpc.unary_unary_rpc_method_handler( + servicer.RotateDEK, + request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateDEKRequest.FromString, + response_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateDEKResponse.SerializeToString, + ), + 'ListDEKs': grpc.unary_unary_rpc_method_handler( + servicer.ListDEKs, + request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.ListDEKsRequest.FromString, + response_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.ListDEKsResponse.SerializeToString, + ), + 'DeleteDEK': grpc.unary_unary_rpc_method_handler( + servicer.DeleteDEK, + request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.DeleteDEKRequest.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), + 'RotateMasterKey': grpc.unary_unary_rpc_method_handler( + servicer.RotateMasterKey, + request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateMasterKeyRequest.FromString, + response_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateMasterKeyResponse.SerializeToString, + ), + 'CreateMasterKey': grpc.unary_unary_rpc_method_handler( + servicer.CreateMasterKey, + request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateMasterKeyRequest.FromString, + response_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateMasterKeyResponse.SerializeToString, + ), + 'SetActiveDEK': grpc.unary_unary_rpc_method_handler( + servicer.SetActiveDEK, + request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveDEKRequest.FromString, + response_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveDEKResponse.SerializeToString, + ), + 'SetActiveMasterKey': grpc.unary_unary_rpc_method_handler( + servicer.SetActiveMasterKey, + request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveMasterKeyRequest.FromString, + response_serializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveMasterKeyResponse.SerializeToString, + ), + 'DestroyDEK': grpc.unary_unary_rpc_method_handler( + servicer.DestroyDEK, + request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.DestroyDEKRequest.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), + 'DestroyMasterKey': grpc.unary_unary_rpc_method_handler( + servicer.DestroyMasterKey, + request_deserializer=scalekit_dot_v1_dot_keys_dot_keys__pb2.DestroyMasterKeyRequest.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'scalekit.v1.keys.KeyManagementService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + # This class is part of an EXPERIMENTAL API. +class KeyManagementService(object): + """KeyManagementService provides operations for managing encryption keys + including Data Encryption Keys (DEKs) and master key rotation. + """ + + @staticmethod + def CreateDEK(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/CreateDEK', + scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateDEKRequest.SerializeToString, + scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateDEKResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def RotateDEK(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/RotateDEK', + scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateDEKRequest.SerializeToString, + scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateDEKResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def ListDEKs(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/ListDEKs', + scalekit_dot_v1_dot_keys_dot_keys__pb2.ListDEKsRequest.SerializeToString, + scalekit_dot_v1_dot_keys_dot_keys__pb2.ListDEKsResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def DeleteDEK(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/DeleteDEK', + scalekit_dot_v1_dot_keys_dot_keys__pb2.DeleteDEKRequest.SerializeToString, + google_dot_protobuf_dot_empty__pb2.Empty.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def RotateMasterKey(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/RotateMasterKey', + scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateMasterKeyRequest.SerializeToString, + scalekit_dot_v1_dot_keys_dot_keys__pb2.RotateMasterKeyResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def CreateMasterKey(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/CreateMasterKey', + scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateMasterKeyRequest.SerializeToString, + scalekit_dot_v1_dot_keys_dot_keys__pb2.CreateMasterKeyResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def SetActiveDEK(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/SetActiveDEK', + scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveDEKRequest.SerializeToString, + scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveDEKResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def SetActiveMasterKey(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/SetActiveMasterKey', + scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveMasterKeyRequest.SerializeToString, + scalekit_dot_v1_dot_keys_dot_keys__pb2.SetActiveMasterKeyResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def DestroyDEK(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/DestroyDEK', + scalekit_dot_v1_dot_keys_dot_keys__pb2.DestroyDEKRequest.SerializeToString, + google_dot_protobuf_dot_empty__pb2.Empty.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def DestroyMasterKey(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.keys.KeyManagementService/DestroyMasterKey', + scalekit_dot_v1_dot_keys_dot_keys__pb2.DestroyMasterKeyRequest.SerializeToString, + google_dot_protobuf_dot_empty__pb2.Empty.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/members/members_pb2.py b/scalekit/v1/members/members_pb2.py index 277d8bf..e7f4dd8 100644 --- a/scalekit/v1/members/members_pb2.py +++ b/scalekit/v1/members/members_pb2.py @@ -15,6 +15,7 @@ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2 +from google.api import visibility_pb2 as google_dot_api_dot_visibility__pb2 from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 from protoc_gen_openapiv2.options import annotations_pb2 as protoc__gen__openapiv2_dot_options_dot_annotations__pb2 @@ -23,7 +24,7 @@ from scalekit.v1.users import users_pb2 as scalekit_dot_v1_dot_users_dot_users__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/members/members.proto\x12\x13scalekit.v1.members\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\x1a\x1dscalekit/v1/users/users.proto\"\xba\x07\n\x06Member\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12;\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12;\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nupdateTime\x12!\n\x0cworkspace_id\x18\x04 \x01(\tR\x0bworkspaceId\x12\x33\n\x04role\x18\x05 \x01(\x0e\x32\x1f.scalekit.v1.members.MemberRoleR\x04role\x12,\n\nfirst_name\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\x18\xc8\x01H\x00R\tfirstName\x88\x01\x01\x12*\n\tlast_name\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\x18\xc8\x01H\x01R\x08lastName\x88\x01\x01\x12\x1d\n\x05\x65mail\x18\x08 \x01(\tB\x07\xbaH\x04r\x02`\x01R\x05\x65mail\x12`\n\x08metadata\x18\t \x03(\x0b\x32).scalekit.v1.members.Member.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12V\n\rorganizations\x18\n \x03(\x0b\x32+.scalekit.v1.commons.OrganizationMembershipB\x03\xe0\x41\x03R\rorganizations\x12\x43\n\x0cuser_profile\x18\x0b \x01(\x0b\x32 .scalekit.v1.commons.UserProfileR\x0buserProfile\x12$\n\x0b\x65xternal_id\x18\x0c \x01(\tB\x03\xe0\x41\x03R\nexternalId\x12#\n\rworkspace_ids\x18\r \x03(\tR\x0cworkspaceIds\x12\x8f\x01\n\x1c\x61\x63tive_workspace_external_id\x18\x0e \x01(\tBI\x92\x41\x43\x32(Members session current active workspaceJ\x17\"org_72289897007874151\"\xe0\x41\x03H\x02R\x19\x61\x63tiveWorkspaceExternalId\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\r\n\x0b_first_nameB\x0c\n\n_last_nameB\x1f\n\x1d_active_workspace_external_id\"R\n\x13\x43reateMemberRequest\x12;\n\x06member\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.members.MemberB\x06\xbaH\x03\xc8\x01\x01R\x06member\"K\n\x14\x43reateMemberResponse\x12\x33\n\x06member\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.members.MemberR\x06member\"\x83\x03\n\x0cUpdateMember\x12.\n\nfirst_name\x18\x06 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01H\x00R\tfirstName\x88\x01\x01\x12,\n\tlast_name\x18\x07 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01H\x01R\x08lastName\x88\x01\x01\x12\x66\n\x08metadata\x18\t \x03(\x0b\x32/.scalekit.v1.members.UpdateMember.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12G\n\x0cuser_profile\x18\n \x01(\x0b\x32$.scalekit.v1.users.UpdateUserProfileR\x0buserProfile\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\r\n\x0b_first_nameB\x0c\n\n_last_nameJ\x04\x08\x04\x10\x05J\x04\x08\x08\x10\t\"W\n\x1aUpdateCurrentMemberRequest\x12\x39\n\x06member\x18\x01 \x01(\x0b\x32!.scalekit.v1.members.UpdateMemberR\x06member\"k\n\x13UpdateMemberRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x13\x18\x19R\x02id\x12\x39\n\x06member\x18\x02 \x01(\x0b\x32!.scalekit.v1.members.UpdateMemberR\x06member\"K\n\x14UpdateMemberResponse\x12\x33\n\x06member\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.members.MemberR\x06member\"\x19\n\x17GetCurrentMemberRequest\"-\n\x10GetMemberRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x13\x18\x19R\x02id\"H\n\x11GetMemberResponse\x12\x33\n\x06member\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.members.MemberR\x06member\"O\n\x11ListMemberRequest\x12\x1b\n\tpage_size\x18\x01 \x01(\rR\x08pageSize\x12\x1d\n\npage_token\x18\x02 \x01(\tR\tpageToken\"\x92\x01\n\x12ListMemberResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12\x35\n\x07members\x18\x03 \x03(\x0b\x32\x1b.scalekit.v1.members.MemberR\x07members\"0\n\x13\x44\x65leteMemberRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x13\x18\x19R\x02id*>\n\nMemberRole\x12\x1b\n\x17MEMBER_ROLE_UNSPECIFIED\x10\x00\x12\t\n\x05\x41\x44MIN\x10\x01\x12\x08\n\x04USER\x10\x02\x32\xd3\x07\n\x0eMembersService\x12\x8a\x01\n\x0c\x43reateMember\x12(.scalekit.v1.members.CreateMemberRequest\x1a).scalekit.v1.members.CreateMemberResponse\"%\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x19\"\x0f/api/v1/members:\x06member\x12\x9d\x01\n\x13UpdateCurrentMember\x12/.scalekit.v1.members.UpdateCurrentMemberRequest\x1a).scalekit.v1.members.UpdateMemberResponse\"*\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1e\x32\x14/api/v1/members:this:\x06member\x12\x8f\x01\n\x0cUpdateMember\x12(.scalekit.v1.members.UpdateMemberRequest\x1a).scalekit.v1.members.UpdateMemberResponse\"*\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1e\x32\x14/api/v1/members/{id}:\x06member\x12\x8c\x01\n\x10GetCurrentMember\x12,.scalekit.v1.members.GetCurrentMemberRequest\x1a&.scalekit.v1.members.GetMemberResponse\"\"\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/members:this\x12~\n\tGetMember\x12%.scalekit.v1.members.GetMemberRequest\x1a&.scalekit.v1.members.GetMemberResponse\"\"\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/members/{id}\x12}\n\x0bListMembers\x12&.scalekit.v1.members.ListMemberRequest\x1a\'.scalekit.v1.members.ListMemberResponse\"\x1d\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x11\x12\x0f/api/v1/members\x12t\n\x0c\x44\x65leteMember\x12(.scalekit.v1.members.DeleteMemberRequest\x1a\x16.google.protobuf.Empty\"\"\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x16*\x14/api/v1/members/{id}B3Z1github.com/scalekit-inc/scalekit/pkg/grpc/membersb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/members/members.proto\x12\x13scalekit.v1.members\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\x1a\x1dscalekit/v1/users/users.proto\"\xba\x07\n\x06Member\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12;\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12;\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nupdateTime\x12!\n\x0cworkspace_id\x18\x04 \x01(\tR\x0bworkspaceId\x12\x33\n\x04role\x18\x05 \x01(\x0e\x32\x1f.scalekit.v1.members.MemberRoleR\x04role\x12,\n\nfirst_name\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\x18\xc8\x01H\x00R\tfirstName\x88\x01\x01\x12*\n\tlast_name\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\x18\xc8\x01H\x01R\x08lastName\x88\x01\x01\x12\x1d\n\x05\x65mail\x18\x08 \x01(\tB\x07\xbaH\x04r\x02`\x01R\x05\x65mail\x12`\n\x08metadata\x18\t \x03(\x0b\x32).scalekit.v1.members.Member.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12V\n\rorganizations\x18\n \x03(\x0b\x32+.scalekit.v1.commons.OrganizationMembershipB\x03\xe0\x41\x03R\rorganizations\x12\x43\n\x0cuser_profile\x18\x0b \x01(\x0b\x32 .scalekit.v1.commons.UserProfileR\x0buserProfile\x12$\n\x0b\x65xternal_id\x18\x0c \x01(\tB\x03\xe0\x41\x03R\nexternalId\x12#\n\rworkspace_ids\x18\r \x03(\tR\x0cworkspaceIds\x12\x8f\x01\n\x1c\x61\x63tive_workspace_external_id\x18\x0e \x01(\tBI\x92\x41\x43\x32(Members session current active workspaceJ\x17\"org_72289897007874151\"\xe0\x41\x03H\x02R\x19\x61\x63tiveWorkspaceExternalId\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\r\n\x0b_first_nameB\x0c\n\n_last_nameB\x1f\n\x1d_active_workspace_external_id\"R\n\x13\x43reateMemberRequest\x12;\n\x06member\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.members.MemberB\x06\xbaH\x03\xc8\x01\x01R\x06member\"K\n\x14\x43reateMemberResponse\x12\x33\n\x06member\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.members.MemberR\x06member\"\x83\x03\n\x0cUpdateMember\x12.\n\nfirst_name\x18\x06 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01H\x00R\tfirstName\x88\x01\x01\x12,\n\tlast_name\x18\x07 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01H\x01R\x08lastName\x88\x01\x01\x12\x66\n\x08metadata\x18\t \x03(\x0b\x32/.scalekit.v1.members.UpdateMember.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12G\n\x0cuser_profile\x18\n \x01(\x0b\x32$.scalekit.v1.users.UpdateUserProfileR\x0buserProfile\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\r\n\x0b_first_nameB\x0c\n\n_last_nameJ\x04\x08\x04\x10\x05J\x04\x08\x08\x10\t\"W\n\x1aUpdateCurrentMemberRequest\x12\x39\n\x06member\x18\x01 \x01(\x0b\x32!.scalekit.v1.members.UpdateMemberR\x06member\"k\n\x13UpdateMemberRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x13\x18\x19R\x02id\x12\x39\n\x06member\x18\x02 \x01(\x0b\x32!.scalekit.v1.members.UpdateMemberR\x06member\"K\n\x14UpdateMemberResponse\x12\x33\n\x06member\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.members.MemberR\x06member\"\x19\n\x17GetCurrentMemberRequest\"-\n\x10GetMemberRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x13\x18\x19R\x02id\"H\n\x11GetMemberResponse\x12\x33\n\x06member\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.members.MemberR\x06member\"O\n\x11ListMemberRequest\x12\x1b\n\tpage_size\x18\x01 \x01(\rR\x08pageSize\x12\x1d\n\npage_token\x18\x02 \x01(\tR\tpageToken\"\x92\x01\n\x12ListMemberResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12\x35\n\x07members\x18\x03 \x03(\x0b\x32\x1b.scalekit.v1.members.MemberR\x07members\"0\n\x13\x44\x65leteMemberRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x13\x18\x19R\x02id*>\n\nMemberRole\x12\x1b\n\x17MEMBER_ROLE_UNSPECIFIED\x10\x00\x12\t\n\x05\x41\x44MIN\x10\x01\x12\x08\n\x04USER\x10\x02\x32\xbf\x08\n\x0eMembersService\x12\x99\x01\n\x0c\x43reateMember\x12(.scalekit.v1.members.CreateMemberRequest\x1a).scalekit.v1.members.CreateMemberResponse\"4\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\"\x0f/api/v1/members:\x06member\x12\xac\x01\n\x13UpdateCurrentMember\x12/.scalekit.v1.members.UpdateCurrentMemberRequest\x1a).scalekit.v1.members.UpdateMemberResponse\"9\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\x32\x14/api/v1/members:this:\x06member\x12\x9e\x01\n\x0cUpdateMember\x12(.scalekit.v1.members.UpdateMemberRequest\x1a).scalekit.v1.members.UpdateMemberResponse\"9\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\x32\x14/api/v1/members/{id}:\x06member\x12\x9b\x01\n\x10GetCurrentMember\x12,.scalekit.v1.members.GetCurrentMemberRequest\x1a&.scalekit.v1.members.GetMemberResponse\"1\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/members:this\x12\x8d\x01\n\tGetMember\x12%.scalekit.v1.members.GetMemberRequest\x1a&.scalekit.v1.members.GetMemberResponse\"1\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/members/{id}\x12\x8c\x01\n\x0bListMembers\x12&.scalekit.v1.members.ListMemberRequest\x1a\'.scalekit.v1.members.ListMemberResponse\",\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x11\x12\x0f/api/v1/members\x12\x83\x01\n\x0c\x44\x65leteMember\x12(.scalekit.v1.members.DeleteMemberRequest\x1a\x16.google.protobuf.Empty\"1\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x16*\x14/api/v1/members/{id}B3Z1github.com/scalekit-inc/scalekit/pkg/grpc/membersb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -64,51 +65,51 @@ _globals['_DELETEMEMBERREQUEST'].fields_by_name['id']._loaded_options = None _globals['_DELETEMEMBERREQUEST'].fields_by_name['id']._serialized_options = b'\272H\006r\004\020\023\030\031' _globals['_MEMBERSSERVICE'].methods_by_name['CreateMember']._loaded_options = None - _globals['_MEMBERSSERVICE'].methods_by_name['CreateMember']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\031\"\017/api/v1/members:\006member' + _globals['_MEMBERSSERVICE'].methods_by_name['CreateMember']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\031\"\017/api/v1/members:\006member' _globals['_MEMBERSSERVICE'].methods_by_name['UpdateCurrentMember']._loaded_options = None - _globals['_MEMBERSSERVICE'].methods_by_name['UpdateCurrentMember']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\0362\024/api/v1/members:this:\006member' + _globals['_MEMBERSSERVICE'].methods_by_name['UpdateCurrentMember']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\0362\024/api/v1/members:this:\006member' _globals['_MEMBERSSERVICE'].methods_by_name['UpdateMember']._loaded_options = None - _globals['_MEMBERSSERVICE'].methods_by_name['UpdateMember']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\0362\024/api/v1/members/{id}:\006member' + _globals['_MEMBERSSERVICE'].methods_by_name['UpdateMember']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\0362\024/api/v1/members/{id}:\006member' _globals['_MEMBERSSERVICE'].methods_by_name['GetCurrentMember']._loaded_options = None - _globals['_MEMBERSSERVICE'].methods_by_name['GetCurrentMember']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\026\022\024/api/v1/members:this' + _globals['_MEMBERSSERVICE'].methods_by_name['GetCurrentMember']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\026\022\024/api/v1/members:this' _globals['_MEMBERSSERVICE'].methods_by_name['GetMember']._loaded_options = None - _globals['_MEMBERSSERVICE'].methods_by_name['GetMember']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\026\022\024/api/v1/members/{id}' + _globals['_MEMBERSSERVICE'].methods_by_name['GetMember']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\026\022\024/api/v1/members/{id}' _globals['_MEMBERSSERVICE'].methods_by_name['ListMembers']._loaded_options = None - _globals['_MEMBERSSERVICE'].methods_by_name['ListMembers']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\021\022\017/api/v1/members' + _globals['_MEMBERSSERVICE'].methods_by_name['ListMembers']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\021\022\017/api/v1/members' _globals['_MEMBERSSERVICE'].methods_by_name['DeleteMember']._loaded_options = None - _globals['_MEMBERSSERVICE'].methods_by_name['DeleteMember']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\026*\024/api/v1/members/{id}' - _globals['_MEMBERROLE']._serialized_start=2572 - _globals['_MEMBERROLE']._serialized_end=2634 - _globals['_MEMBER']._serialized_start=362 - _globals['_MEMBER']._serialized_end=1316 - _globals['_MEMBER_METADATAENTRY']._serialized_start=1195 - _globals['_MEMBER_METADATAENTRY']._serialized_end=1254 - _globals['_CREATEMEMBERREQUEST']._serialized_start=1318 - _globals['_CREATEMEMBERREQUEST']._serialized_end=1400 - _globals['_CREATEMEMBERRESPONSE']._serialized_start=1402 - _globals['_CREATEMEMBERRESPONSE']._serialized_end=1477 - _globals['_UPDATEMEMBER']._serialized_start=1480 - _globals['_UPDATEMEMBER']._serialized_end=1867 - _globals['_UPDATEMEMBER_METADATAENTRY']._serialized_start=1195 - _globals['_UPDATEMEMBER_METADATAENTRY']._serialized_end=1254 - _globals['_UPDATECURRENTMEMBERREQUEST']._serialized_start=1869 - _globals['_UPDATECURRENTMEMBERREQUEST']._serialized_end=1956 - _globals['_UPDATEMEMBERREQUEST']._serialized_start=1958 - _globals['_UPDATEMEMBERREQUEST']._serialized_end=2065 - _globals['_UPDATEMEMBERRESPONSE']._serialized_start=2067 - _globals['_UPDATEMEMBERRESPONSE']._serialized_end=2142 - _globals['_GETCURRENTMEMBERREQUEST']._serialized_start=2144 - _globals['_GETCURRENTMEMBERREQUEST']._serialized_end=2169 - _globals['_GETMEMBERREQUEST']._serialized_start=2171 - _globals['_GETMEMBERREQUEST']._serialized_end=2216 - _globals['_GETMEMBERRESPONSE']._serialized_start=2218 - _globals['_GETMEMBERRESPONSE']._serialized_end=2290 - _globals['_LISTMEMBERREQUEST']._serialized_start=2292 - _globals['_LISTMEMBERREQUEST']._serialized_end=2371 - _globals['_LISTMEMBERRESPONSE']._serialized_start=2374 - _globals['_LISTMEMBERRESPONSE']._serialized_end=2520 - _globals['_DELETEMEMBERREQUEST']._serialized_start=2522 - _globals['_DELETEMEMBERREQUEST']._serialized_end=2570 - _globals['_MEMBERSSERVICE']._serialized_start=2637 - _globals['_MEMBERSSERVICE']._serialized_end=3616 + _globals['_MEMBERSSERVICE'].methods_by_name['DeleteMember']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\026*\024/api/v1/members/{id}' + _globals['_MEMBERROLE']._serialized_start=2601 + _globals['_MEMBERROLE']._serialized_end=2663 + _globals['_MEMBER']._serialized_start=391 + _globals['_MEMBER']._serialized_end=1345 + _globals['_MEMBER_METADATAENTRY']._serialized_start=1224 + _globals['_MEMBER_METADATAENTRY']._serialized_end=1283 + _globals['_CREATEMEMBERREQUEST']._serialized_start=1347 + _globals['_CREATEMEMBERREQUEST']._serialized_end=1429 + _globals['_CREATEMEMBERRESPONSE']._serialized_start=1431 + _globals['_CREATEMEMBERRESPONSE']._serialized_end=1506 + _globals['_UPDATEMEMBER']._serialized_start=1509 + _globals['_UPDATEMEMBER']._serialized_end=1896 + _globals['_UPDATEMEMBER_METADATAENTRY']._serialized_start=1224 + _globals['_UPDATEMEMBER_METADATAENTRY']._serialized_end=1283 + _globals['_UPDATECURRENTMEMBERREQUEST']._serialized_start=1898 + _globals['_UPDATECURRENTMEMBERREQUEST']._serialized_end=1985 + _globals['_UPDATEMEMBERREQUEST']._serialized_start=1987 + _globals['_UPDATEMEMBERREQUEST']._serialized_end=2094 + _globals['_UPDATEMEMBERRESPONSE']._serialized_start=2096 + _globals['_UPDATEMEMBERRESPONSE']._serialized_end=2171 + _globals['_GETCURRENTMEMBERREQUEST']._serialized_start=2173 + _globals['_GETCURRENTMEMBERREQUEST']._serialized_end=2198 + _globals['_GETMEMBERREQUEST']._serialized_start=2200 + _globals['_GETMEMBERREQUEST']._serialized_end=2245 + _globals['_GETMEMBERRESPONSE']._serialized_start=2247 + _globals['_GETMEMBERRESPONSE']._serialized_end=2319 + _globals['_LISTMEMBERREQUEST']._serialized_start=2321 + _globals['_LISTMEMBERREQUEST']._serialized_end=2400 + _globals['_LISTMEMBERRESPONSE']._serialized_start=2403 + _globals['_LISTMEMBERRESPONSE']._serialized_end=2549 + _globals['_DELETEMEMBERREQUEST']._serialized_start=2551 + _globals['_DELETEMEMBERREQUEST']._serialized_end=2599 + _globals['_MEMBERSSERVICE']._serialized_start=2666 + _globals['_MEMBERSSERVICE']._serialized_end=3753 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/members/members_pb2.pyi b/scalekit/v1/members/members_pb2.pyi index 23e0f61..beac5a8 100644 --- a/scalekit/v1/members/members_pb2.pyi +++ b/scalekit/v1/members/members_pb2.pyi @@ -1,6 +1,7 @@ from buf.validate import validate_pb2 as _validate_pb2 from google.api import annotations_pb2 as _annotations_pb2 from google.api import field_behavior_pb2 as _field_behavior_pb2 +from google.api import visibility_pb2 as _visibility_pb2 from google.protobuf import empty_pb2 as _empty_pb2 from google.protobuf import timestamp_pb2 as _timestamp_pb2 from protoc_gen_openapiv2.options import annotations_pb2 as _annotations_pb2_1 diff --git a/scalekit/v1/migrations/migrations_pb2.py b/scalekit/v1/migrations/migrations_pb2.py index 386aa80..9eadb56 100644 --- a/scalekit/v1/migrations/migrations_pb2.py +++ b/scalekit/v1/migrations/migrations_pb2.py @@ -21,7 +21,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'scalekit/v1/migrations/migrations.proto\x12\x16scalekit.v1.migrations\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"~\n\x18MigrationServiceResponse\x12\x31\n\x14success_environments\x18\x01 \x01(\x05R\x13successEnvironments\x12/\n\x13\x66\x61iled_environments\x18\x02 \x01(\x05R\x12\x66\x61iledEnvironments\"f\n\x14MigrationSAMLRequest\x12\'\n\x0f\x65nvironment_ids\x18\x01 \x03(\x03R\x0e\x65nvironmentIds\x12%\n\nbatch_size\x18\x02 \x01(\x05\x42\x06\xbaH\x03\xc8\x01\x01R\tbatchSize\"\xad\x01\n\x11MigrateFSARequest\x12\'\n\x0f\x65nvironment_ids\x18\x01 \x03(\x03R\x0e\x65nvironmentIds\x12H\n\tdata_type\x18\x02 \x01(\x0e\x32#.scalekit.v1.migrations.FSADataTypeB\x06\xbaH\x03\xc8\x01\x01R\x08\x64\x61taType\x12%\n\nbatch_size\x18\x03 \x01(\x05\x42\x06\xbaH\x03\xc8\x01\x01R\tbatchSize\"z\n\x14MigrationFSAResponse\x12\x31\n\x14success_environments\x18\x01 \x01(\x05R\x13successEnvironments\x12/\n\x13\x66\x61iled_environments\x18\x02 \x01(\x05R\x12\x66\x61iledEnvironments\"\x91\x01\n\x1dMigrateStripeCustomersRequest\x12p\n\x18migrate_stripe_customers\x18\x01 \x01(\x0b\x32..scalekit.v1.migrations.MigrateStripeCustomersB\x06\xbaH\x03\xc8\x01\x01R\x16migrateStripeCustomers\"\xad\x01\n\x16MigrateStripeCustomers\x12#\n\rworkspace_ids\x18\x01 \x03(\x03R\x0cworkspaceIds\x12\x1b\n\tplan_name\x18\x02 \x01(\tR\x08planName\x12\x1d\n\nbatch_size\x18\x03 \x01(\x05R\tbatchSize\x12\x32\n\x15include_test_accounts\x18\x04 \x01(\x08R\x13includeTestAccounts\"\xc1\x01\n\x1eMigrateStripeCustomersResponse\x12#\n\rsuccess_count\x18\x01 \x01(\x05R\x0csuccessCount\x12!\n\x0c\x66\x61iled_count\x18\x02 \x01(\x05R\x0b\x66\x61iledCount\x12\x30\n\x14\x66\x61iled_workspace_ids\x18\x03 \x03(\x03R\x12\x66\x61iledWorkspaceIds\x12%\n\x0e\x65rror_messages\x18\x04 \x03(\tR\rerrorMessages\"{\n\x15MigrationSAMLResponse\x12\x31\n\x14success_environments\x18\x01 \x01(\x05R\x13successEnvironments\x12/\n\x13\x66\x61iled_environments\x18\x02 \x01(\x05R\x12\x66\x61iledEnvironments\"\x96\x02\n\x1aMigrateWorkspaceFGARequest\x12#\n\rworkspace_ids\x18\x01 \x03(\x03R\x0cworkspaceIds\x12\x14\n\x05\x61sync\x18\x02 \x01(\x08R\x05\x61sync\x12)\n\x10organization_ids\x18\x03 \x03(\x03R\x0forganizationIds\x12#\n\rdirectory_ids\x18\x04 \x03(\x03R\x0c\x64irectoryIds\x12%\n\x0e\x63onnection_ids\x18\x05 \x03(\x03R\rconnectionIds\x12\x1d\n\nclient_ids\x18\x06 \x03(\x03R\tclientIds\x12\'\n\x0f\x65nvironment_ids\x18\x07 \x03(\x03R\x0e\x65nvironmentIds\"2\n\x0ePermissionList\x12 \n\x0bpermissions\x18\x01 \x03(\tR\x0bpermissions\"\xbb\x02\n\x1dMigrateRolePermissionsRequest\x12}\n\x10role_permissions\x18\x01 \x03(\x0b\x32J.scalekit.v1.migrations.MigrateRolePermissionsRequest.RolePermissionsEntryB\x06\xbaH\x03\xc8\x01\x01R\x0frolePermissions\x12/\n\x0f\x65nvironment_ids\x18\x02 \x03(\x03\x42\x06\xbaH\x03\xc8\x01\x01R\x0e\x65nvironmentIds\x1aj\n\x14RolePermissionsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12<\n\x05value\x18\x02 \x01(\x0b\x32&.scalekit.v1.migrations.PermissionListR\x05value:\x02\x38\x01\"\xca\x02\n\x1eMigrateRolePermissionsResponse\x12\x31\n\x14success_environments\x18\x01 \x01(\x05R\x13successEnvironments\x12/\n\x13\x66\x61iled_environments\x18\x02 \x01(\x05R\x12\x66\x61iledEnvironments\x12%\n\x0e\x65rror_messages\x18\x03 \x03(\tR\rerrorMessages\x12#\n\rroles_created\x18\x04 \x01(\x05R\x0crolesCreated\x12/\n\x13permissions_created\x18\x05 \x01(\x05R\x12permissionsCreated\x12G\n role_permission_mappings_created\x18\x06 \x01(\x05R\x1drolePermissionMappingsCreated*\x88\x01\n\x0b\x46SADataType\x12\x1d\n\x19\x46SA_DATA_TYPE_UNSPECIFIED\x10\x00\x12\x1c\n\x18\x46SA_DATA_TYPE_CONNECTION\x10\x01\x12\x19\n\x15\x46SA_DATA_TYPE_SESSION\x10\x02\x12!\n\x1d\x46SA_DATA_TYPE_USER_MANAGEMENT\x10\x03\x32\xf7\x05\n\x10MigrationService\x12\x9c\x01\n\x0eMigrateFSAData\x12).scalekit.v1.migrations.MigrateFSARequest\x1a,.scalekit.v1.migrations.MigrationFSAResponse\"1\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x16\"\x14/migrations/fsa-data\x12\xdc\x01\n\x16MigrateStripeCustomers\x12\x35.scalekit.v1.migrations.MigrateStripeCustomersRequest\x1a\x36.scalekit.v1.migrations.MigrateStripeCustomersResponse\"S\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x38\"\x1c/migrations/stripe-customers:\x18migrate_stripe_customers\x12\x9c\x01\n\x13MigrateWorkspaceFGA\x12\x32.scalekit.v1.migrations.MigrateWorkspaceFGARequest\x1a\x16.google.protobuf.Empty\"9\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\"\x19/migrations/workspace-fga:\x01*\x12\xc5\x01\n\x16MigrateRolePermissions\x12\x35.scalekit.v1.migrations.MigrateRolePermissionsRequest\x1a\x36.scalekit.v1.migrations.MigrateRolePermissionsResponse\"<\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\"\x1c/migrations/role-permissions:\x01*B6Z4github.com/scalekit-inc/scalekit/pkg/grpc/migrationsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'scalekit/v1/migrations/migrations.proto\x12\x16scalekit.v1.migrations\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"@\n\x15MigrateEnvKeysRequest\x12\'\n\x0f\x65nvironment_ids\x18\x01 \x03(\tR\x0e\x65nvironmentIds\"O\n\x16MigrateEnvKeysResponse\x12\x35\n\x16\x65nvironments_processed\x18\x01 \x01(\x05R\x15\x65nvironmentsProcessed\"~\n\x18MigrationServiceResponse\x12\x31\n\x14success_environments\x18\x01 \x01(\x05R\x13successEnvironments\x12/\n\x13\x66\x61iled_environments\x18\x02 \x01(\x05R\x12\x66\x61iledEnvironments\"f\n\x14MigrationSAMLRequest\x12\'\n\x0f\x65nvironment_ids\x18\x01 \x03(\x03R\x0e\x65nvironmentIds\x12%\n\nbatch_size\x18\x02 \x01(\x05\x42\x06\xbaH\x03\xc8\x01\x01R\tbatchSize\"\xad\x01\n\x11MigrateFSARequest\x12\'\n\x0f\x65nvironment_ids\x18\x01 \x03(\x03R\x0e\x65nvironmentIds\x12H\n\tdata_type\x18\x02 \x01(\x0e\x32#.scalekit.v1.migrations.FSADataTypeB\x06\xbaH\x03\xc8\x01\x01R\x08\x64\x61taType\x12%\n\nbatch_size\x18\x03 \x01(\x05\x42\x06\xbaH\x03\xc8\x01\x01R\tbatchSize\"z\n\x14MigrationFSAResponse\x12\x31\n\x14success_environments\x18\x01 \x01(\x05R\x13successEnvironments\x12/\n\x13\x66\x61iled_environments\x18\x02 \x01(\x05R\x12\x66\x61iledEnvironments\"\x91\x01\n\x1dMigrateStripeCustomersRequest\x12p\n\x18migrate_stripe_customers\x18\x01 \x01(\x0b\x32..scalekit.v1.migrations.MigrateStripeCustomersB\x06\xbaH\x03\xc8\x01\x01R\x16migrateStripeCustomers\"\xad\x01\n\x16MigrateStripeCustomers\x12#\n\rworkspace_ids\x18\x01 \x03(\x03R\x0cworkspaceIds\x12\x1b\n\tplan_name\x18\x02 \x01(\tR\x08planName\x12\x1d\n\nbatch_size\x18\x03 \x01(\x05R\tbatchSize\x12\x32\n\x15include_test_accounts\x18\x04 \x01(\x08R\x13includeTestAccounts\"\xc1\x01\n\x1eMigrateStripeCustomersResponse\x12#\n\rsuccess_count\x18\x01 \x01(\x05R\x0csuccessCount\x12!\n\x0c\x66\x61iled_count\x18\x02 \x01(\x05R\x0b\x66\x61iledCount\x12\x30\n\x14\x66\x61iled_workspace_ids\x18\x03 \x03(\x03R\x12\x66\x61iledWorkspaceIds\x12%\n\x0e\x65rror_messages\x18\x04 \x03(\tR\rerrorMessages\"{\n\x15MigrationSAMLResponse\x12\x31\n\x14success_environments\x18\x01 \x01(\x05R\x13successEnvironments\x12/\n\x13\x66\x61iled_environments\x18\x02 \x01(\x05R\x12\x66\x61iledEnvironments\"\x96\x02\n\x1aMigrateWorkspaceFGARequest\x12#\n\rworkspace_ids\x18\x01 \x03(\x03R\x0cworkspaceIds\x12\x14\n\x05\x61sync\x18\x02 \x01(\x08R\x05\x61sync\x12)\n\x10organization_ids\x18\x03 \x03(\x03R\x0forganizationIds\x12#\n\rdirectory_ids\x18\x04 \x03(\x03R\x0c\x64irectoryIds\x12%\n\x0e\x63onnection_ids\x18\x05 \x03(\x03R\rconnectionIds\x12\x1d\n\nclient_ids\x18\x06 \x03(\x03R\tclientIds\x12\'\n\x0f\x65nvironment_ids\x18\x07 \x03(\x03R\x0e\x65nvironmentIds\"2\n\x0ePermissionList\x12 \n\x0bpermissions\x18\x01 \x03(\tR\x0bpermissions\"\xbb\x02\n\x1dMigrateRolePermissionsRequest\x12}\n\x10role_permissions\x18\x01 \x03(\x0b\x32J.scalekit.v1.migrations.MigrateRolePermissionsRequest.RolePermissionsEntryB\x06\xbaH\x03\xc8\x01\x01R\x0frolePermissions\x12/\n\x0f\x65nvironment_ids\x18\x02 \x03(\x03\x42\x06\xbaH\x03\xc8\x01\x01R\x0e\x65nvironmentIds\x1aj\n\x14RolePermissionsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12<\n\x05value\x18\x02 \x01(\x0b\x32&.scalekit.v1.migrations.PermissionListR\x05value:\x02\x38\x01\"\xca\x02\n\x1eMigrateRolePermissionsResponse\x12\x31\n\x14success_environments\x18\x01 \x01(\x05R\x13successEnvironments\x12/\n\x13\x66\x61iled_environments\x18\x02 \x01(\x05R\x12\x66\x61iledEnvironments\x12%\n\x0e\x65rror_messages\x18\x03 \x03(\tR\rerrorMessages\x12#\n\rroles_created\x18\x04 \x01(\x05R\x0crolesCreated\x12/\n\x13permissions_created\x18\x05 \x01(\x05R\x12permissionsCreated\x12G\n role_permission_mappings_created\x18\x06 \x01(\x05R\x1drolePermissionMappingsCreated*\x88\x01\n\x0b\x46SADataType\x12\x1d\n\x19\x46SA_DATA_TYPE_UNSPECIFIED\x10\x00\x12\x1c\n\x18\x46SA_DATA_TYPE_CONNECTION\x10\x01\x12\x19\n\x15\x46SA_DATA_TYPE_SESSION\x10\x02\x12!\n\x1d\x46SA_DATA_TYPE_USER_MANAGEMENT\x10\x03\x32\x8f\n\n\x10MigrationService\x12\x9c\x01\n\x0eMigrateFSAData\x12).scalekit.v1.migrations.MigrateFSARequest\x1a,.scalekit.v1.migrations.MigrationFSAResponse\"1\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x16\"\x14/migrations/fsa-data\x12\xdc\x01\n\x16MigrateStripeCustomers\x12\x35.scalekit.v1.migrations.MigrateStripeCustomersRequest\x1a\x36.scalekit.v1.migrations.MigrateStripeCustomersResponse\"S\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x38\"\x1c/migrations/stripe-customers:\x18migrate_stripe_customers\x12\x9c\x01\n\x13MigrateWorkspaceFGA\x12\x32.scalekit.v1.migrations.MigrateWorkspaceFGARequest\x1a\x16.google.protobuf.Empty\"9\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\"\x19/migrations/workspace-fga:\x01*\x12\xc5\x01\n\x16MigrateRolePermissions\x12\x35.scalekit.v1.migrations.MigrateRolePermissionsRequest\x1a\x36.scalekit.v1.migrations.MigrateRolePermissionsResponse\"<\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\"\x1c/migrations/role-permissions:\x01*\x12\x95\x04\n\x0eMigrateEnvKeys\x12-.scalekit.v1.migrations.MigrateEnvKeysRequest\x1a..scalekit.v1.migrations.MigrateEnvKeysResponse\"\xa3\x03\x92\x41\xeb\x02\n\x0eKey Management\x12&Ensure DEKs for specified environments\x1a\xb0\x02\x45nsures each listed environment has at least one active DEK. Only callable from the Scalekit platform environment. Provide environment_ids (e.g. env_123) in the request. Creates a DEK only for environments that do not have one (idempotent per environment). Use to backfill DEKs for specific environments.\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\"\x14/migrations/env-keys:\x01*B6Z4github.com/scalekit-inc/scalekit/pkg/grpc/migrationsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -51,34 +51,40 @@ _globals['_MIGRATIONSERVICE'].methods_by_name['MigrateWorkspaceFGA']._serialized_options = b'\202\265\030\002\030\001\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\036\"\031/migrations/workspace-fga:\001*' _globals['_MIGRATIONSERVICE'].methods_by_name['MigrateRolePermissions']._loaded_options = None _globals['_MIGRATIONSERVICE'].methods_by_name['MigrateRolePermissions']._serialized_options = b'\202\265\030\002\030\001\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002!\"\034/migrations/role-permissions:\001*' - _globals['_FSADATATYPE']._serialized_start=2464 - _globals['_FSADATATYPE']._serialized_end=2600 - _globals['_MIGRATIONSERVICERESPONSE']._serialized_start=302 - _globals['_MIGRATIONSERVICERESPONSE']._serialized_end=428 - _globals['_MIGRATIONSAMLREQUEST']._serialized_start=430 - _globals['_MIGRATIONSAMLREQUEST']._serialized_end=532 - _globals['_MIGRATEFSAREQUEST']._serialized_start=535 - _globals['_MIGRATEFSAREQUEST']._serialized_end=708 - _globals['_MIGRATIONFSARESPONSE']._serialized_start=710 - _globals['_MIGRATIONFSARESPONSE']._serialized_end=832 - _globals['_MIGRATESTRIPECUSTOMERSREQUEST']._serialized_start=835 - _globals['_MIGRATESTRIPECUSTOMERSREQUEST']._serialized_end=980 - _globals['_MIGRATESTRIPECUSTOMERS']._serialized_start=983 - _globals['_MIGRATESTRIPECUSTOMERS']._serialized_end=1156 - _globals['_MIGRATESTRIPECUSTOMERSRESPONSE']._serialized_start=1159 - _globals['_MIGRATESTRIPECUSTOMERSRESPONSE']._serialized_end=1352 - _globals['_MIGRATIONSAMLRESPONSE']._serialized_start=1354 - _globals['_MIGRATIONSAMLRESPONSE']._serialized_end=1477 - _globals['_MIGRATEWORKSPACEFGAREQUEST']._serialized_start=1480 - _globals['_MIGRATEWORKSPACEFGAREQUEST']._serialized_end=1758 - _globals['_PERMISSIONLIST']._serialized_start=1760 - _globals['_PERMISSIONLIST']._serialized_end=1810 - _globals['_MIGRATEROLEPERMISSIONSREQUEST']._serialized_start=1813 - _globals['_MIGRATEROLEPERMISSIONSREQUEST']._serialized_end=2128 - _globals['_MIGRATEROLEPERMISSIONSREQUEST_ROLEPERMISSIONSENTRY']._serialized_start=2022 - _globals['_MIGRATEROLEPERMISSIONSREQUEST_ROLEPERMISSIONSENTRY']._serialized_end=2128 - _globals['_MIGRATEROLEPERMISSIONSRESPONSE']._serialized_start=2131 - _globals['_MIGRATEROLEPERMISSIONSRESPONSE']._serialized_end=2461 - _globals['_MIGRATIONSERVICE']._serialized_start=2603 - _globals['_MIGRATIONSERVICE']._serialized_end=3362 + _globals['_MIGRATIONSERVICE'].methods_by_name['MigrateEnvKeys']._loaded_options = None + _globals['_MIGRATIONSERVICE'].methods_by_name['MigrateEnvKeys']._serialized_options = b'\222A\353\002\n\016Key Management\022&Ensure DEKs for specified environments\032\260\002Ensures each listed environment has at least one active DEK. Only callable from the Scalekit platform environment. Provide environment_ids (e.g. env_123) in the request. Creates a DEK only for environments that do not have one (idempotent per environment). Use to backfill DEKs for specific environments.\202\265\030\002\030\001\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\031\"\024/migrations/env-keys:\001*' + _globals['_FSADATATYPE']._serialized_start=2611 + _globals['_FSADATATYPE']._serialized_end=2747 + _globals['_MIGRATEENVKEYSREQUEST']._serialized_start=302 + _globals['_MIGRATEENVKEYSREQUEST']._serialized_end=366 + _globals['_MIGRATEENVKEYSRESPONSE']._serialized_start=368 + _globals['_MIGRATEENVKEYSRESPONSE']._serialized_end=447 + _globals['_MIGRATIONSERVICERESPONSE']._serialized_start=449 + _globals['_MIGRATIONSERVICERESPONSE']._serialized_end=575 + _globals['_MIGRATIONSAMLREQUEST']._serialized_start=577 + _globals['_MIGRATIONSAMLREQUEST']._serialized_end=679 + _globals['_MIGRATEFSAREQUEST']._serialized_start=682 + _globals['_MIGRATEFSAREQUEST']._serialized_end=855 + _globals['_MIGRATIONFSARESPONSE']._serialized_start=857 + _globals['_MIGRATIONFSARESPONSE']._serialized_end=979 + _globals['_MIGRATESTRIPECUSTOMERSREQUEST']._serialized_start=982 + _globals['_MIGRATESTRIPECUSTOMERSREQUEST']._serialized_end=1127 + _globals['_MIGRATESTRIPECUSTOMERS']._serialized_start=1130 + _globals['_MIGRATESTRIPECUSTOMERS']._serialized_end=1303 + _globals['_MIGRATESTRIPECUSTOMERSRESPONSE']._serialized_start=1306 + _globals['_MIGRATESTRIPECUSTOMERSRESPONSE']._serialized_end=1499 + _globals['_MIGRATIONSAMLRESPONSE']._serialized_start=1501 + _globals['_MIGRATIONSAMLRESPONSE']._serialized_end=1624 + _globals['_MIGRATEWORKSPACEFGAREQUEST']._serialized_start=1627 + _globals['_MIGRATEWORKSPACEFGAREQUEST']._serialized_end=1905 + _globals['_PERMISSIONLIST']._serialized_start=1907 + _globals['_PERMISSIONLIST']._serialized_end=1957 + _globals['_MIGRATEROLEPERMISSIONSREQUEST']._serialized_start=1960 + _globals['_MIGRATEROLEPERMISSIONSREQUEST']._serialized_end=2275 + _globals['_MIGRATEROLEPERMISSIONSREQUEST_ROLEPERMISSIONSENTRY']._serialized_start=2169 + _globals['_MIGRATEROLEPERMISSIONSREQUEST_ROLEPERMISSIONSENTRY']._serialized_end=2275 + _globals['_MIGRATEROLEPERMISSIONSRESPONSE']._serialized_start=2278 + _globals['_MIGRATEROLEPERMISSIONSRESPONSE']._serialized_end=2608 + _globals['_MIGRATIONSERVICE']._serialized_start=2750 + _globals['_MIGRATIONSERVICE']._serialized_end=4045 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/migrations/migrations_pb2.pyi b/scalekit/v1/migrations/migrations_pb2.pyi index 42ffaf4..720a665 100644 --- a/scalekit/v1/migrations/migrations_pb2.pyi +++ b/scalekit/v1/migrations/migrations_pb2.pyi @@ -24,6 +24,18 @@ FSA_DATA_TYPE_CONNECTION: FSADataType FSA_DATA_TYPE_SESSION: FSADataType FSA_DATA_TYPE_USER_MANAGEMENT: FSADataType +class MigrateEnvKeysRequest(_message.Message): + __slots__ = ("environment_ids",) + ENVIRONMENT_IDS_FIELD_NUMBER: _ClassVar[int] + environment_ids: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, environment_ids: _Optional[_Iterable[str]] = ...) -> None: ... + +class MigrateEnvKeysResponse(_message.Message): + __slots__ = ("environments_processed",) + ENVIRONMENTS_PROCESSED_FIELD_NUMBER: _ClassVar[int] + environments_processed: int + def __init__(self, environments_processed: _Optional[int] = ...) -> None: ... + class MigrationServiceResponse(_message.Message): __slots__ = ("success_environments", "failed_environments") SUCCESS_ENVIRONMENTS_FIELD_NUMBER: _ClassVar[int] diff --git a/scalekit/v1/migrations/migrations_pb2_grpc.py b/scalekit/v1/migrations/migrations_pb2_grpc.py index d5b5796..b039e15 100644 --- a/scalekit/v1/migrations/migrations_pb2_grpc.py +++ b/scalekit/v1/migrations/migrations_pb2_grpc.py @@ -35,6 +35,11 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateRolePermissionsRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateRolePermissionsResponse.FromString, ) + self.MigrateEnvKeys = channel.unary_unary( + '/scalekit.v1.migrations.MigrationService/MigrateEnvKeys', + request_serializer=scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateEnvKeysRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateEnvKeysResponse.FromString, + ) class MigrationServiceServicer(object): @@ -64,6 +69,12 @@ def MigrateRolePermissions(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def MigrateEnvKeys(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def add_MigrationServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -87,6 +98,11 @@ def add_MigrationServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateRolePermissionsRequest.FromString, response_serializer=scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateRolePermissionsResponse.SerializeToString, ), + 'MigrateEnvKeys': grpc.unary_unary_rpc_method_handler( + servicer.MigrateEnvKeys, + request_deserializer=scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateEnvKeysRequest.FromString, + response_serializer=scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateEnvKeysResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'scalekit.v1.migrations.MigrationService', rpc_method_handlers) @@ -164,3 +180,20 @@ def MigrateRolePermissions(request, scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateRolePermissionsResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def MigrateEnvKeys(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.migrations.MigrationService/MigrateEnvKeys', + scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateEnvKeysRequest.SerializeToString, + scalekit_dot_v1_dot_migrations_dot_migrations__pb2.MigrateEnvKeysResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/options/options_pb2.py b/scalekit/v1/options/options_pb2.py index 02373b9..0f7fe0f 100644 --- a/scalekit/v1/options/options_pb2.py +++ b/scalekit/v1/options/options_pb2.py @@ -15,7 +15,7 @@ from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/options/options.proto\x12\x13scalekit.v1.options\x1a google/protobuf/descriptor.proto\"\xbd\x01\n\nAuthOption\x12X\n\x13\x61uthentication_type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.options.AuthenticationTypeR\x12\x61uthenticationType\x12 \n\x0bpermissions\x18\x01 \x03(\tR\x0bpermissions\x12\x33\n\x06policy\x18\x02 \x01(\x0e\x32\x1b.scalekit.v1.options.PolicyR\x06policy**\n\x06Policy\x12\x08\n\x04\x44\x45NY\x10\x00\x12\x0b\n\x07PARTIAL\x10\x01\x12\t\n\x05\x41LLOW\x10\x02*\x8f\x03\n\x12\x41uthenticationType\x12\x0b\n\x07\x42LOCKED\x10\x00\x12\x08\n\x04NONE\x10\x01\x12\r\n\tWORKSPACE\x10@\x12\x13\n\x0f\x43USTOMER_PORTAL\x10 \x12\x0b\n\x07SESSION\x10\x10\x12\x15\n\x11WORKSPACE_SESSION\x10P\x12\x14\n\x10WORKSPACE_CLIENT\x10\x44\x12%\n!WORKSPACE_SESSION_CUSTOMER_PORTAL\x10p\x12,\n(WORKSPACE_SESSION_CUSTOMER_PORTAL_CLIENT\x10t\x12$\n WORKSPACE_CUSTOMER_PORTAL_CLIENT\x10\x64\x12\x1d\n\x19WORKSPACE_CUSTOMER_PORTAL\x10`\x12\x08\n\x04USER\x10\x08\x12\n\n\x06\x43LIENT\x10\x04\x12\x12\n\x0eSESSION_CLIENT\x10\x14\x12\x1c\n\x18WORKSPACE_SESSION_CLIENT\x10T\x12\"\n\x1e\x43USTOMER_PORTAL_SESSION_CLIENT\x10\x34:b\n\x0b\x61uth_option\x12\x1e.google.protobuf.MethodOptions\x18\xd0\x86\x03 \x01(\x0b\x32\x1f.scalekit.v1.options.AuthOptionR\nauthOptionB6Z4github.com/scalekit-inc/scalekit/pkg/grpc/authoptionb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/options/options.proto\x12\x13scalekit.v1.options\x1a google/protobuf/descriptor.proto\"\xbd\x01\n\nAuthOption\x12X\n\x13\x61uthentication_type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.options.AuthenticationTypeR\x12\x61uthenticationType\x12 \n\x0bpermissions\x18\x01 \x03(\tR\x0bpermissions\x12\x33\n\x06policy\x18\x02 \x01(\x0e\x32\x1b.scalekit.v1.options.PolicyR\x06policy**\n\x06Policy\x12\x08\n\x04\x44\x45NY\x10\x00\x12\x0b\n\x07PARTIAL\x10\x01\x12\t\n\x05\x41LLOW\x10\x02*\xd5\x05\n\x12\x41uthenticationType\x12\x0b\n\x07\x42LOCKED\x10\x00\x12\x08\n\x04NONE\x10\x01\x12\r\n\tWORKSPACE\x10@\x12\x13\n\x0f\x43USTOMER_PORTAL\x10 \x12\x0b\n\x07SESSION\x10\x10\x12\x15\n\x11WORKSPACE_SESSION\x10P\x12\x14\n\x10WORKSPACE_CLIENT\x10\x44\x12%\n!WORKSPACE_SESSION_CUSTOMER_PORTAL\x10p\x12,\n(WORKSPACE_SESSION_CUSTOMER_PORTAL_CLIENT\x10t\x12$\n WORKSPACE_CUSTOMER_PORTAL_CLIENT\x10\x64\x12\x1d\n\x19WORKSPACE_CUSTOMER_PORTAL\x10`\x12\x08\n\x04USER\x10\x08\x12\n\n\x06\x43LIENT\x10\x04\x12\x12\n\x0eSESSION_CLIENT\x10\x14\x12\x1c\n\x18WORKSPACE_SESSION_CLIENT\x10T\x12\"\n\x1e\x43USTOMER_PORTAL_SESSION_CLIENT\x10\x34\x12\x10\n\x0cSESSION_USER\x10\x18\x12\x13\n\x0e\x41\x43TIONS_PORTAL\x10\x80\x01\x12\x35\n0WORKSPACE_SESSION_CUSTOMER_PORTAL_ACTIONS_PORTAL\x10\xf0\x01\x12<\n7WORKSPACE_SESSION_CUSTOMER_PORTAL_ACTIONS_PORTAL_CLIENT\x10\xf4\x01\x12\x1d\n\x18WORKSPACE_ACTIONS_PORTAL\x10\xc0\x01\x12$\n\x1fWORKSPACE_ACTIONS_PORTAL_CLIENT\x10\xc4\x01\x12\x34\n/WORKSPACE_ACTIONS_PORTAL_CUSTOMER_PORTAL_CLIENT\x10\xe4\x01\x12-\n(WORKSPACE_CUSTOMER_PORTAL_ACTIONS_PORTAL\x10\xe0\x01:b\n\x0b\x61uth_option\x12\x1e.google.protobuf.MethodOptions\x18\xd0\x86\x03 \x01(\x0b\x32\x1f.scalekit.v1.options.AuthOptionR\nauthOptionB6Z4github.com/scalekit-inc/scalekit/pkg/grpc/authoptionb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -26,7 +26,7 @@ _globals['_POLICY']._serialized_start=284 _globals['_POLICY']._serialized_end=326 _globals['_AUTHENTICATIONTYPE']._serialized_start=329 - _globals['_AUTHENTICATIONTYPE']._serialized_end=728 + _globals['_AUTHENTICATIONTYPE']._serialized_end=1054 _globals['_AUTHOPTION']._serialized_start=93 _globals['_AUTHOPTION']._serialized_end=282 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/options/options_pb2.pyi b/scalekit/v1/options/options_pb2.pyi index 6f4fea7..2017e38 100644 --- a/scalekit/v1/options/options_pb2.pyi +++ b/scalekit/v1/options/options_pb2.pyi @@ -31,6 +31,14 @@ class AuthenticationType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): SESSION_CLIENT: _ClassVar[AuthenticationType] WORKSPACE_SESSION_CLIENT: _ClassVar[AuthenticationType] CUSTOMER_PORTAL_SESSION_CLIENT: _ClassVar[AuthenticationType] + SESSION_USER: _ClassVar[AuthenticationType] + ACTIONS_PORTAL: _ClassVar[AuthenticationType] + WORKSPACE_SESSION_CUSTOMER_PORTAL_ACTIONS_PORTAL: _ClassVar[AuthenticationType] + WORKSPACE_SESSION_CUSTOMER_PORTAL_ACTIONS_PORTAL_CLIENT: _ClassVar[AuthenticationType] + WORKSPACE_ACTIONS_PORTAL: _ClassVar[AuthenticationType] + WORKSPACE_ACTIONS_PORTAL_CLIENT: _ClassVar[AuthenticationType] + WORKSPACE_ACTIONS_PORTAL_CUSTOMER_PORTAL_CLIENT: _ClassVar[AuthenticationType] + WORKSPACE_CUSTOMER_PORTAL_ACTIONS_PORTAL: _ClassVar[AuthenticationType] DENY: Policy PARTIAL: Policy ALLOW: Policy @@ -50,6 +58,14 @@ CLIENT: AuthenticationType SESSION_CLIENT: AuthenticationType WORKSPACE_SESSION_CLIENT: AuthenticationType CUSTOMER_PORTAL_SESSION_CLIENT: AuthenticationType +SESSION_USER: AuthenticationType +ACTIONS_PORTAL: AuthenticationType +WORKSPACE_SESSION_CUSTOMER_PORTAL_ACTIONS_PORTAL: AuthenticationType +WORKSPACE_SESSION_CUSTOMER_PORTAL_ACTIONS_PORTAL_CLIENT: AuthenticationType +WORKSPACE_ACTIONS_PORTAL: AuthenticationType +WORKSPACE_ACTIONS_PORTAL_CLIENT: AuthenticationType +WORKSPACE_ACTIONS_PORTAL_CUSTOMER_PORTAL_CLIENT: AuthenticationType +WORKSPACE_CUSTOMER_PORTAL_ACTIONS_PORTAL: AuthenticationType AUTH_OPTION_FIELD_NUMBER: _ClassVar[int] auth_option: _descriptor.FieldDescriptor diff --git a/scalekit/v1/providers/providers_pb2.py b/scalekit/v1/providers/providers_pb2.py index 4dcb5cf..ecde0df 100644 --- a/scalekit/v1/providers/providers_pb2.py +++ b/scalekit/v1/providers/providers_pb2.py @@ -23,7 +23,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%scalekit/v1/providers/providers.proto\x12\x15scalekit.v1.providers\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\x89\x03\n\x08Provider\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1e\n\nidentifier\x18\x02 \x01(\tR\nidentifier\x12!\n\x0c\x64isplay_name\x18\x03 \x01(\tR\x0b\x64isplayName\x12 \n\x0b\x64\x65scription\x18\x04 \x01(\tR\x0b\x64\x65scription\x12\x1e\n\ncategories\x18\x05 \x03(\tR\ncategories\x12?\n\rauth_patterns\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.ListValueR\x0c\x61uthPatterns\x12\x19\n\x08icon_src\x18\x07 \x01(\tR\x07iconSrc\x12)\n\x10\x64isplay_priority\x18\x08 \x01(\x05R\x0f\x64isplayPriority\x12\x1f\n\x0b\x63oming_soon\x18\t \x01(\x08R\ncomingSoon\x12\x1b\n\tproxy_url\x18\n \x01(\tR\x08proxyUrl\x12#\n\rproxy_enabled\x18\x0b \x01(\x08R\x0cproxyEnabled\"\x81\n\n\x0e\x43reateProvider\x12\x87\x01\n\nidentifier\x18\x02 \x01(\tBg\x92\x41\x46\x32\x30Unique identifier for the connected app providerJ\x12\"google_workspace\"\xbaH\x1br\x16\x10\x01\x18\x64\x32\x10^[a-zA-Z0-9_-]*$\xc8\x01\x01R\nidentifier\x12t\n\x0c\x64isplay_name\x18\x03 \x01(\tBQ\x92\x41\x41\x32+Display name for the connected app providerJ\x12\"Google Workspace\"\xbaH\nr\x05\x10\x01\x18\xc8\x01\xc8\x01\x01R\x0b\x64isplayName\x12\x92\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tBp\x92\x41m2)Description of the connected app providerJ@\"Connect to Google Workspace for email and calendar integration\"R\x0b\x64\x65scription\x12i\n\ncategories\x18\x05 \x03(\tBI\x92\x41\x46\x32)Categories for the connected app providerJ\x19[\"productivity\", \"email\"]R\ncategories\x12\x82\x01\n\rauth_patterns\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.ListValueBA\x92\x41\x38\x32\x36\x41uthentication patterns for the connected app provider\xbaH\x03\xc8\x01\x01R\x0c\x61uthPatterns\x12\x82\x01\n\x08icon_src\x18\x07 \x01(\tBg\x92\x41\x64\x32/Image source URL for the connected app providerJ1\"https://example.com/images/google_workspace.png\"R\x07iconSrc\x12)\n\x10\x64isplay_priority\x18\x08 \x01(\x05R\x0f\x64isplayPriority\x12\x63\n\x0b\x63oming_soon\x18\t \x01(\x08\x42\x42\x92\x41?26Indicates if the connected app provider is coming soonJ\x05\x66\x61lseR\ncomingSoon\x12k\n\tproxy_url\x18\n \x01(\tBN\x92\x41K2(Proxy URL for the connected app providerJ\x1f\"https://workspace.google.com/\"R\x08proxyUrl\x12\xe1\x01\n\rproxy_enabled\x18\x0b \x01(\x08\x42\xbb\x01\x92\x41\xb7\x01\x32\xae\x01This flag indicates whether proxying is turned on for the connected app provider. When enabled, requests are routed through the provider proxy instead of being sent directly.J\x04trueR\x0cproxyEnabledJ\x04\x08\x01\x10\x02\"\x96\x01\n\x15\x43reateProviderRequest\x12}\n\x08provider\x18\x01 \x01(\x0b\x32%.scalekit.v1.providers.CreateProviderB:\x92\x41\x31\x32/Details of the connected app provider to create\xbaH\x03\xc8\x01\x01R\x08provider\"U\n\x16\x43reateProviderResponse\x12;\n\x08provider\x18\x01 \x01(\x0b\x32\x1f.scalekit.v1.providers.ProviderR\x08provider\"\xb9\x08\n\x0eUpdateProvider\x12t\n\x0c\x64isplay_name\x18\x03 \x01(\tBQ\x92\x41\x41\x32+Display name for the connected app providerJ\x12\"Google Workspace\"\xbaH\nr\x05\x10\x01\x18\xc8\x01\xc8\x01\x01R\x0b\x64isplayName\x12\x92\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tBp\x92\x41m2)Description of the connected app providerJ@\"Connect to Google Workspace for email and calendar integration\"R\x0b\x64\x65scription\x12i\n\ncategories\x18\x05 \x03(\tBI\x92\x41\x46\x32)Categories for the connected app providerJ\x19[\"productivity\", \"email\"]R\ncategories\x12|\n\rauth_patterns\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.ListValueB;\x92\x41\x38\x32\x36\x41uthentication patterns for the connected app providerR\x0c\x61uthPatterns\x12\x82\x01\n\x08icon_src\x18\x07 \x01(\tBg\x92\x41\x64\x32/Image source URL for the connected app providerJ1\"https://example.com/images/google_workspace.png\"R\x07iconSrc\x12)\n\x10\x64isplay_priority\x18\x08 \x01(\x05R\x0f\x64isplayPriority\x12\x7f\n\x0b\x63oming_soon\x18\t \x01(\x0b\x32\x1a.google.protobuf.BoolValueBB\x92\x41?26Indicates if the connected app provider is coming soonJ\x05\x66\x61lseR\ncomingSoon\x12k\n\tproxy_url\x18\n \x01(\tBN\x92\x41K2(Proxy URL for the connected app providerJ\x1f\"https://workspace.google.com/\"R\x08proxyUrl\x12\x88\x01\n\rproxy_enabled\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.BoolValueBG\x92\x41\x44\x32 None: ... + is_custom: bool + is_custom_mcp: bool + def __init__(self, id: _Optional[str] = ..., identifier: _Optional[str] = ..., display_name: _Optional[str] = ..., description: _Optional[str] = ..., categories: _Optional[_Iterable[str]] = ..., auth_patterns: _Optional[_Union[_struct_pb2.ListValue, _Mapping]] = ..., icon_src: _Optional[str] = ..., display_priority: _Optional[int] = ..., coming_soon: bool = ..., proxy_url: _Optional[str] = ..., proxy_enabled: bool = ..., is_custom: bool = ..., is_custom_mcp: bool = ...) -> None: ... class CreateProvider(_message.Message): __slots__ = ("identifier", "display_name", "description", "categories", "auth_patterns", "icon_src", "display_priority", "coming_soon", "proxy_url", "proxy_enabled") @@ -70,6 +84,28 @@ class CreateProviderRequest(_message.Message): provider: CreateProvider def __init__(self, provider: _Optional[_Union[CreateProvider, _Mapping]] = ...) -> None: ... +class CreateCustomProvider(_message.Message): + __slots__ = ("display_name", "description", "auth_patterns", "proxy_url", "proxy_enabled", "icon_src") + DISPLAY_NAME_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + AUTH_PATTERNS_FIELD_NUMBER: _ClassVar[int] + PROXY_URL_FIELD_NUMBER: _ClassVar[int] + PROXY_ENABLED_FIELD_NUMBER: _ClassVar[int] + ICON_SRC_FIELD_NUMBER: _ClassVar[int] + display_name: str + description: str + auth_patterns: _struct_pb2.ListValue + proxy_url: str + proxy_enabled: bool + icon_src: str + def __init__(self, display_name: _Optional[str] = ..., description: _Optional[str] = ..., auth_patterns: _Optional[_Union[_struct_pb2.ListValue, _Mapping]] = ..., proxy_url: _Optional[str] = ..., proxy_enabled: bool = ..., icon_src: _Optional[str] = ...) -> None: ... + +class CreateCustomProviderRequest(_message.Message): + __slots__ = ("provider",) + PROVIDER_FIELD_NUMBER: _ClassVar[int] + provider: CreateCustomProvider + def __init__(self, provider: _Optional[_Union[CreateCustomProvider, _Mapping]] = ...) -> None: ... + class CreateProviderResponse(_message.Message): __slots__ = ("provider",) PROVIDER_FIELD_NUMBER: _ClassVar[int] @@ -106,6 +142,30 @@ class UpdateProviderRequest(_message.Message): provider: UpdateProvider def __init__(self, identifier: _Optional[str] = ..., provider: _Optional[_Union[UpdateProvider, _Mapping]] = ...) -> None: ... +class UpdateCustomProvider(_message.Message): + __slots__ = ("display_name", "description", "auth_patterns", "proxy_url", "proxy_enabled", "icon_src") + DISPLAY_NAME_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + AUTH_PATTERNS_FIELD_NUMBER: _ClassVar[int] + PROXY_URL_FIELD_NUMBER: _ClassVar[int] + PROXY_ENABLED_FIELD_NUMBER: _ClassVar[int] + ICON_SRC_FIELD_NUMBER: _ClassVar[int] + display_name: str + description: str + auth_patterns: _struct_pb2.ListValue + proxy_url: str + proxy_enabled: bool + icon_src: str + def __init__(self, display_name: _Optional[str] = ..., description: _Optional[str] = ..., auth_patterns: _Optional[_Union[_struct_pb2.ListValue, _Mapping]] = ..., proxy_url: _Optional[str] = ..., proxy_enabled: bool = ..., icon_src: _Optional[str] = ...) -> None: ... + +class UpdateCustomProviderRequest(_message.Message): + __slots__ = ("identifier", "provider") + IDENTIFIER_FIELD_NUMBER: _ClassVar[int] + PROVIDER_FIELD_NUMBER: _ClassVar[int] + identifier: str + provider: UpdateCustomProvider + def __init__(self, identifier: _Optional[str] = ..., provider: _Optional[_Union[UpdateCustomProvider, _Mapping]] = ...) -> None: ... + class UpdateProviderResponse(_message.Message): __slots__ = ("provider",) PROVIDER_FIELD_NUMBER: _ClassVar[int] @@ -113,14 +173,21 @@ class UpdateProviderResponse(_message.Message): def __init__(self, provider: _Optional[_Union[Provider, _Mapping]] = ...) -> None: ... class ListProvidersRequest(_message.Message): - __slots__ = ("identifier", "page_size", "page_token") + __slots__ = ("identifier", "page_size", "page_token", "filter") + class Filter(_message.Message): + __slots__ = ("provider_type",) + PROVIDER_TYPE_FIELD_NUMBER: _ClassVar[int] + provider_type: ProviderType + def __init__(self, provider_type: _Optional[_Union[ProviderType, str]] = ...) -> None: ... IDENTIFIER_FIELD_NUMBER: _ClassVar[int] PAGE_SIZE_FIELD_NUMBER: _ClassVar[int] PAGE_TOKEN_FIELD_NUMBER: _ClassVar[int] + FILTER_FIELD_NUMBER: _ClassVar[int] identifier: str page_size: int page_token: str - def __init__(self, identifier: _Optional[str] = ..., page_size: _Optional[int] = ..., page_token: _Optional[str] = ...) -> None: ... + filter: ListProvidersRequest.Filter + def __init__(self, identifier: _Optional[str] = ..., page_size: _Optional[int] = ..., page_token: _Optional[str] = ..., filter: _Optional[_Union[ListProvidersRequest.Filter, _Mapping]] = ...) -> None: ... class ListProvidersResponse(_message.Message): __slots__ = ("providers", "next_page_token", "total_size", "prev_page_token") diff --git a/scalekit/v1/providers/providers_pb2_grpc.py b/scalekit/v1/providers/providers_pb2_grpc.py index 2e78b3c..a64aa76 100644 --- a/scalekit/v1/providers/providers_pb2_grpc.py +++ b/scalekit/v1/providers/providers_pb2_grpc.py @@ -20,16 +20,31 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateProviderRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateProviderResponse.FromString, ) + self.CreateCustomProvider = channel.unary_unary( + '/scalekit.v1.providers.ProviderService/CreateCustomProvider', + request_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateCustomProviderRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateProviderResponse.FromString, + ) self.UpdateProvider = channel.unary_unary( '/scalekit.v1.providers.ProviderService/UpdateProvider', request_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateProviderRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateProviderResponse.FromString, ) + self.UpdateCustomProvider = channel.unary_unary( + '/scalekit.v1.providers.ProviderService/UpdateCustomProvider', + request_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateCustomProviderRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateProviderResponse.FromString, + ) self.DeleteProvider = channel.unary_unary( '/scalekit.v1.providers.ProviderService/DeleteProvider', request_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderResponse.FromString, ) + self.DeleteCustomProvider = channel.unary_unary( + '/scalekit.v1.providers.ProviderService/DeleteCustomProvider', + request_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderResponse.FromString, + ) self.ListProviders = channel.unary_unary( '/scalekit.v1.providers.ProviderService/ListProviders', request_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.ListProvidersRequest.SerializeToString, @@ -47,18 +62,36 @@ def CreateProvider(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def CreateCustomProvider(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def UpdateProvider(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def UpdateCustomProvider(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def DeleteProvider(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def DeleteCustomProvider(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def ListProviders(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -73,16 +106,31 @@ def add_ProviderServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateProviderRequest.FromString, response_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateProviderResponse.SerializeToString, ), + 'CreateCustomProvider': grpc.unary_unary_rpc_method_handler( + servicer.CreateCustomProvider, + request_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateCustomProviderRequest.FromString, + response_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateProviderResponse.SerializeToString, + ), 'UpdateProvider': grpc.unary_unary_rpc_method_handler( servicer.UpdateProvider, request_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateProviderRequest.FromString, response_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateProviderResponse.SerializeToString, ), + 'UpdateCustomProvider': grpc.unary_unary_rpc_method_handler( + servicer.UpdateCustomProvider, + request_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateCustomProviderRequest.FromString, + response_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateProviderResponse.SerializeToString, + ), 'DeleteProvider': grpc.unary_unary_rpc_method_handler( servicer.DeleteProvider, request_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderRequest.FromString, response_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderResponse.SerializeToString, ), + 'DeleteCustomProvider': grpc.unary_unary_rpc_method_handler( + servicer.DeleteCustomProvider, + request_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderRequest.FromString, + response_serializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderResponse.SerializeToString, + ), 'ListProviders': grpc.unary_unary_rpc_method_handler( servicer.ListProviders, request_deserializer=scalekit_dot_v1_dot_providers_dot_providers__pb2.ListProvidersRequest.FromString, @@ -116,6 +164,23 @@ def CreateProvider(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod + def CreateCustomProvider(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.providers.ProviderService/CreateCustomProvider', + scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateCustomProviderRequest.SerializeToString, + scalekit_dot_v1_dot_providers_dot_providers__pb2.CreateProviderResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod def UpdateProvider(request, target, @@ -133,6 +198,23 @@ def UpdateProvider(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod + def UpdateCustomProvider(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.providers.ProviderService/UpdateCustomProvider', + scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateCustomProviderRequest.SerializeToString, + scalekit_dot_v1_dot_providers_dot_providers__pb2.UpdateProviderResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod def DeleteProvider(request, target, @@ -150,6 +232,23 @@ def DeleteProvider(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod + def DeleteCustomProvider(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.providers.ProviderService/DeleteCustomProvider', + scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderRequest.SerializeToString, + scalekit_dot_v1_dot_providers_dot_providers__pb2.DeleteProviderResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod def ListProviders(request, target, diff --git a/scalekit/v1/roles/roles_pb2.py b/scalekit/v1/roles/roles_pb2.py index 1520db7..f0dc7e0 100644 --- a/scalekit/v1/roles/roles_pb2.py +++ b/scalekit/v1/roles/roles_pb2.py @@ -26,7 +26,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dscalekit/v1/roles/roles.proto\x12\x11scalekit.v1.roles\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"\x8b\r\n\x04Role\x12y\n\x02id\x18\x01 \x01(\tBi\x92\x41\x63\x32HUnique system-generated identifier for the role. Immutable once created.J\x17\"role_1234abcd5678efgh\"\xe0\x41\x03R\x02id\x12\x95\x01\n\x04name\x18\x02 \x01(\tB\x80\x01\x92\x41q2]Unique name identifier for the role. Must be alphanumeric with underscores, 1-100 characters.J\x10\"content_editor\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x04name\x12\x94\x01\n\x0c\x64isplay_name\x18\x03 \x01(\tBq\x92\x41\x62\x32NHuman-readable display name for the role. Used in user interfaces and reports.J\x10\"Content Editor\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x0b\x64isplayName\x12\xc9\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tB\xa6\x01\x92\x41\xa2\x01\x32UDetailed description of the role\'s purpose and capabilities. Maximum 2000 characters.JI\"Can create, edit, and publish content but cannot delete or manage users\"R\x0b\x64\x65scription\x12}\n\x0f\x64\x65\x66\x61ult_creator\x18\x06 \x01(\x08\x42T\x92\x41Q2IIndicates if this role is the default creator role for new organizations.J\x04trueR\x0e\x64\x65\x66\x61ultCreator\x12r\n\x0e\x64\x65\x66\x61ult_member\x18\x07 \x01(\x08\x42K\x92\x41H2@Indicates if this role is the default member role for new users.J\x04trueR\rdefaultMember\x12\xa6\x01\n\x07\x65xtends\x18\x08 \x01(\tB\x86\x01\x92\x41\x64\x32TName of the base role that this role extends. Enables hierarchical role inheritance.J\x0c\"admin_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x07\x65xtends\x88\x01\x01\x12\xef\x02\n\x0bpermissions\x18\t \x03(\x0b\x32!.scalekit.v1.roles.RolePermissionB\xa9\x02\x92\x41\xa5\x02\x32uList of permissions with role source information. Only included when \'include\' parameter is specified in the request.J\xab\x01[{\"name\": \"read:content\", \"description\": \"Read Content\", \"role_name\": \"admin_role\"}, {\"name\": \"write:content\", \"description\": \"Write Content\", \"role_name\": \"editor_role\"}]R\x0bpermissions\x12\x90\x01\n\x15\x64\x65pendent_roles_count\x18\n \x01(\x05\x42\\\x92\x41Y2TNumber of roles that extend from this role (dependent roles count). Read-only field.J\x01\x33R\x13\x64\x65pendentRolesCount\x12Z\n\x0bis_org_role\x18\x0b \x01(\x08\x42:\x92\x41\x37\x32/Indicates if this role is an organization role.J\x04trueR\tisOrgRoleB\n\n\x08_extendsJ\x04\x08\x05\x10\x06\"\xce\t\n\nCreateRole\x12\xf1\x01\n\x04name\x18\x02 \x01(\tB\xdc\x01\x92\x41\xb6\x01\x32\xa1\x01Unique name identifier for the role. Must be alphanumeric with underscores, 1-64 characters. This name is used in API calls and cannot be changed after creation.J\x10\"content_editor\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x04name\x12\xb2\x01\n\x0c\x64isplay_name\x18\x03 \x01(\tB\x8e\x01\x92\x41\x7f\x32kHuman-readable display name for the role. Used in user interfaces, reports, and user-facing communications.J\x10\"Content Editor\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x0b\x64isplayName\x12\xfb\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tB\xd3\x01\x92\x41\xc7\x01\x32jDetailed description of the role\'s purpose, capabilities, and intended use cases. Maximum 2000 characters.JY\"Can create, edit, and publish content but cannot delete content or manage user accounts\"\xbaH\x05r\x03\x18\xd0\x0fH\x00R\x0b\x64\x65scription\x88\x01\x01\x12\xe0\x01\n\x07\x65xtends\x18\x08 \x01(\tB\xc0\x01\x92\x41\x9d\x01\x32\x90\x01Name of the base role that this role extends. Enables hierarchical role inheritance where this role inherits all permissions from the base role.J\x08\"viewer\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x01R\x07\x65xtends\x88\x01\x01\x12\x87\x02\n\x0bpermissions\x18\t \x03(\tB\xe4\x01\x92\x41\xbe\x01\x32\x85\x01List of permission names to assign to this role. Permissions must exist in the current environment. Maximum 100 permissions per role.J4[\"read:content\", \"write:content\", \"publish:content\"]\xbaH\x1f\x92\x01\x1c\x10\x64\"\x18r\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$R\x0bpermissionsB\x0e\n\x0c_descriptionB\n\n\x08_extendsJ\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08\"\xa4\x06\n\x16\x43reateOrganizationRole\x12t\n\x04name\x18\x02 \x01(\tB`\x92\x41;2&Unique name of the organization\'s roleJ\x11\"org_viewer_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x04name\x12w\n\x0c\x64isplay_name\x18\x03 \x01(\tBT\x92\x41\x45\x32\'Display name of the organization\'s roleJ\x1a\"Organization Viewer Role\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x0b\x64isplayName\x12\xa0\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tBy\x92\x41n2&Description of the organization\'s roleJD\"Organization Viewer Role will be used only for viewing the objects\"\xbaH\x05r\x03\x18\xd0\x0fH\x00R\x0b\x64\x65scription\x88\x01\x01\x12v\n\x07\x65xtends\x18\x08 \x01(\tBW\x92\x41\x35\x32%Base role name for hierarchical rolesJ\x0c\"admin_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x01R\x07\x65xtends\x88\x01\x01\x12\xd1\x01\n\x0bpermissions\x18\t \x03(\tB\xae\x01\x92\x41\x88\x01\x32\x63List of permission names to assign to this role. Permissions must exist in the current environment.J![\"read:users\", \"write:documents\"]\xbaH\x1f\x92\x01\x1c\x10\x64\"\x18r\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$R\x0bpermissionsB\x0e\n\x0c_descriptionB\n\n\x08_extendsJ\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08\"\xdc\x02\n\x11\x43reateRoleRequest\x12\xc0\x02\n\x04role\x18\x02 \x01(\x0b\x32\x1d.scalekit.v1.roles.CreateRoleB\x8c\x02\x92\x41\x82\x02\x32lRole configuration details including name, display name, description, permissions, and inheritance settings.J\x91\x01{\"name\": \"content_editor\", \"display_name\": \"Content Editor\", \"description\": \"Can edit content\", \"permissions\": [\"read:content\", \"write:content\"]}\xbaH\x03\xc8\x01\x01R\x04roleJ\x04\x08\x01\x10\x02\"\x9a\x02\n\x12\x43reateRoleResponse\x12\x83\x02\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\xd5\x01\x92\x41\xd1\x01\x32OThe created role object with system-generated ID and all configuration details.J~{\"id\": \"role_1234abcd5678efgh\", \"name\": \"content_editor\", \"display_name\": \"Content Editor\", \"description\": \"Can edit content\"}R\x04role\"\xe7\x03\n\x0eGetRoleRequest\x12\xbe\x01\n\trole_name\x18\x02 \x01(\tB\xa0\x01\x92\x41{2gUnique name identifier of the role to retrieve. Must be alphanumeric with underscores, 1-64 characters.J\x10\"content_editor\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\x81\x02\n\x07include\x18\x03 \x01(\tB\xe1\x01\x92\x41\xb8\x01\x32\xa6\x01Include additional data in the response. Valid values: \'permissions\' (direct permissions only), \'permissions:all\' (includes inherited permissions from role hierarchy)J\r\"permissions\"\xbaH\"r R\x00R\x0bpermissionsR\x0fpermissions:allH\x00R\x07include\x88\x01\x01\x42\n\n\x08_includeJ\x04\x08\x01\x10\x02\"\xbe\x02\n\x0fGetRoleResponse\x12\xaa\x02\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\xfc\x01\x92\x41\xf8\x01\x32QThe complete role object with all metadata, permissions, and inheritance details.J\xa2\x01{\"id\": \"role_1234abcd5678efgh\", \"name\": \"content_editor\", \"display_name\": \"Content Editor\", \"permissions\": [{\"name\": \"read:content\"}], \"dependent_roles_count\": 2}R\x04role\"\xa8\x02\n\x10ListRolesRequest\x12\x81\x02\n\x07include\x18\x02 \x01(\tB\xe1\x01\x92\x41\xb8\x01\x32\xa6\x01Include additional data in the response. Valid values: \'permissions\' (direct permissions only), \'permissions:all\' (includes inherited permissions from role hierarchy)J\r\"permissions\"\xbaH\"r R\x00R\x0bpermissionsR\x0fpermissions:allH\x00R\x07include\x88\x01\x01\x42\n\n\x08_includeJ\x04\x08\x01\x10\x02\"\xc9\x02\n\x11ListRolesResponse\x12\xb3\x02\n\x05roles\x18\x01 \x03(\x0b\x32\x17.scalekit.v1.roles.RoleB\x83\x02\x92\x41\xff\x01\x32ZList of all roles in the environment with their metadata and optionally their permissions.J\xa0\x01[{\"id\": \"role_1234abcd5678efgh\", \"name\": \"admin\", \"display_name\": \"Administrator\"}, {\"id\": \"role_9876zyxw5432vuts\", \"name\": \"viewer\", \"display_name\": \"Viewer\"}]R\x05roles\"\xdd\x08\n\nUpdateRole\x12\xbc\x01\n\x0c\x64isplay_name\x18\x01 \x01(\tB\x93\x01\x92\x41\x86\x01\x32kHuman-readable display name for the role. Used in user interfaces, reports, and user-facing communications.J\x17\"Senior Content Editor\"\xbaH\x06r\x04\x10\x01\x18\x64H\x00R\x0b\x64isplayName\x88\x01\x01\x12\x84\x02\n\x0b\x64\x65scription\x18\x02 \x01(\tB\xdc\x01\x92\x41\xce\x01\x32jDetailed description of the role\'s purpose, capabilities, and intended use cases. Maximum 2000 characters.J`\"Can create, edit, publish, and approve content. Cannot delete content or manage user accounts.\"\xbaH\x07r\x05\x10\x01\x18\xd0\x0fH\x01R\x0b\x64\x65scription\x88\x01\x01\x12\xe8\x01\n\x07\x65xtends\x18\x06 \x01(\tB\xc8\x01\x92\x41\xa5\x01\x32\x90\x01Name of the base role that this role extends. Enables hierarchical role inheritance where this role inherits all permissions from the base role.J\x10\"content_editor\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x02R\x07\x65xtends\x88\x01\x01\x12\xde\x02\n\x0bpermissions\x18\x07 \x03(\tB\xbb\x02\x92\x41\x95\x02\x32\xc9\x01List of permission names to assign to this role. When provided, this replaces all existing role-permission mappings. Permissions must exist in the current environment. Maximum 100 permissions per role.JG[\"read:content\", \"write:content\", \"publish:content\", \"approve:content\"]\xbaH\x1f\x92\x01\x1c\x10\x64\"\x18r\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$R\x0bpermissionsB\x0f\n\r_display_nameB\x0e\n\x0c_descriptionB\n\n\x08_extendsJ\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06\"\xab\x03\n\x11UpdateRoleRequest\x12\xbc\x01\n\trole_name\x18\x02 \x01(\tB\x9e\x01\x92\x41y2eUnique name identifier of the role to update. Must be alphanumeric with underscores, 1-64 characters.J\x10\"content_editor\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\xd0\x01\n\x04role\x18\x03 \x01(\x0b\x32\x1d.scalekit.v1.roles.UpdateRoleB\x9c\x01\x92\x41\x92\x01\x32>Role fields to update. Only specified fields will be modified.JP{\"display_name\": \"Senior Editor\", \"description\": \"Can edit and approve content\"}\xbaH\x03\xc8\x01\x01R\x04roleJ\x04\x08\x01\x10\x02\"\x96\x02\n\x12UpdateRoleResponse\x12\xff\x01\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\xd1\x01\x92\x41\xcd\x01\x32?The updated role object with all current configuration details.J\x89\x01{\"id\": \"role_1234abcd5678efgh\", \"name\": \"content_editor\", \"display_name\": \"Senior Editor\", \"description\": \"Can edit and approve content\"}R\x04role\"\xba\x04\n\x11\x44\x65leteRoleRequest\x12\xb6\x01\n\trole_name\x18\x02 \x01(\tB\x98\x01\x92\x41s2eUnique name identifier of the role to delete. Must be alphanumeric with underscores, 1-64 characters.J\n\"old_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\x9a\x01\n\x10reassign_role_id\x18\x03 \x01(\tBk\x18\x01\x92\x41G26Role name to reassign users to when deleting this roleJ\r\"member_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x0ereassignRoleId\x88\x01\x01\x12\x9c\x01\n\x12reassign_role_name\x18\x04 \x01(\tBi\x92\x41G26Role name to reassign users to when deleting this roleJ\r\"member_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x01R\x10reassignRoleName\x88\x01\x01\x42\x13\n\x11_reassign_role_idB\x15\n\x13_reassign_role_nameJ\x04\x08\x01\x10\x02\"\xec\x01\n\x1d\x43reateOrganizationRoleRequest\x12\x66\n\x06org_id\x18\x01 \x01(\tBO\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12\x63\n\x04role\x18\x02 \x01(\x0b\x32).scalekit.v1.roles.CreateOrganizationRoleB$\x92\x41\x1b\x32\x19Organization role details\xbaH\x03\xc8\x01\x01R\x04role\"M\n\x1e\x43reateOrganizationRoleResponse\x12+\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleR\x04role\"\xeb\x03\n\x1aGetOrganizationRoleRequest\x12\x66\n\x06org_id\x18\x01 \x01(\tBO\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12i\n\trole_name\x18\x02 \x01(\tBL\x92\x41\'2\x17Unique name of the roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\xed\x01\n\x07include\x18\x03 \x01(\tB\xcd\x01\x92\x41\xa4\x01\x32\x92\x01Include additional data in the response. Valid values: \'permissions\' (direct permissions only), \'permissions:all\' (includes inherited permissions)J\r\"permissions\"\xbaH\"r R\x00R\x0bpermissionsR\x0fpermissions:allH\x00R\x07include\x88\x01\x01\x42\n\n\x08_include\"J\n\x1bGetOrganizationRoleResponse\x12+\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleR\x04role\"\xe2\x04\n\x1cListOrganizationRolesRequest\x12i\n\x06org_id\x18\x01 \x01(\tBR\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0er\t\x10\x01\x18 :\x03org\xc8\x01\x01R\x05orgId\x12\xed\x01\n\x07include\x18\x02 \x01(\tB\xcd\x01\x92\x41\xa4\x01\x32\x92\x01Include additional data in the response. Valid values: \'permissions\' (direct permissions only), \'permissions:all\' (includes inherited permissions)J\r\"permissions\"\xbaH\"r R\x00R\x0bpermissionsR\x0fpermissions:allH\x00R\x07include\x88\x01\x01:\xda\x01\x92\x41\xd6\x01\n\xb0\x01*\x17List organization roles2\x8b\x01Retrieves a paginated list of all roles within the organization. Use the page_token from the response to access subsequent pages of results\xd2\x01\x06org_id2!{\"org_id\" : \"org_8756865685762\" }B\n\n\x08_include\"j\n\x1dListOrganizationRolesResponse\x12I\n\x05roles\x18\x01 \x03(\x0b\x32\x17.scalekit.v1.roles.RoleB\x1a\x92\x41\x17\x32\x15List of roles objectsR\x05roles\"\xcb\x02\n\x1dUpdateOrganizationRoleRequest\x12\x66\n\x06org_id\x18\x01 \x01(\tBO\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12i\n\trole_name\x18\x02 \x01(\tBL\x92\x41\'2\x17Unique name of the roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12W\n\x04role\x18\x03 \x01(\x0b\x32\x1d.scalekit.v1.roles.UpdateRoleB$\x92\x41\x1b\x32\x19Organization role details\xbaH\x03\xc8\x01\x01R\x04role\"M\n\x1eUpdateOrganizationRoleResponse\x12+\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleR\x04role\"\xa8\x03\n\x1d\x44\x65leteOrganizationRoleRequest\x12\x66\n\x06org_id\x18\x01 \x01(\tBO\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12i\n\trole_name\x18\x02 \x01(\tBL\x92\x41\'2\x17Unique name of the roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\x9c\x01\n\x12reassign_role_name\x18\x03 \x01(\tBi\x92\x41G26Role name to reassign users to when deleting this roleJ\r\"member_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x10reassignRoleName\x88\x01\x01\x42\x15\n\x13_reassign_role_name\"\x8b\x01\n\x18GetRoleUsersCountRequest\x12i\n\trole_name\x18\x02 \x01(\tBL\x92\x41\'2\x17Unique name of the roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleNameJ\x04\x08\x01\x10\x02\"k\n\x19GetRoleUsersCountResponse\x12N\n\x05\x63ount\x18\x01 \x01(\x03\x42\x38\x92\x41.2(Number of users associated with the roleJ\x02\x31\x30\xbaH\x04\x1a\x02 \x00R\x05\x63ount\"\xff\x01\n$GetOrganizationRoleUsersCountRequest\x12_\n\x06org_id\x18\x01 \x01(\tBH\x92\x41\x39\x32%Unique identifier of the organizationJ\x10\"org_1234567890\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x05orgId\x12v\n\trole_name\x18\x02 \x01(\tBY\x92\x41\x34\x32$Unique name of the organization roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\"\x83\x01\n%GetOrganizationRoleUsersCountResponse\x12Z\n\x05\x63ount\x18\x01 \x01(\x03\x42\x44\x92\x41:25Number of users associated with the organization roleJ\x01\x35\xbaH\x04\x1a\x02 \x00R\x05\x63ount\"\xf0\t\n\x19UpdateDefaultRolesRequest\x12\x9e\x02\n\x0f\x64\x65\x66\x61ult_creator\x18\x02 \x01(\x0b\x32$.scalekit.v1.roles.UpdateDefaultRoleB\xce\x01\x18\x01\x92\x41\xc8\x01\x32JDefault creator role (deprecated - use default_creator_role field instead)Jz{\"id\": \"role_1234567890\", \"name\": \"creator\", \"display_name\": \"Creator Role\", \"description\": \"Role for creating resources\"}R\x0e\x64\x65\x66\x61ultCreator\x12\x95\x02\n\x0e\x64\x65\x66\x61ult_member\x18\x03 \x01(\x0b\x32$.scalekit.v1.roles.UpdateDefaultRoleB\xc7\x01\x18\x01\x92\x41\xc1\x01\x32HDefault member role (deprecated - use default_member_role field instead)Ju{\"id\": \"role_0987654321\", \"name\": \"member\", \"display_name\": \"Member Role\", \"description\": \"Role for regular members\"}R\rdefaultMember\x12\xb6\x02\n\x14\x64\x65\x66\x61ult_creator_role\x18\x04 \x01(\tB\xfe\x01\x92\x41\xdb\x01\x32\xcd\x01Name of the role to set as the default creator role. This role will be automatically assigned to users who create new resources in the environment. Must be a valid role name that exists in the environment.J\t\"creator\"\xbaH\x1cr\x1a\x10\x00\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x12\x64\x65\x66\x61ultCreatorRole\x88\x01\x01\x12\xa9\x02\n\x13\x64\x65\x66\x61ult_member_role\x18\x05 \x01(\tB\xf3\x01\x92\x41\xd0\x01\x32\xc3\x01Name of the role to set as the default member role. This role will be automatically assigned to new users when they join the environment. Must be a valid role name that exists in the environment.J\x08\"member\"\xbaH\x1cr\x1a\x10\x00\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x01R\x11\x64\x65\x66\x61ultMemberRole\x88\x01\x01\x42\x17\n\x15_default_creator_roleB\x16\n\x14_default_member_roleJ\x04\x08\x01\x10\x02\"\x9c\x02\n%UpdateDefaultOrganizationRolesRequest\x12i\n\x06org_id\x18\x01 \x01(\tBR\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0er\t\x10\x01\x18 :\x03org\xc8\x01\x01R\x05orgId\x12\x87\x01\n\x13\x64\x65\x66\x61ult_member_role\x18\x02 \x01(\tBW\x92\x41\x32\x32&Unique name of the default member roleJ\x08\"member\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x11\x64\x65\x66\x61ultMemberRole\"\xc6\x05\n\x1aUpdateDefaultRolesResponse\x12\xd6\x02\n\x0f\x64\x65\x66\x61ult_creator\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\x93\x02\x92\x41\x8f\x02\x32\x90\x01The role that is now set as the default creator role for the environment. Contains complete role information including permissions and metadata.Jz{\"id\": \"role_1234567890\", \"name\": \"creator\", \"display_name\": \"Creator Role\", \"description\": \"Role for creating resources\"}R\x0e\x64\x65\x66\x61ultCreator\x12\xce\x02\n\x0e\x64\x65\x66\x61ult_member\x18\x02 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\x8d\x02\x92\x41\x89\x02\x32\x8f\x01The role that is now set as the default member role for the environment. Contains complete role information including permissions and metadata.Ju{\"id\": \"role_0987654321\", \"name\": \"member\", \"display_name\": \"Member Role\", \"description\": \"Role for regular members\"}R\rdefaultMember\"\x84\x02\n&UpdateDefaultOrganizationRolesResponse\x12\xd9\x01\n\x0e\x64\x65\x66\x61ult_member\x18\x02 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\x98\x01\x92\x41\x94\x01\x32\x1bUpdated default member roleJu{\"id\": \"role_0987654321\", \"name\": \"member\", \"display_name\": \"Member Role\", \"description\": \"Role for regular members\"}R\rdefaultMember\"\x9e\x01\n\x11UpdateDefaultRole\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04roleR\x02id\x12_\n\x04name\x18\x02 \x01(\tBF\x92\x41$2\x17Unique name of the roleJ\t\"creator\"\xbaH\x1cr\x1a\x10\x00\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x04name\x88\x01\x01\x42\x07\n\x05_name\"\x85\x03\n\nPermission\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04permR\x02id\x12\x32\n\x04name\x18\x02 \x01(\tB\x1e\xbaH\x1br\x16\x10\x01\x18\x64\x32\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\x12;\n\x0b\x63reate_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12;\n\x0bupdate_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nupdateTime\x12|\n\x16is_scalekit_permission\x18\x06 \x01(\x08\x42\x46\x92\x41\x43\x32;Indicates whether this permission is predefined by ScalekitJ\x04trueR\x14isScalekitPermission\"\x97\x03\n\x0eRolePermission\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04permR\x02id\x12\x32\n\x04name\x18\x02 \x01(\tB\x1e\xbaH\x1br\x16\x10\x01\x18\x64\x32\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\x12;\n\x0b\x63reate_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12;\n\x0bupdate_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nupdateTime\x12\x89\x01\n\trole_name\x18\x06 \x01(\tBl\x92\x41G27Name of the role from which this permission was sourcedJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\"\x81\x02\n\x10\x43reatePermission\x12n\n\x04name\x18\x01 \x01(\tBZ\x92\x41\x34\x32 Unique name/ID of the permissionJ\x10\"read:documents\"\xbaH r\x1b\x10\x01\x18\x64\x32\x15^[a-zA-Z0-9_:]{1,64}$\xc8\x01\x01R\x04name\x12}\n\x0b\x64\x65scription\x18\x02 \x01(\tB[\x92\x41P2\x1d\x44\x65scription of the permissionJ/\"Allows user to read documents from the system\"\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\"f\n\x17\x43reatePermissionRequest\x12K\n\npermission\x18\x01 \x01(\x0b\x32#.scalekit.v1.roles.CreatePermissionB\x06\xbaH\x03\xc8\x01\x01R\npermission\"Y\n\x18\x43reatePermissionResponse\x12=\n\npermission\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.roles.PermissionR\npermission\"\x88\x01\n\x14GetPermissionRequest\x12p\n\x0fpermission_name\x18\x01 \x01(\tBG\x92\x41&2\x16Name of the permissionJ\x0c\"read:users\"\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x0epermissionName\"V\n\x15GetPermissionResponse\x12=\n\npermission\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.roles.PermissionR\npermission\"\xd8\x01\n\x17UpdatePermissionRequest\x12p\n\x0fpermission_name\x18\x01 \x01(\tBG\x92\x41&2\x16Name of the permissionJ\x0c\"read_users\"\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x0epermissionName\x12K\n\npermission\x18\x03 \x01(\x0b\x32#.scalekit.v1.roles.CreatePermissionB\x06\xbaH\x03\xc8\x01\x01R\npermission\"Y\n\x18UpdatePermissionResponse\x12=\n\npermission\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.roles.PermissionR\npermission\"\x89\x04\n\x16ListPermissionsRequest\x12\x64\n\npage_token\x18\x01 \x01(\tB@\x92\x41=2+Page token to retrieve next page of resultsJ\x0e\"token_abc123\"H\x00R\tpageToken\x88\x01\x01\x12\x66\n\tpage_size\x18\x02 \x01(\rBD\x92\x41\x38\x32\x32Number of permissions to return per page (max 100)J\x02\x35\x30\xbaH\x06*\x04\x18\x64(\x01H\x01R\x08pageSize\x88\x01\x01\x12\x83\x02\n\x04type\x18\x03 \x01(\x0e\x32!.scalekit.v1.roles.PermissionTypeB\xcb\x01\x92\x41\xc7\x01\x32\xbf\x01\x46ilter permissions by type: ALL, SCALEKIT, or ENVIRONMENT, where SCALEKIT are predefined Scalekit permissions and ENVIRONMENT are custom permissions created in the environment, default is ALLJ\x03\x41LLR\x04typeB\r\n\x0b_page_tokenB\x0c\n\n_page_size\"\xf8\x02\n\x17ListPermissionsResponse\x12?\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x1d.scalekit.v1.roles.PermissionR\x0bpermissions\x12g\n\x0fprev_page_token\x18\x02 \x01(\tB?\x92\x41<2*Token to retrieve previous page of resultsJ\x0e\"token_def456\"R\rprevPageToken\x12\x63\n\x0fnext_page_token\x18\x03 \x01(\tB;\x92\x41\x38\x32&Token to retrieve next page of resultsJ\x0e\"token_def456\"R\rnextPageToken\x12N\n\ntotal_size\x18\x04 \x01(\rB/\x92\x41,2%Total number of permissions availableJ\x03\x31\x35\x30R\ttotalSize\"\x8b\x01\n\x17\x44\x65letePermissionRequest\x12p\n\x0fpermission_name\x18\x01 \x01(\tBG\x92\x41&2\x16Name of the permissionJ\x0c\"read_users\"\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x0epermissionName\"u\n\x1aListRolePermissionsRequest\x12W\n\trole_name\x18\x01 \x01(\tB:\x92\x41\x19\x32\x10Name of the roleJ\x05\x61\x64min\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_-]+$\xc8\x01\x01R\x08roleName\"\x96\x01\n\x1bListRolePermissionsResponse\x12w\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x1d.scalekit.v1.roles.PermissionB6\x92\x41\x33\x32\x31List of permissions directly assigned to the roleR\x0bpermissions\"\xfb\x01\n\x1b\x41\x64\x64PermissionsToRoleRequest\x12W\n\trole_name\x18\x01 \x01(\tB:\x92\x41\x19\x32\x10Name of the roleJ\x05\x61\x64min\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x08roleName\x12\x82\x01\n\x10permission_names\x18\x02 \x03(\tBW\x92\x41-2+List of permission names to add to the role\xbaH$\x92\x01\x1e\x08\x01\x10\x64\"\x18r\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x0fpermissionNames\"\xa3\x01\n\x1c\x41\x64\x64PermissionsToRoleResponse\x12\x82\x01\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x1d.scalekit.v1.roles.PermissionBA\x92\x41>2\x92\x41\x1e\x32\x15Name of the base roleJ\x05\x61\x64min\xbaH\x1ar\x15\x10\x01\x18@2\x0f^[a-zA-Z0-9_]+$\xc8\x01\x01R\x08roleName\"i\n\x1aListDependentRolesResponse\x12K\n\x05roles\x18\x01 \x03(\x0b\x32\x17.scalekit.v1.roles.RoleB\x1c\x92\x41\x19\x32\x17List of dependent rolesR\x05roles\"\xfd\x01\n\x15\x44\x65leteRoleBaseRequest\x12\xe3\x01\n\trole_name\x18\x01 \x01(\tB\xc5\x01\x92\x41\xa4\x01\x32\x91\x01Unique name identifier of the role whose base inheritance relationship should be removed. Must be alphanumeric with underscores, 1-64 characters.J\x0e\x63ontent_editor\xbaH\x1ar\x15\x10\x01\x18@2\x0f^[a-zA-Z0-9_]+$\xc8\x01\x01R\x08roleName\"\x88\x02\n!DeleteOrganizationRoleBaseRequest\x12\x65\n\x06org_id\x18\x01 \x01(\tBN\x92\x41=2$Unique identifier to an OrganizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12|\n\trole_name\x18\x02 \x01(\tB_\x92\x41:21Name of the organization role to remove base fromJ\x05\x61\x64min\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName*8\n\x0ePermissionType\x12\x07\n\x03\x41LL\x10\x00\x12\x0c\n\x08SCALEKIT\x10\x01\x12\x0f\n\x0b\x45NVIRONMENT\x10\x02\x32\x93\xbc\x01\n\x0cRolesService\x12\xcf\x05\n\nCreateRole\x12$.scalekit.v1.roles.CreateRoleRequest\x1a%.scalekit.v1.roles.CreateRoleResponse\"\xf3\x04\x92\x41\xce\x04\n\x05Roles\x12\x1e\x43reate new role in environment\x1a\x88\x03\x43reates a new role within the environment with specified permissions and metadata. Use this endpoint to define custom roles that can be assigned to users or groups. You can create hierarchical roles by extending existing roles, assign specific permissions, and configure display information. Roles are the foundation of your access control system and determine what actions users can perform.J\x99\x01\n\x03\x32\x30\x31\x12\x91\x01\ndRole created successfully. Returns the complete role object with system-generated ID and timestamps.\x12)\n\'\x1a%.scalekit.v1.roles.CreateRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x15\"\r/api/v1/roles:\x04role\x12\xb2\x05\n\nUpdateRole\x12$.scalekit.v1.roles.UpdateRoleRequest\x1a%.scalekit.v1.roles.UpdateRoleResponse\"\xd6\x04\x92\x41\xa5\x04\n\x05Roles\x12\x17Update role information\x1a\xf6\x02Modifies an existing role\'s properties including display name, description, permissions, and inheritance. Use this endpoint to update role metadata, change permission assignments, or modify role hierarchy. Only the fields you specify will be updated, leaving other properties unchanged. When updating permissions, the new list replaces all existing permissions for the role.J\x89\x01\n\x03\x32\x30\x30\x12\x81\x01\nTRole updated successfully. Returns the modified role object with updated timestamps.\x12)\n\'\x1a%.scalekit.v1.roles.UpdateRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02!\x1a\x19/api/v1/roles/{role_name}:\x04role\x12\xff\x04\n\x07GetRole\x12!.scalekit.v1.roles.GetRoleRequest\x1a\".scalekit.v1.roles.GetRoleResponse\"\xac\x04\x92\x41\x81\x04\n\x05Roles\x12\x10Get role details\x1a\xa9\x02Retrieves complete information for a specific role including metadata and inheritance details (base role and dependent role count). Use this endpoint to audit role configuration and understand the role\'s place in the hierarchy. To view the role\'s permissions, use the ListRolePermissions endpoint.J\xb9\x01\n\x03\x32\x30\x30\x12\xb1\x01\n\x86\x01Successfully retrieved role details. Returns the role object including metadata and inheritance details. Permissions are not included.\x12&\n$\x1a\".scalekit.v1.roles.GetRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1b\x12\x19/api/v1/roles/{role_name}\x12\x89\x06\n\tListRoles\x12#.scalekit.v1.roles.ListRolesRequest\x1a$.scalekit.v1.roles.ListRolesResponse\"\xb0\x05\x92\x41\x91\x05\n\x05Roles\x12\x1dList all roles in environment\x1a\xc4\x03Retrieves a comprehensive list of all roles available within the specified environment including organization roles. Use this endpoint to view all role definitions, including custom roles and their configurations. You can optionally include permission details for each role to understand their capabilities. This is useful for role management, auditing organization access controls, or understanding the available access levels within the organization.J\xa1\x01\n\x03\x32\x30\x30\x12\x99\x01\nmSuccessfully retrieved list of roles. Returns all roles with their metadata and optionally their permissions.\x12(\n&\x1a$.scalekit.v1.roles.ListRolesResponse\x82\xb5\x18\x02\x18\x64\x82\xd3\xe4\x93\x02\x0f\x12\r/api/v1/roles\x12\xac\x06\n\nDeleteRole\x12$.scalekit.v1.roles.DeleteRoleRequest\x1a\x16.google.protobuf.Empty\"\xdf\x05\x92\x41\xb4\x05\n\x05Roles\x12\x1e\x44\x65lete role and reassign users\x1a\xbb\x04Permanently removes a role from the environment and reassigns users who had that role to a different role. Use this endpoint when you need to clean up unused roles or restructure your access control system. The role cannot be deleted if it has dependent roles (roles that extend it) unless you specify a replacement role. If users are assigned to the role being deleted, you must provide a reassign_role_name to move those users to a different role before deletion can proceed. This action cannot be undone, so ensure no critical users depend on the role before deletion.JM\n\x03\x32\x30\x30\x12\x46\nDRole successfully deleted and users reassigned. No content returned.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1b*\x19/api/v1/roles/{role_name}\x12\xdc\x06\n\x16\x43reateOrganizationRole\x12\x30.scalekit.v1.roles.CreateOrganizationRoleRequest\x1a\x31.scalekit.v1.roles.CreateOrganizationRoleResponse\"\xdc\x05\x92\x41\xa0\x05\n\x05Roles\x12\x18\x43reate organization role\x1a\xc7\x03\x43reates a new role within the specified organization with basic configuration including name, display name, description, and permissions. Use this endpoint to define custom roles that can be assigned to users within the organization. You can create hierarchical roles by extending existing roles and assign specific permissions to control access levels. The role will be scoped to the organization and can be used for organization-specific access control.J\xb2\x01\n\x03\x32\x30\x31\x12\xaa\x01\nqOrganization role created successfully. Returns the complete role object with system-generated ID and timestamps.\x12\x35\n3\x1a\x31.scalekit.v1.roles.CreateOrganizationRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02,\"$/api/v1/organizations/{org_id}/roles:\x04role\x12\xb5\x06\n\x16UpdateOrganizationRole\x12\x30.scalekit.v1.roles.UpdateOrganizationRoleRequest\x1a\x31.scalekit.v1.roles.UpdateOrganizationRoleResponse\"\xb5\x05\x92\x41\xed\x04\n\x05Roles\x12\x18Update organization role\x1a\xa4\x03Modifies an existing organization role\'s properties including display name, description, permissions, and inheritance settings. Use this endpoint to update role metadata, change permission assignments, or modify role hierarchy within the organization. Only the fields you specify will be updated, leaving other properties unchanged. When updating permissions, the new list replaces all existing permissions for the role.J\xa2\x01\n\x03\x32\x30\x30\x12\x9a\x01\naOrganization role updated successfully. Returns the modified role object with updated timestamps.\x12\x35\n3\x1a\x31.scalekit.v1.roles.UpdateOrganizationRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x38\x1a\x30/api/v1/organizations/{org_id}/roles/{role_name}:\x04role\x12\xb4\x07\n\x13GetOrganizationRole\x12-.scalekit.v1.roles.GetOrganizationRoleRequest\x1a..scalekit.v1.roles.GetOrganizationRoleResponse\"\xbd\x06\x92\x41\xe7\x05\n\x05Roles\x12\x1dGet organization role details\x1a\xbf\x03Retrieves complete information for a specific organization role including metadata, inheritance details, and optionally permissions. Use this endpoint to audit role configuration and understand the role\'s place in the organization\'s role hierarchy. You can include permission details to see what capabilities the role provides. This operation is useful for role management, user assignment decisions, or understanding organization access controls.J\xfc\x01\n\x03\x32\x30\x30\x12\xf4\x01\n\xbd\x01Successfully retrieved organization role details. Returns the role object including metadata and inheritance details. Permissions are included only when requested via the include parameter.\x12\x32\n0\x1a..scalekit.v1.roles.GetOrganizationRoleResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x32\x12\x30/api/v1/organizations/{org_id}/roles/{role_name}\x12\xb7\x06\n\x15ListOrganizationRoles\x12/.scalekit.v1.roles.ListOrganizationRolesRequest\x1a\x30.scalekit.v1.roles.ListOrganizationRolesResponse\"\xba\x05\x92\x41\xf0\x04\n\x05Roles\x12\x17List organization roles\x1a\x90\x03Retrieves all environment roles and organization specific roles. Use this endpoint to view all role definitions, including custom roles and their configurations. You can optionally include permission details for each role to understand their capabilities. This is useful for role management, auditing organization access controls, or understanding the available access levels within the organization.J\xba\x01\n\x03\x32\x30\x30\x12\xb2\x01\nzSuccessfully retrieved list of organization roles. Returns all roles with their metadata and optionally their permissions.\x12\x34\n2\x1a\x30.scalekit.v1.roles.ListOrganizationRolesResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02&\x12$/api/v1/organizations/{org_id}/roles\x12\x8a\x06\n\x16\x44\x65leteOrganizationRole\x12\x30.scalekit.v1.roles.DeleteOrganizationRoleRequest\x1a\x16.google.protobuf.Empty\"\xa5\x05\x92\x41\xe3\x04\n\x05Roles\x12\x18\x44\x65lete organization role\x1a\xd6\x03Permanently removes a role from the organization and optionally reassigns users who had that role to a different role. Use this endpoint when you need to clean up unused roles or restructure your organization\'s access control system. If users are assigned to the role being deleted, you can provide a reassign_role_name to move those users to a different role before deletion. This action cannot be undone, so ensure no critical users depend on the role before deletion.Jg\n\x03\x32\x30\x30\x12`\n^Organization role successfully deleted and users reassigned if specified. No content returned.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x32*0/api/v1/organizations/{org_id}/roles/{role_name}\x12\xdb\x08\n\x11GetRoleUsersCount\x12+.scalekit.v1.roles.GetRoleUsersCountRequest\x1a,.scalekit.v1.roles.GetRoleUsersCountResponse\"\xea\x07\x92\x41\xb3\x07\n\x05Roles\x12\x1cRetrieve user count for role\x1a\x93\x05Retrieves the total number of users currently assigned to the specified role within the environment. Use this endpoint to monitor role usage, enforce user limits, or understand the scope of role assignments. Provide the role\'s unique name as a path parameter, and the response will include the current user count for that role. This operation is read-only and does not modify any data or user assignments. The count reflects all users who have the role either directly assigned or inherited through organization membership. This information is useful for capacity planning, security auditing, or understanding the impact of role changes across your user base.J\xf5\x01\n\x03\x32\x30\x30\x12\xed\x01\n\xb8\x01Successfully retrieved user count for the specified role. Returns the total number of users currently assigned to the role, including both direct assignments and inherited assignments.\x12\x30\n.\x1a,.scalekit.v1.roles.GetRoleUsersCountResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\'\x12%/api/v1/roles/{role_name}/users:count\x12\xb2\x07\n\x1dGetOrganizationRoleUsersCount\x12\x37.scalekit.v1.roles.GetOrganizationRoleUsersCountRequest\x1a\x38.scalekit.v1.roles.GetOrganizationRoleUsersCountResponse\"\x9d\x06\x92\x41\xc0\x05\n\x05Roles\x12 Get organization role user count\x1a\xc0\x03Retrieves the total number of users currently assigned to the specified organization role. Use this endpoint to monitor organization role usage, enforce user limits, or understand the scope of role assignments within the organization. Provide the organization ID and role name as path parameters. The response includes the user count for the requested organization role. This operation is read-only and does not modify any data or user assignments.J\xd1\x01\n\x03\x32\x30\x30\x12\xc9\x01\n\x88\x01Successfully retrieved user count for the specified organization role. Returns the total number of users currently assigned to the role.\x12<\n:\x1a\x38.scalekit.v1.roles.GetOrganizationRoleUsersCountResponse\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02>\x12\n\x03\x32\x30\x30\x12\x37\n5Permission successfully deleted. No content returned.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\'*%/api/v1/permissions/{permission_name}\x12\x80\t\n\x13ListRolePermissions\x12-.scalekit.v1.roles.ListRolePermissionsRequest\x1a..scalekit.v1.roles.ListRolePermissionsResponse\"\x89\x08\x92\x41\xd2\x07\n\x05Roles\x12\x19List permissions for role\x1a\xd7\x05Retrieves all permissions directly assigned to the specified role, excluding permissions inherited from base roles. Use this endpoint to view the explicit permission assignments for a role, which is useful for understanding direct role capabilities, auditing permission assignments, or managing role-permission relationships. Provide the role name as a path parameter, and the response will include only the permissions that are directly assigned to that role. This operation does not include inherited permissions from role hierarchies - use ListEffectiveRolePermissions to see the complete set of permissions including inheritance. Returns a list of permission objects with their names, descriptions, and assignment metadata.J\xd3\x01\n\x03\x32\x30\x30\x12\xcb\x01\n\x94\x01Successfully retrieved role permissions. Returns a list of all permissions directly assigned to the specified role, excluding inherited permissions.\x12\x32\n0\x1a..scalekit.v1.roles.ListRolePermissionsResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\'\x12%/api/v1/roles/{role_name}/permissions\x12\xfa\x08\n\x14\x41\x64\x64PermissionsToRole\x12..scalekit.v1.roles.AddPermissionsToRoleRequest\x1a/.scalekit.v1.roles.AddPermissionsToRoleResponse\"\x80\x08\x92\x41\xc6\x07\n\x05Roles\x12\x17\x41\x64\x64 permissions to role\x1a\xbd\x05\x41\x64\x64s one or more permissions to the specified role while preserving existing permission assignments. Use this endpoint to grant additional capabilities to a role without affecting its current permission set. Provide the role name as a path parameter and a list of permission names in the request body. The system will validate that all specified permissions exist in the environment and add them to the role. Existing permission assignments remain unchanged, making this operation safe for incremental permission management. This is useful for gradually expanding role capabilities or adding new permissions as your system evolves. Returns the updated list of all permissions now assigned to the role.J\xe3\x01\n\x03\x32\x30\x30\x12\xdb\x01\n\xa3\x01Permissions added to role successfully. Returns the complete list of all permissions now assigned to the role, including both existing and newly added permissions.\x12\x33\n1\x1a/.scalekit.v1.roles.AddPermissionsToRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02*\"%/api/v1/roles/{role_name}/permissions:\x01*\x12\xb7\x07\n\x18RemovePermissionFromRole\x12\x32.scalekit.v1.roles.RemovePermissionFromRoleRequest\x1a\x16.google.protobuf.Empty\"\xce\x06\x92\x41\x85\x06\n\x05Roles\x12\x1bRemove permission from role\x1a\x94\x05Removes a specific permission from the specified role, revoking that capability from all users assigned to the role. Use this endpoint to restrict role capabilities or remove unnecessary permissions. Provide both the role name and permission name as path parameters. This operation only affects the direct permission assignment and does not impact permissions inherited from base roles. If the permission is inherited through role hierarchy, you may need to modify the base role instead. This is useful for fine-tuning role permissions, implementing least-privilege access controls, or removing deprecated permissions. Returns no content on successful removal.JH\n\x03\x32\x30\x30\x12\x41\n?Permission removed from role successfully. No content returned.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x39*7/api/v1/roles/{role_name}/permissions/{permission_name}\x12\xdf\t\n\x1cListEffectiveRolePermissions\x12\x36.scalekit.v1.roles.ListEffectiveRolePermissionsRequest\x1a\x37.scalekit.v1.roles.ListEffectiveRolePermissionsResponse\"\xcd\x08\x92\x41\x92\x08\n\x05Roles\x12#List effective permissions for role\x1a\xd9\x05Retrieves the complete set of effective permissions for a role, including both directly assigned permissions and permissions inherited from base roles through the role hierarchy. Use this endpoint to understand the full scope of capabilities available to users assigned to a specific role. Provide the role name as a path parameter, and the response will include all permissions that apply to the role, accounting for inheritance relationships. This operation is essential for auditing role capabilities, understanding permission inheritance, or verifying the complete access scope before role assignment. Returns a comprehensive list of permission names representing the full set of effective permissions for the specified role.J\x87\x02\n\x03\x32\x30\x30\x12\xff\x01\n\xbf\x01Successfully retrieved effective permissions. Returns the complete list of all permissions that apply to the role, including both direct assignments and inherited permissions from base roles.\x12;\n9\x1a\x37.scalekit.v1.roles.ListEffectiveRolePermissionsResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02+\x12)/api/v1/roles/{role_name}/permissions:all\x1a\xe2\x02\x92\x41\xde\x02\n\x05Roles\x12\xd4\x02Role-based access control (RBAC) for defining and managing permissions in an environment. Create and update custom roles with explicit permissions, model role hierarchies through inheritance, view dependent roles, manage role-permission assignments, and list roles and permissions. Also provides a utility to count users assigned to a role.B1Z/github.com/scalekit-inc/scalekit/pkg/grpc/rolesb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dscalekit/v1/roles/roles.proto\x12\x11scalekit.v1.roles\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"\x8b\r\n\x04Role\x12y\n\x02id\x18\x01 \x01(\tBi\x92\x41\x63\x32HUnique system-generated identifier for the role. Immutable once created.J\x17\"role_1234abcd5678efgh\"\xe0\x41\x03R\x02id\x12\x95\x01\n\x04name\x18\x02 \x01(\tB\x80\x01\x92\x41q2]Unique name identifier for the role. Must be alphanumeric with underscores, 1-100 characters.J\x10\"content_editor\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x04name\x12\x94\x01\n\x0c\x64isplay_name\x18\x03 \x01(\tBq\x92\x41\x62\x32NHuman-readable display name for the role. Used in user interfaces and reports.J\x10\"Content Editor\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x0b\x64isplayName\x12\xc9\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tB\xa6\x01\x92\x41\xa2\x01\x32UDetailed description of the role\'s purpose and capabilities. Maximum 2000 characters.JI\"Can create, edit, and publish content but cannot delete or manage users\"R\x0b\x64\x65scription\x12}\n\x0f\x64\x65\x66\x61ult_creator\x18\x06 \x01(\x08\x42T\x92\x41Q2IIndicates if this role is the default creator role for new organizations.J\x04trueR\x0e\x64\x65\x66\x61ultCreator\x12r\n\x0e\x64\x65\x66\x61ult_member\x18\x07 \x01(\x08\x42K\x92\x41H2@Indicates if this role is the default member role for new users.J\x04trueR\rdefaultMember\x12\xa6\x01\n\x07\x65xtends\x18\x08 \x01(\tB\x86\x01\x92\x41\x64\x32TName of the base role that this role extends. Enables hierarchical role inheritance.J\x0c\"admin_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x07\x65xtends\x88\x01\x01\x12\xef\x02\n\x0bpermissions\x18\t \x03(\x0b\x32!.scalekit.v1.roles.RolePermissionB\xa9\x02\x92\x41\xa5\x02\x32uList of permissions with role source information. Only included when \'include\' parameter is specified in the request.J\xab\x01[{\"name\": \"read:content\", \"description\": \"Read Content\", \"role_name\": \"admin_role\"}, {\"name\": \"write:content\", \"description\": \"Write Content\", \"role_name\": \"editor_role\"}]R\x0bpermissions\x12\x90\x01\n\x15\x64\x65pendent_roles_count\x18\n \x01(\x05\x42\\\x92\x41Y2TNumber of roles that extend from this role (dependent roles count). Read-only field.J\x01\x33R\x13\x64\x65pendentRolesCount\x12Z\n\x0bis_org_role\x18\x0b \x01(\x08\x42:\x92\x41\x37\x32/Indicates if this role is an organization role.J\x04trueR\tisOrgRoleB\n\n\x08_extendsJ\x04\x08\x05\x10\x06\"\xce\t\n\nCreateRole\x12\xf1\x01\n\x04name\x18\x02 \x01(\tB\xdc\x01\x92\x41\xb6\x01\x32\xa1\x01Unique name identifier for the role. Must be alphanumeric with underscores, 1-64 characters. This name is used in API calls and cannot be changed after creation.J\x10\"content_editor\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x04name\x12\xb2\x01\n\x0c\x64isplay_name\x18\x03 \x01(\tB\x8e\x01\x92\x41\x7f\x32kHuman-readable display name for the role. Used in user interfaces, reports, and user-facing communications.J\x10\"Content Editor\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x0b\x64isplayName\x12\xfb\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tB\xd3\x01\x92\x41\xc7\x01\x32jDetailed description of the role\'s purpose, capabilities, and intended use cases. Maximum 2000 characters.JY\"Can create, edit, and publish content but cannot delete content or manage user accounts\"\xbaH\x05r\x03\x18\xd0\x0fH\x00R\x0b\x64\x65scription\x88\x01\x01\x12\xe0\x01\n\x07\x65xtends\x18\x08 \x01(\tB\xc0\x01\x92\x41\x9d\x01\x32\x90\x01Name of the base role that this role extends. Enables hierarchical role inheritance where this role inherits all permissions from the base role.J\x08\"viewer\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x01R\x07\x65xtends\x88\x01\x01\x12\x87\x02\n\x0bpermissions\x18\t \x03(\tB\xe4\x01\x92\x41\xbe\x01\x32\x85\x01List of permission names to assign to this role. Permissions must exist in the current environment. Maximum 100 permissions per role.J4[\"read:content\", \"write:content\", \"publish:content\"]\xbaH\x1f\x92\x01\x1c\x10\x64\"\x18r\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$R\x0bpermissionsB\x0e\n\x0c_descriptionB\n\n\x08_extendsJ\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08\"\xa4\x06\n\x16\x43reateOrganizationRole\x12t\n\x04name\x18\x02 \x01(\tB`\x92\x41;2&Unique name of the organization\'s roleJ\x11\"org_viewer_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x04name\x12w\n\x0c\x64isplay_name\x18\x03 \x01(\tBT\x92\x41\x45\x32\'Display name of the organization\'s roleJ\x1a\"Organization Viewer Role\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x0b\x64isplayName\x12\xa0\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tBy\x92\x41n2&Description of the organization\'s roleJD\"Organization Viewer Role will be used only for viewing the objects\"\xbaH\x05r\x03\x18\xd0\x0fH\x00R\x0b\x64\x65scription\x88\x01\x01\x12v\n\x07\x65xtends\x18\x08 \x01(\tBW\x92\x41\x35\x32%Base role name for hierarchical rolesJ\x0c\"admin_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x01R\x07\x65xtends\x88\x01\x01\x12\xd1\x01\n\x0bpermissions\x18\t \x03(\tB\xae\x01\x92\x41\x88\x01\x32\x63List of permission names to assign to this role. Permissions must exist in the current environment.J![\"read:users\", \"write:documents\"]\xbaH\x1f\x92\x01\x1c\x10\x64\"\x18r\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$R\x0bpermissionsB\x0e\n\x0c_descriptionB\n\n\x08_extendsJ\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08\"\xdc\x02\n\x11\x43reateRoleRequest\x12\xc0\x02\n\x04role\x18\x02 \x01(\x0b\x32\x1d.scalekit.v1.roles.CreateRoleB\x8c\x02\x92\x41\x82\x02\x32lRole configuration details including name, display name, description, permissions, and inheritance settings.J\x91\x01{\"name\": \"content_editor\", \"display_name\": \"Content Editor\", \"description\": \"Can edit content\", \"permissions\": [\"read:content\", \"write:content\"]}\xbaH\x03\xc8\x01\x01R\x04roleJ\x04\x08\x01\x10\x02\"\x9a\x02\n\x12\x43reateRoleResponse\x12\x83\x02\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\xd5\x01\x92\x41\xd1\x01\x32OThe created role object with system-generated ID and all configuration details.J~{\"id\": \"role_1234abcd5678efgh\", \"name\": \"content_editor\", \"display_name\": \"Content Editor\", \"description\": \"Can edit content\"}R\x04role\"\xe7\x03\n\x0eGetRoleRequest\x12\xbe\x01\n\trole_name\x18\x02 \x01(\tB\xa0\x01\x92\x41{2gUnique name identifier of the role to retrieve. Must be alphanumeric with underscores, 1-64 characters.J\x10\"content_editor\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\x81\x02\n\x07include\x18\x03 \x01(\tB\xe1\x01\x92\x41\xb8\x01\x32\xa6\x01Include additional data in the response. Valid values: \'permissions\' (direct permissions only), \'permissions:all\' (includes inherited permissions from role hierarchy)J\r\"permissions\"\xbaH\"r R\x00R\x0bpermissionsR\x0fpermissions:allH\x00R\x07include\x88\x01\x01\x42\n\n\x08_includeJ\x04\x08\x01\x10\x02\"\xbe\x02\n\x0fGetRoleResponse\x12\xaa\x02\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\xfc\x01\x92\x41\xf8\x01\x32QThe complete role object with all metadata, permissions, and inheritance details.J\xa2\x01{\"id\": \"role_1234abcd5678efgh\", \"name\": \"content_editor\", \"display_name\": \"Content Editor\", \"permissions\": [{\"name\": \"read:content\"}], \"dependent_roles_count\": 2}R\x04role\"\xa8\x02\n\x10ListRolesRequest\x12\x81\x02\n\x07include\x18\x02 \x01(\tB\xe1\x01\x92\x41\xb8\x01\x32\xa6\x01Include additional data in the response. Valid values: \'permissions\' (direct permissions only), \'permissions:all\' (includes inherited permissions from role hierarchy)J\r\"permissions\"\xbaH\"r R\x00R\x0bpermissionsR\x0fpermissions:allH\x00R\x07include\x88\x01\x01\x42\n\n\x08_includeJ\x04\x08\x01\x10\x02\"\xc9\x02\n\x11ListRolesResponse\x12\xb3\x02\n\x05roles\x18\x01 \x03(\x0b\x32\x17.scalekit.v1.roles.RoleB\x83\x02\x92\x41\xff\x01\x32ZList of all roles in the environment with their metadata and optionally their permissions.J\xa0\x01[{\"id\": \"role_1234abcd5678efgh\", \"name\": \"admin\", \"display_name\": \"Administrator\"}, {\"id\": \"role_9876zyxw5432vuts\", \"name\": \"viewer\", \"display_name\": \"Viewer\"}]R\x05roles\"\xdd\x08\n\nUpdateRole\x12\xbc\x01\n\x0c\x64isplay_name\x18\x01 \x01(\tB\x93\x01\x92\x41\x86\x01\x32kHuman-readable display name for the role. Used in user interfaces, reports, and user-facing communications.J\x17\"Senior Content Editor\"\xbaH\x06r\x04\x10\x01\x18\x64H\x00R\x0b\x64isplayName\x88\x01\x01\x12\x84\x02\n\x0b\x64\x65scription\x18\x02 \x01(\tB\xdc\x01\x92\x41\xce\x01\x32jDetailed description of the role\'s purpose, capabilities, and intended use cases. Maximum 2000 characters.J`\"Can create, edit, publish, and approve content. Cannot delete content or manage user accounts.\"\xbaH\x07r\x05\x10\x01\x18\xd0\x0fH\x01R\x0b\x64\x65scription\x88\x01\x01\x12\xe8\x01\n\x07\x65xtends\x18\x06 \x01(\tB\xc8\x01\x92\x41\xa5\x01\x32\x90\x01Name of the base role that this role extends. Enables hierarchical role inheritance where this role inherits all permissions from the base role.J\x10\"content_editor\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x02R\x07\x65xtends\x88\x01\x01\x12\xde\x02\n\x0bpermissions\x18\x07 \x03(\tB\xbb\x02\x92\x41\x95\x02\x32\xc9\x01List of permission names to assign to this role. When provided, this replaces all existing role-permission mappings. Permissions must exist in the current environment. Maximum 100 permissions per role.JG[\"read:content\", \"write:content\", \"publish:content\", \"approve:content\"]\xbaH\x1f\x92\x01\x1c\x10\x64\"\x18r\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$R\x0bpermissionsB\x0f\n\r_display_nameB\x0e\n\x0c_descriptionB\n\n\x08_extendsJ\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06\"\xab\x03\n\x11UpdateRoleRequest\x12\xbc\x01\n\trole_name\x18\x02 \x01(\tB\x9e\x01\x92\x41y2eUnique name identifier of the role to update. Must be alphanumeric with underscores, 1-64 characters.J\x10\"content_editor\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\xd0\x01\n\x04role\x18\x03 \x01(\x0b\x32\x1d.scalekit.v1.roles.UpdateRoleB\x9c\x01\x92\x41\x92\x01\x32>Role fields to update. Only specified fields will be modified.JP{\"display_name\": \"Senior Editor\", \"description\": \"Can edit and approve content\"}\xbaH\x03\xc8\x01\x01R\x04roleJ\x04\x08\x01\x10\x02\"\x96\x02\n\x12UpdateRoleResponse\x12\xff\x01\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\xd1\x01\x92\x41\xcd\x01\x32?The updated role object with all current configuration details.J\x89\x01{\"id\": \"role_1234abcd5678efgh\", \"name\": \"content_editor\", \"display_name\": \"Senior Editor\", \"description\": \"Can edit and approve content\"}R\x04role\"\xba\x04\n\x11\x44\x65leteRoleRequest\x12\xb6\x01\n\trole_name\x18\x02 \x01(\tB\x98\x01\x92\x41s2eUnique name identifier of the role to delete. Must be alphanumeric with underscores, 1-64 characters.J\n\"old_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\x9a\x01\n\x10reassign_role_id\x18\x03 \x01(\tBk\x18\x01\x92\x41G26Role name to reassign users to when deleting this roleJ\r\"member_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x0ereassignRoleId\x88\x01\x01\x12\x9c\x01\n\x12reassign_role_name\x18\x04 \x01(\tBi\x92\x41G26Role name to reassign users to when deleting this roleJ\r\"member_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x01R\x10reassignRoleName\x88\x01\x01\x42\x13\n\x11_reassign_role_idB\x15\n\x13_reassign_role_nameJ\x04\x08\x01\x10\x02\"\xec\x01\n\x1d\x43reateOrganizationRoleRequest\x12\x66\n\x06org_id\x18\x01 \x01(\tBO\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12\x63\n\x04role\x18\x02 \x01(\x0b\x32).scalekit.v1.roles.CreateOrganizationRoleB$\x92\x41\x1b\x32\x19Organization role details\xbaH\x03\xc8\x01\x01R\x04role\"M\n\x1e\x43reateOrganizationRoleResponse\x12+\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleR\x04role\"\xeb\x03\n\x1aGetOrganizationRoleRequest\x12\x66\n\x06org_id\x18\x01 \x01(\tBO\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12i\n\trole_name\x18\x02 \x01(\tBL\x92\x41\'2\x17Unique name of the roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\xed\x01\n\x07include\x18\x03 \x01(\tB\xcd\x01\x92\x41\xa4\x01\x32\x92\x01Include additional data in the response. Valid values: \'permissions\' (direct permissions only), \'permissions:all\' (includes inherited permissions)J\r\"permissions\"\xbaH\"r R\x00R\x0bpermissionsR\x0fpermissions:allH\x00R\x07include\x88\x01\x01\x42\n\n\x08_include\"J\n\x1bGetOrganizationRoleResponse\x12+\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleR\x04role\"\xe2\x04\n\x1cListOrganizationRolesRequest\x12i\n\x06org_id\x18\x01 \x01(\tBR\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0er\t\x10\x01\x18 :\x03org\xc8\x01\x01R\x05orgId\x12\xed\x01\n\x07include\x18\x02 \x01(\tB\xcd\x01\x92\x41\xa4\x01\x32\x92\x01Include additional data in the response. Valid values: \'permissions\' (direct permissions only), \'permissions:all\' (includes inherited permissions)J\r\"permissions\"\xbaH\"r R\x00R\x0bpermissionsR\x0fpermissions:allH\x00R\x07include\x88\x01\x01:\xda\x01\x92\x41\xd6\x01\n\xb0\x01*\x17List organization roles2\x8b\x01Retrieves a paginated list of all roles within the organization. Use the page_token from the response to access subsequent pages of results\xd2\x01\x06org_id2!{\"org_id\" : \"org_8756865685762\" }B\n\n\x08_include\"j\n\x1dListOrganizationRolesResponse\x12I\n\x05roles\x18\x01 \x03(\x0b\x32\x17.scalekit.v1.roles.RoleB\x1a\x92\x41\x17\x32\x15List of roles objectsR\x05roles\"\xcb\x02\n\x1dUpdateOrganizationRoleRequest\x12\x66\n\x06org_id\x18\x01 \x01(\tBO\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12i\n\trole_name\x18\x02 \x01(\tBL\x92\x41\'2\x17Unique name of the roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12W\n\x04role\x18\x03 \x01(\x0b\x32\x1d.scalekit.v1.roles.UpdateRoleB$\x92\x41\x1b\x32\x19Organization role details\xbaH\x03\xc8\x01\x01R\x04role\"M\n\x1eUpdateOrganizationRoleResponse\x12+\n\x04role\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleR\x04role\"\xa8\x03\n\x1d\x44\x65leteOrganizationRoleRequest\x12\x66\n\x06org_id\x18\x01 \x01(\tBO\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12i\n\trole_name\x18\x02 \x01(\tBL\x92\x41\'2\x17Unique name of the roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\x12\x9c\x01\n\x12reassign_role_name\x18\x03 \x01(\tBi\x92\x41G26Role name to reassign users to when deleting this roleJ\r\"member_role\"\xbaH\x1cr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x10reassignRoleName\x88\x01\x01\x42\x15\n\x13_reassign_role_name\"\x8b\x01\n\x18GetRoleUsersCountRequest\x12i\n\trole_name\x18\x02 \x01(\tBL\x92\x41\'2\x17Unique name of the roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleNameJ\x04\x08\x01\x10\x02\"k\n\x19GetRoleUsersCountResponse\x12N\n\x05\x63ount\x18\x01 \x01(\x03\x42\x38\x92\x41.2(Number of users associated with the roleJ\x02\x31\x30\xbaH\x04\x1a\x02 \x00R\x05\x63ount\"\xff\x01\n$GetOrganizationRoleUsersCountRequest\x12_\n\x06org_id\x18\x01 \x01(\tBH\x92\x41\x39\x32%Unique identifier of the organizationJ\x10\"org_1234567890\"\xbaH\tr\x04\x10\x01\x18\x64\xc8\x01\x01R\x05orgId\x12v\n\trole_name\x18\x02 \x01(\tBY\x92\x41\x34\x32$Unique name of the organization roleJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\"\x83\x01\n%GetOrganizationRoleUsersCountResponse\x12Z\n\x05\x63ount\x18\x01 \x01(\x03\x42\x44\x92\x41:25Number of users associated with the organization roleJ\x01\x35\xbaH\x04\x1a\x02 \x00R\x05\x63ount\"\xf0\t\n\x19UpdateDefaultRolesRequest\x12\x9e\x02\n\x0f\x64\x65\x66\x61ult_creator\x18\x02 \x01(\x0b\x32$.scalekit.v1.roles.UpdateDefaultRoleB\xce\x01\x18\x01\x92\x41\xc8\x01\x32JDefault creator role (deprecated - use default_creator_role field instead)Jz{\"id\": \"role_1234567890\", \"name\": \"creator\", \"display_name\": \"Creator Role\", \"description\": \"Role for creating resources\"}R\x0e\x64\x65\x66\x61ultCreator\x12\x95\x02\n\x0e\x64\x65\x66\x61ult_member\x18\x03 \x01(\x0b\x32$.scalekit.v1.roles.UpdateDefaultRoleB\xc7\x01\x18\x01\x92\x41\xc1\x01\x32HDefault member role (deprecated - use default_member_role field instead)Ju{\"id\": \"role_0987654321\", \"name\": \"member\", \"display_name\": \"Member Role\", \"description\": \"Role for regular members\"}R\rdefaultMember\x12\xb6\x02\n\x14\x64\x65\x66\x61ult_creator_role\x18\x04 \x01(\tB\xfe\x01\x92\x41\xdb\x01\x32\xcd\x01Name of the role to set as the default creator role. This role will be automatically assigned to users who create new resources in the environment. Must be a valid role name that exists in the environment.J\t\"creator\"\xbaH\x1cr\x1a\x10\x00\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x12\x64\x65\x66\x61ultCreatorRole\x88\x01\x01\x12\xa9\x02\n\x13\x64\x65\x66\x61ult_member_role\x18\x05 \x01(\tB\xf3\x01\x92\x41\xd0\x01\x32\xc3\x01Name of the role to set as the default member role. This role will be automatically assigned to new users when they join the environment. Must be a valid role name that exists in the environment.J\x08\"member\"\xbaH\x1cr\x1a\x10\x00\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x01R\x11\x64\x65\x66\x61ultMemberRole\x88\x01\x01\x42\x17\n\x15_default_creator_roleB\x16\n\x14_default_member_roleJ\x04\x08\x01\x10\x02\"\x9c\x02\n%UpdateDefaultOrganizationRolesRequest\x12i\n\x06org_id\x18\x01 \x01(\tBR\x92\x41>2%Unique identifier of the organizationJ\x15\"org_121312434123312\"\xbaH\x0er\t\x10\x01\x18 :\x03org\xc8\x01\x01R\x05orgId\x12\x87\x01\n\x13\x64\x65\x66\x61ult_member_role\x18\x02 \x01(\tBW\x92\x41\x32\x32&Unique name of the default member roleJ\x08\"member\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x11\x64\x65\x66\x61ultMemberRole\"\xc6\x05\n\x1aUpdateDefaultRolesResponse\x12\xd6\x02\n\x0f\x64\x65\x66\x61ult_creator\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\x93\x02\x92\x41\x8f\x02\x32\x90\x01The role that is now set as the default creator role for the environment. Contains complete role information including permissions and metadata.Jz{\"id\": \"role_1234567890\", \"name\": \"creator\", \"display_name\": \"Creator Role\", \"description\": \"Role for creating resources\"}R\x0e\x64\x65\x66\x61ultCreator\x12\xce\x02\n\x0e\x64\x65\x66\x61ult_member\x18\x02 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\x8d\x02\x92\x41\x89\x02\x32\x8f\x01The role that is now set as the default member role for the environment. Contains complete role information including permissions and metadata.Ju{\"id\": \"role_0987654321\", \"name\": \"member\", \"display_name\": \"Member Role\", \"description\": \"Role for regular members\"}R\rdefaultMember\"\x84\x02\n&UpdateDefaultOrganizationRolesResponse\x12\xd9\x01\n\x0e\x64\x65\x66\x61ult_member\x18\x02 \x01(\x0b\x32\x17.scalekit.v1.roles.RoleB\x98\x01\x92\x41\x94\x01\x32\x1bUpdated default member roleJu{\"id\": \"role_0987654321\", \"name\": \"member\", \"display_name\": \"Member Role\", \"description\": \"Role for regular members\"}R\rdefaultMember\"\x9e\x01\n\x11UpdateDefaultRole\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04roleR\x02id\x12_\n\x04name\x18\x02 \x01(\tBF\x92\x41$2\x17Unique name of the roleJ\t\"creator\"\xbaH\x1cr\x1a\x10\x00\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$H\x00R\x04name\x88\x01\x01\x42\x07\n\x05_name\"\x85\x03\n\nPermission\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04permR\x02id\x12\x32\n\x04name\x18\x02 \x01(\tB\x1e\xbaH\x1br\x16\x10\x01\x18\x64\x32\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\x12;\n\x0b\x63reate_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12;\n\x0bupdate_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nupdateTime\x12|\n\x16is_scalekit_permission\x18\x06 \x01(\x08\x42\x46\x92\x41\x43\x32;Indicates whether this permission is predefined by ScalekitJ\x04trueR\x14isScalekitPermission\"\x97\x03\n\x0eRolePermission\x12\x1f\n\x02id\x18\x01 \x01(\tB\x0f\xbaH\x0cr\n\x10\x01\x18 :\x04permR\x02id\x12\x32\n\x04name\x18\x02 \x01(\tB\x1e\xbaH\x1br\x16\x10\x01\x18\x64\x32\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x04name\x12*\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\x12;\n\x0b\x63reate_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12;\n\x0bupdate_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nupdateTime\x12\x89\x01\n\trole_name\x18\x06 \x01(\tBl\x92\x41G27Name of the role from which this permission was sourcedJ\x0c\"admin_role\"\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName\"\x81\x02\n\x10\x43reatePermission\x12n\n\x04name\x18\x01 \x01(\tBZ\x92\x41\x34\x32 Unique name/ID of the permissionJ\x10\"read:documents\"\xbaH r\x1b\x10\x01\x18\x64\x32\x15^[a-zA-Z0-9_:]{1,64}$\xc8\x01\x01R\x04name\x12}\n\x0b\x64\x65scription\x18\x02 \x01(\tB[\x92\x41P2\x1d\x44\x65scription of the permissionJ/\"Allows user to read documents from the system\"\xbaH\x05r\x03\x18\xd0\x0fR\x0b\x64\x65scription\"f\n\x17\x43reatePermissionRequest\x12K\n\npermission\x18\x01 \x01(\x0b\x32#.scalekit.v1.roles.CreatePermissionB\x06\xbaH\x03\xc8\x01\x01R\npermission\"Y\n\x18\x43reatePermissionResponse\x12=\n\npermission\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.roles.PermissionR\npermission\"\x88\x01\n\x14GetPermissionRequest\x12p\n\x0fpermission_name\x18\x01 \x01(\tBG\x92\x41&2\x16Name of the permissionJ\x0c\"read:users\"\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x0epermissionName\"V\n\x15GetPermissionResponse\x12=\n\npermission\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.roles.PermissionR\npermission\"\xd8\x01\n\x17UpdatePermissionRequest\x12p\n\x0fpermission_name\x18\x01 \x01(\tBG\x92\x41&2\x16Name of the permissionJ\x0c\"read_users\"\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x0epermissionName\x12K\n\npermission\x18\x03 \x01(\x0b\x32#.scalekit.v1.roles.CreatePermissionB\x06\xbaH\x03\xc8\x01\x01R\npermission\"Y\n\x18UpdatePermissionResponse\x12=\n\npermission\x18\x01 \x01(\x0b\x32\x1d.scalekit.v1.roles.PermissionR\npermission\"\x89\x04\n\x16ListPermissionsRequest\x12\x64\n\npage_token\x18\x01 \x01(\tB@\x92\x41=2+Page token to retrieve next page of resultsJ\x0e\"token_abc123\"H\x00R\tpageToken\x88\x01\x01\x12\x66\n\tpage_size\x18\x02 \x01(\rBD\x92\x41\x38\x32\x32Number of permissions to return per page (max 100)J\x02\x35\x30\xbaH\x06*\x04\x18\x64(\x01H\x01R\x08pageSize\x88\x01\x01\x12\x83\x02\n\x04type\x18\x03 \x01(\x0e\x32!.scalekit.v1.roles.PermissionTypeB\xcb\x01\x92\x41\xc7\x01\x32\xbf\x01\x46ilter permissions by type: ALL, SCALEKIT, or ENVIRONMENT, where SCALEKIT are predefined Scalekit permissions and ENVIRONMENT are custom permissions created in the environment, default is ALLJ\x03\x41LLR\x04typeB\r\n\x0b_page_tokenB\x0c\n\n_page_size\"\xf8\x02\n\x17ListPermissionsResponse\x12?\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x1d.scalekit.v1.roles.PermissionR\x0bpermissions\x12g\n\x0fprev_page_token\x18\x02 \x01(\tB?\x92\x41<2*Token to retrieve previous page of resultsJ\x0e\"token_def456\"R\rprevPageToken\x12\x63\n\x0fnext_page_token\x18\x03 \x01(\tB;\x92\x41\x38\x32&Token to retrieve next page of resultsJ\x0e\"token_def456\"R\rnextPageToken\x12N\n\ntotal_size\x18\x04 \x01(\rB/\x92\x41,2%Total number of permissions availableJ\x03\x31\x35\x30R\ttotalSize\"\x8b\x01\n\x17\x44\x65letePermissionRequest\x12p\n\x0fpermission_name\x18\x01 \x01(\tBG\x92\x41&2\x16Name of the permissionJ\x0c\"read_users\"\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x0epermissionName\"u\n\x1aListRolePermissionsRequest\x12W\n\trole_name\x18\x01 \x01(\tB:\x92\x41\x19\x32\x10Name of the roleJ\x05\x61\x64min\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_-]+$\xc8\x01\x01R\x08roleName\"\x96\x01\n\x1bListRolePermissionsResponse\x12w\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x1d.scalekit.v1.roles.PermissionB6\x92\x41\x33\x32\x31List of permissions directly assigned to the roleR\x0bpermissions\"\xfb\x01\n\x1b\x41\x64\x64PermissionsToRoleRequest\x12W\n\trole_name\x18\x01 \x01(\tB:\x92\x41\x19\x32\x10Name of the roleJ\x05\x61\x64min\xbaH\x1br\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x08roleName\x12\x82\x01\n\x10permission_names\x18\x02 \x03(\tBW\x92\x41-2+List of permission names to add to the role\xbaH$\x92\x01\x1e\x08\x01\x10\x64\"\x18r\x16\x10\x01\x18@2\x10^[a-zA-Z0-9_:]+$\xc8\x01\x01R\x0fpermissionNames\"\xa3\x01\n\x1c\x41\x64\x64PermissionsToRoleResponse\x12\x82\x01\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x1d.scalekit.v1.roles.PermissionBA\x92\x41>2\x92\x41\x1e\x32\x15Name of the base roleJ\x05\x61\x64min\xbaH\x1ar\x15\x10\x01\x18@2\x0f^[a-zA-Z0-9_]+$\xc8\x01\x01R\x08roleName\"i\n\x1aListDependentRolesResponse\x12K\n\x05roles\x18\x01 \x03(\x0b\x32\x17.scalekit.v1.roles.RoleB\x1c\x92\x41\x19\x32\x17List of dependent rolesR\x05roles\"\xfd\x01\n\x15\x44\x65leteRoleBaseRequest\x12\xe3\x01\n\trole_name\x18\x01 \x01(\tB\xc5\x01\x92\x41\xa4\x01\x32\x91\x01Unique name identifier of the role whose base inheritance relationship should be removed. Must be alphanumeric with underscores, 1-64 characters.J\x0e\x63ontent_editor\xbaH\x1ar\x15\x10\x01\x18@2\x0f^[a-zA-Z0-9_]+$\xc8\x01\x01R\x08roleName\"\x88\x02\n!DeleteOrganizationRoleBaseRequest\x12\x65\n\x06org_id\x18\x01 \x01(\tBN\x92\x41=2$Unique identifier to an OrganizationJ\x15\"org_121312434123312\"\xbaH\x0br\t\x10\x01\x18 :\x03orgR\x05orgId\x12|\n\trole_name\x18\x02 \x01(\tB_\x92\x41:21Name of the organization role to remove base fromJ\x05\x61\x64min\xbaH\x1fr\x1a\x10\x01\x18\x64\x32\x14^[a-zA-Z0-9_]{1,64}$\xc8\x01\x01R\x08roleName*8\n\x0ePermissionType\x12\x07\n\x03\x41LL\x10\x00\x12\x0c\n\x08SCALEKIT\x10\x01\x12\x0f\n\x0b\x45NVIRONMENT\x10\x02\x32\x84\xbc\x01\n\x0cRolesService\x12\xcf\x05\n\nCreateRole\x12$.scalekit.v1.roles.CreateRoleRequest\x1a%.scalekit.v1.roles.CreateRoleResponse\"\xf3\x04\x92\x41\xce\x04\n\x05Roles\x12\x1e\x43reate new role in environment\x1a\x88\x03\x43reates a new role within the environment with specified permissions and metadata. Use this endpoint to define custom roles that can be assigned to users or groups. You can create hierarchical roles by extending existing roles, assign specific permissions, and configure display information. Roles are the foundation of your access control system and determine what actions users can perform.J\x99\x01\n\x03\x32\x30\x31\x12\x91\x01\ndRole created successfully. Returns the complete role object with system-generated ID and timestamps.\x12)\n\'\x1a%.scalekit.v1.roles.CreateRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x15\"\r/api/v1/roles:\x04role\x12\xb2\x05\n\nUpdateRole\x12$.scalekit.v1.roles.UpdateRoleRequest\x1a%.scalekit.v1.roles.UpdateRoleResponse\"\xd6\x04\x92\x41\xa5\x04\n\x05Roles\x12\x17Update role information\x1a\xf6\x02Modifies an existing role\'s properties including display name, description, permissions, and inheritance. Use this endpoint to update role metadata, change permission assignments, or modify role hierarchy. Only the fields you specify will be updated, leaving other properties unchanged. When updating permissions, the new list replaces all existing permissions for the role.J\x89\x01\n\x03\x32\x30\x30\x12\x81\x01\nTRole updated successfully. Returns the modified role object with updated timestamps.\x12)\n\'\x1a%.scalekit.v1.roles.UpdateRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02!\x1a\x19/api/v1/roles/{role_name}:\x04role\x12\xff\x04\n\x07GetRole\x12!.scalekit.v1.roles.GetRoleRequest\x1a\".scalekit.v1.roles.GetRoleResponse\"\xac\x04\x92\x41\x81\x04\n\x05Roles\x12\x10Get role details\x1a\xa9\x02Retrieves complete information for a specific role including metadata and inheritance details (base role and dependent role count). Use this endpoint to audit role configuration and understand the role\'s place in the hierarchy. To view the role\'s permissions, use the ListRolePermissions endpoint.J\xb9\x01\n\x03\x32\x30\x30\x12\xb1\x01\n\x86\x01Successfully retrieved role details. Returns the role object including metadata and inheritance details. Permissions are not included.\x12&\n$\x1a\".scalekit.v1.roles.GetRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1b\x12\x19/api/v1/roles/{role_name}\x12\x89\x06\n\tListRoles\x12#.scalekit.v1.roles.ListRolesRequest\x1a$.scalekit.v1.roles.ListRolesResponse\"\xb0\x05\x92\x41\x91\x05\n\x05Roles\x12\x1dList all roles in environment\x1a\xc4\x03Retrieves a comprehensive list of all roles available within the specified environment including organization roles. Use this endpoint to view all role definitions, including custom roles and their configurations. You can optionally include permission details for each role to understand their capabilities. This is useful for role management, auditing organization access controls, or understanding the available access levels within the organization.J\xa1\x01\n\x03\x32\x30\x30\x12\x99\x01\nmSuccessfully retrieved list of roles. Returns all roles with their metadata and optionally their permissions.\x12(\n&\x1a$.scalekit.v1.roles.ListRolesResponse\x82\xb5\x18\x02\x18\x64\x82\xd3\xe4\x93\x02\x0f\x12\r/api/v1/roles\x12\xac\x06\n\nDeleteRole\x12$.scalekit.v1.roles.DeleteRoleRequest\x1a\x16.google.protobuf.Empty\"\xdf\x05\x92\x41\xb4\x05\n\x05Roles\x12\x1e\x44\x65lete role and reassign users\x1a\xbb\x04Permanently removes a role from the environment and reassigns users who had that role to a different role. Use this endpoint when you need to clean up unused roles or restructure your access control system. The role cannot be deleted if it has dependent roles (roles that extend it) unless you specify a replacement role. If users are assigned to the role being deleted, you must provide a reassign_role_name to move those users to a different role before deletion can proceed. This action cannot be undone, so ensure no critical users depend on the role before deletion.JM\n\x03\x32\x30\x30\x12\x46\nDRole successfully deleted and users reassigned. No content returned.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1b*\x19/api/v1/roles/{role_name}\x12\xdc\x06\n\x16\x43reateOrganizationRole\x12\x30.scalekit.v1.roles.CreateOrganizationRoleRequest\x1a\x31.scalekit.v1.roles.CreateOrganizationRoleResponse\"\xdc\x05\x92\x41\xa0\x05\n\x05Roles\x12\x18\x43reate organization role\x1a\xc7\x03\x43reates a new role within the specified organization with basic configuration including name, display name, description, and permissions. Use this endpoint to define custom roles that can be assigned to users within the organization. You can create hierarchical roles by extending existing roles and assign specific permissions to control access levels. The role will be scoped to the organization and can be used for organization-specific access control.J\xb2\x01\n\x03\x32\x30\x31\x12\xaa\x01\nqOrganization role created successfully. Returns the complete role object with system-generated ID and timestamps.\x12\x35\n3\x1a\x31.scalekit.v1.roles.CreateOrganizationRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02,\"$/api/v1/organizations/{org_id}/roles:\x04role\x12\xb5\x06\n\x16UpdateOrganizationRole\x12\x30.scalekit.v1.roles.UpdateOrganizationRoleRequest\x1a\x31.scalekit.v1.roles.UpdateOrganizationRoleResponse\"\xb5\x05\x92\x41\xed\x04\n\x05Roles\x12\x18Update organization role\x1a\xa4\x03Modifies an existing organization role\'s properties including display name, description, permissions, and inheritance settings. Use this endpoint to update role metadata, change permission assignments, or modify role hierarchy within the organization. Only the fields you specify will be updated, leaving other properties unchanged. When updating permissions, the new list replaces all existing permissions for the role.J\xa2\x01\n\x03\x32\x30\x30\x12\x9a\x01\naOrganization role updated successfully. Returns the modified role object with updated timestamps.\x12\x35\n3\x1a\x31.scalekit.v1.roles.UpdateOrganizationRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x38\x1a\x30/api/v1/organizations/{org_id}/roles/{role_name}:\x04role\x12\xb4\x07\n\x13GetOrganizationRole\x12-.scalekit.v1.roles.GetOrganizationRoleRequest\x1a..scalekit.v1.roles.GetOrganizationRoleResponse\"\xbd\x06\x92\x41\xe7\x05\n\x05Roles\x12\x1dGet organization role details\x1a\xbf\x03Retrieves complete information for a specific organization role including metadata, inheritance details, and optionally permissions. Use this endpoint to audit role configuration and understand the role\'s place in the organization\'s role hierarchy. You can include permission details to see what capabilities the role provides. This operation is useful for role management, user assignment decisions, or understanding organization access controls.J\xfc\x01\n\x03\x32\x30\x30\x12\xf4\x01\n\xbd\x01Successfully retrieved organization role details. Returns the role object including metadata and inheritance details. Permissions are included only when requested via the include parameter.\x12\x32\n0\x1a..scalekit.v1.roles.GetOrganizationRoleResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x32\x12\x30/api/v1/organizations/{org_id}/roles/{role_name}\x12\xb7\x06\n\x15ListOrganizationRoles\x12/.scalekit.v1.roles.ListOrganizationRolesRequest\x1a\x30.scalekit.v1.roles.ListOrganizationRolesResponse\"\xba\x05\x92\x41\xf0\x04\n\x05Roles\x12\x17List organization roles\x1a\x90\x03Retrieves all environment roles and organization specific roles. Use this endpoint to view all role definitions, including custom roles and their configurations. You can optionally include permission details for each role to understand their capabilities. This is useful for role management, auditing organization access controls, or understanding the available access levels within the organization.J\xba\x01\n\x03\x32\x30\x30\x12\xb2\x01\nzSuccessfully retrieved list of organization roles. Returns all roles with their metadata and optionally their permissions.\x12\x34\n2\x1a\x30.scalekit.v1.roles.ListOrganizationRolesResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02&\x12$/api/v1/organizations/{org_id}/roles\x12\x8a\x06\n\x16\x44\x65leteOrganizationRole\x12\x30.scalekit.v1.roles.DeleteOrganizationRoleRequest\x1a\x16.google.protobuf.Empty\"\xa5\x05\x92\x41\xe3\x04\n\x05Roles\x12\x18\x44\x65lete organization role\x1a\xd6\x03Permanently removes a role from the organization and optionally reassigns users who had that role to a different role. Use this endpoint when you need to clean up unused roles or restructure your organization\'s access control system. If users are assigned to the role being deleted, you can provide a reassign_role_name to move those users to a different role before deletion. This action cannot be undone, so ensure no critical users depend on the role before deletion.Jg\n\x03\x32\x30\x30\x12`\n^Organization role successfully deleted and users reassigned if specified. No content returned.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x32*0/api/v1/organizations/{org_id}/roles/{role_name}\x12\xdb\x08\n\x11GetRoleUsersCount\x12+.scalekit.v1.roles.GetRoleUsersCountRequest\x1a,.scalekit.v1.roles.GetRoleUsersCountResponse\"\xea\x07\x92\x41\xb3\x07\n\x05Roles\x12\x1cRetrieve user count for role\x1a\x93\x05Retrieves the total number of users currently assigned to the specified role within the environment. Use this endpoint to monitor role usage, enforce user limits, or understand the scope of role assignments. Provide the role\'s unique name as a path parameter, and the response will include the current user count for that role. This operation is read-only and does not modify any data or user assignments. The count reflects all users who have the role either directly assigned or inherited through organization membership. This information is useful for capacity planning, security auditing, or understanding the impact of role changes across your user base.J\xf5\x01\n\x03\x32\x30\x30\x12\xed\x01\n\xb8\x01Successfully retrieved user count for the specified role. Returns the total number of users currently assigned to the role, including both direct assignments and inherited assignments.\x12\x30\n.\x1a,.scalekit.v1.roles.GetRoleUsersCountResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\'\x12%/api/v1/roles/{role_name}/users:count\x12\xb2\x07\n\x1dGetOrganizationRoleUsersCount\x12\x37.scalekit.v1.roles.GetOrganizationRoleUsersCountRequest\x1a\x38.scalekit.v1.roles.GetOrganizationRoleUsersCountResponse\"\x9d\x06\x92\x41\xc0\x05\n\x05Roles\x12 Get organization role user count\x1a\xc0\x03Retrieves the total number of users currently assigned to the specified organization role. Use this endpoint to monitor organization role usage, enforce user limits, or understand the scope of role assignments within the organization. Provide the organization ID and role name as path parameters. The response includes the user count for the requested organization role. This operation is read-only and does not modify any data or user assignments.J\xd1\x01\n\x03\x32\x30\x30\x12\xc9\x01\n\x88\x01Successfully retrieved user count for the specified organization role. Returns the total number of users currently assigned to the role.\x12<\n:\x1a\x38.scalekit.v1.roles.GetOrganizationRoleUsersCountResponse\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02>\x12\n\x03\x32\x30\x30\x12\x37\n5Permission successfully deleted. No content returned.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\'*%/api/v1/permissions/{permission_name}\x12\x80\t\n\x13ListRolePermissions\x12-.scalekit.v1.roles.ListRolePermissionsRequest\x1a..scalekit.v1.roles.ListRolePermissionsResponse\"\x89\x08\x92\x41\xd2\x07\n\x05Roles\x12\x19List permissions for role\x1a\xd7\x05Retrieves all permissions directly assigned to the specified role, excluding permissions inherited from base roles. Use this endpoint to view the explicit permission assignments for a role, which is useful for understanding direct role capabilities, auditing permission assignments, or managing role-permission relationships. Provide the role name as a path parameter, and the response will include only the permissions that are directly assigned to that role. This operation does not include inherited permissions from role hierarchies - use ListEffectiveRolePermissions to see the complete set of permissions including inheritance. Returns a list of permission objects with their names, descriptions, and assignment metadata.J\xd3\x01\n\x03\x32\x30\x30\x12\xcb\x01\n\x94\x01Successfully retrieved role permissions. Returns a list of all permissions directly assigned to the specified role, excluding inherited permissions.\x12\x32\n0\x1a..scalekit.v1.roles.ListRolePermissionsResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\'\x12%/api/v1/roles/{role_name}/permissions\x12\xfa\x08\n\x14\x41\x64\x64PermissionsToRole\x12..scalekit.v1.roles.AddPermissionsToRoleRequest\x1a/.scalekit.v1.roles.AddPermissionsToRoleResponse\"\x80\x08\x92\x41\xc6\x07\n\x05Roles\x12\x17\x41\x64\x64 permissions to role\x1a\xbd\x05\x41\x64\x64s one or more permissions to the specified role while preserving existing permission assignments. Use this endpoint to grant additional capabilities to a role without affecting its current permission set. Provide the role name as a path parameter and a list of permission names in the request body. The system will validate that all specified permissions exist in the environment and add them to the role. Existing permission assignments remain unchanged, making this operation safe for incremental permission management. This is useful for gradually expanding role capabilities or adding new permissions as your system evolves. Returns the updated list of all permissions now assigned to the role.J\xe3\x01\n\x03\x32\x30\x30\x12\xdb\x01\n\xa3\x01Permissions added to role successfully. Returns the complete list of all permissions now assigned to the role, including both existing and newly added permissions.\x12\x33\n1\x1a/.scalekit.v1.roles.AddPermissionsToRoleResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02*\"%/api/v1/roles/{role_name}/permissions:\x01*\x12\xb7\x07\n\x18RemovePermissionFromRole\x12\x32.scalekit.v1.roles.RemovePermissionFromRoleRequest\x1a\x16.google.protobuf.Empty\"\xce\x06\x92\x41\x85\x06\n\x05Roles\x12\x1bRemove permission from role\x1a\x94\x05Removes a specific permission from the specified role, revoking that capability from all users assigned to the role. Use this endpoint to restrict role capabilities or remove unnecessary permissions. Provide both the role name and permission name as path parameters. This operation only affects the direct permission assignment and does not impact permissions inherited from base roles. If the permission is inherited through role hierarchy, you may need to modify the base role instead. This is useful for fine-tuning role permissions, implementing least-privilege access controls, or removing deprecated permissions. Returns no content on successful removal.JH\n\x03\x32\x30\x30\x12\x41\n?Permission removed from role successfully. No content returned.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x39*7/api/v1/roles/{role_name}/permissions/{permission_name}\x12\xdf\t\n\x1cListEffectiveRolePermissions\x12\x36.scalekit.v1.roles.ListEffectiveRolePermissionsRequest\x1a\x37.scalekit.v1.roles.ListEffectiveRolePermissionsResponse\"\xcd\x08\x92\x41\x92\x08\n\x05Roles\x12#List effective permissions for role\x1a\xd9\x05Retrieves the complete set of effective permissions for a role, including both directly assigned permissions and permissions inherited from base roles through the role hierarchy. Use this endpoint to understand the full scope of capabilities available to users assigned to a specific role. Provide the role name as a path parameter, and the response will include all permissions that apply to the role, accounting for inheritance relationships. This operation is essential for auditing role capabilities, understanding permission inheritance, or verifying the complete access scope before role assignment. Returns a comprehensive list of permission names representing the full set of effective permissions for the specified role.J\x87\x02\n\x03\x32\x30\x30\x12\xff\x01\n\xbf\x01Successfully retrieved effective permissions. Returns the complete list of all permissions that apply to the role, including both direct assignments and inherited permissions from base roles.\x12;\n9\x1a\x37.scalekit.v1.roles.ListEffectiveRolePermissionsResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02+\x12)/api/v1/roles/{role_name}/permissions:all\x1a\xe2\x02\x92\x41\xde\x02\n\x05Roles\x12\xd4\x02Role-based access control (RBAC) for defining and managing permissions in an environment. Create and update custom roles with explicit permissions, model role hierarchies through inheritance, view dependent roles, manage role-permission assignments, and list roles and permissions. Also provides a utility to count users assigned to a role.B1Z/github.com/scalekit-inc/scalekit/pkg/grpc/rolesb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -275,7 +275,7 @@ _globals['_ROLESSERVICE'].methods_by_name['DeleteRoleBase']._loaded_options = None _globals['_ROLESSERVICE'].methods_by_name['DeleteRoleBase']._serialized_options = b'\222A\262\005\n\005Roles\022$Delete role inheritance relationship\032\206\004Removes the base role inheritance relationship for a specified role, effectively eliminating all inherited permissions from the base role. Use this endpoint when you want to break the hierarchical relationship between roles and remove inherited permissions. The role will retain only its directly assigned permissions after this operation. This action cannot be undone, so ensure the role has sufficient direct permissions before removing inheritance. Returns no content on successful removal of the base relationship.Jz\n\003200\022s\nqBase role inheritance relationship successfully removed. The role now has only its directly assigned permissions.\202\265\030\002\030D\202\323\344\223\002 *\036/api/v1/roles/{role_name}/base' _globals['_ROLESSERVICE'].methods_by_name['DeleteOrganizationRoleBase']._loaded_options = None - _globals['_ROLESSERVICE'].methods_by_name['DeleteOrganizationRoleBase']._serialized_options = b'\222A\243\005\n\005Roles\022$Remove organization role inheritance\032\350\003Removes the base role inheritance relationship for a specified organization role, effectively eliminating all inherited permissions from the base role. Use this endpoint when you want to break the hierarchical relationship between roles and remove inherited permissions within the organization. The role will retain only its directly assigned permissions after this operation. This action cannot be undone, so ensure the role has sufficient direct permissions before removing inheritance.J\210\001\n\003200\022\200\001\n~Organization role base inheritance relationship successfully removed. The role now has only its directly assigned permissions.\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\0027*5/api/v1/organizations/{org_id}/roles/{role_name}/base' + _globals['_ROLESSERVICE'].methods_by_name['DeleteOrganizationRoleBase']._serialized_options = b'\222A\243\005\n\005Roles\022$Remove organization role inheritance\032\350\003Removes the base role inheritance relationship for a specified organization role, effectively eliminating all inherited permissions from the base role. Use this endpoint when you want to break the hierarchical relationship between roles and remove inherited permissions within the organization. The role will retain only its directly assigned permissions after this operation. This action cannot be undone, so ensure the role has sufficient direct permissions before removing inheritance.J\210\001\n\003200\022\200\001\n~Organization role base inheritance relationship successfully removed. The role now has only its directly assigned permissions.\202\265\030\002\030D\202\323\344\223\0027*5/api/v1/organizations/{org_id}/roles/{role_name}/base' _globals['_ROLESSERVICE'].methods_by_name['CreatePermission']._loaded_options = None _globals['_ROLESSERVICE'].methods_by_name['CreatePermission']._serialized_options = b'\222A\260\006\n\013Permissions\022\025Create new permission\032\306\004Creates a new permission that represents a specific action users can perform within the environment. Use this endpoint to define granular access controls for your RBAC system. You can provide a unique permission name following the format \'action:resource\' (for example, \'read:documents\', \'write:users\') and an optional description explaining the permission\'s purpose. The permission name must be unique across the environment and follows alphanumeric naming conventions with colons and underscores. Returns the created permission object including system-generated ID and timestamps.J\300\001\n\003201\022\270\001\n\204\001Permission created successfully. Returns the complete permission object with system-generated ID, name, description, and timestamps.\022/\n-\032+.scalekit.v1.roles.CreatePermissionResponse\202\265\030\002\030D\202\323\344\223\002!\"\023/api/v1/permissions:\npermission' _globals['_ROLESSERVICE'].methods_by_name['GetPermission']._loaded_options = None @@ -405,5 +405,5 @@ _globals['_DELETEORGANIZATIONROLEBASEREQUEST']._serialized_start=19004 _globals['_DELETEORGANIZATIONROLEBASEREQUEST']._serialized_end=19268 _globals['_ROLESSERVICE']._serialized_start=19330 - _globals['_ROLESSERVICE']._serialized_end=43413 + _globals['_ROLESSERVICE']._serialized_end=43398 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/tools/tools_pb2.py b/scalekit/v1/tools/tools_pb2.py index df5fce8..4344b6a 100644 --- a/scalekit/v1/tools/tools_pb2.py +++ b/scalekit/v1/tools/tools_pb2.py @@ -24,7 +24,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dscalekit/v1/tools/tools.proto\x12\x11scalekit.v1.tools\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\x88\x01\n\x11\x43reateToolRequest\x12s\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolBF\x92\x41=2;Tool details including name, schema version, and definition\xbaH\x03\xc8\x01\x01R\x04tool\"c\n\x12\x43reateToolResponse\x12M\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB \x92\x41\x1d\x32\x1b\x44\x65tails of the created toolR\x04tool\"\xf0\x05\n\x04Tool\x12\x38\n\x02id\x18\x01 \x01(\tB(\x92\x41\"2\x15Unique ID of the toolJ\t\"tol_123\"\xe0\x41\x03R\x02id\x12I\n\x08provider\x18\x02 \x01(\tB-\x92\x41\'2\x1bProvider name (e.g. GOOGLE)J\x08\"GOOGLE\"\xe0\x41\x03R\x08provider\x12\x87\x01\n\ndefinition\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructBN\x92\x41\x45\x32$Tool definition in structured formatJ\x1d{\"input\": {\"type\": \"object\"}}\xbaH\x03\xc8\x01\x01R\ndefinition\x12s\n\x08metadata\x18\x04 \x01(\x0b\x32\x17.google.protobuf.StructB>\x92\x41;2\"Additional metadata about the toolJ\x15{\"category\": \"email\"}R\x08metadata\x12X\n\x04tags\x18\x05 \x03(\tBD\x92\x41\x41\x32$Tags for categorization or filteringJ\x19[\"notification\", \"email\"]R\x04tags\x12\x83\x01\n\nis_default\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBH\x92\x41\x42\x32:Marks this tool as the default version for the combinationJ\x04true\xe0\x41\x03R\tisDefault\x12\x83\x01\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampBH\x92\x41\x42\x32(Timestamp when the tool was last updatedJ\x16\"2023-10-01T12:00:00Z\"\xe0\x41\x03R\tupdatedAt\"\xd3\x01\n\nScopedTool\x12+\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolR\x04tool\x12\x1e\n\nidentifier\x18\x02 \x01(\tR\nidentifier\x12x\n\x14\x63onnected_account_id\x18\x03 \x01(\tBF\x92\x41<20ID of the connected account for this scoped toolJ\x08\"ca_123\"\xbaH\x04r\x02\x18\x64R\x12\x63onnectedAccountId\"\xfe\x01\n\x10ListToolsRequest\x12[\n\x06\x66ilter\x18\x01 \x01(\x0b\x32\x19.scalekit.v1.tools.FilterB(\x92\x41%2#Filter parameters for listing toolsR\x06\x66ilter\x12\x1b\n\tpage_size\x18\x02 \x01(\rR\x08pageSize\x12p\n\npage_token\x18\x03 \x01(\tBQ\x92\x41N2.Token from a previous response for pagination.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\xf3\x03\n\x06\x46ilter\x12t\n\x07summary\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB>\x92\x41;23Return only tool names instead of full tool detailsJ\x04trueR\x07summary\x12I\n\x08provider\x18\x02 \x01(\tB-\x92\x41#2\x17\x46ilter by tool providerJ\x08\"GOOGLE\"\xbaH\x04r\x02\x18\x32R\x08provider\x12j\n\nidentifier\x18\x03 \x01(\tBJ\x92\x41@2&Filter by connected account identifierJ\x16\"app_google_workspace\"\xbaH\x04r\x02\x18\x64R\nidentifier\x12I\n\ttool_name\x18\x04 \x03(\tB,\x92\x41)2\x13\x46ilter by tool nameJ\x12\"gmail_send_email\"R\x08toolName\x12g\n\x05query\x18\x05 \x01(\tBL\x92\x41@2&Filter by connected account identifierJ\x16\"gmail get attachment\"\xbaH\x06r\x04\x10\x03\x18\x64H\x00R\x05query\x88\x01\x01\x42\x08\n\x06_query\"\x9b\x04\n\x11ListToolsResponse\x12v\n\x0fnext_page_token\x18\x01 \x01(\tBN\x92\x41K2)Token for fetching the next page of toolsJ\x1e\"eyJwYWdlIjozLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12Q\n\ntotal_size\x18\x02 \x01(\rB2\x92\x41/2(Total number of tools matching the queryJ\x03\x31\x30\x34R\ttotalSize\x12z\n\x0fprev_page_token\x18\x03 \x01(\tBR\x92\x41O2-Token for fetching the previous page of toolsJ\x1e\"eyJwYWdlIjoxLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12^\n\ntool_names\x18\x04 \x03(\tB?\x92\x41<2$List of tool names (if summary=true)J\x14[\"gmail_send_email\"]R\ttoolNames\x12_\n\x05tools\x18\x05 \x03(\x0b\x32\x17.scalekit.v1.tools.ToolB0\x92\x41-2+List of tools (if summary=false or omitted)R\x05tools\"\xf7\x0c\n\x12\x45xecuteToolRequest\x12Q\n\ttool_name\x18\x01 \x01(\tB4\x92\x41+2\x1bName of the tool to executeJ\x0c\"send_email\"\xbaH\x03\xc8\x01\x01R\x08toolName\x12\x99\x02\n\nidentifier\x18\x02 \x01(\tB\xf3\x01\x92\x41\xef\x01\x32\xd8\x01Optional. The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier). Use this in combination with connector to identify the connected account.J\x12\"user@example.com\"H\x00R\nidentifier\x88\x01\x01\x12\xfc\x01\n\x06params\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructB\xca\x01\x92\x41\xc6\x01\x32}JSON object containing the parameters required for tool execution. The structure depends on the specific tool being executed.JE{\"to\": \"user@example.com\", \"subject\": \"Hello\", \"body\": \"Hello World\"}R\x06params\x12\xea\x01\n\x14\x63onnected_account_id\x18\x04 \x01(\tB\xb2\x01\x92\x41\xa7\x01\x32\x9a\x01Optional. The unique ID of the connected account. Use this to directly identify the connected account instead of using identifier + connector combination.J\x08\"ca_123\"\xbaH\x04r\x02\x18\x64H\x01R\x12\x63onnectedAccountId\x88\x01\x01\x12\xec\x01\n\tconnector\x18\x05 \x01(\tB\xc8\x01\x92\x41\xbd\x01\x32\xa6\x01Optional. The name of the connector/provider (e.g., \'Google Workspace\', \'Slack\', \'Notion\'). Use this in combination with identifier to identify the connected account.J\x12\"Google Workspace\"\xbaH\x04r\x02\x18\x64H\x02R\tconnector\x88\x01\x01\x12\xee\x01\n\x0forganization_id\x18\x06 \x01(\tB\xbf\x01\x92\x41\xb4\x01\x32\xa6\x01Optional. The organization ID to scope the connected account lookup. Use this to narrow down the search when the same identifier exists across multiple organizations.J\t\"org_123\"\xbaH\x04r\x02\x18\x64H\x03R\x0eorganizationId\x88\x01\x01\x12\xcf\x01\n\x07user_id\x18\x07 \x01(\tB\xb0\x01\x92\x41\xa5\x01\x32\x96\x01Optional. The user ID to scope the connected account lookup. Use this to narrow down the search when the same identifier exists across multiple users.J\n\"user_123\"\xbaH\x04r\x02\x18\x64H\x04R\x06userId\x88\x01\x01\x42\r\n\x0b_identifierB\x17\n\x15_connected_account_idB\x0c\n\n_connectorB\x12\n\x10_organization_idB\n\n\x08_user_id\"\xa3\x02\n\x13\x45xecuteToolResponse\x12\xac\x01\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\x7f\x92\x41|23Free-flowing JSON parameters for the tool executionJE{\"to\": \"user@example.com\", \"subject\": \"Hello\", \"body\": \"Hello World\"}R\x04\x64\x61ta\x12]\n\x0c\x65xecution_id\x18\x02 \x01(\tB:\x92\x41\x37\x32(Unique identifier for the tool executionJ\x0b\"123456789\"R\x0b\x65xecutionId\"\xad\x02\n\x15SetToolDefaultRequest\x12\x61\n\x04name\x18\x01 \x01(\tBM\x92\x41/2\x19\x46ully qualified tool nameJ\x12\"gmail_send_email\"\xbaH\x18r\x13\x10\x01\x18\x64\x32\r^[a-z0-9_].*$\xc8\x01\x01R\x04name\x12W\n\x0eschema_version\x18\x02 \x01(\tB0\x92\x41!2\x1aSchema version of the toolJ\x03\"1\"\xbaH\tr\x04\x10\x01\x18\n\xc8\x01\x01R\rschemaVersion\x12X\n\x0ctool_version\x18\x03 \x01(\tB5\x92\x41&2\x1fTool version to mark as defaultJ\x03\"1\"\xbaH\tr\x04\x10\x01\x18\n\xc8\x01\x01R\x0btoolVersion\"j\n\x16SetToolDefaultResponse\x12P\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB#\x92\x41 2\x1eThe tool now marked as defaultR\x04tool\"^\n\x11UpdateToolRequest\x12I\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB\x1c\x92\x41\x13\x32\x11Updated tool data\xbaH\x03\xc8\x01\x01R\x04tool\"X\n\x12UpdateToolResponse\x12\x42\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB\x15\x92\x41\x12\x32\x10The updated toolR\x04tool\"0\n\x11\x44\x65leteToolRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06:\x04tol_R\x02id\"\x91\x03\n\x16ListScopedToolsRequest\x12z\n\nidentifier\x18\x01 \x01(\tBZ\x92\x41M23Identifier of the connected account to filter toolsJ\x16\"app_google_workspace\"\xbaH\x07r\x02\x18\x64\xc8\x01\x01R\nidentifier\x12l\n\x06\x66ilter\x18\x02 \x01(\x0b\x32#.scalekit.v1.tools.ScopedToolFilterB/\x92\x41,2*Filter parameters for listing scoped toolsR\x06\x66ilter\x12\x1b\n\tpage_size\x18\x03 \x01(\rR\x08pageSize\x12p\n\npage_token\x18\x04 \x01(\tBQ\x92\x41N2.Token from a previous response for pagination.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\x95\x03\n\x17ListScopedToolsResponse\x12v\n\x0fnext_page_token\x18\x01 \x01(\tBN\x92\x41K2)Token for fetching the next page of toolsJ\x1e\"eyJwYWdlIjozLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12Q\n\ntotal_size\x18\x02 \x01(\rB2\x92\x41/2(Total number of tools matching the queryJ\x03\x31\x30\x34R\ttotalSize\x12z\n\x0fprev_page_token\x18\x03 \x01(\tBR\x92\x41O2-Token for fetching the previous page of toolsJ\x1e\"eyJwYWdlIjoxLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12\x33\n\x05tools\x18\x05 \x03(\x0b\x32\x1d.scalekit.v1.tools.ScopedToolR\x05tools\"z\n\x10ScopedToolFilter\x12\x1c\n\tproviders\x18\x01 \x03(\tR\tproviders\x12\x1d\n\ntool_names\x18\x02 \x03(\tR\ttoolNames\x12)\n\x10\x63onnection_names\x18\x03 \x03(\tR\x0f\x63onnectionNames2\xe1\x14\n\x0bToolService\x12\xf2\x01\n\nCreateTool\x12$.scalekit.v1.tools.CreateToolRequest\x1a%.scalekit.v1.tools.CreateToolResponse\"\x96\x01\x92\x41\x63\n\x05Tools\x12\x11\x43reate a new tool\x1aGRegister a new tool with its schema, metadata, and other configuration.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\"\r/api/v1/tools:\x04tool\x12\xfa\x01\n\tListTools\x12#.scalekit.v1.tools.ListToolsRequest\x1a$.scalekit.v1.tools.ListToolsResponse\"\xa1\x01\x92\x41t\n\x05Tools\x12\nList tools\x1a_Fetch tools by provider, identifier, and connector. If `summary=true`, returns only tool names.\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x0f\x12\r/api/v1/tools\x12\x9b\x01\n\x0fListScopedTools\x12).scalekit.v1.tools.ListScopedToolsRequest\x1a*.scalekit.v1.tools.ListScopedToolsResponse\"1\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/tools/scoped\x12\xac\x02\n\x0eSetToolDefault\x12(.scalekit.v1.tools.SetToolDefaultRequest\x1a).scalekit.v1.tools.SetToolDefaultResponse\"\xc4\x01\x92\x41\x87\x01\n\x05Tools\x12#Marks a tool as the default version\x1aYSet a specific tool (by name, schema version, tool version, and provider) as the default.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\"\x19/api/v1/tools:set_default:\x01*\x12\xd8\x01\n\nUpdateTool\x12$.scalekit.v1.tools.UpdateToolRequest\x1a%.scalekit.v1.tools.UpdateToolResponse\"}\x92\x41J\n\x05Tools\x12\rUpdate a tool\x1a\x32Update an existing tool by provider and tool name.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\x1a\r/api/v1/tools:\x04tool\x12\xd9\x01\n\nDeleteTool\x12$.scalekit.v1.tools.DeleteToolRequest\x1a\x16.google.protobuf.Empty\"\x8c\x01\x92\x41Z\n\x05Tools\x12\rDelete a tool\x1a\x42\x44\x65lete a tool by name, schema version, tool version, and provider.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x14*\x12/api/v1/tools/{id}\x12\xc2\t\n\x0b\x45xecuteTool\x12%.scalekit.v1.tools.ExecuteToolRequest\x1a&.scalekit.v1.tools.ExecuteToolResponse\"\xe3\x08\x92\x41\xba\x08\n\x12\x43onnected Accounts\x12(Execute a tool using a connected account\x1a\xcf\x03\x45xecutes a tool action using authentication credentials from a connected account. Specify the tool by name and provide required parameters as JSON. The connected account can be identified by ID, or by combination of organization/user, connector, and identifier. Returns the execution result data and a unique execution ID for tracking. Use this endpoint to perform actions like sending emails, creating calendar events, or managing resources in external services.Jq\n\x03\x32\x30\x30\x12j\n\x92\x41;2\"Additional metadata about the toolJ\x15{\"category\": \"email\"}R\x08metadata\x12X\n\x04tags\x18\x05 \x03(\tBD\x92\x41\x41\x32$Tags for categorization or filteringJ\x19[\"notification\", \"email\"]R\x04tags\x12\x83\x01\n\nis_default\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBH\x92\x41\x42\x32:Marks this tool as the default version for the combinationJ\x04true\xe0\x41\x03R\tisDefault\x12\x83\x01\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampBH\x92\x41\x42\x32(Timestamp when the tool was last updatedJ\x16\"2023-10-01T12:00:00Z\"\xe0\x41\x03R\tupdatedAt\"\xd3\x01\n\nScopedTool\x12+\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolR\x04tool\x12\x1e\n\nidentifier\x18\x02 \x01(\tR\nidentifier\x12x\n\x14\x63onnected_account_id\x18\x03 \x01(\tBF\x92\x41<20ID of the connected account for this scoped toolJ\x08\"ca_123\"\xbaH\x04r\x02\x18\x64R\x12\x63onnectedAccountId\"\xfe\x01\n\x10ListToolsRequest\x12[\n\x06\x66ilter\x18\x01 \x01(\x0b\x32\x19.scalekit.v1.tools.FilterB(\x92\x41%2#Filter parameters for listing toolsR\x06\x66ilter\x12\x1b\n\tpage_size\x18\x02 \x01(\rR\x08pageSize\x12p\n\npage_token\x18\x03 \x01(\tBQ\x92\x41N2.Token from a previous response for pagination.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\x85\n\n\x06\x46ilter\x12t\n\x07summary\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB>\x92\x41;23Return only tool names instead of full tool detailsJ\x04trueR\x07summary\x12I\n\x08provider\x18\x02 \x01(\tB-\x92\x41#2\x17\x46ilter by tool providerJ\x08\"GOOGLE\"\xbaH\x04r\x02\x18\x32R\x08provider\x12j\n\nidentifier\x18\x03 \x01(\tBJ\x92\x41@2&Filter by connected account identifierJ\x16\"app_google_workspace\"\xbaH\x04r\x02\x18\x64R\nidentifier\x12I\n\ttool_name\x18\x04 \x03(\tB,\x92\x41)2\x13\x46ilter by tool nameJ\x12\"gmail_send_email\"R\x08toolName\x12g\n\x05query\x18\x05 \x01(\tBL\x92\x41@2&Filter by connected account identifierJ\x16\"gmail get attachment\"\xbaH\x06r\x04\x10\x03\x18\x64H\x00R\x05query\x88\x01\x01\x12\xdf\x01\n\tconnector\x18\x06 \x01(\tB\xbb\x01\x92\x41\xaf\x01\x32\xa0\x01\x43onnector name (e.g. \'My Gmail\'). When set together with identifier, resolves to a specific connected account and includes its custom MCP tools in the response.J\n\"My Gmail\"\xbaH\x05r\x03\x18\x90\x03H\x01R\tconnector\x88\x01\x01\x12\x87\x01\n\x0forganization_id\x18\x07 \x01(\tBY\x92\x41O26Organization ID to scope the connected account lookup.J\x15\"org_121312434123312\"\xbaH\x04r\x02\x18 H\x02R\x0eorganizationId\x88\x01\x01\x12p\n\x07user_id\x18\x08 \x01(\tBR\x92\x41H2.User ID to scope the connected account lookup.J\x16\"user_121312434123312\"\xbaH\x04r\x02\x18 H\x03R\x06userId\x88\x01\x01\x12\xea\x01\n\x14\x63onnected_account_id\x18\t \x01(\tB\xb2\x01\x92\x41\xa2\x01\x32\x95\x01\x43onnected account ID. Alternative to identifier + connector for directly identifying the connected account whose custom MCP tools should be included.J\x08\"ca_123\"\xbaH\tr\x07\x18\x64:\x03\x63\x61_H\x04R\x12\x63onnectedAccountId\x88\x01\x01\x42\x08\n\x06_queryB\x0c\n\n_connectorB\x12\n\x10_organization_idB\n\n\x08_user_idB\x17\n\x15_connected_account_id\"\x9b\x04\n\x11ListToolsResponse\x12v\n\x0fnext_page_token\x18\x01 \x01(\tBN\x92\x41K2)Token for fetching the next page of toolsJ\x1e\"eyJwYWdlIjozLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12Q\n\ntotal_size\x18\x02 \x01(\rB2\x92\x41/2(Total number of tools matching the queryJ\x03\x31\x30\x34R\ttotalSize\x12z\n\x0fprev_page_token\x18\x03 \x01(\tBR\x92\x41O2-Token for fetching the previous page of toolsJ\x1e\"eyJwYWdlIjoxLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12^\n\ntool_names\x18\x04 \x03(\tB?\x92\x41<2$List of tool names (if summary=true)J\x14[\"gmail_send_email\"]R\ttoolNames\x12_\n\x05tools\x18\x05 \x03(\x0b\x32\x17.scalekit.v1.tools.ToolB0\x92\x41-2+List of tools (if summary=false or omitted)R\x05tools\"\xe5\x0e\n\x12\x45xecuteToolRequest\x12Q\n\ttool_name\x18\x01 \x01(\tB4\x92\x41+2\x1bName of the tool to executeJ\x0c\"send_email\"\xbaH\x03\xc8\x01\x01R\x08toolName\x12\x99\x02\n\nidentifier\x18\x02 \x01(\tB\xf3\x01\x92\x41\xef\x01\x32\xd8\x01Optional. The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier). Use this in combination with connector to identify the connected account.J\x12\"user@example.com\"H\x00R\nidentifier\x88\x01\x01\x12\xfc\x01\n\x06params\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructB\xca\x01\x92\x41\xc6\x01\x32}JSON object containing the parameters required for tool execution. The structure depends on the specific tool being executed.JE{\"to\": \"user@example.com\", \"subject\": \"Hello\", \"body\": \"Hello World\"}R\x06params\x12\xea\x01\n\x14\x63onnected_account_id\x18\x04 \x01(\tB\xb2\x01\x92\x41\xa7\x01\x32\x9a\x01Optional. The unique ID of the connected account. Use this to directly identify the connected account instead of using identifier + connector combination.J\x08\"ca_123\"\xbaH\x04r\x02\x18\x64H\x01R\x12\x63onnectedAccountId\x88\x01\x01\x12\xed\x01\n\tconnector\x18\x05 \x01(\tB\xc9\x01\x92\x41\xbd\x01\x32\xa6\x01Optional. The name of the connector/provider (e.g., \'Google Workspace\', \'Slack\', \'Notion\'). Use this in combination with identifier to identify the connected account.J\x12\"Google Workspace\"\xbaH\x05r\x03\x18\x90\x03H\x02R\tconnector\x88\x01\x01\x12\xee\x01\n\x0forganization_id\x18\x06 \x01(\tB\xbf\x01\x92\x41\xb4\x01\x32\xa6\x01Optional. The organization ID to scope the connected account lookup. Use this to narrow down the search when the same identifier exists across multiple organizations.J\t\"org_123\"\xbaH\x04r\x02\x18\x64H\x03R\x0eorganizationId\x88\x01\x01\x12\xcf\x01\n\x07user_id\x18\x07 \x01(\tB\xb0\x01\x92\x41\xa5\x01\x32\x96\x01Optional. The user ID to scope the connected account lookup. Use this to narrow down the search when the same identifier exists across multiple users.J\n\"user_123\"\xbaH\x04r\x02\x18\x64H\x04R\x06userId\x88\x01\x01\x12\xd9\x01\n\x0c\x61gent_run_id\x18\x08 \x01(\tB\xb1\x01\x92\x41\xa5\x01\x32\x94\x01Optional. Customer-supplied identifier grouping multiple tool calls into a single agent run. Useful for correlating logs across an agentic workflow.J\x0c\"run_abc123\"\xbaH\x05r\x03\x18\xff\x01H\x05R\nagentRunId\x88\x01\x01\x42\r\n\x0b_identifierB\x17\n\x15_connected_account_idB\x0c\n\n_connectorB\x12\n\x10_organization_idB\n\n\x08_user_idB\x0f\n\r_agent_run_id\"\xa3\x02\n\x13\x45xecuteToolResponse\x12\xac\x01\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\x7f\x92\x41|23Free-flowing JSON parameters for the tool executionJE{\"to\": \"user@example.com\", \"subject\": \"Hello\", \"body\": \"Hello World\"}R\x04\x64\x61ta\x12]\n\x0c\x65xecution_id\x18\x02 \x01(\tB:\x92\x41\x37\x32(Unique identifier for the tool executionJ\x0b\"123456789\"R\x0b\x65xecutionId\"\xad\x02\n\x15SetToolDefaultRequest\x12\x61\n\x04name\x18\x01 \x01(\tBM\x92\x41/2\x19\x46ully qualified tool nameJ\x12\"gmail_send_email\"\xbaH\x18r\x13\x10\x01\x18\x64\x32\r^[a-z0-9_].*$\xc8\x01\x01R\x04name\x12W\n\x0eschema_version\x18\x02 \x01(\tB0\x92\x41!2\x1aSchema version of the toolJ\x03\"1\"\xbaH\tr\x04\x10\x01\x18\n\xc8\x01\x01R\rschemaVersion\x12X\n\x0ctool_version\x18\x03 \x01(\tB5\x92\x41&2\x1fTool version to mark as defaultJ\x03\"1\"\xbaH\tr\x04\x10\x01\x18\n\xc8\x01\x01R\x0btoolVersion\"j\n\x16SetToolDefaultResponse\x12P\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB#\x92\x41 2\x1eThe tool now marked as defaultR\x04tool\"^\n\x11UpdateToolRequest\x12I\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB\x1c\x92\x41\x13\x32\x11Updated tool data\xbaH\x03\xc8\x01\x01R\x04tool\"X\n\x12UpdateToolResponse\x12\x42\n\x04tool\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.tools.ToolB\x15\x92\x41\x12\x32\x10The updated toolR\x04tool\"0\n\x11\x44\x65leteToolRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06:\x04tol_R\x02id\"\x97\x03\n\x16ListScopedToolsRequest\x12z\n\nidentifier\x18\x01 \x01(\tBZ\x92\x41M23Identifier of the connected account to filter toolsJ\x16\"app_google_workspace\"\xbaH\x07r\x02\x18\x64\xc8\x01\x01R\nidentifier\x12r\n\x06\x66ilter\x18\x02 \x01(\x0b\x32#.scalekit.v1.tools.ScopedToolFilterB5\x92\x41,2*Filter parameters for listing scoped tools\xbaH\x03\xc8\x01\x01R\x06\x66ilter\x12\x1b\n\tpage_size\x18\x03 \x01(\rR\x08pageSize\x12p\n\npage_token\x18\x04 \x01(\tBQ\x92\x41N2.Token from a previous response for pagination.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\x95\x03\n\x17ListScopedToolsResponse\x12v\n\x0fnext_page_token\x18\x01 \x01(\tBN\x92\x41K2)Token for fetching the next page of toolsJ\x1e\"eyJwYWdlIjozLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12Q\n\ntotal_size\x18\x02 \x01(\rB2\x92\x41/2(Total number of tools matching the queryJ\x03\x31\x30\x34R\ttotalSize\x12z\n\x0fprev_page_token\x18\x03 \x01(\tBR\x92\x41O2-Token for fetching the previous page of toolsJ\x1e\"eyJwYWdlIjoxLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12\x33\n\x05tools\x18\x05 \x03(\x0b\x32\x1d.scalekit.v1.tools.ScopedToolR\x05tools\"z\n\x10ScopedToolFilter\x12\x1c\n\tproviders\x18\x01 \x03(\tR\tproviders\x12\x1d\n\ntool_names\x18\x02 \x03(\tR\ttoolNames\x12)\n\x10\x63onnection_names\x18\x03 \x03(\tR\x0f\x63onnectionNames\"\xb3\x02\n\x19ListAvailableToolsRequest\x12\x86\x01\n\nidentifier\x18\x01 \x01(\tBf\x92\x41Y2?Identifier of the connected account to list available tools forJ\x16\"app_google_workspace\"\xbaH\x07r\x02\x18\x64\xc8\x01\x01R\nidentifier\x12\x1b\n\tpage_size\x18\x02 \x01(\rR\x08pageSize\x12p\n\npage_token\x18\x03 \x01(\tBQ\x92\x41N2.Token from a previous response for pagination.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\xcd\x03\n\x1aListAvailableToolsResponse\x12v\n\x0fnext_page_token\x18\x01 \x01(\tBN\x92\x41K2)Token for fetching the next page of toolsJ\x1e\"eyJwYWdlIjozLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12[\n\ntotal_size\x18\x02 \x01(\rB<\x92\x41\x39\x32\x32Total number of available tools matching the queryJ\x03\x31\x30\x34R\ttotalSize\x12z\n\x0fprev_page_token\x18\x03 \x01(\tBR\x92\x41O2-Token for fetching the previous page of toolsJ\x1e\"eyJwYWdlIjoxLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12^\n\x05tools\x18\x04 \x03(\x0b\x32\x17.scalekit.v1.tools.ToolB/\x92\x41,2*List of tools available for the identifierR\x05tools2\xe8\x18\n\x0bToolService\x12\xf2\x01\n\nCreateTool\x12$.scalekit.v1.tools.CreateToolRequest\x1a%.scalekit.v1.tools.CreateToolResponse\"\x96\x01\x92\x41\x63\n\x05Tools\x12\x11\x43reate a new tool\x1aGRegister a new tool with its schema, metadata, and other configuration.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\"\r/api/v1/tools:\x04tool\x12\xfa\x01\n\tListTools\x12#.scalekit.v1.tools.ListToolsRequest\x1a$.scalekit.v1.tools.ListToolsResponse\"\xa1\x01\x92\x41t\n\x05Tools\x12\nList tools\x1a_Fetch tools by provider, identifier, and connector. If `summary=true`, returns only tool names.\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x0f\x12\r/api/v1/tools\x12\x9b\x01\n\x0fListScopedTools\x12).scalekit.v1.tools.ListScopedToolsRequest\x1a*.scalekit.v1.tools.ListScopedToolsResponse\"1\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/tools/scoped\x12\x84\x04\n\x12ListAvailableTools\x12,.scalekit.v1.tools.ListAvailableToolsRequest\x1a-.scalekit.v1.tools.ListAvailableToolsResponse\"\x90\x03\x92\x41\xd8\x02\n\x05Tools\x12\x31List all tools for a connected account identifier\x1aQLists all tools for a given Connected Account Identifier. Identifier is required.J*\n\x03\x32\x30\x30\x12#\n!Paginated list of available toolsJ:\n\x03\x34\x30\x30\x12\x33\n1Invalid request - missing or malformed identifierJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJ\x1d\n\x03\x34\x30\x34\x12\x16\n\x14Identifier not found\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\x12\x17/api/v1/tools/available\x12\xac\x02\n\x0eSetToolDefault\x12(.scalekit.v1.tools.SetToolDefaultRequest\x1a).scalekit.v1.tools.SetToolDefaultResponse\"\xc4\x01\x92\x41\x87\x01\n\x05Tools\x12#Marks a tool as the default version\x1aYSet a specific tool (by name, schema version, tool version, and provider) as the default.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\"\x19/api/v1/tools:set_default:\x01*\x12\xd8\x01\n\nUpdateTool\x12$.scalekit.v1.tools.UpdateToolRequest\x1a%.scalekit.v1.tools.UpdateToolResponse\"}\x92\x41J\n\x05Tools\x12\rUpdate a tool\x1a\x32Update an existing tool by provider and tool name.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x15\x1a\r/api/v1/tools:\x04tool\x12\xd9\x01\n\nDeleteTool\x12$.scalekit.v1.tools.DeleteToolRequest\x1a\x16.google.protobuf.Empty\"\x8c\x01\x92\x41Z\n\x05Tools\x12\rDelete a tool\x1a\x42\x44\x65lete a tool by name, schema version, tool version, and provider.\x82\xb5\x18\x02\x18\x04\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x14*\x12/api/v1/tools/{id}\x12\xc2\t\n\x0b\x45xecuteTool\x12%.scalekit.v1.tools.ExecuteToolRequest\x1a&.scalekit.v1.tools.ExecuteToolResponse\"\xe3\x08\x92\x41\xba\x08\n\x12\x43onnected Accounts\x12(Execute a tool using a connected account\x1a\xcf\x03\x45xecutes a tool action using authentication credentials from a connected account. Specify the tool by name and provide required parameters as JSON. The connected account can be identified by ID, or by combination of organization/user, connector, and identifier. Returns the execution result data and a unique execution ID for tracking. Use this endpoint to perform actions like sending emails, creating calendar events, or managing resources in external services.Jq\n\x03\x32\x30\x30\x12j\n None: ... class Filter(_message.Message): - __slots__ = ("summary", "provider", "identifier", "tool_name", "query") + __slots__ = ("summary", "provider", "identifier", "tool_name", "query", "connector", "organization_id", "user_id", "connected_account_id") SUMMARY_FIELD_NUMBER: _ClassVar[int] PROVIDER_FIELD_NUMBER: _ClassVar[int] IDENTIFIER_FIELD_NUMBER: _ClassVar[int] TOOL_NAME_FIELD_NUMBER: _ClassVar[int] QUERY_FIELD_NUMBER: _ClassVar[int] + CONNECTOR_FIELD_NUMBER: _ClassVar[int] + ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + CONNECTED_ACCOUNT_ID_FIELD_NUMBER: _ClassVar[int] summary: _wrappers_pb2.BoolValue provider: str identifier: str tool_name: _containers.RepeatedScalarFieldContainer[str] query: str - def __init__(self, summary: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., provider: _Optional[str] = ..., identifier: _Optional[str] = ..., tool_name: _Optional[_Iterable[str]] = ..., query: _Optional[str] = ...) -> None: ... + connector: str + organization_id: str + user_id: str + connected_account_id: str + def __init__(self, summary: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., provider: _Optional[str] = ..., identifier: _Optional[str] = ..., tool_name: _Optional[_Iterable[str]] = ..., query: _Optional[str] = ..., connector: _Optional[str] = ..., organization_id: _Optional[str] = ..., user_id: _Optional[str] = ..., connected_account_id: _Optional[str] = ...) -> None: ... class ListToolsResponse(_message.Message): __slots__ = ("next_page_token", "total_size", "prev_page_token", "tool_names", "tools") @@ -94,7 +102,7 @@ class ListToolsResponse(_message.Message): def __init__(self, next_page_token: _Optional[str] = ..., total_size: _Optional[int] = ..., prev_page_token: _Optional[str] = ..., tool_names: _Optional[_Iterable[str]] = ..., tools: _Optional[_Iterable[_Union[Tool, _Mapping]]] = ...) -> None: ... class ExecuteToolRequest(_message.Message): - __slots__ = ("tool_name", "identifier", "params", "connected_account_id", "connector", "organization_id", "user_id") + __slots__ = ("tool_name", "identifier", "params", "connected_account_id", "connector", "organization_id", "user_id", "agent_run_id") TOOL_NAME_FIELD_NUMBER: _ClassVar[int] IDENTIFIER_FIELD_NUMBER: _ClassVar[int] PARAMS_FIELD_NUMBER: _ClassVar[int] @@ -102,6 +110,7 @@ class ExecuteToolRequest(_message.Message): CONNECTOR_FIELD_NUMBER: _ClassVar[int] ORGANIZATION_ID_FIELD_NUMBER: _ClassVar[int] USER_ID_FIELD_NUMBER: _ClassVar[int] + AGENT_RUN_ID_FIELD_NUMBER: _ClassVar[int] tool_name: str identifier: str params: _struct_pb2.Struct @@ -109,7 +118,8 @@ class ExecuteToolRequest(_message.Message): connector: str organization_id: str user_id: str - def __init__(self, tool_name: _Optional[str] = ..., identifier: _Optional[str] = ..., params: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., connected_account_id: _Optional[str] = ..., connector: _Optional[str] = ..., organization_id: _Optional[str] = ..., user_id: _Optional[str] = ...) -> None: ... + agent_run_id: str + def __init__(self, tool_name: _Optional[str] = ..., identifier: _Optional[str] = ..., params: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., connected_account_id: _Optional[str] = ..., connector: _Optional[str] = ..., organization_id: _Optional[str] = ..., user_id: _Optional[str] = ..., agent_run_id: _Optional[str] = ...) -> None: ... class ExecuteToolResponse(_message.Message): __slots__ = ("data", "execution_id") @@ -186,3 +196,25 @@ class ScopedToolFilter(_message.Message): tool_names: _containers.RepeatedScalarFieldContainer[str] connection_names: _containers.RepeatedScalarFieldContainer[str] def __init__(self, providers: _Optional[_Iterable[str]] = ..., tool_names: _Optional[_Iterable[str]] = ..., connection_names: _Optional[_Iterable[str]] = ...) -> None: ... + +class ListAvailableToolsRequest(_message.Message): + __slots__ = ("identifier", "page_size", "page_token") + IDENTIFIER_FIELD_NUMBER: _ClassVar[int] + PAGE_SIZE_FIELD_NUMBER: _ClassVar[int] + PAGE_TOKEN_FIELD_NUMBER: _ClassVar[int] + identifier: str + page_size: int + page_token: str + def __init__(self, identifier: _Optional[str] = ..., page_size: _Optional[int] = ..., page_token: _Optional[str] = ...) -> None: ... + +class ListAvailableToolsResponse(_message.Message): + __slots__ = ("next_page_token", "total_size", "prev_page_token", "tools") + NEXT_PAGE_TOKEN_FIELD_NUMBER: _ClassVar[int] + TOTAL_SIZE_FIELD_NUMBER: _ClassVar[int] + PREV_PAGE_TOKEN_FIELD_NUMBER: _ClassVar[int] + TOOLS_FIELD_NUMBER: _ClassVar[int] + next_page_token: str + total_size: int + prev_page_token: str + tools: _containers.RepeatedCompositeFieldContainer[Tool] + def __init__(self, next_page_token: _Optional[str] = ..., total_size: _Optional[int] = ..., prev_page_token: _Optional[str] = ..., tools: _Optional[_Iterable[_Union[Tool, _Mapping]]] = ...) -> None: ... diff --git a/scalekit/v1/tools/tools_pb2_grpc.py b/scalekit/v1/tools/tools_pb2_grpc.py index aefad8e..41ded94 100644 --- a/scalekit/v1/tools/tools_pb2_grpc.py +++ b/scalekit/v1/tools/tools_pb2_grpc.py @@ -30,6 +30,11 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.ListScopedToolsRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.ListScopedToolsResponse.FromString, ) + self.ListAvailableTools = channel.unary_unary( + '/scalekit.v1.tools.ToolService/ListAvailableTools', + request_serializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.ListAvailableToolsRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.ListAvailableToolsResponse.FromString, + ) self.SetToolDefault = channel.unary_unary( '/scalekit.v1.tools.ToolService/SetToolDefault', request_serializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.SetToolDefaultRequest.SerializeToString, @@ -73,6 +78,12 @@ def ListScopedTools(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def ListAvailableTools(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def SetToolDefault(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -116,6 +127,11 @@ def add_ToolServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.ListScopedToolsRequest.FromString, response_serializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.ListScopedToolsResponse.SerializeToString, ), + 'ListAvailableTools': grpc.unary_unary_rpc_method_handler( + servicer.ListAvailableTools, + request_deserializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.ListAvailableToolsRequest.FromString, + response_serializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.ListAvailableToolsResponse.SerializeToString, + ), 'SetToolDefault': grpc.unary_unary_rpc_method_handler( servicer.SetToolDefault, request_deserializer=scalekit_dot_v1_dot_tools_dot_tools__pb2.SetToolDefaultRequest.FromString, @@ -197,6 +213,23 @@ def ListScopedTools(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod + def ListAvailableTools(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.tools.ToolService/ListAvailableTools', + scalekit_dot_v1_dot_tools_dot_tools__pb2.ListAvailableToolsRequest.SerializeToString, + scalekit_dot_v1_dot_tools_dot_tools__pb2.ListAvailableToolsResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod def SetToolDefault(request, target, diff --git a/scalekit/v1/users/users_pb2.py b/scalekit/v1/users/users_pb2.py index c69f3ee..4bc8441 100644 --- a/scalekit/v1/users/users_pb2.py +++ b/scalekit/v1/users/users_pb2.py @@ -24,7 +24,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dscalekit/v1/users/users.proto\x12\x11scalekit.v1.users\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a\'scalekit/v1/errdetails/errdetails.proto\x1a!scalekit/v1/options/options.proto\"\xf1\r\n\x04User\x12u\n\x02id\x18\x01 \x01(\tBe\x92\x41\x62\x32HUnique system-generated identifier for the user. Immutable once created.J\x16\"usr_1234abcd5678efgh\"R\x02id\x12\xaf\x01\n\x0e\x65nvironment_id\x18\x02 \x01(\tB\x87\x01\x92\x41r2XIdentifier of the environment where the user was created. System-assigned and read-only.J\x16\"env_9876zyxw5432vuts\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\renvironmentId\x12\x9c\x01\n\x0b\x63reate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB_\x92\x41Y2WTimestamp when the user account was initially created. Automatically set by the server.\xe0\x41\x03R\ncreateTime\x12\xa1\x01\n\x0bupdate_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampBd\x92\x41^2\\Timestamp of the last modification to the user account. Automatically updated by the server.\xe0\x41\x03R\nupdateTime\x12\x98\x01\n\x05\x65mail\x18\x05 \x01(\tB\x81\x01\x92\x41w2aPrimary email address for the user. Must be unique across the environment and valid per RFC 5322.J\x12\"user@example.com\"\xbaH\x04r\x02`\x01R\x05\x65mail\x12\xa2\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tB|\x92\x41y2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x12\"ext_12345a67b89c\"H\x00R\nexternalId\x88\x01\x01\x12\xa9\x01\n\x0bmemberships\x18\x07 \x03(\x0b\x32+.scalekit.v1.commons.OrganizationMembershipBZ\x92\x41W2UList of organization memberships. Automatically populated based on group assignments.R\x0bmemberships\x12\x9c\x01\n\x0cuser_profile\x18\x08 \x01(\x0b\x32 .scalekit.v1.commons.UserProfileBW\x92\x41T2RUser\'s personal information including name, address, and other profile attributes.R\x0buserProfile\x12\x80\x02\n\x08metadata\x18\t \x03(\x0b\x32%.scalekit.v1.users.User.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xa1\x01\n\x0flast_login_time\x18\n \x01(\x0b\x32\x1a.google.protobuf.TimestampB]\x92\x41W2UTimestamp of the user\'s most recent successful authentication. Updated automatically.\xe0\x41\x03R\rlastLoginTime\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_id\"\xa6\x02\n\x1e\x43reateUserAndMembershipRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x39\n\x04user\x18\x02 \x01(\x0b\x32\x1d.scalekit.v1.users.CreateUserB\x06\xbaH\x03\xc8\x01\x01R\x04user\x12\x85\x01\n\x15send_invitation_email\x18\x03 \x01(\x08\x42L\x92\x41I2AIf true, sends an activation email to the user. Defaults to true.J\x04trueH\x00R\x13sendInvitationEmail\x88\x01\x01\x42\x18\n\x16_send_invitation_email\"N\n\x1f\x43reateUserAndMembershipResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\xbc\x05\n\nUpdateUser\x12\xa2\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tB|\x92\x41y2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x12\"ext_12345a67b89c\"H\x00R\nexternalId\x88\x01\x01\x12\xa0\x01\n\x0cuser_profile\x18\x08 \x01(\x0b\x32$.scalekit.v1.users.UpdateUserProfileBW\x92\x41T2RUser\'s personal information including name, address, and other profile attributes.R\x0buserProfile\x12\x86\x02\n\x08metadata\x18\t \x03(\x0b\x32+.scalekit.v1.users.UpdateUser.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idJ\x04\x08\x01\x10\x06J\x04\x08\x07\x10\x08J\x04\x08\n\x10\x0b\"\xab\x04\n\x11UpdateUserRequest\x12\x8c\x01\n\x02id\x18\x01 \x01(\tBz\x92\x41h2NSystem-generated user ID. Must start with \'usr_\' and be 19-25 characters long.J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12\x9a\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tBw\x92\x41t2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\r\"ext_7890xyz\"H\x00R\nexternalId\x12\xdb\x01\n\x04user\x18\x03 \x01(\x0b\x32\x1d.scalekit.v1.users.UpdateUserB\xa7\x01\x92\x41\x9d\x01\x32qUser fields to update. Only specified fields will be modified. Required fields must be provided if being changed.J({\"firstName\": \"John\", \"lastName\": \"Doe\"}\xbaH\x03\xc8\x01\x01R\x04userB\x0c\n\nidentities\"A\n\x12UpdateUserResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\x93\x02\n\x0eGetUserRequest\x12V\n\x02id\x18\x01 \x01(\tBD\x92\x41\x32\x32\x18System-generated user IDJ\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04usr_H\x00R\x02id\x12\x9a\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tBw\x92\x41t2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\r\"ext_7890xyz\"H\x00R\nexternalIdB\x0c\n\nidentities\">\n\x0fGetUserResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\xd9\x01\n\x16GetCurrentUserResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\x12\x91\x01\n\x12\x63urrent_session_id\x18\x02 \x01(\tBc\x92\x41`2EThe ID of the current session associated with the authenticated user.J\x17\"sess_1234abcd5678efgh\"R\x10\x63urrentSessionId\"\x17\n\x15GetCurrentUserRequest\"\xf4\x04\n\x1cListOrganizationUsersRequest\x12\xc9\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x8c\x01\x32rUnique identifier of the organization for which to list users. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xa9\x01\n\tpage_size\x18\x02 \x01(\rB\x8b\x01\x92\x41\x7f\x32yMaximum number of users to return in a single response. Valid range: 1-100. Server may return fewer users than specified.J\x02\x35\x30\xbaH\x06*\x04\x18\x64(\x00R\x08pageSize\x12\xdb\x01\n\npage_token\x18\x03 \x01(\tB\xbb\x01\x92\x41\xb7\x01\x32\x80\x01Pagination token from a previous ListUserResponse. Used to retrieve the next page of results. Leave empty for the first request.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\tpageToken\"\xa4\x05\n\x1dListOrganizationUsersResponse\x12\xba\x01\n\x0fnext_page_token\x18\x01 \x01(\tB\x91\x01\x92\x41\x8d\x01\x32WOpaque token for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x02 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12\x92\x01\n\x05users\x18\x03 \x03(\x0b\x32\x17.scalekit.v1.users.UserBc\x92\x41`2^List of user objects for the current page. May contain fewer entries than requested page_size.R\x05users\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SOpaque token for retrieving the previous page of results. Empty for the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\xfd\x04\n\x17\x44\x65leteMembershipRequest\x12\xa7\x01\n\x0forganization_id\x18\x01 \x01(\tB~\x92\x41l2RUnique organization identifier. Must start with \'org_\' and be 1-32 characters longJ\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x81\x01\n\x02id\x18\x02 \x01(\tBo\x92\x41]2CSystem-generated user ID. Must start with \'usr_\' (19-25 characters)J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12\x89\x01\n\x0b\x65xternal_id\x18\x03 \x01(\tBf\x92\x41\x63\x32RExternal system identifier from connected directories. Must match existing recordsJ\r\"ext_7890xyz\"H\x00R\nexternalId\x12\x8d\x01\n\x07\x63\x61scade\x18\x05 \x01(\x08\x42n\x92\x41\\2SIf true, if user has no memberships left the user is also deleted. defaults to trueJ\x05\x66\x61lse\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x07\x63\x61scade\x88\x01\x01\x42\x0c\n\nidentitiesB\n\n\x08_cascade\"\xaa\x06\n\x17\x43reateMembershipRequest\x12\xb7\x01\n\x0forganization_id\x18\x01 \x01(\tB\x8d\x01\x92\x41{2aUnique identifier of the target organization. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x8f\x01\n\nmembership\x18\x02 \x01(\x0b\x32#.scalekit.v1.users.CreateMembershipBJ\x92\x41\x41\x32?Membership details to create. Required fields must be provided.\xbaH\x03\xc8\x01\x01R\nmembership\x12\x81\x01\n\x02id\x18\x03 \x01(\tBo\x92\x41]2CSystem-generated user ID. Must start with \'usr_\' (19-25 characters)J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12\x8e\x01\n\x0b\x65xternal_id\x18\x04 \x01(\tBk\x92\x41h2WExternal system identifier from connected directories. Must be unique across the systemJ\r\"ext_7890xyz\"H\x00R\nexternalId\x12\x85\x01\n\x15send_invitation_email\x18\x05 \x01(\x08\x42L\x92\x41I2AIf true, sends an activation email to the user. Defaults to true.J\x04trueH\x01R\x13sendInvitationEmail\x88\x01\x01\x42\x0c\n\nidentitiesB\x18\n\x16_send_invitation_email\"G\n\x18\x43reateMembershipResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\x9a\x02\n\x10ListUsersRequest\x12t\n\tpage_size\x18\x01 \x01(\rBW\x92\x41T2NMaximum number of organizations to return per page. Must be between 10 and 100J\x02\x33\x30R\x08pageSize\x12\x8f\x01\n\npage_token\x18\x02 \x01(\tBp\x92\x41m2[Pagination token from the previous response. Use to retrieve the next page of organizationsJ\x0e\"\"R\tpageToken\"\xc0\x04\n\x11ListUsersResponse\x12\x42\n\x05users\x18\x01 \x03(\x0b\x32\x17.scalekit.v1.users.UserB\x13\x92\x41\x10\x32\x0eList of users.R\x05users\x12\xb3\x01\n\x0fnext_page_token\x18\x02 \x01(\tB\x8a\x01\x92\x41\x86\x01\x32PToken for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x03 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SToken for retrieving the previous page of results. Empty if this is the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\xe3\x03\n\x12SearchUsersRequest\x12\xaa\x01\n\x05query\x18\x01 \x01(\tB\x93\x01\x92\x41\x83\x01\x32oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\x10john@example.com\xbaH\tr\x04\x10\x03\x18\x64\xc8\x01\x01R\x05query\x12x\n\tpage_size\x18\x02 \x01(\rB[\x92\x41Q2KMaximum number of users to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x03 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\xcb\x04\n\x13SearchUsersResponse\x12\xb3\x01\n\x0fnext_page_token\x18\x01 \x01(\tB\x8a\x01\x92\x41\x86\x01\x32PToken for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x02 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12K\n\x05users\x18\x03 \x03(\x0b\x32\x17.scalekit.v1.users.UserB\x1c\x92\x41\x19\x32\x17List of matching users.R\x05users\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SToken for retrieving the previous page of results. Empty if this is the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\xb1\x02\n\x11\x44\x65leteUserRequest\x12\x81\x01\n\x02id\x18\x01 \x01(\tBo\x92\x41]2CSystem-generated user ID. Must start with \'usr_\' (19-25 characters)J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12\x89\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tBf\x92\x41\x63\x32RExternal system identifier from connected directories. Must match existing recordsJ\r\"ext_7890xyz\"H\x00R\nexternalIdB\x0c\n\nidentities\"\x9a\x05\n\x17UpdateMembershipRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\xa1\x01\x92\x41\x8e\x01\x32tUnique identifier of the organization containing the membership. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x8c\x01\n\x02id\x18\x02 \x01(\tBz\x92\x41h2NSystem-generated user ID. Must start with \'usr_\' and be 19-25 characters long.J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12j\n\x0b\x65xternal_id\x18\x03 \x01(\tBG\x92\x41\x44\x32\x33Your application\'s unique identifier for this user.J\r\"ext_7890xyz\"H\x00R\nexternalId\x12\xa7\x01\n\nmembership\x18\x05 \x01(\x0b\x32#.scalekit.v1.users.UpdateMembershipBb\x92\x41Y2DMembership fields to update. Only specified fields will be modified.J\x11{\"role\": \"admin\"}\xbaH\x03\xc8\x01\x01R\nmembershipB\x0c\n\nidentities\"\xfb\x03\n\x10UpdateMembership\x12}\n\x05roles\x18\x04 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleBL\x92\x41I22Role to assign to the user within the organizationJ\x13[{\"name\": \"admin\"}]R\x05roles\x12\x8c\x02\n\x08metadata\x18\x07 \x03(\x0b\x32\x31.scalekit.v1.users.UpdateMembership.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01J\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07\"\xb4\x05\n\x10\x43reateMembership\x12}\n\x05roles\x18\x04 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleBL\x92\x41I22Role to assign to the user within the organizationJ\x13[{\"name\": \"admin\"}]R\x05roles\x12\x8c\x02\n\x08metadata\x18\x07 \x03(\x0b\x32\x31.scalekit.v1.users.CreateMembership.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xa4\x01\n\rinviter_email\x18\x08 \x01(\tBz\x92\x41k2QEmail address of the user who invited this member. Must be a valid email address.J\x16\"john.doe@example.com\"\xbaH\tr\x07\x10\x05\x18\xfe\x01`\x01H\x00R\x0cinviterEmail\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x10\n\x0e_inviter_emailJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07\"G\n\x18UpdateMembershipResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\xb7\x05\n\x1eSearchOrganizationUsersRequest\x12\xc5\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9b\x01\x92\x41\x85\x01\x32kUnique identifier of the organization to search within. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\x12\xaa\x01\n\x05query\x18\x02 \x01(\tB\x93\x01\x92\x41\x83\x01\x32oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\x10john@example.com\xbaH\tr\x04\x10\x03\x18\x64\xc8\x01\x01R\x05query\x12x\n\tpage_size\x18\x03 \x01(\rB[\x92\x41Q2KMaximum number of users to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x04 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\xd7\x04\n\x1fSearchOrganizationUsersResponse\x12\xb3\x01\n\x0fnext_page_token\x18\x01 \x01(\tB\x8a\x01\x92\x41\x86\x01\x32PToken for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x02 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12K\n\x05users\x18\x03 \x03(\x0b\x32\x17.scalekit.v1.users.UserB\x1c\x92\x41\x19\x32\x17List of matching users.R\x05users\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SToken for retrieving the previous page of results. Empty if this is the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\x85\x08\n\nCreateUser\x12\x98\x01\n\x05\x65mail\x18\x05 \x01(\tB\x81\x01\x92\x41w2aPrimary email address for the user. Must be unique across the environment and valid per RFC 5322.J\x12\"user@example.com\"\xbaH\x04r\x02`\x01R\x05\x65mail\x12\xa2\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tB|\x92\x41y2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x12\"ext_12345a67b89c\"H\x00R\nexternalId\x88\x01\x01\x12\x9f\x01\n\nmembership\x18\x07 \x01(\x0b\x32#.scalekit.v1.users.CreateMembershipBZ\x92\x41W2UList of organization memberships. Automatically populated based on group assignments.R\nmembership\x12\xa0\x01\n\x0cuser_profile\x18\x08 \x01(\x0b\x32$.scalekit.v1.users.CreateUserProfileBW\x92\x41T2RUser\'s personal information including name, address, and other profile attributes.R\x0buserProfile\x12\x86\x02\n\x08metadata\x18\t \x03(\x0b\x32+.scalekit.v1.users.CreateUser.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\n\x10\x0b\"\xbe\x10\n\x11\x43reateUserProfile\x12^\n\ngiven_name\x18\x02 \x01(\tB?\x92\x41\x34\x32*User\'s given name. Maximum 255 characters.J\x06\"John\"\xbaH\x05r\x03\x18\xff\x01R\tgivenName\x12`\n\x0b\x66\x61mily_name\x18\x03 \x01(\tB?\x92\x41\x34\x32+User\'s family name. Maximum 255 characters.J\x05\"Doe\"\xbaH\x05r\x03\x18\xff\x01R\nfamilyName\x12v\n\x04name\x18\x04 \x01(\tBb\x92\x41_2IFull name in display format. Typically combines first_name and last_name.J\x12\"John Michael Doe\"R\x04name\x12y\n\x06locale\x18\x05 \x01(\tBa\x92\x41^2SUser\'s localization preference in BCP-47 format. Defaults to organization settings.J\x07\"en-US\"R\x06locale\x12\x8a\x01\n\x0cphone_number\x18\x07 \x01(\tBg\x92\x41\x64\x32RPhone number in E.164 international format. Required for SMS-based authentication.J\x0e\"+14155552671\"R\x0bphoneNumber\x12\x8b\x02\n\x08metadata\x18\x08 \x03(\x0b\x32\x32.scalekit.v1.users.CreateUserProfile.MetadataEntryB\xba\x01\x92\x41\x9d\x01\x32^System-managed key-value pairs for internal tracking. Keys (3-25 chars), values (1-256 chars).J;{\"account_status\": \"active\", \"signup_source\": \"mobile_app\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xa2\x02\n\x11\x63ustom_attributes\x18\t \x03(\x0b\x32:.scalekit.v1.users.CreateUserProfile.CustomAttributesEntryB\xb8\x01\x92\x41\x9b\x01\x32ZCustom attributes for extended user profile data. Keys (3-25 chars), values (1-256 chars).J={\"department\": \"engineering\", \"security_clearance\": \"level2\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x10\x63ustomAttributes\x12\x7f\n\x12preferred_username\x18\n \x01(\tBP\x92\x41\x45\x32/User\'s preferred username for display purposes.J\x12\"John Michael Doe\"\xbaH\x05r\x03\x18\x80\x04R\x11preferredUsername\x12z\n\x07picture\x18\x0b \x01(\tB[\x92\x41P2,URL to the user\'s profile picture or avatar.J \"https://example.com/avatar.jpg\"\xbaH\x05r\x03\x18\x80\x10H\x00R\x07picture\x88\x01\x01\x12\x41\n\x06gender\x18\x0c \x01(\tB$\x92\x41!2\x17User\'s gender identity.J\x06\"male\"H\x01R\x06gender\x88\x01\x01\x12\xa1\x01\n\x06groups\x18\r \x03(\tB\x88\x01\x92\x41p2QList of group names the user belongs to. Each group name must be 1-250 charactersJ\x1b[\"engineering\", \"managers\"]\xbaH\x12\x92\x01\x0f\x08\x00\x10\x32\x18\x01\"\x07r\x05\x10\x01\x18\xfa\x01R\x06groups\x12\x94\x01\n\nfirst_name\x18\x15 \x01(\tBu\x18\x01\x92\x41Y2O[DEPRECATED] Use given_name instead. User\'s given name. Maximum 200 characters.J\x06\"John\"\xbaH\x05r\x03\x18\xc8\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\tfirstName\x12\x93\x01\n\tlast_name\x18\x16 \x01(\tBv\x18\x01\x92\x41Z2Q[DEPRECATED] Use family_name instead. User\'s family name. Maximum 200 characters.J\x05\"Doe\"\xbaH\x05r\x03\x18\xc8\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\x08lastName\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a\x43\n\x15\x43ustomAttributesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\n\n\x08_pictureB\t\n\x07_genderJ\x04\x08\x01\x10\x02J\x04\x08\x06\x10\x07\"\xe5(\n\x11UpdateUserProfile\x12\xe5\x01\n\ngiven_name\x18\x02 \x01(\tB\xc0\x01\x92\x41\xb4\x01\x32\xa9\x01Updates the user\'s given name (first name). Use this field to modify how the user\'s first name appears in the system and user interfaces. Maximum 255 characters allowed.J\x06\"John\"\xbaH\x05r\x03\x18\xff\x01H\x00R\tgivenName\x88\x01\x01\x12\xe4\x01\n\x0b\x66\x61mily_name\x18\x03 \x01(\tB\xbd\x01\x92\x41\xb1\x01\x32\xa7\x01Updates the user\'s family name (last name or surname). Use this field to modify how the user\'s last name appears throughout the system. Maximum 255 characters allowed.J\x05\"Doe\"\xbaH\x05r\x03\x18\xff\x01H\x01R\nfamilyName\x88\x01\x01\x12\xae\x02\n\x04name\x18\x04 \x01(\tB\x94\x02\x92\x41\x90\x02\x32\x81\x02Updates the user\'s complete display name. Use this field when you want to set the full name as a single string rather than using separate given and family names. This name appears in user interfaces, reports, and anywhere a formatted display name is needed.J\n\"John Doe\"H\x02R\x04name\x88\x01\x01\x12\x97\x03\n\x06locale\x18\x05 \x01(\tB\xf9\x02\x92\x41\xf5\x02\x32\xe9\x02Updates the user\'s preferred language and region settings using BCP-47 format codes. Use this field to customize the user\'s experience with localized content, date formats, number formatting, and UI language. When not specified, the user inherits the organization\'s default locale settings. Common values include `en-US`, `en-GB`, `fr-FR`, `de-DE`, and `es-ES`.J\x07\"en-US\"H\x03R\x06locale\x88\x01\x01\x12\xb1\x03\n\x0cphone_number\x18\x07 \x01(\tB\x88\x03\x92\x41\x84\x03\x32\xf1\x02Updates the user\'s phone number in E.164 international format. Use this field to enable SMS-based authentication methods, two-factor authentication, or phone-based account recovery. The phone number must include the country code and be formatted according to E.164 standards (e.g., `+1` for US numbers). This field is required when enabling SMS authentication features.J\x0e\"+14155552671\"H\x04R\x0bphoneNumber\x88\x01\x01\x12\xd1\x04\n\x08metadata\x18\x08 \x03(\x0b\x32\x32.scalekit.v1.users.UpdateUserProfile.MetadataEntryB\x80\x04\x92\x41\xe3\x03\x32\xa3\x03Updates system-managed key-value pairs for internal tracking and operational data. Use this field to store system-generated metadata like account status, signup source, last activity tracking, or integration-specific identifiers. These fields are typically managed by automated processes rather than direct user input. Keys must be 3-25 characters, values must be 1-256 characters, with a maximum of 20 key-value pairs.J;{\"account_status\": \"active\", \"signup_source\": \"mobile_app\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xc7\x05\n\x11\x63ustom_attributes\x18\t \x03(\x0b\x32:.scalekit.v1.users.UpdateUserProfile.CustomAttributesEntryB\xdd\x04\x92\x41\xc0\x04\x32\xfe\x03Updates custom attributes for extended user profile data and application-specific information. Use this field to store business-specific user data like department, job title, security clearances, project assignments, or any other organizational attributes your application requires. Unlike system metadata, these attributes are typically managed by administrators or applications and are visible to end users. Keys must be 3-25 characters, values must be 1-256 characters, with a maximum of 20 key-value pairs.J={\"department\": \"engineering\", \"security_clearance\": \"level2\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x10\x63ustomAttributes\x12\x8a\x01\n\nfirst_name\x18\x15 \x01(\tBf\x18\x01\x92\x41Y2O[DEPRECATED] Use given_name instead. User\'s given name. Maximum 200 characters.J\x06\"John\"\xbaH\x05r\x03\x18\xc8\x01H\x05R\tfirstName\x88\x01\x01\x12\x89\x01\n\tlast_name\x18\x16 \x01(\tBg\x18\x01\x92\x41Z2Q[DEPRECATED] Use family_name instead. User\'s family name. Maximum 200 characters.J\x05\"Doe\"\xbaH\x05r\x03\x18\xc8\x01H\x06R\x08lastName\x88\x01\x01\x12\x97\x03\n\x12preferred_username\x18\n \x01(\tB\xe2\x02\x92\x41\xd6\x02\x32\xbf\x02Updates the user\'s preferred username for display and identification purposes. Use this field to set a custom username that the user prefers to be known by, which may differ from their email or formal name. This username appears in user interfaces, mentions, and informal communications. Maximum 512 characters allowed.J\x12\"John Michael Doe\"\xbaH\x05r\x03\x18\x80\x04H\x07R\x11preferredUsername\x88\x01\x01\x12\xb2\x03\n\x07picture\x18\x0b \x01(\tB\x92\x03\x92\x41\x86\x03\x32\xe1\x02Updates the URL to the user\'s profile picture or avatar image. Use this field to set or change the user\'s profile photo that appears in user interfaces, directory listings, and collaborative features. The URL should point to a publicly accessible image file. Supported formats typically include JPEG, PNG, and GIF. Maximum URL length is 2048 characters.J \"https://example.com/avatar.jpg\"\xbaH\x05r\x03\x18\x80\x10H\x08R\x07picture\x88\x01\x01\x12\xfe\x02\n\x06gender\x18\x0c \x01(\tB\xe0\x02\x92\x41\xdc\x02\x32\xd1\x02Updates the user\'s gender identity information. Use this field to store the user\'s gender identity for personalization, compliance, or reporting purposes. This field supports any string value to accommodate diverse gender identities and should be handled with appropriate privacy considerations according to your organization\'s policies.J\x06\"male\"H\tR\x06gender\x88\x01\x01\x12\xdd\x03\n\x06groups\x18\r \x03(\tB\xc4\x03\x92\x41\xab\x03\x32\x8b\x03Updates the list of group names the user belongs to within the organization. Use this field to manage the user\'s group memberships for role-based access control, team assignments, or organizational structure. Groups are typically used for permission management and collaborative access. Each group name must be unique within the list, 1-250 characters long, with a maximum of 50 groups per user.J\x1b[\"engineering\", \"managers\"]\xbaH\x12\x92\x01\x0f\x08\x00\x10\x32\x18\x01\"\x07r\x05\x10\x01\x18\xfa\x01R\x06groups\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a\x43\n\x15\x43ustomAttributesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\r\n\x0b_given_nameB\x0e\n\x0c_family_nameB\x07\n\x05_nameB\t\n\x07_localeB\x0f\n\r_phone_numberB\r\n\x0b_first_nameB\x0c\n\n_last_nameB\x15\n\x13_preferred_usernameB\n\n\x08_pictureB\t\n\x07_genderJ\x04\x08\x01\x10\x02J\x04\x08\x06\x10\x07\"\xf9\x07\n\x06Invite\x12l\n\x0forganization_id\x18\x01 \x01(\tBC\x92\x41@2-The organization to which the invite belongs.J\x0f\"org_987654321\"R\x0eorganizationId\x12\x7f\n\x07user_id\x18\x02 \x01(\tBf\x92\x41\x63\x32SUser ID to whom the invite is sent. May be empty if the user has not signed up yet.J\x0c\"usr_123456\"R\x06userId\x12\x7f\n\rinviter_email\x18\x03 \x01(\tBU\x92\x41R2;Identifier of the user or system that initiated the invite.J\x13\"admin@example.com\"H\x00R\x0cinviterEmail\x88\x01\x01\x12x\n\x06status\x18\x04 \x01(\tB`\x92\x41]2ICurrent status of the invite (e.g., pending, accepted, expired, revoked).J\x10\"pending_invite\"R\x06status\x12\x89\x01\n\ncreated_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampBN\x92\x41K21Timestamp when the invite was originally created.J\x16\"2025-07-10T08:00:00Z\"R\tcreatedAt\x12}\n\nexpires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampBB\x92\x41?2%The time at which the invite expires.J\x16\"2025-12-31T23:59:59Z\"R\texpiresAt\x12\x8f\x01\n\tresent_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampBV\x92\x41S29Timestamp when the invite was last resent, if applicable.J\x16\"2025-07-15T09:30:00Z\"R\x08resentAt\x12V\n\x0cresent_count\x18\x08 \x01(\x05\x42\x33\x92\x41\x30\x32+Number of times the invite has been resent.J\x01\x32R\x0bresentCountB\x10\n\x0e_inviter_email\"\xa3\x03\n\x13ResendInviteRequest\x12\xd3\x01\n\x0forganization_id\x18\x01 \x01(\tB\xa9\x01\x92\x41\x96\x01\x32|Unique identifier of the organization containing the pending invitation. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xb5\x01\n\x02id\x18\x02 \x01(\tB\xa4\x01\x92\x41\x91\x01\x32wSystem-generated user ID of the user who has a pending invitation. Must start with \'usr_\' and be 19-25 characters long.J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_R\x02id\"\xe1\x02\n\x14ResendInviteResponse\x12\xc8\x02\n\x06invite\x18\x01 \x01(\x0b\x32\x19.scalekit.v1.users.InviteB\x94\x02\x92\x41\x90\x02\x32\x81\x01Updated invitation object containing the resent invitation details, including new expiration time and incremented resend counter.J\x89\x01{\"organization_id\": \"org_123\", \"user_id\": \"usr_456\", \"status\": \"pending_invite\", \"expires_at\": \"2025-12-31T23:59:59Z\", \"resent_count\": 2}R\x06invite\"\xf0\x01\n\x14ListUserRolesRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\"q\n\x15ListUserRolesResponse\x12X\n\x05roles\x18\x01 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleB\'\x92\x41$2\"List of roles assigned to the userR\x05roles\"\xde\x02\n\x16\x41ssignUserRolesRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\x12j\n\x05roles\x18\x03 \x03(\x0b\x32$.scalekit.v1.users.AssignRoleRequestB.\x92\x41%2#List of roles to assign to the user\xbaH\x03\xc8\x01\x01R\x05roles\"\xb2\x01\n\x11\x41ssignRoleRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x18\x01\x92\x41\x39\x32\x1eUnique identifier for the roleJ\x17\"role_1234abcd5678efgh\"R\x02id\x12M\n\trole_name\x18\x02 \x01(\tB0\x92\x41$2\x18Unique name for the roleJ\x08\"viewer\"\xbaH\x06r\x04\x10\x00\x18\x64R\x08roleName\"\x81\x01\n\x17\x41ssignUserRolesResponse\x12\x66\n\x05roles\x18\x01 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleB5\x92\x41\x32\x32\x30List of all roles currently assigned to the userR\x05roles\"\xd6\x02\n\x15RemoveUserRoleRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\x12\x63\n\trole_name\x18\x03 \x01(\tBF\x92\x41\x43\x32(Unique identifier for the role to removeJ\x17\"role_1234abcd5678efgh\"R\x08roleName\"\xf6\x01\n\x1aListUserPermissionsRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\"\x97\x03\n\nPermission\x12U\n\x02id\x18\x01 \x01(\tBE\x92\x41?2$Unique identifier for the permissionJ\x17\"perm_1234abcd5678efgh\"\xe0\x41\x03R\x02id\x12R\n\x04name\x18\x02 \x01(\tB>\x92\x41;2)Unique name identifier for the permissionJ\x0e\"users:create\"R\x04name\x12u\n\x0b\x64\x65scription\x18\x03 \x01(\tBS\x92\x41P2)Description of what the permission allowsJ#\"Allows creating new user accounts\"R\x0b\x64\x65scription\x12g\n\x04tags\x18\x04 \x03(\tBS\x92\x41\x41\x32!Tags for categorizing permissionsJ\x1c[\"user-management\", \"admin\"]\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\x04tags\";\n\x16GetSupportHashResponse\x12!\n\x0csupport_hash\x18\x01 \x01(\tR\x0bsupportHash\"\x8f\x01\n\x1bListUserPermissionsResponse\x12p\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x1d.scalekit.v1.users.PermissionB/\x92\x41,2*List of permissions the user has access toR\x0bpermissions2\x97]\n\x0bUserService\x12\xb8\x03\n\x07GetUser\x12!.scalekit.v1.users.GetUserRequest\x1a\".scalekit.v1.users.GetUserResponse\"\xe5\x02\x92\x41\xc1\x02\n\x05Users\x12\x08Get user\x1a\x8e\x01Retrieves all details for a user by system-generated user ID or external ID. The response includes organization memberships and user metadata.J\x9c\x01\n\x03\x32\x30\x30\x12\x94\x01\njUser details retrieved successfully. Returns full user object with system-generated fields and timestamps.\x12&\n$\x1a\".scalekit.v1.users.GetUserResponse\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x14\x12\x12/api/v1/users/{id}\x12\xba\x03\n\x0eGetCurrentUser\x12(.scalekit.v1.users.GetCurrentUserRequest\x1a).scalekit.v1.users.GetCurrentUserResponse\"\xd2\x02\x92\x41\x9f\x02\n\x05Users\x12\x16Get authenticated user\x1a\x9e\x01Retrieves details for the currently authenticated user. Returns the same user object as GetUser but uses the authenticated user\'s ID from the session context.J]\n\x03\x32\x30\x30\x12V\n,Current user details retrieved successfully.\x12&\n$\x1a\".scalekit.v1.users.GetUserResponse\x82\xb5\x18\x02\x18\x10\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x14\x12\x12/api/v1/users:this\x12\xe1\x02\n\x0eGetSupportHash\x12\x16.google.protobuf.Empty\x1a).scalekit.v1.users.GetSupportHashResponse\"\x8b\x02\x92\x41\xdf\x01\n\x05Users\x12\x10Get support hash\x1a\x66Retrieves the support email hash for the current logged in user, used for the Scalekit support system.J\\\n\x03\x32\x30\x30\x12U\n$Support hash retrieved successfully.\x12-\n+\x1a).scalekit.v1.users.GetSupportHashResponse\x82\xb5\x18\x02\x18P\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/users/support-hash\x12\xa0\x04\n\tListUsers\x12#.scalekit.v1.users.ListUsersRequest\x1a$.scalekit.v1.users.ListUsersResponse\"\xc7\x03\x92\x41\xa8\x03\n\x05Users\x12\x1dList all users in environment\x1a\xbc\x02Retrieves a paginated list of all users across your entire environment. Use this endpoint to view all users regardless of their organization memberships. This is useful for administrative purposes, user audits, or when you need to see all users in your Scalekit environment. Supports pagination for large user bases.JA\n\x03\x32\x30\x30\x12:\n\x0eList of users.\x12(\n&\x1a$.scalekit.v1.users.ListUsersResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x0f\x12\r/api/v1/users\x12\xcb\x03\n\x0bSearchUsers\x12%.scalekit.v1.users.SearchUsersRequest\x1a&.scalekit.v1.users.SearchUsersResponse\"\xec\x02\x92\x41\xb7\x02\n\x05Users\x12\x0cSearch users\x1a\x85\x01Searches for users in the environment by email, user ID, or external ID. Returns all users that match the query. Supports pagination.J\x97\x01\n\x03\x32\x30\x30\x12\x8f\x01\naReturns a list of matching users and a page token for pagination if there are additional results.\x12*\n(\x1a&.scalekit.v1.users.SearchUsersResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/users:search\x12\xe0\x04\n\x17SearchOrganizationUsers\x12\x31.scalekit.v1.users.SearchOrganizationUsersRequest\x1a\x32.scalekit.v1.users.SearchOrganizationUsersResponse\"\xdd\x03\x92\x41\x88\x03\n\x05Users\x12\x19Search organization users\x1a\xa5\x01Searches for users within a specific organization by email, user ID, or external ID. Returns all users in the organization that match the query. Supports pagination.J\xbb\x01\n\x03\x32\x30\x30\x12\xb3\x01\nyReturns a list of matching users within the organization and a page token for pagination if there are additional results.\x12\x36\n4\x1a\x32.scalekit.v1.users.SearchOrganizationUsersResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x36\x12\x34/api/v1/organizations/{organization_id}/users:search\x12\x96\x05\n\nUpdateUser\x12$.scalekit.v1.users.UpdateUserRequest\x1a%.scalekit.v1.users.UpdateUserResponse\"\xba\x04\x92\x41\x90\x04\n\x05Users\x12\x17Update user information\x1a\xe1\x02Modifies user account information including profile details, metadata, and external ID. Use this endpoint to update a user\'s personal information, contact details, or custom metadata. You can update the user\'s profile, phone number, and metadata fields. Note that fields like user ID, email address, environment ID, and creation time cannot be modified.J\x89\x01\n\x03\x32\x30\x30\x12\x81\x01\nTUser updated successfully. Returns the modified user object with updated timestamps.\x12)\n\'\x1a%.scalekit.v1.users.UpdateUserResponse\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x1a\x32\x12/api/v1/users/{id}:\x04user\x12\xfd\x03\n\nDeleteUser\x12$.scalekit.v1.users.DeleteUserRequest\x1a\x16.google.protobuf.Empty\"\xb0\x03\x92\x41\x8c\x03\n\x05Users\x12\x17\x44\x65lete user permanently\x1a\xb0\x02Permanently removes a user from your environment and deletes all associated data. Use this endpoint when you need to completely remove a user account. This action deletes the user\'s profile, memberships, and all related data across all organizations. This operation cannot be undone, so use with caution.J7\n\x03\x32\x30\x30\x12\x30\n.User successfully deleted. No content returned\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x14*\x12/api/v1/users/{id}\x12\xc4\x05\n\x10\x43reateMembership\x12*.scalekit.v1.users.CreateMembershipRequest\x1a+.scalekit.v1.users.CreateMembershipResponse\"\xd6\x04\x92\x41\xde\x03\n\x05Users\x12!Add existing user to organization\x1a\x95\x02\x41\x64\x64s an existing user to an organization and assigns them specific roles and permissions. Use this endpoint when you want to grant an existing user access to a particular organization. You can specify roles, metadata, and other membership details during the invitation process.J\x99\x01\n\x03\x32\x30\x31\x12\x91\x01\n^User successfully added to the organization. Returns details of the updated membership details\x12/\n-\x1a+.scalekit.v1.users.CreateMembershipResponse\x82\xb5\x18\x1e\n\x1aorganizations_users_invite\x18T\x82\xd3\xe4\x93\x02L\">/api/v1/memberships/organizations/{organization_id}/users/{id}:\nmembership\x12\x99\x04\n\x10\x44\x65leteMembership\x12*.scalekit.v1.users.DeleteMembershipRequest\x1a\x16.google.protobuf.Empty\"\xc0\x03\x92\x41\xd4\x02\n\x05Users\x12\'Delete organization membership for user\x1a\xdc\x01Removes a user from an organization by user ID or external ID. If the user has no memberships left and cascade is true, the user is also deleted. This action is irreversible and may also remove related group memberships.JC\n\x03\x32\x30\x30\x12<\n:User successfully marked for deletion. No content returned\x82\xb5\x18\x1e\n\x1aorganizations_users_remove\x18T\x82\xd3\xe4\x93\x02@*>/api/v1/memberships/organizations/{organization_id}/users/{id}\x12\x9e\x04\n\x10UpdateMembership\x12*.scalekit.v1.users.UpdateMembershipRequest\x1a+.scalekit.v1.users.UpdateMembershipResponse\"\xb0\x03\x92\x41\xb3\x02\n\x05Users\x12\'Update organization membership for user\x1a\x83\x01Updates a user\'s membership details within an organization by user ID or external ID. You can update roles and membership metadata.J{\n\x03\x32\x30\x30\x12t\nAMembership updated successfully. Returns the updated user object.\x12/\n-\x1a+.scalekit.v1.users.UpdateMembershipResponse\x82\xb5\x18#\n\x1forganizations_users_role_update\x18T\x82\xd3\xe4\x93\x02L2>/api/v1/memberships/organizations/{organization_id}/users/{id}:\nmembership\x12\xc8\x06\n\x17\x43reateUserAndMembership\x12\x31.scalekit.v1.users.CreateUserAndMembershipRequest\x1a\x32.scalekit.v1.users.CreateUserAndMembershipResponse\"\xc5\x05\x92\x41\xe4\x04\n\x05Users\x12\x1f\x43reate new user in organization\x1a\x83\x03\x43reates a new user account and immediately adds them to the specified organization. Use this endpoint when you want to create a user and grant them access to an organization in a single operation. You can provide user profile information, assign roles, and configure membership metadata. The user receives an activation email unless this feature is disabled in the organization settings.J\xb3\x01\n\x03\x32\x30\x31\x12\xab\x01\nqUser created successfully. Returns the created user object, including system-generated identifiers and timestamps\x12\x36\n4\x1a\x32.scalekit.v1.users.CreateUserAndMembershipResponse\x82\xb5\x18\x1e\n\x1aorganizations_users_invite\x18T\x82\xd3\xe4\x93\x02\x35\"-/api/v1/organizations/{organization_id}/users:\x04user\x12\xfd\x04\n\x15ListOrganizationUsers\x12/.scalekit.v1.users.ListOrganizationUsersRequest\x1a\x30.scalekit.v1.users.ListOrganizationUsersResponse\"\x80\x04\x92\x41\xa7\x03\n\x05Users\x12\x17List organization users\x1a\x87\x02Retrieves a paginated list of all users who are members of the specified organization. Use this endpoint to view all users with access to a particular organization, including their roles, metadata, and membership details. Supports pagination for large user lists.J{\n\x03\x32\x30\x30\x12t\n\n\x0fGetUserResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\xd8\x01\n\x16GetCurrentUserResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\x12\x90\x01\n\x12\x63urrent_session_id\x18\x02 \x01(\tBb\x92\x41_2EThe ID of the current session associated with the authenticated user.J\x16\"ses_1234567890123456\"R\x10\x63urrentSessionId\"\x17\n\x15GetCurrentUserRequest\"\xf4\x04\n\x1cListOrganizationUsersRequest\x12\xc9\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x8c\x01\x32rUnique identifier of the organization for which to list users. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xa9\x01\n\tpage_size\x18\x02 \x01(\rB\x8b\x01\x92\x41\x7f\x32yMaximum number of users to return in a single response. Valid range: 1-100. Server may return fewer users than specified.J\x02\x35\x30\xbaH\x06*\x04\x18\x64(\x00R\x08pageSize\x12\xdb\x01\n\npage_token\x18\x03 \x01(\tB\xbb\x01\x92\x41\xb7\x01\x32\x80\x01Pagination token from a previous ListUserResponse. Used to retrieve the next page of results. Leave empty for the first request.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\tpageToken\"\xa4\x05\n\x1dListOrganizationUsersResponse\x12\xba\x01\n\x0fnext_page_token\x18\x01 \x01(\tB\x91\x01\x92\x41\x8d\x01\x32WOpaque token for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x02 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12\x92\x01\n\x05users\x18\x03 \x03(\x0b\x32\x17.scalekit.v1.users.UserBc\x92\x41`2^List of user objects for the current page. May contain fewer entries than requested page_size.R\x05users\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SOpaque token for retrieving the previous page of results. Empty for the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\xfd\x04\n\x17\x44\x65leteMembershipRequest\x12\xa7\x01\n\x0forganization_id\x18\x01 \x01(\tB~\x92\x41l2RUnique organization identifier. Must start with \'org_\' and be 1-32 characters longJ\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x81\x01\n\x02id\x18\x02 \x01(\tBo\x92\x41]2CSystem-generated user ID. Must start with \'usr_\' (19-25 characters)J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12\x89\x01\n\x0b\x65xternal_id\x18\x03 \x01(\tBf\x92\x41\x63\x32RExternal system identifier from connected directories. Must match existing recordsJ\r\"ext_7890xyz\"H\x00R\nexternalId\x12\x8d\x01\n\x07\x63\x61scade\x18\x05 \x01(\x08\x42n\x92\x41\\2SIf true, if user has no memberships left the user is also deleted. defaults to trueJ\x05\x66\x61lse\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x07\x63\x61scade\x88\x01\x01\x42\x0c\n\nidentitiesB\n\n\x08_cascade\"\xbd\x06\n\x17\x43reateMembershipRequest\x12\xb7\x01\n\x0forganization_id\x18\x01 \x01(\tB\x8d\x01\x92\x41{2aUnique identifier of the target organization. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xa2\x01\n\nmembership\x18\x02 \x01(\x0b\x32#.scalekit.v1.users.CreateMembershipB]\x92\x41Q2?Membership details to create. Required fields must be provided.\xca>\r\xfa\x02\nmembership\xe0\x41\x02\xbaH\x03\xc8\x01\x01R\nmembership\x12\x81\x01\n\x02id\x18\x03 \x01(\tBo\x92\x41]2CSystem-generated user ID. Must start with \'usr_\' (19-25 characters)J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12\x8e\x01\n\x0b\x65xternal_id\x18\x04 \x01(\tBk\x92\x41h2WExternal system identifier from connected directories. Must be unique across the systemJ\r\"ext_7890xyz\"H\x00R\nexternalId\x12\x85\x01\n\x15send_invitation_email\x18\x05 \x01(\x08\x42L\x92\x41I2AIf true, sends an activation email to the user. Defaults to true.J\x04trueH\x01R\x13sendInvitationEmail\x88\x01\x01\x42\x0c\n\nidentitiesB\x18\n\x16_send_invitation_email\"G\n\x18\x43reateMembershipResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\x9a\x02\n\x10ListUsersRequest\x12t\n\tpage_size\x18\x01 \x01(\rBW\x92\x41T2NMaximum number of organizations to return per page. Must be between 10 and 100J\x02\x33\x30R\x08pageSize\x12\x8f\x01\n\npage_token\x18\x02 \x01(\tBp\x92\x41m2[Pagination token from the previous response. Use to retrieve the next page of organizationsJ\x0e\"\"R\tpageToken\"\xc0\x04\n\x11ListUsersResponse\x12\x42\n\x05users\x18\x01 \x03(\x0b\x32\x17.scalekit.v1.users.UserB\x13\x92\x41\x10\x32\x0eList of users.R\x05users\x12\xb3\x01\n\x0fnext_page_token\x18\x02 \x01(\tB\x8a\x01\x92\x41\x86\x01\x32PToken for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x03 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SToken for retrieving the previous page of results. Empty if this is the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\xfb\x03\n\x12SearchUsersRequest\x12\xaf\x01\n\x05query\x18\x01 \x01(\tB\x98\x01\x92\x41\x88\x01\x32oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\x10john@example.comxd\x80\x01\x03\xbaH\tr\x04\x10\x03\x18\x64\xc8\x01\x01R\x05query\x12\x8a\x01\n\tpage_size\x18\x02 \x01(\rBm\x92\x41\x63\x32KMaximum number of users to return per page. Value must be between 1 and 30.J\x02\x33\x30Y\x00\x00\x00\x00\x00\x00>@i\x00\x00\x00\x00\x00\x00\xf0?\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x03 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\xcb\x04\n\x13SearchUsersResponse\x12\xb3\x01\n\x0fnext_page_token\x18\x01 \x01(\tB\x8a\x01\x92\x41\x86\x01\x32PToken for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x02 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12K\n\x05users\x18\x03 \x03(\x0b\x32\x17.scalekit.v1.users.UserB\x1c\x92\x41\x19\x32\x17List of matching users.R\x05users\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SToken for retrieving the previous page of results. Empty if this is the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\xb1\x02\n\x11\x44\x65leteUserRequest\x12\x81\x01\n\x02id\x18\x01 \x01(\tBo\x92\x41]2CSystem-generated user ID. Must start with \'usr_\' (19-25 characters)J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12\x89\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tBf\x92\x41\x63\x32RExternal system identifier from connected directories. Must match existing recordsJ\r\"ext_7890xyz\"H\x00R\nexternalIdB\x0c\n\nidentities\"\x9a\x05\n\x17UpdateMembershipRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\xa1\x01\x92\x41\x8e\x01\x32tUnique identifier of the organization containing the membership. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x8c\x01\n\x02id\x18\x02 \x01(\tBz\x92\x41h2NSystem-generated user ID. Must start with \'usr_\' and be 19-25 characters long.J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12j\n\x0b\x65xternal_id\x18\x03 \x01(\tBG\x92\x41\x44\x32\x33Your application\'s unique identifier for this user.J\r\"ext_7890xyz\"H\x00R\nexternalId\x12\xa7\x01\n\nmembership\x18\x05 \x01(\x0b\x32#.scalekit.v1.users.UpdateMembershipBb\x92\x41Y2DMembership fields to update. Only specified fields will be modified.J\x11{\"role\": \"admin\"}\xbaH\x03\xc8\x01\x01R\nmembershipB\x0c\n\nidentities\"\xfb\x03\n\x10UpdateMembership\x12}\n\x05roles\x18\x04 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleBL\x92\x41I22Role to assign to the user within the organizationJ\x13[{\"name\": \"admin\"}]R\x05roles\x12\x8c\x02\n\x08metadata\x18\x07 \x03(\x0b\x32\x31.scalekit.v1.users.UpdateMembership.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01J\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07\"\xb4\x05\n\x10\x43reateMembership\x12}\n\x05roles\x18\x04 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleBL\x92\x41I22Role to assign to the user within the organizationJ\x13[{\"name\": \"admin\"}]R\x05roles\x12\x8c\x02\n\x08metadata\x18\x07 \x03(\x0b\x32\x31.scalekit.v1.users.CreateMembership.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xa4\x01\n\rinviter_email\x18\x08 \x01(\tBz\x92\x41k2QEmail address of the user who invited this member. Must be a valid email address.J\x16\"john.doe@example.com\"\xbaH\tr\x07\x10\x05\x18\xfe\x01`\x01H\x00R\x0cinviterEmail\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x10\n\x0e_inviter_emailJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07\"G\n\x18UpdateMembershipResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\xcf\x05\n\x1eSearchOrganizationUsersRequest\x12\xc5\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9b\x01\x92\x41\x85\x01\x32kUnique identifier of the organization to search within. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\x12\xaf\x01\n\x05query\x18\x02 \x01(\tB\x98\x01\x92\x41\x88\x01\x32oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\x10john@example.comxd\x80\x01\x03\xbaH\tr\x04\x10\x03\x18\x64\xc8\x01\x01R\x05query\x12\x8a\x01\n\tpage_size\x18\x03 \x01(\rBm\x92\x41\x63\x32KMaximum number of users to return per page. Value must be between 1 and 30.J\x02\x33\x30Y\x00\x00\x00\x00\x00\x00>@i\x00\x00\x00\x00\x00\x00\xf0?\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x04 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\xd7\x04\n\x1fSearchOrganizationUsersResponse\x12\xb3\x01\n\x0fnext_page_token\x18\x01 \x01(\tB\x8a\x01\x92\x41\x86\x01\x32PToken for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x02 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12K\n\x05users\x18\x03 \x03(\x0b\x32\x17.scalekit.v1.users.UserB\x1c\x92\x41\x19\x32\x17List of matching users.R\x05users\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SToken for retrieving the previous page of results. Empty if this is the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\x85\x08\n\nCreateUser\x12\x98\x01\n\x05\x65mail\x18\x05 \x01(\tB\x81\x01\x92\x41w2aPrimary email address for the user. Must be unique across the environment and valid per RFC 5322.J\x12\"user@example.com\"\xbaH\x04r\x02`\x01R\x05\x65mail\x12\xa2\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tB|\x92\x41y2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x12\"ext_12345a67b89c\"H\x00R\nexternalId\x88\x01\x01\x12\x9f\x01\n\nmembership\x18\x07 \x01(\x0b\x32#.scalekit.v1.users.CreateMembershipBZ\x92\x41W2UList of organization memberships. Automatically populated based on group assignments.R\nmembership\x12\xa0\x01\n\x0cuser_profile\x18\x08 \x01(\x0b\x32$.scalekit.v1.users.CreateUserProfileBW\x92\x41T2RUser\'s personal information including name, address, and other profile attributes.R\x0buserProfile\x12\x86\x02\n\x08metadata\x18\t \x03(\x0b\x32+.scalekit.v1.users.CreateUser.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\n\x10\x0b\"\xbe\x10\n\x11\x43reateUserProfile\x12^\n\ngiven_name\x18\x02 \x01(\tB?\x92\x41\x34\x32*User\'s given name. Maximum 255 characters.J\x06\"John\"\xbaH\x05r\x03\x18\xff\x01R\tgivenName\x12`\n\x0b\x66\x61mily_name\x18\x03 \x01(\tB?\x92\x41\x34\x32+User\'s family name. Maximum 255 characters.J\x05\"Doe\"\xbaH\x05r\x03\x18\xff\x01R\nfamilyName\x12v\n\x04name\x18\x04 \x01(\tBb\x92\x41_2IFull name in display format. Typically combines first_name and last_name.J\x12\"John Michael Doe\"R\x04name\x12y\n\x06locale\x18\x05 \x01(\tBa\x92\x41^2SUser\'s localization preference in BCP-47 format. Defaults to organization settings.J\x07\"en-US\"R\x06locale\x12\x8a\x01\n\x0cphone_number\x18\x07 \x01(\tBg\x92\x41\x64\x32RPhone number in E.164 international format. Required for SMS-based authentication.J\x0e\"+14155552671\"R\x0bphoneNumber\x12\x8b\x02\n\x08metadata\x18\x08 \x03(\x0b\x32\x32.scalekit.v1.users.CreateUserProfile.MetadataEntryB\xba\x01\x92\x41\x9d\x01\x32^System-managed key-value pairs for internal tracking. Keys (3-25 chars), values (1-256 chars).J;{\"account_status\": \"active\", \"signup_source\": \"mobile_app\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xa2\x02\n\x11\x63ustom_attributes\x18\t \x03(\x0b\x32:.scalekit.v1.users.CreateUserProfile.CustomAttributesEntryB\xb8\x01\x92\x41\x9b\x01\x32ZCustom attributes for extended user profile data. Keys (3-25 chars), values (1-256 chars).J={\"department\": \"engineering\", \"security_clearance\": \"level2\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x10\x63ustomAttributes\x12\x7f\n\x12preferred_username\x18\n \x01(\tBP\x92\x41\x45\x32/User\'s preferred username for display purposes.J\x12\"John Michael Doe\"\xbaH\x05r\x03\x18\x80\x04R\x11preferredUsername\x12z\n\x07picture\x18\x0b \x01(\tB[\x92\x41P2,URL to the user\'s profile picture or avatar.J \"https://example.com/avatar.jpg\"\xbaH\x05r\x03\x18\x80\x10H\x00R\x07picture\x88\x01\x01\x12\x41\n\x06gender\x18\x0c \x01(\tB$\x92\x41!2\x17User\'s gender identity.J\x06\"male\"H\x01R\x06gender\x88\x01\x01\x12\xa1\x01\n\x06groups\x18\r \x03(\tB\x88\x01\x92\x41p2QList of group names the user belongs to. Each group name must be 1-250 charactersJ\x1b[\"engineering\", \"managers\"]\xbaH\x12\x92\x01\x0f\x08\x00\x10\x32\x18\x01\"\x07r\x05\x10\x01\x18\xfa\x01R\x06groups\x12\x94\x01\n\nfirst_name\x18\x15 \x01(\tBu\x18\x01\x92\x41Y2O[DEPRECATED] Use given_name instead. User\'s given name. Maximum 200 characters.J\x06\"John\"\xbaH\x05r\x03\x18\xc8\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\tfirstName\x12\x93\x01\n\tlast_name\x18\x16 \x01(\tBv\x18\x01\x92\x41Z2Q[DEPRECATED] Use family_name instead. User\'s family name. Maximum 200 characters.J\x05\"Doe\"\xbaH\x05r\x03\x18\xc8\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\x08lastName\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a\x43\n\x15\x43ustomAttributesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\n\n\x08_pictureB\t\n\x07_genderJ\x04\x08\x01\x10\x02J\x04\x08\x06\x10\x07\"\xe5(\n\x11UpdateUserProfile\x12\xe5\x01\n\ngiven_name\x18\x02 \x01(\tB\xc0\x01\x92\x41\xb4\x01\x32\xa9\x01Updates the user\'s given name (first name). Use this field to modify how the user\'s first name appears in the system and user interfaces. Maximum 255 characters allowed.J\x06\"John\"\xbaH\x05r\x03\x18\xff\x01H\x00R\tgivenName\x88\x01\x01\x12\xe4\x01\n\x0b\x66\x61mily_name\x18\x03 \x01(\tB\xbd\x01\x92\x41\xb1\x01\x32\xa7\x01Updates the user\'s family name (last name or surname). Use this field to modify how the user\'s last name appears throughout the system. Maximum 255 characters allowed.J\x05\"Doe\"\xbaH\x05r\x03\x18\xff\x01H\x01R\nfamilyName\x88\x01\x01\x12\xae\x02\n\x04name\x18\x04 \x01(\tB\x94\x02\x92\x41\x90\x02\x32\x81\x02Updates the user\'s complete display name. Use this field when you want to set the full name as a single string rather than using separate given and family names. This name appears in user interfaces, reports, and anywhere a formatted display name is needed.J\n\"John Doe\"H\x02R\x04name\x88\x01\x01\x12\x97\x03\n\x06locale\x18\x05 \x01(\tB\xf9\x02\x92\x41\xf5\x02\x32\xe9\x02Updates the user\'s preferred language and region settings using BCP-47 format codes. Use this field to customize the user\'s experience with localized content, date formats, number formatting, and UI language. When not specified, the user inherits the organization\'s default locale settings. Common values include `en-US`, `en-GB`, `fr-FR`, `de-DE`, and `es-ES`.J\x07\"en-US\"H\x03R\x06locale\x88\x01\x01\x12\xb1\x03\n\x0cphone_number\x18\x07 \x01(\tB\x88\x03\x92\x41\x84\x03\x32\xf1\x02Updates the user\'s phone number in E.164 international format. Use this field to enable SMS-based authentication methods, two-factor authentication, or phone-based account recovery. The phone number must include the country code and be formatted according to E.164 standards (e.g., `+1` for US numbers). This field is required when enabling SMS authentication features.J\x0e\"+14155552671\"H\x04R\x0bphoneNumber\x88\x01\x01\x12\xd1\x04\n\x08metadata\x18\x08 \x03(\x0b\x32\x32.scalekit.v1.users.UpdateUserProfile.MetadataEntryB\x80\x04\x92\x41\xe3\x03\x32\xa3\x03Updates system-managed key-value pairs for internal tracking and operational data. Use this field to store system-generated metadata like account status, signup source, last activity tracking, or integration-specific identifiers. These fields are typically managed by automated processes rather than direct user input. Keys must be 3-25 characters, values must be 1-256 characters, with a maximum of 20 key-value pairs.J;{\"account_status\": \"active\", \"signup_source\": \"mobile_app\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xc7\x05\n\x11\x63ustom_attributes\x18\t \x03(\x0b\x32:.scalekit.v1.users.UpdateUserProfile.CustomAttributesEntryB\xdd\x04\x92\x41\xc0\x04\x32\xfe\x03Updates custom attributes for extended user profile data and application-specific information. Use this field to store business-specific user data like department, job title, security clearances, project assignments, or any other organizational attributes your application requires. Unlike system metadata, these attributes are typically managed by administrators or applications and are visible to end users. Keys must be 3-25 characters, values must be 1-256 characters, with a maximum of 20 key-value pairs.J={\"department\": \"engineering\", \"security_clearance\": \"level2\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x10\x63ustomAttributes\x12\x8a\x01\n\nfirst_name\x18\x15 \x01(\tBf\x18\x01\x92\x41Y2O[DEPRECATED] Use given_name instead. User\'s given name. Maximum 200 characters.J\x06\"John\"\xbaH\x05r\x03\x18\xc8\x01H\x05R\tfirstName\x88\x01\x01\x12\x89\x01\n\tlast_name\x18\x16 \x01(\tBg\x18\x01\x92\x41Z2Q[DEPRECATED] Use family_name instead. User\'s family name. Maximum 200 characters.J\x05\"Doe\"\xbaH\x05r\x03\x18\xc8\x01H\x06R\x08lastName\x88\x01\x01\x12\x97\x03\n\x12preferred_username\x18\n \x01(\tB\xe2\x02\x92\x41\xd6\x02\x32\xbf\x02Updates the user\'s preferred username for display and identification purposes. Use this field to set a custom username that the user prefers to be known by, which may differ from their email or formal name. This username appears in user interfaces, mentions, and informal communications. Maximum 512 characters allowed.J\x12\"John Michael Doe\"\xbaH\x05r\x03\x18\x80\x04H\x07R\x11preferredUsername\x88\x01\x01\x12\xb2\x03\n\x07picture\x18\x0b \x01(\tB\x92\x03\x92\x41\x86\x03\x32\xe1\x02Updates the URL to the user\'s profile picture or avatar image. Use this field to set or change the user\'s profile photo that appears in user interfaces, directory listings, and collaborative features. The URL should point to a publicly accessible image file. Supported formats typically include JPEG, PNG, and GIF. Maximum URL length is 2048 characters.J \"https://example.com/avatar.jpg\"\xbaH\x05r\x03\x18\x80\x10H\x08R\x07picture\x88\x01\x01\x12\xfe\x02\n\x06gender\x18\x0c \x01(\tB\xe0\x02\x92\x41\xdc\x02\x32\xd1\x02Updates the user\'s gender identity information. Use this field to store the user\'s gender identity for personalization, compliance, or reporting purposes. This field supports any string value to accommodate diverse gender identities and should be handled with appropriate privacy considerations according to your organization\'s policies.J\x06\"male\"H\tR\x06gender\x88\x01\x01\x12\xdd\x03\n\x06groups\x18\r \x03(\tB\xc4\x03\x92\x41\xab\x03\x32\x8b\x03Updates the list of group names the user belongs to within the organization. Use this field to manage the user\'s group memberships for role-based access control, team assignments, or organizational structure. Groups are typically used for permission management and collaborative access. Each group name must be unique within the list, 1-250 characters long, with a maximum of 50 groups per user.J\x1b[\"engineering\", \"managers\"]\xbaH\x12\x92\x01\x0f\x08\x00\x10\x32\x18\x01\"\x07r\x05\x10\x01\x18\xfa\x01R\x06groups\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a\x43\n\x15\x43ustomAttributesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\r\n\x0b_given_nameB\x0e\n\x0c_family_nameB\x07\n\x05_nameB\t\n\x07_localeB\x0f\n\r_phone_numberB\r\n\x0b_first_nameB\x0c\n\n_last_nameB\x15\n\x13_preferred_usernameB\n\n\x08_pictureB\t\n\x07_genderJ\x04\x08\x01\x10\x02J\x04\x08\x06\x10\x07\"\xf9\x07\n\x06Invite\x12l\n\x0forganization_id\x18\x01 \x01(\tBC\x92\x41@2-The organization to which the invite belongs.J\x0f\"org_987654321\"R\x0eorganizationId\x12\x7f\n\x07user_id\x18\x02 \x01(\tBf\x92\x41\x63\x32SUser ID to whom the invite is sent. May be empty if the user has not signed up yet.J\x0c\"usr_123456\"R\x06userId\x12\x7f\n\rinviter_email\x18\x03 \x01(\tBU\x92\x41R2;Identifier of the user or system that initiated the invite.J\x13\"admin@example.com\"H\x00R\x0cinviterEmail\x88\x01\x01\x12x\n\x06status\x18\x04 \x01(\tB`\x92\x41]2ICurrent status of the invite (e.g., pending, accepted, expired, revoked).J\x10\"pending_invite\"R\x06status\x12\x89\x01\n\ncreated_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampBN\x92\x41K21Timestamp when the invite was originally created.J\x16\"2025-07-10T08:00:00Z\"R\tcreatedAt\x12}\n\nexpires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampBB\x92\x41?2%The time at which the invite expires.J\x16\"2025-12-31T23:59:59Z\"R\texpiresAt\x12\x8f\x01\n\tresent_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampBV\x92\x41S29Timestamp when the invite was last resent, if applicable.J\x16\"2025-07-15T09:30:00Z\"R\x08resentAt\x12V\n\x0cresent_count\x18\x08 \x01(\x05\x42\x33\x92\x41\x30\x32+Number of times the invite has been resent.J\x01\x32R\x0bresentCountB\x10\n\x0e_inviter_email\"\xa3\x03\n\x13ResendInviteRequest\x12\xd3\x01\n\x0forganization_id\x18\x01 \x01(\tB\xa9\x01\x92\x41\x96\x01\x32|Unique identifier of the organization containing the pending invitation. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xb5\x01\n\x02id\x18\x02 \x01(\tB\xa4\x01\x92\x41\x91\x01\x32wSystem-generated user ID of the user who has a pending invitation. Must start with \'usr_\' and be 19-25 characters long.J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_R\x02id\"\xe1\x02\n\x14ResendInviteResponse\x12\xc8\x02\n\x06invite\x18\x01 \x01(\x0b\x32\x19.scalekit.v1.users.InviteB\x94\x02\x92\x41\x90\x02\x32\x81\x01Updated invitation object containing the resent invitation details, including new expiration time and incremented resend counter.J\x89\x01{\"organization_id\": \"org_123\", \"user_id\": \"usr_456\", \"status\": \"pending_invite\", \"expires_at\": \"2025-12-31T23:59:59Z\", \"resent_count\": 2}R\x06invite\"\xf0\x01\n\x14ListUserRolesRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\"q\n\x15ListUserRolesResponse\x12X\n\x05roles\x18\x01 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleB\'\x92\x41$2\"List of roles assigned to the userR\x05roles\"\xde\x02\n\x16\x41ssignUserRolesRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\x12j\n\x05roles\x18\x03 \x03(\x0b\x32$.scalekit.v1.users.AssignRoleRequestB.\x92\x41%2#List of roles to assign to the user\xbaH\x03\xc8\x01\x01R\x05roles\"\xb2\x01\n\x11\x41ssignRoleRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x18\x01\x92\x41\x39\x32\x1eUnique identifier for the roleJ\x17\"role_1234abcd5678efgh\"R\x02id\x12M\n\trole_name\x18\x02 \x01(\tB0\x92\x41$2\x18Unique name for the roleJ\x08\"viewer\"\xbaH\x06r\x04\x10\x00\x18\x64R\x08roleName\"\x81\x01\n\x17\x41ssignUserRolesResponse\x12\x66\n\x05roles\x18\x01 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleB5\x92\x41\x32\x32\x30List of all roles currently assigned to the userR\x05roles\"\xd6\x02\n\x15RemoveUserRoleRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\x12\x63\n\trole_name\x18\x03 \x01(\tBF\x92\x41\x43\x32(Unique identifier for the role to removeJ\x17\"role_1234abcd5678efgh\"R\x08roleName\"\xf6\x01\n\x1aListUserPermissionsRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\"\x97\x03\n\nPermission\x12U\n\x02id\x18\x01 \x01(\tBE\x92\x41?2$Unique identifier for the permissionJ\x17\"perm_1234abcd5678efgh\"\xe0\x41\x03R\x02id\x12R\n\x04name\x18\x02 \x01(\tB>\x92\x41;2)Unique name identifier for the permissionJ\x0e\"users:create\"R\x04name\x12u\n\x0b\x64\x65scription\x18\x03 \x01(\tBS\x92\x41P2)Description of what the permission allowsJ#\"Allows creating new user accounts\"R\x0b\x64\x65scription\x12g\n\x04tags\x18\x04 \x03(\tBS\x92\x41\x41\x32!Tags for categorizing permissionsJ\x1c[\"user-management\", \"admin\"]\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\x04tags\";\n\x16GetSupportHashResponse\x12!\n\x0csupport_hash\x18\x01 \x01(\tR\x0bsupportHash\"\x8f\x01\n\x1bListUserPermissionsResponse\x12p\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x1d.scalekit.v1.users.PermissionB/\x92\x41,2*List of permissions the user has access toR\x0bpermissions2\x9e\x62\n\x0bUserService\x12\xb8\x03\n\x07GetUser\x12!.scalekit.v1.users.GetUserRequest\x1a\".scalekit.v1.users.GetUserResponse\"\xe5\x02\x92\x41\xc1\x02\n\x05Users\x12\x08Get user\x1a\x8e\x01Retrieves all details for a user by system-generated user ID or external ID. The response includes organization memberships and user metadata.J\x9c\x01\n\x03\x32\x30\x30\x12\x94\x01\njUser details retrieved successfully. Returns full user object with system-generated fields and timestamps.\x12&\n$\x1a\".scalekit.v1.users.GetUserResponse\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x14\x12\x12/api/v1/users/{id}\x12\xd5\x03\n\x0eGetCurrentUser\x12(.scalekit.v1.users.GetCurrentUserRequest\x1a).scalekit.v1.users.GetCurrentUserResponse\"\xed\x02\x92\x41\xa6\x02\n\x05Users\x12\x16Get authenticated user\x1a\x9e\x01Retrieves details for the currently authenticated user. Returns the same user object as GetUser but uses the authenticated user\'s ID from the session context.Jd\n\x03\x32\x30\x30\x12]\n,Current user details retrieved successfully.\x12-\n+\x1a).scalekit.v1.users.GetCurrentUserResponse\x82\xb5\x18\x02\x18\x18\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02(\x12\x12/api/v1/users:thisZ\x12\x12\x10/api/v1/users/me\x12\xf0\x02\n\x0eGetSupportHash\x12\x16.google.protobuf.Empty\x1a).scalekit.v1.users.GetSupportHashResponse\"\x9a\x02\x92\x41\xdf\x01\n\x05Users\x12\x10Get support hash\x1a\x66Retrieves the support email hash for the current logged in user, used for the Scalekit support system.J\\\n\x03\x32\x30\x30\x12U\n$Support hash retrieved successfully.\x12-\n+\x1a).scalekit.v1.users.GetSupportHashResponse\x82\xb5\x18\x02\x18P\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/users/support-hash\x12\xa0\x04\n\tListUsers\x12#.scalekit.v1.users.ListUsersRequest\x1a$.scalekit.v1.users.ListUsersResponse\"\xc7\x03\x92\x41\xa8\x03\n\x05Users\x12\x1dList all users in environment\x1a\xbc\x02Retrieves a paginated list of all users across your entire environment. Use this endpoint to view all users regardless of their organization memberships. This is useful for administrative purposes, user audits, or when you need to see all users in your Scalekit environment. Supports pagination for large user bases.JA\n\x03\x32\x30\x30\x12:\n\x0eList of users.\x12(\n&\x1a$.scalekit.v1.users.ListUsersResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x0f\x12\r/api/v1/users\x12\xb8\x05\n\x0bSearchUsers\x12%.scalekit.v1.users.SearchUsersRequest\x1a&.scalekit.v1.users.SearchUsersResponse\"\xd9\x04\x92\x41\xb3\x04\n\x05Users\x12\x0cSearch users\x1a\xaf\x02Searches for users across the entire environment by email address, user ID, or external ID. The query must be at least 3 characters and is case-insensitive. Returns a paginated list of matching users with up to 30 results per page. Use the next_page_token from the response to retrieve subsequent pages.J\x8c\x01\n\x03\x32\x30\x30\x12\x84\x01\nVMatching users returned; includes pagination cursors for navigating large result sets.\x12*\n(\x1a&.scalekit.v1.users.SearchUsersResponseJ[\n\x03\x34\x30\x30\x12T\nRBad Request - query must be at least 3 characters and no more than 100 characters.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/users:search\x12\xd0\x07\n\x17SearchOrganizationUsers\x12\x31.scalekit.v1.users.SearchOrganizationUsersRequest\x1a\x32.scalekit.v1.users.SearchOrganizationUsersResponse\"\xcd\x06\x92\x41\x87\x06\n\x05Users\x12\x19Search organization users\x1a\xe3\x02Searches for users within a specific organization by email address, user ID, or external ID. The query must be at least 3 characters and is case-insensitive. Scopes results strictly to the given organization. Returns a paginated list of matching users with up to 30 results per page. Use the next_page_token from the response to retrieve subsequent pages.J\xb0\x01\n\x03\x32\x30\x30\x12\xa8\x01\nnMatching users within the organization returned; includes pagination cursors for navigating large result sets.\x12\x36\n4\x1a\x32.scalekit.v1.users.SearchOrganizationUsersResponseJ\x9b\x01\n\x03\x34\x30\x30\x12\x93\x01\n\x90\x01\x42\x61\x64 Request - query must be at least 3 characters and no more than 100 characters, and organization_id must be a valid org_ prefixed identifier.J,\n\x03\x34\x30\x34\x12%\n#Not Found - organization not found.\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x36\x12\x34/api/v1/organizations/{organization_id}/users:search\x12\x96\x05\n\nUpdateUser\x12$.scalekit.v1.users.UpdateUserRequest\x1a%.scalekit.v1.users.UpdateUserResponse\"\xba\x04\x92\x41\x90\x04\n\x05Users\x12\x17Update user information\x1a\xe1\x02Modifies user account information including profile details, metadata, and external ID. Use this endpoint to update a user\'s personal information, contact details, or custom metadata. You can update the user\'s profile, phone number, and metadata fields. Note that fields like user ID, email address, environment ID, and creation time cannot be modified.J\x89\x01\n\x03\x32\x30\x30\x12\x81\x01\nTUser updated successfully. Returns the modified user object with updated timestamps.\x12)\n\'\x1a%.scalekit.v1.users.UpdateUserResponse\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x1a\x32\x12/api/v1/users/{id}:\x04user\x12\xfd\x03\n\nDeleteUser\x12$.scalekit.v1.users.DeleteUserRequest\x1a\x16.google.protobuf.Empty\"\xb0\x03\x92\x41\x8c\x03\n\x05Users\x12\x17\x44\x65lete user permanently\x1a\xb0\x02Permanently removes a user from your environment and deletes all associated data. Use this endpoint when you need to completely remove a user account. This action deletes the user\'s profile, memberships, and all related data across all organizations. This operation cannot be undone, so use with caution.J7\n\x03\x32\x30\x30\x12\x30\n.User successfully deleted. No content returned\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x14*\x12/api/v1/users/{id}\x12\xc4\x05\n\x10\x43reateMembership\x12*.scalekit.v1.users.CreateMembershipRequest\x1a+.scalekit.v1.users.CreateMembershipResponse\"\xd6\x04\x92\x41\xde\x03\n\x05Users\x12!Add existing user to organization\x1a\x95\x02\x41\x64\x64s an existing user to an organization and assigns them specific roles and permissions. Use this endpoint when you want to grant an existing user access to a particular organization. You can specify roles, metadata, and other membership details during the invitation process.J\x99\x01\n\x03\x32\x30\x31\x12\x91\x01\n^User successfully added to the organization. Returns details of the updated membership details\x12/\n-\x1a+.scalekit.v1.users.CreateMembershipResponse\x82\xb5\x18\x1e\n\x1aorganizations_users_invite\x18T\x82\xd3\xe4\x93\x02L\">/api/v1/memberships/organizations/{organization_id}/users/{id}:\nmembership\x12\x99\x04\n\x10\x44\x65leteMembership\x12*.scalekit.v1.users.DeleteMembershipRequest\x1a\x16.google.protobuf.Empty\"\xc0\x03\x92\x41\xd4\x02\n\x05Users\x12\'Delete organization membership for user\x1a\xdc\x01Removes a user from an organization by user ID or external ID. If the user has no memberships left and cascade is true, the user is also deleted. This action is irreversible and may also remove related group memberships.JC\n\x03\x32\x30\x30\x12<\n:User successfully marked for deletion. No content returned\x82\xb5\x18\x1e\n\x1aorganizations_users_remove\x18T\x82\xd3\xe4\x93\x02@*>/api/v1/memberships/organizations/{organization_id}/users/{id}\x12\x9e\x04\n\x10UpdateMembership\x12*.scalekit.v1.users.UpdateMembershipRequest\x1a+.scalekit.v1.users.UpdateMembershipResponse\"\xb0\x03\x92\x41\xb3\x02\n\x05Users\x12\'Update organization membership for user\x1a\x83\x01Updates a user\'s membership details within an organization by user ID or external ID. You can update roles and membership metadata.J{\n\x03\x32\x30\x30\x12t\nAMembership updated successfully. Returns the updated user object.\x12/\n-\x1a+.scalekit.v1.users.UpdateMembershipResponse\x82\xb5\x18#\n\x1forganizations_users_role_update\x18T\x82\xd3\xe4\x93\x02L2>/api/v1/memberships/organizations/{organization_id}/users/{id}:\nmembership\x12\xc8\x06\n\x17\x43reateUserAndMembership\x12\x31.scalekit.v1.users.CreateUserAndMembershipRequest\x1a\x32.scalekit.v1.users.CreateUserAndMembershipResponse\"\xc5\x05\x92\x41\xe4\x04\n\x05Users\x12\x1f\x43reate new user in organization\x1a\x83\x03\x43reates a new user account and immediately adds them to the specified organization. Use this endpoint when you want to create a user and grant them access to an organization in a single operation. You can provide user profile information, assign roles, and configure membership metadata. The user receives an activation email unless this feature is disabled in the organization settings.J\xb3\x01\n\x03\x32\x30\x31\x12\xab\x01\nqUser created successfully. Returns the created user object, including system-generated identifiers and timestamps\x12\x36\n4\x1a\x32.scalekit.v1.users.CreateUserAndMembershipResponse\x82\xb5\x18\x1e\n\x1aorganizations_users_invite\x18T\x82\xd3\xe4\x93\x02\x35\"-/api/v1/organizations/{organization_id}/users:\x04user\x12\xfd\x04\n\x15ListOrganizationUsers\x12/.scalekit.v1.users.ListOrganizationUsersRequest\x1a\x30.scalekit.v1.users.ListOrganizationUsersResponse\"\x80\x04\x92\x41\xa7\x03\n\x05Users\x12\x17List organization users\x1a\x87\x02Retrieves a paginated list of all users who are members of the specified organization. Use this endpoint to view all users with access to a particular organization, including their roles, metadata, and membership details. Supports pagination for large user lists.J{\n\x03\x32\x30\x30\x12t\n\r\372\002\nmembership\340A\002\272H\003\310\001\001' _globals['_CREATEMEMBERSHIPREQUEST'].fields_by_name['id']._loaded_options = None _globals['_CREATEMEMBERSHIPREQUEST'].fields_by_name['id']._serialized_options = b'\222A]2CSystem-generated user ID. Must start with \'usr_\' (19-25 characters)J\026\"usr_1234abcd5678efgh\"\272H\014r\n\020\023\030\031:\004usr_' _globals['_CREATEMEMBERSHIPREQUEST'].fields_by_name['external_id']._loaded_options = None @@ -123,9 +123,9 @@ _globals['_LISTUSERSRESPONSE'].fields_by_name['prev_page_token']._loaded_options = None _globals['_LISTUSERSRESPONSE'].fields_by_name['prev_page_token']._serialized_options = b'\222A\211\0012SToken for retrieving the previous page of results. Empty if this is the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"' _globals['_SEARCHUSERSREQUEST'].fields_by_name['query']._loaded_options = None - _globals['_SEARCHUSERSREQUEST'].fields_by_name['query']._serialized_options = b'\222A\203\0012oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\020john@example.com\272H\tr\004\020\003\030d\310\001\001' + _globals['_SEARCHUSERSREQUEST'].fields_by_name['query']._serialized_options = b'\222A\210\0012oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\020john@example.comxd\200\001\003\272H\tr\004\020\003\030d\310\001\001' _globals['_SEARCHUSERSREQUEST'].fields_by_name['page_size']._loaded_options = None - _globals['_SEARCHUSERSREQUEST'].fields_by_name['page_size']._serialized_options = b'\222AQ2KMaximum number of users to return per page. Value must be between 1 and 30.J\00230\272H\004*\002\030\036' + _globals['_SEARCHUSERSREQUEST'].fields_by_name['page_size']._serialized_options = b'\222Ac2KMaximum number of users to return per page. Value must be between 1 and 30.J\00230Y\000\000\000\000\000\000>@i\000\000\000\000\000\000\360?\272H\004*\002\030\036' _globals['_SEARCHUSERSREQUEST'].fields_by_name['page_token']._loaded_options = None _globals['_SEARCHUSERSREQUEST'].fields_by_name['page_token']._serialized_options = b'\222A\201\0012aToken from a previous response for pagination. Provide this to retrieve the next page of results.J\034eyJwYWdlIjoyLCJsaW1pdCI6MzB9' _globals['_SEARCHUSERSRESPONSE'].fields_by_name['next_page_token']._loaded_options = None @@ -165,9 +165,9 @@ _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['organization_id']._loaded_options = None _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['organization_id']._serialized_options = b'\222A\205\0012kUnique identifier of the organization to search within. Must start with \'org_\' and be 1-32 characters long.J\026\"org_1234abcd5678efgh\"\272H\017r\n\020\001\030 :\004org_\310\001\001' _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['query']._loaded_options = None - _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['query']._serialized_options = b'\222A\203\0012oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\020john@example.com\272H\tr\004\020\003\030d\310\001\001' + _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['query']._serialized_options = b'\222A\210\0012oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\020john@example.comxd\200\001\003\272H\tr\004\020\003\030d\310\001\001' _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['page_size']._loaded_options = None - _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['page_size']._serialized_options = b'\222AQ2KMaximum number of users to return per page. Value must be between 1 and 30.J\00230\272H\004*\002\030\036' + _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['page_size']._serialized_options = b'\222Ac2KMaximum number of users to return per page. Value must be between 1 and 30.J\00230Y\000\000\000\000\000\000>@i\000\000\000\000\000\000\360?\272H\004*\002\030\036' _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['page_token']._loaded_options = None _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['page_token']._serialized_options = b'\222A\201\0012aToken from a previous response for pagination. Provide this to retrieve the next page of results.J\034eyJwYWdlIjoyLCJsaW1pdCI6MzB9' _globals['_SEARCHORGANIZATIONUSERSRESPONSE'].fields_by_name['next_page_token']._loaded_options = None @@ -315,15 +315,15 @@ _globals['_USERSERVICE'].methods_by_name['GetUser']._loaded_options = None _globals['_USERSERVICE'].methods_by_name['GetUser']._serialized_options = b'\222A\301\002\n\005Users\022\010Get user\032\216\001Retrieves all details for a user by system-generated user ID or external ID. The response includes organization memberships and user metadata.J\234\001\n\003200\022\224\001\njUser details retrieved successfully. Returns full user object with system-generated fields and timestamps.\022&\n$\032\".scalekit.v1.users.GetUserResponse\202\265\030\002\030T\202\323\344\223\002\024\022\022/api/v1/users/{id}' _globals['_USERSERVICE'].methods_by_name['GetCurrentUser']._loaded_options = None - _globals['_USERSERVICE'].methods_by_name['GetCurrentUser']._serialized_options = b'\222A\237\002\n\005Users\022\026Get authenticated user\032\236\001Retrieves details for the currently authenticated user. Returns the same user object as GetUser but uses the authenticated user\'s ID from the session context.J]\n\003200\022V\n,Current user details retrieved successfully.\022&\n$\032\".scalekit.v1.users.GetUserResponse\202\265\030\002\030\020\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\024\022\022/api/v1/users:this' + _globals['_USERSERVICE'].methods_by_name['GetCurrentUser']._serialized_options = b'\222A\246\002\n\005Users\022\026Get authenticated user\032\236\001Retrieves details for the currently authenticated user. Returns the same user object as GetUser but uses the authenticated user\'s ID from the session context.Jd\n\003200\022]\n,Current user details retrieved successfully.\022-\n+\032).scalekit.v1.users.GetCurrentUserResponse\202\265\030\002\030\030\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002(\022\022/api/v1/users:thisZ\022\022\020/api/v1/users/me' _globals['_USERSERVICE'].methods_by_name['GetSupportHash']._loaded_options = None - _globals['_USERSERVICE'].methods_by_name['GetSupportHash']._serialized_options = b'\222A\337\001\n\005Users\022\020Get support hash\032fRetrieves the support email hash for the current logged in user, used for the Scalekit support system.J\\\n\003200\022U\n$Support hash retrieved successfully.\022-\n+\032).scalekit.v1.users.GetSupportHashResponse\202\265\030\002\030P\202\323\344\223\002\034\022\032/api/v1/users/support-hash' + _globals['_USERSERVICE'].methods_by_name['GetSupportHash']._serialized_options = b'\222A\337\001\n\005Users\022\020Get support hash\032fRetrieves the support email hash for the current logged in user, used for the Scalekit support system.J\\\n\003200\022U\n$Support hash retrieved successfully.\022-\n+\032).scalekit.v1.users.GetSupportHashResponse\202\265\030\002\030P\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\034\022\032/api/v1/users/support-hash' _globals['_USERSERVICE'].methods_by_name['ListUsers']._loaded_options = None _globals['_USERSERVICE'].methods_by_name['ListUsers']._serialized_options = b'\222A\250\003\n\005Users\022\035List all users in environment\032\274\002Retrieves a paginated list of all users across your entire environment. Use this endpoint to view all users regardless of their organization memberships. This is useful for administrative purposes, user audits, or when you need to see all users in your Scalekit environment. Supports pagination for large user bases.JA\n\003200\022:\n\016List of users.\022(\n&\032$.scalekit.v1.users.ListUsersResponse\202\265\030\002\030D\202\323\344\223\002\017\022\r/api/v1/users' _globals['_USERSERVICE'].methods_by_name['SearchUsers']._loaded_options = None - _globals['_USERSERVICE'].methods_by_name['SearchUsers']._serialized_options = b'\222A\267\002\n\005Users\022\014Search users\032\205\001Searches for users in the environment by email, user ID, or external ID. Returns all users that match the query. Supports pagination.J\227\001\n\003200\022\217\001\naReturns a list of matching users and a page token for pagination if there are additional results.\022*\n(\032&.scalekit.v1.users.SearchUsersResponse\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\026\022\024/api/v1/users:search' + _globals['_USERSERVICE'].methods_by_name['SearchUsers']._serialized_options = b'\222A\263\004\n\005Users\022\014Search users\032\257\002Searches for users across the entire environment by email address, user ID, or external ID. The query must be at least 3 characters and is case-insensitive. Returns a paginated list of matching users with up to 30 results per page. Use the next_page_token from the response to retrieve subsequent pages.J\214\001\n\003200\022\204\001\nVMatching users returned; includes pagination cursors for navigating large result sets.\022*\n(\032&.scalekit.v1.users.SearchUsersResponseJ[\n\003400\022T\nRBad Request - query must be at least 3 characters and no more than 100 characters.\202\265\030\002\030D\202\323\344\223\002\026\022\024/api/v1/users:search' _globals['_USERSERVICE'].methods_by_name['SearchOrganizationUsers']._loaded_options = None - _globals['_USERSERVICE'].methods_by_name['SearchOrganizationUsers']._serialized_options = b'\222A\210\003\n\005Users\022\031Search organization users\032\245\001Searches for users within a specific organization by email, user ID, or external ID. Returns all users in the organization that match the query. Supports pagination.J\273\001\n\003200\022\263\001\nyReturns a list of matching users within the organization and a page token for pagination if there are additional results.\0226\n4\0322.scalekit.v1.users.SearchOrganizationUsersResponse\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\0026\0224/api/v1/organizations/{organization_id}/users:search' + _globals['_USERSERVICE'].methods_by_name['SearchOrganizationUsers']._serialized_options = b'\222A\207\006\n\005Users\022\031Search organization users\032\343\002Searches for users within a specific organization by email address, user ID, or external ID. The query must be at least 3 characters and is case-insensitive. Scopes results strictly to the given organization. Returns a paginated list of matching users with up to 30 results per page. Use the next_page_token from the response to retrieve subsequent pages.J\260\001\n\003200\022\250\001\nnMatching users within the organization returned; includes pagination cursors for navigating large result sets.\0226\n4\0322.scalekit.v1.users.SearchOrganizationUsersResponseJ\233\001\n\003400\022\223\001\n\220\001Bad Request - query must be at least 3 characters and no more than 100 characters, and organization_id must be a valid org_ prefixed identifier.J,\n\003404\022%\n#Not Found - organization not found.\202\265\030\002\030D\202\323\344\223\0026\0224/api/v1/organizations/{organization_id}/users:search' _globals['_USERSERVICE'].methods_by_name['UpdateUser']._loaded_options = None _globals['_USERSERVICE'].methods_by_name['UpdateUser']._serialized_options = b'\222A\220\004\n\005Users\022\027Update user information\032\341\002Modifies user account information including profile details, metadata, and external ID. Use this endpoint to update a user\'s personal information, contact details, or custom metadata. You can update the user\'s profile, phone number, and metadata fields. Note that fields like user ID, email address, environment ID, and creation time cannot be modified.J\211\001\n\003200\022\201\001\nTUser updated successfully. Returns the modified user object with updated timestamps.\022)\n\'\032%.scalekit.v1.users.UpdateUserResponse\202\265\030\002\030T\202\323\344\223\002\0322\022/api/v1/users/{id}:\004user' _globals['_USERSERVICE'].methods_by_name['DeleteUser']._loaded_options = None @@ -339,7 +339,7 @@ _globals['_USERSERVICE'].methods_by_name['ListOrganizationUsers']._loaded_options = None _globals['_USERSERVICE'].methods_by_name['ListOrganizationUsers']._serialized_options = b'\222A\247\003\n\005Users\022\027List organization users\032\207\002Retrieves a paginated list of all users who are members of the specified organization. Use this endpoint to view all users with access to a particular organization, including their roles, metadata, and membership details. Supports pagination for large user lists.J{\n\003200\022t\n\n\x05items\x18\x08 \x03(\x0b\x32(.scalekit.v1.workspaces.SubscriptionItemR\x05items\"\xe1\x01\n\x10SubscriptionItem\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x19\n\x08price_id\x18\x02 \x01(\tR\x07priceId\x12\x1a\n\x08quantity\x18\x03 \x01(\x03R\x08quantity\x12\x45\n\x07product\x18\x04 \x01(\x0b\x32+.scalekit.v1.workspaces.SubscriptionProductR\x07product\x12?\n\x05price\x18\x05 \x01(\x0b\x32).scalekit.v1.workspaces.SubscriptionPriceR\x05price\"s\n\x13SubscriptionProduct\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x16\n\x06\x61\x63tive\x18\x04 \x01(\x08R\x06\x61\x63tive\"\xba\x02\n\x11SubscriptionPrice\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\x12\x12\n\x04type\x18\x03 \x01(\tR\x04type\x12\x1a\n\x08interval\x18\x04 \x01(\tR\x08interval\x12%\n\x0e\x62illing_scheme\x18\x05 \x01(\tR\rbillingScheme\x12\x1d\n\nusage_type\x18\x06 \x01(\tR\tusageType\x12\x37\n\x05tiers\x18\x07 \x03(\x0b\x32!.scalekit.v1.workspaces.PriceTierR\x05tiers\x12\x1f\n\x0btotal_usage\x18\x08 \x01(\x03R\ntotalUsage\x12-\n\x12\x61ggregation_method\x18\t \x01(\tR\x11\x61ggregationMethod\"8\n\tPriceTier\x12\x13\n\x05up_to\x18\x01 \x01(\x03R\x04upTo\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\"\x97\x03\n\x0e\x43urrentInvoice\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\x12=\n\x06status\x18\x04 \x01(\x0e\x32%.scalekit.v1.workspaces.InvoiceStatusR\x06status\x12\x35\n\x08\x64ue_date\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x64ueDate\x12;\n\x0bissued_date\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nissuedDate\x12H\n\x12\x62illing_start_date\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x10\x62illingStartDate\x12\x44\n\x10\x62illing_end_date\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0e\x62illingEndDate\"\x84\x02\n\x0bLastInvoice\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\x12=\n\x06status\x18\x04 \x01(\x0e\x32%.scalekit.v1.workspaces.InvoiceStatusR\x06status\x12\x35\n\x08\x64ue_date\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x64ueDate\x12;\n\x0bissued_date\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nissuedDate\"\xe6\x03\n\rPaymentMethod\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x37\n\x04type\x18\x02 \x01(\x0e\x32#.scalekit.v1.workspaces.PaymentTypeR\x04type\x12%\n\x0e\x61\x63\x63ount_number\x18\x03 \x01(\tR\raccountNumber\x12!\n\x0c\x61\x63\x63ount_type\x18\x04 \x01(\tR\x0b\x61\x63\x63ountType\x12\x43\n\x06status\x18\x05 \x01(\x0e\x32+.scalekit.v1.workspaces.PaymentMethodStatusR\x06status\x12!\n\x0c\x61\x63\x63ount_name\x18\x06 \x01(\tR\x0b\x61\x63\x63ountName\x12\x99\x01\n\x0cpayment_info\x18\x07 \x03(\x0b\x32\x36.scalekit.v1.workspaces.PaymentMethod.PaymentInfoEntryB>\xbaH;\x9a\x01\x38\x10\x05\",r*R\x05\x62randR\x05last4R\texp_monthR\x08\x65xp_yearR\x05\x65mail*\x06r\x04\x10\x01\x18@R\x0bpaymentInfo\x1a>\n\x10PaymentInfoEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xcf\x01\n\x12\x42illingContactInfo\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n\x05\x65mail\x18\x02 \x01(\tR\x05\x65mail\x12\x14\n\x05line1\x18\x03 \x01(\tR\x05line1\x12\x14\n\x05line2\x18\x04 \x01(\tR\x05line2\x12\x12\n\x04\x63ity\x18\x05 \x01(\tR\x04\x63ity\x12\x14\n\x05state\x18\x06 \x01(\tR\x05state\x12\x1f\n\x0bpostal_code\x18\x07 \x01(\tR\npostalCode\x12\x18\n\x07\x63ountry\x18\x08 \x01(\tR\x07\x63ountry\"\x99\x01\n\x05\x41\x64\x64on\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x1a\n\x08\x66\x65\x61tures\x18\x04 \x03(\tR\x08\x66\x65\x61tures\x12\x18\n\x07\x65nabled\x18\x05 \x01(\x08R\x07\x65nabled\x12\x14\n\x05price\x18\x06 \x01(\x01R\x05price\x12\x1a\n\x08\x63urrency\x18\x07 \x01(\tR\x08\x63urrencyJ\x04\x08\x03\x10\x04\"\x18\n\x16GetProductUsageRequest\"\x9a\x01\n\x17GetProductUsageResponse\x12@\n\x08products\x18\x01 \x03(\x0b\x32$.scalekit.v1.workspaces.ProductUsageR\x08products\x12!\n\x0ctotal_amount\x18\x02 \x01(\x01R\x0btotalAmount\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\"\xba\x02\n\x0cProductUsage\x12\x1d\n\nproduct_id\x18\x01 \x01(\tR\tproductId\x12!\n\x0cproduct_name\x18\x02 \x01(\tR\x0bproductName\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x37\n\x05tiers\x18\x04 \x03(\x0b\x32!.scalekit.v1.workspaces.UsageTierR\x05tiers\x12!\n\x0ctotal_amount\x18\x05 \x01(\x01R\x0btotalAmount\x12\x1f\n\x0btotal_count\x18\x06 \x01(\x01R\ntotalCount\x12\x1a\n\x08\x63urrency\x18\x07 \x01(\tR\x08\x63urrency\x12-\n\x12\x61ggregation_method\x18\x08 \x01(\tR\x11\x61ggregationMethod\"\xf4\x01\n\tUsageTier\x12\x1b\n\ttier_name\x18\x01 \x01(\tR\x08tierName\x12#\n\rcurrent_count\x18\x02 \x01(\x03R\x0c\x63urrentCount\x12\x32\n\x15total_available_count\x18\x03 \x01(\x03R\x13totalAvailableCount\x12\x33\n\x16price_for_current_tier\x18\x04 \x01(\x01R\x13priceForCurrentTier\x12\x1a\n\x08\x63urrency\x18\x05 \x01(\tR\x08\x63urrency\x12 \n\x0cis_free_tier\x18\x06 \x01(\x08R\nisFreeTier\"\x1a\n\x18GetProductCatalogRequest\"]\n\x19GetProductCatalogResponse\x12@\n\x07\x63\x61talog\x18\x01 \x01(\x0b\x32&.scalekit.v1.workspaces.ProductCatalogR\x07\x63\x61talog\"X\n\x0eProductCatalog\x12\x46\n\x08products\x18\x01 \x03(\x0b\x32*.scalekit.v1.workspaces.ProductCatalogItemR\x08products\"\xb7\x01\n\x12ProductCatalogItem\x12@\n\x07product\x18\x01 \x01(\x0b\x32&.scalekit.v1.workspaces.CatalogProductR\x07product\x12<\n\x06prices\x18\x02 \x03(\x0b\x32$.scalekit.v1.workspaces.CatalogPriceR\x06prices\x12!\n\x0c\x62illing_type\x18\x03 \x01(\tR\x0b\x62illingType\"\xc2\x02\n\x0e\x43\x61talogProduct\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x16\n\x06\x61\x63tive\x18\x04 \x01(\x08R\x06\x61\x63tive\x12k\n\x08metadata\x18\x05 \x03(\x0b\x32\x34.scalekit.v1.workspaces.CatalogProduct.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12(\n\x10\x64\x65\x66\x61ult_price_id\x18\x06 \x01(\tR\x0e\x64\x65\x66\x61ultPriceId\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x81\x02\n\x0c\x43\x61talogPrice\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\x12\x12\n\x04type\x18\x04 \x01(\tR\x04type\x12\x1a\n\x08interval\x18\x05 \x01(\tR\x08interval\x12%\n\x0e\x62illing_scheme\x18\x06 \x01(\tR\rbillingScheme\x12\x1d\n\nusage_type\x18\x07 \x01(\tR\tusageType\x12\x37\n\x05tiers\x18\x08 \x03(\x0b\x32!.scalekit.v1.workspaces.PriceTierR\x05tiers\"\xdb\x01\n\x16\x41\x64\x64SubscriptionRequest\x12!\n\x0cproduct_name\x18\x01 \x01(\tR\x0bproductName\x12\x1d\n\nproduct_id\x18\x02 \x01(\tR\tproductId:\x7f\xbaH|\x1az\n\x12product_name_or_id\x12\x32\x65ither product_id or product_name must be provided\x1a\x30this.product_id != \'\' || this.product_name != \'\'\"}\n\x17\x41\x64\x64SubscriptionResponse\x12\'\n\x0fsubscription_id\x18\x01 \x01(\tR\x0esubscriptionId\x12\x1d\n\nproduct_id\x18\x02 \x01(\tR\tproductId\x12\x1a\n\x08quantity\x18\x03 \x01(\x03R\x08quantity\"\xe5\x02\n\x1c\x43reateCheckoutSessionRequest\x12?\n\x04mode\x18\x01 \x01(\x0e\x32+.scalekit.v1.workspaces.CheckoutSessionModeR\x04mode\x12\"\n\nreturn_url\x18\x02 \x01(\tH\x00R\treturnUrl\x88\x01\x01\x12$\n\x0bsuccess_url\x18\x03 \x01(\tH\x01R\nsuccessUrl\x88\x01\x01\x12\x37\n\x07ui_mode\x18\x04 \x01(\x0e\x32\x1e.scalekit.v1.workspaces.UiModeR\x06uiMode\x12\x62\n\x16redirect_on_completion\x18\x05 \x01(\x0e\x32,.scalekit.v1.workspaces.RedirectOnCompletionR\x14redirectOnCompletionB\r\n\x0b_return_urlB\x0e\n\x0c_success_url\"s\n\x1d\x43reateCheckoutSessionResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12#\n\rclient_secret\x18\x02 \x01(\tR\x0c\x63lientSecret\x12\x15\n\x03url\x18\x03 \x01(\tH\x00R\x03url\x88\x01\x01\x42\x06\n\x04_url\"Z\n\x1dUpdateWorkspaceContextRequest\x12\x39\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\x06\xbaH\x03\xc8\x01\x01R\x07\x63ontext\"S\n\x1eUpdateWorkspaceContextResponse\x12\x31\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext*\xaf\x01\n\x19\x42illingSubscriptionStatus\x12+\n\'BILLING_SUBSCRIPTION_STATUS_UNSPECIFIED\x10\x00\x12\x1f\n\x1b\x42ILLING_SUBSCRIPTION_ACTIVE\x10\x01\x12!\n\x1d\x42ILLING_SUBSCRIPTION_CANCELED\x10\x02\x12!\n\x1d\x42ILLING_SUBSCRIPTION_PAST_DUE\x10\x03*y\n\rInvoiceStatus\x12\x1e\n\x1aINVOICE_STATUS_UNSPECIFIED\x10\x00\x12\x10\n\x0cINVOICE_PAID\x10\x01\x12\x0f\n\x0bINVOICE_DUE\x10\x02\x12\x13\n\x0fINVOICE_OVERDUE\x10\x03\x12\x10\n\x0cINVOICE_VOID\x10\x04*j\n\x0bPaymentType\x12\x1c\n\x18PAYMENT_TYPE_UNSPECIFIED\x10\x00\x12\x08\n\x04\x43\x41RD\x10\x01\x12\x10\n\x0c\x42\x41NK_ACCOUNT\x10\x02\x12\x0b\n\x07OFFLINE\x10\x03\x12\x08\n\x04LINK\x10\x04\x12\n\n\x06PAYPAL\x10\x05*\x8e\x01\n\x13PaymentMethodStatus\x12%\n!PAYMENT_METHOD_STATUS_UNSPECIFIED\x10\x00\x12\x19\n\x15PAYMENT_METHOD_ACTIVE\x10\x01\x12\x1a\n\x16PAYMENT_METHOD_EXPIRED\x10\x02\x12\x19\n\x15PAYMENT_METHOD_FAILED\x10\x03*f\n\x14RedirectOnCompletion\x12&\n\"REDIRECT_ON_COMPLETION_UNSPECIFIED\x10\x00\x12\t\n\x05never\x10\x01\x12\n\n\x06\x61lways\x10\x02\x12\x0f\n\x0bif_required\x10\x03*G\n\x06UiMode\x12\x17\n\x13UI_MODE_UNSPECIFIED\x10\x00\x12\x0c\n\x08\x65mbedded\x10\x01\x12\n\n\x06hosted\x10\x02\x12\n\n\x06\x63ustom\x10\x03*f\n\x13\x43heckoutSessionMode\x12%\n!CHECKOUT_SESSION_MODE_UNSPECIFIED\x10\x00\x12\t\n\x05setup\x10\x01\x12\x10\n\x0csubscription\x10\x02\x12\x0b\n\x07payment\x10\x03\x32\xc9\x15\n\x10WorkspaceService\x12\x9b\x01\n\x0f\x43reateWorkspace\x12..scalekit.v1.workspaces.CreateWorkspaceRequest\x1a/.scalekit.v1.workspaces.CreateWorkspaceResponse\"\'\x82\xb5\x18\x02\x18\x01\x82\xd3\xe4\x93\x02\x1b\"\x0e/api/v1/signup:\tworkspace\x12\x90\x01\n\x0cGetWorkspace\x12+.scalekit.v1.workspaces.GetWorkspaceRequest\x1a,.scalekit.v1.workspaces.GetWorkspaceResponse\"%\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x19\x12\x17/api/v1/workspaces/{id}\x12\x9e\x01\n\x13GetCurrentWorkspace\x12\x32.scalekit.v1.workspaces.GetCurrentWorkspaceRequest\x1a,.scalekit.v1.workspaces.GetWorkspaceResponse\"%\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x19\x12\x17/api/v1/workspaces:this\x12\xa4\x01\n\x0fUpdateWorkspace\x12..scalekit.v1.workspaces.UpdateWorkspaceRequest\x1a/.scalekit.v1.workspaces.UpdateWorkspaceResponse\"0\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02$2\x17/api/v1/workspaces/{id}:\tworkspace\x12\x90\x01\n\x10OnboardWorkspace\x12/.scalekit.v1.workspaces.OnboardWorkspaceRequest\x1a\x16.google.protobuf.Empty\"3\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\'2\x1a/api/v1/workspaces:onboard:\tworkspace\x12\xb2\x01\n\x16UpdateCurrentWorkspace\x12\x35.scalekit.v1.workspaces.UpdateCurrentWorkspaceRequest\x1a/.scalekit.v1.workspaces.UpdateWorkspaceResponse\"0\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02$2\x17/api/v1/workspaces:this:\tworkspace\x12\xcd\x01\n\x19GetWorkspaceSubscriptions\x12\x38.scalekit.v1.workspaces.GetWorkspaceSubscriptionsRequest\x1a\x39.scalekit.v1.workspaces.GetWorkspaceSubscriptionsResponse\";\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02/\x12-/api/v1/workspaces/{id}/billing/subscriptions\x12\xca\x01\n\x18GetWorkspacePricingTable\x12\x37.scalekit.v1.workspaces.GetWorkspacePricingTableRequest\x1a\x38.scalekit.v1.workspaces.GetWorkspacePricingTableResponse\";\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02/\x12-/api/v1/workspaces/{id}/billing/pricing-table\x12\xc3\x01\n\x10GetBillingPortal\x12/.scalekit.v1.workspaces.GetBillingPortalRequest\x1a\x30.scalekit.v1.workspaces.GetBillingPortalResponse\"L\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\x12//api/v1/workspaces:this/billing/customer-portal\x12\xb2\x01\n\x0eGetBillingInfo\x12-.scalekit.v1.workspaces.GetBillingInfoRequest\x1a..scalekit.v1.workspaces.GetBillingInfoResponse\"A\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02&\x12$/api/v1/workspaces:this/billing:info\x12\xbe\x01\n\x0fGetProductUsage\x12..scalekit.v1.workspaces.GetProductUsageRequest\x1a/.scalekit.v1.workspaces.GetProductUsageResponse\"J\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02/\x12-/api/v1/workspaces:this/billing:product-usage\x12\xb5\x01\n\x11GetProductCatalog\x12\x30.scalekit.v1.workspaces.GetProductCatalogRequest\x1a\x31.scalekit.v1.workspaces.GetProductCatalogResponse\";\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02 \x12\x1e/api/v1/billing/productcatalog\x12\xc5\x01\n\x0f\x41\x64\x64Subscription\x12..scalekit.v1.workspaces.AddSubscriptionRequest\x1a/.scalekit.v1.workspaces.AddSubscriptionResponse\"Q\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x36\"1/api/v1/workspaces:this/billing/subscriptions:add:\x01*\x12\xd7\x01\n\x15\x43reateCheckoutSession\x12\x34.scalekit.v1.workspaces.CreateCheckoutSessionRequest\x1a\x35.scalekit.v1.workspaces.CreateCheckoutSessionResponse\"Q\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x36\"1/api/v1/workspaces:this/billing/checkout_sessions:\x01*\x12\xc0\x01\n\x16UpdateWorkspaceContext\x12\x35.scalekit.v1.workspaces.UpdateWorkspaceContextRequest\x1a\x36.scalekit.v1.workspaces.UpdateWorkspaceContextResponse\"7\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02+\" /api/v1/workspaces:this/contexts:\x07\x63ontextB6Z4github.com/scalekit-inc/scalekit/pkg/grpc/workspacesb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'scalekit/v1/workspaces/workspaces.proto\x12\x16scalekit.v1.workspaces\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/domains/domains.proto\x1a!scalekit/v1/options/options.proto\"\xa6\x01\n\x15WorkspaceExtendedInfo\x12\'\n\x0fpayment_overdue\x18\x01 \x01(\x08R\x0epaymentOverdue\x12\x34\n\x16payment_method_present\x18\x02 \x01(\x08R\x14paymentMethodPresent\x12.\n\x13\x66ree_quota_exceeded\x18\x03 \x01(\x08R\x11\x66reeQuotaExceeded\"\xcc\x05\n\tWorkspace\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12;\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12;\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nupdateTime\x12-\n\x0c\x64isplay_name\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12@\n\x0bregion_code\x18\x06 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeR\nregionCode\x12R\n\rextended_info\x18\x07 \x01(\x0b\x32-.scalekit.v1.workspaces.WorkspaceExtendedInfoR\x0c\x65xtendedInfo\x12.\n\x13\x62illing_customer_id\x18\x08 \x01(\tR\x11\x62illingCustomerId\x12\x36\n\x17\x62illing_subscription_id\x18\t \x01(\tR\x15\x62illingSubscriptionId\x12]\n\x0b\x61uth_domain\x18\n \x01(\tB<\x92\x41\x36\x32 Auth Domain of current workspaceJ\x12\"auth.example.com\"\xe0\x41\x03R\nauthDomain\x12\x98\x01\n\ndeployment\x18\x0b \x01(\tBx\x92\x41r2hSystem-generated deployment environment (staging or prod). Read-only; clients should not set this field.J\x06\"prod\"\xe0\x41\x03R\ndeployment\"\xa0\x01\n\x0f\x43reateWorkspace\x12V\n\x05\x65mail\x18\x01 \x01(\tB@\xbaH=\xba\x01:\n\x0bvalid_email\x12\x1b\x65mail must be a valid email\x1a\x0ethis.isEmail()R\x05\x65mail\x12)\n\x07\x63ompany\x18\x02 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x02H\x00R\x07\x63ompany\x88\x01\x01\x42\n\n\x08_company\"@\n\x0fUpdateWorkspace\x12-\n\x0c\x64isplay_name\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x0b\x64isplayName\"\x9c\x03\n\x10OnboardWorkspace\x12@\n\x16workspace_display_name\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x02R\x14workspaceDisplayName\x12\x32\n\x0fuser_given_name\x18\x02 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x02R\ruserGivenName\x12(\n\x10user_family_name\x18\x03 \x01(\tR\x0euserFamilyName\x12\xaa\x01\n\x13\x61uthentication_mode\x18\x04 \x01(\x0e\x32\'.scalekit.v1.commons.AuthenticationModeBP\x92\x41M2KThe authentication mode for the environment. The default is FULL_STACK_AUTHR\x12\x61uthenticationMode\x12;\n\x1a\x65nable_allowed_domain_join\x18\x05 \x01(\x08R\x17\x65nableAllowedDomainJoin\"g\n\x16\x43reateWorkspaceRequest\x12M\n\tworkspace\x18\x01 \x01(\x0b\x32\'.scalekit.v1.workspaces.CreateWorkspaceB\x06\xbaH\x03\xc8\x01\x01R\tworkspace\"n\n\x17\x43reateWorkspaceResponse\x12?\n\tworkspace\x18\x01 \x01(\x0b\x32!.scalekit.v1.workspaces.WorkspaceR\tworkspace\x12\x12\n\x04link\x18\x02 \x01(\tR\x04link\"\x87\x01\n\x16UpdateWorkspaceRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03wksR\x02id\x12M\n\tworkspace\x18\x02 \x01(\x0b\x32\'.scalekit.v1.workspaces.UpdateWorkspaceB\x06\xbaH\x03\xc8\x01\x01R\tworkspace\"i\n\x17OnboardWorkspaceRequest\x12N\n\tworkspace\x18\x02 \x01(\x0b\x32(.scalekit.v1.workspaces.OnboardWorkspaceB\x06\xbaH\x03\xc8\x01\x01R\tworkspace\"n\n\x1dUpdateCurrentWorkspaceRequest\x12M\n\tworkspace\x18\x01 \x01(\x0b\x32\'.scalekit.v1.workspaces.UpdateWorkspaceB\x06\xbaH\x03\xc8\x01\x01R\tworkspace\"Z\n\x17UpdateWorkspaceResponse\x12?\n\tworkspace\x18\x01 \x01(\x0b\x32!.scalekit.v1.workspaces.WorkspaceR\tworkspace\"5\n\x13GetWorkspaceRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03wksR\x02id\"\x1c\n\x1aGetCurrentWorkspaceRequest\"\x8f\x01\n\x14GetWorkspaceResponse\x12?\n\tworkspace\x18\x01 \x01(\x0b\x32!.scalekit.v1.workspaces.WorkspaceR\tworkspace\x12\x36\n\x07\x63ontext\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructB\x03\xe0\x41\x03R\x07\x63ontext\"d\n\x17GetBillingPortalRequest\x12\x19\n\x02id\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x02id\x12 \n\tflow_type\x18\x02 \x01(\tH\x00R\x08\x66lowType\x88\x01\x01\x42\x0c\n\n_flow_type\"<\n\x18GetBillingPortalResponse\x12\x10\n\x03url\x18\x01 \x01(\tR\x03url\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\"A\n\x1fGetWorkspacePricingTableRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03wksR\x02id\"\x82\x02\n GetWorkspacePricingTableResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12(\n\x10pricing_table_id\x18\x02 \x01(\tR\x0epricingTableId\x12+\n\x11publishable_token\x18\x03 \x01(\tR\x10publishableToken\x12\x43\n\x1e\x63ustomer_session_client_secret\x18\x04 \x01(\tR\x1b\x63ustomerSessionClientSecret\x12\x32\n\x06\x65xpiry\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x06\x65xpiry\"B\n GetWorkspaceSubscriptionsRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03wksR\x02id\"\x8f\x01\n!GetWorkspaceSubscriptionsResponse\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03wksR\x02id\x12J\n\rsubscriptions\x18\x02 \x03(\x0b\x32$.scalekit.v1.workspaces.SubscriptionR\rsubscriptions\"6\n\x0cSubscription\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12\x16\n\x06status\x18\x07 \x01(\tR\x06status\"8\n\x15GetBillingInfoRequest\x12\x1f\n\x0bonly_addons\x18\x01 \x01(\x08R\nonlyAddons\"`\n\x16GetBillingInfoResponse\x12\x46\n\x0c\x62illing_info\x18\x01 \x01(\x0b\x32#.scalekit.v1.workspaces.BillingInfoR\x0b\x62illingInfo\"\xde\x03\n\x0b\x42illingInfo\x12\x1b\n\tplan_name\x18\x01 \x01(\tR\x08planName\x12O\n\x0f\x63urrent_invoice\x18\x03 \x01(\x0b\x32&.scalekit.v1.workspaces.CurrentInvoiceR\x0e\x63urrentInvoice\x12L\n\x0epayment_method\x18\x04 \x01(\x0b\x32%.scalekit.v1.workspaces.PaymentMethodR\rpaymentMethod\x12\\\n\x14\x62illing_contact_info\x18\x05 \x01(\x0b\x32*.scalekit.v1.workspaces.BillingContactInfoR\x12\x62illingContactInfo\x12\x35\n\x06\x61\x64\x64ons\x18\x06 \x03(\x0b\x32\x1d.scalekit.v1.workspaces.AddonR\x06\x61\x64\x64ons\x12\x46\n\x0clast_invoice\x18\x07 \x01(\x0b\x32#.scalekit.v1.workspaces.LastInvoiceR\x0blastInvoice\x12\x30\n\x11publishable_token\x18\x08 \x01(\tB\x03\xe0\x41\x03R\x10publishableTokenJ\x04\x08\x02\x10\x03\"\xd6\x02\n\x13\x42illingSubscription\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12I\n\x06status\x18\x03 \x01(\x0e\x32\x31.scalekit.v1.workspaces.BillingSubscriptionStatusR\x06status\x12\x39\n\nstart_date\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartDate\x12\x35\n\x08\x65nd_date\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x65ndDate\x12\x16\n\x06\x61mount\x18\x06 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x07 \x01(\tR\x08\x63urrency\x12>\n\x05items\x18\x08 \x03(\x0b\x32(.scalekit.v1.workspaces.SubscriptionItemR\x05items\"\xe1\x01\n\x10SubscriptionItem\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x19\n\x08price_id\x18\x02 \x01(\tR\x07priceId\x12\x1a\n\x08quantity\x18\x03 \x01(\x03R\x08quantity\x12\x45\n\x07product\x18\x04 \x01(\x0b\x32+.scalekit.v1.workspaces.SubscriptionProductR\x07product\x12?\n\x05price\x18\x05 \x01(\x0b\x32).scalekit.v1.workspaces.SubscriptionPriceR\x05price\"s\n\x13SubscriptionProduct\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x16\n\x06\x61\x63tive\x18\x04 \x01(\x08R\x06\x61\x63tive\"\xba\x02\n\x11SubscriptionPrice\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\x12\x12\n\x04type\x18\x03 \x01(\tR\x04type\x12\x1a\n\x08interval\x18\x04 \x01(\tR\x08interval\x12%\n\x0e\x62illing_scheme\x18\x05 \x01(\tR\rbillingScheme\x12\x1d\n\nusage_type\x18\x06 \x01(\tR\tusageType\x12\x37\n\x05tiers\x18\x07 \x03(\x0b\x32!.scalekit.v1.workspaces.PriceTierR\x05tiers\x12\x1f\n\x0btotal_usage\x18\x08 \x01(\x03R\ntotalUsage\x12-\n\x12\x61ggregation_method\x18\t \x01(\tR\x11\x61ggregationMethod\"8\n\tPriceTier\x12\x13\n\x05up_to\x18\x01 \x01(\x03R\x04upTo\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\"\x97\x03\n\x0e\x43urrentInvoice\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\x12=\n\x06status\x18\x04 \x01(\x0e\x32%.scalekit.v1.workspaces.InvoiceStatusR\x06status\x12\x35\n\x08\x64ue_date\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x64ueDate\x12;\n\x0bissued_date\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nissuedDate\x12H\n\x12\x62illing_start_date\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x10\x62illingStartDate\x12\x44\n\x10\x62illing_end_date\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0e\x62illingEndDate\"\x84\x02\n\x0bLastInvoice\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\x12=\n\x06status\x18\x04 \x01(\x0e\x32%.scalekit.v1.workspaces.InvoiceStatusR\x06status\x12\x35\n\x08\x64ue_date\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x64ueDate\x12;\n\x0bissued_date\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nissuedDate\"\xe6\x03\n\rPaymentMethod\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x37\n\x04type\x18\x02 \x01(\x0e\x32#.scalekit.v1.workspaces.PaymentTypeR\x04type\x12%\n\x0e\x61\x63\x63ount_number\x18\x03 \x01(\tR\raccountNumber\x12!\n\x0c\x61\x63\x63ount_type\x18\x04 \x01(\tR\x0b\x61\x63\x63ountType\x12\x43\n\x06status\x18\x05 \x01(\x0e\x32+.scalekit.v1.workspaces.PaymentMethodStatusR\x06status\x12!\n\x0c\x61\x63\x63ount_name\x18\x06 \x01(\tR\x0b\x61\x63\x63ountName\x12\x99\x01\n\x0cpayment_info\x18\x07 \x03(\x0b\x32\x36.scalekit.v1.workspaces.PaymentMethod.PaymentInfoEntryB>\xbaH;\x9a\x01\x38\x10\x05\",r*R\x05\x62randR\x05last4R\texp_monthR\x08\x65xp_yearR\x05\x65mail*\x06r\x04\x10\x01\x18@R\x0bpaymentInfo\x1a>\n\x10PaymentInfoEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xcf\x01\n\x12\x42illingContactInfo\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n\x05\x65mail\x18\x02 \x01(\tR\x05\x65mail\x12\x14\n\x05line1\x18\x03 \x01(\tR\x05line1\x12\x14\n\x05line2\x18\x04 \x01(\tR\x05line2\x12\x12\n\x04\x63ity\x18\x05 \x01(\tR\x04\x63ity\x12\x14\n\x05state\x18\x06 \x01(\tR\x05state\x12\x1f\n\x0bpostal_code\x18\x07 \x01(\tR\npostalCode\x12\x18\n\x07\x63ountry\x18\x08 \x01(\tR\x07\x63ountry\"\x99\x01\n\x05\x41\x64\x64on\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x1a\n\x08\x66\x65\x61tures\x18\x04 \x03(\tR\x08\x66\x65\x61tures\x12\x18\n\x07\x65nabled\x18\x05 \x01(\x08R\x07\x65nabled\x12\x14\n\x05price\x18\x06 \x01(\x01R\x05price\x12\x1a\n\x08\x63urrency\x18\x07 \x01(\tR\x08\x63urrencyJ\x04\x08\x03\x10\x04\"\x18\n\x16GetProductUsageRequest\"\x9a\x01\n\x17GetProductUsageResponse\x12@\n\x08products\x18\x01 \x03(\x0b\x32$.scalekit.v1.workspaces.ProductUsageR\x08products\x12!\n\x0ctotal_amount\x18\x02 \x01(\x01R\x0btotalAmount\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\"\xba\x02\n\x0cProductUsage\x12\x1d\n\nproduct_id\x18\x01 \x01(\tR\tproductId\x12!\n\x0cproduct_name\x18\x02 \x01(\tR\x0bproductName\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x37\n\x05tiers\x18\x04 \x03(\x0b\x32!.scalekit.v1.workspaces.UsageTierR\x05tiers\x12!\n\x0ctotal_amount\x18\x05 \x01(\x01R\x0btotalAmount\x12\x1f\n\x0btotal_count\x18\x06 \x01(\x01R\ntotalCount\x12\x1a\n\x08\x63urrency\x18\x07 \x01(\tR\x08\x63urrency\x12-\n\x12\x61ggregation_method\x18\x08 \x01(\tR\x11\x61ggregationMethod\"\xf4\x01\n\tUsageTier\x12\x1b\n\ttier_name\x18\x01 \x01(\tR\x08tierName\x12#\n\rcurrent_count\x18\x02 \x01(\x03R\x0c\x63urrentCount\x12\x32\n\x15total_available_count\x18\x03 \x01(\x03R\x13totalAvailableCount\x12\x33\n\x16price_for_current_tier\x18\x04 \x01(\x01R\x13priceForCurrentTier\x12\x1a\n\x08\x63urrency\x18\x05 \x01(\tR\x08\x63urrency\x12 \n\x0cis_free_tier\x18\x06 \x01(\x08R\nisFreeTier\"\x1a\n\x18GetProductCatalogRequest\"]\n\x19GetProductCatalogResponse\x12@\n\x07\x63\x61talog\x18\x01 \x01(\x0b\x32&.scalekit.v1.workspaces.ProductCatalogR\x07\x63\x61talog\"X\n\x0eProductCatalog\x12\x46\n\x08products\x18\x01 \x03(\x0b\x32*.scalekit.v1.workspaces.ProductCatalogItemR\x08products\"\xb7\x01\n\x12ProductCatalogItem\x12@\n\x07product\x18\x01 \x01(\x0b\x32&.scalekit.v1.workspaces.CatalogProductR\x07product\x12<\n\x06prices\x18\x02 \x03(\x0b\x32$.scalekit.v1.workspaces.CatalogPriceR\x06prices\x12!\n\x0c\x62illing_type\x18\x03 \x01(\tR\x0b\x62illingType\"\xc2\x02\n\x0e\x43\x61talogProduct\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x16\n\x06\x61\x63tive\x18\x04 \x01(\x08R\x06\x61\x63tive\x12k\n\x08metadata\x18\x05 \x03(\x0b\x32\x34.scalekit.v1.workspaces.CatalogProduct.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12(\n\x10\x64\x65\x66\x61ult_price_id\x18\x06 \x01(\tR\x0e\x64\x65\x66\x61ultPriceId\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x81\x02\n\x0c\x43\x61talogPrice\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x61mount\x18\x02 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\x12\x12\n\x04type\x18\x04 \x01(\tR\x04type\x12\x1a\n\x08interval\x18\x05 \x01(\tR\x08interval\x12%\n\x0e\x62illing_scheme\x18\x06 \x01(\tR\rbillingScheme\x12\x1d\n\nusage_type\x18\x07 \x01(\tR\tusageType\x12\x37\n\x05tiers\x18\x08 \x03(\x0b\x32!.scalekit.v1.workspaces.PriceTierR\x05tiers\"\xdb\x01\n\x16\x41\x64\x64SubscriptionRequest\x12!\n\x0cproduct_name\x18\x01 \x01(\tR\x0bproductName\x12\x1d\n\nproduct_id\x18\x02 \x01(\tR\tproductId:\x7f\xbaH|\x1az\n\x12product_name_or_id\x12\x32\x65ither product_id or product_name must be provided\x1a\x30this.product_id != \'\' || this.product_name != \'\'\"}\n\x17\x41\x64\x64SubscriptionResponse\x12\'\n\x0fsubscription_id\x18\x01 \x01(\tR\x0esubscriptionId\x12\x1d\n\nproduct_id\x18\x02 \x01(\tR\tproductId\x12\x1a\n\x08quantity\x18\x03 \x01(\x03R\x08quantity\"\xe5\x02\n\x1c\x43reateCheckoutSessionRequest\x12?\n\x04mode\x18\x01 \x01(\x0e\x32+.scalekit.v1.workspaces.CheckoutSessionModeR\x04mode\x12\"\n\nreturn_url\x18\x02 \x01(\tH\x00R\treturnUrl\x88\x01\x01\x12$\n\x0bsuccess_url\x18\x03 \x01(\tH\x01R\nsuccessUrl\x88\x01\x01\x12\x37\n\x07ui_mode\x18\x04 \x01(\x0e\x32\x1e.scalekit.v1.workspaces.UiModeR\x06uiMode\x12\x62\n\x16redirect_on_completion\x18\x05 \x01(\x0e\x32,.scalekit.v1.workspaces.RedirectOnCompletionR\x14redirectOnCompletionB\r\n\x0b_return_urlB\x0e\n\x0c_success_url\"s\n\x1d\x43reateCheckoutSessionResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12#\n\rclient_secret\x18\x02 \x01(\tR\x0c\x63lientSecret\x12\x15\n\x03url\x18\x03 \x01(\tH\x00R\x03url\x88\x01\x01\x42\x06\n\x04_url\"Z\n\x1dUpdateWorkspaceContextRequest\x12\x39\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\x06\xbaH\x03\xc8\x01\x01R\x07\x63ontext\"S\n\x1eUpdateWorkspaceContextResponse\x12\x31\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext\" \n\x1eValidateWorkspaceDomainRequest\"a\n\x1c\x43reateWorkspaceDomainRequest\x12\x41\n\x06\x64omain\x18\x01 \x01(\x0b\x32!.scalekit.v1.domains.CreateDomainB\x06\xbaH\x03\xc8\x01\x01R\x06\x64omain\"T\n\x1d\x43reateWorkspaceDomainResponse\x12\x33\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainR\x06\x64omain\"\xd7\x01\n\x1bListWorkspaceDomainsRequest\x12\x38\n\tpage_size\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueR\x08pageSize\x12<\n\x0bpage_number\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueR\npageNumber\x12@\n\x0b\x64omain_type\x18\x03 \x01(\x0e\x32\x1f.scalekit.v1.domains.DomainTypeR\ndomainType\"\x93\x01\n\x1cListWorkspaceDomainsResponse\x12\x1b\n\tpage_size\x18\x01 \x01(\x05R\x08pageSize\x12\x1f\n\x0bpage_number\x18\x02 \x01(\x05R\npageNumber\x12\x35\n\x07\x64omains\x18\x03 \x03(\x0b\x32\x1b.scalekit.v1.domains.DomainR\x07\x64omains\":\n\x1c\x44\x65leteWorkspaceDomainRequest\x12\x1a\n\x02id\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x01R\x02id*\xaf\x01\n\x19\x42illingSubscriptionStatus\x12+\n\'BILLING_SUBSCRIPTION_STATUS_UNSPECIFIED\x10\x00\x12\x1f\n\x1b\x42ILLING_SUBSCRIPTION_ACTIVE\x10\x01\x12!\n\x1d\x42ILLING_SUBSCRIPTION_CANCELED\x10\x02\x12!\n\x1d\x42ILLING_SUBSCRIPTION_PAST_DUE\x10\x03*y\n\rInvoiceStatus\x12\x1e\n\x1aINVOICE_STATUS_UNSPECIFIED\x10\x00\x12\x10\n\x0cINVOICE_PAID\x10\x01\x12\x0f\n\x0bINVOICE_DUE\x10\x02\x12\x13\n\x0fINVOICE_OVERDUE\x10\x03\x12\x10\n\x0cINVOICE_VOID\x10\x04*j\n\x0bPaymentType\x12\x1c\n\x18PAYMENT_TYPE_UNSPECIFIED\x10\x00\x12\x08\n\x04\x43\x41RD\x10\x01\x12\x10\n\x0c\x42\x41NK_ACCOUNT\x10\x02\x12\x0b\n\x07OFFLINE\x10\x03\x12\x08\n\x04LINK\x10\x04\x12\n\n\x06PAYPAL\x10\x05*\x8e\x01\n\x13PaymentMethodStatus\x12%\n!PAYMENT_METHOD_STATUS_UNSPECIFIED\x10\x00\x12\x19\n\x15PAYMENT_METHOD_ACTIVE\x10\x01\x12\x1a\n\x16PAYMENT_METHOD_EXPIRED\x10\x02\x12\x19\n\x15PAYMENT_METHOD_FAILED\x10\x03*f\n\x14RedirectOnCompletion\x12&\n\"REDIRECT_ON_COMPLETION_UNSPECIFIED\x10\x00\x12\t\n\x05never\x10\x01\x12\n\n\x06\x61lways\x10\x02\x12\x0f\n\x0bif_required\x10\x03*G\n\x06UiMode\x12\x17\n\x13UI_MODE_UNSPECIFIED\x10\x00\x12\x0c\n\x08\x65mbedded\x10\x01\x12\n\n\x06hosted\x10\x02\x12\n\n\x06\x63ustom\x10\x03*f\n\x13\x43heckoutSessionMode\x12%\n!CHECKOUT_SESSION_MODE_UNSPECIFIED\x10\x00\x12\t\n\x05setup\x10\x01\x12\x10\n\x0csubscription\x10\x02\x12\x0b\n\x07payment\x10\x03\x32\x96\x1b\n\x10WorkspaceService\x12\x9b\x01\n\x0f\x43reateWorkspace\x12..scalekit.v1.workspaces.CreateWorkspaceRequest\x1a/.scalekit.v1.workspaces.CreateWorkspaceResponse\"\'\x82\xb5\x18\x02\x18\x01\x82\xd3\xe4\x93\x02\x1b\"\x0e/api/v1/signup:\tworkspace\x12\x90\x01\n\x0cGetWorkspace\x12+.scalekit.v1.workspaces.GetWorkspaceRequest\x1a,.scalekit.v1.workspaces.GetWorkspaceResponse\"%\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\x19\x12\x17/api/v1/workspaces/{id}\x12\xad\x01\n\x13GetCurrentWorkspace\x12\x32.scalekit.v1.workspaces.GetCurrentWorkspaceRequest\x1a,.scalekit.v1.workspaces.GetWorkspaceResponse\"4\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\x12\x17/api/v1/workspaces:this\x12\xa4\x01\n\x0fUpdateWorkspace\x12..scalekit.v1.workspaces.UpdateWorkspaceRequest\x1a/.scalekit.v1.workspaces.UpdateWorkspaceResponse\"0\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02$2\x17/api/v1/workspaces/{id}:\tworkspace\x12\x90\x01\n\x10OnboardWorkspace\x12/.scalekit.v1.workspaces.OnboardWorkspaceRequest\x1a\x16.google.protobuf.Empty\"3\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02\'2\x1a/api/v1/workspaces:onboard:\tworkspace\x12\xb2\x01\n\x16UpdateCurrentWorkspace\x12\x35.scalekit.v1.workspaces.UpdateCurrentWorkspaceRequest\x1a/.scalekit.v1.workspaces.UpdateWorkspaceResponse\"0\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02$2\x17/api/v1/workspaces:this:\tworkspace\x12\xcd\x01\n\x19GetWorkspaceSubscriptions\x12\x38.scalekit.v1.workspaces.GetWorkspaceSubscriptionsRequest\x1a\x39.scalekit.v1.workspaces.GetWorkspaceSubscriptionsResponse\";\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02/\x12-/api/v1/workspaces/{id}/billing/subscriptions\x12\xca\x01\n\x18GetWorkspacePricingTable\x12\x37.scalekit.v1.workspaces.GetWorkspacePricingTableRequest\x1a\x38.scalekit.v1.workspaces.GetWorkspacePricingTableResponse\";\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02/\x12-/api/v1/workspaces/{id}/billing/pricing-table\x12\xc3\x01\n\x10GetBillingPortal\x12/.scalekit.v1.workspaces.GetBillingPortalRequest\x1a\x30.scalekit.v1.workspaces.GetBillingPortalResponse\"L\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\x12//api/v1/workspaces:this/billing/customer-portal\x12\xb2\x01\n\x0eGetBillingInfo\x12-.scalekit.v1.workspaces.GetBillingInfoRequest\x1a..scalekit.v1.workspaces.GetBillingInfoResponse\"A\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02&\x12$/api/v1/workspaces:this/billing:info\x12\xbe\x01\n\x0fGetProductUsage\x12..scalekit.v1.workspaces.GetProductUsageRequest\x1a/.scalekit.v1.workspaces.GetProductUsageResponse\"J\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02/\x12-/api/v1/workspaces:this/billing:product-usage\x12\xb5\x01\n\x11GetProductCatalog\x12\x30.scalekit.v1.workspaces.GetProductCatalogRequest\x1a\x31.scalekit.v1.workspaces.GetProductCatalogResponse\";\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02 \x12\x1e/api/v1/billing/productcatalog\x12\xc5\x01\n\x0f\x41\x64\x64Subscription\x12..scalekit.v1.workspaces.AddSubscriptionRequest\x1a/.scalekit.v1.workspaces.AddSubscriptionResponse\"Q\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x36\"1/api/v1/workspaces:this/billing/subscriptions:add:\x01*\x12\xd7\x01\n\x15\x43reateCheckoutSession\x12\x34.scalekit.v1.workspaces.CreateCheckoutSessionRequest\x1a\x35.scalekit.v1.workspaces.CreateCheckoutSessionResponse\"Q\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x36\"1/api/v1/workspaces:this/billing/checkout_sessions:\x01*\x12\xcf\x01\n\x16UpdateWorkspaceContext\x12\x35.scalekit.v1.workspaces.UpdateWorkspaceContextRequest\x1a\x36.scalekit.v1.workspaces.UpdateWorkspaceContextResponse\"F\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02+\" /api/v1/workspaces:this/contexts:\x07\x63ontext\x12\xb0\x01\n\x14ListWorkspaceDomains\x12\x33.scalekit.v1.workspaces.ListWorkspaceDomainsRequest\x1a\x34.scalekit.v1.workspaces.ListWorkspaceDomainsResponse\"-\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02!\x12\x1f/api/v1/workspaces:this/domains\x12\xbb\x01\n\x15\x43reateWorkspaceDomain\x12\x34.scalekit.v1.workspaces.CreateWorkspaceDomainRequest\x1a\x35.scalekit.v1.workspaces.CreateWorkspaceDomainResponse\"5\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02)\"\x1f/api/v1/workspaces:this/domains:\x06\x64omain\x12\x99\x01\n\x15\x44\x65leteWorkspaceDomain\x12\x34.scalekit.v1.workspaces.DeleteWorkspaceDomainRequest\x1a\x16.google.protobuf.Empty\"2\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02&*$/api/v1/workspaces:this/domains/{id}\x12\x9f\x01\n\x17ValidateWorkspaceDomain\x12\x36.scalekit.v1.workspaces.ValidateWorkspaceDomainRequest\x1a\x1a.google.protobuf.BoolValue\"0\x82\xb5\x18\x02\x18@\x82\xd3\xe4\x93\x02$\x12\"/api/v1/workspaces:validate_domainB6Z4github.com/scalekit-inc/scalekit/pkg/grpc/workspacesb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -90,12 +92,16 @@ _globals['_ADDSUBSCRIPTIONREQUEST']._serialized_options = b'\272H|\032z\n\022product_name_or_id\0222either product_id or product_name must be provided\0320this.product_id != \'\' || this.product_name != \'\'' _globals['_UPDATEWORKSPACECONTEXTREQUEST'].fields_by_name['context']._loaded_options = None _globals['_UPDATEWORKSPACECONTEXTREQUEST'].fields_by_name['context']._serialized_options = b'\272H\003\310\001\001' + _globals['_CREATEWORKSPACEDOMAINREQUEST'].fields_by_name['domain']._loaded_options = None + _globals['_CREATEWORKSPACEDOMAINREQUEST'].fields_by_name['domain']._serialized_options = b'\272H\003\310\001\001' + _globals['_DELETEWORKSPACEDOMAINREQUEST'].fields_by_name['id']._loaded_options = None + _globals['_DELETEWORKSPACEDOMAINREQUEST'].fields_by_name['id']._serialized_options = b'\272H\007r\005\020\001\030\200\001' _globals['_WORKSPACESERVICE'].methods_by_name['CreateWorkspace']._loaded_options = None _globals['_WORKSPACESERVICE'].methods_by_name['CreateWorkspace']._serialized_options = b'\202\265\030\002\030\001\202\323\344\223\002\033\"\016/api/v1/signup:\tworkspace' _globals['_WORKSPACESERVICE'].methods_by_name['GetWorkspace']._loaded_options = None _globals['_WORKSPACESERVICE'].methods_by_name['GetWorkspace']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002\031\022\027/api/v1/workspaces/{id}' _globals['_WORKSPACESERVICE'].methods_by_name['GetCurrentWorkspace']._loaded_options = None - _globals['_WORKSPACESERVICE'].methods_by_name['GetCurrentWorkspace']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002\031\022\027/api/v1/workspaces:this' + _globals['_WORKSPACESERVICE'].methods_by_name['GetCurrentWorkspace']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\031\022\027/api/v1/workspaces:this' _globals['_WORKSPACESERVICE'].methods_by_name['UpdateWorkspace']._loaded_options = None _globals['_WORKSPACESERVICE'].methods_by_name['UpdateWorkspace']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002$2\027/api/v1/workspaces/{id}:\tworkspace' _globals['_WORKSPACESERVICE'].methods_by_name['OnboardWorkspace']._loaded_options = None @@ -119,125 +125,145 @@ _globals['_WORKSPACESERVICE'].methods_by_name['CreateCheckoutSession']._loaded_options = None _globals['_WORKSPACESERVICE'].methods_by_name['CreateCheckoutSession']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\0026\"1/api/v1/workspaces:this/billing/checkout_sessions:\001*' _globals['_WORKSPACESERVICE'].methods_by_name['UpdateWorkspaceContext']._loaded_options = None - _globals['_WORKSPACESERVICE'].methods_by_name['UpdateWorkspaceContext']._serialized_options = b'\202\265\030\002\030D\202\323\344\223\002+\" /api/v1/workspaces:this/contexts:\007context' - _globals['_BILLINGSUBSCRIPTIONSTATUS']._serialized_start=9552 - _globals['_BILLINGSUBSCRIPTIONSTATUS']._serialized_end=9727 - _globals['_INVOICESTATUS']._serialized_start=9729 - _globals['_INVOICESTATUS']._serialized_end=9850 - _globals['_PAYMENTTYPE']._serialized_start=9852 - _globals['_PAYMENTTYPE']._serialized_end=9958 - _globals['_PAYMENTMETHODSTATUS']._serialized_start=9961 - _globals['_PAYMENTMETHODSTATUS']._serialized_end=10103 - _globals['_REDIRECTONCOMPLETION']._serialized_start=10105 - _globals['_REDIRECTONCOMPLETION']._serialized_end=10207 - _globals['_UIMODE']._serialized_start=10209 - _globals['_UIMODE']._serialized_end=10280 - _globals['_CHECKOUTSESSIONMODE']._serialized_start=10282 - _globals['_CHECKOUTSESSIONMODE']._serialized_end=10384 - _globals['_WORKSPACEEXTENDEDINFO']._serialized_start=458 - _globals['_WORKSPACEEXTENDEDINFO']._serialized_end=624 - _globals['_WORKSPACE']._serialized_start=627 - _globals['_WORKSPACE']._serialized_end=1343 - _globals['_CREATEWORKSPACE']._serialized_start=1346 - _globals['_CREATEWORKSPACE']._serialized_end=1506 - _globals['_UPDATEWORKSPACE']._serialized_start=1508 - _globals['_UPDATEWORKSPACE']._serialized_end=1572 - _globals['_ONBOARDWORKSPACE']._serialized_start=1575 - _globals['_ONBOARDWORKSPACE']._serialized_end=1926 - _globals['_CREATEWORKSPACEREQUEST']._serialized_start=1928 - _globals['_CREATEWORKSPACEREQUEST']._serialized_end=2031 - _globals['_CREATEWORKSPACERESPONSE']._serialized_start=2033 - _globals['_CREATEWORKSPACERESPONSE']._serialized_end=2143 - _globals['_UPDATEWORKSPACEREQUEST']._serialized_start=2146 - _globals['_UPDATEWORKSPACEREQUEST']._serialized_end=2281 - _globals['_ONBOARDWORKSPACEREQUEST']._serialized_start=2283 - _globals['_ONBOARDWORKSPACEREQUEST']._serialized_end=2388 - _globals['_UPDATECURRENTWORKSPACEREQUEST']._serialized_start=2390 - _globals['_UPDATECURRENTWORKSPACEREQUEST']._serialized_end=2500 - _globals['_UPDATEWORKSPACERESPONSE']._serialized_start=2502 - _globals['_UPDATEWORKSPACERESPONSE']._serialized_end=2592 - _globals['_GETWORKSPACEREQUEST']._serialized_start=2594 - _globals['_GETWORKSPACEREQUEST']._serialized_end=2647 - _globals['_GETCURRENTWORKSPACEREQUEST']._serialized_start=2649 - _globals['_GETCURRENTWORKSPACEREQUEST']._serialized_end=2677 - _globals['_GETWORKSPACERESPONSE']._serialized_start=2680 - _globals['_GETWORKSPACERESPONSE']._serialized_end=2823 - _globals['_GETBILLINGPORTALREQUEST']._serialized_start=2825 - _globals['_GETBILLINGPORTALREQUEST']._serialized_end=2925 - _globals['_GETBILLINGPORTALRESPONSE']._serialized_start=2927 - _globals['_GETBILLINGPORTALRESPONSE']._serialized_end=2987 - _globals['_GETWORKSPACEPRICINGTABLEREQUEST']._serialized_start=2989 - _globals['_GETWORKSPACEPRICINGTABLEREQUEST']._serialized_end=3054 - _globals['_GETWORKSPACEPRICINGTABLERESPONSE']._serialized_start=3057 - _globals['_GETWORKSPACEPRICINGTABLERESPONSE']._serialized_end=3315 - _globals['_GETWORKSPACESUBSCRIPTIONSREQUEST']._serialized_start=3317 - _globals['_GETWORKSPACESUBSCRIPTIONSREQUEST']._serialized_end=3383 - _globals['_GETWORKSPACESUBSCRIPTIONSRESPONSE']._serialized_start=3386 - _globals['_GETWORKSPACESUBSCRIPTIONSRESPONSE']._serialized_end=3529 - _globals['_SUBSCRIPTION']._serialized_start=3531 - _globals['_SUBSCRIPTION']._serialized_end=3585 - _globals['_GETBILLINGINFOREQUEST']._serialized_start=3587 - _globals['_GETBILLINGINFOREQUEST']._serialized_end=3643 - _globals['_GETBILLINGINFORESPONSE']._serialized_start=3645 - _globals['_GETBILLINGINFORESPONSE']._serialized_end=3741 - _globals['_BILLINGINFO']._serialized_start=3744 - _globals['_BILLINGINFO']._serialized_end=4222 - _globals['_BILLINGSUBSCRIPTION']._serialized_start=4225 - _globals['_BILLINGSUBSCRIPTION']._serialized_end=4567 - _globals['_SUBSCRIPTIONITEM']._serialized_start=4570 - _globals['_SUBSCRIPTIONITEM']._serialized_end=4795 - _globals['_SUBSCRIPTIONPRODUCT']._serialized_start=4797 - _globals['_SUBSCRIPTIONPRODUCT']._serialized_end=4912 - _globals['_SUBSCRIPTIONPRICE']._serialized_start=4915 - _globals['_SUBSCRIPTIONPRICE']._serialized_end=5229 - _globals['_PRICETIER']._serialized_start=5231 - _globals['_PRICETIER']._serialized_end=5287 - _globals['_CURRENTINVOICE']._serialized_start=5290 - _globals['_CURRENTINVOICE']._serialized_end=5697 - _globals['_LASTINVOICE']._serialized_start=5700 - _globals['_LASTINVOICE']._serialized_end=5960 - _globals['_PAYMENTMETHOD']._serialized_start=5963 - _globals['_PAYMENTMETHOD']._serialized_end=6449 - _globals['_PAYMENTMETHOD_PAYMENTINFOENTRY']._serialized_start=6387 - _globals['_PAYMENTMETHOD_PAYMENTINFOENTRY']._serialized_end=6449 - _globals['_BILLINGCONTACTINFO']._serialized_start=6452 - _globals['_BILLINGCONTACTINFO']._serialized_end=6659 - _globals['_ADDON']._serialized_start=6662 - _globals['_ADDON']._serialized_end=6815 - _globals['_GETPRODUCTUSAGEREQUEST']._serialized_start=6817 - _globals['_GETPRODUCTUSAGEREQUEST']._serialized_end=6841 - _globals['_GETPRODUCTUSAGERESPONSE']._serialized_start=6844 - _globals['_GETPRODUCTUSAGERESPONSE']._serialized_end=6998 - _globals['_PRODUCTUSAGE']._serialized_start=7001 - _globals['_PRODUCTUSAGE']._serialized_end=7315 - _globals['_USAGETIER']._serialized_start=7318 - _globals['_USAGETIER']._serialized_end=7562 - _globals['_GETPRODUCTCATALOGREQUEST']._serialized_start=7564 - _globals['_GETPRODUCTCATALOGREQUEST']._serialized_end=7590 - _globals['_GETPRODUCTCATALOGRESPONSE']._serialized_start=7592 - _globals['_GETPRODUCTCATALOGRESPONSE']._serialized_end=7685 - _globals['_PRODUCTCATALOG']._serialized_start=7687 - _globals['_PRODUCTCATALOG']._serialized_end=7775 - _globals['_PRODUCTCATALOGITEM']._serialized_start=7778 - _globals['_PRODUCTCATALOGITEM']._serialized_end=7961 - _globals['_CATALOGPRODUCT']._serialized_start=7964 - _globals['_CATALOGPRODUCT']._serialized_end=8286 - _globals['_CATALOGPRODUCT_METADATAENTRY']._serialized_start=8227 - _globals['_CATALOGPRODUCT_METADATAENTRY']._serialized_end=8286 - _globals['_CATALOGPRICE']._serialized_start=8289 - _globals['_CATALOGPRICE']._serialized_end=8546 - _globals['_ADDSUBSCRIPTIONREQUEST']._serialized_start=8549 - _globals['_ADDSUBSCRIPTIONREQUEST']._serialized_end=8768 - _globals['_ADDSUBSCRIPTIONRESPONSE']._serialized_start=8770 - _globals['_ADDSUBSCRIPTIONRESPONSE']._serialized_end=8895 - _globals['_CREATECHECKOUTSESSIONREQUEST']._serialized_start=8898 - _globals['_CREATECHECKOUTSESSIONREQUEST']._serialized_end=9255 - _globals['_CREATECHECKOUTSESSIONRESPONSE']._serialized_start=9257 - _globals['_CREATECHECKOUTSESSIONRESPONSE']._serialized_end=9372 - _globals['_UPDATEWORKSPACECONTEXTREQUEST']._serialized_start=9374 - _globals['_UPDATEWORKSPACECONTEXTREQUEST']._serialized_end=9464 - _globals['_UPDATEWORKSPACECONTEXTRESPONSE']._serialized_start=9466 - _globals['_UPDATEWORKSPACECONTEXTRESPONSE']._serialized_end=9549 - _globals['_WORKSPACESERVICE']._serialized_start=10387 - _globals['_WORKSPACESERVICE']._serialized_end=13148 + _globals['_WORKSPACESERVICE'].methods_by_name['UpdateWorkspaceContext']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002+\" /api/v1/workspaces:this/contexts:\007context' + _globals['_WORKSPACESERVICE'].methods_by_name['ListWorkspaceDomains']._loaded_options = None + _globals['_WORKSPACESERVICE'].methods_by_name['ListWorkspaceDomains']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002!\022\037/api/v1/workspaces:this/domains' + _globals['_WORKSPACESERVICE'].methods_by_name['CreateWorkspaceDomain']._loaded_options = None + _globals['_WORKSPACESERVICE'].methods_by_name['CreateWorkspaceDomain']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002)\"\037/api/v1/workspaces:this/domains:\006domain' + _globals['_WORKSPACESERVICE'].methods_by_name['DeleteWorkspaceDomain']._loaded_options = None + _globals['_WORKSPACESERVICE'].methods_by_name['DeleteWorkspaceDomain']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002&*$/api/v1/workspaces:this/domains/{id}' + _globals['_WORKSPACESERVICE'].methods_by_name['ValidateWorkspaceDomain']._loaded_options = None + _globals['_WORKSPACESERVICE'].methods_by_name['ValidateWorkspaceDomain']._serialized_options = b'\202\265\030\002\030@\202\323\344\223\002$\022\"/api/v1/workspaces:validate_domain' + _globals['_BILLINGSUBSCRIPTIONSTATUS']._serialized_start=10327 + _globals['_BILLINGSUBSCRIPTIONSTATUS']._serialized_end=10502 + _globals['_INVOICESTATUS']._serialized_start=10504 + _globals['_INVOICESTATUS']._serialized_end=10625 + _globals['_PAYMENTTYPE']._serialized_start=10627 + _globals['_PAYMENTTYPE']._serialized_end=10733 + _globals['_PAYMENTMETHODSTATUS']._serialized_start=10736 + _globals['_PAYMENTMETHODSTATUS']._serialized_end=10878 + _globals['_REDIRECTONCOMPLETION']._serialized_start=10880 + _globals['_REDIRECTONCOMPLETION']._serialized_end=10982 + _globals['_UIMODE']._serialized_start=10984 + _globals['_UIMODE']._serialized_end=11055 + _globals['_CHECKOUTSESSIONMODE']._serialized_start=11057 + _globals['_CHECKOUTSESSIONMODE']._serialized_end=11159 + _globals['_WORKSPACEEXTENDEDINFO']._serialized_start=525 + _globals['_WORKSPACEEXTENDEDINFO']._serialized_end=691 + _globals['_WORKSPACE']._serialized_start=694 + _globals['_WORKSPACE']._serialized_end=1410 + _globals['_CREATEWORKSPACE']._serialized_start=1413 + _globals['_CREATEWORKSPACE']._serialized_end=1573 + _globals['_UPDATEWORKSPACE']._serialized_start=1575 + _globals['_UPDATEWORKSPACE']._serialized_end=1639 + _globals['_ONBOARDWORKSPACE']._serialized_start=1642 + _globals['_ONBOARDWORKSPACE']._serialized_end=2054 + _globals['_CREATEWORKSPACEREQUEST']._serialized_start=2056 + _globals['_CREATEWORKSPACEREQUEST']._serialized_end=2159 + _globals['_CREATEWORKSPACERESPONSE']._serialized_start=2161 + _globals['_CREATEWORKSPACERESPONSE']._serialized_end=2271 + _globals['_UPDATEWORKSPACEREQUEST']._serialized_start=2274 + _globals['_UPDATEWORKSPACEREQUEST']._serialized_end=2409 + _globals['_ONBOARDWORKSPACEREQUEST']._serialized_start=2411 + _globals['_ONBOARDWORKSPACEREQUEST']._serialized_end=2516 + _globals['_UPDATECURRENTWORKSPACEREQUEST']._serialized_start=2518 + _globals['_UPDATECURRENTWORKSPACEREQUEST']._serialized_end=2628 + _globals['_UPDATEWORKSPACERESPONSE']._serialized_start=2630 + _globals['_UPDATEWORKSPACERESPONSE']._serialized_end=2720 + _globals['_GETWORKSPACEREQUEST']._serialized_start=2722 + _globals['_GETWORKSPACEREQUEST']._serialized_end=2775 + _globals['_GETCURRENTWORKSPACEREQUEST']._serialized_start=2777 + _globals['_GETCURRENTWORKSPACEREQUEST']._serialized_end=2805 + _globals['_GETWORKSPACERESPONSE']._serialized_start=2808 + _globals['_GETWORKSPACERESPONSE']._serialized_end=2951 + _globals['_GETBILLINGPORTALREQUEST']._serialized_start=2953 + _globals['_GETBILLINGPORTALREQUEST']._serialized_end=3053 + _globals['_GETBILLINGPORTALRESPONSE']._serialized_start=3055 + _globals['_GETBILLINGPORTALRESPONSE']._serialized_end=3115 + _globals['_GETWORKSPACEPRICINGTABLEREQUEST']._serialized_start=3117 + _globals['_GETWORKSPACEPRICINGTABLEREQUEST']._serialized_end=3182 + _globals['_GETWORKSPACEPRICINGTABLERESPONSE']._serialized_start=3185 + _globals['_GETWORKSPACEPRICINGTABLERESPONSE']._serialized_end=3443 + _globals['_GETWORKSPACESUBSCRIPTIONSREQUEST']._serialized_start=3445 + _globals['_GETWORKSPACESUBSCRIPTIONSREQUEST']._serialized_end=3511 + _globals['_GETWORKSPACESUBSCRIPTIONSRESPONSE']._serialized_start=3514 + _globals['_GETWORKSPACESUBSCRIPTIONSRESPONSE']._serialized_end=3657 + _globals['_SUBSCRIPTION']._serialized_start=3659 + _globals['_SUBSCRIPTION']._serialized_end=3713 + _globals['_GETBILLINGINFOREQUEST']._serialized_start=3715 + _globals['_GETBILLINGINFOREQUEST']._serialized_end=3771 + _globals['_GETBILLINGINFORESPONSE']._serialized_start=3773 + _globals['_GETBILLINGINFORESPONSE']._serialized_end=3869 + _globals['_BILLINGINFO']._serialized_start=3872 + _globals['_BILLINGINFO']._serialized_end=4350 + _globals['_BILLINGSUBSCRIPTION']._serialized_start=4353 + _globals['_BILLINGSUBSCRIPTION']._serialized_end=4695 + _globals['_SUBSCRIPTIONITEM']._serialized_start=4698 + _globals['_SUBSCRIPTIONITEM']._serialized_end=4923 + _globals['_SUBSCRIPTIONPRODUCT']._serialized_start=4925 + _globals['_SUBSCRIPTIONPRODUCT']._serialized_end=5040 + _globals['_SUBSCRIPTIONPRICE']._serialized_start=5043 + _globals['_SUBSCRIPTIONPRICE']._serialized_end=5357 + _globals['_PRICETIER']._serialized_start=5359 + _globals['_PRICETIER']._serialized_end=5415 + _globals['_CURRENTINVOICE']._serialized_start=5418 + _globals['_CURRENTINVOICE']._serialized_end=5825 + _globals['_LASTINVOICE']._serialized_start=5828 + _globals['_LASTINVOICE']._serialized_end=6088 + _globals['_PAYMENTMETHOD']._serialized_start=6091 + _globals['_PAYMENTMETHOD']._serialized_end=6577 + _globals['_PAYMENTMETHOD_PAYMENTINFOENTRY']._serialized_start=6515 + _globals['_PAYMENTMETHOD_PAYMENTINFOENTRY']._serialized_end=6577 + _globals['_BILLINGCONTACTINFO']._serialized_start=6580 + _globals['_BILLINGCONTACTINFO']._serialized_end=6787 + _globals['_ADDON']._serialized_start=6790 + _globals['_ADDON']._serialized_end=6943 + _globals['_GETPRODUCTUSAGEREQUEST']._serialized_start=6945 + _globals['_GETPRODUCTUSAGEREQUEST']._serialized_end=6969 + _globals['_GETPRODUCTUSAGERESPONSE']._serialized_start=6972 + _globals['_GETPRODUCTUSAGERESPONSE']._serialized_end=7126 + _globals['_PRODUCTUSAGE']._serialized_start=7129 + _globals['_PRODUCTUSAGE']._serialized_end=7443 + _globals['_USAGETIER']._serialized_start=7446 + _globals['_USAGETIER']._serialized_end=7690 + _globals['_GETPRODUCTCATALOGREQUEST']._serialized_start=7692 + _globals['_GETPRODUCTCATALOGREQUEST']._serialized_end=7718 + _globals['_GETPRODUCTCATALOGRESPONSE']._serialized_start=7720 + _globals['_GETPRODUCTCATALOGRESPONSE']._serialized_end=7813 + _globals['_PRODUCTCATALOG']._serialized_start=7815 + _globals['_PRODUCTCATALOG']._serialized_end=7903 + _globals['_PRODUCTCATALOGITEM']._serialized_start=7906 + _globals['_PRODUCTCATALOGITEM']._serialized_end=8089 + _globals['_CATALOGPRODUCT']._serialized_start=8092 + _globals['_CATALOGPRODUCT']._serialized_end=8414 + _globals['_CATALOGPRODUCT_METADATAENTRY']._serialized_start=8355 + _globals['_CATALOGPRODUCT_METADATAENTRY']._serialized_end=8414 + _globals['_CATALOGPRICE']._serialized_start=8417 + _globals['_CATALOGPRICE']._serialized_end=8674 + _globals['_ADDSUBSCRIPTIONREQUEST']._serialized_start=8677 + _globals['_ADDSUBSCRIPTIONREQUEST']._serialized_end=8896 + _globals['_ADDSUBSCRIPTIONRESPONSE']._serialized_start=8898 + _globals['_ADDSUBSCRIPTIONRESPONSE']._serialized_end=9023 + _globals['_CREATECHECKOUTSESSIONREQUEST']._serialized_start=9026 + _globals['_CREATECHECKOUTSESSIONREQUEST']._serialized_end=9383 + _globals['_CREATECHECKOUTSESSIONRESPONSE']._serialized_start=9385 + _globals['_CREATECHECKOUTSESSIONRESPONSE']._serialized_end=9500 + _globals['_UPDATEWORKSPACECONTEXTREQUEST']._serialized_start=9502 + _globals['_UPDATEWORKSPACECONTEXTREQUEST']._serialized_end=9592 + _globals['_UPDATEWORKSPACECONTEXTRESPONSE']._serialized_start=9594 + _globals['_UPDATEWORKSPACECONTEXTRESPONSE']._serialized_end=9677 + _globals['_VALIDATEWORKSPACEDOMAINREQUEST']._serialized_start=9679 + _globals['_VALIDATEWORKSPACEDOMAINREQUEST']._serialized_end=9711 + _globals['_CREATEWORKSPACEDOMAINREQUEST']._serialized_start=9713 + _globals['_CREATEWORKSPACEDOMAINREQUEST']._serialized_end=9810 + _globals['_CREATEWORKSPACEDOMAINRESPONSE']._serialized_start=9812 + _globals['_CREATEWORKSPACEDOMAINRESPONSE']._serialized_end=9896 + _globals['_LISTWORKSPACEDOMAINSREQUEST']._serialized_start=9899 + _globals['_LISTWORKSPACEDOMAINSREQUEST']._serialized_end=10114 + _globals['_LISTWORKSPACEDOMAINSRESPONSE']._serialized_start=10117 + _globals['_LISTWORKSPACEDOMAINSRESPONSE']._serialized_end=10264 + _globals['_DELETEWORKSPACEDOMAINREQUEST']._serialized_start=10266 + _globals['_DELETEWORKSPACEDOMAINREQUEST']._serialized_end=10324 + _globals['_WORKSPACESERVICE']._serialized_start=11162 + _globals['_WORKSPACESERVICE']._serialized_end=14640 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/workspaces/workspaces_pb2.pyi b/scalekit/v1/workspaces/workspaces_pb2.pyi index 1cf9c94..2a281ce 100644 --- a/scalekit/v1/workspaces/workspaces_pb2.pyi +++ b/scalekit/v1/workspaces/workspaces_pb2.pyi @@ -7,8 +7,10 @@ from google.protobuf import duration_pb2 as _duration_pb2 from google.protobuf import empty_pb2 as _empty_pb2 from google.protobuf import struct_pb2 as _struct_pb2 from google.protobuf import timestamp_pb2 as _timestamp_pb2 +from google.protobuf import wrappers_pb2 as _wrappers_pb2 from protoc_gen_openapiv2.options import annotations_pb2 as _annotations_pb2_1 from scalekit.v1.commons import commons_pb2 as _commons_pb2 +from scalekit.v1.domains import domains_pb2 as _domains_pb2 from scalekit.v1.options import options_pb2 as _options_pb2 from google.protobuf.internal import containers as _containers from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper @@ -150,16 +152,18 @@ class UpdateWorkspace(_message.Message): def __init__(self, display_name: _Optional[str] = ...) -> None: ... class OnboardWorkspace(_message.Message): - __slots__ = ("workspace_display_name", "user_given_name", "user_family_name", "authentication_mode") + __slots__ = ("workspace_display_name", "user_given_name", "user_family_name", "authentication_mode", "enable_allowed_domain_join") WORKSPACE_DISPLAY_NAME_FIELD_NUMBER: _ClassVar[int] USER_GIVEN_NAME_FIELD_NUMBER: _ClassVar[int] USER_FAMILY_NAME_FIELD_NUMBER: _ClassVar[int] AUTHENTICATION_MODE_FIELD_NUMBER: _ClassVar[int] + ENABLE_ALLOWED_DOMAIN_JOIN_FIELD_NUMBER: _ClassVar[int] workspace_display_name: str user_given_name: str user_family_name: str authentication_mode: _commons_pb2.AuthenticationMode - def __init__(self, workspace_display_name: _Optional[str] = ..., user_given_name: _Optional[str] = ..., user_family_name: _Optional[str] = ..., authentication_mode: _Optional[_Union[_commons_pb2.AuthenticationMode, str]] = ...) -> None: ... + enable_allowed_domain_join: bool + def __init__(self, workspace_display_name: _Optional[str] = ..., user_given_name: _Optional[str] = ..., user_family_name: _Optional[str] = ..., authentication_mode: _Optional[_Union[_commons_pb2.AuthenticationMode, str]] = ..., enable_allowed_domain_join: bool = ...) -> None: ... class CreateWorkspaceRequest(_message.Message): __slots__ = ("workspace",) @@ -650,3 +654,45 @@ class UpdateWorkspaceContextResponse(_message.Message): CONTEXT_FIELD_NUMBER: _ClassVar[int] context: _struct_pb2.Struct def __init__(self, context: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... + +class ValidateWorkspaceDomainRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class CreateWorkspaceDomainRequest(_message.Message): + __slots__ = ("domain",) + DOMAIN_FIELD_NUMBER: _ClassVar[int] + domain: _domains_pb2.CreateDomain + def __init__(self, domain: _Optional[_Union[_domains_pb2.CreateDomain, _Mapping]] = ...) -> None: ... + +class CreateWorkspaceDomainResponse(_message.Message): + __slots__ = ("domain",) + DOMAIN_FIELD_NUMBER: _ClassVar[int] + domain: _domains_pb2.Domain + def __init__(self, domain: _Optional[_Union[_domains_pb2.Domain, _Mapping]] = ...) -> None: ... + +class ListWorkspaceDomainsRequest(_message.Message): + __slots__ = ("page_size", "page_number", "domain_type") + PAGE_SIZE_FIELD_NUMBER: _ClassVar[int] + PAGE_NUMBER_FIELD_NUMBER: _ClassVar[int] + DOMAIN_TYPE_FIELD_NUMBER: _ClassVar[int] + page_size: _wrappers_pb2.Int32Value + page_number: _wrappers_pb2.Int32Value + domain_type: _domains_pb2.DomainType + def __init__(self, page_size: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., page_number: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., domain_type: _Optional[_Union[_domains_pb2.DomainType, str]] = ...) -> None: ... + +class ListWorkspaceDomainsResponse(_message.Message): + __slots__ = ("page_size", "page_number", "domains") + PAGE_SIZE_FIELD_NUMBER: _ClassVar[int] + PAGE_NUMBER_FIELD_NUMBER: _ClassVar[int] + DOMAINS_FIELD_NUMBER: _ClassVar[int] + page_size: int + page_number: int + domains: _containers.RepeatedCompositeFieldContainer[_domains_pb2.Domain] + def __init__(self, page_size: _Optional[int] = ..., page_number: _Optional[int] = ..., domains: _Optional[_Iterable[_Union[_domains_pb2.Domain, _Mapping]]] = ...) -> None: ... + +class DeleteWorkspaceDomainRequest(_message.Message): + __slots__ = ("id",) + ID_FIELD_NUMBER: _ClassVar[int] + id: str + def __init__(self, id: _Optional[str] = ...) -> None: ... diff --git a/scalekit/v1/workspaces/workspaces_pb2_grpc.py b/scalekit/v1/workspaces/workspaces_pb2_grpc.py index 686d770..0039189 100644 --- a/scalekit/v1/workspaces/workspaces_pb2_grpc.py +++ b/scalekit/v1/workspaces/workspaces_pb2_grpc.py @@ -3,6 +3,7 @@ import grpc from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 +from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2 from scalekit.v1.workspaces import workspaces_pb2 as scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2 @@ -90,6 +91,26 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.UpdateWorkspaceContextRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.UpdateWorkspaceContextResponse.FromString, ) + self.ListWorkspaceDomains = channel.unary_unary( + '/scalekit.v1.workspaces.WorkspaceService/ListWorkspaceDomains', + request_serializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.ListWorkspaceDomainsRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.ListWorkspaceDomainsResponse.FromString, + ) + self.CreateWorkspaceDomain = channel.unary_unary( + '/scalekit.v1.workspaces.WorkspaceService/CreateWorkspaceDomain', + request_serializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.CreateWorkspaceDomainRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.CreateWorkspaceDomainResponse.FromString, + ) + self.DeleteWorkspaceDomain = channel.unary_unary( + '/scalekit.v1.workspaces.WorkspaceService/DeleteWorkspaceDomain', + request_serializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.DeleteWorkspaceDomainRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + ) + self.ValidateWorkspaceDomain = channel.unary_unary( + '/scalekit.v1.workspaces.WorkspaceService/ValidateWorkspaceDomain', + request_serializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.ValidateWorkspaceDomainRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_wrappers__pb2.BoolValue.FromString, + ) class WorkspaceServiceServicer(object): @@ -265,6 +286,30 @@ def UpdateWorkspaceContext(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def ListWorkspaceDomains(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CreateWorkspaceDomain(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DeleteWorkspaceDomain(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ValidateWorkspaceDomain(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def add_WorkspaceServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -343,6 +388,26 @@ def add_WorkspaceServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.UpdateWorkspaceContextRequest.FromString, response_serializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.UpdateWorkspaceContextResponse.SerializeToString, ), + 'ListWorkspaceDomains': grpc.unary_unary_rpc_method_handler( + servicer.ListWorkspaceDomains, + request_deserializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.ListWorkspaceDomainsRequest.FromString, + response_serializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.ListWorkspaceDomainsResponse.SerializeToString, + ), + 'CreateWorkspaceDomain': grpc.unary_unary_rpc_method_handler( + servicer.CreateWorkspaceDomain, + request_deserializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.CreateWorkspaceDomainRequest.FromString, + response_serializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.CreateWorkspaceDomainResponse.SerializeToString, + ), + 'DeleteWorkspaceDomain': grpc.unary_unary_rpc_method_handler( + servicer.DeleteWorkspaceDomain, + request_deserializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.DeleteWorkspaceDomainRequest.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), + 'ValidateWorkspaceDomain': grpc.unary_unary_rpc_method_handler( + servicer.ValidateWorkspaceDomain, + request_deserializer=scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.ValidateWorkspaceDomainRequest.FromString, + response_serializer=google_dot_protobuf_dot_wrappers__pb2.BoolValue.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'scalekit.v1.workspaces.WorkspaceService', rpc_method_handlers) @@ -607,3 +672,71 @@ def UpdateWorkspaceContext(request, scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.UpdateWorkspaceContextResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def ListWorkspaceDomains(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.workspaces.WorkspaceService/ListWorkspaceDomains', + scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.ListWorkspaceDomainsRequest.SerializeToString, + scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.ListWorkspaceDomainsResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def CreateWorkspaceDomain(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.workspaces.WorkspaceService/CreateWorkspaceDomain', + scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.CreateWorkspaceDomainRequest.SerializeToString, + scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.CreateWorkspaceDomainResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def DeleteWorkspaceDomain(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.workspaces.WorkspaceService/DeleteWorkspaceDomain', + scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.DeleteWorkspaceDomainRequest.SerializeToString, + google_dot_protobuf_dot_empty__pb2.Empty.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def ValidateWorkspaceDomain(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/scalekit.v1.workspaces.WorkspaceService/ValidateWorkspaceDomain', + scalekit_dot_v1_dot_workspaces_dot_workspaces__pb2.ValidateWorkspaceDomainRequest.SerializeToString, + google_dot_protobuf_dot_wrappers__pb2.BoolValue.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) From 62a10b913886880d50d5f0eb33343a2157e60552 Mon Sep 17 00:00:00 2001 From: Srinivas Karre Date: Tue, 12 May 2026 11:01:01 +0530 Subject: [PATCH 08/19] chore: regenerate proto stubs from local scalekit proto and add generate-local target Resets pb2 files to main baseline then regenerates using local ../scalekit proto via `buf generate ../scalekit --include-imports` to avoid GitHub clone and resolve buf/validate deps correctly. Adds generate-local Makefile target for future use. --- Makefile | 21 ++++- scalekit/v1/domains/domains_pb2.py | 87 ++++++++++--------- scalekit/v1/domains/domains_pb2.pyi | 24 ++++- scalekit/v1/domains/domains_pb2_grpc.py | 7 +- .../v1/organizations/organizations_pb2.py | 34 ++++---- 5 files changed, 110 insertions(+), 63 deletions(-) diff --git a/Makefile b/Makefile index 09ea0f6..39340eb 100644 --- a/Makefile +++ b/Makefile @@ -14,6 +14,7 @@ VENV_PIP := $(VENV_PYTHON) -m pip PROTO_REPO_URL := https://github.com/scalekit-inc/scalekit.git PROTO_REF ?= v0.1.120.2 PROTO_SUBDIR := proto +LOCAL_PROTO_REPO ?= ../scalekit TEMP_DIR := temp_scalekit SCALEKIT_DIR := scalekit @@ -22,7 +23,7 @@ GOOGLE_DIR := google PROTO_DIR := proto PROTOC_DIR := protoc_gen_openapiv2 -.PHONY: setup generate lint test tools-check create-venv prepare buf_generate restore generate_init_files cleanup copy_proto_dir +.PHONY: setup generate generate-local lint test tools-check create-venv prepare buf_generate restore generate_init_files cleanup copy_proto_dir setup: create-venv @echo "Installing SDK dependencies in $(VENV_DIR)..." @@ -99,6 +100,24 @@ cleanup: rm -rf $(GOOGLE_DIR) $(PROTO_DIR) $(PROTOC_DIR) rm -f .dirpath +generate-local: tools-check + @echo "Using local proto sources from $(LOCAL_PROTO_REPO)..." + @set -euo pipefail; \ + prepared=0; \ + rollback_if_needed() { \ + if [ "$$prepared" -eq 1 ] && [ -d "$(TEMP_DIR)" ]; then \ + echo "Generation failed; restoring $(SCALEKIT_DIR) from $(TEMP_DIR)..."; \ + rsync -a "$(TEMP_DIR)/" "$(SCALEKIT_DIR)/"; \ + fi; \ + }; \ + trap 'rollback_if_needed' EXIT; \ + $(MAKE) prepare; prepared=1; \ + buf generate $(LOCAL_PROTO_REPO) --include-imports; \ + $(MAKE) restore; prepared=0; \ + $(MAKE) generate_init_files; \ + $(MAKE) cleanup + @echo "Code generation complete." + lint: create-venv @echo "Running static checks..." $(VENV_PYTHON) -m compileall -q scalekit tests diff --git a/scalekit/v1/domains/domains_pb2.py b/scalekit/v1/domains/domains_pb2.py index ecf61ce..28419b3 100644 --- a/scalekit/v1/domains/domains_pb2.py +++ b/scalekit/v1/domains/domains_pb2.py @@ -17,13 +17,14 @@ from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2 from google.api import visibility_pb2 as google_dot_api_dot_visibility__pb2 from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 +from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2 from protoc_gen_openapiv2.options import annotations_pb2 as protoc__gen__openapiv2_dot_options_dot_annotations__pb2 from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/domains/domains.proto\x12\x13scalekit.v1.domains\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\x8a\x06\n\x13\x43reateDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\xba\x01\n\rconnection_id\x18\x03 \x01(\tB\x8f\x01\x92\x41}2iOptional identity provider connection ID to associate with this domain for enterprise SSO configurations.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12x\n\x06\x64omain\x18\x04 \x01(\x0b\x32!.scalekit.v1.domains.CreateDomainB=\x92\x41:28Domain configuration including the domain name and type.R\x06\x64omainB\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\xb3\x01\n\x14\x43reateDomainResponse\x12\x9a\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBe\x92\x41\x62\x32`The newly created domain object with all configuration details and system-generated identifiers.R\x06\x64omain\"\xe6\x04\n\x0c\x43reateDomain\x12\xf6\x01\n\x06\x64omain\x18\x01 \x01(\tB\xdd\x01\x92\x41\xcc\x01\x32\xb3\x01The domain name to be configured. Must be a valid business domain you control. Public and disposable domains (gmail.com, outlook.com, etc.) are automatically blocked for security.J\x14\"customerdomain.com\"\xbaH\nr\x05\x10\x04\x18\xff\x01\xc8\x01\x01R\x06\x64omain\x12\xdc\x02\n\x0b\x64omain_type\x18\x02 \x01(\x0e\x32\x1f.scalekit.v1.domains.DomainTypeB\x99\x02\x92\x41\x95\x02\x32\xfb\x01The domain type.\n- ALLOWED_EMAIL_DOMAIN: trusted domain used to suggest the organization in the organization switcher during sign-in/sign-up.\n- ORGANIZATION_DOMAIN: SSO discovery domain used to route users to the correct SSO provider and enforce SSO.\nJ\x15\"ORGANIZATION_DOMAIN\"R\ndomainType\"\x84\x07\n\x13UpdateDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x9f\x01\n\rconnection_id\x18\x03 \x01(\tBu\x92\x41\x63\x32OOptional updated identity provider connection ID to associate with this domain.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12o\n\x02id\x18\x04 \x01(\tB_\x92\x41\\2AScalekit-generated unique identifier of the domain to be updated.J\x17\"dom_88351643129225005\"R\x02id\x12\x9b\x01\n\x06\x64omain\x18\x05 \x01(\x0b\x32!.scalekit.v1.domains.UpdateDomainB`\x92\x41]2[Domain update configuration. Currently empty as domain name cannot be changed once created.R\x06\x64omainB\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\x0e\n\x0cUpdateDomain\"\xa5\x01\n\x14UpdateDomainResponse\x12\x8c\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBW\x92\x41T2RThe updated domain object reflecting all changes made to the domain configuration.R\x06\x64omain\"\xad\x04\n\x10GetDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12m\n\x02id\x18\x03 \x01(\tB]\x92\x41Z2?Scalekit-generated unique identifier of the domain to retrieve.J\x17\"dom_88351643129225005\"R\x02idB\x0c\n\nidentities\"\xb6\x01\n\x11GetDomainResponse\x12\xa0\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBk\x92\x41h2fThe requested domain object with complete details including domain type, timestamps and configuration.R\x06\x64omain\"\xeb\x05\n\x13\x44\x65leteDomainRequest\x12{\n\x02id\x18\x01 \x01(\tBk\x92\x41h2MScalekit-generated unique identifier of the domain to be permanently deleted.J\x17\"dom_88351643129225005\"R\x02id\x12\xcb\x01\n\x0forganization_id\x18\x02 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x03 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x98\x01\n\rconnection_id\x18\x04 \x01(\tBn\x92\x41\\2HOptional connection ID for additional validation during domain deletion.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x42\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\xac\x0b\n\x11ListDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\xa8\x01\n\rconnection_id\x18\x03 \x01(\tB~\x92\x41l2XOptional filter to list domains associated with a specific identity provider connection.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12\xab\x01\n\x07include\x18\x04 \x01(\tB\x8b\x01\x92\x41\x87\x01\x32mOptional comma-separated list of additional fields to include in the response (e.g., \'verification_details\').J\x16\"verification_details\"H\x02R\x07include\x88\x01\x01\x12\x8f\x01\n\tpage_size\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueBU\x92\x41R2LMaximum number of domains to return per page. Default is 30, maximum is 100.J\x02\x33\x30R\x08pageSize\x12\x82\x01\n\x0bpage_number\x18\x06 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueBD\x92\x41\x41\x3224/api/v1/organizations/{organization_id}/domains/{id}:\x06\x64omain\x12\xff\x06\n\x0cVerifyDomain\x12(.scalekit.v1.domains.VerifyDomainRequest\x1a\x1a.google.protobuf.BoolValue\"\xa8\x06\x92\x41\xb7\x05\n\x07\x44omains\x12\rVerify Domain\x1a\x9e\x04Initiates domain ownership verification by checking the DNS TXT record that should be added to the domain\'s DNS configuration.\n\nUse this endpoint to manually trigger verification for domains that are in PENDING status. The system will check for the required TXT record and update the verification status accordingly.\n\nFor automatically verified domains, this endpoint will return true immediately. For domains requiring manual verification, ensure the TXT record has been properly configured in your DNS settings before calling this endpoint.J|\n\x03\x32\x30\x30\x12u\nSDomain verification result. Returns true if verification succeeds, false otherwise.\x12\x1e\n\x1c\x1a\x1a.google.protobuf.BoolValue\x82\xb5\x18\x17\n\x13organizations_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02=2;/api/v1/organizations/{organization_id}/domains/{id}:verify\x12\x9a\x03\n\tGetDomain\x12%.scalekit.v1.domains.GetDomainRequest\x1a&.scalekit.v1.domains.GetDomainResponse\"\xbd\x02\x92\x41\xe3\x01\n\x07\x44omains\x12\nGet Domain\x1akRetrieves complete details for a domain including domain type, timestamps, and configuration information.\n\nJ_\n\x03\x32\x30\x30\x12X\n*Successfully retrieved the domain details.\x12*\n(\x1a&.scalekit.v1.domains.GetDomainResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x36\x12\x34/api/v1/organizations/{organization_id}/domains/{id}\x12\xe4\x03\n\x0c\x44\x65leteDomain\x12(.scalekit.v1.domains.DeleteDomainRequest\x1a\x16.google.protobuf.Empty\"\x91\x03\x92\x41\xb6\x02\n\x07\x44omains\x12\rDelete Domain\x1a\xf4\x01Permanently removes a domain record from an organization.\n\n- Deleting an ORGANIZATION_DOMAIN disables SSO routing/enforcement for that domain.\n- Deleting an ALLOWED_EMAIL_DOMAIN stops organization suggestions for users with that email domain.\n\nJ%\n\x03\x32\x30\x30\x12\x1e\n\x1c\x44omain successfully deleted.\x82\xb5\x18\x17\n\x13organizations_write\x18t\x82\xd3\xe4\x93\x02\x36*4/api/v1/organizations/{organization_id}/domains/{id}\x12\x9b\x05\n\x0bListDomains\x12&.scalekit.v1.domains.ListDomainRequest\x1a\'.scalekit.v1.domains.ListDomainResponse\"\xba\x04\x92\x41\xe5\x03\n\x07\x44omains\x12\x0cList Domains\x1a\xe8\x02Retrieves a paginated list of all domains configured for the specified organization.\n\nDomain types:\n- ALLOWED_EMAIL_DOMAIN: Trusted domains used to suggest the organization in the organization switcher during sign-in/sign-up (auth-method agnostic).\n- ORGANIZATION_DOMAIN: SSO discovery domains used to route users to the correct SSO provider and enforce SSO.\n\nJa\n\x03\x32\x30\x30\x12Z\n+Successfully retrieved the list of domains.\x12+\n)\x1a\'.scalekit.v1.domains.ListDomainResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x31\x12//api/v1/organizations/{organization_id}/domains\x12\x90\x05\n\x15ListAuthorizedDomains\x12\x30.scalekit.v1.domains.ListAuthorizedDomainRequest\x1a\x31.scalekit.v1.domains.ListAuthorizedDomainResponse\"\x91\x04\x92\x41\xd8\x03\n\x07\x44omains\x12\x17List Authorized Domains\x1a\xbb\x02Retrieves a list of domains that are authorized for use with the specified origin URL.\n\nUse this endpoint to validate whether a particular domain is allowed for authentication or other domain-restricted operations.\n\nThis is commonly used by frontend applications to verify domain allowlists and CORS configurations.Jv\n\x03\x32\x30\x30\x12o\n6Successfully retrieved the list of authorized domains.\x12\x35\n3\x1a\x31.scalekit.v1.domains.ListAuthorizedDomainResponse\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1a\x12\x18/api/v1/domains/{origin}\x1a\xf8\x03\x92\x41\xf4\x03\n\x07\x44omains\x12\xe8\x03Manage organization-level domains. Scalekit supports two domain types:\n\n- ORGANIZATION_DOMAIN: Used for SSO domain discovery. When a user signs in with a matching email domain, Scalekit routes them to the organization\xe2\x80\x99s SSO provider and enforces SSO.\n- ALLOWED_EMAIL_DOMAIN: Used to mark trusted email domains for an organization. When a user signs in or signs up with a matching domain, Scalekit suggests the organization in the organization switcher (authentication-method agnostic).\nB3Z1github.com/scalekit-inc/scalekit/pkg/grpc/domainsb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!scalekit/v1/domains/domains.proto\x12\x13scalekit.v1.domains\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\x8a\x06\n\x13\x43reateDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\xba\x01\n\rconnection_id\x18\x03 \x01(\tB\x8f\x01\x92\x41}2iOptional identity provider connection ID to associate with this domain for enterprise SSO configurations.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12x\n\x06\x64omain\x18\x04 \x01(\x0b\x32!.scalekit.v1.domains.CreateDomainB=\x92\x41:28Domain configuration including the domain name and type.R\x06\x64omainB\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\xb3\x01\n\x14\x43reateDomainResponse\x12\x9a\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBe\x92\x41\x62\x32`The newly created domain object with all configuration details and system-generated identifiers.R\x06\x64omain\"\xe6\x04\n\x0c\x43reateDomain\x12\xf6\x01\n\x06\x64omain\x18\x01 \x01(\tB\xdd\x01\x92\x41\xcc\x01\x32\xb3\x01The domain name to be configured. Must be a valid business domain you control. Public and disposable domains (gmail.com, outlook.com, etc.) are automatically blocked for security.J\x14\"customerdomain.com\"\xbaH\nr\x05\x10\x04\x18\xff\x01\xc8\x01\x01R\x06\x64omain\x12\xdc\x02\n\x0b\x64omain_type\x18\x02 \x01(\x0e\x32\x1f.scalekit.v1.domains.DomainTypeB\x99\x02\x92\x41\x95\x02\x32\xfb\x01The domain type.\n- ALLOWED_EMAIL_DOMAIN: trusted domain used to suggest the organization in the organization switcher during sign-in/sign-up.\n- ORGANIZATION_DOMAIN: SSO discovery domain used to route users to the correct SSO provider and enforce SSO.\nJ\x15\"ORGANIZATION_DOMAIN\"R\ndomainType\"\x84\x07\n\x13UpdateDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x9f\x01\n\rconnection_id\x18\x03 \x01(\tBu\x92\x41\x63\x32OOptional updated identity provider connection ID to associate with this domain.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12o\n\x02id\x18\x04 \x01(\tB_\x92\x41\\2AScalekit-generated unique identifier of the domain to be updated.J\x17\"dom_88351643129225005\"R\x02id\x12\x9b\x01\n\x06\x64omain\x18\x05 \x01(\x0b\x32!.scalekit.v1.domains.UpdateDomainB`\x92\x41]2[Domain update configuration. Currently empty as domain name cannot be changed once created.R\x06\x64omainB\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\x0e\n\x0cUpdateDomain\"\xa5\x01\n\x14UpdateDomainResponse\x12\x8c\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBW\x92\x41T2RThe updated domain object reflecting all changes made to the domain configuration.R\x06\x64omain\"\xad\x04\n\x10GetDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12m\n\x02id\x18\x03 \x01(\tB]\x92\x41Z2?Scalekit-generated unique identifier of the domain to retrieve.J\x17\"dom_88351643129225005\"R\x02idB\x0c\n\nidentities\"\xb6\x01\n\x11GetDomainResponse\x12\xa0\x01\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1b.scalekit.v1.domains.DomainBk\x92\x41h2fThe requested domain object with complete details including domain type, timestamps and configuration.R\x06\x64omain\"\xeb\x05\n\x13\x44\x65leteDomainRequest\x12{\n\x02id\x18\x01 \x01(\tBk\x92\x41h2MScalekit-generated unique identifier of the domain to be permanently deleted.J\x17\"dom_88351643129225005\"R\x02id\x12\xcb\x01\n\x0forganization_id\x18\x02 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x03 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x98\x01\n\rconnection_id\x18\x04 \x01(\tBn\x92\x41\\2HOptional connection ID for additional validation during domain deletion.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x42\x0c\n\nidentitiesB\x10\n\x0e_connection_id\"\xac\x0b\n\x11ListDomainRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x92\x01\x32wScalekit-generated unique identifier for the organization. Use either this or external_id to identify the organization.J\x17\"org_81667076086825451\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x12\xcd\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xa9\x01\x92\x41\x8d\x01\x32{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\x0e\"tenant_12345\"\xbaH\x06r\x04\x10\x01\x18 \xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\xa8\x01\n\rconnection_id\x18\x03 \x01(\tB~\x92\x41l2XOptional filter to list domains associated with a specific identity provider connection.J\x10\"conn_123456789\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x0c\x63onnectionId\x88\x01\x01\x12\xab\x01\n\x07include\x18\x04 \x01(\tB\x8b\x01\x92\x41\x87\x01\x32mOptional comma-separated list of additional fields to include in the response (e.g., \'verification_details\').J\x16\"verification_details\"H\x02R\x07include\x88\x01\x01\x12\x8f\x01\n\tpage_size\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueBU\x92\x41R2LMaximum number of domains to return per page. Default is 30, maximum is 100.J\x02\x33\x30R\x08pageSize\x12\x82\x01\n\x0bpage_number\x18\x06 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueBD\x92\x41\x41\x3224/api/v1/organizations/{organization_id}/domains/{id}:\x06\x64omain\x12\xa6\x07\n\x0cVerifyDomain\x12(.scalekit.v1.domains.VerifyDomainRequest\x1a).scalekit.v1.domains.VerifyDomainResponse\"\xc0\x06\x92\x41\xcf\x05\n\x07\x44omains\x12\rVerify Domain\x1a\x9e\x04Initiates domain ownership verification by checking the DNS TXT record that should be added to the domain\'s DNS configuration.\n\nUse this endpoint to manually trigger verification for domains that are in PENDING status. The system will check for the required TXT record and update the verification status accordingly.\n\nFor automatically verified domains, this endpoint will return true immediately. For domains requiring manual verification, ensure the TXT record has been properly configured in your DNS settings before calling this endpoint.J\x93\x01\n\x03\x32\x30\x30\x12\x8b\x01\nZDomain verification result. `verified` is true if verification succeeded, false otherwise.\x12-\n+\x1a).scalekit.v1.domains.VerifyDomainResponse\x82\xb5\x18\x17\n\x13organizations_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02=2;/api/v1/organizations/{organization_id}/domains/{id}:verify\x12\x9a\x03\n\tGetDomain\x12%.scalekit.v1.domains.GetDomainRequest\x1a&.scalekit.v1.domains.GetDomainResponse\"\xbd\x02\x92\x41\xe3\x01\n\x07\x44omains\x12\nGet Domain\x1akRetrieves complete details for a domain including domain type, timestamps, and configuration information.\n\nJ_\n\x03\x32\x30\x30\x12X\n*Successfully retrieved the domain details.\x12*\n(\x1a&.scalekit.v1.domains.GetDomainResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x36\x12\x34/api/v1/organizations/{organization_id}/domains/{id}\x12\xe4\x03\n\x0c\x44\x65leteDomain\x12(.scalekit.v1.domains.DeleteDomainRequest\x1a\x16.google.protobuf.Empty\"\x91\x03\x92\x41\xb6\x02\n\x07\x44omains\x12\rDelete Domain\x1a\xf4\x01Permanently removes a domain record from an organization.\n\n- Deleting an ORGANIZATION_DOMAIN disables SSO routing/enforcement for that domain.\n- Deleting an ALLOWED_EMAIL_DOMAIN stops organization suggestions for users with that email domain.\n\nJ%\n\x03\x32\x30\x30\x12\x1e\n\x1c\x44omain successfully deleted.\x82\xb5\x18\x17\n\x13organizations_write\x18t\x82\xd3\xe4\x93\x02\x36*4/api/v1/organizations/{organization_id}/domains/{id}\x12\x9b\x05\n\x0bListDomains\x12&.scalekit.v1.domains.ListDomainRequest\x1a\'.scalekit.v1.domains.ListDomainResponse\"\xba\x04\x92\x41\xe5\x03\n\x07\x44omains\x12\x0cList Domains\x1a\xe8\x02Retrieves a paginated list of all domains configured for the specified organization.\n\nDomain types:\n- ALLOWED_EMAIL_DOMAIN: Trusted domains used to suggest the organization in the organization switcher during sign-in/sign-up (auth-method agnostic).\n- ORGANIZATION_DOMAIN: SSO discovery domains used to route users to the correct SSO provider and enforce SSO.\n\nJa\n\x03\x32\x30\x30\x12Z\n+Successfully retrieved the list of domains.\x12+\n)\x1a\'.scalekit.v1.domains.ListDomainResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x31\x12//api/v1/organizations/{organization_id}/domains\x12\x90\x05\n\x15ListAuthorizedDomains\x12\x30.scalekit.v1.domains.ListAuthorizedDomainRequest\x1a\x31.scalekit.v1.domains.ListAuthorizedDomainResponse\"\x91\x04\x92\x41\xd8\x03\n\x07\x44omains\x12\x17List Authorized Domains\x1a\xbb\x02Retrieves a list of domains that are authorized for use with the specified origin URL.\n\nUse this endpoint to validate whether a particular domain is allowed for authentication or other domain-restricted operations.\n\nThis is commonly used by frontend applications to verify domain allowlists and CORS configurations.Jv\n\x03\x32\x30\x30\x12o\n6Successfully retrieved the list of authorized domains.\x12\x35\n3\x1a\x31.scalekit.v1.domains.ListAuthorizedDomainResponse\x82\xb5\x18\x02\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1a\x12\x18/api/v1/domains/{origin}\x1a\xf8\x03\x92\x41\xf4\x03\n\x07\x44omains\x12\xe8\x03Manage organization-level domains. Scalekit supports two domain types:\n\n- ORGANIZATION_DOMAIN: Used for SSO domain discovery. When a user signs in with a matching email domain, Scalekit routes them to the organization\xe2\x80\x99s SSO provider and enforces SSO.\n- ALLOWED_EMAIL_DOMAIN: Used to mark trusted email domains for an organization. When a user signs in or signs up with a matching domain, Scalekit suggests the organization in the organization switcher (authentication-method agnostic).\nB3Z1github.com/scalekit-inc/scalekit/pkg/grpc/domainsb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -93,6 +94,8 @@ _globals['_VERIFYDOMAINREQUEST'].fields_by_name['external_id']._serialized_options = b'\222A\215\0012{Your application\'s unique identifier for the organization. Alternative to organization_id for identifying the organization.J\016\"tenant_12345\"\272H\006r\004\020\001\030 \372\322\344\223\002\t\022\007PREVIEW' _globals['_VERIFYDOMAINREQUEST'].fields_by_name['id']._loaded_options = None _globals['_VERIFYDOMAINREQUEST'].fields_by_name['id']._serialized_options = b'\222Aw2\\Scalekit-generated unique identifier of the domain to verify. Must start with \'dom_\' prefix.J\027\"dom_88351643129225005\"\272H\013r\t\020\001\030 :\003dom' + _globals['_VERIFYDOMAINRESPONSE'].fields_by_name['verified']._loaded_options = None + _globals['_VERIFYDOMAINRESPONSE'].fields_by_name['verified']._serialized_options = b'\222A\244\0012\241\001True when the domain\'s DNS TXT record matched and the domain is now verified; false otherwise (e.g., TXT record missing, domain not found, verification pending).' _globals['_LISTDOMAINRESPONSE'].fields_by_name['page_size']._loaded_options = None _globals['_LISTDOMAINRESPONSE'].fields_by_name['page_size']._serialized_options = b'\222A-2(Number of domains returned in this page.J\0011' _globals['_LISTDOMAINRESPONSE'].fields_by_name['page_number']._loaded_options = None @@ -118,13 +121,15 @@ _globals['_DOMAIN'].fields_by_name['txt_record_secret']._loaded_options = None _globals['_DOMAIN'].fields_by_name['txt_record_secret']._serialized_options = b'\222Aj2IThe DNS TXT record value that should be added to verify domain ownership.J\035\"scalekit-verification-value\"\372\322\344\223\002\t\022\007PREVIEW' _globals['_DOMAIN'].fields_by_name['verification_status']._loaded_options = None - _globals['_DOMAIN'].fields_by_name['verification_status']._serialized_options = b'\222A\355\0012\331\001Current verification status of the domain. AUTO_VERIFIED means the domain was automatically verified without DNS changes, VERIFIED means manually verified via DNS TXT record, PENDING requires manual DNS configuration.J\017\"AUTO_VERIFIED\"\372\322\344\223\002\t\022\007PREVIEW' + _globals['_DOMAIN'].fields_by_name['verification_status']._serialized_options = b'\222A\271\0022\245\002Current verification status of the domain. AUTO_VERIFIED means the domain was automatically verified without DNS changes, VERIFIED means the domain is verified \342\200\224 either via DNS TXT record validation or by an admin explicitly marking it as verified, PENDING requires manual DNS configuration.J\017\"AUTO_VERIFIED\"' _globals['_DOMAIN'].fields_by_name['create_time']._loaded_options = None _globals['_DOMAIN'].fields_by_name['create_time']._serialized_options = b'\222AJ2,Timestamp when the domain was first created.J\032\"2025-09-01T12:14:43.100Z\"' _globals['_DOMAIN'].fields_by_name['update_time']._loaded_options = None _globals['_DOMAIN'].fields_by_name['update_time']._serialized_options = b'\222AO2+Timestamp when the domain was last updated.J \"2025-09-01T12:14:43.110455169Z\"' _globals['_DOMAIN'].fields_by_name['domain_type']._loaded_options = None _globals['_DOMAIN'].fields_by_name['domain_type']._serialized_options = b'\222A\362\0012\330\001The type of domain configuration. ALLOWED_EMAIL_DOMAIN enables automatic organization suggestions for users with matching email domains during sign-in/sign-up. ORGANIZATION_DOMAIN is for primary organization domains.J\025\"ORGANIZATION_DOMAIN\"' + _globals['_DOMAIN'].fields_by_name['verification_method']._loaded_options = None + _globals['_DOMAIN'].fields_by_name['verification_method']._serialized_options = b'\222A\360\0012\344\001Method used to verify domain ownership. ADMIN indicates that the domain is considered verified without requiring any DNS-based validation. DNS indicates that the domain must be verified by adding and validating a DNS TXT record.J\007\"ADMIN\"' _globals['_DOMAINSERVICE']._loaded_options = None _globals['_DOMAINSERVICE']._serialized_options = b'\222A\364\003\n\007Domains\022\350\003Manage organization-level domains. Scalekit supports two domain types:\n\n- ORGANIZATION_DOMAIN: Used for SSO domain discovery. When a user signs in with a matching email domain, Scalekit routes them to the organization\342\200\231s SSO provider and enforces SSO.\n- ALLOWED_EMAIL_DOMAIN: Used to mark trusted email domains for an organization. When a user signs in or signs up with a matching domain, Scalekit suggests the organization in the organization switcher (authentication-method agnostic).\n' _globals['_DOMAINSERVICE'].methods_by_name['CreateDomain']._loaded_options = None @@ -132,7 +137,7 @@ _globals['_DOMAINSERVICE'].methods_by_name['UpdateDomain']._loaded_options = None _globals['_DOMAINSERVICE'].methods_by_name['UpdateDomain']._serialized_options = b'\222A\226\004\n\007Domains\022\rUpdate Domain\032\241\003Updates an existing domain\'s configuration within an organization. Currently supports updating domain metadata and configuration settings.\n\nUse this endpoint to modify domain properties after initial creation. Note that the domain name itself cannot be changed once created.\n\nThe domain must belong to the specified organization and you must provide either the organization ID or external ID along with the domain ID.JX\n\003200\022Q\n Successfully updated the domain.\022-\n+\032).scalekit.v1.domains.UpdateDomainResponse\202\265\030\027\n\023organizations_write\030t\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002>24/api/v1/organizations/{organization_id}/domains/{id}:\006domain' _globals['_DOMAINSERVICE'].methods_by_name['VerifyDomain']._loaded_options = None - _globals['_DOMAINSERVICE'].methods_by_name['VerifyDomain']._serialized_options = b'\222A\267\005\n\007Domains\022\rVerify Domain\032\236\004Initiates domain ownership verification by checking the DNS TXT record that should be added to the domain\'s DNS configuration.\n\nUse this endpoint to manually trigger verification for domains that are in PENDING status. The system will check for the required TXT record and update the verification status accordingly.\n\nFor automatically verified domains, this endpoint will return true immediately. For domains requiring manual verification, ensure the TXT record has been properly configured in your DNS settings before calling this endpoint.J|\n\003200\022u\nSDomain verification result. Returns true if verification succeeds, false otherwise.\022\036\n\034\032\032.google.protobuf.BoolValue\202\265\030\027\n\023organizations_write\030t\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002=2;/api/v1/organizations/{organization_id}/domains/{id}:verify' + _globals['_DOMAINSERVICE'].methods_by_name['VerifyDomain']._serialized_options = b'\222A\317\005\n\007Domains\022\rVerify Domain\032\236\004Initiates domain ownership verification by checking the DNS TXT record that should be added to the domain\'s DNS configuration.\n\nUse this endpoint to manually trigger verification for domains that are in PENDING status. The system will check for the required TXT record and update the verification status accordingly.\n\nFor automatically verified domains, this endpoint will return true immediately. For domains requiring manual verification, ensure the TXT record has been properly configured in your DNS settings before calling this endpoint.J\223\001\n\003200\022\213\001\nZDomain verification result. `verified` is true if verification succeeded, false otherwise.\022-\n+\032).scalekit.v1.domains.VerifyDomainResponse\202\265\030\027\n\023organizations_write\030t\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002=2;/api/v1/organizations/{organization_id}/domains/{id}:verify' _globals['_DOMAINSERVICE'].methods_by_name['GetDomain']._loaded_options = None _globals['_DOMAINSERVICE'].methods_by_name['GetDomain']._serialized_options = b'\222A\343\001\n\007Domains\022\nGet Domain\032kRetrieves complete details for a domain including domain type, timestamps, and configuration information.\n\nJ_\n\003200\022X\n*Successfully retrieved the domain details.\022*\n(\032&.scalekit.v1.domains.GetDomainResponse\202\265\030\026\n\022organizations_read\030t\202\323\344\223\0026\0224/api/v1/organizations/{organization_id}/domains/{id}' _globals['_DOMAINSERVICE'].methods_by_name['DeleteDomain']._loaded_options = None @@ -141,40 +146,44 @@ _globals['_DOMAINSERVICE'].methods_by_name['ListDomains']._serialized_options = b'\222A\345\003\n\007Domains\022\014List Domains\032\350\002Retrieves a paginated list of all domains configured for the specified organization.\n\nDomain types:\n- ALLOWED_EMAIL_DOMAIN: Trusted domains used to suggest the organization in the organization switcher during sign-in/sign-up (auth-method agnostic).\n- ORGANIZATION_DOMAIN: SSO discovery domains used to route users to the correct SSO provider and enforce SSO.\n\nJa\n\003200\022Z\n+Successfully retrieved the list of domains.\022+\n)\032\'.scalekit.v1.domains.ListDomainResponse\202\265\030\026\n\022organizations_read\030t\202\323\344\223\0021\022//api/v1/organizations/{organization_id}/domains' _globals['_DOMAINSERVICE'].methods_by_name['ListAuthorizedDomains']._loaded_options = None _globals['_DOMAINSERVICE'].methods_by_name['ListAuthorizedDomains']._serialized_options = b'\222A\330\003\n\007Domains\022\027List Authorized Domains\032\273\002Retrieves a list of domains that are authorized for use with the specified origin URL.\n\nUse this endpoint to validate whether a particular domain is allowed for authentication or other domain-restricted operations.\n\nThis is commonly used by frontend applications to verify domain allowlists and CORS configurations.Jv\n\003200\022o\n6Successfully retrieved the list of authorized domains.\0225\n3\0321.scalekit.v1.domains.ListAuthorizedDomainResponse\202\265\030\002\030\001\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\032\022\030/api/v1/domains/{origin}' - _globals['_VERIFICATIONSTATUS']._serialized_start=9391 - _globals['_VERIFICATIONSTATUS']._serialized_end=9506 - _globals['_DOMAINTYPE']._serialized_start=9508 - _globals['_DOMAINTYPE']._serialized_end=9600 - _globals['_CREATEDOMAINREQUEST']._serialized_start=357 - _globals['_CREATEDOMAINREQUEST']._serialized_end=1135 - _globals['_CREATEDOMAINRESPONSE']._serialized_start=1138 - _globals['_CREATEDOMAINRESPONSE']._serialized_end=1317 - _globals['_CREATEDOMAIN']._serialized_start=1320 - _globals['_CREATEDOMAIN']._serialized_end=1934 - _globals['_UPDATEDOMAINREQUEST']._serialized_start=1937 - _globals['_UPDATEDOMAINREQUEST']._serialized_end=2837 - _globals['_UPDATEDOMAIN']._serialized_start=2839 - _globals['_UPDATEDOMAIN']._serialized_end=2853 - _globals['_UPDATEDOMAINRESPONSE']._serialized_start=2856 - _globals['_UPDATEDOMAINRESPONSE']._serialized_end=3021 - _globals['_GETDOMAINREQUEST']._serialized_start=3024 - _globals['_GETDOMAINREQUEST']._serialized_end=3581 - _globals['_GETDOMAINRESPONSE']._serialized_start=3584 - _globals['_GETDOMAINRESPONSE']._serialized_end=3766 - _globals['_DELETEDOMAINREQUEST']._serialized_start=3769 - _globals['_DELETEDOMAINREQUEST']._serialized_end=4516 - _globals['_LISTDOMAINREQUEST']._serialized_start=4519 - _globals['_LISTDOMAINREQUEST']._serialized_end=5971 - _globals['_VERIFYDOMAINREQUEST']._serialized_start=5974 - _globals['_VERIFYDOMAINREQUEST']._serialized_end=6579 - _globals['_LISTDOMAINRESPONSE']._serialized_start=6582 - _globals['_LISTDOMAINRESPONSE']._serialized_end=6936 - _globals['_LISTAUTHORIZEDDOMAINREQUEST']._serialized_start=6939 - _globals['_LISTAUTHORIZEDDOMAINREQUEST']._serialized_end=7361 - _globals['_LISTAUTHORIZEDDOMAINRESPONSE']._serialized_start=7364 - _globals['_LISTAUTHORIZEDDOMAINRESPONSE']._serialized_end=7540 - _globals['_DOMAIN']._serialized_start=7543 - _globals['_DOMAIN']._serialized_end=9389 - _globals['_DOMAINSERVICE']._serialized_start=9603 - _globals['_DOMAINSERVICE']._serialized_end=15049 + _globals['_VERIFICATIONMETHOD']._serialized_start=10045 + _globals['_VERIFICATIONMETHOD']._serialized_end=10142 + _globals['_VERIFICATIONSTATUS']._serialized_start=10144 + _globals['_VERIFICATIONSTATUS']._serialized_end=10259 + _globals['_DOMAINTYPE']._serialized_start=10261 + _globals['_DOMAINTYPE']._serialized_end=10353 + _globals['_CREATEDOMAINREQUEST']._serialized_start=387 + _globals['_CREATEDOMAINREQUEST']._serialized_end=1165 + _globals['_CREATEDOMAINRESPONSE']._serialized_start=1168 + _globals['_CREATEDOMAINRESPONSE']._serialized_end=1347 + _globals['_CREATEDOMAIN']._serialized_start=1350 + _globals['_CREATEDOMAIN']._serialized_end=1964 + _globals['_UPDATEDOMAINREQUEST']._serialized_start=1967 + _globals['_UPDATEDOMAINREQUEST']._serialized_end=2867 + _globals['_UPDATEDOMAIN']._serialized_start=2869 + _globals['_UPDATEDOMAIN']._serialized_end=2883 + _globals['_UPDATEDOMAINRESPONSE']._serialized_start=2886 + _globals['_UPDATEDOMAINRESPONSE']._serialized_end=3051 + _globals['_GETDOMAINREQUEST']._serialized_start=3054 + _globals['_GETDOMAINREQUEST']._serialized_end=3611 + _globals['_GETDOMAINRESPONSE']._serialized_start=3614 + _globals['_GETDOMAINRESPONSE']._serialized_end=3796 + _globals['_DELETEDOMAINREQUEST']._serialized_start=3799 + _globals['_DELETEDOMAINREQUEST']._serialized_end=4546 + _globals['_LISTDOMAINREQUEST']._serialized_start=4549 + _globals['_LISTDOMAINREQUEST']._serialized_end=6001 + _globals['_VERIFYDOMAINREQUEST']._serialized_start=6004 + _globals['_VERIFYDOMAINREQUEST']._serialized_end=6609 + _globals['_VERIFYDOMAINRESPONSE']._serialized_start=6612 + _globals['_VERIFYDOMAINRESPONSE']._serialized_end=6834 + _globals['_LISTDOMAINRESPONSE']._serialized_start=6837 + _globals['_LISTDOMAINRESPONSE']._serialized_end=7191 + _globals['_LISTAUTHORIZEDDOMAINREQUEST']._serialized_start=7194 + _globals['_LISTAUTHORIZEDDOMAINREQUEST']._serialized_end=7616 + _globals['_LISTAUTHORIZEDDOMAINRESPONSE']._serialized_start=7619 + _globals['_LISTAUTHORIZEDDOMAINRESPONSE']._serialized_end=7795 + _globals['_DOMAIN']._serialized_start=7798 + _globals['_DOMAIN']._serialized_end=10043 + _globals['_DOMAINSERVICE']._serialized_start=10356 + _globals['_DOMAINSERVICE']._serialized_end=15841 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/domains/domains_pb2.pyi b/scalekit/v1/domains/domains_pb2.pyi index eb10967..b1d16f9 100644 --- a/scalekit/v1/domains/domains_pb2.pyi +++ b/scalekit/v1/domains/domains_pb2.pyi @@ -3,6 +3,7 @@ from google.api import annotations_pb2 as _annotations_pb2 from google.api import field_behavior_pb2 as _field_behavior_pb2 from google.api import visibility_pb2 as _visibility_pb2 from google.protobuf import empty_pb2 as _empty_pb2 +from google.protobuf import struct_pb2 as _struct_pb2 from google.protobuf import timestamp_pb2 as _timestamp_pb2 from google.protobuf import wrappers_pb2 as _wrappers_pb2 from protoc_gen_openapiv2.options import annotations_pb2 as _annotations_pb2_1 @@ -15,6 +16,13 @@ from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Map DESCRIPTOR: _descriptor.FileDescriptor +class VerificationMethod(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + VERIFICATION_METHOD_UNSPECIFIED: _ClassVar[VerificationMethod] + ADMIN: _ClassVar[VerificationMethod] + DNS: _ClassVar[VerificationMethod] + NOT_APPLICABLE: _ClassVar[VerificationMethod] + class VerificationStatus(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): __slots__ = () VERIFICATION_STATUS_UNSPECIFIED: _ClassVar[VerificationStatus] @@ -28,6 +36,10 @@ class DomainType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): DOMAIN_TYPE_UNSPECIFIED: _ClassVar[DomainType] ALLOWED_EMAIL_DOMAIN: _ClassVar[DomainType] ORGANIZATION_DOMAIN: _ClassVar[DomainType] +VERIFICATION_METHOD_UNSPECIFIED: VerificationMethod +ADMIN: VerificationMethod +DNS: VerificationMethod +NOT_APPLICABLE: VerificationMethod VERIFICATION_STATUS_UNSPECIFIED: VerificationStatus PENDING: VerificationStatus VERIFIED: VerificationStatus @@ -143,6 +155,12 @@ class VerifyDomainRequest(_message.Message): id: str def __init__(self, organization_id: _Optional[str] = ..., external_id: _Optional[str] = ..., id: _Optional[str] = ...) -> None: ... +class VerifyDomainResponse(_message.Message): + __slots__ = ("verified",) + VERIFIED_FIELD_NUMBER: _ClassVar[int] + verified: bool + def __init__(self, verified: bool = ...) -> None: ... + class ListDomainResponse(_message.Message): __slots__ = ("page_size", "page_number", "domains") PAGE_SIZE_FIELD_NUMBER: _ClassVar[int] @@ -168,7 +186,7 @@ class ListAuthorizedDomainResponse(_message.Message): def __init__(self, domains: _Optional[_Iterable[str]] = ...) -> None: ... class Domain(_message.Message): - __slots__ = ("id", "domain", "environment_id", "organization_id", "txt_record_key", "txt_record_secret", "verification_status", "create_time", "update_time", "domain_type") + __slots__ = ("id", "domain", "environment_id", "organization_id", "txt_record_key", "txt_record_secret", "verification_status", "create_time", "update_time", "domain_type", "verification_method") ID_FIELD_NUMBER: _ClassVar[int] DOMAIN_FIELD_NUMBER: _ClassVar[int] ENVIRONMENT_ID_FIELD_NUMBER: _ClassVar[int] @@ -179,6 +197,7 @@ class Domain(_message.Message): CREATE_TIME_FIELD_NUMBER: _ClassVar[int] UPDATE_TIME_FIELD_NUMBER: _ClassVar[int] DOMAIN_TYPE_FIELD_NUMBER: _ClassVar[int] + VERIFICATION_METHOD_FIELD_NUMBER: _ClassVar[int] id: str domain: str environment_id: str @@ -189,4 +208,5 @@ class Domain(_message.Message): create_time: _timestamp_pb2.Timestamp update_time: _timestamp_pb2.Timestamp domain_type: DomainType - def __init__(self, id: _Optional[str] = ..., domain: _Optional[str] = ..., environment_id: _Optional[str] = ..., organization_id: _Optional[str] = ..., txt_record_key: _Optional[str] = ..., txt_record_secret: _Optional[str] = ..., verification_status: _Optional[_Union[VerificationStatus, str]] = ..., create_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., update_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., domain_type: _Optional[_Union[DomainType, str]] = ...) -> None: ... + verification_method: VerificationMethod + def __init__(self, id: _Optional[str] = ..., domain: _Optional[str] = ..., environment_id: _Optional[str] = ..., organization_id: _Optional[str] = ..., txt_record_key: _Optional[str] = ..., txt_record_secret: _Optional[str] = ..., verification_status: _Optional[_Union[VerificationStatus, str]] = ..., create_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., update_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., domain_type: _Optional[_Union[DomainType, str]] = ..., verification_method: _Optional[_Union[VerificationMethod, str]] = ...) -> None: ... diff --git a/scalekit/v1/domains/domains_pb2_grpc.py b/scalekit/v1/domains/domains_pb2_grpc.py index 2f24e82..ee2d73a 100644 --- a/scalekit/v1/domains/domains_pb2_grpc.py +++ b/scalekit/v1/domains/domains_pb2_grpc.py @@ -3,7 +3,6 @@ import grpc from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 -from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2 from scalekit.v1.domains import domains_pb2 as scalekit_dot_v1_dot_domains_dot_domains__pb2 @@ -29,7 +28,7 @@ def __init__(self, channel): self.VerifyDomain = channel.unary_unary( '/scalekit.v1.domains.DomainService/VerifyDomain', request_serializer=scalekit_dot_v1_dot_domains_dot_domains__pb2.VerifyDomainRequest.SerializeToString, - response_deserializer=google_dot_protobuf_dot_wrappers__pb2.BoolValue.FromString, + response_deserializer=scalekit_dot_v1_dot_domains_dot_domains__pb2.VerifyDomainResponse.FromString, ) self.GetDomain = channel.unary_unary( '/scalekit.v1.domains.DomainService/GetDomain', @@ -114,7 +113,7 @@ def add_DomainServiceServicer_to_server(servicer, server): 'VerifyDomain': grpc.unary_unary_rpc_method_handler( servicer.VerifyDomain, request_deserializer=scalekit_dot_v1_dot_domains_dot_domains__pb2.VerifyDomainRequest.FromString, - response_serializer=google_dot_protobuf_dot_wrappers__pb2.BoolValue.SerializeToString, + response_serializer=scalekit_dot_v1_dot_domains_dot_domains__pb2.VerifyDomainResponse.SerializeToString, ), 'GetDomain': grpc.unary_unary_rpc_method_handler( servicer.GetDomain, @@ -193,7 +192,7 @@ def VerifyDomain(request, metadata=None): return grpc.experimental.unary_unary(request, target, '/scalekit.v1.domains.DomainService/VerifyDomain', scalekit_dot_v1_dot_domains_dot_domains__pb2.VerifyDomainRequest.SerializeToString, - google_dot_protobuf_dot_wrappers__pb2.BoolValue.FromString, + scalekit_dot_v1_dot_domains_dot_domains__pb2.VerifyDomainResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scalekit/v1/organizations/organizations_pb2.py b/scalekit/v1/organizations/organizations_pb2.py index a05c98e..0112e24 100644 --- a/scalekit/v1/organizations/organizations_pb2.py +++ b/scalekit/v1/organizations/organizations_pb2.py @@ -28,7 +28,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n-scalekit/v1/organizations/organizations.proto\x12\x19scalekit.v1.organizations\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"\xaf\x01\n\x19\x43reateOrganizationRequest\x12\x91\x01\n\x0corganization\x18\x01 \x01(\x0b\x32-.scalekit.v1.organizations.CreateOrganizationB>\x92\x41\x35\x32\x33Required parameters for creating a new organization\xbaH\x03\xc8\x01\x01R\x0corganization\"\xb9\x01\n\x1a\x43reateOrganizationResponse\x12\x9a\x01\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationBM\x92\x41J2HThe newly created organization containing its ID, settings, and metadataR\x0corganization\"\xf8\x07\n\x12\x43reateOrganization\x12\x84\x01\n\x0c\x64isplay_name\x18\x04 \x01(\tBa\x92\x41Q2?Name of the organization. Must be between 1 and 200 characters.J\x0e\"Megasoft Inc\"\xe0\x41\x02\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\xa0\x01\n\x0bregion_code\x18\x05 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeB^\x92\x41L2DGeographic region code for the organization. Currently limited to USJ\x04\"US\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\nregionCode\x12\x9e\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBx\x92\x41u2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x0e\"my_unique_id\"H\x00R\nexternalId\x88\x01\x01\x12r\n\x08metadata\x18\x07 \x03(\x0b\x32;.scalekit.v1.organizations.CreateOrganization.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xcc\x02\n\x04slug\x18\t \x01(\tB\xb2\x02\x92\x41\x84\x02\x32\xd2\x01\x44NS-safe slug for dynamic redirect URI resolution (e.g. acme for https://acme.example.com/callback). Lowercase alphanumeric and hyphens, 1-63 chars, must start and end with alphanumeric, unique per environment.J\x06\"acme\"x?\x80\x01\x01\x8a\x01\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$\xbaH\'r%\x10\x01\x18?2\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$H\x01R\x04slug\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idB\x07\n\x05_slug\"\xf8\n\n\x0cOrganization\x12{\n\x02id\x18\x01 \x01(\tBk\x92\x41h2MUnique scalekit-generated identifier that uniquely references an organizationJ\x17\"org_59615193906282635\"R\x02id\x12\x8c\x01\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBO\x92\x41I2+Timestamp when the organization was createdJ\x1a\"2025-02-15T06:23:44.560Z\"\xe0\x41\x02R\ncreateTime\x12\x8e\x01\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBQ\x92\x41N20Timestamp when the organization was last updatedJ\x1a\"2025-02-15T06:23:44.560Z\"R\nupdateTime\x12|\n\x0c\x64isplay_name\x18\x04 \x01(\tBY\x92\x41L2>Name of the organization. Must be between 1 and 200 charactersJ\n\"Megasoft\"\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\x92\x01\n\x0bregion_code\x18\x05 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeBP\x92\x41M2EGeographic region code for the organization. Currently limited to US.J\x04\"US\"R\nregionCode\x12\x9e\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBx\x92\x41u2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x0e\"my_unique_id\"H\x00R\nexternalId\x88\x01\x01\x12l\n\x08metadata\x18\x07 \x03(\x0b\x32\x35.scalekit.v1.organizations.Organization.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12K\n\x08settings\x18\x08 \x01(\x0b\x32/.scalekit.v1.organizations.OrganizationSettingsR\x08settings\x12\x85\x02\n\x04slug\x18\t \x01(\tB\xeb\x01\x92\x41\xe7\x01\x32\xb5\x01\x44NS-safe slug for dynamic redirect URI resolution. Must be 1-63 chars, lowercase alphanumeric and hyphens, must start and end with an alphanumeric character. Unique per environment.J\x06\"acme\"x?\x80\x01\x01\x8a\x01\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$H\x01R\x04slug\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idB\x07\n\x05_slug\"\xe0\x03\n\x19UpdateOrganizationRequest\x12j\n\x02id\x18\x01 \x01(\tBX\x92\x41L23Unique identifier of the organization to be updatedJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\x85\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tBb\x92\x41I2-External ID of the organization to be updatedJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x83\x01\n\x0corganization\x18\x03 \x01(\x0b\x32-.scalekit.v1.organizations.UpdateOrganizationB0\x92\x41\'2%Organization Parameters to be updated\xbaH\x03\xc8\x01\x01R\x0corganization\x12;\n\x0bupdate_mask\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskR\nupdateMaskB\x0c\n\nidentities\"\x87\x08\n\x12UpdateOrganization\x12\x9e\x01\n\x0c\x64isplay_name\x18\x04 \x01(\tBv\x92\x41i2SName of the organization to display in the UI. Must be between 1 and 200 charactersJ\x12\"Acme Corporation\"\xbaH\x07r\x05\x10\x01\x18\xc8\x01H\x00R\x0b\x64isplayName\x88\x01\x01\x12\x9d\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBw\x92\x41t2bYour application\'s unique identifier for this organization, used to link Scalekit with your systemJ\x0e\"tenant_12345\"H\x01R\nexternalId\x88\x01\x01\x12\xa5\x02\n\x08metadata\x18\x07 \x03(\x0b\x32;.scalekit.v1.organizations.UpdateOrganization.MetadataEntryB\xcb\x01\x92\x41\xae\x01\x32\x8f\x01\x43ustom key-value pairs to store with the organization. Keys must be 3-25 characters, values must be 1-256 characters. Maximum 10 pairs allowed.J\x1a{\"industry\": \"technology\"}\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\x9a\x02\n\x04slug\x18\t \x01(\tB\x80\x02\x92\x41\xd2\x01\x32\xa0\x01\x44NS-safe slug for dynamic redirect URI resolution. Lowercase alphanumeric and hyphens, 1-63 chars, must start and end with alphanumeric, unique per environment.J\x06\"acme\"x?\x80\x01\x01\x8a\x01\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$\xbaH\'r%\x10\x01\x18?2\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$H\x02R\x04slug\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0f\n\r_display_nameB\x0e\n\x0c_external_idB\x07\n\x05_slugJ\x04\x08\x05\x10\x06\"\x8c\x01\n\x1aUpdateOrganizationResponse\x12n\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationB!\x92\x41\x1e\x32\x1cUpdated organization detailsR\x0corganization\"\xeb\x02\n\x16GetOrganizationRequest\x12\x84\x01\n\x02id\x18\x01 \x01(\tBr\x92\x41\x66\x32MUnique scalekit-generated identifier that uniquely references an organizationJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\xbb\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\x97\x01\x92\x41~2bUnique identifier that links an Organization Object to your app\'s tenant, stored as an External IDJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalIdB\x0c\n\nidentities\"\x8b\x01\n\x17GetOrganizationResponse\x12p\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationB#\x92\x41 2\x1eThe newly created organizationR\x0corganization\"\xe0\x05\n\x18ListOrganizationsRequest\x12t\n\tpage_size\x18\x01 \x01(\rBW\x92\x41T2NMaximum number of organizations to return per page. Must be between 10 and 100J\x02\x33\x30R\x08pageSize\x12\x8f\x01\n\npage_token\x18\x02 \x01(\tBp\x92\x41m2[Pagination token from the previous response. Use to retrieve the next page of organizationsJ\x0e\"\"R\tpageToken\x12\xa8\x01\n\x0b\x65xternal_id\x18\x03 \x01(\tB\x81\x01\x92\x41~2bYour application\'s unique identifier for this organization, used to link Scalekit with your systemJ\x18\"\"H\x00R\nexternalId\x88\x01\x01:\x80\x02\x92\x41\xfc\x01\n\xab\x01*\x12List Organizations2\x94\x01Retrieves a paginated list of all organizations within the environment. Use the `page_token` from the response to access subsequent pages of results*L\n\x12List Organizations\x12\x36https://docs.scalekit.com/reference/list-organizationsB\x0e\n\x0c_external_id\"\xa4\x04\n\x19ListOrganizationsResponse\x12\x97\x01\n\x0fnext_page_token\x18\x01 \x01(\tBo\x92\x41l2UPagination token for the next page of results. Use this token to fetch the next page.J\x13\"\"R\rnextPageToken\x12Y\n\ntotal_size\x18\x02 \x01(\rB:\x92\x41\x37\x32\x31Total number of organizations in the environment.J\x02\x33\x30R\ttotalSize\x12p\n\rorganizations\x18\x03 \x03(\x0b\x32\'.scalekit.v1.organizations.OrganizationB!\x92\x41\x1e\x32\x1cList of organization objectsR\rorganizations\x12\x9f\x01\n\x0fprev_page_token\x18\x04 \x01(\tBw\x92\x41t2]Pagination token for the previous page of results. Use this token to fetch the previous page.J\x13\"\"R\rprevPageToken\"\xa7\x05\n\x1aSearchOrganizationsRequest\x12\xa5\x01\n\x05query\x18\x01 \x01(\tB\x8e\x01\x92\x41\x7f\x32wSearch term to match against organization names, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\x04\x61\x63me\xbaH\tr\x04\x10\x03\x18\x64\xc8\x01\x01R\x05query\x12\x80\x01\n\tpage_size\x18\x02 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x03 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken:\xb5\x01\x92\x41\xb1\x01\n\x88\x01*\x14Search Organizations2pSearch for organizations in your environment using a text query that matches against names, IDs, or external IDs2$query=acme&page_size=30&page_token=1\"\xdb\x01\n\x1bSearchOrganizationsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12M\n\rorganizations\x18\x03 \x03(\x0b\x32\'.scalekit.v1.organizations.OrganizationR\rorganizations\x12&\n\x0fprev_page_token\x18\x04 \x01(\tR\rprevPageToken\"\xad\x02\n\x19\x44\x65leteOrganizationRequest\x12~\n\x02id\x18\x01 \x01(\tBl\x92\x41`2MUnique scalekit-generated identifier that uniquely references an organizationJ\x0f\"org_123456789\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\x81\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB^\x92\x41\x45\x32)External ID of the organization to deleteJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalIdB\x0c\n\nidentities\"\xcf\x04\n\x19GeneratePortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12(\n\x03sso\x18\x02 \x01(\x08\x42\x11\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\x03sso\x88\x01\x01\x12=\n\x0e\x64irectory_sync\x18\x03 \x01(\x08\x42\x11\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\rdirectorySync\x88\x01\x01\x12\xdd\x02\n\x08\x66\x65\x61tures\x18\x04 \x03(\x0e\x32\".scalekit.v1.organizations.FeatureB\x9c\x02\x92\x41\x98\x02\x32\x95\x02\x46\x65\x61tures to enable in the admin portal link. To enable features, append them as URL parameters:\n\n- Single Sign-On: ?features=sso\n- Directory Sync: ?features=dir_sync\n- Both features: ?features=sso&features=dir_sync\n\nExample URL: https://scalekit.com/portal/lnk_123?features=ssoR\x08\x66\x65\x61turesB\x06\n\x04_ssoB\x11\n\x0f_directory_sync\"f\n\x14GetPortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\"i\n\x17\x44\x65letePortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\"\xbe\x01\n\x1b\x44\x65letePortalLinkByIdRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12O\n\x07link_id\x18\x02 \x01(\tB6\x92\x41!2\x07Link IDJ\x16\"lnk_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04lnk_\xc8\x01\x01R\x06linkId\"\xb5\x03\n\x04Link\x12J\n\x02id\x18\x01 \x01(\tB:\x92\x41\x37\x32\x1eUnique Identifier for the linkJ\x15\"lnk_123123123123123\"R\x02id\x12\xc7\x01\n\x08location\x18\x02 \x01(\tB\xaa\x01\x92\x41\xa6\x01\x32qLocation of the link. This is the URL that can be used to access the Admin portal. The link is valid for 1 minuteJ1\"https://scalekit.com/portal/lnk_123123123123123\"R\x08location\x12\x96\x01\n\x0b\x65xpire_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBY\x92\x41V28Expiry time of the link. The link is valid for 1 minute.J\x1a\"2024-02-06T14:48:00.000Z\"R\nexpireTime\"\x96\x02\n\x1aGeneratePortalLinkResponse\x12\xf7\x01\n\x04link\x18\x01 \x01(\x0b\x32\x1f.scalekit.v1.organizations.LinkB\xc1\x01\x92\x41\xbd\x01\x32\xba\x01\x43ontains the generated admin portal link details. The link URL can be shared with organization administrators to set up: Single Sign-On (SSO) authentication and directory synchronizationR\x04link\"h\n\x16GetPortalLinksResponse\x12N\n\x05links\x18\x01 \x03(\x0b\x32\x1f.scalekit.v1.organizations.LinkB\x17\x92\x41\x14\x32\x12\x41\x64min Portal LinksR\x05links\"\x90\x04\n!UpdateOrganizationSettingsRequest\x12\x97\x01\n\x02id\x18\x01 \x01(\tB\x86\x01\x92\x41q2WUnique identifier of the organization to update settings. Must begin with \'org_\' prefixJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12\xd0\x02\n\x08settings\x18\x02 \x01(\x0b\x32/.scalekit.v1.organizations.OrganizationSettingsB\x82\x02\x92\x41\xf8\x01\x32\x95\x01Settings configuration to apply to the organization. Contains feature toggles for SSO, directory synchronization, and other organization capabilitiesJ^{\"features\": [{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]}\xbaH\x03\xc8\x01\x01R\x08settings\"\x91\x0c\n!OrganizationSessionPolicySettings\x12\x92\x02\n\rpolicy_source\x18\x01 \x01(\x0e\x32,.scalekit.v1.organizations.SessionPolicyTypeB\xbe\x01\x92\x41\xaf\x01\x32\xa2\x01Policy source. \'APPLICATION\' means the organization inherits the application-level session policy. \'CUSTOM\' means organization-specific timeout values are active.J\x08\"CUSTOM\"\xbaH\x08\x82\x01\x05\x10\x01\"\x01\x00R\x0cpolicySource\x12\xec\x01\n\x18\x61\x62solute_session_timeout\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x94\x01\x92\x41\x90\x01\x32\x88\x01The absolute session timeout value. The unit is specified by absolute_session_timeout_unit. Omitted when policy_source is \'environment\'.J\x03\x33\x36\x30R\x16\x61\x62soluteSessionTimeout\x12\xea\x01\n\x1d\x61\x62solute_session_timeout_unit\x18\x03 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitB\x82\x01\x92\x41\x7f\x32rUnit for absolute_session_timeout. Accepted values: \'minutes\', \'hours\', \'days\'. Responses always return \'minutes\'.J\t\"minutes\"H\x00R\x1a\x61\x62soluteSessionTimeoutUnit\x88\x01\x01\x12\xd3\x01\n\x1cidle_session_timeout_enabled\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBv\x92\x41s2kWhether idle session timeout is enabled for this organization. Omitted when policy_source is \'environment\'.J\x04trueR\x19idleSessionTimeoutEnabled\x12\x84\x02\n\x14idle_session_timeout\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xb4\x01\x92\x41\xb0\x01\x32\xa9\x01The idle session timeout value. The unit is specified by idle_session_timeout_unit. Omitted when idle_session_timeout_enabled is false or policy_source is \'environment\'.J\x02\x38\x34R\x12idleSessionTimeout\x12\xdd\x01\n\x19idle_session_timeout_unit\x18\x06 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitB~\x92\x41{2nUnit for idle_session_timeout. Accepted values: \'minutes\', \'hours\', \'days\'. Responses always return \'minutes\'.J\t\"minutes\"H\x01R\x16idleSessionTimeoutUnit\x88\x01\x01\x42 \n\x1e_absolute_session_timeout_unitB\x1c\n\x1a_idle_session_timeout_unit\"\xd4\x01\n#GetOrganizationSessionPolicyRequest\x12\xac\x01\n\x0forganization_id\x18\x01 \x01(\tB\x82\x01\x92\x41m2RThe unique identifier of the organization whose session policy is being requested.J\x17\"org_59615193906282635\"\xe0\x41\x02\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\"\xac\x01\n$GetOrganizationSessionPolicyResponse\x12\x83\x01\n\x06policy\x18\x01 \x01(\x0b\x32<.scalekit.v1.organizations.OrganizationSessionPolicySettingsB-\x92\x41*2(The session policy for the organization.R\x06policy\"\xb7\x0c\n&UpdateOrganizationSessionPolicyRequest\x12\xaa\x01\n\x0forganization_id\x18\x01 \x01(\tB\x80\x01\x92\x41k2PThe unique identifier of the organization whose session policy is being updated.J\x17\"org_59615193906282635\"\xe0\x41\x02\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xe8\x01\n\rpolicy_source\x18\x02 \x01(\x0e\x32,.scalekit.v1.organizations.SessionPolicyTypeB\x94\x01\x92\x41\x90\x01\x32\x83\x01Policy source. Send \'APPLICATION\' to revert to application defaults. Send \'CUSTOM\' with timeout values to activate a custom policy.J\x08\"CUSTOM\"R\x0cpolicySource\x12\xe7\x01\n\x18\x61\x62solute_session_timeout\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x8f\x01\x92\x41\x8b\x01\x32\x83\x01The absolute session timeout value. The unit is specified by absolute_session_timeout_unit. Omit when policy_source is APPLICATION.J\x03\x33\x36\x30R\x16\x61\x62soluteSessionTimeout\x12\xdb\x01\n\x1d\x61\x62solute_session_timeout_unit\x18\x04 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitBt\x92\x41q2dUnit for absolute_session_timeout. Accepted values: \'MINUTES\', \'HOURS\', \'DAYS\'. Defaults to MINUTES.J\t\"MINUTES\"H\x00R\x1a\x61\x62soluteSessionTimeoutUnit\x88\x01\x01\x12\xb8\x01\n\x1cidle_session_timeout_enabled\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB[\x92\x41X2PWhether idle session timeout is enabled. Omit when policy_source is APPLICATION.J\x04trueR\x19idleSessionTimeoutEnabled\x12\xdf\x01\n\x14idle_session_timeout\x18\x06 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x8f\x01\x92\x41\x8b\x01\x32\x84\x01The idle session timeout value. The unit is specified by idle_session_timeout_unit. Omit when idle_session_timeout_enabled is false.J\x02\x38\x34R\x12idleSessionTimeout\x12\xcf\x01\n\x19idle_session_timeout_unit\x18\x07 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitBp\x92\x41m2`Unit for idle_session_timeout. Accepted values: \'MINUTES\', \'HOURS\', \'DAYS\'. Defaults to MINUTES.J\t\"MINUTES\"H\x01R\x16idleSessionTimeoutUnit\x88\x01\x01\x42 \n\x1e_absolute_session_timeout_unitB\x1c\n\x1a_idle_session_timeout_unit\"\xb7\x01\n\'UpdateOrganizationSessionPolicyResponse\x12\x8b\x01\n\x06policy\x18\x01 \x01(\x0b\x32<.scalekit.v1.organizations.OrganizationSessionPolicySettingsB5\x92\x41\x32\x32\x30The updated session policy for the organization.R\x06policy\"\xaa\x01\n\"GetApplicationSessionPolicyRequest\x12\x83\x01\n\x0forganization_id\x18\x01 \x01(\tBZ\x92\x41\x45\x32*The unique identifier of the organization.J\x17\"org_59615193906282635\"\xe0\x41\x02\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\"\x9e\x04\n ApplicationSessionPolicySettings\x12h\n\x18\x61\x62solute_session_timeout\x18\x01 \x01(\x05\x42.\x92\x41+2$Absolute session timeout in minutes.J\x03\x34\x38\x30R\x16\x61\x62soluteSessionTimeout\x12\x8e\x01\n\x1cidle_session_timeout_enabled\x18\x02 \x01(\x08\x42M\x92\x41J2AWhether idle session timeout is enabled at the application level.J\x05\x66\x61lseR\x19idleSessionTimeoutEnabled\x12\x7f\n\x14idle_session_timeout\x18\x03 \x01(\x05\x42M\x92\x41J2DIdle session timeout in minutes. Zero when idle timeout is disabled.J\x02\x36\x30R\x12idleSessionTimeout\x12~\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x04 \x01(\x05\x42N\x92\x41K2FAccess token expiry in minutes. Custom policy values must exceed this.J\x01\x35R\x11\x61\x63\x63\x65ssTokenExpiry\"\xd1\x01\n#GetApplicationSessionPolicyResponse\x12\xa9\x01\n\x12\x61pplication_policy\x18\x01 \x01(\x0b\x32;.scalekit.v1.organizations.ApplicationSessionPolicySettingsB=\x92\x41:28The effective application-level session policy settings.R\x11\x61pplicationPolicy\"\xdc\x02\n\"OrganizationUserManagementSettings\x12\xb5\x02\n\x11max_allowed_users\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xeb\x01\x92\x41\xe7\x01\x32\xdf\x01Maximum number of users allowed in the organization. When nil (not set), there feature is not enabled. When explicitly set to zero, it also means no limit. When set to a positive integer, it enforces the maximum user limit.J\x03\x31\x30\x30R\x0fmaxAllowedUsers\"\xae\x08\n\x1bOrganizationSessionSettings\x12\xfe\x01\n\x18\x61\x62solute_session_timeout\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xa6\x01\x92\x41\xa2\x01\x32\x98\x01The maximum duration in seconds that a session can remain active, regardless of activity. After this time, the user will be required to re-authenticate.J\x05\x38\x36\x34\x30\x30R\x16\x61\x62soluteSessionTimeout\x12\xd4\x01\n\x14idle_session_timeout\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x84\x01\x92\x41\x80\x01\x32xThe duration in seconds that a session can remain idle before it is automatically terminated. Activity resets the timer.J\x04\x31\x38\x30\x30R\x12idleSessionTimeout\x12\x8e\x02\n\x1cidle_session_timeout_enabled\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xb0\x01\x92\x41\xac\x01\x32\xa3\x01Whether idle session timeout is enabled for this organization. When enabled, sessions expire after the idle timeout duration regardless of the environment setting.J\x04trueR\x19idleSessionTimeoutEnabled\x12\xe7\x01\n\rpolicy_source\x18\x06 \x01(\tB\xc1\x01\x92\x41\xbd\x01\x32\xb0\x01Policy source for this organization. APPLICATION means the organization inherits application-level session policy. CUSTOM means organization-specific timeout values are active.J\x08\"CUSTOM\"R\x0cpolicySourceJ\x04\x08\x02\x10\x03J\x04\x08\x04\x10\x05R\x1asession_management_enabledR\x14idle_session_enabled\"\x8e\x04\n\x14OrganizationSettings\x12\xa4\x02\n\x08\x66\x65\x61tures\x18\x01 \x03(\x0b\x32\x36.scalekit.v1.organizations.OrganizationSettingsFeatureB\xcf\x01\x92\x41\xcb\x01\x32wList of feature toggles that control organization capabilities such as SSO authentication and directory synchronizationJP[{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]R\x08\x66\x65\x61tures:\xce\x01\x92\x41\xca\x01\nh*\x15Organization Settings2OConfiguration options that control organization-level features and capabilities2^{\"features\": [{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]}\"\xe1\x03\n\x1bOrganizationSettingsFeature\x12\xd4\x01\n\x04name\x18\x01 \x01(\tB\xbf\x01\x92\x41\xbb\x01\x32\xb1\x01\x46\x65\x61ture identifier. Supported values include: \"sso\" (Single Sign-On), \"directory_sync\" (Directory Synchronization), \"session_policy\" (Organization-level session policy override)J\x05\"sso\"R\x04name\x12t\n\x07\x65nabled\x18\x02 \x01(\x08\x42Z\x92\x41W2OWhether the feature is enabled (true) or disabled (false) for this organizationJ\x04trueR\x07\x65nabled:u\x92\x41r\np*\x1bOrganization Feature Toggle2@Controls the activation state of a specific organization feature\xd2\x01\x04name\xd2\x01\x07\x65nabled\"\x96\x02\n#UpsertUserManagementSettingsRequest\x12W\n\x0forganization_id\x18\x01 \x01(\tB.\x92\x41\x19\x32\x17ID of the organization.\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\x12\x95\x01\n\x08settings\x18\x02 \x01(\x0b\x32=.scalekit.v1.organizations.OrganizationUserManagementSettingsB:\x92\x41\x31\x32/The new values for the setting fields to patch.\xbaH\x03\xc8\x01\x01R\x08settings\"\x9c\x01\n$UpsertUserManagementSettingsResponse\x12t\n\x08settings\x18\x01 \x01(\x0b\x32=.scalekit.v1.organizations.OrganizationUserManagementSettingsB\x19\x92\x41\x16\x32\x14The updated setting.R\x08settings\"\x87\x01\n,GetOrganizationUserManagementSettingsRequest\x12W\n\x0forganization_id\x18\x01 \x01(\tB.\x92\x41\x19\x32\x17ID of the organization.\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\"\xaf\x01\n-GetOrganizationUserManagementSettingsResponse\x12~\n\x08settings\x18\x01 \x01(\x0b\x32=.scalekit.v1.organizations.OrganizationUserManagementSettingsB#\x92\x41 2\x1eList of organization settings.R\x08settings*R\n\x07\x46\x65\x61ture\x12\x17\n\x13\x46\x45\x41TURE_UNSPECIFIED\x10\x00\x12\x13\n\x0bUNSPECIFIED\x10\x00\x1a\x02\x08\x01\x12\x0c\n\x08\x64ir_sync\x10\x01\x12\x07\n\x03sso\x10\x02\x1a\x02\x10\x01*U\n\x11SessionPolicyType\x12#\n\x1fSESSION_POLICY_TYPE_UNSPECIFIED\x10\x00\x12\x0f\n\x0b\x41PPLICATION\x10\x01\x12\n\n\x06\x43USTOM\x10\x02\x32\xaaP\n\x13OrganizationService\x12\x88\x04\n\x12\x43reateOrganization\x12\x34.scalekit.v1.organizations.CreateOrganizationRequest\x1a\x35.scalekit.v1.organizations.CreateOrganizationResponse\"\x84\x03\x92\x41\xcf\x02\n\rOrganizations\x12\x16\x43reate an organization\x1a\x8f\x01\x43reates a new organization in your environment. Use this endpoint to add a new tenant that can be configured with various settings and metadataJ\x93\x01\n\x03\x32\x30\x31\x12\x8b\x01\nNReturns the newly created organization with its unique identifier and settings\x12\x39\n7\x1a\x35.scalekit.v1.organizations.CreateOrganizationResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02%\"\x15/api/v1/organizations:\x0corganization\x12\xbf\x04\n\x12UpdateOrganization\x12\x34.scalekit.v1.organizations.UpdateOrganizationRequest\x1a\x35.scalekit.v1.organizations.UpdateOrganizationResponse\"\xbb\x03\x92\x41\xec\x02\n\rOrganizations\x12\x1bUpdate organization details\x1a\xa1\x01Updates an organization\'s display name, external ID, or metadata. Requires a valid organization identifier. Region code cannot be modified through this endpoint.J\x99\x01\n\x03\x32\x30\x30\x12\x91\x01\nTReturns the updated organization with all current details reflected in the response.\x12\x39\n7\x1a\x35.scalekit.v1.organizations.UpdateOrganizationResponse\x82\xb5\x18\x17\n\x13organizations_write\x18T\x82\xd3\xe4\x93\x02*2\x1a/api/v1/organizations/{id}:\x0corganization\x12\xde\x03\n\x0fGetOrganization\x12\x31.scalekit.v1.organizations.GetOrganizationRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xe3\x02\x92\x41\xa3\x02\n\rOrganizations\x12\x18Get organization details\x1a]Retrieves organization details by Scalekit ID, including name, region, metadata, and settingsJ\x98\x01\n\x03\x32\x30\x30\x12\x90\x01\nVReturns the complete organization object with ID, display name, settings, and metadata\x12\x36\n4\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/organizations/{id}\x12\xd3\x05\n\x1bGetOrganizationByExternalId\x12\x31.scalekit.v1.organizations.GetOrganizationRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xcc\x04\x92\x41\xfa\x03\n\rOrganizations\x12\'Get organization details by external Id\x1a]Retrieves organization details by External ID, including name, region, metadata, and settingsJ\xa4\x01\n\x03\x32\x30\x30\x12\x9c\x01\nbReturns the complete organization object with ID, display name, settings, external ID and metadata\x12\x36\n4\x1a\x32.scalekit.v1.organizations.GetOrganizationResponseJa\n\x03\x34\x30\x30\x12Z\nXInvalid request - external ID is empty or the caller\'s organization claim does not matchJW\n\x03\x34\x30\x34\x12P\nNOrganization not found - no organization exists with the specified external ID\x82\xb5\x18\x16\n\x12organizations_read\x18\x04\x82\xd3\xe4\x93\x02.\x12,/api/v1/organizations:external/{external_id}\x12\xc2\t\n\x10ListOrganization\x12\x33.scalekit.v1.organizations.ListOrganizationsRequest\x1a\x34.scalekit.v1.organizations.ListOrganizationsResponse\"\xc2\x08\x92\x41\x9b\x08\n\rOrganizations\x12\x12List organizations\x1a\xa0\x01Retrieve a paginated list of organizations within your environment. The response includes a `page_token` that can be used to access subsequent pages of results.Js\n\x03\x32\x30\x30\x12l\n0Successfully retrieved the list of organizations\x12\x38\n6\x1a\x34.scalekit.v1.organizations.ListOrganizationsResponseJ\x1b\n\x03\x34\x30\x30\x12\x14\n\x12Invalid page tokenj\xc0\x05\n\rx-codeSamples\x12\xae\x05\x32\xab\x05\n\x97\x01*\x94\x01\n\x16\n\x05label\x12\r\x1a\x0bNode.js SDK\n\x14\n\x04lang\x12\x0c\x1a\njavascript\nd\n\x06source\x12Z\x1aXconst organizations = await scalekit.organization.listOrganization({\n pageSize: 10,\n});\n\xc0\x01*\xbd\x01\n\x15\n\x05label\x12\x0c\x1a\nPython SDK\n\x10\n\x04lang\x12\x08\x1a\x06python\n\x91\x01\n\x06source\x12\x86\x01\x1a\x83\x01options = ListOrganizationOptions()\noptions.page_size = 10\n\norganizations = sc.organization.list_organizations(\n options=options\n)\n\xaf\x01*\xac\x01\n\x11\n\x05label\x12\x08\x1a\x06Go SDK\n\x0c\n\x04lang\x12\x04\x1a\x02go\n\x88\x01\n\x06source\x12~\x1a|organizations, err := sc.Organization.ListOrganizations(\n ctx,\n &scalekit.ListOrganizationOptions{\n PageSize: 10,\n }\n)\n\x99\x01*\x96\x01\n\x13\n\x05label\x12\n\x1a\x08Java SDK\n\x0e\n\x04lang\x12\x06\x1a\x04java\no\n\x06source\x12\x65\x1a\x63ListOrganizationsResponse organizations = scalekitClient.organizations().listOrganizations(10, \"\");\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x17\x12\x15/api/v1/organizations\x12\xf1\x04\n\x12SearchOrganization\x12\x35.scalekit.v1.organizations.SearchOrganizationsRequest\x1a\x36.scalekit.v1.organizations.SearchOrganizationsResponse\"\xeb\x03\x92\x41\xae\x03\n\rOrganizations\x12\x14Search organizations\x1a\xd4\x01Searches for organizations in your environment using a query string. The query matches against organization name, ID, or external ID. Returns multiple results when more than one organization matches the criteria.J\xaf\x01\n\x03\x32\x30\x30\x12\xa7\x01\niReturns a list of matching organizations and a page token for pagination if there are additional results.\x12:\n8\x1a\x36.scalekit.v1.organizations.SearchOrganizationsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\x12\x1c/api/v1/organizations:search\x12\xcf\x02\n\x12\x44\x65leteOrganization\x12\x34.scalekit.v1.organizations.DeleteOrganizationRequest\x1a\x16.google.protobuf.Empty\"\xea\x01\x92\x41\xbe\x01\n\rOrganizations\x12\x16\x44\x65lete an organization\x1aPRemove an existing organization from the environment using its unique identifierJC\n\x03\x32\x30\x30\x12<\n:Organization successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1c*\x1a/api/v1/organizations/{id}\x12\xe2\x04\n\x12GeneratePortalLink\x12\x34.scalekit.v1.organizations.GeneratePortalLinkRequest\x1a\x35.scalekit.v1.organizations.GeneratePortalLinkResponse\"\xde\x03\x92\x41\xa5\x03\n\rOrganizations\x12\x1aGenerate admin portal link\x1a\xd5\x01\x43reates a single use Admin Portal URL valid for 1 minute. Once the generated admin portal URL is accessed or rendered, a temporary session of 6 hours is created to allow the admin to update SSO/SCIM configuration.J\x9f\x01\n\x03\x32\x30\x30\x12\x97\x01\nZAdmin Portal link generated successfully. Returns the portal URL and expiration timestamp.\x12\x39\n7\x1a\x35.scalekit.v1.organizations.GeneratePortalLinkResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02)\x1a\'/api/v1/organizations/{id}/portal_links\x12\xa0\x02\n\x10\x44\x65letePortalLink\x12\x32.scalekit.v1.organizations.DeletePortalLinkRequest\x1a\x16.google.protobuf.Empty\"\xbf\x01\x92\x41x\n\x0c\x41\x64min Portal\x12\x12\x44\x65lete portal link\x1a)Revokes and deletes an Admin portal link.J)\n\x03\x32\x30\x30\x12\"\n Portal link deleted successfully\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)*\'/api/v1/organizations/{id}/portal_links\x12\x9f\x02\n\x14\x44\x65letePortalLinkByID\x12\x36.scalekit.v1.organizations.DeletePortalLinkByIdRequest\x1a\x16.google.protobuf.Empty\"\xb6\x01\x92\x41\x65\n\x0c\x41\x64min Portal\x12\x18\x44\x65lete admin portal link\x1a)Revokes and deletes an Admin portal link.J\x10\n\x03\x32\x30\x30\x12\t\n\x07Success\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x33*1/api/v1/organizations/{id}/portal_links/{link_id}\x12\x88\x03\n\x0eGetPortalLinks\x12/.scalekit.v1.organizations.GetPortalLinkRequest\x1a\x31.scalekit.v1.organizations.GetPortalLinksResponse\"\x91\x02\x92\x41\xc9\x01\n\x0c\x41\x64min Portal\x12\x0fGet portal link\x1a_Returns the Admin portal link if it exists. Use Generate Portal link to create and fetch a linkJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.organizations.GetPortalLinksResponse\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)\x12\'/api/v1/organizations/{id}/portal_links\x12\xfa\x06\n\x1aUpdateOrganizationSettings\x12<.scalekit.v1.organizations.UpdateOrganizationSettingsRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xe9\x05\x92\x41\xaa\x05\n\rOrganizations\x12\x1cToggle organization settings\x1a\xd3\x01Updates configuration settings for an organization. Supports modifying SSO configuration, directory synchronization settings, and session parameters. Requires organization ID and the specific settings to update.J\xe3\x01\n\x03\x32\x30\x30\x12\xdb\x01\n\xa0\x01Returns the complete organization object with updated settings applied. Contains all organization details including ID, display name, and the modified settings.\x12\x36\n4\x1a\x32.scalekit.v1.organizations.GetOrganizationResponseJp\n\x03\x34\x30\x30\x12i\ngInvalid request - occurs when the settings payload contains invalid values or unsupported configurationJM\n\x03\x34\x30\x34\x12\x46\nDOrganization not found - the specified organization ID doesn\'t exist\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02/2#/api/v1/organizations/{id}/settings:\x08settings\x12\xd0\x05\n\x1fUpdateOrganizationSessionPolicy\x12\x41.scalekit.v1.organizations.UpdateOrganizationSessionPolicyRequest\x1a\x42.scalekit.v1.organizations.UpdateOrganizationSessionPolicyResponse\"\xa5\x04\x92\x41\xbc\x03\n\rOrganizations\x12\"Update organization session policy\x1a\xed\x01Sets a custom session policy for an organization or reverts to application-level settings. Send session_policy=\'APPLICATION\' to revert to application defaults. Send session_policy=\'CUSTOM\' with timeout values to activate a custom policy.Ju\n\x03\x32\x30\x30\x12n\n$Session policy updated successfully.\x12\x46\nD\x1a\x42.scalekit.v1.organizations.UpdateOrganizationSessionPolicyResponseJ \n\x03\x34\x30\x34\x12\x19\n\x17Organization not found.\x82\xb5\x18 \n\x1corganizations_sessions_write\x18T\x82\xd3\xe4\x93\x02;26/api/v1/organizations/{organization_id}/session-policy:\x01*\x12\xb9\x05\n\x1cGetOrganizationSessionPolicy\x12>.scalekit.v1.organizations.GetOrganizationSessionPolicyRequest\x1a?.scalekit.v1.organizations.GetOrganizationSessionPolicyResponse\"\x97\x04\x92\x41\xb2\x03\n\rOrganizations\x12\x1fGet organization session policy\x1a\xe7\x01Retrieves the session policy for an organization. Returns session_policy=\'APPLICATION\' if the organization inherits the application-level defaults, or session_policy=\'CUSTOM\' with the configured values if a custom policy is active.Jt\n\x03\x32\x30\x30\x12m\n&Session policy retrieved successfully.\x12\x43\nA\x1a?.scalekit.v1.organizations.GetOrganizationSessionPolicyResponseJ \n\x03\x34\x30\x34\x12\x19\n\x17Organization not found.\x82\xb5\x18\x1f\n\x1borganizations_sessions_read\x18T\x82\xd3\xe4\x93\x02\x38\x12\x36/api/v1/organizations/{organization_id}/session-policy\x12\xd5\x03\n\x1cUpsertUserManagementSettings\x12>.scalekit.v1.organizations.UpsertUserManagementSettingsRequest\x1a?.scalekit.v1.organizations.UpsertUserManagementSettingsResponse\"\xb3\x02\x92\x41\xdf\x01\n\rOrganizations\x12 Upsert organization user setting\x1a\x33Upsert user management settings for an organizationJw\n\x03\x32\x30\x30\x12p\n)Returns the updated organization setting.\x12\x43\nA\x1a?.scalekit.v1.organizations.UpsertUserManagementSettingsResponse\x82\xb5\x18\x02\x18\x64\x82\xd3\xe4\x93\x02\x44\x32?/api/v1/organizations/{organization_id}/settings/usermanagement:\x01*\x12\x9f\x04\n$GetOrganizationUserManagementSetting\x12G.scalekit.v1.organizations.GetOrganizationUserManagementSettingsRequest\x1aH.scalekit.v1.organizations.GetOrganizationUserManagementSettingsResponse\"\xe3\x02\x92\x41\x83\x02\n\rOrganizations\x12(Get organization user management setting\x1a\x43Retrieves the user management settings for a specific organization.J\x82\x01\n\x03\x32\x30\x30\x12{\n+Returns the requested organization setting.\x12L\nJ\x1aH.scalekit.v1.organizations.GetOrganizationUserManagementSettingsResponse\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x41\x12?/api/v1/organizations/{organization_id}/settings/usermanagement\x12\xee\x05\n\x1bGetApplicationSessionPolicy\x12=.scalekit.v1.organizations.GetApplicationSessionPolicyRequest\x1a>.scalekit.v1.organizations.GetApplicationSessionPolicyResponse\"\xcf\x04\x92\x41\xcf\x03\n\rOrganizations\x12/Get application session policy for organization\x1a\xa6\x01Returns the application-level session settings for display in hosted pages. Includes absolute timeout, idle timeout configuration, and access token expiry in minutes.J\x7f\n\x03\x32\x30\x30\x12x\n2Application session policy retrieved successfully.\x12\x42\n@\x1a>.scalekit.v1.organizations.GetApplicationSessionPolicyResponseJA\n\x03\x34\x30\x33\x12:\n8Session policy feature not enabled for this environment.J \n\x03\x34\x30\x34\x12\x19\n\x17Organization not found.\x82\xb5\x18\x1f\n\x1borganizations_sessions_read\x18T\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x44\x12\x42/api/v1/organizations/{organization_id}/application-session-policy\x1aX\x92\x41U\n\rOrganizations\x12\x44{{import \"proto/scalekit/v1/organizations/organization_details.md\"}}B\xa9\'Z7github.com/scalekit-inc/scalekit/pkg/grpc/organizations\x92\x41\xec&\x12\x92\"\n\rScalekit APIs\x12\x83!# Introduction\n\nThe Scalekit API is a RESTful API that enables you to manage organizations, users, and authentication settings. All requests must use HTTPS.\nAll API requests use the following base URLs:\n\n```\nhttps://{environment}.scalekit.dev (Development)\nhttps://{environment}.scalekit.com (Production)\nhttps://auth.example.com (Custom domain)\n```\n\nScalekit operates two separate environments: Development and Production. Resources cannot be moved between environments.\n\n# Authentication\n\nThe Scalekit API uses OAuth 2.0 Client Credentials for authentication.\n\nCopy your API credentials from the Scalekit dashboard\'s API Config section and set them as environment variables.\n\n```sh\nSCALEKIT_ENVIRONMENT_URL=\'\'\nSCALEKIT_CLIENT_ID=\'\'\nSCALEKIT_CLIENT_SECRET=\'\'\n```\n\nGetting an access token\n\n1. Get your credentials from the [Scalekit Dashboard](https://app.scalekit.com)\n2. Request an access token:\n\n```sh\ncurl https://{SCALEKIT_ENVIRONMENT_URL}/oauth/token \\\n -X POST \\\n -H \'Content-Type: application/x-www-form-urlencoded\' \\\n -d \'client_id={client_id}\' \\\n -d \'client_secret={client_secret}\' \\\n -d \'grant_type=client_credentials\'\n```\n\n3. Use the access token in API requests:\n\n```sh\ncurl https://{SCALEKIT_ENVIRONMENT_URL}/api/v1/organizations \\\n -H \'Content-Type: application/json\' \\\n -H \'Authorization: Bearer {access_token}\'\n```\n\nThe response includes an access token:\n\n```json\n{\n\t\"access_token\": \"eyJhbGciOiJSUzI1NiIsImtpZCI6InNua181Ok4OTEyMjU2NiIsInR5cCI6IkpXVCJ9...\",\n\t\"token_type\": \"Bearer\",\n\t\"expires_in\": 86399,\n\t\"scope\": \"openid\"\n}\n```\n\n# SDKs\n\nScalekit provides official SDKs for multiple programming languages. Check the changelog at GitHub repositories for the latest updates.\n\n### Node.js\n\n```sh\nnpm install @scalekit-sdk/node\n```\n\nCreate a new Scalekit client instance after initializing the environment variables\n\n```js\nimport { Scalekit } from \"@scalekit-sdk/node\";\n\nexport let scalekit = new Scalekit(\n\tprocess.env.SCALEKIT_ENVIRONMENT_URL,\n\tprocess.env.SCALEKIT_CLIENT_ID,\n\tprocess.env.SCALEKIT_CLIENT_SECRET\n);\n```\n\n[See the Node SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-node/releases)\n\n### Python\n\n```sh\npip install scalekit-sdk-python\n```\n\nCreate a new Scalekit client instance after initializing the environment variables.\n\n```py\nfrom scalekit import ScalekitClient\nimport os\n\nscalekit_client = ScalekitClient(\n os.environ.get(\'SCALEKIT_ENVIRONMENT_URL\'),\n os.environ.get(\'SCALEKIT_CLIENT_ID\'),\n os.environ.get(\'SCALEKIT_CLIENT_SECRET\')\n)\n```\n\n[See the Python SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-python/releases)\n\n### Go\n\n```sh\ngo get -u github.com/scalekit-inc/scalekit-sdk-go\n```\n\nCreate a new Scalekit client instance after initializing the environment variables.\n\n```go\npackage main\n\nimport (\n \"os\"\n \"github.com/scalekit-inc/scalekit-sdk-go\"\n)\n\nscalekitClient := scalekit.NewScalekitClient(\n os.Getenv(\"SCALEKIT_ENVIRONMENT_URL\"),\n os.Getenv(\"SCALEKIT_CLIENT_ID\"),\n os.Getenv(\"SCALEKIT_CLIENT_SECRET\"),\n)\n```\n\n[See the Go SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-go/releases)\n\n### Java\n\n```gradle\n/* Gradle users - add the following to your dependencies in build file */\nimplementation \"com.scalekit:scalekit-sdk-java:2.0.6\"\n```\n\n```xml\n\n\n com.scalekit\n scalekit-sdk-java\n 2.0.6\n\n```\n\n[See the Java SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-java/releases)\n\n# Error handling\n\nThe API uses standard HTTP status codes:\n\n| Code | Description |\n| ----------- | -------------------- |\n| 200/201 | Success |\n| 400 | Invalid request |\n| 401 | Authentication error |\n| 404 | Resource not found |\n| 429 | Rate limit exceeded |\n| 500/501/504 | Server error |\n\nError responses include detailed information:\n\n```json\n{\n\t\"code\": 16,\n\t\"message\": \"Token empty\",\n\t\"details\": [\n\t\t{\n\t\t\t\"@type\": \"type.googleapis.com/scalekit.v1.errdetails.ErrorInfo\",\n\t\t\t\"error_code\": \"UNAUTHENTICATED\"\n\t\t}\n\t]\n}\n```\n\n\":\n\x0cScalekit Inc\x12\x14https://scalekit.com\x1a\x14support@scalekit.com*8\n\nApache 2.0\x12*http://www.apache.org/licenses/LICENSE-2.02\x05\x31.0.0\x1a\x19$SCALEKIT_ENVIRONMENT_URL*\x01\x02\x32\x10\x61pplication/json:\x10\x61pplication/jsonj\x0f\n\rOrganizationsj\xd4\x03\n\x0bPermissions\x12\xc4\x03Permission management for defining and controlling access to system resources. Create, retrieve, update, and delete granular permissions that represent specific actions users can perform. Permissions are the building blocks of role-based access control (RBAC) and can be assigned to roles to grant users the ability to perform specific operations. Use this service to define custom permissions for your application\'s unique access control requirements.r+\n\rScalekit Docs\x12\x1ahttps://docs.scalekit.com/b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n-scalekit/v1/organizations/organizations.proto\x12\x19scalekit.v1.organizations\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"\xaf\x01\n\x19\x43reateOrganizationRequest\x12\x91\x01\n\x0corganization\x18\x01 \x01(\x0b\x32-.scalekit.v1.organizations.CreateOrganizationB>\x92\x41\x35\x32\x33Required parameters for creating a new organization\xbaH\x03\xc8\x01\x01R\x0corganization\"\xb9\x01\n\x1a\x43reateOrganizationResponse\x12\x9a\x01\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationBM\x92\x41J2HThe newly created organization containing its ID, settings, and metadataR\x0corganization\"\xf8\x07\n\x12\x43reateOrganization\x12\x84\x01\n\x0c\x64isplay_name\x18\x04 \x01(\tBa\x92\x41Q2?Name of the organization. Must be between 1 and 200 characters.J\x0e\"Megasoft Inc\"\xe0\x41\x02\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\xa0\x01\n\x0bregion_code\x18\x05 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeB^\x92\x41L2DGeographic region code for the organization. Currently limited to USJ\x04\"US\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\nregionCode\x12\x9e\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBx\x92\x41u2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x0e\"my_unique_id\"H\x00R\nexternalId\x88\x01\x01\x12r\n\x08metadata\x18\x07 \x03(\x0b\x32;.scalekit.v1.organizations.CreateOrganization.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xcc\x02\n\x04slug\x18\t \x01(\tB\xb2\x02\x92\x41\x84\x02\x32\xd2\x01\x44NS-safe slug for dynamic redirect URI resolution (e.g. acme for https://acme.example.com/callback). Lowercase alphanumeric and hyphens, 1-63 chars, must start and end with alphanumeric, unique per environment.J\x06\"acme\"x?\x80\x01\x01\x8a\x01\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$\xbaH\'r%\x10\x01\x18?2\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$H\x01R\x04slug\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idB\x07\n\x05_slug\"\xf8\n\n\x0cOrganization\x12{\n\x02id\x18\x01 \x01(\tBk\x92\x41h2MUnique scalekit-generated identifier that uniquely references an organizationJ\x17\"org_59615193906282635\"R\x02id\x12\x8c\x01\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBO\x92\x41I2+Timestamp when the organization was createdJ\x1a\"2025-02-15T06:23:44.560Z\"\xe0\x41\x02R\ncreateTime\x12\x8e\x01\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBQ\x92\x41N20Timestamp when the organization was last updatedJ\x1a\"2025-02-15T06:23:44.560Z\"R\nupdateTime\x12|\n\x0c\x64isplay_name\x18\x04 \x01(\tBY\x92\x41L2>Name of the organization. Must be between 1 and 200 charactersJ\n\"Megasoft\"\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\x92\x01\n\x0bregion_code\x18\x05 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeBP\x92\x41M2EGeographic region code for the organization. Currently limited to US.J\x04\"US\"R\nregionCode\x12\x9e\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBx\x92\x41u2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x0e\"my_unique_id\"H\x00R\nexternalId\x88\x01\x01\x12l\n\x08metadata\x18\x07 \x03(\x0b\x32\x35.scalekit.v1.organizations.Organization.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12K\n\x08settings\x18\x08 \x01(\x0b\x32/.scalekit.v1.organizations.OrganizationSettingsR\x08settings\x12\x85\x02\n\x04slug\x18\t \x01(\tB\xeb\x01\x92\x41\xe7\x01\x32\xb5\x01\x44NS-safe slug for dynamic redirect URI resolution. Must be 1-63 chars, lowercase alphanumeric and hyphens, must start and end with an alphanumeric character. Unique per environment.J\x06\"acme\"x?\x80\x01\x01\x8a\x01\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$H\x01R\x04slug\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idB\x07\n\x05_slug\"\xe0\x03\n\x19UpdateOrganizationRequest\x12j\n\x02id\x18\x01 \x01(\tBX\x92\x41L23Unique identifier of the organization to be updatedJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\x85\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tBb\x92\x41I2-External ID of the organization to be updatedJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x83\x01\n\x0corganization\x18\x03 \x01(\x0b\x32-.scalekit.v1.organizations.UpdateOrganizationB0\x92\x41\'2%Organization Parameters to be updated\xbaH\x03\xc8\x01\x01R\x0corganization\x12;\n\x0bupdate_mask\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskR\nupdateMaskB\x0c\n\nidentities\"\x87\x08\n\x12UpdateOrganization\x12\x9e\x01\n\x0c\x64isplay_name\x18\x04 \x01(\tBv\x92\x41i2SName of the organization to display in the UI. Must be between 1 and 200 charactersJ\x12\"Acme Corporation\"\xbaH\x07r\x05\x10\x01\x18\xc8\x01H\x00R\x0b\x64isplayName\x88\x01\x01\x12\x9d\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBw\x92\x41t2bYour application\'s unique identifier for this organization, used to link Scalekit with your systemJ\x0e\"tenant_12345\"H\x01R\nexternalId\x88\x01\x01\x12\xa5\x02\n\x08metadata\x18\x07 \x03(\x0b\x32;.scalekit.v1.organizations.UpdateOrganization.MetadataEntryB\xcb\x01\x92\x41\xae\x01\x32\x8f\x01\x43ustom key-value pairs to store with the organization. Keys must be 3-25 characters, values must be 1-256 characters. Maximum 10 pairs allowed.J\x1a{\"industry\": \"technology\"}\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\x9a\x02\n\x04slug\x18\t \x01(\tB\x80\x02\x92\x41\xd2\x01\x32\xa0\x01\x44NS-safe slug for dynamic redirect URI resolution. Lowercase alphanumeric and hyphens, 1-63 chars, must start and end with alphanumeric, unique per environment.J\x06\"acme\"x?\x80\x01\x01\x8a\x01\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$\xbaH\'r%\x10\x01\x18?2\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$H\x02R\x04slug\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0f\n\r_display_nameB\x0e\n\x0c_external_idB\x07\n\x05_slugJ\x04\x08\x05\x10\x06\"\x8c\x01\n\x1aUpdateOrganizationResponse\x12n\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationB!\x92\x41\x1e\x32\x1cUpdated organization detailsR\x0corganization\"\xeb\x02\n\x16GetOrganizationRequest\x12\x84\x01\n\x02id\x18\x01 \x01(\tBr\x92\x41\x66\x32MUnique scalekit-generated identifier that uniquely references an organizationJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\xbb\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\x97\x01\x92\x41~2bUnique identifier that links an Organization Object to your app\'s tenant, stored as an External IDJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalIdB\x0c\n\nidentities\"\x8b\x01\n\x17GetOrganizationResponse\x12p\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationB#\x92\x41 2\x1eThe newly created organizationR\x0corganization\"\xe0\x05\n\x18ListOrganizationsRequest\x12t\n\tpage_size\x18\x01 \x01(\rBW\x92\x41T2NMaximum number of organizations to return per page. Must be between 10 and 100J\x02\x33\x30R\x08pageSize\x12\x8f\x01\n\npage_token\x18\x02 \x01(\tBp\x92\x41m2[Pagination token from the previous response. Use to retrieve the next page of organizationsJ\x0e\"\"R\tpageToken\x12\xa8\x01\n\x0b\x65xternal_id\x18\x03 \x01(\tB\x81\x01\x92\x41~2bYour application\'s unique identifier for this organization, used to link Scalekit with your systemJ\x18\"\"H\x00R\nexternalId\x88\x01\x01:\x80\x02\x92\x41\xfc\x01\n\xab\x01*\x12List Organizations2\x94\x01Retrieves a paginated list of all organizations within the environment. Use the `page_token` from the response to access subsequent pages of results*L\n\x12List Organizations\x12\x36https://docs.scalekit.com/reference/list-organizationsB\x0e\n\x0c_external_id\"\xa4\x04\n\x19ListOrganizationsResponse\x12\x97\x01\n\x0fnext_page_token\x18\x01 \x01(\tBo\x92\x41l2UPagination token for the next page of results. Use this token to fetch the next page.J\x13\"\"R\rnextPageToken\x12Y\n\ntotal_size\x18\x02 \x01(\rB:\x92\x41\x37\x32\x31Total number of organizations in the environment.J\x02\x33\x30R\ttotalSize\x12p\n\rorganizations\x18\x03 \x03(\x0b\x32\'.scalekit.v1.organizations.OrganizationB!\x92\x41\x1e\x32\x1cList of organization objectsR\rorganizations\x12\x9f\x01\n\x0fprev_page_token\x18\x04 \x01(\tBw\x92\x41t2]Pagination token for the previous page of results. Use this token to fetch the previous page.J\x13\"\"R\rprevPageToken\"\xa7\x05\n\x1aSearchOrganizationsRequest\x12\xa5\x01\n\x05query\x18\x01 \x01(\tB\x8e\x01\x92\x41\x7f\x32wSearch term to match against organization names, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\x04\x61\x63me\xbaH\tr\x04\x10\x03\x18\x64\xc8\x01\x01R\x05query\x12\x80\x01\n\tpage_size\x18\x02 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x03 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken:\xb5\x01\x92\x41\xb1\x01\n\x88\x01*\x14Search Organizations2pSearch for organizations in your environment using a text query that matches against names, IDs, or external IDs2$query=acme&page_size=30&page_token=1\"\xdb\x01\n\x1bSearchOrganizationsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12M\n\rorganizations\x18\x03 \x03(\x0b\x32\'.scalekit.v1.organizations.OrganizationR\rorganizations\x12&\n\x0fprev_page_token\x18\x04 \x01(\tR\rprevPageToken\"\xad\x02\n\x19\x44\x65leteOrganizationRequest\x12~\n\x02id\x18\x01 \x01(\tBl\x92\x41`2MUnique scalekit-generated identifier that uniquely references an organizationJ\x0f\"org_123456789\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\x81\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB^\x92\x41\x45\x32)External ID of the organization to deleteJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalIdB\x0c\n\nidentities\"\xcf\x04\n\x19GeneratePortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12(\n\x03sso\x18\x02 \x01(\x08\x42\x11\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\x03sso\x88\x01\x01\x12=\n\x0e\x64irectory_sync\x18\x03 \x01(\x08\x42\x11\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\rdirectorySync\x88\x01\x01\x12\xdd\x02\n\x08\x66\x65\x61tures\x18\x04 \x03(\x0e\x32\".scalekit.v1.organizations.FeatureB\x9c\x02\x92\x41\x98\x02\x32\x95\x02\x46\x65\x61tures to enable in the admin portal link. To enable features, append them as URL parameters:\n\n- Single Sign-On: ?features=sso\n- Directory Sync: ?features=dir_sync\n- Both features: ?features=sso&features=dir_sync\n\nExample URL: https://scalekit.com/portal/lnk_123?features=ssoR\x08\x66\x65\x61turesB\x06\n\x04_ssoB\x11\n\x0f_directory_sync\"f\n\x14GetPortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\"i\n\x17\x44\x65letePortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\"\xbe\x01\n\x1b\x44\x65letePortalLinkByIdRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12O\n\x07link_id\x18\x02 \x01(\tB6\x92\x41!2\x07Link IDJ\x16\"lnk_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04lnk_\xc8\x01\x01R\x06linkId\"\xb5\x03\n\x04Link\x12J\n\x02id\x18\x01 \x01(\tB:\x92\x41\x37\x32\x1eUnique Identifier for the linkJ\x15\"lnk_123123123123123\"R\x02id\x12\xc7\x01\n\x08location\x18\x02 \x01(\tB\xaa\x01\x92\x41\xa6\x01\x32qLocation of the link. This is the URL that can be used to access the Admin portal. The link is valid for 1 minuteJ1\"https://scalekit.com/portal/lnk_123123123123123\"R\x08location\x12\x96\x01\n\x0b\x65xpire_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBY\x92\x41V28Expiry time of the link. The link is valid for 1 minute.J\x1a\"2024-02-06T14:48:00.000Z\"R\nexpireTime\"\x96\x02\n\x1aGeneratePortalLinkResponse\x12\xf7\x01\n\x04link\x18\x01 \x01(\x0b\x32\x1f.scalekit.v1.organizations.LinkB\xc1\x01\x92\x41\xbd\x01\x32\xba\x01\x43ontains the generated admin portal link details. The link URL can be shared with organization administrators to set up: Single Sign-On (SSO) authentication and directory synchronizationR\x04link\"h\n\x16GetPortalLinksResponse\x12N\n\x05links\x18\x01 \x03(\x0b\x32\x1f.scalekit.v1.organizations.LinkB\x17\x92\x41\x14\x32\x12\x41\x64min Portal LinksR\x05links\"\x90\x04\n!UpdateOrganizationSettingsRequest\x12\x97\x01\n\x02id\x18\x01 \x01(\tB\x86\x01\x92\x41q2WUnique identifier of the organization to update settings. Must begin with \'org_\' prefixJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12\xd0\x02\n\x08settings\x18\x02 \x01(\x0b\x32/.scalekit.v1.organizations.OrganizationSettingsB\x82\x02\x92\x41\xf8\x01\x32\x95\x01Settings configuration to apply to the organization. Contains feature toggles for SSO, directory synchronization, and other organization capabilitiesJ^{\"features\": [{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]}\xbaH\x03\xc8\x01\x01R\x08settings\"\x91\x0c\n!OrganizationSessionPolicySettings\x12\x92\x02\n\rpolicy_source\x18\x01 \x01(\x0e\x32,.scalekit.v1.organizations.SessionPolicyTypeB\xbe\x01\x92\x41\xaf\x01\x32\xa2\x01Policy source. \'APPLICATION\' means the organization inherits the application-level session policy. \'CUSTOM\' means organization-specific timeout values are active.J\x08\"CUSTOM\"\xbaH\x08\x82\x01\x05\x10\x01\"\x01\x00R\x0cpolicySource\x12\xec\x01\n\x18\x61\x62solute_session_timeout\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x94\x01\x92\x41\x90\x01\x32\x88\x01The absolute session timeout value. The unit is specified by absolute_session_timeout_unit. Omitted when policy_source is \'environment\'.J\x03\x33\x36\x30R\x16\x61\x62soluteSessionTimeout\x12\xea\x01\n\x1d\x61\x62solute_session_timeout_unit\x18\x03 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitB\x82\x01\x92\x41\x7f\x32rUnit for absolute_session_timeout. Accepted values: \'minutes\', \'hours\', \'days\'. Responses always return \'minutes\'.J\t\"minutes\"H\x00R\x1a\x61\x62soluteSessionTimeoutUnit\x88\x01\x01\x12\xd3\x01\n\x1cidle_session_timeout_enabled\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBv\x92\x41s2kWhether idle session timeout is enabled for this organization. Omitted when policy_source is \'environment\'.J\x04trueR\x19idleSessionTimeoutEnabled\x12\x84\x02\n\x14idle_session_timeout\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xb4\x01\x92\x41\xb0\x01\x32\xa9\x01The idle session timeout value. The unit is specified by idle_session_timeout_unit. Omitted when idle_session_timeout_enabled is false or policy_source is \'environment\'.J\x02\x38\x34R\x12idleSessionTimeout\x12\xdd\x01\n\x19idle_session_timeout_unit\x18\x06 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitB~\x92\x41{2nUnit for idle_session_timeout. Accepted values: \'minutes\', \'hours\', \'days\'. Responses always return \'minutes\'.J\t\"minutes\"H\x01R\x16idleSessionTimeoutUnit\x88\x01\x01\x42 \n\x1e_absolute_session_timeout_unitB\x1c\n\x1a_idle_session_timeout_unit\"\xd4\x01\n#GetOrganizationSessionPolicyRequest\x12\xac\x01\n\x0forganization_id\x18\x01 \x01(\tB\x82\x01\x92\x41m2RThe unique identifier of the organization whose session policy is being requested.J\x17\"org_59615193906282635\"\xe0\x41\x02\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\"\xac\x01\n$GetOrganizationSessionPolicyResponse\x12\x83\x01\n\x06policy\x18\x01 \x01(\x0b\x32<.scalekit.v1.organizations.OrganizationSessionPolicySettingsB-\x92\x41*2(The session policy for the organization.R\x06policy\"\xb7\x0c\n&UpdateOrganizationSessionPolicyRequest\x12\xaa\x01\n\x0forganization_id\x18\x01 \x01(\tB\x80\x01\x92\x41k2PThe unique identifier of the organization whose session policy is being updated.J\x17\"org_59615193906282635\"\xe0\x41\x02\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xe8\x01\n\rpolicy_source\x18\x02 \x01(\x0e\x32,.scalekit.v1.organizations.SessionPolicyTypeB\x94\x01\x92\x41\x90\x01\x32\x83\x01Policy source. Send \'APPLICATION\' to revert to application defaults. Send \'CUSTOM\' with timeout values to activate a custom policy.J\x08\"CUSTOM\"R\x0cpolicySource\x12\xe7\x01\n\x18\x61\x62solute_session_timeout\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x8f\x01\x92\x41\x8b\x01\x32\x83\x01The absolute session timeout value. The unit is specified by absolute_session_timeout_unit. Omit when policy_source is APPLICATION.J\x03\x33\x36\x30R\x16\x61\x62soluteSessionTimeout\x12\xdb\x01\n\x1d\x61\x62solute_session_timeout_unit\x18\x04 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitBt\x92\x41q2dUnit for absolute_session_timeout. Accepted values: \'MINUTES\', \'HOURS\', \'DAYS\'. Defaults to MINUTES.J\t\"MINUTES\"H\x00R\x1a\x61\x62soluteSessionTimeoutUnit\x88\x01\x01\x12\xb8\x01\n\x1cidle_session_timeout_enabled\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB[\x92\x41X2PWhether idle session timeout is enabled. Omit when policy_source is APPLICATION.J\x04trueR\x19idleSessionTimeoutEnabled\x12\xdf\x01\n\x14idle_session_timeout\x18\x06 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x8f\x01\x92\x41\x8b\x01\x32\x84\x01The idle session timeout value. The unit is specified by idle_session_timeout_unit. Omit when idle_session_timeout_enabled is false.J\x02\x38\x34R\x12idleSessionTimeout\x12\xcf\x01\n\x19idle_session_timeout_unit\x18\x07 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitBp\x92\x41m2`Unit for idle_session_timeout. Accepted values: \'MINUTES\', \'HOURS\', \'DAYS\'. Defaults to MINUTES.J\t\"MINUTES\"H\x01R\x16idleSessionTimeoutUnit\x88\x01\x01\x42 \n\x1e_absolute_session_timeout_unitB\x1c\n\x1a_idle_session_timeout_unit\"\xb7\x01\n\'UpdateOrganizationSessionPolicyResponse\x12\x8b\x01\n\x06policy\x18\x01 \x01(\x0b\x32<.scalekit.v1.organizations.OrganizationSessionPolicySettingsB5\x92\x41\x32\x32\x30The updated session policy for the organization.R\x06policy\"\xaa\x01\n\"GetApplicationSessionPolicyRequest\x12\x83\x01\n\x0forganization_id\x18\x01 \x01(\tBZ\x92\x41\x45\x32*The unique identifier of the organization.J\x17\"org_59615193906282635\"\xe0\x41\x02\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\"\x9e\x04\n ApplicationSessionPolicySettings\x12h\n\x18\x61\x62solute_session_timeout\x18\x01 \x01(\x05\x42.\x92\x41+2$Absolute session timeout in minutes.J\x03\x34\x38\x30R\x16\x61\x62soluteSessionTimeout\x12\x8e\x01\n\x1cidle_session_timeout_enabled\x18\x02 \x01(\x08\x42M\x92\x41J2AWhether idle session timeout is enabled at the application level.J\x05\x66\x61lseR\x19idleSessionTimeoutEnabled\x12\x7f\n\x14idle_session_timeout\x18\x03 \x01(\x05\x42M\x92\x41J2DIdle session timeout in minutes. Zero when idle timeout is disabled.J\x02\x36\x30R\x12idleSessionTimeout\x12~\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x04 \x01(\x05\x42N\x92\x41K2FAccess token expiry in minutes. Custom policy values must exceed this.J\x01\x35R\x11\x61\x63\x63\x65ssTokenExpiry\"\xd1\x01\n#GetApplicationSessionPolicyResponse\x12\xa9\x01\n\x12\x61pplication_policy\x18\x01 \x01(\x0b\x32;.scalekit.v1.organizations.ApplicationSessionPolicySettingsB=\x92\x41:28The effective application-level session policy settings.R\x11\x61pplicationPolicy\"\xdc\x02\n\"OrganizationUserManagementSettings\x12\xb5\x02\n\x11max_allowed_users\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xeb\x01\x92\x41\xe7\x01\x32\xdf\x01Maximum number of users allowed in the organization. When nil (not set), there feature is not enabled. When explicitly set to zero, it also means no limit. When set to a positive integer, it enforces the maximum user limit.J\x03\x31\x30\x30R\x0fmaxAllowedUsers\"\xae\x08\n\x1bOrganizationSessionSettings\x12\xfe\x01\n\x18\x61\x62solute_session_timeout\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xa6\x01\x92\x41\xa2\x01\x32\x98\x01The maximum duration in seconds that a session can remain active, regardless of activity. After this time, the user will be required to re-authenticate.J\x05\x38\x36\x34\x30\x30R\x16\x61\x62soluteSessionTimeout\x12\xd4\x01\n\x14idle_session_timeout\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x84\x01\x92\x41\x80\x01\x32xThe duration in seconds that a session can remain idle before it is automatically terminated. Activity resets the timer.J\x04\x31\x38\x30\x30R\x12idleSessionTimeout\x12\x8e\x02\n\x1cidle_session_timeout_enabled\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xb0\x01\x92\x41\xac\x01\x32\xa3\x01Whether idle session timeout is enabled for this organization. When enabled, sessions expire after the idle timeout duration regardless of the environment setting.J\x04trueR\x19idleSessionTimeoutEnabled\x12\xe7\x01\n\rpolicy_source\x18\x06 \x01(\tB\xc1\x01\x92\x41\xbd\x01\x32\xb0\x01Policy source for this organization. APPLICATION means the organization inherits application-level session policy. CUSTOM means organization-specific timeout values are active.J\x08\"CUSTOM\"R\x0cpolicySourceJ\x04\x08\x02\x10\x03J\x04\x08\x04\x10\x05R\x1asession_management_enabledR\x14idle_session_enabled\"\x8e\x04\n\x14OrganizationSettings\x12\xa4\x02\n\x08\x66\x65\x61tures\x18\x01 \x03(\x0b\x32\x36.scalekit.v1.organizations.OrganizationSettingsFeatureB\xcf\x01\x92\x41\xcb\x01\x32wList of feature toggles that control organization capabilities such as SSO authentication and directory synchronizationJP[{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]R\x08\x66\x65\x61tures:\xce\x01\x92\x41\xca\x01\nh*\x15Organization Settings2OConfiguration options that control organization-level features and capabilities2^{\"features\": [{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]}\"\x8e\x04\n\x1bOrganizationSettingsFeature\x12\x81\x02\n\x04name\x18\x01 \x01(\tB\xec\x01\x92\x41\xe8\x01\x32\xde\x01\x46\x65\x61ture identifier. Supported values include: \"sso\" (Single Sign-On), \"directory_sync\" (Directory Synchronization), \"domain_verification\" (Domain Verification), \"session_policy\" (Organization-level session policy override)J\x05\"sso\"R\x04name\x12t\n\x07\x65nabled\x18\x02 \x01(\x08\x42Z\x92\x41W2OWhether the feature is enabled (true) or disabled (false) for this organizationJ\x04trueR\x07\x65nabled:u\x92\x41r\np*\x1bOrganization Feature Toggle2@Controls the activation state of a specific organization feature\xd2\x01\x04name\xd2\x01\x07\x65nabled\"\x96\x02\n#UpsertUserManagementSettingsRequest\x12W\n\x0forganization_id\x18\x01 \x01(\tB.\x92\x41\x19\x32\x17ID of the organization.\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\x12\x95\x01\n\x08settings\x18\x02 \x01(\x0b\x32=.scalekit.v1.organizations.OrganizationUserManagementSettingsB:\x92\x41\x31\x32/The new values for the setting fields to patch.\xbaH\x03\xc8\x01\x01R\x08settings\"\x9c\x01\n$UpsertUserManagementSettingsResponse\x12t\n\x08settings\x18\x01 \x01(\x0b\x32=.scalekit.v1.organizations.OrganizationUserManagementSettingsB\x19\x92\x41\x16\x32\x14The updated setting.R\x08settings\"\x87\x01\n,GetOrganizationUserManagementSettingsRequest\x12W\n\x0forganization_id\x18\x01 \x01(\tB.\x92\x41\x19\x32\x17ID of the organization.\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\"\xaf\x01\n-GetOrganizationUserManagementSettingsResponse\x12~\n\x08settings\x18\x01 \x01(\x0b\x32=.scalekit.v1.organizations.OrganizationUserManagementSettingsB#\x92\x41 2\x1eList of organization settings.R\x08settings*R\n\x07\x46\x65\x61ture\x12\x17\n\x13\x46\x45\x41TURE_UNSPECIFIED\x10\x00\x12\x13\n\x0bUNSPECIFIED\x10\x00\x1a\x02\x08\x01\x12\x0c\n\x08\x64ir_sync\x10\x01\x12\x07\n\x03sso\x10\x02\x1a\x02\x10\x01*U\n\x11SessionPolicyType\x12#\n\x1fSESSION_POLICY_TYPE_UNSPECIFIED\x10\x00\x12\x0f\n\x0b\x41PPLICATION\x10\x01\x12\n\n\x06\x43USTOM\x10\x02\x32\xaaP\n\x13OrganizationService\x12\x88\x04\n\x12\x43reateOrganization\x12\x34.scalekit.v1.organizations.CreateOrganizationRequest\x1a\x35.scalekit.v1.organizations.CreateOrganizationResponse\"\x84\x03\x92\x41\xcf\x02\n\rOrganizations\x12\x16\x43reate an organization\x1a\x8f\x01\x43reates a new organization in your environment. Use this endpoint to add a new tenant that can be configured with various settings and metadataJ\x93\x01\n\x03\x32\x30\x31\x12\x8b\x01\nNReturns the newly created organization with its unique identifier and settings\x12\x39\n7\x1a\x35.scalekit.v1.organizations.CreateOrganizationResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02%\"\x15/api/v1/organizations:\x0corganization\x12\xbf\x04\n\x12UpdateOrganization\x12\x34.scalekit.v1.organizations.UpdateOrganizationRequest\x1a\x35.scalekit.v1.organizations.UpdateOrganizationResponse\"\xbb\x03\x92\x41\xec\x02\n\rOrganizations\x12\x1bUpdate organization details\x1a\xa1\x01Updates an organization\'s display name, external ID, or metadata. Requires a valid organization identifier. Region code cannot be modified through this endpoint.J\x99\x01\n\x03\x32\x30\x30\x12\x91\x01\nTReturns the updated organization with all current details reflected in the response.\x12\x39\n7\x1a\x35.scalekit.v1.organizations.UpdateOrganizationResponse\x82\xb5\x18\x17\n\x13organizations_write\x18T\x82\xd3\xe4\x93\x02*2\x1a/api/v1/organizations/{id}:\x0corganization\x12\xde\x03\n\x0fGetOrganization\x12\x31.scalekit.v1.organizations.GetOrganizationRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xe3\x02\x92\x41\xa3\x02\n\rOrganizations\x12\x18Get organization details\x1a]Retrieves organization details by Scalekit ID, including name, region, metadata, and settingsJ\x98\x01\n\x03\x32\x30\x30\x12\x90\x01\nVReturns the complete organization object with ID, display name, settings, and metadata\x12\x36\n4\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/organizations/{id}\x12\xd3\x05\n\x1bGetOrganizationByExternalId\x12\x31.scalekit.v1.organizations.GetOrganizationRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xcc\x04\x92\x41\xfa\x03\n\rOrganizations\x12\'Get organization details by external Id\x1a]Retrieves organization details by External ID, including name, region, metadata, and settingsJ\xa4\x01\n\x03\x32\x30\x30\x12\x9c\x01\nbReturns the complete organization object with ID, display name, settings, external ID and metadata\x12\x36\n4\x1a\x32.scalekit.v1.organizations.GetOrganizationResponseJa\n\x03\x34\x30\x30\x12Z\nXInvalid request - external ID is empty or the caller\'s organization claim does not matchJW\n\x03\x34\x30\x34\x12P\nNOrganization not found - no organization exists with the specified external ID\x82\xb5\x18\x16\n\x12organizations_read\x18\x04\x82\xd3\xe4\x93\x02.\x12,/api/v1/organizations:external/{external_id}\x12\xc2\t\n\x10ListOrganization\x12\x33.scalekit.v1.organizations.ListOrganizationsRequest\x1a\x34.scalekit.v1.organizations.ListOrganizationsResponse\"\xc2\x08\x92\x41\x9b\x08\n\rOrganizations\x12\x12List organizations\x1a\xa0\x01Retrieve a paginated list of organizations within your environment. The response includes a `page_token` that can be used to access subsequent pages of results.Js\n\x03\x32\x30\x30\x12l\n0Successfully retrieved the list of organizations\x12\x38\n6\x1a\x34.scalekit.v1.organizations.ListOrganizationsResponseJ\x1b\n\x03\x34\x30\x30\x12\x14\n\x12Invalid page tokenj\xc0\x05\n\rx-codeSamples\x12\xae\x05\x32\xab\x05\n\x97\x01*\x94\x01\n\x16\n\x05label\x12\r\x1a\x0bNode.js SDK\n\x14\n\x04lang\x12\x0c\x1a\njavascript\nd\n\x06source\x12Z\x1aXconst organizations = await scalekit.organization.listOrganization({\n pageSize: 10,\n});\n\xc0\x01*\xbd\x01\n\x15\n\x05label\x12\x0c\x1a\nPython SDK\n\x10\n\x04lang\x12\x08\x1a\x06python\n\x91\x01\n\x06source\x12\x86\x01\x1a\x83\x01options = ListOrganizationOptions()\noptions.page_size = 10\n\norganizations = sc.organization.list_organizations(\n options=options\n)\n\xaf\x01*\xac\x01\n\x11\n\x05label\x12\x08\x1a\x06Go SDK\n\x0c\n\x04lang\x12\x04\x1a\x02go\n\x88\x01\n\x06source\x12~\x1a|organizations, err := sc.Organization.ListOrganizations(\n ctx,\n &scalekit.ListOrganizationOptions{\n PageSize: 10,\n }\n)\n\x99\x01*\x96\x01\n\x13\n\x05label\x12\n\x1a\x08Java SDK\n\x0e\n\x04lang\x12\x06\x1a\x04java\no\n\x06source\x12\x65\x1a\x63ListOrganizationsResponse organizations = scalekitClient.organizations().listOrganizations(10, \"\");\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x17\x12\x15/api/v1/organizations\x12\xf1\x04\n\x12SearchOrganization\x12\x35.scalekit.v1.organizations.SearchOrganizationsRequest\x1a\x36.scalekit.v1.organizations.SearchOrganizationsResponse\"\xeb\x03\x92\x41\xae\x03\n\rOrganizations\x12\x14Search organizations\x1a\xd4\x01Searches for organizations in your environment using a query string. The query matches against organization name, ID, or external ID. Returns multiple results when more than one organization matches the criteria.J\xaf\x01\n\x03\x32\x30\x30\x12\xa7\x01\niReturns a list of matching organizations and a page token for pagination if there are additional results.\x12:\n8\x1a\x36.scalekit.v1.organizations.SearchOrganizationsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\x12\x1c/api/v1/organizations:search\x12\xcf\x02\n\x12\x44\x65leteOrganization\x12\x34.scalekit.v1.organizations.DeleteOrganizationRequest\x1a\x16.google.protobuf.Empty\"\xea\x01\x92\x41\xbe\x01\n\rOrganizations\x12\x16\x44\x65lete an organization\x1aPRemove an existing organization from the environment using its unique identifierJC\n\x03\x32\x30\x30\x12<\n:Organization successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1c*\x1a/api/v1/organizations/{id}\x12\xe2\x04\n\x12GeneratePortalLink\x12\x34.scalekit.v1.organizations.GeneratePortalLinkRequest\x1a\x35.scalekit.v1.organizations.GeneratePortalLinkResponse\"\xde\x03\x92\x41\xa5\x03\n\rOrganizations\x12\x1aGenerate admin portal link\x1a\xd5\x01\x43reates a single use Admin Portal URL valid for 1 minute. Once the generated admin portal URL is accessed or rendered, a temporary session of 6 hours is created to allow the admin to update SSO/SCIM configuration.J\x9f\x01\n\x03\x32\x30\x30\x12\x97\x01\nZAdmin Portal link generated successfully. Returns the portal URL and expiration timestamp.\x12\x39\n7\x1a\x35.scalekit.v1.organizations.GeneratePortalLinkResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02)\x1a\'/api/v1/organizations/{id}/portal_links\x12\xa0\x02\n\x10\x44\x65letePortalLink\x12\x32.scalekit.v1.organizations.DeletePortalLinkRequest\x1a\x16.google.protobuf.Empty\"\xbf\x01\x92\x41x\n\x0c\x41\x64min Portal\x12\x12\x44\x65lete portal link\x1a)Revokes and deletes an Admin portal link.J)\n\x03\x32\x30\x30\x12\"\n Portal link deleted successfully\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)*\'/api/v1/organizations/{id}/portal_links\x12\x9f\x02\n\x14\x44\x65letePortalLinkByID\x12\x36.scalekit.v1.organizations.DeletePortalLinkByIdRequest\x1a\x16.google.protobuf.Empty\"\xb6\x01\x92\x41\x65\n\x0c\x41\x64min Portal\x12\x18\x44\x65lete admin portal link\x1a)Revokes and deletes an Admin portal link.J\x10\n\x03\x32\x30\x30\x12\t\n\x07Success\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x33*1/api/v1/organizations/{id}/portal_links/{link_id}\x12\x88\x03\n\x0eGetPortalLinks\x12/.scalekit.v1.organizations.GetPortalLinkRequest\x1a\x31.scalekit.v1.organizations.GetPortalLinksResponse\"\x91\x02\x92\x41\xc9\x01\n\x0c\x41\x64min Portal\x12\x0fGet portal link\x1a_Returns the Admin portal link if it exists. Use Generate Portal link to create and fetch a linkJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.organizations.GetPortalLinksResponse\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)\x12\'/api/v1/organizations/{id}/portal_links\x12\xfa\x06\n\x1aUpdateOrganizationSettings\x12<.scalekit.v1.organizations.UpdateOrganizationSettingsRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xe9\x05\x92\x41\xaa\x05\n\rOrganizations\x12\x1cToggle organization settings\x1a\xd3\x01Updates configuration settings for an organization. Supports modifying SSO configuration, directory synchronization settings, and session parameters. Requires organization ID and the specific settings to update.J\xe3\x01\n\x03\x32\x30\x30\x12\xdb\x01\n\xa0\x01Returns the complete organization object with updated settings applied. Contains all organization details including ID, display name, and the modified settings.\x12\x36\n4\x1a\x32.scalekit.v1.organizations.GetOrganizationResponseJp\n\x03\x34\x30\x30\x12i\ngInvalid request - occurs when the settings payload contains invalid values or unsupported configurationJM\n\x03\x34\x30\x34\x12\x46\nDOrganization not found - the specified organization ID doesn\'t exist\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02/2#/api/v1/organizations/{id}/settings:\x08settings\x12\xd0\x05\n\x1fUpdateOrganizationSessionPolicy\x12\x41.scalekit.v1.organizations.UpdateOrganizationSessionPolicyRequest\x1a\x42.scalekit.v1.organizations.UpdateOrganizationSessionPolicyResponse\"\xa5\x04\x92\x41\xbc\x03\n\rOrganizations\x12\"Update organization session policy\x1a\xed\x01Sets a custom session policy for an organization or reverts to application-level settings. Send session_policy=\'APPLICATION\' to revert to application defaults. Send session_policy=\'CUSTOM\' with timeout values to activate a custom policy.Ju\n\x03\x32\x30\x30\x12n\n$Session policy updated successfully.\x12\x46\nD\x1a\x42.scalekit.v1.organizations.UpdateOrganizationSessionPolicyResponseJ \n\x03\x34\x30\x34\x12\x19\n\x17Organization not found.\x82\xb5\x18 \n\x1corganizations_sessions_write\x18T\x82\xd3\xe4\x93\x02;26/api/v1/organizations/{organization_id}/session-policy:\x01*\x12\xb9\x05\n\x1cGetOrganizationSessionPolicy\x12>.scalekit.v1.organizations.GetOrganizationSessionPolicyRequest\x1a?.scalekit.v1.organizations.GetOrganizationSessionPolicyResponse\"\x97\x04\x92\x41\xb2\x03\n\rOrganizations\x12\x1fGet organization session policy\x1a\xe7\x01Retrieves the session policy for an organization. Returns session_policy=\'APPLICATION\' if the organization inherits the application-level defaults, or session_policy=\'CUSTOM\' with the configured values if a custom policy is active.Jt\n\x03\x32\x30\x30\x12m\n&Session policy retrieved successfully.\x12\x43\nA\x1a?.scalekit.v1.organizations.GetOrganizationSessionPolicyResponseJ \n\x03\x34\x30\x34\x12\x19\n\x17Organization not found.\x82\xb5\x18\x1f\n\x1borganizations_sessions_read\x18T\x82\xd3\xe4\x93\x02\x38\x12\x36/api/v1/organizations/{organization_id}/session-policy\x12\xd5\x03\n\x1cUpsertUserManagementSettings\x12>.scalekit.v1.organizations.UpsertUserManagementSettingsRequest\x1a?.scalekit.v1.organizations.UpsertUserManagementSettingsResponse\"\xb3\x02\x92\x41\xdf\x01\n\rOrganizations\x12 Upsert organization user setting\x1a\x33Upsert user management settings for an organizationJw\n\x03\x32\x30\x30\x12p\n)Returns the updated organization setting.\x12\x43\nA\x1a?.scalekit.v1.organizations.UpsertUserManagementSettingsResponse\x82\xb5\x18\x02\x18\x64\x82\xd3\xe4\x93\x02\x44\x32?/api/v1/organizations/{organization_id}/settings/usermanagement:\x01*\x12\x9f\x04\n$GetOrganizationUserManagementSetting\x12G.scalekit.v1.organizations.GetOrganizationUserManagementSettingsRequest\x1aH.scalekit.v1.organizations.GetOrganizationUserManagementSettingsResponse\"\xe3\x02\x92\x41\x83\x02\n\rOrganizations\x12(Get organization user management setting\x1a\x43Retrieves the user management settings for a specific organization.J\x82\x01\n\x03\x32\x30\x30\x12{\n+Returns the requested organization setting.\x12L\nJ\x1aH.scalekit.v1.organizations.GetOrganizationUserManagementSettingsResponse\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x41\x12?/api/v1/organizations/{organization_id}/settings/usermanagement\x12\xee\x05\n\x1bGetApplicationSessionPolicy\x12=.scalekit.v1.organizations.GetApplicationSessionPolicyRequest\x1a>.scalekit.v1.organizations.GetApplicationSessionPolicyResponse\"\xcf\x04\x92\x41\xcf\x03\n\rOrganizations\x12/Get application session policy for organization\x1a\xa6\x01Returns the application-level session settings for display in hosted pages. Includes absolute timeout, idle timeout configuration, and access token expiry in minutes.J\x7f\n\x03\x32\x30\x30\x12x\n2Application session policy retrieved successfully.\x12\x42\n@\x1a>.scalekit.v1.organizations.GetApplicationSessionPolicyResponseJA\n\x03\x34\x30\x33\x12:\n8Session policy feature not enabled for this environment.J \n\x03\x34\x30\x34\x12\x19\n\x17Organization not found.\x82\xb5\x18\x1f\n\x1borganizations_sessions_read\x18T\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x44\x12\x42/api/v1/organizations/{organization_id}/application-session-policy\x1aX\x92\x41U\n\rOrganizations\x12\x44{{import \"proto/scalekit/v1/organizations/organization_details.md\"}}B\xa9\'Z7github.com/scalekit-inc/scalekit/pkg/grpc/organizations\x92\x41\xec&\x12\x92\"\n\rScalekit APIs\x12\x83!# Introduction\n\nThe Scalekit API is a RESTful API that enables you to manage organizations, users, and authentication settings. All requests must use HTTPS.\nAll API requests use the following base URLs:\n\n```\nhttps://{environment}.scalekit.dev (Development)\nhttps://{environment}.scalekit.com (Production)\nhttps://auth.example.com (Custom domain)\n```\n\nScalekit operates two separate environments: Development and Production. Resources cannot be moved between environments.\n\n# Authentication\n\nThe Scalekit API uses OAuth 2.0 Client Credentials for authentication.\n\nCopy your API credentials from the Scalekit dashboard\'s API Config section and set them as environment variables.\n\n```sh\nSCALEKIT_ENVIRONMENT_URL=\'\'\nSCALEKIT_CLIENT_ID=\'\'\nSCALEKIT_CLIENT_SECRET=\'\'\n```\n\nGetting an access token\n\n1. Get your credentials from the [Scalekit Dashboard](https://app.scalekit.com)\n2. Request an access token:\n\n```sh\ncurl https://{SCALEKIT_ENVIRONMENT_URL}/oauth/token \\\n -X POST \\\n -H \'Content-Type: application/x-www-form-urlencoded\' \\\n -d \'client_id={client_id}\' \\\n -d \'client_secret={client_secret}\' \\\n -d \'grant_type=client_credentials\'\n```\n\n3. Use the access token in API requests:\n\n```sh\ncurl https://{SCALEKIT_ENVIRONMENT_URL}/api/v1/organizations \\\n -H \'Content-Type: application/json\' \\\n -H \'Authorization: Bearer {access_token}\'\n```\n\nThe response includes an access token:\n\n```json\n{\n\t\"access_token\": \"eyJhbGciOiJSUzI1NiIsImtpZCI6InNua181Ok4OTEyMjU2NiIsInR5cCI6IkpXVCJ9...\",\n\t\"token_type\": \"Bearer\",\n\t\"expires_in\": 86399,\n\t\"scope\": \"openid\"\n}\n```\n\n# SDKs\n\nScalekit provides official SDKs for multiple programming languages. Check the changelog at GitHub repositories for the latest updates.\n\n### Node.js\n\n```sh\nnpm install @scalekit-sdk/node\n```\n\nCreate a new Scalekit client instance after initializing the environment variables\n\n```js\nimport { Scalekit } from \"@scalekit-sdk/node\";\n\nexport let scalekit = new Scalekit(\n\tprocess.env.SCALEKIT_ENVIRONMENT_URL,\n\tprocess.env.SCALEKIT_CLIENT_ID,\n\tprocess.env.SCALEKIT_CLIENT_SECRET\n);\n```\n\n[See the Node SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-node/releases)\n\n### Python\n\n```sh\npip install scalekit-sdk-python\n```\n\nCreate a new Scalekit client instance after initializing the environment variables.\n\n```py\nfrom scalekit import ScalekitClient\nimport os\n\nscalekit_client = ScalekitClient(\n os.environ.get(\'SCALEKIT_ENVIRONMENT_URL\'),\n os.environ.get(\'SCALEKIT_CLIENT_ID\'),\n os.environ.get(\'SCALEKIT_CLIENT_SECRET\')\n)\n```\n\n[See the Python SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-python/releases)\n\n### Go\n\n```sh\ngo get -u github.com/scalekit-inc/scalekit-sdk-go\n```\n\nCreate a new Scalekit client instance after initializing the environment variables.\n\n```go\npackage main\n\nimport (\n \"os\"\n \"github.com/scalekit-inc/scalekit-sdk-go\"\n)\n\nscalekitClient := scalekit.NewScalekitClient(\n os.Getenv(\"SCALEKIT_ENVIRONMENT_URL\"),\n os.Getenv(\"SCALEKIT_CLIENT_ID\"),\n os.Getenv(\"SCALEKIT_CLIENT_SECRET\"),\n)\n```\n\n[See the Go SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-go/releases)\n\n### Java\n\n```gradle\n/* Gradle users - add the following to your dependencies in build file */\nimplementation \"com.scalekit:scalekit-sdk-java:2.0.6\"\n```\n\n```xml\n\n\n com.scalekit\n scalekit-sdk-java\n 2.0.6\n\n```\n\n[See the Java SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-java/releases)\n\n# Error handling\n\nThe API uses standard HTTP status codes:\n\n| Code | Description |\n| ----------- | -------------------- |\n| 200/201 | Success |\n| 400 | Invalid request |\n| 401 | Authentication error |\n| 404 | Resource not found |\n| 429 | Rate limit exceeded |\n| 500/501/504 | Server error |\n\nError responses include detailed information:\n\n```json\n{\n\t\"code\": 16,\n\t\"message\": \"Token empty\",\n\t\"details\": [\n\t\t{\n\t\t\t\"@type\": \"type.googleapis.com/scalekit.v1.errdetails.ErrorInfo\",\n\t\t\t\"error_code\": \"UNAUTHENTICATED\"\n\t\t}\n\t]\n}\n```\n\n\":\n\x0cScalekit Inc\x12\x14https://scalekit.com\x1a\x14support@scalekit.com*8\n\nApache 2.0\x12*http://www.apache.org/licenses/LICENSE-2.02\x05\x31.0.0\x1a\x19$SCALEKIT_ENVIRONMENT_URL*\x01\x02\x32\x10\x61pplication/json:\x10\x61pplication/jsonj\x0f\n\rOrganizationsj\xd4\x03\n\x0bPermissions\x12\xc4\x03Permission management for defining and controlling access to system resources. Create, retrieve, update, and delete granular permissions that represent specific actions users can perform. Permissions are the building blocks of role-based access control (RBAC) and can be assigned to roles to grant users the ability to perform specific operations. Use this service to define custom permissions for your application\'s unique access control requirements.r+\n\rScalekit Docs\x12\x1ahttps://docs.scalekit.com/b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -215,7 +215,7 @@ _globals['_ORGANIZATIONSETTINGS']._loaded_options = None _globals['_ORGANIZATIONSETTINGS']._serialized_options = b'\222A\312\001\nh*\025Organization Settings2OConfiguration options that control organization-level features and capabilities2^{\"features\": [{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]}' _globals['_ORGANIZATIONSETTINGSFEATURE'].fields_by_name['name']._loaded_options = None - _globals['_ORGANIZATIONSETTINGSFEATURE'].fields_by_name['name']._serialized_options = b'\222A\273\0012\261\001Feature identifier. Supported values include: \"sso\" (Single Sign-On), \"directory_sync\" (Directory Synchronization), \"session_policy\" (Organization-level session policy override)J\005\"sso\"' + _globals['_ORGANIZATIONSETTINGSFEATURE'].fields_by_name['name']._serialized_options = b'\222A\350\0012\336\001Feature identifier. Supported values include: \"sso\" (Single Sign-On), \"directory_sync\" (Directory Synchronization), \"domain_verification\" (Domain Verification), \"session_policy\" (Organization-level session policy override)J\005\"sso\"' _globals['_ORGANIZATIONSETTINGSFEATURE'].fields_by_name['enabled']._loaded_options = None _globals['_ORGANIZATIONSETTINGSFEATURE'].fields_by_name['enabled']._serialized_options = b'\222AW2OWhether the feature is enabled (true) or disabled (false) for this organizationJ\004true' _globals['_ORGANIZATIONSETTINGSFEATURE']._loaded_options = None @@ -266,10 +266,10 @@ _globals['_ORGANIZATIONSERVICE'].methods_by_name['GetOrganizationUserManagementSetting']._serialized_options = b'\222A\203\002\n\rOrganizations\022(Get organization user management setting\032CRetrieves the user management settings for a specific organization.J\202\001\n\003200\022{\n+Returns the requested organization setting.\022L\nJ\032H.scalekit.v1.organizations.GetOrganizationUserManagementSettingsResponse\202\265\030\002\030d\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002A\022?/api/v1/organizations/{organization_id}/settings/usermanagement' _globals['_ORGANIZATIONSERVICE'].methods_by_name['GetApplicationSessionPolicy']._loaded_options = None _globals['_ORGANIZATIONSERVICE'].methods_by_name['GetApplicationSessionPolicy']._serialized_options = b'\222A\317\003\n\rOrganizations\022/Get application session policy for organization\032\246\001Returns the application-level session settings for display in hosted pages. Includes absolute timeout, idle timeout configuration, and access token expiry in minutes.J\177\n\003200\022x\n2Application session policy retrieved successfully.\022B\n@\032>.scalekit.v1.organizations.GetApplicationSessionPolicyResponseJA\n\003403\022:\n8Session policy feature not enabled for this environment.J \n\003404\022\031\n\027Organization not found.\202\265\030\037\n\033organizations_sessions_read\030T\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002D\022B/api/v1/organizations/{organization_id}/application-session-policy' - _globals['_FEATURE']._serialized_start=18191 - _globals['_FEATURE']._serialized_end=18273 - _globals['_SESSIONPOLICYTYPE']._serialized_start=18275 - _globals['_SESSIONPOLICYTYPE']._serialized_end=18360 + _globals['_FEATURE']._serialized_start=18236 + _globals['_FEATURE']._serialized_end=18318 + _globals['_SESSIONPOLICYTYPE']._serialized_start=18320 + _globals['_SESSIONPOLICYTYPE']._serialized_end=18405 _globals['_CREATEORGANIZATIONREQUEST']._serialized_start=533 _globals['_CREATEORGANIZATIONREQUEST']._serialized_end=708 _globals['_CREATEORGANIZATIONRESPONSE']._serialized_start=711 @@ -343,15 +343,15 @@ _globals['_ORGANIZATIONSETTINGS']._serialized_start=16423 _globals['_ORGANIZATIONSETTINGS']._serialized_end=16949 _globals['_ORGANIZATIONSETTINGSFEATURE']._serialized_start=16952 - _globals['_ORGANIZATIONSETTINGSFEATURE']._serialized_end=17433 - _globals['_UPSERTUSERMANAGEMENTSETTINGSREQUEST']._serialized_start=17436 - _globals['_UPSERTUSERMANAGEMENTSETTINGSREQUEST']._serialized_end=17714 - _globals['_UPSERTUSERMANAGEMENTSETTINGSRESPONSE']._serialized_start=17717 - _globals['_UPSERTUSERMANAGEMENTSETTINGSRESPONSE']._serialized_end=17873 - _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSREQUEST']._serialized_start=17876 - _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSREQUEST']._serialized_end=18011 - _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSRESPONSE']._serialized_start=18014 - _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSRESPONSE']._serialized_end=18189 - _globals['_ORGANIZATIONSERVICE']._serialized_start=18363 - _globals['_ORGANIZATIONSERVICE']._serialized_end=28645 + _globals['_ORGANIZATIONSETTINGSFEATURE']._serialized_end=17478 + _globals['_UPSERTUSERMANAGEMENTSETTINGSREQUEST']._serialized_start=17481 + _globals['_UPSERTUSERMANAGEMENTSETTINGSREQUEST']._serialized_end=17759 + _globals['_UPSERTUSERMANAGEMENTSETTINGSRESPONSE']._serialized_start=17762 + _globals['_UPSERTUSERMANAGEMENTSETTINGSRESPONSE']._serialized_end=17918 + _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSREQUEST']._serialized_start=17921 + _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSREQUEST']._serialized_end=18056 + _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSRESPONSE']._serialized_start=18059 + _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSRESPONSE']._serialized_end=18234 + _globals['_ORGANIZATIONSERVICE']._serialized_start=18408 + _globals['_ORGANIZATIONSERVICE']._serialized_end=28690 # @@protoc_insertion_point(module_scope) From b4290a9934f2ccbf7217e9f64e5dcfc5cc41cdca Mon Sep 17 00:00:00 2001 From: Srinivas Karre Date: Tue, 12 May 2026 11:15:33 +0530 Subject: [PATCH 09/19] build From 8c84f5bb0a52980b3d6027b893498f2cea55daa6 Mon Sep 17 00:00:00 2001 From: Srinivas Karre Date: Tue, 12 May 2026 11:29:24 +0530 Subject: [PATCH 10/19] fix: remove blocking input() call from test_actions setUp --- tests/test_actions.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_actions.py b/tests/test_actions.py index 3564ba7..8907aca 100644 --- a/tests/test_actions.py +++ b/tests/test_actions.py @@ -47,7 +47,6 @@ def setUp(self): if ca_response.connected_account.status != "ACTIVE": response = self.scalekit_client.connect.get_authorization_link(identifier = self.test_identifier, connection_name="GMAIL") print(f"Authorization link: {response.link}") - input("Press Enter to continue...") def test_execute_tool(self): """Method to test execute_tool with SLACK.SEND_MESSAGE""" From cd194f070fad327b3981cc2ef32174bd84fb23fc Mon Sep 17 00:00:00 2001 From: Srinivas Karre Date: Tue, 12 May 2026 11:34:15 +0530 Subject: [PATCH 11/19] Revert "fix: remove blocking input() call from test_actions setUp" This reverts commit 8c84f5bb0a52980b3d6027b893498f2cea55daa6. --- tests/test_actions.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_actions.py b/tests/test_actions.py index 8907aca..3564ba7 100644 --- a/tests/test_actions.py +++ b/tests/test_actions.py @@ -47,6 +47,7 @@ def setUp(self): if ca_response.connected_account.status != "ACTIVE": response = self.scalekit_client.connect.get_authorization_link(identifier = self.test_identifier, connection_name="GMAIL") print(f"Authorization link: {response.link}") + input("Press Enter to continue...") def test_execute_tool(self): """Method to test execute_tool with SLACK.SEND_MESSAGE""" From 9b77c0530390efcf9c462501ff1daa608c4e27ae Mon Sep 17 00:00:00 2001 From: Srinivas Karre Date: Tue, 12 May 2026 11:54:22 +0530 Subject: [PATCH 12/19] build From 2db5d330018f9b1008fee5fbd0d2a3733fd04b84 Mon Sep 17 00:00:00 2001 From: Srinivas Karre Date: Tue, 12 May 2026 16:39:29 +0530 Subject: [PATCH 13/19] chore: regenerate proto stubs from local scalekit proto --- .../connected_accounts_pb2.py | 50 ++- .../connected_accounts_pb2.pyi | 20 +- scalekit/v1/connections/connections_pb2.py | 284 +++++++++--------- scalekit/v1/connections/connections_pb2.pyi | 24 +- .../v1/organizations/organizations_pb2.py | 60 ++-- .../v1/organizations/organizations_pb2.pyi | 8 +- scalekit/v1/providers/providers_pb2.py | 90 +++--- scalekit/v1/providers/providers_pb2.pyi | 39 +-- 8 files changed, 234 insertions(+), 341 deletions(-) diff --git a/scalekit/v1/connected_accounts/connected_accounts_pb2.py b/scalekit/v1/connected_accounts/connected_accounts_pb2.py index a725386..d5b1d54 100644 --- a/scalekit/v1/connected_accounts/connected_accounts_pb2.py +++ b/scalekit/v1/connected_accounts/connected_accounts_pb2.py @@ -22,7 +22,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n7scalekit/v1/connected_accounts/connected_accounts.proto\x12\x1escalekit.v1.connected_accounts\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\xa9\x0c\n\x1cListConnectedAccountsRequest\x12\xb1\x01\n\x0forganization_id\x18\x01 \x01(\tB\x82\x01\x92\x41v2]Filter by organization ID. Returns only connected accounts associated with this organization.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12\x91\x01\n\x07user_id\x18\x02 \x01(\tBs\x92\x41g2MFilter by user ID. Returns only connected accounts associated with this user.J\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12\xef\x01\n\tconnector\x18\x03 \x01(\tB\xcb\x01\x92\x41\xa9\x01\x32\x9c\x01\x46ilter by connector type. Connector identifier such as \'notion\', \'slack\', \'google\', etc. Alphanumeric with spaces, hyphens, underscores, and colons allowed.J\x08\"notion\"\xbaH\x1br\x19\x10\x00\x18\x90\x03\x32\x12^[a-zA-Z0-9_: -]*$H\x02R\tconnector\x88\x01\x01\x12\xdb\x01\n\nidentifier\x18\x04 \x01(\tB\xb5\x01\x92\x41\xa8\x01\x32\x91\x01\x46ilter by account identifier. The unique identifier for the connected account within the third-party service (e.g., email address, workspace ID).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12\x9d\x01\n\x08provider\x18\x05 \x01(\tB\x80\x01\x92\x41t2hFilter by OAuth provider. The authentication provider name such as \'google\', \'microsoft\', \'github\', etc.J\x08\"google\"\xbaH\x06r\x04\x10\x00\x18\x32R\x08provider\x12\x9b\x01\n\tpage_size\x18\x06 \x01(\rB~\x92\x41r2lMaximum number of connected accounts to return per page. Must be between 0 and 100. Default is typically 10.J\x02\x31\x30\xbaH\x06*\x04\x10\x64(\x00R\x08pageSize\x12\xcb\x01\n\npage_token\x18\x07 \x01(\tB\xab\x01\x92\x41\x9e\x01\x32\x83\x01Pagination token from a previous response. Use the next_page_token value from ListConnectedAccountsResponse to fetch the next page.J\x16\"eyJvZmZzZXQiOjEwfQ==\"\xbaH\x06r\x04\x10\x00\x18\x64R\tpageToken\x12\xa7\x01\n\x05query\x18\x08 \x01(\tB\x90\x01\x92\x41\x83\x01\x32qText search query to filter connected accounts by name, identifier, or other searchable fields. Case-insensitive.J\x0e\"john@example\"\xbaH\x06r\x04\x10\x00\x18\x64R\x05queryB\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifier\"\xbb\x06\n\x1dListConnectedAccountsResponse\x12\xdc\x01\n\x12\x63onnected_accounts\x18\x01 \x03(\x0b\x32\x37.scalekit.v1.connected_accounts.ConnectedAccountForListBt\x92\x41q2oList of connected accounts matching the filter criteria. Excludes sensitive authorization details for security.R\x11\x63onnectedAccounts\x12\x99\x01\n\ntotal_size\x18\x02 \x01(\rBz\x92\x41w2pTotal count of connected accounts matching the filter criteria across all pages. Use for calculating pagination.J\x03\x31\x30\x30R\ttotalSize\x12\xd2\x01\n\x0fnext_page_token\x18\x03 \x01(\tB\xa9\x01\x92\x41\x9c\x01\x32\x81\x01Pagination token for retrieving the next page. Empty if this is the last page. Pass this value to page_token in the next request.J\x16\"eyJvZmZzZXQiOjIwfQ==\"\xbaH\x06r\x04\x10\x00\x18 R\rnextPageToken\x12\xc9\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\xa0\x01\x92\x41\x93\x01\x32}Pagination token for retrieving the previous page. Empty if this is the first page. Pass this value to page_token to go back.J\x12\"eyJvZmZzZXQiOjB9\"\xbaH\x06r\x04\x10\x00\x18 R\rprevPageToken\"\xe0\x06\n\x1eSearchConnectedAccountsRequest\x12\xb9\x01\n\x05query\x18\x01 \x01(\tB\xa2\x01\x92\x41\x91\x01\x32\x86\x01Search term to match against connected account identifiers, providers, or connectors. Must be at least 3 characters. Case insensitive.J\x06google\xbaH\nr\x05\x10\x03\x18\xc8\x01\xc8\x01\x01R\x05query\x12\x85\x01\n\tpage_size\x18\x02 \x01(\rBh\x92\x41^2XMaximum number of connected accounts to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x03 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\x12i\n\rconnection_id\x18\x04 \x01(\tBD\x92\x41\x38\x32*Connection ID to filter connected accountsJ\n\"conn_123\"\xbaH\x06r\x04\x10\x00\x18 R\x0c\x63onnectionId:\xe6\x01\x92\x41\xe2\x01\n\x9c\x01*\x19Search Connected Accounts2\x7fSearch for connected accounts in your environment using a text query that matches against identifiers, providers, or connectors2Aquery=google&page_size=30&page_token=eyJwYWdlIjoyLCJsaW1pdCI6MzB9\"\x87\x05\n\x1fSearchConnectedAccountsResponse\x12\xcc\x01\n\x12\x63onnected_accounts\x18\x01 \x03(\x0b\x32\x37.scalekit.v1.connected_accounts.ConnectedAccountForListBd\x92\x41\x61\x32_List of connected accounts matching the search query. Excludes sensitive authorization details.R\x11\x63onnectedAccounts\x12l\n\ntotal_size\x18\x02 \x01(\rBM\x92\x41J2CTotal count of accounts matching the search query across all pages.J\x03\x31\x30\x30R\ttotalSize\x12\x91\x01\n\x0fnext_page_token\x18\x03 \x01(\tBi\x92\x41]2CPagination token for the next page. Empty if this is the last page.J\x16\"eyJvZmZzZXQiOjMwfQ==\"\xbaH\x06r\x04\x10\x00\x18 R\rnextPageToken\x12\x92\x01\n\x0fprev_page_token\x18\x04 \x01(\tBj\x92\x41^2HPagination token for the previous page. Empty if this is the first page.J\x12\"eyJvZmZzZXQiOjB9\"\xbaH\x06r\x04\x10\x00\x18 R\rprevPageToken\"\xa8\x07\n\x1d\x43reateConnectedAccountRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12\x64\n\tconnector\x18\x03 \x01(\tBA\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x1br\x19\x10\x00\x18\x90\x03\x32\x12^[a-zA-Z0-9_: -]*$H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12\xbd\x02\n\x11\x63onnected_account\x18\x05 \x01(\x0b\x32\x36.scalekit.v1.connected_accounts.CreateConnectedAccountB\xd7\x01\x92\x41\xcd\x01\x32*Details of the connected account to createJ\x9e\x01{ \"authorization_type\": \"OAUTH2\", \"authorization_details\": { \"oauth_token\": { \"access_token\": \"...\", \"refresh_token\": \"...\", \"scopes\": [\"read\", \"write\"] } } }\xbaH\x03\xc8\x01\x01R\x10\x63onnectedAccountB\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifier\"\x8d\x02\n\x1e\x43reateConnectedAccountResponse\x12\xea\x01\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountB\x8a\x01\x92\x41\x86\x01\x32\x83\x01The newly created connected account with its unique identifier, status, and complete authorization details including access tokens.R\x10\x63onnectedAccount\"\x84\x08\n\x1dUpdateConnectedAccountRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12P\n\tconnector\x18\x03 \x01(\tB-\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x07r\x05\x10\x00\x18\x90\x03H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12g\n\x02id\x18\x06 \x01(\tBR\x92\x41\x41\x32\x35Unique identifier for the connected account to updateJ\x08\"ca_123\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_H\x04R\x02id\x88\x01\x01\x12\xbd\x02\n\x11\x63onnected_account\x18\x05 \x01(\x0b\x32\x36.scalekit.v1.connected_accounts.UpdateConnectedAccountB\xd7\x01\x92\x41\xcd\x01\x32*Details of the connected account to updateJ\x9e\x01{ \"authorization_type\": \"OAUTH2\", \"authorization_details\": { \"oauth_token\": { \"access_token\": \"...\", \"refresh_token\": \"...\", \"scopes\": [\"read\", \"write\"] } } }\xbaH\x03\xc8\x01\x01R\x10\x63onnectedAccountB\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifierB\x05\n\x03_id\"\xf7\x01\n\x1eUpdateConnectedAccountResponse\x12\xd4\x01\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountBu\x92\x41r2pThe updated connected account with refreshed credentials, new token expiry, and modified configuration settings.R\x10\x63onnectedAccount\"\xd8\x05\n\x1d\x44\x65leteConnectedAccountRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12\x64\n\tconnector\x18\x03 \x01(\tBA\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x1br\x19\x10\x00\x18\x90\x03\x32\x12^[a-zA-Z0-9_: -]*$H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12g\n\x02id\x18\x05 \x01(\tBR\x92\x41\x41\x32\x35Unique identifier for the connected account to deleteJ\x08\"ca_123\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_H\x04R\x02id\x88\x01\x01\x42\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifierB\x05\n\x03_id\" \n\x1e\x44\x65leteConnectedAccountResponse\"\xd3\x08\n&GetMagicLinkForConnectedAccountRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12P\n\tconnector\x18\x03 \x01(\tB-\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x07r\x05\x10\x00\x18\x90\x03H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12]\n\x02id\x18\x05 \x01(\tBH\x92\x41\x37\x32+Unique identifier for the connected accountJ\x08\"ca_123\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_H\x04R\x02id\x88\x01\x01\x12\xcf\x01\n\x05state\x18\x07 \x01(\tB\xb3\x01\x92\x41\xa5\x01\x32wOptional opaque state value. State added to the user verify redirect URL query params to validate the user verificationJ*\"QVNDSUFyY2hhYml0dGVyXzE2ODQ5NzIwNzI0NTY=\"\xbaH\x07r\x05\x10\x00\x18\x80\x04H\x05R\x05state\x88\x01\x01\x12\x9d\x01\n\x0fuser_verify_url\x18\x08 \x01(\tBp\x92\x41T2\"B2B app\'s user verify redirect URLJ.\"https://app.yourapp.com/user/verify/callback\"\xbaH\x16r\x14\x10\x00\x18\x80\x10\x32\r^$|^https?://H\x06R\ruserVerifyUrl\x88\x01\x01\x42\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifierB\x05\n\x03_idB\x08\n\x06_stateB\x12\n\x10_user_verify_url\"\x9c\x02\n\'GetMagicLinkForConnectedAccountResponse\x12r\n\x04link\x18\x01 \x01(\tB^\x92\x41[2%Authentication link for the connectorJ2\"https://notion.com/oauth/authorize?client_id=...\"R\x04link\x12}\n\x06\x65xpiry\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBI\x92\x41\x46\x32,Expiry timestamp for the authentication linkJ\x16\"2024-03-20T15:04:05Z\"R\x06\x65xpiry\"\xeb\x02\n!VerifyConnectedAccountUserRequest\x12\xc8\x01\n\x0f\x61uth_request_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x8e\x01\x32`Auth request ID as base64url-encoded opaque token from the user verify redirect URL query paramsJ*\"QVNDSUFyY2hhYml0dGVyXzE2ODQ5NzIwNzI0NTY=\"\xe0\x41\x02\xbaH\x07r\x05\x10\x01\x18\xe8\x07R\rauthRequestId\x12{\n\nidentifier\x18\x02 \x01(\tB[\x92\x41K25Current logged in user\'s connected account identifierJ\x12\"user@example.com\"\xe0\x41\x02\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\nidentifier\"\xd3\x01\n\"VerifyConnectedAccountUserResponse\x12\xac\x01\n\x1dpost_user_verify_redirect_url\x18\x01 \x01(\tBj\x92\x41g29URL to redirect the user to after successful verificationJ*\"https://env1.example.com/connect/success\"R\x19postUserVerifyRedirectUrl\"\xc3\x05\n&GetConnectedAccountByIdentifierRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12P\n\tconnector\x18\x03 \x01(\tB-\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x07r\x05\x10\x00\x18\x90\x03H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12]\n\x02id\x18\x05 \x01(\tBH\x92\x41\x37\x32+Unique identifier for the connected accountJ\x08\"ca_123\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_H\x04R\x02id\x88\x01\x01\x42\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifierB\x05\n\x03_id\"\xbe\x02\n\'GetConnectedAccountByIdentifierResponse\x12\x92\x02\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountB\xb2\x01\x92\x41\xae\x01\x32\xab\x01The connected account with complete details including sensitive authorization credentials (access tokens, refresh tokens, scopes). Handle with appropriate access controls.R\x10\x63onnectedAccount\"\xe3\x13\n\x10\x43onnectedAccount\x12\xbc\x01\n\nidentifier\x18\x01 \x01(\tB\x9b\x01\x92\x41\x97\x01\x32\x80\x01The unique identifier for this account in the third-party service. Typically an email address, user ID, or workspace identifier.J\x12\"user@example.com\"R\nidentifier\x12\xaa\x01\n\x08provider\x18\x02 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32}OAuth provider name (e.g., \'google\', \'microsoft\', \'github\'). Identifies which authentication service manages this connection.J\x08\"google\"R\x08provider\x12\xe4\x01\n\x06status\x18\x03 \x01(\x0e\x32/.scalekit.v1.connected_accounts.ConnectorStatusB\x9a\x01\x92\x41\x96\x01\x32\x93\x01\x43urrent status of the connected account. Indicates if the account is active, expired, pending authorization, or pending user identity verification.R\x06status\x12\xe9\x01\n\x12\x61uthorization_type\x18\x04 \x01(\x0e\x32-.scalekit.v1.connected_accounts.ConnectorTypeB\x8a\x01\x92\x41\x86\x01\x32\x83\x01Type of authorization mechanism used. Specifies whether this connection uses OAuth, API keys, bearer tokens, or other auth methods.R\x11\x61uthorizationType\x12\x81\x02\n\x15\x61uthorization_details\x18\x05 \x01(\x0b\x32\x34.scalekit.v1.connected_accounts.AuthorizationDetailsB\x95\x01\x92\x41\x91\x01\x32\x8e\x01Sensitive authentication credentials including access tokens, refresh tokens, and scopes. Contains either OAuth tokens or static auth details.R\x14\x61uthorizationDetails\x12\xce\x01\n\x10token_expires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x87\x01\x92\x41\x83\x01\x32iExpiration timestamp for the access token. After this time, the token must be refreshed or re-authorized.J\x16\"2024-12-31T23:59:59Z\"R\x0etokenExpiresAt\x12\xc9\x01\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x8d\x01\x92\x41\x89\x01\x32oTimestamp when this connected account was last modified. Updated whenever credentials or configuration changes.J\x16\"2024-03-20T15:04:05Z\"R\tupdatedAt\x12\xae\x01\n\tconnector\x18\x08 \x01(\tB\x8f\x01\x92\x41\x8b\x01\x32\x7f\x43onnector identifier (e.g., \'notion\', \'slack\', \'salesforce\'). Indicates which third-party application this account connects to.J\x08\"notion\"R\tconnector\x12\xcd\x01\n\x0clast_used_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x8e\x01\x92\x41\x8a\x01\x32pTimestamp when this connected account was last used to make an API call. Useful for tracking active connections.J\x16\"2024-03-20T14:30:00Z\"R\nlastUsedAt\x12\x98\x01\n\x02id\x18\n \x01(\tB\x87\x01\x92\x41v2\\Unique Scalekit-generated identifier for this connected account. Always prefixed with \'ca_\'.J\x16\"ca_24834495392086178\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_R\x02id\x12\xc6\x01\n\rconnection_id\x18\x0b \x01(\tB\xa0\x01\x92\x41\x93\x01\x32wReference to the parent connection configuration. Links this account to a specific connector setup in your environment.J\x18\"conn_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x0c\x63onnectionId\x12\x89\x02\n\napi_config\x18\x0c \x01(\x0b\x32\x17.google.protobuf.StructB\xd0\x01\x92\x41\xcc\x01\x32xOptional JSON configuration for connector-specific API settings such as rate limits, custom endpoints, or feature flags.JP{\"rate_limit\": 1000, \"timeout\": 30, \"base_url\": \"https://api.custom-domain.com\"}R\tapiConfig\"\x9a\x06\n\x16\x43reateConnectedAccount\x12\xae\x03\n\x15\x61uthorization_details\x18\x05 \x01(\x0b\x32\x34.scalekit.v1.connected_accounts.AuthorizationDetailsB\xc2\x02\x92\x41\xbe\x02\x32\xcd\x01Optional authentication credentials for the connected account. Include OAuth tokens (access_token, refresh_token, scopes) or static auth details (API keys, bearer tokens). Can be provided later via update.Jl{\"oauth_token\": {\"access_token\": \"ya29.a0...\", \"refresh_token\": \"1//0g...\", \"scopes\": [\"email\", \"profile\"]}}R\x14\x61uthorizationDetails\x12\x98\x02\n\napi_config\x18\x0b \x01(\x0b\x32\x17.google.protobuf.StructB\xdf\x01\x92\x41\xdb\x01\x32\x86\x01Optional JSON configuration for connector-specific API settings such as rate limits, custom API endpoints, timeouts, or feature flags.JP{\"rate_limit\": 1000, \"timeout\": 30, \"base_url\": \"https://api.custom-domain.com\"}R\tapiConfigJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08J\x04\x08\x08\x10\tJ\x04\x08\t\x10\nJ\x04\x08\n\x10\x0b\"\xbc\x05\n\x16UpdateConnectedAccount\x12\x8d\x03\n\x15\x61uthorization_details\x18\x05 \x01(\x0b\x32\x34.scalekit.v1.connected_accounts.AuthorizationDetailsB\xa1\x02\x92\x41\x9d\x02\x32\x99\x01Updated authentication credentials. Provide new OAuth tokens (e.g., after refresh) or updated static auth details. Only included fields will be modified.J\x7f{\"oauth_token\": {\"access_token\": \"ya29.new_token...\", \"refresh_token\": \"1//0g...\", \"scopes\": [\"email\", \"profile\", \"calendar\"]}}R\x14\x61uthorizationDetails\x12\xe1\x01\n\napi_config\x18\n \x01(\x0b\x32\x17.google.protobuf.StructB\xa8\x01\x92\x41\xa4\x01\x32}Updated JSON configuration for API-specific settings. Merges with existing configuration - only provided fields are modified.J#{\"rate_limit\": 2000, \"timeout\": 60}R\tapiConfigJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08J\x04\x08\x08\x10\tJ\x04\x08\t\x10\n\"\xe0\x08\n\x17\x43onnectedAccountForList\x12{\n\nidentifier\x18\x01 \x01(\tB[\x92\x41X2BThe unique identifier for this account in the third-party service.J\x12\"user@example.com\"R\nidentifier\x12]\n\x08provider\x18\x02 \x01(\tBA\x92\x41>22OAuth provider name (e.g., \'google\', \'microsoft\').J\x08\"google\"R\x08provider\x12h\n\x06status\x18\x03 \x01(\x0e\x32/.scalekit.v1.connected_accounts.ConnectorStatusB\x1f\x92\x41\x1c\x32\x1a\x43urrent connection status.R\x06status\x12\x80\x01\n\x12\x61uthorization_type\x18\x04 \x01(\x0e\x32-.scalekit.v1.connected_accounts.ConnectorTypeB\"\x92\x41\x1f\x32\x1d\x41uthorization mechanism type.R\x11\x61uthorizationType\x12~\n\x10token_expires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB8\x92\x41\x35\x32\x1bToken expiration timestamp.J\x16\"2024-12-31T23:59:59Z\"R\x0etokenExpiresAt\x12t\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB9\x92\x41\x36\x32\x1cLast modification timestamp.J\x16\"2024-03-20T15:04:05Z\"R\tupdatedAt\x12\x42\n\tconnector\x18\x08 \x01(\tB$\x92\x41!2\x15\x43onnector identifier.J\x08\"notion\"R\tconnector\x12p\n\x0clast_used_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampB2\x92\x41/2\x15Last usage timestamp.J\x16\"2024-03-20T14:30:00Z\"R\nlastUsedAt\x12Q\n\x02id\x18\n \x01(\tBA\x92\x41>2$Unique connected account identifier.J\x16\"ca_24834495392086178\"R\x02id\x12w\n\rconnection_id\x18\x0b \x01(\tBR\x92\x41\x46\x32*Parent connection configuration reference.J\x18\"conn_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x0c\x63onnectionIdJ\x04\x08\x05\x10\x06\"\x8f\x02\n\x14\x41uthorizationDetails\x12M\n\x0boauth_token\x18\x01 \x01(\x0b\x32*.scalekit.v1.connected_accounts.OauthTokenH\x00R\noauthToken\x12M\n\x0bstatic_auth\x18\x02 \x01(\x0b\x32*.scalekit.v1.connected_accounts.StaticAuthH\x00R\nstaticAuth\x12N\n\ngoogle_dwd\x18\x03 \x01(\x0b\x32-.scalekit.v1.connected_accounts.GoogleDWDAuthH\x00R\tgoogleDwdB\t\n\x07\x64\x65tails\"\xd8\x04\n\rGoogleDWDAuth\x12\x88\x01\n\x07subject\x18\x01 \x01(\tBn\x92\x41k2UEmail address of the Google Workspace user to impersonate via Domain-Wide Delegation.J\x12\"user@example.com\"R\x07subject\x12\x91\x01\n\x0c\x61\x63\x63\x65ss_token\x18\x02 \x01(\tBn\x92\x41h2POAuth access token acquired via the jwt-bearer grant. Present in responses only.J\x14\"ya29.a0AfH6SMBx...\"\xe0\x41\x03R\x0b\x61\x63\x63\x65ssToken\x12\x9d\x01\n\x06scopes\x18\x03 \x03(\tB\x84\x01\x92\x41~2>OAuth scopes granted to this token. Present in responses only.J<[\"openid\", \"https://www.googleapis.com/auth/userinfo.email\"]\xe0\x41\x03R\x06scopes\x12\x87\x01\n\x10token_expires_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampBA\x92\x41;29When the access token expires. Present in responses only.\xe0\x41\x03R\x0etokenExpiresAt\"\xdc\x05\n\nOauthToken\x12\xa0\x01\n\x0c\x61\x63\x63\x65ss_token\x18\x01 \x01(\tB}\x92\x41z2bOAuth access token for API requests. Typically short-lived and must be refreshed after expiration.J\x14\"ya29.a0AfH6SMBx...\"R\x0b\x61\x63\x63\x65ssToken\x12\xae\x01\n\rrefresh_token\x18\x02 \x01(\tB\x88\x01\x92\x41\x84\x01\x32nOAuth refresh token for obtaining new access tokens. Long-lived and used to maintain persistent authorization.J\x12\"1//0gHJxZ-Lb2...\"R\x0crefreshToken\x12\xe1\x01\n\x06scopes\x18\x03 \x03(\tB\xc8\x01\x92\x41\xc4\x01\x32\\List of granted OAuth scopes defining the permissions and access levels for this connection.Jd[\"https://www.googleapis.com/auth/drive.readonly\", \"https://www.googleapis.com/auth/userinfo.email\"]R\x06scopes\x12\x95\x01\n\x06\x64omain\x18\x04 \x01(\tB}\x92\x41z2iAssociated domain for workspace or organization-scoped OAuth connections (e.g., Google Workspace domain).J\r\"example.com\"R\x06\x64omain\"\xf4\x01\n\nStaticAuth\x12\xe5\x01\n\x07\x64\x65tails\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\xb1\x01\x92\x41\xad\x01\x32zFlexible JSON structure containing static credentials. Format varies by connector type (API key, username/password, etc.).J/{\"api_key\": \"sk_live_...\", \"api_secret\": \"...\"}R\x07\x64\x65tails\"\x83\x02\n\x1aGetConnectedAccountRequest\x12\xe4\x01\n\x02id\x18\x01 \x01(\tB\xd3\x01\x92\x41\xc6\x01\x32\xab\x01Unique identifier for the connected account. Always prefixed with \'ca_\'. If omitted (via the /this path), the connected account is resolved from the current token context.J\x16\"ca_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x02id\"\xc5\x01\n\x1bGetConnectedAccountResponse\x12\xa5\x01\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountBF\x92\x41\x43\x32\x41The connected account with its details and authentication status.R\x10\x63onnectedAccount\"\xb2\x01\n!DisconnectConnectedAccountRequest\x12\x8c\x01\n\x02id\x18\x01 \x01(\tB|\x92\x41p2VUnique identifier for the connected account to disconnect. Always prefixed with \'ca_\'.J\x16\"ca_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x02id\"\xc6\x01\n\"DisconnectConnectedAccountResponse\x12\x9f\x01\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountB@\x92\x41=2;The connected account with its updated DISCONNECTED status.R\x10\x63onnectedAccount*\x8b\x01\n\x0f\x43onnectorStatus\x12!\n\x1d\x43ONNECTION_STATUS_UNSPECIFIED\x10\x00\x12\n\n\x06\x41\x43TIVE\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x12\x10\n\x0cPENDING_AUTH\x10\x03\x12\x18\n\x14PENDING_VERIFICATION\x10\x04\x12\x10\n\x0c\x44ISCONNECTED\x10\x05*\xb3\x01\n\rConnectorType\x12\x1f\n\x1b\x43ONNECTION_TYPE_UNSPECIFIED\x10\x00\x12\t\n\x05OAUTH\x10\x01\x12\x0b\n\x07\x41PI_KEY\x10\x02\x12\x0e\n\nBASIC_AUTH\x10\x03\x12\x10\n\x0c\x42\x45\x41RER_TOKEN\x10\x04\x12\n\n\x06\x43USTOM\x10\x05\x12\t\n\x05\x42\x41SIC\x10\x06\x12\r\n\tOAUTH_M2M\x10\x07\x12\x11\n\rTRELLO_OAUTH1\x10\x08\x12\x0e\n\nGOOGLE_DWD\x10\t2\xf8N\n\x17\x43onnectedAccountService\x12\xde\x06\n\x15ListConnectedAccounts\x12<.scalekit.v1.connected_accounts.ListConnectedAccountsRequest\x1a=.scalekit.v1.connected_accounts.ListConnectedAccountsResponse\"\xc7\x05\x92\x41\x9b\x05\n\x12\x43onnected Accounts\x12\x17List connected accounts\x1a\x9a\x02Retrieves a paginated list of connected accounts for third-party integrations. Filter by organization, user, connector type, provider, or identifier. Returns OAuth tokens, API keys, and connection status for each account. Use pagination tokens to navigate through large result sets.J\xaf\x01\n\x03\x32\x30\x30\x12\xa7\x01\nbSuccessfully retrieved the list of connected accounts with their authentication details and status\x12\x41\n?\x1a=.scalekit.v1.connected_accounts.ListConnectedAccountsResponseJY\n\x03\x34\x30\x30\x12R\nPInvalid request - occurs when query parameters are malformed or validation failsJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/connected_accounts\x12\xe0\x06\n\x17SearchConnectedAccounts\x12>.scalekit.v1.connected_accounts.SearchConnectedAccountsRequest\x1a?.scalekit.v1.connected_accounts.SearchConnectedAccountsResponse\"\xc3\x05\x92\x41\x90\x05\n\x12\x43onnected Accounts\x12\x19Search connected accounts\x1a\x99\x02Search for connected accounts in your environment using a text query that matches against identifiers, providers, or connectors. The search performs case-insensitive matching across account details. Returns paginated results with account status and authentication type information.J\x99\x01\n\x03\x32\x30\x30\x12\x91\x01\nJSuccessfully retrieved matching connected accounts with pagination support\x12\x43\nA\x1a?.scalekit.v1.connected_accounts.SearchConnectedAccountsResponseJc\n\x03\x34\x30\x30\x12\\\nZInvalid request - query parameter is too short (minimum 3 characters) or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02#\x12!/api/v1/connected_accounts:search\x12\xfe\x07\n\x16\x43reateConnectedAccount\x12=.scalekit.v1.connected_accounts.CreateConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.CreateConnectedAccountResponse\"\xe4\x06\x92\x41\xb5\x06\n\x12\x43onnected Accounts\x12\x1a\x43reate a connected account\x1a\xdf\x02\x43reates a new connected account with OAuth tokens or API credentials for third-party service integration. Supply authorization details including access tokens, refresh tokens, scopes, and optional API configuration. The account can be scoped to an organization or user. Returns the created account with its unique identifier and authentication status.J\xa4\x01\n\x03\x32\x30\x31\x12\x9c\x01\nVConnected account created successfully with authentication credentials stored securely\x12\x42\n@\x1a>.scalekit.v1.connected_accounts.CreateConnectedAccountResponseJg\n\x03\x34\x30\x30\x12`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJM\n\x03\x34\x30\x39\x12\x46\nDConflict - connected account with the same identifier already exists\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1f\"\x1a/api/v1/connected_accounts:\x01*\x12\xf0\x07\n\x16UpdateConnectedAccount\x12=.scalekit.v1.connected_accounts.UpdateConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.UpdateConnectedAccountResponse\"\xd6\x06\x92\x41\xa6\x06\n\x12\x43onnected Accounts\x12$Update connected account credentials\x1a\xd2\x02Updates authentication credentials and configuration for an existing connected account. Modify OAuth tokens, refresh tokens, access scopes, or API configuration settings. Specify the account by ID, or by combination of organization/user, connector, and identifier. Returns the updated account with new token expiry and status information.J\x9a\x01\n\x03\x32\x30\x30\x12\x92\x01\nLConnected account updated successfully with new credentials or configuration\x12\x42\n@\x1a>.scalekit.v1.connected_accounts.UpdateConnectedAccountResponseJg\n\x03\x34\x30\x30\x12`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJK\n\x03\x34\x30\x34\x12\x44\nBConnected account not found - the specified account does not exist\x82\xb5\x18\x03\x18\xc4\x01\x82\xd3\xe4\x93\x02\x1f\x1a\x1a/api/v1/connected_accounts:\x01*\x12\xc6\x06\n\x16\x44\x65leteConnectedAccount\x12=.scalekit.v1.connected_accounts.DeleteConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.DeleteConnectedAccountResponse\"\xac\x05\x92\x41\xf6\x04\n\x12\x43onnected Accounts\x12\x1a\x44\x65lete a connected account\x1a\x9f\x02Permanently removes a connected account and revokes all associated authentication credentials. Identify the account by ID, or by combination of organization/user, connector, and identifier. This action cannot be undone. All OAuth tokens and API keys for this account will be invalidated.JK\n\x03\x32\x30\x30\x12\x44\nBConnected account deleted successfully and all credentials revokedJD\n\x03\x34\x30\x30\x12=\n;Invalid request - malformed parameters or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJK\n\x03\x34\x30\x34\x12\x44\nBConnected account not found - the specified account does not exist\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02&\"!/api/v1/connected_accounts:delete:\x01*\x12\xff\x06\n\x1fGetMagicLinkForConnectedAccount\x12\x46.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountRequest\x1aG.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountResponse\"\xca\x05\x92\x41\x90\x05\n\x12\x43onnected Accounts\x12\"Generate authentication magic link\x1a\xa2\x02\x43reates a time-limited magic link for connecting or re-authorizing a third-party account. The link directs users to the OAuth authorization flow for the specified connector. Returns the generated link URL and expiration timestamp. Links typically expire after a short duration for security.J\x9f\x01\n\x03\x32\x30\x30\x12\x97\x01\nHMagic link generated successfully with authorization URL and expiry time\x12K\nI\x1aG.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountResponseJK\n\x03\x34\x30\x30\x12\x44\nBInvalid request - missing required parameters or invalid connectorJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02*\"%/api/v1/connected_accounts/magic_link:\x01*\x12\xf6\x05\n\x13GetConnectedAccount\x12:.scalekit.v1.connected_accounts.GetConnectedAccountRequest\x1a;.scalekit.v1.connected_accounts.GetConnectedAccountResponse\"\xe5\x04\x92\x41\x90\x04\n\x12\x43onnected Accounts\x12\x17Get a connected account\x1a\xb8\x01Retrieves a connected account by its unique ID. Use the path \'/this\' (e.g. /api/v1/connected_accounts/this) to retrieve the connected account associated with the current token context.Jv\n\x03\x32\x30\x30\x12o\n,Successfully retrieved the connected account\x12?\n=\x1a;.scalekit.v1.connected_accounts.GetConnectedAccountResponseJD\n\x03\x34\x30\x30\x12=\n;Invalid request - missing or malformed connected account IDJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJ$\n\x03\x34\x30\x34\x12\x1d\n\x1b\x43onnected account not found\x82\xb5\x18\x03\x18\xc4\x01\x82\xd3\xe4\x93\x02\x44\x12\x1f/api/v1/connected_accounts/thisZ!\x12\x1f/api/v1/connected_accounts/{id}\x12\x86\x06\n\x1a\x44isconnectConnectedAccount\x12\x41.scalekit.v1.connected_accounts.DisconnectConnectedAccountRequest\x1a\x42.scalekit.v1.connected_accounts.DisconnectConnectedAccountResponse\"\xe0\x04\x92\x41\xf2\x03\n\x12\x43onnected Accounts\x12\x1e\x44isconnect a connected account\x1a\x88\x01\x44isconnects a connected account by setting its status to DISCONNECTED. The account record is retained but is marked as no longer active.J\x80\x01\n\x03\x32\x30\x30\x12y\n/Successfully disconnected the connected account\x12\x46\nD\x1a\x42.scalekit.v1.connected_accounts.DisconnectConnectedAccountResponseJD\n\x03\x34\x30\x30\x12=\n;Invalid request - missing or malformed connected account IDJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJ$\n\x03\x34\x30\x34\x12\x1d\n\x1b\x43onnected account not found\x82\xb5\x18\x03\x18\xc4\x01\x82\xd3\xe4\x93\x02]\"*/api/v1/connected_accounts/{id}:disconnect:\x01*Z,\"\'/api/v1/connected_accounts/-:disconnect:\x01*\x12\xb6\x07\n\x17GetConnectedAccountAuth\x12\x46.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierRequest\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponse\"\x89\x06\x92\x41\xd8\x05\n\x12\x43onnected Accounts\x12\x1dGet connected account details\x1a\xab\x02Retrieves complete authentication details for a connected account including OAuth tokens, refresh tokens, scopes, and API configuration. Query by account ID or by combination of organization/user, connector, and identifier. Returns sensitive credential information - use appropriate access controls.J\xa0\x01\n\x03\x32\x30\x30\x12\x98\x01\nISuccessfully retrieved connected account with full authentication details\x12K\nI\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponseJ<\n\x03\x34\x30\x30\x12\x35\n3Invalid request - missing required query parametersJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJP\n\x03\x34\x30\x34\x12I\nGConnected account not found - no account matches the specified criteria\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02!\x12\x1f/api/v1/connected_accounts/auth\x12\xfa\x06\n\x1aGetConnectedAccountDetails\x12\x46.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierRequest\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponse\"\xca\x05\x92\x41\x96\x05\n\x12\x43onnected Accounts\x12\x1dGet connected account details\x1a\x83\x02Returns metadata for a connected account including status, connector type, provider, and configuration without exposing stored authorization credentials. Look up by account ID, or by a combination of organization (or user), connector, and external identifier.J\x86\x01\n\x03\x32\x30\x30\x12\x7f\n0Successfully retrieved connected account details\x12K\nI\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponseJ<\n\x03\x34\x30\x30\x12\x35\n3Invalid request - missing required query parametersJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJP\n\x03\x34\x30\x34\x12I\nGConnected account not found - no account matches the specified criteria\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02$\x12\"/api/v1/connected_accounts/details\x12\xbb\x07\n\x1aVerifyConnectedAccountUser\x12\x41.scalekit.v1.connected_accounts.VerifyConnectedAccountUserRequest\x1a\x42.scalekit.v1.connected_accounts.VerifyConnectedAccountUserResponse\"\x95\x06\x92\x41\xda\x05\n\x12\x43onnected Accounts\x12\x1dVerify connected account user\x1a\xa4\x02\x43onfirms the user assertion and activates the connected account after the user completes third-party OAuth. Called by the B2B app server with auth_request_id and identifier. Validates that the asserted identifier matches the one stored on the auth request and promotes pending tokens to live.J\x8a\x01\n\x03\x32\x30\x30\x12\x82\x01\n8Verification successful; connected account is now ACTIVE\x12\x46\nD\x1a\x42.scalekit.v1.connected_accounts.VerifyConnectedAccountUserResponseJ6\n\x03\x34\x30\x30\x12/\n-Invalid request - missing or malformed fieldsJ7\n\x03\x34\x30\x31\x12\x30\n.Unauthorized - invalid or missing access tokenJ(\n\x03\x34\x30\x33\x12!\n\x1f\x46orbidden - identifier mismatchJV\n\x03\x34\x30\x34\x12O\nMNot found - no pending flow for the given auth_request_id or already consumed\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02+\"&/api/v1/connected_accounts/user/verify:\x01*\x1a\xe3\x01\x92\x41\xdf\x01\n\x12\x43onnected Accounts\x12\xc8\x01Manage connected accounts for third-party integrations and OAuth connections. Connected accounts represent authenticated access to external services like Google, Notion, Slack, and other applications.B\xa4\x02Z22OAuth provider name (e.g., \'google\', \'microsoft\').J\x08\"google\"R\x08provider\x12h\n\x06status\x18\x03 \x01(\x0e\x32/.scalekit.v1.connected_accounts.ConnectorStatusB\x1f\x92\x41\x1c\x32\x1a\x43urrent connection status.R\x06status\x12\x80\x01\n\x12\x61uthorization_type\x18\x04 \x01(\x0e\x32-.scalekit.v1.connected_accounts.ConnectorTypeB\"\x92\x41\x1f\x32\x1d\x41uthorization mechanism type.R\x11\x61uthorizationType\x12~\n\x10token_expires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB8\x92\x41\x35\x32\x1bToken expiration timestamp.J\x16\"2024-12-31T23:59:59Z\"R\x0etokenExpiresAt\x12t\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB9\x92\x41\x36\x32\x1cLast modification timestamp.J\x16\"2024-03-20T15:04:05Z\"R\tupdatedAt\x12\x42\n\tconnector\x18\x08 \x01(\tB$\x92\x41!2\x15\x43onnector identifier.J\x08\"notion\"R\tconnector\x12p\n\x0clast_used_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampB2\x92\x41/2\x15Last usage timestamp.J\x16\"2024-03-20T14:30:00Z\"R\nlastUsedAt\x12Q\n\x02id\x18\n \x01(\tBA\x92\x41>2$Unique connected account identifier.J\x16\"ca_24834495392086178\"R\x02id\x12w\n\rconnection_id\x18\x0b \x01(\tBR\x92\x41\x46\x32*Parent connection configuration reference.J\x18\"conn_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x0c\x63onnectionIdJ\x04\x08\x05\x10\x06\"\xbf\x01\n\x14\x41uthorizationDetails\x12M\n\x0boauth_token\x18\x01 \x01(\x0b\x32*.scalekit.v1.connected_accounts.OauthTokenH\x00R\noauthToken\x12M\n\x0bstatic_auth\x18\x02 \x01(\x0b\x32*.scalekit.v1.connected_accounts.StaticAuthH\x00R\nstaticAuthB\t\n\x07\x64\x65tails\"\xdc\x05\n\nOauthToken\x12\xa0\x01\n\x0c\x61\x63\x63\x65ss_token\x18\x01 \x01(\tB}\x92\x41z2bOAuth access token for API requests. Typically short-lived and must be refreshed after expiration.J\x14\"ya29.a0AfH6SMBx...\"R\x0b\x61\x63\x63\x65ssToken\x12\xae\x01\n\rrefresh_token\x18\x02 \x01(\tB\x88\x01\x92\x41\x84\x01\x32nOAuth refresh token for obtaining new access tokens. Long-lived and used to maintain persistent authorization.J\x12\"1//0gHJxZ-Lb2...\"R\x0crefreshToken\x12\xe1\x01\n\x06scopes\x18\x03 \x03(\tB\xc8\x01\x92\x41\xc4\x01\x32\\List of granted OAuth scopes defining the permissions and access levels for this connection.Jd[\"https://www.googleapis.com/auth/drive.readonly\", \"https://www.googleapis.com/auth/userinfo.email\"]R\x06scopes\x12\x95\x01\n\x06\x64omain\x18\x04 \x01(\tB}\x92\x41z2iAssociated domain for workspace or organization-scoped OAuth connections (e.g., Google Workspace domain).J\r\"example.com\"R\x06\x64omain\"\xf4\x01\n\nStaticAuth\x12\xe5\x01\n\x07\x64\x65tails\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\xb1\x01\x92\x41\xad\x01\x32zFlexible JSON structure containing static credentials. Format varies by connector type (API key, username/password, etc.).J/{\"api_key\": \"sk_live_...\", \"api_secret\": \"...\"}R\x07\x64\x65tails\"\x83\x02\n\x1aGetConnectedAccountRequest\x12\xe4\x01\n\x02id\x18\x01 \x01(\tB\xd3\x01\x92\x41\xc6\x01\x32\xab\x01Unique identifier for the connected account. Always prefixed with \'ca_\'. If omitted (via the /this path), the connected account is resolved from the current token context.J\x16\"ca_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x02id\"\xc5\x01\n\x1bGetConnectedAccountResponse\x12\xa5\x01\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountBF\x92\x41\x43\x32\x41The connected account with its details and authentication status.R\x10\x63onnectedAccount\"\xb2\x01\n!DisconnectConnectedAccountRequest\x12\x8c\x01\n\x02id\x18\x01 \x01(\tB|\x92\x41p2VUnique identifier for the connected account to disconnect. Always prefixed with \'ca_\'.J\x16\"ca_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x02id\"\xc6\x01\n\"DisconnectConnectedAccountResponse\x12\x9f\x01\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountB@\x92\x41=2;The connected account with its updated DISCONNECTED status.R\x10\x63onnectedAccount*\x8b\x01\n\x0f\x43onnectorStatus\x12!\n\x1d\x43ONNECTION_STATUS_UNSPECIFIED\x10\x00\x12\n\n\x06\x41\x43TIVE\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x12\x10\n\x0cPENDING_AUTH\x10\x03\x12\x18\n\x14PENDING_VERIFICATION\x10\x04\x12\x10\n\x0c\x44ISCONNECTED\x10\x05*\xa3\x01\n\rConnectorType\x12\x1f\n\x1b\x43ONNECTION_TYPE_UNSPECIFIED\x10\x00\x12\t\n\x05OAUTH\x10\x01\x12\x0b\n\x07\x41PI_KEY\x10\x02\x12\x0e\n\nBASIC_AUTH\x10\x03\x12\x10\n\x0c\x42\x45\x41RER_TOKEN\x10\x04\x12\n\n\x06\x43USTOM\x10\x05\x12\t\n\x05\x42\x41SIC\x10\x06\x12\r\n\tOAUTH_M2M\x10\x07\x12\x11\n\rTRELLO_OAUTH1\x10\x08\x32\xf8N\n\x17\x43onnectedAccountService\x12\xde\x06\n\x15ListConnectedAccounts\x12<.scalekit.v1.connected_accounts.ListConnectedAccountsRequest\x1a=.scalekit.v1.connected_accounts.ListConnectedAccountsResponse\"\xc7\x05\x92\x41\x9b\x05\n\x12\x43onnected Accounts\x12\x17List connected accounts\x1a\x9a\x02Retrieves a paginated list of connected accounts for third-party integrations. Filter by organization, user, connector type, provider, or identifier. Returns OAuth tokens, API keys, and connection status for each account. Use pagination tokens to navigate through large result sets.J\xaf\x01\n\x03\x32\x30\x30\x12\xa7\x01\nbSuccessfully retrieved the list of connected accounts with their authentication details and status\x12\x41\n?\x1a=.scalekit.v1.connected_accounts.ListConnectedAccountsResponseJY\n\x03\x34\x30\x30\x12R\nPInvalid request - occurs when query parameters are malformed or validation failsJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/connected_accounts\x12\xe0\x06\n\x17SearchConnectedAccounts\x12>.scalekit.v1.connected_accounts.SearchConnectedAccountsRequest\x1a?.scalekit.v1.connected_accounts.SearchConnectedAccountsResponse\"\xc3\x05\x92\x41\x90\x05\n\x12\x43onnected Accounts\x12\x19Search connected accounts\x1a\x99\x02Search for connected accounts in your environment using a text query that matches against identifiers, providers, or connectors. The search performs case-insensitive matching across account details. Returns paginated results with account status and authentication type information.J\x99\x01\n\x03\x32\x30\x30\x12\x91\x01\nJSuccessfully retrieved matching connected accounts with pagination support\x12\x43\nA\x1a?.scalekit.v1.connected_accounts.SearchConnectedAccountsResponseJc\n\x03\x34\x30\x30\x12\\\nZInvalid request - query parameter is too short (minimum 3 characters) or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02#\x12!/api/v1/connected_accounts:search\x12\xfe\x07\n\x16\x43reateConnectedAccount\x12=.scalekit.v1.connected_accounts.CreateConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.CreateConnectedAccountResponse\"\xe4\x06\x92\x41\xb5\x06\n\x12\x43onnected Accounts\x12\x1a\x43reate a connected account\x1a\xdf\x02\x43reates a new connected account with OAuth tokens or API credentials for third-party service integration. Supply authorization details including access tokens, refresh tokens, scopes, and optional API configuration. The account can be scoped to an organization or user. Returns the created account with its unique identifier and authentication status.J\xa4\x01\n\x03\x32\x30\x31\x12\x9c\x01\nVConnected account created successfully with authentication credentials stored securely\x12\x42\n@\x1a>.scalekit.v1.connected_accounts.CreateConnectedAccountResponseJg\n\x03\x34\x30\x30\x12`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJM\n\x03\x34\x30\x39\x12\x46\nDConflict - connected account with the same identifier already exists\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1f\"\x1a/api/v1/connected_accounts:\x01*\x12\xf0\x07\n\x16UpdateConnectedAccount\x12=.scalekit.v1.connected_accounts.UpdateConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.UpdateConnectedAccountResponse\"\xd6\x06\x92\x41\xa6\x06\n\x12\x43onnected Accounts\x12$Update connected account credentials\x1a\xd2\x02Updates authentication credentials and configuration for an existing connected account. Modify OAuth tokens, refresh tokens, access scopes, or API configuration settings. Specify the account by ID, or by combination of organization/user, connector, and identifier. Returns the updated account with new token expiry and status information.J\x9a\x01\n\x03\x32\x30\x30\x12\x92\x01\nLConnected account updated successfully with new credentials or configuration\x12\x42\n@\x1a>.scalekit.v1.connected_accounts.UpdateConnectedAccountResponseJg\n\x03\x34\x30\x30\x12`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJK\n\x03\x34\x30\x34\x12\x44\nBConnected account not found - the specified account does not exist\x82\xb5\x18\x03\x18\xc4\x01\x82\xd3\xe4\x93\x02\x1f\x1a\x1a/api/v1/connected_accounts:\x01*\x12\xc6\x06\n\x16\x44\x65leteConnectedAccount\x12=.scalekit.v1.connected_accounts.DeleteConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.DeleteConnectedAccountResponse\"\xac\x05\x92\x41\xf6\x04\n\x12\x43onnected Accounts\x12\x1a\x44\x65lete a connected account\x1a\x9f\x02Permanently removes a connected account and revokes all associated authentication credentials. Identify the account by ID, or by combination of organization/user, connector, and identifier. This action cannot be undone. All OAuth tokens and API keys for this account will be invalidated.JK\n\x03\x32\x30\x30\x12\x44\nBConnected account deleted successfully and all credentials revokedJD\n\x03\x34\x30\x30\x12=\n;Invalid request - malformed parameters or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJK\n\x03\x34\x30\x34\x12\x44\nBConnected account not found - the specified account does not exist\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02&\"!/api/v1/connected_accounts:delete:\x01*\x12\xff\x06\n\x1fGetMagicLinkForConnectedAccount\x12\x46.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountRequest\x1aG.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountResponse\"\xca\x05\x92\x41\x90\x05\n\x12\x43onnected Accounts\x12\"Generate authentication magic link\x1a\xa2\x02\x43reates a time-limited magic link for connecting or re-authorizing a third-party account. The link directs users to the OAuth authorization flow for the specified connector. Returns the generated link URL and expiration timestamp. Links typically expire after a short duration for security.J\x9f\x01\n\x03\x32\x30\x30\x12\x97\x01\nHMagic link generated successfully with authorization URL and expiry time\x12K\nI\x1aG.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountResponseJK\n\x03\x34\x30\x30\x12\x44\nBInvalid request - missing required parameters or invalid connectorJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02*\"%/api/v1/connected_accounts/magic_link:\x01*\x12\xf6\x05\n\x13GetConnectedAccount\x12:.scalekit.v1.connected_accounts.GetConnectedAccountRequest\x1a;.scalekit.v1.connected_accounts.GetConnectedAccountResponse\"\xe5\x04\x92\x41\x90\x04\n\x12\x43onnected Accounts\x12\x17Get a connected account\x1a\xb8\x01Retrieves a connected account by its unique ID. Use the path \'/this\' (e.g. /api/v1/connected_accounts/this) to retrieve the connected account associated with the current token context.Jv\n\x03\x32\x30\x30\x12o\n,Successfully retrieved the connected account\x12?\n=\x1a;.scalekit.v1.connected_accounts.GetConnectedAccountResponseJD\n\x03\x34\x30\x30\x12=\n;Invalid request - missing or malformed connected account IDJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJ$\n\x03\x34\x30\x34\x12\x1d\n\x1b\x43onnected account not found\x82\xb5\x18\x03\x18\xc4\x01\x82\xd3\xe4\x93\x02\x44\x12\x1f/api/v1/connected_accounts/thisZ!\x12\x1f/api/v1/connected_accounts/{id}\x12\x86\x06\n\x1a\x44isconnectConnectedAccount\x12\x41.scalekit.v1.connected_accounts.DisconnectConnectedAccountRequest\x1a\x42.scalekit.v1.connected_accounts.DisconnectConnectedAccountResponse\"\xe0\x04\x92\x41\xf2\x03\n\x12\x43onnected Accounts\x12\x1e\x44isconnect a connected account\x1a\x88\x01\x44isconnects a connected account by setting its status to DISCONNECTED. The account record is retained but is marked as no longer active.J\x80\x01\n\x03\x32\x30\x30\x12y\n/Successfully disconnected the connected account\x12\x46\nD\x1a\x42.scalekit.v1.connected_accounts.DisconnectConnectedAccountResponseJD\n\x03\x34\x30\x30\x12=\n;Invalid request - missing or malformed connected account IDJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJ$\n\x03\x34\x30\x34\x12\x1d\n\x1b\x43onnected account not found\x82\xb5\x18\x03\x18\xc4\x01\x82\xd3\xe4\x93\x02]\"*/api/v1/connected_accounts/{id}:disconnect:\x01*Z,\"\'/api/v1/connected_accounts/-:disconnect:\x01*\x12\xb6\x07\n\x17GetConnectedAccountAuth\x12\x46.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierRequest\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponse\"\x89\x06\x92\x41\xd8\x05\n\x12\x43onnected Accounts\x12\x1dGet connected account details\x1a\xab\x02Retrieves complete authentication details for a connected account including OAuth tokens, refresh tokens, scopes, and API configuration. Query by account ID or by combination of organization/user, connector, and identifier. Returns sensitive credential information - use appropriate access controls.J\xa0\x01\n\x03\x32\x30\x30\x12\x98\x01\nISuccessfully retrieved connected account with full authentication details\x12K\nI\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponseJ<\n\x03\x34\x30\x30\x12\x35\n3Invalid request - missing required query parametersJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJP\n\x03\x34\x30\x34\x12I\nGConnected account not found - no account matches the specified criteria\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02!\x12\x1f/api/v1/connected_accounts/auth\x12\xfa\x06\n\x1aGetConnectedAccountDetails\x12\x46.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierRequest\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponse\"\xca\x05\x92\x41\x96\x05\n\x12\x43onnected Accounts\x12\x1dGet connected account details\x1a\x83\x02Returns metadata for a connected account including status, connector type, provider, and configuration without exposing stored authorization credentials. Look up by account ID, or by a combination of organization (or user), connector, and external identifier.J\x86\x01\n\x03\x32\x30\x30\x12\x7f\n0Successfully retrieved connected account details\x12K\nI\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponseJ<\n\x03\x34\x30\x30\x12\x35\n3Invalid request - missing required query parametersJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJP\n\x03\x34\x30\x34\x12I\nGConnected account not found - no account matches the specified criteria\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02$\x12\"/api/v1/connected_accounts/details\x12\xbb\x07\n\x1aVerifyConnectedAccountUser\x12\x41.scalekit.v1.connected_accounts.VerifyConnectedAccountUserRequest\x1a\x42.scalekit.v1.connected_accounts.VerifyConnectedAccountUserResponse\"\x95\x06\x92\x41\xda\x05\n\x12\x43onnected Accounts\x12\x1dVerify connected account user\x1a\xa4\x02\x43onfirms the user assertion and activates the connected account after the user completes third-party OAuth. Called by the B2B app server with auth_request_id and identifier. Validates that the asserted identifier matches the one stored on the auth request and promotes pending tokens to live.J\x8a\x01\n\x03\x32\x30\x30\x12\x82\x01\n8Verification successful; connected account is now ACTIVE\x12\x46\nD\x1a\x42.scalekit.v1.connected_accounts.VerifyConnectedAccountUserResponseJ6\n\x03\x34\x30\x30\x12/\n-Invalid request - missing or malformed fieldsJ7\n\x03\x34\x30\x31\x12\x30\n.Unauthorized - invalid or missing access tokenJ(\n\x03\x34\x30\x33\x12!\n\x1f\x46orbidden - identifier mismatchJV\n\x03\x34\x30\x34\x12O\nMNot found - no pending flow for the given auth_request_id or already consumed\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02+\"&/api/v1/connected_accounts/user/verify:\x01*\x1a\xe3\x01\x92\x41\xdf\x01\n\x12\x43onnected Accounts\x12\xc8\x01Manage connected accounts for third-party integrations and OAuth connections. Connected accounts represent authenticated access to external services like Google, Notion, Slack, and other applications.B\xa4\x02Z2$Unique connected account identifier.J\026\"ca_24834495392086178\"' _globals['_CONNECTEDACCOUNTFORLIST'].fields_by_name['connection_id']._loaded_options = None _globals['_CONNECTEDACCOUNTFORLIST'].fields_by_name['connection_id']._serialized_options = b'\222AF2*Parent connection configuration reference.J\030\"conn_24834495392086178\"\272H\006r\004\020\000\030 ' - _globals['_GOOGLEDWDAUTH'].fields_by_name['subject']._loaded_options = None - _globals['_GOOGLEDWDAUTH'].fields_by_name['subject']._serialized_options = b'\222Ak2UEmail address of the Google Workspace user to impersonate via Domain-Wide Delegation.J\022\"user@example.com\"' - _globals['_GOOGLEDWDAUTH'].fields_by_name['access_token']._loaded_options = None - _globals['_GOOGLEDWDAUTH'].fields_by_name['access_token']._serialized_options = b'\222Ah2POAuth access token acquired via the jwt-bearer grant. Present in responses only.J\024\"ya29.a0AfH6SMBx...\"\340A\003' - _globals['_GOOGLEDWDAUTH'].fields_by_name['scopes']._loaded_options = None - _globals['_GOOGLEDWDAUTH'].fields_by_name['scopes']._serialized_options = b'\222A~2>OAuth scopes granted to this token. Present in responses only.J<[\"openid\", \"https://www.googleapis.com/auth/userinfo.email\"]\340A\003' - _globals['_GOOGLEDWDAUTH'].fields_by_name['token_expires_at']._loaded_options = None - _globals['_GOOGLEDWDAUTH'].fields_by_name['token_expires_at']._serialized_options = b'\222A;29When the access token expires. Present in responses only.\340A\003' _globals['_OAUTHTOKEN'].fields_by_name['access_token']._loaded_options = None _globals['_OAUTHTOKEN'].fields_by_name['access_token']._serialized_options = b'\222Az2bOAuth access token for API requests. Typically short-lived and must be refreshed after expiration.J\024\"ya29.a0AfH6SMBx...\"' _globals['_OAUTHTOKEN'].fields_by_name['refresh_token']._loaded_options = None @@ -246,10 +238,10 @@ _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['GetConnectedAccountDetails']._serialized_options = b'\222A\226\005\n\022Connected Accounts\022\035Get connected account details\032\203\002Returns metadata for a connected account including status, connector type, provider, and configuration without exposing stored authorization credentials. Look up by account ID, or by a combination of organization (or user), connector, and external identifier.J\206\001\n\003200\022\177\n0Successfully retrieved connected account details\022K\nI\032G.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponseJ<\n\003400\0225\n3Invalid request - missing required query parametersJB\n\003401\022;\n9Authentication required - missing or invalid access tokenJP\n\003404\022I\nGConnected account not found - no account matches the specified criteria\202\265\030\002\030D\202\323\344\223\002$\022\"/api/v1/connected_accounts/details' _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['VerifyConnectedAccountUser']._loaded_options = None _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['VerifyConnectedAccountUser']._serialized_options = b'\222A\332\005\n\022Connected Accounts\022\035Verify connected account user\032\244\002Confirms the user assertion and activates the connected account after the user completes third-party OAuth. Called by the B2B app server with auth_request_id and identifier. Validates that the asserted identifier matches the one stored on the auth request and promotes pending tokens to live.J\212\001\n\003200\022\202\001\n8Verification successful; connected account is now ACTIVE\022F\nD\032B.scalekit.v1.connected_accounts.VerifyConnectedAccountUserResponseJ6\n\003400\022/\n-Invalid request - missing or malformed fieldsJ7\n\003401\0220\n.Unauthorized - invalid or missing access tokenJ(\n\003403\022!\n\037Forbidden - identifier mismatchJV\n\003404\022O\nMNot found - no pending flow for the given auth_request_id or already consumed\202\265\030\002\030D\202\323\344\223\002+\"&/api/v1/connected_accounts/user/verify:\001*' - _globals['_CONNECTORSTATUS']._serialized_start=18411 - _globals['_CONNECTORSTATUS']._serialized_end=18550 - _globals['_CONNECTORTYPE']._serialized_start=18553 - _globals['_CONNECTORTYPE']._serialized_end=18732 + _globals['_CONNECTORSTATUS']._serialized_start=17728 + _globals['_CONNECTORSTATUS']._serialized_end=17867 + _globals['_CONNECTORTYPE']._serialized_start=17870 + _globals['_CONNECTORTYPE']._serialized_end=18033 _globals['_LISTCONNECTEDACCOUNTSREQUEST']._serialized_start=359 _globals['_LISTCONNECTEDACCOUNTSREQUEST']._serialized_end=1936 _globals['_LISTCONNECTEDACCOUNTSRESPONSE']._serialized_start=1939 @@ -291,21 +283,19 @@ _globals['_CONNECTEDACCOUNTFORLIST']._serialized_start=14585 _globals['_CONNECTEDACCOUNTFORLIST']._serialized_end=15705 _globals['_AUTHORIZATIONDETAILS']._serialized_start=15708 - _globals['_AUTHORIZATIONDETAILS']._serialized_end=15979 - _globals['_GOOGLEDWDAUTH']._serialized_start=15982 - _globals['_GOOGLEDWDAUTH']._serialized_end=16582 - _globals['_OAUTHTOKEN']._serialized_start=16585 - _globals['_OAUTHTOKEN']._serialized_end=17317 - _globals['_STATICAUTH']._serialized_start=17320 - _globals['_STATICAUTH']._serialized_end=17564 - _globals['_GETCONNECTEDACCOUNTREQUEST']._serialized_start=17567 - _globals['_GETCONNECTEDACCOUNTREQUEST']._serialized_end=17826 - _globals['_GETCONNECTEDACCOUNTRESPONSE']._serialized_start=17829 - _globals['_GETCONNECTEDACCOUNTRESPONSE']._serialized_end=18026 - _globals['_DISCONNECTCONNECTEDACCOUNTREQUEST']._serialized_start=18029 - _globals['_DISCONNECTCONNECTEDACCOUNTREQUEST']._serialized_end=18207 - _globals['_DISCONNECTCONNECTEDACCOUNTRESPONSE']._serialized_start=18210 - _globals['_DISCONNECTCONNECTEDACCOUNTRESPONSE']._serialized_end=18408 - _globals['_CONNECTEDACCOUNTSERVICE']._serialized_start=18735 - _globals['_CONNECTEDACCOUNTSERVICE']._serialized_end=28839 + _globals['_AUTHORIZATIONDETAILS']._serialized_end=15899 + _globals['_OAUTHTOKEN']._serialized_start=15902 + _globals['_OAUTHTOKEN']._serialized_end=16634 + _globals['_STATICAUTH']._serialized_start=16637 + _globals['_STATICAUTH']._serialized_end=16881 + _globals['_GETCONNECTEDACCOUNTREQUEST']._serialized_start=16884 + _globals['_GETCONNECTEDACCOUNTREQUEST']._serialized_end=17143 + _globals['_GETCONNECTEDACCOUNTRESPONSE']._serialized_start=17146 + _globals['_GETCONNECTEDACCOUNTRESPONSE']._serialized_end=17343 + _globals['_DISCONNECTCONNECTEDACCOUNTREQUEST']._serialized_start=17346 + _globals['_DISCONNECTCONNECTEDACCOUNTREQUEST']._serialized_end=17524 + _globals['_DISCONNECTCONNECTEDACCOUNTRESPONSE']._serialized_start=17527 + _globals['_DISCONNECTCONNECTEDACCOUNTRESPONSE']._serialized_end=17725 + _globals['_CONNECTEDACCOUNTSERVICE']._serialized_start=18036 + _globals['_CONNECTEDACCOUNTSERVICE']._serialized_end=28140 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/connected_accounts/connected_accounts_pb2.pyi b/scalekit/v1/connected_accounts/connected_accounts_pb2.pyi index 05886ea..1e10adb 100644 --- a/scalekit/v1/connected_accounts/connected_accounts_pb2.pyi +++ b/scalekit/v1/connected_accounts/connected_accounts_pb2.pyi @@ -34,7 +34,6 @@ class ConnectorType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): BASIC: _ClassVar[ConnectorType] OAUTH_M2M: _ClassVar[ConnectorType] TRELLO_OAUTH1: _ClassVar[ConnectorType] - GOOGLE_DWD: _ClassVar[ConnectorType] CONNECTION_STATUS_UNSPECIFIED: ConnectorStatus ACTIVE: ConnectorStatus EXPIRED: ConnectorStatus @@ -50,7 +49,6 @@ CUSTOM: ConnectorType BASIC: ConnectorType OAUTH_M2M: ConnectorType TRELLO_OAUTH1: ConnectorType -GOOGLE_DWD: ConnectorType class ListConnectedAccountsRequest(_message.Message): __slots__ = ("organization_id", "user_id", "connector", "identifier", "provider", "page_size", "page_token", "query") @@ -297,26 +295,12 @@ class ConnectedAccountForList(_message.Message): def __init__(self, identifier: _Optional[str] = ..., provider: _Optional[str] = ..., status: _Optional[_Union[ConnectorStatus, str]] = ..., authorization_type: _Optional[_Union[ConnectorType, str]] = ..., token_expires_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., updated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., connector: _Optional[str] = ..., last_used_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., id: _Optional[str] = ..., connection_id: _Optional[str] = ...) -> None: ... class AuthorizationDetails(_message.Message): - __slots__ = ("oauth_token", "static_auth", "google_dwd") + __slots__ = ("oauth_token", "static_auth") OAUTH_TOKEN_FIELD_NUMBER: _ClassVar[int] STATIC_AUTH_FIELD_NUMBER: _ClassVar[int] - GOOGLE_DWD_FIELD_NUMBER: _ClassVar[int] oauth_token: OauthToken static_auth: StaticAuth - google_dwd: GoogleDWDAuth - def __init__(self, oauth_token: _Optional[_Union[OauthToken, _Mapping]] = ..., static_auth: _Optional[_Union[StaticAuth, _Mapping]] = ..., google_dwd: _Optional[_Union[GoogleDWDAuth, _Mapping]] = ...) -> None: ... - -class GoogleDWDAuth(_message.Message): - __slots__ = ("subject", "access_token", "scopes", "token_expires_at") - SUBJECT_FIELD_NUMBER: _ClassVar[int] - ACCESS_TOKEN_FIELD_NUMBER: _ClassVar[int] - SCOPES_FIELD_NUMBER: _ClassVar[int] - TOKEN_EXPIRES_AT_FIELD_NUMBER: _ClassVar[int] - subject: str - access_token: str - scopes: _containers.RepeatedScalarFieldContainer[str] - token_expires_at: _timestamp_pb2.Timestamp - def __init__(self, subject: _Optional[str] = ..., access_token: _Optional[str] = ..., scopes: _Optional[_Iterable[str]] = ..., token_expires_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ... + def __init__(self, oauth_token: _Optional[_Union[OauthToken, _Mapping]] = ..., static_auth: _Optional[_Union[StaticAuth, _Mapping]] = ...) -> None: ... class OauthToken(_message.Message): __slots__ = ("access_token", "refresh_token", "scopes", "domain") diff --git a/scalekit/v1/connections/connections_pb2.py b/scalekit/v1/connections/connections_pb2.py index 89fe83c..dffbca0 100644 --- a/scalekit/v1/connections/connections_pb2.py +++ b/scalekit/v1/connections/connections_pb2.py @@ -28,7 +28,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n)scalekit/v1/connections/connections.proto\x12\x17scalekit.v1.connections\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a\x1fscalekit/v1/auth/webauthn.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/domains/domains.proto\x1a!scalekit/v1/options/options.proto\"\xc4\x01\n AssignDomainsToConnectionRequest\x12;\n\x0forganization_id\x18\x01 \x01(\tB\x12\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\x12\x38\n\rconnection_id\x18\x02 \x01(\tB\x13\xbaH\x10r\x0b\x10\x01\x18 :\x05\x63onn_\xc8\x01\x01R\x0c\x63onnectionId\x12)\n\ndomain_ids\x18\x03 \x03(\tB\n\xbaH\x07\x92\x01\x04\x08\x00\x10\x32R\tdomainIds\"\xe6\x03\n!AssignDomainsToConnectionResponse\x12\xc0\x03\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\xfa\x02\x92\x41\xf6\x02\x32 Connection with assigned domainsJ\xd1\x02{\n \"id\": \"conn_1234567890\",\n \"provider\": \"OKTA\",\n \"type\": \"OIDC\",\n \"status\": \"CONFIGURED\",\n \"enabled\": true,\n \"debug_enabled\": false,\n \"organization_id\": \"org_1234567890\",\n \"ui_button_title\": \"Login with SSO\",\n \"configuration_type\": \"MANUAL\",\n \"test_connection_uri\": \"https://auth.example.com/test-connection/conn_1234567890\"\n}R\nconnection\"\x15\n\x13GetProvidersRequest\"W\n\x14GetProvidersResponse\x12?\n\tproviders\x18\x01 \x03(\x0b\x32!.scalekit.v1.connections.ProviderR\tproviders\"\xf3\x01\n\x08Provider\x12\x35\n\x06key_id\x18\x01 \x01(\tB\x1e\x92\x41\x1b\x32\x0fProvider Key IDJ\x08\"google\"R\x05keyId\x12G\n\x0c\x64isplay_name\x18\x02 \x01(\tB$\x92\x41!2\x15Provider Display NameJ\x08\"Google\"R\x0b\x64isplayName\x12W\n\x0b\x64\x65scription\x18\x03 \x01(\tB0\x92\x41-2\x14Provider DescriptionJ\x15\"Sign In With Google\"H\x00R\x0b\x64\x65scription\x88\x01\x01\x42\x0e\n\x0c_description\"\xae\x02\n\"CreateEnvironmentConnectionRequest\x12Q\n\nconnection\x18\x01 \x01(\x0b\x32).scalekit.v1.connections.CreateConnectionB\x06\xbaH\x03\xc8\x01\x01R\nconnection\x12\xaa\x01\n\x05\x66lags\x18\x02 \x01(\x0b\x32\x1e.scalekit.v1.connections.FlagsBo\x92\x41l2SOptional flags to control connection creation behavior, such as enabling debug modeJ\x15{ \"is_social\": true }H\x00R\x05\x66lags\x88\x01\x01\x42\x08\n\x06_flags\"\xe4\x02\n\x17\x43reateConnectionRequest\x12\x9a\x01\n\x0forganization_id\x18\x01 \x01(\tBq\x92\x41\x65\x32JUnique identifier of the organization for which the connection is created.J\x17\"org_12362474900684814\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\xa5\x01\n\nconnection\x18\x03 \x01(\x0b\x32).scalekit.v1.connections.CreateConnectionBZ\xbaHW\xba\x01Q\x12\x36OAUTH, PASSWORDLESS and WEBAUTHN are not supported yet\x1a\x17!(this.type in [4,5,9])\xc8\x01\x01R\nconnectionJ\x04\x08\x02\x10\x03\"\xf7\x05\n\x10\x43reateConnection\x12\xcb\x01\n\x08provider\x18\x01 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderB\x81\x01\x92\x41v2lIdentity provider service that handles authentication (such as OKTA, Google, Azure AD, or a custom provider)J\x06\"OKTA\"\xbaH\x05\x82\x01\x02\x10\x01R\x08provider\x12\x45\n\x04type\x18\x02 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04type\x12\x98\x01\n\x0cprovider_key\x18\x03 \x01(\tBu\x92\x41r2fKey ID of the identity provider. This is used to identify the specific configuration for the provider.J\x08\"google\"R\x0bproviderKey\x12\x1a\n\x06key_id\x18\x04 \x01(\tH\x00R\x05keyId\x88\x01\x01:\x8b\x02\xbaH\x87\x02\x1aT\x12$provider or provider_key is required\x1a,has(this.provider_key) || this.provider != 0\x1a`\x12\x1einvalid value for provider_key\x1a>this.provider == 15 ? this.provider_key in [\'SCALEKIT\'] : true\x1aM\x12\x18invalid value for key_id\x1a\x31this.type == 9 ? this.key_id == \'WEBAUTHN\' : trueB\t\n\x07_key_id\"\x89\"\n\nConnection\x12\x8d\x01\n\x02id\x18\x01 \x01(\tB}\x92\x41z2_Unique identifier for this connection. Used in API calls to reference this specific connection.J\x17\"conn_2123312131125533\"R\x02id\x12\xc2\x01\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderBy\x92\x41v2lIdentity provider service that handles authentication (such as OKTA, Google, Azure AD, or a custom provider)J\x06\"OKTA\"R\x08provider\x12\xb4\x01\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeBw\x92\x41t2jAuthentication protocol used by this connection. Can be OIDC (OpenID Connect), SAML, OAUTH, or MAGIC_LINK.J\x06\"OIDC\"R\x04type\x12\xc6\x01\n\x06status\x18\x04 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusB\x82\x01\x92\x41|2kCurrent configuration status of the connection. Possible values include IN_PROGRESS, CONFIGURED, and ERROR.J\r\"IN_PROGRESS\"\xe0\x41\x03R\x06status\x12\xab\x01\n\x07\x65nabled\x18\x05 \x01(\x08\x42\x90\x01\x92\x41\x8c\x01\x32\x82\x01\x43ontrols whether users can sign in using this connection. When false, the connection exists but cannot be used for authentication.J\x05\x66\x61lseR\x07\x65nabled\x12\xb0\x01\n\rdebug_enabled\x18\x06 \x01(\x08\x42\x8a\x01\x92\x41\x86\x01\x32~Enables testing mode that allows non-HTTPS endpoints. Should only be enabled in development environments, never in production.J\x04trueR\x0c\x64\x65\x62ugEnabled\x12\xc1\x01\n\x0forganization_id\x18\x07 \x01(\tB\x92\x01\x92\x41\x8e\x01\x32tIdentifier of the organization that owns this connection. Connections are typically scoped to a single organization.J\x16\"org_2123312131125533\"H\x01R\x0eorganizationId\x88\x01\x01\x12\xbd\x01\n\x0fui_button_title\x18\x08 \x01(\tB\x94\x01\x92\x41\x81\x01\x32mCustom text shown on the login button in the user interface. Helps users identify which SSO option to select.J\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12\xd5\x01\n\x12\x63onfiguration_type\x18\t \x01(\x0e\x32*.scalekit.v1.connections.ConfigurationTypeBz\x92\x41w2kHow the connection was configured: DISCOVERY (automatic configuration) or MANUAL (administrator configured)J\x08\"MANUAL\"R\x11\x63onfigurationType\x12\xdf\x01\n\x13test_connection_uri\x18\x0c \x01(\tB\xae\x01\x92\x41\xaa\x01\x32\x66URI that can be used to test this connection. Visit this URL to verify the connection works correctly.J@\"https://auth.example.com/test-connection/conn_2123312131125533\"R\x11testConnectionUri\x12\x81\x02\n\x11\x61ttribute_mapping\x18\x0f \x03(\x0b\x32\x39.scalekit.v1.connections.Connection.AttributeMappingEntryB\x98\x01\x92\x41|2zMaps identity provider attributes to user profile fields. For example, {\'email\': \'user.mail\', \'name\': \'user.displayName\'}.\xbaH\x16\x9a\x01\x13\x10\x1e\"\x06r\x04\x10\x01\x18\x64*\x07r\x05\x10\x01\x18\x80\x02R\x10\x61ttributeMapping\x12\xb1\x01\n\x0b\x63reate_time\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.TimestampBt\x92\x41_2EWhen this connection was first created. Format is RFC 3339 timestamp.J\x16\"2023-01-15T14:30:00Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ncreateTime\x12\xb1\x01\n\x0bupdate_time\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.TimestampBt\x92\x41_2EWhen this connection was last modified. Format is RFC 3339 timestamp.J\x16\"2023-02-20T09:15:30Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\nupdateTime\x12\xb3\x01\n\x0boidc_config\x18\x12 \x01(\x0b\x32-.scalekit.v1.connections.OIDCConnectionConfigBa\x92\x41^2\\Configuration details for OpenID Connect (OIDC) connections. Present only when type is OIDC.H\x00R\noidcConfig\x12\xaa\x01\n\x0bsaml_config\x18\x13 \x01(\x0b\x32\x35.scalekit.v1.connections.SAMLConnectionConfigResponseBP\x92\x41M2KConfiguration details for SAML connections. Present only when type is SAML.H\x00R\nsamlConfig\x12\xa7\x01\n\x0coauth_config\x18\x14 \x01(\x0b\x32..scalekit.v1.connections.OAuthConnectionConfigBR\x92\x41O2MConfiguration details for OAuth connections. Present only when type is OAUTH.H\x00R\x0boauthConfig\x12\xbf\x01\n\x13passwordless_config\x18\x16 \x01(\x0b\x32+.scalekit.v1.connections.PasswordLessConfigB_\x92\x41\\2ZConfiguration details for Magic Link authentication. Present only when type is MAGIC_LINK.H\x00R\x12passwordlessConfig\x12\xc0\x01\n\rstatic_config\x18\x1a \x01(\x0b\x32).scalekit.v1.connections.StaticAuthConfigBn\x92\x41k2iStatic configuration for custom connections. Present only when type is BASIC, BEARER, API_KEY, or custom.H\x00R\x0cstaticConfig\x12\xb1\x01\n\x0fwebauthn_config\x18\x1b \x01(\x0b\x32-.scalekit.v1.connections.WebAuthConfigurationBW\x92\x41T2RConfiguration details for WebAuthn (passkeys). Present only when type is WEBAUTHN.H\x00R\x0ewebauthnConfig\x12\xbb\x01\n\x11google_dwd_config\x18\x1c \x01(\x0b\x32(.scalekit.v1.connections.GoogleDWDConfigBc\x92\x41`2^Configuration details for Google Domain-Wide Delegation. Present only when type is GOOGLE_DWD.H\x00R\x0fgoogleDwdConfig\x12}\n\x06key_id\x18\x19 \x01(\tBa\x92\x41^2\\Alternative identifier for this connection, typically used in frontend applications or URLs.H\x02R\x05keyId\x88\x01\x01\x12u\n\x0cprovider_key\x18\x17 \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x12\xaa\x01\n\x07\x64omains\x18\x18 \x03(\x0b\x32\x1b.scalekit.v1.domains.DomainBs\x92\x41p2SDomain associated with this connection, used for domain-based authentication flows.J\x19[{\"name\": \"example.com\"}]R\x07\x64omains\x1a\x43\n\x15\x41ttributeMappingEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\n\n\x08settingsB\x12\n\x10_organization_idB\t\n\x07_key_idJ\x04\x08\r\x10\x0f\"w\n\x18\x43reateConnectionResponse\x12[\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\x16\x92\x41\x13\x32\x11\x43onnection DetailR\nconnection\"\xa8\x02\n\"UpdateEnvironmentConnectionRequest\x12~\n\rconnection_id\x18\x01 \x01(\tBY\x92\x41M2+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xca>\x05\xfa\x02\x02id\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\x12\x81\x01\n\nconnection\x18\x03 \x01(\x0b\x32).scalekit.v1.connections.UpdateConnectionB6\x92\x41-2#Connection properties to be updated\xca>\x05\xfa\x02\x02id\xbaH\x03\xc8\x01\x01R\nconnection\"\xce\x03\n\x17UpdateConnectionRequest\x12q\n\x0forganization_id\x18\x01 \x01(\tBH\x92\x41<2#Organization ID for the Connection.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\x61\n\x02id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02id\x12\xd6\x01\n\nconnection\x18\x04 \x01(\x0b\x32).scalekit.v1.connections.UpdateConnectionB\x8a\x01\x92\x41-2#Connection properties to be updated\xca>\x05\xfa\x02\x02id\xbaHW\xba\x01Q\x12\x36OAUTH, PASSWORDLESS and WEBAUTHN are not supported yet\x1a\x17!(this.type in [4,5,9])\xc8\x01\x01R\nconnectionJ\x04\x08\x02\x10\x03\"\xfd\x12\n\x10UpdateConnection\x12w\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderB.\x92\x41#2\x17SSO Connection ProviderJ\x08\"CUSTOM\"\xbaH\x05\x82\x01\x02\x10\x01R\x08provider\x12r\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB5\x92\x41*2 Connection Protocol OIDC / SAML J\x06\"OIDC\"\xbaH\x05\x82\x01\x02\x10\x01R\x04type\x12\xae\x01\n\rdebug_enabled\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBm\x92\x41j2bDebug mode for the connection. Debug would allow non HTTPS endpoint to be used with the connectionJ\x04trueR\x0c\x64\x65\x62ugEnabled\x12\x8d\x01\n\x0fui_button_title\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueBG\x92\x41\x35\x32!Display name for the Login ButtonJ\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12~\n\x12\x63onfiguration_type\x18\x0b \x01(\x0e\x32*.scalekit.v1.connections.ConfigurationTypeB#\x92\x41 2\x14\x43onfiguration Type. J\x08\"MANUAL\"R\x11\x63onfigurationType\x12\x9d\x01\n\x11\x61ttribute_mapping\x18\x0f \x03(\x0b\x32?.scalekit.v1.connections.UpdateConnection.AttributeMappingEntryB/\x92\x41\x13\x32\x11\x41ttribute Mapping\xbaH\x16\x9a\x01\x13\x10\x1e\"\x06r\x04\x10\x01\x18\x64*\x07r\x05\x10\x01\x18\x80\x02R\x10\x61ttributeMapping\x12\x83\x01\n\x0boidc_config\x18\x10 \x01(\x0b\x32-.scalekit.v1.connections.OIDCConnectionConfigB1\x92\x41.2,OIDC Configuration if ConnectionType == OIDCH\x00R\noidcConfig\x12\x8a\x01\n\x0bsaml_config\x18\x11 \x01(\x0b\x32\x34.scalekit.v1.connections.SAMLConnectionConfigRequestB1\x92\x41.2,SAML Configuration if ConnectionType == SAMLH\x00R\nsamlConfig\x12\x88\x01\n\x0coauth_config\x18\x12 \x01(\x0b\x32..scalekit.v1.connections.OAuthConnectionConfigB3\x92\x41\x30\x32.OAuth Configuration if ConnectionType == OAUTHH\x00R\x0boauthConfig\x12\x9d\x01\n\x13passwordless_config\x18\x14 \x01(\x0b\x32+.scalekit.v1.connections.PasswordLessConfigB=\x92\x41:28Magic Link Configuration if ConnectionType == MAGIC_LINKH\x00R\x12passwordlessConfig\x12P\n\rstatic_config\x18\x17 \x01(\x0b\x32).scalekit.v1.connections.StaticAuthConfigH\x00R\x0cstaticConfig\x12\xb1\x01\n\x0fwebauthn_config\x18\x18 \x01(\x0b\x32-.scalekit.v1.connections.WebAuthConfigurationBW\x92\x41T2RConfiguration details for WebAuthn (passkeys). Present only when type is WEBAUTHN.H\x00R\x0ewebauthnConfig\x12\xaf\x01\n\x11google_dwd_config\x18\x19 \x01(\x0b\x32(.scalekit.v1.connections.GoogleDWDConfigBW\x92\x41T2RGoogle Domain-Wide Delegation configuration. Present only when type is GOOGLE_DWD.H\x00R\x0fgoogleDwdConfig\x12&\n\x06key_id\x18\x16 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xac\x02H\x01R\x05keyId\x88\x01\x01\x12u\n\x0cprovider_key\x18\x15 \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x1a\x43\n\x15\x41ttributeMappingEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01:\x8b\x02\xbaH\x87\x02\x1aT\x12$provider or provider_key is required\x1a,has(this.provider_key) || this.provider != 0\x1a`\x12\x1einvalid value for provider_key\x1a>this.provider == 15 ? this.provider_key in [\'SCALEKIT\'] : true\x1aM\x12\x18invalid value for key_id\x1a\x31this.type == 9 ? this.key_id == \'WEBAUTHN\' : trueB\n\n\x08settingsB\t\n\x07_key_idJ\x04\x08\x01\x10\x02J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06J\x04\x08\t\x10\x0bJ\x04\x08\x0c\x10\x0f\"\x80\x01\n\x18UpdateConnectionResponse\x12\x64\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\x1f\x92\x41\x1c\x32\x1aUpdated Connection detailsR\nconnection\"\x9c\x01\n\"DeleteEnvironmentConnectionRequest\x12v\n\rconnection_id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\xf5\x01\n\x17\x44\x65leteConnectionRequest\x12q\n\x0forganization_id\x18\x01 \x01(\tBH\x92\x41<2#Organization ID for the Connection.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\x61\n\x02id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\x92\x01\n\x1fGetEnvironmentConnectionRequest\x12o\n\rconnection_id\x18\x01 \x01(\tBJ\x92\x41>2$Unique identifier for the ConnectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\xfc\x02\n\x14GetConnectionRequest\x12\xba\x01\n\x0forganization_id\x18\x01 \x01(\tB\x90\x01\x92\x41\x83\x01\x32jOrganization identifier (required). Specifies which organization owns the connection you want to retrieve.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\xa0\x01\n\x02id\x18\x03 \x01(\tB\x8f\x01\x92\x41\x82\x01\x32hConnection identifier (required). Specifies which specific connection to retrieve from the organization.J\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\x9a\x02\n\x15GetConnectionResponse\x12\x80\x02\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\xba\x01\x92\x41\xb6\x01\x32\xb3\x01\x43omplete connection details including provider configuration, protocol settings, status, and all metadata. Contains everything needed to understand the connection\'s current state.R\nconnection\"\x96\x04\n\x16ListConnectionsRequest\x12\x80\x01\n\x0forganization_id\x18\x01 \x01(\tBR\x92\x41\x46\x32-Filter connections by organization identifierJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12\x7f\n\x06\x64omain\x18\x03 \x01(\tBb\x92\x41V2CFilter connections by email domain associated with the organizationJ\x0f\"hero-saas.app\"\xbaH\x06r\x04\x10\x01\x18 H\x01R\x06\x64omain\x88\x01\x01\x12\xc6\x01\n\x07include\x18\x04 \x01(\tB\xa6\x01\x92\x41\xa2\x01\x32\x9f\x01\x46ilter connections by status. Use \'all\' to include all connections regardless of status. Default behavior shows only active (completed and enabled) connectionsH\x02R\x07include\x88\x01\x01\x42\x12\n\x10_organization_idB\t\n\x07_domainB\n\n\x08_includeJ\x04\x08\x02\x10\x03\"\x9d\x01\n\x17ListConnectionsResponse\x12\x81\x01\n\x0b\x63onnections\x18\x01 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB6\x92\x41\x33\x32\x31List of connections matching the request criteriaR\x0b\x63onnections\"\xfa\x0b\n\x0eListConnection\x12Q\n\x02id\x18\x01 \x01(\tBA\x92\x41>2#Unique identifier of the connectionJ\x17\"conn_2123312131125533\"R\x02id\x12\x8d\x01\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderBD\x92\x41\x41\x32\x35Identity provider type (e.g., OKTA, Google, Azure AD)J\x08\"CUSTOM\"R\x08provider\x12x\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB;\x92\x41\x38\x32.Authentication protocol used by the connectionJ\x06\"OIDC\"R\x04type\x12\x88\x01\n\x06status\x18\x04 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusBE\x92\x41?2.Current configuration status of the connectionJ\r\"IN_PROGRESS\"\xe0\x41\x03R\x06status\x12g\n\x07\x65nabled\x18\x05 \x01(\x08\x42M\x92\x41J2AWhether the connection is currently active for organization usersJ\x05\x66\x61lseR\x07\x65nabled\x12\x85\x01\n\x0forganization_id\x18\x06 \x01(\tB\\\x92\x41Y2?Unique identifier of the organization that owns this connectionJ\x16\"org_2123312131125533\"R\x0eorganizationId\x12\x88\x01\n\x0fui_button_title\x18\x07 \x01(\tB`\x92\x41N2:Text displayed on the SSO login button for this connectionJ\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12t\n\x07\x64omains\x18\x08 \x03(\tBZ\x92\x41W2/List of domains configured with this connectionJ$[\"yourapp.com\", \"yourworkspace.com\"]R\x07\x64omains\x12q\n\x11organization_name\x18\t \x01(\tBD\x92\x41\x41\x32*Name of the organization of the connectionJ\x13\"Your Organization\"R\x10organizationName\x12u\n\x0cprovider_key\x18\n \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x12\x90\x01\n\x06key_id\x18\x0b \x01(\tBy\x92\x41v2[Alternative identifier for this connection, typically used in frontend applications or URLsJ\x17\"conn_2123312131125533\"R\x05keyId\x12\x90\x01\n\ncreated_at\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.TimestampBU\x92\x41@2&When this connection was first createdJ\x16\"2023-01-15T14:30:00Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\tcreatedAt\"\xcf\x02\n\"ListOrganizationConnectionsRequest\x12\x80\x01\n\tpage_size\x18\x01 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x02 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\x97\x02\n#ListOrganizationConnectionsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12&\n\x0fprev_page_token\x18\x03 \x01(\tR\rprevPageToken\x12\x80\x01\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB5\x92\x41\x32\x32\x30List of connections matching the filter criteriaR\x0b\x63onnections\"\xa2\x07\n$SearchOrganizationConnectionsRequest\x12l\n\x05query\x18\x01 \x01(\tBQ\x92\x41G2-Search query Connection ID or Organization IDJ\x16\"conn_121312434123312\"\xbaH\x04r\x02\x18\x64H\x00R\x05query\x88\x01\x01\x12@\n\x08provider\x18\x02 \x01(\tB\x1f\x92\x41\x1c\x32\x12\x46ilter by providerJ\x06\"OKTA\"H\x01R\x08provider\x88\x01\x01\x12}\n\x06status\x18\x03 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusB5\x92\x41*2\x1b\x46ilter by connection statusJ\x0b\"COMPLETED\"\xbaH\x05\x82\x01\x02\x10\x01H\x02R\x06status\x88\x01\x01\x12\x8c\x01\n\x0f\x63onnection_type\x18\x04 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB5\x92\x41*2\x1b\x46ilter by connection statusJ\x0b\"COMPLETED\"\xbaH\x05\x82\x01\x02\x10\x01H\x03R\x0e\x63onnectionType\x88\x01\x01\x12O\n\x07\x65nabled\x18\x07 \x01(\x08\x42\x30\x92\x41-2#Filter by connection enabled statusJ\x06\"true\"H\x04R\x07\x65nabled\x88\x01\x01\x12\x80\x01\n\tpage_size\x18\x05 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x06 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageTokenB\x08\n\x06_queryB\x0b\n\t_providerB\t\n\x07_statusB\x12\n\x10_connection_typeB\n\n\x08_enabled\"\x99\x02\n%SearchOrganizationConnectionsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12&\n\x0fprev_page_token\x18\x03 \x01(\tR\rprevPageToken\x12\x80\x01\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB5\x92\x41\x32\x32\x30List of connections matching the filter criteriaR\x0b\x63onnections\"\x9c\x01\n\"ToggleEnvironmentConnectionRequest\x12v\n\rconnection_id\x18\x02 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\x9e\x02\n\x17ToggleConnectionRequest\x12\x92\x01\n\x0forganization_id\x18\x01 \x01(\tBi\x92\x41]2DUnique identifier of the organization associated with the connectionJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12h\n\x02id\x18\x03 \x01(\tBX\x92\x41L22Unique identifier for the connection to be toggledJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\xbc\x02\n\x18ToggleConnectionResponse\x12\xa9\x01\n\x07\x65nabled\x18\x01 \x01(\x08\x42\x8e\x01\x92\x41\x8a\x01\x32\x81\x01\x43urrent state of the connection after the operation. True means the connection is now enabled and can be used for authentication.J\x04trueR\x07\x65nabled\x12\x62\n\rerror_message\x18\x02 \x01(\tB8\x92\x41\x35\x32$Error message if the operation failsJ\r\"placeholder\"H\x00R\x0c\x65rrorMessage\x88\x01\x01\x42\x10\n\x0e_error_message\"\xa0\x12\n\x14OIDCConnectionConfig\x12j\n\x06issuer\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB4\x92\x41\x31\x32\nIssuer URLJ#\"https://youridp.com/service/oauth\"R\x06issuer\x12\xaa\x01\n\x12\x64iscovery_endpoint\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB]\x92\x41Z2\x12\x44iscovery EndpointJD\"https://youridp.com/service/oauth/.well-known/openid-configuration\"R\x11\x64iscoveryEndpoint\x12\x84\x01\n\rauthorize_uri\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValueBA\x92\x41>2\rAuthorize URIJ-\"https://youridp.com/service/oauth/authorize\"R\x0c\x61uthorizeUri\x12t\n\ttoken_uri\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueB9\x92\x41\x36\x32\tToken URIJ)\"https://youridp.com/service/oauth/token\"R\x08tokenUri\x12\x82\x01\n\ruser_info_uri\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB@\x92\x41=2\rUser Info URIJ,\"https://youridp.com/service/oauth/userinfo\"R\x0buserInfoUri\x12p\n\x08jwks_uri\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValueB7\x92\x41\x34\x32\x08JWKS URIJ(\"https://youridp.com/service/oauth/jwks\"R\x07jwksUri\x12\\\n\tclient_id\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB!\x92\x41\x1e\x32\tClient IDJ\x11\"oauth_client_id\"R\x08\x63lientId\x12l\n\rclient_secret\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB)\x92\x41&2\rClient SecretJ\x15\"oauth_client_secret\"R\x0c\x63lientSecret\x12\x63\n\x06scopes\x18\n \x03(\x0e\x32\".scalekit.v1.connections.OIDCScopeB\'\x92\x41$2\x0bOIDC ScopesJ\x15[\"openid\", \"profile\"]R\x06scopes\x12r\n\x0ftoken_auth_type\x18\x0b \x01(\x0e\x32&.scalekit.v1.connections.TokenAuthTypeB\"\x92\x41\x1f\x32\x0fToken Auth TypeJ\x0c\"URL_PARAMS\"R\rtokenAuthType\x12j\n\x0credirect_uri\x18\x0c \x01(\tBG\x92\x41\x44\x32\x0cRedirect URIJ4\"https://yourapp.com/sso/v1/oidc/conn_1234/callback\"R\x0bredirectUri\x12V\n\x0cpkce_enabled\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x17\x92\x41\x14\x32\x0cPKCE EnabledJ\x04trueR\x0bpkceEnabled\x12h\n\x13idp_logout_required\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1c\x92\x41\x19\x32\x11\x45nable IDP logoutJ\x04trueR\x11idpLogoutRequired\x12\xb4\x01\n\x18post_logout_redirect_uri\x18\x0f \x01(\x0b\x32\x1c.google.protobuf.StringValueB]\x92\x41W2\x18post logout redirect uriJ;\"https://yourapp.com/sso/v1/oidc/conn_1234/logout/callback\"\xe0\x41\x03R\x15postLogoutRedirectUri\x12\xea\x01\n\x1f\x62\x61\x63kchannel_logout_redirect_uri\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x84\x01\x92\x41~2\"https://yourapp.com/sso/v1/oidc/conn_1234/backchannel-logout\"\xe0\x41\x03R\x1c\x62\x61\x63kchannelLogoutRedirectUri\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\x12\xba\x01\n!jit_provisioning_with_sso_enabled\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBT\x92\x41Q2IIndicates if Just In Time user provisioning is enabled for the connectionJ\x04trueR\x1djitProvisioningWithSsoEnabled\"\xce\x13\n\x15OAuthConnectionConfig\x12\x84\x01\n\rauthorize_uri\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValueBA\x92\x41>2\rAuthorize URIJ-\"https://youridp.com/service/oauth/authorize\"R\x0c\x61uthorizeUri\x12t\n\ttoken_uri\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueB9\x92\x41\x36\x32\tToken URIJ)\"https://youridp.com/service/oauth/token\"R\x08tokenUri\x12\x82\x01\n\ruser_info_uri\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB@\x92\x41=2\rUser Info URIJ,\"https://youridp.com/service/oauth/userinfo\"R\x0buserInfoUri\x12\\\n\tclient_id\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB!\x92\x41\x1e\x32\tClient IDJ\x11\"oauth_client_id\"R\x08\x63lientId\x12l\n\rclient_secret\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB)\x92\x41&2\rClient SecretJ\x15\"oauth_client_secret\"R\x0c\x63lientSecret\x12?\n\x06scopes\x18\n \x03(\tB\'\x92\x41$2\x0bOIDC ScopesJ\x15[\"openid\", \"profile\"]R\x06scopes\x12\x62\n\x0credirect_uri\x18\x0c \x01(\tB?\x92\x41<2\x0cRedirect URIJ,\"https://yourapp.com/service/oauth/redirect\"R\x0bredirectUri\x12V\n\x0cpkce_enabled\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x17\x92\x41\x14\x32\x0cPKCE EnabledJ\x04trueR\x0bpkceEnabled\x12V\n\x06prompt\x18\x0e \x01(\x0b\x32\x1c.google.protobuf.StringValueB \x92\x41\x1d\x32\x13Prompt for the userJ\x06\"none\"R\x06prompt\x12m\n\x12use_platform_creds\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueB#\x92\x41 2\x18Use Scalekit credentialsJ\x04trueR\x10usePlatformCreds\x12Z\n\x0b\x61\x63\x63\x65ss_type\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1b\x92\x41\x18\x32\x0b\x41\x63\x63\x65ss TypeJ\t\"offline\"R\naccessType\x12n\n\x11\x63ustom_scope_name\x18\x11 \x01(\x0b\x32\x1c.google.protobuf.StringValueB$\x92\x41!2\x11\x43ustom Scope NameJ\x0c\"user_scope\"R\x0f\x63ustomScopeName\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\x12k\n\x11token_access_type\x18\x13 \x01(\x0b\x32\x1c.google.protobuf.StringValueB!\x92\x41\x1e\x32\x11Token Access TypeJ\t\"offline\"R\x0ftokenAccessType\x12\x84\x02\n\ttenant_id\x18\x14 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\xc8\x01\x92\x41\xc4\x01\x32\x99\x01Microsoft Entra tenant ID. Required when using a single-tenant or multi-tenant app registered in Microsoft Entra. Leave empty to use the common endpoint.J&\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"R\x08tenantId\x12\xc7\x01\n\x07is_cimd\x18\x15 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x91\x01\x92\x41\x8a\x01\x32\x81\x01Indicates whether this connection was registered using Client ID Metadata Document (CIMD) instead of Dynamic Client Registration.J\x04true\xe0\x41\x03R\x06isCimd\x12\xbe\x01\n\x08\x61pp_name\x18\x16 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x84\x01\x92\x41\x80\x01\x32mApplication name used by providers that require it as an authorize query parameter (e.g., Trello\'s app_name).J\x0f\"My Trello App\"R\x07\x61ppName\x12\xfa\x01\n\x0foptional_scopes\x18\x17 \x01(\x0b\x32\'.scalekit.v1.connections.OptionalScopesB\xa2\x01\x92\x41\x9e\x01\x32\x9b\x01Optional scopes configuration for identity providers that support or require additional scopes to be sent in a custom field during authentication requests.H\x00R\x0eoptionalScopes\x88\x01\x01\x42\x12\n\x10_optional_scopes\"\xa6\x03\n\x0eOptionalScopes\x12v\n\x06scopes\x18\x01 \x03(\tB^\x92\x41[2CList of optional scopes that can be requested during authenticationJ\x14[\"scope1\", \"scope2\"]R\x06scopes\x12\x9b\x02\n\nfield_name\x18\x02 \x01(\tB\xfb\x01\x92\x41\xf7\x01\x32\xd5\x01Name of the field in which scope should be sent in the authentication request. This is required by some identity providers that expect scopes to be sent in a custom field instead of the standard \'scope\' parameter.J\x1d\"optional_scope or bot_scope\"R\tfieldName\"\x80\x03\n\x0fGoogleDWDConfig\x12\xa7\x01\n\x14service_account_json\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueBW\x92\x41Q2OGoogle Cloud service account JSON key. Write-only: reads return a masked value.\xe0\x41\x04R\x12serviceAccountJson\x12\x39\n\x06scopes\x18\x02 \x03(\tB!\x92\x41\x1e\x32\x1cOAuth 2.0 scopes to request.R\x06scopes\x12\x87\x01\n\ttoken_uri\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValueBL\x92\x41I2GGoogle token endpoint. Defaults to https://oauth2.googleapis.com/token.R\x08tokenUri\"\xf4\x07\n\x12PasswordLessConfig\x12]\n\x04type\x18\x01 \x01(\x0e\x32).scalekit.v1.connections.PasswordlessTypeB\x1e\x92\x41\x1b\x32\x11Passwordless TypeJ\x06\"LINK\"R\x04type\x12W\n\tfrequency\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x16\x92\x41\x13\x32\x0eLink FrequencyJ\x01\x31H\x00R\tfrequency\x88\x01\x01\x12\x61\n\x08validity\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\"\x92\x41\x1f\x32\x18Link Validity in SecondsJ\x03\x36\x30\x30H\x01R\x08validity\x88\x01\x01\x12\x86\x01\n\x1b\x65nforce_same_browser_origin\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB&\x92\x41#2\x1b\x45nforce Same Browser OriginJ\x04trueH\x02R\x18\x65nforceSameBrowserOrigin\x88\x01\x01\x12t\n\x15\x63ode_challenge_length\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x1d\x92\x41\x1a\x32\x15\x43ode Challenge LengthJ\x01\x36H\x03R\x13\x63odeChallengeLength\x88\x01\x01\x12\x84\x01\n\x13\x63ode_challenge_type\x18\x06 \x01(\x0e\x32*.scalekit.v1.connections.CodeChallengeTypeB#\x92\x41 2\x13\x43ode Challenge TypeJ\t\"NUMERIC\"H\x04R\x11\x63odeChallengeType\x88\x01\x01\x12\x9d\x01\n-regenerate_passwordless_credentials_on_resend\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1a\x92\x41\x17\x32\x0fRegenerate the J\x04trueH\x05R)regeneratePasswordlessCredentialsOnResend\x88\x01\x01\x42\x0c\n\n_frequencyB\x0b\n\t_validityB\x1e\n\x1c_enforce_same_browser_originB\x18\n\x16_code_challenge_lengthB\x16\n\x14_code_challenge_typeB0\n._regenerate_passwordless_credentials_on_resend\"P\n\x10StaticAuthConfig\x12<\n\rstatic_config\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x0cstaticConfig\"\xc4\"\n\x14WebAuthConfiguration\x12@\n\x02rp\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connections.WebAuthConfiguration.RpR\x02rp\x12[\n\x0b\x61ttestation\x18\x02 \x01(\x0b\x32\x39.scalekit.v1.connections.WebAuthConfiguration.AttestationR\x0b\x61ttestation\x12\x64\n\x0e\x61uthenticators\x18\x03 \x01(\x0b\x32<.scalekit.v1.connections.WebAuthConfiguration.AuthenticatorsR\x0e\x61uthenticators\x12}\n\x17\x61uthenticator_selection\x18\x04 \x01(\x0b\x32\x44.scalekit.v1.connections.WebAuthConfiguration.AuthenticatorSelectionR\x16\x61uthenticatorSelection\x12O\n\x07timeout\x18\x05 \x01(\x0b\x32\x35.scalekit.v1.connections.WebAuthConfiguration.TimeoutR\x07timeout\x12\x64\n\x18\x65nable_auto_registration\x18\x06 \x01(\x08\x42*\x92\x41\'2%Enable auto registration for WebAuthnR\x16\x65nableAutoRegistration\x12X\n\x13show_passkey_button\x18\x07 \x01(\x08\x42(\x92\x41%2#Show passkey button on login screenR\x11showPasskeyButton\x12g\n\x18\x65nable_conditional_login\x18\x08 \x01(\x08\x42-\x92\x41*2(Allow autofill of passkeys in login pageR\x16\x65nableConditionalLogin\x1aH\n\x02Rp\x12\x1c\n\x03ids\x18\x01 \x03(\tB\n\xbaH\x07\x92\x01\x04\x08\x01\x10\nR\x03ids\x12$\n\x07origins\x18\x02 \x03(\tB\n\xbaH\x07\x92\x01\x04\x08\x01\x10\nR\x07origins\x1a\xc1\x01\n\x0b\x41ttestation\x12p\n\x15\x63onveyance_preference\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1d\xbaH\x1ar\x18R\x04noneR\x08indirectR\x06\x64irectR\x14\x63onveyancePreference\x12@\n\x17\x65nterprise_approved_ids\x18\x02 \x03(\tB\x08\xbaH\x05\x92\x01\x02\x10\x32R\x15\x65nterpriseApprovedIds\x1a\xf0\x13\n\x0e\x41uthenticators\x12\xdb\x02\n\x0evalidate_entry\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x97\x02\x92\x41\x93\x02\x1a\x1a.google.protobuf.BoolValue2\xf4\x01requires that the provided metadata has an entry for the given authenticator to be considered valid. By default an AAGUID which has a zero value should fail validation if validate_entry_permit_zero_aaguid is not provided with the value of true.R\rvalidateEntry\x12\x8f\x02\n!validate_entry_permit_zero_aaguid\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xa8\x01\x92\x41\xa4\x01\x32\xa1\x01is an option that permits a zero\'d AAGUID from an attestation statement to automatically pass metadata validations. Generally helpful to use with validate_entry.R\x1dvalidateEntryPermitZeroAaguid\x12\xc6\x01\n\x10validate_anchors\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x7f\x92\x41|2zwhen set to true enables the validation of the attestation statement against the trust anchor from the metadata statement.R\x0fvalidateAnchors\x12\xbe\x01\n\x0fvalidate_status\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBy\x92\x41v2twhen set to true enables the validation of the attestation statements AAGUID against the desired and undesired listsR\x0evalidateStatus\x12\xe1\x01\n\x19validate_attestation_type\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x88\x01\x92\x41\x84\x01\x32\x81\x01when set to true enables the validation of the attestation statements type against the known types the authenticator can produce.R\x17validateAttestationType\x12\xbb\x04\n\x1c\x64\x65sired_authenticator_status\x18\x06 \x03(\tB\xf8\x03\x92\x41\x9d\x01\x32\x96\x01provides the list of statuses which are considered undesirable for status report validation purposes. Should be used with validate_status set to true.:\x02[]\xbaH\xd3\x02\x92\x01\xcf\x02\x10\n\"\xca\x02r\xc7\x02R\x12NOT_FIDO_CERTIFIEDR\x0e\x46IDO_CERTIFIEDR\x18USER_VERIFICATION_BYPASSR\x1a\x41TTESTATION_KEY_COMPROMISER\x1aUSER_KEY_REMOTE_COMPROMISER\x1cUSER_KEY_PHYSICAL_COMPROMISER\x10UPDATE_AVAILABLER\x07REVOKEDR\x18SELF_ASSERTION_SUBMITTEDR\x11\x46IDO_CERTIFIED_L1R\x15\x46IDO_CERTIFIED_L1plusR\x11\x46IDO_CERTIFIED_L2R\x15\x46IDO_CERTIFIED_L2plusR\x11\x46IDO_CERTIFIED_L3R\x15\x46IDO_CERTIFIED_L3plusR\x1a\x64\x65siredAuthenticatorStatus\x12\xc1\x05\n\x1eundesired_authenticator_status\x18\x07 \x03(\tB\xfa\x04\x92\x41\x9f\x02\x32\x96\x01provides the list of statuses which are considered undesirable for status report validation purposes. Should be used with validate_status set to true.:\x83\x01[\'ATTESTATION_KEY_COMPROMISE\', \'USER_VERIFICATION_BYPASS\', \'USER_KEY_REMOTE_COMPROMISE\', \'USER_KEY_PHYSICAL_COMPROMISE\', \'REVOKED\']\xbaH\xd3\x02\x92\x01\xcf\x02\x10\n\"\xca\x02r\xc7\x02R\x12NOT_FIDO_CERTIFIEDR\x0e\x46IDO_CERTIFIEDR\x18USER_VERIFICATION_BYPASSR\x1a\x41TTESTATION_KEY_COMPROMISER\x1aUSER_KEY_REMOTE_COMPROMISER\x1cUSER_KEY_PHYSICAL_COMPROMISER\x10UPDATE_AVAILABLER\x07REVOKEDR\x18SELF_ASSERTION_SUBMITTEDR\x11\x46IDO_CERTIFIED_L1R\x15\x46IDO_CERTIFIED_L1plusR\x11\x46IDO_CERTIFIED_L2R\x15\x46IDO_CERTIFIED_L2plusR\x11\x46IDO_CERTIFIED_L3R\x15\x46IDO_CERTIFIED_L3plusR\x1cundesiredAuthenticatorStatus\x1a\x86\x02\n\x16\x41uthenticatorSelection\x12r\n\x11user_verification\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\'\xbaH$r\"R\x08requiredR\tpreferredR\x0b\x64iscouragedR\x10userVerification\x12x\n\x18\x61uthenticator_attachment\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1f\xbaH\x1cr\x1aR\x08platformR\x0e\x63ross-platformR\x17\x61uthenticatorAttachment\x1a\xa3\x04\n\x07Timeout\x12x\n\x0cregistration\x18\x01 \x01(\x0b\x32\x19.google.protobuf.DurationB9\x92\x41\'2\x1dRegistration timeout duration:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x0cregistration\x12\xa5\x01\n\x10registration_uvd\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationB_\x92\x41M2CRegistration timeout duration when user verification is discouraged:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x0fregistrationUvd\x12\x63\n\x05login\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationB2\x92\x41 2\x16Login timeout duration:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x05login\x12\x90\x01\n\tlogin_uvd\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationBX\x92\x41\x46\x322\x0fSP Metadata URLJ+\"https://youridp.com/service/saml/metadata\"R\rspMetadataUrl\x12\x8a\x01\n\x10idp_metadata_url\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueBB\x92\x41?2\x10IDP Metadata URLJ+\"https://youridp.com/service/saml/metadata\"R\x0eidpMetadataUrl\x12x\n\ridp_entity_id\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB6\x92\x41\x33\x32\rIDP Entity IDJ\"\"https://youridp.com/service/saml\"R\x0bidpEntityId\x12v\n\x0bidp_sso_url\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValueB8\x92\x41\x35\x32\x0bIDP SSO URLJ&\"https://youridp.com/service/saml/sso\"R\tidpSsoUrl\x12i\n\x10idp_certificates\x18\x07 \x03(\x0b\x32\'.scalekit.v1.connections.IDPCertificateB\x15\x92\x41\x12\x32\x10IDP CertificatesR\x0fidpCertificates\x12v\n\x0bidp_slo_url\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB8\x92\x41\x35\x32\x0bIDP SLO URLJ&\"https://youridp.com/service/saml/slo\"R\tidpSloUrl\x12l\n\x0fui_button_title\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB&\x92\x41#2\x0fUI Button TitleJ\x10\"Login with SSO\"R\ruiButtonTitle\x12t\n\x12idp_name_id_format\x18\n \x01(\x0e\x32%.scalekit.v1.connections.NameIdFormatB \x92\x41\x1d\x32\x12IDP Name ID FormatJ\x07\"EMAIL\"R\x0fidpNameIdFormat\x12\x89\x01\n\x17idp_sso_request_binding\x18\x0b \x01(\x0e\x32\'.scalekit.v1.connections.RequestBindingB)\x92\x41&2\x17IDP SSO Request BindingJ\x0b\"HTTP_POST\"R\x14idpSsoRequestBinding\x12\x89\x01\n\x17idp_slo_request_binding\x18\x0c \x01(\x0e\x32\'.scalekit.v1.connections.RequestBindingB)\x92\x41&2\x17IDP SLO Request BindingJ\x0b\"HTTP_POST\"R\x14idpSloRequestBinding\x12\x93\x01\n\x13saml_signing_option\x18\r \x01(\x0e\x32+.scalekit.v1.connections.SAMLSigningOptionsB6\x92\x41\x33\x32\x13SAML Signing OptionJ\x1c\"SAML_ONLY_RESPONSE_SIGNING\"R\x11samlSigningOption\x12{\n\x19\x61llow_idp_initiated_login\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueB$\x92\x41!2\x19\x41llow IDP Initiated LoginJ\x04trueR\x16\x61llowIdpInitiatedLogin\x12S\n\x0b\x66orce_authn\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x16\x92\x41\x13\x32\x0b\x46orce AuthnJ\x04trueR\nforceAuthn\x12\x96\x01\n\x14\x64\x65\x66\x61ult_redirect_uri\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueBF\x92\x41\x43\x32\x14\x44\x65\x66\x61ult Redirect URIJ+\"https://yourapp.com/service/saml/redirect\"R\x12\x64\x65\x66\x61ultRedirectUri\x12k\n\x13\x61ssertion_encrypted\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1e\x92\x41\x1b\x32\x13\x41ssertion EncryptedJ\x04trueR\x12\x61ssertionEncrypted\x12j\n\x13want_request_signed\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1e\x92\x41\x1b\x32\x13Want Request SignedJ\x04trueR\x11wantRequestSigned\x12q\n\x0e\x63\x65rtificate_id\x18\x13 \x01(\x0b\x32\x1c.google.protobuf.StringValueB,\x92\x41)2\x0e\x43\x65rtificate IDJ\x17\"cer_35585423166144613\"R\rcertificateId\x12\x62\n\x10idp_slo_required\x18\x14 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1c\x92\x41\x19\x32\x11\x45nable IDP logoutJ\x04trueR\x0eidpSloRequired\x12\x96\x01\n\nsp_slo_url\x18\x15 \x01(\x0b\x32\x1c.google.protobuf.StringValueBZ\x92\x41T2\x18Service Provider SLO urlJ8\"https://yourapp.com/sso/v1/saml/conn_1234/slo/callback\"\xe0\x41\x03R\x08spSloUrl\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x16 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\x12\xba\x01\n!jit_provisioning_with_sso_enabled\x18\x17 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBT\x92\x41Q2IIndicates if Just In Time user provisioning is enabled for the connectionJ\x04trueR\x1djitProvisioningWithSsoEnabled\"\xbf\x03\n\x0eIDPCertificate\x12\x36\n\x0b\x63\x65rtificate\x18\x01 \x01(\tB\x14\x92\x41\x11\x32\x0fIDP CertificateR\x0b\x63\x65rtificate\x12s\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB6\x92\x41\x33\x32\x19\x43\x65rtificate Creation TimeJ\x16\"2021-09-01T00:00:00Z\"R\ncreateTime\x12q\n\x0b\x65xpiry_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB4\x92\x41\x31\x32\x17\x43\x65rtificate Expiry TimeJ\x16\"2021-09-01T00:00:00Z\"R\nexpiryTime\x12\x38\n\x02id\x18\x04 \x01(\tB(\x92\x41%2\x0e\x43\x65rtificate IDJ\x13\"cert_123123123123\"R\x02id\x12S\n\x06issuer\x18\x05 \x01(\tB;\x92\x41\x38\x32\x12\x43\x65rtificate IssuerJ\"\"https://youridp.com/service/saml\"R\x06issuer\"b\n\x16GetOIDCMetadataRequest\x12H\n\x08metadata\x18\x01 \x01(\x0b\x32,.scalekit.v1.connections.OIDCMetadataRequestR\x08metadata\"9\n\x13OIDCMetadataRequest\x12\"\n\x06issuer\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x06issuer\"\xd7\x01\n\x17GetOIDCMetadataResponse\x12\x16\n\x06issuer\x18\x01 \x01(\tR\x06issuer\x12\x35\n\x16\x61uthorization_endpoint\x18\x02 \x01(\tR\x15\x61uthorizationEndpoint\x12%\n\x0etoken_endpoint\x18\x03 \x01(\tR\rtokenEndpoint\x12+\n\x11userinfo_endpoint\x18\x04 \x01(\tR\x10userinfoEndpoint\x12\x19\n\x08jwks_uri\x18\x05 \x01(\tR\x07jwksUri\"b\n\x16GetSAMLMetadataRequest\x12H\n\x08metadata\x18\x01 \x01(\x0b\x32,.scalekit.v1.connections.SAMLMetadataRequestR\x08metadata\"D\n\x13SAMLMetadataRequest\x12-\n\x0cmetadata_url\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0bmetadataUrl\"\xb4\x02\n\x17GetSAMLMetadataResponse\x12\"\n\ridp_entity_id\x18\x01 \x01(\tR\x0bidpEntityId\x12\x1e\n\x0bidp_sso_url\x18\x02 \x01(\tR\tidpSsoUrl\x12\x1e\n\x0bidp_slo_url\x18\x03 \x01(\tR\tidpSloUrl\x12)\n\x10idp_certificates\x18\x04 \x03(\tR\x0fidpCertificates\x12+\n\x12idp_name_id_format\x18\x05 \x01(\tR\x0fidpNameIdFormat\x12\'\n\x0frequest_binding\x18\x06 \x01(\tR\x0erequestBinding\x12\x34\n\x16want_assertions_signed\x18\x07 \x01(\x08R\x14wantAssertionsSigned\"u\n GetSAMLCertificateDetailsRequest\x12Q\n\x0b\x63\x65rtificate\x18\x01 \x01(\x0b\x32/.scalekit.v1.connections.SAMLCertificateRequestR\x0b\x63\x65rtificate\"5\n\x16SAMLCertificateRequest\x12\x1b\n\x04text\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04text\"\xa5\x01\n!GetSAMLCertificateDetailsResponse\x12\x12\n\x04text\x18\x01 \x01(\tR\x04text\x12\x1b\n\tnot_after\x18\x02 \x01(\x03R\x08notAfter\x12\x1d\n\nnot_before\x18\x03 \x01(\x03R\tnotBefore\x12\x18\n\x07subject\x18\x04 \x01(\tR\x07subject\x12\x16\n\x06issuer\x18\x05 \x01(\tR\x06issuer\"\x86\x01\n\x1eGetConnectionTestResultRequest\x12,\n\rconnection_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0c\x63onnectionId\x12\x36\n\x0ftest_request_id\x18\x02 \x01(\tB\x0e\xbaH\x0br\t\x10\x01:\x05test_R\rtestRequestId\"\xbd\x02\n\x1fGetConnectionTestResultResponse\x12\x41\n\x06status\x18\x01 \x01(\x0e\x32).scalekit.v1.connections.TestResultStatusR\x06status\x12 \n\tuser_info\x18\x02 \x01(\tH\x00R\x08userInfo\x88\x01\x01\x12\x19\n\x05\x65rror\x18\x03 \x01(\tH\x01R\x05\x65rror\x88\x01\x01\x12\x30\n\x11\x65rror_description\x18\x04 \x01(\tH\x02R\x10\x65rrorDescription\x88\x01\x01\x12(\n\rerror_details\x18\x05 \x01(\tH\x03R\x0c\x65rrorDetails\x88\x01\x01\x42\x0c\n\n_user_infoB\x08\n\x06_errorB\x14\n\x12_error_descriptionB\x10\n\x0e_error_details\"\x1a\n\x18PasswordConnectionConfig\"9\n\x05\x46lags\x12\x19\n\x08is_login\x18\x01 \x01(\x08R\x07isLogin\x12\x15\n\x06is_app\x18\x02 \x01(\x08R\x05isApp\"\xaa\x03\n\x19ListAppConnectionsRequest\x12\x80\x01\n\tpage_size\x18\x01 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x02 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\x12U\n\x08provider\x18\x03 \x01(\tB4\x92\x41(2\x1e\x46ilter connections by providerJ\x06\"OKTA\"\xbaH\x06r\x04\x10\x01\x18\x32H\x00R\x08provider\x88\x01\x01\x42\x0b\n\t_provider\"\xea\x03\n\x1aListAppConnectionsResponse\x12\x81\x01\n\x0b\x63onnections\x18\x01 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB6\x92\x41\x33\x32\x31List of connections matching the request criteriaR\x0b\x63onnections\x12o\n\x0fnext_page_token\x18\x02 \x01(\tBG\x92\x41\x44\x32\"Token for the next page of resultsJ\x1e\"eyJwYWdlIjoyLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12s\n\x0fprev_page_token\x18\x03 \x01(\tBK\x92\x41H2&Token for the previous page of resultsJ\x1e\"eyJwYWdlIjoyLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12\x62\n\ntotal_size\x18\x04 \x01(\rBC\x92\x41@29Total number of connections matching the request criteriaJ\x03\x31\x30\x30R\ttotalSize\"\x8b\x01\n\x1bGetConnectionContextRequest\x12\x38\n\rconnection_id\x18\x01 \x01(\tB\x13\xbaH\x10r\x0b\x10\x01\x18 :\x05\x63onn_\xc8\x01\x01R\x0c\x63onnectionId\x12\x32\n\x0forganization_id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\"Q\n\x1cGetConnectionContextResponse\x12\x31\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext\"\xc1\x01\n\x1eUpdateConnectionContextRequest\x12\x38\n\rconnection_id\x18\x01 \x01(\tB\x13\xbaH\x10r\x0b\x10\x01\x18 :\x05\x63onn_\xc8\x01\x01R\x0c\x63onnectionId\x12\x32\n\x0forganization_id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x31\n\x07\x63ontext\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext*W\n\x11\x43odeChallengeType\x12#\n\x1f\x43ODE_CHALLENGE_TYPE_UNSPECIFIED\x10\x00\x12\x0b\n\x07NUMERIC\x10\x01\x12\x10\n\x0c\x41LPHANUMERIC\x10\x02*R\n\x11\x43onfigurationType\x12\"\n\x1e\x43ONFIGURATION_TYPE_UNSPECIFIED\x10\x00\x12\r\n\tDISCOVERY\x10\x01\x12\n\n\x06MANUAL\x10\x02*a\n\x0cNameIdFormat\x12\x16\n\x12NAME_ID_FORMAT_NIL\x10\x00\x12\x0f\n\x0bUNSPECIFIED\x10\x01\x12\t\n\x05\x45MAIL\x10\x02\x12\r\n\tTRANSIENT\x10\x03\x12\x0e\n\nPERSISTENT\x10\x04*U\n\x10PasswordlessType\x12 \n\x1cPasswordlessType_UNSPECIFIED\x10\x00\x12\x08\n\x04LINK\x10\x01\x12\x07\n\x03OTP\x10\x02\x12\x0c\n\x08LINK_OTP\x10\x03*9\n\x10TestResultStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0b\n\x07SUCCESS\x10\x01\x12\x0b\n\x07\x46\x41ILURE\x10\x02*\xd8\x01\n\x12SAMLSigningOptions\x12$\n SAML_SIGNING_OPTIONS_UNSPECIFIED\x10\x00\x12\x0e\n\nNO_SIGNING\x10\x01\x12\x1e\n\x1aSAML_ONLY_RESPONSE_SIGNING\x10\x02\x12\x1f\n\x1bSAML_ONLY_ASSERTION_SIGNING\x10\x03\x12#\n\x1fSAML_RESPONSE_ASSERTION_SIGNING\x10\x04\x12&\n\"SAML_RESPONSE_OR_ASSERTION_SIGNING\x10\x05*S\n\x0eRequestBinding\x12\x1f\n\x1bREQUEST_BINDING_UNSPECIFIED\x10\x00\x12\r\n\tHTTP_POST\x10\x01\x12\x11\n\rHTTP_REDIRECT\x10\x02*P\n\rTokenAuthType\x12\x1f\n\x1bTOKEN_AUTH_TYPE_UNSPECIFIED\x10\x00\x12\x0e\n\nURL_PARAMS\x10\x01\x12\x0e\n\nBASIC_AUTH\x10\x02*c\n\tOIDCScope\x12\x1a\n\x16OIDC_SCOPE_UNSPECIFIED\x10\x00\x12\n\n\x06openid\x10\x01\x12\x0b\n\x07profile\x10\x02\x12\t\n\x05\x65mail\x10\x03\x12\x0b\n\x07\x61\x64\x64ress\x10\x04\x12\t\n\x05phone\x10\x05*\xc0\x01\n\x0e\x43onnectionType\x12\x0b\n\x07INVALID\x10\x00\x12\x08\n\x04OIDC\x10\x01\x12\x08\n\x04SAML\x10\x02\x12\x0c\n\x08PASSWORD\x10\x03\x12\t\n\x05OAUTH\x10\x04\x12\x10\n\x0cPASSWORDLESS\x10\x05\x12\t\n\x05\x42\x41SIC\x10\x06\x12\n\n\x06\x42\x45\x41RER\x10\x07\x12\x0b\n\x07\x41PI_KEY\x10\x08\x12\x0c\n\x08WEBAUTHN\x10\t\x12\r\n\tOAUTH_M2M\x10\n\x12\x11\n\rTRELLO_OAUTH1\x10\x0b\x12\x0e\n\nGOOGLE_DWD\x10\x0c*`\n\x10\x43onnectionStatus\x12!\n\x1d\x43ONNECTION_STATUS_UNSPECIFIED\x10\x00\x12\t\n\x05\x44RAFT\x10\x01\x12\x0f\n\x0bIN_PROGRESS\x10\x02\x12\r\n\tCOMPLETED\x10\x03*\x98\x02\n\x12\x43onnectionProvider\x12#\n\x1f\x43ONNECTION_PROVIDER_UNSPECIFIED\x10\x00\x12\x08\n\x04OKTA\x10\x01\x12\n\n\x06GOOGLE\x10\x02\x12\x10\n\x0cMICROSOFT_AD\x10\x03\x12\t\n\x05\x41UTH0\x10\x04\x12\x0c\n\x08ONELOGIN\x10\x05\x12\x11\n\rPING_IDENTITY\x10\x06\x12\r\n\tJUMPCLOUD\x10\x07\x12\n\n\x06\x43USTOM\x10\x08\x12\n\n\x06GITHUB\x10\t\x12\n\n\x06GITLAB\x10\n\x12\x0c\n\x08LINKEDIN\x10\x0b\x12\x0e\n\nSALESFORCE\x10\x0c\x12\r\n\tMICROSOFT\x10\r\x12\x11\n\rIDP_SIMULATOR\x10\x0e\x12\x0c\n\x08SCALEKIT\x10\x0f\x12\x08\n\x04\x41\x44\x46S\x10\x10\x32\x92G\n\x11\x43onnectionService\x12\x91\x03\n\x1b\x43reateEnvironmentConnection\x12;.scalekit.v1.connections.CreateEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\"\x81\x02\x92\x41\xc1\x01\n\x0b\x43onnections\x12\x17\x43reate a new connection\x1a\x38\x45stablish a new connection for the specified environmentJ_\n\x03\x32\x30\x31\x12X\n\x1f\x43onnection created successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\"\x13/api/v1/connections:\nconnection\x12\xb3\x03\n\x10\x43reateConnection\x12\x30.scalekit.v1.connections.CreateConnectionRequest\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\"\xb9\x02\x92\x41\xc6\x01\n\x0b\x43onnections\x12\x17\x43reate a new connection\x1a=Establish a new SSO connection for the specified organizationJ_\n\x03\x32\x30\x31\x12X\n\x1f\x43onnection created successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x41\"3/api/v1/organizations/{organization_id}/connections:\nconnection\x12\xcd\x04\n\x19\x41ssignDomainsToConnection\x12\x39.scalekit.v1.connections.AssignDomainsToConnectionRequest\x1a:.scalekit.v1.connections.AssignDomainsToConnectionResponse\"\xb8\x03\x92\x41\xb6\x02\n\x0b\x43onnections\x12\x1e\x41ssign domains to a connection\x1a\x9e\x01\x41ssigns one or more domains to a specific connection within an organization. This allows the connection to be used for authentication on the specified domainsJf\n\x03\x32\x30\x30\x12_\n\x1d\x44omains assigned successfully\x12>\n<\x1a:.scalekit.v1.connections.AssignDomainsToConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02P\x1aK/api/v1/organizations/{organization_id}/connections/{connection_id}/domains:\x01*\x12\xb3\x03\n\x18GetEnvironmentConnection\x12\x38.scalekit.v1.connections.GetEnvironmentConnectionRequest\x1a..scalekit.v1.connections.GetConnectionResponse\"\xac\x02\x92\x41\xe7\x01\n\x0b\x43onnections\x12\x1bRetrieve connection details\x1aSObtain detailed information about a specific connection using its unique identifierJf\n\x03\x32\x30\x30\x12_\n)Successfully retrieved connection details\x12\x32\n0\x1a..scalekit.v1.connections.GetConnectionResponse\x82\xb5\x18\x03\x18\xc4\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\x12#/api/v1/connections/{connection_id}\x12\xcf\x04\n\rGetConnection\x12-.scalekit.v1.connections.GetConnectionRequest\x1a..scalekit.v1.connections.GetConnectionResponse\"\xde\x03\x92\x41\x81\x03\n\x0b\x43onnections\x12\x16Get connection details\x1a\xd1\x01Retrieves the complete configuration and status details for a specific connection by its ID within an organization. Returns all connection properties including provider settings, protocols, and current status.J\x85\x01\n\x03\x32\x30\x30\x12~\nHSuccessfully retrieved connection details for the specified organization\x12\x32\n0\x1a..scalekit.v1.connections.GetConnectionResponse\x82\xb5\x18\x15\n\x10\x63onnections_read\x18\xf4\x01\x82\xd3\xe4\x93\x02:\x12\x38/api/v1/organizations/{organization_id}/connections/{id}\x12\xe4\x02\n\x0fListConnections\x12/.scalekit.v1.connections.ListConnectionsRequest\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\"\xed\x01\x92\x41\xb6\x01\n\x0b\x43onnections\x12\x10List connections\x1a\x32Retrieves a list of connections in the environmentJa\n\x03\x32\x30\x30\x12Z\n\"Successfully retrieved connections\x12\x34\n2\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\x82\xb5\x18\x14\n\x10\x63onnections_read\x18t\x82\xd3\xe4\x93\x02\x15\x12\x13/api/v1/connections\x12\xb5\x03\n\x1bListOrganizationConnections\x12;.scalekit.v1.connections.ListOrganizationConnectionsRequest\x1a<.scalekit.v1.connections.ListOrganizationConnectionsResponse\"\x9a\x02\x92\x41\xd6\x01\n\x0b\x43onnections\x12\x1dList organization connections\x1a\x39Retrieves a list of connections for all the organizationsJm\n\x03\x32\x30\x30\x12\x66\n\"Successfully retrieved connections\x12@\n>\x1a<.scalekit.v1.connections.ListOrganizationConnectionsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\x12#/api/v1/organizations/-/connections\x12\xcd\x03\n\x1dSearchOrganizationConnections\x12=.scalekit.v1.connections.SearchOrganizationConnectionsRequest\x1a>.scalekit.v1.connections.SearchOrganizationConnectionsResponse\"\xac\x02\x92\x41\xe1\x01\n\x0b\x43onnections\x12\x1fSearch organization connections\x1a\x44Search with query or filters provided and return list of connectionsJk\n\x03\x32\x30\x30\x12\x64\n\x1eSuccessfully found connections\x12\x42\n@\x1a>.scalekit.v1.connections.SearchOrganizationConnectionsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02,\x12*/api/v1/organizations/-/connections:search\x12\xf1\x02\n\x1bUpdateEnvironmentConnection\x12;.scalekit.v1.connections.UpdateEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\"\xe1\x01\x92\x41\x91\x01\n\x0b\x43onnections\x12\x13Update a connection\x1a\x17Update a SSO ConnectionJT\n\x03\x32\x30\x30\x12M\n\x14Updated Successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\x32#/api/v1/connections/{connection_id}:\nconnection\x12\x94\x03\n\x10UpdateConnection\x12\x30.scalekit.v1.connections.UpdateConnectionRequest\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\"\x9a\x02\x92\x41\xa2\x01\n\x0b\x43onnections\x12$Update a connection for organization\x1a\x17Update a SSO ConnectionJT\n\x03\x32\x30\x30\x12M\n\x14Updated Successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x46\x32\x38/api/v1/organizations/{organization_id}/connections/{id}:\nconnection\x12\x92\x02\n\x1b\x44\x65leteEnvironmentConnection\x12;.scalekit.v1.connections.DeleteEnvironmentConnectionRequest\x1a\x16.google.protobuf.Empty\"\x9d\x01\x92\x41Z\n\x0b\x43onnections\x12\x13\x44\x65lete a connection\x1a\x17\x44\x65lete a SSO ConnectionJ\x1d\n\x03\x32\x30\x30\x12\x16\n\x14\x44\x65leted Successfully\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%*#/api/v1/connections/{connection_id}\x12\xf7\x03\n\x10\x44\x65leteConnection\x12\x30.scalekit.v1.connections.DeleteConnectionRequest\x1a\x16.google.protobuf.Empty\"\x98\x03\x92\x41\xce\x02\n\x0b\x43onnections\x12\x15\x44\x65lete SSO connection\x1a\xf9\x01\x44\x65letes an SSO connection from the specified organization by connection ID. Use this endpoint when an identity provider integration is no longer needed for the organization. Returns an empty response after the SSO connection is deleted successfully.J,\n\x03\x32\x30\x30\x12%\n#SSO connection deleted successfully\x82\xb5\x18\x02\x18\x64\x82\xd3\xe4\x93\x02:*8/api/v1/organizations/{organization_id}/connections/{id}\x12\xdf\x02\n\x1b\x45nableEnvironmentConnection\x12;.scalekit.v1.connections.ToggleEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xcf\x01\x92\x41\x84\x01\n\x0b\x43onnections\x12\x13\x45nable a connection\x1a\x17\x45nable a SSO ConnectionJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02,2*/api/v1/connections/{connection_id}:enable\x12\xd4\x04\n\x10\x45nableConnection\x12\x30.scalekit.v1.connections.ToggleConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xda\x03\x92\x41\xf6\x02\n\x0b\x43onnections\x12\x15\x45nable SSO connection\x1a\xee\x01\x41\x63tivate an existing connection for the specified organization. When enabled, users can authenticate using this connection. This endpoint changes the connection state from disabled to enabled without modifying other configuration settingsJ_\n\x03\x32\x30\x30\x12X\n\x1f\x43onnection enabled successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\x82\xd3\xe4\x93\x02\x41\x32?/api/v1/organizations/{organization_id}/connections/{id}:enable\x12\xe3\x02\n\x1c\x44isableEnvironmentConnection\x12;.scalekit.v1.connections.ToggleEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xd2\x01\x92\x41\x86\x01\n\x0b\x43onnections\x12\x14\x44isable a connection\x1a\x18\x44isable a SSO ConnectionJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02-2+/api/v1/connections/{connection_id}:disable\x12\xde\x04\n\x11\x44isableConnection\x12\x30.scalekit.v1.connections.ToggleConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xe3\x03\x92\x41\xfe\x02\n\x0b\x43onnections\x12\x16\x44isable SSO connection\x1a\xf4\x01\x44\x65\x61\x63tivate an existing connection for the specified organization. When disabled, users cannot authenticate using this connection. This endpoint changes the connection state from enabled to disabled without modifying other configuration settingsJ`\n\x03\x32\x30\x30\x12Y\n Connection disabled successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\x82\xd3\xe4\x93\x02\x42\x32@/api/v1/organizations/{organization_id}/connections/{id}:disable\x12\x80\x03\n\x17GetConnectionTestResult\x12\x37.scalekit.v1.connections.GetConnectionTestResultRequest\x1a\x38.scalekit.v1.connections.GetConnectionTestResultResponse\"\xf1\x01\x92\x41\x8d\x01\n\x0b\x43onnections\x12\x16Test connection result\x1a\x16\x43onnection test resultJN\n\x03\x32\x30\x30\x12G\n\x07Success\x12<\n:\x1a\x38.scalekit.v1.connections.GetConnectionTestResultResponse\x82\xb5\x18\x02\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x45\x12\x43/api/v1/connections/{connection_id}/test-requests/{test_request_id}\x12\xf6\x02\n\x12ListAppConnections\x12\x32.scalekit.v1.connections.ListAppConnectionsRequest\x1a\x33.scalekit.v1.connections.ListAppConnectionsResponse\"\xf6\x01\x92\x41\xbe\x01\n\x0b\x43onnections\x12\x14List App connections\x1a\x36Retrieves a list of app connections in the environmentJa\n\x03\x32\x30\x30\x12Z\n\"Successfully retrieved connections\x12\x34\n2\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\x12\x17/api/v1/connections/app\x12\xd1\x03\n\x14GetConnectionContext\x12\x34.scalekit.v1.connections.GetConnectionContextRequest\x1a\x35.scalekit.v1.connections.GetConnectionContextResponse\"\xcb\x02\x92\x41\xad\x01\n\x0b\x43onnections\x12\x16Get connection context\x1athis.provider == 15 ? this.provider_key in [\'SCALEKIT\'] : true\x1aM\x12\x18invalid value for key_id\x1a\x31this.type == 9 ? this.key_id == \'WEBAUTHN\' : trueB\t\n\x07_key_id\"\xcb \n\nConnection\x12\x8d\x01\n\x02id\x18\x01 \x01(\tB}\x92\x41z2_Unique identifier for this connection. Used in API calls to reference this specific connection.J\x17\"conn_2123312131125533\"R\x02id\x12\xc2\x01\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderBy\x92\x41v2lIdentity provider service that handles authentication (such as OKTA, Google, Azure AD, or a custom provider)J\x06\"OKTA\"R\x08provider\x12\xb4\x01\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeBw\x92\x41t2jAuthentication protocol used by this connection. Can be OIDC (OpenID Connect), SAML, OAUTH, or MAGIC_LINK.J\x06\"OIDC\"R\x04type\x12\xc6\x01\n\x06status\x18\x04 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusB\x82\x01\x92\x41|2kCurrent configuration status of the connection. Possible values include IN_PROGRESS, CONFIGURED, and ERROR.J\r\"IN_PROGRESS\"\xe0\x41\x03R\x06status\x12\xab\x01\n\x07\x65nabled\x18\x05 \x01(\x08\x42\x90\x01\x92\x41\x8c\x01\x32\x82\x01\x43ontrols whether users can sign in using this connection. When false, the connection exists but cannot be used for authentication.J\x05\x66\x61lseR\x07\x65nabled\x12\xb0\x01\n\rdebug_enabled\x18\x06 \x01(\x08\x42\x8a\x01\x92\x41\x86\x01\x32~Enables testing mode that allows non-HTTPS endpoints. Should only be enabled in development environments, never in production.J\x04trueR\x0c\x64\x65\x62ugEnabled\x12\xc1\x01\n\x0forganization_id\x18\x07 \x01(\tB\x92\x01\x92\x41\x8e\x01\x32tIdentifier of the organization that owns this connection. Connections are typically scoped to a single organization.J\x16\"org_2123312131125533\"H\x01R\x0eorganizationId\x88\x01\x01\x12\xbd\x01\n\x0fui_button_title\x18\x08 \x01(\tB\x94\x01\x92\x41\x81\x01\x32mCustom text shown on the login button in the user interface. Helps users identify which SSO option to select.J\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12\xd5\x01\n\x12\x63onfiguration_type\x18\t \x01(\x0e\x32*.scalekit.v1.connections.ConfigurationTypeBz\x92\x41w2kHow the connection was configured: DISCOVERY (automatic configuration) or MANUAL (administrator configured)J\x08\"MANUAL\"R\x11\x63onfigurationType\x12\xdf\x01\n\x13test_connection_uri\x18\x0c \x01(\tB\xae\x01\x92\x41\xaa\x01\x32\x66URI that can be used to test this connection. Visit this URL to verify the connection works correctly.J@\"https://auth.example.com/test-connection/conn_2123312131125533\"R\x11testConnectionUri\x12\x81\x02\n\x11\x61ttribute_mapping\x18\x0f \x03(\x0b\x32\x39.scalekit.v1.connections.Connection.AttributeMappingEntryB\x98\x01\x92\x41|2zMaps identity provider attributes to user profile fields. For example, {\'email\': \'user.mail\', \'name\': \'user.displayName\'}.\xbaH\x16\x9a\x01\x13\x10\x1e\"\x06r\x04\x10\x01\x18\x64*\x07r\x05\x10\x01\x18\x80\x02R\x10\x61ttributeMapping\x12\xb1\x01\n\x0b\x63reate_time\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.TimestampBt\x92\x41_2EWhen this connection was first created. Format is RFC 3339 timestamp.J\x16\"2023-01-15T14:30:00Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ncreateTime\x12\xb1\x01\n\x0bupdate_time\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.TimestampBt\x92\x41_2EWhen this connection was last modified. Format is RFC 3339 timestamp.J\x16\"2023-02-20T09:15:30Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\nupdateTime\x12\xb3\x01\n\x0boidc_config\x18\x12 \x01(\x0b\x32-.scalekit.v1.connections.OIDCConnectionConfigBa\x92\x41^2\\Configuration details for OpenID Connect (OIDC) connections. Present only when type is OIDC.H\x00R\noidcConfig\x12\xaa\x01\n\x0bsaml_config\x18\x13 \x01(\x0b\x32\x35.scalekit.v1.connections.SAMLConnectionConfigResponseBP\x92\x41M2KConfiguration details for SAML connections. Present only when type is SAML.H\x00R\nsamlConfig\x12\xa7\x01\n\x0coauth_config\x18\x14 \x01(\x0b\x32..scalekit.v1.connections.OAuthConnectionConfigBR\x92\x41O2MConfiguration details for OAuth connections. Present only when type is OAUTH.H\x00R\x0boauthConfig\x12\xbf\x01\n\x13passwordless_config\x18\x16 \x01(\x0b\x32+.scalekit.v1.connections.PasswordLessConfigB_\x92\x41\\2ZConfiguration details for Magic Link authentication. Present only when type is MAGIC_LINK.H\x00R\x12passwordlessConfig\x12\xc0\x01\n\rstatic_config\x18\x1a \x01(\x0b\x32).scalekit.v1.connections.StaticAuthConfigBn\x92\x41k2iStatic configuration for custom connections. Present only when type is BASIC, BEARER, API_KEY, or custom.H\x00R\x0cstaticConfig\x12\xb1\x01\n\x0fwebauthn_config\x18\x1b \x01(\x0b\x32-.scalekit.v1.connections.WebAuthConfigurationBW\x92\x41T2RConfiguration details for WebAuthn (passkeys). Present only when type is WEBAUTHN.H\x00R\x0ewebauthnConfig\x12}\n\x06key_id\x18\x19 \x01(\tBa\x92\x41^2\\Alternative identifier for this connection, typically used in frontend applications or URLs.H\x02R\x05keyId\x88\x01\x01\x12u\n\x0cprovider_key\x18\x17 \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x12\xaa\x01\n\x07\x64omains\x18\x18 \x03(\x0b\x32\x1b.scalekit.v1.domains.DomainBs\x92\x41p2SDomain associated with this connection, used for domain-based authentication flows.J\x19[{\"name\": \"example.com\"}]R\x07\x64omains\x1a\x43\n\x15\x41ttributeMappingEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\n\n\x08settingsB\x12\n\x10_organization_idB\t\n\x07_key_idJ\x04\x08\r\x10\x0f\"w\n\x18\x43reateConnectionResponse\x12[\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\x16\x92\x41\x13\x32\x11\x43onnection DetailR\nconnection\"\xa8\x02\n\"UpdateEnvironmentConnectionRequest\x12~\n\rconnection_id\x18\x01 \x01(\tBY\x92\x41M2+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xca>\x05\xfa\x02\x02id\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\x12\x81\x01\n\nconnection\x18\x03 \x01(\x0b\x32).scalekit.v1.connections.UpdateConnectionB6\x92\x41-2#Connection properties to be updated\xca>\x05\xfa\x02\x02id\xbaH\x03\xc8\x01\x01R\nconnection\"\xce\x03\n\x17UpdateConnectionRequest\x12q\n\x0forganization_id\x18\x01 \x01(\tBH\x92\x41<2#Organization ID for the Connection.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\x61\n\x02id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02id\x12\xd6\x01\n\nconnection\x18\x04 \x01(\x0b\x32).scalekit.v1.connections.UpdateConnectionB\x8a\x01\x92\x41-2#Connection properties to be updated\xca>\x05\xfa\x02\x02id\xbaHW\xba\x01Q\x12\x36OAUTH, PASSWORDLESS and WEBAUTHN are not supported yet\x1a\x17!(this.type in [4,5,9])\xc8\x01\x01R\nconnectionJ\x04\x08\x02\x10\x03\"\xcb\x11\n\x10UpdateConnection\x12w\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderB.\x92\x41#2\x17SSO Connection ProviderJ\x08\"CUSTOM\"\xbaH\x05\x82\x01\x02\x10\x01R\x08provider\x12r\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB5\x92\x41*2 Connection Protocol OIDC / SAML J\x06\"OIDC\"\xbaH\x05\x82\x01\x02\x10\x01R\x04type\x12\xae\x01\n\rdebug_enabled\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBm\x92\x41j2bDebug mode for the connection. Debug would allow non HTTPS endpoint to be used with the connectionJ\x04trueR\x0c\x64\x65\x62ugEnabled\x12\x8d\x01\n\x0fui_button_title\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueBG\x92\x41\x35\x32!Display name for the Login ButtonJ\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12~\n\x12\x63onfiguration_type\x18\x0b \x01(\x0e\x32*.scalekit.v1.connections.ConfigurationTypeB#\x92\x41 2\x14\x43onfiguration Type. J\x08\"MANUAL\"R\x11\x63onfigurationType\x12\x9d\x01\n\x11\x61ttribute_mapping\x18\x0f \x03(\x0b\x32?.scalekit.v1.connections.UpdateConnection.AttributeMappingEntryB/\x92\x41\x13\x32\x11\x41ttribute Mapping\xbaH\x16\x9a\x01\x13\x10\x1e\"\x06r\x04\x10\x01\x18\x64*\x07r\x05\x10\x01\x18\x80\x02R\x10\x61ttributeMapping\x12\x83\x01\n\x0boidc_config\x18\x10 \x01(\x0b\x32-.scalekit.v1.connections.OIDCConnectionConfigB1\x92\x41.2,OIDC Configuration if ConnectionType == OIDCH\x00R\noidcConfig\x12\x8a\x01\n\x0bsaml_config\x18\x11 \x01(\x0b\x32\x34.scalekit.v1.connections.SAMLConnectionConfigRequestB1\x92\x41.2,SAML Configuration if ConnectionType == SAMLH\x00R\nsamlConfig\x12\x88\x01\n\x0coauth_config\x18\x12 \x01(\x0b\x32..scalekit.v1.connections.OAuthConnectionConfigB3\x92\x41\x30\x32.OAuth Configuration if ConnectionType == OAUTHH\x00R\x0boauthConfig\x12\x9d\x01\n\x13passwordless_config\x18\x14 \x01(\x0b\x32+.scalekit.v1.connections.PasswordLessConfigB=\x92\x41:28Magic Link Configuration if ConnectionType == MAGIC_LINKH\x00R\x12passwordlessConfig\x12P\n\rstatic_config\x18\x17 \x01(\x0b\x32).scalekit.v1.connections.StaticAuthConfigH\x00R\x0cstaticConfig\x12\xb1\x01\n\x0fwebauthn_config\x18\x18 \x01(\x0b\x32-.scalekit.v1.connections.WebAuthConfigurationBW\x92\x41T2RConfiguration details for WebAuthn (passkeys). Present only when type is WEBAUTHN.H\x00R\x0ewebauthnConfig\x12&\n\x06key_id\x18\x16 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xac\x02H\x01R\x05keyId\x88\x01\x01\x12u\n\x0cprovider_key\x18\x15 \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x1a\x43\n\x15\x41ttributeMappingEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01:\x8b\x02\xbaH\x87\x02\x1aT\x12$provider or provider_key is required\x1a,has(this.provider_key) || this.provider != 0\x1a`\x12\x1einvalid value for provider_key\x1a>this.provider == 15 ? this.provider_key in [\'SCALEKIT\'] : true\x1aM\x12\x18invalid value for key_id\x1a\x31this.type == 9 ? this.key_id == \'WEBAUTHN\' : trueB\n\n\x08settingsB\t\n\x07_key_idJ\x04\x08\x01\x10\x02J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06J\x04\x08\t\x10\x0bJ\x04\x08\x0c\x10\x0f\"\x80\x01\n\x18UpdateConnectionResponse\x12\x64\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\x1f\x92\x41\x1c\x32\x1aUpdated Connection detailsR\nconnection\"\x9c\x01\n\"DeleteEnvironmentConnectionRequest\x12v\n\rconnection_id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\xf5\x01\n\x17\x44\x65leteConnectionRequest\x12q\n\x0forganization_id\x18\x01 \x01(\tBH\x92\x41<2#Organization ID for the Connection.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\x61\n\x02id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\x92\x01\n\x1fGetEnvironmentConnectionRequest\x12o\n\rconnection_id\x18\x01 \x01(\tBJ\x92\x41>2$Unique identifier for the ConnectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\xfc\x02\n\x14GetConnectionRequest\x12\xba\x01\n\x0forganization_id\x18\x01 \x01(\tB\x90\x01\x92\x41\x83\x01\x32jOrganization identifier (required). Specifies which organization owns the connection you want to retrieve.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\xa0\x01\n\x02id\x18\x03 \x01(\tB\x8f\x01\x92\x41\x82\x01\x32hConnection identifier (required). Specifies which specific connection to retrieve from the organization.J\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\x9a\x02\n\x15GetConnectionResponse\x12\x80\x02\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\xba\x01\x92\x41\xb6\x01\x32\xb3\x01\x43omplete connection details including provider configuration, protocol settings, status, and all metadata. Contains everything needed to understand the connection\'s current state.R\nconnection\"\x96\x04\n\x16ListConnectionsRequest\x12\x80\x01\n\x0forganization_id\x18\x01 \x01(\tBR\x92\x41\x46\x32-Filter connections by organization identifierJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12\x7f\n\x06\x64omain\x18\x03 \x01(\tBb\x92\x41V2CFilter connections by email domain associated with the organizationJ\x0f\"hero-saas.app\"\xbaH\x06r\x04\x10\x01\x18 H\x01R\x06\x64omain\x88\x01\x01\x12\xc6\x01\n\x07include\x18\x04 \x01(\tB\xa6\x01\x92\x41\xa2\x01\x32\x9f\x01\x46ilter connections by status. Use \'all\' to include all connections regardless of status. Default behavior shows only active (completed and enabled) connectionsH\x02R\x07include\x88\x01\x01\x42\x12\n\x10_organization_idB\t\n\x07_domainB\n\n\x08_includeJ\x04\x08\x02\x10\x03\"\x9d\x01\n\x17ListConnectionsResponse\x12\x81\x01\n\x0b\x63onnections\x18\x01 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB6\x92\x41\x33\x32\x31List of connections matching the request criteriaR\x0b\x63onnections\"\xfa\x0b\n\x0eListConnection\x12Q\n\x02id\x18\x01 \x01(\tBA\x92\x41>2#Unique identifier of the connectionJ\x17\"conn_2123312131125533\"R\x02id\x12\x8d\x01\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderBD\x92\x41\x41\x32\x35Identity provider type (e.g., OKTA, Google, Azure AD)J\x08\"CUSTOM\"R\x08provider\x12x\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB;\x92\x41\x38\x32.Authentication protocol used by the connectionJ\x06\"OIDC\"R\x04type\x12\x88\x01\n\x06status\x18\x04 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusBE\x92\x41?2.Current configuration status of the connectionJ\r\"IN_PROGRESS\"\xe0\x41\x03R\x06status\x12g\n\x07\x65nabled\x18\x05 \x01(\x08\x42M\x92\x41J2AWhether the connection is currently active for organization usersJ\x05\x66\x61lseR\x07\x65nabled\x12\x85\x01\n\x0forganization_id\x18\x06 \x01(\tB\\\x92\x41Y2?Unique identifier of the organization that owns this connectionJ\x16\"org_2123312131125533\"R\x0eorganizationId\x12\x88\x01\n\x0fui_button_title\x18\x07 \x01(\tB`\x92\x41N2:Text displayed on the SSO login button for this connectionJ\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12t\n\x07\x64omains\x18\x08 \x03(\tBZ\x92\x41W2/List of domains configured with this connectionJ$[\"yourapp.com\", \"yourworkspace.com\"]R\x07\x64omains\x12q\n\x11organization_name\x18\t \x01(\tBD\x92\x41\x41\x32*Name of the organization of the connectionJ\x13\"Your Organization\"R\x10organizationName\x12u\n\x0cprovider_key\x18\n \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x12\x90\x01\n\x06key_id\x18\x0b \x01(\tBy\x92\x41v2[Alternative identifier for this connection, typically used in frontend applications or URLsJ\x17\"conn_2123312131125533\"R\x05keyId\x12\x90\x01\n\ncreated_at\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.TimestampBU\x92\x41@2&When this connection was first createdJ\x16\"2023-01-15T14:30:00Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\tcreatedAt\"\xcf\x02\n\"ListOrganizationConnectionsRequest\x12\x80\x01\n\tpage_size\x18\x01 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x02 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\x97\x02\n#ListOrganizationConnectionsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12&\n\x0fprev_page_token\x18\x03 \x01(\tR\rprevPageToken\x12\x80\x01\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB5\x92\x41\x32\x32\x30List of connections matching the filter criteriaR\x0b\x63onnections\"\xa2\x07\n$SearchOrganizationConnectionsRequest\x12l\n\x05query\x18\x01 \x01(\tBQ\x92\x41G2-Search query Connection ID or Organization IDJ\x16\"conn_121312434123312\"\xbaH\x04r\x02\x18\x64H\x00R\x05query\x88\x01\x01\x12@\n\x08provider\x18\x02 \x01(\tB\x1f\x92\x41\x1c\x32\x12\x46ilter by providerJ\x06\"OKTA\"H\x01R\x08provider\x88\x01\x01\x12}\n\x06status\x18\x03 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusB5\x92\x41*2\x1b\x46ilter by connection statusJ\x0b\"COMPLETED\"\xbaH\x05\x82\x01\x02\x10\x01H\x02R\x06status\x88\x01\x01\x12\x8c\x01\n\x0f\x63onnection_type\x18\x04 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB5\x92\x41*2\x1b\x46ilter by connection statusJ\x0b\"COMPLETED\"\xbaH\x05\x82\x01\x02\x10\x01H\x03R\x0e\x63onnectionType\x88\x01\x01\x12O\n\x07\x65nabled\x18\x07 \x01(\x08\x42\x30\x92\x41-2#Filter by connection enabled statusJ\x06\"true\"H\x04R\x07\x65nabled\x88\x01\x01\x12\x80\x01\n\tpage_size\x18\x05 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x06 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageTokenB\x08\n\x06_queryB\x0b\n\t_providerB\t\n\x07_statusB\x12\n\x10_connection_typeB\n\n\x08_enabled\"\x99\x02\n%SearchOrganizationConnectionsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12&\n\x0fprev_page_token\x18\x03 \x01(\tR\rprevPageToken\x12\x80\x01\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB5\x92\x41\x32\x32\x30List of connections matching the filter criteriaR\x0b\x63onnections\"\x9c\x01\n\"ToggleEnvironmentConnectionRequest\x12v\n\rconnection_id\x18\x02 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\x9e\x02\n\x17ToggleConnectionRequest\x12\x92\x01\n\x0forganization_id\x18\x01 \x01(\tBi\x92\x41]2DUnique identifier of the organization associated with the connectionJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12h\n\x02id\x18\x03 \x01(\tBX\x92\x41L22Unique identifier for the connection to be toggledJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\xbc\x02\n\x18ToggleConnectionResponse\x12\xa9\x01\n\x07\x65nabled\x18\x01 \x01(\x08\x42\x8e\x01\x92\x41\x8a\x01\x32\x81\x01\x43urrent state of the connection after the operation. True means the connection is now enabled and can be used for authentication.J\x04trueR\x07\x65nabled\x12\x62\n\rerror_message\x18\x02 \x01(\tB8\x92\x41\x35\x32$Error message if the operation failsJ\r\"placeholder\"H\x00R\x0c\x65rrorMessage\x88\x01\x01\x42\x10\n\x0e_error_message\"\xa0\x12\n\x14OIDCConnectionConfig\x12j\n\x06issuer\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB4\x92\x41\x31\x32\nIssuer URLJ#\"https://youridp.com/service/oauth\"R\x06issuer\x12\xaa\x01\n\x12\x64iscovery_endpoint\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB]\x92\x41Z2\x12\x44iscovery EndpointJD\"https://youridp.com/service/oauth/.well-known/openid-configuration\"R\x11\x64iscoveryEndpoint\x12\x84\x01\n\rauthorize_uri\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValueBA\x92\x41>2\rAuthorize URIJ-\"https://youridp.com/service/oauth/authorize\"R\x0c\x61uthorizeUri\x12t\n\ttoken_uri\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueB9\x92\x41\x36\x32\tToken URIJ)\"https://youridp.com/service/oauth/token\"R\x08tokenUri\x12\x82\x01\n\ruser_info_uri\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB@\x92\x41=2\rUser Info URIJ,\"https://youridp.com/service/oauth/userinfo\"R\x0buserInfoUri\x12p\n\x08jwks_uri\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValueB7\x92\x41\x34\x32\x08JWKS URIJ(\"https://youridp.com/service/oauth/jwks\"R\x07jwksUri\x12\\\n\tclient_id\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB!\x92\x41\x1e\x32\tClient IDJ\x11\"oauth_client_id\"R\x08\x63lientId\x12l\n\rclient_secret\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB)\x92\x41&2\rClient SecretJ\x15\"oauth_client_secret\"R\x0c\x63lientSecret\x12\x63\n\x06scopes\x18\n \x03(\x0e\x32\".scalekit.v1.connections.OIDCScopeB\'\x92\x41$2\x0bOIDC ScopesJ\x15[\"openid\", \"profile\"]R\x06scopes\x12r\n\x0ftoken_auth_type\x18\x0b \x01(\x0e\x32&.scalekit.v1.connections.TokenAuthTypeB\"\x92\x41\x1f\x32\x0fToken Auth TypeJ\x0c\"URL_PARAMS\"R\rtokenAuthType\x12j\n\x0credirect_uri\x18\x0c \x01(\tBG\x92\x41\x44\x32\x0cRedirect URIJ4\"https://yourapp.com/sso/v1/oidc/conn_1234/callback\"R\x0bredirectUri\x12V\n\x0cpkce_enabled\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x17\x92\x41\x14\x32\x0cPKCE EnabledJ\x04trueR\x0bpkceEnabled\x12h\n\x13idp_logout_required\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1c\x92\x41\x19\x32\x11\x45nable IDP logoutJ\x04trueR\x11idpLogoutRequired\x12\xb4\x01\n\x18post_logout_redirect_uri\x18\x0f \x01(\x0b\x32\x1c.google.protobuf.StringValueB]\x92\x41W2\x18post logout redirect uriJ;\"https://yourapp.com/sso/v1/oidc/conn_1234/logout/callback\"\xe0\x41\x03R\x15postLogoutRedirectUri\x12\xea\x01\n\x1f\x62\x61\x63kchannel_logout_redirect_uri\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x84\x01\x92\x41~2\"https://yourapp.com/sso/v1/oidc/conn_1234/backchannel-logout\"\xe0\x41\x03R\x1c\x62\x61\x63kchannelLogoutRedirectUri\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\x12\xba\x01\n!jit_provisioning_with_sso_enabled\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBT\x92\x41Q2IIndicates if Just In Time user provisioning is enabled for the connectionJ\x04trueR\x1djitProvisioningWithSsoEnabled\"\xce\x13\n\x15OAuthConnectionConfig\x12\x84\x01\n\rauthorize_uri\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValueBA\x92\x41>2\rAuthorize URIJ-\"https://youridp.com/service/oauth/authorize\"R\x0c\x61uthorizeUri\x12t\n\ttoken_uri\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueB9\x92\x41\x36\x32\tToken URIJ)\"https://youridp.com/service/oauth/token\"R\x08tokenUri\x12\x82\x01\n\ruser_info_uri\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB@\x92\x41=2\rUser Info URIJ,\"https://youridp.com/service/oauth/userinfo\"R\x0buserInfoUri\x12\\\n\tclient_id\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB!\x92\x41\x1e\x32\tClient IDJ\x11\"oauth_client_id\"R\x08\x63lientId\x12l\n\rclient_secret\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB)\x92\x41&2\rClient SecretJ\x15\"oauth_client_secret\"R\x0c\x63lientSecret\x12?\n\x06scopes\x18\n \x03(\tB\'\x92\x41$2\x0bOIDC ScopesJ\x15[\"openid\", \"profile\"]R\x06scopes\x12\x62\n\x0credirect_uri\x18\x0c \x01(\tB?\x92\x41<2\x0cRedirect URIJ,\"https://yourapp.com/service/oauth/redirect\"R\x0bredirectUri\x12V\n\x0cpkce_enabled\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x17\x92\x41\x14\x32\x0cPKCE EnabledJ\x04trueR\x0bpkceEnabled\x12V\n\x06prompt\x18\x0e \x01(\x0b\x32\x1c.google.protobuf.StringValueB \x92\x41\x1d\x32\x13Prompt for the userJ\x06\"none\"R\x06prompt\x12m\n\x12use_platform_creds\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueB#\x92\x41 2\x18Use Scalekit credentialsJ\x04trueR\x10usePlatformCreds\x12Z\n\x0b\x61\x63\x63\x65ss_type\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1b\x92\x41\x18\x32\x0b\x41\x63\x63\x65ss TypeJ\t\"offline\"R\naccessType\x12n\n\x11\x63ustom_scope_name\x18\x11 \x01(\x0b\x32\x1c.google.protobuf.StringValueB$\x92\x41!2\x11\x43ustom Scope NameJ\x0c\"user_scope\"R\x0f\x63ustomScopeName\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\x12k\n\x11token_access_type\x18\x13 \x01(\x0b\x32\x1c.google.protobuf.StringValueB!\x92\x41\x1e\x32\x11Token Access TypeJ\t\"offline\"R\x0ftokenAccessType\x12\x84\x02\n\ttenant_id\x18\x14 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\xc8\x01\x92\x41\xc4\x01\x32\x99\x01Microsoft Entra tenant ID. Required when using a single-tenant or multi-tenant app registered in Microsoft Entra. Leave empty to use the common endpoint.J&\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"R\x08tenantId\x12\xc7\x01\n\x07is_cimd\x18\x15 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x91\x01\x92\x41\x8a\x01\x32\x81\x01Indicates whether this connection was registered using Client ID Metadata Document (CIMD) instead of Dynamic Client Registration.J\x04true\xe0\x41\x03R\x06isCimd\x12\xbe\x01\n\x08\x61pp_name\x18\x16 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x84\x01\x92\x41\x80\x01\x32mApplication name used by providers that require it as an authorize query parameter (e.g., Trello\'s app_name).J\x0f\"My Trello App\"R\x07\x61ppName\x12\xfa\x01\n\x0foptional_scopes\x18\x17 \x01(\x0b\x32\'.scalekit.v1.connections.OptionalScopesB\xa2\x01\x92\x41\x9e\x01\x32\x9b\x01Optional scopes configuration for identity providers that support or require additional scopes to be sent in a custom field during authentication requests.H\x00R\x0eoptionalScopes\x88\x01\x01\x42\x12\n\x10_optional_scopes\"\xa6\x03\n\x0eOptionalScopes\x12v\n\x06scopes\x18\x01 \x03(\tB^\x92\x41[2CList of optional scopes that can be requested during authenticationJ\x14[\"scope1\", \"scope2\"]R\x06scopes\x12\x9b\x02\n\nfield_name\x18\x02 \x01(\tB\xfb\x01\x92\x41\xf7\x01\x32\xd5\x01Name of the field in which scope should be sent in the authentication request. This is required by some identity providers that expect scopes to be sent in a custom field instead of the standard \'scope\' parameter.J\x1d\"optional_scope or bot_scope\"R\tfieldName\"\xf4\x07\n\x12PasswordLessConfig\x12]\n\x04type\x18\x01 \x01(\x0e\x32).scalekit.v1.connections.PasswordlessTypeB\x1e\x92\x41\x1b\x32\x11Passwordless TypeJ\x06\"LINK\"R\x04type\x12W\n\tfrequency\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x16\x92\x41\x13\x32\x0eLink FrequencyJ\x01\x31H\x00R\tfrequency\x88\x01\x01\x12\x61\n\x08validity\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\"\x92\x41\x1f\x32\x18Link Validity in SecondsJ\x03\x36\x30\x30H\x01R\x08validity\x88\x01\x01\x12\x86\x01\n\x1b\x65nforce_same_browser_origin\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB&\x92\x41#2\x1b\x45nforce Same Browser OriginJ\x04trueH\x02R\x18\x65nforceSameBrowserOrigin\x88\x01\x01\x12t\n\x15\x63ode_challenge_length\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x1d\x92\x41\x1a\x32\x15\x43ode Challenge LengthJ\x01\x36H\x03R\x13\x63odeChallengeLength\x88\x01\x01\x12\x84\x01\n\x13\x63ode_challenge_type\x18\x06 \x01(\x0e\x32*.scalekit.v1.connections.CodeChallengeTypeB#\x92\x41 2\x13\x43ode Challenge TypeJ\t\"NUMERIC\"H\x04R\x11\x63odeChallengeType\x88\x01\x01\x12\x9d\x01\n-regenerate_passwordless_credentials_on_resend\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1a\x92\x41\x17\x32\x0fRegenerate the J\x04trueH\x05R)regeneratePasswordlessCredentialsOnResend\x88\x01\x01\x42\x0c\n\n_frequencyB\x0b\n\t_validityB\x1e\n\x1c_enforce_same_browser_originB\x18\n\x16_code_challenge_lengthB\x16\n\x14_code_challenge_typeB0\n._regenerate_passwordless_credentials_on_resend\"P\n\x10StaticAuthConfig\x12<\n\rstatic_config\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x0cstaticConfig\"\xc4\"\n\x14WebAuthConfiguration\x12@\n\x02rp\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connections.WebAuthConfiguration.RpR\x02rp\x12[\n\x0b\x61ttestation\x18\x02 \x01(\x0b\x32\x39.scalekit.v1.connections.WebAuthConfiguration.AttestationR\x0b\x61ttestation\x12\x64\n\x0e\x61uthenticators\x18\x03 \x01(\x0b\x32<.scalekit.v1.connections.WebAuthConfiguration.AuthenticatorsR\x0e\x61uthenticators\x12}\n\x17\x61uthenticator_selection\x18\x04 \x01(\x0b\x32\x44.scalekit.v1.connections.WebAuthConfiguration.AuthenticatorSelectionR\x16\x61uthenticatorSelection\x12O\n\x07timeout\x18\x05 \x01(\x0b\x32\x35.scalekit.v1.connections.WebAuthConfiguration.TimeoutR\x07timeout\x12\x64\n\x18\x65nable_auto_registration\x18\x06 \x01(\x08\x42*\x92\x41\'2%Enable auto registration for WebAuthnR\x16\x65nableAutoRegistration\x12X\n\x13show_passkey_button\x18\x07 \x01(\x08\x42(\x92\x41%2#Show passkey button on login screenR\x11showPasskeyButton\x12g\n\x18\x65nable_conditional_login\x18\x08 \x01(\x08\x42-\x92\x41*2(Allow autofill of passkeys in login pageR\x16\x65nableConditionalLogin\x1aH\n\x02Rp\x12\x1c\n\x03ids\x18\x01 \x03(\tB\n\xbaH\x07\x92\x01\x04\x08\x01\x10\nR\x03ids\x12$\n\x07origins\x18\x02 \x03(\tB\n\xbaH\x07\x92\x01\x04\x08\x01\x10\nR\x07origins\x1a\xc1\x01\n\x0b\x41ttestation\x12p\n\x15\x63onveyance_preference\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1d\xbaH\x1ar\x18R\x04noneR\x08indirectR\x06\x64irectR\x14\x63onveyancePreference\x12@\n\x17\x65nterprise_approved_ids\x18\x02 \x03(\tB\x08\xbaH\x05\x92\x01\x02\x10\x32R\x15\x65nterpriseApprovedIds\x1a\xf0\x13\n\x0e\x41uthenticators\x12\xdb\x02\n\x0evalidate_entry\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x97\x02\x92\x41\x93\x02\x1a\x1a.google.protobuf.BoolValue2\xf4\x01requires that the provided metadata has an entry for the given authenticator to be considered valid. By default an AAGUID which has a zero value should fail validation if validate_entry_permit_zero_aaguid is not provided with the value of true.R\rvalidateEntry\x12\x8f\x02\n!validate_entry_permit_zero_aaguid\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xa8\x01\x92\x41\xa4\x01\x32\xa1\x01is an option that permits a zero\'d AAGUID from an attestation statement to automatically pass metadata validations. Generally helpful to use with validate_entry.R\x1dvalidateEntryPermitZeroAaguid\x12\xc6\x01\n\x10validate_anchors\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x7f\x92\x41|2zwhen set to true enables the validation of the attestation statement against the trust anchor from the metadata statement.R\x0fvalidateAnchors\x12\xbe\x01\n\x0fvalidate_status\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBy\x92\x41v2twhen set to true enables the validation of the attestation statements AAGUID against the desired and undesired listsR\x0evalidateStatus\x12\xe1\x01\n\x19validate_attestation_type\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x88\x01\x92\x41\x84\x01\x32\x81\x01when set to true enables the validation of the attestation statements type against the known types the authenticator can produce.R\x17validateAttestationType\x12\xbb\x04\n\x1c\x64\x65sired_authenticator_status\x18\x06 \x03(\tB\xf8\x03\x92\x41\x9d\x01\x32\x96\x01provides the list of statuses which are considered undesirable for status report validation purposes. Should be used with validate_status set to true.:\x02[]\xbaH\xd3\x02\x92\x01\xcf\x02\x10\n\"\xca\x02r\xc7\x02R\x12NOT_FIDO_CERTIFIEDR\x0e\x46IDO_CERTIFIEDR\x18USER_VERIFICATION_BYPASSR\x1a\x41TTESTATION_KEY_COMPROMISER\x1aUSER_KEY_REMOTE_COMPROMISER\x1cUSER_KEY_PHYSICAL_COMPROMISER\x10UPDATE_AVAILABLER\x07REVOKEDR\x18SELF_ASSERTION_SUBMITTEDR\x11\x46IDO_CERTIFIED_L1R\x15\x46IDO_CERTIFIED_L1plusR\x11\x46IDO_CERTIFIED_L2R\x15\x46IDO_CERTIFIED_L2plusR\x11\x46IDO_CERTIFIED_L3R\x15\x46IDO_CERTIFIED_L3plusR\x1a\x64\x65siredAuthenticatorStatus\x12\xc1\x05\n\x1eundesired_authenticator_status\x18\x07 \x03(\tB\xfa\x04\x92\x41\x9f\x02\x32\x96\x01provides the list of statuses which are considered undesirable for status report validation purposes. Should be used with validate_status set to true.:\x83\x01[\'ATTESTATION_KEY_COMPROMISE\', \'USER_VERIFICATION_BYPASS\', \'USER_KEY_REMOTE_COMPROMISE\', \'USER_KEY_PHYSICAL_COMPROMISE\', \'REVOKED\']\xbaH\xd3\x02\x92\x01\xcf\x02\x10\n\"\xca\x02r\xc7\x02R\x12NOT_FIDO_CERTIFIEDR\x0e\x46IDO_CERTIFIEDR\x18USER_VERIFICATION_BYPASSR\x1a\x41TTESTATION_KEY_COMPROMISER\x1aUSER_KEY_REMOTE_COMPROMISER\x1cUSER_KEY_PHYSICAL_COMPROMISER\x10UPDATE_AVAILABLER\x07REVOKEDR\x18SELF_ASSERTION_SUBMITTEDR\x11\x46IDO_CERTIFIED_L1R\x15\x46IDO_CERTIFIED_L1plusR\x11\x46IDO_CERTIFIED_L2R\x15\x46IDO_CERTIFIED_L2plusR\x11\x46IDO_CERTIFIED_L3R\x15\x46IDO_CERTIFIED_L3plusR\x1cundesiredAuthenticatorStatus\x1a\x86\x02\n\x16\x41uthenticatorSelection\x12r\n\x11user_verification\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\'\xbaH$r\"R\x08requiredR\tpreferredR\x0b\x64iscouragedR\x10userVerification\x12x\n\x18\x61uthenticator_attachment\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1f\xbaH\x1cr\x1aR\x08platformR\x0e\x63ross-platformR\x17\x61uthenticatorAttachment\x1a\xa3\x04\n\x07Timeout\x12x\n\x0cregistration\x18\x01 \x01(\x0b\x32\x19.google.protobuf.DurationB9\x92\x41\'2\x1dRegistration timeout duration:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x0cregistration\x12\xa5\x01\n\x10registration_uvd\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationB_\x92\x41M2CRegistration timeout duration when user verification is discouraged:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x0fregistrationUvd\x12\x63\n\x05login\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationB2\x92\x41 2\x16Login timeout duration:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x05login\x12\x90\x01\n\tlogin_uvd\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationBX\x92\x41\x46\x322\x0fSP Metadata URLJ+\"https://youridp.com/service/saml/metadata\"R\rspMetadataUrl\x12\x8a\x01\n\x10idp_metadata_url\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueBB\x92\x41?2\x10IDP Metadata URLJ+\"https://youridp.com/service/saml/metadata\"R\x0eidpMetadataUrl\x12x\n\ridp_entity_id\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB6\x92\x41\x33\x32\rIDP Entity IDJ\"\"https://youridp.com/service/saml\"R\x0bidpEntityId\x12v\n\x0bidp_sso_url\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValueB8\x92\x41\x35\x32\x0bIDP SSO URLJ&\"https://youridp.com/service/saml/sso\"R\tidpSsoUrl\x12i\n\x10idp_certificates\x18\x07 \x03(\x0b\x32\'.scalekit.v1.connections.IDPCertificateB\x15\x92\x41\x12\x32\x10IDP CertificatesR\x0fidpCertificates\x12v\n\x0bidp_slo_url\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB8\x92\x41\x35\x32\x0bIDP SLO URLJ&\"https://youridp.com/service/saml/slo\"R\tidpSloUrl\x12l\n\x0fui_button_title\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB&\x92\x41#2\x0fUI Button TitleJ\x10\"Login with SSO\"R\ruiButtonTitle\x12t\n\x12idp_name_id_format\x18\n \x01(\x0e\x32%.scalekit.v1.connections.NameIdFormatB \x92\x41\x1d\x32\x12IDP Name ID FormatJ\x07\"EMAIL\"R\x0fidpNameIdFormat\x12\x89\x01\n\x17idp_sso_request_binding\x18\x0b \x01(\x0e\x32\'.scalekit.v1.connections.RequestBindingB)\x92\x41&2\x17IDP SSO Request BindingJ\x0b\"HTTP_POST\"R\x14idpSsoRequestBinding\x12\x89\x01\n\x17idp_slo_request_binding\x18\x0c \x01(\x0e\x32\'.scalekit.v1.connections.RequestBindingB)\x92\x41&2\x17IDP SLO Request BindingJ\x0b\"HTTP_POST\"R\x14idpSloRequestBinding\x12\x93\x01\n\x13saml_signing_option\x18\r \x01(\x0e\x32+.scalekit.v1.connections.SAMLSigningOptionsB6\x92\x41\x33\x32\x13SAML Signing OptionJ\x1c\"SAML_ONLY_RESPONSE_SIGNING\"R\x11samlSigningOption\x12{\n\x19\x61llow_idp_initiated_login\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueB$\x92\x41!2\x19\x41llow IDP Initiated LoginJ\x04trueR\x16\x61llowIdpInitiatedLogin\x12S\n\x0b\x66orce_authn\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x16\x92\x41\x13\x32\x0b\x46orce AuthnJ\x04trueR\nforceAuthn\x12\x96\x01\n\x14\x64\x65\x66\x61ult_redirect_uri\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueBF\x92\x41\x43\x32\x14\x44\x65\x66\x61ult Redirect URIJ+\"https://yourapp.com/service/saml/redirect\"R\x12\x64\x65\x66\x61ultRedirectUri\x12k\n\x13\x61ssertion_encrypted\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1e\x92\x41\x1b\x32\x13\x41ssertion EncryptedJ\x04trueR\x12\x61ssertionEncrypted\x12j\n\x13want_request_signed\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1e\x92\x41\x1b\x32\x13Want Request SignedJ\x04trueR\x11wantRequestSigned\x12q\n\x0e\x63\x65rtificate_id\x18\x13 \x01(\x0b\x32\x1c.google.protobuf.StringValueB,\x92\x41)2\x0e\x43\x65rtificate IDJ\x17\"cer_35585423166144613\"R\rcertificateId\x12\x62\n\x10idp_slo_required\x18\x14 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1c\x92\x41\x19\x32\x11\x45nable IDP logoutJ\x04trueR\x0eidpSloRequired\x12\x96\x01\n\nsp_slo_url\x18\x15 \x01(\x0b\x32\x1c.google.protobuf.StringValueBZ\x92\x41T2\x18Service Provider SLO urlJ8\"https://yourapp.com/sso/v1/saml/conn_1234/slo/callback\"\xe0\x41\x03R\x08spSloUrl\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x16 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\x12\xba\x01\n!jit_provisioning_with_sso_enabled\x18\x17 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBT\x92\x41Q2IIndicates if Just In Time user provisioning is enabled for the connectionJ\x04trueR\x1djitProvisioningWithSsoEnabled\"\xbf\x03\n\x0eIDPCertificate\x12\x36\n\x0b\x63\x65rtificate\x18\x01 \x01(\tB\x14\x92\x41\x11\x32\x0fIDP CertificateR\x0b\x63\x65rtificate\x12s\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB6\x92\x41\x33\x32\x19\x43\x65rtificate Creation TimeJ\x16\"2021-09-01T00:00:00Z\"R\ncreateTime\x12q\n\x0b\x65xpiry_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB4\x92\x41\x31\x32\x17\x43\x65rtificate Expiry TimeJ\x16\"2021-09-01T00:00:00Z\"R\nexpiryTime\x12\x38\n\x02id\x18\x04 \x01(\tB(\x92\x41%2\x0e\x43\x65rtificate IDJ\x13\"cert_123123123123\"R\x02id\x12S\n\x06issuer\x18\x05 \x01(\tB;\x92\x41\x38\x32\x12\x43\x65rtificate IssuerJ\"\"https://youridp.com/service/saml\"R\x06issuer\"b\n\x16GetOIDCMetadataRequest\x12H\n\x08metadata\x18\x01 \x01(\x0b\x32,.scalekit.v1.connections.OIDCMetadataRequestR\x08metadata\"9\n\x13OIDCMetadataRequest\x12\"\n\x06issuer\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x06issuer\"\xd7\x01\n\x17GetOIDCMetadataResponse\x12\x16\n\x06issuer\x18\x01 \x01(\tR\x06issuer\x12\x35\n\x16\x61uthorization_endpoint\x18\x02 \x01(\tR\x15\x61uthorizationEndpoint\x12%\n\x0etoken_endpoint\x18\x03 \x01(\tR\rtokenEndpoint\x12+\n\x11userinfo_endpoint\x18\x04 \x01(\tR\x10userinfoEndpoint\x12\x19\n\x08jwks_uri\x18\x05 \x01(\tR\x07jwksUri\"b\n\x16GetSAMLMetadataRequest\x12H\n\x08metadata\x18\x01 \x01(\x0b\x32,.scalekit.v1.connections.SAMLMetadataRequestR\x08metadata\"D\n\x13SAMLMetadataRequest\x12-\n\x0cmetadata_url\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0bmetadataUrl\"\xb4\x02\n\x17GetSAMLMetadataResponse\x12\"\n\ridp_entity_id\x18\x01 \x01(\tR\x0bidpEntityId\x12\x1e\n\x0bidp_sso_url\x18\x02 \x01(\tR\tidpSsoUrl\x12\x1e\n\x0bidp_slo_url\x18\x03 \x01(\tR\tidpSloUrl\x12)\n\x10idp_certificates\x18\x04 \x03(\tR\x0fidpCertificates\x12+\n\x12idp_name_id_format\x18\x05 \x01(\tR\x0fidpNameIdFormat\x12\'\n\x0frequest_binding\x18\x06 \x01(\tR\x0erequestBinding\x12\x34\n\x16want_assertions_signed\x18\x07 \x01(\x08R\x14wantAssertionsSigned\"u\n GetSAMLCertificateDetailsRequest\x12Q\n\x0b\x63\x65rtificate\x18\x01 \x01(\x0b\x32/.scalekit.v1.connections.SAMLCertificateRequestR\x0b\x63\x65rtificate\"5\n\x16SAMLCertificateRequest\x12\x1b\n\x04text\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04text\"\xa5\x01\n!GetSAMLCertificateDetailsResponse\x12\x12\n\x04text\x18\x01 \x01(\tR\x04text\x12\x1b\n\tnot_after\x18\x02 \x01(\x03R\x08notAfter\x12\x1d\n\nnot_before\x18\x03 \x01(\x03R\tnotBefore\x12\x18\n\x07subject\x18\x04 \x01(\tR\x07subject\x12\x16\n\x06issuer\x18\x05 \x01(\tR\x06issuer\"\x86\x01\n\x1eGetConnectionTestResultRequest\x12,\n\rconnection_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0c\x63onnectionId\x12\x36\n\x0ftest_request_id\x18\x02 \x01(\tB\x0e\xbaH\x0br\t\x10\x01:\x05test_R\rtestRequestId\"\xbd\x02\n\x1fGetConnectionTestResultResponse\x12\x41\n\x06status\x18\x01 \x01(\x0e\x32).scalekit.v1.connections.TestResultStatusR\x06status\x12 \n\tuser_info\x18\x02 \x01(\tH\x00R\x08userInfo\x88\x01\x01\x12\x19\n\x05\x65rror\x18\x03 \x01(\tH\x01R\x05\x65rror\x88\x01\x01\x12\x30\n\x11\x65rror_description\x18\x04 \x01(\tH\x02R\x10\x65rrorDescription\x88\x01\x01\x12(\n\rerror_details\x18\x05 \x01(\tH\x03R\x0c\x65rrorDetails\x88\x01\x01\x42\x0c\n\n_user_infoB\x08\n\x06_errorB\x14\n\x12_error_descriptionB\x10\n\x0e_error_details\"\x1a\n\x18PasswordConnectionConfig\"9\n\x05\x46lags\x12\x19\n\x08is_login\x18\x01 \x01(\x08R\x07isLogin\x12\x15\n\x06is_app\x18\x02 \x01(\x08R\x05isApp\"\xaa\x03\n\x19ListAppConnectionsRequest\x12\x80\x01\n\tpage_size\x18\x01 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x02 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\x12U\n\x08provider\x18\x03 \x01(\tB4\x92\x41(2\x1e\x46ilter connections by providerJ\x06\"OKTA\"\xbaH\x06r\x04\x10\x01\x18\x32H\x00R\x08provider\x88\x01\x01\x42\x0b\n\t_provider\"\xea\x03\n\x1aListAppConnectionsResponse\x12\x81\x01\n\x0b\x63onnections\x18\x01 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB6\x92\x41\x33\x32\x31List of connections matching the request criteriaR\x0b\x63onnections\x12o\n\x0fnext_page_token\x18\x02 \x01(\tBG\x92\x41\x44\x32\"Token for the next page of resultsJ\x1e\"eyJwYWdlIjoyLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12s\n\x0fprev_page_token\x18\x03 \x01(\tBK\x92\x41H2&Token for the previous page of resultsJ\x1e\"eyJwYWdlIjoyLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12\x62\n\ntotal_size\x18\x04 \x01(\rBC\x92\x41@29Total number of connections matching the request criteriaJ\x03\x31\x30\x30R\ttotalSize\"\x8b\x01\n\x1bGetConnectionContextRequest\x12\x38\n\rconnection_id\x18\x01 \x01(\tB\x13\xbaH\x10r\x0b\x10\x01\x18 :\x05\x63onn_\xc8\x01\x01R\x0c\x63onnectionId\x12\x32\n\x0forganization_id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\"Q\n\x1cGetConnectionContextResponse\x12\x31\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext\"\xc1\x01\n\x1eUpdateConnectionContextRequest\x12\x38\n\rconnection_id\x18\x01 \x01(\tB\x13\xbaH\x10r\x0b\x10\x01\x18 :\x05\x63onn_\xc8\x01\x01R\x0c\x63onnectionId\x12\x32\n\x0forganization_id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x31\n\x07\x63ontext\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext*W\n\x11\x43odeChallengeType\x12#\n\x1f\x43ODE_CHALLENGE_TYPE_UNSPECIFIED\x10\x00\x12\x0b\n\x07NUMERIC\x10\x01\x12\x10\n\x0c\x41LPHANUMERIC\x10\x02*R\n\x11\x43onfigurationType\x12\"\n\x1e\x43ONFIGURATION_TYPE_UNSPECIFIED\x10\x00\x12\r\n\tDISCOVERY\x10\x01\x12\n\n\x06MANUAL\x10\x02*a\n\x0cNameIdFormat\x12\x16\n\x12NAME_ID_FORMAT_NIL\x10\x00\x12\x0f\n\x0bUNSPECIFIED\x10\x01\x12\t\n\x05\x45MAIL\x10\x02\x12\r\n\tTRANSIENT\x10\x03\x12\x0e\n\nPERSISTENT\x10\x04*U\n\x10PasswordlessType\x12 \n\x1cPasswordlessType_UNSPECIFIED\x10\x00\x12\x08\n\x04LINK\x10\x01\x12\x07\n\x03OTP\x10\x02\x12\x0c\n\x08LINK_OTP\x10\x03*9\n\x10TestResultStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0b\n\x07SUCCESS\x10\x01\x12\x0b\n\x07\x46\x41ILURE\x10\x02*\xd8\x01\n\x12SAMLSigningOptions\x12$\n SAML_SIGNING_OPTIONS_UNSPECIFIED\x10\x00\x12\x0e\n\nNO_SIGNING\x10\x01\x12\x1e\n\x1aSAML_ONLY_RESPONSE_SIGNING\x10\x02\x12\x1f\n\x1bSAML_ONLY_ASSERTION_SIGNING\x10\x03\x12#\n\x1fSAML_RESPONSE_ASSERTION_SIGNING\x10\x04\x12&\n\"SAML_RESPONSE_OR_ASSERTION_SIGNING\x10\x05*S\n\x0eRequestBinding\x12\x1f\n\x1bREQUEST_BINDING_UNSPECIFIED\x10\x00\x12\r\n\tHTTP_POST\x10\x01\x12\x11\n\rHTTP_REDIRECT\x10\x02*P\n\rTokenAuthType\x12\x1f\n\x1bTOKEN_AUTH_TYPE_UNSPECIFIED\x10\x00\x12\x0e\n\nURL_PARAMS\x10\x01\x12\x0e\n\nBASIC_AUTH\x10\x02*c\n\tOIDCScope\x12\x1a\n\x16OIDC_SCOPE_UNSPECIFIED\x10\x00\x12\n\n\x06openid\x10\x01\x12\x0b\n\x07profile\x10\x02\x12\t\n\x05\x65mail\x10\x03\x12\x0b\n\x07\x61\x64\x64ress\x10\x04\x12\t\n\x05phone\x10\x05*\xb0\x01\n\x0e\x43onnectionType\x12\x0b\n\x07INVALID\x10\x00\x12\x08\n\x04OIDC\x10\x01\x12\x08\n\x04SAML\x10\x02\x12\x0c\n\x08PASSWORD\x10\x03\x12\t\n\x05OAUTH\x10\x04\x12\x10\n\x0cPASSWORDLESS\x10\x05\x12\t\n\x05\x42\x41SIC\x10\x06\x12\n\n\x06\x42\x45\x41RER\x10\x07\x12\x0b\n\x07\x41PI_KEY\x10\x08\x12\x0c\n\x08WEBAUTHN\x10\t\x12\r\n\tOAUTH_M2M\x10\n\x12\x11\n\rTRELLO_OAUTH1\x10\x0b*`\n\x10\x43onnectionStatus\x12!\n\x1d\x43ONNECTION_STATUS_UNSPECIFIED\x10\x00\x12\t\n\x05\x44RAFT\x10\x01\x12\x0f\n\x0bIN_PROGRESS\x10\x02\x12\r\n\tCOMPLETED\x10\x03*\x98\x02\n\x12\x43onnectionProvider\x12#\n\x1f\x43ONNECTION_PROVIDER_UNSPECIFIED\x10\x00\x12\x08\n\x04OKTA\x10\x01\x12\n\n\x06GOOGLE\x10\x02\x12\x10\n\x0cMICROSOFT_AD\x10\x03\x12\t\n\x05\x41UTH0\x10\x04\x12\x0c\n\x08ONELOGIN\x10\x05\x12\x11\n\rPING_IDENTITY\x10\x06\x12\r\n\tJUMPCLOUD\x10\x07\x12\n\n\x06\x43USTOM\x10\x08\x12\n\n\x06GITHUB\x10\t\x12\n\n\x06GITLAB\x10\n\x12\x0c\n\x08LINKEDIN\x10\x0b\x12\x0e\n\nSALESFORCE\x10\x0c\x12\r\n\tMICROSOFT\x10\r\x12\x11\n\rIDP_SIMULATOR\x10\x0e\x12\x0c\n\x08SCALEKIT\x10\x0f\x12\x08\n\x04\x41\x44\x46S\x10\x10\x32\x92G\n\x11\x43onnectionService\x12\x91\x03\n\x1b\x43reateEnvironmentConnection\x12;.scalekit.v1.connections.CreateEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\"\x81\x02\x92\x41\xc1\x01\n\x0b\x43onnections\x12\x17\x43reate a new connection\x1a\x38\x45stablish a new connection for the specified environmentJ_\n\x03\x32\x30\x31\x12X\n\x1f\x43onnection created successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\"\x13/api/v1/connections:\nconnection\x12\xb3\x03\n\x10\x43reateConnection\x12\x30.scalekit.v1.connections.CreateConnectionRequest\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\"\xb9\x02\x92\x41\xc6\x01\n\x0b\x43onnections\x12\x17\x43reate a new connection\x1a=Establish a new SSO connection for the specified organizationJ_\n\x03\x32\x30\x31\x12X\n\x1f\x43onnection created successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x41\"3/api/v1/organizations/{organization_id}/connections:\nconnection\x12\xcd\x04\n\x19\x41ssignDomainsToConnection\x12\x39.scalekit.v1.connections.AssignDomainsToConnectionRequest\x1a:.scalekit.v1.connections.AssignDomainsToConnectionResponse\"\xb8\x03\x92\x41\xb6\x02\n\x0b\x43onnections\x12\x1e\x41ssign domains to a connection\x1a\x9e\x01\x41ssigns one or more domains to a specific connection within an organization. This allows the connection to be used for authentication on the specified domainsJf\n\x03\x32\x30\x30\x12_\n\x1d\x44omains assigned successfully\x12>\n<\x1a:.scalekit.v1.connections.AssignDomainsToConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02P\x1aK/api/v1/organizations/{organization_id}/connections/{connection_id}/domains:\x01*\x12\xb3\x03\n\x18GetEnvironmentConnection\x12\x38.scalekit.v1.connections.GetEnvironmentConnectionRequest\x1a..scalekit.v1.connections.GetConnectionResponse\"\xac\x02\x92\x41\xe7\x01\n\x0b\x43onnections\x12\x1bRetrieve connection details\x1aSObtain detailed information about a specific connection using its unique identifierJf\n\x03\x32\x30\x30\x12_\n)Successfully retrieved connection details\x12\x32\n0\x1a..scalekit.v1.connections.GetConnectionResponse\x82\xb5\x18\x03\x18\xc4\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\x12#/api/v1/connections/{connection_id}\x12\xcf\x04\n\rGetConnection\x12-.scalekit.v1.connections.GetConnectionRequest\x1a..scalekit.v1.connections.GetConnectionResponse\"\xde\x03\x92\x41\x81\x03\n\x0b\x43onnections\x12\x16Get connection details\x1a\xd1\x01Retrieves the complete configuration and status details for a specific connection by its ID within an organization. Returns all connection properties including provider settings, protocols, and current status.J\x85\x01\n\x03\x32\x30\x30\x12~\nHSuccessfully retrieved connection details for the specified organization\x12\x32\n0\x1a..scalekit.v1.connections.GetConnectionResponse\x82\xb5\x18\x15\n\x10\x63onnections_read\x18\xf4\x01\x82\xd3\xe4\x93\x02:\x12\x38/api/v1/organizations/{organization_id}/connections/{id}\x12\xe4\x02\n\x0fListConnections\x12/.scalekit.v1.connections.ListConnectionsRequest\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\"\xed\x01\x92\x41\xb6\x01\n\x0b\x43onnections\x12\x10List connections\x1a\x32Retrieves a list of connections in the environmentJa\n\x03\x32\x30\x30\x12Z\n\"Successfully retrieved connections\x12\x34\n2\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\x82\xb5\x18\x14\n\x10\x63onnections_read\x18t\x82\xd3\xe4\x93\x02\x15\x12\x13/api/v1/connections\x12\xb5\x03\n\x1bListOrganizationConnections\x12;.scalekit.v1.connections.ListOrganizationConnectionsRequest\x1a<.scalekit.v1.connections.ListOrganizationConnectionsResponse\"\x9a\x02\x92\x41\xd6\x01\n\x0b\x43onnections\x12\x1dList organization connections\x1a\x39Retrieves a list of connections for all the organizationsJm\n\x03\x32\x30\x30\x12\x66\n\"Successfully retrieved connections\x12@\n>\x1a<.scalekit.v1.connections.ListOrganizationConnectionsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\x12#/api/v1/organizations/-/connections\x12\xcd\x03\n\x1dSearchOrganizationConnections\x12=.scalekit.v1.connections.SearchOrganizationConnectionsRequest\x1a>.scalekit.v1.connections.SearchOrganizationConnectionsResponse\"\xac\x02\x92\x41\xe1\x01\n\x0b\x43onnections\x12\x1fSearch organization connections\x1a\x44Search with query or filters provided and return list of connectionsJk\n\x03\x32\x30\x30\x12\x64\n\x1eSuccessfully found connections\x12\x42\n@\x1a>.scalekit.v1.connections.SearchOrganizationConnectionsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02,\x12*/api/v1/organizations/-/connections:search\x12\xf1\x02\n\x1bUpdateEnvironmentConnection\x12;.scalekit.v1.connections.UpdateEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\"\xe1\x01\x92\x41\x91\x01\n\x0b\x43onnections\x12\x13Update a connection\x1a\x17Update a SSO ConnectionJT\n\x03\x32\x30\x30\x12M\n\x14Updated Successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\x32#/api/v1/connections/{connection_id}:\nconnection\x12\x94\x03\n\x10UpdateConnection\x12\x30.scalekit.v1.connections.UpdateConnectionRequest\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\"\x9a\x02\x92\x41\xa2\x01\n\x0b\x43onnections\x12$Update a connection for organization\x1a\x17Update a SSO ConnectionJT\n\x03\x32\x30\x30\x12M\n\x14Updated Successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x46\x32\x38/api/v1/organizations/{organization_id}/connections/{id}:\nconnection\x12\x92\x02\n\x1b\x44\x65leteEnvironmentConnection\x12;.scalekit.v1.connections.DeleteEnvironmentConnectionRequest\x1a\x16.google.protobuf.Empty\"\x9d\x01\x92\x41Z\n\x0b\x43onnections\x12\x13\x44\x65lete a connection\x1a\x17\x44\x65lete a SSO ConnectionJ\x1d\n\x03\x32\x30\x30\x12\x16\n\x14\x44\x65leted Successfully\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%*#/api/v1/connections/{connection_id}\x12\xf7\x03\n\x10\x44\x65leteConnection\x12\x30.scalekit.v1.connections.DeleteConnectionRequest\x1a\x16.google.protobuf.Empty\"\x98\x03\x92\x41\xce\x02\n\x0b\x43onnections\x12\x15\x44\x65lete SSO connection\x1a\xf9\x01\x44\x65letes an SSO connection from the specified organization by connection ID. Use this endpoint when an identity provider integration is no longer needed for the organization. Returns an empty response after the SSO connection is deleted successfully.J,\n\x03\x32\x30\x30\x12%\n#SSO connection deleted successfully\x82\xb5\x18\x02\x18\x64\x82\xd3\xe4\x93\x02:*8/api/v1/organizations/{organization_id}/connections/{id}\x12\xdf\x02\n\x1b\x45nableEnvironmentConnection\x12;.scalekit.v1.connections.ToggleEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xcf\x01\x92\x41\x84\x01\n\x0b\x43onnections\x12\x13\x45nable a connection\x1a\x17\x45nable a SSO ConnectionJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02,2*/api/v1/connections/{connection_id}:enable\x12\xd4\x04\n\x10\x45nableConnection\x12\x30.scalekit.v1.connections.ToggleConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xda\x03\x92\x41\xf6\x02\n\x0b\x43onnections\x12\x15\x45nable SSO connection\x1a\xee\x01\x41\x63tivate an existing connection for the specified organization. When enabled, users can authenticate using this connection. This endpoint changes the connection state from disabled to enabled without modifying other configuration settingsJ_\n\x03\x32\x30\x30\x12X\n\x1f\x43onnection enabled successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\x82\xd3\xe4\x93\x02\x41\x32?/api/v1/organizations/{organization_id}/connections/{id}:enable\x12\xe3\x02\n\x1c\x44isableEnvironmentConnection\x12;.scalekit.v1.connections.ToggleEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xd2\x01\x92\x41\x86\x01\n\x0b\x43onnections\x12\x14\x44isable a connection\x1a\x18\x44isable a SSO ConnectionJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02-2+/api/v1/connections/{connection_id}:disable\x12\xde\x04\n\x11\x44isableConnection\x12\x30.scalekit.v1.connections.ToggleConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xe3\x03\x92\x41\xfe\x02\n\x0b\x43onnections\x12\x16\x44isable SSO connection\x1a\xf4\x01\x44\x65\x61\x63tivate an existing connection for the specified organization. When disabled, users cannot authenticate using this connection. This endpoint changes the connection state from enabled to disabled without modifying other configuration settingsJ`\n\x03\x32\x30\x30\x12Y\n Connection disabled successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\x82\xd3\xe4\x93\x02\x42\x32@/api/v1/organizations/{organization_id}/connections/{id}:disable\x12\x80\x03\n\x17GetConnectionTestResult\x12\x37.scalekit.v1.connections.GetConnectionTestResultRequest\x1a\x38.scalekit.v1.connections.GetConnectionTestResultResponse\"\xf1\x01\x92\x41\x8d\x01\n\x0b\x43onnections\x12\x16Test connection result\x1a\x16\x43onnection test resultJN\n\x03\x32\x30\x30\x12G\n\x07Success\x12<\n:\x1a\x38.scalekit.v1.connections.GetConnectionTestResultResponse\x82\xb5\x18\x02\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x45\x12\x43/api/v1/connections/{connection_id}/test-requests/{test_request_id}\x12\xf6\x02\n\x12ListAppConnections\x12\x32.scalekit.v1.connections.ListAppConnectionsRequest\x1a\x33.scalekit.v1.connections.ListAppConnectionsResponse\"\xf6\x01\x92\x41\xbe\x01\n\x0b\x43onnections\x12\x14List App connections\x1a\x36Retrieves a list of app connections in the environmentJa\n\x03\x32\x30\x30\x12Z\n\"Successfully retrieved connections\x12\x34\n2\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\x12\x17/api/v1/connections/app\x12\xd1\x03\n\x14GetConnectionContext\x12\x34.scalekit.v1.connections.GetConnectionContextRequest\x1a\x35.scalekit.v1.connections.GetConnectionContextResponse\"\xcb\x02\x92\x41\xad\x01\n\x0b\x43onnections\x12\x16Get connection context\x1a None: ... class Connection(_message.Message): - __slots__ = ("id", "provider", "type", "status", "enabled", "debug_enabled", "organization_id", "ui_button_title", "configuration_type", "test_connection_uri", "attribute_mapping", "create_time", "update_time", "oidc_config", "saml_config", "oauth_config", "passwordless_config", "static_config", "webauthn_config", "google_dwd_config", "key_id", "provider_key", "domains") + __slots__ = ("id", "provider", "type", "status", "enabled", "debug_enabled", "organization_id", "ui_button_title", "configuration_type", "test_connection_uri", "attribute_mapping", "create_time", "update_time", "oidc_config", "saml_config", "oauth_config", "passwordless_config", "static_config", "webauthn_config", "key_id", "provider_key", "domains") class AttributeMappingEntry(_message.Message): __slots__ = ("key", "value") KEY_FIELD_NUMBER: _ClassVar[int] @@ -288,7 +286,6 @@ class Connection(_message.Message): PASSWORDLESS_CONFIG_FIELD_NUMBER: _ClassVar[int] STATIC_CONFIG_FIELD_NUMBER: _ClassVar[int] WEBAUTHN_CONFIG_FIELD_NUMBER: _ClassVar[int] - GOOGLE_DWD_CONFIG_FIELD_NUMBER: _ClassVar[int] KEY_ID_FIELD_NUMBER: _ClassVar[int] PROVIDER_KEY_FIELD_NUMBER: _ClassVar[int] DOMAINS_FIELD_NUMBER: _ClassVar[int] @@ -311,11 +308,10 @@ class Connection(_message.Message): passwordless_config: PasswordLessConfig static_config: StaticAuthConfig webauthn_config: WebAuthConfiguration - google_dwd_config: GoogleDWDConfig key_id: str provider_key: str domains: _containers.RepeatedCompositeFieldContainer[_domains_pb2.Domain] - def __init__(self, id: _Optional[str] = ..., provider: _Optional[_Union[ConnectionProvider, str]] = ..., type: _Optional[_Union[ConnectionType, str]] = ..., status: _Optional[_Union[ConnectionStatus, str]] = ..., enabled: bool = ..., debug_enabled: bool = ..., organization_id: _Optional[str] = ..., ui_button_title: _Optional[str] = ..., configuration_type: _Optional[_Union[ConfigurationType, str]] = ..., test_connection_uri: _Optional[str] = ..., attribute_mapping: _Optional[_Mapping[str, str]] = ..., create_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., update_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., oidc_config: _Optional[_Union[OIDCConnectionConfig, _Mapping]] = ..., saml_config: _Optional[_Union[SAMLConnectionConfigResponse, _Mapping]] = ..., oauth_config: _Optional[_Union[OAuthConnectionConfig, _Mapping]] = ..., passwordless_config: _Optional[_Union[PasswordLessConfig, _Mapping]] = ..., static_config: _Optional[_Union[StaticAuthConfig, _Mapping]] = ..., webauthn_config: _Optional[_Union[WebAuthConfiguration, _Mapping]] = ..., google_dwd_config: _Optional[_Union[GoogleDWDConfig, _Mapping]] = ..., key_id: _Optional[str] = ..., provider_key: _Optional[str] = ..., domains: _Optional[_Iterable[_Union[_domains_pb2.Domain, _Mapping]]] = ...) -> None: ... + def __init__(self, id: _Optional[str] = ..., provider: _Optional[_Union[ConnectionProvider, str]] = ..., type: _Optional[_Union[ConnectionType, str]] = ..., status: _Optional[_Union[ConnectionStatus, str]] = ..., enabled: bool = ..., debug_enabled: bool = ..., organization_id: _Optional[str] = ..., ui_button_title: _Optional[str] = ..., configuration_type: _Optional[_Union[ConfigurationType, str]] = ..., test_connection_uri: _Optional[str] = ..., attribute_mapping: _Optional[_Mapping[str, str]] = ..., create_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., update_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., oidc_config: _Optional[_Union[OIDCConnectionConfig, _Mapping]] = ..., saml_config: _Optional[_Union[SAMLConnectionConfigResponse, _Mapping]] = ..., oauth_config: _Optional[_Union[OAuthConnectionConfig, _Mapping]] = ..., passwordless_config: _Optional[_Union[PasswordLessConfig, _Mapping]] = ..., static_config: _Optional[_Union[StaticAuthConfig, _Mapping]] = ..., webauthn_config: _Optional[_Union[WebAuthConfiguration, _Mapping]] = ..., key_id: _Optional[str] = ..., provider_key: _Optional[str] = ..., domains: _Optional[_Iterable[_Union[_domains_pb2.Domain, _Mapping]]] = ...) -> None: ... class CreateConnectionResponse(_message.Message): __slots__ = ("connection",) @@ -342,7 +338,7 @@ class UpdateConnectionRequest(_message.Message): def __init__(self, organization_id: _Optional[str] = ..., id: _Optional[str] = ..., connection: _Optional[_Union[UpdateConnection, _Mapping]] = ...) -> None: ... class UpdateConnection(_message.Message): - __slots__ = ("provider", "type", "debug_enabled", "ui_button_title", "configuration_type", "attribute_mapping", "oidc_config", "saml_config", "oauth_config", "passwordless_config", "static_config", "webauthn_config", "google_dwd_config", "key_id", "provider_key") + __slots__ = ("provider", "type", "debug_enabled", "ui_button_title", "configuration_type", "attribute_mapping", "oidc_config", "saml_config", "oauth_config", "passwordless_config", "static_config", "webauthn_config", "key_id", "provider_key") class AttributeMappingEntry(_message.Message): __slots__ = ("key", "value") KEY_FIELD_NUMBER: _ClassVar[int] @@ -362,7 +358,6 @@ class UpdateConnection(_message.Message): PASSWORDLESS_CONFIG_FIELD_NUMBER: _ClassVar[int] STATIC_CONFIG_FIELD_NUMBER: _ClassVar[int] WEBAUTHN_CONFIG_FIELD_NUMBER: _ClassVar[int] - GOOGLE_DWD_CONFIG_FIELD_NUMBER: _ClassVar[int] KEY_ID_FIELD_NUMBER: _ClassVar[int] PROVIDER_KEY_FIELD_NUMBER: _ClassVar[int] provider: ConnectionProvider @@ -377,10 +372,9 @@ class UpdateConnection(_message.Message): passwordless_config: PasswordLessConfig static_config: StaticAuthConfig webauthn_config: WebAuthConfiguration - google_dwd_config: GoogleDWDConfig key_id: str provider_key: str - def __init__(self, provider: _Optional[_Union[ConnectionProvider, str]] = ..., type: _Optional[_Union[ConnectionType, str]] = ..., debug_enabled: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., ui_button_title: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., configuration_type: _Optional[_Union[ConfigurationType, str]] = ..., attribute_mapping: _Optional[_Mapping[str, str]] = ..., oidc_config: _Optional[_Union[OIDCConnectionConfig, _Mapping]] = ..., saml_config: _Optional[_Union[SAMLConnectionConfigRequest, _Mapping]] = ..., oauth_config: _Optional[_Union[OAuthConnectionConfig, _Mapping]] = ..., passwordless_config: _Optional[_Union[PasswordLessConfig, _Mapping]] = ..., static_config: _Optional[_Union[StaticAuthConfig, _Mapping]] = ..., webauthn_config: _Optional[_Union[WebAuthConfiguration, _Mapping]] = ..., google_dwd_config: _Optional[_Union[GoogleDWDConfig, _Mapping]] = ..., key_id: _Optional[str] = ..., provider_key: _Optional[str] = ...) -> None: ... + def __init__(self, provider: _Optional[_Union[ConnectionProvider, str]] = ..., type: _Optional[_Union[ConnectionType, str]] = ..., debug_enabled: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., ui_button_title: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., configuration_type: _Optional[_Union[ConfigurationType, str]] = ..., attribute_mapping: _Optional[_Mapping[str, str]] = ..., oidc_config: _Optional[_Union[OIDCConnectionConfig, _Mapping]] = ..., saml_config: _Optional[_Union[SAMLConnectionConfigRequest, _Mapping]] = ..., oauth_config: _Optional[_Union[OAuthConnectionConfig, _Mapping]] = ..., passwordless_config: _Optional[_Union[PasswordLessConfig, _Mapping]] = ..., static_config: _Optional[_Union[StaticAuthConfig, _Mapping]] = ..., webauthn_config: _Optional[_Union[WebAuthConfiguration, _Mapping]] = ..., key_id: _Optional[str] = ..., provider_key: _Optional[str] = ...) -> None: ... class UpdateConnectionResponse(_message.Message): __slots__ = ("connection",) @@ -624,16 +618,6 @@ class OptionalScopes(_message.Message): field_name: str def __init__(self, scopes: _Optional[_Iterable[str]] = ..., field_name: _Optional[str] = ...) -> None: ... -class GoogleDWDConfig(_message.Message): - __slots__ = ("service_account_json", "scopes", "token_uri") - SERVICE_ACCOUNT_JSON_FIELD_NUMBER: _ClassVar[int] - SCOPES_FIELD_NUMBER: _ClassVar[int] - TOKEN_URI_FIELD_NUMBER: _ClassVar[int] - service_account_json: _wrappers_pb2.StringValue - scopes: _containers.RepeatedScalarFieldContainer[str] - token_uri: _wrappers_pb2.StringValue - def __init__(self, service_account_json: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., scopes: _Optional[_Iterable[str]] = ..., token_uri: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ...) -> None: ... - class PasswordLessConfig(_message.Message): __slots__ = ("type", "frequency", "validity", "enforce_same_browser_origin", "code_challenge_length", "code_challenge_type", "regenerate_passwordless_credentials_on_resend") TYPE_FIELD_NUMBER: _ClassVar[int] diff --git a/scalekit/v1/organizations/organizations_pb2.py b/scalekit/v1/organizations/organizations_pb2.py index 99e3422..0112e24 100644 --- a/scalekit/v1/organizations/organizations_pb2.py +++ b/scalekit/v1/organizations/organizations_pb2.py @@ -28,7 +28,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n-scalekit/v1/organizations/organizations.proto\x12\x19scalekit.v1.organizations\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"\xaf\x01\n\x19\x43reateOrganizationRequest\x12\x91\x01\n\x0corganization\x18\x01 \x01(\x0b\x32-.scalekit.v1.organizations.CreateOrganizationB>\x92\x41\x35\x32\x33Required parameters for creating a new organization\xbaH\x03\xc8\x01\x01R\x0corganization\"\xb9\x01\n\x1a\x43reateOrganizationResponse\x12\x9a\x01\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationBM\x92\x41J2HThe newly created organization containing its ID, settings, and metadataR\x0corganization\"\xf8\x07\n\x12\x43reateOrganization\x12\x84\x01\n\x0c\x64isplay_name\x18\x04 \x01(\tBa\x92\x41Q2?Name of the organization. Must be between 1 and 200 characters.J\x0e\"Megasoft Inc\"\xe0\x41\x02\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\xa0\x01\n\x0bregion_code\x18\x05 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeB^\x92\x41L2DGeographic region code for the organization. Currently limited to USJ\x04\"US\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\nregionCode\x12\x9e\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBx\x92\x41u2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x0e\"my_unique_id\"H\x00R\nexternalId\x88\x01\x01\x12r\n\x08metadata\x18\x07 \x03(\x0b\x32;.scalekit.v1.organizations.CreateOrganization.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xcc\x02\n\x04slug\x18\t \x01(\tB\xb2\x02\x92\x41\x84\x02\x32\xd2\x01\x44NS-safe slug for dynamic redirect URI resolution (e.g. acme for https://acme.example.com/callback). Lowercase alphanumeric and hyphens, 1-63 chars, must start and end with alphanumeric, unique per environment.J\x06\"acme\"x?\x80\x01\x01\x8a\x01\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$\xbaH\'r%\x10\x01\x18?2\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$H\x01R\x04slug\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idB\x07\n\x05_slug\"\xf8\n\n\x0cOrganization\x12{\n\x02id\x18\x01 \x01(\tBk\x92\x41h2MUnique scalekit-generated identifier that uniquely references an organizationJ\x17\"org_59615193906282635\"R\x02id\x12\x8c\x01\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBO\x92\x41I2+Timestamp when the organization was createdJ\x1a\"2025-02-15T06:23:44.560Z\"\xe0\x41\x02R\ncreateTime\x12\x8e\x01\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBQ\x92\x41N20Timestamp when the organization was last updatedJ\x1a\"2025-02-15T06:23:44.560Z\"R\nupdateTime\x12|\n\x0c\x64isplay_name\x18\x04 \x01(\tBY\x92\x41L2>Name of the organization. Must be between 1 and 200 charactersJ\n\"Megasoft\"\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\x92\x01\n\x0bregion_code\x18\x05 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeBP\x92\x41M2EGeographic region code for the organization. Currently limited to US.J\x04\"US\"R\nregionCode\x12\x9e\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBx\x92\x41u2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x0e\"my_unique_id\"H\x00R\nexternalId\x88\x01\x01\x12l\n\x08metadata\x18\x07 \x03(\x0b\x32\x35.scalekit.v1.organizations.Organization.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12K\n\x08settings\x18\x08 \x01(\x0b\x32/.scalekit.v1.organizations.OrganizationSettingsR\x08settings\x12\x85\x02\n\x04slug\x18\t \x01(\tB\xeb\x01\x92\x41\xe7\x01\x32\xb5\x01\x44NS-safe slug for dynamic redirect URI resolution. Must be 1-63 chars, lowercase alphanumeric and hyphens, must start and end with an alphanumeric character. Unique per environment.J\x06\"acme\"x?\x80\x01\x01\x8a\x01\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$H\x01R\x04slug\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idB\x07\n\x05_slug\"\xe0\x03\n\x19UpdateOrganizationRequest\x12j\n\x02id\x18\x01 \x01(\tBX\x92\x41L23Unique identifier of the organization to be updatedJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\x85\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tBb\x92\x41I2-External ID of the organization to be updatedJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x83\x01\n\x0corganization\x18\x03 \x01(\x0b\x32-.scalekit.v1.organizations.UpdateOrganizationB0\x92\x41\'2%Organization Parameters to be updated\xbaH\x03\xc8\x01\x01R\x0corganization\x12;\n\x0bupdate_mask\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskR\nupdateMaskB\x0c\n\nidentities\"\x87\x08\n\x12UpdateOrganization\x12\x9e\x01\n\x0c\x64isplay_name\x18\x04 \x01(\tBv\x92\x41i2SName of the organization to display in the UI. Must be between 1 and 200 charactersJ\x12\"Acme Corporation\"\xbaH\x07r\x05\x10\x01\x18\xc8\x01H\x00R\x0b\x64isplayName\x88\x01\x01\x12\x9d\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBw\x92\x41t2bYour application\'s unique identifier for this organization, used to link Scalekit with your systemJ\x0e\"tenant_12345\"H\x01R\nexternalId\x88\x01\x01\x12\xa5\x02\n\x08metadata\x18\x07 \x03(\x0b\x32;.scalekit.v1.organizations.UpdateOrganization.MetadataEntryB\xcb\x01\x92\x41\xae\x01\x32\x8f\x01\x43ustom key-value pairs to store with the organization. Keys must be 3-25 characters, values must be 1-256 characters. Maximum 10 pairs allowed.J\x1a{\"industry\": \"technology\"}\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\x9a\x02\n\x04slug\x18\t \x01(\tB\x80\x02\x92\x41\xd2\x01\x32\xa0\x01\x44NS-safe slug for dynamic redirect URI resolution. Lowercase alphanumeric and hyphens, 1-63 chars, must start and end with alphanumeric, unique per environment.J\x06\"acme\"x?\x80\x01\x01\x8a\x01\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$\xbaH\'r%\x10\x01\x18?2\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$H\x02R\x04slug\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0f\n\r_display_nameB\x0e\n\x0c_external_idB\x07\n\x05_slugJ\x04\x08\x05\x10\x06\"\x8c\x01\n\x1aUpdateOrganizationResponse\x12n\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationB!\x92\x41\x1e\x32\x1cUpdated organization detailsR\x0corganization\"\xeb\x02\n\x16GetOrganizationRequest\x12\x84\x01\n\x02id\x18\x01 \x01(\tBr\x92\x41\x66\x32MUnique scalekit-generated identifier that uniquely references an organizationJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\xbb\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\x97\x01\x92\x41~2bUnique identifier that links an Organization Object to your app\'s tenant, stored as an External IDJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalIdB\x0c\n\nidentities\"\x8b\x01\n\x17GetOrganizationResponse\x12p\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationB#\x92\x41 2\x1eThe newly created organizationR\x0corganization\"\xe0\x05\n\x18ListOrganizationsRequest\x12t\n\tpage_size\x18\x01 \x01(\rBW\x92\x41T2NMaximum number of organizations to return per page. Must be between 10 and 100J\x02\x33\x30R\x08pageSize\x12\x8f\x01\n\npage_token\x18\x02 \x01(\tBp\x92\x41m2[Pagination token from the previous response. Use to retrieve the next page of organizationsJ\x0e\"\"R\tpageToken\x12\xa8\x01\n\x0b\x65xternal_id\x18\x03 \x01(\tB\x81\x01\x92\x41~2bYour application\'s unique identifier for this organization, used to link Scalekit with your systemJ\x18\"\"H\x00R\nexternalId\x88\x01\x01:\x80\x02\x92\x41\xfc\x01\n\xab\x01*\x12List Organizations2\x94\x01Retrieves a paginated list of all organizations within the environment. Use the `page_token` from the response to access subsequent pages of results*L\n\x12List Organizations\x12\x36https://docs.scalekit.com/reference/list-organizationsB\x0e\n\x0c_external_id\"\xa4\x04\n\x19ListOrganizationsResponse\x12\x97\x01\n\x0fnext_page_token\x18\x01 \x01(\tBo\x92\x41l2UPagination token for the next page of results. Use this token to fetch the next page.J\x13\"\"R\rnextPageToken\x12Y\n\ntotal_size\x18\x02 \x01(\rB:\x92\x41\x37\x32\x31Total number of organizations in the environment.J\x02\x33\x30R\ttotalSize\x12p\n\rorganizations\x18\x03 \x03(\x0b\x32\'.scalekit.v1.organizations.OrganizationB!\x92\x41\x1e\x32\x1cList of organization objectsR\rorganizations\x12\x9f\x01\n\x0fprev_page_token\x18\x04 \x01(\tBw\x92\x41t2]Pagination token for the previous page of results. Use this token to fetch the previous page.J\x13\"\"R\rprevPageToken\"\xa7\x05\n\x1aSearchOrganizationsRequest\x12\xa5\x01\n\x05query\x18\x01 \x01(\tB\x8e\x01\x92\x41\x7f\x32wSearch term to match against organization names, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\x04\x61\x63me\xbaH\tr\x04\x10\x03\x18\x64\xc8\x01\x01R\x05query\x12\x80\x01\n\tpage_size\x18\x02 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x03 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken:\xb5\x01\x92\x41\xb1\x01\n\x88\x01*\x14Search Organizations2pSearch for organizations in your environment using a text query that matches against names, IDs, or external IDs2$query=acme&page_size=30&page_token=1\"\xdb\x01\n\x1bSearchOrganizationsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12M\n\rorganizations\x18\x03 \x03(\x0b\x32\'.scalekit.v1.organizations.OrganizationR\rorganizations\x12&\n\x0fprev_page_token\x18\x04 \x01(\tR\rprevPageToken\"\xad\x02\n\x19\x44\x65leteOrganizationRequest\x12~\n\x02id\x18\x01 \x01(\tBl\x92\x41`2MUnique scalekit-generated identifier that uniquely references an organizationJ\x0f\"org_123456789\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\x81\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB^\x92\x41\x45\x32)External ID of the organization to deleteJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalIdB\x0c\n\nidentities\"\xcf\x04\n\x19GeneratePortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12(\n\x03sso\x18\x02 \x01(\x08\x42\x11\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\x03sso\x88\x01\x01\x12=\n\x0e\x64irectory_sync\x18\x03 \x01(\x08\x42\x11\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\rdirectorySync\x88\x01\x01\x12\xdd\x02\n\x08\x66\x65\x61tures\x18\x04 \x03(\x0e\x32\".scalekit.v1.organizations.FeatureB\x9c\x02\x92\x41\x98\x02\x32\x95\x02\x46\x65\x61tures to enable in the admin portal link. To enable features, append them as URL parameters:\n\n- Single Sign-On: ?features=sso\n- Directory Sync: ?features=dir_sync\n- Both features: ?features=sso&features=dir_sync\n\nExample URL: https://scalekit.com/portal/lnk_123?features=ssoR\x08\x66\x65\x61turesB\x06\n\x04_ssoB\x11\n\x0f_directory_sync\"f\n\x14GetPortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\"i\n\x17\x44\x65letePortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\"\xbe\x01\n\x1b\x44\x65letePortalLinkByIdRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12O\n\x07link_id\x18\x02 \x01(\tB6\x92\x41!2\x07Link IDJ\x16\"lnk_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04lnk_\xc8\x01\x01R\x06linkId\"\xb5\x03\n\x04Link\x12J\n\x02id\x18\x01 \x01(\tB:\x92\x41\x37\x32\x1eUnique Identifier for the linkJ\x15\"lnk_123123123123123\"R\x02id\x12\xc7\x01\n\x08location\x18\x02 \x01(\tB\xaa\x01\x92\x41\xa6\x01\x32qLocation of the link. This is the URL that can be used to access the Admin portal. The link is valid for 1 minuteJ1\"https://scalekit.com/portal/lnk_123123123123123\"R\x08location\x12\x96\x01\n\x0b\x65xpire_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBY\x92\x41V28Expiry time of the link. The link is valid for 1 minute.J\x1a\"2024-02-06T14:48:00.000Z\"R\nexpireTime\"\x96\x02\n\x1aGeneratePortalLinkResponse\x12\xf7\x01\n\x04link\x18\x01 \x01(\x0b\x32\x1f.scalekit.v1.organizations.LinkB\xc1\x01\x92\x41\xbd\x01\x32\xba\x01\x43ontains the generated admin portal link details. The link URL can be shared with organization administrators to set up: Single Sign-On (SSO) authentication and directory synchronizationR\x04link\"h\n\x16GetPortalLinksResponse\x12N\n\x05links\x18\x01 \x03(\x0b\x32\x1f.scalekit.v1.organizations.LinkB\x17\x92\x41\x14\x32\x12\x41\x64min Portal LinksR\x05links\"\x90\x04\n!UpdateOrganizationSettingsRequest\x12\x97\x01\n\x02id\x18\x01 \x01(\tB\x86\x01\x92\x41q2WUnique identifier of the organization to update settings. Must begin with \'org_\' prefixJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12\xd0\x02\n\x08settings\x18\x02 \x01(\x0b\x32/.scalekit.v1.organizations.OrganizationSettingsB\x82\x02\x92\x41\xf8\x01\x32\x95\x01Settings configuration to apply to the organization. Contains feature toggles for SSO, directory synchronization, and other organization capabilitiesJ^{\"features\": [{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]}\xbaH\x03\xc8\x01\x01R\x08settings\"\x91\x0c\n!OrganizationSessionPolicySettings\x12\x92\x02\n\rpolicy_source\x18\x01 \x01(\x0e\x32,.scalekit.v1.organizations.SessionPolicyTypeB\xbe\x01\x92\x41\xaf\x01\x32\xa2\x01Policy source. \'APPLICATION\' means the organization inherits the application-level session policy. \'CUSTOM\' means organization-specific timeout values are active.J\x08\"CUSTOM\"\xbaH\x08\x82\x01\x05\x10\x01\"\x01\x00R\x0cpolicySource\x12\xec\x01\n\x18\x61\x62solute_session_timeout\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x94\x01\x92\x41\x90\x01\x32\x88\x01The absolute session timeout value. The unit is specified by absolute_session_timeout_unit. Omitted when policy_source is \'environment\'.J\x03\x33\x36\x30R\x16\x61\x62soluteSessionTimeout\x12\xea\x01\n\x1d\x61\x62solute_session_timeout_unit\x18\x03 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitB\x82\x01\x92\x41\x7f\x32rUnit for absolute_session_timeout. Accepted values: \'minutes\', \'hours\', \'days\'. Responses always return \'minutes\'.J\t\"minutes\"H\x00R\x1a\x61\x62soluteSessionTimeoutUnit\x88\x01\x01\x12\xd3\x01\n\x1cidle_session_timeout_enabled\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBv\x92\x41s2kWhether idle session timeout is enabled for this organization. Omitted when policy_source is \'environment\'.J\x04trueR\x19idleSessionTimeoutEnabled\x12\x84\x02\n\x14idle_session_timeout\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xb4\x01\x92\x41\xb0\x01\x32\xa9\x01The idle session timeout value. The unit is specified by idle_session_timeout_unit. Omitted when idle_session_timeout_enabled is false or policy_source is \'environment\'.J\x02\x38\x34R\x12idleSessionTimeout\x12\xdd\x01\n\x19idle_session_timeout_unit\x18\x06 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitB~\x92\x41{2nUnit for idle_session_timeout. Accepted values: \'minutes\', \'hours\', \'days\'. Responses always return \'minutes\'.J\t\"minutes\"H\x01R\x16idleSessionTimeoutUnit\x88\x01\x01\x42 \n\x1e_absolute_session_timeout_unitB\x1c\n\x1a_idle_session_timeout_unit\"\xd4\x01\n#GetOrganizationSessionPolicyRequest\x12\xac\x01\n\x0forganization_id\x18\x01 \x01(\tB\x82\x01\x92\x41m2RThe unique identifier of the organization whose session policy is being requested.J\x17\"org_59615193906282635\"\xe0\x41\x02\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\"\xac\x01\n$GetOrganizationSessionPolicyResponse\x12\x83\x01\n\x06policy\x18\x01 \x01(\x0b\x32<.scalekit.v1.organizations.OrganizationSessionPolicySettingsB-\x92\x41*2(The session policy for the organization.R\x06policy\"\xb7\x0c\n&UpdateOrganizationSessionPolicyRequest\x12\xaa\x01\n\x0forganization_id\x18\x01 \x01(\tB\x80\x01\x92\x41k2PThe unique identifier of the organization whose session policy is being updated.J\x17\"org_59615193906282635\"\xe0\x41\x02\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xe8\x01\n\rpolicy_source\x18\x02 \x01(\x0e\x32,.scalekit.v1.organizations.SessionPolicyTypeB\x94\x01\x92\x41\x90\x01\x32\x83\x01Policy source. Send \'APPLICATION\' to revert to application defaults. Send \'CUSTOM\' with timeout values to activate a custom policy.J\x08\"CUSTOM\"R\x0cpolicySource\x12\xe7\x01\n\x18\x61\x62solute_session_timeout\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x8f\x01\x92\x41\x8b\x01\x32\x83\x01The absolute session timeout value. The unit is specified by absolute_session_timeout_unit. Omit when policy_source is APPLICATION.J\x03\x33\x36\x30R\x16\x61\x62soluteSessionTimeout\x12\xdb\x01\n\x1d\x61\x62solute_session_timeout_unit\x18\x04 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitBt\x92\x41q2dUnit for absolute_session_timeout. Accepted values: \'MINUTES\', \'HOURS\', \'DAYS\'. Defaults to MINUTES.J\t\"MINUTES\"H\x00R\x1a\x61\x62soluteSessionTimeoutUnit\x88\x01\x01\x12\xb8\x01\n\x1cidle_session_timeout_enabled\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB[\x92\x41X2PWhether idle session timeout is enabled. Omit when policy_source is APPLICATION.J\x04trueR\x19idleSessionTimeoutEnabled\x12\xdf\x01\n\x14idle_session_timeout\x18\x06 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x8f\x01\x92\x41\x8b\x01\x32\x84\x01The idle session timeout value. The unit is specified by idle_session_timeout_unit. Omit when idle_session_timeout_enabled is false.J\x02\x38\x34R\x12idleSessionTimeout\x12\xcf\x01\n\x19idle_session_timeout_unit\x18\x07 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitBp\x92\x41m2`Unit for idle_session_timeout. Accepted values: \'MINUTES\', \'HOURS\', \'DAYS\'. Defaults to MINUTES.J\t\"MINUTES\"H\x01R\x16idleSessionTimeoutUnit\x88\x01\x01\x42 \n\x1e_absolute_session_timeout_unitB\x1c\n\x1a_idle_session_timeout_unit\"\xb7\x01\n\'UpdateOrganizationSessionPolicyResponse\x12\x8b\x01\n\x06policy\x18\x01 \x01(\x0b\x32<.scalekit.v1.organizations.OrganizationSessionPolicySettingsB5\x92\x41\x32\x32\x30The updated session policy for the organization.R\x06policy\"\xaa\x01\n\"GetApplicationSessionPolicyRequest\x12\x83\x01\n\x0forganization_id\x18\x01 \x01(\tBZ\x92\x41\x45\x32*The unique identifier of the organization.J\x17\"org_59615193906282635\"\xe0\x41\x02\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\"\xb1\t\n ApplicationSessionPolicySettings\x12\x9a\x01\n\x18\x61\x62solute_session_timeout\x18\x01 \x01(\x05\x42`\x92\x41]2VAbsolute session timeout value in the unit specified by absolute_session_timeout_unit.J\x03\x34\x38\x30R\x16\x61\x62soluteSessionTimeout\x12\x8e\x01\n\x1cidle_session_timeout_enabled\x18\x02 \x01(\x08\x42M\x92\x41J2AWhether idle session timeout is enabled at the application level.J\x05\x66\x61lseR\x19idleSessionTimeoutEnabled\x12\xad\x01\n\x14idle_session_timeout\x18\x03 \x01(\x05\x42{\x92\x41x2rIdle session timeout value in the unit specified by idle_session_timeout_unit. Zero when idle timeout is disabled.J\x02\x36\x30R\x12idleSessionTimeout\x12~\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x04 \x01(\x05\x42N\x92\x41K2FAccess token expiry in minutes. Custom policy values must exceed this.J\x01\x35R\x11\x61\x63\x63\x65ssTokenExpiry\x12\xe0\x01\n\x1d\x61\x62solute_session_timeout_unit\x18\x05 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitBy\x92\x41v2iUnit for absolute_session_timeout. Reflects the unit configured for the application-level session policy.J\t\"MINUTES\"H\x00R\x1a\x61\x62soluteSessionTimeoutUnit\x88\x01\x01\x12\x8b\x02\n\x19idle_session_timeout_unit\x18\x06 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitB\xab\x01\x92\x41\xa7\x01\x32\x99\x01Unit for idle_session_timeout. Reflects the unit configured for the application-level session policy. Omitted when idle_session_timeout_enabled is false.J\t\"MINUTES\"H\x01R\x16idleSessionTimeoutUnit\x88\x01\x01\x42 \n\x1e_absolute_session_timeout_unitB\x1c\n\x1a_idle_session_timeout_unit\"\xd1\x01\n#GetApplicationSessionPolicyResponse\x12\xa9\x01\n\x12\x61pplication_policy\x18\x01 \x01(\x0b\x32;.scalekit.v1.organizations.ApplicationSessionPolicySettingsB=\x92\x41:28The effective application-level session policy settings.R\x11\x61pplicationPolicy\"\xdc\x02\n\"OrganizationUserManagementSettings\x12\xb5\x02\n\x11max_allowed_users\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xeb\x01\x92\x41\xe7\x01\x32\xdf\x01Maximum number of users allowed in the organization. When nil (not set), there feature is not enabled. When explicitly set to zero, it also means no limit. When set to a positive integer, it enforces the maximum user limit.J\x03\x31\x30\x30R\x0fmaxAllowedUsers\"\xae\x08\n\x1bOrganizationSessionSettings\x12\xfe\x01\n\x18\x61\x62solute_session_timeout\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xa6\x01\x92\x41\xa2\x01\x32\x98\x01The maximum duration in seconds that a session can remain active, regardless of activity. After this time, the user will be required to re-authenticate.J\x05\x38\x36\x34\x30\x30R\x16\x61\x62soluteSessionTimeout\x12\xd4\x01\n\x14idle_session_timeout\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x84\x01\x92\x41\x80\x01\x32xThe duration in seconds that a session can remain idle before it is automatically terminated. Activity resets the timer.J\x04\x31\x38\x30\x30R\x12idleSessionTimeout\x12\x8e\x02\n\x1cidle_session_timeout_enabled\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xb0\x01\x92\x41\xac\x01\x32\xa3\x01Whether idle session timeout is enabled for this organization. When enabled, sessions expire after the idle timeout duration regardless of the environment setting.J\x04trueR\x19idleSessionTimeoutEnabled\x12\xe7\x01\n\rpolicy_source\x18\x06 \x01(\tB\xc1\x01\x92\x41\xbd\x01\x32\xb0\x01Policy source for this organization. APPLICATION means the organization inherits application-level session policy. CUSTOM means organization-specific timeout values are active.J\x08\"CUSTOM\"R\x0cpolicySourceJ\x04\x08\x02\x10\x03J\x04\x08\x04\x10\x05R\x1asession_management_enabledR\x14idle_session_enabled\"\x8e\x04\n\x14OrganizationSettings\x12\xa4\x02\n\x08\x66\x65\x61tures\x18\x01 \x03(\x0b\x32\x36.scalekit.v1.organizations.OrganizationSettingsFeatureB\xcf\x01\x92\x41\xcb\x01\x32wList of feature toggles that control organization capabilities such as SSO authentication and directory synchronizationJP[{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]R\x08\x66\x65\x61tures:\xce\x01\x92\x41\xca\x01\nh*\x15Organization Settings2OConfiguration options that control organization-level features and capabilities2^{\"features\": [{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]}\"\x8e\x04\n\x1bOrganizationSettingsFeature\x12\x81\x02\n\x04name\x18\x01 \x01(\tB\xec\x01\x92\x41\xe8\x01\x32\xde\x01\x46\x65\x61ture identifier. Supported values include: \"sso\" (Single Sign-On), \"directory_sync\" (Directory Synchronization), \"domain_verification\" (Domain Verification), \"session_policy\" (Organization-level session policy override)J\x05\"sso\"R\x04name\x12t\n\x07\x65nabled\x18\x02 \x01(\x08\x42Z\x92\x41W2OWhether the feature is enabled (true) or disabled (false) for this organizationJ\x04trueR\x07\x65nabled:u\x92\x41r\np*\x1bOrganization Feature Toggle2@Controls the activation state of a specific organization feature\xd2\x01\x04name\xd2\x01\x07\x65nabled\"\x96\x02\n#UpsertUserManagementSettingsRequest\x12W\n\x0forganization_id\x18\x01 \x01(\tB.\x92\x41\x19\x32\x17ID of the organization.\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\x12\x95\x01\n\x08settings\x18\x02 \x01(\x0b\x32=.scalekit.v1.organizations.OrganizationUserManagementSettingsB:\x92\x41\x31\x32/The new values for the setting fields to patch.\xbaH\x03\xc8\x01\x01R\x08settings\"\x9c\x01\n$UpsertUserManagementSettingsResponse\x12t\n\x08settings\x18\x01 \x01(\x0b\x32=.scalekit.v1.organizations.OrganizationUserManagementSettingsB\x19\x92\x41\x16\x32\x14The updated setting.R\x08settings\"\x87\x01\n,GetOrganizationUserManagementSettingsRequest\x12W\n\x0forganization_id\x18\x01 \x01(\tB.\x92\x41\x19\x32\x17ID of the organization.\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\"\xaf\x01\n-GetOrganizationUserManagementSettingsResponse\x12~\n\x08settings\x18\x01 \x01(\x0b\x32=.scalekit.v1.organizations.OrganizationUserManagementSettingsB#\x92\x41 2\x1eList of organization settings.R\x08settings*R\n\x07\x46\x65\x61ture\x12\x17\n\x13\x46\x45\x41TURE_UNSPECIFIED\x10\x00\x12\x13\n\x0bUNSPECIFIED\x10\x00\x1a\x02\x08\x01\x12\x0c\n\x08\x64ir_sync\x10\x01\x12\x07\n\x03sso\x10\x02\x1a\x02\x10\x01*U\n\x11SessionPolicyType\x12#\n\x1fSESSION_POLICY_TYPE_UNSPECIFIED\x10\x00\x12\x0f\n\x0b\x41PPLICATION\x10\x01\x12\n\n\x06\x43USTOM\x10\x02\x32\xaaP\n\x13OrganizationService\x12\x88\x04\n\x12\x43reateOrganization\x12\x34.scalekit.v1.organizations.CreateOrganizationRequest\x1a\x35.scalekit.v1.organizations.CreateOrganizationResponse\"\x84\x03\x92\x41\xcf\x02\n\rOrganizations\x12\x16\x43reate an organization\x1a\x8f\x01\x43reates a new organization in your environment. Use this endpoint to add a new tenant that can be configured with various settings and metadataJ\x93\x01\n\x03\x32\x30\x31\x12\x8b\x01\nNReturns the newly created organization with its unique identifier and settings\x12\x39\n7\x1a\x35.scalekit.v1.organizations.CreateOrganizationResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02%\"\x15/api/v1/organizations:\x0corganization\x12\xbf\x04\n\x12UpdateOrganization\x12\x34.scalekit.v1.organizations.UpdateOrganizationRequest\x1a\x35.scalekit.v1.organizations.UpdateOrganizationResponse\"\xbb\x03\x92\x41\xec\x02\n\rOrganizations\x12\x1bUpdate organization details\x1a\xa1\x01Updates an organization\'s display name, external ID, or metadata. Requires a valid organization identifier. Region code cannot be modified through this endpoint.J\x99\x01\n\x03\x32\x30\x30\x12\x91\x01\nTReturns the updated organization with all current details reflected in the response.\x12\x39\n7\x1a\x35.scalekit.v1.organizations.UpdateOrganizationResponse\x82\xb5\x18\x17\n\x13organizations_write\x18T\x82\xd3\xe4\x93\x02*2\x1a/api/v1/organizations/{id}:\x0corganization\x12\xde\x03\n\x0fGetOrganization\x12\x31.scalekit.v1.organizations.GetOrganizationRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xe3\x02\x92\x41\xa3\x02\n\rOrganizations\x12\x18Get organization details\x1a]Retrieves organization details by Scalekit ID, including name, region, metadata, and settingsJ\x98\x01\n\x03\x32\x30\x30\x12\x90\x01\nVReturns the complete organization object with ID, display name, settings, and metadata\x12\x36\n4\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/organizations/{id}\x12\xd3\x05\n\x1bGetOrganizationByExternalId\x12\x31.scalekit.v1.organizations.GetOrganizationRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xcc\x04\x92\x41\xfa\x03\n\rOrganizations\x12\'Get organization details by external Id\x1a]Retrieves organization details by External ID, including name, region, metadata, and settingsJ\xa4\x01\n\x03\x32\x30\x30\x12\x9c\x01\nbReturns the complete organization object with ID, display name, settings, external ID and metadata\x12\x36\n4\x1a\x32.scalekit.v1.organizations.GetOrganizationResponseJa\n\x03\x34\x30\x30\x12Z\nXInvalid request - external ID is empty or the caller\'s organization claim does not matchJW\n\x03\x34\x30\x34\x12P\nNOrganization not found - no organization exists with the specified external ID\x82\xb5\x18\x16\n\x12organizations_read\x18\x04\x82\xd3\xe4\x93\x02.\x12,/api/v1/organizations:external/{external_id}\x12\xc2\t\n\x10ListOrganization\x12\x33.scalekit.v1.organizations.ListOrganizationsRequest\x1a\x34.scalekit.v1.organizations.ListOrganizationsResponse\"\xc2\x08\x92\x41\x9b\x08\n\rOrganizations\x12\x12List organizations\x1a\xa0\x01Retrieve a paginated list of organizations within your environment. The response includes a `page_token` that can be used to access subsequent pages of results.Js\n\x03\x32\x30\x30\x12l\n0Successfully retrieved the list of organizations\x12\x38\n6\x1a\x34.scalekit.v1.organizations.ListOrganizationsResponseJ\x1b\n\x03\x34\x30\x30\x12\x14\n\x12Invalid page tokenj\xc0\x05\n\rx-codeSamples\x12\xae\x05\x32\xab\x05\n\x97\x01*\x94\x01\n\x16\n\x05label\x12\r\x1a\x0bNode.js SDK\n\x14\n\x04lang\x12\x0c\x1a\njavascript\nd\n\x06source\x12Z\x1aXconst organizations = await scalekit.organization.listOrganization({\n pageSize: 10,\n});\n\xc0\x01*\xbd\x01\n\x15\n\x05label\x12\x0c\x1a\nPython SDK\n\x10\n\x04lang\x12\x08\x1a\x06python\n\x91\x01\n\x06source\x12\x86\x01\x1a\x83\x01options = ListOrganizationOptions()\noptions.page_size = 10\n\norganizations = sc.organization.list_organizations(\n options=options\n)\n\xaf\x01*\xac\x01\n\x11\n\x05label\x12\x08\x1a\x06Go SDK\n\x0c\n\x04lang\x12\x04\x1a\x02go\n\x88\x01\n\x06source\x12~\x1a|organizations, err := sc.Organization.ListOrganizations(\n ctx,\n &scalekit.ListOrganizationOptions{\n PageSize: 10,\n }\n)\n\x99\x01*\x96\x01\n\x13\n\x05label\x12\n\x1a\x08Java SDK\n\x0e\n\x04lang\x12\x06\x1a\x04java\no\n\x06source\x12\x65\x1a\x63ListOrganizationsResponse organizations = scalekitClient.organizations().listOrganizations(10, \"\");\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x17\x12\x15/api/v1/organizations\x12\xf1\x04\n\x12SearchOrganization\x12\x35.scalekit.v1.organizations.SearchOrganizationsRequest\x1a\x36.scalekit.v1.organizations.SearchOrganizationsResponse\"\xeb\x03\x92\x41\xae\x03\n\rOrganizations\x12\x14Search organizations\x1a\xd4\x01Searches for organizations in your environment using a query string. The query matches against organization name, ID, or external ID. Returns multiple results when more than one organization matches the criteria.J\xaf\x01\n\x03\x32\x30\x30\x12\xa7\x01\niReturns a list of matching organizations and a page token for pagination if there are additional results.\x12:\n8\x1a\x36.scalekit.v1.organizations.SearchOrganizationsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\x12\x1c/api/v1/organizations:search\x12\xcf\x02\n\x12\x44\x65leteOrganization\x12\x34.scalekit.v1.organizations.DeleteOrganizationRequest\x1a\x16.google.protobuf.Empty\"\xea\x01\x92\x41\xbe\x01\n\rOrganizations\x12\x16\x44\x65lete an organization\x1aPRemove an existing organization from the environment using its unique identifierJC\n\x03\x32\x30\x30\x12<\n:Organization successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1c*\x1a/api/v1/organizations/{id}\x12\xe2\x04\n\x12GeneratePortalLink\x12\x34.scalekit.v1.organizations.GeneratePortalLinkRequest\x1a\x35.scalekit.v1.organizations.GeneratePortalLinkResponse\"\xde\x03\x92\x41\xa5\x03\n\rOrganizations\x12\x1aGenerate admin portal link\x1a\xd5\x01\x43reates a single use Admin Portal URL valid for 1 minute. Once the generated admin portal URL is accessed or rendered, a temporary session of 6 hours is created to allow the admin to update SSO/SCIM configuration.J\x9f\x01\n\x03\x32\x30\x30\x12\x97\x01\nZAdmin Portal link generated successfully. Returns the portal URL and expiration timestamp.\x12\x39\n7\x1a\x35.scalekit.v1.organizations.GeneratePortalLinkResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02)\x1a\'/api/v1/organizations/{id}/portal_links\x12\xa0\x02\n\x10\x44\x65letePortalLink\x12\x32.scalekit.v1.organizations.DeletePortalLinkRequest\x1a\x16.google.protobuf.Empty\"\xbf\x01\x92\x41x\n\x0c\x41\x64min Portal\x12\x12\x44\x65lete portal link\x1a)Revokes and deletes an Admin portal link.J)\n\x03\x32\x30\x30\x12\"\n Portal link deleted successfully\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)*\'/api/v1/organizations/{id}/portal_links\x12\x9f\x02\n\x14\x44\x65letePortalLinkByID\x12\x36.scalekit.v1.organizations.DeletePortalLinkByIdRequest\x1a\x16.google.protobuf.Empty\"\xb6\x01\x92\x41\x65\n\x0c\x41\x64min Portal\x12\x18\x44\x65lete admin portal link\x1a)Revokes and deletes an Admin portal link.J\x10\n\x03\x32\x30\x30\x12\t\n\x07Success\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x33*1/api/v1/organizations/{id}/portal_links/{link_id}\x12\x88\x03\n\x0eGetPortalLinks\x12/.scalekit.v1.organizations.GetPortalLinkRequest\x1a\x31.scalekit.v1.organizations.GetPortalLinksResponse\"\x91\x02\x92\x41\xc9\x01\n\x0c\x41\x64min Portal\x12\x0fGet portal link\x1a_Returns the Admin portal link if it exists. Use Generate Portal link to create and fetch a linkJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.organizations.GetPortalLinksResponse\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)\x12\'/api/v1/organizations/{id}/portal_links\x12\xfa\x06\n\x1aUpdateOrganizationSettings\x12<.scalekit.v1.organizations.UpdateOrganizationSettingsRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xe9\x05\x92\x41\xaa\x05\n\rOrganizations\x12\x1cToggle organization settings\x1a\xd3\x01Updates configuration settings for an organization. Supports modifying SSO configuration, directory synchronization settings, and session parameters. Requires organization ID and the specific settings to update.J\xe3\x01\n\x03\x32\x30\x30\x12\xdb\x01\n\xa0\x01Returns the complete organization object with updated settings applied. Contains all organization details including ID, display name, and the modified settings.\x12\x36\n4\x1a\x32.scalekit.v1.organizations.GetOrganizationResponseJp\n\x03\x34\x30\x30\x12i\ngInvalid request - occurs when the settings payload contains invalid values or unsupported configurationJM\n\x03\x34\x30\x34\x12\x46\nDOrganization not found - the specified organization ID doesn\'t exist\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02/2#/api/v1/organizations/{id}/settings:\x08settings\x12\xd0\x05\n\x1fUpdateOrganizationSessionPolicy\x12\x41.scalekit.v1.organizations.UpdateOrganizationSessionPolicyRequest\x1a\x42.scalekit.v1.organizations.UpdateOrganizationSessionPolicyResponse\"\xa5\x04\x92\x41\xbc\x03\n\rOrganizations\x12\"Update organization session policy\x1a\xed\x01Sets a custom session policy for an organization or reverts to application-level settings. Send session_policy=\'APPLICATION\' to revert to application defaults. Send session_policy=\'CUSTOM\' with timeout values to activate a custom policy.Ju\n\x03\x32\x30\x30\x12n\n$Session policy updated successfully.\x12\x46\nD\x1a\x42.scalekit.v1.organizations.UpdateOrganizationSessionPolicyResponseJ \n\x03\x34\x30\x34\x12\x19\n\x17Organization not found.\x82\xb5\x18 \n\x1corganizations_sessions_write\x18T\x82\xd3\xe4\x93\x02;26/api/v1/organizations/{organization_id}/session-policy:\x01*\x12\xb9\x05\n\x1cGetOrganizationSessionPolicy\x12>.scalekit.v1.organizations.GetOrganizationSessionPolicyRequest\x1a?.scalekit.v1.organizations.GetOrganizationSessionPolicyResponse\"\x97\x04\x92\x41\xb2\x03\n\rOrganizations\x12\x1fGet organization session policy\x1a\xe7\x01Retrieves the session policy for an organization. Returns session_policy=\'APPLICATION\' if the organization inherits the application-level defaults, or session_policy=\'CUSTOM\' with the configured values if a custom policy is active.Jt\n\x03\x32\x30\x30\x12m\n&Session policy retrieved successfully.\x12\x43\nA\x1a?.scalekit.v1.organizations.GetOrganizationSessionPolicyResponseJ \n\x03\x34\x30\x34\x12\x19\n\x17Organization not found.\x82\xb5\x18\x1f\n\x1borganizations_sessions_read\x18T\x82\xd3\xe4\x93\x02\x38\x12\x36/api/v1/organizations/{organization_id}/session-policy\x12\xd5\x03\n\x1cUpsertUserManagementSettings\x12>.scalekit.v1.organizations.UpsertUserManagementSettingsRequest\x1a?.scalekit.v1.organizations.UpsertUserManagementSettingsResponse\"\xb3\x02\x92\x41\xdf\x01\n\rOrganizations\x12 Upsert organization user setting\x1a\x33Upsert user management settings for an organizationJw\n\x03\x32\x30\x30\x12p\n)Returns the updated organization setting.\x12\x43\nA\x1a?.scalekit.v1.organizations.UpsertUserManagementSettingsResponse\x82\xb5\x18\x02\x18\x64\x82\xd3\xe4\x93\x02\x44\x32?/api/v1/organizations/{organization_id}/settings/usermanagement:\x01*\x12\x9f\x04\n$GetOrganizationUserManagementSetting\x12G.scalekit.v1.organizations.GetOrganizationUserManagementSettingsRequest\x1aH.scalekit.v1.organizations.GetOrganizationUserManagementSettingsResponse\"\xe3\x02\x92\x41\x83\x02\n\rOrganizations\x12(Get organization user management setting\x1a\x43Retrieves the user management settings for a specific organization.J\x82\x01\n\x03\x32\x30\x30\x12{\n+Returns the requested organization setting.\x12L\nJ\x1aH.scalekit.v1.organizations.GetOrganizationUserManagementSettingsResponse\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x41\x12?/api/v1/organizations/{organization_id}/settings/usermanagement\x12\xee\x05\n\x1bGetApplicationSessionPolicy\x12=.scalekit.v1.organizations.GetApplicationSessionPolicyRequest\x1a>.scalekit.v1.organizations.GetApplicationSessionPolicyResponse\"\xcf\x04\x92\x41\xcf\x03\n\rOrganizations\x12/Get application session policy for organization\x1a\xa6\x01Returns the application-level session settings for display in hosted pages. Includes absolute timeout, idle timeout configuration, and access token expiry in minutes.J\x7f\n\x03\x32\x30\x30\x12x\n2Application session policy retrieved successfully.\x12\x42\n@\x1a>.scalekit.v1.organizations.GetApplicationSessionPolicyResponseJA\n\x03\x34\x30\x33\x12:\n8Session policy feature not enabled for this environment.J \n\x03\x34\x30\x34\x12\x19\n\x17Organization not found.\x82\xb5\x18\x1f\n\x1borganizations_sessions_read\x18T\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x44\x12\x42/api/v1/organizations/{organization_id}/application-session-policy\x1aX\x92\x41U\n\rOrganizations\x12\x44{{import \"proto/scalekit/v1/organizations/organization_details.md\"}}B\xa9\'Z7github.com/scalekit-inc/scalekit/pkg/grpc/organizations\x92\x41\xec&\x12\x92\"\n\rScalekit APIs\x12\x83!# Introduction\n\nThe Scalekit API is a RESTful API that enables you to manage organizations, users, and authentication settings. All requests must use HTTPS.\nAll API requests use the following base URLs:\n\n```\nhttps://{environment}.scalekit.dev (Development)\nhttps://{environment}.scalekit.com (Production)\nhttps://auth.example.com (Custom domain)\n```\n\nScalekit operates two separate environments: Development and Production. Resources cannot be moved between environments.\n\n# Authentication\n\nThe Scalekit API uses OAuth 2.0 Client Credentials for authentication.\n\nCopy your API credentials from the Scalekit dashboard\'s API Config section and set them as environment variables.\n\n```sh\nSCALEKIT_ENVIRONMENT_URL=\'\'\nSCALEKIT_CLIENT_ID=\'\'\nSCALEKIT_CLIENT_SECRET=\'\'\n```\n\nGetting an access token\n\n1. Get your credentials from the [Scalekit Dashboard](https://app.scalekit.com)\n2. Request an access token:\n\n```sh\ncurl https://{SCALEKIT_ENVIRONMENT_URL}/oauth/token \\\n -X POST \\\n -H \'Content-Type: application/x-www-form-urlencoded\' \\\n -d \'client_id={client_id}\' \\\n -d \'client_secret={client_secret}\' \\\n -d \'grant_type=client_credentials\'\n```\n\n3. Use the access token in API requests:\n\n```sh\ncurl https://{SCALEKIT_ENVIRONMENT_URL}/api/v1/organizations \\\n -H \'Content-Type: application/json\' \\\n -H \'Authorization: Bearer {access_token}\'\n```\n\nThe response includes an access token:\n\n```json\n{\n\t\"access_token\": \"eyJhbGciOiJSUzI1NiIsImtpZCI6InNua181Ok4OTEyMjU2NiIsInR5cCI6IkpXVCJ9...\",\n\t\"token_type\": \"Bearer\",\n\t\"expires_in\": 86399,\n\t\"scope\": \"openid\"\n}\n```\n\n# SDKs\n\nScalekit provides official SDKs for multiple programming languages. Check the changelog at GitHub repositories for the latest updates.\n\n### Node.js\n\n```sh\nnpm install @scalekit-sdk/node\n```\n\nCreate a new Scalekit client instance after initializing the environment variables\n\n```js\nimport { Scalekit } from \"@scalekit-sdk/node\";\n\nexport let scalekit = new Scalekit(\n\tprocess.env.SCALEKIT_ENVIRONMENT_URL,\n\tprocess.env.SCALEKIT_CLIENT_ID,\n\tprocess.env.SCALEKIT_CLIENT_SECRET\n);\n```\n\n[See the Node SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-node/releases)\n\n### Python\n\n```sh\npip install scalekit-sdk-python\n```\n\nCreate a new Scalekit client instance after initializing the environment variables.\n\n```py\nfrom scalekit import ScalekitClient\nimport os\n\nscalekit_client = ScalekitClient(\n os.environ.get(\'SCALEKIT_ENVIRONMENT_URL\'),\n os.environ.get(\'SCALEKIT_CLIENT_ID\'),\n os.environ.get(\'SCALEKIT_CLIENT_SECRET\')\n)\n```\n\n[See the Python SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-python/releases)\n\n### Go\n\n```sh\ngo get -u github.com/scalekit-inc/scalekit-sdk-go\n```\n\nCreate a new Scalekit client instance after initializing the environment variables.\n\n```go\npackage main\n\nimport (\n \"os\"\n \"github.com/scalekit-inc/scalekit-sdk-go\"\n)\n\nscalekitClient := scalekit.NewScalekitClient(\n os.Getenv(\"SCALEKIT_ENVIRONMENT_URL\"),\n os.Getenv(\"SCALEKIT_CLIENT_ID\"),\n os.Getenv(\"SCALEKIT_CLIENT_SECRET\"),\n)\n```\n\n[See the Go SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-go/releases)\n\n### Java\n\n```gradle\n/* Gradle users - add the following to your dependencies in build file */\nimplementation \"com.scalekit:scalekit-sdk-java:2.0.6\"\n```\n\n```xml\n\n\n com.scalekit\n scalekit-sdk-java\n 2.0.6\n\n```\n\n[See the Java SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-java/releases)\n\n# Error handling\n\nThe API uses standard HTTP status codes:\n\n| Code | Description |\n| ----------- | -------------------- |\n| 200/201 | Success |\n| 400 | Invalid request |\n| 401 | Authentication error |\n| 404 | Resource not found |\n| 429 | Rate limit exceeded |\n| 500/501/504 | Server error |\n\nError responses include detailed information:\n\n```json\n{\n\t\"code\": 16,\n\t\"message\": \"Token empty\",\n\t\"details\": [\n\t\t{\n\t\t\t\"@type\": \"type.googleapis.com/scalekit.v1.errdetails.ErrorInfo\",\n\t\t\t\"error_code\": \"UNAUTHENTICATED\"\n\t\t}\n\t]\n}\n```\n\n\":\n\x0cScalekit Inc\x12\x14https://scalekit.com\x1a\x14support@scalekit.com*8\n\nApache 2.0\x12*http://www.apache.org/licenses/LICENSE-2.02\x05\x31.0.0\x1a\x19$SCALEKIT_ENVIRONMENT_URL*\x01\x02\x32\x10\x61pplication/json:\x10\x61pplication/jsonj\x0f\n\rOrganizationsj\xd4\x03\n\x0bPermissions\x12\xc4\x03Permission management for defining and controlling access to system resources. Create, retrieve, update, and delete granular permissions that represent specific actions users can perform. Permissions are the building blocks of role-based access control (RBAC) and can be assigned to roles to grant users the ability to perform specific operations. Use this service to define custom permissions for your application\'s unique access control requirements.r+\n\rScalekit Docs\x12\x1ahttps://docs.scalekit.com/b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n-scalekit/v1/organizations/organizations.proto\x12\x19scalekit.v1.organizations\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"\xaf\x01\n\x19\x43reateOrganizationRequest\x12\x91\x01\n\x0corganization\x18\x01 \x01(\x0b\x32-.scalekit.v1.organizations.CreateOrganizationB>\x92\x41\x35\x32\x33Required parameters for creating a new organization\xbaH\x03\xc8\x01\x01R\x0corganization\"\xb9\x01\n\x1a\x43reateOrganizationResponse\x12\x9a\x01\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationBM\x92\x41J2HThe newly created organization containing its ID, settings, and metadataR\x0corganization\"\xf8\x07\n\x12\x43reateOrganization\x12\x84\x01\n\x0c\x64isplay_name\x18\x04 \x01(\tBa\x92\x41Q2?Name of the organization. Must be between 1 and 200 characters.J\x0e\"Megasoft Inc\"\xe0\x41\x02\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\xa0\x01\n\x0bregion_code\x18\x05 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeB^\x92\x41L2DGeographic region code for the organization. Currently limited to USJ\x04\"US\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\nregionCode\x12\x9e\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBx\x92\x41u2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x0e\"my_unique_id\"H\x00R\nexternalId\x88\x01\x01\x12r\n\x08metadata\x18\x07 \x03(\x0b\x32;.scalekit.v1.organizations.CreateOrganization.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xcc\x02\n\x04slug\x18\t \x01(\tB\xb2\x02\x92\x41\x84\x02\x32\xd2\x01\x44NS-safe slug for dynamic redirect URI resolution (e.g. acme for https://acme.example.com/callback). Lowercase alphanumeric and hyphens, 1-63 chars, must start and end with alphanumeric, unique per environment.J\x06\"acme\"x?\x80\x01\x01\x8a\x01\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$\xbaH\'r%\x10\x01\x18?2\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$H\x01R\x04slug\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idB\x07\n\x05_slug\"\xf8\n\n\x0cOrganization\x12{\n\x02id\x18\x01 \x01(\tBk\x92\x41h2MUnique scalekit-generated identifier that uniquely references an organizationJ\x17\"org_59615193906282635\"R\x02id\x12\x8c\x01\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBO\x92\x41I2+Timestamp when the organization was createdJ\x1a\"2025-02-15T06:23:44.560Z\"\xe0\x41\x02R\ncreateTime\x12\x8e\x01\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBQ\x92\x41N20Timestamp when the organization was last updatedJ\x1a\"2025-02-15T06:23:44.560Z\"R\nupdateTime\x12|\n\x0c\x64isplay_name\x18\x04 \x01(\tBY\x92\x41L2>Name of the organization. Must be between 1 and 200 charactersJ\n\"Megasoft\"\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\x92\x01\n\x0bregion_code\x18\x05 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeBP\x92\x41M2EGeographic region code for the organization. Currently limited to US.J\x04\"US\"R\nregionCode\x12\x9e\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBx\x92\x41u2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x0e\"my_unique_id\"H\x00R\nexternalId\x88\x01\x01\x12l\n\x08metadata\x18\x07 \x03(\x0b\x32\x35.scalekit.v1.organizations.Organization.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12K\n\x08settings\x18\x08 \x01(\x0b\x32/.scalekit.v1.organizations.OrganizationSettingsR\x08settings\x12\x85\x02\n\x04slug\x18\t \x01(\tB\xeb\x01\x92\x41\xe7\x01\x32\xb5\x01\x44NS-safe slug for dynamic redirect URI resolution. Must be 1-63 chars, lowercase alphanumeric and hyphens, must start and end with an alphanumeric character. Unique per environment.J\x06\"acme\"x?\x80\x01\x01\x8a\x01\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$H\x01R\x04slug\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idB\x07\n\x05_slug\"\xe0\x03\n\x19UpdateOrganizationRequest\x12j\n\x02id\x18\x01 \x01(\tBX\x92\x41L23Unique identifier of the organization to be updatedJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\x85\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tBb\x92\x41I2-External ID of the organization to be updatedJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x83\x01\n\x0corganization\x18\x03 \x01(\x0b\x32-.scalekit.v1.organizations.UpdateOrganizationB0\x92\x41\'2%Organization Parameters to be updated\xbaH\x03\xc8\x01\x01R\x0corganization\x12;\n\x0bupdate_mask\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskR\nupdateMaskB\x0c\n\nidentities\"\x87\x08\n\x12UpdateOrganization\x12\x9e\x01\n\x0c\x64isplay_name\x18\x04 \x01(\tBv\x92\x41i2SName of the organization to display in the UI. Must be between 1 and 200 charactersJ\x12\"Acme Corporation\"\xbaH\x07r\x05\x10\x01\x18\xc8\x01H\x00R\x0b\x64isplayName\x88\x01\x01\x12\x9d\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBw\x92\x41t2bYour application\'s unique identifier for this organization, used to link Scalekit with your systemJ\x0e\"tenant_12345\"H\x01R\nexternalId\x88\x01\x01\x12\xa5\x02\n\x08metadata\x18\x07 \x03(\x0b\x32;.scalekit.v1.organizations.UpdateOrganization.MetadataEntryB\xcb\x01\x92\x41\xae\x01\x32\x8f\x01\x43ustom key-value pairs to store with the organization. Keys must be 3-25 characters, values must be 1-256 characters. Maximum 10 pairs allowed.J\x1a{\"industry\": \"technology\"}\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\x9a\x02\n\x04slug\x18\t \x01(\tB\x80\x02\x92\x41\xd2\x01\x32\xa0\x01\x44NS-safe slug for dynamic redirect URI resolution. Lowercase alphanumeric and hyphens, 1-63 chars, must start and end with alphanumeric, unique per environment.J\x06\"acme\"x?\x80\x01\x01\x8a\x01\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$\xbaH\'r%\x10\x01\x18?2\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$H\x02R\x04slug\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0f\n\r_display_nameB\x0e\n\x0c_external_idB\x07\n\x05_slugJ\x04\x08\x05\x10\x06\"\x8c\x01\n\x1aUpdateOrganizationResponse\x12n\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationB!\x92\x41\x1e\x32\x1cUpdated organization detailsR\x0corganization\"\xeb\x02\n\x16GetOrganizationRequest\x12\x84\x01\n\x02id\x18\x01 \x01(\tBr\x92\x41\x66\x32MUnique scalekit-generated identifier that uniquely references an organizationJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\xbb\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\x97\x01\x92\x41~2bUnique identifier that links an Organization Object to your app\'s tenant, stored as an External IDJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalIdB\x0c\n\nidentities\"\x8b\x01\n\x17GetOrganizationResponse\x12p\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationB#\x92\x41 2\x1eThe newly created organizationR\x0corganization\"\xe0\x05\n\x18ListOrganizationsRequest\x12t\n\tpage_size\x18\x01 \x01(\rBW\x92\x41T2NMaximum number of organizations to return per page. Must be between 10 and 100J\x02\x33\x30R\x08pageSize\x12\x8f\x01\n\npage_token\x18\x02 \x01(\tBp\x92\x41m2[Pagination token from the previous response. Use to retrieve the next page of organizationsJ\x0e\"\"R\tpageToken\x12\xa8\x01\n\x0b\x65xternal_id\x18\x03 \x01(\tB\x81\x01\x92\x41~2bYour application\'s unique identifier for this organization, used to link Scalekit with your systemJ\x18\"\"H\x00R\nexternalId\x88\x01\x01:\x80\x02\x92\x41\xfc\x01\n\xab\x01*\x12List Organizations2\x94\x01Retrieves a paginated list of all organizations within the environment. Use the `page_token` from the response to access subsequent pages of results*L\n\x12List Organizations\x12\x36https://docs.scalekit.com/reference/list-organizationsB\x0e\n\x0c_external_id\"\xa4\x04\n\x19ListOrganizationsResponse\x12\x97\x01\n\x0fnext_page_token\x18\x01 \x01(\tBo\x92\x41l2UPagination token for the next page of results. Use this token to fetch the next page.J\x13\"\"R\rnextPageToken\x12Y\n\ntotal_size\x18\x02 \x01(\rB:\x92\x41\x37\x32\x31Total number of organizations in the environment.J\x02\x33\x30R\ttotalSize\x12p\n\rorganizations\x18\x03 \x03(\x0b\x32\'.scalekit.v1.organizations.OrganizationB!\x92\x41\x1e\x32\x1cList of organization objectsR\rorganizations\x12\x9f\x01\n\x0fprev_page_token\x18\x04 \x01(\tBw\x92\x41t2]Pagination token for the previous page of results. Use this token to fetch the previous page.J\x13\"\"R\rprevPageToken\"\xa7\x05\n\x1aSearchOrganizationsRequest\x12\xa5\x01\n\x05query\x18\x01 \x01(\tB\x8e\x01\x92\x41\x7f\x32wSearch term to match against organization names, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\x04\x61\x63me\xbaH\tr\x04\x10\x03\x18\x64\xc8\x01\x01R\x05query\x12\x80\x01\n\tpage_size\x18\x02 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x03 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken:\xb5\x01\x92\x41\xb1\x01\n\x88\x01*\x14Search Organizations2pSearch for organizations in your environment using a text query that matches against names, IDs, or external IDs2$query=acme&page_size=30&page_token=1\"\xdb\x01\n\x1bSearchOrganizationsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12M\n\rorganizations\x18\x03 \x03(\x0b\x32\'.scalekit.v1.organizations.OrganizationR\rorganizations\x12&\n\x0fprev_page_token\x18\x04 \x01(\tR\rprevPageToken\"\xad\x02\n\x19\x44\x65leteOrganizationRequest\x12~\n\x02id\x18\x01 \x01(\tBl\x92\x41`2MUnique scalekit-generated identifier that uniquely references an organizationJ\x0f\"org_123456789\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\x81\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB^\x92\x41\x45\x32)External ID of the organization to deleteJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalIdB\x0c\n\nidentities\"\xcf\x04\n\x19GeneratePortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12(\n\x03sso\x18\x02 \x01(\x08\x42\x11\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\x03sso\x88\x01\x01\x12=\n\x0e\x64irectory_sync\x18\x03 \x01(\x08\x42\x11\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\rdirectorySync\x88\x01\x01\x12\xdd\x02\n\x08\x66\x65\x61tures\x18\x04 \x03(\x0e\x32\".scalekit.v1.organizations.FeatureB\x9c\x02\x92\x41\x98\x02\x32\x95\x02\x46\x65\x61tures to enable in the admin portal link. To enable features, append them as URL parameters:\n\n- Single Sign-On: ?features=sso\n- Directory Sync: ?features=dir_sync\n- Both features: ?features=sso&features=dir_sync\n\nExample URL: https://scalekit.com/portal/lnk_123?features=ssoR\x08\x66\x65\x61turesB\x06\n\x04_ssoB\x11\n\x0f_directory_sync\"f\n\x14GetPortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\"i\n\x17\x44\x65letePortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\"\xbe\x01\n\x1b\x44\x65letePortalLinkByIdRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12O\n\x07link_id\x18\x02 \x01(\tB6\x92\x41!2\x07Link IDJ\x16\"lnk_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04lnk_\xc8\x01\x01R\x06linkId\"\xb5\x03\n\x04Link\x12J\n\x02id\x18\x01 \x01(\tB:\x92\x41\x37\x32\x1eUnique Identifier for the linkJ\x15\"lnk_123123123123123\"R\x02id\x12\xc7\x01\n\x08location\x18\x02 \x01(\tB\xaa\x01\x92\x41\xa6\x01\x32qLocation of the link. This is the URL that can be used to access the Admin portal. The link is valid for 1 minuteJ1\"https://scalekit.com/portal/lnk_123123123123123\"R\x08location\x12\x96\x01\n\x0b\x65xpire_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBY\x92\x41V28Expiry time of the link. The link is valid for 1 minute.J\x1a\"2024-02-06T14:48:00.000Z\"R\nexpireTime\"\x96\x02\n\x1aGeneratePortalLinkResponse\x12\xf7\x01\n\x04link\x18\x01 \x01(\x0b\x32\x1f.scalekit.v1.organizations.LinkB\xc1\x01\x92\x41\xbd\x01\x32\xba\x01\x43ontains the generated admin portal link details. The link URL can be shared with organization administrators to set up: Single Sign-On (SSO) authentication and directory synchronizationR\x04link\"h\n\x16GetPortalLinksResponse\x12N\n\x05links\x18\x01 \x03(\x0b\x32\x1f.scalekit.v1.organizations.LinkB\x17\x92\x41\x14\x32\x12\x41\x64min Portal LinksR\x05links\"\x90\x04\n!UpdateOrganizationSettingsRequest\x12\x97\x01\n\x02id\x18\x01 \x01(\tB\x86\x01\x92\x41q2WUnique identifier of the organization to update settings. Must begin with \'org_\' prefixJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12\xd0\x02\n\x08settings\x18\x02 \x01(\x0b\x32/.scalekit.v1.organizations.OrganizationSettingsB\x82\x02\x92\x41\xf8\x01\x32\x95\x01Settings configuration to apply to the organization. Contains feature toggles for SSO, directory synchronization, and other organization capabilitiesJ^{\"features\": [{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]}\xbaH\x03\xc8\x01\x01R\x08settings\"\x91\x0c\n!OrganizationSessionPolicySettings\x12\x92\x02\n\rpolicy_source\x18\x01 \x01(\x0e\x32,.scalekit.v1.organizations.SessionPolicyTypeB\xbe\x01\x92\x41\xaf\x01\x32\xa2\x01Policy source. \'APPLICATION\' means the organization inherits the application-level session policy. \'CUSTOM\' means organization-specific timeout values are active.J\x08\"CUSTOM\"\xbaH\x08\x82\x01\x05\x10\x01\"\x01\x00R\x0cpolicySource\x12\xec\x01\n\x18\x61\x62solute_session_timeout\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x94\x01\x92\x41\x90\x01\x32\x88\x01The absolute session timeout value. The unit is specified by absolute_session_timeout_unit. Omitted when policy_source is \'environment\'.J\x03\x33\x36\x30R\x16\x61\x62soluteSessionTimeout\x12\xea\x01\n\x1d\x61\x62solute_session_timeout_unit\x18\x03 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitB\x82\x01\x92\x41\x7f\x32rUnit for absolute_session_timeout. Accepted values: \'minutes\', \'hours\', \'days\'. Responses always return \'minutes\'.J\t\"minutes\"H\x00R\x1a\x61\x62soluteSessionTimeoutUnit\x88\x01\x01\x12\xd3\x01\n\x1cidle_session_timeout_enabled\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBv\x92\x41s2kWhether idle session timeout is enabled for this organization. Omitted when policy_source is \'environment\'.J\x04trueR\x19idleSessionTimeoutEnabled\x12\x84\x02\n\x14idle_session_timeout\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xb4\x01\x92\x41\xb0\x01\x32\xa9\x01The idle session timeout value. The unit is specified by idle_session_timeout_unit. Omitted when idle_session_timeout_enabled is false or policy_source is \'environment\'.J\x02\x38\x34R\x12idleSessionTimeout\x12\xdd\x01\n\x19idle_session_timeout_unit\x18\x06 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitB~\x92\x41{2nUnit for idle_session_timeout. Accepted values: \'minutes\', \'hours\', \'days\'. Responses always return \'minutes\'.J\t\"minutes\"H\x01R\x16idleSessionTimeoutUnit\x88\x01\x01\x42 \n\x1e_absolute_session_timeout_unitB\x1c\n\x1a_idle_session_timeout_unit\"\xd4\x01\n#GetOrganizationSessionPolicyRequest\x12\xac\x01\n\x0forganization_id\x18\x01 \x01(\tB\x82\x01\x92\x41m2RThe unique identifier of the organization whose session policy is being requested.J\x17\"org_59615193906282635\"\xe0\x41\x02\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\"\xac\x01\n$GetOrganizationSessionPolicyResponse\x12\x83\x01\n\x06policy\x18\x01 \x01(\x0b\x32<.scalekit.v1.organizations.OrganizationSessionPolicySettingsB-\x92\x41*2(The session policy for the organization.R\x06policy\"\xb7\x0c\n&UpdateOrganizationSessionPolicyRequest\x12\xaa\x01\n\x0forganization_id\x18\x01 \x01(\tB\x80\x01\x92\x41k2PThe unique identifier of the organization whose session policy is being updated.J\x17\"org_59615193906282635\"\xe0\x41\x02\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xe8\x01\n\rpolicy_source\x18\x02 \x01(\x0e\x32,.scalekit.v1.organizations.SessionPolicyTypeB\x94\x01\x92\x41\x90\x01\x32\x83\x01Policy source. Send \'APPLICATION\' to revert to application defaults. Send \'CUSTOM\' with timeout values to activate a custom policy.J\x08\"CUSTOM\"R\x0cpolicySource\x12\xe7\x01\n\x18\x61\x62solute_session_timeout\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x8f\x01\x92\x41\x8b\x01\x32\x83\x01The absolute session timeout value. The unit is specified by absolute_session_timeout_unit. Omit when policy_source is APPLICATION.J\x03\x33\x36\x30R\x16\x61\x62soluteSessionTimeout\x12\xdb\x01\n\x1d\x61\x62solute_session_timeout_unit\x18\x04 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitBt\x92\x41q2dUnit for absolute_session_timeout. Accepted values: \'MINUTES\', \'HOURS\', \'DAYS\'. Defaults to MINUTES.J\t\"MINUTES\"H\x00R\x1a\x61\x62soluteSessionTimeoutUnit\x88\x01\x01\x12\xb8\x01\n\x1cidle_session_timeout_enabled\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB[\x92\x41X2PWhether idle session timeout is enabled. Omit when policy_source is APPLICATION.J\x04trueR\x19idleSessionTimeoutEnabled\x12\xdf\x01\n\x14idle_session_timeout\x18\x06 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x8f\x01\x92\x41\x8b\x01\x32\x84\x01The idle session timeout value. The unit is specified by idle_session_timeout_unit. Omit when idle_session_timeout_enabled is false.J\x02\x38\x34R\x12idleSessionTimeout\x12\xcf\x01\n\x19idle_session_timeout_unit\x18\x07 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitBp\x92\x41m2`Unit for idle_session_timeout. Accepted values: \'MINUTES\', \'HOURS\', \'DAYS\'. Defaults to MINUTES.J\t\"MINUTES\"H\x01R\x16idleSessionTimeoutUnit\x88\x01\x01\x42 \n\x1e_absolute_session_timeout_unitB\x1c\n\x1a_idle_session_timeout_unit\"\xb7\x01\n\'UpdateOrganizationSessionPolicyResponse\x12\x8b\x01\n\x06policy\x18\x01 \x01(\x0b\x32<.scalekit.v1.organizations.OrganizationSessionPolicySettingsB5\x92\x41\x32\x32\x30The updated session policy for the organization.R\x06policy\"\xaa\x01\n\"GetApplicationSessionPolicyRequest\x12\x83\x01\n\x0forganization_id\x18\x01 \x01(\tBZ\x92\x41\x45\x32*The unique identifier of the organization.J\x17\"org_59615193906282635\"\xe0\x41\x02\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\"\x9e\x04\n ApplicationSessionPolicySettings\x12h\n\x18\x61\x62solute_session_timeout\x18\x01 \x01(\x05\x42.\x92\x41+2$Absolute session timeout in minutes.J\x03\x34\x38\x30R\x16\x61\x62soluteSessionTimeout\x12\x8e\x01\n\x1cidle_session_timeout_enabled\x18\x02 \x01(\x08\x42M\x92\x41J2AWhether idle session timeout is enabled at the application level.J\x05\x66\x61lseR\x19idleSessionTimeoutEnabled\x12\x7f\n\x14idle_session_timeout\x18\x03 \x01(\x05\x42M\x92\x41J2DIdle session timeout in minutes. Zero when idle timeout is disabled.J\x02\x36\x30R\x12idleSessionTimeout\x12~\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x04 \x01(\x05\x42N\x92\x41K2FAccess token expiry in minutes. Custom policy values must exceed this.J\x01\x35R\x11\x61\x63\x63\x65ssTokenExpiry\"\xd1\x01\n#GetApplicationSessionPolicyResponse\x12\xa9\x01\n\x12\x61pplication_policy\x18\x01 \x01(\x0b\x32;.scalekit.v1.organizations.ApplicationSessionPolicySettingsB=\x92\x41:28The effective application-level session policy settings.R\x11\x61pplicationPolicy\"\xdc\x02\n\"OrganizationUserManagementSettings\x12\xb5\x02\n\x11max_allowed_users\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xeb\x01\x92\x41\xe7\x01\x32\xdf\x01Maximum number of users allowed in the organization. When nil (not set), there feature is not enabled. When explicitly set to zero, it also means no limit. When set to a positive integer, it enforces the maximum user limit.J\x03\x31\x30\x30R\x0fmaxAllowedUsers\"\xae\x08\n\x1bOrganizationSessionSettings\x12\xfe\x01\n\x18\x61\x62solute_session_timeout\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xa6\x01\x92\x41\xa2\x01\x32\x98\x01The maximum duration in seconds that a session can remain active, regardless of activity. After this time, the user will be required to re-authenticate.J\x05\x38\x36\x34\x30\x30R\x16\x61\x62soluteSessionTimeout\x12\xd4\x01\n\x14idle_session_timeout\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x84\x01\x92\x41\x80\x01\x32xThe duration in seconds that a session can remain idle before it is automatically terminated. Activity resets the timer.J\x04\x31\x38\x30\x30R\x12idleSessionTimeout\x12\x8e\x02\n\x1cidle_session_timeout_enabled\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xb0\x01\x92\x41\xac\x01\x32\xa3\x01Whether idle session timeout is enabled for this organization. When enabled, sessions expire after the idle timeout duration regardless of the environment setting.J\x04trueR\x19idleSessionTimeoutEnabled\x12\xe7\x01\n\rpolicy_source\x18\x06 \x01(\tB\xc1\x01\x92\x41\xbd\x01\x32\xb0\x01Policy source for this organization. APPLICATION means the organization inherits application-level session policy. CUSTOM means organization-specific timeout values are active.J\x08\"CUSTOM\"R\x0cpolicySourceJ\x04\x08\x02\x10\x03J\x04\x08\x04\x10\x05R\x1asession_management_enabledR\x14idle_session_enabled\"\x8e\x04\n\x14OrganizationSettings\x12\xa4\x02\n\x08\x66\x65\x61tures\x18\x01 \x03(\x0b\x32\x36.scalekit.v1.organizations.OrganizationSettingsFeatureB\xcf\x01\x92\x41\xcb\x01\x32wList of feature toggles that control organization capabilities such as SSO authentication and directory synchronizationJP[{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]R\x08\x66\x65\x61tures:\xce\x01\x92\x41\xca\x01\nh*\x15Organization Settings2OConfiguration options that control organization-level features and capabilities2^{\"features\": [{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]}\"\x8e\x04\n\x1bOrganizationSettingsFeature\x12\x81\x02\n\x04name\x18\x01 \x01(\tB\xec\x01\x92\x41\xe8\x01\x32\xde\x01\x46\x65\x61ture identifier. Supported values include: \"sso\" (Single Sign-On), \"directory_sync\" (Directory Synchronization), \"domain_verification\" (Domain Verification), \"session_policy\" (Organization-level session policy override)J\x05\"sso\"R\x04name\x12t\n\x07\x65nabled\x18\x02 \x01(\x08\x42Z\x92\x41W2OWhether the feature is enabled (true) or disabled (false) for this organizationJ\x04trueR\x07\x65nabled:u\x92\x41r\np*\x1bOrganization Feature Toggle2@Controls the activation state of a specific organization feature\xd2\x01\x04name\xd2\x01\x07\x65nabled\"\x96\x02\n#UpsertUserManagementSettingsRequest\x12W\n\x0forganization_id\x18\x01 \x01(\tB.\x92\x41\x19\x32\x17ID of the organization.\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\x12\x95\x01\n\x08settings\x18\x02 \x01(\x0b\x32=.scalekit.v1.organizations.OrganizationUserManagementSettingsB:\x92\x41\x31\x32/The new values for the setting fields to patch.\xbaH\x03\xc8\x01\x01R\x08settings\"\x9c\x01\n$UpsertUserManagementSettingsResponse\x12t\n\x08settings\x18\x01 \x01(\x0b\x32=.scalekit.v1.organizations.OrganizationUserManagementSettingsB\x19\x92\x41\x16\x32\x14The updated setting.R\x08settings\"\x87\x01\n,GetOrganizationUserManagementSettingsRequest\x12W\n\x0forganization_id\x18\x01 \x01(\tB.\x92\x41\x19\x32\x17ID of the organization.\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\"\xaf\x01\n-GetOrganizationUserManagementSettingsResponse\x12~\n\x08settings\x18\x01 \x01(\x0b\x32=.scalekit.v1.organizations.OrganizationUserManagementSettingsB#\x92\x41 2\x1eList of organization settings.R\x08settings*R\n\x07\x46\x65\x61ture\x12\x17\n\x13\x46\x45\x41TURE_UNSPECIFIED\x10\x00\x12\x13\n\x0bUNSPECIFIED\x10\x00\x1a\x02\x08\x01\x12\x0c\n\x08\x64ir_sync\x10\x01\x12\x07\n\x03sso\x10\x02\x1a\x02\x10\x01*U\n\x11SessionPolicyType\x12#\n\x1fSESSION_POLICY_TYPE_UNSPECIFIED\x10\x00\x12\x0f\n\x0b\x41PPLICATION\x10\x01\x12\n\n\x06\x43USTOM\x10\x02\x32\xaaP\n\x13OrganizationService\x12\x88\x04\n\x12\x43reateOrganization\x12\x34.scalekit.v1.organizations.CreateOrganizationRequest\x1a\x35.scalekit.v1.organizations.CreateOrganizationResponse\"\x84\x03\x92\x41\xcf\x02\n\rOrganizations\x12\x16\x43reate an organization\x1a\x8f\x01\x43reates a new organization in your environment. Use this endpoint to add a new tenant that can be configured with various settings and metadataJ\x93\x01\n\x03\x32\x30\x31\x12\x8b\x01\nNReturns the newly created organization with its unique identifier and settings\x12\x39\n7\x1a\x35.scalekit.v1.organizations.CreateOrganizationResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02%\"\x15/api/v1/organizations:\x0corganization\x12\xbf\x04\n\x12UpdateOrganization\x12\x34.scalekit.v1.organizations.UpdateOrganizationRequest\x1a\x35.scalekit.v1.organizations.UpdateOrganizationResponse\"\xbb\x03\x92\x41\xec\x02\n\rOrganizations\x12\x1bUpdate organization details\x1a\xa1\x01Updates an organization\'s display name, external ID, or metadata. Requires a valid organization identifier. Region code cannot be modified through this endpoint.J\x99\x01\n\x03\x32\x30\x30\x12\x91\x01\nTReturns the updated organization with all current details reflected in the response.\x12\x39\n7\x1a\x35.scalekit.v1.organizations.UpdateOrganizationResponse\x82\xb5\x18\x17\n\x13organizations_write\x18T\x82\xd3\xe4\x93\x02*2\x1a/api/v1/organizations/{id}:\x0corganization\x12\xde\x03\n\x0fGetOrganization\x12\x31.scalekit.v1.organizations.GetOrganizationRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xe3\x02\x92\x41\xa3\x02\n\rOrganizations\x12\x18Get organization details\x1a]Retrieves organization details by Scalekit ID, including name, region, metadata, and settingsJ\x98\x01\n\x03\x32\x30\x30\x12\x90\x01\nVReturns the complete organization object with ID, display name, settings, and metadata\x12\x36\n4\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/organizations/{id}\x12\xd3\x05\n\x1bGetOrganizationByExternalId\x12\x31.scalekit.v1.organizations.GetOrganizationRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xcc\x04\x92\x41\xfa\x03\n\rOrganizations\x12\'Get organization details by external Id\x1a]Retrieves organization details by External ID, including name, region, metadata, and settingsJ\xa4\x01\n\x03\x32\x30\x30\x12\x9c\x01\nbReturns the complete organization object with ID, display name, settings, external ID and metadata\x12\x36\n4\x1a\x32.scalekit.v1.organizations.GetOrganizationResponseJa\n\x03\x34\x30\x30\x12Z\nXInvalid request - external ID is empty or the caller\'s organization claim does not matchJW\n\x03\x34\x30\x34\x12P\nNOrganization not found - no organization exists with the specified external ID\x82\xb5\x18\x16\n\x12organizations_read\x18\x04\x82\xd3\xe4\x93\x02.\x12,/api/v1/organizations:external/{external_id}\x12\xc2\t\n\x10ListOrganization\x12\x33.scalekit.v1.organizations.ListOrganizationsRequest\x1a\x34.scalekit.v1.organizations.ListOrganizationsResponse\"\xc2\x08\x92\x41\x9b\x08\n\rOrganizations\x12\x12List organizations\x1a\xa0\x01Retrieve a paginated list of organizations within your environment. The response includes a `page_token` that can be used to access subsequent pages of results.Js\n\x03\x32\x30\x30\x12l\n0Successfully retrieved the list of organizations\x12\x38\n6\x1a\x34.scalekit.v1.organizations.ListOrganizationsResponseJ\x1b\n\x03\x34\x30\x30\x12\x14\n\x12Invalid page tokenj\xc0\x05\n\rx-codeSamples\x12\xae\x05\x32\xab\x05\n\x97\x01*\x94\x01\n\x16\n\x05label\x12\r\x1a\x0bNode.js SDK\n\x14\n\x04lang\x12\x0c\x1a\njavascript\nd\n\x06source\x12Z\x1aXconst organizations = await scalekit.organization.listOrganization({\n pageSize: 10,\n});\n\xc0\x01*\xbd\x01\n\x15\n\x05label\x12\x0c\x1a\nPython SDK\n\x10\n\x04lang\x12\x08\x1a\x06python\n\x91\x01\n\x06source\x12\x86\x01\x1a\x83\x01options = ListOrganizationOptions()\noptions.page_size = 10\n\norganizations = sc.organization.list_organizations(\n options=options\n)\n\xaf\x01*\xac\x01\n\x11\n\x05label\x12\x08\x1a\x06Go SDK\n\x0c\n\x04lang\x12\x04\x1a\x02go\n\x88\x01\n\x06source\x12~\x1a|organizations, err := sc.Organization.ListOrganizations(\n ctx,\n &scalekit.ListOrganizationOptions{\n PageSize: 10,\n }\n)\n\x99\x01*\x96\x01\n\x13\n\x05label\x12\n\x1a\x08Java SDK\n\x0e\n\x04lang\x12\x06\x1a\x04java\no\n\x06source\x12\x65\x1a\x63ListOrganizationsResponse organizations = scalekitClient.organizations().listOrganizations(10, \"\");\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x17\x12\x15/api/v1/organizations\x12\xf1\x04\n\x12SearchOrganization\x12\x35.scalekit.v1.organizations.SearchOrganizationsRequest\x1a\x36.scalekit.v1.organizations.SearchOrganizationsResponse\"\xeb\x03\x92\x41\xae\x03\n\rOrganizations\x12\x14Search organizations\x1a\xd4\x01Searches for organizations in your environment using a query string. The query matches against organization name, ID, or external ID. Returns multiple results when more than one organization matches the criteria.J\xaf\x01\n\x03\x32\x30\x30\x12\xa7\x01\niReturns a list of matching organizations and a page token for pagination if there are additional results.\x12:\n8\x1a\x36.scalekit.v1.organizations.SearchOrganizationsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\x12\x1c/api/v1/organizations:search\x12\xcf\x02\n\x12\x44\x65leteOrganization\x12\x34.scalekit.v1.organizations.DeleteOrganizationRequest\x1a\x16.google.protobuf.Empty\"\xea\x01\x92\x41\xbe\x01\n\rOrganizations\x12\x16\x44\x65lete an organization\x1aPRemove an existing organization from the environment using its unique identifierJC\n\x03\x32\x30\x30\x12<\n:Organization successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1c*\x1a/api/v1/organizations/{id}\x12\xe2\x04\n\x12GeneratePortalLink\x12\x34.scalekit.v1.organizations.GeneratePortalLinkRequest\x1a\x35.scalekit.v1.organizations.GeneratePortalLinkResponse\"\xde\x03\x92\x41\xa5\x03\n\rOrganizations\x12\x1aGenerate admin portal link\x1a\xd5\x01\x43reates a single use Admin Portal URL valid for 1 minute. Once the generated admin portal URL is accessed or rendered, a temporary session of 6 hours is created to allow the admin to update SSO/SCIM configuration.J\x9f\x01\n\x03\x32\x30\x30\x12\x97\x01\nZAdmin Portal link generated successfully. Returns the portal URL and expiration timestamp.\x12\x39\n7\x1a\x35.scalekit.v1.organizations.GeneratePortalLinkResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02)\x1a\'/api/v1/organizations/{id}/portal_links\x12\xa0\x02\n\x10\x44\x65letePortalLink\x12\x32.scalekit.v1.organizations.DeletePortalLinkRequest\x1a\x16.google.protobuf.Empty\"\xbf\x01\x92\x41x\n\x0c\x41\x64min Portal\x12\x12\x44\x65lete portal link\x1a)Revokes and deletes an Admin portal link.J)\n\x03\x32\x30\x30\x12\"\n Portal link deleted successfully\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)*\'/api/v1/organizations/{id}/portal_links\x12\x9f\x02\n\x14\x44\x65letePortalLinkByID\x12\x36.scalekit.v1.organizations.DeletePortalLinkByIdRequest\x1a\x16.google.protobuf.Empty\"\xb6\x01\x92\x41\x65\n\x0c\x41\x64min Portal\x12\x18\x44\x65lete admin portal link\x1a)Revokes and deletes an Admin portal link.J\x10\n\x03\x32\x30\x30\x12\t\n\x07Success\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x33*1/api/v1/organizations/{id}/portal_links/{link_id}\x12\x88\x03\n\x0eGetPortalLinks\x12/.scalekit.v1.organizations.GetPortalLinkRequest\x1a\x31.scalekit.v1.organizations.GetPortalLinksResponse\"\x91\x02\x92\x41\xc9\x01\n\x0c\x41\x64min Portal\x12\x0fGet portal link\x1a_Returns the Admin portal link if it exists. Use Generate Portal link to create and fetch a linkJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.organizations.GetPortalLinksResponse\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)\x12\'/api/v1/organizations/{id}/portal_links\x12\xfa\x06\n\x1aUpdateOrganizationSettings\x12<.scalekit.v1.organizations.UpdateOrganizationSettingsRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xe9\x05\x92\x41\xaa\x05\n\rOrganizations\x12\x1cToggle organization settings\x1a\xd3\x01Updates configuration settings for an organization. Supports modifying SSO configuration, directory synchronization settings, and session parameters. Requires organization ID and the specific settings to update.J\xe3\x01\n\x03\x32\x30\x30\x12\xdb\x01\n\xa0\x01Returns the complete organization object with updated settings applied. Contains all organization details including ID, display name, and the modified settings.\x12\x36\n4\x1a\x32.scalekit.v1.organizations.GetOrganizationResponseJp\n\x03\x34\x30\x30\x12i\ngInvalid request - occurs when the settings payload contains invalid values or unsupported configurationJM\n\x03\x34\x30\x34\x12\x46\nDOrganization not found - the specified organization ID doesn\'t exist\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02/2#/api/v1/organizations/{id}/settings:\x08settings\x12\xd0\x05\n\x1fUpdateOrganizationSessionPolicy\x12\x41.scalekit.v1.organizations.UpdateOrganizationSessionPolicyRequest\x1a\x42.scalekit.v1.organizations.UpdateOrganizationSessionPolicyResponse\"\xa5\x04\x92\x41\xbc\x03\n\rOrganizations\x12\"Update organization session policy\x1a\xed\x01Sets a custom session policy for an organization or reverts to application-level settings. Send session_policy=\'APPLICATION\' to revert to application defaults. Send session_policy=\'CUSTOM\' with timeout values to activate a custom policy.Ju\n\x03\x32\x30\x30\x12n\n$Session policy updated successfully.\x12\x46\nD\x1a\x42.scalekit.v1.organizations.UpdateOrganizationSessionPolicyResponseJ \n\x03\x34\x30\x34\x12\x19\n\x17Organization not found.\x82\xb5\x18 \n\x1corganizations_sessions_write\x18T\x82\xd3\xe4\x93\x02;26/api/v1/organizations/{organization_id}/session-policy:\x01*\x12\xb9\x05\n\x1cGetOrganizationSessionPolicy\x12>.scalekit.v1.organizations.GetOrganizationSessionPolicyRequest\x1a?.scalekit.v1.organizations.GetOrganizationSessionPolicyResponse\"\x97\x04\x92\x41\xb2\x03\n\rOrganizations\x12\x1fGet organization session policy\x1a\xe7\x01Retrieves the session policy for an organization. Returns session_policy=\'APPLICATION\' if the organization inherits the application-level defaults, or session_policy=\'CUSTOM\' with the configured values if a custom policy is active.Jt\n\x03\x32\x30\x30\x12m\n&Session policy retrieved successfully.\x12\x43\nA\x1a?.scalekit.v1.organizations.GetOrganizationSessionPolicyResponseJ \n\x03\x34\x30\x34\x12\x19\n\x17Organization not found.\x82\xb5\x18\x1f\n\x1borganizations_sessions_read\x18T\x82\xd3\xe4\x93\x02\x38\x12\x36/api/v1/organizations/{organization_id}/session-policy\x12\xd5\x03\n\x1cUpsertUserManagementSettings\x12>.scalekit.v1.organizations.UpsertUserManagementSettingsRequest\x1a?.scalekit.v1.organizations.UpsertUserManagementSettingsResponse\"\xb3\x02\x92\x41\xdf\x01\n\rOrganizations\x12 Upsert organization user setting\x1a\x33Upsert user management settings for an organizationJw\n\x03\x32\x30\x30\x12p\n)Returns the updated organization setting.\x12\x43\nA\x1a?.scalekit.v1.organizations.UpsertUserManagementSettingsResponse\x82\xb5\x18\x02\x18\x64\x82\xd3\xe4\x93\x02\x44\x32?/api/v1/organizations/{organization_id}/settings/usermanagement:\x01*\x12\x9f\x04\n$GetOrganizationUserManagementSetting\x12G.scalekit.v1.organizations.GetOrganizationUserManagementSettingsRequest\x1aH.scalekit.v1.organizations.GetOrganizationUserManagementSettingsResponse\"\xe3\x02\x92\x41\x83\x02\n\rOrganizations\x12(Get organization user management setting\x1a\x43Retrieves the user management settings for a specific organization.J\x82\x01\n\x03\x32\x30\x30\x12{\n+Returns the requested organization setting.\x12L\nJ\x1aH.scalekit.v1.organizations.GetOrganizationUserManagementSettingsResponse\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x41\x12?/api/v1/organizations/{organization_id}/settings/usermanagement\x12\xee\x05\n\x1bGetApplicationSessionPolicy\x12=.scalekit.v1.organizations.GetApplicationSessionPolicyRequest\x1a>.scalekit.v1.organizations.GetApplicationSessionPolicyResponse\"\xcf\x04\x92\x41\xcf\x03\n\rOrganizations\x12/Get application session policy for organization\x1a\xa6\x01Returns the application-level session settings for display in hosted pages. Includes absolute timeout, idle timeout configuration, and access token expiry in minutes.J\x7f\n\x03\x32\x30\x30\x12x\n2Application session policy retrieved successfully.\x12\x42\n@\x1a>.scalekit.v1.organizations.GetApplicationSessionPolicyResponseJA\n\x03\x34\x30\x33\x12:\n8Session policy feature not enabled for this environment.J \n\x03\x34\x30\x34\x12\x19\n\x17Organization not found.\x82\xb5\x18\x1f\n\x1borganizations_sessions_read\x18T\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x44\x12\x42/api/v1/organizations/{organization_id}/application-session-policy\x1aX\x92\x41U\n\rOrganizations\x12\x44{{import \"proto/scalekit/v1/organizations/organization_details.md\"}}B\xa9\'Z7github.com/scalekit-inc/scalekit/pkg/grpc/organizations\x92\x41\xec&\x12\x92\"\n\rScalekit APIs\x12\x83!# Introduction\n\nThe Scalekit API is a RESTful API that enables you to manage organizations, users, and authentication settings. All requests must use HTTPS.\nAll API requests use the following base URLs:\n\n```\nhttps://{environment}.scalekit.dev (Development)\nhttps://{environment}.scalekit.com (Production)\nhttps://auth.example.com (Custom domain)\n```\n\nScalekit operates two separate environments: Development and Production. Resources cannot be moved between environments.\n\n# Authentication\n\nThe Scalekit API uses OAuth 2.0 Client Credentials for authentication.\n\nCopy your API credentials from the Scalekit dashboard\'s API Config section and set them as environment variables.\n\n```sh\nSCALEKIT_ENVIRONMENT_URL=\'\'\nSCALEKIT_CLIENT_ID=\'\'\nSCALEKIT_CLIENT_SECRET=\'\'\n```\n\nGetting an access token\n\n1. Get your credentials from the [Scalekit Dashboard](https://app.scalekit.com)\n2. Request an access token:\n\n```sh\ncurl https://{SCALEKIT_ENVIRONMENT_URL}/oauth/token \\\n -X POST \\\n -H \'Content-Type: application/x-www-form-urlencoded\' \\\n -d \'client_id={client_id}\' \\\n -d \'client_secret={client_secret}\' \\\n -d \'grant_type=client_credentials\'\n```\n\n3. Use the access token in API requests:\n\n```sh\ncurl https://{SCALEKIT_ENVIRONMENT_URL}/api/v1/organizations \\\n -H \'Content-Type: application/json\' \\\n -H \'Authorization: Bearer {access_token}\'\n```\n\nThe response includes an access token:\n\n```json\n{\n\t\"access_token\": \"eyJhbGciOiJSUzI1NiIsImtpZCI6InNua181Ok4OTEyMjU2NiIsInR5cCI6IkpXVCJ9...\",\n\t\"token_type\": \"Bearer\",\n\t\"expires_in\": 86399,\n\t\"scope\": \"openid\"\n}\n```\n\n# SDKs\n\nScalekit provides official SDKs for multiple programming languages. Check the changelog at GitHub repositories for the latest updates.\n\n### Node.js\n\n```sh\nnpm install @scalekit-sdk/node\n```\n\nCreate a new Scalekit client instance after initializing the environment variables\n\n```js\nimport { Scalekit } from \"@scalekit-sdk/node\";\n\nexport let scalekit = new Scalekit(\n\tprocess.env.SCALEKIT_ENVIRONMENT_URL,\n\tprocess.env.SCALEKIT_CLIENT_ID,\n\tprocess.env.SCALEKIT_CLIENT_SECRET\n);\n```\n\n[See the Node SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-node/releases)\n\n### Python\n\n```sh\npip install scalekit-sdk-python\n```\n\nCreate a new Scalekit client instance after initializing the environment variables.\n\n```py\nfrom scalekit import ScalekitClient\nimport os\n\nscalekit_client = ScalekitClient(\n os.environ.get(\'SCALEKIT_ENVIRONMENT_URL\'),\n os.environ.get(\'SCALEKIT_CLIENT_ID\'),\n os.environ.get(\'SCALEKIT_CLIENT_SECRET\')\n)\n```\n\n[See the Python SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-python/releases)\n\n### Go\n\n```sh\ngo get -u github.com/scalekit-inc/scalekit-sdk-go\n```\n\nCreate a new Scalekit client instance after initializing the environment variables.\n\n```go\npackage main\n\nimport (\n \"os\"\n \"github.com/scalekit-inc/scalekit-sdk-go\"\n)\n\nscalekitClient := scalekit.NewScalekitClient(\n os.Getenv(\"SCALEKIT_ENVIRONMENT_URL\"),\n os.Getenv(\"SCALEKIT_CLIENT_ID\"),\n os.Getenv(\"SCALEKIT_CLIENT_SECRET\"),\n)\n```\n\n[See the Go SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-go/releases)\n\n### Java\n\n```gradle\n/* Gradle users - add the following to your dependencies in build file */\nimplementation \"com.scalekit:scalekit-sdk-java:2.0.6\"\n```\n\n```xml\n\n\n com.scalekit\n scalekit-sdk-java\n 2.0.6\n\n```\n\n[See the Java SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-java/releases)\n\n# Error handling\n\nThe API uses standard HTTP status codes:\n\n| Code | Description |\n| ----------- | -------------------- |\n| 200/201 | Success |\n| 400 | Invalid request |\n| 401 | Authentication error |\n| 404 | Resource not found |\n| 429 | Rate limit exceeded |\n| 500/501/504 | Server error |\n\nError responses include detailed information:\n\n```json\n{\n\t\"code\": 16,\n\t\"message\": \"Token empty\",\n\t\"details\": [\n\t\t{\n\t\t\t\"@type\": \"type.googleapis.com/scalekit.v1.errdetails.ErrorInfo\",\n\t\t\t\"error_code\": \"UNAUTHENTICATED\"\n\t\t}\n\t]\n}\n```\n\n\":\n\x0cScalekit Inc\x12\x14https://scalekit.com\x1a\x14support@scalekit.com*8\n\nApache 2.0\x12*http://www.apache.org/licenses/LICENSE-2.02\x05\x31.0.0\x1a\x19$SCALEKIT_ENVIRONMENT_URL*\x01\x02\x32\x10\x61pplication/json:\x10\x61pplication/jsonj\x0f\n\rOrganizationsj\xd4\x03\n\x0bPermissions\x12\xc4\x03Permission management for defining and controlling access to system resources. Create, retrieve, update, and delete granular permissions that represent specific actions users can perform. Permissions are the building blocks of role-based access control (RBAC) and can be assigned to roles to grant users the ability to perform specific operations. Use this service to define custom permissions for your application\'s unique access control requirements.r+\n\rScalekit Docs\x12\x1ahttps://docs.scalekit.com/b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -191,17 +191,13 @@ _globals['_GETAPPLICATIONSESSIONPOLICYREQUEST'].fields_by_name['organization_id']._loaded_options = None _globals['_GETAPPLICATIONSESSIONPOLICYREQUEST'].fields_by_name['organization_id']._serialized_options = b'\222AE2*The unique identifier of the organization.J\027\"org_59615193906282635\"\340A\002\272H\014r\n\020\001\030 :\004org_' _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['absolute_session_timeout']._loaded_options = None - _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['absolute_session_timeout']._serialized_options = b'\222A]2VAbsolute session timeout value in the unit specified by absolute_session_timeout_unit.J\003480' + _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['absolute_session_timeout']._serialized_options = b'\222A+2$Absolute session timeout in minutes.J\003480' _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['idle_session_timeout_enabled']._loaded_options = None _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['idle_session_timeout_enabled']._serialized_options = b'\222AJ2AWhether idle session timeout is enabled at the application level.J\005false' _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['idle_session_timeout']._loaded_options = None - _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['idle_session_timeout']._serialized_options = b'\222Ax2rIdle session timeout value in the unit specified by idle_session_timeout_unit. Zero when idle timeout is disabled.J\00260' + _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['idle_session_timeout']._serialized_options = b'\222AJ2DIdle session timeout in minutes. Zero when idle timeout is disabled.J\00260' _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['access_token_expiry']._loaded_options = None _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['access_token_expiry']._serialized_options = b'\222AK2FAccess token expiry in minutes. Custom policy values must exceed this.J\0015' - _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['absolute_session_timeout_unit']._loaded_options = None - _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['absolute_session_timeout_unit']._serialized_options = b'\222Av2iUnit for absolute_session_timeout. Reflects the unit configured for the application-level session policy.J\t\"MINUTES\"' - _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['idle_session_timeout_unit']._loaded_options = None - _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['idle_session_timeout_unit']._serialized_options = b'\222A\247\0012\231\001Unit for idle_session_timeout. Reflects the unit configured for the application-level session policy. Omitted when idle_session_timeout_enabled is false.J\t\"MINUTES\"' _globals['_GETAPPLICATIONSESSIONPOLICYRESPONSE'].fields_by_name['application_policy']._loaded_options = None _globals['_GETAPPLICATIONSESSIONPOLICYRESPONSE'].fields_by_name['application_policy']._serialized_options = b'\222A:28The effective application-level session policy settings.' _globals['_ORGANIZATIONUSERMANAGEMENTSETTINGS'].fields_by_name['max_allowed_users']._loaded_options = None @@ -270,10 +266,10 @@ _globals['_ORGANIZATIONSERVICE'].methods_by_name['GetOrganizationUserManagementSetting']._serialized_options = b'\222A\203\002\n\rOrganizations\022(Get organization user management setting\032CRetrieves the user management settings for a specific organization.J\202\001\n\003200\022{\n+Returns the requested organization setting.\022L\nJ\032H.scalekit.v1.organizations.GetOrganizationUserManagementSettingsResponse\202\265\030\002\030d\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002A\022?/api/v1/organizations/{organization_id}/settings/usermanagement' _globals['_ORGANIZATIONSERVICE'].methods_by_name['GetApplicationSessionPolicy']._loaded_options = None _globals['_ORGANIZATIONSERVICE'].methods_by_name['GetApplicationSessionPolicy']._serialized_options = b'\222A\317\003\n\rOrganizations\022/Get application session policy for organization\032\246\001Returns the application-level session settings for display in hosted pages. Includes absolute timeout, idle timeout configuration, and access token expiry in minutes.J\177\n\003200\022x\n2Application session policy retrieved successfully.\022B\n@\032>.scalekit.v1.organizations.GetApplicationSessionPolicyResponseJA\n\003403\022:\n8Session policy feature not enabled for this environment.J \n\003404\022\031\n\027Organization not found.\202\265\030\037\n\033organizations_sessions_read\030T\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002D\022B/api/v1/organizations/{organization_id}/application-session-policy' - _globals['_FEATURE']._serialized_start=18895 - _globals['_FEATURE']._serialized_end=18977 - _globals['_SESSIONPOLICYTYPE']._serialized_start=18979 - _globals['_SESSIONPOLICYTYPE']._serialized_end=19064 + _globals['_FEATURE']._serialized_start=18236 + _globals['_FEATURE']._serialized_end=18318 + _globals['_SESSIONPOLICYTYPE']._serialized_start=18320 + _globals['_SESSIONPOLICYTYPE']._serialized_end=18405 _globals['_CREATEORGANIZATIONREQUEST']._serialized_start=533 _globals['_CREATEORGANIZATIONREQUEST']._serialized_end=708 _globals['_CREATEORGANIZATIONRESPONSE']._serialized_start=711 @@ -337,25 +333,25 @@ _globals['_GETAPPLICATIONSESSIONPOLICYREQUEST']._serialized_start=14069 _globals['_GETAPPLICATIONSESSIONPOLICYREQUEST']._serialized_end=14239 _globals['_APPLICATIONSESSIONPOLICYSETTINGS']._serialized_start=14242 - _globals['_APPLICATIONSESSIONPOLICYSETTINGS']._serialized_end=15443 - _globals['_GETAPPLICATIONSESSIONPOLICYRESPONSE']._serialized_start=15446 - _globals['_GETAPPLICATIONSESSIONPOLICYRESPONSE']._serialized_end=15655 - _globals['_ORGANIZATIONUSERMANAGEMENTSETTINGS']._serialized_start=15658 - _globals['_ORGANIZATIONUSERMANAGEMENTSETTINGS']._serialized_end=16006 - _globals['_ORGANIZATIONSESSIONSETTINGS']._serialized_start=16009 - _globals['_ORGANIZATIONSESSIONSETTINGS']._serialized_end=17079 - _globals['_ORGANIZATIONSETTINGS']._serialized_start=17082 - _globals['_ORGANIZATIONSETTINGS']._serialized_end=17608 - _globals['_ORGANIZATIONSETTINGSFEATURE']._serialized_start=17611 - _globals['_ORGANIZATIONSETTINGSFEATURE']._serialized_end=18137 - _globals['_UPSERTUSERMANAGEMENTSETTINGSREQUEST']._serialized_start=18140 - _globals['_UPSERTUSERMANAGEMENTSETTINGSREQUEST']._serialized_end=18418 - _globals['_UPSERTUSERMANAGEMENTSETTINGSRESPONSE']._serialized_start=18421 - _globals['_UPSERTUSERMANAGEMENTSETTINGSRESPONSE']._serialized_end=18577 - _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSREQUEST']._serialized_start=18580 - _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSREQUEST']._serialized_end=18715 - _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSRESPONSE']._serialized_start=18718 - _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSRESPONSE']._serialized_end=18893 - _globals['_ORGANIZATIONSERVICE']._serialized_start=19067 - _globals['_ORGANIZATIONSERVICE']._serialized_end=29349 + _globals['_APPLICATIONSESSIONPOLICYSETTINGS']._serialized_end=14784 + _globals['_GETAPPLICATIONSESSIONPOLICYRESPONSE']._serialized_start=14787 + _globals['_GETAPPLICATIONSESSIONPOLICYRESPONSE']._serialized_end=14996 + _globals['_ORGANIZATIONUSERMANAGEMENTSETTINGS']._serialized_start=14999 + _globals['_ORGANIZATIONUSERMANAGEMENTSETTINGS']._serialized_end=15347 + _globals['_ORGANIZATIONSESSIONSETTINGS']._serialized_start=15350 + _globals['_ORGANIZATIONSESSIONSETTINGS']._serialized_end=16420 + _globals['_ORGANIZATIONSETTINGS']._serialized_start=16423 + _globals['_ORGANIZATIONSETTINGS']._serialized_end=16949 + _globals['_ORGANIZATIONSETTINGSFEATURE']._serialized_start=16952 + _globals['_ORGANIZATIONSETTINGSFEATURE']._serialized_end=17478 + _globals['_UPSERTUSERMANAGEMENTSETTINGSREQUEST']._serialized_start=17481 + _globals['_UPSERTUSERMANAGEMENTSETTINGSREQUEST']._serialized_end=17759 + _globals['_UPSERTUSERMANAGEMENTSETTINGSRESPONSE']._serialized_start=17762 + _globals['_UPSERTUSERMANAGEMENTSETTINGSRESPONSE']._serialized_end=17918 + _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSREQUEST']._serialized_start=17921 + _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSREQUEST']._serialized_end=18056 + _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSRESPONSE']._serialized_start=18059 + _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSRESPONSE']._serialized_end=18234 + _globals['_ORGANIZATIONSERVICE']._serialized_start=18408 + _globals['_ORGANIZATIONSERVICE']._serialized_end=28690 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/organizations/organizations_pb2.pyi b/scalekit/v1/organizations/organizations_pb2.pyi index 261c537..7317066 100644 --- a/scalekit/v1/organizations/organizations_pb2.pyi +++ b/scalekit/v1/organizations/organizations_pb2.pyi @@ -326,20 +326,16 @@ class GetApplicationSessionPolicyRequest(_message.Message): def __init__(self, organization_id: _Optional[str] = ...) -> None: ... class ApplicationSessionPolicySettings(_message.Message): - __slots__ = ("absolute_session_timeout", "idle_session_timeout_enabled", "idle_session_timeout", "access_token_expiry", "absolute_session_timeout_unit", "idle_session_timeout_unit") + __slots__ = ("absolute_session_timeout", "idle_session_timeout_enabled", "idle_session_timeout", "access_token_expiry") ABSOLUTE_SESSION_TIMEOUT_FIELD_NUMBER: _ClassVar[int] IDLE_SESSION_TIMEOUT_ENABLED_FIELD_NUMBER: _ClassVar[int] IDLE_SESSION_TIMEOUT_FIELD_NUMBER: _ClassVar[int] ACCESS_TOKEN_EXPIRY_FIELD_NUMBER: _ClassVar[int] - ABSOLUTE_SESSION_TIMEOUT_UNIT_FIELD_NUMBER: _ClassVar[int] - IDLE_SESSION_TIMEOUT_UNIT_FIELD_NUMBER: _ClassVar[int] absolute_session_timeout: int idle_session_timeout_enabled: bool idle_session_timeout: int access_token_expiry: int - absolute_session_timeout_unit: _commons_pb2.TimeUnit - idle_session_timeout_unit: _commons_pb2.TimeUnit - def __init__(self, absolute_session_timeout: _Optional[int] = ..., idle_session_timeout_enabled: bool = ..., idle_session_timeout: _Optional[int] = ..., access_token_expiry: _Optional[int] = ..., absolute_session_timeout_unit: _Optional[_Union[_commons_pb2.TimeUnit, str]] = ..., idle_session_timeout_unit: _Optional[_Union[_commons_pb2.TimeUnit, str]] = ...) -> None: ... + def __init__(self, absolute_session_timeout: _Optional[int] = ..., idle_session_timeout_enabled: bool = ..., idle_session_timeout: _Optional[int] = ..., access_token_expiry: _Optional[int] = ...) -> None: ... class GetApplicationSessionPolicyResponse(_message.Message): __slots__ = ("application_policy",) diff --git a/scalekit/v1/providers/providers_pb2.py b/scalekit/v1/providers/providers_pb2.py index c78bed0..ecde0df 100644 --- a/scalekit/v1/providers/providers_pb2.py +++ b/scalekit/v1/providers/providers_pb2.py @@ -23,7 +23,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%scalekit/v1/providers/providers.proto\x12\x15scalekit.v1.providers\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\xb2\x07\n\x08Provider\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1e\n\nidentifier\x18\x02 \x01(\tR\nidentifier\x12!\n\x0c\x64isplay_name\x18\x03 \x01(\tR\x0b\x64isplayName\x12 \n\x0b\x64\x65scription\x18\x04 \x01(\tR\x0b\x64\x65scription\x12\x1e\n\ncategories\x18\x05 \x03(\tR\ncategories\x12?\n\rauth_patterns\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.ListValueR\x0c\x61uthPatterns\x12\x19\n\x08icon_src\x18\x07 \x01(\tR\x07iconSrc\x12)\n\x10\x64isplay_priority\x18\x08 \x01(\x05R\x0f\x64isplayPriority\x12\x1f\n\x0b\x63oming_soon\x18\t \x01(\x08R\ncomingSoon\x12\x1b\n\tproxy_url\x18\n \x01(\tR\x08proxyUrl\x12#\n\rproxy_enabled\x18\x0b \x01(\x08R\x0cproxyEnabled\x12o\n\tis_custom\x18\x0c \x01(\x08\x42R\x92\x41O2FIndicates whether the provider is environment-scoped (custom provider)J\x05\x66\x61lseR\x08isCustom\x12y\n\ris_custom_mcp\x18\r \x01(\x08\x42U\x92\x41R2IIndicates whether this is an environment-scoped MCP-based custom providerJ\x05\x66\x61lseR\x0bisCustomMcp\x12\xfd\x01\n\x08metadata\x18\x0e \x03(\x0b\x32-.scalekit.v1.providers.Provider.MetadataEntryB\xb1\x01\x92\x41\xad\x01\x32}Custom key-value metadata stored for this provider. Returned for all providers; defaults to {} when no metadata has been set.J,{\"api_version\": \"v2\", \"region\": \"us-east-1\"}R\x08metadata\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xf1\n\n\x0e\x43reateProvider\x12\xf7\x01\n\nidentifier\x18\x02 \x01(\tB\xd6\x01\x92\x41\xb4\x01\x32\x9d\x01Unique identifier for the connected app provider. Spaces are not allowed, and the character : is reserved for internal suffixing and cannot be used in input.J\x12\"google_workspace\"\xbaH\x1br\x16\x10\x01\x18\x64\x32\x10^[a-zA-Z0-9_-]*$\xc8\x01\x01R\nidentifier\x12t\n\x0c\x64isplay_name\x18\x03 \x01(\tBQ\x92\x41\x41\x32+Display name for the connected app providerJ\x12\"Google Workspace\"\xbaH\nr\x05\x10\x01\x18\xc8\x01\xc8\x01\x01R\x0b\x64isplayName\x12\x92\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tBp\x92\x41m2)Description of the connected app providerJ@\"Connect to Google Workspace for email and calendar integration\"R\x0b\x64\x65scription\x12i\n\ncategories\x18\x05 \x03(\tBI\x92\x41\x46\x32)Categories for the connected app providerJ\x19[\"productivity\", \"email\"]R\ncategories\x12\x82\x01\n\rauth_patterns\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.ListValueBA\x92\x41\x38\x32\x36\x41uthentication patterns for the connected app provider\xbaH\x03\xc8\x01\x01R\x0c\x61uthPatterns\x12\x82\x01\n\x08icon_src\x18\x07 \x01(\tBg\x92\x41\x64\x32/Image source URL for the connected app providerJ1\"https://example.com/images/google_workspace.png\"R\x07iconSrc\x12)\n\x10\x64isplay_priority\x18\x08 \x01(\x05R\x0f\x64isplayPriority\x12\x63\n\x0b\x63oming_soon\x18\t \x01(\x08\x42\x42\x92\x41?26Indicates if the connected app provider is coming soonJ\x05\x66\x61lseR\ncomingSoon\x12k\n\tproxy_url\x18\n \x01(\tBN\x92\x41K2(Proxy URL for the connected app providerJ\x1f\"https://workspace.google.com/\"R\x08proxyUrl\x12\xe1\x01\n\rproxy_enabled\x18\x0b \x01(\x08\x42\xbb\x01\x92\x41\xb7\x01\x32\xae\x01This flag indicates whether proxying is turned on for the connected app provider. When enabled, requests are routed through the provider proxy instead of being sent directly.J\x04trueR\x0cproxyEnabledJ\x04\x08\x01\x10\x02\"\x96\x01\n\x15\x43reateProviderRequest\x12}\n\x08provider\x18\x01 \x01(\x0b\x32%.scalekit.v1.providers.CreateProviderB:\x92\x41\x31\x32/Details of the connected app provider to create\xbaH\x03\xc8\x01\x01R\x08provider\"\xaa\x0b\n\x14\x43reateCustomProvider\x12\x9d\x01\n\x0c\x64isplay_name\x18\x01 \x01(\tBz\x92\x41\x41\x32+Display name for the connected app providerJ\x12\"Google Workspace\"\xbaH3r.\x10\x01\x18\xc8\x01\x32\'^[a-zA-Z0-9 ]*[a-zA-Z0-9][a-zA-Z0-9 ]*$\xc8\x01\x01R\x0b\x64isplayName\x12\x92\x01\n\x0b\x64\x65scription\x18\x02 \x01(\tBp\x92\x41m2)Description of the connected app providerJ@\"Connect to Google Workspace for email and calendar integration\"R\x0b\x64\x65scription\x12\x82\x01\n\rauth_patterns\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.ListValueBA\x92\x41\x38\x32\x36\x41uthentication patterns for the connected app provider\xbaH\x03\xc8\x01\x01R\x0c\x61uthPatterns\x12\x98\x01\n\tproxy_url\x18\x07 \x01(\tB{\x92\x41\x63\x32\x42Proxy URL for the connected app provider. Must start with https://J\x1d\"https://mcp.example.com/mcp\"\xbaH\x12r\x10\x10\x01\x18\x80\x10\x32\t^https://R\x08proxyUrl\x12\xe1\x01\n\rproxy_enabled\x18\x08 \x01(\x08\x42\xbb\x01\x92\x41\xb7\x01\x32\xae\x01This flag indicates whether proxying is turned on for the connected app provider. When enabled, requests are routed through the provider proxy instead of being sent directly.J\x04trueR\x0cproxyEnabled\x12\xcf\x01\n\x08icon_src\x18\t \x01(\tB\xb3\x01\x92\x41\x96\x01\x32\x65URL for the provider icon. Should be an SVG image sized 800x800 pixels for best rendering experience.J-\"https://example.com/images/my-connector.svg\"\xbaH\x16r\x14\x18\x80\x10\x32\x0f^(https://.*)?$R\x07iconSrc\x12\xb7\x02\n\x08metadata\x18\n \x03(\x0b\x32\x39.scalekit.v1.providers.CreateCustomProvider.MetadataEntryB\xdf\x01\x92\x41\xc2\x01\x32\x91\x01\x43ustom key-value metadata for this provider. Keys must be 3-25 characters, values must be 1-256 characters, with a maximum of 20 key-value pairs.J,{\"api_version\": \"v2\", \"region\": \"us-east-1\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01J\x04\x08\x03\x10\x04J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07\"\xad\x02\n\x1b\x43reateCustomProviderRequest\x12\x8d\x02\n\x08provider\x18\x01 \x01(\x0b\x32+.scalekit.v1.providers.CreateCustomProviderB\xc3\x01\x92\x41\xb9\x01\x32\xb6\x01\x44\x65tails of the custom connected app provider to create. Identifier is derived by the system and the identifier returned in the response must be used for update and delete operations.\xbaH\x03\xc8\x01\x01R\x08provider\"U\n\x16\x43reateProviderResponse\x12;\n\x08provider\x18\x01 \x01(\x0b\x32\x1f.scalekit.v1.providers.ProviderR\x08provider\"\xb9\x08\n\x0eUpdateProvider\x12t\n\x0c\x64isplay_name\x18\x03 \x01(\tBQ\x92\x41\x41\x32+Display name for the connected app providerJ\x12\"Google Workspace\"\xbaH\nr\x05\x10\x01\x18\xc8\x01\xc8\x01\x01R\x0b\x64isplayName\x12\x92\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tBp\x92\x41m2)Description of the connected app providerJ@\"Connect to Google Workspace for email and calendar integration\"R\x0b\x64\x65scription\x12i\n\ncategories\x18\x05 \x03(\tBI\x92\x41\x46\x32)Categories for the connected app providerJ\x19[\"productivity\", \"email\"]R\ncategories\x12|\n\rauth_patterns\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.ListValueB;\x92\x41\x38\x32\x36\x41uthentication patterns for the connected app providerR\x0c\x61uthPatterns\x12\x82\x01\n\x08icon_src\x18\x07 \x01(\tBg\x92\x41\x64\x32/Image source URL for the connected app providerJ1\"https://example.com/images/google_workspace.png\"R\x07iconSrc\x12)\n\x10\x64isplay_priority\x18\x08 \x01(\x05R\x0f\x64isplayPriority\x12\x7f\n\x0b\x63oming_soon\x18\t \x01(\x0b\x32\x1a.google.protobuf.BoolValueBB\x92\x41?26Indicates if the connected app provider is coming soonJ\x05\x66\x61lseR\ncomingSoon\x12k\n\tproxy_url\x18\n \x01(\tBN\x92\x41K2(Proxy URL for the connected app providerJ\x1f\"https://workspace.google.com/\"R\x08proxyUrl\x12\x88\x01\n\rproxy_enabled\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.BoolValueBG\x92\x41\x44\x32 None: ... + __slots__ = ("id", "identifier", "display_name", "description", "categories", "auth_patterns", "icon_src", "display_priority", "coming_soon", "proxy_url", "proxy_enabled", "is_custom", "is_custom_mcp") ID_FIELD_NUMBER: _ClassVar[int] IDENTIFIER_FIELD_NUMBER: _ClassVar[int] DISPLAY_NAME_FIELD_NUMBER: _ClassVar[int] @@ -46,7 +39,6 @@ class Provider(_message.Message): PROXY_ENABLED_FIELD_NUMBER: _ClassVar[int] IS_CUSTOM_FIELD_NUMBER: _ClassVar[int] IS_CUSTOM_MCP_FIELD_NUMBER: _ClassVar[int] - METADATA_FIELD_NUMBER: _ClassVar[int] id: str identifier: str display_name: str @@ -60,8 +52,7 @@ class Provider(_message.Message): proxy_enabled: bool is_custom: bool is_custom_mcp: bool - metadata: _containers.ScalarMap[str, str] - def __init__(self, id: _Optional[str] = ..., identifier: _Optional[str] = ..., display_name: _Optional[str] = ..., description: _Optional[str] = ..., categories: _Optional[_Iterable[str]] = ..., auth_patterns: _Optional[_Union[_struct_pb2.ListValue, _Mapping]] = ..., icon_src: _Optional[str] = ..., display_priority: _Optional[int] = ..., coming_soon: bool = ..., proxy_url: _Optional[str] = ..., proxy_enabled: bool = ..., is_custom: bool = ..., is_custom_mcp: bool = ..., metadata: _Optional[_Mapping[str, str]] = ...) -> None: ... + def __init__(self, id: _Optional[str] = ..., identifier: _Optional[str] = ..., display_name: _Optional[str] = ..., description: _Optional[str] = ..., categories: _Optional[_Iterable[str]] = ..., auth_patterns: _Optional[_Union[_struct_pb2.ListValue, _Mapping]] = ..., icon_src: _Optional[str] = ..., display_priority: _Optional[int] = ..., coming_soon: bool = ..., proxy_url: _Optional[str] = ..., proxy_enabled: bool = ..., is_custom: bool = ..., is_custom_mcp: bool = ...) -> None: ... class CreateProvider(_message.Message): __slots__ = ("identifier", "display_name", "description", "categories", "auth_patterns", "icon_src", "display_priority", "coming_soon", "proxy_url", "proxy_enabled") @@ -94,29 +85,20 @@ class CreateProviderRequest(_message.Message): def __init__(self, provider: _Optional[_Union[CreateProvider, _Mapping]] = ...) -> None: ... class CreateCustomProvider(_message.Message): - __slots__ = ("display_name", "description", "auth_patterns", "proxy_url", "proxy_enabled", "icon_src", "metadata") - class MetadataEntry(_message.Message): - __slots__ = ("key", "value") - KEY_FIELD_NUMBER: _ClassVar[int] - VALUE_FIELD_NUMBER: _ClassVar[int] - key: str - value: str - def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + __slots__ = ("display_name", "description", "auth_patterns", "proxy_url", "proxy_enabled", "icon_src") DISPLAY_NAME_FIELD_NUMBER: _ClassVar[int] DESCRIPTION_FIELD_NUMBER: _ClassVar[int] AUTH_PATTERNS_FIELD_NUMBER: _ClassVar[int] PROXY_URL_FIELD_NUMBER: _ClassVar[int] PROXY_ENABLED_FIELD_NUMBER: _ClassVar[int] ICON_SRC_FIELD_NUMBER: _ClassVar[int] - METADATA_FIELD_NUMBER: _ClassVar[int] display_name: str description: str auth_patterns: _struct_pb2.ListValue proxy_url: str proxy_enabled: bool icon_src: str - metadata: _containers.ScalarMap[str, str] - def __init__(self, display_name: _Optional[str] = ..., description: _Optional[str] = ..., auth_patterns: _Optional[_Union[_struct_pb2.ListValue, _Mapping]] = ..., proxy_url: _Optional[str] = ..., proxy_enabled: bool = ..., icon_src: _Optional[str] = ..., metadata: _Optional[_Mapping[str, str]] = ...) -> None: ... + def __init__(self, display_name: _Optional[str] = ..., description: _Optional[str] = ..., auth_patterns: _Optional[_Union[_struct_pb2.ListValue, _Mapping]] = ..., proxy_url: _Optional[str] = ..., proxy_enabled: bool = ..., icon_src: _Optional[str] = ...) -> None: ... class CreateCustomProviderRequest(_message.Message): __slots__ = ("provider",) @@ -161,29 +143,20 @@ class UpdateProviderRequest(_message.Message): def __init__(self, identifier: _Optional[str] = ..., provider: _Optional[_Union[UpdateProvider, _Mapping]] = ...) -> None: ... class UpdateCustomProvider(_message.Message): - __slots__ = ("display_name", "description", "auth_patterns", "proxy_url", "proxy_enabled", "icon_src", "metadata") - class MetadataEntry(_message.Message): - __slots__ = ("key", "value") - KEY_FIELD_NUMBER: _ClassVar[int] - VALUE_FIELD_NUMBER: _ClassVar[int] - key: str - value: str - def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + __slots__ = ("display_name", "description", "auth_patterns", "proxy_url", "proxy_enabled", "icon_src") DISPLAY_NAME_FIELD_NUMBER: _ClassVar[int] DESCRIPTION_FIELD_NUMBER: _ClassVar[int] AUTH_PATTERNS_FIELD_NUMBER: _ClassVar[int] PROXY_URL_FIELD_NUMBER: _ClassVar[int] PROXY_ENABLED_FIELD_NUMBER: _ClassVar[int] ICON_SRC_FIELD_NUMBER: _ClassVar[int] - METADATA_FIELD_NUMBER: _ClassVar[int] display_name: str description: str auth_patterns: _struct_pb2.ListValue proxy_url: str proxy_enabled: bool icon_src: str - metadata: _containers.ScalarMap[str, str] - def __init__(self, display_name: _Optional[str] = ..., description: _Optional[str] = ..., auth_patterns: _Optional[_Union[_struct_pb2.ListValue, _Mapping]] = ..., proxy_url: _Optional[str] = ..., proxy_enabled: bool = ..., icon_src: _Optional[str] = ..., metadata: _Optional[_Mapping[str, str]] = ...) -> None: ... + def __init__(self, display_name: _Optional[str] = ..., description: _Optional[str] = ..., auth_patterns: _Optional[_Union[_struct_pb2.ListValue, _Mapping]] = ..., proxy_url: _Optional[str] = ..., proxy_enabled: bool = ..., icon_src: _Optional[str] = ...) -> None: ... class UpdateCustomProviderRequest(_message.Message): __slots__ = ("identifier", "provider") From ae038207fd0c9d2cdb0f1d5e19cd7da936e9225f Mon Sep 17 00:00:00 2001 From: Srinivas Karre Date: Tue, 12 May 2026 16:52:46 +0530 Subject: [PATCH 14/19] chore: regenerate proto stubs from published v0.1.121.2 --- .../connected_accounts_pb2.py | 50 +-- .../connected_accounts_pb2.pyi | 20 +- scalekit/v1/connections/connections_pb2.py | 284 +++++++++--------- scalekit/v1/connections/connections_pb2.pyi | 24 +- .../v1/organizations/organizations_pb2.py | 60 ++-- .../v1/organizations/organizations_pb2.pyi | 8 +- scalekit/v1/providers/providers_pb2.py | 90 +++--- scalekit/v1/providers/providers_pb2.pyi | 39 ++- 8 files changed, 341 insertions(+), 234 deletions(-) diff --git a/scalekit/v1/connected_accounts/connected_accounts_pb2.py b/scalekit/v1/connected_accounts/connected_accounts_pb2.py index d5b1d54..a725386 100644 --- a/scalekit/v1/connected_accounts/connected_accounts_pb2.py +++ b/scalekit/v1/connected_accounts/connected_accounts_pb2.py @@ -22,7 +22,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n7scalekit/v1/connected_accounts/connected_accounts.proto\x12\x1escalekit.v1.connected_accounts\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\xa9\x0c\n\x1cListConnectedAccountsRequest\x12\xb1\x01\n\x0forganization_id\x18\x01 \x01(\tB\x82\x01\x92\x41v2]Filter by organization ID. Returns only connected accounts associated with this organization.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12\x91\x01\n\x07user_id\x18\x02 \x01(\tBs\x92\x41g2MFilter by user ID. Returns only connected accounts associated with this user.J\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12\xef\x01\n\tconnector\x18\x03 \x01(\tB\xcb\x01\x92\x41\xa9\x01\x32\x9c\x01\x46ilter by connector type. Connector identifier such as \'notion\', \'slack\', \'google\', etc. Alphanumeric with spaces, hyphens, underscores, and colons allowed.J\x08\"notion\"\xbaH\x1br\x19\x10\x00\x18\x90\x03\x32\x12^[a-zA-Z0-9_: -]*$H\x02R\tconnector\x88\x01\x01\x12\xdb\x01\n\nidentifier\x18\x04 \x01(\tB\xb5\x01\x92\x41\xa8\x01\x32\x91\x01\x46ilter by account identifier. The unique identifier for the connected account within the third-party service (e.g., email address, workspace ID).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12\x9d\x01\n\x08provider\x18\x05 \x01(\tB\x80\x01\x92\x41t2hFilter by OAuth provider. The authentication provider name such as \'google\', \'microsoft\', \'github\', etc.J\x08\"google\"\xbaH\x06r\x04\x10\x00\x18\x32R\x08provider\x12\x9b\x01\n\tpage_size\x18\x06 \x01(\rB~\x92\x41r2lMaximum number of connected accounts to return per page. Must be between 0 and 100. Default is typically 10.J\x02\x31\x30\xbaH\x06*\x04\x10\x64(\x00R\x08pageSize\x12\xcb\x01\n\npage_token\x18\x07 \x01(\tB\xab\x01\x92\x41\x9e\x01\x32\x83\x01Pagination token from a previous response. Use the next_page_token value from ListConnectedAccountsResponse to fetch the next page.J\x16\"eyJvZmZzZXQiOjEwfQ==\"\xbaH\x06r\x04\x10\x00\x18\x64R\tpageToken\x12\xa7\x01\n\x05query\x18\x08 \x01(\tB\x90\x01\x92\x41\x83\x01\x32qText search query to filter connected accounts by name, identifier, or other searchable fields. Case-insensitive.J\x0e\"john@example\"\xbaH\x06r\x04\x10\x00\x18\x64R\x05queryB\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifier\"\xbb\x06\n\x1dListConnectedAccountsResponse\x12\xdc\x01\n\x12\x63onnected_accounts\x18\x01 \x03(\x0b\x32\x37.scalekit.v1.connected_accounts.ConnectedAccountForListBt\x92\x41q2oList of connected accounts matching the filter criteria. Excludes sensitive authorization details for security.R\x11\x63onnectedAccounts\x12\x99\x01\n\ntotal_size\x18\x02 \x01(\rBz\x92\x41w2pTotal count of connected accounts matching the filter criteria across all pages. Use for calculating pagination.J\x03\x31\x30\x30R\ttotalSize\x12\xd2\x01\n\x0fnext_page_token\x18\x03 \x01(\tB\xa9\x01\x92\x41\x9c\x01\x32\x81\x01Pagination token for retrieving the next page. Empty if this is the last page. Pass this value to page_token in the next request.J\x16\"eyJvZmZzZXQiOjIwfQ==\"\xbaH\x06r\x04\x10\x00\x18 R\rnextPageToken\x12\xc9\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\xa0\x01\x92\x41\x93\x01\x32}Pagination token for retrieving the previous page. Empty if this is the first page. Pass this value to page_token to go back.J\x12\"eyJvZmZzZXQiOjB9\"\xbaH\x06r\x04\x10\x00\x18 R\rprevPageToken\"\xe0\x06\n\x1eSearchConnectedAccountsRequest\x12\xb9\x01\n\x05query\x18\x01 \x01(\tB\xa2\x01\x92\x41\x91\x01\x32\x86\x01Search term to match against connected account identifiers, providers, or connectors. Must be at least 3 characters. Case insensitive.J\x06google\xbaH\nr\x05\x10\x03\x18\xc8\x01\xc8\x01\x01R\x05query\x12\x85\x01\n\tpage_size\x18\x02 \x01(\rBh\x92\x41^2XMaximum number of connected accounts to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x03 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\x12i\n\rconnection_id\x18\x04 \x01(\tBD\x92\x41\x38\x32*Connection ID to filter connected accountsJ\n\"conn_123\"\xbaH\x06r\x04\x10\x00\x18 R\x0c\x63onnectionId:\xe6\x01\x92\x41\xe2\x01\n\x9c\x01*\x19Search Connected Accounts2\x7fSearch for connected accounts in your environment using a text query that matches against identifiers, providers, or connectors2Aquery=google&page_size=30&page_token=eyJwYWdlIjoyLCJsaW1pdCI6MzB9\"\x87\x05\n\x1fSearchConnectedAccountsResponse\x12\xcc\x01\n\x12\x63onnected_accounts\x18\x01 \x03(\x0b\x32\x37.scalekit.v1.connected_accounts.ConnectedAccountForListBd\x92\x41\x61\x32_List of connected accounts matching the search query. Excludes sensitive authorization details.R\x11\x63onnectedAccounts\x12l\n\ntotal_size\x18\x02 \x01(\rBM\x92\x41J2CTotal count of accounts matching the search query across all pages.J\x03\x31\x30\x30R\ttotalSize\x12\x91\x01\n\x0fnext_page_token\x18\x03 \x01(\tBi\x92\x41]2CPagination token for the next page. Empty if this is the last page.J\x16\"eyJvZmZzZXQiOjMwfQ==\"\xbaH\x06r\x04\x10\x00\x18 R\rnextPageToken\x12\x92\x01\n\x0fprev_page_token\x18\x04 \x01(\tBj\x92\x41^2HPagination token for the previous page. Empty if this is the first page.J\x12\"eyJvZmZzZXQiOjB9\"\xbaH\x06r\x04\x10\x00\x18 R\rprevPageToken\"\xa8\x07\n\x1d\x43reateConnectedAccountRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12\x64\n\tconnector\x18\x03 \x01(\tBA\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x1br\x19\x10\x00\x18\x90\x03\x32\x12^[a-zA-Z0-9_: -]*$H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12\xbd\x02\n\x11\x63onnected_account\x18\x05 \x01(\x0b\x32\x36.scalekit.v1.connected_accounts.CreateConnectedAccountB\xd7\x01\x92\x41\xcd\x01\x32*Details of the connected account to createJ\x9e\x01{ \"authorization_type\": \"OAUTH2\", \"authorization_details\": { \"oauth_token\": { \"access_token\": \"...\", \"refresh_token\": \"...\", \"scopes\": [\"read\", \"write\"] } } }\xbaH\x03\xc8\x01\x01R\x10\x63onnectedAccountB\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifier\"\x8d\x02\n\x1e\x43reateConnectedAccountResponse\x12\xea\x01\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountB\x8a\x01\x92\x41\x86\x01\x32\x83\x01The newly created connected account with its unique identifier, status, and complete authorization details including access tokens.R\x10\x63onnectedAccount\"\x84\x08\n\x1dUpdateConnectedAccountRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12P\n\tconnector\x18\x03 \x01(\tB-\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x07r\x05\x10\x00\x18\x90\x03H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12g\n\x02id\x18\x06 \x01(\tBR\x92\x41\x41\x32\x35Unique identifier for the connected account to updateJ\x08\"ca_123\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_H\x04R\x02id\x88\x01\x01\x12\xbd\x02\n\x11\x63onnected_account\x18\x05 \x01(\x0b\x32\x36.scalekit.v1.connected_accounts.UpdateConnectedAccountB\xd7\x01\x92\x41\xcd\x01\x32*Details of the connected account to updateJ\x9e\x01{ \"authorization_type\": \"OAUTH2\", \"authorization_details\": { \"oauth_token\": { \"access_token\": \"...\", \"refresh_token\": \"...\", \"scopes\": [\"read\", \"write\"] } } }\xbaH\x03\xc8\x01\x01R\x10\x63onnectedAccountB\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifierB\x05\n\x03_id\"\xf7\x01\n\x1eUpdateConnectedAccountResponse\x12\xd4\x01\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountBu\x92\x41r2pThe updated connected account with refreshed credentials, new token expiry, and modified configuration settings.R\x10\x63onnectedAccount\"\xd8\x05\n\x1d\x44\x65leteConnectedAccountRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12\x64\n\tconnector\x18\x03 \x01(\tBA\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x1br\x19\x10\x00\x18\x90\x03\x32\x12^[a-zA-Z0-9_: -]*$H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12g\n\x02id\x18\x05 \x01(\tBR\x92\x41\x41\x32\x35Unique identifier for the connected account to deleteJ\x08\"ca_123\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_H\x04R\x02id\x88\x01\x01\x42\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifierB\x05\n\x03_id\" \n\x1e\x44\x65leteConnectedAccountResponse\"\xd3\x08\n&GetMagicLinkForConnectedAccountRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12P\n\tconnector\x18\x03 \x01(\tB-\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x07r\x05\x10\x00\x18\x90\x03H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12]\n\x02id\x18\x05 \x01(\tBH\x92\x41\x37\x32+Unique identifier for the connected accountJ\x08\"ca_123\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_H\x04R\x02id\x88\x01\x01\x12\xcf\x01\n\x05state\x18\x07 \x01(\tB\xb3\x01\x92\x41\xa5\x01\x32wOptional opaque state value. State added to the user verify redirect URL query params to validate the user verificationJ*\"QVNDSUFyY2hhYml0dGVyXzE2ODQ5NzIwNzI0NTY=\"\xbaH\x07r\x05\x10\x00\x18\x80\x04H\x05R\x05state\x88\x01\x01\x12\x9d\x01\n\x0fuser_verify_url\x18\x08 \x01(\tBp\x92\x41T2\"B2B app\'s user verify redirect URLJ.\"https://app.yourapp.com/user/verify/callback\"\xbaH\x16r\x14\x10\x00\x18\x80\x10\x32\r^$|^https?://H\x06R\ruserVerifyUrl\x88\x01\x01\x42\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifierB\x05\n\x03_idB\x08\n\x06_stateB\x12\n\x10_user_verify_url\"\x9c\x02\n\'GetMagicLinkForConnectedAccountResponse\x12r\n\x04link\x18\x01 \x01(\tB^\x92\x41[2%Authentication link for the connectorJ2\"https://notion.com/oauth/authorize?client_id=...\"R\x04link\x12}\n\x06\x65xpiry\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBI\x92\x41\x46\x32,Expiry timestamp for the authentication linkJ\x16\"2024-03-20T15:04:05Z\"R\x06\x65xpiry\"\xeb\x02\n!VerifyConnectedAccountUserRequest\x12\xc8\x01\n\x0f\x61uth_request_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x8e\x01\x32`Auth request ID as base64url-encoded opaque token from the user verify redirect URL query paramsJ*\"QVNDSUFyY2hhYml0dGVyXzE2ODQ5NzIwNzI0NTY=\"\xe0\x41\x02\xbaH\x07r\x05\x10\x01\x18\xe8\x07R\rauthRequestId\x12{\n\nidentifier\x18\x02 \x01(\tB[\x92\x41K25Current logged in user\'s connected account identifierJ\x12\"user@example.com\"\xe0\x41\x02\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\nidentifier\"\xd3\x01\n\"VerifyConnectedAccountUserResponse\x12\xac\x01\n\x1dpost_user_verify_redirect_url\x18\x01 \x01(\tBj\x92\x41g29URL to redirect the user to after successful verificationJ*\"https://env1.example.com/connect/success\"R\x19postUserVerifyRedirectUrl\"\xc3\x05\n&GetConnectedAccountByIdentifierRequest\x12t\n\x0forganization_id\x18\x01 \x01(\tBF\x92\x41:2!Organization ID for the connectorJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12]\n\x07user_id\x18\x02 \x01(\tB?\x92\x41\x33\x32\x19User ID for the connectorJ\x16\"user_121312434123312\"\xbaH\x06r\x04\x10\x00\x18 H\x01R\x06userId\x88\x01\x01\x12P\n\tconnector\x18\x03 \x01(\tB-\x92\x41 2\x14\x43onnector identifierJ\x08\"notion\"\xbaH\x07r\x05\x10\x00\x18\x90\x03H\x02R\tconnector\x88\x01\x01\x12\xce\x01\n\nidentifier\x18\x04 \x01(\tB\xa8\x01\x92\x41\x9b\x01\x32\x84\x01The unique identifier for the connected account within the third-party service (e.g., email address, user ID, workspace identifier).J\x12\"user@example.com\"\xbaH\x06r\x04\x10\x00\x18\x64H\x03R\nidentifier\x88\x01\x01\x12]\n\x02id\x18\x05 \x01(\tBH\x92\x41\x37\x32+Unique identifier for the connected accountJ\x08\"ca_123\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_H\x04R\x02id\x88\x01\x01\x42\x12\n\x10_organization_idB\n\n\x08_user_idB\x0c\n\n_connectorB\r\n\x0b_identifierB\x05\n\x03_id\"\xbe\x02\n\'GetConnectedAccountByIdentifierResponse\x12\x92\x02\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountB\xb2\x01\x92\x41\xae\x01\x32\xab\x01The connected account with complete details including sensitive authorization credentials (access tokens, refresh tokens, scopes). Handle with appropriate access controls.R\x10\x63onnectedAccount\"\xe3\x13\n\x10\x43onnectedAccount\x12\xbc\x01\n\nidentifier\x18\x01 \x01(\tB\x9b\x01\x92\x41\x97\x01\x32\x80\x01The unique identifier for this account in the third-party service. Typically an email address, user ID, or workspace identifier.J\x12\"user@example.com\"R\nidentifier\x12\xaa\x01\n\x08provider\x18\x02 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32}OAuth provider name (e.g., \'google\', \'microsoft\', \'github\'). Identifies which authentication service manages this connection.J\x08\"google\"R\x08provider\x12\xe4\x01\n\x06status\x18\x03 \x01(\x0e\x32/.scalekit.v1.connected_accounts.ConnectorStatusB\x9a\x01\x92\x41\x96\x01\x32\x93\x01\x43urrent status of the connected account. Indicates if the account is active, expired, pending authorization, or pending user identity verification.R\x06status\x12\xe9\x01\n\x12\x61uthorization_type\x18\x04 \x01(\x0e\x32-.scalekit.v1.connected_accounts.ConnectorTypeB\x8a\x01\x92\x41\x86\x01\x32\x83\x01Type of authorization mechanism used. Specifies whether this connection uses OAuth, API keys, bearer tokens, or other auth methods.R\x11\x61uthorizationType\x12\x81\x02\n\x15\x61uthorization_details\x18\x05 \x01(\x0b\x32\x34.scalekit.v1.connected_accounts.AuthorizationDetailsB\x95\x01\x92\x41\x91\x01\x32\x8e\x01Sensitive authentication credentials including access tokens, refresh tokens, and scopes. Contains either OAuth tokens or static auth details.R\x14\x61uthorizationDetails\x12\xce\x01\n\x10token_expires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x87\x01\x92\x41\x83\x01\x32iExpiration timestamp for the access token. After this time, the token must be refreshed or re-authorized.J\x16\"2024-12-31T23:59:59Z\"R\x0etokenExpiresAt\x12\xc9\x01\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x8d\x01\x92\x41\x89\x01\x32oTimestamp when this connected account was last modified. Updated whenever credentials or configuration changes.J\x16\"2024-03-20T15:04:05Z\"R\tupdatedAt\x12\xae\x01\n\tconnector\x18\x08 \x01(\tB\x8f\x01\x92\x41\x8b\x01\x32\x7f\x43onnector identifier (e.g., \'notion\', \'slack\', \'salesforce\'). Indicates which third-party application this account connects to.J\x08\"notion\"R\tconnector\x12\xcd\x01\n\x0clast_used_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x8e\x01\x92\x41\x8a\x01\x32pTimestamp when this connected account was last used to make an API call. Useful for tracking active connections.J\x16\"2024-03-20T14:30:00Z\"R\nlastUsedAt\x12\x98\x01\n\x02id\x18\n \x01(\tB\x87\x01\x92\x41v2\\Unique Scalekit-generated identifier for this connected account. Always prefixed with \'ca_\'.J\x16\"ca_24834495392086178\"\xbaH\x0br\t\x10\x00\x18 :\x03\x63\x61_R\x02id\x12\xc6\x01\n\rconnection_id\x18\x0b \x01(\tB\xa0\x01\x92\x41\x93\x01\x32wReference to the parent connection configuration. Links this account to a specific connector setup in your environment.J\x18\"conn_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x0c\x63onnectionId\x12\x89\x02\n\napi_config\x18\x0c \x01(\x0b\x32\x17.google.protobuf.StructB\xd0\x01\x92\x41\xcc\x01\x32xOptional JSON configuration for connector-specific API settings such as rate limits, custom endpoints, or feature flags.JP{\"rate_limit\": 1000, \"timeout\": 30, \"base_url\": \"https://api.custom-domain.com\"}R\tapiConfig\"\x9a\x06\n\x16\x43reateConnectedAccount\x12\xae\x03\n\x15\x61uthorization_details\x18\x05 \x01(\x0b\x32\x34.scalekit.v1.connected_accounts.AuthorizationDetailsB\xc2\x02\x92\x41\xbe\x02\x32\xcd\x01Optional authentication credentials for the connected account. Include OAuth tokens (access_token, refresh_token, scopes) or static auth details (API keys, bearer tokens). Can be provided later via update.Jl{\"oauth_token\": {\"access_token\": \"ya29.a0...\", \"refresh_token\": \"1//0g...\", \"scopes\": [\"email\", \"profile\"]}}R\x14\x61uthorizationDetails\x12\x98\x02\n\napi_config\x18\x0b \x01(\x0b\x32\x17.google.protobuf.StructB\xdf\x01\x92\x41\xdb\x01\x32\x86\x01Optional JSON configuration for connector-specific API settings such as rate limits, custom API endpoints, timeouts, or feature flags.JP{\"rate_limit\": 1000, \"timeout\": 30, \"base_url\": \"https://api.custom-domain.com\"}R\tapiConfigJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08J\x04\x08\x08\x10\tJ\x04\x08\t\x10\nJ\x04\x08\n\x10\x0b\"\xbc\x05\n\x16UpdateConnectedAccount\x12\x8d\x03\n\x15\x61uthorization_details\x18\x05 \x01(\x0b\x32\x34.scalekit.v1.connected_accounts.AuthorizationDetailsB\xa1\x02\x92\x41\x9d\x02\x32\x99\x01Updated authentication credentials. Provide new OAuth tokens (e.g., after refresh) or updated static auth details. Only included fields will be modified.J\x7f{\"oauth_token\": {\"access_token\": \"ya29.new_token...\", \"refresh_token\": \"1//0g...\", \"scopes\": [\"email\", \"profile\", \"calendar\"]}}R\x14\x61uthorizationDetails\x12\xe1\x01\n\napi_config\x18\n \x01(\x0b\x32\x17.google.protobuf.StructB\xa8\x01\x92\x41\xa4\x01\x32}Updated JSON configuration for API-specific settings. Merges with existing configuration - only provided fields are modified.J#{\"rate_limit\": 2000, \"timeout\": 60}R\tapiConfigJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08J\x04\x08\x08\x10\tJ\x04\x08\t\x10\n\"\xe0\x08\n\x17\x43onnectedAccountForList\x12{\n\nidentifier\x18\x01 \x01(\tB[\x92\x41X2BThe unique identifier for this account in the third-party service.J\x12\"user@example.com\"R\nidentifier\x12]\n\x08provider\x18\x02 \x01(\tBA\x92\x41>22OAuth provider name (e.g., \'google\', \'microsoft\').J\x08\"google\"R\x08provider\x12h\n\x06status\x18\x03 \x01(\x0e\x32/.scalekit.v1.connected_accounts.ConnectorStatusB\x1f\x92\x41\x1c\x32\x1a\x43urrent connection status.R\x06status\x12\x80\x01\n\x12\x61uthorization_type\x18\x04 \x01(\x0e\x32-.scalekit.v1.connected_accounts.ConnectorTypeB\"\x92\x41\x1f\x32\x1d\x41uthorization mechanism type.R\x11\x61uthorizationType\x12~\n\x10token_expires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB8\x92\x41\x35\x32\x1bToken expiration timestamp.J\x16\"2024-12-31T23:59:59Z\"R\x0etokenExpiresAt\x12t\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB9\x92\x41\x36\x32\x1cLast modification timestamp.J\x16\"2024-03-20T15:04:05Z\"R\tupdatedAt\x12\x42\n\tconnector\x18\x08 \x01(\tB$\x92\x41!2\x15\x43onnector identifier.J\x08\"notion\"R\tconnector\x12p\n\x0clast_used_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampB2\x92\x41/2\x15Last usage timestamp.J\x16\"2024-03-20T14:30:00Z\"R\nlastUsedAt\x12Q\n\x02id\x18\n \x01(\tBA\x92\x41>2$Unique connected account identifier.J\x16\"ca_24834495392086178\"R\x02id\x12w\n\rconnection_id\x18\x0b \x01(\tBR\x92\x41\x46\x32*Parent connection configuration reference.J\x18\"conn_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x0c\x63onnectionIdJ\x04\x08\x05\x10\x06\"\xbf\x01\n\x14\x41uthorizationDetails\x12M\n\x0boauth_token\x18\x01 \x01(\x0b\x32*.scalekit.v1.connected_accounts.OauthTokenH\x00R\noauthToken\x12M\n\x0bstatic_auth\x18\x02 \x01(\x0b\x32*.scalekit.v1.connected_accounts.StaticAuthH\x00R\nstaticAuthB\t\n\x07\x64\x65tails\"\xdc\x05\n\nOauthToken\x12\xa0\x01\n\x0c\x61\x63\x63\x65ss_token\x18\x01 \x01(\tB}\x92\x41z2bOAuth access token for API requests. Typically short-lived and must be refreshed after expiration.J\x14\"ya29.a0AfH6SMBx...\"R\x0b\x61\x63\x63\x65ssToken\x12\xae\x01\n\rrefresh_token\x18\x02 \x01(\tB\x88\x01\x92\x41\x84\x01\x32nOAuth refresh token for obtaining new access tokens. Long-lived and used to maintain persistent authorization.J\x12\"1//0gHJxZ-Lb2...\"R\x0crefreshToken\x12\xe1\x01\n\x06scopes\x18\x03 \x03(\tB\xc8\x01\x92\x41\xc4\x01\x32\\List of granted OAuth scopes defining the permissions and access levels for this connection.Jd[\"https://www.googleapis.com/auth/drive.readonly\", \"https://www.googleapis.com/auth/userinfo.email\"]R\x06scopes\x12\x95\x01\n\x06\x64omain\x18\x04 \x01(\tB}\x92\x41z2iAssociated domain for workspace or organization-scoped OAuth connections (e.g., Google Workspace domain).J\r\"example.com\"R\x06\x64omain\"\xf4\x01\n\nStaticAuth\x12\xe5\x01\n\x07\x64\x65tails\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\xb1\x01\x92\x41\xad\x01\x32zFlexible JSON structure containing static credentials. Format varies by connector type (API key, username/password, etc.).J/{\"api_key\": \"sk_live_...\", \"api_secret\": \"...\"}R\x07\x64\x65tails\"\x83\x02\n\x1aGetConnectedAccountRequest\x12\xe4\x01\n\x02id\x18\x01 \x01(\tB\xd3\x01\x92\x41\xc6\x01\x32\xab\x01Unique identifier for the connected account. Always prefixed with \'ca_\'. If omitted (via the /this path), the connected account is resolved from the current token context.J\x16\"ca_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x02id\"\xc5\x01\n\x1bGetConnectedAccountResponse\x12\xa5\x01\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountBF\x92\x41\x43\x32\x41The connected account with its details and authentication status.R\x10\x63onnectedAccount\"\xb2\x01\n!DisconnectConnectedAccountRequest\x12\x8c\x01\n\x02id\x18\x01 \x01(\tB|\x92\x41p2VUnique identifier for the connected account to disconnect. Always prefixed with \'ca_\'.J\x16\"ca_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x02id\"\xc6\x01\n\"DisconnectConnectedAccountResponse\x12\x9f\x01\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountB@\x92\x41=2;The connected account with its updated DISCONNECTED status.R\x10\x63onnectedAccount*\x8b\x01\n\x0f\x43onnectorStatus\x12!\n\x1d\x43ONNECTION_STATUS_UNSPECIFIED\x10\x00\x12\n\n\x06\x41\x43TIVE\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x12\x10\n\x0cPENDING_AUTH\x10\x03\x12\x18\n\x14PENDING_VERIFICATION\x10\x04\x12\x10\n\x0c\x44ISCONNECTED\x10\x05*\xa3\x01\n\rConnectorType\x12\x1f\n\x1b\x43ONNECTION_TYPE_UNSPECIFIED\x10\x00\x12\t\n\x05OAUTH\x10\x01\x12\x0b\n\x07\x41PI_KEY\x10\x02\x12\x0e\n\nBASIC_AUTH\x10\x03\x12\x10\n\x0c\x42\x45\x41RER_TOKEN\x10\x04\x12\n\n\x06\x43USTOM\x10\x05\x12\t\n\x05\x42\x41SIC\x10\x06\x12\r\n\tOAUTH_M2M\x10\x07\x12\x11\n\rTRELLO_OAUTH1\x10\x08\x32\xf8N\n\x17\x43onnectedAccountService\x12\xde\x06\n\x15ListConnectedAccounts\x12<.scalekit.v1.connected_accounts.ListConnectedAccountsRequest\x1a=.scalekit.v1.connected_accounts.ListConnectedAccountsResponse\"\xc7\x05\x92\x41\x9b\x05\n\x12\x43onnected Accounts\x12\x17List connected accounts\x1a\x9a\x02Retrieves a paginated list of connected accounts for third-party integrations. Filter by organization, user, connector type, provider, or identifier. Returns OAuth tokens, API keys, and connection status for each account. Use pagination tokens to navigate through large result sets.J\xaf\x01\n\x03\x32\x30\x30\x12\xa7\x01\nbSuccessfully retrieved the list of connected accounts with their authentication details and status\x12\x41\n?\x1a=.scalekit.v1.connected_accounts.ListConnectedAccountsResponseJY\n\x03\x34\x30\x30\x12R\nPInvalid request - occurs when query parameters are malformed or validation failsJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/connected_accounts\x12\xe0\x06\n\x17SearchConnectedAccounts\x12>.scalekit.v1.connected_accounts.SearchConnectedAccountsRequest\x1a?.scalekit.v1.connected_accounts.SearchConnectedAccountsResponse\"\xc3\x05\x92\x41\x90\x05\n\x12\x43onnected Accounts\x12\x19Search connected accounts\x1a\x99\x02Search for connected accounts in your environment using a text query that matches against identifiers, providers, or connectors. The search performs case-insensitive matching across account details. Returns paginated results with account status and authentication type information.J\x99\x01\n\x03\x32\x30\x30\x12\x91\x01\nJSuccessfully retrieved matching connected accounts with pagination support\x12\x43\nA\x1a?.scalekit.v1.connected_accounts.SearchConnectedAccountsResponseJc\n\x03\x34\x30\x30\x12\\\nZInvalid request - query parameter is too short (minimum 3 characters) or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02#\x12!/api/v1/connected_accounts:search\x12\xfe\x07\n\x16\x43reateConnectedAccount\x12=.scalekit.v1.connected_accounts.CreateConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.CreateConnectedAccountResponse\"\xe4\x06\x92\x41\xb5\x06\n\x12\x43onnected Accounts\x12\x1a\x43reate a connected account\x1a\xdf\x02\x43reates a new connected account with OAuth tokens or API credentials for third-party service integration. Supply authorization details including access tokens, refresh tokens, scopes, and optional API configuration. The account can be scoped to an organization or user. Returns the created account with its unique identifier and authentication status.J\xa4\x01\n\x03\x32\x30\x31\x12\x9c\x01\nVConnected account created successfully with authentication credentials stored securely\x12\x42\n@\x1a>.scalekit.v1.connected_accounts.CreateConnectedAccountResponseJg\n\x03\x34\x30\x30\x12`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJM\n\x03\x34\x30\x39\x12\x46\nDConflict - connected account with the same identifier already exists\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1f\"\x1a/api/v1/connected_accounts:\x01*\x12\xf0\x07\n\x16UpdateConnectedAccount\x12=.scalekit.v1.connected_accounts.UpdateConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.UpdateConnectedAccountResponse\"\xd6\x06\x92\x41\xa6\x06\n\x12\x43onnected Accounts\x12$Update connected account credentials\x1a\xd2\x02Updates authentication credentials and configuration for an existing connected account. Modify OAuth tokens, refresh tokens, access scopes, or API configuration settings. Specify the account by ID, or by combination of organization/user, connector, and identifier. Returns the updated account with new token expiry and status information.J\x9a\x01\n\x03\x32\x30\x30\x12\x92\x01\nLConnected account updated successfully with new credentials or configuration\x12\x42\n@\x1a>.scalekit.v1.connected_accounts.UpdateConnectedAccountResponseJg\n\x03\x34\x30\x30\x12`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJK\n\x03\x34\x30\x34\x12\x44\nBConnected account not found - the specified account does not exist\x82\xb5\x18\x03\x18\xc4\x01\x82\xd3\xe4\x93\x02\x1f\x1a\x1a/api/v1/connected_accounts:\x01*\x12\xc6\x06\n\x16\x44\x65leteConnectedAccount\x12=.scalekit.v1.connected_accounts.DeleteConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.DeleteConnectedAccountResponse\"\xac\x05\x92\x41\xf6\x04\n\x12\x43onnected Accounts\x12\x1a\x44\x65lete a connected account\x1a\x9f\x02Permanently removes a connected account and revokes all associated authentication credentials. Identify the account by ID, or by combination of organization/user, connector, and identifier. This action cannot be undone. All OAuth tokens and API keys for this account will be invalidated.JK\n\x03\x32\x30\x30\x12\x44\nBConnected account deleted successfully and all credentials revokedJD\n\x03\x34\x30\x30\x12=\n;Invalid request - malformed parameters or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJK\n\x03\x34\x30\x34\x12\x44\nBConnected account not found - the specified account does not exist\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02&\"!/api/v1/connected_accounts:delete:\x01*\x12\xff\x06\n\x1fGetMagicLinkForConnectedAccount\x12\x46.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountRequest\x1aG.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountResponse\"\xca\x05\x92\x41\x90\x05\n\x12\x43onnected Accounts\x12\"Generate authentication magic link\x1a\xa2\x02\x43reates a time-limited magic link for connecting or re-authorizing a third-party account. The link directs users to the OAuth authorization flow for the specified connector. Returns the generated link URL and expiration timestamp. Links typically expire after a short duration for security.J\x9f\x01\n\x03\x32\x30\x30\x12\x97\x01\nHMagic link generated successfully with authorization URL and expiry time\x12K\nI\x1aG.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountResponseJK\n\x03\x34\x30\x30\x12\x44\nBInvalid request - missing required parameters or invalid connectorJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02*\"%/api/v1/connected_accounts/magic_link:\x01*\x12\xf6\x05\n\x13GetConnectedAccount\x12:.scalekit.v1.connected_accounts.GetConnectedAccountRequest\x1a;.scalekit.v1.connected_accounts.GetConnectedAccountResponse\"\xe5\x04\x92\x41\x90\x04\n\x12\x43onnected Accounts\x12\x17Get a connected account\x1a\xb8\x01Retrieves a connected account by its unique ID. Use the path \'/this\' (e.g. /api/v1/connected_accounts/this) to retrieve the connected account associated with the current token context.Jv\n\x03\x32\x30\x30\x12o\n,Successfully retrieved the connected account\x12?\n=\x1a;.scalekit.v1.connected_accounts.GetConnectedAccountResponseJD\n\x03\x34\x30\x30\x12=\n;Invalid request - missing or malformed connected account IDJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJ$\n\x03\x34\x30\x34\x12\x1d\n\x1b\x43onnected account not found\x82\xb5\x18\x03\x18\xc4\x01\x82\xd3\xe4\x93\x02\x44\x12\x1f/api/v1/connected_accounts/thisZ!\x12\x1f/api/v1/connected_accounts/{id}\x12\x86\x06\n\x1a\x44isconnectConnectedAccount\x12\x41.scalekit.v1.connected_accounts.DisconnectConnectedAccountRequest\x1a\x42.scalekit.v1.connected_accounts.DisconnectConnectedAccountResponse\"\xe0\x04\x92\x41\xf2\x03\n\x12\x43onnected Accounts\x12\x1e\x44isconnect a connected account\x1a\x88\x01\x44isconnects a connected account by setting its status to DISCONNECTED. The account record is retained but is marked as no longer active.J\x80\x01\n\x03\x32\x30\x30\x12y\n/Successfully disconnected the connected account\x12\x46\nD\x1a\x42.scalekit.v1.connected_accounts.DisconnectConnectedAccountResponseJD\n\x03\x34\x30\x30\x12=\n;Invalid request - missing or malformed connected account IDJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJ$\n\x03\x34\x30\x34\x12\x1d\n\x1b\x43onnected account not found\x82\xb5\x18\x03\x18\xc4\x01\x82\xd3\xe4\x93\x02]\"*/api/v1/connected_accounts/{id}:disconnect:\x01*Z,\"\'/api/v1/connected_accounts/-:disconnect:\x01*\x12\xb6\x07\n\x17GetConnectedAccountAuth\x12\x46.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierRequest\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponse\"\x89\x06\x92\x41\xd8\x05\n\x12\x43onnected Accounts\x12\x1dGet connected account details\x1a\xab\x02Retrieves complete authentication details for a connected account including OAuth tokens, refresh tokens, scopes, and API configuration. Query by account ID or by combination of organization/user, connector, and identifier. Returns sensitive credential information - use appropriate access controls.J\xa0\x01\n\x03\x32\x30\x30\x12\x98\x01\nISuccessfully retrieved connected account with full authentication details\x12K\nI\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponseJ<\n\x03\x34\x30\x30\x12\x35\n3Invalid request - missing required query parametersJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJP\n\x03\x34\x30\x34\x12I\nGConnected account not found - no account matches the specified criteria\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02!\x12\x1f/api/v1/connected_accounts/auth\x12\xfa\x06\n\x1aGetConnectedAccountDetails\x12\x46.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierRequest\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponse\"\xca\x05\x92\x41\x96\x05\n\x12\x43onnected Accounts\x12\x1dGet connected account details\x1a\x83\x02Returns metadata for a connected account including status, connector type, provider, and configuration without exposing stored authorization credentials. Look up by account ID, or by a combination of organization (or user), connector, and external identifier.J\x86\x01\n\x03\x32\x30\x30\x12\x7f\n0Successfully retrieved connected account details\x12K\nI\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponseJ<\n\x03\x34\x30\x30\x12\x35\n3Invalid request - missing required query parametersJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJP\n\x03\x34\x30\x34\x12I\nGConnected account not found - no account matches the specified criteria\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02$\x12\"/api/v1/connected_accounts/details\x12\xbb\x07\n\x1aVerifyConnectedAccountUser\x12\x41.scalekit.v1.connected_accounts.VerifyConnectedAccountUserRequest\x1a\x42.scalekit.v1.connected_accounts.VerifyConnectedAccountUserResponse\"\x95\x06\x92\x41\xda\x05\n\x12\x43onnected Accounts\x12\x1dVerify connected account user\x1a\xa4\x02\x43onfirms the user assertion and activates the connected account after the user completes third-party OAuth. Called by the B2B app server with auth_request_id and identifier. Validates that the asserted identifier matches the one stored on the auth request and promotes pending tokens to live.J\x8a\x01\n\x03\x32\x30\x30\x12\x82\x01\n8Verification successful; connected account is now ACTIVE\x12\x46\nD\x1a\x42.scalekit.v1.connected_accounts.VerifyConnectedAccountUserResponseJ6\n\x03\x34\x30\x30\x12/\n-Invalid request - missing or malformed fieldsJ7\n\x03\x34\x30\x31\x12\x30\n.Unauthorized - invalid or missing access tokenJ(\n\x03\x34\x30\x33\x12!\n\x1f\x46orbidden - identifier mismatchJV\n\x03\x34\x30\x34\x12O\nMNot found - no pending flow for the given auth_request_id or already consumed\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02+\"&/api/v1/connected_accounts/user/verify:\x01*\x1a\xe3\x01\x92\x41\xdf\x01\n\x12\x43onnected Accounts\x12\xc8\x01Manage connected accounts for third-party integrations and OAuth connections. Connected accounts represent authenticated access to external services like Google, Notion, Slack, and other applications.B\xa4\x02Z22OAuth provider name (e.g., \'google\', \'microsoft\').J\x08\"google\"R\x08provider\x12h\n\x06status\x18\x03 \x01(\x0e\x32/.scalekit.v1.connected_accounts.ConnectorStatusB\x1f\x92\x41\x1c\x32\x1a\x43urrent connection status.R\x06status\x12\x80\x01\n\x12\x61uthorization_type\x18\x04 \x01(\x0e\x32-.scalekit.v1.connected_accounts.ConnectorTypeB\"\x92\x41\x1f\x32\x1d\x41uthorization mechanism type.R\x11\x61uthorizationType\x12~\n\x10token_expires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB8\x92\x41\x35\x32\x1bToken expiration timestamp.J\x16\"2024-12-31T23:59:59Z\"R\x0etokenExpiresAt\x12t\n\nupdated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB9\x92\x41\x36\x32\x1cLast modification timestamp.J\x16\"2024-03-20T15:04:05Z\"R\tupdatedAt\x12\x42\n\tconnector\x18\x08 \x01(\tB$\x92\x41!2\x15\x43onnector identifier.J\x08\"notion\"R\tconnector\x12p\n\x0clast_used_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampB2\x92\x41/2\x15Last usage timestamp.J\x16\"2024-03-20T14:30:00Z\"R\nlastUsedAt\x12Q\n\x02id\x18\n \x01(\tBA\x92\x41>2$Unique connected account identifier.J\x16\"ca_24834495392086178\"R\x02id\x12w\n\rconnection_id\x18\x0b \x01(\tBR\x92\x41\x46\x32*Parent connection configuration reference.J\x18\"conn_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x0c\x63onnectionIdJ\x04\x08\x05\x10\x06\"\x8f\x02\n\x14\x41uthorizationDetails\x12M\n\x0boauth_token\x18\x01 \x01(\x0b\x32*.scalekit.v1.connected_accounts.OauthTokenH\x00R\noauthToken\x12M\n\x0bstatic_auth\x18\x02 \x01(\x0b\x32*.scalekit.v1.connected_accounts.StaticAuthH\x00R\nstaticAuth\x12N\n\ngoogle_dwd\x18\x03 \x01(\x0b\x32-.scalekit.v1.connected_accounts.GoogleDWDAuthH\x00R\tgoogleDwdB\t\n\x07\x64\x65tails\"\xd8\x04\n\rGoogleDWDAuth\x12\x88\x01\n\x07subject\x18\x01 \x01(\tBn\x92\x41k2UEmail address of the Google Workspace user to impersonate via Domain-Wide Delegation.J\x12\"user@example.com\"R\x07subject\x12\x91\x01\n\x0c\x61\x63\x63\x65ss_token\x18\x02 \x01(\tBn\x92\x41h2POAuth access token acquired via the jwt-bearer grant. Present in responses only.J\x14\"ya29.a0AfH6SMBx...\"\xe0\x41\x03R\x0b\x61\x63\x63\x65ssToken\x12\x9d\x01\n\x06scopes\x18\x03 \x03(\tB\x84\x01\x92\x41~2>OAuth scopes granted to this token. Present in responses only.J<[\"openid\", \"https://www.googleapis.com/auth/userinfo.email\"]\xe0\x41\x03R\x06scopes\x12\x87\x01\n\x10token_expires_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampBA\x92\x41;29When the access token expires. Present in responses only.\xe0\x41\x03R\x0etokenExpiresAt\"\xdc\x05\n\nOauthToken\x12\xa0\x01\n\x0c\x61\x63\x63\x65ss_token\x18\x01 \x01(\tB}\x92\x41z2bOAuth access token for API requests. Typically short-lived and must be refreshed after expiration.J\x14\"ya29.a0AfH6SMBx...\"R\x0b\x61\x63\x63\x65ssToken\x12\xae\x01\n\rrefresh_token\x18\x02 \x01(\tB\x88\x01\x92\x41\x84\x01\x32nOAuth refresh token for obtaining new access tokens. Long-lived and used to maintain persistent authorization.J\x12\"1//0gHJxZ-Lb2...\"R\x0crefreshToken\x12\xe1\x01\n\x06scopes\x18\x03 \x03(\tB\xc8\x01\x92\x41\xc4\x01\x32\\List of granted OAuth scopes defining the permissions and access levels for this connection.Jd[\"https://www.googleapis.com/auth/drive.readonly\", \"https://www.googleapis.com/auth/userinfo.email\"]R\x06scopes\x12\x95\x01\n\x06\x64omain\x18\x04 \x01(\tB}\x92\x41z2iAssociated domain for workspace or organization-scoped OAuth connections (e.g., Google Workspace domain).J\r\"example.com\"R\x06\x64omain\"\xf4\x01\n\nStaticAuth\x12\xe5\x01\n\x07\x64\x65tails\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructB\xb1\x01\x92\x41\xad\x01\x32zFlexible JSON structure containing static credentials. Format varies by connector type (API key, username/password, etc.).J/{\"api_key\": \"sk_live_...\", \"api_secret\": \"...\"}R\x07\x64\x65tails\"\x83\x02\n\x1aGetConnectedAccountRequest\x12\xe4\x01\n\x02id\x18\x01 \x01(\tB\xd3\x01\x92\x41\xc6\x01\x32\xab\x01Unique identifier for the connected account. Always prefixed with \'ca_\'. If omitted (via the /this path), the connected account is resolved from the current token context.J\x16\"ca_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x02id\"\xc5\x01\n\x1bGetConnectedAccountResponse\x12\xa5\x01\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountBF\x92\x41\x43\x32\x41The connected account with its details and authentication status.R\x10\x63onnectedAccount\"\xb2\x01\n!DisconnectConnectedAccountRequest\x12\x8c\x01\n\x02id\x18\x01 \x01(\tB|\x92\x41p2VUnique identifier for the connected account to disconnect. Always prefixed with \'ca_\'.J\x16\"ca_24834495392086178\"\xbaH\x06r\x04\x10\x00\x18 R\x02id\"\xc6\x01\n\"DisconnectConnectedAccountResponse\x12\x9f\x01\n\x11\x63onnected_account\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connected_accounts.ConnectedAccountB@\x92\x41=2;The connected account with its updated DISCONNECTED status.R\x10\x63onnectedAccount*\x8b\x01\n\x0f\x43onnectorStatus\x12!\n\x1d\x43ONNECTION_STATUS_UNSPECIFIED\x10\x00\x12\n\n\x06\x41\x43TIVE\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x12\x10\n\x0cPENDING_AUTH\x10\x03\x12\x18\n\x14PENDING_VERIFICATION\x10\x04\x12\x10\n\x0c\x44ISCONNECTED\x10\x05*\xb3\x01\n\rConnectorType\x12\x1f\n\x1b\x43ONNECTION_TYPE_UNSPECIFIED\x10\x00\x12\t\n\x05OAUTH\x10\x01\x12\x0b\n\x07\x41PI_KEY\x10\x02\x12\x0e\n\nBASIC_AUTH\x10\x03\x12\x10\n\x0c\x42\x45\x41RER_TOKEN\x10\x04\x12\n\n\x06\x43USTOM\x10\x05\x12\t\n\x05\x42\x41SIC\x10\x06\x12\r\n\tOAUTH_M2M\x10\x07\x12\x11\n\rTRELLO_OAUTH1\x10\x08\x12\x0e\n\nGOOGLE_DWD\x10\t2\xf8N\n\x17\x43onnectedAccountService\x12\xde\x06\n\x15ListConnectedAccounts\x12<.scalekit.v1.connected_accounts.ListConnectedAccountsRequest\x1a=.scalekit.v1.connected_accounts.ListConnectedAccountsResponse\"\xc7\x05\x92\x41\x9b\x05\n\x12\x43onnected Accounts\x12\x17List connected accounts\x1a\x9a\x02Retrieves a paginated list of connected accounts for third-party integrations. Filter by organization, user, connector type, provider, or identifier. Returns OAuth tokens, API keys, and connection status for each account. Use pagination tokens to navigate through large result sets.J\xaf\x01\n\x03\x32\x30\x30\x12\xa7\x01\nbSuccessfully retrieved the list of connected accounts with their authentication details and status\x12\x41\n?\x1a=.scalekit.v1.connected_accounts.ListConnectedAccountsResponseJY\n\x03\x34\x30\x30\x12R\nPInvalid request - occurs when query parameters are malformed or validation failsJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/connected_accounts\x12\xe0\x06\n\x17SearchConnectedAccounts\x12>.scalekit.v1.connected_accounts.SearchConnectedAccountsRequest\x1a?.scalekit.v1.connected_accounts.SearchConnectedAccountsResponse\"\xc3\x05\x92\x41\x90\x05\n\x12\x43onnected Accounts\x12\x19Search connected accounts\x1a\x99\x02Search for connected accounts in your environment using a text query that matches against identifiers, providers, or connectors. The search performs case-insensitive matching across account details. Returns paginated results with account status and authentication type information.J\x99\x01\n\x03\x32\x30\x30\x12\x91\x01\nJSuccessfully retrieved matching connected accounts with pagination support\x12\x43\nA\x1a?.scalekit.v1.connected_accounts.SearchConnectedAccountsResponseJc\n\x03\x34\x30\x30\x12\\\nZInvalid request - query parameter is too short (minimum 3 characters) or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02#\x12!/api/v1/connected_accounts:search\x12\xfe\x07\n\x16\x43reateConnectedAccount\x12=.scalekit.v1.connected_accounts.CreateConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.CreateConnectedAccountResponse\"\xe4\x06\x92\x41\xb5\x06\n\x12\x43onnected Accounts\x12\x1a\x43reate a connected account\x1a\xdf\x02\x43reates a new connected account with OAuth tokens or API credentials for third-party service integration. Supply authorization details including access tokens, refresh tokens, scopes, and optional API configuration. The account can be scoped to an organization or user. Returns the created account with its unique identifier and authentication status.J\xa4\x01\n\x03\x32\x30\x31\x12\x9c\x01\nVConnected account created successfully with authentication credentials stored securely\x12\x42\n@\x1a>.scalekit.v1.connected_accounts.CreateConnectedAccountResponseJg\n\x03\x34\x30\x30\x12`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJM\n\x03\x34\x30\x39\x12\x46\nDConflict - connected account with the same identifier already exists\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1f\"\x1a/api/v1/connected_accounts:\x01*\x12\xf0\x07\n\x16UpdateConnectedAccount\x12=.scalekit.v1.connected_accounts.UpdateConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.UpdateConnectedAccountResponse\"\xd6\x06\x92\x41\xa6\x06\n\x12\x43onnected Accounts\x12$Update connected account credentials\x1a\xd2\x02Updates authentication credentials and configuration for an existing connected account. Modify OAuth tokens, refresh tokens, access scopes, or API configuration settings. Specify the account by ID, or by combination of organization/user, connector, and identifier. Returns the updated account with new token expiry and status information.J\x9a\x01\n\x03\x32\x30\x30\x12\x92\x01\nLConnected account updated successfully with new credentials or configuration\x12\x42\n@\x1a>.scalekit.v1.connected_accounts.UpdateConnectedAccountResponseJg\n\x03\x34\x30\x30\x12`\n^Invalid request - missing required fields, invalid authorization details, or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJK\n\x03\x34\x30\x34\x12\x44\nBConnected account not found - the specified account does not exist\x82\xb5\x18\x03\x18\xc4\x01\x82\xd3\xe4\x93\x02\x1f\x1a\x1a/api/v1/connected_accounts:\x01*\x12\xc6\x06\n\x16\x44\x65leteConnectedAccount\x12=.scalekit.v1.connected_accounts.DeleteConnectedAccountRequest\x1a>.scalekit.v1.connected_accounts.DeleteConnectedAccountResponse\"\xac\x05\x92\x41\xf6\x04\n\x12\x43onnected Accounts\x12\x1a\x44\x65lete a connected account\x1a\x9f\x02Permanently removes a connected account and revokes all associated authentication credentials. Identify the account by ID, or by combination of organization/user, connector, and identifier. This action cannot be undone. All OAuth tokens and API keys for this account will be invalidated.JK\n\x03\x32\x30\x30\x12\x44\nBConnected account deleted successfully and all credentials revokedJD\n\x03\x34\x30\x30\x12=\n;Invalid request - malformed parameters or validation failedJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJK\n\x03\x34\x30\x34\x12\x44\nBConnected account not found - the specified account does not exist\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02&\"!/api/v1/connected_accounts:delete:\x01*\x12\xff\x06\n\x1fGetMagicLinkForConnectedAccount\x12\x46.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountRequest\x1aG.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountResponse\"\xca\x05\x92\x41\x90\x05\n\x12\x43onnected Accounts\x12\"Generate authentication magic link\x1a\xa2\x02\x43reates a time-limited magic link for connecting or re-authorizing a third-party account. The link directs users to the OAuth authorization flow for the specified connector. Returns the generated link URL and expiration timestamp. Links typically expire after a short duration for security.J\x9f\x01\n\x03\x32\x30\x30\x12\x97\x01\nHMagic link generated successfully with authorization URL and expiry time\x12K\nI\x1aG.scalekit.v1.connected_accounts.GetMagicLinkForConnectedAccountResponseJK\n\x03\x34\x30\x30\x12\x44\nBInvalid request - missing required parameters or invalid connectorJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access token\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02*\"%/api/v1/connected_accounts/magic_link:\x01*\x12\xf6\x05\n\x13GetConnectedAccount\x12:.scalekit.v1.connected_accounts.GetConnectedAccountRequest\x1a;.scalekit.v1.connected_accounts.GetConnectedAccountResponse\"\xe5\x04\x92\x41\x90\x04\n\x12\x43onnected Accounts\x12\x17Get a connected account\x1a\xb8\x01Retrieves a connected account by its unique ID. Use the path \'/this\' (e.g. /api/v1/connected_accounts/this) to retrieve the connected account associated with the current token context.Jv\n\x03\x32\x30\x30\x12o\n,Successfully retrieved the connected account\x12?\n=\x1a;.scalekit.v1.connected_accounts.GetConnectedAccountResponseJD\n\x03\x34\x30\x30\x12=\n;Invalid request - missing or malformed connected account IDJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJ$\n\x03\x34\x30\x34\x12\x1d\n\x1b\x43onnected account not found\x82\xb5\x18\x03\x18\xc4\x01\x82\xd3\xe4\x93\x02\x44\x12\x1f/api/v1/connected_accounts/thisZ!\x12\x1f/api/v1/connected_accounts/{id}\x12\x86\x06\n\x1a\x44isconnectConnectedAccount\x12\x41.scalekit.v1.connected_accounts.DisconnectConnectedAccountRequest\x1a\x42.scalekit.v1.connected_accounts.DisconnectConnectedAccountResponse\"\xe0\x04\x92\x41\xf2\x03\n\x12\x43onnected Accounts\x12\x1e\x44isconnect a connected account\x1a\x88\x01\x44isconnects a connected account by setting its status to DISCONNECTED. The account record is retained but is marked as no longer active.J\x80\x01\n\x03\x32\x30\x30\x12y\n/Successfully disconnected the connected account\x12\x46\nD\x1a\x42.scalekit.v1.connected_accounts.DisconnectConnectedAccountResponseJD\n\x03\x34\x30\x30\x12=\n;Invalid request - missing or malformed connected account IDJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJ$\n\x03\x34\x30\x34\x12\x1d\n\x1b\x43onnected account not found\x82\xb5\x18\x03\x18\xc4\x01\x82\xd3\xe4\x93\x02]\"*/api/v1/connected_accounts/{id}:disconnect:\x01*Z,\"\'/api/v1/connected_accounts/-:disconnect:\x01*\x12\xb6\x07\n\x17GetConnectedAccountAuth\x12\x46.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierRequest\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponse\"\x89\x06\x92\x41\xd8\x05\n\x12\x43onnected Accounts\x12\x1dGet connected account details\x1a\xab\x02Retrieves complete authentication details for a connected account including OAuth tokens, refresh tokens, scopes, and API configuration. Query by account ID or by combination of organization/user, connector, and identifier. Returns sensitive credential information - use appropriate access controls.J\xa0\x01\n\x03\x32\x30\x30\x12\x98\x01\nISuccessfully retrieved connected account with full authentication details\x12K\nI\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponseJ<\n\x03\x34\x30\x30\x12\x35\n3Invalid request - missing required query parametersJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJP\n\x03\x34\x30\x34\x12I\nGConnected account not found - no account matches the specified criteria\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02!\x12\x1f/api/v1/connected_accounts/auth\x12\xfa\x06\n\x1aGetConnectedAccountDetails\x12\x46.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierRequest\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponse\"\xca\x05\x92\x41\x96\x05\n\x12\x43onnected Accounts\x12\x1dGet connected account details\x1a\x83\x02Returns metadata for a connected account including status, connector type, provider, and configuration without exposing stored authorization credentials. Look up by account ID, or by a combination of organization (or user), connector, and external identifier.J\x86\x01\n\x03\x32\x30\x30\x12\x7f\n0Successfully retrieved connected account details\x12K\nI\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponseJ<\n\x03\x34\x30\x30\x12\x35\n3Invalid request - missing required query parametersJB\n\x03\x34\x30\x31\x12;\n9Authentication required - missing or invalid access tokenJP\n\x03\x34\x30\x34\x12I\nGConnected account not found - no account matches the specified criteria\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02$\x12\"/api/v1/connected_accounts/details\x12\xbb\x07\n\x1aVerifyConnectedAccountUser\x12\x41.scalekit.v1.connected_accounts.VerifyConnectedAccountUserRequest\x1a\x42.scalekit.v1.connected_accounts.VerifyConnectedAccountUserResponse\"\x95\x06\x92\x41\xda\x05\n\x12\x43onnected Accounts\x12\x1dVerify connected account user\x1a\xa4\x02\x43onfirms the user assertion and activates the connected account after the user completes third-party OAuth. Called by the B2B app server with auth_request_id and identifier. Validates that the asserted identifier matches the one stored on the auth request and promotes pending tokens to live.J\x8a\x01\n\x03\x32\x30\x30\x12\x82\x01\n8Verification successful; connected account is now ACTIVE\x12\x46\nD\x1a\x42.scalekit.v1.connected_accounts.VerifyConnectedAccountUserResponseJ6\n\x03\x34\x30\x30\x12/\n-Invalid request - missing or malformed fieldsJ7\n\x03\x34\x30\x31\x12\x30\n.Unauthorized - invalid or missing access tokenJ(\n\x03\x34\x30\x33\x12!\n\x1f\x46orbidden - identifier mismatchJV\n\x03\x34\x30\x34\x12O\nMNot found - no pending flow for the given auth_request_id or already consumed\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02+\"&/api/v1/connected_accounts/user/verify:\x01*\x1a\xe3\x01\x92\x41\xdf\x01\n\x12\x43onnected Accounts\x12\xc8\x01Manage connected accounts for third-party integrations and OAuth connections. Connected accounts represent authenticated access to external services like Google, Notion, Slack, and other applications.B\xa4\x02Z2$Unique connected account identifier.J\026\"ca_24834495392086178\"' _globals['_CONNECTEDACCOUNTFORLIST'].fields_by_name['connection_id']._loaded_options = None _globals['_CONNECTEDACCOUNTFORLIST'].fields_by_name['connection_id']._serialized_options = b'\222AF2*Parent connection configuration reference.J\030\"conn_24834495392086178\"\272H\006r\004\020\000\030 ' + _globals['_GOOGLEDWDAUTH'].fields_by_name['subject']._loaded_options = None + _globals['_GOOGLEDWDAUTH'].fields_by_name['subject']._serialized_options = b'\222Ak2UEmail address of the Google Workspace user to impersonate via Domain-Wide Delegation.J\022\"user@example.com\"' + _globals['_GOOGLEDWDAUTH'].fields_by_name['access_token']._loaded_options = None + _globals['_GOOGLEDWDAUTH'].fields_by_name['access_token']._serialized_options = b'\222Ah2POAuth access token acquired via the jwt-bearer grant. Present in responses only.J\024\"ya29.a0AfH6SMBx...\"\340A\003' + _globals['_GOOGLEDWDAUTH'].fields_by_name['scopes']._loaded_options = None + _globals['_GOOGLEDWDAUTH'].fields_by_name['scopes']._serialized_options = b'\222A~2>OAuth scopes granted to this token. Present in responses only.J<[\"openid\", \"https://www.googleapis.com/auth/userinfo.email\"]\340A\003' + _globals['_GOOGLEDWDAUTH'].fields_by_name['token_expires_at']._loaded_options = None + _globals['_GOOGLEDWDAUTH'].fields_by_name['token_expires_at']._serialized_options = b'\222A;29When the access token expires. Present in responses only.\340A\003' _globals['_OAUTHTOKEN'].fields_by_name['access_token']._loaded_options = None _globals['_OAUTHTOKEN'].fields_by_name['access_token']._serialized_options = b'\222Az2bOAuth access token for API requests. Typically short-lived and must be refreshed after expiration.J\024\"ya29.a0AfH6SMBx...\"' _globals['_OAUTHTOKEN'].fields_by_name['refresh_token']._loaded_options = None @@ -238,10 +246,10 @@ _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['GetConnectedAccountDetails']._serialized_options = b'\222A\226\005\n\022Connected Accounts\022\035Get connected account details\032\203\002Returns metadata for a connected account including status, connector type, provider, and configuration without exposing stored authorization credentials. Look up by account ID, or by a combination of organization (or user), connector, and external identifier.J\206\001\n\003200\022\177\n0Successfully retrieved connected account details\022K\nI\032G.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponseJ<\n\003400\0225\n3Invalid request - missing required query parametersJB\n\003401\022;\n9Authentication required - missing or invalid access tokenJP\n\003404\022I\nGConnected account not found - no account matches the specified criteria\202\265\030\002\030D\202\323\344\223\002$\022\"/api/v1/connected_accounts/details' _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['VerifyConnectedAccountUser']._loaded_options = None _globals['_CONNECTEDACCOUNTSERVICE'].methods_by_name['VerifyConnectedAccountUser']._serialized_options = b'\222A\332\005\n\022Connected Accounts\022\035Verify connected account user\032\244\002Confirms the user assertion and activates the connected account after the user completes third-party OAuth. Called by the B2B app server with auth_request_id and identifier. Validates that the asserted identifier matches the one stored on the auth request and promotes pending tokens to live.J\212\001\n\003200\022\202\001\n8Verification successful; connected account is now ACTIVE\022F\nD\032B.scalekit.v1.connected_accounts.VerifyConnectedAccountUserResponseJ6\n\003400\022/\n-Invalid request - missing or malformed fieldsJ7\n\003401\0220\n.Unauthorized - invalid or missing access tokenJ(\n\003403\022!\n\037Forbidden - identifier mismatchJV\n\003404\022O\nMNot found - no pending flow for the given auth_request_id or already consumed\202\265\030\002\030D\202\323\344\223\002+\"&/api/v1/connected_accounts/user/verify:\001*' - _globals['_CONNECTORSTATUS']._serialized_start=17728 - _globals['_CONNECTORSTATUS']._serialized_end=17867 - _globals['_CONNECTORTYPE']._serialized_start=17870 - _globals['_CONNECTORTYPE']._serialized_end=18033 + _globals['_CONNECTORSTATUS']._serialized_start=18411 + _globals['_CONNECTORSTATUS']._serialized_end=18550 + _globals['_CONNECTORTYPE']._serialized_start=18553 + _globals['_CONNECTORTYPE']._serialized_end=18732 _globals['_LISTCONNECTEDACCOUNTSREQUEST']._serialized_start=359 _globals['_LISTCONNECTEDACCOUNTSREQUEST']._serialized_end=1936 _globals['_LISTCONNECTEDACCOUNTSRESPONSE']._serialized_start=1939 @@ -283,19 +291,21 @@ _globals['_CONNECTEDACCOUNTFORLIST']._serialized_start=14585 _globals['_CONNECTEDACCOUNTFORLIST']._serialized_end=15705 _globals['_AUTHORIZATIONDETAILS']._serialized_start=15708 - _globals['_AUTHORIZATIONDETAILS']._serialized_end=15899 - _globals['_OAUTHTOKEN']._serialized_start=15902 - _globals['_OAUTHTOKEN']._serialized_end=16634 - _globals['_STATICAUTH']._serialized_start=16637 - _globals['_STATICAUTH']._serialized_end=16881 - _globals['_GETCONNECTEDACCOUNTREQUEST']._serialized_start=16884 - _globals['_GETCONNECTEDACCOUNTREQUEST']._serialized_end=17143 - _globals['_GETCONNECTEDACCOUNTRESPONSE']._serialized_start=17146 - _globals['_GETCONNECTEDACCOUNTRESPONSE']._serialized_end=17343 - _globals['_DISCONNECTCONNECTEDACCOUNTREQUEST']._serialized_start=17346 - _globals['_DISCONNECTCONNECTEDACCOUNTREQUEST']._serialized_end=17524 - _globals['_DISCONNECTCONNECTEDACCOUNTRESPONSE']._serialized_start=17527 - _globals['_DISCONNECTCONNECTEDACCOUNTRESPONSE']._serialized_end=17725 - _globals['_CONNECTEDACCOUNTSERVICE']._serialized_start=18036 - _globals['_CONNECTEDACCOUNTSERVICE']._serialized_end=28140 + _globals['_AUTHORIZATIONDETAILS']._serialized_end=15979 + _globals['_GOOGLEDWDAUTH']._serialized_start=15982 + _globals['_GOOGLEDWDAUTH']._serialized_end=16582 + _globals['_OAUTHTOKEN']._serialized_start=16585 + _globals['_OAUTHTOKEN']._serialized_end=17317 + _globals['_STATICAUTH']._serialized_start=17320 + _globals['_STATICAUTH']._serialized_end=17564 + _globals['_GETCONNECTEDACCOUNTREQUEST']._serialized_start=17567 + _globals['_GETCONNECTEDACCOUNTREQUEST']._serialized_end=17826 + _globals['_GETCONNECTEDACCOUNTRESPONSE']._serialized_start=17829 + _globals['_GETCONNECTEDACCOUNTRESPONSE']._serialized_end=18026 + _globals['_DISCONNECTCONNECTEDACCOUNTREQUEST']._serialized_start=18029 + _globals['_DISCONNECTCONNECTEDACCOUNTREQUEST']._serialized_end=18207 + _globals['_DISCONNECTCONNECTEDACCOUNTRESPONSE']._serialized_start=18210 + _globals['_DISCONNECTCONNECTEDACCOUNTRESPONSE']._serialized_end=18408 + _globals['_CONNECTEDACCOUNTSERVICE']._serialized_start=18735 + _globals['_CONNECTEDACCOUNTSERVICE']._serialized_end=28839 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/connected_accounts/connected_accounts_pb2.pyi b/scalekit/v1/connected_accounts/connected_accounts_pb2.pyi index 1e10adb..05886ea 100644 --- a/scalekit/v1/connected_accounts/connected_accounts_pb2.pyi +++ b/scalekit/v1/connected_accounts/connected_accounts_pb2.pyi @@ -34,6 +34,7 @@ class ConnectorType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): BASIC: _ClassVar[ConnectorType] OAUTH_M2M: _ClassVar[ConnectorType] TRELLO_OAUTH1: _ClassVar[ConnectorType] + GOOGLE_DWD: _ClassVar[ConnectorType] CONNECTION_STATUS_UNSPECIFIED: ConnectorStatus ACTIVE: ConnectorStatus EXPIRED: ConnectorStatus @@ -49,6 +50,7 @@ CUSTOM: ConnectorType BASIC: ConnectorType OAUTH_M2M: ConnectorType TRELLO_OAUTH1: ConnectorType +GOOGLE_DWD: ConnectorType class ListConnectedAccountsRequest(_message.Message): __slots__ = ("organization_id", "user_id", "connector", "identifier", "provider", "page_size", "page_token", "query") @@ -295,12 +297,26 @@ class ConnectedAccountForList(_message.Message): def __init__(self, identifier: _Optional[str] = ..., provider: _Optional[str] = ..., status: _Optional[_Union[ConnectorStatus, str]] = ..., authorization_type: _Optional[_Union[ConnectorType, str]] = ..., token_expires_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., updated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., connector: _Optional[str] = ..., last_used_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., id: _Optional[str] = ..., connection_id: _Optional[str] = ...) -> None: ... class AuthorizationDetails(_message.Message): - __slots__ = ("oauth_token", "static_auth") + __slots__ = ("oauth_token", "static_auth", "google_dwd") OAUTH_TOKEN_FIELD_NUMBER: _ClassVar[int] STATIC_AUTH_FIELD_NUMBER: _ClassVar[int] + GOOGLE_DWD_FIELD_NUMBER: _ClassVar[int] oauth_token: OauthToken static_auth: StaticAuth - def __init__(self, oauth_token: _Optional[_Union[OauthToken, _Mapping]] = ..., static_auth: _Optional[_Union[StaticAuth, _Mapping]] = ...) -> None: ... + google_dwd: GoogleDWDAuth + def __init__(self, oauth_token: _Optional[_Union[OauthToken, _Mapping]] = ..., static_auth: _Optional[_Union[StaticAuth, _Mapping]] = ..., google_dwd: _Optional[_Union[GoogleDWDAuth, _Mapping]] = ...) -> None: ... + +class GoogleDWDAuth(_message.Message): + __slots__ = ("subject", "access_token", "scopes", "token_expires_at") + SUBJECT_FIELD_NUMBER: _ClassVar[int] + ACCESS_TOKEN_FIELD_NUMBER: _ClassVar[int] + SCOPES_FIELD_NUMBER: _ClassVar[int] + TOKEN_EXPIRES_AT_FIELD_NUMBER: _ClassVar[int] + subject: str + access_token: str + scopes: _containers.RepeatedScalarFieldContainer[str] + token_expires_at: _timestamp_pb2.Timestamp + def __init__(self, subject: _Optional[str] = ..., access_token: _Optional[str] = ..., scopes: _Optional[_Iterable[str]] = ..., token_expires_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ... class OauthToken(_message.Message): __slots__ = ("access_token", "refresh_token", "scopes", "domain") diff --git a/scalekit/v1/connections/connections_pb2.py b/scalekit/v1/connections/connections_pb2.py index dffbca0..89fe83c 100644 --- a/scalekit/v1/connections/connections_pb2.py +++ b/scalekit/v1/connections/connections_pb2.py @@ -28,7 +28,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n)scalekit/v1/connections/connections.proto\x12\x17scalekit.v1.connections\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a\x1fscalekit/v1/auth/webauthn.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/domains/domains.proto\x1a!scalekit/v1/options/options.proto\"\xc4\x01\n AssignDomainsToConnectionRequest\x12;\n\x0forganization_id\x18\x01 \x01(\tB\x12\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\x12\x38\n\rconnection_id\x18\x02 \x01(\tB\x13\xbaH\x10r\x0b\x10\x01\x18 :\x05\x63onn_\xc8\x01\x01R\x0c\x63onnectionId\x12)\n\ndomain_ids\x18\x03 \x03(\tB\n\xbaH\x07\x92\x01\x04\x08\x00\x10\x32R\tdomainIds\"\xe6\x03\n!AssignDomainsToConnectionResponse\x12\xc0\x03\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\xfa\x02\x92\x41\xf6\x02\x32 Connection with assigned domainsJ\xd1\x02{\n \"id\": \"conn_1234567890\",\n \"provider\": \"OKTA\",\n \"type\": \"OIDC\",\n \"status\": \"CONFIGURED\",\n \"enabled\": true,\n \"debug_enabled\": false,\n \"organization_id\": \"org_1234567890\",\n \"ui_button_title\": \"Login with SSO\",\n \"configuration_type\": \"MANUAL\",\n \"test_connection_uri\": \"https://auth.example.com/test-connection/conn_1234567890\"\n}R\nconnection\"\x15\n\x13GetProvidersRequest\"W\n\x14GetProvidersResponse\x12?\n\tproviders\x18\x01 \x03(\x0b\x32!.scalekit.v1.connections.ProviderR\tproviders\"\xf3\x01\n\x08Provider\x12\x35\n\x06key_id\x18\x01 \x01(\tB\x1e\x92\x41\x1b\x32\x0fProvider Key IDJ\x08\"google\"R\x05keyId\x12G\n\x0c\x64isplay_name\x18\x02 \x01(\tB$\x92\x41!2\x15Provider Display NameJ\x08\"Google\"R\x0b\x64isplayName\x12W\n\x0b\x64\x65scription\x18\x03 \x01(\tB0\x92\x41-2\x14Provider DescriptionJ\x15\"Sign In With Google\"H\x00R\x0b\x64\x65scription\x88\x01\x01\x42\x0e\n\x0c_description\"\xae\x02\n\"CreateEnvironmentConnectionRequest\x12Q\n\nconnection\x18\x01 \x01(\x0b\x32).scalekit.v1.connections.CreateConnectionB\x06\xbaH\x03\xc8\x01\x01R\nconnection\x12\xaa\x01\n\x05\x66lags\x18\x02 \x01(\x0b\x32\x1e.scalekit.v1.connections.FlagsBo\x92\x41l2SOptional flags to control connection creation behavior, such as enabling debug modeJ\x15{ \"is_social\": true }H\x00R\x05\x66lags\x88\x01\x01\x42\x08\n\x06_flags\"\xe4\x02\n\x17\x43reateConnectionRequest\x12\x9a\x01\n\x0forganization_id\x18\x01 \x01(\tBq\x92\x41\x65\x32JUnique identifier of the organization for which the connection is created.J\x17\"org_12362474900684814\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\xa5\x01\n\nconnection\x18\x03 \x01(\x0b\x32).scalekit.v1.connections.CreateConnectionBZ\xbaHW\xba\x01Q\x12\x36OAUTH, PASSWORDLESS and WEBAUTHN are not supported yet\x1a\x17!(this.type in [4,5,9])\xc8\x01\x01R\nconnectionJ\x04\x08\x02\x10\x03\"\xf7\x05\n\x10\x43reateConnection\x12\xcb\x01\n\x08provider\x18\x01 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderB\x81\x01\x92\x41v2lIdentity provider service that handles authentication (such as OKTA, Google, Azure AD, or a custom provider)J\x06\"OKTA\"\xbaH\x05\x82\x01\x02\x10\x01R\x08provider\x12\x45\n\x04type\x18\x02 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04type\x12\x98\x01\n\x0cprovider_key\x18\x03 \x01(\tBu\x92\x41r2fKey ID of the identity provider. This is used to identify the specific configuration for the provider.J\x08\"google\"R\x0bproviderKey\x12\x1a\n\x06key_id\x18\x04 \x01(\tH\x00R\x05keyId\x88\x01\x01:\x8b\x02\xbaH\x87\x02\x1aT\x12$provider or provider_key is required\x1a,has(this.provider_key) || this.provider != 0\x1a`\x12\x1einvalid value for provider_key\x1a>this.provider == 15 ? this.provider_key in [\'SCALEKIT\'] : true\x1aM\x12\x18invalid value for key_id\x1a\x31this.type == 9 ? this.key_id == \'WEBAUTHN\' : trueB\t\n\x07_key_id\"\xcb \n\nConnection\x12\x8d\x01\n\x02id\x18\x01 \x01(\tB}\x92\x41z2_Unique identifier for this connection. Used in API calls to reference this specific connection.J\x17\"conn_2123312131125533\"R\x02id\x12\xc2\x01\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderBy\x92\x41v2lIdentity provider service that handles authentication (such as OKTA, Google, Azure AD, or a custom provider)J\x06\"OKTA\"R\x08provider\x12\xb4\x01\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeBw\x92\x41t2jAuthentication protocol used by this connection. Can be OIDC (OpenID Connect), SAML, OAUTH, or MAGIC_LINK.J\x06\"OIDC\"R\x04type\x12\xc6\x01\n\x06status\x18\x04 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusB\x82\x01\x92\x41|2kCurrent configuration status of the connection. Possible values include IN_PROGRESS, CONFIGURED, and ERROR.J\r\"IN_PROGRESS\"\xe0\x41\x03R\x06status\x12\xab\x01\n\x07\x65nabled\x18\x05 \x01(\x08\x42\x90\x01\x92\x41\x8c\x01\x32\x82\x01\x43ontrols whether users can sign in using this connection. When false, the connection exists but cannot be used for authentication.J\x05\x66\x61lseR\x07\x65nabled\x12\xb0\x01\n\rdebug_enabled\x18\x06 \x01(\x08\x42\x8a\x01\x92\x41\x86\x01\x32~Enables testing mode that allows non-HTTPS endpoints. Should only be enabled in development environments, never in production.J\x04trueR\x0c\x64\x65\x62ugEnabled\x12\xc1\x01\n\x0forganization_id\x18\x07 \x01(\tB\x92\x01\x92\x41\x8e\x01\x32tIdentifier of the organization that owns this connection. Connections are typically scoped to a single organization.J\x16\"org_2123312131125533\"H\x01R\x0eorganizationId\x88\x01\x01\x12\xbd\x01\n\x0fui_button_title\x18\x08 \x01(\tB\x94\x01\x92\x41\x81\x01\x32mCustom text shown on the login button in the user interface. Helps users identify which SSO option to select.J\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12\xd5\x01\n\x12\x63onfiguration_type\x18\t \x01(\x0e\x32*.scalekit.v1.connections.ConfigurationTypeBz\x92\x41w2kHow the connection was configured: DISCOVERY (automatic configuration) or MANUAL (administrator configured)J\x08\"MANUAL\"R\x11\x63onfigurationType\x12\xdf\x01\n\x13test_connection_uri\x18\x0c \x01(\tB\xae\x01\x92\x41\xaa\x01\x32\x66URI that can be used to test this connection. Visit this URL to verify the connection works correctly.J@\"https://auth.example.com/test-connection/conn_2123312131125533\"R\x11testConnectionUri\x12\x81\x02\n\x11\x61ttribute_mapping\x18\x0f \x03(\x0b\x32\x39.scalekit.v1.connections.Connection.AttributeMappingEntryB\x98\x01\x92\x41|2zMaps identity provider attributes to user profile fields. For example, {\'email\': \'user.mail\', \'name\': \'user.displayName\'}.\xbaH\x16\x9a\x01\x13\x10\x1e\"\x06r\x04\x10\x01\x18\x64*\x07r\x05\x10\x01\x18\x80\x02R\x10\x61ttributeMapping\x12\xb1\x01\n\x0b\x63reate_time\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.TimestampBt\x92\x41_2EWhen this connection was first created. Format is RFC 3339 timestamp.J\x16\"2023-01-15T14:30:00Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ncreateTime\x12\xb1\x01\n\x0bupdate_time\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.TimestampBt\x92\x41_2EWhen this connection was last modified. Format is RFC 3339 timestamp.J\x16\"2023-02-20T09:15:30Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\nupdateTime\x12\xb3\x01\n\x0boidc_config\x18\x12 \x01(\x0b\x32-.scalekit.v1.connections.OIDCConnectionConfigBa\x92\x41^2\\Configuration details for OpenID Connect (OIDC) connections. Present only when type is OIDC.H\x00R\noidcConfig\x12\xaa\x01\n\x0bsaml_config\x18\x13 \x01(\x0b\x32\x35.scalekit.v1.connections.SAMLConnectionConfigResponseBP\x92\x41M2KConfiguration details for SAML connections. Present only when type is SAML.H\x00R\nsamlConfig\x12\xa7\x01\n\x0coauth_config\x18\x14 \x01(\x0b\x32..scalekit.v1.connections.OAuthConnectionConfigBR\x92\x41O2MConfiguration details for OAuth connections. Present only when type is OAUTH.H\x00R\x0boauthConfig\x12\xbf\x01\n\x13passwordless_config\x18\x16 \x01(\x0b\x32+.scalekit.v1.connections.PasswordLessConfigB_\x92\x41\\2ZConfiguration details for Magic Link authentication. Present only when type is MAGIC_LINK.H\x00R\x12passwordlessConfig\x12\xc0\x01\n\rstatic_config\x18\x1a \x01(\x0b\x32).scalekit.v1.connections.StaticAuthConfigBn\x92\x41k2iStatic configuration for custom connections. Present only when type is BASIC, BEARER, API_KEY, or custom.H\x00R\x0cstaticConfig\x12\xb1\x01\n\x0fwebauthn_config\x18\x1b \x01(\x0b\x32-.scalekit.v1.connections.WebAuthConfigurationBW\x92\x41T2RConfiguration details for WebAuthn (passkeys). Present only when type is WEBAUTHN.H\x00R\x0ewebauthnConfig\x12}\n\x06key_id\x18\x19 \x01(\tBa\x92\x41^2\\Alternative identifier for this connection, typically used in frontend applications or URLs.H\x02R\x05keyId\x88\x01\x01\x12u\n\x0cprovider_key\x18\x17 \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x12\xaa\x01\n\x07\x64omains\x18\x18 \x03(\x0b\x32\x1b.scalekit.v1.domains.DomainBs\x92\x41p2SDomain associated with this connection, used for domain-based authentication flows.J\x19[{\"name\": \"example.com\"}]R\x07\x64omains\x1a\x43\n\x15\x41ttributeMappingEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\n\n\x08settingsB\x12\n\x10_organization_idB\t\n\x07_key_idJ\x04\x08\r\x10\x0f\"w\n\x18\x43reateConnectionResponse\x12[\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\x16\x92\x41\x13\x32\x11\x43onnection DetailR\nconnection\"\xa8\x02\n\"UpdateEnvironmentConnectionRequest\x12~\n\rconnection_id\x18\x01 \x01(\tBY\x92\x41M2+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xca>\x05\xfa\x02\x02id\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\x12\x81\x01\n\nconnection\x18\x03 \x01(\x0b\x32).scalekit.v1.connections.UpdateConnectionB6\x92\x41-2#Connection properties to be updated\xca>\x05\xfa\x02\x02id\xbaH\x03\xc8\x01\x01R\nconnection\"\xce\x03\n\x17UpdateConnectionRequest\x12q\n\x0forganization_id\x18\x01 \x01(\tBH\x92\x41<2#Organization ID for the Connection.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\x61\n\x02id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02id\x12\xd6\x01\n\nconnection\x18\x04 \x01(\x0b\x32).scalekit.v1.connections.UpdateConnectionB\x8a\x01\x92\x41-2#Connection properties to be updated\xca>\x05\xfa\x02\x02id\xbaHW\xba\x01Q\x12\x36OAUTH, PASSWORDLESS and WEBAUTHN are not supported yet\x1a\x17!(this.type in [4,5,9])\xc8\x01\x01R\nconnectionJ\x04\x08\x02\x10\x03\"\xcb\x11\n\x10UpdateConnection\x12w\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderB.\x92\x41#2\x17SSO Connection ProviderJ\x08\"CUSTOM\"\xbaH\x05\x82\x01\x02\x10\x01R\x08provider\x12r\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB5\x92\x41*2 Connection Protocol OIDC / SAML J\x06\"OIDC\"\xbaH\x05\x82\x01\x02\x10\x01R\x04type\x12\xae\x01\n\rdebug_enabled\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBm\x92\x41j2bDebug mode for the connection. Debug would allow non HTTPS endpoint to be used with the connectionJ\x04trueR\x0c\x64\x65\x62ugEnabled\x12\x8d\x01\n\x0fui_button_title\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueBG\x92\x41\x35\x32!Display name for the Login ButtonJ\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12~\n\x12\x63onfiguration_type\x18\x0b \x01(\x0e\x32*.scalekit.v1.connections.ConfigurationTypeB#\x92\x41 2\x14\x43onfiguration Type. J\x08\"MANUAL\"R\x11\x63onfigurationType\x12\x9d\x01\n\x11\x61ttribute_mapping\x18\x0f \x03(\x0b\x32?.scalekit.v1.connections.UpdateConnection.AttributeMappingEntryB/\x92\x41\x13\x32\x11\x41ttribute Mapping\xbaH\x16\x9a\x01\x13\x10\x1e\"\x06r\x04\x10\x01\x18\x64*\x07r\x05\x10\x01\x18\x80\x02R\x10\x61ttributeMapping\x12\x83\x01\n\x0boidc_config\x18\x10 \x01(\x0b\x32-.scalekit.v1.connections.OIDCConnectionConfigB1\x92\x41.2,OIDC Configuration if ConnectionType == OIDCH\x00R\noidcConfig\x12\x8a\x01\n\x0bsaml_config\x18\x11 \x01(\x0b\x32\x34.scalekit.v1.connections.SAMLConnectionConfigRequestB1\x92\x41.2,SAML Configuration if ConnectionType == SAMLH\x00R\nsamlConfig\x12\x88\x01\n\x0coauth_config\x18\x12 \x01(\x0b\x32..scalekit.v1.connections.OAuthConnectionConfigB3\x92\x41\x30\x32.OAuth Configuration if ConnectionType == OAUTHH\x00R\x0boauthConfig\x12\x9d\x01\n\x13passwordless_config\x18\x14 \x01(\x0b\x32+.scalekit.v1.connections.PasswordLessConfigB=\x92\x41:28Magic Link Configuration if ConnectionType == MAGIC_LINKH\x00R\x12passwordlessConfig\x12P\n\rstatic_config\x18\x17 \x01(\x0b\x32).scalekit.v1.connections.StaticAuthConfigH\x00R\x0cstaticConfig\x12\xb1\x01\n\x0fwebauthn_config\x18\x18 \x01(\x0b\x32-.scalekit.v1.connections.WebAuthConfigurationBW\x92\x41T2RConfiguration details for WebAuthn (passkeys). Present only when type is WEBAUTHN.H\x00R\x0ewebauthnConfig\x12&\n\x06key_id\x18\x16 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xac\x02H\x01R\x05keyId\x88\x01\x01\x12u\n\x0cprovider_key\x18\x15 \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x1a\x43\n\x15\x41ttributeMappingEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01:\x8b\x02\xbaH\x87\x02\x1aT\x12$provider or provider_key is required\x1a,has(this.provider_key) || this.provider != 0\x1a`\x12\x1einvalid value for provider_key\x1a>this.provider == 15 ? this.provider_key in [\'SCALEKIT\'] : true\x1aM\x12\x18invalid value for key_id\x1a\x31this.type == 9 ? this.key_id == \'WEBAUTHN\' : trueB\n\n\x08settingsB\t\n\x07_key_idJ\x04\x08\x01\x10\x02J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06J\x04\x08\t\x10\x0bJ\x04\x08\x0c\x10\x0f\"\x80\x01\n\x18UpdateConnectionResponse\x12\x64\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\x1f\x92\x41\x1c\x32\x1aUpdated Connection detailsR\nconnection\"\x9c\x01\n\"DeleteEnvironmentConnectionRequest\x12v\n\rconnection_id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\xf5\x01\n\x17\x44\x65leteConnectionRequest\x12q\n\x0forganization_id\x18\x01 \x01(\tBH\x92\x41<2#Organization ID for the Connection.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\x61\n\x02id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\x92\x01\n\x1fGetEnvironmentConnectionRequest\x12o\n\rconnection_id\x18\x01 \x01(\tBJ\x92\x41>2$Unique identifier for the ConnectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\xfc\x02\n\x14GetConnectionRequest\x12\xba\x01\n\x0forganization_id\x18\x01 \x01(\tB\x90\x01\x92\x41\x83\x01\x32jOrganization identifier (required). Specifies which organization owns the connection you want to retrieve.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\xa0\x01\n\x02id\x18\x03 \x01(\tB\x8f\x01\x92\x41\x82\x01\x32hConnection identifier (required). Specifies which specific connection to retrieve from the organization.J\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\x9a\x02\n\x15GetConnectionResponse\x12\x80\x02\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\xba\x01\x92\x41\xb6\x01\x32\xb3\x01\x43omplete connection details including provider configuration, protocol settings, status, and all metadata. Contains everything needed to understand the connection\'s current state.R\nconnection\"\x96\x04\n\x16ListConnectionsRequest\x12\x80\x01\n\x0forganization_id\x18\x01 \x01(\tBR\x92\x41\x46\x32-Filter connections by organization identifierJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12\x7f\n\x06\x64omain\x18\x03 \x01(\tBb\x92\x41V2CFilter connections by email domain associated with the organizationJ\x0f\"hero-saas.app\"\xbaH\x06r\x04\x10\x01\x18 H\x01R\x06\x64omain\x88\x01\x01\x12\xc6\x01\n\x07include\x18\x04 \x01(\tB\xa6\x01\x92\x41\xa2\x01\x32\x9f\x01\x46ilter connections by status. Use \'all\' to include all connections regardless of status. Default behavior shows only active (completed and enabled) connectionsH\x02R\x07include\x88\x01\x01\x42\x12\n\x10_organization_idB\t\n\x07_domainB\n\n\x08_includeJ\x04\x08\x02\x10\x03\"\x9d\x01\n\x17ListConnectionsResponse\x12\x81\x01\n\x0b\x63onnections\x18\x01 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB6\x92\x41\x33\x32\x31List of connections matching the request criteriaR\x0b\x63onnections\"\xfa\x0b\n\x0eListConnection\x12Q\n\x02id\x18\x01 \x01(\tBA\x92\x41>2#Unique identifier of the connectionJ\x17\"conn_2123312131125533\"R\x02id\x12\x8d\x01\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderBD\x92\x41\x41\x32\x35Identity provider type (e.g., OKTA, Google, Azure AD)J\x08\"CUSTOM\"R\x08provider\x12x\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB;\x92\x41\x38\x32.Authentication protocol used by the connectionJ\x06\"OIDC\"R\x04type\x12\x88\x01\n\x06status\x18\x04 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusBE\x92\x41?2.Current configuration status of the connectionJ\r\"IN_PROGRESS\"\xe0\x41\x03R\x06status\x12g\n\x07\x65nabled\x18\x05 \x01(\x08\x42M\x92\x41J2AWhether the connection is currently active for organization usersJ\x05\x66\x61lseR\x07\x65nabled\x12\x85\x01\n\x0forganization_id\x18\x06 \x01(\tB\\\x92\x41Y2?Unique identifier of the organization that owns this connectionJ\x16\"org_2123312131125533\"R\x0eorganizationId\x12\x88\x01\n\x0fui_button_title\x18\x07 \x01(\tB`\x92\x41N2:Text displayed on the SSO login button for this connectionJ\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12t\n\x07\x64omains\x18\x08 \x03(\tBZ\x92\x41W2/List of domains configured with this connectionJ$[\"yourapp.com\", \"yourworkspace.com\"]R\x07\x64omains\x12q\n\x11organization_name\x18\t \x01(\tBD\x92\x41\x41\x32*Name of the organization of the connectionJ\x13\"Your Organization\"R\x10organizationName\x12u\n\x0cprovider_key\x18\n \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x12\x90\x01\n\x06key_id\x18\x0b \x01(\tBy\x92\x41v2[Alternative identifier for this connection, typically used in frontend applications or URLsJ\x17\"conn_2123312131125533\"R\x05keyId\x12\x90\x01\n\ncreated_at\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.TimestampBU\x92\x41@2&When this connection was first createdJ\x16\"2023-01-15T14:30:00Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\tcreatedAt\"\xcf\x02\n\"ListOrganizationConnectionsRequest\x12\x80\x01\n\tpage_size\x18\x01 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x02 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\x97\x02\n#ListOrganizationConnectionsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12&\n\x0fprev_page_token\x18\x03 \x01(\tR\rprevPageToken\x12\x80\x01\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB5\x92\x41\x32\x32\x30List of connections matching the filter criteriaR\x0b\x63onnections\"\xa2\x07\n$SearchOrganizationConnectionsRequest\x12l\n\x05query\x18\x01 \x01(\tBQ\x92\x41G2-Search query Connection ID or Organization IDJ\x16\"conn_121312434123312\"\xbaH\x04r\x02\x18\x64H\x00R\x05query\x88\x01\x01\x12@\n\x08provider\x18\x02 \x01(\tB\x1f\x92\x41\x1c\x32\x12\x46ilter by providerJ\x06\"OKTA\"H\x01R\x08provider\x88\x01\x01\x12}\n\x06status\x18\x03 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusB5\x92\x41*2\x1b\x46ilter by connection statusJ\x0b\"COMPLETED\"\xbaH\x05\x82\x01\x02\x10\x01H\x02R\x06status\x88\x01\x01\x12\x8c\x01\n\x0f\x63onnection_type\x18\x04 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB5\x92\x41*2\x1b\x46ilter by connection statusJ\x0b\"COMPLETED\"\xbaH\x05\x82\x01\x02\x10\x01H\x03R\x0e\x63onnectionType\x88\x01\x01\x12O\n\x07\x65nabled\x18\x07 \x01(\x08\x42\x30\x92\x41-2#Filter by connection enabled statusJ\x06\"true\"H\x04R\x07\x65nabled\x88\x01\x01\x12\x80\x01\n\tpage_size\x18\x05 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x06 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageTokenB\x08\n\x06_queryB\x0b\n\t_providerB\t\n\x07_statusB\x12\n\x10_connection_typeB\n\n\x08_enabled\"\x99\x02\n%SearchOrganizationConnectionsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12&\n\x0fprev_page_token\x18\x03 \x01(\tR\rprevPageToken\x12\x80\x01\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB5\x92\x41\x32\x32\x30List of connections matching the filter criteriaR\x0b\x63onnections\"\x9c\x01\n\"ToggleEnvironmentConnectionRequest\x12v\n\rconnection_id\x18\x02 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\x9e\x02\n\x17ToggleConnectionRequest\x12\x92\x01\n\x0forganization_id\x18\x01 \x01(\tBi\x92\x41]2DUnique identifier of the organization associated with the connectionJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12h\n\x02id\x18\x03 \x01(\tBX\x92\x41L22Unique identifier for the connection to be toggledJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\xbc\x02\n\x18ToggleConnectionResponse\x12\xa9\x01\n\x07\x65nabled\x18\x01 \x01(\x08\x42\x8e\x01\x92\x41\x8a\x01\x32\x81\x01\x43urrent state of the connection after the operation. True means the connection is now enabled and can be used for authentication.J\x04trueR\x07\x65nabled\x12\x62\n\rerror_message\x18\x02 \x01(\tB8\x92\x41\x35\x32$Error message if the operation failsJ\r\"placeholder\"H\x00R\x0c\x65rrorMessage\x88\x01\x01\x42\x10\n\x0e_error_message\"\xa0\x12\n\x14OIDCConnectionConfig\x12j\n\x06issuer\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB4\x92\x41\x31\x32\nIssuer URLJ#\"https://youridp.com/service/oauth\"R\x06issuer\x12\xaa\x01\n\x12\x64iscovery_endpoint\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB]\x92\x41Z2\x12\x44iscovery EndpointJD\"https://youridp.com/service/oauth/.well-known/openid-configuration\"R\x11\x64iscoveryEndpoint\x12\x84\x01\n\rauthorize_uri\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValueBA\x92\x41>2\rAuthorize URIJ-\"https://youridp.com/service/oauth/authorize\"R\x0c\x61uthorizeUri\x12t\n\ttoken_uri\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueB9\x92\x41\x36\x32\tToken URIJ)\"https://youridp.com/service/oauth/token\"R\x08tokenUri\x12\x82\x01\n\ruser_info_uri\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB@\x92\x41=2\rUser Info URIJ,\"https://youridp.com/service/oauth/userinfo\"R\x0buserInfoUri\x12p\n\x08jwks_uri\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValueB7\x92\x41\x34\x32\x08JWKS URIJ(\"https://youridp.com/service/oauth/jwks\"R\x07jwksUri\x12\\\n\tclient_id\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB!\x92\x41\x1e\x32\tClient IDJ\x11\"oauth_client_id\"R\x08\x63lientId\x12l\n\rclient_secret\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB)\x92\x41&2\rClient SecretJ\x15\"oauth_client_secret\"R\x0c\x63lientSecret\x12\x63\n\x06scopes\x18\n \x03(\x0e\x32\".scalekit.v1.connections.OIDCScopeB\'\x92\x41$2\x0bOIDC ScopesJ\x15[\"openid\", \"profile\"]R\x06scopes\x12r\n\x0ftoken_auth_type\x18\x0b \x01(\x0e\x32&.scalekit.v1.connections.TokenAuthTypeB\"\x92\x41\x1f\x32\x0fToken Auth TypeJ\x0c\"URL_PARAMS\"R\rtokenAuthType\x12j\n\x0credirect_uri\x18\x0c \x01(\tBG\x92\x41\x44\x32\x0cRedirect URIJ4\"https://yourapp.com/sso/v1/oidc/conn_1234/callback\"R\x0bredirectUri\x12V\n\x0cpkce_enabled\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x17\x92\x41\x14\x32\x0cPKCE EnabledJ\x04trueR\x0bpkceEnabled\x12h\n\x13idp_logout_required\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1c\x92\x41\x19\x32\x11\x45nable IDP logoutJ\x04trueR\x11idpLogoutRequired\x12\xb4\x01\n\x18post_logout_redirect_uri\x18\x0f \x01(\x0b\x32\x1c.google.protobuf.StringValueB]\x92\x41W2\x18post logout redirect uriJ;\"https://yourapp.com/sso/v1/oidc/conn_1234/logout/callback\"\xe0\x41\x03R\x15postLogoutRedirectUri\x12\xea\x01\n\x1f\x62\x61\x63kchannel_logout_redirect_uri\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x84\x01\x92\x41~2\"https://yourapp.com/sso/v1/oidc/conn_1234/backchannel-logout\"\xe0\x41\x03R\x1c\x62\x61\x63kchannelLogoutRedirectUri\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\x12\xba\x01\n!jit_provisioning_with_sso_enabled\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBT\x92\x41Q2IIndicates if Just In Time user provisioning is enabled for the connectionJ\x04trueR\x1djitProvisioningWithSsoEnabled\"\xce\x13\n\x15OAuthConnectionConfig\x12\x84\x01\n\rauthorize_uri\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValueBA\x92\x41>2\rAuthorize URIJ-\"https://youridp.com/service/oauth/authorize\"R\x0c\x61uthorizeUri\x12t\n\ttoken_uri\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueB9\x92\x41\x36\x32\tToken URIJ)\"https://youridp.com/service/oauth/token\"R\x08tokenUri\x12\x82\x01\n\ruser_info_uri\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB@\x92\x41=2\rUser Info URIJ,\"https://youridp.com/service/oauth/userinfo\"R\x0buserInfoUri\x12\\\n\tclient_id\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB!\x92\x41\x1e\x32\tClient IDJ\x11\"oauth_client_id\"R\x08\x63lientId\x12l\n\rclient_secret\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB)\x92\x41&2\rClient SecretJ\x15\"oauth_client_secret\"R\x0c\x63lientSecret\x12?\n\x06scopes\x18\n \x03(\tB\'\x92\x41$2\x0bOIDC ScopesJ\x15[\"openid\", \"profile\"]R\x06scopes\x12\x62\n\x0credirect_uri\x18\x0c \x01(\tB?\x92\x41<2\x0cRedirect URIJ,\"https://yourapp.com/service/oauth/redirect\"R\x0bredirectUri\x12V\n\x0cpkce_enabled\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x17\x92\x41\x14\x32\x0cPKCE EnabledJ\x04trueR\x0bpkceEnabled\x12V\n\x06prompt\x18\x0e \x01(\x0b\x32\x1c.google.protobuf.StringValueB \x92\x41\x1d\x32\x13Prompt for the userJ\x06\"none\"R\x06prompt\x12m\n\x12use_platform_creds\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueB#\x92\x41 2\x18Use Scalekit credentialsJ\x04trueR\x10usePlatformCreds\x12Z\n\x0b\x61\x63\x63\x65ss_type\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1b\x92\x41\x18\x32\x0b\x41\x63\x63\x65ss TypeJ\t\"offline\"R\naccessType\x12n\n\x11\x63ustom_scope_name\x18\x11 \x01(\x0b\x32\x1c.google.protobuf.StringValueB$\x92\x41!2\x11\x43ustom Scope NameJ\x0c\"user_scope\"R\x0f\x63ustomScopeName\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\x12k\n\x11token_access_type\x18\x13 \x01(\x0b\x32\x1c.google.protobuf.StringValueB!\x92\x41\x1e\x32\x11Token Access TypeJ\t\"offline\"R\x0ftokenAccessType\x12\x84\x02\n\ttenant_id\x18\x14 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\xc8\x01\x92\x41\xc4\x01\x32\x99\x01Microsoft Entra tenant ID. Required when using a single-tenant or multi-tenant app registered in Microsoft Entra. Leave empty to use the common endpoint.J&\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"R\x08tenantId\x12\xc7\x01\n\x07is_cimd\x18\x15 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x91\x01\x92\x41\x8a\x01\x32\x81\x01Indicates whether this connection was registered using Client ID Metadata Document (CIMD) instead of Dynamic Client Registration.J\x04true\xe0\x41\x03R\x06isCimd\x12\xbe\x01\n\x08\x61pp_name\x18\x16 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x84\x01\x92\x41\x80\x01\x32mApplication name used by providers that require it as an authorize query parameter (e.g., Trello\'s app_name).J\x0f\"My Trello App\"R\x07\x61ppName\x12\xfa\x01\n\x0foptional_scopes\x18\x17 \x01(\x0b\x32\'.scalekit.v1.connections.OptionalScopesB\xa2\x01\x92\x41\x9e\x01\x32\x9b\x01Optional scopes configuration for identity providers that support or require additional scopes to be sent in a custom field during authentication requests.H\x00R\x0eoptionalScopes\x88\x01\x01\x42\x12\n\x10_optional_scopes\"\xa6\x03\n\x0eOptionalScopes\x12v\n\x06scopes\x18\x01 \x03(\tB^\x92\x41[2CList of optional scopes that can be requested during authenticationJ\x14[\"scope1\", \"scope2\"]R\x06scopes\x12\x9b\x02\n\nfield_name\x18\x02 \x01(\tB\xfb\x01\x92\x41\xf7\x01\x32\xd5\x01Name of the field in which scope should be sent in the authentication request. This is required by some identity providers that expect scopes to be sent in a custom field instead of the standard \'scope\' parameter.J\x1d\"optional_scope or bot_scope\"R\tfieldName\"\xf4\x07\n\x12PasswordLessConfig\x12]\n\x04type\x18\x01 \x01(\x0e\x32).scalekit.v1.connections.PasswordlessTypeB\x1e\x92\x41\x1b\x32\x11Passwordless TypeJ\x06\"LINK\"R\x04type\x12W\n\tfrequency\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x16\x92\x41\x13\x32\x0eLink FrequencyJ\x01\x31H\x00R\tfrequency\x88\x01\x01\x12\x61\n\x08validity\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\"\x92\x41\x1f\x32\x18Link Validity in SecondsJ\x03\x36\x30\x30H\x01R\x08validity\x88\x01\x01\x12\x86\x01\n\x1b\x65nforce_same_browser_origin\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB&\x92\x41#2\x1b\x45nforce Same Browser OriginJ\x04trueH\x02R\x18\x65nforceSameBrowserOrigin\x88\x01\x01\x12t\n\x15\x63ode_challenge_length\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x1d\x92\x41\x1a\x32\x15\x43ode Challenge LengthJ\x01\x36H\x03R\x13\x63odeChallengeLength\x88\x01\x01\x12\x84\x01\n\x13\x63ode_challenge_type\x18\x06 \x01(\x0e\x32*.scalekit.v1.connections.CodeChallengeTypeB#\x92\x41 2\x13\x43ode Challenge TypeJ\t\"NUMERIC\"H\x04R\x11\x63odeChallengeType\x88\x01\x01\x12\x9d\x01\n-regenerate_passwordless_credentials_on_resend\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1a\x92\x41\x17\x32\x0fRegenerate the J\x04trueH\x05R)regeneratePasswordlessCredentialsOnResend\x88\x01\x01\x42\x0c\n\n_frequencyB\x0b\n\t_validityB\x1e\n\x1c_enforce_same_browser_originB\x18\n\x16_code_challenge_lengthB\x16\n\x14_code_challenge_typeB0\n._regenerate_passwordless_credentials_on_resend\"P\n\x10StaticAuthConfig\x12<\n\rstatic_config\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x0cstaticConfig\"\xc4\"\n\x14WebAuthConfiguration\x12@\n\x02rp\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connections.WebAuthConfiguration.RpR\x02rp\x12[\n\x0b\x61ttestation\x18\x02 \x01(\x0b\x32\x39.scalekit.v1.connections.WebAuthConfiguration.AttestationR\x0b\x61ttestation\x12\x64\n\x0e\x61uthenticators\x18\x03 \x01(\x0b\x32<.scalekit.v1.connections.WebAuthConfiguration.AuthenticatorsR\x0e\x61uthenticators\x12}\n\x17\x61uthenticator_selection\x18\x04 \x01(\x0b\x32\x44.scalekit.v1.connections.WebAuthConfiguration.AuthenticatorSelectionR\x16\x61uthenticatorSelection\x12O\n\x07timeout\x18\x05 \x01(\x0b\x32\x35.scalekit.v1.connections.WebAuthConfiguration.TimeoutR\x07timeout\x12\x64\n\x18\x65nable_auto_registration\x18\x06 \x01(\x08\x42*\x92\x41\'2%Enable auto registration for WebAuthnR\x16\x65nableAutoRegistration\x12X\n\x13show_passkey_button\x18\x07 \x01(\x08\x42(\x92\x41%2#Show passkey button on login screenR\x11showPasskeyButton\x12g\n\x18\x65nable_conditional_login\x18\x08 \x01(\x08\x42-\x92\x41*2(Allow autofill of passkeys in login pageR\x16\x65nableConditionalLogin\x1aH\n\x02Rp\x12\x1c\n\x03ids\x18\x01 \x03(\tB\n\xbaH\x07\x92\x01\x04\x08\x01\x10\nR\x03ids\x12$\n\x07origins\x18\x02 \x03(\tB\n\xbaH\x07\x92\x01\x04\x08\x01\x10\nR\x07origins\x1a\xc1\x01\n\x0b\x41ttestation\x12p\n\x15\x63onveyance_preference\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1d\xbaH\x1ar\x18R\x04noneR\x08indirectR\x06\x64irectR\x14\x63onveyancePreference\x12@\n\x17\x65nterprise_approved_ids\x18\x02 \x03(\tB\x08\xbaH\x05\x92\x01\x02\x10\x32R\x15\x65nterpriseApprovedIds\x1a\xf0\x13\n\x0e\x41uthenticators\x12\xdb\x02\n\x0evalidate_entry\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x97\x02\x92\x41\x93\x02\x1a\x1a.google.protobuf.BoolValue2\xf4\x01requires that the provided metadata has an entry for the given authenticator to be considered valid. By default an AAGUID which has a zero value should fail validation if validate_entry_permit_zero_aaguid is not provided with the value of true.R\rvalidateEntry\x12\x8f\x02\n!validate_entry_permit_zero_aaguid\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xa8\x01\x92\x41\xa4\x01\x32\xa1\x01is an option that permits a zero\'d AAGUID from an attestation statement to automatically pass metadata validations. Generally helpful to use with validate_entry.R\x1dvalidateEntryPermitZeroAaguid\x12\xc6\x01\n\x10validate_anchors\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x7f\x92\x41|2zwhen set to true enables the validation of the attestation statement against the trust anchor from the metadata statement.R\x0fvalidateAnchors\x12\xbe\x01\n\x0fvalidate_status\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBy\x92\x41v2twhen set to true enables the validation of the attestation statements AAGUID against the desired and undesired listsR\x0evalidateStatus\x12\xe1\x01\n\x19validate_attestation_type\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x88\x01\x92\x41\x84\x01\x32\x81\x01when set to true enables the validation of the attestation statements type against the known types the authenticator can produce.R\x17validateAttestationType\x12\xbb\x04\n\x1c\x64\x65sired_authenticator_status\x18\x06 \x03(\tB\xf8\x03\x92\x41\x9d\x01\x32\x96\x01provides the list of statuses which are considered undesirable for status report validation purposes. Should be used with validate_status set to true.:\x02[]\xbaH\xd3\x02\x92\x01\xcf\x02\x10\n\"\xca\x02r\xc7\x02R\x12NOT_FIDO_CERTIFIEDR\x0e\x46IDO_CERTIFIEDR\x18USER_VERIFICATION_BYPASSR\x1a\x41TTESTATION_KEY_COMPROMISER\x1aUSER_KEY_REMOTE_COMPROMISER\x1cUSER_KEY_PHYSICAL_COMPROMISER\x10UPDATE_AVAILABLER\x07REVOKEDR\x18SELF_ASSERTION_SUBMITTEDR\x11\x46IDO_CERTIFIED_L1R\x15\x46IDO_CERTIFIED_L1plusR\x11\x46IDO_CERTIFIED_L2R\x15\x46IDO_CERTIFIED_L2plusR\x11\x46IDO_CERTIFIED_L3R\x15\x46IDO_CERTIFIED_L3plusR\x1a\x64\x65siredAuthenticatorStatus\x12\xc1\x05\n\x1eundesired_authenticator_status\x18\x07 \x03(\tB\xfa\x04\x92\x41\x9f\x02\x32\x96\x01provides the list of statuses which are considered undesirable for status report validation purposes. Should be used with validate_status set to true.:\x83\x01[\'ATTESTATION_KEY_COMPROMISE\', \'USER_VERIFICATION_BYPASS\', \'USER_KEY_REMOTE_COMPROMISE\', \'USER_KEY_PHYSICAL_COMPROMISE\', \'REVOKED\']\xbaH\xd3\x02\x92\x01\xcf\x02\x10\n\"\xca\x02r\xc7\x02R\x12NOT_FIDO_CERTIFIEDR\x0e\x46IDO_CERTIFIEDR\x18USER_VERIFICATION_BYPASSR\x1a\x41TTESTATION_KEY_COMPROMISER\x1aUSER_KEY_REMOTE_COMPROMISER\x1cUSER_KEY_PHYSICAL_COMPROMISER\x10UPDATE_AVAILABLER\x07REVOKEDR\x18SELF_ASSERTION_SUBMITTEDR\x11\x46IDO_CERTIFIED_L1R\x15\x46IDO_CERTIFIED_L1plusR\x11\x46IDO_CERTIFIED_L2R\x15\x46IDO_CERTIFIED_L2plusR\x11\x46IDO_CERTIFIED_L3R\x15\x46IDO_CERTIFIED_L3plusR\x1cundesiredAuthenticatorStatus\x1a\x86\x02\n\x16\x41uthenticatorSelection\x12r\n\x11user_verification\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\'\xbaH$r\"R\x08requiredR\tpreferredR\x0b\x64iscouragedR\x10userVerification\x12x\n\x18\x61uthenticator_attachment\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1f\xbaH\x1cr\x1aR\x08platformR\x0e\x63ross-platformR\x17\x61uthenticatorAttachment\x1a\xa3\x04\n\x07Timeout\x12x\n\x0cregistration\x18\x01 \x01(\x0b\x32\x19.google.protobuf.DurationB9\x92\x41\'2\x1dRegistration timeout duration:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x0cregistration\x12\xa5\x01\n\x10registration_uvd\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationB_\x92\x41M2CRegistration timeout duration when user verification is discouraged:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x0fregistrationUvd\x12\x63\n\x05login\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationB2\x92\x41 2\x16Login timeout duration:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x05login\x12\x90\x01\n\tlogin_uvd\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationBX\x92\x41\x46\x322\x0fSP Metadata URLJ+\"https://youridp.com/service/saml/metadata\"R\rspMetadataUrl\x12\x8a\x01\n\x10idp_metadata_url\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueBB\x92\x41?2\x10IDP Metadata URLJ+\"https://youridp.com/service/saml/metadata\"R\x0eidpMetadataUrl\x12x\n\ridp_entity_id\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB6\x92\x41\x33\x32\rIDP Entity IDJ\"\"https://youridp.com/service/saml\"R\x0bidpEntityId\x12v\n\x0bidp_sso_url\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValueB8\x92\x41\x35\x32\x0bIDP SSO URLJ&\"https://youridp.com/service/saml/sso\"R\tidpSsoUrl\x12i\n\x10idp_certificates\x18\x07 \x03(\x0b\x32\'.scalekit.v1.connections.IDPCertificateB\x15\x92\x41\x12\x32\x10IDP CertificatesR\x0fidpCertificates\x12v\n\x0bidp_slo_url\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB8\x92\x41\x35\x32\x0bIDP SLO URLJ&\"https://youridp.com/service/saml/slo\"R\tidpSloUrl\x12l\n\x0fui_button_title\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB&\x92\x41#2\x0fUI Button TitleJ\x10\"Login with SSO\"R\ruiButtonTitle\x12t\n\x12idp_name_id_format\x18\n \x01(\x0e\x32%.scalekit.v1.connections.NameIdFormatB \x92\x41\x1d\x32\x12IDP Name ID FormatJ\x07\"EMAIL\"R\x0fidpNameIdFormat\x12\x89\x01\n\x17idp_sso_request_binding\x18\x0b \x01(\x0e\x32\'.scalekit.v1.connections.RequestBindingB)\x92\x41&2\x17IDP SSO Request BindingJ\x0b\"HTTP_POST\"R\x14idpSsoRequestBinding\x12\x89\x01\n\x17idp_slo_request_binding\x18\x0c \x01(\x0e\x32\'.scalekit.v1.connections.RequestBindingB)\x92\x41&2\x17IDP SLO Request BindingJ\x0b\"HTTP_POST\"R\x14idpSloRequestBinding\x12\x93\x01\n\x13saml_signing_option\x18\r \x01(\x0e\x32+.scalekit.v1.connections.SAMLSigningOptionsB6\x92\x41\x33\x32\x13SAML Signing OptionJ\x1c\"SAML_ONLY_RESPONSE_SIGNING\"R\x11samlSigningOption\x12{\n\x19\x61llow_idp_initiated_login\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueB$\x92\x41!2\x19\x41llow IDP Initiated LoginJ\x04trueR\x16\x61llowIdpInitiatedLogin\x12S\n\x0b\x66orce_authn\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x16\x92\x41\x13\x32\x0b\x46orce AuthnJ\x04trueR\nforceAuthn\x12\x96\x01\n\x14\x64\x65\x66\x61ult_redirect_uri\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueBF\x92\x41\x43\x32\x14\x44\x65\x66\x61ult Redirect URIJ+\"https://yourapp.com/service/saml/redirect\"R\x12\x64\x65\x66\x61ultRedirectUri\x12k\n\x13\x61ssertion_encrypted\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1e\x92\x41\x1b\x32\x13\x41ssertion EncryptedJ\x04trueR\x12\x61ssertionEncrypted\x12j\n\x13want_request_signed\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1e\x92\x41\x1b\x32\x13Want Request SignedJ\x04trueR\x11wantRequestSigned\x12q\n\x0e\x63\x65rtificate_id\x18\x13 \x01(\x0b\x32\x1c.google.protobuf.StringValueB,\x92\x41)2\x0e\x43\x65rtificate IDJ\x17\"cer_35585423166144613\"R\rcertificateId\x12\x62\n\x10idp_slo_required\x18\x14 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1c\x92\x41\x19\x32\x11\x45nable IDP logoutJ\x04trueR\x0eidpSloRequired\x12\x96\x01\n\nsp_slo_url\x18\x15 \x01(\x0b\x32\x1c.google.protobuf.StringValueBZ\x92\x41T2\x18Service Provider SLO urlJ8\"https://yourapp.com/sso/v1/saml/conn_1234/slo/callback\"\xe0\x41\x03R\x08spSloUrl\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x16 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\x12\xba\x01\n!jit_provisioning_with_sso_enabled\x18\x17 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBT\x92\x41Q2IIndicates if Just In Time user provisioning is enabled for the connectionJ\x04trueR\x1djitProvisioningWithSsoEnabled\"\xbf\x03\n\x0eIDPCertificate\x12\x36\n\x0b\x63\x65rtificate\x18\x01 \x01(\tB\x14\x92\x41\x11\x32\x0fIDP CertificateR\x0b\x63\x65rtificate\x12s\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB6\x92\x41\x33\x32\x19\x43\x65rtificate Creation TimeJ\x16\"2021-09-01T00:00:00Z\"R\ncreateTime\x12q\n\x0b\x65xpiry_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB4\x92\x41\x31\x32\x17\x43\x65rtificate Expiry TimeJ\x16\"2021-09-01T00:00:00Z\"R\nexpiryTime\x12\x38\n\x02id\x18\x04 \x01(\tB(\x92\x41%2\x0e\x43\x65rtificate IDJ\x13\"cert_123123123123\"R\x02id\x12S\n\x06issuer\x18\x05 \x01(\tB;\x92\x41\x38\x32\x12\x43\x65rtificate IssuerJ\"\"https://youridp.com/service/saml\"R\x06issuer\"b\n\x16GetOIDCMetadataRequest\x12H\n\x08metadata\x18\x01 \x01(\x0b\x32,.scalekit.v1.connections.OIDCMetadataRequestR\x08metadata\"9\n\x13OIDCMetadataRequest\x12\"\n\x06issuer\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x06issuer\"\xd7\x01\n\x17GetOIDCMetadataResponse\x12\x16\n\x06issuer\x18\x01 \x01(\tR\x06issuer\x12\x35\n\x16\x61uthorization_endpoint\x18\x02 \x01(\tR\x15\x61uthorizationEndpoint\x12%\n\x0etoken_endpoint\x18\x03 \x01(\tR\rtokenEndpoint\x12+\n\x11userinfo_endpoint\x18\x04 \x01(\tR\x10userinfoEndpoint\x12\x19\n\x08jwks_uri\x18\x05 \x01(\tR\x07jwksUri\"b\n\x16GetSAMLMetadataRequest\x12H\n\x08metadata\x18\x01 \x01(\x0b\x32,.scalekit.v1.connections.SAMLMetadataRequestR\x08metadata\"D\n\x13SAMLMetadataRequest\x12-\n\x0cmetadata_url\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0bmetadataUrl\"\xb4\x02\n\x17GetSAMLMetadataResponse\x12\"\n\ridp_entity_id\x18\x01 \x01(\tR\x0bidpEntityId\x12\x1e\n\x0bidp_sso_url\x18\x02 \x01(\tR\tidpSsoUrl\x12\x1e\n\x0bidp_slo_url\x18\x03 \x01(\tR\tidpSloUrl\x12)\n\x10idp_certificates\x18\x04 \x03(\tR\x0fidpCertificates\x12+\n\x12idp_name_id_format\x18\x05 \x01(\tR\x0fidpNameIdFormat\x12\'\n\x0frequest_binding\x18\x06 \x01(\tR\x0erequestBinding\x12\x34\n\x16want_assertions_signed\x18\x07 \x01(\x08R\x14wantAssertionsSigned\"u\n GetSAMLCertificateDetailsRequest\x12Q\n\x0b\x63\x65rtificate\x18\x01 \x01(\x0b\x32/.scalekit.v1.connections.SAMLCertificateRequestR\x0b\x63\x65rtificate\"5\n\x16SAMLCertificateRequest\x12\x1b\n\x04text\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04text\"\xa5\x01\n!GetSAMLCertificateDetailsResponse\x12\x12\n\x04text\x18\x01 \x01(\tR\x04text\x12\x1b\n\tnot_after\x18\x02 \x01(\x03R\x08notAfter\x12\x1d\n\nnot_before\x18\x03 \x01(\x03R\tnotBefore\x12\x18\n\x07subject\x18\x04 \x01(\tR\x07subject\x12\x16\n\x06issuer\x18\x05 \x01(\tR\x06issuer\"\x86\x01\n\x1eGetConnectionTestResultRequest\x12,\n\rconnection_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0c\x63onnectionId\x12\x36\n\x0ftest_request_id\x18\x02 \x01(\tB\x0e\xbaH\x0br\t\x10\x01:\x05test_R\rtestRequestId\"\xbd\x02\n\x1fGetConnectionTestResultResponse\x12\x41\n\x06status\x18\x01 \x01(\x0e\x32).scalekit.v1.connections.TestResultStatusR\x06status\x12 \n\tuser_info\x18\x02 \x01(\tH\x00R\x08userInfo\x88\x01\x01\x12\x19\n\x05\x65rror\x18\x03 \x01(\tH\x01R\x05\x65rror\x88\x01\x01\x12\x30\n\x11\x65rror_description\x18\x04 \x01(\tH\x02R\x10\x65rrorDescription\x88\x01\x01\x12(\n\rerror_details\x18\x05 \x01(\tH\x03R\x0c\x65rrorDetails\x88\x01\x01\x42\x0c\n\n_user_infoB\x08\n\x06_errorB\x14\n\x12_error_descriptionB\x10\n\x0e_error_details\"\x1a\n\x18PasswordConnectionConfig\"9\n\x05\x46lags\x12\x19\n\x08is_login\x18\x01 \x01(\x08R\x07isLogin\x12\x15\n\x06is_app\x18\x02 \x01(\x08R\x05isApp\"\xaa\x03\n\x19ListAppConnectionsRequest\x12\x80\x01\n\tpage_size\x18\x01 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x02 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\x12U\n\x08provider\x18\x03 \x01(\tB4\x92\x41(2\x1e\x46ilter connections by providerJ\x06\"OKTA\"\xbaH\x06r\x04\x10\x01\x18\x32H\x00R\x08provider\x88\x01\x01\x42\x0b\n\t_provider\"\xea\x03\n\x1aListAppConnectionsResponse\x12\x81\x01\n\x0b\x63onnections\x18\x01 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB6\x92\x41\x33\x32\x31List of connections matching the request criteriaR\x0b\x63onnections\x12o\n\x0fnext_page_token\x18\x02 \x01(\tBG\x92\x41\x44\x32\"Token for the next page of resultsJ\x1e\"eyJwYWdlIjoyLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12s\n\x0fprev_page_token\x18\x03 \x01(\tBK\x92\x41H2&Token for the previous page of resultsJ\x1e\"eyJwYWdlIjoyLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12\x62\n\ntotal_size\x18\x04 \x01(\rBC\x92\x41@29Total number of connections matching the request criteriaJ\x03\x31\x30\x30R\ttotalSize\"\x8b\x01\n\x1bGetConnectionContextRequest\x12\x38\n\rconnection_id\x18\x01 \x01(\tB\x13\xbaH\x10r\x0b\x10\x01\x18 :\x05\x63onn_\xc8\x01\x01R\x0c\x63onnectionId\x12\x32\n\x0forganization_id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\"Q\n\x1cGetConnectionContextResponse\x12\x31\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext\"\xc1\x01\n\x1eUpdateConnectionContextRequest\x12\x38\n\rconnection_id\x18\x01 \x01(\tB\x13\xbaH\x10r\x0b\x10\x01\x18 :\x05\x63onn_\xc8\x01\x01R\x0c\x63onnectionId\x12\x32\n\x0forganization_id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x31\n\x07\x63ontext\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext*W\n\x11\x43odeChallengeType\x12#\n\x1f\x43ODE_CHALLENGE_TYPE_UNSPECIFIED\x10\x00\x12\x0b\n\x07NUMERIC\x10\x01\x12\x10\n\x0c\x41LPHANUMERIC\x10\x02*R\n\x11\x43onfigurationType\x12\"\n\x1e\x43ONFIGURATION_TYPE_UNSPECIFIED\x10\x00\x12\r\n\tDISCOVERY\x10\x01\x12\n\n\x06MANUAL\x10\x02*a\n\x0cNameIdFormat\x12\x16\n\x12NAME_ID_FORMAT_NIL\x10\x00\x12\x0f\n\x0bUNSPECIFIED\x10\x01\x12\t\n\x05\x45MAIL\x10\x02\x12\r\n\tTRANSIENT\x10\x03\x12\x0e\n\nPERSISTENT\x10\x04*U\n\x10PasswordlessType\x12 \n\x1cPasswordlessType_UNSPECIFIED\x10\x00\x12\x08\n\x04LINK\x10\x01\x12\x07\n\x03OTP\x10\x02\x12\x0c\n\x08LINK_OTP\x10\x03*9\n\x10TestResultStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0b\n\x07SUCCESS\x10\x01\x12\x0b\n\x07\x46\x41ILURE\x10\x02*\xd8\x01\n\x12SAMLSigningOptions\x12$\n SAML_SIGNING_OPTIONS_UNSPECIFIED\x10\x00\x12\x0e\n\nNO_SIGNING\x10\x01\x12\x1e\n\x1aSAML_ONLY_RESPONSE_SIGNING\x10\x02\x12\x1f\n\x1bSAML_ONLY_ASSERTION_SIGNING\x10\x03\x12#\n\x1fSAML_RESPONSE_ASSERTION_SIGNING\x10\x04\x12&\n\"SAML_RESPONSE_OR_ASSERTION_SIGNING\x10\x05*S\n\x0eRequestBinding\x12\x1f\n\x1bREQUEST_BINDING_UNSPECIFIED\x10\x00\x12\r\n\tHTTP_POST\x10\x01\x12\x11\n\rHTTP_REDIRECT\x10\x02*P\n\rTokenAuthType\x12\x1f\n\x1bTOKEN_AUTH_TYPE_UNSPECIFIED\x10\x00\x12\x0e\n\nURL_PARAMS\x10\x01\x12\x0e\n\nBASIC_AUTH\x10\x02*c\n\tOIDCScope\x12\x1a\n\x16OIDC_SCOPE_UNSPECIFIED\x10\x00\x12\n\n\x06openid\x10\x01\x12\x0b\n\x07profile\x10\x02\x12\t\n\x05\x65mail\x10\x03\x12\x0b\n\x07\x61\x64\x64ress\x10\x04\x12\t\n\x05phone\x10\x05*\xb0\x01\n\x0e\x43onnectionType\x12\x0b\n\x07INVALID\x10\x00\x12\x08\n\x04OIDC\x10\x01\x12\x08\n\x04SAML\x10\x02\x12\x0c\n\x08PASSWORD\x10\x03\x12\t\n\x05OAUTH\x10\x04\x12\x10\n\x0cPASSWORDLESS\x10\x05\x12\t\n\x05\x42\x41SIC\x10\x06\x12\n\n\x06\x42\x45\x41RER\x10\x07\x12\x0b\n\x07\x41PI_KEY\x10\x08\x12\x0c\n\x08WEBAUTHN\x10\t\x12\r\n\tOAUTH_M2M\x10\n\x12\x11\n\rTRELLO_OAUTH1\x10\x0b*`\n\x10\x43onnectionStatus\x12!\n\x1d\x43ONNECTION_STATUS_UNSPECIFIED\x10\x00\x12\t\n\x05\x44RAFT\x10\x01\x12\x0f\n\x0bIN_PROGRESS\x10\x02\x12\r\n\tCOMPLETED\x10\x03*\x98\x02\n\x12\x43onnectionProvider\x12#\n\x1f\x43ONNECTION_PROVIDER_UNSPECIFIED\x10\x00\x12\x08\n\x04OKTA\x10\x01\x12\n\n\x06GOOGLE\x10\x02\x12\x10\n\x0cMICROSOFT_AD\x10\x03\x12\t\n\x05\x41UTH0\x10\x04\x12\x0c\n\x08ONELOGIN\x10\x05\x12\x11\n\rPING_IDENTITY\x10\x06\x12\r\n\tJUMPCLOUD\x10\x07\x12\n\n\x06\x43USTOM\x10\x08\x12\n\n\x06GITHUB\x10\t\x12\n\n\x06GITLAB\x10\n\x12\x0c\n\x08LINKEDIN\x10\x0b\x12\x0e\n\nSALESFORCE\x10\x0c\x12\r\n\tMICROSOFT\x10\r\x12\x11\n\rIDP_SIMULATOR\x10\x0e\x12\x0c\n\x08SCALEKIT\x10\x0f\x12\x08\n\x04\x41\x44\x46S\x10\x10\x32\x92G\n\x11\x43onnectionService\x12\x91\x03\n\x1b\x43reateEnvironmentConnection\x12;.scalekit.v1.connections.CreateEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\"\x81\x02\x92\x41\xc1\x01\n\x0b\x43onnections\x12\x17\x43reate a new connection\x1a\x38\x45stablish a new connection for the specified environmentJ_\n\x03\x32\x30\x31\x12X\n\x1f\x43onnection created successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\"\x13/api/v1/connections:\nconnection\x12\xb3\x03\n\x10\x43reateConnection\x12\x30.scalekit.v1.connections.CreateConnectionRequest\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\"\xb9\x02\x92\x41\xc6\x01\n\x0b\x43onnections\x12\x17\x43reate a new connection\x1a=Establish a new SSO connection for the specified organizationJ_\n\x03\x32\x30\x31\x12X\n\x1f\x43onnection created successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x41\"3/api/v1/organizations/{organization_id}/connections:\nconnection\x12\xcd\x04\n\x19\x41ssignDomainsToConnection\x12\x39.scalekit.v1.connections.AssignDomainsToConnectionRequest\x1a:.scalekit.v1.connections.AssignDomainsToConnectionResponse\"\xb8\x03\x92\x41\xb6\x02\n\x0b\x43onnections\x12\x1e\x41ssign domains to a connection\x1a\x9e\x01\x41ssigns one or more domains to a specific connection within an organization. This allows the connection to be used for authentication on the specified domainsJf\n\x03\x32\x30\x30\x12_\n\x1d\x44omains assigned successfully\x12>\n<\x1a:.scalekit.v1.connections.AssignDomainsToConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02P\x1aK/api/v1/organizations/{organization_id}/connections/{connection_id}/domains:\x01*\x12\xb3\x03\n\x18GetEnvironmentConnection\x12\x38.scalekit.v1.connections.GetEnvironmentConnectionRequest\x1a..scalekit.v1.connections.GetConnectionResponse\"\xac\x02\x92\x41\xe7\x01\n\x0b\x43onnections\x12\x1bRetrieve connection details\x1aSObtain detailed information about a specific connection using its unique identifierJf\n\x03\x32\x30\x30\x12_\n)Successfully retrieved connection details\x12\x32\n0\x1a..scalekit.v1.connections.GetConnectionResponse\x82\xb5\x18\x03\x18\xc4\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\x12#/api/v1/connections/{connection_id}\x12\xcf\x04\n\rGetConnection\x12-.scalekit.v1.connections.GetConnectionRequest\x1a..scalekit.v1.connections.GetConnectionResponse\"\xde\x03\x92\x41\x81\x03\n\x0b\x43onnections\x12\x16Get connection details\x1a\xd1\x01Retrieves the complete configuration and status details for a specific connection by its ID within an organization. Returns all connection properties including provider settings, protocols, and current status.J\x85\x01\n\x03\x32\x30\x30\x12~\nHSuccessfully retrieved connection details for the specified organization\x12\x32\n0\x1a..scalekit.v1.connections.GetConnectionResponse\x82\xb5\x18\x15\n\x10\x63onnections_read\x18\xf4\x01\x82\xd3\xe4\x93\x02:\x12\x38/api/v1/organizations/{organization_id}/connections/{id}\x12\xe4\x02\n\x0fListConnections\x12/.scalekit.v1.connections.ListConnectionsRequest\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\"\xed\x01\x92\x41\xb6\x01\n\x0b\x43onnections\x12\x10List connections\x1a\x32Retrieves a list of connections in the environmentJa\n\x03\x32\x30\x30\x12Z\n\"Successfully retrieved connections\x12\x34\n2\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\x82\xb5\x18\x14\n\x10\x63onnections_read\x18t\x82\xd3\xe4\x93\x02\x15\x12\x13/api/v1/connections\x12\xb5\x03\n\x1bListOrganizationConnections\x12;.scalekit.v1.connections.ListOrganizationConnectionsRequest\x1a<.scalekit.v1.connections.ListOrganizationConnectionsResponse\"\x9a\x02\x92\x41\xd6\x01\n\x0b\x43onnections\x12\x1dList organization connections\x1a\x39Retrieves a list of connections for all the organizationsJm\n\x03\x32\x30\x30\x12\x66\n\"Successfully retrieved connections\x12@\n>\x1a<.scalekit.v1.connections.ListOrganizationConnectionsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\x12#/api/v1/organizations/-/connections\x12\xcd\x03\n\x1dSearchOrganizationConnections\x12=.scalekit.v1.connections.SearchOrganizationConnectionsRequest\x1a>.scalekit.v1.connections.SearchOrganizationConnectionsResponse\"\xac\x02\x92\x41\xe1\x01\n\x0b\x43onnections\x12\x1fSearch organization connections\x1a\x44Search with query or filters provided and return list of connectionsJk\n\x03\x32\x30\x30\x12\x64\n\x1eSuccessfully found connections\x12\x42\n@\x1a>.scalekit.v1.connections.SearchOrganizationConnectionsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02,\x12*/api/v1/organizations/-/connections:search\x12\xf1\x02\n\x1bUpdateEnvironmentConnection\x12;.scalekit.v1.connections.UpdateEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\"\xe1\x01\x92\x41\x91\x01\n\x0b\x43onnections\x12\x13Update a connection\x1a\x17Update a SSO ConnectionJT\n\x03\x32\x30\x30\x12M\n\x14Updated Successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\x32#/api/v1/connections/{connection_id}:\nconnection\x12\x94\x03\n\x10UpdateConnection\x12\x30.scalekit.v1.connections.UpdateConnectionRequest\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\"\x9a\x02\x92\x41\xa2\x01\n\x0b\x43onnections\x12$Update a connection for organization\x1a\x17Update a SSO ConnectionJT\n\x03\x32\x30\x30\x12M\n\x14Updated Successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x46\x32\x38/api/v1/organizations/{organization_id}/connections/{id}:\nconnection\x12\x92\x02\n\x1b\x44\x65leteEnvironmentConnection\x12;.scalekit.v1.connections.DeleteEnvironmentConnectionRequest\x1a\x16.google.protobuf.Empty\"\x9d\x01\x92\x41Z\n\x0b\x43onnections\x12\x13\x44\x65lete a connection\x1a\x17\x44\x65lete a SSO ConnectionJ\x1d\n\x03\x32\x30\x30\x12\x16\n\x14\x44\x65leted Successfully\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%*#/api/v1/connections/{connection_id}\x12\xf7\x03\n\x10\x44\x65leteConnection\x12\x30.scalekit.v1.connections.DeleteConnectionRequest\x1a\x16.google.protobuf.Empty\"\x98\x03\x92\x41\xce\x02\n\x0b\x43onnections\x12\x15\x44\x65lete SSO connection\x1a\xf9\x01\x44\x65letes an SSO connection from the specified organization by connection ID. Use this endpoint when an identity provider integration is no longer needed for the organization. Returns an empty response after the SSO connection is deleted successfully.J,\n\x03\x32\x30\x30\x12%\n#SSO connection deleted successfully\x82\xb5\x18\x02\x18\x64\x82\xd3\xe4\x93\x02:*8/api/v1/organizations/{organization_id}/connections/{id}\x12\xdf\x02\n\x1b\x45nableEnvironmentConnection\x12;.scalekit.v1.connections.ToggleEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xcf\x01\x92\x41\x84\x01\n\x0b\x43onnections\x12\x13\x45nable a connection\x1a\x17\x45nable a SSO ConnectionJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02,2*/api/v1/connections/{connection_id}:enable\x12\xd4\x04\n\x10\x45nableConnection\x12\x30.scalekit.v1.connections.ToggleConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xda\x03\x92\x41\xf6\x02\n\x0b\x43onnections\x12\x15\x45nable SSO connection\x1a\xee\x01\x41\x63tivate an existing connection for the specified organization. When enabled, users can authenticate using this connection. This endpoint changes the connection state from disabled to enabled without modifying other configuration settingsJ_\n\x03\x32\x30\x30\x12X\n\x1f\x43onnection enabled successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\x82\xd3\xe4\x93\x02\x41\x32?/api/v1/organizations/{organization_id}/connections/{id}:enable\x12\xe3\x02\n\x1c\x44isableEnvironmentConnection\x12;.scalekit.v1.connections.ToggleEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xd2\x01\x92\x41\x86\x01\n\x0b\x43onnections\x12\x14\x44isable a connection\x1a\x18\x44isable a SSO ConnectionJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02-2+/api/v1/connections/{connection_id}:disable\x12\xde\x04\n\x11\x44isableConnection\x12\x30.scalekit.v1.connections.ToggleConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xe3\x03\x92\x41\xfe\x02\n\x0b\x43onnections\x12\x16\x44isable SSO connection\x1a\xf4\x01\x44\x65\x61\x63tivate an existing connection for the specified organization. When disabled, users cannot authenticate using this connection. This endpoint changes the connection state from enabled to disabled without modifying other configuration settingsJ`\n\x03\x32\x30\x30\x12Y\n Connection disabled successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\x82\xd3\xe4\x93\x02\x42\x32@/api/v1/organizations/{organization_id}/connections/{id}:disable\x12\x80\x03\n\x17GetConnectionTestResult\x12\x37.scalekit.v1.connections.GetConnectionTestResultRequest\x1a\x38.scalekit.v1.connections.GetConnectionTestResultResponse\"\xf1\x01\x92\x41\x8d\x01\n\x0b\x43onnections\x12\x16Test connection result\x1a\x16\x43onnection test resultJN\n\x03\x32\x30\x30\x12G\n\x07Success\x12<\n:\x1a\x38.scalekit.v1.connections.GetConnectionTestResultResponse\x82\xb5\x18\x02\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x45\x12\x43/api/v1/connections/{connection_id}/test-requests/{test_request_id}\x12\xf6\x02\n\x12ListAppConnections\x12\x32.scalekit.v1.connections.ListAppConnectionsRequest\x1a\x33.scalekit.v1.connections.ListAppConnectionsResponse\"\xf6\x01\x92\x41\xbe\x01\n\x0b\x43onnections\x12\x14List App connections\x1a\x36Retrieves a list of app connections in the environmentJa\n\x03\x32\x30\x30\x12Z\n\"Successfully retrieved connections\x12\x34\n2\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\x12\x17/api/v1/connections/app\x12\xd1\x03\n\x14GetConnectionContext\x12\x34.scalekit.v1.connections.GetConnectionContextRequest\x1a\x35.scalekit.v1.connections.GetConnectionContextResponse\"\xcb\x02\x92\x41\xad\x01\n\x0b\x43onnections\x12\x16Get connection context\x1athis.provider == 15 ? this.provider_key in [\'SCALEKIT\'] : true\x1aM\x12\x18invalid value for key_id\x1a\x31this.type == 9 ? this.key_id == \'WEBAUTHN\' : trueB\t\n\x07_key_id\"\x89\"\n\nConnection\x12\x8d\x01\n\x02id\x18\x01 \x01(\tB}\x92\x41z2_Unique identifier for this connection. Used in API calls to reference this specific connection.J\x17\"conn_2123312131125533\"R\x02id\x12\xc2\x01\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderBy\x92\x41v2lIdentity provider service that handles authentication (such as OKTA, Google, Azure AD, or a custom provider)J\x06\"OKTA\"R\x08provider\x12\xb4\x01\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeBw\x92\x41t2jAuthentication protocol used by this connection. Can be OIDC (OpenID Connect), SAML, OAUTH, or MAGIC_LINK.J\x06\"OIDC\"R\x04type\x12\xc6\x01\n\x06status\x18\x04 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusB\x82\x01\x92\x41|2kCurrent configuration status of the connection. Possible values include IN_PROGRESS, CONFIGURED, and ERROR.J\r\"IN_PROGRESS\"\xe0\x41\x03R\x06status\x12\xab\x01\n\x07\x65nabled\x18\x05 \x01(\x08\x42\x90\x01\x92\x41\x8c\x01\x32\x82\x01\x43ontrols whether users can sign in using this connection. When false, the connection exists but cannot be used for authentication.J\x05\x66\x61lseR\x07\x65nabled\x12\xb0\x01\n\rdebug_enabled\x18\x06 \x01(\x08\x42\x8a\x01\x92\x41\x86\x01\x32~Enables testing mode that allows non-HTTPS endpoints. Should only be enabled in development environments, never in production.J\x04trueR\x0c\x64\x65\x62ugEnabled\x12\xc1\x01\n\x0forganization_id\x18\x07 \x01(\tB\x92\x01\x92\x41\x8e\x01\x32tIdentifier of the organization that owns this connection. Connections are typically scoped to a single organization.J\x16\"org_2123312131125533\"H\x01R\x0eorganizationId\x88\x01\x01\x12\xbd\x01\n\x0fui_button_title\x18\x08 \x01(\tB\x94\x01\x92\x41\x81\x01\x32mCustom text shown on the login button in the user interface. Helps users identify which SSO option to select.J\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12\xd5\x01\n\x12\x63onfiguration_type\x18\t \x01(\x0e\x32*.scalekit.v1.connections.ConfigurationTypeBz\x92\x41w2kHow the connection was configured: DISCOVERY (automatic configuration) or MANUAL (administrator configured)J\x08\"MANUAL\"R\x11\x63onfigurationType\x12\xdf\x01\n\x13test_connection_uri\x18\x0c \x01(\tB\xae\x01\x92\x41\xaa\x01\x32\x66URI that can be used to test this connection. Visit this URL to verify the connection works correctly.J@\"https://auth.example.com/test-connection/conn_2123312131125533\"R\x11testConnectionUri\x12\x81\x02\n\x11\x61ttribute_mapping\x18\x0f \x03(\x0b\x32\x39.scalekit.v1.connections.Connection.AttributeMappingEntryB\x98\x01\x92\x41|2zMaps identity provider attributes to user profile fields. For example, {\'email\': \'user.mail\', \'name\': \'user.displayName\'}.\xbaH\x16\x9a\x01\x13\x10\x1e\"\x06r\x04\x10\x01\x18\x64*\x07r\x05\x10\x01\x18\x80\x02R\x10\x61ttributeMapping\x12\xb1\x01\n\x0b\x63reate_time\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.TimestampBt\x92\x41_2EWhen this connection was first created. Format is RFC 3339 timestamp.J\x16\"2023-01-15T14:30:00Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ncreateTime\x12\xb1\x01\n\x0bupdate_time\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.TimestampBt\x92\x41_2EWhen this connection was last modified. Format is RFC 3339 timestamp.J\x16\"2023-02-20T09:15:30Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\nupdateTime\x12\xb3\x01\n\x0boidc_config\x18\x12 \x01(\x0b\x32-.scalekit.v1.connections.OIDCConnectionConfigBa\x92\x41^2\\Configuration details for OpenID Connect (OIDC) connections. Present only when type is OIDC.H\x00R\noidcConfig\x12\xaa\x01\n\x0bsaml_config\x18\x13 \x01(\x0b\x32\x35.scalekit.v1.connections.SAMLConnectionConfigResponseBP\x92\x41M2KConfiguration details for SAML connections. Present only when type is SAML.H\x00R\nsamlConfig\x12\xa7\x01\n\x0coauth_config\x18\x14 \x01(\x0b\x32..scalekit.v1.connections.OAuthConnectionConfigBR\x92\x41O2MConfiguration details for OAuth connections. Present only when type is OAUTH.H\x00R\x0boauthConfig\x12\xbf\x01\n\x13passwordless_config\x18\x16 \x01(\x0b\x32+.scalekit.v1.connections.PasswordLessConfigB_\x92\x41\\2ZConfiguration details for Magic Link authentication. Present only when type is MAGIC_LINK.H\x00R\x12passwordlessConfig\x12\xc0\x01\n\rstatic_config\x18\x1a \x01(\x0b\x32).scalekit.v1.connections.StaticAuthConfigBn\x92\x41k2iStatic configuration for custom connections. Present only when type is BASIC, BEARER, API_KEY, or custom.H\x00R\x0cstaticConfig\x12\xb1\x01\n\x0fwebauthn_config\x18\x1b \x01(\x0b\x32-.scalekit.v1.connections.WebAuthConfigurationBW\x92\x41T2RConfiguration details for WebAuthn (passkeys). Present only when type is WEBAUTHN.H\x00R\x0ewebauthnConfig\x12\xbb\x01\n\x11google_dwd_config\x18\x1c \x01(\x0b\x32(.scalekit.v1.connections.GoogleDWDConfigBc\x92\x41`2^Configuration details for Google Domain-Wide Delegation. Present only when type is GOOGLE_DWD.H\x00R\x0fgoogleDwdConfig\x12}\n\x06key_id\x18\x19 \x01(\tBa\x92\x41^2\\Alternative identifier for this connection, typically used in frontend applications or URLs.H\x02R\x05keyId\x88\x01\x01\x12u\n\x0cprovider_key\x18\x17 \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x12\xaa\x01\n\x07\x64omains\x18\x18 \x03(\x0b\x32\x1b.scalekit.v1.domains.DomainBs\x92\x41p2SDomain associated with this connection, used for domain-based authentication flows.J\x19[{\"name\": \"example.com\"}]R\x07\x64omains\x1a\x43\n\x15\x41ttributeMappingEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\n\n\x08settingsB\x12\n\x10_organization_idB\t\n\x07_key_idJ\x04\x08\r\x10\x0f\"w\n\x18\x43reateConnectionResponse\x12[\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\x16\x92\x41\x13\x32\x11\x43onnection DetailR\nconnection\"\xa8\x02\n\"UpdateEnvironmentConnectionRequest\x12~\n\rconnection_id\x18\x01 \x01(\tBY\x92\x41M2+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xca>\x05\xfa\x02\x02id\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\x12\x81\x01\n\nconnection\x18\x03 \x01(\x0b\x32).scalekit.v1.connections.UpdateConnectionB6\x92\x41-2#Connection properties to be updated\xca>\x05\xfa\x02\x02id\xbaH\x03\xc8\x01\x01R\nconnection\"\xce\x03\n\x17UpdateConnectionRequest\x12q\n\x0forganization_id\x18\x01 \x01(\tBH\x92\x41<2#Organization ID for the Connection.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\x61\n\x02id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02id\x12\xd6\x01\n\nconnection\x18\x04 \x01(\x0b\x32).scalekit.v1.connections.UpdateConnectionB\x8a\x01\x92\x41-2#Connection properties to be updated\xca>\x05\xfa\x02\x02id\xbaHW\xba\x01Q\x12\x36OAUTH, PASSWORDLESS and WEBAUTHN are not supported yet\x1a\x17!(this.type in [4,5,9])\xc8\x01\x01R\nconnectionJ\x04\x08\x02\x10\x03\"\xfd\x12\n\x10UpdateConnection\x12w\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderB.\x92\x41#2\x17SSO Connection ProviderJ\x08\"CUSTOM\"\xbaH\x05\x82\x01\x02\x10\x01R\x08provider\x12r\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB5\x92\x41*2 Connection Protocol OIDC / SAML J\x06\"OIDC\"\xbaH\x05\x82\x01\x02\x10\x01R\x04type\x12\xae\x01\n\rdebug_enabled\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBm\x92\x41j2bDebug mode for the connection. Debug would allow non HTTPS endpoint to be used with the connectionJ\x04trueR\x0c\x64\x65\x62ugEnabled\x12\x8d\x01\n\x0fui_button_title\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueBG\x92\x41\x35\x32!Display name for the Login ButtonJ\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12~\n\x12\x63onfiguration_type\x18\x0b \x01(\x0e\x32*.scalekit.v1.connections.ConfigurationTypeB#\x92\x41 2\x14\x43onfiguration Type. J\x08\"MANUAL\"R\x11\x63onfigurationType\x12\x9d\x01\n\x11\x61ttribute_mapping\x18\x0f \x03(\x0b\x32?.scalekit.v1.connections.UpdateConnection.AttributeMappingEntryB/\x92\x41\x13\x32\x11\x41ttribute Mapping\xbaH\x16\x9a\x01\x13\x10\x1e\"\x06r\x04\x10\x01\x18\x64*\x07r\x05\x10\x01\x18\x80\x02R\x10\x61ttributeMapping\x12\x83\x01\n\x0boidc_config\x18\x10 \x01(\x0b\x32-.scalekit.v1.connections.OIDCConnectionConfigB1\x92\x41.2,OIDC Configuration if ConnectionType == OIDCH\x00R\noidcConfig\x12\x8a\x01\n\x0bsaml_config\x18\x11 \x01(\x0b\x32\x34.scalekit.v1.connections.SAMLConnectionConfigRequestB1\x92\x41.2,SAML Configuration if ConnectionType == SAMLH\x00R\nsamlConfig\x12\x88\x01\n\x0coauth_config\x18\x12 \x01(\x0b\x32..scalekit.v1.connections.OAuthConnectionConfigB3\x92\x41\x30\x32.OAuth Configuration if ConnectionType == OAUTHH\x00R\x0boauthConfig\x12\x9d\x01\n\x13passwordless_config\x18\x14 \x01(\x0b\x32+.scalekit.v1.connections.PasswordLessConfigB=\x92\x41:28Magic Link Configuration if ConnectionType == MAGIC_LINKH\x00R\x12passwordlessConfig\x12P\n\rstatic_config\x18\x17 \x01(\x0b\x32).scalekit.v1.connections.StaticAuthConfigH\x00R\x0cstaticConfig\x12\xb1\x01\n\x0fwebauthn_config\x18\x18 \x01(\x0b\x32-.scalekit.v1.connections.WebAuthConfigurationBW\x92\x41T2RConfiguration details for WebAuthn (passkeys). Present only when type is WEBAUTHN.H\x00R\x0ewebauthnConfig\x12\xaf\x01\n\x11google_dwd_config\x18\x19 \x01(\x0b\x32(.scalekit.v1.connections.GoogleDWDConfigBW\x92\x41T2RGoogle Domain-Wide Delegation configuration. Present only when type is GOOGLE_DWD.H\x00R\x0fgoogleDwdConfig\x12&\n\x06key_id\x18\x16 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xac\x02H\x01R\x05keyId\x88\x01\x01\x12u\n\x0cprovider_key\x18\x15 \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x1a\x43\n\x15\x41ttributeMappingEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01:\x8b\x02\xbaH\x87\x02\x1aT\x12$provider or provider_key is required\x1a,has(this.provider_key) || this.provider != 0\x1a`\x12\x1einvalid value for provider_key\x1a>this.provider == 15 ? this.provider_key in [\'SCALEKIT\'] : true\x1aM\x12\x18invalid value for key_id\x1a\x31this.type == 9 ? this.key_id == \'WEBAUTHN\' : trueB\n\n\x08settingsB\t\n\x07_key_idJ\x04\x08\x01\x10\x02J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06J\x04\x08\t\x10\x0bJ\x04\x08\x0c\x10\x0f\"\x80\x01\n\x18UpdateConnectionResponse\x12\x64\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\x1f\x92\x41\x1c\x32\x1aUpdated Connection detailsR\nconnection\"\x9c\x01\n\"DeleteEnvironmentConnectionRequest\x12v\n\rconnection_id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\xf5\x01\n\x17\x44\x65leteConnectionRequest\x12q\n\x0forganization_id\x18\x01 \x01(\tBH\x92\x41<2#Organization ID for the Connection.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\x61\n\x02id\x18\x03 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\x92\x01\n\x1fGetEnvironmentConnectionRequest\x12o\n\rconnection_id\x18\x01 \x01(\tBJ\x92\x41>2$Unique identifier for the ConnectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\xfc\x02\n\x14GetConnectionRequest\x12\xba\x01\n\x0forganization_id\x18\x01 \x01(\tB\x90\x01\x92\x41\x83\x01\x32jOrganization identifier (required). Specifies which organization owns the connection you want to retrieve.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12\xa0\x01\n\x02id\x18\x03 \x01(\tB\x8f\x01\x92\x41\x82\x01\x32hConnection identifier (required). Specifies which specific connection to retrieve from the organization.J\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\x9a\x02\n\x15GetConnectionResponse\x12\x80\x02\n\nconnection\x18\x01 \x01(\x0b\x32#.scalekit.v1.connections.ConnectionB\xba\x01\x92\x41\xb6\x01\x32\xb3\x01\x43omplete connection details including provider configuration, protocol settings, status, and all metadata. Contains everything needed to understand the connection\'s current state.R\nconnection\"\x96\x04\n\x16ListConnectionsRequest\x12\x80\x01\n\x0forganization_id\x18\x01 \x01(\tBR\x92\x41\x46\x32-Filter connections by organization identifierJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x0eorganizationId\x88\x01\x01\x12\x7f\n\x06\x64omain\x18\x03 \x01(\tBb\x92\x41V2CFilter connections by email domain associated with the organizationJ\x0f\"hero-saas.app\"\xbaH\x06r\x04\x10\x01\x18 H\x01R\x06\x64omain\x88\x01\x01\x12\xc6\x01\n\x07include\x18\x04 \x01(\tB\xa6\x01\x92\x41\xa2\x01\x32\x9f\x01\x46ilter connections by status. Use \'all\' to include all connections regardless of status. Default behavior shows only active (completed and enabled) connectionsH\x02R\x07include\x88\x01\x01\x42\x12\n\x10_organization_idB\t\n\x07_domainB\n\n\x08_includeJ\x04\x08\x02\x10\x03\"\x9d\x01\n\x17ListConnectionsResponse\x12\x81\x01\n\x0b\x63onnections\x18\x01 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB6\x92\x41\x33\x32\x31List of connections matching the request criteriaR\x0b\x63onnections\"\xfa\x0b\n\x0eListConnection\x12Q\n\x02id\x18\x01 \x01(\tBA\x92\x41>2#Unique identifier of the connectionJ\x17\"conn_2123312131125533\"R\x02id\x12\x8d\x01\n\x08provider\x18\x02 \x01(\x0e\x32+.scalekit.v1.connections.ConnectionProviderBD\x92\x41\x41\x32\x35Identity provider type (e.g., OKTA, Google, Azure AD)J\x08\"CUSTOM\"R\x08provider\x12x\n\x04type\x18\x03 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB;\x92\x41\x38\x32.Authentication protocol used by the connectionJ\x06\"OIDC\"R\x04type\x12\x88\x01\n\x06status\x18\x04 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusBE\x92\x41?2.Current configuration status of the connectionJ\r\"IN_PROGRESS\"\xe0\x41\x03R\x06status\x12g\n\x07\x65nabled\x18\x05 \x01(\x08\x42M\x92\x41J2AWhether the connection is currently active for organization usersJ\x05\x66\x61lseR\x07\x65nabled\x12\x85\x01\n\x0forganization_id\x18\x06 \x01(\tB\\\x92\x41Y2?Unique identifier of the organization that owns this connectionJ\x16\"org_2123312131125533\"R\x0eorganizationId\x12\x88\x01\n\x0fui_button_title\x18\x07 \x01(\tB`\x92\x41N2:Text displayed on the SSO login button for this connectionJ\x10\"Login with SSO\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\ruiButtonTitle\x12t\n\x07\x64omains\x18\x08 \x03(\tBZ\x92\x41W2/List of domains configured with this connectionJ$[\"yourapp.com\", \"yourworkspace.com\"]R\x07\x64omains\x12q\n\x11organization_name\x18\t \x01(\tBD\x92\x41\x41\x32*Name of the organization of the connectionJ\x13\"Your Organization\"R\x10organizationName\x12u\n\x0cprovider_key\x18\n \x01(\tBR\x92\x41O2CKey ID of the identity provider service that handles authenticationJ\x08\"google\"R\x0bproviderKey\x12\x90\x01\n\x06key_id\x18\x0b \x01(\tBy\x92\x41v2[Alternative identifier for this connection, typically used in frontend applications or URLsJ\x17\"conn_2123312131125533\"R\x05keyId\x12\x90\x01\n\ncreated_at\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.TimestampBU\x92\x41@2&When this connection was first createdJ\x16\"2023-01-15T14:30:00Z\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\tcreatedAt\"\xcf\x02\n\"ListOrganizationConnectionsRequest\x12\x80\x01\n\tpage_size\x18\x01 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x02 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\x97\x02\n#ListOrganizationConnectionsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12&\n\x0fprev_page_token\x18\x03 \x01(\tR\rprevPageToken\x12\x80\x01\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB5\x92\x41\x32\x32\x30List of connections matching the filter criteriaR\x0b\x63onnections\"\xa2\x07\n$SearchOrganizationConnectionsRequest\x12l\n\x05query\x18\x01 \x01(\tBQ\x92\x41G2-Search query Connection ID or Organization IDJ\x16\"conn_121312434123312\"\xbaH\x04r\x02\x18\x64H\x00R\x05query\x88\x01\x01\x12@\n\x08provider\x18\x02 \x01(\tB\x1f\x92\x41\x1c\x32\x12\x46ilter by providerJ\x06\"OKTA\"H\x01R\x08provider\x88\x01\x01\x12}\n\x06status\x18\x03 \x01(\x0e\x32).scalekit.v1.connections.ConnectionStatusB5\x92\x41*2\x1b\x46ilter by connection statusJ\x0b\"COMPLETED\"\xbaH\x05\x82\x01\x02\x10\x01H\x02R\x06status\x88\x01\x01\x12\x8c\x01\n\x0f\x63onnection_type\x18\x04 \x01(\x0e\x32\'.scalekit.v1.connections.ConnectionTypeB5\x92\x41*2\x1b\x46ilter by connection statusJ\x0b\"COMPLETED\"\xbaH\x05\x82\x01\x02\x10\x01H\x03R\x0e\x63onnectionType\x88\x01\x01\x12O\n\x07\x65nabled\x18\x07 \x01(\x08\x42\x30\x92\x41-2#Filter by connection enabled statusJ\x06\"true\"H\x04R\x07\x65nabled\x88\x01\x01\x12\x80\x01\n\tpage_size\x18\x05 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x06 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageTokenB\x08\n\x06_queryB\x0b\n\t_providerB\t\n\x07_statusB\x12\n\x10_connection_typeB\n\n\x08_enabled\"\x99\x02\n%SearchOrganizationConnectionsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12&\n\x0fprev_page_token\x18\x03 \x01(\tR\rprevPageToken\x12\x80\x01\n\x0b\x63onnections\x18\x04 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB5\x92\x41\x32\x32\x30List of connections matching the filter criteriaR\x0b\x63onnections\"\x9c\x01\n\"ToggleEnvironmentConnectionRequest\x12v\n\rconnection_id\x18\x02 \x01(\tBQ\x92\x41\x45\x32+Connection ID. Unique ID for the connectionJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0c\x63onnectionId\"\x9e\x02\n\x17ToggleConnectionRequest\x12\x92\x01\n\x0forganization_id\x18\x01 \x01(\tBi\x92\x41]2DUnique identifier of the organization associated with the connectionJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x0eorganizationId\x12h\n\x02id\x18\x03 \x01(\tBX\x92\x41L22Unique identifier for the connection to be toggledJ\x16\"conn_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 R\x02idJ\x04\x08\x02\x10\x03\"\xbc\x02\n\x18ToggleConnectionResponse\x12\xa9\x01\n\x07\x65nabled\x18\x01 \x01(\x08\x42\x8e\x01\x92\x41\x8a\x01\x32\x81\x01\x43urrent state of the connection after the operation. True means the connection is now enabled and can be used for authentication.J\x04trueR\x07\x65nabled\x12\x62\n\rerror_message\x18\x02 \x01(\tB8\x92\x41\x35\x32$Error message if the operation failsJ\r\"placeholder\"H\x00R\x0c\x65rrorMessage\x88\x01\x01\x42\x10\n\x0e_error_message\"\xa0\x12\n\x14OIDCConnectionConfig\x12j\n\x06issuer\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB4\x92\x41\x31\x32\nIssuer URLJ#\"https://youridp.com/service/oauth\"R\x06issuer\x12\xaa\x01\n\x12\x64iscovery_endpoint\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB]\x92\x41Z2\x12\x44iscovery EndpointJD\"https://youridp.com/service/oauth/.well-known/openid-configuration\"R\x11\x64iscoveryEndpoint\x12\x84\x01\n\rauthorize_uri\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValueBA\x92\x41>2\rAuthorize URIJ-\"https://youridp.com/service/oauth/authorize\"R\x0c\x61uthorizeUri\x12t\n\ttoken_uri\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueB9\x92\x41\x36\x32\tToken URIJ)\"https://youridp.com/service/oauth/token\"R\x08tokenUri\x12\x82\x01\n\ruser_info_uri\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB@\x92\x41=2\rUser Info URIJ,\"https://youridp.com/service/oauth/userinfo\"R\x0buserInfoUri\x12p\n\x08jwks_uri\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValueB7\x92\x41\x34\x32\x08JWKS URIJ(\"https://youridp.com/service/oauth/jwks\"R\x07jwksUri\x12\\\n\tclient_id\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB!\x92\x41\x1e\x32\tClient IDJ\x11\"oauth_client_id\"R\x08\x63lientId\x12l\n\rclient_secret\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB)\x92\x41&2\rClient SecretJ\x15\"oauth_client_secret\"R\x0c\x63lientSecret\x12\x63\n\x06scopes\x18\n \x03(\x0e\x32\".scalekit.v1.connections.OIDCScopeB\'\x92\x41$2\x0bOIDC ScopesJ\x15[\"openid\", \"profile\"]R\x06scopes\x12r\n\x0ftoken_auth_type\x18\x0b \x01(\x0e\x32&.scalekit.v1.connections.TokenAuthTypeB\"\x92\x41\x1f\x32\x0fToken Auth TypeJ\x0c\"URL_PARAMS\"R\rtokenAuthType\x12j\n\x0credirect_uri\x18\x0c \x01(\tBG\x92\x41\x44\x32\x0cRedirect URIJ4\"https://yourapp.com/sso/v1/oidc/conn_1234/callback\"R\x0bredirectUri\x12V\n\x0cpkce_enabled\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x17\x92\x41\x14\x32\x0cPKCE EnabledJ\x04trueR\x0bpkceEnabled\x12h\n\x13idp_logout_required\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1c\x92\x41\x19\x32\x11\x45nable IDP logoutJ\x04trueR\x11idpLogoutRequired\x12\xb4\x01\n\x18post_logout_redirect_uri\x18\x0f \x01(\x0b\x32\x1c.google.protobuf.StringValueB]\x92\x41W2\x18post logout redirect uriJ;\"https://yourapp.com/sso/v1/oidc/conn_1234/logout/callback\"\xe0\x41\x03R\x15postLogoutRedirectUri\x12\xea\x01\n\x1f\x62\x61\x63kchannel_logout_redirect_uri\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x84\x01\x92\x41~2\"https://yourapp.com/sso/v1/oidc/conn_1234/backchannel-logout\"\xe0\x41\x03R\x1c\x62\x61\x63kchannelLogoutRedirectUri\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\x12\xba\x01\n!jit_provisioning_with_sso_enabled\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBT\x92\x41Q2IIndicates if Just In Time user provisioning is enabled for the connectionJ\x04trueR\x1djitProvisioningWithSsoEnabled\"\xce\x13\n\x15OAuthConnectionConfig\x12\x84\x01\n\rauthorize_uri\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValueBA\x92\x41>2\rAuthorize URIJ-\"https://youridp.com/service/oauth/authorize\"R\x0c\x61uthorizeUri\x12t\n\ttoken_uri\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueB9\x92\x41\x36\x32\tToken URIJ)\"https://youridp.com/service/oauth/token\"R\x08tokenUri\x12\x82\x01\n\ruser_info_uri\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB@\x92\x41=2\rUser Info URIJ,\"https://youridp.com/service/oauth/userinfo\"R\x0buserInfoUri\x12\\\n\tclient_id\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB!\x92\x41\x1e\x32\tClient IDJ\x11\"oauth_client_id\"R\x08\x63lientId\x12l\n\rclient_secret\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB)\x92\x41&2\rClient SecretJ\x15\"oauth_client_secret\"R\x0c\x63lientSecret\x12?\n\x06scopes\x18\n \x03(\tB\'\x92\x41$2\x0bOIDC ScopesJ\x15[\"openid\", \"profile\"]R\x06scopes\x12\x62\n\x0credirect_uri\x18\x0c \x01(\tB?\x92\x41<2\x0cRedirect URIJ,\"https://yourapp.com/service/oauth/redirect\"R\x0bredirectUri\x12V\n\x0cpkce_enabled\x18\r \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x17\x92\x41\x14\x32\x0cPKCE EnabledJ\x04trueR\x0bpkceEnabled\x12V\n\x06prompt\x18\x0e \x01(\x0b\x32\x1c.google.protobuf.StringValueB \x92\x41\x1d\x32\x13Prompt for the userJ\x06\"none\"R\x06prompt\x12m\n\x12use_platform_creds\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueB#\x92\x41 2\x18Use Scalekit credentialsJ\x04trueR\x10usePlatformCreds\x12Z\n\x0b\x61\x63\x63\x65ss_type\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1b\x92\x41\x18\x32\x0b\x41\x63\x63\x65ss TypeJ\t\"offline\"R\naccessType\x12n\n\x11\x63ustom_scope_name\x18\x11 \x01(\x0b\x32\x1c.google.protobuf.StringValueB$\x92\x41!2\x11\x43ustom Scope NameJ\x0c\"user_scope\"R\x0f\x63ustomScopeName\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\x12k\n\x11token_access_type\x18\x13 \x01(\x0b\x32\x1c.google.protobuf.StringValueB!\x92\x41\x1e\x32\x11Token Access TypeJ\t\"offline\"R\x0ftokenAccessType\x12\x84\x02\n\ttenant_id\x18\x14 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\xc8\x01\x92\x41\xc4\x01\x32\x99\x01Microsoft Entra tenant ID. Required when using a single-tenant or multi-tenant app registered in Microsoft Entra. Leave empty to use the common endpoint.J&\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"R\x08tenantId\x12\xc7\x01\n\x07is_cimd\x18\x15 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x91\x01\x92\x41\x8a\x01\x32\x81\x01Indicates whether this connection was registered using Client ID Metadata Document (CIMD) instead of Dynamic Client Registration.J\x04true\xe0\x41\x03R\x06isCimd\x12\xbe\x01\n\x08\x61pp_name\x18\x16 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x84\x01\x92\x41\x80\x01\x32mApplication name used by providers that require it as an authorize query parameter (e.g., Trello\'s app_name).J\x0f\"My Trello App\"R\x07\x61ppName\x12\xfa\x01\n\x0foptional_scopes\x18\x17 \x01(\x0b\x32\'.scalekit.v1.connections.OptionalScopesB\xa2\x01\x92\x41\x9e\x01\x32\x9b\x01Optional scopes configuration for identity providers that support or require additional scopes to be sent in a custom field during authentication requests.H\x00R\x0eoptionalScopes\x88\x01\x01\x42\x12\n\x10_optional_scopes\"\xa6\x03\n\x0eOptionalScopes\x12v\n\x06scopes\x18\x01 \x03(\tB^\x92\x41[2CList of optional scopes that can be requested during authenticationJ\x14[\"scope1\", \"scope2\"]R\x06scopes\x12\x9b\x02\n\nfield_name\x18\x02 \x01(\tB\xfb\x01\x92\x41\xf7\x01\x32\xd5\x01Name of the field in which scope should be sent in the authentication request. This is required by some identity providers that expect scopes to be sent in a custom field instead of the standard \'scope\' parameter.J\x1d\"optional_scope or bot_scope\"R\tfieldName\"\x80\x03\n\x0fGoogleDWDConfig\x12\xa7\x01\n\x14service_account_json\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueBW\x92\x41Q2OGoogle Cloud service account JSON key. Write-only: reads return a masked value.\xe0\x41\x04R\x12serviceAccountJson\x12\x39\n\x06scopes\x18\x02 \x03(\tB!\x92\x41\x1e\x32\x1cOAuth 2.0 scopes to request.R\x06scopes\x12\x87\x01\n\ttoken_uri\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValueBL\x92\x41I2GGoogle token endpoint. Defaults to https://oauth2.googleapis.com/token.R\x08tokenUri\"\xf4\x07\n\x12PasswordLessConfig\x12]\n\x04type\x18\x01 \x01(\x0e\x32).scalekit.v1.connections.PasswordlessTypeB\x1e\x92\x41\x1b\x32\x11Passwordless TypeJ\x06\"LINK\"R\x04type\x12W\n\tfrequency\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x16\x92\x41\x13\x32\x0eLink FrequencyJ\x01\x31H\x00R\tfrequency\x88\x01\x01\x12\x61\n\x08validity\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\"\x92\x41\x1f\x32\x18Link Validity in SecondsJ\x03\x36\x30\x30H\x01R\x08validity\x88\x01\x01\x12\x86\x01\n\x1b\x65nforce_same_browser_origin\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB&\x92\x41#2\x1b\x45nforce Same Browser OriginJ\x04trueH\x02R\x18\x65nforceSameBrowserOrigin\x88\x01\x01\x12t\n\x15\x63ode_challenge_length\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.UInt32ValueB\x1d\x92\x41\x1a\x32\x15\x43ode Challenge LengthJ\x01\x36H\x03R\x13\x63odeChallengeLength\x88\x01\x01\x12\x84\x01\n\x13\x63ode_challenge_type\x18\x06 \x01(\x0e\x32*.scalekit.v1.connections.CodeChallengeTypeB#\x92\x41 2\x13\x43ode Challenge TypeJ\t\"NUMERIC\"H\x04R\x11\x63odeChallengeType\x88\x01\x01\x12\x9d\x01\n-regenerate_passwordless_credentials_on_resend\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1a\x92\x41\x17\x32\x0fRegenerate the J\x04trueH\x05R)regeneratePasswordlessCredentialsOnResend\x88\x01\x01\x42\x0c\n\n_frequencyB\x0b\n\t_validityB\x1e\n\x1c_enforce_same_browser_originB\x18\n\x16_code_challenge_lengthB\x16\n\x14_code_challenge_typeB0\n._regenerate_passwordless_credentials_on_resend\"P\n\x10StaticAuthConfig\x12<\n\rstatic_config\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x0cstaticConfig\"\xc4\"\n\x14WebAuthConfiguration\x12@\n\x02rp\x18\x01 \x01(\x0b\x32\x30.scalekit.v1.connections.WebAuthConfiguration.RpR\x02rp\x12[\n\x0b\x61ttestation\x18\x02 \x01(\x0b\x32\x39.scalekit.v1.connections.WebAuthConfiguration.AttestationR\x0b\x61ttestation\x12\x64\n\x0e\x61uthenticators\x18\x03 \x01(\x0b\x32<.scalekit.v1.connections.WebAuthConfiguration.AuthenticatorsR\x0e\x61uthenticators\x12}\n\x17\x61uthenticator_selection\x18\x04 \x01(\x0b\x32\x44.scalekit.v1.connections.WebAuthConfiguration.AuthenticatorSelectionR\x16\x61uthenticatorSelection\x12O\n\x07timeout\x18\x05 \x01(\x0b\x32\x35.scalekit.v1.connections.WebAuthConfiguration.TimeoutR\x07timeout\x12\x64\n\x18\x65nable_auto_registration\x18\x06 \x01(\x08\x42*\x92\x41\'2%Enable auto registration for WebAuthnR\x16\x65nableAutoRegistration\x12X\n\x13show_passkey_button\x18\x07 \x01(\x08\x42(\x92\x41%2#Show passkey button on login screenR\x11showPasskeyButton\x12g\n\x18\x65nable_conditional_login\x18\x08 \x01(\x08\x42-\x92\x41*2(Allow autofill of passkeys in login pageR\x16\x65nableConditionalLogin\x1aH\n\x02Rp\x12\x1c\n\x03ids\x18\x01 \x03(\tB\n\xbaH\x07\x92\x01\x04\x08\x01\x10\nR\x03ids\x12$\n\x07origins\x18\x02 \x03(\tB\n\xbaH\x07\x92\x01\x04\x08\x01\x10\nR\x07origins\x1a\xc1\x01\n\x0b\x41ttestation\x12p\n\x15\x63onveyance_preference\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1d\xbaH\x1ar\x18R\x04noneR\x08indirectR\x06\x64irectR\x14\x63onveyancePreference\x12@\n\x17\x65nterprise_approved_ids\x18\x02 \x03(\tB\x08\xbaH\x05\x92\x01\x02\x10\x32R\x15\x65nterpriseApprovedIds\x1a\xf0\x13\n\x0e\x41uthenticators\x12\xdb\x02\n\x0evalidate_entry\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x97\x02\x92\x41\x93\x02\x1a\x1a.google.protobuf.BoolValue2\xf4\x01requires that the provided metadata has an entry for the given authenticator to be considered valid. By default an AAGUID which has a zero value should fail validation if validate_entry_permit_zero_aaguid is not provided with the value of true.R\rvalidateEntry\x12\x8f\x02\n!validate_entry_permit_zero_aaguid\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xa8\x01\x92\x41\xa4\x01\x32\xa1\x01is an option that permits a zero\'d AAGUID from an attestation statement to automatically pass metadata validations. Generally helpful to use with validate_entry.R\x1dvalidateEntryPermitZeroAaguid\x12\xc6\x01\n\x10validate_anchors\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x7f\x92\x41|2zwhen set to true enables the validation of the attestation statement against the trust anchor from the metadata statement.R\x0fvalidateAnchors\x12\xbe\x01\n\x0fvalidate_status\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBy\x92\x41v2twhen set to true enables the validation of the attestation statements AAGUID against the desired and undesired listsR\x0evalidateStatus\x12\xe1\x01\n\x19validate_attestation_type\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x88\x01\x92\x41\x84\x01\x32\x81\x01when set to true enables the validation of the attestation statements type against the known types the authenticator can produce.R\x17validateAttestationType\x12\xbb\x04\n\x1c\x64\x65sired_authenticator_status\x18\x06 \x03(\tB\xf8\x03\x92\x41\x9d\x01\x32\x96\x01provides the list of statuses which are considered undesirable for status report validation purposes. Should be used with validate_status set to true.:\x02[]\xbaH\xd3\x02\x92\x01\xcf\x02\x10\n\"\xca\x02r\xc7\x02R\x12NOT_FIDO_CERTIFIEDR\x0e\x46IDO_CERTIFIEDR\x18USER_VERIFICATION_BYPASSR\x1a\x41TTESTATION_KEY_COMPROMISER\x1aUSER_KEY_REMOTE_COMPROMISER\x1cUSER_KEY_PHYSICAL_COMPROMISER\x10UPDATE_AVAILABLER\x07REVOKEDR\x18SELF_ASSERTION_SUBMITTEDR\x11\x46IDO_CERTIFIED_L1R\x15\x46IDO_CERTIFIED_L1plusR\x11\x46IDO_CERTIFIED_L2R\x15\x46IDO_CERTIFIED_L2plusR\x11\x46IDO_CERTIFIED_L3R\x15\x46IDO_CERTIFIED_L3plusR\x1a\x64\x65siredAuthenticatorStatus\x12\xc1\x05\n\x1eundesired_authenticator_status\x18\x07 \x03(\tB\xfa\x04\x92\x41\x9f\x02\x32\x96\x01provides the list of statuses which are considered undesirable for status report validation purposes. Should be used with validate_status set to true.:\x83\x01[\'ATTESTATION_KEY_COMPROMISE\', \'USER_VERIFICATION_BYPASS\', \'USER_KEY_REMOTE_COMPROMISE\', \'USER_KEY_PHYSICAL_COMPROMISE\', \'REVOKED\']\xbaH\xd3\x02\x92\x01\xcf\x02\x10\n\"\xca\x02r\xc7\x02R\x12NOT_FIDO_CERTIFIEDR\x0e\x46IDO_CERTIFIEDR\x18USER_VERIFICATION_BYPASSR\x1a\x41TTESTATION_KEY_COMPROMISER\x1aUSER_KEY_REMOTE_COMPROMISER\x1cUSER_KEY_PHYSICAL_COMPROMISER\x10UPDATE_AVAILABLER\x07REVOKEDR\x18SELF_ASSERTION_SUBMITTEDR\x11\x46IDO_CERTIFIED_L1R\x15\x46IDO_CERTIFIED_L1plusR\x11\x46IDO_CERTIFIED_L2R\x15\x46IDO_CERTIFIED_L2plusR\x11\x46IDO_CERTIFIED_L3R\x15\x46IDO_CERTIFIED_L3plusR\x1cundesiredAuthenticatorStatus\x1a\x86\x02\n\x16\x41uthenticatorSelection\x12r\n\x11user_verification\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\'\xbaH$r\"R\x08requiredR\tpreferredR\x0b\x64iscouragedR\x10userVerification\x12x\n\x18\x61uthenticator_attachment\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\x1f\xbaH\x1cr\x1aR\x08platformR\x0e\x63ross-platformR\x17\x61uthenticatorAttachment\x1a\xa3\x04\n\x07Timeout\x12x\n\x0cregistration\x18\x01 \x01(\x0b\x32\x19.google.protobuf.DurationB9\x92\x41\'2\x1dRegistration timeout duration:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x0cregistration\x12\xa5\x01\n\x10registration_uvd\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationB_\x92\x41M2CRegistration timeout duration when user verification is discouraged:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x0fregistrationUvd\x12\x63\n\x05login\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationB2\x92\x41 2\x16Login timeout duration:\x06\"300s\"\xbaH\x0c\xaa\x01\t\"\x03\x08\x88\x0e\x32\x02\x08xR\x05login\x12\x90\x01\n\tlogin_uvd\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationBX\x92\x41\x46\x322\x0fSP Metadata URLJ+\"https://youridp.com/service/saml/metadata\"R\rspMetadataUrl\x12\x8a\x01\n\x10idp_metadata_url\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValueBB\x92\x41?2\x10IDP Metadata URLJ+\"https://youridp.com/service/saml/metadata\"R\x0eidpMetadataUrl\x12x\n\ridp_entity_id\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValueB6\x92\x41\x33\x32\rIDP Entity IDJ\"\"https://youridp.com/service/saml\"R\x0bidpEntityId\x12v\n\x0bidp_sso_url\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValueB8\x92\x41\x35\x32\x0bIDP SSO URLJ&\"https://youridp.com/service/saml/sso\"R\tidpSsoUrl\x12i\n\x10idp_certificates\x18\x07 \x03(\x0b\x32\'.scalekit.v1.connections.IDPCertificateB\x15\x92\x41\x12\x32\x10IDP CertificatesR\x0fidpCertificates\x12v\n\x0bidp_slo_url\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValueB8\x92\x41\x35\x32\x0bIDP SLO URLJ&\"https://youridp.com/service/saml/slo\"R\tidpSloUrl\x12l\n\x0fui_button_title\x18\t \x01(\x0b\x32\x1c.google.protobuf.StringValueB&\x92\x41#2\x0fUI Button TitleJ\x10\"Login with SSO\"R\ruiButtonTitle\x12t\n\x12idp_name_id_format\x18\n \x01(\x0e\x32%.scalekit.v1.connections.NameIdFormatB \x92\x41\x1d\x32\x12IDP Name ID FormatJ\x07\"EMAIL\"R\x0fidpNameIdFormat\x12\x89\x01\n\x17idp_sso_request_binding\x18\x0b \x01(\x0e\x32\'.scalekit.v1.connections.RequestBindingB)\x92\x41&2\x17IDP SSO Request BindingJ\x0b\"HTTP_POST\"R\x14idpSsoRequestBinding\x12\x89\x01\n\x17idp_slo_request_binding\x18\x0c \x01(\x0e\x32\'.scalekit.v1.connections.RequestBindingB)\x92\x41&2\x17IDP SLO Request BindingJ\x0b\"HTTP_POST\"R\x14idpSloRequestBinding\x12\x93\x01\n\x13saml_signing_option\x18\r \x01(\x0e\x32+.scalekit.v1.connections.SAMLSigningOptionsB6\x92\x41\x33\x32\x13SAML Signing OptionJ\x1c\"SAML_ONLY_RESPONSE_SIGNING\"R\x11samlSigningOption\x12{\n\x19\x61llow_idp_initiated_login\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueB$\x92\x41!2\x19\x41llow IDP Initiated LoginJ\x04trueR\x16\x61llowIdpInitiatedLogin\x12S\n\x0b\x66orce_authn\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x16\x92\x41\x13\x32\x0b\x46orce AuthnJ\x04trueR\nforceAuthn\x12\x96\x01\n\x14\x64\x65\x66\x61ult_redirect_uri\x18\x10 \x01(\x0b\x32\x1c.google.protobuf.StringValueBF\x92\x41\x43\x32\x14\x44\x65\x66\x61ult Redirect URIJ+\"https://yourapp.com/service/saml/redirect\"R\x12\x64\x65\x66\x61ultRedirectUri\x12k\n\x13\x61ssertion_encrypted\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1e\x92\x41\x1b\x32\x13\x41ssertion EncryptedJ\x04trueR\x12\x61ssertionEncrypted\x12j\n\x13want_request_signed\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1e\x92\x41\x1b\x32\x13Want Request SignedJ\x04trueR\x11wantRequestSigned\x12q\n\x0e\x63\x65rtificate_id\x18\x13 \x01(\x0b\x32\x1c.google.protobuf.StringValueB,\x92\x41)2\x0e\x43\x65rtificate IDJ\x17\"cer_35585423166144613\"R\rcertificateId\x12\x62\n\x10idp_slo_required\x18\x14 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\x1c\x92\x41\x19\x32\x11\x45nable IDP logoutJ\x04trueR\x0eidpSloRequired\x12\x96\x01\n\nsp_slo_url\x18\x15 \x01(\x0b\x32\x1c.google.protobuf.StringValueBZ\x92\x41T2\x18Service Provider SLO urlJ8\"https://yourapp.com/sso/v1/saml/conn_1234/slo/callback\"\xe0\x41\x03R\x08spSloUrl\x12\xc6\x01\n\x1async_user_profile_on_login\x18\x16 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBn\x92\x41k2cIndicates whether user profiles should be synchronized with the identity provider upon each log-in.J\x04trueR\x16syncUserProfileOnLogin\x12\xba\x01\n!jit_provisioning_with_sso_enabled\x18\x17 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBT\x92\x41Q2IIndicates if Just In Time user provisioning is enabled for the connectionJ\x04trueR\x1djitProvisioningWithSsoEnabled\"\xbf\x03\n\x0eIDPCertificate\x12\x36\n\x0b\x63\x65rtificate\x18\x01 \x01(\tB\x14\x92\x41\x11\x32\x0fIDP CertificateR\x0b\x63\x65rtificate\x12s\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB6\x92\x41\x33\x32\x19\x43\x65rtificate Creation TimeJ\x16\"2021-09-01T00:00:00Z\"R\ncreateTime\x12q\n\x0b\x65xpiry_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB4\x92\x41\x31\x32\x17\x43\x65rtificate Expiry TimeJ\x16\"2021-09-01T00:00:00Z\"R\nexpiryTime\x12\x38\n\x02id\x18\x04 \x01(\tB(\x92\x41%2\x0e\x43\x65rtificate IDJ\x13\"cert_123123123123\"R\x02id\x12S\n\x06issuer\x18\x05 \x01(\tB;\x92\x41\x38\x32\x12\x43\x65rtificate IssuerJ\"\"https://youridp.com/service/saml\"R\x06issuer\"b\n\x16GetOIDCMetadataRequest\x12H\n\x08metadata\x18\x01 \x01(\x0b\x32,.scalekit.v1.connections.OIDCMetadataRequestR\x08metadata\"9\n\x13OIDCMetadataRequest\x12\"\n\x06issuer\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x06issuer\"\xd7\x01\n\x17GetOIDCMetadataResponse\x12\x16\n\x06issuer\x18\x01 \x01(\tR\x06issuer\x12\x35\n\x16\x61uthorization_endpoint\x18\x02 \x01(\tR\x15\x61uthorizationEndpoint\x12%\n\x0etoken_endpoint\x18\x03 \x01(\tR\rtokenEndpoint\x12+\n\x11userinfo_endpoint\x18\x04 \x01(\tR\x10userinfoEndpoint\x12\x19\n\x08jwks_uri\x18\x05 \x01(\tR\x07jwksUri\"b\n\x16GetSAMLMetadataRequest\x12H\n\x08metadata\x18\x01 \x01(\x0b\x32,.scalekit.v1.connections.SAMLMetadataRequestR\x08metadata\"D\n\x13SAMLMetadataRequest\x12-\n\x0cmetadata_url\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0bmetadataUrl\"\xb4\x02\n\x17GetSAMLMetadataResponse\x12\"\n\ridp_entity_id\x18\x01 \x01(\tR\x0bidpEntityId\x12\x1e\n\x0bidp_sso_url\x18\x02 \x01(\tR\tidpSsoUrl\x12\x1e\n\x0bidp_slo_url\x18\x03 \x01(\tR\tidpSloUrl\x12)\n\x10idp_certificates\x18\x04 \x03(\tR\x0fidpCertificates\x12+\n\x12idp_name_id_format\x18\x05 \x01(\tR\x0fidpNameIdFormat\x12\'\n\x0frequest_binding\x18\x06 \x01(\tR\x0erequestBinding\x12\x34\n\x16want_assertions_signed\x18\x07 \x01(\x08R\x14wantAssertionsSigned\"u\n GetSAMLCertificateDetailsRequest\x12Q\n\x0b\x63\x65rtificate\x18\x01 \x01(\x0b\x32/.scalekit.v1.connections.SAMLCertificateRequestR\x0b\x63\x65rtificate\"5\n\x16SAMLCertificateRequest\x12\x1b\n\x04text\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04text\"\xa5\x01\n!GetSAMLCertificateDetailsResponse\x12\x12\n\x04text\x18\x01 \x01(\tR\x04text\x12\x1b\n\tnot_after\x18\x02 \x01(\x03R\x08notAfter\x12\x1d\n\nnot_before\x18\x03 \x01(\x03R\tnotBefore\x12\x18\n\x07subject\x18\x04 \x01(\tR\x07subject\x12\x16\n\x06issuer\x18\x05 \x01(\tR\x06issuer\"\x86\x01\n\x1eGetConnectionTestResultRequest\x12,\n\rconnection_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0c\x63onnectionId\x12\x36\n\x0ftest_request_id\x18\x02 \x01(\tB\x0e\xbaH\x0br\t\x10\x01:\x05test_R\rtestRequestId\"\xbd\x02\n\x1fGetConnectionTestResultResponse\x12\x41\n\x06status\x18\x01 \x01(\x0e\x32).scalekit.v1.connections.TestResultStatusR\x06status\x12 \n\tuser_info\x18\x02 \x01(\tH\x00R\x08userInfo\x88\x01\x01\x12\x19\n\x05\x65rror\x18\x03 \x01(\tH\x01R\x05\x65rror\x88\x01\x01\x12\x30\n\x11\x65rror_description\x18\x04 \x01(\tH\x02R\x10\x65rrorDescription\x88\x01\x01\x12(\n\rerror_details\x18\x05 \x01(\tH\x03R\x0c\x65rrorDetails\x88\x01\x01\x42\x0c\n\n_user_infoB\x08\n\x06_errorB\x14\n\x12_error_descriptionB\x10\n\x0e_error_details\"\x1a\n\x18PasswordConnectionConfig\"9\n\x05\x46lags\x12\x19\n\x08is_login\x18\x01 \x01(\x08R\x07isLogin\x12\x15\n\x06is_app\x18\x02 \x01(\x08R\x05isApp\"\xaa\x03\n\x19ListAppConnectionsRequest\x12\x80\x01\n\tpage_size\x18\x01 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x02 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\x12U\n\x08provider\x18\x03 \x01(\tB4\x92\x41(2\x1e\x46ilter connections by providerJ\x06\"OKTA\"\xbaH\x06r\x04\x10\x01\x18\x32H\x00R\x08provider\x88\x01\x01\x42\x0b\n\t_provider\"\xea\x03\n\x1aListAppConnectionsResponse\x12\x81\x01\n\x0b\x63onnections\x18\x01 \x03(\x0b\x32\'.scalekit.v1.connections.ListConnectionB6\x92\x41\x33\x32\x31List of connections matching the request criteriaR\x0b\x63onnections\x12o\n\x0fnext_page_token\x18\x02 \x01(\tBG\x92\x41\x44\x32\"Token for the next page of resultsJ\x1e\"eyJwYWdlIjoyLCJsaW1pdCI6MzB9\"R\rnextPageToken\x12s\n\x0fprev_page_token\x18\x03 \x01(\tBK\x92\x41H2&Token for the previous page of resultsJ\x1e\"eyJwYWdlIjoyLCJsaW1pdCI6MzB9\"R\rprevPageToken\x12\x62\n\ntotal_size\x18\x04 \x01(\rBC\x92\x41@29Total number of connections matching the request criteriaJ\x03\x31\x30\x30R\ttotalSize\"\x8b\x01\n\x1bGetConnectionContextRequest\x12\x38\n\rconnection_id\x18\x01 \x01(\tB\x13\xbaH\x10r\x0b\x10\x01\x18 :\x05\x63onn_\xc8\x01\x01R\x0c\x63onnectionId\x12\x32\n\x0forganization_id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\"Q\n\x1cGetConnectionContextResponse\x12\x31\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext\"\xc1\x01\n\x1eUpdateConnectionContextRequest\x12\x38\n\rconnection_id\x18\x01 \x01(\tB\x13\xbaH\x10r\x0b\x10\x01\x18 :\x05\x63onn_\xc8\x01\x01R\x0c\x63onnectionId\x12\x32\n\x0forganization_id\x18\x02 \x01(\tB\t\xbaH\x06r\x04\x10\x00\x18 R\x0eorganizationId\x12\x31\n\x07\x63ontext\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext*W\n\x11\x43odeChallengeType\x12#\n\x1f\x43ODE_CHALLENGE_TYPE_UNSPECIFIED\x10\x00\x12\x0b\n\x07NUMERIC\x10\x01\x12\x10\n\x0c\x41LPHANUMERIC\x10\x02*R\n\x11\x43onfigurationType\x12\"\n\x1e\x43ONFIGURATION_TYPE_UNSPECIFIED\x10\x00\x12\r\n\tDISCOVERY\x10\x01\x12\n\n\x06MANUAL\x10\x02*a\n\x0cNameIdFormat\x12\x16\n\x12NAME_ID_FORMAT_NIL\x10\x00\x12\x0f\n\x0bUNSPECIFIED\x10\x01\x12\t\n\x05\x45MAIL\x10\x02\x12\r\n\tTRANSIENT\x10\x03\x12\x0e\n\nPERSISTENT\x10\x04*U\n\x10PasswordlessType\x12 \n\x1cPasswordlessType_UNSPECIFIED\x10\x00\x12\x08\n\x04LINK\x10\x01\x12\x07\n\x03OTP\x10\x02\x12\x0c\n\x08LINK_OTP\x10\x03*9\n\x10TestResultStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0b\n\x07SUCCESS\x10\x01\x12\x0b\n\x07\x46\x41ILURE\x10\x02*\xd8\x01\n\x12SAMLSigningOptions\x12$\n SAML_SIGNING_OPTIONS_UNSPECIFIED\x10\x00\x12\x0e\n\nNO_SIGNING\x10\x01\x12\x1e\n\x1aSAML_ONLY_RESPONSE_SIGNING\x10\x02\x12\x1f\n\x1bSAML_ONLY_ASSERTION_SIGNING\x10\x03\x12#\n\x1fSAML_RESPONSE_ASSERTION_SIGNING\x10\x04\x12&\n\"SAML_RESPONSE_OR_ASSERTION_SIGNING\x10\x05*S\n\x0eRequestBinding\x12\x1f\n\x1bREQUEST_BINDING_UNSPECIFIED\x10\x00\x12\r\n\tHTTP_POST\x10\x01\x12\x11\n\rHTTP_REDIRECT\x10\x02*P\n\rTokenAuthType\x12\x1f\n\x1bTOKEN_AUTH_TYPE_UNSPECIFIED\x10\x00\x12\x0e\n\nURL_PARAMS\x10\x01\x12\x0e\n\nBASIC_AUTH\x10\x02*c\n\tOIDCScope\x12\x1a\n\x16OIDC_SCOPE_UNSPECIFIED\x10\x00\x12\n\n\x06openid\x10\x01\x12\x0b\n\x07profile\x10\x02\x12\t\n\x05\x65mail\x10\x03\x12\x0b\n\x07\x61\x64\x64ress\x10\x04\x12\t\n\x05phone\x10\x05*\xc0\x01\n\x0e\x43onnectionType\x12\x0b\n\x07INVALID\x10\x00\x12\x08\n\x04OIDC\x10\x01\x12\x08\n\x04SAML\x10\x02\x12\x0c\n\x08PASSWORD\x10\x03\x12\t\n\x05OAUTH\x10\x04\x12\x10\n\x0cPASSWORDLESS\x10\x05\x12\t\n\x05\x42\x41SIC\x10\x06\x12\n\n\x06\x42\x45\x41RER\x10\x07\x12\x0b\n\x07\x41PI_KEY\x10\x08\x12\x0c\n\x08WEBAUTHN\x10\t\x12\r\n\tOAUTH_M2M\x10\n\x12\x11\n\rTRELLO_OAUTH1\x10\x0b\x12\x0e\n\nGOOGLE_DWD\x10\x0c*`\n\x10\x43onnectionStatus\x12!\n\x1d\x43ONNECTION_STATUS_UNSPECIFIED\x10\x00\x12\t\n\x05\x44RAFT\x10\x01\x12\x0f\n\x0bIN_PROGRESS\x10\x02\x12\r\n\tCOMPLETED\x10\x03*\x98\x02\n\x12\x43onnectionProvider\x12#\n\x1f\x43ONNECTION_PROVIDER_UNSPECIFIED\x10\x00\x12\x08\n\x04OKTA\x10\x01\x12\n\n\x06GOOGLE\x10\x02\x12\x10\n\x0cMICROSOFT_AD\x10\x03\x12\t\n\x05\x41UTH0\x10\x04\x12\x0c\n\x08ONELOGIN\x10\x05\x12\x11\n\rPING_IDENTITY\x10\x06\x12\r\n\tJUMPCLOUD\x10\x07\x12\n\n\x06\x43USTOM\x10\x08\x12\n\n\x06GITHUB\x10\t\x12\n\n\x06GITLAB\x10\n\x12\x0c\n\x08LINKEDIN\x10\x0b\x12\x0e\n\nSALESFORCE\x10\x0c\x12\r\n\tMICROSOFT\x10\r\x12\x11\n\rIDP_SIMULATOR\x10\x0e\x12\x0c\n\x08SCALEKIT\x10\x0f\x12\x08\n\x04\x41\x44\x46S\x10\x10\x32\x92G\n\x11\x43onnectionService\x12\x91\x03\n\x1b\x43reateEnvironmentConnection\x12;.scalekit.v1.connections.CreateEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\"\x81\x02\x92\x41\xc1\x01\n\x0b\x43onnections\x12\x17\x43reate a new connection\x1a\x38\x45stablish a new connection for the specified environmentJ_\n\x03\x32\x30\x31\x12X\n\x1f\x43onnection created successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02!\"\x13/api/v1/connections:\nconnection\x12\xb3\x03\n\x10\x43reateConnection\x12\x30.scalekit.v1.connections.CreateConnectionRequest\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\"\xb9\x02\x92\x41\xc6\x01\n\x0b\x43onnections\x12\x17\x43reate a new connection\x1a=Establish a new SSO connection for the specified organizationJ_\n\x03\x32\x30\x31\x12X\n\x1f\x43onnection created successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.CreateConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x41\"3/api/v1/organizations/{organization_id}/connections:\nconnection\x12\xcd\x04\n\x19\x41ssignDomainsToConnection\x12\x39.scalekit.v1.connections.AssignDomainsToConnectionRequest\x1a:.scalekit.v1.connections.AssignDomainsToConnectionResponse\"\xb8\x03\x92\x41\xb6\x02\n\x0b\x43onnections\x12\x1e\x41ssign domains to a connection\x1a\x9e\x01\x41ssigns one or more domains to a specific connection within an organization. This allows the connection to be used for authentication on the specified domainsJf\n\x03\x32\x30\x30\x12_\n\x1d\x44omains assigned successfully\x12>\n<\x1a:.scalekit.v1.connections.AssignDomainsToConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02P\x1aK/api/v1/organizations/{organization_id}/connections/{connection_id}/domains:\x01*\x12\xb3\x03\n\x18GetEnvironmentConnection\x12\x38.scalekit.v1.connections.GetEnvironmentConnectionRequest\x1a..scalekit.v1.connections.GetConnectionResponse\"\xac\x02\x92\x41\xe7\x01\n\x0b\x43onnections\x12\x1bRetrieve connection details\x1aSObtain detailed information about a specific connection using its unique identifierJf\n\x03\x32\x30\x30\x12_\n)Successfully retrieved connection details\x12\x32\n0\x1a..scalekit.v1.connections.GetConnectionResponse\x82\xb5\x18\x03\x18\xc4\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\x12#/api/v1/connections/{connection_id}\x12\xcf\x04\n\rGetConnection\x12-.scalekit.v1.connections.GetConnectionRequest\x1a..scalekit.v1.connections.GetConnectionResponse\"\xde\x03\x92\x41\x81\x03\n\x0b\x43onnections\x12\x16Get connection details\x1a\xd1\x01Retrieves the complete configuration and status details for a specific connection by its ID within an organization. Returns all connection properties including provider settings, protocols, and current status.J\x85\x01\n\x03\x32\x30\x30\x12~\nHSuccessfully retrieved connection details for the specified organization\x12\x32\n0\x1a..scalekit.v1.connections.GetConnectionResponse\x82\xb5\x18\x15\n\x10\x63onnections_read\x18\xf4\x01\x82\xd3\xe4\x93\x02:\x12\x38/api/v1/organizations/{organization_id}/connections/{id}\x12\xe4\x02\n\x0fListConnections\x12/.scalekit.v1.connections.ListConnectionsRequest\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\"\xed\x01\x92\x41\xb6\x01\n\x0b\x43onnections\x12\x10List connections\x1a\x32Retrieves a list of connections in the environmentJa\n\x03\x32\x30\x30\x12Z\n\"Successfully retrieved connections\x12\x34\n2\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\x82\xb5\x18\x14\n\x10\x63onnections_read\x18t\x82\xd3\xe4\x93\x02\x15\x12\x13/api/v1/connections\x12\xb5\x03\n\x1bListOrganizationConnections\x12;.scalekit.v1.connections.ListOrganizationConnectionsRequest\x1a<.scalekit.v1.connections.ListOrganizationConnectionsResponse\"\x9a\x02\x92\x41\xd6\x01\n\x0b\x43onnections\x12\x1dList organization connections\x1a\x39Retrieves a list of connections for all the organizationsJm\n\x03\x32\x30\x30\x12\x66\n\"Successfully retrieved connections\x12@\n>\x1a<.scalekit.v1.connections.ListOrganizationConnectionsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%\x12#/api/v1/organizations/-/connections\x12\xcd\x03\n\x1dSearchOrganizationConnections\x12=.scalekit.v1.connections.SearchOrganizationConnectionsRequest\x1a>.scalekit.v1.connections.SearchOrganizationConnectionsResponse\"\xac\x02\x92\x41\xe1\x01\n\x0b\x43onnections\x12\x1fSearch organization connections\x1a\x44Search with query or filters provided and return list of connectionsJk\n\x03\x32\x30\x30\x12\x64\n\x1eSuccessfully found connections\x12\x42\n@\x1a>.scalekit.v1.connections.SearchOrganizationConnectionsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02,\x12*/api/v1/organizations/-/connections:search\x12\xf1\x02\n\x1bUpdateEnvironmentConnection\x12;.scalekit.v1.connections.UpdateEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\"\xe1\x01\x92\x41\x91\x01\n\x0b\x43onnections\x12\x13Update a connection\x1a\x17Update a SSO ConnectionJT\n\x03\x32\x30\x30\x12M\n\x14Updated Successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\x32#/api/v1/connections/{connection_id}:\nconnection\x12\x94\x03\n\x10UpdateConnection\x12\x30.scalekit.v1.connections.UpdateConnectionRequest\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\"\x9a\x02\x92\x41\xa2\x01\n\x0b\x43onnections\x12$Update a connection for organization\x1a\x17Update a SSO ConnectionJT\n\x03\x32\x30\x30\x12M\n\x14Updated Successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.UpdateConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x46\x32\x38/api/v1/organizations/{organization_id}/connections/{id}:\nconnection\x12\x92\x02\n\x1b\x44\x65leteEnvironmentConnection\x12;.scalekit.v1.connections.DeleteEnvironmentConnectionRequest\x1a\x16.google.protobuf.Empty\"\x9d\x01\x92\x41Z\n\x0b\x43onnections\x12\x13\x44\x65lete a connection\x1a\x17\x44\x65lete a SSO ConnectionJ\x1d\n\x03\x32\x30\x30\x12\x16\n\x14\x44\x65leted Successfully\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02%*#/api/v1/connections/{connection_id}\x12\xf7\x03\n\x10\x44\x65leteConnection\x12\x30.scalekit.v1.connections.DeleteConnectionRequest\x1a\x16.google.protobuf.Empty\"\x98\x03\x92\x41\xce\x02\n\x0b\x43onnections\x12\x15\x44\x65lete SSO connection\x1a\xf9\x01\x44\x65letes an SSO connection from the specified organization by connection ID. Use this endpoint when an identity provider integration is no longer needed for the organization. Returns an empty response after the SSO connection is deleted successfully.J,\n\x03\x32\x30\x30\x12%\n#SSO connection deleted successfully\x82\xb5\x18\x02\x18\x64\x82\xd3\xe4\x93\x02:*8/api/v1/organizations/{organization_id}/connections/{id}\x12\xdf\x02\n\x1b\x45nableEnvironmentConnection\x12;.scalekit.v1.connections.ToggleEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xcf\x01\x92\x41\x84\x01\n\x0b\x43onnections\x12\x13\x45nable a connection\x1a\x17\x45nable a SSO ConnectionJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02,2*/api/v1/connections/{connection_id}:enable\x12\xd4\x04\n\x10\x45nableConnection\x12\x30.scalekit.v1.connections.ToggleConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xda\x03\x92\x41\xf6\x02\n\x0b\x43onnections\x12\x15\x45nable SSO connection\x1a\xee\x01\x41\x63tivate an existing connection for the specified organization. When enabled, users can authenticate using this connection. This endpoint changes the connection state from disabled to enabled without modifying other configuration settingsJ_\n\x03\x32\x30\x30\x12X\n\x1f\x43onnection enabled successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\x82\xd3\xe4\x93\x02\x41\x32?/api/v1/organizations/{organization_id}/connections/{id}:enable\x12\xe3\x02\n\x1c\x44isableEnvironmentConnection\x12;.scalekit.v1.connections.ToggleEnvironmentConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xd2\x01\x92\x41\x86\x01\n\x0b\x43onnections\x12\x14\x44isable a connection\x1a\x18\x44isable a SSO ConnectionJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02-2+/api/v1/connections/{connection_id}:disable\x12\xde\x04\n\x11\x44isableConnection\x12\x30.scalekit.v1.connections.ToggleConnectionRequest\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\"\xe3\x03\x92\x41\xfe\x02\n\x0b\x43onnections\x12\x16\x44isable SSO connection\x1a\xf4\x01\x44\x65\x61\x63tivate an existing connection for the specified organization. When disabled, users cannot authenticate using this connection. This endpoint changes the connection state from enabled to disabled without modifying other configuration settingsJ`\n\x03\x32\x30\x30\x12Y\n Connection disabled successfully\x12\x35\n3\x1a\x31.scalekit.v1.connections.ToggleConnectionResponse\x82\xb5\x18\x15\n\x11\x63onnections_write\x18t\x82\xd3\xe4\x93\x02\x42\x32@/api/v1/organizations/{organization_id}/connections/{id}:disable\x12\x80\x03\n\x17GetConnectionTestResult\x12\x37.scalekit.v1.connections.GetConnectionTestResultRequest\x1a\x38.scalekit.v1.connections.GetConnectionTestResultResponse\"\xf1\x01\x92\x41\x8d\x01\n\x0b\x43onnections\x12\x16Test connection result\x1a\x16\x43onnection test resultJN\n\x03\x32\x30\x30\x12G\n\x07Success\x12<\n:\x1a\x38.scalekit.v1.connections.GetConnectionTestResultResponse\x82\xb5\x18\x02\x18t\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x45\x12\x43/api/v1/connections/{connection_id}/test-requests/{test_request_id}\x12\xf6\x02\n\x12ListAppConnections\x12\x32.scalekit.v1.connections.ListAppConnectionsRequest\x1a\x33.scalekit.v1.connections.ListAppConnectionsResponse\"\xf6\x01\x92\x41\xbe\x01\n\x0b\x43onnections\x12\x14List App connections\x1a\x36Retrieves a list of app connections in the environmentJa\n\x03\x32\x30\x30\x12Z\n\"Successfully retrieved connections\x12\x34\n2\x1a\x30.scalekit.v1.connections.ListConnectionsResponse\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x19\x12\x17/api/v1/connections/app\x12\xd1\x03\n\x14GetConnectionContext\x12\x34.scalekit.v1.connections.GetConnectionContextRequest\x1a\x35.scalekit.v1.connections.GetConnectionContextResponse\"\xcb\x02\x92\x41\xad\x01\n\x0b\x43onnections\x12\x16Get connection context\x1a None: ... class Connection(_message.Message): - __slots__ = ("id", "provider", "type", "status", "enabled", "debug_enabled", "organization_id", "ui_button_title", "configuration_type", "test_connection_uri", "attribute_mapping", "create_time", "update_time", "oidc_config", "saml_config", "oauth_config", "passwordless_config", "static_config", "webauthn_config", "key_id", "provider_key", "domains") + __slots__ = ("id", "provider", "type", "status", "enabled", "debug_enabled", "organization_id", "ui_button_title", "configuration_type", "test_connection_uri", "attribute_mapping", "create_time", "update_time", "oidc_config", "saml_config", "oauth_config", "passwordless_config", "static_config", "webauthn_config", "google_dwd_config", "key_id", "provider_key", "domains") class AttributeMappingEntry(_message.Message): __slots__ = ("key", "value") KEY_FIELD_NUMBER: _ClassVar[int] @@ -286,6 +288,7 @@ class Connection(_message.Message): PASSWORDLESS_CONFIG_FIELD_NUMBER: _ClassVar[int] STATIC_CONFIG_FIELD_NUMBER: _ClassVar[int] WEBAUTHN_CONFIG_FIELD_NUMBER: _ClassVar[int] + GOOGLE_DWD_CONFIG_FIELD_NUMBER: _ClassVar[int] KEY_ID_FIELD_NUMBER: _ClassVar[int] PROVIDER_KEY_FIELD_NUMBER: _ClassVar[int] DOMAINS_FIELD_NUMBER: _ClassVar[int] @@ -308,10 +311,11 @@ class Connection(_message.Message): passwordless_config: PasswordLessConfig static_config: StaticAuthConfig webauthn_config: WebAuthConfiguration + google_dwd_config: GoogleDWDConfig key_id: str provider_key: str domains: _containers.RepeatedCompositeFieldContainer[_domains_pb2.Domain] - def __init__(self, id: _Optional[str] = ..., provider: _Optional[_Union[ConnectionProvider, str]] = ..., type: _Optional[_Union[ConnectionType, str]] = ..., status: _Optional[_Union[ConnectionStatus, str]] = ..., enabled: bool = ..., debug_enabled: bool = ..., organization_id: _Optional[str] = ..., ui_button_title: _Optional[str] = ..., configuration_type: _Optional[_Union[ConfigurationType, str]] = ..., test_connection_uri: _Optional[str] = ..., attribute_mapping: _Optional[_Mapping[str, str]] = ..., create_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., update_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., oidc_config: _Optional[_Union[OIDCConnectionConfig, _Mapping]] = ..., saml_config: _Optional[_Union[SAMLConnectionConfigResponse, _Mapping]] = ..., oauth_config: _Optional[_Union[OAuthConnectionConfig, _Mapping]] = ..., passwordless_config: _Optional[_Union[PasswordLessConfig, _Mapping]] = ..., static_config: _Optional[_Union[StaticAuthConfig, _Mapping]] = ..., webauthn_config: _Optional[_Union[WebAuthConfiguration, _Mapping]] = ..., key_id: _Optional[str] = ..., provider_key: _Optional[str] = ..., domains: _Optional[_Iterable[_Union[_domains_pb2.Domain, _Mapping]]] = ...) -> None: ... + def __init__(self, id: _Optional[str] = ..., provider: _Optional[_Union[ConnectionProvider, str]] = ..., type: _Optional[_Union[ConnectionType, str]] = ..., status: _Optional[_Union[ConnectionStatus, str]] = ..., enabled: bool = ..., debug_enabled: bool = ..., organization_id: _Optional[str] = ..., ui_button_title: _Optional[str] = ..., configuration_type: _Optional[_Union[ConfigurationType, str]] = ..., test_connection_uri: _Optional[str] = ..., attribute_mapping: _Optional[_Mapping[str, str]] = ..., create_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., update_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., oidc_config: _Optional[_Union[OIDCConnectionConfig, _Mapping]] = ..., saml_config: _Optional[_Union[SAMLConnectionConfigResponse, _Mapping]] = ..., oauth_config: _Optional[_Union[OAuthConnectionConfig, _Mapping]] = ..., passwordless_config: _Optional[_Union[PasswordLessConfig, _Mapping]] = ..., static_config: _Optional[_Union[StaticAuthConfig, _Mapping]] = ..., webauthn_config: _Optional[_Union[WebAuthConfiguration, _Mapping]] = ..., google_dwd_config: _Optional[_Union[GoogleDWDConfig, _Mapping]] = ..., key_id: _Optional[str] = ..., provider_key: _Optional[str] = ..., domains: _Optional[_Iterable[_Union[_domains_pb2.Domain, _Mapping]]] = ...) -> None: ... class CreateConnectionResponse(_message.Message): __slots__ = ("connection",) @@ -338,7 +342,7 @@ class UpdateConnectionRequest(_message.Message): def __init__(self, organization_id: _Optional[str] = ..., id: _Optional[str] = ..., connection: _Optional[_Union[UpdateConnection, _Mapping]] = ...) -> None: ... class UpdateConnection(_message.Message): - __slots__ = ("provider", "type", "debug_enabled", "ui_button_title", "configuration_type", "attribute_mapping", "oidc_config", "saml_config", "oauth_config", "passwordless_config", "static_config", "webauthn_config", "key_id", "provider_key") + __slots__ = ("provider", "type", "debug_enabled", "ui_button_title", "configuration_type", "attribute_mapping", "oidc_config", "saml_config", "oauth_config", "passwordless_config", "static_config", "webauthn_config", "google_dwd_config", "key_id", "provider_key") class AttributeMappingEntry(_message.Message): __slots__ = ("key", "value") KEY_FIELD_NUMBER: _ClassVar[int] @@ -358,6 +362,7 @@ class UpdateConnection(_message.Message): PASSWORDLESS_CONFIG_FIELD_NUMBER: _ClassVar[int] STATIC_CONFIG_FIELD_NUMBER: _ClassVar[int] WEBAUTHN_CONFIG_FIELD_NUMBER: _ClassVar[int] + GOOGLE_DWD_CONFIG_FIELD_NUMBER: _ClassVar[int] KEY_ID_FIELD_NUMBER: _ClassVar[int] PROVIDER_KEY_FIELD_NUMBER: _ClassVar[int] provider: ConnectionProvider @@ -372,9 +377,10 @@ class UpdateConnection(_message.Message): passwordless_config: PasswordLessConfig static_config: StaticAuthConfig webauthn_config: WebAuthConfiguration + google_dwd_config: GoogleDWDConfig key_id: str provider_key: str - def __init__(self, provider: _Optional[_Union[ConnectionProvider, str]] = ..., type: _Optional[_Union[ConnectionType, str]] = ..., debug_enabled: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., ui_button_title: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., configuration_type: _Optional[_Union[ConfigurationType, str]] = ..., attribute_mapping: _Optional[_Mapping[str, str]] = ..., oidc_config: _Optional[_Union[OIDCConnectionConfig, _Mapping]] = ..., saml_config: _Optional[_Union[SAMLConnectionConfigRequest, _Mapping]] = ..., oauth_config: _Optional[_Union[OAuthConnectionConfig, _Mapping]] = ..., passwordless_config: _Optional[_Union[PasswordLessConfig, _Mapping]] = ..., static_config: _Optional[_Union[StaticAuthConfig, _Mapping]] = ..., webauthn_config: _Optional[_Union[WebAuthConfiguration, _Mapping]] = ..., key_id: _Optional[str] = ..., provider_key: _Optional[str] = ...) -> None: ... + def __init__(self, provider: _Optional[_Union[ConnectionProvider, str]] = ..., type: _Optional[_Union[ConnectionType, str]] = ..., debug_enabled: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., ui_button_title: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., configuration_type: _Optional[_Union[ConfigurationType, str]] = ..., attribute_mapping: _Optional[_Mapping[str, str]] = ..., oidc_config: _Optional[_Union[OIDCConnectionConfig, _Mapping]] = ..., saml_config: _Optional[_Union[SAMLConnectionConfigRequest, _Mapping]] = ..., oauth_config: _Optional[_Union[OAuthConnectionConfig, _Mapping]] = ..., passwordless_config: _Optional[_Union[PasswordLessConfig, _Mapping]] = ..., static_config: _Optional[_Union[StaticAuthConfig, _Mapping]] = ..., webauthn_config: _Optional[_Union[WebAuthConfiguration, _Mapping]] = ..., google_dwd_config: _Optional[_Union[GoogleDWDConfig, _Mapping]] = ..., key_id: _Optional[str] = ..., provider_key: _Optional[str] = ...) -> None: ... class UpdateConnectionResponse(_message.Message): __slots__ = ("connection",) @@ -618,6 +624,16 @@ class OptionalScopes(_message.Message): field_name: str def __init__(self, scopes: _Optional[_Iterable[str]] = ..., field_name: _Optional[str] = ...) -> None: ... +class GoogleDWDConfig(_message.Message): + __slots__ = ("service_account_json", "scopes", "token_uri") + SERVICE_ACCOUNT_JSON_FIELD_NUMBER: _ClassVar[int] + SCOPES_FIELD_NUMBER: _ClassVar[int] + TOKEN_URI_FIELD_NUMBER: _ClassVar[int] + service_account_json: _wrappers_pb2.StringValue + scopes: _containers.RepeatedScalarFieldContainer[str] + token_uri: _wrappers_pb2.StringValue + def __init__(self, service_account_json: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., scopes: _Optional[_Iterable[str]] = ..., token_uri: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ...) -> None: ... + class PasswordLessConfig(_message.Message): __slots__ = ("type", "frequency", "validity", "enforce_same_browser_origin", "code_challenge_length", "code_challenge_type", "regenerate_passwordless_credentials_on_resend") TYPE_FIELD_NUMBER: _ClassVar[int] diff --git a/scalekit/v1/organizations/organizations_pb2.py b/scalekit/v1/organizations/organizations_pb2.py index 0112e24..99e3422 100644 --- a/scalekit/v1/organizations/organizations_pb2.py +++ b/scalekit/v1/organizations/organizations_pb2.py @@ -28,7 +28,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n-scalekit/v1/organizations/organizations.proto\x12\x19scalekit.v1.organizations\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"\xaf\x01\n\x19\x43reateOrganizationRequest\x12\x91\x01\n\x0corganization\x18\x01 \x01(\x0b\x32-.scalekit.v1.organizations.CreateOrganizationB>\x92\x41\x35\x32\x33Required parameters for creating a new organization\xbaH\x03\xc8\x01\x01R\x0corganization\"\xb9\x01\n\x1a\x43reateOrganizationResponse\x12\x9a\x01\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationBM\x92\x41J2HThe newly created organization containing its ID, settings, and metadataR\x0corganization\"\xf8\x07\n\x12\x43reateOrganization\x12\x84\x01\n\x0c\x64isplay_name\x18\x04 \x01(\tBa\x92\x41Q2?Name of the organization. Must be between 1 and 200 characters.J\x0e\"Megasoft Inc\"\xe0\x41\x02\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\xa0\x01\n\x0bregion_code\x18\x05 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeB^\x92\x41L2DGeographic region code for the organization. Currently limited to USJ\x04\"US\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\nregionCode\x12\x9e\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBx\x92\x41u2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x0e\"my_unique_id\"H\x00R\nexternalId\x88\x01\x01\x12r\n\x08metadata\x18\x07 \x03(\x0b\x32;.scalekit.v1.organizations.CreateOrganization.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xcc\x02\n\x04slug\x18\t \x01(\tB\xb2\x02\x92\x41\x84\x02\x32\xd2\x01\x44NS-safe slug for dynamic redirect URI resolution (e.g. acme for https://acme.example.com/callback). Lowercase alphanumeric and hyphens, 1-63 chars, must start and end with alphanumeric, unique per environment.J\x06\"acme\"x?\x80\x01\x01\x8a\x01\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$\xbaH\'r%\x10\x01\x18?2\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$H\x01R\x04slug\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idB\x07\n\x05_slug\"\xf8\n\n\x0cOrganization\x12{\n\x02id\x18\x01 \x01(\tBk\x92\x41h2MUnique scalekit-generated identifier that uniquely references an organizationJ\x17\"org_59615193906282635\"R\x02id\x12\x8c\x01\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBO\x92\x41I2+Timestamp when the organization was createdJ\x1a\"2025-02-15T06:23:44.560Z\"\xe0\x41\x02R\ncreateTime\x12\x8e\x01\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBQ\x92\x41N20Timestamp when the organization was last updatedJ\x1a\"2025-02-15T06:23:44.560Z\"R\nupdateTime\x12|\n\x0c\x64isplay_name\x18\x04 \x01(\tBY\x92\x41L2>Name of the organization. Must be between 1 and 200 charactersJ\n\"Megasoft\"\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\x92\x01\n\x0bregion_code\x18\x05 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeBP\x92\x41M2EGeographic region code for the organization. Currently limited to US.J\x04\"US\"R\nregionCode\x12\x9e\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBx\x92\x41u2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x0e\"my_unique_id\"H\x00R\nexternalId\x88\x01\x01\x12l\n\x08metadata\x18\x07 \x03(\x0b\x32\x35.scalekit.v1.organizations.Organization.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12K\n\x08settings\x18\x08 \x01(\x0b\x32/.scalekit.v1.organizations.OrganizationSettingsR\x08settings\x12\x85\x02\n\x04slug\x18\t \x01(\tB\xeb\x01\x92\x41\xe7\x01\x32\xb5\x01\x44NS-safe slug for dynamic redirect URI resolution. Must be 1-63 chars, lowercase alphanumeric and hyphens, must start and end with an alphanumeric character. Unique per environment.J\x06\"acme\"x?\x80\x01\x01\x8a\x01\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$H\x01R\x04slug\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idB\x07\n\x05_slug\"\xe0\x03\n\x19UpdateOrganizationRequest\x12j\n\x02id\x18\x01 \x01(\tBX\x92\x41L23Unique identifier of the organization to be updatedJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\x85\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tBb\x92\x41I2-External ID of the organization to be updatedJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x83\x01\n\x0corganization\x18\x03 \x01(\x0b\x32-.scalekit.v1.organizations.UpdateOrganizationB0\x92\x41\'2%Organization Parameters to be updated\xbaH\x03\xc8\x01\x01R\x0corganization\x12;\n\x0bupdate_mask\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskR\nupdateMaskB\x0c\n\nidentities\"\x87\x08\n\x12UpdateOrganization\x12\x9e\x01\n\x0c\x64isplay_name\x18\x04 \x01(\tBv\x92\x41i2SName of the organization to display in the UI. Must be between 1 and 200 charactersJ\x12\"Acme Corporation\"\xbaH\x07r\x05\x10\x01\x18\xc8\x01H\x00R\x0b\x64isplayName\x88\x01\x01\x12\x9d\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBw\x92\x41t2bYour application\'s unique identifier for this organization, used to link Scalekit with your systemJ\x0e\"tenant_12345\"H\x01R\nexternalId\x88\x01\x01\x12\xa5\x02\n\x08metadata\x18\x07 \x03(\x0b\x32;.scalekit.v1.organizations.UpdateOrganization.MetadataEntryB\xcb\x01\x92\x41\xae\x01\x32\x8f\x01\x43ustom key-value pairs to store with the organization. Keys must be 3-25 characters, values must be 1-256 characters. Maximum 10 pairs allowed.J\x1a{\"industry\": \"technology\"}\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\x9a\x02\n\x04slug\x18\t \x01(\tB\x80\x02\x92\x41\xd2\x01\x32\xa0\x01\x44NS-safe slug for dynamic redirect URI resolution. Lowercase alphanumeric and hyphens, 1-63 chars, must start and end with alphanumeric, unique per environment.J\x06\"acme\"x?\x80\x01\x01\x8a\x01\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$\xbaH\'r%\x10\x01\x18?2\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$H\x02R\x04slug\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0f\n\r_display_nameB\x0e\n\x0c_external_idB\x07\n\x05_slugJ\x04\x08\x05\x10\x06\"\x8c\x01\n\x1aUpdateOrganizationResponse\x12n\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationB!\x92\x41\x1e\x32\x1cUpdated organization detailsR\x0corganization\"\xeb\x02\n\x16GetOrganizationRequest\x12\x84\x01\n\x02id\x18\x01 \x01(\tBr\x92\x41\x66\x32MUnique scalekit-generated identifier that uniquely references an organizationJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\xbb\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\x97\x01\x92\x41~2bUnique identifier that links an Organization Object to your app\'s tenant, stored as an External IDJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalIdB\x0c\n\nidentities\"\x8b\x01\n\x17GetOrganizationResponse\x12p\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationB#\x92\x41 2\x1eThe newly created organizationR\x0corganization\"\xe0\x05\n\x18ListOrganizationsRequest\x12t\n\tpage_size\x18\x01 \x01(\rBW\x92\x41T2NMaximum number of organizations to return per page. Must be between 10 and 100J\x02\x33\x30R\x08pageSize\x12\x8f\x01\n\npage_token\x18\x02 \x01(\tBp\x92\x41m2[Pagination token from the previous response. Use to retrieve the next page of organizationsJ\x0e\"\"R\tpageToken\x12\xa8\x01\n\x0b\x65xternal_id\x18\x03 \x01(\tB\x81\x01\x92\x41~2bYour application\'s unique identifier for this organization, used to link Scalekit with your systemJ\x18\"\"H\x00R\nexternalId\x88\x01\x01:\x80\x02\x92\x41\xfc\x01\n\xab\x01*\x12List Organizations2\x94\x01Retrieves a paginated list of all organizations within the environment. Use the `page_token` from the response to access subsequent pages of results*L\n\x12List Organizations\x12\x36https://docs.scalekit.com/reference/list-organizationsB\x0e\n\x0c_external_id\"\xa4\x04\n\x19ListOrganizationsResponse\x12\x97\x01\n\x0fnext_page_token\x18\x01 \x01(\tBo\x92\x41l2UPagination token for the next page of results. Use this token to fetch the next page.J\x13\"\"R\rnextPageToken\x12Y\n\ntotal_size\x18\x02 \x01(\rB:\x92\x41\x37\x32\x31Total number of organizations in the environment.J\x02\x33\x30R\ttotalSize\x12p\n\rorganizations\x18\x03 \x03(\x0b\x32\'.scalekit.v1.organizations.OrganizationB!\x92\x41\x1e\x32\x1cList of organization objectsR\rorganizations\x12\x9f\x01\n\x0fprev_page_token\x18\x04 \x01(\tBw\x92\x41t2]Pagination token for the previous page of results. Use this token to fetch the previous page.J\x13\"\"R\rprevPageToken\"\xa7\x05\n\x1aSearchOrganizationsRequest\x12\xa5\x01\n\x05query\x18\x01 \x01(\tB\x8e\x01\x92\x41\x7f\x32wSearch term to match against organization names, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\x04\x61\x63me\xbaH\tr\x04\x10\x03\x18\x64\xc8\x01\x01R\x05query\x12\x80\x01\n\tpage_size\x18\x02 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x03 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken:\xb5\x01\x92\x41\xb1\x01\n\x88\x01*\x14Search Organizations2pSearch for organizations in your environment using a text query that matches against names, IDs, or external IDs2$query=acme&page_size=30&page_token=1\"\xdb\x01\n\x1bSearchOrganizationsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12M\n\rorganizations\x18\x03 \x03(\x0b\x32\'.scalekit.v1.organizations.OrganizationR\rorganizations\x12&\n\x0fprev_page_token\x18\x04 \x01(\tR\rprevPageToken\"\xad\x02\n\x19\x44\x65leteOrganizationRequest\x12~\n\x02id\x18\x01 \x01(\tBl\x92\x41`2MUnique scalekit-generated identifier that uniquely references an organizationJ\x0f\"org_123456789\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\x81\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB^\x92\x41\x45\x32)External ID of the organization to deleteJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalIdB\x0c\n\nidentities\"\xcf\x04\n\x19GeneratePortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12(\n\x03sso\x18\x02 \x01(\x08\x42\x11\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\x03sso\x88\x01\x01\x12=\n\x0e\x64irectory_sync\x18\x03 \x01(\x08\x42\x11\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\rdirectorySync\x88\x01\x01\x12\xdd\x02\n\x08\x66\x65\x61tures\x18\x04 \x03(\x0e\x32\".scalekit.v1.organizations.FeatureB\x9c\x02\x92\x41\x98\x02\x32\x95\x02\x46\x65\x61tures to enable in the admin portal link. To enable features, append them as URL parameters:\n\n- Single Sign-On: ?features=sso\n- Directory Sync: ?features=dir_sync\n- Both features: ?features=sso&features=dir_sync\n\nExample URL: https://scalekit.com/portal/lnk_123?features=ssoR\x08\x66\x65\x61turesB\x06\n\x04_ssoB\x11\n\x0f_directory_sync\"f\n\x14GetPortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\"i\n\x17\x44\x65letePortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\"\xbe\x01\n\x1b\x44\x65letePortalLinkByIdRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12O\n\x07link_id\x18\x02 \x01(\tB6\x92\x41!2\x07Link IDJ\x16\"lnk_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04lnk_\xc8\x01\x01R\x06linkId\"\xb5\x03\n\x04Link\x12J\n\x02id\x18\x01 \x01(\tB:\x92\x41\x37\x32\x1eUnique Identifier for the linkJ\x15\"lnk_123123123123123\"R\x02id\x12\xc7\x01\n\x08location\x18\x02 \x01(\tB\xaa\x01\x92\x41\xa6\x01\x32qLocation of the link. This is the URL that can be used to access the Admin portal. The link is valid for 1 minuteJ1\"https://scalekit.com/portal/lnk_123123123123123\"R\x08location\x12\x96\x01\n\x0b\x65xpire_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBY\x92\x41V28Expiry time of the link. The link is valid for 1 minute.J\x1a\"2024-02-06T14:48:00.000Z\"R\nexpireTime\"\x96\x02\n\x1aGeneratePortalLinkResponse\x12\xf7\x01\n\x04link\x18\x01 \x01(\x0b\x32\x1f.scalekit.v1.organizations.LinkB\xc1\x01\x92\x41\xbd\x01\x32\xba\x01\x43ontains the generated admin portal link details. The link URL can be shared with organization administrators to set up: Single Sign-On (SSO) authentication and directory synchronizationR\x04link\"h\n\x16GetPortalLinksResponse\x12N\n\x05links\x18\x01 \x03(\x0b\x32\x1f.scalekit.v1.organizations.LinkB\x17\x92\x41\x14\x32\x12\x41\x64min Portal LinksR\x05links\"\x90\x04\n!UpdateOrganizationSettingsRequest\x12\x97\x01\n\x02id\x18\x01 \x01(\tB\x86\x01\x92\x41q2WUnique identifier of the organization to update settings. Must begin with \'org_\' prefixJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12\xd0\x02\n\x08settings\x18\x02 \x01(\x0b\x32/.scalekit.v1.organizations.OrganizationSettingsB\x82\x02\x92\x41\xf8\x01\x32\x95\x01Settings configuration to apply to the organization. Contains feature toggles for SSO, directory synchronization, and other organization capabilitiesJ^{\"features\": [{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]}\xbaH\x03\xc8\x01\x01R\x08settings\"\x91\x0c\n!OrganizationSessionPolicySettings\x12\x92\x02\n\rpolicy_source\x18\x01 \x01(\x0e\x32,.scalekit.v1.organizations.SessionPolicyTypeB\xbe\x01\x92\x41\xaf\x01\x32\xa2\x01Policy source. \'APPLICATION\' means the organization inherits the application-level session policy. \'CUSTOM\' means organization-specific timeout values are active.J\x08\"CUSTOM\"\xbaH\x08\x82\x01\x05\x10\x01\"\x01\x00R\x0cpolicySource\x12\xec\x01\n\x18\x61\x62solute_session_timeout\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x94\x01\x92\x41\x90\x01\x32\x88\x01The absolute session timeout value. The unit is specified by absolute_session_timeout_unit. Omitted when policy_source is \'environment\'.J\x03\x33\x36\x30R\x16\x61\x62soluteSessionTimeout\x12\xea\x01\n\x1d\x61\x62solute_session_timeout_unit\x18\x03 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitB\x82\x01\x92\x41\x7f\x32rUnit for absolute_session_timeout. Accepted values: \'minutes\', \'hours\', \'days\'. Responses always return \'minutes\'.J\t\"minutes\"H\x00R\x1a\x61\x62soluteSessionTimeoutUnit\x88\x01\x01\x12\xd3\x01\n\x1cidle_session_timeout_enabled\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBv\x92\x41s2kWhether idle session timeout is enabled for this organization. Omitted when policy_source is \'environment\'.J\x04trueR\x19idleSessionTimeoutEnabled\x12\x84\x02\n\x14idle_session_timeout\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xb4\x01\x92\x41\xb0\x01\x32\xa9\x01The idle session timeout value. The unit is specified by idle_session_timeout_unit. Omitted when idle_session_timeout_enabled is false or policy_source is \'environment\'.J\x02\x38\x34R\x12idleSessionTimeout\x12\xdd\x01\n\x19idle_session_timeout_unit\x18\x06 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitB~\x92\x41{2nUnit for idle_session_timeout. Accepted values: \'minutes\', \'hours\', \'days\'. Responses always return \'minutes\'.J\t\"minutes\"H\x01R\x16idleSessionTimeoutUnit\x88\x01\x01\x42 \n\x1e_absolute_session_timeout_unitB\x1c\n\x1a_idle_session_timeout_unit\"\xd4\x01\n#GetOrganizationSessionPolicyRequest\x12\xac\x01\n\x0forganization_id\x18\x01 \x01(\tB\x82\x01\x92\x41m2RThe unique identifier of the organization whose session policy is being requested.J\x17\"org_59615193906282635\"\xe0\x41\x02\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\"\xac\x01\n$GetOrganizationSessionPolicyResponse\x12\x83\x01\n\x06policy\x18\x01 \x01(\x0b\x32<.scalekit.v1.organizations.OrganizationSessionPolicySettingsB-\x92\x41*2(The session policy for the organization.R\x06policy\"\xb7\x0c\n&UpdateOrganizationSessionPolicyRequest\x12\xaa\x01\n\x0forganization_id\x18\x01 \x01(\tB\x80\x01\x92\x41k2PThe unique identifier of the organization whose session policy is being updated.J\x17\"org_59615193906282635\"\xe0\x41\x02\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xe8\x01\n\rpolicy_source\x18\x02 \x01(\x0e\x32,.scalekit.v1.organizations.SessionPolicyTypeB\x94\x01\x92\x41\x90\x01\x32\x83\x01Policy source. Send \'APPLICATION\' to revert to application defaults. Send \'CUSTOM\' with timeout values to activate a custom policy.J\x08\"CUSTOM\"R\x0cpolicySource\x12\xe7\x01\n\x18\x61\x62solute_session_timeout\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x8f\x01\x92\x41\x8b\x01\x32\x83\x01The absolute session timeout value. The unit is specified by absolute_session_timeout_unit. Omit when policy_source is APPLICATION.J\x03\x33\x36\x30R\x16\x61\x62soluteSessionTimeout\x12\xdb\x01\n\x1d\x61\x62solute_session_timeout_unit\x18\x04 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitBt\x92\x41q2dUnit for absolute_session_timeout. Accepted values: \'MINUTES\', \'HOURS\', \'DAYS\'. Defaults to MINUTES.J\t\"MINUTES\"H\x00R\x1a\x61\x62soluteSessionTimeoutUnit\x88\x01\x01\x12\xb8\x01\n\x1cidle_session_timeout_enabled\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB[\x92\x41X2PWhether idle session timeout is enabled. Omit when policy_source is APPLICATION.J\x04trueR\x19idleSessionTimeoutEnabled\x12\xdf\x01\n\x14idle_session_timeout\x18\x06 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x8f\x01\x92\x41\x8b\x01\x32\x84\x01The idle session timeout value. The unit is specified by idle_session_timeout_unit. Omit when idle_session_timeout_enabled is false.J\x02\x38\x34R\x12idleSessionTimeout\x12\xcf\x01\n\x19idle_session_timeout_unit\x18\x07 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitBp\x92\x41m2`Unit for idle_session_timeout. Accepted values: \'MINUTES\', \'HOURS\', \'DAYS\'. Defaults to MINUTES.J\t\"MINUTES\"H\x01R\x16idleSessionTimeoutUnit\x88\x01\x01\x42 \n\x1e_absolute_session_timeout_unitB\x1c\n\x1a_idle_session_timeout_unit\"\xb7\x01\n\'UpdateOrganizationSessionPolicyResponse\x12\x8b\x01\n\x06policy\x18\x01 \x01(\x0b\x32<.scalekit.v1.organizations.OrganizationSessionPolicySettingsB5\x92\x41\x32\x32\x30The updated session policy for the organization.R\x06policy\"\xaa\x01\n\"GetApplicationSessionPolicyRequest\x12\x83\x01\n\x0forganization_id\x18\x01 \x01(\tBZ\x92\x41\x45\x32*The unique identifier of the organization.J\x17\"org_59615193906282635\"\xe0\x41\x02\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\"\x9e\x04\n ApplicationSessionPolicySettings\x12h\n\x18\x61\x62solute_session_timeout\x18\x01 \x01(\x05\x42.\x92\x41+2$Absolute session timeout in minutes.J\x03\x34\x38\x30R\x16\x61\x62soluteSessionTimeout\x12\x8e\x01\n\x1cidle_session_timeout_enabled\x18\x02 \x01(\x08\x42M\x92\x41J2AWhether idle session timeout is enabled at the application level.J\x05\x66\x61lseR\x19idleSessionTimeoutEnabled\x12\x7f\n\x14idle_session_timeout\x18\x03 \x01(\x05\x42M\x92\x41J2DIdle session timeout in minutes. Zero when idle timeout is disabled.J\x02\x36\x30R\x12idleSessionTimeout\x12~\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x04 \x01(\x05\x42N\x92\x41K2FAccess token expiry in minutes. Custom policy values must exceed this.J\x01\x35R\x11\x61\x63\x63\x65ssTokenExpiry\"\xd1\x01\n#GetApplicationSessionPolicyResponse\x12\xa9\x01\n\x12\x61pplication_policy\x18\x01 \x01(\x0b\x32;.scalekit.v1.organizations.ApplicationSessionPolicySettingsB=\x92\x41:28The effective application-level session policy settings.R\x11\x61pplicationPolicy\"\xdc\x02\n\"OrganizationUserManagementSettings\x12\xb5\x02\n\x11max_allowed_users\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xeb\x01\x92\x41\xe7\x01\x32\xdf\x01Maximum number of users allowed in the organization. When nil (not set), there feature is not enabled. When explicitly set to zero, it also means no limit. When set to a positive integer, it enforces the maximum user limit.J\x03\x31\x30\x30R\x0fmaxAllowedUsers\"\xae\x08\n\x1bOrganizationSessionSettings\x12\xfe\x01\n\x18\x61\x62solute_session_timeout\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xa6\x01\x92\x41\xa2\x01\x32\x98\x01The maximum duration in seconds that a session can remain active, regardless of activity. After this time, the user will be required to re-authenticate.J\x05\x38\x36\x34\x30\x30R\x16\x61\x62soluteSessionTimeout\x12\xd4\x01\n\x14idle_session_timeout\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x84\x01\x92\x41\x80\x01\x32xThe duration in seconds that a session can remain idle before it is automatically terminated. Activity resets the timer.J\x04\x31\x38\x30\x30R\x12idleSessionTimeout\x12\x8e\x02\n\x1cidle_session_timeout_enabled\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xb0\x01\x92\x41\xac\x01\x32\xa3\x01Whether idle session timeout is enabled for this organization. When enabled, sessions expire after the idle timeout duration regardless of the environment setting.J\x04trueR\x19idleSessionTimeoutEnabled\x12\xe7\x01\n\rpolicy_source\x18\x06 \x01(\tB\xc1\x01\x92\x41\xbd\x01\x32\xb0\x01Policy source for this organization. APPLICATION means the organization inherits application-level session policy. CUSTOM means organization-specific timeout values are active.J\x08\"CUSTOM\"R\x0cpolicySourceJ\x04\x08\x02\x10\x03J\x04\x08\x04\x10\x05R\x1asession_management_enabledR\x14idle_session_enabled\"\x8e\x04\n\x14OrganizationSettings\x12\xa4\x02\n\x08\x66\x65\x61tures\x18\x01 \x03(\x0b\x32\x36.scalekit.v1.organizations.OrganizationSettingsFeatureB\xcf\x01\x92\x41\xcb\x01\x32wList of feature toggles that control organization capabilities such as SSO authentication and directory synchronizationJP[{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]R\x08\x66\x65\x61tures:\xce\x01\x92\x41\xca\x01\nh*\x15Organization Settings2OConfiguration options that control organization-level features and capabilities2^{\"features\": [{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]}\"\x8e\x04\n\x1bOrganizationSettingsFeature\x12\x81\x02\n\x04name\x18\x01 \x01(\tB\xec\x01\x92\x41\xe8\x01\x32\xde\x01\x46\x65\x61ture identifier. Supported values include: \"sso\" (Single Sign-On), \"directory_sync\" (Directory Synchronization), \"domain_verification\" (Domain Verification), \"session_policy\" (Organization-level session policy override)J\x05\"sso\"R\x04name\x12t\n\x07\x65nabled\x18\x02 \x01(\x08\x42Z\x92\x41W2OWhether the feature is enabled (true) or disabled (false) for this organizationJ\x04trueR\x07\x65nabled:u\x92\x41r\np*\x1bOrganization Feature Toggle2@Controls the activation state of a specific organization feature\xd2\x01\x04name\xd2\x01\x07\x65nabled\"\x96\x02\n#UpsertUserManagementSettingsRequest\x12W\n\x0forganization_id\x18\x01 \x01(\tB.\x92\x41\x19\x32\x17ID of the organization.\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\x12\x95\x01\n\x08settings\x18\x02 \x01(\x0b\x32=.scalekit.v1.organizations.OrganizationUserManagementSettingsB:\x92\x41\x31\x32/The new values for the setting fields to patch.\xbaH\x03\xc8\x01\x01R\x08settings\"\x9c\x01\n$UpsertUserManagementSettingsResponse\x12t\n\x08settings\x18\x01 \x01(\x0b\x32=.scalekit.v1.organizations.OrganizationUserManagementSettingsB\x19\x92\x41\x16\x32\x14The updated setting.R\x08settings\"\x87\x01\n,GetOrganizationUserManagementSettingsRequest\x12W\n\x0forganization_id\x18\x01 \x01(\tB.\x92\x41\x19\x32\x17ID of the organization.\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\"\xaf\x01\n-GetOrganizationUserManagementSettingsResponse\x12~\n\x08settings\x18\x01 \x01(\x0b\x32=.scalekit.v1.organizations.OrganizationUserManagementSettingsB#\x92\x41 2\x1eList of organization settings.R\x08settings*R\n\x07\x46\x65\x61ture\x12\x17\n\x13\x46\x45\x41TURE_UNSPECIFIED\x10\x00\x12\x13\n\x0bUNSPECIFIED\x10\x00\x1a\x02\x08\x01\x12\x0c\n\x08\x64ir_sync\x10\x01\x12\x07\n\x03sso\x10\x02\x1a\x02\x10\x01*U\n\x11SessionPolicyType\x12#\n\x1fSESSION_POLICY_TYPE_UNSPECIFIED\x10\x00\x12\x0f\n\x0b\x41PPLICATION\x10\x01\x12\n\n\x06\x43USTOM\x10\x02\x32\xaaP\n\x13OrganizationService\x12\x88\x04\n\x12\x43reateOrganization\x12\x34.scalekit.v1.organizations.CreateOrganizationRequest\x1a\x35.scalekit.v1.organizations.CreateOrganizationResponse\"\x84\x03\x92\x41\xcf\x02\n\rOrganizations\x12\x16\x43reate an organization\x1a\x8f\x01\x43reates a new organization in your environment. Use this endpoint to add a new tenant that can be configured with various settings and metadataJ\x93\x01\n\x03\x32\x30\x31\x12\x8b\x01\nNReturns the newly created organization with its unique identifier and settings\x12\x39\n7\x1a\x35.scalekit.v1.organizations.CreateOrganizationResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02%\"\x15/api/v1/organizations:\x0corganization\x12\xbf\x04\n\x12UpdateOrganization\x12\x34.scalekit.v1.organizations.UpdateOrganizationRequest\x1a\x35.scalekit.v1.organizations.UpdateOrganizationResponse\"\xbb\x03\x92\x41\xec\x02\n\rOrganizations\x12\x1bUpdate organization details\x1a\xa1\x01Updates an organization\'s display name, external ID, or metadata. Requires a valid organization identifier. Region code cannot be modified through this endpoint.J\x99\x01\n\x03\x32\x30\x30\x12\x91\x01\nTReturns the updated organization with all current details reflected in the response.\x12\x39\n7\x1a\x35.scalekit.v1.organizations.UpdateOrganizationResponse\x82\xb5\x18\x17\n\x13organizations_write\x18T\x82\xd3\xe4\x93\x02*2\x1a/api/v1/organizations/{id}:\x0corganization\x12\xde\x03\n\x0fGetOrganization\x12\x31.scalekit.v1.organizations.GetOrganizationRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xe3\x02\x92\x41\xa3\x02\n\rOrganizations\x12\x18Get organization details\x1a]Retrieves organization details by Scalekit ID, including name, region, metadata, and settingsJ\x98\x01\n\x03\x32\x30\x30\x12\x90\x01\nVReturns the complete organization object with ID, display name, settings, and metadata\x12\x36\n4\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/organizations/{id}\x12\xd3\x05\n\x1bGetOrganizationByExternalId\x12\x31.scalekit.v1.organizations.GetOrganizationRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xcc\x04\x92\x41\xfa\x03\n\rOrganizations\x12\'Get organization details by external Id\x1a]Retrieves organization details by External ID, including name, region, metadata, and settingsJ\xa4\x01\n\x03\x32\x30\x30\x12\x9c\x01\nbReturns the complete organization object with ID, display name, settings, external ID and metadata\x12\x36\n4\x1a\x32.scalekit.v1.organizations.GetOrganizationResponseJa\n\x03\x34\x30\x30\x12Z\nXInvalid request - external ID is empty or the caller\'s organization claim does not matchJW\n\x03\x34\x30\x34\x12P\nNOrganization not found - no organization exists with the specified external ID\x82\xb5\x18\x16\n\x12organizations_read\x18\x04\x82\xd3\xe4\x93\x02.\x12,/api/v1/organizations:external/{external_id}\x12\xc2\t\n\x10ListOrganization\x12\x33.scalekit.v1.organizations.ListOrganizationsRequest\x1a\x34.scalekit.v1.organizations.ListOrganizationsResponse\"\xc2\x08\x92\x41\x9b\x08\n\rOrganizations\x12\x12List organizations\x1a\xa0\x01Retrieve a paginated list of organizations within your environment. The response includes a `page_token` that can be used to access subsequent pages of results.Js\n\x03\x32\x30\x30\x12l\n0Successfully retrieved the list of organizations\x12\x38\n6\x1a\x34.scalekit.v1.organizations.ListOrganizationsResponseJ\x1b\n\x03\x34\x30\x30\x12\x14\n\x12Invalid page tokenj\xc0\x05\n\rx-codeSamples\x12\xae\x05\x32\xab\x05\n\x97\x01*\x94\x01\n\x16\n\x05label\x12\r\x1a\x0bNode.js SDK\n\x14\n\x04lang\x12\x0c\x1a\njavascript\nd\n\x06source\x12Z\x1aXconst organizations = await scalekit.organization.listOrganization({\n pageSize: 10,\n});\n\xc0\x01*\xbd\x01\n\x15\n\x05label\x12\x0c\x1a\nPython SDK\n\x10\n\x04lang\x12\x08\x1a\x06python\n\x91\x01\n\x06source\x12\x86\x01\x1a\x83\x01options = ListOrganizationOptions()\noptions.page_size = 10\n\norganizations = sc.organization.list_organizations(\n options=options\n)\n\xaf\x01*\xac\x01\n\x11\n\x05label\x12\x08\x1a\x06Go SDK\n\x0c\n\x04lang\x12\x04\x1a\x02go\n\x88\x01\n\x06source\x12~\x1a|organizations, err := sc.Organization.ListOrganizations(\n ctx,\n &scalekit.ListOrganizationOptions{\n PageSize: 10,\n }\n)\n\x99\x01*\x96\x01\n\x13\n\x05label\x12\n\x1a\x08Java SDK\n\x0e\n\x04lang\x12\x06\x1a\x04java\no\n\x06source\x12\x65\x1a\x63ListOrganizationsResponse organizations = scalekitClient.organizations().listOrganizations(10, \"\");\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x17\x12\x15/api/v1/organizations\x12\xf1\x04\n\x12SearchOrganization\x12\x35.scalekit.v1.organizations.SearchOrganizationsRequest\x1a\x36.scalekit.v1.organizations.SearchOrganizationsResponse\"\xeb\x03\x92\x41\xae\x03\n\rOrganizations\x12\x14Search organizations\x1a\xd4\x01Searches for organizations in your environment using a query string. The query matches against organization name, ID, or external ID. Returns multiple results when more than one organization matches the criteria.J\xaf\x01\n\x03\x32\x30\x30\x12\xa7\x01\niReturns a list of matching organizations and a page token for pagination if there are additional results.\x12:\n8\x1a\x36.scalekit.v1.organizations.SearchOrganizationsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\x12\x1c/api/v1/organizations:search\x12\xcf\x02\n\x12\x44\x65leteOrganization\x12\x34.scalekit.v1.organizations.DeleteOrganizationRequest\x1a\x16.google.protobuf.Empty\"\xea\x01\x92\x41\xbe\x01\n\rOrganizations\x12\x16\x44\x65lete an organization\x1aPRemove an existing organization from the environment using its unique identifierJC\n\x03\x32\x30\x30\x12<\n:Organization successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1c*\x1a/api/v1/organizations/{id}\x12\xe2\x04\n\x12GeneratePortalLink\x12\x34.scalekit.v1.organizations.GeneratePortalLinkRequest\x1a\x35.scalekit.v1.organizations.GeneratePortalLinkResponse\"\xde\x03\x92\x41\xa5\x03\n\rOrganizations\x12\x1aGenerate admin portal link\x1a\xd5\x01\x43reates a single use Admin Portal URL valid for 1 minute. Once the generated admin portal URL is accessed or rendered, a temporary session of 6 hours is created to allow the admin to update SSO/SCIM configuration.J\x9f\x01\n\x03\x32\x30\x30\x12\x97\x01\nZAdmin Portal link generated successfully. Returns the portal URL and expiration timestamp.\x12\x39\n7\x1a\x35.scalekit.v1.organizations.GeneratePortalLinkResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02)\x1a\'/api/v1/organizations/{id}/portal_links\x12\xa0\x02\n\x10\x44\x65letePortalLink\x12\x32.scalekit.v1.organizations.DeletePortalLinkRequest\x1a\x16.google.protobuf.Empty\"\xbf\x01\x92\x41x\n\x0c\x41\x64min Portal\x12\x12\x44\x65lete portal link\x1a)Revokes and deletes an Admin portal link.J)\n\x03\x32\x30\x30\x12\"\n Portal link deleted successfully\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)*\'/api/v1/organizations/{id}/portal_links\x12\x9f\x02\n\x14\x44\x65letePortalLinkByID\x12\x36.scalekit.v1.organizations.DeletePortalLinkByIdRequest\x1a\x16.google.protobuf.Empty\"\xb6\x01\x92\x41\x65\n\x0c\x41\x64min Portal\x12\x18\x44\x65lete admin portal link\x1a)Revokes and deletes an Admin portal link.J\x10\n\x03\x32\x30\x30\x12\t\n\x07Success\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x33*1/api/v1/organizations/{id}/portal_links/{link_id}\x12\x88\x03\n\x0eGetPortalLinks\x12/.scalekit.v1.organizations.GetPortalLinkRequest\x1a\x31.scalekit.v1.organizations.GetPortalLinksResponse\"\x91\x02\x92\x41\xc9\x01\n\x0c\x41\x64min Portal\x12\x0fGet portal link\x1a_Returns the Admin portal link if it exists. Use Generate Portal link to create and fetch a linkJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.organizations.GetPortalLinksResponse\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)\x12\'/api/v1/organizations/{id}/portal_links\x12\xfa\x06\n\x1aUpdateOrganizationSettings\x12<.scalekit.v1.organizations.UpdateOrganizationSettingsRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xe9\x05\x92\x41\xaa\x05\n\rOrganizations\x12\x1cToggle organization settings\x1a\xd3\x01Updates configuration settings for an organization. Supports modifying SSO configuration, directory synchronization settings, and session parameters. Requires organization ID and the specific settings to update.J\xe3\x01\n\x03\x32\x30\x30\x12\xdb\x01\n\xa0\x01Returns the complete organization object with updated settings applied. Contains all organization details including ID, display name, and the modified settings.\x12\x36\n4\x1a\x32.scalekit.v1.organizations.GetOrganizationResponseJp\n\x03\x34\x30\x30\x12i\ngInvalid request - occurs when the settings payload contains invalid values or unsupported configurationJM\n\x03\x34\x30\x34\x12\x46\nDOrganization not found - the specified organization ID doesn\'t exist\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02/2#/api/v1/organizations/{id}/settings:\x08settings\x12\xd0\x05\n\x1fUpdateOrganizationSessionPolicy\x12\x41.scalekit.v1.organizations.UpdateOrganizationSessionPolicyRequest\x1a\x42.scalekit.v1.organizations.UpdateOrganizationSessionPolicyResponse\"\xa5\x04\x92\x41\xbc\x03\n\rOrganizations\x12\"Update organization session policy\x1a\xed\x01Sets a custom session policy for an organization or reverts to application-level settings. Send session_policy=\'APPLICATION\' to revert to application defaults. Send session_policy=\'CUSTOM\' with timeout values to activate a custom policy.Ju\n\x03\x32\x30\x30\x12n\n$Session policy updated successfully.\x12\x46\nD\x1a\x42.scalekit.v1.organizations.UpdateOrganizationSessionPolicyResponseJ \n\x03\x34\x30\x34\x12\x19\n\x17Organization not found.\x82\xb5\x18 \n\x1corganizations_sessions_write\x18T\x82\xd3\xe4\x93\x02;26/api/v1/organizations/{organization_id}/session-policy:\x01*\x12\xb9\x05\n\x1cGetOrganizationSessionPolicy\x12>.scalekit.v1.organizations.GetOrganizationSessionPolicyRequest\x1a?.scalekit.v1.organizations.GetOrganizationSessionPolicyResponse\"\x97\x04\x92\x41\xb2\x03\n\rOrganizations\x12\x1fGet organization session policy\x1a\xe7\x01Retrieves the session policy for an organization. Returns session_policy=\'APPLICATION\' if the organization inherits the application-level defaults, or session_policy=\'CUSTOM\' with the configured values if a custom policy is active.Jt\n\x03\x32\x30\x30\x12m\n&Session policy retrieved successfully.\x12\x43\nA\x1a?.scalekit.v1.organizations.GetOrganizationSessionPolicyResponseJ \n\x03\x34\x30\x34\x12\x19\n\x17Organization not found.\x82\xb5\x18\x1f\n\x1borganizations_sessions_read\x18T\x82\xd3\xe4\x93\x02\x38\x12\x36/api/v1/organizations/{organization_id}/session-policy\x12\xd5\x03\n\x1cUpsertUserManagementSettings\x12>.scalekit.v1.organizations.UpsertUserManagementSettingsRequest\x1a?.scalekit.v1.organizations.UpsertUserManagementSettingsResponse\"\xb3\x02\x92\x41\xdf\x01\n\rOrganizations\x12 Upsert organization user setting\x1a\x33Upsert user management settings for an organizationJw\n\x03\x32\x30\x30\x12p\n)Returns the updated organization setting.\x12\x43\nA\x1a?.scalekit.v1.organizations.UpsertUserManagementSettingsResponse\x82\xb5\x18\x02\x18\x64\x82\xd3\xe4\x93\x02\x44\x32?/api/v1/organizations/{organization_id}/settings/usermanagement:\x01*\x12\x9f\x04\n$GetOrganizationUserManagementSetting\x12G.scalekit.v1.organizations.GetOrganizationUserManagementSettingsRequest\x1aH.scalekit.v1.organizations.GetOrganizationUserManagementSettingsResponse\"\xe3\x02\x92\x41\x83\x02\n\rOrganizations\x12(Get organization user management setting\x1a\x43Retrieves the user management settings for a specific organization.J\x82\x01\n\x03\x32\x30\x30\x12{\n+Returns the requested organization setting.\x12L\nJ\x1aH.scalekit.v1.organizations.GetOrganizationUserManagementSettingsResponse\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x41\x12?/api/v1/organizations/{organization_id}/settings/usermanagement\x12\xee\x05\n\x1bGetApplicationSessionPolicy\x12=.scalekit.v1.organizations.GetApplicationSessionPolicyRequest\x1a>.scalekit.v1.organizations.GetApplicationSessionPolicyResponse\"\xcf\x04\x92\x41\xcf\x03\n\rOrganizations\x12/Get application session policy for organization\x1a\xa6\x01Returns the application-level session settings for display in hosted pages. Includes absolute timeout, idle timeout configuration, and access token expiry in minutes.J\x7f\n\x03\x32\x30\x30\x12x\n2Application session policy retrieved successfully.\x12\x42\n@\x1a>.scalekit.v1.organizations.GetApplicationSessionPolicyResponseJA\n\x03\x34\x30\x33\x12:\n8Session policy feature not enabled for this environment.J \n\x03\x34\x30\x34\x12\x19\n\x17Organization not found.\x82\xb5\x18\x1f\n\x1borganizations_sessions_read\x18T\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x44\x12\x42/api/v1/organizations/{organization_id}/application-session-policy\x1aX\x92\x41U\n\rOrganizations\x12\x44{{import \"proto/scalekit/v1/organizations/organization_details.md\"}}B\xa9\'Z7github.com/scalekit-inc/scalekit/pkg/grpc/organizations\x92\x41\xec&\x12\x92\"\n\rScalekit APIs\x12\x83!# Introduction\n\nThe Scalekit API is a RESTful API that enables you to manage organizations, users, and authentication settings. All requests must use HTTPS.\nAll API requests use the following base URLs:\n\n```\nhttps://{environment}.scalekit.dev (Development)\nhttps://{environment}.scalekit.com (Production)\nhttps://auth.example.com (Custom domain)\n```\n\nScalekit operates two separate environments: Development and Production. Resources cannot be moved between environments.\n\n# Authentication\n\nThe Scalekit API uses OAuth 2.0 Client Credentials for authentication.\n\nCopy your API credentials from the Scalekit dashboard\'s API Config section and set them as environment variables.\n\n```sh\nSCALEKIT_ENVIRONMENT_URL=\'\'\nSCALEKIT_CLIENT_ID=\'\'\nSCALEKIT_CLIENT_SECRET=\'\'\n```\n\nGetting an access token\n\n1. Get your credentials from the [Scalekit Dashboard](https://app.scalekit.com)\n2. Request an access token:\n\n```sh\ncurl https://{SCALEKIT_ENVIRONMENT_URL}/oauth/token \\\n -X POST \\\n -H \'Content-Type: application/x-www-form-urlencoded\' \\\n -d \'client_id={client_id}\' \\\n -d \'client_secret={client_secret}\' \\\n -d \'grant_type=client_credentials\'\n```\n\n3. Use the access token in API requests:\n\n```sh\ncurl https://{SCALEKIT_ENVIRONMENT_URL}/api/v1/organizations \\\n -H \'Content-Type: application/json\' \\\n -H \'Authorization: Bearer {access_token}\'\n```\n\nThe response includes an access token:\n\n```json\n{\n\t\"access_token\": \"eyJhbGciOiJSUzI1NiIsImtpZCI6InNua181Ok4OTEyMjU2NiIsInR5cCI6IkpXVCJ9...\",\n\t\"token_type\": \"Bearer\",\n\t\"expires_in\": 86399,\n\t\"scope\": \"openid\"\n}\n```\n\n# SDKs\n\nScalekit provides official SDKs for multiple programming languages. Check the changelog at GitHub repositories for the latest updates.\n\n### Node.js\n\n```sh\nnpm install @scalekit-sdk/node\n```\n\nCreate a new Scalekit client instance after initializing the environment variables\n\n```js\nimport { Scalekit } from \"@scalekit-sdk/node\";\n\nexport let scalekit = new Scalekit(\n\tprocess.env.SCALEKIT_ENVIRONMENT_URL,\n\tprocess.env.SCALEKIT_CLIENT_ID,\n\tprocess.env.SCALEKIT_CLIENT_SECRET\n);\n```\n\n[See the Node SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-node/releases)\n\n### Python\n\n```sh\npip install scalekit-sdk-python\n```\n\nCreate a new Scalekit client instance after initializing the environment variables.\n\n```py\nfrom scalekit import ScalekitClient\nimport os\n\nscalekit_client = ScalekitClient(\n os.environ.get(\'SCALEKIT_ENVIRONMENT_URL\'),\n os.environ.get(\'SCALEKIT_CLIENT_ID\'),\n os.environ.get(\'SCALEKIT_CLIENT_SECRET\')\n)\n```\n\n[See the Python SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-python/releases)\n\n### Go\n\n```sh\ngo get -u github.com/scalekit-inc/scalekit-sdk-go\n```\n\nCreate a new Scalekit client instance after initializing the environment variables.\n\n```go\npackage main\n\nimport (\n \"os\"\n \"github.com/scalekit-inc/scalekit-sdk-go\"\n)\n\nscalekitClient := scalekit.NewScalekitClient(\n os.Getenv(\"SCALEKIT_ENVIRONMENT_URL\"),\n os.Getenv(\"SCALEKIT_CLIENT_ID\"),\n os.Getenv(\"SCALEKIT_CLIENT_SECRET\"),\n)\n```\n\n[See the Go SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-go/releases)\n\n### Java\n\n```gradle\n/* Gradle users - add the following to your dependencies in build file */\nimplementation \"com.scalekit:scalekit-sdk-java:2.0.6\"\n```\n\n```xml\n\n\n com.scalekit\n scalekit-sdk-java\n 2.0.6\n\n```\n\n[See the Java SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-java/releases)\n\n# Error handling\n\nThe API uses standard HTTP status codes:\n\n| Code | Description |\n| ----------- | -------------------- |\n| 200/201 | Success |\n| 400 | Invalid request |\n| 401 | Authentication error |\n| 404 | Resource not found |\n| 429 | Rate limit exceeded |\n| 500/501/504 | Server error |\n\nError responses include detailed information:\n\n```json\n{\n\t\"code\": 16,\n\t\"message\": \"Token empty\",\n\t\"details\": [\n\t\t{\n\t\t\t\"@type\": \"type.googleapis.com/scalekit.v1.errdetails.ErrorInfo\",\n\t\t\t\"error_code\": \"UNAUTHENTICATED\"\n\t\t}\n\t]\n}\n```\n\n\":\n\x0cScalekit Inc\x12\x14https://scalekit.com\x1a\x14support@scalekit.com*8\n\nApache 2.0\x12*http://www.apache.org/licenses/LICENSE-2.02\x05\x31.0.0\x1a\x19$SCALEKIT_ENVIRONMENT_URL*\x01\x02\x32\x10\x61pplication/json:\x10\x61pplication/jsonj\x0f\n\rOrganizationsj\xd4\x03\n\x0bPermissions\x12\xc4\x03Permission management for defining and controlling access to system resources. Create, retrieve, update, and delete granular permissions that represent specific actions users can perform. Permissions are the building blocks of role-based access control (RBAC) and can be assigned to roles to grant users the ability to perform specific operations. Use this service to define custom permissions for your application\'s unique access control requirements.r+\n\rScalekit Docs\x12\x1ahttps://docs.scalekit.com/b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n-scalekit/v1/organizations/organizations.proto\x12\x19scalekit.v1.organizations\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a!scalekit/v1/options/options.proto\"\xaf\x01\n\x19\x43reateOrganizationRequest\x12\x91\x01\n\x0corganization\x18\x01 \x01(\x0b\x32-.scalekit.v1.organizations.CreateOrganizationB>\x92\x41\x35\x32\x33Required parameters for creating a new organization\xbaH\x03\xc8\x01\x01R\x0corganization\"\xb9\x01\n\x1a\x43reateOrganizationResponse\x12\x9a\x01\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationBM\x92\x41J2HThe newly created organization containing its ID, settings, and metadataR\x0corganization\"\xf8\x07\n\x12\x43reateOrganization\x12\x84\x01\n\x0c\x64isplay_name\x18\x04 \x01(\tBa\x92\x41Q2?Name of the organization. Must be between 1 and 200 characters.J\x0e\"Megasoft Inc\"\xe0\x41\x02\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\xa0\x01\n\x0bregion_code\x18\x05 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeB^\x92\x41L2DGeographic region code for the organization. Currently limited to USJ\x04\"US\"\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\nregionCode\x12\x9e\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBx\x92\x41u2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x0e\"my_unique_id\"H\x00R\nexternalId\x88\x01\x01\x12r\n\x08metadata\x18\x07 \x03(\x0b\x32;.scalekit.v1.organizations.CreateOrganization.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xcc\x02\n\x04slug\x18\t \x01(\tB\xb2\x02\x92\x41\x84\x02\x32\xd2\x01\x44NS-safe slug for dynamic redirect URI resolution (e.g. acme for https://acme.example.com/callback). Lowercase alphanumeric and hyphens, 1-63 chars, must start and end with alphanumeric, unique per environment.J\x06\"acme\"x?\x80\x01\x01\x8a\x01\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$\xbaH\'r%\x10\x01\x18?2\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$H\x01R\x04slug\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idB\x07\n\x05_slug\"\xf8\n\n\x0cOrganization\x12{\n\x02id\x18\x01 \x01(\tBk\x92\x41h2MUnique scalekit-generated identifier that uniquely references an organizationJ\x17\"org_59615193906282635\"R\x02id\x12\x8c\x01\n\x0b\x63reate_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBO\x92\x41I2+Timestamp when the organization was createdJ\x1a\"2025-02-15T06:23:44.560Z\"\xe0\x41\x02R\ncreateTime\x12\x8e\x01\n\x0bupdate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBQ\x92\x41N20Timestamp when the organization was last updatedJ\x1a\"2025-02-15T06:23:44.560Z\"R\nupdateTime\x12|\n\x0c\x64isplay_name\x18\x04 \x01(\tBY\x92\x41L2>Name of the organization. Must be between 1 and 200 charactersJ\n\"Megasoft\"\xbaH\x07r\x05\x10\x01\x18\xc8\x01R\x0b\x64isplayName\x12\x92\x01\n\x0bregion_code\x18\x05 \x01(\x0e\x32\x1f.scalekit.v1.commons.RegionCodeBP\x92\x41M2EGeographic region code for the organization. Currently limited to US.J\x04\"US\"R\nregionCode\x12\x9e\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBx\x92\x41u2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x0e\"my_unique_id\"H\x00R\nexternalId\x88\x01\x01\x12l\n\x08metadata\x18\x07 \x03(\x0b\x32\x35.scalekit.v1.organizations.Organization.MetadataEntryB\x19\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12K\n\x08settings\x18\x08 \x01(\x0b\x32/.scalekit.v1.organizations.OrganizationSettingsR\x08settings\x12\x85\x02\n\x04slug\x18\t \x01(\tB\xeb\x01\x92\x41\xe7\x01\x32\xb5\x01\x44NS-safe slug for dynamic redirect URI resolution. Must be 1-63 chars, lowercase alphanumeric and hyphens, must start and end with an alphanumeric character. Unique per environment.J\x06\"acme\"x?\x80\x01\x01\x8a\x01\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$H\x01R\x04slug\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idB\x07\n\x05_slug\"\xe0\x03\n\x19UpdateOrganizationRequest\x12j\n\x02id\x18\x01 \x01(\tBX\x92\x41L23Unique identifier of the organization to be updatedJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\x85\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tBb\x92\x41I2-External ID of the organization to be updatedJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalId\x12\x83\x01\n\x0corganization\x18\x03 \x01(\x0b\x32-.scalekit.v1.organizations.UpdateOrganizationB0\x92\x41\'2%Organization Parameters to be updated\xbaH\x03\xc8\x01\x01R\x0corganization\x12;\n\x0bupdate_mask\x18\x63 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskR\nupdateMaskB\x0c\n\nidentities\"\x87\x08\n\x12UpdateOrganization\x12\x9e\x01\n\x0c\x64isplay_name\x18\x04 \x01(\tBv\x92\x41i2SName of the organization to display in the UI. Must be between 1 and 200 charactersJ\x12\"Acme Corporation\"\xbaH\x07r\x05\x10\x01\x18\xc8\x01H\x00R\x0b\x64isplayName\x88\x01\x01\x12\x9d\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tBw\x92\x41t2bYour application\'s unique identifier for this organization, used to link Scalekit with your systemJ\x0e\"tenant_12345\"H\x01R\nexternalId\x88\x01\x01\x12\xa5\x02\n\x08metadata\x18\x07 \x03(\x0b\x32;.scalekit.v1.organizations.UpdateOrganization.MetadataEntryB\xcb\x01\x92\x41\xae\x01\x32\x8f\x01\x43ustom key-value pairs to store with the organization. Keys must be 3-25 characters, values must be 1-256 characters. Maximum 10 pairs allowed.J\x1a{\"industry\": \"technology\"}\xbaH\x16\x9a\x01\x13\x10\n\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\x9a\x02\n\x04slug\x18\t \x01(\tB\x80\x02\x92\x41\xd2\x01\x32\xa0\x01\x44NS-safe slug for dynamic redirect URI resolution. Lowercase alphanumeric and hyphens, 1-63 chars, must start and end with alphanumeric, unique per environment.J\x06\"acme\"x?\x80\x01\x01\x8a\x01\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$\xbaH\'r%\x10\x01\x18?2\x1f^[a-z0-9]([a-z0-9]|-[a-z0-9])*$H\x02R\x04slug\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0f\n\r_display_nameB\x0e\n\x0c_external_idB\x07\n\x05_slugJ\x04\x08\x05\x10\x06\"\x8c\x01\n\x1aUpdateOrganizationResponse\x12n\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationB!\x92\x41\x1e\x32\x1cUpdated organization detailsR\x0corganization\"\xeb\x02\n\x16GetOrganizationRequest\x12\x84\x01\n\x02id\x18\x01 \x01(\tBr\x92\x41\x66\x32MUnique scalekit-generated identifier that uniquely references an organizationJ\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\xbb\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB\x97\x01\x92\x41~2bUnique identifier that links an Organization Object to your app\'s tenant, stored as an External IDJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalIdB\x0c\n\nidentities\"\x8b\x01\n\x17GetOrganizationResponse\x12p\n\x0corganization\x18\x01 \x01(\x0b\x32\'.scalekit.v1.organizations.OrganizationB#\x92\x41 2\x1eThe newly created organizationR\x0corganization\"\xe0\x05\n\x18ListOrganizationsRequest\x12t\n\tpage_size\x18\x01 \x01(\rBW\x92\x41T2NMaximum number of organizations to return per page. Must be between 10 and 100J\x02\x33\x30R\x08pageSize\x12\x8f\x01\n\npage_token\x18\x02 \x01(\tBp\x92\x41m2[Pagination token from the previous response. Use to retrieve the next page of organizationsJ\x0e\"\"R\tpageToken\x12\xa8\x01\n\x0b\x65xternal_id\x18\x03 \x01(\tB\x81\x01\x92\x41~2bYour application\'s unique identifier for this organization, used to link Scalekit with your systemJ\x18\"\"H\x00R\nexternalId\x88\x01\x01:\x80\x02\x92\x41\xfc\x01\n\xab\x01*\x12List Organizations2\x94\x01Retrieves a paginated list of all organizations within the environment. Use the `page_token` from the response to access subsequent pages of results*L\n\x12List Organizations\x12\x36https://docs.scalekit.com/reference/list-organizationsB\x0e\n\x0c_external_id\"\xa4\x04\n\x19ListOrganizationsResponse\x12\x97\x01\n\x0fnext_page_token\x18\x01 \x01(\tBo\x92\x41l2UPagination token for the next page of results. Use this token to fetch the next page.J\x13\"\"R\rnextPageToken\x12Y\n\ntotal_size\x18\x02 \x01(\rB:\x92\x41\x37\x32\x31Total number of organizations in the environment.J\x02\x33\x30R\ttotalSize\x12p\n\rorganizations\x18\x03 \x03(\x0b\x32\'.scalekit.v1.organizations.OrganizationB!\x92\x41\x1e\x32\x1cList of organization objectsR\rorganizations\x12\x9f\x01\n\x0fprev_page_token\x18\x04 \x01(\tBw\x92\x41t2]Pagination token for the previous page of results. Use this token to fetch the previous page.J\x13\"\"R\rprevPageToken\"\xa7\x05\n\x1aSearchOrganizationsRequest\x12\xa5\x01\n\x05query\x18\x01 \x01(\tB\x8e\x01\x92\x41\x7f\x32wSearch term to match against organization names, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\x04\x61\x63me\xbaH\tr\x04\x10\x03\x18\x64\xc8\x01\x01R\x05query\x12\x80\x01\n\tpage_size\x18\x02 \x01(\rBc\x92\x41Y2SMaximum number of organizations to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x03 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken:\xb5\x01\x92\x41\xb1\x01\n\x88\x01*\x14Search Organizations2pSearch for organizations in your environment using a text query that matches against names, IDs, or external IDs2$query=acme&page_size=30&page_token=1\"\xdb\x01\n\x1bSearchOrganizationsResponse\x12&\n\x0fnext_page_token\x18\x01 \x01(\tR\rnextPageToken\x12\x1d\n\ntotal_size\x18\x02 \x01(\rR\ttotalSize\x12M\n\rorganizations\x18\x03 \x03(\x0b\x32\'.scalekit.v1.organizations.OrganizationR\rorganizations\x12&\n\x0fprev_page_token\x18\x04 \x01(\tR\rprevPageToken\"\xad\x02\n\x19\x44\x65leteOrganizationRequest\x12~\n\x02id\x18\x01 \x01(\tBl\x92\x41`2MUnique scalekit-generated identifier that uniquely references an organizationJ\x0f\"org_123456789\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\x81\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tB^\x92\x41\x45\x32)External ID of the organization to deleteJ\x18\"tenant_123123123123123\"\xbaH\x04r\x02\x10\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\nexternalIdB\x0c\n\nidentities\"\xcf\x04\n\x19GeneratePortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12(\n\x03sso\x18\x02 \x01(\x08\x42\x11\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x00R\x03sso\x88\x01\x01\x12=\n\x0e\x64irectory_sync\x18\x03 \x01(\x08\x42\x11\x18\x01\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\rdirectorySync\x88\x01\x01\x12\xdd\x02\n\x08\x66\x65\x61tures\x18\x04 \x03(\x0e\x32\".scalekit.v1.organizations.FeatureB\x9c\x02\x92\x41\x98\x02\x32\x95\x02\x46\x65\x61tures to enable in the admin portal link. To enable features, append them as URL parameters:\n\n- Single Sign-On: ?features=sso\n- Directory Sync: ?features=dir_sync\n- Both features: ?features=sso&features=dir_sync\n\nExample URL: https://scalekit.com/portal/lnk_123?features=ssoR\x08\x66\x65\x61turesB\x06\n\x04_ssoB\x11\n\x0f_directory_sync\"f\n\x14GetPortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\"i\n\x17\x44\x65letePortalLinkRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\"\xbe\x01\n\x1b\x44\x65letePortalLinkByIdRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x92\x41)2\x0fOrganization IDJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12O\n\x07link_id\x18\x02 \x01(\tB6\x92\x41!2\x07Link IDJ\x16\"lnk_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04lnk_\xc8\x01\x01R\x06linkId\"\xb5\x03\n\x04Link\x12J\n\x02id\x18\x01 \x01(\tB:\x92\x41\x37\x32\x1eUnique Identifier for the linkJ\x15\"lnk_123123123123123\"R\x02id\x12\xc7\x01\n\x08location\x18\x02 \x01(\tB\xaa\x01\x92\x41\xa6\x01\x32qLocation of the link. This is the URL that can be used to access the Admin portal. The link is valid for 1 minuteJ1\"https://scalekit.com/portal/lnk_123123123123123\"R\x08location\x12\x96\x01\n\x0b\x65xpire_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampBY\x92\x41V28Expiry time of the link. The link is valid for 1 minute.J\x1a\"2024-02-06T14:48:00.000Z\"R\nexpireTime\"\x96\x02\n\x1aGeneratePortalLinkResponse\x12\xf7\x01\n\x04link\x18\x01 \x01(\x0b\x32\x1f.scalekit.v1.organizations.LinkB\xc1\x01\x92\x41\xbd\x01\x32\xba\x01\x43ontains the generated admin portal link details. The link URL can be shared with organization administrators to set up: Single Sign-On (SSO) authentication and directory synchronizationR\x04link\"h\n\x16GetPortalLinksResponse\x12N\n\x05links\x18\x01 \x03(\x0b\x32\x1f.scalekit.v1.organizations.LinkB\x17\x92\x41\x14\x32\x12\x41\x64min Portal LinksR\x05links\"\x90\x04\n!UpdateOrganizationSettingsRequest\x12\x97\x01\n\x02id\x18\x01 \x01(\tB\x86\x01\x92\x41q2WUnique identifier of the organization to update settings. Must begin with \'org_\' prefixJ\x16\"org_1231234233424344\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x02id\x12\xd0\x02\n\x08settings\x18\x02 \x01(\x0b\x32/.scalekit.v1.organizations.OrganizationSettingsB\x82\x02\x92\x41\xf8\x01\x32\x95\x01Settings configuration to apply to the organization. Contains feature toggles for SSO, directory synchronization, and other organization capabilitiesJ^{\"features\": [{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]}\xbaH\x03\xc8\x01\x01R\x08settings\"\x91\x0c\n!OrganizationSessionPolicySettings\x12\x92\x02\n\rpolicy_source\x18\x01 \x01(\x0e\x32,.scalekit.v1.organizations.SessionPolicyTypeB\xbe\x01\x92\x41\xaf\x01\x32\xa2\x01Policy source. \'APPLICATION\' means the organization inherits the application-level session policy. \'CUSTOM\' means organization-specific timeout values are active.J\x08\"CUSTOM\"\xbaH\x08\x82\x01\x05\x10\x01\"\x01\x00R\x0cpolicySource\x12\xec\x01\n\x18\x61\x62solute_session_timeout\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x94\x01\x92\x41\x90\x01\x32\x88\x01The absolute session timeout value. The unit is specified by absolute_session_timeout_unit. Omitted when policy_source is \'environment\'.J\x03\x33\x36\x30R\x16\x61\x62soluteSessionTimeout\x12\xea\x01\n\x1d\x61\x62solute_session_timeout_unit\x18\x03 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitB\x82\x01\x92\x41\x7f\x32rUnit for absolute_session_timeout. Accepted values: \'minutes\', \'hours\', \'days\'. Responses always return \'minutes\'.J\t\"minutes\"H\x00R\x1a\x61\x62soluteSessionTimeoutUnit\x88\x01\x01\x12\xd3\x01\n\x1cidle_session_timeout_enabled\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueBv\x92\x41s2kWhether idle session timeout is enabled for this organization. Omitted when policy_source is \'environment\'.J\x04trueR\x19idleSessionTimeoutEnabled\x12\x84\x02\n\x14idle_session_timeout\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xb4\x01\x92\x41\xb0\x01\x32\xa9\x01The idle session timeout value. The unit is specified by idle_session_timeout_unit. Omitted when idle_session_timeout_enabled is false or policy_source is \'environment\'.J\x02\x38\x34R\x12idleSessionTimeout\x12\xdd\x01\n\x19idle_session_timeout_unit\x18\x06 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitB~\x92\x41{2nUnit for idle_session_timeout. Accepted values: \'minutes\', \'hours\', \'days\'. Responses always return \'minutes\'.J\t\"minutes\"H\x01R\x16idleSessionTimeoutUnit\x88\x01\x01\x42 \n\x1e_absolute_session_timeout_unitB\x1c\n\x1a_idle_session_timeout_unit\"\xd4\x01\n#GetOrganizationSessionPolicyRequest\x12\xac\x01\n\x0forganization_id\x18\x01 \x01(\tB\x82\x01\x92\x41m2RThe unique identifier of the organization whose session policy is being requested.J\x17\"org_59615193906282635\"\xe0\x41\x02\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\"\xac\x01\n$GetOrganizationSessionPolicyResponse\x12\x83\x01\n\x06policy\x18\x01 \x01(\x0b\x32<.scalekit.v1.organizations.OrganizationSessionPolicySettingsB-\x92\x41*2(The session policy for the organization.R\x06policy\"\xb7\x0c\n&UpdateOrganizationSessionPolicyRequest\x12\xaa\x01\n\x0forganization_id\x18\x01 \x01(\tB\x80\x01\x92\x41k2PThe unique identifier of the organization whose session policy is being updated.J\x17\"org_59615193906282635\"\xe0\x41\x02\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xe8\x01\n\rpolicy_source\x18\x02 \x01(\x0e\x32,.scalekit.v1.organizations.SessionPolicyTypeB\x94\x01\x92\x41\x90\x01\x32\x83\x01Policy source. Send \'APPLICATION\' to revert to application defaults. Send \'CUSTOM\' with timeout values to activate a custom policy.J\x08\"CUSTOM\"R\x0cpolicySource\x12\xe7\x01\n\x18\x61\x62solute_session_timeout\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x8f\x01\x92\x41\x8b\x01\x32\x83\x01The absolute session timeout value. The unit is specified by absolute_session_timeout_unit. Omit when policy_source is APPLICATION.J\x03\x33\x36\x30R\x16\x61\x62soluteSessionTimeout\x12\xdb\x01\n\x1d\x61\x62solute_session_timeout_unit\x18\x04 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitBt\x92\x41q2dUnit for absolute_session_timeout. Accepted values: \'MINUTES\', \'HOURS\', \'DAYS\'. Defaults to MINUTES.J\t\"MINUTES\"H\x00R\x1a\x61\x62soluteSessionTimeoutUnit\x88\x01\x01\x12\xb8\x01\n\x1cidle_session_timeout_enabled\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB[\x92\x41X2PWhether idle session timeout is enabled. Omit when policy_source is APPLICATION.J\x04trueR\x19idleSessionTimeoutEnabled\x12\xdf\x01\n\x14idle_session_timeout\x18\x06 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x8f\x01\x92\x41\x8b\x01\x32\x84\x01The idle session timeout value. The unit is specified by idle_session_timeout_unit. Omit when idle_session_timeout_enabled is false.J\x02\x38\x34R\x12idleSessionTimeout\x12\xcf\x01\n\x19idle_session_timeout_unit\x18\x07 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitBp\x92\x41m2`Unit for idle_session_timeout. Accepted values: \'MINUTES\', \'HOURS\', \'DAYS\'. Defaults to MINUTES.J\t\"MINUTES\"H\x01R\x16idleSessionTimeoutUnit\x88\x01\x01\x42 \n\x1e_absolute_session_timeout_unitB\x1c\n\x1a_idle_session_timeout_unit\"\xb7\x01\n\'UpdateOrganizationSessionPolicyResponse\x12\x8b\x01\n\x06policy\x18\x01 \x01(\x0b\x32<.scalekit.v1.organizations.OrganizationSessionPolicySettingsB5\x92\x41\x32\x32\x30The updated session policy for the organization.R\x06policy\"\xaa\x01\n\"GetApplicationSessionPolicyRequest\x12\x83\x01\n\x0forganization_id\x18\x01 \x01(\tBZ\x92\x41\x45\x32*The unique identifier of the organization.J\x17\"org_59615193906282635\"\xe0\x41\x02\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\"\xb1\t\n ApplicationSessionPolicySettings\x12\x9a\x01\n\x18\x61\x62solute_session_timeout\x18\x01 \x01(\x05\x42`\x92\x41]2VAbsolute session timeout value in the unit specified by absolute_session_timeout_unit.J\x03\x34\x38\x30R\x16\x61\x62soluteSessionTimeout\x12\x8e\x01\n\x1cidle_session_timeout_enabled\x18\x02 \x01(\x08\x42M\x92\x41J2AWhether idle session timeout is enabled at the application level.J\x05\x66\x61lseR\x19idleSessionTimeoutEnabled\x12\xad\x01\n\x14idle_session_timeout\x18\x03 \x01(\x05\x42{\x92\x41x2rIdle session timeout value in the unit specified by idle_session_timeout_unit. Zero when idle timeout is disabled.J\x02\x36\x30R\x12idleSessionTimeout\x12~\n\x13\x61\x63\x63\x65ss_token_expiry\x18\x04 \x01(\x05\x42N\x92\x41K2FAccess token expiry in minutes. Custom policy values must exceed this.J\x01\x35R\x11\x61\x63\x63\x65ssTokenExpiry\x12\xe0\x01\n\x1d\x61\x62solute_session_timeout_unit\x18\x05 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitBy\x92\x41v2iUnit for absolute_session_timeout. Reflects the unit configured for the application-level session policy.J\t\"MINUTES\"H\x00R\x1a\x61\x62soluteSessionTimeoutUnit\x88\x01\x01\x12\x8b\x02\n\x19idle_session_timeout_unit\x18\x06 \x01(\x0e\x32\x1d.scalekit.v1.commons.TimeUnitB\xab\x01\x92\x41\xa7\x01\x32\x99\x01Unit for idle_session_timeout. Reflects the unit configured for the application-level session policy. Omitted when idle_session_timeout_enabled is false.J\t\"MINUTES\"H\x01R\x16idleSessionTimeoutUnit\x88\x01\x01\x42 \n\x1e_absolute_session_timeout_unitB\x1c\n\x1a_idle_session_timeout_unit\"\xd1\x01\n#GetApplicationSessionPolicyResponse\x12\xa9\x01\n\x12\x61pplication_policy\x18\x01 \x01(\x0b\x32;.scalekit.v1.organizations.ApplicationSessionPolicySettingsB=\x92\x41:28The effective application-level session policy settings.R\x11\x61pplicationPolicy\"\xdc\x02\n\"OrganizationUserManagementSettings\x12\xb5\x02\n\x11max_allowed_users\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xeb\x01\x92\x41\xe7\x01\x32\xdf\x01Maximum number of users allowed in the organization. When nil (not set), there feature is not enabled. When explicitly set to zero, it also means no limit. When set to a positive integer, it enforces the maximum user limit.J\x03\x31\x30\x30R\x0fmaxAllowedUsers\"\xae\x08\n\x1bOrganizationSessionSettings\x12\xfe\x01\n\x18\x61\x62solute_session_timeout\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\xa6\x01\x92\x41\xa2\x01\x32\x98\x01The maximum duration in seconds that a session can remain active, regardless of activity. After this time, the user will be required to re-authenticate.J\x05\x38\x36\x34\x30\x30R\x16\x61\x62soluteSessionTimeout\x12\xd4\x01\n\x14idle_session_timeout\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int32ValueB\x84\x01\x92\x41\x80\x01\x32xThe duration in seconds that a session can remain idle before it is automatically terminated. Activity resets the timer.J\x04\x31\x38\x30\x30R\x12idleSessionTimeout\x12\x8e\x02\n\x1cidle_session_timeout_enabled\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xb0\x01\x92\x41\xac\x01\x32\xa3\x01Whether idle session timeout is enabled for this organization. When enabled, sessions expire after the idle timeout duration regardless of the environment setting.J\x04trueR\x19idleSessionTimeoutEnabled\x12\xe7\x01\n\rpolicy_source\x18\x06 \x01(\tB\xc1\x01\x92\x41\xbd\x01\x32\xb0\x01Policy source for this organization. APPLICATION means the organization inherits application-level session policy. CUSTOM means organization-specific timeout values are active.J\x08\"CUSTOM\"R\x0cpolicySourceJ\x04\x08\x02\x10\x03J\x04\x08\x04\x10\x05R\x1asession_management_enabledR\x14idle_session_enabled\"\x8e\x04\n\x14OrganizationSettings\x12\xa4\x02\n\x08\x66\x65\x61tures\x18\x01 \x03(\x0b\x32\x36.scalekit.v1.organizations.OrganizationSettingsFeatureB\xcf\x01\x92\x41\xcb\x01\x32wList of feature toggles that control organization capabilities such as SSO authentication and directory synchronizationJP[{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]R\x08\x66\x65\x61tures:\xce\x01\x92\x41\xca\x01\nh*\x15Organization Settings2OConfiguration options that control organization-level features and capabilities2^{\"features\": [{\"name\": \"sso\", \"enabled\": true}, {\"name\": \"directory_sync\", \"enabled\": false}]}\"\x8e\x04\n\x1bOrganizationSettingsFeature\x12\x81\x02\n\x04name\x18\x01 \x01(\tB\xec\x01\x92\x41\xe8\x01\x32\xde\x01\x46\x65\x61ture identifier. Supported values include: \"sso\" (Single Sign-On), \"directory_sync\" (Directory Synchronization), \"domain_verification\" (Domain Verification), \"session_policy\" (Organization-level session policy override)J\x05\"sso\"R\x04name\x12t\n\x07\x65nabled\x18\x02 \x01(\x08\x42Z\x92\x41W2OWhether the feature is enabled (true) or disabled (false) for this organizationJ\x04trueR\x07\x65nabled:u\x92\x41r\np*\x1bOrganization Feature Toggle2@Controls the activation state of a specific organization feature\xd2\x01\x04name\xd2\x01\x07\x65nabled\"\x96\x02\n#UpsertUserManagementSettingsRequest\x12W\n\x0forganization_id\x18\x01 \x01(\tB.\x92\x41\x19\x32\x17ID of the organization.\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\x12\x95\x01\n\x08settings\x18\x02 \x01(\x0b\x32=.scalekit.v1.organizations.OrganizationUserManagementSettingsB:\x92\x41\x31\x32/The new values for the setting fields to patch.\xbaH\x03\xc8\x01\x01R\x08settings\"\x9c\x01\n$UpsertUserManagementSettingsResponse\x12t\n\x08settings\x18\x01 \x01(\x0b\x32=.scalekit.v1.organizations.OrganizationUserManagementSettingsB\x19\x92\x41\x16\x32\x14The updated setting.R\x08settings\"\x87\x01\n,GetOrganizationUserManagementSettingsRequest\x12W\n\x0forganization_id\x18\x01 \x01(\tB.\x92\x41\x19\x32\x17ID of the organization.\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\"\xaf\x01\n-GetOrganizationUserManagementSettingsResponse\x12~\n\x08settings\x18\x01 \x01(\x0b\x32=.scalekit.v1.organizations.OrganizationUserManagementSettingsB#\x92\x41 2\x1eList of organization settings.R\x08settings*R\n\x07\x46\x65\x61ture\x12\x17\n\x13\x46\x45\x41TURE_UNSPECIFIED\x10\x00\x12\x13\n\x0bUNSPECIFIED\x10\x00\x1a\x02\x08\x01\x12\x0c\n\x08\x64ir_sync\x10\x01\x12\x07\n\x03sso\x10\x02\x1a\x02\x10\x01*U\n\x11SessionPolicyType\x12#\n\x1fSESSION_POLICY_TYPE_UNSPECIFIED\x10\x00\x12\x0f\n\x0b\x41PPLICATION\x10\x01\x12\n\n\x06\x43USTOM\x10\x02\x32\xaaP\n\x13OrganizationService\x12\x88\x04\n\x12\x43reateOrganization\x12\x34.scalekit.v1.organizations.CreateOrganizationRequest\x1a\x35.scalekit.v1.organizations.CreateOrganizationResponse\"\x84\x03\x92\x41\xcf\x02\n\rOrganizations\x12\x16\x43reate an organization\x1a\x8f\x01\x43reates a new organization in your environment. Use this endpoint to add a new tenant that can be configured with various settings and metadataJ\x93\x01\n\x03\x32\x30\x31\x12\x8b\x01\nNReturns the newly created organization with its unique identifier and settings\x12\x39\n7\x1a\x35.scalekit.v1.organizations.CreateOrganizationResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02%\"\x15/api/v1/organizations:\x0corganization\x12\xbf\x04\n\x12UpdateOrganization\x12\x34.scalekit.v1.organizations.UpdateOrganizationRequest\x1a\x35.scalekit.v1.organizations.UpdateOrganizationResponse\"\xbb\x03\x92\x41\xec\x02\n\rOrganizations\x12\x1bUpdate organization details\x1a\xa1\x01Updates an organization\'s display name, external ID, or metadata. Requires a valid organization identifier. Region code cannot be modified through this endpoint.J\x99\x01\n\x03\x32\x30\x30\x12\x91\x01\nTReturns the updated organization with all current details reflected in the response.\x12\x39\n7\x1a\x35.scalekit.v1.organizations.UpdateOrganizationResponse\x82\xb5\x18\x17\n\x13organizations_write\x18T\x82\xd3\xe4\x93\x02*2\x1a/api/v1/organizations/{id}:\x0corganization\x12\xde\x03\n\x0fGetOrganization\x12\x31.scalekit.v1.organizations.GetOrganizationRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xe3\x02\x92\x41\xa3\x02\n\rOrganizations\x12\x18Get organization details\x1a]Retrieves organization details by Scalekit ID, including name, region, metadata, and settingsJ\x98\x01\n\x03\x32\x30\x30\x12\x90\x01\nVReturns the complete organization object with ID, display name, settings, and metadata\x12\x36\n4\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\x82\xb5\x18\x16\n\x12organizations_read\x18t\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/v1/organizations/{id}\x12\xd3\x05\n\x1bGetOrganizationByExternalId\x12\x31.scalekit.v1.organizations.GetOrganizationRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xcc\x04\x92\x41\xfa\x03\n\rOrganizations\x12\'Get organization details by external Id\x1a]Retrieves organization details by External ID, including name, region, metadata, and settingsJ\xa4\x01\n\x03\x32\x30\x30\x12\x9c\x01\nbReturns the complete organization object with ID, display name, settings, external ID and metadata\x12\x36\n4\x1a\x32.scalekit.v1.organizations.GetOrganizationResponseJa\n\x03\x34\x30\x30\x12Z\nXInvalid request - external ID is empty or the caller\'s organization claim does not matchJW\n\x03\x34\x30\x34\x12P\nNOrganization not found - no organization exists with the specified external ID\x82\xb5\x18\x16\n\x12organizations_read\x18\x04\x82\xd3\xe4\x93\x02.\x12,/api/v1/organizations:external/{external_id}\x12\xc2\t\n\x10ListOrganization\x12\x33.scalekit.v1.organizations.ListOrganizationsRequest\x1a\x34.scalekit.v1.organizations.ListOrganizationsResponse\"\xc2\x08\x92\x41\x9b\x08\n\rOrganizations\x12\x12List organizations\x1a\xa0\x01Retrieve a paginated list of organizations within your environment. The response includes a `page_token` that can be used to access subsequent pages of results.Js\n\x03\x32\x30\x30\x12l\n0Successfully retrieved the list of organizations\x12\x38\n6\x1a\x34.scalekit.v1.organizations.ListOrganizationsResponseJ\x1b\n\x03\x34\x30\x30\x12\x14\n\x12Invalid page tokenj\xc0\x05\n\rx-codeSamples\x12\xae\x05\x32\xab\x05\n\x97\x01*\x94\x01\n\x16\n\x05label\x12\r\x1a\x0bNode.js SDK\n\x14\n\x04lang\x12\x0c\x1a\njavascript\nd\n\x06source\x12Z\x1aXconst organizations = await scalekit.organization.listOrganization({\n pageSize: 10,\n});\n\xc0\x01*\xbd\x01\n\x15\n\x05label\x12\x0c\x1a\nPython SDK\n\x10\n\x04lang\x12\x08\x1a\x06python\n\x91\x01\n\x06source\x12\x86\x01\x1a\x83\x01options = ListOrganizationOptions()\noptions.page_size = 10\n\norganizations = sc.organization.list_organizations(\n options=options\n)\n\xaf\x01*\xac\x01\n\x11\n\x05label\x12\x08\x1a\x06Go SDK\n\x0c\n\x04lang\x12\x04\x1a\x02go\n\x88\x01\n\x06source\x12~\x1a|organizations, err := sc.Organization.ListOrganizations(\n ctx,\n &scalekit.ListOrganizationOptions{\n PageSize: 10,\n }\n)\n\x99\x01*\x96\x01\n\x13\n\x05label\x12\n\x1a\x08Java SDK\n\x0e\n\x04lang\x12\x06\x1a\x04java\no\n\x06source\x12\x65\x1a\x63ListOrganizationsResponse organizations = scalekitClient.organizations().listOrganizations(10, \"\");\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x17\x12\x15/api/v1/organizations\x12\xf1\x04\n\x12SearchOrganization\x12\x35.scalekit.v1.organizations.SearchOrganizationsRequest\x1a\x36.scalekit.v1.organizations.SearchOrganizationsResponse\"\xeb\x03\x92\x41\xae\x03\n\rOrganizations\x12\x14Search organizations\x1a\xd4\x01Searches for organizations in your environment using a query string. The query matches against organization name, ID, or external ID. Returns multiple results when more than one organization matches the criteria.J\xaf\x01\n\x03\x32\x30\x30\x12\xa7\x01\niReturns a list of matching organizations and a page token for pagination if there are additional results.\x12:\n8\x1a\x36.scalekit.v1.organizations.SearchOrganizationsResponse\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x1e\x12\x1c/api/v1/organizations:search\x12\xcf\x02\n\x12\x44\x65leteOrganization\x12\x34.scalekit.v1.organizations.DeleteOrganizationRequest\x1a\x16.google.protobuf.Empty\"\xea\x01\x92\x41\xbe\x01\n\rOrganizations\x12\x16\x44\x65lete an organization\x1aPRemove an existing organization from the environment using its unique identifierJC\n\x03\x32\x30\x30\x12<\n:Organization successfully deleted and no longer accessible\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02\x1c*\x1a/api/v1/organizations/{id}\x12\xe2\x04\n\x12GeneratePortalLink\x12\x34.scalekit.v1.organizations.GeneratePortalLinkRequest\x1a\x35.scalekit.v1.organizations.GeneratePortalLinkResponse\"\xde\x03\x92\x41\xa5\x03\n\rOrganizations\x12\x1aGenerate admin portal link\x1a\xd5\x01\x43reates a single use Admin Portal URL valid for 1 minute. Once the generated admin portal URL is accessed or rendered, a temporary session of 6 hours is created to allow the admin to update SSO/SCIM configuration.J\x9f\x01\n\x03\x32\x30\x30\x12\x97\x01\nZAdmin Portal link generated successfully. Returns the portal URL and expiration timestamp.\x12\x39\n7\x1a\x35.scalekit.v1.organizations.GeneratePortalLinkResponse\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02)\x1a\'/api/v1/organizations/{id}/portal_links\x12\xa0\x02\n\x10\x44\x65letePortalLink\x12\x32.scalekit.v1.organizations.DeletePortalLinkRequest\x1a\x16.google.protobuf.Empty\"\xbf\x01\x92\x41x\n\x0c\x41\x64min Portal\x12\x12\x44\x65lete portal link\x1a)Revokes and deletes an Admin portal link.J)\n\x03\x32\x30\x30\x12\"\n Portal link deleted successfully\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)*\'/api/v1/organizations/{id}/portal_links\x12\x9f\x02\n\x14\x44\x65letePortalLinkByID\x12\x36.scalekit.v1.organizations.DeletePortalLinkByIdRequest\x1a\x16.google.protobuf.Empty\"\xb6\x01\x92\x41\x65\n\x0c\x41\x64min Portal\x12\x18\x44\x65lete admin portal link\x1a)Revokes and deletes an Admin portal link.J\x10\n\x03\x32\x30\x30\x12\t\n\x07Success\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x33*1/api/v1/organizations/{id}/portal_links/{link_id}\x12\x88\x03\n\x0eGetPortalLinks\x12/.scalekit.v1.organizations.GetPortalLinkRequest\x1a\x31.scalekit.v1.organizations.GetPortalLinksResponse\"\x91\x02\x92\x41\xc9\x01\n\x0c\x41\x64min Portal\x12\x0fGet portal link\x1a_Returns the Admin portal link if it exists. Use Generate Portal link to create and fetch a linkJG\n\x03\x32\x30\x30\x12@\n\x07Success\x12\x35\n3\x1a\x31.scalekit.v1.organizations.GetPortalLinksResponse\x82\xb5\x18\x02\x18@\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02)\x12\'/api/v1/organizations/{id}/portal_links\x12\xfa\x06\n\x1aUpdateOrganizationSettings\x12<.scalekit.v1.organizations.UpdateOrganizationSettingsRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xe9\x05\x92\x41\xaa\x05\n\rOrganizations\x12\x1cToggle organization settings\x1a\xd3\x01Updates configuration settings for an organization. Supports modifying SSO configuration, directory synchronization settings, and session parameters. Requires organization ID and the specific settings to update.J\xe3\x01\n\x03\x32\x30\x30\x12\xdb\x01\n\xa0\x01Returns the complete organization object with updated settings applied. Contains all organization details including ID, display name, and the modified settings.\x12\x36\n4\x1a\x32.scalekit.v1.organizations.GetOrganizationResponseJp\n\x03\x34\x30\x30\x12i\ngInvalid request - occurs when the settings payload contains invalid values or unsupported configurationJM\n\x03\x34\x30\x34\x12\x46\nDOrganization not found - the specified organization ID doesn\'t exist\x82\xb5\x18\x02\x18\x44\x82\xd3\xe4\x93\x02/2#/api/v1/organizations/{id}/settings:\x08settings\x12\xd0\x05\n\x1fUpdateOrganizationSessionPolicy\x12\x41.scalekit.v1.organizations.UpdateOrganizationSessionPolicyRequest\x1a\x42.scalekit.v1.organizations.UpdateOrganizationSessionPolicyResponse\"\xa5\x04\x92\x41\xbc\x03\n\rOrganizations\x12\"Update organization session policy\x1a\xed\x01Sets a custom session policy for an organization or reverts to application-level settings. Send session_policy=\'APPLICATION\' to revert to application defaults. Send session_policy=\'CUSTOM\' with timeout values to activate a custom policy.Ju\n\x03\x32\x30\x30\x12n\n$Session policy updated successfully.\x12\x46\nD\x1a\x42.scalekit.v1.organizations.UpdateOrganizationSessionPolicyResponseJ \n\x03\x34\x30\x34\x12\x19\n\x17Organization not found.\x82\xb5\x18 \n\x1corganizations_sessions_write\x18T\x82\xd3\xe4\x93\x02;26/api/v1/organizations/{organization_id}/session-policy:\x01*\x12\xb9\x05\n\x1cGetOrganizationSessionPolicy\x12>.scalekit.v1.organizations.GetOrganizationSessionPolicyRequest\x1a?.scalekit.v1.organizations.GetOrganizationSessionPolicyResponse\"\x97\x04\x92\x41\xb2\x03\n\rOrganizations\x12\x1fGet organization session policy\x1a\xe7\x01Retrieves the session policy for an organization. Returns session_policy=\'APPLICATION\' if the organization inherits the application-level defaults, or session_policy=\'CUSTOM\' with the configured values if a custom policy is active.Jt\n\x03\x32\x30\x30\x12m\n&Session policy retrieved successfully.\x12\x43\nA\x1a?.scalekit.v1.organizations.GetOrganizationSessionPolicyResponseJ \n\x03\x34\x30\x34\x12\x19\n\x17Organization not found.\x82\xb5\x18\x1f\n\x1borganizations_sessions_read\x18T\x82\xd3\xe4\x93\x02\x38\x12\x36/api/v1/organizations/{organization_id}/session-policy\x12\xd5\x03\n\x1cUpsertUserManagementSettings\x12>.scalekit.v1.organizations.UpsertUserManagementSettingsRequest\x1a?.scalekit.v1.organizations.UpsertUserManagementSettingsResponse\"\xb3\x02\x92\x41\xdf\x01\n\rOrganizations\x12 Upsert organization user setting\x1a\x33Upsert user management settings for an organizationJw\n\x03\x32\x30\x30\x12p\n)Returns the updated organization setting.\x12\x43\nA\x1a?.scalekit.v1.organizations.UpsertUserManagementSettingsResponse\x82\xb5\x18\x02\x18\x64\x82\xd3\xe4\x93\x02\x44\x32?/api/v1/organizations/{organization_id}/settings/usermanagement:\x01*\x12\x9f\x04\n$GetOrganizationUserManagementSetting\x12G.scalekit.v1.organizations.GetOrganizationUserManagementSettingsRequest\x1aH.scalekit.v1.organizations.GetOrganizationUserManagementSettingsResponse\"\xe3\x02\x92\x41\x83\x02\n\rOrganizations\x12(Get organization user management setting\x1a\x43Retrieves the user management settings for a specific organization.J\x82\x01\n\x03\x32\x30\x30\x12{\n+Returns the requested organization setting.\x12L\nJ\x1aH.scalekit.v1.organizations.GetOrganizationUserManagementSettingsResponse\x82\xb5\x18\x02\x18\x64\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x41\x12?/api/v1/organizations/{organization_id}/settings/usermanagement\x12\xee\x05\n\x1bGetApplicationSessionPolicy\x12=.scalekit.v1.organizations.GetApplicationSessionPolicyRequest\x1a>.scalekit.v1.organizations.GetApplicationSessionPolicyResponse\"\xcf\x04\x92\x41\xcf\x03\n\rOrganizations\x12/Get application session policy for organization\x1a\xa6\x01Returns the application-level session settings for display in hosted pages. Includes absolute timeout, idle timeout configuration, and access token expiry in minutes.J\x7f\n\x03\x32\x30\x30\x12x\n2Application session policy retrieved successfully.\x12\x42\n@\x1a>.scalekit.v1.organizations.GetApplicationSessionPolicyResponseJA\n\x03\x34\x30\x33\x12:\n8Session policy feature not enabled for this environment.J \n\x03\x34\x30\x34\x12\x19\n\x17Organization not found.\x82\xb5\x18\x1f\n\x1borganizations_sessions_read\x18T\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x44\x12\x42/api/v1/organizations/{organization_id}/application-session-policy\x1aX\x92\x41U\n\rOrganizations\x12\x44{{import \"proto/scalekit/v1/organizations/organization_details.md\"}}B\xa9\'Z7github.com/scalekit-inc/scalekit/pkg/grpc/organizations\x92\x41\xec&\x12\x92\"\n\rScalekit APIs\x12\x83!# Introduction\n\nThe Scalekit API is a RESTful API that enables you to manage organizations, users, and authentication settings. All requests must use HTTPS.\nAll API requests use the following base URLs:\n\n```\nhttps://{environment}.scalekit.dev (Development)\nhttps://{environment}.scalekit.com (Production)\nhttps://auth.example.com (Custom domain)\n```\n\nScalekit operates two separate environments: Development and Production. Resources cannot be moved between environments.\n\n# Authentication\n\nThe Scalekit API uses OAuth 2.0 Client Credentials for authentication.\n\nCopy your API credentials from the Scalekit dashboard\'s API Config section and set them as environment variables.\n\n```sh\nSCALEKIT_ENVIRONMENT_URL=\'\'\nSCALEKIT_CLIENT_ID=\'\'\nSCALEKIT_CLIENT_SECRET=\'\'\n```\n\nGetting an access token\n\n1. Get your credentials from the [Scalekit Dashboard](https://app.scalekit.com)\n2. Request an access token:\n\n```sh\ncurl https://{SCALEKIT_ENVIRONMENT_URL}/oauth/token \\\n -X POST \\\n -H \'Content-Type: application/x-www-form-urlencoded\' \\\n -d \'client_id={client_id}\' \\\n -d \'client_secret={client_secret}\' \\\n -d \'grant_type=client_credentials\'\n```\n\n3. Use the access token in API requests:\n\n```sh\ncurl https://{SCALEKIT_ENVIRONMENT_URL}/api/v1/organizations \\\n -H \'Content-Type: application/json\' \\\n -H \'Authorization: Bearer {access_token}\'\n```\n\nThe response includes an access token:\n\n```json\n{\n\t\"access_token\": \"eyJhbGciOiJSUzI1NiIsImtpZCI6InNua181Ok4OTEyMjU2NiIsInR5cCI6IkpXVCJ9...\",\n\t\"token_type\": \"Bearer\",\n\t\"expires_in\": 86399,\n\t\"scope\": \"openid\"\n}\n```\n\n# SDKs\n\nScalekit provides official SDKs for multiple programming languages. Check the changelog at GitHub repositories for the latest updates.\n\n### Node.js\n\n```sh\nnpm install @scalekit-sdk/node\n```\n\nCreate a new Scalekit client instance after initializing the environment variables\n\n```js\nimport { Scalekit } from \"@scalekit-sdk/node\";\n\nexport let scalekit = new Scalekit(\n\tprocess.env.SCALEKIT_ENVIRONMENT_URL,\n\tprocess.env.SCALEKIT_CLIENT_ID,\n\tprocess.env.SCALEKIT_CLIENT_SECRET\n);\n```\n\n[See the Node SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-node/releases)\n\n### Python\n\n```sh\npip install scalekit-sdk-python\n```\n\nCreate a new Scalekit client instance after initializing the environment variables.\n\n```py\nfrom scalekit import ScalekitClient\nimport os\n\nscalekit_client = ScalekitClient(\n os.environ.get(\'SCALEKIT_ENVIRONMENT_URL\'),\n os.environ.get(\'SCALEKIT_CLIENT_ID\'),\n os.environ.get(\'SCALEKIT_CLIENT_SECRET\')\n)\n```\n\n[See the Python SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-python/releases)\n\n### Go\n\n```sh\ngo get -u github.com/scalekit-inc/scalekit-sdk-go\n```\n\nCreate a new Scalekit client instance after initializing the environment variables.\n\n```go\npackage main\n\nimport (\n \"os\"\n \"github.com/scalekit-inc/scalekit-sdk-go\"\n)\n\nscalekitClient := scalekit.NewScalekitClient(\n os.Getenv(\"SCALEKIT_ENVIRONMENT_URL\"),\n os.Getenv(\"SCALEKIT_CLIENT_ID\"),\n os.Getenv(\"SCALEKIT_CLIENT_SECRET\"),\n)\n```\n\n[See the Go SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-go/releases)\n\n### Java\n\n```gradle\n/* Gradle users - add the following to your dependencies in build file */\nimplementation \"com.scalekit:scalekit-sdk-java:2.0.6\"\n```\n\n```xml\n\n\n com.scalekit\n scalekit-sdk-java\n 2.0.6\n\n```\n\n[See the Java SDK changelog](https://github.com/scalekit-inc/scalekit-sdk-java/releases)\n\n# Error handling\n\nThe API uses standard HTTP status codes:\n\n| Code | Description |\n| ----------- | -------------------- |\n| 200/201 | Success |\n| 400 | Invalid request |\n| 401 | Authentication error |\n| 404 | Resource not found |\n| 429 | Rate limit exceeded |\n| 500/501/504 | Server error |\n\nError responses include detailed information:\n\n```json\n{\n\t\"code\": 16,\n\t\"message\": \"Token empty\",\n\t\"details\": [\n\t\t{\n\t\t\t\"@type\": \"type.googleapis.com/scalekit.v1.errdetails.ErrorInfo\",\n\t\t\t\"error_code\": \"UNAUTHENTICATED\"\n\t\t}\n\t]\n}\n```\n\n\":\n\x0cScalekit Inc\x12\x14https://scalekit.com\x1a\x14support@scalekit.com*8\n\nApache 2.0\x12*http://www.apache.org/licenses/LICENSE-2.02\x05\x31.0.0\x1a\x19$SCALEKIT_ENVIRONMENT_URL*\x01\x02\x32\x10\x61pplication/json:\x10\x61pplication/jsonj\x0f\n\rOrganizationsj\xd4\x03\n\x0bPermissions\x12\xc4\x03Permission management for defining and controlling access to system resources. Create, retrieve, update, and delete granular permissions that represent specific actions users can perform. Permissions are the building blocks of role-based access control (RBAC) and can be assigned to roles to grant users the ability to perform specific operations. Use this service to define custom permissions for your application\'s unique access control requirements.r+\n\rScalekit Docs\x12\x1ahttps://docs.scalekit.com/b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -191,13 +191,17 @@ _globals['_GETAPPLICATIONSESSIONPOLICYREQUEST'].fields_by_name['organization_id']._loaded_options = None _globals['_GETAPPLICATIONSESSIONPOLICYREQUEST'].fields_by_name['organization_id']._serialized_options = b'\222AE2*The unique identifier of the organization.J\027\"org_59615193906282635\"\340A\002\272H\014r\n\020\001\030 :\004org_' _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['absolute_session_timeout']._loaded_options = None - _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['absolute_session_timeout']._serialized_options = b'\222A+2$Absolute session timeout in minutes.J\003480' + _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['absolute_session_timeout']._serialized_options = b'\222A]2VAbsolute session timeout value in the unit specified by absolute_session_timeout_unit.J\003480' _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['idle_session_timeout_enabled']._loaded_options = None _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['idle_session_timeout_enabled']._serialized_options = b'\222AJ2AWhether idle session timeout is enabled at the application level.J\005false' _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['idle_session_timeout']._loaded_options = None - _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['idle_session_timeout']._serialized_options = b'\222AJ2DIdle session timeout in minutes. Zero when idle timeout is disabled.J\00260' + _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['idle_session_timeout']._serialized_options = b'\222Ax2rIdle session timeout value in the unit specified by idle_session_timeout_unit. Zero when idle timeout is disabled.J\00260' _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['access_token_expiry']._loaded_options = None _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['access_token_expiry']._serialized_options = b'\222AK2FAccess token expiry in minutes. Custom policy values must exceed this.J\0015' + _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['absolute_session_timeout_unit']._loaded_options = None + _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['absolute_session_timeout_unit']._serialized_options = b'\222Av2iUnit for absolute_session_timeout. Reflects the unit configured for the application-level session policy.J\t\"MINUTES\"' + _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['idle_session_timeout_unit']._loaded_options = None + _globals['_APPLICATIONSESSIONPOLICYSETTINGS'].fields_by_name['idle_session_timeout_unit']._serialized_options = b'\222A\247\0012\231\001Unit for idle_session_timeout. Reflects the unit configured for the application-level session policy. Omitted when idle_session_timeout_enabled is false.J\t\"MINUTES\"' _globals['_GETAPPLICATIONSESSIONPOLICYRESPONSE'].fields_by_name['application_policy']._loaded_options = None _globals['_GETAPPLICATIONSESSIONPOLICYRESPONSE'].fields_by_name['application_policy']._serialized_options = b'\222A:28The effective application-level session policy settings.' _globals['_ORGANIZATIONUSERMANAGEMENTSETTINGS'].fields_by_name['max_allowed_users']._loaded_options = None @@ -266,10 +270,10 @@ _globals['_ORGANIZATIONSERVICE'].methods_by_name['GetOrganizationUserManagementSetting']._serialized_options = b'\222A\203\002\n\rOrganizations\022(Get organization user management setting\032CRetrieves the user management settings for a specific organization.J\202\001\n\003200\022{\n+Returns the requested organization setting.\022L\nJ\032H.scalekit.v1.organizations.GetOrganizationUserManagementSettingsResponse\202\265\030\002\030d\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002A\022?/api/v1/organizations/{organization_id}/settings/usermanagement' _globals['_ORGANIZATIONSERVICE'].methods_by_name['GetApplicationSessionPolicy']._loaded_options = None _globals['_ORGANIZATIONSERVICE'].methods_by_name['GetApplicationSessionPolicy']._serialized_options = b'\222A\317\003\n\rOrganizations\022/Get application session policy for organization\032\246\001Returns the application-level session settings for display in hosted pages. Includes absolute timeout, idle timeout configuration, and access token expiry in minutes.J\177\n\003200\022x\n2Application session policy retrieved successfully.\022B\n@\032>.scalekit.v1.organizations.GetApplicationSessionPolicyResponseJA\n\003403\022:\n8Session policy feature not enabled for this environment.J \n\003404\022\031\n\027Organization not found.\202\265\030\037\n\033organizations_sessions_read\030T\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002D\022B/api/v1/organizations/{organization_id}/application-session-policy' - _globals['_FEATURE']._serialized_start=18236 - _globals['_FEATURE']._serialized_end=18318 - _globals['_SESSIONPOLICYTYPE']._serialized_start=18320 - _globals['_SESSIONPOLICYTYPE']._serialized_end=18405 + _globals['_FEATURE']._serialized_start=18895 + _globals['_FEATURE']._serialized_end=18977 + _globals['_SESSIONPOLICYTYPE']._serialized_start=18979 + _globals['_SESSIONPOLICYTYPE']._serialized_end=19064 _globals['_CREATEORGANIZATIONREQUEST']._serialized_start=533 _globals['_CREATEORGANIZATIONREQUEST']._serialized_end=708 _globals['_CREATEORGANIZATIONRESPONSE']._serialized_start=711 @@ -333,25 +337,25 @@ _globals['_GETAPPLICATIONSESSIONPOLICYREQUEST']._serialized_start=14069 _globals['_GETAPPLICATIONSESSIONPOLICYREQUEST']._serialized_end=14239 _globals['_APPLICATIONSESSIONPOLICYSETTINGS']._serialized_start=14242 - _globals['_APPLICATIONSESSIONPOLICYSETTINGS']._serialized_end=14784 - _globals['_GETAPPLICATIONSESSIONPOLICYRESPONSE']._serialized_start=14787 - _globals['_GETAPPLICATIONSESSIONPOLICYRESPONSE']._serialized_end=14996 - _globals['_ORGANIZATIONUSERMANAGEMENTSETTINGS']._serialized_start=14999 - _globals['_ORGANIZATIONUSERMANAGEMENTSETTINGS']._serialized_end=15347 - _globals['_ORGANIZATIONSESSIONSETTINGS']._serialized_start=15350 - _globals['_ORGANIZATIONSESSIONSETTINGS']._serialized_end=16420 - _globals['_ORGANIZATIONSETTINGS']._serialized_start=16423 - _globals['_ORGANIZATIONSETTINGS']._serialized_end=16949 - _globals['_ORGANIZATIONSETTINGSFEATURE']._serialized_start=16952 - _globals['_ORGANIZATIONSETTINGSFEATURE']._serialized_end=17478 - _globals['_UPSERTUSERMANAGEMENTSETTINGSREQUEST']._serialized_start=17481 - _globals['_UPSERTUSERMANAGEMENTSETTINGSREQUEST']._serialized_end=17759 - _globals['_UPSERTUSERMANAGEMENTSETTINGSRESPONSE']._serialized_start=17762 - _globals['_UPSERTUSERMANAGEMENTSETTINGSRESPONSE']._serialized_end=17918 - _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSREQUEST']._serialized_start=17921 - _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSREQUEST']._serialized_end=18056 - _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSRESPONSE']._serialized_start=18059 - _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSRESPONSE']._serialized_end=18234 - _globals['_ORGANIZATIONSERVICE']._serialized_start=18408 - _globals['_ORGANIZATIONSERVICE']._serialized_end=28690 + _globals['_APPLICATIONSESSIONPOLICYSETTINGS']._serialized_end=15443 + _globals['_GETAPPLICATIONSESSIONPOLICYRESPONSE']._serialized_start=15446 + _globals['_GETAPPLICATIONSESSIONPOLICYRESPONSE']._serialized_end=15655 + _globals['_ORGANIZATIONUSERMANAGEMENTSETTINGS']._serialized_start=15658 + _globals['_ORGANIZATIONUSERMANAGEMENTSETTINGS']._serialized_end=16006 + _globals['_ORGANIZATIONSESSIONSETTINGS']._serialized_start=16009 + _globals['_ORGANIZATIONSESSIONSETTINGS']._serialized_end=17079 + _globals['_ORGANIZATIONSETTINGS']._serialized_start=17082 + _globals['_ORGANIZATIONSETTINGS']._serialized_end=17608 + _globals['_ORGANIZATIONSETTINGSFEATURE']._serialized_start=17611 + _globals['_ORGANIZATIONSETTINGSFEATURE']._serialized_end=18137 + _globals['_UPSERTUSERMANAGEMENTSETTINGSREQUEST']._serialized_start=18140 + _globals['_UPSERTUSERMANAGEMENTSETTINGSREQUEST']._serialized_end=18418 + _globals['_UPSERTUSERMANAGEMENTSETTINGSRESPONSE']._serialized_start=18421 + _globals['_UPSERTUSERMANAGEMENTSETTINGSRESPONSE']._serialized_end=18577 + _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSREQUEST']._serialized_start=18580 + _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSREQUEST']._serialized_end=18715 + _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSRESPONSE']._serialized_start=18718 + _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSRESPONSE']._serialized_end=18893 + _globals['_ORGANIZATIONSERVICE']._serialized_start=19067 + _globals['_ORGANIZATIONSERVICE']._serialized_end=29349 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/organizations/organizations_pb2.pyi b/scalekit/v1/organizations/organizations_pb2.pyi index 7317066..261c537 100644 --- a/scalekit/v1/organizations/organizations_pb2.pyi +++ b/scalekit/v1/organizations/organizations_pb2.pyi @@ -326,16 +326,20 @@ class GetApplicationSessionPolicyRequest(_message.Message): def __init__(self, organization_id: _Optional[str] = ...) -> None: ... class ApplicationSessionPolicySettings(_message.Message): - __slots__ = ("absolute_session_timeout", "idle_session_timeout_enabled", "idle_session_timeout", "access_token_expiry") + __slots__ = ("absolute_session_timeout", "idle_session_timeout_enabled", "idle_session_timeout", "access_token_expiry", "absolute_session_timeout_unit", "idle_session_timeout_unit") ABSOLUTE_SESSION_TIMEOUT_FIELD_NUMBER: _ClassVar[int] IDLE_SESSION_TIMEOUT_ENABLED_FIELD_NUMBER: _ClassVar[int] IDLE_SESSION_TIMEOUT_FIELD_NUMBER: _ClassVar[int] ACCESS_TOKEN_EXPIRY_FIELD_NUMBER: _ClassVar[int] + ABSOLUTE_SESSION_TIMEOUT_UNIT_FIELD_NUMBER: _ClassVar[int] + IDLE_SESSION_TIMEOUT_UNIT_FIELD_NUMBER: _ClassVar[int] absolute_session_timeout: int idle_session_timeout_enabled: bool idle_session_timeout: int access_token_expiry: int - def __init__(self, absolute_session_timeout: _Optional[int] = ..., idle_session_timeout_enabled: bool = ..., idle_session_timeout: _Optional[int] = ..., access_token_expiry: _Optional[int] = ...) -> None: ... + absolute_session_timeout_unit: _commons_pb2.TimeUnit + idle_session_timeout_unit: _commons_pb2.TimeUnit + def __init__(self, absolute_session_timeout: _Optional[int] = ..., idle_session_timeout_enabled: bool = ..., idle_session_timeout: _Optional[int] = ..., access_token_expiry: _Optional[int] = ..., absolute_session_timeout_unit: _Optional[_Union[_commons_pb2.TimeUnit, str]] = ..., idle_session_timeout_unit: _Optional[_Union[_commons_pb2.TimeUnit, str]] = ...) -> None: ... class GetApplicationSessionPolicyResponse(_message.Message): __slots__ = ("application_policy",) diff --git a/scalekit/v1/providers/providers_pb2.py b/scalekit/v1/providers/providers_pb2.py index ecde0df..c78bed0 100644 --- a/scalekit/v1/providers/providers_pb2.py +++ b/scalekit/v1/providers/providers_pb2.py @@ -23,7 +23,7 @@ from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%scalekit/v1/providers/providers.proto\x12\x15scalekit.v1.providers\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/options/options.proto\"\xf5\x04\n\x08Provider\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1e\n\nidentifier\x18\x02 \x01(\tR\nidentifier\x12!\n\x0c\x64isplay_name\x18\x03 \x01(\tR\x0b\x64isplayName\x12 \n\x0b\x64\x65scription\x18\x04 \x01(\tR\x0b\x64\x65scription\x12\x1e\n\ncategories\x18\x05 \x03(\tR\ncategories\x12?\n\rauth_patterns\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.ListValueR\x0c\x61uthPatterns\x12\x19\n\x08icon_src\x18\x07 \x01(\tR\x07iconSrc\x12)\n\x10\x64isplay_priority\x18\x08 \x01(\x05R\x0f\x64isplayPriority\x12\x1f\n\x0b\x63oming_soon\x18\t \x01(\x08R\ncomingSoon\x12\x1b\n\tproxy_url\x18\n \x01(\tR\x08proxyUrl\x12#\n\rproxy_enabled\x18\x0b \x01(\x08R\x0cproxyEnabled\x12o\n\tis_custom\x18\x0c \x01(\x08\x42R\x92\x41O2FIndicates whether the provider is environment-scoped (custom provider)J\x05\x66\x61lseR\x08isCustom\x12y\n\ris_custom_mcp\x18\r \x01(\x08\x42U\x92\x41R2IIndicates whether this is an environment-scoped MCP-based custom providerJ\x05\x66\x61lseR\x0bisCustomMcp\"\xf1\n\n\x0e\x43reateProvider\x12\xf7\x01\n\nidentifier\x18\x02 \x01(\tB\xd6\x01\x92\x41\xb4\x01\x32\x9d\x01Unique identifier for the connected app provider. Spaces are not allowed, and the character : is reserved for internal suffixing and cannot be used in input.J\x12\"google_workspace\"\xbaH\x1br\x16\x10\x01\x18\x64\x32\x10^[a-zA-Z0-9_-]*$\xc8\x01\x01R\nidentifier\x12t\n\x0c\x64isplay_name\x18\x03 \x01(\tBQ\x92\x41\x41\x32+Display name for the connected app providerJ\x12\"Google Workspace\"\xbaH\nr\x05\x10\x01\x18\xc8\x01\xc8\x01\x01R\x0b\x64isplayName\x12\x92\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tBp\x92\x41m2)Description of the connected app providerJ@\"Connect to Google Workspace for email and calendar integration\"R\x0b\x64\x65scription\x12i\n\ncategories\x18\x05 \x03(\tBI\x92\x41\x46\x32)Categories for the connected app providerJ\x19[\"productivity\", \"email\"]R\ncategories\x12\x82\x01\n\rauth_patterns\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.ListValueBA\x92\x41\x38\x32\x36\x41uthentication patterns for the connected app provider\xbaH\x03\xc8\x01\x01R\x0c\x61uthPatterns\x12\x82\x01\n\x08icon_src\x18\x07 \x01(\tBg\x92\x41\x64\x32/Image source URL for the connected app providerJ1\"https://example.com/images/google_workspace.png\"R\x07iconSrc\x12)\n\x10\x64isplay_priority\x18\x08 \x01(\x05R\x0f\x64isplayPriority\x12\x63\n\x0b\x63oming_soon\x18\t \x01(\x08\x42\x42\x92\x41?26Indicates if the connected app provider is coming soonJ\x05\x66\x61lseR\ncomingSoon\x12k\n\tproxy_url\x18\n \x01(\tBN\x92\x41K2(Proxy URL for the connected app providerJ\x1f\"https://workspace.google.com/\"R\x08proxyUrl\x12\xe1\x01\n\rproxy_enabled\x18\x0b \x01(\x08\x42\xbb\x01\x92\x41\xb7\x01\x32\xae\x01This flag indicates whether proxying is turned on for the connected app provider. When enabled, requests are routed through the provider proxy instead of being sent directly.J\x04trueR\x0cproxyEnabledJ\x04\x08\x01\x10\x02\"\x96\x01\n\x15\x43reateProviderRequest\x12}\n\x08provider\x18\x01 \x01(\x0b\x32%.scalekit.v1.providers.CreateProviderB:\x92\x41\x31\x32/Details of the connected app provider to create\xbaH\x03\xc8\x01\x01R\x08provider\"\xb3\x08\n\x14\x43reateCustomProvider\x12\x9d\x01\n\x0c\x64isplay_name\x18\x01 \x01(\tBz\x92\x41\x41\x32+Display name for the connected app providerJ\x12\"Google Workspace\"\xbaH3r.\x10\x01\x18\xc8\x01\x32\'^[a-zA-Z0-9 ]*[a-zA-Z0-9][a-zA-Z0-9 ]*$\xc8\x01\x01R\x0b\x64isplayName\x12\x92\x01\n\x0b\x64\x65scription\x18\x02 \x01(\tBp\x92\x41m2)Description of the connected app providerJ@\"Connect to Google Workspace for email and calendar integration\"R\x0b\x64\x65scription\x12\x82\x01\n\rauth_patterns\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.ListValueBA\x92\x41\x38\x32\x36\x41uthentication patterns for the connected app provider\xbaH\x03\xc8\x01\x01R\x0c\x61uthPatterns\x12\x98\x01\n\tproxy_url\x18\x07 \x01(\tB{\x92\x41\x63\x32\x42Proxy URL for the connected app provider. Must start with https://J\x1d\"https://mcp.example.com/mcp\"\xbaH\x12r\x10\x10\x01\x18\x80\x10\x32\t^https://R\x08proxyUrl\x12\xe1\x01\n\rproxy_enabled\x18\x08 \x01(\x08\x42\xbb\x01\x92\x41\xb7\x01\x32\xae\x01This flag indicates whether proxying is turned on for the connected app provider. When enabled, requests are routed through the provider proxy instead of being sent directly.J\x04trueR\x0cproxyEnabled\x12\xcf\x01\n\x08icon_src\x18\t \x01(\tB\xb3\x01\x92\x41\x96\x01\x32\x65URL for the provider icon. Should be an SVG image sized 800x800 pixels for best rendering experience.J-\"https://example.com/images/my-connector.svg\"\xbaH\x16r\x14\x18\x80\x10\x32\x0f^(https://.*)?$R\x07iconSrcJ\x04\x08\x03\x10\x04J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07\"\xad\x02\n\x1b\x43reateCustomProviderRequest\x12\x8d\x02\n\x08provider\x18\x01 \x01(\x0b\x32+.scalekit.v1.providers.CreateCustomProviderB\xc3\x01\x92\x41\xb9\x01\x32\xb6\x01\x44\x65tails of the custom connected app provider to create. Identifier is derived by the system and the identifier returned in the response must be used for update and delete operations.\xbaH\x03\xc8\x01\x01R\x08provider\"U\n\x16\x43reateProviderResponse\x12;\n\x08provider\x18\x01 \x01(\x0b\x32\x1f.scalekit.v1.providers.ProviderR\x08provider\"\xb9\x08\n\x0eUpdateProvider\x12t\n\x0c\x64isplay_name\x18\x03 \x01(\tBQ\x92\x41\x41\x32+Display name for the connected app providerJ\x12\"Google Workspace\"\xbaH\nr\x05\x10\x01\x18\xc8\x01\xc8\x01\x01R\x0b\x64isplayName\x12\x92\x01\n\x0b\x64\x65scription\x18\x04 \x01(\tBp\x92\x41m2)Description of the connected app providerJ@\"Connect to Google Workspace for email and calendar integration\"R\x0b\x64\x65scription\x12i\n\ncategories\x18\x05 \x03(\tBI\x92\x41\x46\x32)Categories for the connected app providerJ\x19[\"productivity\", \"email\"]R\ncategories\x12|\n\rauth_patterns\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.ListValueB;\x92\x41\x38\x32\x36\x41uthentication patterns for the connected app providerR\x0c\x61uthPatterns\x12\x82\x01\n\x08icon_src\x18\x07 \x01(\tBg\x92\x41\x64\x32/Image source URL for the connected app providerJ1\"https://example.com/images/google_workspace.png\"R\x07iconSrc\x12)\n\x10\x64isplay_priority\x18\x08 \x01(\x05R\x0f\x64isplayPriority\x12\x7f\n\x0b\x63oming_soon\x18\t \x01(\x0b\x32\x1a.google.protobuf.BoolValueBB\x92\x41?26Indicates if the connected app provider is coming soonJ\x05\x66\x61lseR\ncomingSoon\x12k\n\tproxy_url\x18\n \x01(\tBN\x92\x41K2(Proxy URL for the connected app providerJ\x1f\"https://workspace.google.com/\"R\x08proxyUrl\x12\x88\x01\n\rproxy_enabled\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.BoolValueBG\x92\x41\x44\x32 None: ... ID_FIELD_NUMBER: _ClassVar[int] IDENTIFIER_FIELD_NUMBER: _ClassVar[int] DISPLAY_NAME_FIELD_NUMBER: _ClassVar[int] @@ -39,6 +46,7 @@ class Provider(_message.Message): PROXY_ENABLED_FIELD_NUMBER: _ClassVar[int] IS_CUSTOM_FIELD_NUMBER: _ClassVar[int] IS_CUSTOM_MCP_FIELD_NUMBER: _ClassVar[int] + METADATA_FIELD_NUMBER: _ClassVar[int] id: str identifier: str display_name: str @@ -52,7 +60,8 @@ class Provider(_message.Message): proxy_enabled: bool is_custom: bool is_custom_mcp: bool - def __init__(self, id: _Optional[str] = ..., identifier: _Optional[str] = ..., display_name: _Optional[str] = ..., description: _Optional[str] = ..., categories: _Optional[_Iterable[str]] = ..., auth_patterns: _Optional[_Union[_struct_pb2.ListValue, _Mapping]] = ..., icon_src: _Optional[str] = ..., display_priority: _Optional[int] = ..., coming_soon: bool = ..., proxy_url: _Optional[str] = ..., proxy_enabled: bool = ..., is_custom: bool = ..., is_custom_mcp: bool = ...) -> None: ... + metadata: _containers.ScalarMap[str, str] + def __init__(self, id: _Optional[str] = ..., identifier: _Optional[str] = ..., display_name: _Optional[str] = ..., description: _Optional[str] = ..., categories: _Optional[_Iterable[str]] = ..., auth_patterns: _Optional[_Union[_struct_pb2.ListValue, _Mapping]] = ..., icon_src: _Optional[str] = ..., display_priority: _Optional[int] = ..., coming_soon: bool = ..., proxy_url: _Optional[str] = ..., proxy_enabled: bool = ..., is_custom: bool = ..., is_custom_mcp: bool = ..., metadata: _Optional[_Mapping[str, str]] = ...) -> None: ... class CreateProvider(_message.Message): __slots__ = ("identifier", "display_name", "description", "categories", "auth_patterns", "icon_src", "display_priority", "coming_soon", "proxy_url", "proxy_enabled") @@ -85,20 +94,29 @@ class CreateProviderRequest(_message.Message): def __init__(self, provider: _Optional[_Union[CreateProvider, _Mapping]] = ...) -> None: ... class CreateCustomProvider(_message.Message): - __slots__ = ("display_name", "description", "auth_patterns", "proxy_url", "proxy_enabled", "icon_src") + __slots__ = ("display_name", "description", "auth_patterns", "proxy_url", "proxy_enabled", "icon_src", "metadata") + class MetadataEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... DISPLAY_NAME_FIELD_NUMBER: _ClassVar[int] DESCRIPTION_FIELD_NUMBER: _ClassVar[int] AUTH_PATTERNS_FIELD_NUMBER: _ClassVar[int] PROXY_URL_FIELD_NUMBER: _ClassVar[int] PROXY_ENABLED_FIELD_NUMBER: _ClassVar[int] ICON_SRC_FIELD_NUMBER: _ClassVar[int] + METADATA_FIELD_NUMBER: _ClassVar[int] display_name: str description: str auth_patterns: _struct_pb2.ListValue proxy_url: str proxy_enabled: bool icon_src: str - def __init__(self, display_name: _Optional[str] = ..., description: _Optional[str] = ..., auth_patterns: _Optional[_Union[_struct_pb2.ListValue, _Mapping]] = ..., proxy_url: _Optional[str] = ..., proxy_enabled: bool = ..., icon_src: _Optional[str] = ...) -> None: ... + metadata: _containers.ScalarMap[str, str] + def __init__(self, display_name: _Optional[str] = ..., description: _Optional[str] = ..., auth_patterns: _Optional[_Union[_struct_pb2.ListValue, _Mapping]] = ..., proxy_url: _Optional[str] = ..., proxy_enabled: bool = ..., icon_src: _Optional[str] = ..., metadata: _Optional[_Mapping[str, str]] = ...) -> None: ... class CreateCustomProviderRequest(_message.Message): __slots__ = ("provider",) @@ -143,20 +161,29 @@ class UpdateProviderRequest(_message.Message): def __init__(self, identifier: _Optional[str] = ..., provider: _Optional[_Union[UpdateProvider, _Mapping]] = ...) -> None: ... class UpdateCustomProvider(_message.Message): - __slots__ = ("display_name", "description", "auth_patterns", "proxy_url", "proxy_enabled", "icon_src") + __slots__ = ("display_name", "description", "auth_patterns", "proxy_url", "proxy_enabled", "icon_src", "metadata") + class MetadataEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... DISPLAY_NAME_FIELD_NUMBER: _ClassVar[int] DESCRIPTION_FIELD_NUMBER: _ClassVar[int] AUTH_PATTERNS_FIELD_NUMBER: _ClassVar[int] PROXY_URL_FIELD_NUMBER: _ClassVar[int] PROXY_ENABLED_FIELD_NUMBER: _ClassVar[int] ICON_SRC_FIELD_NUMBER: _ClassVar[int] + METADATA_FIELD_NUMBER: _ClassVar[int] display_name: str description: str auth_patterns: _struct_pb2.ListValue proxy_url: str proxy_enabled: bool icon_src: str - def __init__(self, display_name: _Optional[str] = ..., description: _Optional[str] = ..., auth_patterns: _Optional[_Union[_struct_pb2.ListValue, _Mapping]] = ..., proxy_url: _Optional[str] = ..., proxy_enabled: bool = ..., icon_src: _Optional[str] = ...) -> None: ... + metadata: _containers.ScalarMap[str, str] + def __init__(self, display_name: _Optional[str] = ..., description: _Optional[str] = ..., auth_patterns: _Optional[_Union[_struct_pb2.ListValue, _Mapping]] = ..., proxy_url: _Optional[str] = ..., proxy_enabled: bool = ..., icon_src: _Optional[str] = ..., metadata: _Optional[_Mapping[str, str]] = ...) -> None: ... class UpdateCustomProviderRequest(_message.Message): __slots__ = ("identifier", "provider") From 0d3367031648ec7c96518bdab60914d04c860c95 Mon Sep 17 00:00:00 2001 From: Srinivas Karre Date: Tue, 12 May 2026 16:58:34 +0530 Subject: [PATCH 15/19] fix: address coderabbitai review comments - generate-local: rename trap handler to rollback_and_cleanup, add cleanup of TEMP_DIR and intermediate dirs on failure, and clear trap on success - test_revert_to_application_policy: add follow-up get to verify persisted state --- Makefile | 10 +++++++--- tests/test_organization_session_policy.py | 5 +++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 84723b7..4305bfa 100644 --- a/Makefile +++ b/Makefile @@ -114,18 +114,22 @@ generate-local: tools-check @echo "Using local proto sources from $(LOCAL_PROTO_REPO)..." @set -euo pipefail; \ prepared=0; \ - rollback_if_needed() { \ + rollback_and_cleanup() { \ if [ "$$prepared" -eq 1 ] && [ -d "$(TEMP_DIR)" ]; then \ echo "Generation failed; restoring $(SCALEKIT_DIR) from $(TEMP_DIR)..."; \ rsync -a "$(TEMP_DIR)/" "$(SCALEKIT_DIR)/"; \ fi; \ + rm -rf "$(TEMP_DIR)" "$(GOOGLE_DIR)" "$(PROTO_DIR)" "$(PROTOC_DIR)"; \ + rm -f .dirpath buf.yaml buf.lock; \ + if [ -f buf.work.yaml.bak ]; then mv buf.work.yaml.bak buf.work.yaml; fi; \ }; \ - trap 'rollback_if_needed' EXIT; \ + trap 'rollback_and_cleanup' EXIT; \ $(MAKE) prepare; prepared=1; \ buf generate $(LOCAL_PROTO_REPO) --include-imports; \ $(MAKE) restore; prepared=0; \ $(MAKE) generate_init_files; \ - $(MAKE) cleanup + $(MAKE) cleanup; \ + trap - EXIT @echo "Code generation complete." lint: create-venv diff --git a/tests/test_organization_session_policy.py b/tests/test_organization_session_policy.py index dbf3463..68346c3 100644 --- a/tests/test_organization_session_policy.py +++ b/tests/test_organization_session_policy.py @@ -76,6 +76,11 @@ def test_revert_to_application_policy(self): self.assertIsNotNone(reverted) self.assertEqual(reverted.policy_source, SessionPolicyType.APPLICATION) + fetched = self.scalekit_client.organization.get_organization_session_policy( + organization_id=org_id + ) + self.assertEqual(fetched.policy_source, SessionPolicyType.APPLICATION) + def test_set_idle_timeout_disabled(self): """Setting idle_session_timeout_enabled=False should persist as false.""" org_id = self._create_org() From 0ef83076bfa129198e77101c2bfb7a9c8ce89362 Mon Sep 17 00:00:00 2001 From: Srinivas Karre Date: Tue, 12 May 2026 17:16:38 +0530 Subject: [PATCH 16/19] build From 400ccc8d3500ce51d6ddb59e283d2d6f04ca068f Mon Sep 17 00:00:00 2001 From: Srinivas Karre Date: Wed, 13 May 2026 11:44:39 +0530 Subject: [PATCH 17/19] fix: return raw grpc response from session policy methods and bump version to 2.10.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove response[0].policy extraction from get/update_organization_session_policy to match existing SDK patterns - Bump SDK version 2.9.0 → 2.10.0 - Update api_version date to 20260513 --- scalekit/_version.py | 2 +- scalekit/core.py | 2 +- scalekit/organization.py | 6 ++---- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/scalekit/_version.py b/scalekit/_version.py index 073f824..80bde6c 100644 --- a/scalekit/_version.py +++ b/scalekit/_version.py @@ -1,3 +1,3 @@ # Single source of truth for the SDK version. # Import this in setup.py and scalekit/core.py — never hardcode the version elsewhere. -__version__ = "2.9.0" \ No newline at end of file +__version__ = "2.10.0" \ No newline at end of file diff --git a/scalekit/core.py b/scalekit/core.py index 194a3fe..5180ac4 100644 --- a/scalekit/core.py +++ b/scalekit/core.py @@ -29,7 +29,7 @@ class CoreClient: sdk_version = f"Scalekit-Python/{_sdk_version}" # YYYYMMDD - api_version = "20260428" + api_version = "20260513" user_agent = f"{sdk_version} Python/{platform.python_version()} ({platform.system()}; {platform.architecture()}" def __init__(self, env_url, client_id, client_secret): diff --git a/scalekit/organization.py b/scalekit/organization.py index af5a91a..4aebec9 100644 --- a/scalekit/organization.py +++ b/scalekit/organization.py @@ -234,11 +234,10 @@ def get_organization_session_policy(self, organization_id: str) -> OrganizationS :returns: OrganizationSessionPolicySettings """ - response = self.core_client.grpc_exec( + return self.core_client.grpc_exec( self.organization_service.GetOrganizationSessionPolicy.with_call, GetOrganizationSessionPolicyRequest(organization_id=organization_id), ) - return response[0].policy def update_organization_session_policy( self, @@ -290,8 +289,7 @@ def update_organization_session_policy( ) if idle_session_timeout_unit is not None: req.idle_session_timeout_unit = idle_session_timeout_unit - response = self.core_client.grpc_exec( + return self.core_client.grpc_exec( self.organization_service.UpdateOrganizationSessionPolicy.with_call, req, ) - return response[0].policy From e080b3f008450f61c4ca56cc1e299abe16fc3ad2 Mon Sep 17 00:00:00 2001 From: Srinivas Karre Date: Wed, 13 May 2026 11:52:11 +0530 Subject: [PATCH 18/19] fix: update session policy tests to unpack raw grpc response tuple --- tests/test_organization_session_policy.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/test_organization_session_policy.py b/tests/test_organization_session_policy.py index 68346c3..ab789a0 100644 --- a/tests/test_organization_session_policy.py +++ b/tests/test_organization_session_policy.py @@ -26,7 +26,7 @@ def test_get_default_policy(self): policy = self.scalekit_client.organization.get_organization_session_policy( organization_id=org_id - ) + )[0].policy self.assertIsNotNone(policy) self.assertEqual(policy.policy_source, SessionPolicyType.APPLICATION) @@ -43,14 +43,14 @@ def test_set_custom_policy(self): idle_session_timeout_enabled=True, idle_session_timeout=60, idle_session_timeout_unit=TimeUnit.MINUTES, - ) + )[0].policy self.assertIsNotNone(policy) self.assertEqual(policy.policy_source, SessionPolicyType.CUSTOM) fetched = self.scalekit_client.organization.get_organization_session_policy( organization_id=org_id - ) + )[0].policy self.assertEqual(fetched.policy_source, SessionPolicyType.CUSTOM) self.assertTrue(fetched.HasField("absolute_session_timeout")) self.assertEqual(fetched.absolute_session_timeout.value, 360) @@ -71,14 +71,14 @@ def test_revert_to_application_policy(self): reverted = self.scalekit_client.organization.update_organization_session_policy( organization_id=org_id, policy_source=SessionPolicyType.APPLICATION, - ) + )[0].policy self.assertIsNotNone(reverted) self.assertEqual(reverted.policy_source, SessionPolicyType.APPLICATION) fetched = self.scalekit_client.organization.get_organization_session_policy( organization_id=org_id - ) + )[0].policy self.assertEqual(fetched.policy_source, SessionPolicyType.APPLICATION) def test_set_idle_timeout_disabled(self): @@ -91,14 +91,14 @@ def test_set_idle_timeout_disabled(self): absolute_session_timeout=480, absolute_session_timeout_unit=TimeUnit.MINUTES, idle_session_timeout_enabled=False, - ) + )[0].policy self.assertIsNotNone(policy) self.assertEqual(policy.policy_source, SessionPolicyType.CUSTOM) fetched = self.scalekit_client.organization.get_organization_session_policy( organization_id=org_id - ) + )[0].policy self.assertTrue(fetched.HasField("idle_session_timeout_enabled")) self.assertFalse(fetched.idle_session_timeout_enabled.value) From 0cd7ce397ec583417c5128b2dab956a48a8b9b15 Mon Sep 17 00:00:00 2001 From: Srinivas Karre Date: Wed, 13 May 2026 11:55:14 +0530 Subject: [PATCH 19/19] fix: correct return types for session policy methods to use response types --- scalekit/organization.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/scalekit/organization.py b/scalekit/organization.py index 4aebec9..0ed153b 100644 --- a/scalekit/organization.py +++ b/scalekit/organization.py @@ -20,9 +20,10 @@ UpdateOrganizationSettingsRequest, OrganizationUserManagementSettings, UpsertUserManagementSettingsRequest, - OrganizationSessionPolicySettings, GetOrganizationSessionPolicyRequest, + GetOrganizationSessionPolicyResponse, UpdateOrganizationSessionPolicyRequest, + UpdateOrganizationSessionPolicyResponse, SessionPolicyType, ) from scalekit.v1.commons.commons_pb2 import TimeUnit @@ -225,14 +226,14 @@ def upsert_user_management_settings(self, organization_id: str, max_allowed_user ) return response[0].settings - def get_organization_session_policy(self, organization_id: str) -> OrganizationSessionPolicySettings: + def get_organization_session_policy(self, organization_id: str) -> GetOrganizationSessionPolicyResponse: """ Get the session policy for an organization. :param organization_id: Organization id :type organization_id : ``` str ``` :returns: - OrganizationSessionPolicySettings + GetOrganizationSessionPolicyResponse """ return self.core_client.grpc_exec( self.organization_service.GetOrganizationSessionPolicy.with_call, @@ -248,7 +249,7 @@ def update_organization_session_policy( idle_session_timeout_enabled: Optional[bool] = None, idle_session_timeout: Optional[int] = None, idle_session_timeout_unit: Optional[TimeUnit] = None, - ) -> OrganizationSessionPolicySettings: + ) -> UpdateOrganizationSessionPolicyResponse: """ Set a custom session policy for an organization or revert to application defaults. @@ -267,7 +268,7 @@ def update_organization_session_policy( :param idle_session_timeout_unit: Unit for idle timeout (optional) :type idle_session_timeout_unit: ``` TimeUnit | None ``` :returns: - OrganizationSessionPolicySettings + UpdateOrganizationSessionPolicyResponse """ req = UpdateOrganizationSessionPolicyRequest( organization_id=organization_id,