From 218dcb77afd00304da114b1c0d9e12cab473cfa8 Mon Sep 17 00:00:00 2001 From: Srinivas Karre Date: Thu, 21 May 2026 17:40:02 +0530 Subject: [PATCH 1/9] feat: regenerate protos from v0.1.123.0 --- Makefile | 4 +- scalekit/v1/auth/auth_pb2.py | 76 +++--- scalekit/v1/auth/auth_pb2.pyi | 12 +- scalekit/v1/clients/clients_pb2.py | 168 ++++++------ scalekit/v1/commons/commons_pb2.py | 34 ++- scalekit/v1/commons/commons_pb2.pyi | 10 + .../connected_accounts_pb2.py | 144 +++++----- scalekit/v1/domains/domains_pb2.py | 24 +- scalekit/v1/environments/environments_pb2.py | 252 ++++++++++-------- scalekit/v1/environments/environments_pb2.pyi | 50 +++- .../v1/environments/environments_pb2_grpc.py | 66 +++++ .../v1/organizations/organizations_pb2.py | 186 ++++++------- .../v1/organizations/organizations_pb2.pyi | 18 +- scalekit/v1/roles/roles_pb2.py | 8 +- scalekit/v1/tools/tools_pb2.py | 64 ++--- 15 files changed, 645 insertions(+), 471 deletions(-) diff --git a/Makefile b/Makefile index 5c05395..4012543 100644 --- a/Makefile +++ b/Makefile @@ -11,8 +11,8 @@ VENV_DIR := .venv 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.121.2 +PROTO_REPO_URL := git@github.com:scalekit-inc/scalekit.git +PROTO_REF ?= v0.1.123.0 PROTO_SUBDIR := proto LOCAL_PROTO_REPO ?= ../scalekit diff --git a/scalekit/v1/auth/auth_pb2.py b/scalekit/v1/auth/auth_pb2.py index f7dfa04..9fe91f3 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\"\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\"\xce\x02\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\x12z\n\x1borganization_customizations\x18\x04 \x01(\x0b\x32/.scalekit.v1.commons.OrganizationCustomizationsB\x03\xe0\x41\x03H\x00R\x1aorganizationCustomizations\x88\x01\x01\x42\x1e\n\x1c_organization_customizations\"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\"\xe7\x05\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\x12\xcc\x01\n\x08logo_url\x18\x08 \x01(\tB\xab\x01\x92\x41\x9f\x01\x32_HTTPS URL of the organization\'s logo image. Maximum 2048 characters. Must use the https scheme.J\'\"https://cdn.example.com/acme-logo.png\"x\x80\x10\x8a\x01\t^https://\xa2\x02\x03uri\xbaH\x05r\x03\x18\x80\x10H\x04R\x07logoUrl\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_atB\x0b\n\t_logo_url\"_\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) @@ -57,10 +57,14 @@ _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['_GETAUTHCUSTOMIZATIONSRESPONSE'].fields_by_name['organization_customizations']._loaded_options = None + _globals['_GETAUTHCUSTOMIZATIONSRESPONSE'].fields_by_name['organization_customizations']._serialized_options = b'\340A\003' _globals['_OTPREQUEST'].fields_by_name['code_challenge']._loaded_options = None _globals['_OTPREQUEST'].fields_by_name['code_challenge']._serialized_options = b'\222A(2\034OTP sent to the user\'s emailJ\010\"123456\"\272H\006r\004\020\005\030\006' _globals['_LISTUSERORGANIZATIONSRESPONSE'].fields_by_name['intent']._loaded_options = None _globals['_LISTUSERORGANIZATIONSRESPONSE'].fields_by_name['intent']._serialized_options = b'\272H\005\202\001\002\020\001' + _globals['_ORGANIZATION'].fields_by_name['logo_url']._loaded_options = None + _globals['_ORGANIZATION'].fields_by_name['logo_url']._serialized_options = b'\222A\237\0012_HTTPS URL of the organization\'s logo image. Maximum 2048 characters. Must use the https scheme.J\'\"https://cdn.example.com/acme-logo.png\"x\200\020\212\001\t^https://\242\002\003uri\272H\005r\003\030\200\020' _globals['_UPDATELOGINUSERDETAILSREQUEST'].fields_by_name['connection_id']._loaded_options = None _globals['_UPDATELOGINUSERDETAILSREQUEST'].fields_by_name['connection_id']._serialized_options = b'\222AE2+Connection ID. Unique ID for the connectionJ\026\"conn_121312434123312\"\272H\006r\004\020\001\030 ' _globals['_UPDATELOGINUSERDETAILSREQUEST'].fields_by_name['login_request_id']._loaded_options = None @@ -127,10 +131,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=7526 + _globals['_INTENT']._serialized_end=7584 + _globals['_AUTHSTATE']._serialized_start=7587 + _globals['_AUTHSTATE']._serialized_end=8151 _globals['_LISTAUTHMETHODSREQUEST']._serialized_start=423 _globals['_LISTAUTHMETHODSREQUEST']._serialized_end=471 _globals['_LISTAUTHMETHODSRESPONSE']._serialized_start=473 @@ -148,35 +152,35 @@ _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['_GETAUTHCUSTOMIZATIONSRESPONSE']._serialized_end=2885 + _globals['_GETAUTHFEATURESRESPONSE']._serialized_start=2887 + _globals['_GETAUTHFEATURESRESPONSE']._serialized_end=2965 + _globals['_VERIFYPASSWORDLESSOTPREQUEST']._serialized_start=2967 + _globals['_VERIFYPASSWORDLESSOTPREQUEST']._serialized_end=3052 + _globals['_VERIFYPASSWORDLESSOTPRESPONSE']._serialized_start=3054 + _globals['_VERIFYPASSWORDLESSOTPRESPONSE']._serialized_end=3085 + _globals['_OTPREQUEST']._serialized_start=3087 + _globals['_OTPREQUEST']._serialized_end=3192 + _globals['_LISTUSERORGANIZATIONSRESPONSE']._serialized_start=3195 + _globals['_LISTUSERORGANIZATIONSRESPONSE']._serialized_end=3407 + _globals['_ORGANIZATION']._serialized_start=3410 + _globals['_ORGANIZATION']._serialized_end=4153 + _globals['_USERDETAILS']._serialized_start=4155 + _globals['_USERDETAILS']._serialized_end=4250 + _globals['_SIGNUPORGANIZATIONREQUEST']._serialized_start=4253 + _globals['_SIGNUPORGANIZATIONREQUEST']._serialized_end=4449 + _globals['_SIGNUPORGANIZATIONRESPONSE']._serialized_start=4451 + _globals['_SIGNUPORGANIZATIONRESPONSE']._serialized_end=4565 + _globals['_UPDATELOGINUSERDETAILSREQUEST']._serialized_start=4568 + _globals['_UPDATELOGINUSERDETAILSREQUEST']._serialized_end=4910 + _globals['_USER']._serialized_start=4913 + _globals['_USER']._serialized_end=6982 + _globals['_GETAUTHSTATERESPONSE']._serialized_start=6985 + _globals['_GETAUTHSTATERESPONSE']._serialized_end=7290 + _globals['_GETAUTHERRORREQUEST']._serialized_start=7293 + _globals['_GETAUTHERRORREQUEST']._serialized_end=7433 + _globals['_GETAUTHERRORRESPONSE']._serialized_start=7435 + _globals['_GETAUTHERRORRESPONSE']._serialized_end=7524 + _globals['_AUTHSERVICE']._serialized_start=8154 + _globals['_AUTHSERVICE']._serialized_end=10241 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/auth/auth_pb2.pyi b/scalekit/v1/auth/auth_pb2.pyi index 06084bc..53b092b 100644 --- a/scalekit/v1/auth/auth_pb2.pyi +++ b/scalekit/v1/auth/auth_pb2.pyi @@ -136,12 +136,14 @@ class PortalSettings(_message.Message): def __init__(self, custom_branding: bool = ..., new_self_serve_sso_scim: bool = ...) -> None: ... class GetAuthCustomizationsResponse(_message.Message): - __slots__ = ("customization_settings", "settings") + __slots__ = ("customization_settings", "settings", "organization_customizations") CUSTOMIZATION_SETTINGS_FIELD_NUMBER: _ClassVar[int] SETTINGS_FIELD_NUMBER: _ClassVar[int] + ORGANIZATION_CUSTOMIZATIONS_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: ... + organization_customizations: _commons_pb2.OrganizationCustomizations + def __init__(self, customization_settings: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., settings: _Optional[_Union[PortalSettings, _Mapping]] = ..., organization_customizations: _Optional[_Union[_commons_pb2.OrganizationCustomizations, _Mapping]] = ...) -> None: ... class GetAuthFeaturesResponse(_message.Message): __slots__ = ("features",) @@ -176,7 +178,7 @@ class ListUserOrganizationsResponse(_message.Message): def __init__(self, organizations: _Optional[_Iterable[_Union[Organization, _Mapping]]] = ..., user: _Optional[_Union[UserDetails, _Mapping]] = ..., intent: _Optional[_Union[Intent, str]] = ...) -> None: ... class Organization(_message.Message): - __slots__ = ("id", "name", "membership_status", "invitation_inviter_email", "invitation_accepted_at", "invitation_created_at", "invitation_expires_at") + __slots__ = ("id", "name", "membership_status", "invitation_inviter_email", "invitation_accepted_at", "invitation_created_at", "invitation_expires_at", "logo_url") ID_FIELD_NUMBER: _ClassVar[int] NAME_FIELD_NUMBER: _ClassVar[int] MEMBERSHIP_STATUS_FIELD_NUMBER: _ClassVar[int] @@ -184,6 +186,7 @@ class Organization(_message.Message): INVITATION_ACCEPTED_AT_FIELD_NUMBER: _ClassVar[int] INVITATION_CREATED_AT_FIELD_NUMBER: _ClassVar[int] INVITATION_EXPIRES_AT_FIELD_NUMBER: _ClassVar[int] + LOGO_URL_FIELD_NUMBER: _ClassVar[int] id: str name: str membership_status: str @@ -191,7 +194,8 @@ class Organization(_message.Message): invitation_accepted_at: _timestamp_pb2.Timestamp invitation_created_at: _timestamp_pb2.Timestamp invitation_expires_at: _timestamp_pb2.Timestamp - def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ..., membership_status: _Optional[str] = ..., invitation_inviter_email: _Optional[str] = ..., invitation_accepted_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., invitation_created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., invitation_expires_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ... + logo_url: str + def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ..., membership_status: _Optional[str] = ..., invitation_inviter_email: _Optional[str] = ..., invitation_accepted_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., invitation_created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., invitation_expires_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., logo_url: _Optional[str] = ...) -> None: ... class UserDetails(_message.Message): __slots__ = ("email", "first_name", "last_name") diff --git a/scalekit/v1/clients/clients_pb2.py b/scalekit/v1/clients/clients_pb2.py index 55fdcfe..98279cc 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\"\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\"\xcd\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\x8f\x02\n\x19post_logout_redirect_uris\x18\x04 \x03(\tB\xd3\x01\x92\x41\xc7\x01\x32}Allowed URIs for post-logout redirection. These URIs are used when a user is redirected after logout. Must use HTTP or HTTPS.JF[\"https://app.example.com/logged-out\", \"https://app.example.com/home\"]\xbaH\x05\x92\x01\x02\x18\x01R\x16postLogoutRedirectUris\x12\x80\x02\n\x12initiate_login_uri\x18\x05 \x01(\tB\xcc\x01\x92\x41\xc8\x01\x32\xa4\x01Pre-configured URI for initiating login flows. This URI is used to start authentication flows programmatically. Must use HTTP or HTTPS, or be a template expression.J\x1f\"https://app.example.com/login\"H\x00R\x10initiateLoginUri\x88\x01\x01\x12\xa4\x02\n\x0fpost_login_uris\x18\x06 \x03(\tB\xfb\x01\x92\x41\xef\x01\x32\xa6\x01List of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTP or 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\"\xd6\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\x8f\x02\n\x19post_logout_redirect_uris\x18\x05 \x03(\tB\xd3\x01\x92\x41\xc7\x01\x32}Allowed URIs for post-logout redirection. These URIs are used when a user is redirected after logout. Must use HTTP or HTTPS.JF[\"https://app.example.com/logged-out\", \"https://app.example.com/home\"]\xbaH\x05\x92\x01\x02\x18\x01R\x16postLogoutRedirectUris\x12\x80\x02\n\x12initiate_login_uri\x18\x06 \x01(\tB\xcc\x01\x92\x41\xc8\x01\x32\xa4\x01Pre-configured URI for initiating login flows. This URI is used to start authentication flows programmatically. Must use HTTP or HTTPS, or be a template expression.J\x1f\"https://app.example.com/login\"H\x00R\x10initiateLoginUri\x88\x01\x01\x12\xa4\x02\n\x0fpost_login_uris\x18\x07 \x03(\tB\xfb\x01\x92\x41\xef\x01\x32\xa6\x01List of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTP or 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) @@ -456,11 +456,11 @@ _globals['_CREATECLIENT'].fields_by_name['back_channel_logout_uris']._loaded_options = None _globals['_CREATECLIENT'].fields_by_name['back_channel_logout_uris']._serialized_options = b'\222A\351\0012wHTTPS 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\"]\272H\014\222\001\t\030\001\"\005r\003\210\001\001' _globals['_CREATECLIENT'].fields_by_name['post_logout_redirect_uris']._loaded_options = None - _globals['_CREATECLIENT'].fields_by_name['post_logout_redirect_uris']._serialized_options = b'\222A\347\0012\234\001Allowed 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\"]\272H\014\222\001\t\030\001\"\005r\003\210\001\001' + _globals['_CREATECLIENT'].fields_by_name['post_logout_redirect_uris']._serialized_options = b'\222A\307\0012}Allowed URIs for post-logout redirection. These URIs are used when a user is redirected after logout. Must use HTTP or HTTPS.JF[\"https://app.example.com/logged-out\", \"https://app.example.com/home\"]\272H\005\222\001\002\030\001' _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['initiate_login_uri']._serialized_options = b'\222A\310\0012\244\001Pre-configured URI for initiating login flows. This URI is used to start authentication flows programmatically. Must use HTTP or HTTPS, or be a template expression.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\357\0012\246\001List of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTP or 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 @@ -486,11 +486,11 @@ _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 - _globals['_UPDATECLIENT'].fields_by_name['post_logout_redirect_uris']._serialized_options = b'\222A\347\0012\234\001Allowed 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\"]\272H\014\222\001\t\030\001\"\005r\003\210\001\001' + _globals['_UPDATECLIENT'].fields_by_name['post_logout_redirect_uris']._serialized_options = b'\222A\307\0012}Allowed URIs for post-logout redirection. These URIs are used when a user is redirected after logout. Must use HTTP or HTTPS.JF[\"https://app.example.com/logged-out\", \"https://app.example.com/home\"]\272H\005\222\001\002\030\001' _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['initiate_login_uri']._serialized_options = b'\222A\310\0012\244\001Pre-configured URI for initiating login flows. This URI is used to start authentication flows programmatically. Must use HTTP or HTTPS, or be a template expression.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\357\0012\246\001List of allowed post login URIs for OAuth 2.0 authorization flows. Each URI must be valid and use HTTP or 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 @@ -743,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=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=52143 + _globals['_RESOURCETYPE']._serialized_end=52250 + _globals['_CLIENTSECRETSTATUS']._serialized_start=52252 + _globals['_CLIENTSECRETSTATUS']._serialized_end=52298 + _globals['_RESOURCECONNECTIONTYPE']._serialized_start=52300 + _globals['_RESOURCECONNECTIONTYPE']._serialized_end=52349 _globals['_CREATERESOURCEREQUEST']._serialized_start=558 _globals['_CREATERESOURCEREQUEST']._serialized_end=696 _globals['_CREATERESOURCE']._serialized_start=699 @@ -856,75 +856,75 @@ _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['_CREATECLIENT']._serialized_end=34671 + _globals['_CREATECLIENTRESPONSE']._serialized_start=34674 + _globals['_CREATECLIENTRESPONSE']._serialized_end=34814 + _globals['_UPDATECLIENTREQUEST']._serialized_start=34817 + _globals['_UPDATECLIENTREQUEST']._serialized_end=35268 + _globals['_UPDATECLIENT']._serialized_start=35271 + _globals['_UPDATECLIENT']._serialized_end=38173 + _globals['_UPDATECLIENTRESPONSE']._serialized_start=38176 + _globals['_UPDATECLIENTRESPONSE']._serialized_end=38344 + _globals['_CREATECLIENTSECRETREQUEST']._serialized_start=38347 + _globals['_CREATECLIENTSECRETREQUEST']._serialized_end=38521 + _globals['_CREATECLIENTSECRETRESPONSE']._serialized_start=38524 + _globals['_CREATECLIENTSECRETRESPONSE']._serialized_end=38953 + _globals['_UPDATECLIENTSECRETREQUEST']._serialized_start=38956 + _globals['_UPDATECLIENTSECRETREQUEST']._serialized_end=39599 + _globals['_UPDATECLIENTSECRET']._serialized_start=39602 + _globals['_UPDATECLIENTSECRET']._serialized_end=39838 + _globals['_UPDATECLIENTSECRETRESPONSE']._serialized_start=39841 + _globals['_UPDATECLIENTSECRETRESPONSE']._serialized_end=40072 + _globals['_DELETECLIENTREQUEST']._serialized_start=40075 + _globals['_DELETECLIENTREQUEST']._serialized_end=40208 + _globals['_DELETECLIENTSECRETREQUEST']._serialized_start=40211 + _globals['_DELETECLIENTSECRETREQUEST']._serialized_end=40518 + _globals['_CLIENT']._serialized_start=40521 + _globals['_CLIENT']._serialized_end=44401 + _globals['_CLIENTSECRET']._serialized_start=44404 + _globals['_CLIENTSECRET']._serialized_end=46901 + _globals['_SCOPE']._serialized_start=46904 + _globals['_SCOPE']._serialized_end=47216 + _globals['_CREATESCOPE']._serialized_start=47218 + _globals['_CREATESCOPE']._serialized_end=47331 + _globals['_CREATESCOPEREQUEST']._serialized_start=47334 + _globals['_CREATESCOPEREQUEST']._serialized_end=47577 + _globals['_CREATESCOPERESPONSE']._serialized_start=47579 + _globals['_CREATESCOPERESPONSE']._serialized_end=47650 + _globals['_LISTSCOPESREQUEST']._serialized_start=47653 + _globals['_LISTSCOPESREQUEST']._serialized_end=47823 + _globals['_LISTSCOPESRESPONSE']._serialized_start=47825 + _globals['_LISTSCOPESRESPONSE']._serialized_end=47897 + _globals['_UPDATESCOPEREQUEST']._serialized_start=47899 + _globals['_UPDATESCOPEREQUEST']._serialized_end=48010 + _globals['_UPDATESCOPE']._serialized_start=48012 + _globals['_UPDATESCOPE']._serialized_end=48123 + _globals['_UPDATESCOPERESPONSE']._serialized_start=48125 + _globals['_UPDATESCOPERESPONSE']._serialized_end=48196 + _globals['_DELETESCOPEREQUEST']._serialized_start=48198 + _globals['_DELETESCOPEREQUEST']._serialized_end=48247 + _globals['_GETCONSENTDETAILSRESPONSE']._serialized_start=48250 + _globals['_GETCONSENTDETAILSRESPONSE']._serialized_end=48983 + _globals['_CONSENTORGANIZATION']._serialized_start=48986 + _globals['_CONSENTORGANIZATION']._serialized_end=49361 + _globals['_CONSENTCLIENT']._serialized_start=49364 + _globals['_CONSENTCLIENT']._serialized_end=50062 + _globals['_CONSENTSCOPE']._serialized_start=50064 + _globals['_CONSENTSCOPE']._serialized_end=50156 + _globals['_USER']._serialized_start=50158 + _globals['_USER']._serialized_end=50272 + _globals['_REVOKEUSERCONSENTREQUEST']._serialized_start=50275 + _globals['_REVOKEUSERCONSENTREQUEST']._serialized_end=50565 + _globals['_REVOKEUSERCONSENTRESPONSE']._serialized_start=50567 + _globals['_REVOKEUSERCONSENTRESPONSE']._serialized_end=50594 + _globals['_ENSURERESOURCECONNECTIONREQUEST']._serialized_start=50597 + _globals['_ENSURERESOURCECONNECTIONREQUEST']._serialized_end=50756 + _globals['_ENSURERESOURCECONNECTIONRESPONSE']._serialized_start=50759 + _globals['_ENSURERESOURCECONNECTIONRESPONSE']._serialized_end=50971 + _globals['_RESOURCECONNECTION']._serialized_start=50974 + _globals['_RESOURCECONNECTION']._serialized_end=51918 + _globals['_RESOURCECUSTOMCONNECTIONSETTINGS']._serialized_start=51921 + _globals['_RESOURCECUSTOMCONNECTIONSETTINGS']._serialized_end=52141 + _globals['_CLIENTSERVICE']._serialized_start=52353 + _globals['_CLIENTSERVICE']._serialized_end=70084 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/commons/commons_pb2.py b/scalekit/v1/commons/commons_pb2.py index ebe06b5..cc603b3 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*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') +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\"\xbd\x02\n\x1aOrganizationCustomizations\x12\x41\n\x1aorganization_logo_branding\x18\x01 \x01(\x08\x42\x03\xe0\x41\x03R\x18organizationLogoBranding\x12U\n\x0c\x64isplay_name\x18\x02 \x01(\tB2\x92\x41/2 Display name of the organizationJ\x0b\"Acme Corp\"R\x0b\x64isplayName\x12x\n\x08logo_url\x18\x03 \x01(\tBX\x92\x41U2$HTTPS URL of the organization\'s logoJ\'\"https://cdn.example.com/acme-logo.png\"\xa2\x02\x03uriH\x00R\x07logoUrl\x88\x01\x01\x42\x0b\n\t_logo_url*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) @@ -115,18 +115,24 @@ _globals['_EXTERNALIDENTITY'].fields_by_name['created_time']._serialized_options = b'\222A^2\\Timestamp when this external identity connection was first created. Immutable and read-only.\340A\003' _globals['_EXTERNALIDENTITY'].fields_by_name['last_synced_time']._loaded_options = None _globals['_EXTERNALIDENTITY'].fields_by_name['last_synced_time']._serialized_options = b'\222A\1772}Timestamp of the last data synchronization for this external identity from the provider. Automatically updated by the system.\340A\003' - _globals['_REGIONCODE']._serialized_start=10694 - _globals['_REGIONCODE']._serialized_end=10751 - _globals['_ENVIRONMENTTYPE']._serialized_start=10753 - _globals['_ENVIRONMENTTYPE']._serialized_end=10822 - _globals['_MEMBERSHIPSTATUS']._serialized_start=10824 - _globals['_MEMBERSHIPSTATUS']._serialized_end=10943 - _globals['_IDENTITYPROVIDERTYPE']._serialized_start=10946 - _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['_ORGANIZATIONCUSTOMIZATIONS'].fields_by_name['organization_logo_branding']._loaded_options = None + _globals['_ORGANIZATIONCUSTOMIZATIONS'].fields_by_name['organization_logo_branding']._serialized_options = b'\340A\003' + _globals['_ORGANIZATIONCUSTOMIZATIONS'].fields_by_name['display_name']._loaded_options = None + _globals['_ORGANIZATIONCUSTOMIZATIONS'].fields_by_name['display_name']._serialized_options = b'\222A/2 Display name of the organizationJ\013\"Acme Corp\"' + _globals['_ORGANIZATIONCUSTOMIZATIONS'].fields_by_name['logo_url']._loaded_options = None + _globals['_ORGANIZATIONCUSTOMIZATIONS'].fields_by_name['logo_url']._serialized_options = b'\222AU2$HTTPS URL of the organization\'s logoJ\'\"https://cdn.example.com/acme-logo.png\"\242\002\003uri' + _globals['_REGIONCODE']._serialized_start=11014 + _globals['_REGIONCODE']._serialized_end=11071 + _globals['_ENVIRONMENTTYPE']._serialized_start=11073 + _globals['_ENVIRONMENTTYPE']._serialized_end=11142 + _globals['_MEMBERSHIPSTATUS']._serialized_start=11144 + _globals['_MEMBERSHIPSTATUS']._serialized_end=11263 + _globals['_IDENTITYPROVIDERTYPE']._serialized_start=11266 + _globals['_IDENTITYPROVIDERTYPE']._serialized_end=11546 + _globals['_AUTHENTICATIONMODE']._serialized_start=11548 + _globals['_AUTHENTICATIONMODE']._serialized_end=11644 + _globals['_TIMEUNIT']._serialized_start=11646 + _globals['_TIMEUNIT']._serialized_end=11725 _globals['_ORGANIZATIONMEMBERSHIP']._serialized_start=349 _globals['_ORGANIZATIONMEMBERSHIP']._serialized_end=2769 _globals['_ORGANIZATIONMEMBERSHIP_METADATAENTRY']._serialized_start=2596 @@ -141,4 +147,6 @@ _globals['_USERPROFILE_CUSTOMATTRIBUTESENTRY']._serialized_end=9373 _globals['_EXTERNALIDENTITY']._serialized_start=9376 _globals['_EXTERNALIDENTITY']._serialized_end=10692 + _globals['_ORGANIZATIONCUSTOMIZATIONS']._serialized_start=10695 + _globals['_ORGANIZATIONCUSTOMIZATIONS']._serialized_end=11012 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/commons/commons_pb2.pyi b/scalekit/v1/commons/commons_pb2.pyi index 2a041b7..e64b04a 100644 --- a/scalekit/v1/commons/commons_pb2.pyi +++ b/scalekit/v1/commons/commons_pb2.pyi @@ -221,3 +221,13 @@ class ExternalIdentity(_message.Message): created_time: _timestamp_pb2.Timestamp last_synced_time: _timestamp_pb2.Timestamp def __init__(self, connection_id: _Optional[str] = ..., connection_type: _Optional[str] = ..., connection_provider: _Optional[_Union[IdentityProviderType, str]] = ..., connection_user_id: _Optional[str] = ..., is_social: bool = ..., last_login_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., created_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., last_synced_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ... + +class OrganizationCustomizations(_message.Message): + __slots__ = ("organization_logo_branding", "display_name", "logo_url") + ORGANIZATION_LOGO_BRANDING_FIELD_NUMBER: _ClassVar[int] + DISPLAY_NAME_FIELD_NUMBER: _ClassVar[int] + LOGO_URL_FIELD_NUMBER: _ClassVar[int] + organization_logo_branding: bool + display_name: str + logo_url: str + def __init__(self, organization_logo_branding: bool = ..., display_name: _Optional[str] = ..., logo_url: _Optional[str] = ...) -> None: ... diff --git a/scalekit/v1/connected_accounts/connected_accounts_pb2.py b/scalekit/v1/connected_accounts/connected_accounts_pb2.py index a725386..a2f7fb8 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\"\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\xa0O\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\x85\x06\n\x13GetConnectedAccount\x12:.scalekit.v1.connected_accounts.GetConnectedAccountRequest\x1a;.scalekit.v1.connected_accounts.GetConnectedAccountResponse\"\xf4\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\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x44\x12\x1f/api/v1/connected_accounts/thisZ!\x12\x1f/api/v1/connected_accounts/{id}\x12\x95\x06\n\x1a\x44isconnectConnectedAccount\x12\x41.scalekit.v1.connected_accounts.DisconnectConnectedAccountRequest\x1a\x42.scalekit.v1.connected_accounts.DisconnectConnectedAccountResponse\"\xef\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\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02]\"*/api/v1/connected_accounts/{id}:disconnect:\x01*Z,\"\'/api/v1/connected_accounts/-:disconnect:\x01*\x12\xbf\x07\n\x17GetConnectedAccountAuth\x12\x46.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierRequest\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponse\"\x92\x06\x92\x41\xe1\x05\n\x12\x43onnected Accounts\x12&Get connected account auth credentials\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\xfb\x06\n\x1aGetConnectedAccountDetails\x12\x46.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierRequest\x1aG.scalekit.v1.connected_accounts.GetConnectedAccountByIdentifierResponse\"\xcb\x05\x92\x41\x97\x05\n\x12\x43onnected Accounts\x12\x1eGet connected account metadata\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\x02Z24/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') +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) @@ -121,7 +121,7 @@ _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\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['verification_status']._serialized_options = b'\222A\311\0022\265\002Verification status of the domain.\n- PENDING: DNS TXT record has not been validated yet.\n- VERIFIED: domain confirmed via DNS TXT record validation or admin approval.\n- AUTO_VERIFIED: domain verified automatically without DNS changes.\n- FAILED: DNS TXT record was not validated within the verification window.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 @@ -129,7 +129,7 @@ _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['_DOMAIN'].fields_by_name['verification_method']._serialized_options = b'\222A\252\0022\236\002Method that determines how domain ownership is verified.\n- ADMIN: domain is marked verified without DNS validation, typically by an admin.\n- DNS: domain must be verified by adding a TXT record to your DNS configuration.\n- NOT_APPLICABLE: verification does not apply to this domain type.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 @@ -146,12 +146,12 @@ _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['_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['_VERIFICATIONMETHOD']._serialized_start=10119 + _globals['_VERIFICATIONMETHOD']._serialized_end=10216 + _globals['_VERIFICATIONSTATUS']._serialized_start=10218 + _globals['_VERIFICATIONSTATUS']._serialized_end=10333 + _globals['_DOMAINTYPE']._serialized_start=10335 + _globals['_DOMAINTYPE']._serialized_end=10427 _globals['_CREATEDOMAINREQUEST']._serialized_start=387 _globals['_CREATEDOMAINREQUEST']._serialized_end=1165 _globals['_CREATEDOMAINRESPONSE']._serialized_start=1168 @@ -183,7 +183,7 @@ _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 + _globals['_DOMAIN']._serialized_end=10117 + _globals['_DOMAINSERVICE']._serialized_start=10430 + _globals['_DOMAINSERVICE']._serialized_end=15915 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/environments/environments_pb2.py b/scalekit/v1/environments/environments_pb2.py index 4807ef5..a8c40a5 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\"\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') +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\"\x82\x03\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\x12z\n\x1borganization_customizations\x18\x04 \x01(\x0b\x32/.scalekit.v1.commons.OrganizationCustomizationsB\x03\xe0\x41\x03H\x00R\x1aorganizationCustomizations\x88\x01\x01\x42\x1e\n\x1c_organization_customizations\"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\x1dGetEnvironmentTestUserRequest\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\"a\n\x1eGetEnvironmentTestUserResponse\x12?\n\ttest_user\x18\x01 \x01(\x0b\x32\".scalekit.v1.environments.TestUserR\x08testUser\"\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\"\x8b\x01\n UpdateEnvironmentTestUserRequest\x12\x1e\n\x02id\x18\x01 \x01(\tB\x0e\xbaH\x0br\t\x10\x01\x18 :\x03\x65nvR\x02id\x12G\n\ttest_user\x18\x02 \x01(\x0b\x32\".scalekit.v1.environments.TestUserB\x06\xbaH\x03\xc8\x01\x01R\x08testUser\"\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\"\x8b\x01\n!UpdateEnvironmentTestUserResponse\x12%\n\x0e\x65nvironment_id\x18\x01 \x01(\tR\renvironmentId\x12?\n\ttest_user\x18\x02 \x01(\x0b\x32\".scalekit.v1.environments.TestUserR\x08testUser\"\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\"\xc3\x04\n\x08TestUser\x12\x34\n\x07\x65nabled\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\x07\x65nabled\x12\xd5\x01\n\x18static_confirmation_code\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValueB}\x92\x41z2\\Six-digit static OTP code used in place of a real verification email for matched test users.J\x08\"424242\"x\x06\x80\x01\x06\x8a\x01\n^[0-9]{6}$R\x16staticConfirmationCode\x12\x95\x02\n\x06\x65mails\x18\x04 \x03(\tB\xfc\x01\x92\x41\xf8\x01\x32\xbd\x01\x45xplicit list of test user email addresses. Each email must contain \'+sktest\' in the local part (e.g. alice+sktest@example.com). Maximum 5 emails per environment (configurable server-side).J6[\"alice+sktest@example.com\", \"bob+sktest@example.com\"]R\x06\x65mailsJ\x04\x08\x02\x10\x03R\x0b\x65mail_regex\":\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\"\xda\x02\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\x12z\n\x1borganization_customizations\x18\x03 \x01(\x0b\x32/.scalekit.v1.commons.OrganizationCustomizationsB\x03\xe0\x41\x03H\x00R\x1aorganizationCustomizations\x88\x01\x01\x42\x1e\n\x1c_organization_customizations\"\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\x89\x46\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\xd6\x01\n\x16GetEnvironmentTestUser\x12\x37.scalekit.v1.environments.GetEnvironmentTestUserRequest\x1a\x38.scalekit.v1.environments.GetEnvironmentTestUserResponse\"I\x82\xb5\x18\x02\x18T\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02.\x12,/api/v1/environments/{id}/settings/test-user\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\xe2\x01\n\x19UpdateEnvironmentTestUser\x12:.scalekit.v1.environments.UpdateEnvironmentTestUserRequest\x1a;.scalekit.v1.environments.UpdateEnvironmentTestUserResponse\"L\x82\xb5\x18\x02\x18\x44\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x31\x32,/api/v1/environments/{id}/settings/test-user:\x01*\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) @@ -97,6 +97,8 @@ _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['_GETPORTALCUSTOMIZATIONRESPONSE'].fields_by_name['organization_customizations']._loaded_options = None + _globals['_GETPORTALCUSTOMIZATIONRESPONSE'].fields_by_name['organization_customizations']._serialized_options = b'\340A\003' _globals['_CREATEASSETUPLOADURLREQUEST'].fields_by_name['id']._loaded_options = None _globals['_CREATEASSETUPLOADURLREQUEST'].fields_by_name['id']._serialized_options = b'\272H\013r\t\020\001\030 :\003env' _globals['_ASSETSETTINGS'].fields_by_name['category']._loaded_options = None @@ -125,6 +127,8 @@ _globals['_GETENVIRONMENTSESSIONSETTINGSREQUEST'].fields_by_name['id']._serialized_options = b'\272H\013r\t\020\001\030 :\003env' _globals['_GETENVIRONMENTUSERMANAGEMENTREQUEST'].fields_by_name['id']._loaded_options = None _globals['_GETENVIRONMENTUSERMANAGEMENTREQUEST'].fields_by_name['id']._serialized_options = b'\272H\013r\t\020\001\030 :\003env' + _globals['_GETENVIRONMENTTESTUSERREQUEST'].fields_by_name['id']._loaded_options = None + _globals['_GETENVIRONMENTTESTUSERREQUEST'].fields_by_name['id']._serialized_options = b'\272H\013r\t\020\001\030 :\003env' _globals['_CREATEENVIRONMENTSESSIONSETTINGSREQUEST'].fields_by_name['id']._loaded_options = None _globals['_CREATEENVIRONMENTSESSIONSETTINGSREQUEST'].fields_by_name['id']._serialized_options = b'\272H\013r\t\020\001\030 :\003env' _globals['_CREATEENVIRONMENTSESSIONSETTINGSREQUEST'].fields_by_name['session_settings']._loaded_options = None @@ -141,6 +145,10 @@ _globals['_UPDATEENVIRONMENTUSERMANAGEMENTREQUEST'].fields_by_name['id']._serialized_options = b'\272H\013r\t\020\001\030 :\003env' _globals['_UPDATEENVIRONMENTUSERMANAGEMENTREQUEST'].fields_by_name['user_management']._loaded_options = None _globals['_UPDATEENVIRONMENTUSERMANAGEMENTREQUEST'].fields_by_name['user_management']._serialized_options = b'\272H\003\310\001\001' + _globals['_UPDATEENVIRONMENTTESTUSERREQUEST'].fields_by_name['id']._loaded_options = None + _globals['_UPDATEENVIRONMENTTESTUSERREQUEST'].fields_by_name['id']._serialized_options = b'\272H\013r\t\020\001\030 :\003env' + _globals['_UPDATEENVIRONMENTTESTUSERREQUEST'].fields_by_name['test_user']._loaded_options = None + _globals['_UPDATEENVIRONMENTTESTUSERREQUEST'].fields_by_name['test_user']._serialized_options = b'\272H\003\310\001\001' _globals['_SESSIONSETTINGS'].fields_by_name['access_token_expiry']._loaded_options = None _globals['_SESSIONSETTINGS'].fields_by_name['access_token_expiry']._serialized_options = b'\272H\010\032\006\030\300\321\002(\001' _globals['_SESSIONSETTINGS'].fields_by_name['client_access_token_expiry']._loaded_options = None @@ -155,12 +163,18 @@ _globals['_USERMANAGEMENT'].fields_by_name['max_users_limit']._serialized_options = b'\272H\010\032\006\030\237\215\006(\001' _globals['_USERMANAGEMENT'].fields_by_name['invitation_expiry']._loaded_options = None _globals['_USERMANAGEMENT'].fields_by_name['invitation_expiry']._serialized_options = b'\272H\010*\006\030\300\321\002(\001' + _globals['_TESTUSER'].fields_by_name['static_confirmation_code']._loaded_options = None + _globals['_TESTUSER'].fields_by_name['static_confirmation_code']._serialized_options = b'\222Az2\\Six-digit static OTP code used in place of a real verification email for matched test users.J\010\"424242\"x\006\200\001\006\212\001\n^[0-9]{6}$' + _globals['_TESTUSER'].fields_by_name['emails']._loaded_options = None + _globals['_TESTUSER'].fields_by_name['emails']._serialized_options = b'\222A\370\0012\275\001Explicit list of test user email addresses. Each email must contain \'+sktest\' in the local part (e.g. alice+sktest@example.com). Maximum 5 emails per environment (configurable server-side).J6[\"alice+sktest@example.com\", \"bob+sktest@example.com\"]' _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['_PORTALCUSTOMIZATIONBOOTSTRAP'].fields_by_name['organization_customizations']._loaded_options = None + _globals['_PORTALCUSTOMIZATIONBOOTSTRAP'].fields_by_name['organization_customizations']._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 @@ -231,6 +245,8 @@ _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['GetEnvironmentTestUser']._loaded_options = None + _globals['_ENVIRONMENTSERVICE'].methods_by_name['GetEnvironmentTestUser']._serialized_options = b'\202\265\030\002\030T\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002.\022,/api/v1/environments/{id}/settings/test-user' _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['UpdateEnvironmentUserManagement']._loaded_options = None @@ -241,6 +257,8 @@ _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['UpdateEnvironmentTestUser']._loaded_options = None + _globals['_ENVIRONMENTSERVICE'].methods_by_name['UpdateEnvironmentTestUser']._serialized_options = b'\202\265\030\002\030D\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\00212,/api/v1/environments/{id}/settings/test-user:\001*' _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 @@ -251,20 +269,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=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['_CUSTOMDOMAINSTATUS']._serialized_start=14255 + _globals['_CUSTOMDOMAINSTATUS']._serialized_end=14342 + _globals['_ASSETCATEGORY']._serialized_start=14344 + _globals['_ASSETCATEGORY']._serialized_end=14423 + _globals['_TIMEUNIT']._serialized_start=14425 + _globals['_TIMEUNIT']._serialized_end=14504 + _globals['_ORGUSERRELATIONSHIPTYPE']._serialized_start=14506 + _globals['_ORGUSERRELATIONSHIPTYPE']._serialized_end=14625 + _globals['_COOKIEPERSISTENCETYPE']._serialized_start=14627 + _globals['_COOKIEPERSISTENCETYPE']._serialized_end=14718 + _globals['_COOKIESAMESITESETTING']._serialized_start=14720 + _globals['_COOKIESAMESITESETTING']._serialized_end=14811 + _globals['_CONNECTEDACCOUNTUSERVERIFYMODE']._serialized_start=14814 + _globals['_CONNECTEDACCOUNTUSERVERIFYMODE']._serialized_end=14991 _globals['_CREATECUSTOMDOMAINREQUEST']._serialized_start=585 _globals['_CREATECUSTOMDOMAINREQUEST']._serialized_end=696 _globals['_CREATECUSTOMDOMAINRESPONSE']._serialized_start=698 @@ -316,101 +334,111 @@ _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['_GETPORTALCUSTOMIZATIONRESPONSE']._serialized_end=4872 + _globals['_CREATEASSETUPLOADURLRESPONSE']._serialized_start=4874 + _globals['_CREATEASSETUPLOADURLRESPONSE']._serialized_end=4964 + _globals['_CREATEASSETUPLOADURLREQUEST']._serialized_start=4967 + _globals['_CREATEASSETUPLOADURLREQUEST']._serialized_end=5108 + _globals['_ASSETSETTINGS']._serialized_start=5111 + _globals['_ASSETSETTINGS']._serialized_end=5256 + _globals['_UPDATEFEATURESREQUEST']._serialized_start=5259 + _globals['_UPDATEFEATURESREQUEST']._serialized_end=5396 + _globals['_ENABLEFSAFEATUREREQUEST']._serialized_start=5398 + _globals['_ENABLEFSAFEATUREREQUEST']._serialized_end=5448 + _globals['_DISABLEFSAFEATUREREQUEST']._serialized_start=5450 + _globals['_DISABLEFSAFEATUREREQUEST']._serialized_end=5508 + _globals['_GETFEATURESREQUEST']._serialized_start=5510 + _globals['_GETFEATURESREQUEST']._serialized_end=5565 + _globals['_GETFEATURESRESPONSE']._serialized_start=5567 + _globals['_GETFEATURESRESPONSE']._serialized_end=5662 + _globals['_ENABLEFEATUREREQUEST']._serialized_start=5664 + _globals['_ENABLEFEATUREREQUEST']._serialized_end=5760 + _globals['_DISABLEFEATUREREQUEST']._serialized_start=5762 + _globals['_DISABLEFEATUREREQUEST']._serialized_end=5859 + _globals['_ENVIRONMENTFEATURE']._serialized_start=5861 + _globals['_ENVIRONMENTFEATURE']._serialized_end=5927 + _globals['_GETHOSTSCOPEDPUBLICFEATUREFLAGSRESPONSE']._serialized_start=5929 + _globals['_GETHOSTSCOPEDPUBLICFEATUREFLAGSRESPONSE']._serialized_end=6041 + _globals['_PUBLICHOSTFEATUREFLAG']._serialized_start=6044 + _globals['_PUBLICHOSTFEATUREFLAG']._serialized_end=6203 + _globals['_GETENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_start=6205 + _globals['_GETENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_end=6275 + _globals['_GETENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_start=6277 + _globals['_GETENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_end=6346 + _globals['_GETENVIRONMENTTESTUSERREQUEST']._serialized_start=6348 + _globals['_GETENVIRONMENTTESTUSERREQUEST']._serialized_end=6411 + _globals['_GETENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_start=6413 + _globals['_GETENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_end=6538 + _globals['_GETENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_start=6540 + _globals['_GETENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_end=6661 + _globals['_GETENVIRONMENTTESTUSERRESPONSE']._serialized_start=6663 + _globals['_GETENVIRONMENTTESTUSERRESPONSE']._serialized_end=6760 + _globals['_CREATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_start=6763 + _globals['_CREATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_end=6930 + _globals['_CREATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_start=6933 + _globals['_CREATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_end=7096 + _globals['_CREATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_start=7099 + _globals['_CREATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_end=7266 + _globals['_CREATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_start=7269 + _globals['_CREATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_end=7432 + _globals['_UPDATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_start=7435 + _globals['_UPDATEENVIRONMENTSESSIONSETTINGSREQUEST']._serialized_end=7602 + _globals['_UPDATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_start=7605 + _globals['_UPDATEENVIRONMENTUSERMANAGEMENTREQUEST']._serialized_end=7768 + _globals['_UPDATEENVIRONMENTTESTUSERREQUEST']._serialized_start=7771 + _globals['_UPDATEENVIRONMENTTESTUSERREQUEST']._serialized_end=7910 + _globals['_UPDATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_start=7913 + _globals['_UPDATEENVIRONMENTSESSIONSETTINGSRESPONSE']._serialized_end=8080 + _globals['_UPDATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_start=8083 + _globals['_UPDATEENVIRONMENTUSERMANAGEMENTRESPONSE']._serialized_end=8246 + _globals['_UPDATEENVIRONMENTTESTUSERRESPONSE']._serialized_start=8249 + _globals['_UPDATEENVIRONMENTTESTUSERRESPONSE']._serialized_end=8388 + _globals['_SESSIONSETTINGS']._serialized_start=8391 + _globals['_SESSIONSETTINGS']._serialized_end=9542 + _globals['_USERMANAGEMENT']._serialized_start=9545 + _globals['_USERMANAGEMENT']._serialized_end=10478 + _globals['_TESTUSER']._serialized_start=10481 + _globals['_TESTUSER']._serialized_end=11060 + _globals['_GETCONTEXTREQUEST']._serialized_start=11062 + _globals['_GETCONTEXTREQUEST']._serialized_end=11120 + _globals['_GETCONTEXTRESPONSE']._serialized_start=11122 + _globals['_GETCONTEXTRESPONSE']._serialized_end=11193 + _globals['_UPDATECONTEXTREQUEST']._serialized_start=11195 + _globals['_UPDATECONTEXTREQUEST']._serialized_end=11307 + _globals['_GETCURRENTSESSIONREQUEST']._serialized_start=11309 + _globals['_GETCURRENTSESSIONREQUEST']._serialized_end=11351 + _globals['_GETCURRENTSESSIONRESPONSE']._serialized_start=11354 + _globals['_GETCURRENTSESSIONRESPONSE']._serialized_end=11757 + _globals['_RESOURCEMETADATA']._serialized_start=11760 + _globals['_RESOURCEMETADATA']._serialized_end=11957 + _globals['_RESOURCEMETADATA_RESOURCETYPE']._serialized_start=11891 + _globals['_RESOURCEMETADATA_RESOURCETYPE']._serialized_end=11957 + _globals['_SCALEKITRESOURCEREQUEST']._serialized_start=11959 + _globals['_SCALEKITRESOURCEREQUEST']._serialized_end=12058 + _globals['_SCALEKITRESOURCERESPONSE']._serialized_start=12061 + _globals['_SCALEKITRESOURCERESPONSE']._serialized_end=12271 + _globals['_SCALEKITRESOURCERESPONSE_RESOURCESENTRY']._serialized_start=12186 + _globals['_SCALEKITRESOURCERESPONSE_RESOURCESENTRY']._serialized_end=12271 + _globals['_PORTALBOOTSTRAPREQUEST']._serialized_start=12273 + _globals['_PORTALBOOTSTRAPREQUEST']._serialized_end=12297 + _globals['_PORTALCUSTOMIZATIONBOOTSTRAP']._serialized_start=12300 + _globals['_PORTALCUSTOMIZATIONBOOTSTRAP']._serialized_end=12646 + _globals['_PORTALBOOTSTRAPRESPONSE']._serialized_start=12649 + _globals['_PORTALBOOTSTRAPRESPONSE']._serialized_end=13014 + _globals['_AGENTACTIONSCONFIG']._serialized_start=13017 + _globals['_AGENTACTIONSCONFIG']._serialized_end=13440 + _globals['_CREATEAGENTACTIONSCONFIGREQUEST']._serialized_start=13443 + _globals['_CREATEAGENTACTIONSCONFIGREQUEST']._serialized_end=13609 + _globals['_CREATEAGENTACTIONSCONFIGRESPONSE']._serialized_start=13612 + _globals['_CREATEAGENTACTIONSCONFIGRESPONSE']._serialized_end=13747 + _globals['_GETAGENTACTIONSCONFIGREQUEST']._serialized_start=13749 + _globals['_GETAGENTACTIONSCONFIGREQUEST']._serialized_end=13811 + _globals['_GETAGENTACTIONSCONFIGRESPONSE']._serialized_start=13814 + _globals['_GETAGENTACTIONSCONFIGRESPONSE']._serialized_end=13946 + _globals['_UPDATEAGENTACTIONSCONFIGREQUEST']._serialized_start=13949 + _globals['_UPDATEAGENTACTIONSCONFIGREQUEST']._serialized_end=14115 + _globals['_UPDATEAGENTACTIONSCONFIGRESPONSE']._serialized_start=14118 + _globals['_UPDATEAGENTACTIONSCONFIGRESPONSE']._serialized_end=14253 + _globals['_ENVIRONMENTSERVICE']._serialized_start=14994 + _globals['_ENVIRONMENTSERVICE']._serialized_end=23963 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/environments/environments_pb2.pyi b/scalekit/v1/environments/environments_pb2.pyi index ec2f1bf..4893003 100644 --- a/scalekit/v1/environments/environments_pb2.pyi +++ b/scalekit/v1/environments/environments_pb2.pyi @@ -293,14 +293,16 @@ class PortalSettings(_message.Message): 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") + __slots__ = ("environmentId", "customization_settings", "settings", "organization_customizations") ENVIRONMENTID_FIELD_NUMBER: _ClassVar[int] CUSTOMIZATION_SETTINGS_FIELD_NUMBER: _ClassVar[int] SETTINGS_FIELD_NUMBER: _ClassVar[int] + ORGANIZATION_CUSTOMIZATIONS_FIELD_NUMBER: _ClassVar[int] environmentId: str customization_settings: _struct_pb2.Struct settings: PortalSettings - def __init__(self, environmentId: _Optional[str] = ..., customization_settings: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., settings: _Optional[_Union[PortalSettings, _Mapping]] = ...) -> None: ... + organization_customizations: _commons_pb2.OrganizationCustomizations + def __init__(self, environmentId: _Optional[str] = ..., customization_settings: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., settings: _Optional[_Union[PortalSettings, _Mapping]] = ..., organization_customizations: _Optional[_Union[_commons_pb2.OrganizationCustomizations, _Mapping]] = ...) -> None: ... class CreateAssetUploadUrlResponse(_message.Message): __slots__ = ("upload_url", "fetch_url") @@ -414,6 +416,12 @@ class GetEnvironmentUserManagementRequest(_message.Message): id: str def __init__(self, id: _Optional[str] = ...) -> None: ... +class GetEnvironmentTestUserRequest(_message.Message): + __slots__ = ("id",) + ID_FIELD_NUMBER: _ClassVar[int] + id: str + def __init__(self, id: _Optional[str] = ...) -> None: ... + class GetEnvironmentSessionSettingsResponse(_message.Message): __slots__ = ("session_settings",) SESSION_SETTINGS_FIELD_NUMBER: _ClassVar[int] @@ -426,6 +434,12 @@ class GetEnvironmentUserManagementResponse(_message.Message): user_management: UserManagement def __init__(self, user_management: _Optional[_Union[UserManagement, _Mapping]] = ...) -> None: ... +class GetEnvironmentTestUserResponse(_message.Message): + __slots__ = ("test_user",) + TEST_USER_FIELD_NUMBER: _ClassVar[int] + test_user: TestUser + def __init__(self, test_user: _Optional[_Union[TestUser, _Mapping]] = ...) -> None: ... + class CreateEnvironmentSessionSettingsRequest(_message.Message): __slots__ = ("id", "session_settings") ID_FIELD_NUMBER: _ClassVar[int] @@ -474,6 +488,14 @@ class UpdateEnvironmentUserManagementRequest(_message.Message): user_management: UserManagement def __init__(self, id: _Optional[str] = ..., user_management: _Optional[_Union[UserManagement, _Mapping]] = ...) -> None: ... +class UpdateEnvironmentTestUserRequest(_message.Message): + __slots__ = ("id", "test_user") + ID_FIELD_NUMBER: _ClassVar[int] + TEST_USER_FIELD_NUMBER: _ClassVar[int] + id: str + test_user: TestUser + def __init__(self, id: _Optional[str] = ..., test_user: _Optional[_Union[TestUser, _Mapping]] = ...) -> None: ... + class UpdateEnvironmentSessionSettingsResponse(_message.Message): __slots__ = ("environment_id", "session_settings") ENVIRONMENT_ID_FIELD_NUMBER: _ClassVar[int] @@ -490,6 +512,14 @@ class UpdateEnvironmentUserManagementResponse(_message.Message): user_management: UserManagement def __init__(self, environment_id: _Optional[str] = ..., user_management: _Optional[_Union[UserManagement, _Mapping]] = ...) -> None: ... +class UpdateEnvironmentTestUserResponse(_message.Message): + __slots__ = ("environment_id", "test_user") + ENVIRONMENT_ID_FIELD_NUMBER: _ClassVar[int] + TEST_USER_FIELD_NUMBER: _ClassVar[int] + environment_id: str + test_user: TestUser + def __init__(self, environment_id: _Optional[str] = ..., test_user: _Optional[_Union[TestUser, _Mapping]] = ...) -> None: ... + class SessionSettings(_message.Message): __slots__ = ("access_token_expiry", "client_access_token_expiry", "absolute_session_timeout", "session_management_enabled", "idle_session_timeout", "idle_session_enabled", "cookie_persistence_type", "cookie_same_site_setting", "cookie_custom_domain", "access_token_expiry_unit", "absolute_session_timeout_unit", "idle_session_timeout_unit") ACCESS_TOKEN_EXPIRY_FIELD_NUMBER: _ClassVar[int] @@ -542,6 +572,16 @@ class UserManagement(_message.Message): sync_user_profile_on_signin: _wrappers_pb2.BoolValue def __init__(self, allow_duplicate_user_identities: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., allow_multiple_memberships: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., allow_organization_signup: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., org_user_relationship: _Optional[_Union[OrgUserRelationshipType, str]] = ..., enable_max_users_limit: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., max_users_limit: _Optional[_Union[_wrappers_pb2.Int32Value, _Mapping]] = ..., invitation_expiry: _Optional[_Union[_wrappers_pb2.UInt32Value, _Mapping]] = ..., block_disposable_email_domains: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., block_public_email_domains: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., sync_user_profile_on_signin: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ...) -> None: ... +class TestUser(_message.Message): + __slots__ = ("enabled", "static_confirmation_code", "emails") + ENABLED_FIELD_NUMBER: _ClassVar[int] + STATIC_CONFIRMATION_CODE_FIELD_NUMBER: _ClassVar[int] + EMAILS_FIELD_NUMBER: _ClassVar[int] + enabled: _wrappers_pb2.BoolValue + static_confirmation_code: _wrappers_pb2.StringValue + emails: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, enabled: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., static_confirmation_code: _Optional[_Union[_wrappers_pb2.StringValue, _Mapping]] = ..., emails: _Optional[_Iterable[str]] = ...) -> None: ... + class GetContextRequest(_message.Message): __slots__ = ("environment_id",) ENVIRONMENT_ID_FIELD_NUMBER: _ClassVar[int] @@ -624,12 +664,14 @@ class PortalBootstrapRequest(_message.Message): def __init__(self) -> None: ... class PortalCustomizationBootstrap(_message.Message): - __slots__ = ("customization_settings", "settings") + __slots__ = ("customization_settings", "settings", "organization_customizations") CUSTOMIZATION_SETTINGS_FIELD_NUMBER: _ClassVar[int] SETTINGS_FIELD_NUMBER: _ClassVar[int] + ORGANIZATION_CUSTOMIZATIONS_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: ... + organization_customizations: _commons_pb2.OrganizationCustomizations + def __init__(self, customization_settings: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., settings: _Optional[_Union[PortalSettings, _Mapping]] = ..., organization_customizations: _Optional[_Union[_commons_pb2.OrganizationCustomizations, _Mapping]] = ...) -> None: ... class PortalBootstrapResponse(_message.Message): __slots__ = ("session", "portal_customizations", "organization", "connections") diff --git a/scalekit/v1/environments/environments_pb2_grpc.py b/scalekit/v1/environments/environments_pb2_grpc.py index acb9184..afc26c7 100644 --- a/scalekit/v1/environments/environments_pb2_grpc.py +++ b/scalekit/v1/environments/environments_pb2_grpc.py @@ -140,6 +140,11 @@ def __init__(self, channel): request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetEnvironmentUserManagementRequest.SerializeToString, response_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetEnvironmentUserManagementResponse.FromString, ) + self.GetEnvironmentTestUser = channel.unary_unary( + '/scalekit.v1.environments.EnvironmentService/GetEnvironmentTestUser', + request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetEnvironmentTestUserRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetEnvironmentTestUserResponse.FromString, + ) self.UpdateEnvironmentSessionSettings = channel.unary_unary( '/scalekit.v1.environments.EnvironmentService/UpdateEnvironmentSessionSettings', request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateEnvironmentSessionSettingsRequest.SerializeToString, @@ -165,6 +170,11 @@ def __init__(self, channel): 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.UpdateEnvironmentTestUser = channel.unary_unary( + '/scalekit.v1.environments.EnvironmentService/UpdateEnvironmentTestUser', + request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateEnvironmentTestUserRequest.SerializeToString, + response_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateEnvironmentTestUserResponse.FromString, + ) self.GetContext = channel.unary_unary( '/scalekit.v1.environments.EnvironmentService/GetContext', request_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetContextRequest.SerializeToString, @@ -348,6 +358,12 @@ def GetEnvironmentUserManagement(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def GetEnvironmentTestUser(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 UpdateEnvironmentSessionSettings(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -378,6 +394,12 @@ def UpdateAgentActionsConfig(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def UpdateEnvironmentTestUser(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) @@ -536,6 +558,11 @@ def add_EnvironmentServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetEnvironmentUserManagementRequest.FromString, response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetEnvironmentUserManagementResponse.SerializeToString, ), + 'GetEnvironmentTestUser': grpc.unary_unary_rpc_method_handler( + servicer.GetEnvironmentTestUser, + request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetEnvironmentTestUserRequest.FromString, + response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetEnvironmentTestUserResponse.SerializeToString, + ), 'UpdateEnvironmentSessionSettings': grpc.unary_unary_rpc_method_handler( servicer.UpdateEnvironmentSessionSettings, request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateEnvironmentSessionSettingsRequest.FromString, @@ -561,6 +588,11 @@ def add_EnvironmentServiceServicer_to_server(servicer, server): request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateAgentActionsConfigRequest.FromString, response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateAgentActionsConfigResponse.SerializeToString, ), + 'UpdateEnvironmentTestUser': grpc.unary_unary_rpc_method_handler( + servicer.UpdateEnvironmentTestUser, + request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateEnvironmentTestUserRequest.FromString, + response_serializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateEnvironmentTestUserResponse.SerializeToString, + ), 'GetContext': grpc.unary_unary_rpc_method_handler( servicer.GetContext, request_deserializer=scalekit_dot_v1_dot_environments_dot_environments__pb2.GetContextRequest.FromString, @@ -1021,6 +1053,23 @@ def GetEnvironmentUserManagement(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod + def GetEnvironmentTestUser(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/GetEnvironmentTestUser', + scalekit_dot_v1_dot_environments_dot_environments__pb2.GetEnvironmentTestUserRequest.SerializeToString, + scalekit_dot_v1_dot_environments_dot_environments__pb2.GetEnvironmentTestUserResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod def UpdateEnvironmentSessionSettings(request, target, @@ -1106,6 +1155,23 @@ def UpdateAgentActionsConfig(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod + def UpdateEnvironmentTestUser(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/UpdateEnvironmentTestUser', + scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateEnvironmentTestUserRequest.SerializeToString, + scalekit_dot_v1_dot_environments_dot_environments__pb2.UpdateEnvironmentTestUserResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod def GetContext(request, target, diff --git a/scalekit/v1/organizations/organizations_pb2.py b/scalekit/v1/organizations/organizations_pb2.py index 99e3422..859e21e 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\"\xa8\n\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\x9d\x03\n\x04slug\x18\t \x01(\tB\x83\x03\x92\x41\xa2\x02\x32\xbd\x01Slug for dynamic redirect URI resolution. A single DNS label (e.g. acme) or hostname (e.g. oauth.pstmn.io). Lowercase alphanumeric, hyphens, and dots. Max 253 chars. Unique per environment.J\x06\"acme\"x\xfd\x01\x80\x01\x01\x8a\x01Q^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$\xbaHZrX\x10\x01\x18\xfd\x01\x32Q^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$H\x01R\x04slug\x88\x01\x01\x12\xcf\x01\n\x08logo_url\x18\n \x01(\tB\xae\x01\x92\x41\x9f\x01\x32_HTTPS URL of the organization\'s logo image. Maximum 1024 characters. Must use the https scheme.J\'\"https://cdn.example.com/acme-logo.png\"x\x80\x08\x8a\x01\t^https://\xa2\x02\x03uri\xe0\x41\x01\xbaH\x05r\x03\x18\x80\x08H\x02R\x07logoUrl\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_slugB\x0b\n\t_logo_url\"\x92\r\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\xc0\x02\n\x04slug\x18\t \x01(\tB\xa6\x02\x92\x41\xa2\x02\x32\xbd\x01Slug for dynamic redirect URI resolution. A single DNS label (e.g. acme) or hostname (e.g. oauth.pstmn.io). Lowercase alphanumeric, hyphens, and dots. Max 253 chars. Unique per environment.J\x06\"acme\"x\xfd\x01\x80\x01\x01\x8a\x01Q^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$H\x01R\x04slug\x88\x01\x01\x12\xcf\x01\n\x08logo_url\x18\n \x01(\tB\xae\x01\x92\x41\x9f\x01\x32_HTTPS URL of the organization\'s logo image. Maximum 1024 characters. Must use the https scheme.J\'\"https://cdn.example.com/acme-logo.png\"x\x80\x08\x8a\x01\t^https://\xa2\x02\x03uri\xe0\x41\x01\xbaH\x05r\x03\x18\x80\x08H\x02R\x07logoUrl\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_slugB\x0b\n\t_logo_url\"\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\"\xee\n\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\xa2\x03\n\x04slug\x18\t \x01(\tB\x88\x03\x92\x41\xa6\x02\x32\xc1\x01Slug for dynamic redirect URI resolution. A single DNS label (e.g. acme) or hostname (e.g. oauth.pstmn.io). Lowercase alphanumeric, hyphens, and dots. Max 253 chars. Send empty string to clear.J\x06\"acme\"x\xfd\x01\x8a\x01T^$|^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$\xbaH[rY\x18\xfd\x01\x32T^$|^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$H\x02R\x04slug\x88\x01\x01\x12\xcf\x01\n\x08logo_url\x18\n \x01(\tB\xae\x01\x92\x41\x9f\x01\x32_HTTPS URL of the organization\'s logo image. Maximum 1024 characters. Must use the https scheme.J\'\"https://cdn.example.com/acme-logo.png\"x\x80\x08\x8a\x01\t^https://\xa2\x02\x03uri\xe0\x41\x01\xbaH\x05r\x03\x18\x80\x08H\x03R\x07logoUrl\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_slugB\x0b\n\t_logo_urlJ\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\"\xbf\x04\n\x16GetOrganizationRequest\x12\x80\x02\n\x02id\x18\x01 \x01(\tB\xed\x01\x92\x41\xe0\x01\x32\xc6\x01Unique Scalekit-generated identifier for an organization. Use this with the GetOrganization endpoint. Do not pass this parameter when calling GetOrganizationByExternalId \xe2\x80\x94 use external_id instead.J\x15\"org_121312434123312\"\xbaH\x06r\x04\x10\x01\x18 H\x00R\x02id\x12\x93\x02\n\x0b\x65xternal_id\x18\x02 \x01(\tB\xef\x01\x92\x41\xd5\x01\x32\xb8\x01Unique identifier that links an organization to your app\'s tenant. Use this with the GetOrganizationByExternalId endpoint. Only one of id or external_id should be provided per request.J\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\xa1R\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\xca\x07\n\x1bGetOrganizationByExternalId\x12\x31.scalekit.v1.organizations.GetOrganizationRequest\x1a\x32.scalekit.v1.organizations.GetOrganizationResponse\"\xc3\x06\x92\x41\xf1\x05\n\rOrganizations\x12\'Get organization details by external Id\x1a\xd3\x02Retrieves organization details by external ID, including name, region, metadata, and settings. Only provide external_id in the path. If the id query parameter is also supplied, it silently takes precedence over external_id due to protobuf oneof semantics, which causes the request to fail with a 400 Bad Request (\'ExternalId is required\').J\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) @@ -55,7 +55,9 @@ _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['_CREATEORGANIZATION'].fields_by_name['slug']._serialized_options = b'\222A\242\0022\275\001Slug for dynamic redirect URI resolution. A single DNS label (e.g. acme) or hostname (e.g. oauth.pstmn.io). Lowercase alphanumeric, hyphens, and dots. Max 253 chars. Unique per environment.J\006\"acme\"x\375\001\200\001\001\212\001Q^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$\272HZrX\020\001\030\375\0012Q^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$' + _globals['_CREATEORGANIZATION'].fields_by_name['logo_url']._loaded_options = None + _globals['_CREATEORGANIZATION'].fields_by_name['logo_url']._serialized_options = b'\222A\237\0012_HTTPS URL of the organization\'s logo image. Maximum 1024 characters. Must use the https scheme.J\'\"https://cdn.example.com/acme-logo.png\"x\200\010\212\001\t^https://\242\002\003uri\340A\001\272H\005r\003\030\200\010' _globals['_ORGANIZATION_METADATAENTRY']._loaded_options = None _globals['_ORGANIZATION_METADATAENTRY']._serialized_options = b'8\001' _globals['_ORGANIZATION'].fields_by_name['id']._loaded_options = None @@ -73,7 +75,9 @@ _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['_ORGANIZATION'].fields_by_name['slug']._serialized_options = b'\222A\242\0022\275\001Slug for dynamic redirect URI resolution. A single DNS label (e.g. acme) or hostname (e.g. oauth.pstmn.io). Lowercase alphanumeric, hyphens, and dots. Max 253 chars. Unique per environment.J\006\"acme\"x\375\001\200\001\001\212\001Q^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$' + _globals['_ORGANIZATION'].fields_by_name['logo_url']._loaded_options = None + _globals['_ORGANIZATION'].fields_by_name['logo_url']._serialized_options = b'\222A\237\0012_HTTPS URL of the organization\'s logo image. Maximum 1024 characters. Must use the https scheme.J\'\"https://cdn.example.com/acme-logo.png\"x\200\010\212\001\t^https://\242\002\003uri\340A\001\272H\005r\003\030\200\010' _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 @@ -89,13 +93,15 @@ _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['_UPDATEORGANIZATION'].fields_by_name['slug']._serialized_options = b'\222A\246\0022\301\001Slug for dynamic redirect URI resolution. A single DNS label (e.g. acme) or hostname (e.g. oauth.pstmn.io). Lowercase alphanumeric, hyphens, and dots. Max 253 chars. Send empty string to clear.J\006\"acme\"x\375\001\212\001T^$|^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$\272H[rY\030\375\0012T^$|^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$' + _globals['_UPDATEORGANIZATION'].fields_by_name['logo_url']._loaded_options = None + _globals['_UPDATEORGANIZATION'].fields_by_name['logo_url']._serialized_options = b'\222A\237\0012_HTTPS URL of the organization\'s logo image. Maximum 1024 characters. Must use the https scheme.J\'\"https://cdn.example.com/acme-logo.png\"x\200\010\212\001\t^https://\242\002\003uri\340A\001\272H\005r\003\030\200\010' _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 - _globals['_GETORGANIZATIONREQUEST'].fields_by_name['id']._serialized_options = b'\222Af2MUnique scalekit-generated identifier that uniquely references an organizationJ\025\"org_121312434123312\"\272H\006r\004\020\001\030 ' + _globals['_GETORGANIZATIONREQUEST'].fields_by_name['id']._serialized_options = b'\222A\340\0012\306\001Unique Scalekit-generated identifier for an organization. Use this with the GetOrganization endpoint. Do not pass this parameter when calling GetOrganizationByExternalId \342\200\224 use external_id instead.J\025\"org_121312434123312\"\272H\006r\004\020\001\030 ' _globals['_GETORGANIZATIONREQUEST'].fields_by_name['external_id']._loaded_options = None - _globals['_GETORGANIZATIONREQUEST'].fields_by_name['external_id']._serialized_options = b'\222A~2bUnique identifier that links an Organization Object to your app\'s tenant, stored as an External IDJ\030\"tenant_123123123123123\"\272H\004r\002\020\001\372\322\344\223\002\t\022\007PREVIEW' + _globals['_GETORGANIZATIONREQUEST'].fields_by_name['external_id']._serialized_options = b'\222A\325\0012\270\001Unique identifier that links an organization to your app\'s tenant. Use this with the GetOrganizationByExternalId endpoint. Only one of id or external_id should be provided per request.J\030\"tenant_123123123123123\"\272H\004r\002\020\001\372\322\344\223\002\t\022\007PREVIEW' _globals['_GETORGANIZATIONRESPONSE'].fields_by_name['organization']._loaded_options = None _globals['_GETORGANIZATIONRESPONSE'].fields_by_name['organization']._serialized_options = b'\222A 2\036The newly created organization' _globals['_LISTORGANIZATIONSREQUEST'].fields_by_name['page_size']._loaded_options = None @@ -243,7 +249,7 @@ _globals['_ORGANIZATIONSERVICE'].methods_by_name['GetOrganization']._loaded_options = None _globals['_ORGANIZATIONSERVICE'].methods_by_name['GetOrganization']._serialized_options = b'\222A\243\002\n\rOrganizations\022\030Get organization details\032]Retrieves organization details by Scalekit ID, including name, region, metadata, and settingsJ\230\001\n\003200\022\220\001\nVReturns the complete organization object with ID, display name, settings, and metadata\0226\n4\0322.scalekit.v1.organizations.GetOrganizationResponse\202\265\030\026\n\022organizations_read\030t\202\323\344\223\002\034\022\032/api/v1/organizations/{id}' _globals['_ORGANIZATIONSERVICE'].methods_by_name['GetOrganizationByExternalId']._loaded_options = None - _globals['_ORGANIZATIONSERVICE'].methods_by_name['GetOrganizationByExternalId']._serialized_options = b'\222A\372\003\n\rOrganizations\022\'Get organization details by external Id\032]Retrieves organization details by External ID, including name, region, metadata, and settingsJ\244\001\n\003200\022\234\001\nbReturns the complete organization object with ID, display name, settings, external ID and metadata\0226\n4\0322.scalekit.v1.organizations.GetOrganizationResponseJa\n\003400\022Z\nXInvalid request - external ID is empty or the caller\'s organization claim does not matchJW\n\003404\022P\nNOrganization not found - no organization exists with the specified external ID\202\265\030\026\n\022organizations_read\030\004\202\323\344\223\002.\022,/api/v1/organizations:external/{external_id}' + _globals['_ORGANIZATIONSERVICE'].methods_by_name['GetOrganizationByExternalId']._serialized_options = b'\222A\361\005\n\rOrganizations\022\'Get organization details by external Id\032\323\002Retrieves organization details by external ID, including name, region, metadata, and settings. Only provide external_id in the path. If the id query parameter is also supplied, it silently takes precedence over external_id due to protobuf oneof semantics, which causes the request to fail with a 400 Bad Request (\'ExternalId is required\').J\244\001\n\003200\022\234\001\nbReturns the complete organization object with ID, display name, settings, external ID and metadata\0226\n4\0322.scalekit.v1.organizations.GetOrganizationResponseJa\n\003400\022Z\nXInvalid request - external ID is empty or the caller\'s organization claim does not matchJW\n\003404\022P\nNOrganization not found - no organization exists with the specified external ID\202\265\030\026\n\022organizations_read\030\004\202\323\344\223\002.\022,/api/v1/organizations:external/{external_id}' _globals['_ORGANIZATIONSERVICE'].methods_by_name['ListOrganization']._loaded_options = None _globals['_ORGANIZATIONSERVICE'].methods_by_name['ListOrganization']._serialized_options = b'\222A\233\010\n\rOrganizations\022\022List organizations\032\240\001Retrieve 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\003200\022l\n0Successfully retrieved the list of organizations\0228\n6\0324.scalekit.v1.organizations.ListOrganizationsResponseJ\033\n\003400\022\024\n\022Invalid page tokenj\300\005\n\rx-codeSamples\022\256\0052\253\005\n\227\001*\224\001\n\026\n\005label\022\r\032\013Node.js SDK\n\024\n\004lang\022\014\032\njavascript\nd\n\006source\022Z\032Xconst organizations = await scalekit.organization.listOrganization({\n pageSize: 10,\n});\n\300\001*\275\001\n\025\n\005label\022\014\032\nPython SDK\n\020\n\004lang\022\010\032\006python\n\221\001\n\006source\022\206\001\032\203\001options = ListOrganizationOptions()\noptions.page_size = 10\n\norganizations = sc.organization.list_organizations(\n options=options\n)\n\257\001*\254\001\n\021\n\005label\022\010\032\006Go SDK\n\014\n\004lang\022\004\032\002go\n\210\001\n\006source\022~\032|organizations, err := sc.Organization.ListOrganizations(\n ctx,\n &scalekit.ListOrganizationOptions{\n PageSize: 10,\n }\n)\n\231\001*\226\001\n\023\n\005label\022\n\032\010Java SDK\n\016\n\004lang\022\006\032\004java\no\n\006source\022e\032cListOrganizationsResponse organizations = scalekitClient.organizations().listOrganizations(10, \"\");\202\265\030\002\030D\202\323\344\223\002\027\022\025/api/v1/organizations' _globals['_ORGANIZATIONSERVICE'].methods_by_name['SearchOrganization']._loaded_options = None @@ -270,92 +276,92 @@ _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=20052 + _globals['_FEATURE']._serialized_end=20134 + _globals['_SESSIONPOLICYTYPE']._serialized_start=20136 + _globals['_SESSIONPOLICYTYPE']._serialized_end=20221 _globals['_CREATEORGANIZATIONREQUEST']._serialized_start=533 _globals['_CREATEORGANIZATIONREQUEST']._serialized_end=708 _globals['_CREATEORGANIZATIONRESPONSE']._serialized_start=711 _globals['_CREATEORGANIZATIONRESPONSE']._serialized_end=896 _globals['_CREATEORGANIZATION']._serialized_start=899 - _globals['_CREATEORGANIZATION']._serialized_end=1915 - _globals['_CREATEORGANIZATION_METADATAENTRY']._serialized_start=1831 - _globals['_CREATEORGANIZATION_METADATAENTRY']._serialized_end=1890 - _globals['_ORGANIZATION']._serialized_start=1918 - _globals['_ORGANIZATION']._serialized_end=3318 - _globals['_ORGANIZATION_METADATAENTRY']._serialized_start=1831 - _globals['_ORGANIZATION_METADATAENTRY']._serialized_end=1890 - _globals['_UPDATEORGANIZATIONREQUEST']._serialized_start=3321 - _globals['_UPDATEORGANIZATIONREQUEST']._serialized_end=3801 - _globals['_UPDATEORGANIZATION']._serialized_start=3804 - _globals['_UPDATEORGANIZATION']._serialized_end=4835 - _globals['_UPDATEORGANIZATION_METADATAENTRY']._serialized_start=1831 - _globals['_UPDATEORGANIZATION_METADATAENTRY']._serialized_end=1890 - _globals['_UPDATEORGANIZATIONRESPONSE']._serialized_start=4838 - _globals['_UPDATEORGANIZATIONRESPONSE']._serialized_end=4978 - _globals['_GETORGANIZATIONREQUEST']._serialized_start=4981 - _globals['_GETORGANIZATIONREQUEST']._serialized_end=5344 - _globals['_GETORGANIZATIONRESPONSE']._serialized_start=5347 - _globals['_GETORGANIZATIONRESPONSE']._serialized_end=5486 - _globals['_LISTORGANIZATIONSREQUEST']._serialized_start=5489 - _globals['_LISTORGANIZATIONSREQUEST']._serialized_end=6225 - _globals['_LISTORGANIZATIONSRESPONSE']._serialized_start=6228 - _globals['_LISTORGANIZATIONSRESPONSE']._serialized_end=6776 - _globals['_SEARCHORGANIZATIONSREQUEST']._serialized_start=6779 - _globals['_SEARCHORGANIZATIONSREQUEST']._serialized_end=7458 - _globals['_SEARCHORGANIZATIONSRESPONSE']._serialized_start=7461 - _globals['_SEARCHORGANIZATIONSRESPONSE']._serialized_end=7680 - _globals['_DELETEORGANIZATIONREQUEST']._serialized_start=7683 - _globals['_DELETEORGANIZATIONREQUEST']._serialized_end=7984 - _globals['_GENERATEPORTALLINKREQUEST']._serialized_start=7987 - _globals['_GENERATEPORTALLINKREQUEST']._serialized_end=8578 - _globals['_GETPORTALLINKREQUEST']._serialized_start=8580 - _globals['_GETPORTALLINKREQUEST']._serialized_end=8682 - _globals['_DELETEPORTALLINKREQUEST']._serialized_start=8684 - _globals['_DELETEPORTALLINKREQUEST']._serialized_end=8789 - _globals['_DELETEPORTALLINKBYIDREQUEST']._serialized_start=8792 - _globals['_DELETEPORTALLINKBYIDREQUEST']._serialized_end=8982 - _globals['_LINK']._serialized_start=8985 - _globals['_LINK']._serialized_end=9422 - _globals['_GENERATEPORTALLINKRESPONSE']._serialized_start=9425 - _globals['_GENERATEPORTALLINKRESPONSE']._serialized_end=9703 - _globals['_GETPORTALLINKSRESPONSE']._serialized_start=9705 - _globals['_GETPORTALLINKSRESPONSE']._serialized_end=9809 - _globals['_UPDATEORGANIZATIONSETTINGSREQUEST']._serialized_start=9812 - _globals['_UPDATEORGANIZATIONSETTINGSREQUEST']._serialized_end=10340 - _globals['_ORGANIZATIONSESSIONPOLICYSETTINGS']._serialized_start=10343 - _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=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['_CREATEORGANIZATION']._serialized_end=2219 + _globals['_CREATEORGANIZATION_METADATAENTRY']._serialized_start=2122 + _globals['_CREATEORGANIZATION_METADATAENTRY']._serialized_end=2181 + _globals['_ORGANIZATION']._serialized_start=2222 + _globals['_ORGANIZATION']._serialized_end=3904 + _globals['_ORGANIZATION_METADATAENTRY']._serialized_start=2122 + _globals['_ORGANIZATION_METADATAENTRY']._serialized_end=2181 + _globals['_UPDATEORGANIZATIONREQUEST']._serialized_start=3907 + _globals['_UPDATEORGANIZATIONREQUEST']._serialized_end=4387 + _globals['_UPDATEORGANIZATION']._serialized_start=4390 + _globals['_UPDATEORGANIZATION']._serialized_end=5780 + _globals['_UPDATEORGANIZATION_METADATAENTRY']._serialized_start=2122 + _globals['_UPDATEORGANIZATION_METADATAENTRY']._serialized_end=2181 + _globals['_UPDATEORGANIZATIONRESPONSE']._serialized_start=5783 + _globals['_UPDATEORGANIZATIONRESPONSE']._serialized_end=5923 + _globals['_GETORGANIZATIONREQUEST']._serialized_start=5926 + _globals['_GETORGANIZATIONREQUEST']._serialized_end=6501 + _globals['_GETORGANIZATIONRESPONSE']._serialized_start=6504 + _globals['_GETORGANIZATIONRESPONSE']._serialized_end=6643 + _globals['_LISTORGANIZATIONSREQUEST']._serialized_start=6646 + _globals['_LISTORGANIZATIONSREQUEST']._serialized_end=7382 + _globals['_LISTORGANIZATIONSRESPONSE']._serialized_start=7385 + _globals['_LISTORGANIZATIONSRESPONSE']._serialized_end=7933 + _globals['_SEARCHORGANIZATIONSREQUEST']._serialized_start=7936 + _globals['_SEARCHORGANIZATIONSREQUEST']._serialized_end=8615 + _globals['_SEARCHORGANIZATIONSRESPONSE']._serialized_start=8618 + _globals['_SEARCHORGANIZATIONSRESPONSE']._serialized_end=8837 + _globals['_DELETEORGANIZATIONREQUEST']._serialized_start=8840 + _globals['_DELETEORGANIZATIONREQUEST']._serialized_end=9141 + _globals['_GENERATEPORTALLINKREQUEST']._serialized_start=9144 + _globals['_GENERATEPORTALLINKREQUEST']._serialized_end=9735 + _globals['_GETPORTALLINKREQUEST']._serialized_start=9737 + _globals['_GETPORTALLINKREQUEST']._serialized_end=9839 + _globals['_DELETEPORTALLINKREQUEST']._serialized_start=9841 + _globals['_DELETEPORTALLINKREQUEST']._serialized_end=9946 + _globals['_DELETEPORTALLINKBYIDREQUEST']._serialized_start=9949 + _globals['_DELETEPORTALLINKBYIDREQUEST']._serialized_end=10139 + _globals['_LINK']._serialized_start=10142 + _globals['_LINK']._serialized_end=10579 + _globals['_GENERATEPORTALLINKRESPONSE']._serialized_start=10582 + _globals['_GENERATEPORTALLINKRESPONSE']._serialized_end=10860 + _globals['_GETPORTALLINKSRESPONSE']._serialized_start=10862 + _globals['_GETPORTALLINKSRESPONSE']._serialized_end=10966 + _globals['_UPDATEORGANIZATIONSETTINGSREQUEST']._serialized_start=10969 + _globals['_UPDATEORGANIZATIONSETTINGSREQUEST']._serialized_end=11497 + _globals['_ORGANIZATIONSESSIONPOLICYSETTINGS']._serialized_start=11500 + _globals['_ORGANIZATIONSESSIONPOLICYSETTINGS']._serialized_end=13053 + _globals['_GETORGANIZATIONSESSIONPOLICYREQUEST']._serialized_start=13056 + _globals['_GETORGANIZATIONSESSIONPOLICYREQUEST']._serialized_end=13268 + _globals['_GETORGANIZATIONSESSIONPOLICYRESPONSE']._serialized_start=13271 + _globals['_GETORGANIZATIONSESSIONPOLICYRESPONSE']._serialized_end=13443 + _globals['_UPDATEORGANIZATIONSESSIONPOLICYREQUEST']._serialized_start=13446 + _globals['_UPDATEORGANIZATIONSESSIONPOLICYREQUEST']._serialized_end=15037 + _globals['_UPDATEORGANIZATIONSESSIONPOLICYRESPONSE']._serialized_start=15040 + _globals['_UPDATEORGANIZATIONSESSIONPOLICYRESPONSE']._serialized_end=15223 + _globals['_GETAPPLICATIONSESSIONPOLICYREQUEST']._serialized_start=15226 + _globals['_GETAPPLICATIONSESSIONPOLICYREQUEST']._serialized_end=15396 + _globals['_APPLICATIONSESSIONPOLICYSETTINGS']._serialized_start=15399 + _globals['_APPLICATIONSESSIONPOLICYSETTINGS']._serialized_end=16600 + _globals['_GETAPPLICATIONSESSIONPOLICYRESPONSE']._serialized_start=16603 + _globals['_GETAPPLICATIONSESSIONPOLICYRESPONSE']._serialized_end=16812 + _globals['_ORGANIZATIONUSERMANAGEMENTSETTINGS']._serialized_start=16815 + _globals['_ORGANIZATIONUSERMANAGEMENTSETTINGS']._serialized_end=17163 + _globals['_ORGANIZATIONSESSIONSETTINGS']._serialized_start=17166 + _globals['_ORGANIZATIONSESSIONSETTINGS']._serialized_end=18236 + _globals['_ORGANIZATIONSETTINGS']._serialized_start=18239 + _globals['_ORGANIZATIONSETTINGS']._serialized_end=18765 + _globals['_ORGANIZATIONSETTINGSFEATURE']._serialized_start=18768 + _globals['_ORGANIZATIONSETTINGSFEATURE']._serialized_end=19294 + _globals['_UPSERTUSERMANAGEMENTSETTINGSREQUEST']._serialized_start=19297 + _globals['_UPSERTUSERMANAGEMENTSETTINGSREQUEST']._serialized_end=19575 + _globals['_UPSERTUSERMANAGEMENTSETTINGSRESPONSE']._serialized_start=19578 + _globals['_UPSERTUSERMANAGEMENTSETTINGSRESPONSE']._serialized_end=19734 + _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSREQUEST']._serialized_start=19737 + _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSREQUEST']._serialized_end=19872 + _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSRESPONSE']._serialized_start=19875 + _globals['_GETORGANIZATIONUSERMANAGEMENTSETTINGSRESPONSE']._serialized_end=20050 + _globals['_ORGANIZATIONSERVICE']._serialized_start=20224 + _globals['_ORGANIZATIONSERVICE']._serialized_end=30753 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/organizations/organizations_pb2.pyi b/scalekit/v1/organizations/organizations_pb2.pyi index 261c537..41a7f9f 100644 --- a/scalekit/v1/organizations/organizations_pb2.pyi +++ b/scalekit/v1/organizations/organizations_pb2.pyi @@ -53,7 +53,7 @@ class CreateOrganizationResponse(_message.Message): def __init__(self, organization: _Optional[_Union[Organization, _Mapping]] = ...) -> None: ... class CreateOrganization(_message.Message): - __slots__ = ("display_name", "region_code", "external_id", "metadata", "slug") + __slots__ = ("display_name", "region_code", "external_id", "metadata", "slug", "logo_url") class MetadataEntry(_message.Message): __slots__ = ("key", "value") KEY_FIELD_NUMBER: _ClassVar[int] @@ -66,15 +66,17 @@ class CreateOrganization(_message.Message): EXTERNAL_ID_FIELD_NUMBER: _ClassVar[int] METADATA_FIELD_NUMBER: _ClassVar[int] SLUG_FIELD_NUMBER: _ClassVar[int] + LOGO_URL_FIELD_NUMBER: _ClassVar[int] display_name: str region_code: _commons_pb2.RegionCode external_id: str metadata: _containers.ScalarMap[str, str] 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: ... + logo_url: 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] = ..., logo_url: _Optional[str] = ...) -> None: ... class Organization(_message.Message): - __slots__ = ("id", "create_time", "update_time", "display_name", "region_code", "external_id", "metadata", "settings", "slug") + __slots__ = ("id", "create_time", "update_time", "display_name", "region_code", "external_id", "metadata", "settings", "slug", "logo_url") class MetadataEntry(_message.Message): __slots__ = ("key", "value") KEY_FIELD_NUMBER: _ClassVar[int] @@ -91,6 +93,7 @@ class Organization(_message.Message): METADATA_FIELD_NUMBER: _ClassVar[int] SETTINGS_FIELD_NUMBER: _ClassVar[int] SLUG_FIELD_NUMBER: _ClassVar[int] + LOGO_URL_FIELD_NUMBER: _ClassVar[int] id: str create_time: _timestamp_pb2.Timestamp update_time: _timestamp_pb2.Timestamp @@ -100,7 +103,8 @@ class Organization(_message.Message): metadata: _containers.ScalarMap[str, str] settings: OrganizationSettings 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: ... + logo_url: 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] = ..., logo_url: _Optional[str] = ...) -> None: ... class UpdateOrganizationRequest(_message.Message): __slots__ = ("id", "external_id", "organization", "update_mask") @@ -115,7 +119,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", "slug") + __slots__ = ("display_name", "external_id", "metadata", "slug", "logo_url") class MetadataEntry(_message.Message): __slots__ = ("key", "value") KEY_FIELD_NUMBER: _ClassVar[int] @@ -127,11 +131,13 @@ class UpdateOrganization(_message.Message): EXTERNAL_ID_FIELD_NUMBER: _ClassVar[int] METADATA_FIELD_NUMBER: _ClassVar[int] SLUG_FIELD_NUMBER: _ClassVar[int] + LOGO_URL_FIELD_NUMBER: _ClassVar[int] display_name: str external_id: str metadata: _containers.ScalarMap[str, str] slug: str - def __init__(self, display_name: _Optional[str] = ..., external_id: _Optional[str] = ..., metadata: _Optional[_Mapping[str, str]] = ..., slug: _Optional[str] = ...) -> None: ... + logo_url: str + def __init__(self, display_name: _Optional[str] = ..., external_id: _Optional[str] = ..., metadata: _Optional[_Mapping[str, str]] = ..., slug: _Optional[str] = ..., logo_url: _Optional[str] = ...) -> None: ... class UpdateOrganizationResponse(_message.Message): __slots__ = ("organization",) diff --git a/scalekit/v1/roles/roles_pb2.py b/scalekit/v1/roles/roles_pb2.py index f0dc7e0..e38932c 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\xa2\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) @@ -273,9 +273,9 @@ _globals['_ROLESSERVICE'].methods_by_name['ListDependentRoles']._loaded_options = None _globals['_ROLESSERVICE'].methods_by_name['ListDependentRoles']._serialized_options = b'\222A\372\006\n\005Roles\022\024List dependent roles\032\374\004Retrieves all roles that directly extend the specified base role through inheritance. Use this endpoint to understand the role hierarchy and identify which roles inherit permissions from a particular base role. Provide the base role name as a path parameter, and the response will include all dependent roles with their metadata and permission information. This operation is useful for auditing role inheritance relationships, understanding the impact of changes to base roles, or managing role hierarchies effectively. Returns a list of dependent role objects including their names, display names, descriptions, and permission details.J\333\001\n\003200\022\323\001\n\235\001Successfully retrieved dependent roles. Returns a list of all roles that extend the specified base role, including their metadata and permission information.\0221\n/\032-.scalekit.v1.roles.ListDependentRolesResponse\202\265\030\002\030d\202\323\344\223\002&\022$/api/v1/roles/{role_name}/dependents' _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['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\372\322\344\223\002\t\022\007PREVIEW\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=43428 # @@protoc_insertion_point(module_scope) diff --git a/scalekit/v1/tools/tools_pb2.py b/scalekit/v1/tools/tools_pb2.py index 4344b6a..1244f88 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\"\xe9\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\xc3\x02\n\tconnector\x18\x06 \x01(\tB\x9f\x02\x92\x41\xff\x01\x32\xf0\x01\x43onnector name (e.g., \'My Gmail\'). Alphanumeric characters, spaces, hyphens, underscores, and colons are allowed. 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\x19r\x17\x18\x90\x03\x32\x12^[a-zA-Z0-9_: -]*$H\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\"\xc8\x0f\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\xd0\x02\n\tconnector\x18\x05 \x01(\tB\xac\x02\x92\x41\x8c\x02\x32\xf5\x01Optional. The name of the connector/provider (e.g., \'Google Workspace\', \'Slack\', \'Notion\'). Alphanumeric characters, spaces, hyphens, underscores, and colons are allowed. Use this in combination with identifier to identify the connected account.J\x12\"Google Workspace\"\xbaH\x19r\x17\x18\x90\x03\x32\x12^[a-zA-Z0-9_: -]*$H\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 Date: Thu, 21 May 2026 20:34:42 +0530 Subject: [PATCH 2/9] test: add organization slug and logo_url field coverage Tests create and update paths for the new slug and logo_url proto fields on CreateOrganization and UpdateOrganization. logo_url tests skip gracefully when the backend has not yet deployed support for that field. --- tests/test_organization_slug_logo.py | 92 ++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 tests/test_organization_slug_logo.py diff --git a/tests/test_organization_slug_logo.py b/tests/test_organization_slug_logo.py new file mode 100644 index 0000000..0aa9df9 --- /dev/null +++ b/tests/test_organization_slug_logo.py @@ -0,0 +1,92 @@ +from faker import Faker + +from basetest import BaseTest +from scalekit.common.exceptions import ScalekitBadRequestException +from scalekit.v1.organizations.organizations_pb2 import CreateOrganization, UpdateOrganization + + +class TestOrganizationSlugLogo(BaseTest): + """Test cases for organization slug and logo_url fields.""" + + 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_create_with_logo_url(self): + """Creating an org with logo_url should persist the value.""" + logo_url = 'https://cdn.acmecorp.com/logo.png' + organization = CreateOrganization( + display_name=Faker().company(), + external_id=Faker().uuid4(), + logo_url=logo_url, + ) + try: + response = self.scalekit_client.organization.create_organization(organization=organization) + except ScalekitBadRequestException as e: + if 'logo_url' in str(e): + self.skipTest(f"logo_url not yet supported by server: {e}") + raise + self.assertEqual(response[1].code().name, "OK") + self.assertIsNotNone(response[0]) + self.org_id = response[0].organization.id + self.assertEqual(response[0].organization.logo_url, logo_url) + + def test_create_with_slug(self): + """Creating an org with a slug should persist the value.""" + slug = 'app.acmecorp.com' + organization = CreateOrganization( + display_name=Faker().company(), + external_id=Faker().uuid4(), + slug=slug, + ) + response = self.scalekit_client.organization.create_organization(organization=organization) + self.assertEqual(response[1].code().name, "OK") + self.assertIsNotNone(response[0]) + self.org_id = response[0].organization.id + self.assertEqual(response[0].organization.slug, slug) + + def test_update_logo_url(self): + """Updating an existing org's logo_url should persist the new value.""" + org_id = self._create_org() + + logo_url = 'https://cdn.acmecorp.com/logo.png' + update_organization = UpdateOrganization(logo_url=logo_url) + try: + response = self.scalekit_client.organization.update_organization( + organization_id=org_id, + organization=update_organization, + ) + except ScalekitBadRequestException as e: + if 'logo_url' in str(e): + self.skipTest(f"logo_url not yet supported by server: {e}") + raise + self.assertEqual(response[1].code().name, "OK") + self.assertIsNotNone(response[0]) + self.assertEqual(response[0].organization.id, org_id) + self.assertEqual(response[0].organization.logo_url, logo_url) + + def test_update_slug_and_metadata(self): + """Updating an existing org's slug and metadata should persist both values.""" + org_id = self._create_org() + + slug = 'app.acmecorp.com' + metadata = {'custom_domain': 'app.acmecorp.com'} + update_organization = UpdateOrganization(slug=slug, metadata=metadata) + response = self.scalekit_client.organization.update_organization( + organization_id=org_id, + organization=update_organization, + ) + self.assertEqual(response[1].code().name, "OK") + self.assertIsNotNone(response[0]) + self.assertEqual(response[0].organization.id, org_id) + self.assertEqual(response[0].organization.slug, slug) + self.assertEqual(response[0].organization.metadata, metadata) + + def tearDown(self): + if self.org_id: + self.scalekit_client.organization.delete_organization(organization_id=self.org_id) From c0701e301978ac4ccc31a0fe5317c654eebada68 Mon Sep 17 00:00:00 2001 From: Srinivas Karre Date: Thu, 21 May 2026 20:44:39 +0530 Subject: [PATCH 3/9] test: use logo.debounce.com for logo_url test fixture --- tests/test_organization_slug_logo.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_organization_slug_logo.py b/tests/test_organization_slug_logo.py index 0aa9df9..8ac1ddd 100644 --- a/tests/test_organization_slug_logo.py +++ b/tests/test_organization_slug_logo.py @@ -19,7 +19,7 @@ def _create_org(self): def test_create_with_logo_url(self): """Creating an org with logo_url should persist the value.""" - logo_url = 'https://cdn.acmecorp.com/logo.png' + logo_url = 'https://logo.debounce.com/microsoft.com' organization = CreateOrganization( display_name=Faker().company(), external_id=Faker().uuid4(), @@ -54,7 +54,7 @@ def test_update_logo_url(self): """Updating an existing org's logo_url should persist the new value.""" org_id = self._create_org() - logo_url = 'https://cdn.acmecorp.com/logo.png' + logo_url = 'https://logo.debounce.com/microsoft.com' update_organization = UpdateOrganization(logo_url=logo_url) try: response = self.scalekit_client.organization.update_organization( From f45eb8df2cb1d9b0a2a413fb67cbd2c5528a8ee6 Mon Sep 17 00:00:00 2001 From: Srinivas Karre Date: Thu, 21 May 2026 20:52:36 +0530 Subject: [PATCH 4/9] build: use HTTPS proto repo URL for CI compatibility --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 4012543..99f67a3 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,7 @@ VENV_DIR := .venv VENV_PYTHON := $(VENV_DIR)/bin/python VENV_PIP := $(VENV_PYTHON) -m pip -PROTO_REPO_URL := git@github.com:scalekit-inc/scalekit.git +PROTO_REPO_URL := https://github.com/scalekit-inc/scalekit.git PROTO_REF ?= v0.1.123.0 PROTO_SUBDIR := proto LOCAL_PROTO_REPO ?= ../scalekit From 3e67322ed741c7dc63c8b0d5ffa0aaeee13467e7 Mon Sep 17 00:00:00 2001 From: Srinivas Karre Date: Thu, 21 May 2026 22:14:55 +0530 Subject: [PATCH 5/9] test: use auth.megasoft.com as slug fixture --- tests/test_organization_slug_logo.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_organization_slug_logo.py b/tests/test_organization_slug_logo.py index 8ac1ddd..a18071d 100644 --- a/tests/test_organization_slug_logo.py +++ b/tests/test_organization_slug_logo.py @@ -38,7 +38,7 @@ def test_create_with_logo_url(self): def test_create_with_slug(self): """Creating an org with a slug should persist the value.""" - slug = 'app.acmecorp.com' + slug = 'auth.megasoft.com' organization = CreateOrganization( display_name=Faker().company(), external_id=Faker().uuid4(), @@ -74,8 +74,8 @@ def test_update_slug_and_metadata(self): """Updating an existing org's slug and metadata should persist both values.""" org_id = self._create_org() - slug = 'app.acmecorp.com' - metadata = {'custom_domain': 'app.acmecorp.com'} + slug = 'auth.megasoft.com' + metadata = {'custom_domain': 'auth.megasoft.com'} update_organization = UpdateOrganization(slug=slug, metadata=metadata) response = self.scalekit_client.organization.update_organization( organization_id=org_id, From eb7201e12fb408b6e8a8a276a324c1feaa585d14 Mon Sep 17 00:00:00 2001 From: Srinivas Karre Date: Tue, 26 May 2026 08:51:30 +0530 Subject: [PATCH 6/9] test: remove feature-flag skip logic and add read-back assertions Removed feature-flag skip blocks that checked for logo_url support and simplified error handling. Added get_organization read-back assertions in test_update_logo_url and test_update_slug_and_metadata to verify persistence. --- tests/test_organization_slug_logo.py | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/tests/test_organization_slug_logo.py b/tests/test_organization_slug_logo.py index a18071d..df6c055 100644 --- a/tests/test_organization_slug_logo.py +++ b/tests/test_organization_slug_logo.py @@ -1,7 +1,6 @@ from faker import Faker from basetest import BaseTest -from scalekit.common.exceptions import ScalekitBadRequestException from scalekit.v1.organizations.organizations_pb2 import CreateOrganization, UpdateOrganization @@ -25,12 +24,7 @@ def test_create_with_logo_url(self): external_id=Faker().uuid4(), logo_url=logo_url, ) - try: - response = self.scalekit_client.organization.create_organization(organization=organization) - except ScalekitBadRequestException as e: - if 'logo_url' in str(e): - self.skipTest(f"logo_url not yet supported by server: {e}") - raise + response = self.scalekit_client.organization.create_organization(organization=organization) self.assertEqual(response[1].code().name, "OK") self.assertIsNotNone(response[0]) self.org_id = response[0].organization.id @@ -56,20 +50,18 @@ def test_update_logo_url(self): logo_url = 'https://logo.debounce.com/microsoft.com' update_organization = UpdateOrganization(logo_url=logo_url) - try: - response = self.scalekit_client.organization.update_organization( - organization_id=org_id, - organization=update_organization, - ) - except ScalekitBadRequestException as e: - if 'logo_url' in str(e): - self.skipTest(f"logo_url not yet supported by server: {e}") - raise + response = self.scalekit_client.organization.update_organization( + organization_id=org_id, + organization=update_organization, + ) self.assertEqual(response[1].code().name, "OK") self.assertIsNotNone(response[0]) self.assertEqual(response[0].organization.id, org_id) self.assertEqual(response[0].organization.logo_url, logo_url) + fetched = self.scalekit_client.organization.get_organization(organization_id=org_id) + self.assertEqual(fetched[0].organization.logo_url, logo_url) + def test_update_slug_and_metadata(self): """Updating an existing org's slug and metadata should persist both values.""" org_id = self._create_org() @@ -87,6 +79,10 @@ def test_update_slug_and_metadata(self): self.assertEqual(response[0].organization.slug, slug) self.assertEqual(response[0].organization.metadata, metadata) + fetched = self.scalekit_client.organization.get_organization(organization_id=org_id) + self.assertEqual(fetched[0].organization.slug, slug) + self.assertEqual(fetched[0].organization.metadata, metadata) + def tearDown(self): if self.org_id: self.scalekit_client.organization.delete_organization(organization_id=self.org_id) From a0d67764a522c658613e2b0801ad2a4075c27586 Mon Sep 17 00:00:00 2001 From: Srinivas Karre Date: Tue, 26 May 2026 10:42:50 +0530 Subject: [PATCH 7/9] Update logo URL to https://example.com/logo.png for consistency - Align test fixture with standardized test logo URL across SDKs --- tests/test_organization_slug_logo.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_organization_slug_logo.py b/tests/test_organization_slug_logo.py index df6c055..4587119 100644 --- a/tests/test_organization_slug_logo.py +++ b/tests/test_organization_slug_logo.py @@ -18,7 +18,7 @@ def _create_org(self): def test_create_with_logo_url(self): """Creating an org with logo_url should persist the value.""" - logo_url = 'https://logo.debounce.com/microsoft.com' + logo_url = 'https://example.com/logo.png' organization = CreateOrganization( display_name=Faker().company(), external_id=Faker().uuid4(), @@ -48,7 +48,7 @@ def test_update_logo_url(self): """Updating an existing org's logo_url should persist the new value.""" org_id = self._create_org() - logo_url = 'https://logo.debounce.com/microsoft.com' + logo_url = 'https://example.com/logo.png' update_organization = UpdateOrganization(logo_url=logo_url) response = self.scalekit_client.organization.update_organization( organization_id=org_id, From 5ba570f5a686b7c00ea4c70d9c31ef3b7e09ea26 Mon Sep 17 00:00:00 2001 From: Srinivas Karre Date: Tue, 26 May 2026 13:10:28 +0530 Subject: [PATCH 8/9] fix(test): use dynamic slugs and chain super().tearDown() for CI delay Replaces hardcoded 'auth.megasoft.com' slug with per-run UUID-based values to prevent collisions when tests are re-run. Chains super().tearDown() so BaseTest CI delay runs after each test for eventual-consistency safety. --- tests/test_organization_slug_logo.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/test_organization_slug_logo.py b/tests/test_organization_slug_logo.py index 4587119..131ca0d 100644 --- a/tests/test_organization_slug_logo.py +++ b/tests/test_organization_slug_logo.py @@ -32,7 +32,7 @@ def test_create_with_logo_url(self): def test_create_with_slug(self): """Creating an org with a slug should persist the value.""" - slug = 'auth.megasoft.com' + slug = f"acmecorp-{Faker().uuid4()[:8]}" organization = CreateOrganization( display_name=Faker().company(), external_id=Faker().uuid4(), @@ -66,8 +66,8 @@ def test_update_slug_and_metadata(self): """Updating an existing org's slug and metadata should persist both values.""" org_id = self._create_org() - slug = 'auth.megasoft.com' - metadata = {'custom_domain': 'auth.megasoft.com'} + slug = f"acmecorp-{Faker().uuid4()[:8]}" + metadata = {'custom_domain': slug} update_organization = UpdateOrganization(slug=slug, metadata=metadata) response = self.scalekit_client.organization.update_organization( organization_id=org_id, @@ -86,3 +86,4 @@ def test_update_slug_and_metadata(self): def tearDown(self): if self.org_id: self.scalekit_client.organization.delete_organization(organization_id=self.org_id) + super().tearDown() From c9a2b3e2c5f580818c491516f1e988bfa644d5e8 Mon Sep 17 00:00:00 2001 From: Srinivas Karre Date: Tue, 26 May 2026 19:04:59 +0530 Subject: [PATCH 9/9] build