diff --git a/.changeset/agent-db-scoped-grants.md b/.changeset/agent-db-scoped-grants.md new file mode 100644 index 000000000..c289e1b3c --- /dev/null +++ b/.changeset/agent-db-scoped-grants.md @@ -0,0 +1,6 @@ +--- +"livekit-api": patch +"livekit-protocol": patch +--- + +Scope agent database access to a thread or a database: `AgentThreadGrants` gains `sql`, the new `agentDatabase` claim (`AgentDatabaseGrants`, `with_agent_database_grants`) grants `read`, `write` and `delete` on listed databases plus project-wide `create` and `list`, and `AgentGrants.database_admin` is removed. diff --git a/livekit-api/livekit/api/__init__.py b/livekit-api/livekit/api/__init__.py index 78a18c32e..0e307fbdc 100644 --- a/livekit-api/livekit/api/__init__.py +++ b/livekit-api/livekit/api/__init__.py @@ -50,6 +50,7 @@ AgentGrants, AgentEndpointGrants, AgentThreadGrants, + AgentDatabaseGrants, VideoGrants, SIPGrants, AccessToken, @@ -71,6 +72,7 @@ "AgentGrants", "AgentEndpointGrants", "AgentThreadGrants", + "AgentDatabaseGrants", "VideoGrants", "SIPGrants", "AccessToken", diff --git a/livekit-api/livekit/api/access_token.py b/livekit-api/livekit/api/access_token.py index 19f772611..d0274f119 100644 --- a/livekit-api/livekit/api/access_token.py +++ b/livekit-api/livekit/api/access_token.py @@ -101,8 +101,6 @@ class AgentGrants: admin: bool = False # manage simulations and scenarios for evaluating agents simulation_admin: bool = False - # access the project's agent databases - database_admin: bool = False # manage the project's agent dispatch queue dispatch_admin: bool = False @@ -130,6 +128,21 @@ class AgentThreadGrants: write: bool = False read: bool = False delete: bool = False + # open a covered thread's database, whose id is the thread's + sql: bool = False + + +@dataclass +class AgentDatabaseGrants: + # databases that may be read, written and deleted + database_ids: Optional[List[str]] = None + read: bool = False + write: bool = False + delete: bool = False + # create databases in the project + create: bool = False + # list the project's databases + list: bool = False @dataclass @@ -145,6 +158,7 @@ class Claims: agent: Optional[AgentGrants] = None agent_endpoint: Optional[AgentEndpointGrants] = None agent_thread: Optional[AgentThreadGrants] = None + agent_database: Optional[AgentDatabaseGrants] = None attributes: Optional[dict[str, str]] = None sha256: Optional[str] = None room_preset: Optional[str] = None @@ -217,6 +231,10 @@ def with_agent_thread_grants(self, grants: AgentThreadGrants) -> "AccessToken": self.claims.agent_thread = grants return self + def with_agent_database_grants(self, grants: AgentDatabaseGrants) -> "AccessToken": + self.claims.agent_database = grants + return self + def with_identity(self, identity: str) -> "AccessToken": self.identity = identity return self @@ -322,6 +340,7 @@ def verify(self, token: str, *, verify_signature: bool = True) -> Claims: agent=_parse_grants(claims, "agent", AgentGrants), agent_endpoint=_parse_grants(claims, "agentEndpoint", AgentEndpointGrants), agent_thread=_parse_grants(claims, "agentThread", AgentThreadGrants), + agent_database=_parse_grants(claims, "agentDatabase", AgentDatabaseGrants), ) if claims.get("roomPreset"): diff --git a/livekit-protocol/livekit/protocol/agent.py b/livekit-protocol/livekit/protocol/agent.py index 1693c3ae4..94bcd44bb 100644 --- a/livekit-protocol/livekit/protocol/agent.py +++ b/livekit-protocol/livekit/protocol/agent.py @@ -26,7 +26,7 @@ from .logger_pb import options as logger_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13livekit_agent.proto\x12\x07livekit\x1a\x14livekit_models.proto\x1a\x14logger/options.proto\"\xe0\x03\n\x03Job\x12\n\n\x02id\x18\x01 \x01(\t\x12\"\n\x0b\x64ispatch_id\x18\t \x01(\tB\r\xbaP\ndispatchID\x12\x1e\n\x04type\x18\x02 \x01(\x0e\x32\x10.livekit.JobType\x12\x1b\n\x04room\x18\x03 \x01(\x0b\x32\r.livekit.Room\x12\x32\n\x0bparticipant\x18\x04 \x01(\x0b\x32\x18.livekit.ParticipantInfoH\x00\x88\x01\x01\x12\x15\n\tnamespace\x18\x05 \x01(\tB\x02\x18\x01\x12\x15\n\x08metadata\x18\x06 \x01(\tB\x03\xc0P\x01\x12\x12\n\nagent_name\x18\x07 \x01(\t\x12 \n\x05state\x18\x08 \x01(\x0b\x32\x11.livekit.JobState\x12\x18\n\x10\x65nable_recording\x18\n \x01(\x08\x12\x12\n\ndeployment\x18\x0b \x01(\t\x12\x35\n\nattributes\x18\x0c \x03(\x0b\x32\x1c.livekit.Job.AttributesEntryB\x03\xc0P\x01\x12\x18\n\x10\x65nable_redaction\x18\r \x01(\x08\x12\x12\n\ncreated_at\x18\x0e \x01(\x03\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x0e\n\x0c_participant\"\xa6\x02\n\x08JobState\x12\"\n\x06status\x18\x01 \x01(\x0e\x32\x12.livekit.JobStatus\x12\r\n\x05\x65rror\x18\x02 \x01(\t\x12\x12\n\nstarted_at\x18\x03 \x01(\x03\x12\x10\n\x08\x65nded_at\x18\x04 \x01(\x03\x12\x12\n\nupdated_at\x18\x05 \x01(\x03\x12\x1c\n\x14participant_identity\x18\x06 \x01(\t\x12\x1e\n\tworker_id\x18\x07 \x01(\tB\x0b\xbaP\x08workerID\x12\x1c\n\x08\x61gent_id\x18\x08 \x01(\tB\n\xbaP\x07\x61gentID\x12\'\n\x06reason\x18\t \x01(\x0e\x32\x17.livekit.JobStateReason\x12\x13\n\x0b\x61\x63\x63\x65pted_at\x18\n \x01(\x03\x12\x13\n\x0b\x61ssigned_at\x18\x0b \x01(\x03\"\xf8\x02\n\rWorkerMessage\x12\x32\n\x08register\x18\x01 \x01(\x0b\x32\x1e.livekit.RegisterWorkerRequestH\x00\x12\x35\n\x0c\x61vailability\x18\x02 \x01(\x0b\x32\x1d.livekit.AvailabilityResponseH\x00\x12\x34\n\rupdate_worker\x18\x03 \x01(\x0b\x32\x1b.livekit.UpdateWorkerStatusH\x00\x12.\n\nupdate_job\x18\x04 \x01(\x0b\x32\x18.livekit.UpdateJobStatusH\x00\x12#\n\x04ping\x18\x05 \x01(\x0b\x32\x13.livekit.WorkerPingH\x00\x12\x33\n\x0csimulate_job\x18\x06 \x01(\x0b\x32\x1b.livekit.SimulateJobRequestH\x00\x12\x31\n\x0bmigrate_job\x18\x07 \x01(\x0b\x32\x1a.livekit.MigrateJobRequestH\x00\x42\t\n\x07message\"\xb6\x02\n\rServerMessage\x12\x33\n\x08register\x18\x01 \x01(\x0b\x32\x1f.livekit.RegisterWorkerResponseH\x00\x12\x34\n\x0c\x61vailability\x18\x02 \x01(\x0b\x32\x1c.livekit.AvailabilityRequestH\x00\x12,\n\nassignment\x18\x03 \x01(\x0b\x32\x16.livekit.JobAssignmentH\x00\x12.\n\x0btermination\x18\x05 \x01(\x0b\x32\x17.livekit.JobTerminationH\x00\x12#\n\x04pong\x18\x04 \x01(\x0b\x32\x13.livekit.WorkerPongH\x00\x12,\n\x07go_away\x18\x06 \x01(\x0b\x32\x19.livekit.AgentHttp.GoAwayH\x00\x42\t\n\x07message\"\x80\x01\n\x12SimulateJobRequest\x12\x1e\n\x04type\x18\x01 \x01(\x0e\x32\x10.livekit.JobType\x12\x1b\n\x04room\x18\x02 \x01(\x0b\x32\r.livekit.Room\x12-\n\x0bparticipant\x18\x03 \x01(\x0b\x32\x18.livekit.ParticipantInfo\"\x1f\n\nWorkerPing\x12\x11\n\ttimestamp\x18\x01 \x01(\x03\"7\n\nWorkerPong\x12\x16\n\x0elast_timestamp\x18\x01 \x01(\x03\x12\x11\n\ttimestamp\x18\x02 \x01(\x03\"\xea\x02\n\x15RegisterWorkerRequest\x12\x1e\n\x04type\x18\x01 \x01(\x0e\x32\x10.livekit.JobType\x12\x12\n\nagent_name\x18\x08 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x15\n\rping_interval\x18\x05 \x01(\r\x12\x16\n\tnamespace\x18\x06 \x01(\tH\x00\x88\x01\x01\x12;\n\x13\x61llowed_permissions\x18\x07 \x01(\x0b\x32\x1e.livekit.ParticipantPermission\x12\x12\n\ndeployment\x18\t \x01(\t\x12\x33\n\tendpoints\x18\n \x03(\x0b\x32 .livekit.AgentHttp.AgentEndpoint\x12\"\n\x0binstance_id\x18\x0b \x01(\tB\r\xbaP\ninstanceID\x12\x19\n\x11\x65ndpoint_protocol\x18\x0c \x01(\rB\x0c\n\n_namespaceJ\x04\x08\x02\x10\x03J\x04\x08\x04\x10\x05\"\xad\x01\n\x16RegisterWorkerResponse\x12\x1e\n\tworker_id\x18\x01 \x01(\tB\x0b\xbaP\x08workerID\x12(\n\x0bserver_info\x18\x03 \x01(\x0b\x32\x13.livekit.ServerInfo\x12\x43\n\x11\x65ndpoint_settings\x18\x04 \x01(\x0b\x32(.livekit.AgentHttp.AgentEndpointSettingsJ\x04\x08\x02\x10\x03\"@\n\x11MigrateJobRequest\x12\x0f\n\x07job_ids\x18\x02 \x03(\t\x12\x1a\n\x04jobs\x18\x03 \x03(\x0b\x32\x0c.livekit.Job\"B\n\x13\x41vailabilityRequest\x12\x19\n\x03job\x18\x01 \x01(\x0b\x32\x0c.livekit.Job\x12\x10\n\x08resuming\x18\x02 \x01(\x08\"\xdd\x02\n\x14\x41vailabilityResponse\x12\x18\n\x06job_id\x18\x01 \x01(\tB\x08\xbaP\x05jobID\x12\x11\n\tavailable\x18\x02 \x01(\x08\x12\x17\n\x0fsupports_resume\x18\x03 \x01(\x08\x12\x11\n\tterminate\x18\x08 \x01(\x08\x12\x18\n\x10participant_name\x18\x04 \x01(\t\x12\x1c\n\x14participant_identity\x18\x05 \x01(\t\x12\x1c\n\x14participant_metadata\x18\x06 \x01(\t\x12X\n\x16participant_attributes\x18\x07 \x03(\x0b\x32\x38.livekit.AvailabilityResponse.ParticipantAttributesEntry\x1a<\n\x1aParticipantAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x8b\x01\n\x0fUpdateJobStatus\x12\x18\n\x06job_id\x18\x01 \x01(\tB\x08\xbaP\x05jobID\x12\"\n\x06status\x18\x02 \x01(\x0e\x32\x12.livekit.JobStatus\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12+\n\x0bjoin_timing\x18\x04 \x01(\x0b\x32\x16.livekit.JobJoinTiming\"\xd9\x01\n\rJobJoinTiming\x12\x19\n\x11offer_received_us\x18\x01 \x01(\x03\x12\x13\n\x0b\x61\x63\x63\x65pted_us\x18\x02 \x01(\x03\x12\x1e\n\x16\x61ssignment_received_us\x18\x03 \x01(\x03\x12\x13\n\x0blaunched_us\x18\x04 \x01(\x03\x12\x13\n\x0blaunch_warm\x18\x05 \x01(\x08\x12\x1d\n\x15\x65ntrypoint_started_us\x18\x06 \x01(\x03\x12\x19\n\x11\x63onnect_called_us\x18\x07 \x01(\x03\x12\x14\n\x0c\x63onnected_us\x18\x08 \x01(\x03\"\x91\x01\n\x12UpdateWorkerStatus\x12*\n\x06status\x18\x01 \x01(\x0e\x32\x15.livekit.WorkerStatusH\x00\x88\x01\x01\x12\x0c\n\x04load\x18\x03 \x01(\x02\x12\x11\n\tjob_count\x18\x04 \x01(\r\x12\x10\n\x08\x64raining\x18\x05 \x01(\x08\x12\x0b\n\x03seq\x18\x06 \x01(\x04\x42\t\n\x07_statusJ\x04\x08\x02\x10\x03\"X\n\rJobAssignment\x12\x19\n\x03job\x18\x01 \x01(\x0b\x32\x0c.livekit.Job\x12\x10\n\x03url\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05token\x18\x03 \x01(\tB\x03\xc0P\x02\x42\x06\n\x04_url\"*\n\x0eJobTermination\x12\x18\n\x06job_id\x18\x01 \x01(\tB\x08\xbaP\x05jobID\"\xb7\x04\n\tAgentHttp\x1ar\n\rAgentEndpoint\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x0f\n\x07methods\x18\x02 \x03(\t\x12\x32\n\x04kind\x18\x03 \x01(\x0e\x32$.livekit.AgentHttp.AgentEndpointKind\x12\x0e\n\x06public\x18\x04 \x01(\x08\x1a\x35\n\x15\x41gentEndpointSettings\x12\x10\n\x08protocol\x18\x01 \x01(\rJ\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04\x1a\xc7\x01\n\x0eStreamPreamble\x12\x32\n\x04kind\x18\x01 \x01(\x0e\x32$.livekit.AgentHttp.AgentEndpointKind\x12 \n\nrequest_id\x18\x02 \x01(\tB\x0c\xbaP\trequestID\x12\x12\n\nauthorized\x18\x03 \x01(\x08\x12\r\n\x05route\x18\x04 \x01(\t\x12\x12\n\ntimeout_ms\x18\x05 \x01(\r\x12\x18\n\x0b\x63lient_addr\x18\x06 \x01(\tB\x03\xc0P\x01\x12\x0e\n\x06scheme\x18\x07 \x01(\t\x1a\x18\n\x06GoAway\x12\x0e\n\x06reason\x18\x01 \x01(\t\"/\n\x11\x41gentEndpointKind\x12\x0c\n\x08\x41\x45K_HTTP\x10\x00\x12\x0c\n\x08\x41\x45K_TEXT\x10\x01\"j\n\x13HttpStreamResetCode\x12\r\n\tHSR_ABORT\x10\x00\x12\x0f\n\x0bHSR_REFUSED\x10\x01\x12\x10\n\x0cHSR_INTERNAL\x10\x02\x12\x0f\n\x0bHSR_TIMEOUT\x10\x03\x12\x10\n\x0cHSR_PROTOCOL\x10\x04*<\n\x07JobType\x12\x0b\n\x07JT_ROOM\x10\x00\x12\x10\n\x0cJT_PUBLISHER\x10\x01\x12\x12\n\x0eJT_PARTICIPANT\x10\x02*-\n\x0cWorkerStatus\x12\x10\n\x0cWS_AVAILABLE\x10\x00\x12\x0b\n\x07WS_FULL\x10\x01*\\\n\tJobStatus\x12\x0e\n\nJS_PENDING\x10\x00\x12\x0e\n\nJS_RUNNING\x10\x01\x12\x0e\n\nJS_SUCCESS\x10\x02\x12\r\n\tJS_FAILED\x10\x03\x12\x10\n\x0cJS_CANCELLED\x10\x04*{\n\x0eJobStateReason\x12\x13\n\x0fJSR_UNSPECIFIED\x10\x00\x12\x13\n\x0fJSR_NO_CAPACITY\x10\x01\x12\x13\n\x0fJSR_ROOM_CLOSED\x10\x02\x12\x18\n\x14JSR_DISPATCH_DELETED\x10\x03\x12\x10\n\x0cJSR_RETRYING\x10\x04\x42\x46Z#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13livekit_agent.proto\x12\x07livekit\x1a\x14livekit_models.proto\x1a\x14logger/options.proto\"\xf3\x03\n\x03Job\x12\n\n\x02id\x18\x01 \x01(\t\x12\"\n\x0b\x64ispatch_id\x18\t \x01(\tB\r\xbaP\ndispatchID\x12\x1e\n\x04type\x18\x02 \x01(\x0e\x32\x10.livekit.JobType\x12\x1b\n\x04room\x18\x03 \x01(\x0b\x32\r.livekit.Room\x12\x32\n\x0bparticipant\x18\x04 \x01(\x0b\x32\x18.livekit.ParticipantInfoH\x00\x88\x01\x01\x12\x15\n\tnamespace\x18\x05 \x01(\tB\x02\x18\x01\x12\x15\n\x08metadata\x18\x06 \x01(\tB\x03\xc0P\x01\x12\x12\n\nagent_name\x18\x07 \x01(\t\x12 \n\x05state\x18\x08 \x01(\x0b\x32\x11.livekit.JobState\x12\x18\n\x10\x65nable_recording\x18\n \x01(\x08\x12\x12\n\ndeployment\x18\x0b \x01(\t\x12\x35\n\nattributes\x18\x0c \x03(\x0b\x32\x1c.livekit.Job.AttributesEntryB\x03\xc0P\x01\x12\x18\n\x10\x65nable_redaction\x18\r \x01(\x08\x12\x12\n\ncreated_at\x18\x0e \x01(\x03\x12\x11\n\tthread_id\x18\x0f \x01(\t\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x0e\n\x0c_participant\"\x8b\x03\n\x08JobState\x12\"\n\x06status\x18\x01 \x01(\x0e\x32\x12.livekit.JobStatus\x12\r\n\x05\x65rror\x18\x02 \x01(\t\x12\x12\n\nstarted_at\x18\x03 \x01(\x03\x12\x10\n\x08\x65nded_at\x18\x04 \x01(\x03\x12\x12\n\nupdated_at\x18\x05 \x01(\x03\x12\x1c\n\x14participant_identity\x18\x06 \x01(\t\x12\x1e\n\tworker_id\x18\x07 \x01(\tB\x0b\xbaP\x08workerID\x12\x1c\n\x08\x61gent_id\x18\x08 \x01(\tB\n\xbaP\x07\x61gentID\x12\'\n\x06reason\x18\t \x01(\x0e\x32\x17.livekit.JobStateReason\x12\x13\n\x0b\x61\x63\x63\x65pted_at\x18\n \x01(\x03\x12\x13\n\x0b\x61ssigned_at\x18\x0b \x01(\x03\x12\x10\n\x08\x61ttempts\x18\x0c \x01(\r\x12\x18\n\x10\x66irst_started_at\x18\r \x01(\x03\x12 \n\x18\x61gent_failed_attempts_ns\x18\x0e \x01(\x03\x12\x15\n\rworkers_asked\x18\x0f \x01(\r\"\xb4\x03\n\rWorkerMessage\x12\x32\n\x08register\x18\x01 \x01(\x0b\x32\x1e.livekit.RegisterWorkerRequestH\x00\x12\x35\n\x0c\x61vailability\x18\x02 \x01(\x0b\x32\x1d.livekit.AvailabilityResponseH\x00\x12\x34\n\rupdate_worker\x18\x03 \x01(\x0b\x32\x1b.livekit.UpdateWorkerStatusH\x00\x12.\n\nupdate_job\x18\x04 \x01(\x0b\x32\x18.livekit.UpdateJobStatusH\x00\x12#\n\x04ping\x18\x05 \x01(\x0b\x32\x13.livekit.WorkerPingH\x00\x12\x33\n\x0csimulate_job\x18\x06 \x01(\x0b\x32\x1b.livekit.SimulateJobRequestH\x00\x12\x31\n\x0bmigrate_job\x18\x07 \x01(\x0b\x32\x1a.livekit.MigrateJobRequestH\x00\x12:\n\x10\x63reate_job_token\x18\x08 \x01(\x0b\x32\x1e.livekit.CreateJobTokenRequestH\x00\x42\t\n\x07message\"\xf3\x02\n\rServerMessage\x12\x33\n\x08register\x18\x01 \x01(\x0b\x32\x1f.livekit.RegisterWorkerResponseH\x00\x12\x34\n\x0c\x61vailability\x18\x02 \x01(\x0b\x32\x1c.livekit.AvailabilityRequestH\x00\x12,\n\nassignment\x18\x03 \x01(\x0b\x32\x16.livekit.JobAssignmentH\x00\x12.\n\x0btermination\x18\x05 \x01(\x0b\x32\x17.livekit.JobTerminationH\x00\x12#\n\x04pong\x18\x04 \x01(\x0b\x32\x13.livekit.WorkerPongH\x00\x12,\n\x07go_away\x18\x06 \x01(\x0b\x32\x19.livekit.AgentHttp.GoAwayH\x00\x12;\n\x10\x63reate_job_token\x18\x07 \x01(\x0b\x32\x1f.livekit.CreateJobTokenResponseH\x00\x42\t\n\x07message\"\x80\x01\n\x12SimulateJobRequest\x12\x1e\n\x04type\x18\x01 \x01(\x0e\x32\x10.livekit.JobType\x12\x1b\n\x04room\x18\x02 \x01(\x0b\x32\r.livekit.Room\x12-\n\x0bparticipant\x18\x03 \x01(\x0b\x32\x18.livekit.ParticipantInfo\"\x1f\n\nWorkerPing\x12\x11\n\ttimestamp\x18\x01 \x01(\x03\"7\n\nWorkerPong\x12\x16\n\x0elast_timestamp\x18\x01 \x01(\x03\x12\x11\n\ttimestamp\x18\x02 \x01(\x03\"\xea\x02\n\x15RegisterWorkerRequest\x12\x1e\n\x04type\x18\x01 \x01(\x0e\x32\x10.livekit.JobType\x12\x12\n\nagent_name\x18\x08 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x15\n\rping_interval\x18\x05 \x01(\r\x12\x16\n\tnamespace\x18\x06 \x01(\tH\x00\x88\x01\x01\x12;\n\x13\x61llowed_permissions\x18\x07 \x01(\x0b\x32\x1e.livekit.ParticipantPermission\x12\x12\n\ndeployment\x18\t \x01(\t\x12\x33\n\tendpoints\x18\n \x03(\x0b\x32 .livekit.AgentHttp.AgentEndpoint\x12\"\n\x0binstance_id\x18\x0b \x01(\tB\r\xbaP\ninstanceID\x12\x19\n\x11\x65ndpoint_protocol\x18\x0c \x01(\rB\x0c\n\n_namespaceJ\x04\x08\x02\x10\x03J\x04\x08\x04\x10\x05\"\xad\x01\n\x16RegisterWorkerResponse\x12\x1e\n\tworker_id\x18\x01 \x01(\tB\x0b\xbaP\x08workerID\x12(\n\x0bserver_info\x18\x03 \x01(\x0b\x32\x13.livekit.ServerInfo\x12\x43\n\x11\x65ndpoint_settings\x18\x04 \x01(\x0b\x32(.livekit.AgentHttp.AgentEndpointSettingsJ\x04\x08\x02\x10\x03\"@\n\x11MigrateJobRequest\x12\x0f\n\x07job_ids\x18\x02 \x03(\t\x12\x1a\n\x04jobs\x18\x03 \x03(\x0b\x32\x0c.livekit.Job\"B\n\x13\x41vailabilityRequest\x12\x19\n\x03job\x18\x01 \x01(\x0b\x32\x0c.livekit.Job\x12\x10\n\x08resuming\x18\x02 \x01(\x08\"\xdd\x02\n\x14\x41vailabilityResponse\x12\x18\n\x06job_id\x18\x01 \x01(\tB\x08\xbaP\x05jobID\x12\x11\n\tavailable\x18\x02 \x01(\x08\x12\x17\n\x0fsupports_resume\x18\x03 \x01(\x08\x12\x11\n\tterminate\x18\x08 \x01(\x08\x12\x18\n\x10participant_name\x18\x04 \x01(\t\x12\x1c\n\x14participant_identity\x18\x05 \x01(\t\x12\x1c\n\x14participant_metadata\x18\x06 \x01(\t\x12X\n\x16participant_attributes\x18\x07 \x03(\x0b\x32\x38.livekit.AvailabilityResponse.ParticipantAttributesEntry\x1a<\n\x1aParticipantAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x8b\x01\n\x0fUpdateJobStatus\x12\x18\n\x06job_id\x18\x01 \x01(\tB\x08\xbaP\x05jobID\x12\"\n\x06status\x18\x02 \x01(\x0e\x32\x12.livekit.JobStatus\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12+\n\x0bjoin_timing\x18\x04 \x01(\x0b\x32\x16.livekit.JobJoinTiming\"\xd9\x01\n\rJobJoinTiming\x12\x19\n\x11offer_received_us\x18\x01 \x01(\x03\x12\x13\n\x0b\x61\x63\x63\x65pted_us\x18\x02 \x01(\x03\x12\x1e\n\x16\x61ssignment_received_us\x18\x03 \x01(\x03\x12\x13\n\x0blaunched_us\x18\x04 \x01(\x03\x12\x13\n\x0blaunch_warm\x18\x05 \x01(\x08\x12\x1d\n\x15\x65ntrypoint_started_us\x18\x06 \x01(\x03\x12\x19\n\x11\x63onnect_called_us\x18\x07 \x01(\x03\x12\x14\n\x0c\x63onnected_us\x18\x08 \x01(\x03\"\x91\x01\n\x12UpdateWorkerStatus\x12*\n\x06status\x18\x01 \x01(\x0e\x32\x15.livekit.WorkerStatusH\x00\x88\x01\x01\x12\x0c\n\x04load\x18\x03 \x01(\x02\x12\x11\n\tjob_count\x18\x04 \x01(\r\x12\x10\n\x08\x64raining\x18\x05 \x01(\x08\x12\x0b\n\x03seq\x18\x06 \x01(\x04\x42\t\n\x07_statusJ\x04\x08\x02\x10\x03\"X\n\rJobAssignment\x12\x19\n\x03job\x18\x01 \x01(\x0b\x32\x0c.livekit.Job\x12\x10\n\x03url\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05token\x18\x03 \x01(\tB\x03\xc0P\x02\x42\x06\n\x04_url\"*\n\x0eJobTermination\x12\x18\n\x06job_id\x18\x01 \x01(\tB\x08\xbaP\x05jobID\"c\n\x15\x43reateJobTokenRequest\x12 \n\nrequest_id\x18\x01 \x01(\tB\x0c\xbaP\trequestID\x12\x18\n\x06job_id\x18\x02 \x01(\tB\x08\xbaP\x05jobID\x12\x0e\n\x06\x63laims\x18\x03 \x01(\t\"q\n\x16\x43reateJobTokenResponse\x12 \n\nrequest_id\x18\x01 \x01(\tB\x0c\xbaP\trequestID\x12\x12\n\x05token\x18\x02 \x01(\tB\x03\xc0P\x02\x12\x12\n\nexpires_at\x18\x03 \x01(\x03\x12\r\n\x05\x65rror\x18\x04 \x01(\t\"\xb7\x04\n\tAgentHttp\x1ar\n\rAgentEndpoint\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x0f\n\x07methods\x18\x02 \x03(\t\x12\x32\n\x04kind\x18\x03 \x01(\x0e\x32$.livekit.AgentHttp.AgentEndpointKind\x12\x0e\n\x06public\x18\x04 \x01(\x08\x1a\x35\n\x15\x41gentEndpointSettings\x12\x10\n\x08protocol\x18\x01 \x01(\rJ\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04\x1a\xc7\x01\n\x0eStreamPreamble\x12\x32\n\x04kind\x18\x01 \x01(\x0e\x32$.livekit.AgentHttp.AgentEndpointKind\x12 \n\nrequest_id\x18\x02 \x01(\tB\x0c\xbaP\trequestID\x12\x12\n\nauthorized\x18\x03 \x01(\x08\x12\r\n\x05route\x18\x04 \x01(\t\x12\x12\n\ntimeout_ms\x18\x05 \x01(\r\x12\x18\n\x0b\x63lient_addr\x18\x06 \x01(\tB\x03\xc0P\x01\x12\x0e\n\x06scheme\x18\x07 \x01(\t\x1a\x18\n\x06GoAway\x12\x0e\n\x06reason\x18\x01 \x01(\t\"/\n\x11\x41gentEndpointKind\x12\x0c\n\x08\x41\x45K_HTTP\x10\x00\x12\x0c\n\x08\x41\x45K_TEXT\x10\x01\"j\n\x13HttpStreamResetCode\x12\r\n\tHSR_ABORT\x10\x00\x12\x0f\n\x0bHSR_REFUSED\x10\x01\x12\x10\n\x0cHSR_INTERNAL\x10\x02\x12\x0f\n\x0bHSR_TIMEOUT\x10\x03\x12\x10\n\x0cHSR_PROTOCOL\x10\x04*<\n\x07JobType\x12\x0b\n\x07JT_ROOM\x10\x00\x12\x10\n\x0cJT_PUBLISHER\x10\x01\x12\x12\n\x0eJT_PARTICIPANT\x10\x02*-\n\x0cWorkerStatus\x12\x10\n\x0cWS_AVAILABLE\x10\x00\x12\x0b\n\x07WS_FULL\x10\x01*\\\n\tJobStatus\x12\x0e\n\nJS_PENDING\x10\x00\x12\x0e\n\nJS_RUNNING\x10\x01\x12\x0e\n\nJS_SUCCESS\x10\x02\x12\r\n\tJS_FAILED\x10\x03\x12\x10\n\x0cJS_CANCELLED\x10\x04*{\n\x0eJobStateReason\x12\x13\n\x0fJSR_UNSPECIFIED\x10\x00\x12\x13\n\x0fJSR_NO_CAPACITY\x10\x01\x12\x13\n\x0fJSR_ROOM_CLOSED\x10\x02\x12\x18\n\x14JSR_DISPATCH_DELETED\x10\x03\x12\x10\n\x0cJSR_RETRYING\x10\x04\x42\x46Z#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -62,68 +62,80 @@ _globals['_JOBASSIGNMENT'].fields_by_name['token']._serialized_options = b'\300P\002' _globals['_JOBTERMINATION'].fields_by_name['job_id']._loaded_options = None _globals['_JOBTERMINATION'].fields_by_name['job_id']._serialized_options = b'\272P\005jobID' + _globals['_CREATEJOBTOKENREQUEST'].fields_by_name['request_id']._loaded_options = None + _globals['_CREATEJOBTOKENREQUEST'].fields_by_name['request_id']._serialized_options = b'\272P\trequestID' + _globals['_CREATEJOBTOKENREQUEST'].fields_by_name['job_id']._loaded_options = None + _globals['_CREATEJOBTOKENREQUEST'].fields_by_name['job_id']._serialized_options = b'\272P\005jobID' + _globals['_CREATEJOBTOKENRESPONSE'].fields_by_name['request_id']._loaded_options = None + _globals['_CREATEJOBTOKENRESPONSE'].fields_by_name['request_id']._serialized_options = b'\272P\trequestID' + _globals['_CREATEJOBTOKENRESPONSE'].fields_by_name['token']._loaded_options = None + _globals['_CREATEJOBTOKENRESPONSE'].fields_by_name['token']._serialized_options = b'\300P\002' _globals['_AGENTHTTP_STREAMPREAMBLE'].fields_by_name['request_id']._loaded_options = None _globals['_AGENTHTTP_STREAMPREAMBLE'].fields_by_name['request_id']._serialized_options = b'\272P\trequestID' _globals['_AGENTHTTP_STREAMPREAMBLE'].fields_by_name['client_addr']._loaded_options = None _globals['_AGENTHTTP_STREAMPREAMBLE'].fields_by_name['client_addr']._serialized_options = b'\300P\001' - _globals['_JOBTYPE']._serialized_start=4010 - _globals['_JOBTYPE']._serialized_end=4070 - _globals['_WORKERSTATUS']._serialized_start=4072 - _globals['_WORKERSTATUS']._serialized_end=4117 - _globals['_JOBSTATUS']._serialized_start=4119 - _globals['_JOBSTATUS']._serialized_end=4211 - _globals['_JOBSTATEREASON']._serialized_start=4213 - _globals['_JOBSTATEREASON']._serialized_end=4336 + _globals['_JOBTYPE']._serialized_start=4467 + _globals['_JOBTYPE']._serialized_end=4527 + _globals['_WORKERSTATUS']._serialized_start=4529 + _globals['_WORKERSTATUS']._serialized_end=4574 + _globals['_JOBSTATUS']._serialized_start=4576 + _globals['_JOBSTATUS']._serialized_end=4668 + _globals['_JOBSTATEREASON']._serialized_start=4670 + _globals['_JOBSTATEREASON']._serialized_end=4793 _globals['_JOB']._serialized_start=77 - _globals['_JOB']._serialized_end=557 - _globals['_JOB_ATTRIBUTESENTRY']._serialized_start=492 - _globals['_JOB_ATTRIBUTESENTRY']._serialized_end=541 - _globals['_JOBSTATE']._serialized_start=560 - _globals['_JOBSTATE']._serialized_end=854 - _globals['_WORKERMESSAGE']._serialized_start=857 - _globals['_WORKERMESSAGE']._serialized_end=1233 - _globals['_SERVERMESSAGE']._serialized_start=1236 - _globals['_SERVERMESSAGE']._serialized_end=1546 - _globals['_SIMULATEJOBREQUEST']._serialized_start=1549 - _globals['_SIMULATEJOBREQUEST']._serialized_end=1677 - _globals['_WORKERPING']._serialized_start=1679 - _globals['_WORKERPING']._serialized_end=1710 - _globals['_WORKERPONG']._serialized_start=1712 - _globals['_WORKERPONG']._serialized_end=1767 - _globals['_REGISTERWORKERREQUEST']._serialized_start=1770 - _globals['_REGISTERWORKERREQUEST']._serialized_end=2132 - _globals['_REGISTERWORKERRESPONSE']._serialized_start=2135 - _globals['_REGISTERWORKERRESPONSE']._serialized_end=2308 - _globals['_MIGRATEJOBREQUEST']._serialized_start=2310 - _globals['_MIGRATEJOBREQUEST']._serialized_end=2374 - _globals['_AVAILABILITYREQUEST']._serialized_start=2376 - _globals['_AVAILABILITYREQUEST']._serialized_end=2442 - _globals['_AVAILABILITYRESPONSE']._serialized_start=2445 - _globals['_AVAILABILITYRESPONSE']._serialized_end=2794 - _globals['_AVAILABILITYRESPONSE_PARTICIPANTATTRIBUTESENTRY']._serialized_start=2734 - _globals['_AVAILABILITYRESPONSE_PARTICIPANTATTRIBUTESENTRY']._serialized_end=2794 - _globals['_UPDATEJOBSTATUS']._serialized_start=2797 - _globals['_UPDATEJOBSTATUS']._serialized_end=2936 - _globals['_JOBJOINTIMING']._serialized_start=2939 - _globals['_JOBJOINTIMING']._serialized_end=3156 - _globals['_UPDATEWORKERSTATUS']._serialized_start=3159 - _globals['_UPDATEWORKERSTATUS']._serialized_end=3304 - _globals['_JOBASSIGNMENT']._serialized_start=3306 - _globals['_JOBASSIGNMENT']._serialized_end=3394 - _globals['_JOBTERMINATION']._serialized_start=3396 - _globals['_JOBTERMINATION']._serialized_end=3438 - _globals['_AGENTHTTP']._serialized_start=3441 - _globals['_AGENTHTTP']._serialized_end=4008 - _globals['_AGENTHTTP_AGENTENDPOINT']._serialized_start=3454 - _globals['_AGENTHTTP_AGENTENDPOINT']._serialized_end=3568 - _globals['_AGENTHTTP_AGENTENDPOINTSETTINGS']._serialized_start=3570 - _globals['_AGENTHTTP_AGENTENDPOINTSETTINGS']._serialized_end=3623 - _globals['_AGENTHTTP_STREAMPREAMBLE']._serialized_start=3626 - _globals['_AGENTHTTP_STREAMPREAMBLE']._serialized_end=3825 - _globals['_AGENTHTTP_GOAWAY']._serialized_start=3827 - _globals['_AGENTHTTP_GOAWAY']._serialized_end=3851 - _globals['_AGENTHTTP_AGENTENDPOINTKIND']._serialized_start=3853 - _globals['_AGENTHTTP_AGENTENDPOINTKIND']._serialized_end=3900 - _globals['_AGENTHTTP_HTTPSTREAMRESETCODE']._serialized_start=3902 - _globals['_AGENTHTTP_HTTPSTREAMRESETCODE']._serialized_end=4008 + _globals['_JOB']._serialized_end=576 + _globals['_JOB_ATTRIBUTESENTRY']._serialized_start=511 + _globals['_JOB_ATTRIBUTESENTRY']._serialized_end=560 + _globals['_JOBSTATE']._serialized_start=579 + _globals['_JOBSTATE']._serialized_end=974 + _globals['_WORKERMESSAGE']._serialized_start=977 + _globals['_WORKERMESSAGE']._serialized_end=1413 + _globals['_SERVERMESSAGE']._serialized_start=1416 + _globals['_SERVERMESSAGE']._serialized_end=1787 + _globals['_SIMULATEJOBREQUEST']._serialized_start=1790 + _globals['_SIMULATEJOBREQUEST']._serialized_end=1918 + _globals['_WORKERPING']._serialized_start=1920 + _globals['_WORKERPING']._serialized_end=1951 + _globals['_WORKERPONG']._serialized_start=1953 + _globals['_WORKERPONG']._serialized_end=2008 + _globals['_REGISTERWORKERREQUEST']._serialized_start=2011 + _globals['_REGISTERWORKERREQUEST']._serialized_end=2373 + _globals['_REGISTERWORKERRESPONSE']._serialized_start=2376 + _globals['_REGISTERWORKERRESPONSE']._serialized_end=2549 + _globals['_MIGRATEJOBREQUEST']._serialized_start=2551 + _globals['_MIGRATEJOBREQUEST']._serialized_end=2615 + _globals['_AVAILABILITYREQUEST']._serialized_start=2617 + _globals['_AVAILABILITYREQUEST']._serialized_end=2683 + _globals['_AVAILABILITYRESPONSE']._serialized_start=2686 + _globals['_AVAILABILITYRESPONSE']._serialized_end=3035 + _globals['_AVAILABILITYRESPONSE_PARTICIPANTATTRIBUTESENTRY']._serialized_start=2975 + _globals['_AVAILABILITYRESPONSE_PARTICIPANTATTRIBUTESENTRY']._serialized_end=3035 + _globals['_UPDATEJOBSTATUS']._serialized_start=3038 + _globals['_UPDATEJOBSTATUS']._serialized_end=3177 + _globals['_JOBJOINTIMING']._serialized_start=3180 + _globals['_JOBJOINTIMING']._serialized_end=3397 + _globals['_UPDATEWORKERSTATUS']._serialized_start=3400 + _globals['_UPDATEWORKERSTATUS']._serialized_end=3545 + _globals['_JOBASSIGNMENT']._serialized_start=3547 + _globals['_JOBASSIGNMENT']._serialized_end=3635 + _globals['_JOBTERMINATION']._serialized_start=3637 + _globals['_JOBTERMINATION']._serialized_end=3679 + _globals['_CREATEJOBTOKENREQUEST']._serialized_start=3681 + _globals['_CREATEJOBTOKENREQUEST']._serialized_end=3780 + _globals['_CREATEJOBTOKENRESPONSE']._serialized_start=3782 + _globals['_CREATEJOBTOKENRESPONSE']._serialized_end=3895 + _globals['_AGENTHTTP']._serialized_start=3898 + _globals['_AGENTHTTP']._serialized_end=4465 + _globals['_AGENTHTTP_AGENTENDPOINT']._serialized_start=3911 + _globals['_AGENTHTTP_AGENTENDPOINT']._serialized_end=4025 + _globals['_AGENTHTTP_AGENTENDPOINTSETTINGS']._serialized_start=4027 + _globals['_AGENTHTTP_AGENTENDPOINTSETTINGS']._serialized_end=4080 + _globals['_AGENTHTTP_STREAMPREAMBLE']._serialized_start=4083 + _globals['_AGENTHTTP_STREAMPREAMBLE']._serialized_end=4282 + _globals['_AGENTHTTP_GOAWAY']._serialized_start=4284 + _globals['_AGENTHTTP_GOAWAY']._serialized_end=4308 + _globals['_AGENTHTTP_AGENTENDPOINTKIND']._serialized_start=4310 + _globals['_AGENTHTTP_AGENTENDPOINTKIND']._serialized_end=4357 + _globals['_AGENTHTTP_HTTPSTREAMRESETCODE']._serialized_start=4359 + _globals['_AGENTHTTP_HTTPSTREAMRESETCODE']._serialized_end=4465 # @@protoc_insertion_point(module_scope) diff --git a/livekit-protocol/livekit/protocol/agent.pyi b/livekit-protocol/livekit/protocol/agent.pyi index 174ccd1c8..5f9b780b7 100644 --- a/livekit-protocol/livekit/protocol/agent.pyi +++ b/livekit-protocol/livekit/protocol/agent.pyi @@ -51,7 +51,7 @@ JSR_DISPATCH_DELETED: JobStateReason JSR_RETRYING: JobStateReason class Job(_message.Message): - __slots__ = ("id", "dispatch_id", "type", "room", "participant", "namespace", "metadata", "agent_name", "state", "enable_recording", "deployment", "attributes", "enable_redaction", "created_at") + __slots__ = ("id", "dispatch_id", "type", "room", "participant", "namespace", "metadata", "agent_name", "state", "enable_recording", "deployment", "attributes", "enable_redaction", "created_at", "thread_id") class AttributesEntry(_message.Message): __slots__ = ("key", "value") KEY_FIELD_NUMBER: _ClassVar[int] @@ -73,6 +73,7 @@ class Job(_message.Message): ATTRIBUTES_FIELD_NUMBER: _ClassVar[int] ENABLE_REDACTION_FIELD_NUMBER: _ClassVar[int] CREATED_AT_FIELD_NUMBER: _ClassVar[int] + THREAD_ID_FIELD_NUMBER: _ClassVar[int] id: str dispatch_id: str type: JobType @@ -87,10 +88,11 @@ class Job(_message.Message): attributes: _containers.ScalarMap[str, str] enable_redaction: bool created_at: int - def __init__(self, id: _Optional[str] = ..., dispatch_id: _Optional[str] = ..., type: _Optional[_Union[JobType, str]] = ..., room: _Optional[_Union[_models.Room, _Mapping]] = ..., participant: _Optional[_Union[_models.ParticipantInfo, _Mapping]] = ..., namespace: _Optional[str] = ..., metadata: _Optional[str] = ..., agent_name: _Optional[str] = ..., state: _Optional[_Union[JobState, _Mapping]] = ..., enable_recording: bool = ..., deployment: _Optional[str] = ..., attributes: _Optional[_Mapping[str, str]] = ..., enable_redaction: bool = ..., created_at: _Optional[int] = ...) -> None: ... + thread_id: str + def __init__(self, id: _Optional[str] = ..., dispatch_id: _Optional[str] = ..., type: _Optional[_Union[JobType, str]] = ..., room: _Optional[_Union[_models.Room, _Mapping]] = ..., participant: _Optional[_Union[_models.ParticipantInfo, _Mapping]] = ..., namespace: _Optional[str] = ..., metadata: _Optional[str] = ..., agent_name: _Optional[str] = ..., state: _Optional[_Union[JobState, _Mapping]] = ..., enable_recording: bool = ..., deployment: _Optional[str] = ..., attributes: _Optional[_Mapping[str, str]] = ..., enable_redaction: bool = ..., created_at: _Optional[int] = ..., thread_id: _Optional[str] = ...) -> None: ... class JobState(_message.Message): - __slots__ = ("status", "error", "started_at", "ended_at", "updated_at", "participant_identity", "worker_id", "agent_id", "reason", "accepted_at", "assigned_at") + __slots__ = ("status", "error", "started_at", "ended_at", "updated_at", "participant_identity", "worker_id", "agent_id", "reason", "accepted_at", "assigned_at", "attempts", "first_started_at", "agent_failed_attempts_ns", "workers_asked") STATUS_FIELD_NUMBER: _ClassVar[int] ERROR_FIELD_NUMBER: _ClassVar[int] STARTED_AT_FIELD_NUMBER: _ClassVar[int] @@ -102,6 +104,10 @@ class JobState(_message.Message): REASON_FIELD_NUMBER: _ClassVar[int] ACCEPTED_AT_FIELD_NUMBER: _ClassVar[int] ASSIGNED_AT_FIELD_NUMBER: _ClassVar[int] + ATTEMPTS_FIELD_NUMBER: _ClassVar[int] + FIRST_STARTED_AT_FIELD_NUMBER: _ClassVar[int] + AGENT_FAILED_ATTEMPTS_NS_FIELD_NUMBER: _ClassVar[int] + WORKERS_ASKED_FIELD_NUMBER: _ClassVar[int] status: JobStatus error: str started_at: int @@ -113,10 +119,14 @@ class JobState(_message.Message): reason: JobStateReason accepted_at: int assigned_at: int - def __init__(self, status: _Optional[_Union[JobStatus, str]] = ..., error: _Optional[str] = ..., started_at: _Optional[int] = ..., ended_at: _Optional[int] = ..., updated_at: _Optional[int] = ..., participant_identity: _Optional[str] = ..., worker_id: _Optional[str] = ..., agent_id: _Optional[str] = ..., reason: _Optional[_Union[JobStateReason, str]] = ..., accepted_at: _Optional[int] = ..., assigned_at: _Optional[int] = ...) -> None: ... + attempts: int + first_started_at: int + agent_failed_attempts_ns: int + workers_asked: int + def __init__(self, status: _Optional[_Union[JobStatus, str]] = ..., error: _Optional[str] = ..., started_at: _Optional[int] = ..., ended_at: _Optional[int] = ..., updated_at: _Optional[int] = ..., participant_identity: _Optional[str] = ..., worker_id: _Optional[str] = ..., agent_id: _Optional[str] = ..., reason: _Optional[_Union[JobStateReason, str]] = ..., accepted_at: _Optional[int] = ..., assigned_at: _Optional[int] = ..., attempts: _Optional[int] = ..., first_started_at: _Optional[int] = ..., agent_failed_attempts_ns: _Optional[int] = ..., workers_asked: _Optional[int] = ...) -> None: ... class WorkerMessage(_message.Message): - __slots__ = ("register", "availability", "update_worker", "update_job", "ping", "simulate_job", "migrate_job") + __slots__ = ("register", "availability", "update_worker", "update_job", "ping", "simulate_job", "migrate_job", "create_job_token") REGISTER_FIELD_NUMBER: _ClassVar[int] AVAILABILITY_FIELD_NUMBER: _ClassVar[int] UPDATE_WORKER_FIELD_NUMBER: _ClassVar[int] @@ -124,6 +134,7 @@ class WorkerMessage(_message.Message): PING_FIELD_NUMBER: _ClassVar[int] SIMULATE_JOB_FIELD_NUMBER: _ClassVar[int] MIGRATE_JOB_FIELD_NUMBER: _ClassVar[int] + CREATE_JOB_TOKEN_FIELD_NUMBER: _ClassVar[int] register: RegisterWorkerRequest availability: AvailabilityResponse update_worker: UpdateWorkerStatus @@ -131,23 +142,26 @@ class WorkerMessage(_message.Message): ping: WorkerPing simulate_job: SimulateJobRequest migrate_job: MigrateJobRequest - def __init__(self, register: _Optional[_Union[RegisterWorkerRequest, _Mapping]] = ..., availability: _Optional[_Union[AvailabilityResponse, _Mapping]] = ..., update_worker: _Optional[_Union[UpdateWorkerStatus, _Mapping]] = ..., update_job: _Optional[_Union[UpdateJobStatus, _Mapping]] = ..., ping: _Optional[_Union[WorkerPing, _Mapping]] = ..., simulate_job: _Optional[_Union[SimulateJobRequest, _Mapping]] = ..., migrate_job: _Optional[_Union[MigrateJobRequest, _Mapping]] = ...) -> None: ... + create_job_token: CreateJobTokenRequest + def __init__(self, register: _Optional[_Union[RegisterWorkerRequest, _Mapping]] = ..., availability: _Optional[_Union[AvailabilityResponse, _Mapping]] = ..., update_worker: _Optional[_Union[UpdateWorkerStatus, _Mapping]] = ..., update_job: _Optional[_Union[UpdateJobStatus, _Mapping]] = ..., ping: _Optional[_Union[WorkerPing, _Mapping]] = ..., simulate_job: _Optional[_Union[SimulateJobRequest, _Mapping]] = ..., migrate_job: _Optional[_Union[MigrateJobRequest, _Mapping]] = ..., create_job_token: _Optional[_Union[CreateJobTokenRequest, _Mapping]] = ...) -> None: ... class ServerMessage(_message.Message): - __slots__ = ("register", "availability", "assignment", "termination", "pong", "go_away") + __slots__ = ("register", "availability", "assignment", "termination", "pong", "go_away", "create_job_token") REGISTER_FIELD_NUMBER: _ClassVar[int] AVAILABILITY_FIELD_NUMBER: _ClassVar[int] ASSIGNMENT_FIELD_NUMBER: _ClassVar[int] TERMINATION_FIELD_NUMBER: _ClassVar[int] PONG_FIELD_NUMBER: _ClassVar[int] GO_AWAY_FIELD_NUMBER: _ClassVar[int] + CREATE_JOB_TOKEN_FIELD_NUMBER: _ClassVar[int] register: RegisterWorkerResponse availability: AvailabilityRequest assignment: JobAssignment termination: JobTermination pong: WorkerPong go_away: AgentHttp.GoAway - def __init__(self, register: _Optional[_Union[RegisterWorkerResponse, _Mapping]] = ..., availability: _Optional[_Union[AvailabilityRequest, _Mapping]] = ..., assignment: _Optional[_Union[JobAssignment, _Mapping]] = ..., termination: _Optional[_Union[JobTermination, _Mapping]] = ..., pong: _Optional[_Union[WorkerPong, _Mapping]] = ..., go_away: _Optional[_Union[AgentHttp.GoAway, _Mapping]] = ...) -> None: ... + create_job_token: CreateJobTokenResponse + def __init__(self, register: _Optional[_Union[RegisterWorkerResponse, _Mapping]] = ..., availability: _Optional[_Union[AvailabilityRequest, _Mapping]] = ..., assignment: _Optional[_Union[JobAssignment, _Mapping]] = ..., termination: _Optional[_Union[JobTermination, _Mapping]] = ..., pong: _Optional[_Union[WorkerPong, _Mapping]] = ..., go_away: _Optional[_Union[AgentHttp.GoAway, _Mapping]] = ..., create_job_token: _Optional[_Union[CreateJobTokenResponse, _Mapping]] = ...) -> None: ... class SimulateJobRequest(_message.Message): __slots__ = ("type", "room", "participant") @@ -312,6 +326,28 @@ class JobTermination(_message.Message): job_id: str def __init__(self, job_id: _Optional[str] = ...) -> None: ... +class CreateJobTokenRequest(_message.Message): + __slots__ = ("request_id", "job_id", "claims") + REQUEST_ID_FIELD_NUMBER: _ClassVar[int] + JOB_ID_FIELD_NUMBER: _ClassVar[int] + CLAIMS_FIELD_NUMBER: _ClassVar[int] + request_id: str + job_id: str + claims: str + def __init__(self, request_id: _Optional[str] = ..., job_id: _Optional[str] = ..., claims: _Optional[str] = ...) -> None: ... + +class CreateJobTokenResponse(_message.Message): + __slots__ = ("request_id", "token", "expires_at", "error") + REQUEST_ID_FIELD_NUMBER: _ClassVar[int] + TOKEN_FIELD_NUMBER: _ClassVar[int] + EXPIRES_AT_FIELD_NUMBER: _ClassVar[int] + ERROR_FIELD_NUMBER: _ClassVar[int] + request_id: str + token: str + expires_at: int + error: str + def __init__(self, request_id: _Optional[str] = ..., token: _Optional[str] = ..., expires_at: _Optional[int] = ..., error: _Optional[str] = ...) -> None: ... + class AgentHttp(_message.Message): __slots__ = () class AgentEndpointKind(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): diff --git a/livekit-protocol/livekit/protocol/agent_dispatch.py b/livekit-protocol/livekit/protocol/agent_dispatch.py index f5d7a619d..9dafbb4c8 100644 --- a/livekit-protocol/livekit/protocol/agent_dispatch.py +++ b/livekit-protocol/livekit/protocol/agent_dispatch.py @@ -26,7 +26,7 @@ from .logger_pb import options as logger_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1clivekit_agent_dispatch.proto\x12\x07livekit\x1a\x13livekit_agent.proto\x1a\x14logger/options.proto\"\xdf\x02\n\x1a\x43reateAgentDispatchRequest\x12\x12\n\nagent_name\x18\x01 \x01(\t\x12\x0c\n\x04room\x18\x02 \x01(\t\x12\x36\n\x08metadata\x18\x03 \x01(\tB$\xb2P\x1e\xc0P\x01\x12\x31\n\x0erestart_policy\x18\x04 \x01(\x0e\x32\x19.livekit.JobRestartPolicy\x12\x12\n\ndeployment\x18\x05 \x01(\t\x12m\n\nattributes\x18\x06 \x03(\x0b\x32\x33.livekit.CreateAgentDispatchRequest.AttributesEntryB$\xb2P\x1e\xc0P\x01\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xbf\x02\n\x11RoomAgentDispatch\x12\x12\n\nagent_name\x18\x01 \x01(\t\x12\x36\n\x08metadata\x18\x02 \x01(\tB$\xb2P\x1e\xc0P\x01\x12\x31\n\x0erestart_policy\x18\x03 \x01(\x0e\x32\x19.livekit.JobRestartPolicy\x12\x12\n\ndeployment\x18\x04 \x01(\t\x12\x64\n\nattributes\x18\x05 \x03(\x0b\x32*.livekit.RoomAgentDispatch.AttributesEntryB$\xb2P\x1e\xc0P\x01\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"N\n\x1a\x44\x65leteAgentDispatchRequest\x12\"\n\x0b\x64ispatch_id\x18\x01 \x01(\tB\r\xbaP\ndispatchID\x12\x0c\n\x04room\x18\x02 \x01(\t\"L\n\x18ListAgentDispatchRequest\x12\"\n\x0b\x64ispatch_id\x18\x01 \x01(\tB\r\xbaP\ndispatchID\x12\x0c\n\x04room\x18\x02 \x01(\t\"M\n\x19ListAgentDispatchResponse\x12\x30\n\x10\x61gent_dispatches\x18\x01 \x03(\x0b\x32\x16.livekit.AgentDispatch\"\xfd\x02\n\rAgentDispatch\x12\n\n\x02id\x18\x01 \x01(\t\x12\x12\n\nagent_name\x18\x02 \x01(\t\x12\x0c\n\x04room\x18\x03 \x01(\t\x12\x36\n\x08metadata\x18\x04 \x01(\tB$\xb2P\x1e\xc0P\x01\x12*\n\x05state\x18\x05 \x01(\x0b\x32\x1b.livekit.AgentDispatchState\x12\x31\n\x0erestart_policy\x18\x06 \x01(\x0e\x32\x19.livekit.JobRestartPolicy\x12\x12\n\ndeployment\x18\x07 \x01(\t\x12`\n\nattributes\x18\x08 \x03(\x0b\x32&.livekit.AgentDispatch.AttributesEntryB$\xb2P\x1e\xc0P\x01\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x88\x01\n\x12\x41gentDispatchState\x12\x1a\n\x04jobs\x18\x01 \x03(\x0b\x32\x0c.livekit.Job\x12\x12\n\ncreated_at\x18\x02 \x01(\x03\x12\x12\n\ndeleted_at\x18\x03 \x01(\x03\x12.\n\x07trigger\x18\x04 \x01(\x0e\x32\x1d.livekit.AgentDispatchTrigger*5\n\x10JobRestartPolicy\x12\x12\n\x0eJRP_ON_FAILURE\x10\x00\x12\r\n\tJRP_NEVER\x10\x01*a\n\x14\x41gentDispatchTrigger\x12\x13\n\x0f\x41\x44T_UNSPECIFIED\x10\x00\x12\x0c\n\x08\x41\x44T_JOIN\x10\x01\x12\x10\n\x0c\x41\x44T_ROOM_API\x10\x02\x12\x14\n\x10\x41\x44T_DISPATCH_API\x10\x03\x32\x8b\x02\n\x14\x41gentDispatchService\x12M\n\x0e\x43reateDispatch\x12#.livekit.CreateAgentDispatchRequest\x1a\x16.livekit.AgentDispatch\x12M\n\x0e\x44\x65leteDispatch\x12#.livekit.DeleteAgentDispatchRequest\x1a\x16.livekit.AgentDispatch\x12U\n\x0cListDispatch\x12!.livekit.ListAgentDispatchRequest\x1a\".livekit.ListAgentDispatchResponseBFZ#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1clivekit_agent_dispatch.proto\x12\x07livekit\x1a\x13livekit_agent.proto\x1a\x14logger/options.proto\"\xf2\x02\n\x1a\x43reateAgentDispatchRequest\x12\x12\n\nagent_name\x18\x01 \x01(\t\x12\x0c\n\x04room\x18\x02 \x01(\t\x12\x36\n\x08metadata\x18\x03 \x01(\tB$\xb2P\x1e\xc0P\x01\x12\x31\n\x0erestart_policy\x18\x04 \x01(\x0e\x32\x19.livekit.JobRestartPolicy\x12\x12\n\ndeployment\x18\x05 \x01(\t\x12m\n\nattributes\x18\x06 \x03(\x0b\x32\x33.livekit.CreateAgentDispatchRequest.AttributesEntryB$\xb2P\x1e\xc0P\x01\x12\x11\n\tthread_id\x18\x07 \x01(\t\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xd2\x02\n\x11RoomAgentDispatch\x12\x12\n\nagent_name\x18\x01 \x01(\t\x12\x36\n\x08metadata\x18\x02 \x01(\tB$\xb2P\x1e\xc0P\x01\x12\x31\n\x0erestart_policy\x18\x03 \x01(\x0e\x32\x19.livekit.JobRestartPolicy\x12\x12\n\ndeployment\x18\x04 \x01(\t\x12\x64\n\nattributes\x18\x05 \x03(\x0b\x32*.livekit.RoomAgentDispatch.AttributesEntryB$\xb2P\x1e\xc0P\x01\x12\x11\n\tthread_id\x18\x06 \x01(\t\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"N\n\x1a\x44\x65leteAgentDispatchRequest\x12\"\n\x0b\x64ispatch_id\x18\x01 \x01(\tB\r\xbaP\ndispatchID\x12\x0c\n\x04room\x18\x02 \x01(\t\"L\n\x18ListAgentDispatchRequest\x12\"\n\x0b\x64ispatch_id\x18\x01 \x01(\tB\r\xbaP\ndispatchID\x12\x0c\n\x04room\x18\x02 \x01(\t\"M\n\x19ListAgentDispatchResponse\x12\x30\n\x10\x61gent_dispatches\x18\x01 \x03(\x0b\x32\x16.livekit.AgentDispatch\"\x90\x03\n\rAgentDispatch\x12\n\n\x02id\x18\x01 \x01(\t\x12\x12\n\nagent_name\x18\x02 \x01(\t\x12\x0c\n\x04room\x18\x03 \x01(\t\x12\x36\n\x08metadata\x18\x04 \x01(\tB$\xb2P\x1e\xc0P\x01\x12*\n\x05state\x18\x05 \x01(\x0b\x32\x1b.livekit.AgentDispatchState\x12\x31\n\x0erestart_policy\x18\x06 \x01(\x0e\x32\x19.livekit.JobRestartPolicy\x12\x12\n\ndeployment\x18\x07 \x01(\t\x12`\n\nattributes\x18\x08 \x03(\x0b\x32&.livekit.AgentDispatch.AttributesEntryB$\xb2P\x1e\xc0P\x01\x12\x11\n\tthread_id\x18\t \x01(\t\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x88\x01\n\x12\x41gentDispatchState\x12\x1a\n\x04jobs\x18\x01 \x03(\x0b\x32\x0c.livekit.Job\x12\x12\n\ncreated_at\x18\x02 \x01(\x03\x12\x12\n\ndeleted_at\x18\x03 \x01(\x03\x12.\n\x07trigger\x18\x04 \x01(\x0e\x32\x1d.livekit.AgentDispatchTrigger*5\n\x10JobRestartPolicy\x12\x12\n\x0eJRP_ON_FAILURE\x10\x00\x12\r\n\tJRP_NEVER\x10\x01*a\n\x14\x41gentDispatchTrigger\x12\x13\n\x0f\x41\x44T_UNSPECIFIED\x10\x00\x12\x0c\n\x08\x41\x44T_JOIN\x10\x01\x12\x10\n\x0c\x41\x44T_ROOM_API\x10\x02\x12\x14\n\x10\x41\x44T_DISPATCH_API\x10\x03\x32\x8b\x02\n\x14\x41gentDispatchService\x12M\n\x0e\x43reateDispatch\x12#.livekit.CreateAgentDispatchRequest\x1a\x16.livekit.AgentDispatch\x12M\n\x0e\x44\x65leteDispatch\x12#.livekit.DeleteAgentDispatchRequest\x1a\x16.livekit.AgentDispatch\x12U\n\x0cListDispatch\x12!.livekit.ListAgentDispatchRequest\x1a\".livekit.ListAgentDispatchResponseBFZ#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -56,30 +56,30 @@ _globals['_AGENTDISPATCH'].fields_by_name['metadata']._serialized_options = b'\262P\036\300P\001' _globals['_AGENTDISPATCH'].fields_by_name['attributes']._loaded_options = None _globals['_AGENTDISPATCH'].fields_by_name['attributes']._serialized_options = b'\262P\036\300P\001' - _globals['_JOBRESTARTPOLICY']._serialized_start=1520 - _globals['_JOBRESTARTPOLICY']._serialized_end=1573 - _globals['_AGENTDISPATCHTRIGGER']._serialized_start=1575 - _globals['_AGENTDISPATCHTRIGGER']._serialized_end=1672 + _globals['_JOBRESTARTPOLICY']._serialized_start=1577 + _globals['_JOBRESTARTPOLICY']._serialized_end=1630 + _globals['_AGENTDISPATCHTRIGGER']._serialized_start=1632 + _globals['_AGENTDISPATCHTRIGGER']._serialized_end=1729 _globals['_CREATEAGENTDISPATCHREQUEST']._serialized_start=85 - _globals['_CREATEAGENTDISPATCHREQUEST']._serialized_end=436 - _globals['_CREATEAGENTDISPATCHREQUEST_ATTRIBUTESENTRY']._serialized_start=387 - _globals['_CREATEAGENTDISPATCHREQUEST_ATTRIBUTESENTRY']._serialized_end=436 - _globals['_ROOMAGENTDISPATCH']._serialized_start=439 - _globals['_ROOMAGENTDISPATCH']._serialized_end=758 - _globals['_ROOMAGENTDISPATCH_ATTRIBUTESENTRY']._serialized_start=387 - _globals['_ROOMAGENTDISPATCH_ATTRIBUTESENTRY']._serialized_end=436 - _globals['_DELETEAGENTDISPATCHREQUEST']._serialized_start=760 - _globals['_DELETEAGENTDISPATCHREQUEST']._serialized_end=838 - _globals['_LISTAGENTDISPATCHREQUEST']._serialized_start=840 - _globals['_LISTAGENTDISPATCHREQUEST']._serialized_end=916 - _globals['_LISTAGENTDISPATCHRESPONSE']._serialized_start=918 - _globals['_LISTAGENTDISPATCHRESPONSE']._serialized_end=995 - _globals['_AGENTDISPATCH']._serialized_start=998 - _globals['_AGENTDISPATCH']._serialized_end=1379 - _globals['_AGENTDISPATCH_ATTRIBUTESENTRY']._serialized_start=387 - _globals['_AGENTDISPATCH_ATTRIBUTESENTRY']._serialized_end=436 - _globals['_AGENTDISPATCHSTATE']._serialized_start=1382 - _globals['_AGENTDISPATCHSTATE']._serialized_end=1518 - _globals['_AGENTDISPATCHSERVICE']._serialized_start=1675 - _globals['_AGENTDISPATCHSERVICE']._serialized_end=1942 + _globals['_CREATEAGENTDISPATCHREQUEST']._serialized_end=455 + _globals['_CREATEAGENTDISPATCHREQUEST_ATTRIBUTESENTRY']._serialized_start=406 + _globals['_CREATEAGENTDISPATCHREQUEST_ATTRIBUTESENTRY']._serialized_end=455 + _globals['_ROOMAGENTDISPATCH']._serialized_start=458 + _globals['_ROOMAGENTDISPATCH']._serialized_end=796 + _globals['_ROOMAGENTDISPATCH_ATTRIBUTESENTRY']._serialized_start=406 + _globals['_ROOMAGENTDISPATCH_ATTRIBUTESENTRY']._serialized_end=455 + _globals['_DELETEAGENTDISPATCHREQUEST']._serialized_start=798 + _globals['_DELETEAGENTDISPATCHREQUEST']._serialized_end=876 + _globals['_LISTAGENTDISPATCHREQUEST']._serialized_start=878 + _globals['_LISTAGENTDISPATCHREQUEST']._serialized_end=954 + _globals['_LISTAGENTDISPATCHRESPONSE']._serialized_start=956 + _globals['_LISTAGENTDISPATCHRESPONSE']._serialized_end=1033 + _globals['_AGENTDISPATCH']._serialized_start=1036 + _globals['_AGENTDISPATCH']._serialized_end=1436 + _globals['_AGENTDISPATCH_ATTRIBUTESENTRY']._serialized_start=406 + _globals['_AGENTDISPATCH_ATTRIBUTESENTRY']._serialized_end=455 + _globals['_AGENTDISPATCHSTATE']._serialized_start=1439 + _globals['_AGENTDISPATCHSTATE']._serialized_end=1575 + _globals['_AGENTDISPATCHSERVICE']._serialized_start=1732 + _globals['_AGENTDISPATCHSERVICE']._serialized_end=1999 # @@protoc_insertion_point(module_scope) diff --git a/livekit-protocol/livekit/protocol/agent_dispatch.pyi b/livekit-protocol/livekit/protocol/agent_dispatch.pyi index 70fc80614..05bd383ea 100644 --- a/livekit-protocol/livekit/protocol/agent_dispatch.pyi +++ b/livekit-protocol/livekit/protocol/agent_dispatch.pyi @@ -27,7 +27,7 @@ ADT_ROOM_API: AgentDispatchTrigger ADT_DISPATCH_API: AgentDispatchTrigger class CreateAgentDispatchRequest(_message.Message): - __slots__ = ("agent_name", "room", "metadata", "restart_policy", "deployment", "attributes") + __slots__ = ("agent_name", "room", "metadata", "restart_policy", "deployment", "attributes", "thread_id") class AttributesEntry(_message.Message): __slots__ = ("key", "value") KEY_FIELD_NUMBER: _ClassVar[int] @@ -41,16 +41,18 @@ class CreateAgentDispatchRequest(_message.Message): RESTART_POLICY_FIELD_NUMBER: _ClassVar[int] DEPLOYMENT_FIELD_NUMBER: _ClassVar[int] ATTRIBUTES_FIELD_NUMBER: _ClassVar[int] + THREAD_ID_FIELD_NUMBER: _ClassVar[int] agent_name: str room: str metadata: str restart_policy: JobRestartPolicy deployment: str attributes: _containers.ScalarMap[str, str] - def __init__(self, agent_name: _Optional[str] = ..., room: _Optional[str] = ..., metadata: _Optional[str] = ..., restart_policy: _Optional[_Union[JobRestartPolicy, str]] = ..., deployment: _Optional[str] = ..., attributes: _Optional[_Mapping[str, str]] = ...) -> None: ... + thread_id: str + def __init__(self, agent_name: _Optional[str] = ..., room: _Optional[str] = ..., metadata: _Optional[str] = ..., restart_policy: _Optional[_Union[JobRestartPolicy, str]] = ..., deployment: _Optional[str] = ..., attributes: _Optional[_Mapping[str, str]] = ..., thread_id: _Optional[str] = ...) -> None: ... class RoomAgentDispatch(_message.Message): - __slots__ = ("agent_name", "metadata", "restart_policy", "deployment", "attributes") + __slots__ = ("agent_name", "metadata", "restart_policy", "deployment", "attributes", "thread_id") class AttributesEntry(_message.Message): __slots__ = ("key", "value") KEY_FIELD_NUMBER: _ClassVar[int] @@ -63,12 +65,14 @@ class RoomAgentDispatch(_message.Message): RESTART_POLICY_FIELD_NUMBER: _ClassVar[int] DEPLOYMENT_FIELD_NUMBER: _ClassVar[int] ATTRIBUTES_FIELD_NUMBER: _ClassVar[int] + THREAD_ID_FIELD_NUMBER: _ClassVar[int] agent_name: str metadata: str restart_policy: JobRestartPolicy deployment: str attributes: _containers.ScalarMap[str, str] - def __init__(self, agent_name: _Optional[str] = ..., metadata: _Optional[str] = ..., restart_policy: _Optional[_Union[JobRestartPolicy, str]] = ..., deployment: _Optional[str] = ..., attributes: _Optional[_Mapping[str, str]] = ...) -> None: ... + thread_id: str + def __init__(self, agent_name: _Optional[str] = ..., metadata: _Optional[str] = ..., restart_policy: _Optional[_Union[JobRestartPolicy, str]] = ..., deployment: _Optional[str] = ..., attributes: _Optional[_Mapping[str, str]] = ..., thread_id: _Optional[str] = ...) -> None: ... class DeleteAgentDispatchRequest(_message.Message): __slots__ = ("dispatch_id", "room") @@ -93,7 +97,7 @@ class ListAgentDispatchResponse(_message.Message): def __init__(self, agent_dispatches: _Optional[_Iterable[_Union[AgentDispatch, _Mapping]]] = ...) -> None: ... class AgentDispatch(_message.Message): - __slots__ = ("id", "agent_name", "room", "metadata", "state", "restart_policy", "deployment", "attributes") + __slots__ = ("id", "agent_name", "room", "metadata", "state", "restart_policy", "deployment", "attributes", "thread_id") class AttributesEntry(_message.Message): __slots__ = ("key", "value") KEY_FIELD_NUMBER: _ClassVar[int] @@ -109,6 +113,7 @@ class AgentDispatch(_message.Message): RESTART_POLICY_FIELD_NUMBER: _ClassVar[int] DEPLOYMENT_FIELD_NUMBER: _ClassVar[int] ATTRIBUTES_FIELD_NUMBER: _ClassVar[int] + THREAD_ID_FIELD_NUMBER: _ClassVar[int] id: str agent_name: str room: str @@ -117,7 +122,8 @@ class AgentDispatch(_message.Message): restart_policy: JobRestartPolicy deployment: str attributes: _containers.ScalarMap[str, str] - def __init__(self, id: _Optional[str] = ..., agent_name: _Optional[str] = ..., room: _Optional[str] = ..., metadata: _Optional[str] = ..., state: _Optional[_Union[AgentDispatchState, _Mapping]] = ..., restart_policy: _Optional[_Union[JobRestartPolicy, str]] = ..., deployment: _Optional[str] = ..., attributes: _Optional[_Mapping[str, str]] = ...) -> None: ... + thread_id: str + def __init__(self, id: _Optional[str] = ..., agent_name: _Optional[str] = ..., room: _Optional[str] = ..., metadata: _Optional[str] = ..., state: _Optional[_Union[AgentDispatchState, _Mapping]] = ..., restart_policy: _Optional[_Union[JobRestartPolicy, str]] = ..., deployment: _Optional[str] = ..., attributes: _Optional[_Mapping[str, str]] = ..., thread_id: _Optional[str] = ...) -> None: ... class AgentDispatchState(_message.Message): __slots__ = ("jobs", "created_at", "deleted_at", "trigger") diff --git a/livekit-protocol/livekit/protocol/sip.py b/livekit-protocol/livekit/protocol/sip.py index f5a05818d..814b21218 100644 --- a/livekit-protocol/livekit/protocol/sip.py +++ b/livekit-protocol/livekit/protocol/sip.py @@ -30,7 +30,7 @@ from .logger_pb import options as logger_dot_options__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11livekit_sip.proto\x12\x07livekit\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x14livekit_models.proto\x1a\x12livekit_room.proto\x1a\x14logger/options.proto\"A\n\tSIPStatus\x12$\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x16.livekit.SIPStatusCode\x12\x0e\n\x06status\x18\x02 \x01(\t\"\xe9\x02\n\x15\x43reateSIPTrunkRequest\x12\x19\n\x11inbound_addresses\x18\x01 \x03(\t\x12\x18\n\x10outbound_address\x18\x02 \x01(\t\x12\x17\n\x0foutbound_number\x18\x03 \x01(\t\x12!\n\x15inbound_numbers_regex\x18\x04 \x03(\tB\x02\x18\x01\x12\x17\n\x0finbound_numbers\x18\t \x03(\t\x12\x1d\n\x10inbound_username\x18\x05 \x01(\tB\x03\xc0P\x01\x12\x1d\n\x10inbound_password\x18\x06 \x01(\tB\x03\xc0P\x02\x12\x1e\n\x11outbound_username\x18\x07 \x01(\tB\x03\xc0P\x01\x12\x1e\n\x11outbound_password\x18\x08 \x01(\tB\x03\xc0P\x02\x12\x0c\n\x04name\x18\n \x01(\t\x12\x36\n\x08metadata\x18\x0b \x01(\tB$\xb2P\x1e\xc0P\x01:\x02\x18\x01\"&\n\x08SIPCodec\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04rate\x18\x02 \x01(\r\"\xfd\x01\n\x0eSIPMediaConfig\x12\x1a\n\x12only_listed_codecs\x18\x01 \x01(\x08\x12!\n\x06\x63odecs\x18\x02 \x03(\x0b\x32\x11.livekit.SIPCodec\x12\x34\n\nencryption\x18\x03 \x01(\x0e\x32\x1b.livekit.SIPMediaEncryptionH\x00\x88\x01\x01\x12\x35\n\rmedia_timeout\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationH\x01\x88\x01\x01\x12\x1e\n\x16\x64rop_audio_during_dtmf\x18\x05 \x01(\x08\x42\r\n\x0b_encryptionB\x10\n\x0e_media_timeout\"g\n\x0cProviderInfo\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12#\n\x04type\x18\x03 \x01(\x0e\x32\x15.livekit.ProviderType\x12\x18\n\x10prevent_transfer\x18\x04 \x01(\x08\"\xa4\x04\n\x0cSIPTrunkInfo\x12#\n\x0csip_trunk_id\x18\x01 \x01(\tB\r\xbaP\nsipTrunkID\x12-\n\x04kind\x18\x0e \x01(\x0e\x32\x1f.livekit.SIPTrunkInfo.TrunkKind\x12\x19\n\x11inbound_addresses\x18\x02 \x03(\t\x12\x18\n\x10outbound_address\x18\x03 \x01(\t\x12\x17\n\x0foutbound_number\x18\x04 \x01(\t\x12(\n\ttransport\x18\r \x01(\x0e\x32\x15.livekit.SIPTransport\x12!\n\x15inbound_numbers_regex\x18\x05 \x03(\tB\x02\x18\x01\x12\x17\n\x0finbound_numbers\x18\n \x03(\t\x12\x1d\n\x10inbound_username\x18\x06 \x01(\tB\x03\xc0P\x01\x12\x1d\n\x10inbound_password\x18\x07 \x01(\tB\x03\xc0P\x02\x12\x1e\n\x11outbound_username\x18\x08 \x01(\tB\x03\xc0P\x01\x12\x1e\n\x11outbound_password\x18\t \x01(\tB\x03\xc0P\x02\x12\x0c\n\x04name\x18\x0b \x01(\t\x12\x36\n\x08metadata\x18\x0c \x01(\tB$\xb2P\x1e\xc0P\x01\"D\n\tTrunkKind\x12\x10\n\x0cTRUNK_LEGACY\x10\x00\x12\x11\n\rTRUNK_INBOUND\x10\x01\x12\x12\n\x0eTRUNK_OUTBOUND\x10\x02:\x02\x18\x01\"K\n\x1c\x43reateSIPInboundTrunkRequest\x12+\n\x05trunk\x18\x01 \x01(\x0b\x32\x1c.livekit.SIPInboundTrunkInfo\"\xb0\x01\n\x1cUpdateSIPInboundTrunkRequest\x12#\n\x0csip_trunk_id\x18\x01 \x01(\tB\r\xbaP\nsipTrunkID\x12/\n\x07replace\x18\x02 \x01(\x0b\x32\x1c.livekit.SIPInboundTrunkInfoH\x00\x12\x30\n\x06update\x18\x03 \x01(\x0b\x32\x1e.livekit.SIPInboundTrunkUpdateH\x00\x42\x08\n\x06\x61\x63tion\"\xf7\x08\n\x13SIPInboundTrunkInfo\x12#\n\x0csip_trunk_id\x18\x01 \x01(\tB\r\xbaP\nsipTrunkID\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x36\n\x08metadata\x18\x03 \x01(\tB$\xb2P\x1e\xc0P\x01\x12\x0f\n\x07numbers\x18\x04 \x03(\t\x12\x19\n\x11\x61llowed_addresses\x18\x05 \x03(\t\x12\x17\n\x0f\x61llowed_numbers\x18\x06 \x03(\t\x12\x1a\n\rauth_username\x18\x07 \x01(\tB\x03\xc0P\x01\x12\x1a\n\rauth_password\x18\x08 \x01(\tB\x03\xc0P\x02\x12\x12\n\nauth_realm\x18\x13 \x01(\t\x12`\n\x07headers\x18\t \x03(\x0b\x32).livekit.SIPInboundTrunkInfo.HeadersEntryB$\xb2P\x1e\xc0P\x01\x12T\n\x15headers_to_attributes\x18\n \x03(\x0b\x32\x35.livekit.SIPInboundTrunkInfo.HeadersToAttributesEntry\x12T\n\x15\x61ttributes_to_headers\x18\x0e \x03(\x0b\x32\x35.livekit.SIPInboundTrunkInfo.AttributesToHeadersEntry\x12\x32\n\x0finclude_headers\x18\x0f \x01(\x0e\x32\x19.livekit.SIPHeaderOptions\x12\x32\n\x0fringing_timeout\x18\x0b \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x36\n\x16ringing_timeout_status\x18\x15 \x01(\x0e\x32\x16.livekit.SIPStatusCode\x12\x34\n\x11max_call_duration\x18\x0c \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x15\n\rkrisp_enabled\x18\r \x01(\x08\x12\x39\n\x10media_encryption\x18\x10 \x01(\x0e\x32\x1b.livekit.SIPMediaEncryptionB\x02\x18\x01\x12&\n\x05media\x18\x14 \x01(\x0b\x32\x17.livekit.SIPMediaConfig\x12.\n\ncreated_at\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x1a.\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a:\n\x18HeadersToAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a:\n\x18\x41ttributesToHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x8c\x04\n\x15SIPInboundTrunkUpdate\x12$\n\x07numbers\x18\x01 \x01(\x0b\x32\x13.livekit.ListUpdate\x12.\n\x11\x61llowed_addresses\x18\x02 \x01(\x0b\x32\x13.livekit.ListUpdate\x12,\n\x0f\x61llowed_numbers\x18\x03 \x01(\x0b\x32\x13.livekit.ListUpdate\x12\x1f\n\rauth_username\x18\x04 \x01(\tB\x03\xc0P\x01H\x00\x88\x01\x01\x12\x1f\n\rauth_password\x18\x05 \x01(\tB\x03\xc0P\x02H\x01\x88\x01\x01\x12\x17\n\nauth_realm\x18\t \x01(\tH\x02\x88\x01\x01\x12\x11\n\x04name\x18\x06 \x01(\tH\x03\x88\x01\x01\x12;\n\x08metadata\x18\x07 \x01(\tB$\xb2P\x1e\xc0P\x01H\x04\x88\x01\x01\x12>\n\x10media_encryption\x18\x08 \x01(\x0e\x32\x1b.livekit.SIPMediaEncryptionB\x02\x18\x01H\x05\x88\x01\x01\x12&\n\x05media\x18\n \x01(\x0b\x32\x17.livekit.SIPMediaConfigB\x10\n\x0e_auth_usernameB\x10\n\x0e_auth_passwordB\r\n\x0b_auth_realmB\x07\n\x05_nameB\x0b\n\t_metadataB\x13\n\x11_media_encryption\"M\n\x1d\x43reateSIPOutboundTrunkRequest\x12,\n\x05trunk\x18\x01 \x01(\x0b\x32\x1d.livekit.SIPOutboundTrunkInfo\"\xb3\x01\n\x1dUpdateSIPOutboundTrunkRequest\x12#\n\x0csip_trunk_id\x18\x01 \x01(\tB\r\xbaP\nsipTrunkID\x12\x30\n\x07replace\x18\x02 \x01(\x0b\x32\x1d.livekit.SIPOutboundTrunkInfoH\x00\x12\x31\n\x06update\x18\x03 \x01(\x0b\x32\x1f.livekit.SIPOutboundTrunkUpdateH\x00\x42\x08\n\x06\x61\x63tion\"\xe5\x07\n\x14SIPOutboundTrunkInfo\x12#\n\x0csip_trunk_id\x18\x01 \x01(\tB\r\xbaP\nsipTrunkID\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x36\n\x08metadata\x18\x03 \x01(\tB$\xb2P\x1e\xc0P\x01\x12\x0f\n\x07\x61\x64\x64ress\x18\x04 \x01(\t\x12\x1b\n\x13\x64\x65stination_country\x18\x0e \x01(\t\x12(\n\ttransport\x18\x05 \x01(\x0e\x32\x15.livekit.SIPTransport\x12\x0f\n\x07numbers\x18\x06 \x03(\t\x12\x1a\n\rauth_username\x18\x07 \x01(\tB\x03\xc0P\x01\x12\x1a\n\rauth_password\x18\x08 \x01(\tB\x03\xc0P\x02\x12\x61\n\x07headers\x18\t \x03(\x0b\x32*.livekit.SIPOutboundTrunkInfo.HeadersEntryB$\xb2P\x1e\xc0P\x01\x12U\n\x15headers_to_attributes\x18\n \x03(\x0b\x32\x36.livekit.SIPOutboundTrunkInfo.HeadersToAttributesEntry\x12U\n\x15\x61ttributes_to_headers\x18\x0b \x03(\x0b\x32\x36.livekit.SIPOutboundTrunkInfo.AttributesToHeadersEntry\x12\x32\n\x0finclude_headers\x18\x0c \x01(\x0e\x32\x19.livekit.SIPHeaderOptions\x12\x39\n\x10media_encryption\x18\r \x01(\x0e\x32\x1b.livekit.SIPMediaEncryptionB\x02\x18\x01\x12&\n\x05media\x18\x12 \x01(\x0b\x32\x17.livekit.SIPMediaConfig\x12\x11\n\tfrom_host\x18\x0f \x01(\t\x12.\n\ncreated_at\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x1a.\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a:\n\x18HeadersToAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a:\n\x18\x41ttributesToHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xc6\x04\n\x16SIPOutboundTrunkUpdate\x12\x14\n\x07\x61\x64\x64ress\x18\x01 \x01(\tH\x00\x88\x01\x01\x12-\n\ttransport\x18\x02 \x01(\x0e\x32\x15.livekit.SIPTransportH\x01\x88\x01\x01\x12 \n\x13\x64\x65stination_country\x18\t \x01(\tH\x02\x88\x01\x01\x12$\n\x07numbers\x18\x03 \x01(\x0b\x32\x13.livekit.ListUpdate\x12\x1f\n\rauth_username\x18\x04 \x01(\tB\x03\xc0P\x01H\x03\x88\x01\x01\x12\x1f\n\rauth_password\x18\x05 \x01(\tB\x03\xc0P\x02H\x04\x88\x01\x01\x12\x11\n\x04name\x18\x06 \x01(\tH\x05\x88\x01\x01\x12;\n\x08metadata\x18\x07 \x01(\tB$\xb2P\x1e\xc0P\x01H\x06\x88\x01\x01\x12>\n\x10media_encryption\x18\x08 \x01(\x0e\x32\x1b.livekit.SIPMediaEncryptionB\x02\x18\x01H\x07\x88\x01\x01\x12&\n\x05media\x18\x0b \x01(\x0b\x32\x17.livekit.SIPMediaConfig\x12\x16\n\tfrom_host\x18\n \x01(\tH\x08\x88\x01\x01\x42\n\n\x08_addressB\x0c\n\n_transportB\x16\n\x14_destination_countryB\x10\n\x0e_auth_usernameB\x10\n\x0e_auth_passwordB\x07\n\x05_nameB\x0b\n\t_metadataB\x13\n\x11_media_encryptionB\x0c\n\n_from_host\"@\n\x19GetSIPInboundTrunkRequest\x12#\n\x0csip_trunk_id\x18\x01 \x01(\tB\r\xbaP\nsipTrunkID\"I\n\x1aGetSIPInboundTrunkResponse\x12+\n\x05trunk\x18\x01 \x01(\x0b\x32\x1c.livekit.SIPInboundTrunkInfo\"A\n\x1aGetSIPOutboundTrunkRequest\x12#\n\x0csip_trunk_id\x18\x01 \x01(\tB\r\xbaP\nsipTrunkID\"K\n\x1bGetSIPOutboundTrunkResponse\x12,\n\x05trunk\x18\x01 \x01(\x0b\x32\x1d.livekit.SIPOutboundTrunkInfo\"<\n\x13ListSIPTrunkRequest\x12!\n\x04page\x18\x01 \x01(\x0b\x32\x13.livekit.Pagination:\x02\x18\x01\"@\n\x14ListSIPTrunkResponse\x12$\n\x05items\x18\x01 \x03(\x0b\x32\x15.livekit.SIPTrunkInfo:\x02\x18\x01\"c\n\x1aListSIPInboundTrunkRequest\x12!\n\x04page\x18\x03 \x01(\x0b\x32\x13.livekit.Pagination\x12\x11\n\ttrunk_ids\x18\x01 \x03(\t\x12\x0f\n\x07numbers\x18\x02 \x03(\t\"J\n\x1bListSIPInboundTrunkResponse\x12+\n\x05items\x18\x01 \x03(\x0b\x32\x1c.livekit.SIPInboundTrunkInfo\"d\n\x1bListSIPOutboundTrunkRequest\x12!\n\x04page\x18\x03 \x01(\x0b\x32\x13.livekit.Pagination\x12\x11\n\ttrunk_ids\x18\x01 \x03(\t\x12\x0f\n\x07numbers\x18\x02 \x03(\t\"L\n\x1cListSIPOutboundTrunkResponse\x12,\n\x05items\x18\x01 \x03(\x0b\x32\x1d.livekit.SIPOutboundTrunkInfo\"<\n\x15\x44\x65leteSIPTrunkRequest\x12#\n\x0csip_trunk_id\x18\x01 \x01(\tB\r\xbaP\nsipTrunkID\"<\n\x15SIPDispatchRuleDirect\x12\x11\n\troom_name\x18\x01 \x01(\t\x12\x10\n\x03pin\x18\x02 \x01(\tB\x03\xc0P\x02\"Y\n\x19SIPDispatchRuleIndividual\x12\x13\n\x0broom_prefix\x18\x01 \x01(\t\x12\x10\n\x03pin\x18\x02 \x01(\tB\x03\xc0P\x02\x12\x15\n\rno_randomness\x18\x03 \x01(\x08\"Q\n\x15SIPDispatchRuleCallee\x12\x13\n\x0broom_prefix\x18\x01 \x01(\t\x12\x10\n\x03pin\x18\x02 \x01(\tB\x03\xc0P\x02\x12\x11\n\trandomize\x18\x03 \x01(\x08\"\xe1\x01\n\x0fSIPDispatchRule\x12>\n\x14\x64ispatch_rule_direct\x18\x01 \x01(\x0b\x32\x1e.livekit.SIPDispatchRuleDirectH\x00\x12\x46\n\x18\x64ispatch_rule_individual\x18\x02 \x01(\x0b\x32\".livekit.SIPDispatchRuleIndividualH\x00\x12>\n\x14\x64ispatch_rule_callee\x18\x03 \x01(\x0b\x32\x1e.livekit.SIPDispatchRuleCalleeH\x00\x42\x06\n\x04rule\"\x92\x04\n\x1c\x43reateSIPDispatchRuleRequest\x12\x33\n\rdispatch_rule\x18\n \x01(\x0b\x32\x1c.livekit.SIPDispatchRuleInfo\x12*\n\x04rule\x18\x01 \x01(\x0b\x32\x18.livekit.SIPDispatchRuleB\x02\x18\x01\x12\x15\n\ttrunk_ids\x18\x02 \x03(\tB\x02\x18\x01\x12\x1d\n\x11hide_phone_number\x18\x03 \x01(\x08\x42\x02\x18\x01\x12\x1b\n\x0finbound_numbers\x18\x06 \x03(\tB\x02\x18\x01\x12\x10\n\x04name\x18\x04 \x01(\tB\x02\x18\x01\x12\x38\n\x08metadata\x18\x05 \x01(\tB&\x18\x01\xb2P\x1e\xc0P\x01\x12q\n\nattributes\x18\x07 \x03(\x0b\x32\x35.livekit.CreateSIPDispatchRuleRequest.AttributesEntryB&\x18\x01\xb2P\x1e\xc0P\x01\x12\x17\n\x0broom_preset\x18\x08 \x01(\tB\x02\x18\x01\x12\x33\n\x0broom_config\x18\t \x01(\x0b\x32\x1a.livekit.RoomConfigurationB\x02\x18\x01\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xbf\x01\n\x1cUpdateSIPDispatchRuleRequest\x12\x32\n\x14sip_dispatch_rule_id\x18\x01 \x01(\tB\x14\xbaP\x11sipDispatchRuleID\x12/\n\x07replace\x18\x02 \x01(\x0b\x32\x1c.livekit.SIPDispatchRuleInfoH\x00\x12\x30\n\x06update\x18\x03 \x01(\x0b\x32\x1e.livekit.SIPDispatchRuleUpdateH\x00\x42\x08\n\x06\x61\x63tion\"\xca\x05\n\x13SIPDispatchRuleInfo\x12\x32\n\x14sip_dispatch_rule_id\x18\x01 \x01(\tB\x14\xbaP\x11sipDispatchRuleID\x12&\n\x04rule\x18\x02 \x01(\x0b\x32\x18.livekit.SIPDispatchRule\x12\x11\n\ttrunk_ids\x18\x03 \x03(\t\x12\x19\n\x11hide_phone_number\x18\x04 \x01(\x08\x12\x17\n\x0finbound_numbers\x18\x07 \x03(\t\x12\x0f\n\x07numbers\x18\r \x03(\t\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x36\n\x08metadata\x18\x06 \x01(\tB$\xb2P\x1e\xc0P\x01\x12\x66\n\nattributes\x18\x08 \x03(\x0b\x32,.livekit.SIPDispatchRuleInfo.AttributesEntryB$\xb2P\x1e\xc0P\x01\x12\x13\n\x0broom_preset\x18\t \x01(\t\x12/\n\x0broom_config\x18\n \x01(\x0b\x32\x1a.livekit.RoomConfiguration\x12&\n\x05media\x18\x10 \x01(\x0b\x32\x17.livekit.SIPMediaConfig\x12\x15\n\rkrisp_enabled\x18\x0b \x01(\x08\x12\x39\n\x10media_encryption\x18\x0c \x01(\x0e\x32\x1b.livekit.SIPMediaEncryptionB\x02\x18\x01\x12.\n\ncreated_at\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xe7\x03\n\x15SIPDispatchRuleUpdate\x12&\n\ttrunk_ids\x18\x01 \x01(\x0b\x32\x13.livekit.ListUpdate\x12&\n\x04rule\x18\x02 \x01(\x0b\x32\x18.livekit.SIPDispatchRule\x12\x11\n\x04name\x18\x03 \x01(\tH\x00\x88\x01\x01\x12;\n\x08metadata\x18\x04 \x01(\tB$\xb2P\x1e\xc0P\x01H\x01\x88\x01\x01\x12h\n\nattributes\x18\x05 \x03(\x0b\x32..livekit.SIPDispatchRuleUpdate.AttributesEntryB$\xb2P\x1e\xc0P\x01\x12>\n\x10media_encryption\x18\x06 \x01(\x0e\x32\x1b.livekit.SIPMediaEncryptionB\x02\x18\x01H\x02\x88\x01\x01\x12&\n\x05media\x18\x07 \x01(\x0b\x32\x17.livekit.SIPMediaConfig\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x07\n\x05_nameB\x0b\n\t_metadataB\x13\n\x11_media_encryption\"m\n\x1aListSIPDispatchRuleRequest\x12!\n\x04page\x18\x03 \x01(\x0b\x32\x13.livekit.Pagination\x12\x19\n\x11\x64ispatch_rule_ids\x18\x01 \x03(\t\x12\x11\n\ttrunk_ids\x18\x02 \x03(\t\"J\n\x1bListSIPDispatchRuleResponse\x12+\n\x05items\x18\x01 \x03(\x0b\x32\x1c.livekit.SIPDispatchRuleInfo\"R\n\x1c\x44\x65leteSIPDispatchRuleRequest\x12\x32\n\x14sip_dispatch_rule_id\x18\x01 \x01(\tB\x14\xbaP\x11sipDispatchRuleID\"\xd7\x03\n\x11SIPOutboundConfig\x12\x10\n\x08hostname\x18\x01 \x01(\t\x12\x1b\n\x13\x64\x65stination_country\x18\x07 \x01(\t\x12(\n\ttransport\x18\x02 \x01(\x0e\x32\x15.livekit.SIPTransport\x12\x1a\n\rauth_username\x18\x03 \x01(\tB\x03\xc0P\x01\x12\x1a\n\rauth_password\x18\x04 \x01(\tB\x03\xc0P\x02\x12R\n\x15headers_to_attributes\x18\x05 \x03(\x0b\x32\x33.livekit.SIPOutboundConfig.HeadersToAttributesEntry\x12R\n\x15\x61ttributes_to_headers\x18\x06 \x03(\x0b\x32\x33.livekit.SIPOutboundConfig.AttributesToHeadersEntry\x12\x11\n\tfrom_host\x18\x08 \x01(\t\x1a:\n\x18HeadersToAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a:\n\x18\x41ttributesToHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xa3\x0b\n\x1b\x43reateSIPParticipantRequest\x12#\n\x0csip_trunk_id\x18\x01 \x01(\tB\r\xbaP\nsipTrunkID\x12)\n\x05trunk\x18\x14 \x01(\x0b\x32\x1a.livekit.SIPOutboundConfig\x12\x30\n\x0fsip_request_uri\x18\x18 \x01(\x0b\x32\x17.livekit.SIPRequestDest\x12,\n\rsip_to_header\x18\x19 \x01(\x0b\x32\x15.livekit.SIPNamedDest\x12.\n\x0fsip_from_header\x18\x1a \x01(\x0b\x32\x15.livekit.SIPNamedDest\x12\x13\n\x0bsip_call_to\x18\x02 \x01(\t\x12\x18\n\x10to_user_override\x18\x1b \x01(\t\x12\x12\n\nsip_number\x18\x0f \x01(\t\x12\x11\n\troom_name\x18\x03 \x01(\t\x12\x1c\n\x14participant_identity\x18\x04 \x01(\t\x12>\n\x10participant_name\x18\x07 \x01(\tB$\xb2P\x1e\xc0P\x01\x12\x42\n\x14participant_metadata\x18\x08 \x01(\tB$\xb2P\x1e\xc0P\x01\x12\x85\x01\n\x16participant_attributes\x18\t \x03(\x0b\x32?.livekit.CreateSIPParticipantRequest.ParticipantAttributesEntryB$\xb2P\x1e\xc0P\x01\x12\x0c\n\x04\x64tmf\x18\x05 \x01(\t\x12\x19\n\rplay_ringtone\x18\x06 \x01(\x08\x42\x02\x18\x01\x12\x19\n\rplay_dialtone\x18\r \x01(\x08\x42\x02\x18\x01\x12&\n\x08\x64ialtone\x18\x1c \x01(\x0e\x32\x14.livekit.SIPDialtone\x12\x19\n\x11hide_phone_number\x18\n \x01(\x08\x12h\n\x07headers\x18\x10 \x03(\x0b\x32\x31.livekit.CreateSIPParticipantRequest.HeadersEntryB$\xb2P\x1e\xc0P\x01\x12\x32\n\x0finclude_headers\x18\x11 \x01(\x0e\x32\x19.livekit.SIPHeaderOptions\x12\x32\n\x0fringing_timeout\x18\x0b \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x34\n\x11max_call_duration\x18\x0c \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x15\n\rkrisp_enabled\x18\x0e \x01(\x08\x12\x39\n\x10media_encryption\x18\x12 \x01(\x0e\x32\x1b.livekit.SIPMediaEncryptionB\x02\x18\x01\x12&\n\x05media\x18\x17 \x01(\x0b\x32\x17.livekit.SIPMediaConfig\x12\x1b\n\x13wait_until_answered\x18\x13 \x01(\x08\x12?\n\x0c\x64isplay_name\x18\x15 \x01(\tB$\xb2P\x1e\xc0P\x01H\x00\x88\x01\x01\x12.\n\x0b\x64\x65stination\x18\x16 \x01(\x0b\x32\x14.livekit.DestinationH\x01\x88\x01\x01\x1a<\n\x1aParticipantAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a.\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x0f\n\r_display_nameB\x0e\n\x0c_destination\"\x92\x01\n\x12SIPParticipantInfo\x12(\n\x0eparticipant_id\x18\x01 \x01(\tB\x10\xbaP\rparticipantID\x12\x1c\n\x14participant_identity\x18\x02 \x01(\t\x12\x11\n\troom_name\x18\x03 \x01(\t\x12!\n\x0bsip_call_id\x18\x04 \x01(\tB\x0c\xbaP\tsipCallID\"\xf8\x02\n\x1dTransferSIPParticipantRequest\x12\x1c\n\x14participant_identity\x18\x01 \x01(\t\x12\x11\n\troom_name\x18\x02 \x01(\t\x12\x13\n\x0btransfer_to\x18\x03 \x01(\t\x12\x19\n\rplay_dialtone\x18\x04 \x01(\x08\x42\x02\x18\x01\x12&\n\x08\x64ialtone\x18\x07 \x01(\x0e\x32\x14.livekit.SIPDialtone\x12j\n\x07headers\x18\x05 \x03(\x0b\x32\x33.livekit.TransferSIPParticipantRequest.HeadersEntryB$\xb2P\x1e\xc0P\x01\x12\x32\n\x0fringing_timeout\x18\x06 \x01(\x0b\x32\x19.google.protobuf.Duration\x1a.\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xc4\x01\n\x1eTransferSIPParticipantResponse\x12\"\n\x0btransfer_id\x18\x01 \x01(\tB\r\xbaP\ntransferID\x12*\n\x06status\x18\x02 \x01(\x0e\x32\x1a.livekit.SIPTransferStatus\x12*\n\x06reason\x18\x03 \x01(\x0e\x32\x1a.livekit.SIPTransferReason\x12&\n\nsip_status\x18\x04 \x01(\x0b\x32\x12.livekit.SIPStatus\"\x8a\x01\n\x10SIPTransferError\x12\"\n\x0btransfer_id\x18\x01 \x01(\tB\r\xbaP\ntransferID\x12*\n\x06reason\x18\x02 \x01(\x0e\x32\x1a.livekit.SIPTransferReason\x12&\n\nsip_status\x18\x03 \x01(\x0b\x32\x12.livekit.SIPStatus\"\x99\x08\n\x0bSIPCallInfo\x12\x1a\n\x07\x63\x61ll_id\x18\x01 \x01(\tB\t\xbaP\x06\x63\x61llID\x12\x1c\n\x08trunk_id\x18\x02 \x01(\tB\n\xbaP\x07trunkID\x12+\n\x10\x64ispatch_rule_id\x18\x10 \x01(\tB\x11\xbaP\x0e\x64ispatchRuleID\x12\x0e\n\x06region\x18\x11 \x01(\t\x12\x11\n\troom_name\x18\x03 \x01(\t\x12\x1a\n\x07room_id\x18\x04 \x01(\tB\t\xbaP\x06roomID\x12\x1c\n\x14participant_identity\x18\x05 \x01(\t\x12u\n\x16participant_attributes\x18\x12 \x03(\x0b\x32/.livekit.SIPCallInfo.ParticipantAttributesEntryB$\xb2P\x1e\xc0P\x01\x12!\n\x08\x66rom_uri\x18\x06 \x01(\x0b\x32\x0f.livekit.SIPUri\x12\x1f\n\x06to_uri\x18\x07 \x01(\x0b\x32\x0f.livekit.SIPUri\x12\x16\n\ncreated_at\x18\t \x01(\x03\x42\x02\x18\x01\x12\x16\n\nstarted_at\x18\n \x01(\x03\x42\x02\x18\x01\x12\x14\n\x08\x65nded_at\x18\x0b \x01(\x03\x42\x02\x18\x01\x12-\n\x10\x65nabled_features\x18\x0e \x03(\x0e\x32\x13.livekit.SIPFeature\x12\x31\n\x0e\x63\x61ll_direction\x18\x0f \x01(\x0e\x32\x19.livekit.SIPCallDirection\x12+\n\x0b\x63\x61ll_status\x18\x08 \x01(\x0e\x32\x16.livekit.SIPCallStatus\x12\x15\n\rcreated_at_ns\x18\x16 \x01(\x03\x12\x15\n\rstarted_at_ns\x18\x17 \x01(\x03\x12\x13\n\x0b\x65nded_at_ns\x18\x18 \x01(\x03\x12\x34\n\x11\x64isconnect_reason\x18\x0c \x01(\x0e\x32\x19.livekit.DisconnectReason\x12\r\n\x05\x65rror\x18\r \x01(\t\x12,\n\x10\x63\x61ll_status_code\x18\x13 \x01(\x0b\x32\x12.livekit.SIPStatus\x12\x13\n\x0b\x61udio_codec\x18\x14 \x01(\t\x12\x18\n\x10media_encryption\x18\x15 \x01(\t\x12\x16\n\x0epcap_file_link\x18\x19 \x01(\t\x12*\n\x0c\x63\x61ll_context\x18\x1a \x03(\x0b\x32\x14.google.protobuf.Any\x12,\n\rprovider_info\x18\x1b \x01(\x0b\x32\x15.livekit.ProviderInfo\x12!\n\x0bsip_call_id\x18\x1c \x01(\tB\x0c\xbaP\tsipCallID\x1a<\n\x1aParticipantAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xcc\x02\n\x0fSIPTransferInfo\x12\"\n\x0btransfer_id\x18\x01 \x01(\tB\r\xbaP\ntransferID\x12\x1a\n\x07\x63\x61ll_id\x18\x02 \x01(\tB\t\xbaP\x06\x63\x61llID\x12\x13\n\x0btransfer_to\x18\x03 \x01(\t\x12 \n\x18transfer_initiated_at_ns\x18\x04 \x01(\x03\x12 \n\x18transfer_completed_at_ns\x18\x05 \x01(\x03\x12\x33\n\x0ftransfer_status\x18\x06 \x01(\x0e\x32\x1a.livekit.SIPTransferStatus\x12\r\n\x05\x65rror\x18\x07 \x01(\t\x12\x30\n\x14transfer_status_code\x18\x08 \x01(\x0b\x32\x12.livekit.SIPStatus\x12*\n\x06reason\x18\t \x01(\x0e\x32\x1a.livekit.SIPTransferReason\"h\n\x06SIPUri\x12\x0c\n\x04user\x18\x01 \x01(\t\x12\x0c\n\x04host\x18\x02 \x01(\t\x12\n\n\x02ip\x18\x03 \x01(\t\x12\x0c\n\x04port\x18\x04 \x01(\r\x12(\n\ttransport\x18\x05 \x01(\x0e\x32\x15.livekit.SIPTransport\"I\n\x0eSIPRequestDest\x12\r\n\x03raw\x18\x01 \x01(\tH\x00\x12!\n\x06values\x18\x02 \x01(\x0b\x32\x0f.livekit.SIPUriH\x00\x42\x05\n\x03uri\"]\n\x0cSIPNamedDest\x12\x14\n\x0c\x64isplay_name\x18\x03 \x01(\t\x12\r\n\x03raw\x18\x01 \x01(\tH\x00\x12!\n\x06values\x18\x02 \x01(\x0b\x32\x0f.livekit.SIPUriH\x00\x42\x05\n\x03uri\"<\n\x0b\x44\x65stination\x12\x0c\n\x04\x63ity\x18\x01 \x01(\t\x12\x0f\n\x07\x63ountry\x18\x02 \x01(\t\x12\x0e\n\x06region\x18\x03 \x01(\t*\xde\x14\n\rSIPStatusCode\x12\x16\n\x12SIP_STATUS_UNKNOWN\x10\x00\x12\x15\n\x11SIP_STATUS_TRYING\x10\x64\x12\x17\n\x12SIP_STATUS_RINGING\x10\xb4\x01\x12!\n\x1cSIP_STATUS_CALL_IS_FORWARDED\x10\xb5\x01\x12\x16\n\x11SIP_STATUS_QUEUED\x10\xb6\x01\x12 \n\x1bSIP_STATUS_SESSION_PROGRESS\x10\xb7\x01\x12\'\n\"SIP_STATUS_EARLY_DIALOG_TERMINATED\x10\xc7\x01\x12\x12\n\rSIP_STATUS_OK\x10\xc8\x01\x12\x18\n\x13SIP_STATUS_ACCEPTED\x10\xca\x01\x12\x1f\n\x1aSIP_STATUS_NO_NOTIFICATION\x10\xcc\x01\x12 \n\x1bSIP_STATUS_MULTIPLE_CHOICES\x10\xac\x02\x12!\n\x1cSIP_STATUS_MOVED_PERMANENTLY\x10\xad\x02\x12!\n\x1cSIP_STATUS_MOVED_TEMPORARILY\x10\xae\x02\x12\x19\n\x14SIP_STATUS_USE_PROXY\x10\xb1\x02\x12#\n\x1eSIP_STATUS_ALTERNATIVE_SERVICE\x10\xfc\x02\x12\x1b\n\x16SIP_STATUS_BAD_REQUEST\x10\x90\x03\x12\x1c\n\x17SIP_STATUS_UNAUTHORIZED\x10\x91\x03\x12 \n\x1bSIP_STATUS_PAYMENT_REQUIRED\x10\x92\x03\x12\x19\n\x14SIP_STATUS_FORBIDDEN\x10\x93\x03\x12\x18\n\x13SIP_STATUS_NOTFOUND\x10\x94\x03\x12\"\n\x1dSIP_STATUS_METHOD_NOT_ALLOWED\x10\x95\x03\x12\x1e\n\x19SIP_STATUS_NOT_ACCEPTABLE\x10\x96\x03\x12#\n\x1eSIP_STATUS_PROXY_AUTH_REQUIRED\x10\x97\x03\x12\x1f\n\x1aSIP_STATUS_REQUEST_TIMEOUT\x10\x98\x03\x12\x18\n\x13SIP_STATUS_CONFLICT\x10\x99\x03\x12\x14\n\x0fSIP_STATUS_GONE\x10\x9a\x03\x12\x1f\n\x1aSIP_STATUS_LENGTH_REQUIRED\x10\x9b\x03\x12*\n%SIP_STATUS_CONDITIONAL_REQUEST_FAILED\x10\x9c\x03\x12(\n#SIP_STATUS_REQUEST_ENTITY_TOO_LARGE\x10\x9d\x03\x12$\n\x1fSIP_STATUS_REQUEST_URI_TOO_LONG\x10\x9e\x03\x12&\n!SIP_STATUS_UNSUPPORTED_MEDIA_TYPE\x10\x9f\x03\x12/\n*SIP_STATUS_REQUESTED_RANGE_NOT_SATISFIABLE\x10\xa0\x03\x12)\n$SIP_STATUS_UNKNOWN_RESOURCE_PRIORITY\x10\xa1\x03\x12\x1d\n\x18SIP_STATUS_BAD_EXTENSION\x10\xa4\x03\x12\"\n\x1dSIP_STATUS_EXTENSION_REQUIRED\x10\xa5\x03\x12*\n%SIP_STATUS_SESSION_INTERVAL_TOO_SMALL\x10\xa6\x03\x12\"\n\x1dSIP_STATUS_INTERVAL_TOO_BRIEF\x10\xa7\x03\x12(\n#SIP_STATUS_BAD_LOCATION_INFORMATION\x10\xa8\x03\x12!\n\x1cSIP_STATUS_BAD_ALERT_MESSAGE\x10\xa9\x03\x12#\n\x1eSIP_STATUS_USE_IDENTITY_HEADER\x10\xac\x03\x12)\n$SIP_STATUS_PROVIDE_REFERRER_IDENTITY\x10\xad\x03\x12\x1b\n\x16SIP_STATUS_FLOW_FAILED\x10\xae\x03\x12$\n\x1fSIP_STATUS_ANONYMITY_DISALLOWED\x10\xb1\x03\x12!\n\x1cSIP_STATUS_BAD_IDENTITY_INFO\x10\xb4\x03\x12\'\n\"SIP_STATUS_UNSUPPORTED_CERTIFICATE\x10\xb5\x03\x12\'\n\"SIP_STATUS_INVALID_IDENTITY_HEADER\x10\xb6\x03\x12\x30\n+SIP_STATUS_FIRST_HOP_LACKS_OUTBOUND_SUPPORT\x10\xb7\x03\x12$\n\x1fSIP_STATUS_MAX_BREADTH_EXCEEDED\x10\xb8\x03\x12 \n\x1bSIP_STATUS_BAD_INFO_PACKAGE\x10\xd5\x03\x12\x1e\n\x19SIP_STATUS_CONSENT_NEEDED\x10\xd6\x03\x12\'\n\"SIP_STATUS_TEMPORARILY_UNAVAILABLE\x10\xe0\x03\x12\x30\n+SIP_STATUS_CALL_TRANSACTION_DOES_NOT_EXISTS\x10\xe1\x03\x12\x1d\n\x18SIP_STATUS_LOOP_DETECTED\x10\xe2\x03\x12\x1d\n\x18SIP_STATUS_TOO_MANY_HOPS\x10\xe3\x03\x12\"\n\x1dSIP_STATUS_ADDRESS_INCOMPLETE\x10\xe4\x03\x12\x19\n\x14SIP_STATUS_AMBIGUOUS\x10\xe5\x03\x12\x19\n\x14SIP_STATUS_BUSY_HERE\x10\xe6\x03\x12\"\n\x1dSIP_STATUS_REQUEST_TERMINATED\x10\xe7\x03\x12#\n\x1eSIP_STATUS_NOT_ACCEPTABLE_HERE\x10\xe8\x03\x12\x19\n\x14SIP_STATUS_BAD_EVENT\x10\xe9\x03\x12\x1f\n\x1aSIP_STATUS_REQUEST_PENDING\x10\xeb\x03\x12\x1e\n\x19SIP_STATUS_UNDECIPHERABLE\x10\xed\x03\x12+\n&SIP_STATUS_SECURITY_AGREEMENT_REQUIRED\x10\xee\x03\x12%\n SIP_STATUS_INTERNAL_SERVER_ERROR\x10\xf4\x03\x12\x1f\n\x1aSIP_STATUS_NOT_IMPLEMENTED\x10\xf5\x03\x12\x1b\n\x16SIP_STATUS_BAD_GATEWAY\x10\xf6\x03\x12#\n\x1eSIP_STATUS_SERVICE_UNAVAILABLE\x10\xf7\x03\x12\x1f\n\x1aSIP_STATUS_GATEWAY_TIMEOUT\x10\xf8\x03\x12%\n SIP_STATUS_VERSION_NOT_SUPPORTED\x10\xf9\x03\x12!\n\x1cSIP_STATUS_MESSAGE_TOO_LARGE\x10\x81\x04\x12&\n!SIP_STATUS_GLOBAL_BUSY_EVERYWHERE\x10\xd8\x04\x12\x1e\n\x19SIP_STATUS_GLOBAL_DECLINE\x10\xdb\x04\x12.\n)SIP_STATUS_GLOBAL_DOES_NOT_EXIST_ANYWHERE\x10\xdc\x04\x12%\n SIP_STATUS_GLOBAL_NOT_ACCEPTABLE\x10\xde\x04\x12\x1f\n\x1aSIP_STATUS_GLOBAL_UNWANTED\x10\xdf\x04\x12\x1f\n\x1aSIP_STATUS_GLOBAL_REJECTED\x10\xe0\x04*k\n\x0cSIPTransport\x12\x16\n\x12SIP_TRANSPORT_AUTO\x10\x00\x12\x15\n\x11SIP_TRANSPORT_UDP\x10\x01\x12\x15\n\x11SIP_TRANSPORT_TCP\x10\x02\x12\x15\n\x11SIP_TRANSPORT_TLS\x10\x03*N\n\x10SIPHeaderOptions\x12\x12\n\x0eSIP_NO_HEADERS\x10\x00\x12\x11\n\rSIP_X_HEADERS\x10\x01\x12\x13\n\x0fSIP_ALL_HEADERS\x10\x02*o\n\x12SIPMediaEncryption\x12\x1d\n\x19SIP_MEDIA_ENCRYPT_DISABLE\x10\x00\x12\x1b\n\x17SIP_MEDIA_ENCRYPT_ALLOW\x10\x01\x12\x1d\n\x19SIP_MEDIA_ENCRYPT_REQUIRE\x10\x02*\xaa\x01\n\x0bSIPDialtone\x12\x19\n\x15SIP_DIALTONE_DISABLED\x10\x00\x12\x15\n\x11SIP_DIALTONE_ETSI\x10\x01\x12\x15\n\x11SIP_DIALTONE_AUTO\x10\x02\x12\x13\n\x0fSIP_DIALTONE_US\x10\x03\x12\x13\n\x0fSIP_DIALTONE_UK\x10\x04\x12\x13\n\x0fSIP_DIALTONE_JP\x10\x05\x12\x13\n\x0fSIP_DIALTONE_AU\x10\x06*a\n\x0cProviderType\x12\x19\n\x15PROVIDER_TYPE_UNKNOWN\x10\x00\x12\x1a\n\x16PROVIDER_TYPE_INTERNAL\x10\x01\x12\x1a\n\x16PROVIDER_TYPE_EXTERNAL\x10\x02*w\n\rSIPCallStatus\x12\x15\n\x11SCS_CALL_INCOMING\x10\x00\x12\x1a\n\x16SCS_PARTICIPANT_JOINED\x10\x01\x12\x0e\n\nSCS_ACTIVE\x10\x02\x12\x14\n\x10SCS_DISCONNECTED\x10\x03\x12\r\n\tSCS_ERROR\x10\x04*c\n\x11SIPTransferStatus\x12\x18\n\x14STS_TRANSFER_ONGOING\x10\x00\x12\x17\n\x13STS_TRANSFER_FAILED\x10\x01\x12\x1b\n\x17STS_TRANSFER_SUCCESSFUL\x10\x02*\xad\x01\n\x11SIPTransferReason\x12\x13\n\x0fSTR_UNSPECIFIED\x10\x00\x12\x11\n\rSTR_COMPLETED\x10\x01\x12\x12\n\x0eSTR_CALL_ENDED\x10\x02\x12\x10\n\x0cSTR_REJECTED\x10\x03\x12\x17\n\x13STR_RINGING_TIMEOUT\x10\x04\x12\x1f\n\x1bSTR_SUBSCRIPTION_TERMINATED\x10\x05\x12\x10\n\x0cSTR_CANCELED\x10\x06*)\n\nSIPFeature\x12\x08\n\x04NONE\x10\x00\x12\x11\n\rKRISP_ENABLED\x10\x01*F\n\x10SIPCallDirection\x12\x0f\n\x0bSCD_UNKNOWN\x10\x00\x12\x0f\n\x0bSCD_INBOUND\x10\x01\x12\x10\n\x0cSCD_OUTBOUND\x10\x02\x32\xe8\x0b\n\x03SIP\x12P\n\x0cListSIPTrunk\x12\x1c.livekit.ListSIPTrunkRequest\x1a\x1d.livekit.ListSIPTrunkResponse\"\x03\x88\x02\x01\x12\\\n\x15\x43reateSIPInboundTrunk\x12%.livekit.CreateSIPInboundTrunkRequest\x1a\x1c.livekit.SIPInboundTrunkInfo\x12_\n\x16\x43reateSIPOutboundTrunk\x12&.livekit.CreateSIPOutboundTrunkRequest\x1a\x1d.livekit.SIPOutboundTrunkInfo\x12\\\n\x15UpdateSIPInboundTrunk\x12%.livekit.UpdateSIPInboundTrunkRequest\x1a\x1c.livekit.SIPInboundTrunkInfo\x12_\n\x16UpdateSIPOutboundTrunk\x12&.livekit.UpdateSIPOutboundTrunkRequest\x1a\x1d.livekit.SIPOutboundTrunkInfo\x12]\n\x12GetSIPInboundTrunk\x12\".livekit.GetSIPInboundTrunkRequest\x1a#.livekit.GetSIPInboundTrunkResponse\x12`\n\x13GetSIPOutboundTrunk\x12#.livekit.GetSIPOutboundTrunkRequest\x1a$.livekit.GetSIPOutboundTrunkResponse\x12`\n\x13ListSIPInboundTrunk\x12#.livekit.ListSIPInboundTrunkRequest\x1a$.livekit.ListSIPInboundTrunkResponse\x12\x63\n\x14ListSIPOutboundTrunk\x12$.livekit.ListSIPOutboundTrunkRequest\x1a%.livekit.ListSIPOutboundTrunkResponse\x12G\n\x0e\x44\x65leteSIPTrunk\x12\x1e.livekit.DeleteSIPTrunkRequest\x1a\x15.livekit.SIPTrunkInfo\x12\\\n\x15\x43reateSIPDispatchRule\x12%.livekit.CreateSIPDispatchRuleRequest\x1a\x1c.livekit.SIPDispatchRuleInfo\x12\\\n\x15UpdateSIPDispatchRule\x12%.livekit.UpdateSIPDispatchRuleRequest\x1a\x1c.livekit.SIPDispatchRuleInfo\x12`\n\x13ListSIPDispatchRule\x12#.livekit.ListSIPDispatchRuleRequest\x1a$.livekit.ListSIPDispatchRuleResponse\x12\\\n\x15\x44\x65leteSIPDispatchRule\x12%.livekit.DeleteSIPDispatchRuleRequest\x1a\x1c.livekit.SIPDispatchRuleInfo\x12Y\n\x14\x43reateSIPParticipant\x12$.livekit.CreateSIPParticipantRequest\x1a\x1b.livekit.SIPParticipantInfo\x12i\n\x16TransferSIPParticipant\x12&.livekit.TransferSIPParticipantRequest\x1a\'.livekit.TransferSIPParticipantResponseBFZ#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11livekit_sip.proto\x12\x07livekit\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x14livekit_models.proto\x1a\x12livekit_room.proto\x1a\x14logger/options.proto\"A\n\tSIPStatus\x12$\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x16.livekit.SIPStatusCode\x12\x0e\n\x06status\x18\x02 \x01(\t\"\xe9\x02\n\x15\x43reateSIPTrunkRequest\x12\x19\n\x11inbound_addresses\x18\x01 \x03(\t\x12\x18\n\x10outbound_address\x18\x02 \x01(\t\x12\x17\n\x0foutbound_number\x18\x03 \x01(\t\x12!\n\x15inbound_numbers_regex\x18\x04 \x03(\tB\x02\x18\x01\x12\x17\n\x0finbound_numbers\x18\t \x03(\t\x12\x1d\n\x10inbound_username\x18\x05 \x01(\tB\x03\xc0P\x01\x12\x1d\n\x10inbound_password\x18\x06 \x01(\tB\x03\xc0P\x02\x12\x1e\n\x11outbound_username\x18\x07 \x01(\tB\x03\xc0P\x01\x12\x1e\n\x11outbound_password\x18\x08 \x01(\tB\x03\xc0P\x02\x12\x0c\n\x04name\x18\n \x01(\t\x12\x36\n\x08metadata\x18\x0b \x01(\tB$\xb2P\x1e\xc0P\x01:\x02\x18\x01\"&\n\x08SIPCodec\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04rate\x18\x02 \x01(\r\"\xfd\x01\n\x0eSIPMediaConfig\x12\x1a\n\x12only_listed_codecs\x18\x01 \x01(\x08\x12!\n\x06\x63odecs\x18\x02 \x03(\x0b\x32\x11.livekit.SIPCodec\x12\x34\n\nencryption\x18\x03 \x01(\x0e\x32\x1b.livekit.SIPMediaEncryptionH\x00\x88\x01\x01\x12\x35\n\rmedia_timeout\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationH\x01\x88\x01\x01\x12\x1e\n\x16\x64rop_audio_during_dtmf\x18\x05 \x01(\x08\x42\r\n\x0b_encryptionB\x10\n\x0e_media_timeout\"g\n\x0cProviderInfo\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12#\n\x04type\x18\x03 \x01(\x0e\x32\x15.livekit.ProviderType\x12\x18\n\x10prevent_transfer\x18\x04 \x01(\x08\"\xa4\x04\n\x0cSIPTrunkInfo\x12#\n\x0csip_trunk_id\x18\x01 \x01(\tB\r\xbaP\nsipTrunkID\x12-\n\x04kind\x18\x0e \x01(\x0e\x32\x1f.livekit.SIPTrunkInfo.TrunkKind\x12\x19\n\x11inbound_addresses\x18\x02 \x03(\t\x12\x18\n\x10outbound_address\x18\x03 \x01(\t\x12\x17\n\x0foutbound_number\x18\x04 \x01(\t\x12(\n\ttransport\x18\r \x01(\x0e\x32\x15.livekit.SIPTransport\x12!\n\x15inbound_numbers_regex\x18\x05 \x03(\tB\x02\x18\x01\x12\x17\n\x0finbound_numbers\x18\n \x03(\t\x12\x1d\n\x10inbound_username\x18\x06 \x01(\tB\x03\xc0P\x01\x12\x1d\n\x10inbound_password\x18\x07 \x01(\tB\x03\xc0P\x02\x12\x1e\n\x11outbound_username\x18\x08 \x01(\tB\x03\xc0P\x01\x12\x1e\n\x11outbound_password\x18\t \x01(\tB\x03\xc0P\x02\x12\x0c\n\x04name\x18\x0b \x01(\t\x12\x36\n\x08metadata\x18\x0c \x01(\tB$\xb2P\x1e\xc0P\x01\"D\n\tTrunkKind\x12\x10\n\x0cTRUNK_LEGACY\x10\x00\x12\x11\n\rTRUNK_INBOUND\x10\x01\x12\x12\n\x0eTRUNK_OUTBOUND\x10\x02:\x02\x18\x01\"K\n\x1c\x43reateSIPInboundTrunkRequest\x12+\n\x05trunk\x18\x01 \x01(\x0b\x32\x1c.livekit.SIPInboundTrunkInfo\"\xb0\x01\n\x1cUpdateSIPInboundTrunkRequest\x12#\n\x0csip_trunk_id\x18\x01 \x01(\tB\r\xbaP\nsipTrunkID\x12/\n\x07replace\x18\x02 \x01(\x0b\x32\x1c.livekit.SIPInboundTrunkInfoH\x00\x12\x30\n\x06update\x18\x03 \x01(\x0b\x32\x1e.livekit.SIPInboundTrunkUpdateH\x00\x42\x08\n\x06\x61\x63tion\"\xf7\x08\n\x13SIPInboundTrunkInfo\x12#\n\x0csip_trunk_id\x18\x01 \x01(\tB\r\xbaP\nsipTrunkID\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x36\n\x08metadata\x18\x03 \x01(\tB$\xb2P\x1e\xc0P\x01\x12\x0f\n\x07numbers\x18\x04 \x03(\t\x12\x19\n\x11\x61llowed_addresses\x18\x05 \x03(\t\x12\x17\n\x0f\x61llowed_numbers\x18\x06 \x03(\t\x12\x1a\n\rauth_username\x18\x07 \x01(\tB\x03\xc0P\x01\x12\x1a\n\rauth_password\x18\x08 \x01(\tB\x03\xc0P\x02\x12\x12\n\nauth_realm\x18\x13 \x01(\t\x12`\n\x07headers\x18\t \x03(\x0b\x32).livekit.SIPInboundTrunkInfo.HeadersEntryB$\xb2P\x1e\xc0P\x01\x12T\n\x15headers_to_attributes\x18\n \x03(\x0b\x32\x35.livekit.SIPInboundTrunkInfo.HeadersToAttributesEntry\x12T\n\x15\x61ttributes_to_headers\x18\x0e \x03(\x0b\x32\x35.livekit.SIPInboundTrunkInfo.AttributesToHeadersEntry\x12\x32\n\x0finclude_headers\x18\x0f \x01(\x0e\x32\x19.livekit.SIPHeaderOptions\x12\x32\n\x0fringing_timeout\x18\x0b \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x36\n\x16ringing_timeout_status\x18\x15 \x01(\x0e\x32\x16.livekit.SIPStatusCode\x12\x34\n\x11max_call_duration\x18\x0c \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x15\n\rkrisp_enabled\x18\r \x01(\x08\x12\x39\n\x10media_encryption\x18\x10 \x01(\x0e\x32\x1b.livekit.SIPMediaEncryptionB\x02\x18\x01\x12&\n\x05media\x18\x14 \x01(\x0b\x32\x17.livekit.SIPMediaConfig\x12.\n\ncreated_at\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x12 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x1a.\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a:\n\x18HeadersToAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a:\n\x18\x41ttributesToHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x8c\x04\n\x15SIPInboundTrunkUpdate\x12$\n\x07numbers\x18\x01 \x01(\x0b\x32\x13.livekit.ListUpdate\x12.\n\x11\x61llowed_addresses\x18\x02 \x01(\x0b\x32\x13.livekit.ListUpdate\x12,\n\x0f\x61llowed_numbers\x18\x03 \x01(\x0b\x32\x13.livekit.ListUpdate\x12\x1f\n\rauth_username\x18\x04 \x01(\tB\x03\xc0P\x01H\x00\x88\x01\x01\x12\x1f\n\rauth_password\x18\x05 \x01(\tB\x03\xc0P\x02H\x01\x88\x01\x01\x12\x17\n\nauth_realm\x18\t \x01(\tH\x02\x88\x01\x01\x12\x11\n\x04name\x18\x06 \x01(\tH\x03\x88\x01\x01\x12;\n\x08metadata\x18\x07 \x01(\tB$\xb2P\x1e\xc0P\x01H\x04\x88\x01\x01\x12>\n\x10media_encryption\x18\x08 \x01(\x0e\x32\x1b.livekit.SIPMediaEncryptionB\x02\x18\x01H\x05\x88\x01\x01\x12&\n\x05media\x18\n \x01(\x0b\x32\x17.livekit.SIPMediaConfigB\x10\n\x0e_auth_usernameB\x10\n\x0e_auth_passwordB\r\n\x0b_auth_realmB\x07\n\x05_nameB\x0b\n\t_metadataB\x13\n\x11_media_encryption\"M\n\x1d\x43reateSIPOutboundTrunkRequest\x12,\n\x05trunk\x18\x01 \x01(\x0b\x32\x1d.livekit.SIPOutboundTrunkInfo\"\xb3\x01\n\x1dUpdateSIPOutboundTrunkRequest\x12#\n\x0csip_trunk_id\x18\x01 \x01(\tB\r\xbaP\nsipTrunkID\x12\x30\n\x07replace\x18\x02 \x01(\x0b\x32\x1d.livekit.SIPOutboundTrunkInfoH\x00\x12\x31\n\x06update\x18\x03 \x01(\x0b\x32\x1f.livekit.SIPOutboundTrunkUpdateH\x00\x42\x08\n\x06\x61\x63tion\"\xe5\x07\n\x14SIPOutboundTrunkInfo\x12#\n\x0csip_trunk_id\x18\x01 \x01(\tB\r\xbaP\nsipTrunkID\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x36\n\x08metadata\x18\x03 \x01(\tB$\xb2P\x1e\xc0P\x01\x12\x0f\n\x07\x61\x64\x64ress\x18\x04 \x01(\t\x12\x1b\n\x13\x64\x65stination_country\x18\x0e \x01(\t\x12(\n\ttransport\x18\x05 \x01(\x0e\x32\x15.livekit.SIPTransport\x12\x0f\n\x07numbers\x18\x06 \x03(\t\x12\x1a\n\rauth_username\x18\x07 \x01(\tB\x03\xc0P\x01\x12\x1a\n\rauth_password\x18\x08 \x01(\tB\x03\xc0P\x02\x12\x61\n\x07headers\x18\t \x03(\x0b\x32*.livekit.SIPOutboundTrunkInfo.HeadersEntryB$\xb2P\x1e\xc0P\x01\x12U\n\x15headers_to_attributes\x18\n \x03(\x0b\x32\x36.livekit.SIPOutboundTrunkInfo.HeadersToAttributesEntry\x12U\n\x15\x61ttributes_to_headers\x18\x0b \x03(\x0b\x32\x36.livekit.SIPOutboundTrunkInfo.AttributesToHeadersEntry\x12\x32\n\x0finclude_headers\x18\x0c \x01(\x0e\x32\x19.livekit.SIPHeaderOptions\x12\x39\n\x10media_encryption\x18\r \x01(\x0e\x32\x1b.livekit.SIPMediaEncryptionB\x02\x18\x01\x12&\n\x05media\x18\x12 \x01(\x0b\x32\x17.livekit.SIPMediaConfig\x12\x11\n\tfrom_host\x18\x0f \x01(\t\x12.\n\ncreated_at\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x1a.\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a:\n\x18HeadersToAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a:\n\x18\x41ttributesToHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xc6\x04\n\x16SIPOutboundTrunkUpdate\x12\x14\n\x07\x61\x64\x64ress\x18\x01 \x01(\tH\x00\x88\x01\x01\x12-\n\ttransport\x18\x02 \x01(\x0e\x32\x15.livekit.SIPTransportH\x01\x88\x01\x01\x12 \n\x13\x64\x65stination_country\x18\t \x01(\tH\x02\x88\x01\x01\x12$\n\x07numbers\x18\x03 \x01(\x0b\x32\x13.livekit.ListUpdate\x12\x1f\n\rauth_username\x18\x04 \x01(\tB\x03\xc0P\x01H\x03\x88\x01\x01\x12\x1f\n\rauth_password\x18\x05 \x01(\tB\x03\xc0P\x02H\x04\x88\x01\x01\x12\x11\n\x04name\x18\x06 \x01(\tH\x05\x88\x01\x01\x12;\n\x08metadata\x18\x07 \x01(\tB$\xb2P\x1e\xc0P\x01H\x06\x88\x01\x01\x12>\n\x10media_encryption\x18\x08 \x01(\x0e\x32\x1b.livekit.SIPMediaEncryptionB\x02\x18\x01H\x07\x88\x01\x01\x12&\n\x05media\x18\x0b \x01(\x0b\x32\x17.livekit.SIPMediaConfig\x12\x16\n\tfrom_host\x18\n \x01(\tH\x08\x88\x01\x01\x42\n\n\x08_addressB\x0c\n\n_transportB\x16\n\x14_destination_countryB\x10\n\x0e_auth_usernameB\x10\n\x0e_auth_passwordB\x07\n\x05_nameB\x0b\n\t_metadataB\x13\n\x11_media_encryptionB\x0c\n\n_from_host\"@\n\x19GetSIPInboundTrunkRequest\x12#\n\x0csip_trunk_id\x18\x01 \x01(\tB\r\xbaP\nsipTrunkID\"I\n\x1aGetSIPInboundTrunkResponse\x12+\n\x05trunk\x18\x01 \x01(\x0b\x32\x1c.livekit.SIPInboundTrunkInfo\"A\n\x1aGetSIPOutboundTrunkRequest\x12#\n\x0csip_trunk_id\x18\x01 \x01(\tB\r\xbaP\nsipTrunkID\"K\n\x1bGetSIPOutboundTrunkResponse\x12,\n\x05trunk\x18\x01 \x01(\x0b\x32\x1d.livekit.SIPOutboundTrunkInfo\"<\n\x13ListSIPTrunkRequest\x12!\n\x04page\x18\x01 \x01(\x0b\x32\x13.livekit.Pagination:\x02\x18\x01\"@\n\x14ListSIPTrunkResponse\x12$\n\x05items\x18\x01 \x03(\x0b\x32\x15.livekit.SIPTrunkInfo:\x02\x18\x01\"c\n\x1aListSIPInboundTrunkRequest\x12!\n\x04page\x18\x03 \x01(\x0b\x32\x13.livekit.Pagination\x12\x11\n\ttrunk_ids\x18\x01 \x03(\t\x12\x0f\n\x07numbers\x18\x02 \x03(\t\"J\n\x1bListSIPInboundTrunkResponse\x12+\n\x05items\x18\x01 \x03(\x0b\x32\x1c.livekit.SIPInboundTrunkInfo\"d\n\x1bListSIPOutboundTrunkRequest\x12!\n\x04page\x18\x03 \x01(\x0b\x32\x13.livekit.Pagination\x12\x11\n\ttrunk_ids\x18\x01 \x03(\t\x12\x0f\n\x07numbers\x18\x02 \x03(\t\"L\n\x1cListSIPOutboundTrunkResponse\x12,\n\x05items\x18\x01 \x03(\x0b\x32\x1d.livekit.SIPOutboundTrunkInfo\"<\n\x15\x44\x65leteSIPTrunkRequest\x12#\n\x0csip_trunk_id\x18\x01 \x01(\tB\r\xbaP\nsipTrunkID\"<\n\x15SIPDispatchRuleDirect\x12\x11\n\troom_name\x18\x01 \x01(\t\x12\x10\n\x03pin\x18\x02 \x01(\tB\x03\xc0P\x02\"Y\n\x19SIPDispatchRuleIndividual\x12\x13\n\x0broom_prefix\x18\x01 \x01(\t\x12\x10\n\x03pin\x18\x02 \x01(\tB\x03\xc0P\x02\x12\x15\n\rno_randomness\x18\x03 \x01(\x08\"Q\n\x15SIPDispatchRuleCallee\x12\x13\n\x0broom_prefix\x18\x01 \x01(\t\x12\x10\n\x03pin\x18\x02 \x01(\tB\x03\xc0P\x02\x12\x11\n\trandomize\x18\x03 \x01(\x08\"\xe1\x01\n\x0fSIPDispatchRule\x12>\n\x14\x64ispatch_rule_direct\x18\x01 \x01(\x0b\x32\x1e.livekit.SIPDispatchRuleDirectH\x00\x12\x46\n\x18\x64ispatch_rule_individual\x18\x02 \x01(\x0b\x32\".livekit.SIPDispatchRuleIndividualH\x00\x12>\n\x14\x64ispatch_rule_callee\x18\x03 \x01(\x0b\x32\x1e.livekit.SIPDispatchRuleCalleeH\x00\x42\x06\n\x04rule\"\x92\x04\n\x1c\x43reateSIPDispatchRuleRequest\x12\x33\n\rdispatch_rule\x18\n \x01(\x0b\x32\x1c.livekit.SIPDispatchRuleInfo\x12*\n\x04rule\x18\x01 \x01(\x0b\x32\x18.livekit.SIPDispatchRuleB\x02\x18\x01\x12\x15\n\ttrunk_ids\x18\x02 \x03(\tB\x02\x18\x01\x12\x1d\n\x11hide_phone_number\x18\x03 \x01(\x08\x42\x02\x18\x01\x12\x1b\n\x0finbound_numbers\x18\x06 \x03(\tB\x02\x18\x01\x12\x10\n\x04name\x18\x04 \x01(\tB\x02\x18\x01\x12\x38\n\x08metadata\x18\x05 \x01(\tB&\x18\x01\xb2P\x1e\xc0P\x01\x12q\n\nattributes\x18\x07 \x03(\x0b\x32\x35.livekit.CreateSIPDispatchRuleRequest.AttributesEntryB&\x18\x01\xb2P\x1e\xc0P\x01\x12\x17\n\x0broom_preset\x18\x08 \x01(\tB\x02\x18\x01\x12\x33\n\x0broom_config\x18\t \x01(\x0b\x32\x1a.livekit.RoomConfigurationB\x02\x18\x01\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xbf\x01\n\x1cUpdateSIPDispatchRuleRequest\x12\x32\n\x14sip_dispatch_rule_id\x18\x01 \x01(\tB\x14\xbaP\x11sipDispatchRuleID\x12/\n\x07replace\x18\x02 \x01(\x0b\x32\x1c.livekit.SIPDispatchRuleInfoH\x00\x12\x30\n\x06update\x18\x03 \x01(\x0b\x32\x1e.livekit.SIPDispatchRuleUpdateH\x00\x42\x08\n\x06\x61\x63tion\"\xca\x05\n\x13SIPDispatchRuleInfo\x12\x32\n\x14sip_dispatch_rule_id\x18\x01 \x01(\tB\x14\xbaP\x11sipDispatchRuleID\x12&\n\x04rule\x18\x02 \x01(\x0b\x32\x18.livekit.SIPDispatchRule\x12\x11\n\ttrunk_ids\x18\x03 \x03(\t\x12\x19\n\x11hide_phone_number\x18\x04 \x01(\x08\x12\x17\n\x0finbound_numbers\x18\x07 \x03(\t\x12\x0f\n\x07numbers\x18\r \x03(\t\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x36\n\x08metadata\x18\x06 \x01(\tB$\xb2P\x1e\xc0P\x01\x12\x66\n\nattributes\x18\x08 \x03(\x0b\x32,.livekit.SIPDispatchRuleInfo.AttributesEntryB$\xb2P\x1e\xc0P\x01\x12\x13\n\x0broom_preset\x18\t \x01(\t\x12/\n\x0broom_config\x18\n \x01(\x0b\x32\x1a.livekit.RoomConfiguration\x12&\n\x05media\x18\x10 \x01(\x0b\x32\x17.livekit.SIPMediaConfig\x12\x15\n\rkrisp_enabled\x18\x0b \x01(\x08\x12\x39\n\x10media_encryption\x18\x0c \x01(\x0e\x32\x1b.livekit.SIPMediaEncryptionB\x02\x18\x01\x12.\n\ncreated_at\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xe7\x03\n\x15SIPDispatchRuleUpdate\x12&\n\ttrunk_ids\x18\x01 \x01(\x0b\x32\x13.livekit.ListUpdate\x12&\n\x04rule\x18\x02 \x01(\x0b\x32\x18.livekit.SIPDispatchRule\x12\x11\n\x04name\x18\x03 \x01(\tH\x00\x88\x01\x01\x12;\n\x08metadata\x18\x04 \x01(\tB$\xb2P\x1e\xc0P\x01H\x01\x88\x01\x01\x12h\n\nattributes\x18\x05 \x03(\x0b\x32..livekit.SIPDispatchRuleUpdate.AttributesEntryB$\xb2P\x1e\xc0P\x01\x12>\n\x10media_encryption\x18\x06 \x01(\x0e\x32\x1b.livekit.SIPMediaEncryptionB\x02\x18\x01H\x02\x88\x01\x01\x12&\n\x05media\x18\x07 \x01(\x0b\x32\x17.livekit.SIPMediaConfig\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x07\n\x05_nameB\x0b\n\t_metadataB\x13\n\x11_media_encryption\"m\n\x1aListSIPDispatchRuleRequest\x12!\n\x04page\x18\x03 \x01(\x0b\x32\x13.livekit.Pagination\x12\x19\n\x11\x64ispatch_rule_ids\x18\x01 \x03(\t\x12\x11\n\ttrunk_ids\x18\x02 \x03(\t\"J\n\x1bListSIPDispatchRuleResponse\x12+\n\x05items\x18\x01 \x03(\x0b\x32\x1c.livekit.SIPDispatchRuleInfo\"R\n\x1c\x44\x65leteSIPDispatchRuleRequest\x12\x32\n\x14sip_dispatch_rule_id\x18\x01 \x01(\tB\x14\xbaP\x11sipDispatchRuleID\"\xd7\x03\n\x11SIPOutboundConfig\x12\x10\n\x08hostname\x18\x01 \x01(\t\x12\x1b\n\x13\x64\x65stination_country\x18\x07 \x01(\t\x12(\n\ttransport\x18\x02 \x01(\x0e\x32\x15.livekit.SIPTransport\x12\x1a\n\rauth_username\x18\x03 \x01(\tB\x03\xc0P\x01\x12\x1a\n\rauth_password\x18\x04 \x01(\tB\x03\xc0P\x02\x12R\n\x15headers_to_attributes\x18\x05 \x03(\x0b\x32\x33.livekit.SIPOutboundConfig.HeadersToAttributesEntry\x12R\n\x15\x61ttributes_to_headers\x18\x06 \x03(\x0b\x32\x33.livekit.SIPOutboundConfig.AttributesToHeadersEntry\x12\x11\n\tfrom_host\x18\x08 \x01(\t\x1a:\n\x18HeadersToAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a:\n\x18\x41ttributesToHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xd3\x0b\n\x1b\x43reateSIPParticipantRequest\x12#\n\x0csip_trunk_id\x18\x01 \x01(\tB\r\xbaP\nsipTrunkID\x12)\n\x05trunk\x18\x14 \x01(\x0b\x32\x1a.livekit.SIPOutboundConfig\x12\x30\n\x0fsip_request_uri\x18\x18 \x01(\x0b\x32\x17.livekit.SIPRequestDest\x12,\n\rsip_to_header\x18\x19 \x01(\x0b\x32\x15.livekit.SIPNamedDest\x12.\n\x0fsip_from_header\x18\x1a \x01(\x0b\x32\x15.livekit.SIPNamedDest\x12\x13\n\x0bsip_call_to\x18\x02 \x01(\t\x12\x18\n\x10to_user_override\x18\x1b \x01(\t\x12\x12\n\nsip_number\x18\x0f \x01(\t\x12\x11\n\troom_name\x18\x03 \x01(\t\x12\x1c\n\x14participant_identity\x18\x04 \x01(\t\x12>\n\x10participant_name\x18\x07 \x01(\tB$\xb2P\x1e\xc0P\x01\x12\x42\n\x14participant_metadata\x18\x08 \x01(\tB$\xb2P\x1e\xc0P\x01\x12\x85\x01\n\x16participant_attributes\x18\t \x03(\x0b\x32?.livekit.CreateSIPParticipantRequest.ParticipantAttributesEntryB$\xb2P\x1e\xc0P\x01\x12\x0c\n\x04\x64tmf\x18\x05 \x01(\t\x12\x19\n\rplay_ringtone\x18\x06 \x01(\x08\x42\x02\x18\x01\x12\x19\n\rplay_dialtone\x18\r \x01(\x08\x42\x02\x18\x01\x12&\n\x08\x64ialtone\x18\x1c \x01(\x0e\x32\x14.livekit.SIPDialtone\x12\x19\n\x11hide_phone_number\x18\n \x01(\x08\x12h\n\x07headers\x18\x10 \x03(\x0b\x32\x31.livekit.CreateSIPParticipantRequest.HeadersEntryB$\xb2P\x1e\xc0P\x01\x12\x32\n\x0finclude_headers\x18\x11 \x01(\x0e\x32\x19.livekit.SIPHeaderOptions\x12\x32\n\x0fringing_timeout\x18\x0b \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x34\n\x11max_call_duration\x18\x0c \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x15\n\rkrisp_enabled\x18\x0e \x01(\x08\x12\x39\n\x10media_encryption\x18\x12 \x01(\x0e\x32\x1b.livekit.SIPMediaEncryptionB\x02\x18\x01\x12&\n\x05media\x18\x17 \x01(\x0b\x32\x17.livekit.SIPMediaConfig\x12\x1b\n\x13wait_until_answered\x18\x13 \x01(\x08\x12?\n\x0c\x64isplay_name\x18\x15 \x01(\tB$\xb2P\x1e\xc0P\x01H\x00\x88\x01\x01\x12.\n\x0b\x64\x65stination\x18\x16 \x01(\x0b\x32\x14.livekit.DestinationH\x01\x88\x01\x01\x12.\n\x12sip_source_call_id\x18\x1d \x01(\tB\x12\xbaP\x0fsipSourceCallID\x1a<\n\x1aParticipantAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a.\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x0f\n\r_display_nameB\x0e\n\x0c_destination\"\x92\x01\n\x12SIPParticipantInfo\x12(\n\x0eparticipant_id\x18\x01 \x01(\tB\x10\xbaP\rparticipantID\x12\x1c\n\x14participant_identity\x18\x02 \x01(\t\x12\x11\n\troom_name\x18\x03 \x01(\t\x12!\n\x0bsip_call_id\x18\x04 \x01(\tB\x0c\xbaP\tsipCallID\"\xf8\x02\n\x1dTransferSIPParticipantRequest\x12\x1c\n\x14participant_identity\x18\x01 \x01(\t\x12\x11\n\troom_name\x18\x02 \x01(\t\x12\x13\n\x0btransfer_to\x18\x03 \x01(\t\x12\x19\n\rplay_dialtone\x18\x04 \x01(\x08\x42\x02\x18\x01\x12&\n\x08\x64ialtone\x18\x07 \x01(\x0e\x32\x14.livekit.SIPDialtone\x12j\n\x07headers\x18\x05 \x03(\x0b\x32\x33.livekit.TransferSIPParticipantRequest.HeadersEntryB$\xb2P\x1e\xc0P\x01\x12\x32\n\x0fringing_timeout\x18\x06 \x01(\x0b\x32\x19.google.protobuf.Duration\x1a.\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xc4\x01\n\x1eTransferSIPParticipantResponse\x12\"\n\x0btransfer_id\x18\x01 \x01(\tB\r\xbaP\ntransferID\x12*\n\x06status\x18\x02 \x01(\x0e\x32\x1a.livekit.SIPTransferStatus\x12*\n\x06reason\x18\x03 \x01(\x0e\x32\x1a.livekit.SIPTransferReason\x12&\n\nsip_status\x18\x04 \x01(\x0b\x32\x12.livekit.SIPStatus\"\x8a\x01\n\x10SIPTransferError\x12\"\n\x0btransfer_id\x18\x01 \x01(\tB\r\xbaP\ntransferID\x12*\n\x06reason\x18\x02 \x01(\x0e\x32\x1a.livekit.SIPTransferReason\x12&\n\nsip_status\x18\x03 \x01(\x0b\x32\x12.livekit.SIPStatus\"\x99\x08\n\x0bSIPCallInfo\x12\x1a\n\x07\x63\x61ll_id\x18\x01 \x01(\tB\t\xbaP\x06\x63\x61llID\x12\x1c\n\x08trunk_id\x18\x02 \x01(\tB\n\xbaP\x07trunkID\x12+\n\x10\x64ispatch_rule_id\x18\x10 \x01(\tB\x11\xbaP\x0e\x64ispatchRuleID\x12\x0e\n\x06region\x18\x11 \x01(\t\x12\x11\n\troom_name\x18\x03 \x01(\t\x12\x1a\n\x07room_id\x18\x04 \x01(\tB\t\xbaP\x06roomID\x12\x1c\n\x14participant_identity\x18\x05 \x01(\t\x12u\n\x16participant_attributes\x18\x12 \x03(\x0b\x32/.livekit.SIPCallInfo.ParticipantAttributesEntryB$\xb2P\x1e\xc0P\x01\x12!\n\x08\x66rom_uri\x18\x06 \x01(\x0b\x32\x0f.livekit.SIPUri\x12\x1f\n\x06to_uri\x18\x07 \x01(\x0b\x32\x0f.livekit.SIPUri\x12\x16\n\ncreated_at\x18\t \x01(\x03\x42\x02\x18\x01\x12\x16\n\nstarted_at\x18\n \x01(\x03\x42\x02\x18\x01\x12\x14\n\x08\x65nded_at\x18\x0b \x01(\x03\x42\x02\x18\x01\x12-\n\x10\x65nabled_features\x18\x0e \x03(\x0e\x32\x13.livekit.SIPFeature\x12\x31\n\x0e\x63\x61ll_direction\x18\x0f \x01(\x0e\x32\x19.livekit.SIPCallDirection\x12+\n\x0b\x63\x61ll_status\x18\x08 \x01(\x0e\x32\x16.livekit.SIPCallStatus\x12\x15\n\rcreated_at_ns\x18\x16 \x01(\x03\x12\x15\n\rstarted_at_ns\x18\x17 \x01(\x03\x12\x13\n\x0b\x65nded_at_ns\x18\x18 \x01(\x03\x12\x34\n\x11\x64isconnect_reason\x18\x0c \x01(\x0e\x32\x19.livekit.DisconnectReason\x12\r\n\x05\x65rror\x18\r \x01(\t\x12,\n\x10\x63\x61ll_status_code\x18\x13 \x01(\x0b\x32\x12.livekit.SIPStatus\x12\x13\n\x0b\x61udio_codec\x18\x14 \x01(\t\x12\x18\n\x10media_encryption\x18\x15 \x01(\t\x12\x16\n\x0epcap_file_link\x18\x19 \x01(\t\x12*\n\x0c\x63\x61ll_context\x18\x1a \x03(\x0b\x32\x14.google.protobuf.Any\x12,\n\rprovider_info\x18\x1b \x01(\x0b\x32\x15.livekit.ProviderInfo\x12!\n\x0bsip_call_id\x18\x1c \x01(\tB\x0c\xbaP\tsipCallID\x1a<\n\x1aParticipantAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xcc\x02\n\x0fSIPTransferInfo\x12\"\n\x0btransfer_id\x18\x01 \x01(\tB\r\xbaP\ntransferID\x12\x1a\n\x07\x63\x61ll_id\x18\x02 \x01(\tB\t\xbaP\x06\x63\x61llID\x12\x13\n\x0btransfer_to\x18\x03 \x01(\t\x12 \n\x18transfer_initiated_at_ns\x18\x04 \x01(\x03\x12 \n\x18transfer_completed_at_ns\x18\x05 \x01(\x03\x12\x33\n\x0ftransfer_status\x18\x06 \x01(\x0e\x32\x1a.livekit.SIPTransferStatus\x12\r\n\x05\x65rror\x18\x07 \x01(\t\x12\x30\n\x14transfer_status_code\x18\x08 \x01(\x0b\x32\x12.livekit.SIPStatus\x12*\n\x06reason\x18\t \x01(\x0e\x32\x1a.livekit.SIPTransferReason\"h\n\x06SIPUri\x12\x0c\n\x04user\x18\x01 \x01(\t\x12\x0c\n\x04host\x18\x02 \x01(\t\x12\n\n\x02ip\x18\x03 \x01(\t\x12\x0c\n\x04port\x18\x04 \x01(\r\x12(\n\ttransport\x18\x05 \x01(\x0e\x32\x15.livekit.SIPTransport\"I\n\x0eSIPRequestDest\x12\r\n\x03raw\x18\x01 \x01(\tH\x00\x12!\n\x06values\x18\x02 \x01(\x0b\x32\x0f.livekit.SIPUriH\x00\x42\x05\n\x03uri\"]\n\x0cSIPNamedDest\x12\x14\n\x0c\x64isplay_name\x18\x03 \x01(\t\x12\r\n\x03raw\x18\x01 \x01(\tH\x00\x12!\n\x06values\x18\x02 \x01(\x0b\x32\x0f.livekit.SIPUriH\x00\x42\x05\n\x03uri\"<\n\x0b\x44\x65stination\x12\x0c\n\x04\x63ity\x18\x01 \x01(\t\x12\x0f\n\x07\x63ountry\x18\x02 \x01(\t\x12\x0e\n\x06region\x18\x03 \x01(\t*\xde\x14\n\rSIPStatusCode\x12\x16\n\x12SIP_STATUS_UNKNOWN\x10\x00\x12\x15\n\x11SIP_STATUS_TRYING\x10\x64\x12\x17\n\x12SIP_STATUS_RINGING\x10\xb4\x01\x12!\n\x1cSIP_STATUS_CALL_IS_FORWARDED\x10\xb5\x01\x12\x16\n\x11SIP_STATUS_QUEUED\x10\xb6\x01\x12 \n\x1bSIP_STATUS_SESSION_PROGRESS\x10\xb7\x01\x12\'\n\"SIP_STATUS_EARLY_DIALOG_TERMINATED\x10\xc7\x01\x12\x12\n\rSIP_STATUS_OK\x10\xc8\x01\x12\x18\n\x13SIP_STATUS_ACCEPTED\x10\xca\x01\x12\x1f\n\x1aSIP_STATUS_NO_NOTIFICATION\x10\xcc\x01\x12 \n\x1bSIP_STATUS_MULTIPLE_CHOICES\x10\xac\x02\x12!\n\x1cSIP_STATUS_MOVED_PERMANENTLY\x10\xad\x02\x12!\n\x1cSIP_STATUS_MOVED_TEMPORARILY\x10\xae\x02\x12\x19\n\x14SIP_STATUS_USE_PROXY\x10\xb1\x02\x12#\n\x1eSIP_STATUS_ALTERNATIVE_SERVICE\x10\xfc\x02\x12\x1b\n\x16SIP_STATUS_BAD_REQUEST\x10\x90\x03\x12\x1c\n\x17SIP_STATUS_UNAUTHORIZED\x10\x91\x03\x12 \n\x1bSIP_STATUS_PAYMENT_REQUIRED\x10\x92\x03\x12\x19\n\x14SIP_STATUS_FORBIDDEN\x10\x93\x03\x12\x18\n\x13SIP_STATUS_NOTFOUND\x10\x94\x03\x12\"\n\x1dSIP_STATUS_METHOD_NOT_ALLOWED\x10\x95\x03\x12\x1e\n\x19SIP_STATUS_NOT_ACCEPTABLE\x10\x96\x03\x12#\n\x1eSIP_STATUS_PROXY_AUTH_REQUIRED\x10\x97\x03\x12\x1f\n\x1aSIP_STATUS_REQUEST_TIMEOUT\x10\x98\x03\x12\x18\n\x13SIP_STATUS_CONFLICT\x10\x99\x03\x12\x14\n\x0fSIP_STATUS_GONE\x10\x9a\x03\x12\x1f\n\x1aSIP_STATUS_LENGTH_REQUIRED\x10\x9b\x03\x12*\n%SIP_STATUS_CONDITIONAL_REQUEST_FAILED\x10\x9c\x03\x12(\n#SIP_STATUS_REQUEST_ENTITY_TOO_LARGE\x10\x9d\x03\x12$\n\x1fSIP_STATUS_REQUEST_URI_TOO_LONG\x10\x9e\x03\x12&\n!SIP_STATUS_UNSUPPORTED_MEDIA_TYPE\x10\x9f\x03\x12/\n*SIP_STATUS_REQUESTED_RANGE_NOT_SATISFIABLE\x10\xa0\x03\x12)\n$SIP_STATUS_UNKNOWN_RESOURCE_PRIORITY\x10\xa1\x03\x12\x1d\n\x18SIP_STATUS_BAD_EXTENSION\x10\xa4\x03\x12\"\n\x1dSIP_STATUS_EXTENSION_REQUIRED\x10\xa5\x03\x12*\n%SIP_STATUS_SESSION_INTERVAL_TOO_SMALL\x10\xa6\x03\x12\"\n\x1dSIP_STATUS_INTERVAL_TOO_BRIEF\x10\xa7\x03\x12(\n#SIP_STATUS_BAD_LOCATION_INFORMATION\x10\xa8\x03\x12!\n\x1cSIP_STATUS_BAD_ALERT_MESSAGE\x10\xa9\x03\x12#\n\x1eSIP_STATUS_USE_IDENTITY_HEADER\x10\xac\x03\x12)\n$SIP_STATUS_PROVIDE_REFERRER_IDENTITY\x10\xad\x03\x12\x1b\n\x16SIP_STATUS_FLOW_FAILED\x10\xae\x03\x12$\n\x1fSIP_STATUS_ANONYMITY_DISALLOWED\x10\xb1\x03\x12!\n\x1cSIP_STATUS_BAD_IDENTITY_INFO\x10\xb4\x03\x12\'\n\"SIP_STATUS_UNSUPPORTED_CERTIFICATE\x10\xb5\x03\x12\'\n\"SIP_STATUS_INVALID_IDENTITY_HEADER\x10\xb6\x03\x12\x30\n+SIP_STATUS_FIRST_HOP_LACKS_OUTBOUND_SUPPORT\x10\xb7\x03\x12$\n\x1fSIP_STATUS_MAX_BREADTH_EXCEEDED\x10\xb8\x03\x12 \n\x1bSIP_STATUS_BAD_INFO_PACKAGE\x10\xd5\x03\x12\x1e\n\x19SIP_STATUS_CONSENT_NEEDED\x10\xd6\x03\x12\'\n\"SIP_STATUS_TEMPORARILY_UNAVAILABLE\x10\xe0\x03\x12\x30\n+SIP_STATUS_CALL_TRANSACTION_DOES_NOT_EXISTS\x10\xe1\x03\x12\x1d\n\x18SIP_STATUS_LOOP_DETECTED\x10\xe2\x03\x12\x1d\n\x18SIP_STATUS_TOO_MANY_HOPS\x10\xe3\x03\x12\"\n\x1dSIP_STATUS_ADDRESS_INCOMPLETE\x10\xe4\x03\x12\x19\n\x14SIP_STATUS_AMBIGUOUS\x10\xe5\x03\x12\x19\n\x14SIP_STATUS_BUSY_HERE\x10\xe6\x03\x12\"\n\x1dSIP_STATUS_REQUEST_TERMINATED\x10\xe7\x03\x12#\n\x1eSIP_STATUS_NOT_ACCEPTABLE_HERE\x10\xe8\x03\x12\x19\n\x14SIP_STATUS_BAD_EVENT\x10\xe9\x03\x12\x1f\n\x1aSIP_STATUS_REQUEST_PENDING\x10\xeb\x03\x12\x1e\n\x19SIP_STATUS_UNDECIPHERABLE\x10\xed\x03\x12+\n&SIP_STATUS_SECURITY_AGREEMENT_REQUIRED\x10\xee\x03\x12%\n SIP_STATUS_INTERNAL_SERVER_ERROR\x10\xf4\x03\x12\x1f\n\x1aSIP_STATUS_NOT_IMPLEMENTED\x10\xf5\x03\x12\x1b\n\x16SIP_STATUS_BAD_GATEWAY\x10\xf6\x03\x12#\n\x1eSIP_STATUS_SERVICE_UNAVAILABLE\x10\xf7\x03\x12\x1f\n\x1aSIP_STATUS_GATEWAY_TIMEOUT\x10\xf8\x03\x12%\n SIP_STATUS_VERSION_NOT_SUPPORTED\x10\xf9\x03\x12!\n\x1cSIP_STATUS_MESSAGE_TOO_LARGE\x10\x81\x04\x12&\n!SIP_STATUS_GLOBAL_BUSY_EVERYWHERE\x10\xd8\x04\x12\x1e\n\x19SIP_STATUS_GLOBAL_DECLINE\x10\xdb\x04\x12.\n)SIP_STATUS_GLOBAL_DOES_NOT_EXIST_ANYWHERE\x10\xdc\x04\x12%\n SIP_STATUS_GLOBAL_NOT_ACCEPTABLE\x10\xde\x04\x12\x1f\n\x1aSIP_STATUS_GLOBAL_UNWANTED\x10\xdf\x04\x12\x1f\n\x1aSIP_STATUS_GLOBAL_REJECTED\x10\xe0\x04*k\n\x0cSIPTransport\x12\x16\n\x12SIP_TRANSPORT_AUTO\x10\x00\x12\x15\n\x11SIP_TRANSPORT_UDP\x10\x01\x12\x15\n\x11SIP_TRANSPORT_TCP\x10\x02\x12\x15\n\x11SIP_TRANSPORT_TLS\x10\x03*N\n\x10SIPHeaderOptions\x12\x12\n\x0eSIP_NO_HEADERS\x10\x00\x12\x11\n\rSIP_X_HEADERS\x10\x01\x12\x13\n\x0fSIP_ALL_HEADERS\x10\x02*o\n\x12SIPMediaEncryption\x12\x1d\n\x19SIP_MEDIA_ENCRYPT_DISABLE\x10\x00\x12\x1b\n\x17SIP_MEDIA_ENCRYPT_ALLOW\x10\x01\x12\x1d\n\x19SIP_MEDIA_ENCRYPT_REQUIRE\x10\x02*\xaa\x01\n\x0bSIPDialtone\x12\x19\n\x15SIP_DIALTONE_DISABLED\x10\x00\x12\x15\n\x11SIP_DIALTONE_ETSI\x10\x01\x12\x15\n\x11SIP_DIALTONE_AUTO\x10\x02\x12\x13\n\x0fSIP_DIALTONE_US\x10\x03\x12\x13\n\x0fSIP_DIALTONE_UK\x10\x04\x12\x13\n\x0fSIP_DIALTONE_JP\x10\x05\x12\x13\n\x0fSIP_DIALTONE_AU\x10\x06*a\n\x0cProviderType\x12\x19\n\x15PROVIDER_TYPE_UNKNOWN\x10\x00\x12\x1a\n\x16PROVIDER_TYPE_INTERNAL\x10\x01\x12\x1a\n\x16PROVIDER_TYPE_EXTERNAL\x10\x02*w\n\rSIPCallStatus\x12\x15\n\x11SCS_CALL_INCOMING\x10\x00\x12\x1a\n\x16SCS_PARTICIPANT_JOINED\x10\x01\x12\x0e\n\nSCS_ACTIVE\x10\x02\x12\x14\n\x10SCS_DISCONNECTED\x10\x03\x12\r\n\tSCS_ERROR\x10\x04*c\n\x11SIPTransferStatus\x12\x18\n\x14STS_TRANSFER_ONGOING\x10\x00\x12\x17\n\x13STS_TRANSFER_FAILED\x10\x01\x12\x1b\n\x17STS_TRANSFER_SUCCESSFUL\x10\x02*\xad\x01\n\x11SIPTransferReason\x12\x13\n\x0fSTR_UNSPECIFIED\x10\x00\x12\x11\n\rSTR_COMPLETED\x10\x01\x12\x12\n\x0eSTR_CALL_ENDED\x10\x02\x12\x10\n\x0cSTR_REJECTED\x10\x03\x12\x17\n\x13STR_RINGING_TIMEOUT\x10\x04\x12\x1f\n\x1bSTR_SUBSCRIPTION_TERMINATED\x10\x05\x12\x10\n\x0cSTR_CANCELED\x10\x06*)\n\nSIPFeature\x12\x08\n\x04NONE\x10\x00\x12\x11\n\rKRISP_ENABLED\x10\x01*F\n\x10SIPCallDirection\x12\x0f\n\x0bSCD_UNKNOWN\x10\x00\x12\x0f\n\x0bSCD_INBOUND\x10\x01\x12\x10\n\x0cSCD_OUTBOUND\x10\x02\x32\xe8\x0b\n\x03SIP\x12P\n\x0cListSIPTrunk\x12\x1c.livekit.ListSIPTrunkRequest\x1a\x1d.livekit.ListSIPTrunkResponse\"\x03\x88\x02\x01\x12\\\n\x15\x43reateSIPInboundTrunk\x12%.livekit.CreateSIPInboundTrunkRequest\x1a\x1c.livekit.SIPInboundTrunkInfo\x12_\n\x16\x43reateSIPOutboundTrunk\x12&.livekit.CreateSIPOutboundTrunkRequest\x1a\x1d.livekit.SIPOutboundTrunkInfo\x12\\\n\x15UpdateSIPInboundTrunk\x12%.livekit.UpdateSIPInboundTrunkRequest\x1a\x1c.livekit.SIPInboundTrunkInfo\x12_\n\x16UpdateSIPOutboundTrunk\x12&.livekit.UpdateSIPOutboundTrunkRequest\x1a\x1d.livekit.SIPOutboundTrunkInfo\x12]\n\x12GetSIPInboundTrunk\x12\".livekit.GetSIPInboundTrunkRequest\x1a#.livekit.GetSIPInboundTrunkResponse\x12`\n\x13GetSIPOutboundTrunk\x12#.livekit.GetSIPOutboundTrunkRequest\x1a$.livekit.GetSIPOutboundTrunkResponse\x12`\n\x13ListSIPInboundTrunk\x12#.livekit.ListSIPInboundTrunkRequest\x1a$.livekit.ListSIPInboundTrunkResponse\x12\x63\n\x14ListSIPOutboundTrunk\x12$.livekit.ListSIPOutboundTrunkRequest\x1a%.livekit.ListSIPOutboundTrunkResponse\x12G\n\x0e\x44\x65leteSIPTrunk\x12\x1e.livekit.DeleteSIPTrunkRequest\x1a\x15.livekit.SIPTrunkInfo\x12\\\n\x15\x43reateSIPDispatchRule\x12%.livekit.CreateSIPDispatchRuleRequest\x1a\x1c.livekit.SIPDispatchRuleInfo\x12\\\n\x15UpdateSIPDispatchRule\x12%.livekit.UpdateSIPDispatchRuleRequest\x1a\x1c.livekit.SIPDispatchRuleInfo\x12`\n\x13ListSIPDispatchRule\x12#.livekit.ListSIPDispatchRuleRequest\x1a$.livekit.ListSIPDispatchRuleResponse\x12\\\n\x15\x44\x65leteSIPDispatchRule\x12%.livekit.DeleteSIPDispatchRuleRequest\x1a\x1c.livekit.SIPDispatchRuleInfo\x12Y\n\x14\x43reateSIPParticipant\x12$.livekit.CreateSIPParticipantRequest\x1a\x1b.livekit.SIPParticipantInfo\x12i\n\x16TransferSIPParticipant\x12&.livekit.TransferSIPParticipantRequest\x1a\'.livekit.TransferSIPParticipantResponseBFZ#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -212,6 +212,8 @@ _globals['_CREATESIPPARTICIPANTREQUEST'].fields_by_name['media_encryption']._serialized_options = b'\030\001' _globals['_CREATESIPPARTICIPANTREQUEST'].fields_by_name['display_name']._loaded_options = None _globals['_CREATESIPPARTICIPANTREQUEST'].fields_by_name['display_name']._serialized_options = b'\262P\036\300P\001' + _globals['_CREATESIPPARTICIPANTREQUEST'].fields_by_name['sip_source_call_id']._loaded_options = None + _globals['_CREATESIPPARTICIPANTREQUEST'].fields_by_name['sip_source_call_id']._serialized_options = b'\272P\017sipSourceCallID' _globals['_SIPPARTICIPANTINFO'].fields_by_name['participant_id']._loaded_options = None _globals['_SIPPARTICIPANTINFO'].fields_by_name['participant_id']._serialized_options = b'\272P\rparticipantID' _globals['_SIPPARTICIPANTINFO'].fields_by_name['sip_call_id']._loaded_options = None @@ -252,28 +254,28 @@ _globals['_SIPTRANSFERINFO'].fields_by_name['call_id']._serialized_options = b'\272P\006callID' _globals['_SIP'].methods_by_name['ListSIPTrunk']._loaded_options = None _globals['_SIP'].methods_by_name['ListSIPTrunk']._serialized_options = b'\210\002\001' - _globals['_SIPSTATUSCODE']._serialized_start=13359 - _globals['_SIPSTATUSCODE']._serialized_end=16013 - _globals['_SIPTRANSPORT']._serialized_start=16015 - _globals['_SIPTRANSPORT']._serialized_end=16122 - _globals['_SIPHEADEROPTIONS']._serialized_start=16124 - _globals['_SIPHEADEROPTIONS']._serialized_end=16202 - _globals['_SIPMEDIAENCRYPTION']._serialized_start=16204 - _globals['_SIPMEDIAENCRYPTION']._serialized_end=16315 - _globals['_SIPDIALTONE']._serialized_start=16318 - _globals['_SIPDIALTONE']._serialized_end=16488 - _globals['_PROVIDERTYPE']._serialized_start=16490 - _globals['_PROVIDERTYPE']._serialized_end=16587 - _globals['_SIPCALLSTATUS']._serialized_start=16589 - _globals['_SIPCALLSTATUS']._serialized_end=16708 - _globals['_SIPTRANSFERSTATUS']._serialized_start=16710 - _globals['_SIPTRANSFERSTATUS']._serialized_end=16809 - _globals['_SIPTRANSFERREASON']._serialized_start=16812 - _globals['_SIPTRANSFERREASON']._serialized_end=16985 - _globals['_SIPFEATURE']._serialized_start=16987 - _globals['_SIPFEATURE']._serialized_end=17028 - _globals['_SIPCALLDIRECTION']._serialized_start=17030 - _globals['_SIPCALLDIRECTION']._serialized_end=17100 + _globals['_SIPSTATUSCODE']._serialized_start=13407 + _globals['_SIPSTATUSCODE']._serialized_end=16061 + _globals['_SIPTRANSPORT']._serialized_start=16063 + _globals['_SIPTRANSPORT']._serialized_end=16170 + _globals['_SIPHEADEROPTIONS']._serialized_start=16172 + _globals['_SIPHEADEROPTIONS']._serialized_end=16250 + _globals['_SIPMEDIAENCRYPTION']._serialized_start=16252 + _globals['_SIPMEDIAENCRYPTION']._serialized_end=16363 + _globals['_SIPDIALTONE']._serialized_start=16366 + _globals['_SIPDIALTONE']._serialized_end=16536 + _globals['_PROVIDERTYPE']._serialized_start=16538 + _globals['_PROVIDERTYPE']._serialized_end=16635 + _globals['_SIPCALLSTATUS']._serialized_start=16637 + _globals['_SIPCALLSTATUS']._serialized_end=16756 + _globals['_SIPTRANSFERSTATUS']._serialized_start=16758 + _globals['_SIPTRANSFERSTATUS']._serialized_end=16857 + _globals['_SIPTRANSFERREASON']._serialized_start=16860 + _globals['_SIPTRANSFERREASON']._serialized_end=17033 + _globals['_SIPFEATURE']._serialized_start=17035 + _globals['_SIPFEATURE']._serialized_end=17076 + _globals['_SIPCALLDIRECTION']._serialized_start=17078 + _globals['_SIPCALLDIRECTION']._serialized_end=17148 _globals['_SIPSTATUS']._serialized_start=186 _globals['_SIPSTATUS']._serialized_end=251 _globals['_CREATESIPTRUNKREQUEST']._serialized_start=254 @@ -373,35 +375,35 @@ _globals['_SIPOUTBOUNDCONFIG_ATTRIBUTESTOHEADERSENTRY']._serialized_start=2911 _globals['_SIPOUTBOUNDCONFIG_ATTRIBUTESTOHEADERSENTRY']._serialized_end=2969 _globals['_CREATESIPPARTICIPANTREQUEST']._serialized_start=9320 - _globals['_CREATESIPPARTICIPANTREQUEST']._serialized_end=10763 - _globals['_CREATESIPPARTICIPANTREQUEST_PARTICIPANTATTRIBUTESENTRY']._serialized_start=10622 - _globals['_CREATESIPPARTICIPANTREQUEST_PARTICIPANTATTRIBUTESENTRY']._serialized_end=10682 + _globals['_CREATESIPPARTICIPANTREQUEST']._serialized_end=10811 + _globals['_CREATESIPPARTICIPANTREQUEST_PARTICIPANTATTRIBUTESENTRY']._serialized_start=10670 + _globals['_CREATESIPPARTICIPANTREQUEST_PARTICIPANTATTRIBUTESENTRY']._serialized_end=10730 _globals['_CREATESIPPARTICIPANTREQUEST_HEADERSENTRY']._serialized_start=2803 _globals['_CREATESIPPARTICIPANTREQUEST_HEADERSENTRY']._serialized_end=2849 - _globals['_SIPPARTICIPANTINFO']._serialized_start=10766 - _globals['_SIPPARTICIPANTINFO']._serialized_end=10912 - _globals['_TRANSFERSIPPARTICIPANTREQUEST']._serialized_start=10915 - _globals['_TRANSFERSIPPARTICIPANTREQUEST']._serialized_end=11291 + _globals['_SIPPARTICIPANTINFO']._serialized_start=10814 + _globals['_SIPPARTICIPANTINFO']._serialized_end=10960 + _globals['_TRANSFERSIPPARTICIPANTREQUEST']._serialized_start=10963 + _globals['_TRANSFERSIPPARTICIPANTREQUEST']._serialized_end=11339 _globals['_TRANSFERSIPPARTICIPANTREQUEST_HEADERSENTRY']._serialized_start=2803 _globals['_TRANSFERSIPPARTICIPANTREQUEST_HEADERSENTRY']._serialized_end=2849 - _globals['_TRANSFERSIPPARTICIPANTRESPONSE']._serialized_start=11294 - _globals['_TRANSFERSIPPARTICIPANTRESPONSE']._serialized_end=11490 - _globals['_SIPTRANSFERERROR']._serialized_start=11493 - _globals['_SIPTRANSFERERROR']._serialized_end=11631 - _globals['_SIPCALLINFO']._serialized_start=11634 - _globals['_SIPCALLINFO']._serialized_end=12683 - _globals['_SIPCALLINFO_PARTICIPANTATTRIBUTESENTRY']._serialized_start=10622 - _globals['_SIPCALLINFO_PARTICIPANTATTRIBUTESENTRY']._serialized_end=10682 - _globals['_SIPTRANSFERINFO']._serialized_start=12686 - _globals['_SIPTRANSFERINFO']._serialized_end=13018 - _globals['_SIPURI']._serialized_start=13020 - _globals['_SIPURI']._serialized_end=13124 - _globals['_SIPREQUESTDEST']._serialized_start=13126 - _globals['_SIPREQUESTDEST']._serialized_end=13199 - _globals['_SIPNAMEDDEST']._serialized_start=13201 - _globals['_SIPNAMEDDEST']._serialized_end=13294 - _globals['_DESTINATION']._serialized_start=13296 - _globals['_DESTINATION']._serialized_end=13356 - _globals['_SIP']._serialized_start=17103 - _globals['_SIP']._serialized_end=18615 + _globals['_TRANSFERSIPPARTICIPANTRESPONSE']._serialized_start=11342 + _globals['_TRANSFERSIPPARTICIPANTRESPONSE']._serialized_end=11538 + _globals['_SIPTRANSFERERROR']._serialized_start=11541 + _globals['_SIPTRANSFERERROR']._serialized_end=11679 + _globals['_SIPCALLINFO']._serialized_start=11682 + _globals['_SIPCALLINFO']._serialized_end=12731 + _globals['_SIPCALLINFO_PARTICIPANTATTRIBUTESENTRY']._serialized_start=10670 + _globals['_SIPCALLINFO_PARTICIPANTATTRIBUTESENTRY']._serialized_end=10730 + _globals['_SIPTRANSFERINFO']._serialized_start=12734 + _globals['_SIPTRANSFERINFO']._serialized_end=13066 + _globals['_SIPURI']._serialized_start=13068 + _globals['_SIPURI']._serialized_end=13172 + _globals['_SIPREQUESTDEST']._serialized_start=13174 + _globals['_SIPREQUESTDEST']._serialized_end=13247 + _globals['_SIPNAMEDDEST']._serialized_start=13249 + _globals['_SIPNAMEDDEST']._serialized_end=13342 + _globals['_DESTINATION']._serialized_start=13344 + _globals['_DESTINATION']._serialized_end=13404 + _globals['_SIP']._serialized_start=17151 + _globals['_SIP']._serialized_end=18663 # @@protoc_insertion_point(module_scope) diff --git a/livekit-protocol/livekit/protocol/sip.pyi b/livekit-protocol/livekit/protocol/sip.pyi index d4b603f5d..7dd661ec3 100644 --- a/livekit-protocol/livekit/protocol/sip.pyi +++ b/livekit-protocol/livekit/protocol/sip.pyi @@ -873,7 +873,7 @@ class SIPOutboundConfig(_message.Message): def __init__(self, hostname: _Optional[str] = ..., destination_country: _Optional[str] = ..., transport: _Optional[_Union[SIPTransport, str]] = ..., auth_username: _Optional[str] = ..., auth_password: _Optional[str] = ..., headers_to_attributes: _Optional[_Mapping[str, str]] = ..., attributes_to_headers: _Optional[_Mapping[str, str]] = ..., from_host: _Optional[str] = ...) -> None: ... class CreateSIPParticipantRequest(_message.Message): - __slots__ = ("sip_trunk_id", "trunk", "sip_request_uri", "sip_to_header", "sip_from_header", "sip_call_to", "to_user_override", "sip_number", "room_name", "participant_identity", "participant_name", "participant_metadata", "participant_attributes", "dtmf", "play_ringtone", "play_dialtone", "dialtone", "hide_phone_number", "headers", "include_headers", "ringing_timeout", "max_call_duration", "krisp_enabled", "media_encryption", "media", "wait_until_answered", "display_name", "destination") + __slots__ = ("sip_trunk_id", "trunk", "sip_request_uri", "sip_to_header", "sip_from_header", "sip_call_to", "to_user_override", "sip_number", "room_name", "participant_identity", "participant_name", "participant_metadata", "participant_attributes", "dtmf", "play_ringtone", "play_dialtone", "dialtone", "hide_phone_number", "headers", "include_headers", "ringing_timeout", "max_call_duration", "krisp_enabled", "media_encryption", "media", "wait_until_answered", "display_name", "destination", "sip_source_call_id") class ParticipantAttributesEntry(_message.Message): __slots__ = ("key", "value") KEY_FIELD_NUMBER: _ClassVar[int] @@ -916,6 +916,7 @@ class CreateSIPParticipantRequest(_message.Message): WAIT_UNTIL_ANSWERED_FIELD_NUMBER: _ClassVar[int] DISPLAY_NAME_FIELD_NUMBER: _ClassVar[int] DESTINATION_FIELD_NUMBER: _ClassVar[int] + SIP_SOURCE_CALL_ID_FIELD_NUMBER: _ClassVar[int] sip_trunk_id: str trunk: SIPOutboundConfig sip_request_uri: SIPRequestDest @@ -944,7 +945,8 @@ class CreateSIPParticipantRequest(_message.Message): wait_until_answered: bool display_name: str destination: Destination - def __init__(self, sip_trunk_id: _Optional[str] = ..., trunk: _Optional[_Union[SIPOutboundConfig, _Mapping]] = ..., sip_request_uri: _Optional[_Union[SIPRequestDest, _Mapping]] = ..., sip_to_header: _Optional[_Union[SIPNamedDest, _Mapping]] = ..., sip_from_header: _Optional[_Union[SIPNamedDest, _Mapping]] = ..., sip_call_to: _Optional[str] = ..., to_user_override: _Optional[str] = ..., sip_number: _Optional[str] = ..., room_name: _Optional[str] = ..., participant_identity: _Optional[str] = ..., participant_name: _Optional[str] = ..., participant_metadata: _Optional[str] = ..., participant_attributes: _Optional[_Mapping[str, str]] = ..., dtmf: _Optional[str] = ..., play_ringtone: bool = ..., play_dialtone: bool = ..., dialtone: _Optional[_Union[SIPDialtone, str]] = ..., hide_phone_number: bool = ..., headers: _Optional[_Mapping[str, str]] = ..., include_headers: _Optional[_Union[SIPHeaderOptions, str]] = ..., ringing_timeout: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., max_call_duration: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., krisp_enabled: bool = ..., media_encryption: _Optional[_Union[SIPMediaEncryption, str]] = ..., media: _Optional[_Union[SIPMediaConfig, _Mapping]] = ..., wait_until_answered: bool = ..., display_name: _Optional[str] = ..., destination: _Optional[_Union[Destination, _Mapping]] = ...) -> None: ... + sip_source_call_id: str + def __init__(self, sip_trunk_id: _Optional[str] = ..., trunk: _Optional[_Union[SIPOutboundConfig, _Mapping]] = ..., sip_request_uri: _Optional[_Union[SIPRequestDest, _Mapping]] = ..., sip_to_header: _Optional[_Union[SIPNamedDest, _Mapping]] = ..., sip_from_header: _Optional[_Union[SIPNamedDest, _Mapping]] = ..., sip_call_to: _Optional[str] = ..., to_user_override: _Optional[str] = ..., sip_number: _Optional[str] = ..., room_name: _Optional[str] = ..., participant_identity: _Optional[str] = ..., participant_name: _Optional[str] = ..., participant_metadata: _Optional[str] = ..., participant_attributes: _Optional[_Mapping[str, str]] = ..., dtmf: _Optional[str] = ..., play_ringtone: bool = ..., play_dialtone: bool = ..., dialtone: _Optional[_Union[SIPDialtone, str]] = ..., hide_phone_number: bool = ..., headers: _Optional[_Mapping[str, str]] = ..., include_headers: _Optional[_Union[SIPHeaderOptions, str]] = ..., ringing_timeout: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., max_call_duration: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., krisp_enabled: bool = ..., media_encryption: _Optional[_Union[SIPMediaEncryption, str]] = ..., media: _Optional[_Union[SIPMediaConfig, _Mapping]] = ..., wait_until_answered: bool = ..., display_name: _Optional[str] = ..., destination: _Optional[_Union[Destination, _Mapping]] = ..., sip_source_call_id: _Optional[str] = ...) -> None: ... class SIPParticipantInfo(_message.Message): __slots__ = ("participant_id", "participant_identity", "room_name", "sip_call_id") diff --git a/livekit-protocol/protocol b/livekit-protocol/protocol index 868ecd58e..9522c5ac7 160000 --- a/livekit-protocol/protocol +++ b/livekit-protocol/protocol @@ -1 +1 @@ -Subproject commit 868ecd58e68880f138d313cc1c234db8d168aa91 +Subproject commit 9522c5ac7a1d89ffccca4c48ccb51fcf5977a990 diff --git a/pyproject.toml b/pyproject.toml index ae37f875e..13ea6f419 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -82,7 +82,7 @@ addopts = ["--import-mode=importlib", "--ignore=examples"] [tool.mypy] -exclude = "(build|setup\\.py|livekit-rtc/rust-sdks.*)" +exclude = "(build|setup\\.py|livekit-rtc/rust-sdks.*|livekit-protocol/protocol/.*)" namespace_packages = true explicit_package_bases = true mypy_path = "livekit-protocol:livekit-api:livekit-rtc" diff --git a/tests/api/test_access_token.py b/tests/api/test_access_token.py index 7e67bbc6d..dfd930539 100644 --- a/tests/api/test_access_token.py +++ b/tests/api/test_access_token.py @@ -5,6 +5,7 @@ import pytest from livekit.api import ( AccessToken, + AgentDatabaseGrants, AgentEndpointGrants, AgentGrants, AgentThreadGrants, @@ -82,27 +83,42 @@ def test_mint_token_with_can_subscribe_metrics() -> None: def test_agent_grants() -> None: - agent = AgentGrants(database_admin=True) + agent = AgentGrants(dispatch_admin=True) endpoint = AgentEndpointGrants(call=True, agent_name="my-agent") - thread = AgentThreadGrants(thread_ids=["t1"], read=True, write=True) + thread = AgentThreadGrants(thread_ids=["t1"], read=True, write=True, sql=True) + database = AgentDatabaseGrants( + database_ids=["DB_1"], read=True, delete=True, create=True, list=True + ) token = ( AccessToken(TEST_API_KEY, TEST_API_SECRET) .with_agent_grants(agent) .with_agent_endpoint_grants(endpoint) .with_agent_thread_grants(thread) + .with_agent_database_grants(database) .to_jwt() ) decoded = jwt.decode(token, options={"verify_signature": False}) assert decoded["agentThread"]["threadIds"] == ["t1"] assert decoded["agentEndpoint"]["agentName"] == "my-agent" - assert decoded["agent"]["databaseAdmin"] is True + assert decoded["agentThread"]["sql"] is True + assert decoded["agentDatabase"] == { + "databaseIds": ["DB_1"], + "read": True, + "write": False, + "delete": True, + "create": True, + "list": True, + } + assert decoded["agent"]["dispatchAdmin"] is True + assert "databaseAdmin" not in decoded["agent"] claims = TokenVerifier(TEST_API_KEY, TEST_API_SECRET).verify(token) assert claims.agent == agent assert claims.agent_endpoint == endpoint assert claims.agent_thread == thread + assert claims.agent_database == database def test_agent_config() -> None: @@ -222,6 +238,7 @@ def test_verify_token_omitted_grants_are_none() -> None: assert claims.agent is None assert claims.agent_endpoint is None assert claims.agent_thread is None + assert claims.agent_database is None def test_verify_token_with_only_inference_grants() -> None: