You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iggy.apache.org by pi...@apache.org on 2026/08/18 05:22:25 UTC

(iggy) branch fix-max-meta updated (58cb81d08 -> d9e73526f)

This is an automated email from the ASF dual-hosted git repository.

spetz pushed a change to branch fix-max-meta
in repository https://gitbox.apache.org/repos/asf/iggy.git


    omit 58cb81d08 improvements
     new d9e73526f improvements

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (58cb81d08)
            \
             N -- N -- N   refs/heads/fix-max-meta (d9e73526f)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 foreign/node/src/wire/error.code.test.ts           | 29 ++++++++++++++++------
 .../src/wire/message/poll-messages.command.test.ts |  2 +-
 2 files changed, 23 insertions(+), 8 deletions(-)


(iggy) 01/01: improvements

Posted by pi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

spetz pushed a commit to branch fix-max-meta
in repository https://gitbox.apache.org/repos/asf/iggy.git

commit d9e73526f6c4f83daa623c428ecced74b9199713
Author: spetz <pi...@gmail.com>
AuthorDate: Tue Aug 18 07:12:41 2026 +0200

    improvements
---
 core/server/Cargo.toml                             |   1 -
 foreign/go/errors/errors.yaml                      | 212 ++++++-
 foreign/go/errors/errors_gen.go                    | 660 ++++++++++++++++++---
 .../iggy/client/async/tcp/MessagesTcpClient.java   |   4 +-
 .../exception/IggyAuthenticationException.java     |   6 +-
 .../iggy/exception/IggyConflictException.java      |   9 +-
 .../org/apache/iggy/exception/IggyErrorCode.java   |  84 +--
 .../exception/IggyResourceNotFoundException.java   |   4 +-
 .../iggy/exception/IggyValidationException.java    |  11 +-
 .../exception/IggyAuthenticationExceptionTest.java |  12 +-
 .../iggy/exception/IggyConflictExceptionTest.java  |  18 +-
 .../apache/iggy/exception/IggyErrorCodeTest.java   |  84 +--
 .../IggyResourceNotFoundExceptionTest.java         |   8 +-
 .../exception/IggyValidationExceptionTest.java     |  22 +-
 foreign/node/src/wire/error.code.test.ts           |  29 +-
 foreign/node/src/wire/error.code.ts                | 101 +++-
 .../src/wire/message/poll-messages.command.test.ts |   2 +-
 17 files changed, 1019 insertions(+), 248 deletions(-)

diff --git a/core/server/Cargo.toml b/core/server/Cargo.toml
index b67164964..1376a340f 100644
--- a/core/server/Cargo.toml
+++ b/core/server/Cargo.toml
@@ -66,7 +66,6 @@ ignored = [
     "rustls-pemfile",
     "send_wrapper",
     "serde",
-    "slab",
     "socket2",
     "strum",
     "sysinfo",
diff --git a/foreign/go/errors/errors.yaml b/foreign/go/errors/errors.yaml
index 210d93340..b52fa9b16 100644
--- a/foreign/go/errors/errors.yaml
+++ b/foreign/go/errors/errors.yaml
@@ -107,6 +107,10 @@
   fields:
     - name: Key
       type: string
+- name: CannotCloseWebSocketConnection
+  code: 21
+  format: "cannot close websocket connection"
+  fields: []
 - name: StaleClient
   code: 30
   format: "stale client"
@@ -135,6 +139,18 @@
       type: string
     - name: Port
       type: string
+- name: HttpError
+  code: 36
+  format: "http error %s"
+  fields:
+    - name: Message
+      type: string
+- name: InvalidApiUrl
+  code: 37
+  format: "invalid api url: %s"
+  fields:
+    - name: Url
+      type: string
 - name: Unauthenticated
   code: 40
   format: "unauthenticated"
@@ -215,6 +231,10 @@
   code: 55
   format: "users limit reached."
   fields: []
+- name: InvalidPersonalAccessTokenExpiry
+  code: 56
+  format: "invalid personal access token expiry"
+  fields: []
 - name: TransientNotCommitted
   code: 57
   format: "request transiently not committed; retry"
@@ -223,6 +243,10 @@
   code: 58
   format: "request transiently not accepted; retry, on any replica"
   fields: []
+- name: RequestAlreadyApplied
+  code: 59
+  format: "request already applied; its reply is no longer available"
+  fields: []
 - name: NotConnected
   code: 61
   format: "not connected"
@@ -285,6 +309,12 @@
   code: 78
   format: "invalid access token"
   fields: []
+- name: CannotFetchJwks
+  code: 79
+  format: "cannot fetch jwks from url: %s"
+  fields:
+    - name: Url
+      type: string
 - name: InvalidSizeBytes
   code: 80
   format: "invalid size bytes"
@@ -357,6 +387,26 @@
   code: 306
   format: "cannot parse url"
   fields: []
+- name: WebSocketError
+  code: 400
+  format: "websocket error"
+  fields: []
+- name: WebSocketConnectionError
+  code: 401
+  format: "websocket connection error"
+  fields: []
+- name: WebSocketCloseError
+  code: 402
+  format: "websocket close error"
+  fields: []
+- name: WebSocketReceiveError
+  code: 403
+  format: "websocket receive error"
+  fields: []
+- name: WebSocketSendError
+  code: 404
+  format: "websocket send error"
+  fields: []
 - name: CannotCreateStreamsDirectory
   code: 1000
   format: "cannot create streams directory, path: %s"
@@ -425,12 +475,12 @@
   fields:
     - name: Name
       type: string
-- name: StreamIdAlreadyExists
+- name: StreamDirectoryNotFound
   code: 1011
-  format: "stream with id: %d already exists."
+  format: "stream with directory %s was not found."
   fields:
-    - name: ID
-      type: uint32
+    - name: Path
+      type: string
 - name: StreamNameAlreadyExists
   code: 1012
   format: "stream with name: %s already exists."
@@ -457,6 +507,10 @@
       type: uint64
     - name: SegmentSize
       type: uint64
+- name: TooManyStreams
+  code: 1020
+  format: "too many streams"
+  fields: []
 - name: CannotCreateTopicsDirectory
   code: 2000
   format: "cannot create topics directory for stream with id: %d, path: %s"
@@ -553,14 +607,6 @@
       type: string
     - name: StreamId
       type: string
-- name: TopicIdAlreadyExists
-  code: 2012
-  format: "topic with id: %d for stream with id: %d already exists."
-  fields:
-    - name: TopicId
-      type: uint32
-    - name: StreamId
-      type: uint32
 - name: TopicNameAlreadyExists
   code: 2013
   format: "topic with name: %s for stream with id: %d already exists."
@@ -591,6 +637,20 @@
   code: 2018
   format: "invalid replication factor"
   fields: []
+- name: InvalidPartitionsCount
+  code: 2019
+  format: "invalid partitions count"
+  fields: []
+- name: TopicDirectoryNotFound
+  code: 2020
+  format: "topic directory: %s not found"
+  fields:
+    - name: Path
+      type: string
+- name: TooManyTopics
+  code: 2021
+  format: "too many topics"
+  fields: []
 - name: CannotCreatePartition
   code: 3000
   format: "cannot create partition with id: %d for stream with id: %d and topic with id: %d"
@@ -703,6 +763,22 @@
   fields:
     - name: ID
       type: uint32
+- name: NotResolvedConsumer
+  code: 3022
+  format: "failed to resolve consumer with id: %d"
+  fields:
+    - name: ID
+      type: uint32
+- name: CannotOpenConsumerOffsetsFile
+  code: 3023
+  format: "cannot open consumer offsets file for path: %s"
+  fields:
+    - name: Path
+      type: string
+- name: PartitionIdSpaceExhausted
+  code: 3013
+  format: "partition id space exhausted for this topic"
+  fields: []
 - name: SegmentNotFound
   code: 4000
   format: "segment not found"
@@ -901,6 +977,46 @@
       type: uint32
     - name: Expected
       type: uint32
+- name: InvalidMessageTimestampDelta
+  code: 4038
+  format: "invalid message timestamp delta: %d microseconds exceeds the per-batch limit"
+  fields:
+    - name: Delta
+      type: uint64
+- name: InvalidBatchChecksum
+  code: 4039
+  format: "invalid batch checksum: %d, expected: %d, for base offset: %d"
+  fields:
+    - name: Stored
+      type: uint64
+    - name: Computed
+      type: uint64
+    - name: BaseOffset
+      type: uint64
+- name: InvalidHeaderKind
+  code: 4040
+  format: "invalid header kind code: %d"
+  fields:
+    - name: Kind
+      type: uint8
+- name: UnsupportedOptionKey
+  code: 4041
+  format: "unsupported option key: %s"
+  fields:
+    - name: Key
+      type: string
+- name: InvalidOptionValue
+  code: 4042
+  format: "invalid option value for key: %s"
+  fields:
+    - name: Key
+      type: string
+- name: OptionsBlockTooLarge
+  code: 4043
+  format: "options block exceeds its limits: %s"
+  fields:
+    - name: Details
+      type: string
 - name: CannotSendMessagesDueToClientDisconnection
   code: 4050
   format: "cannot sed messages due to client disconnection"
@@ -925,18 +1041,6 @@
   code: 4055
   format: "background send buffer overflow"
   fields: []
-- name: ProducerSendFailed
-  code: 4056
-  format: "producer send failed"
-  fields:
-    - name: Cause
-      type: error
-    - name: Failed
-      type: string
-    - name: StreamName
-      type: string
-    - name: TopicName
-      type: string
 - name: ProducerClosed
   code: 4057
   format: "producer closed"
@@ -947,6 +1051,12 @@
   fields:
     - name: Offset
       type: uint64
+- name: InvalidReservedField
+  code: 4101
+  format: "invalid reserved field value: %d, expected: 0"
+  fields:
+    - name: Value
+      type: uint64
 - name: ConsumerGroupIdNotFound
   code: 5000
   format: "consumer group with id: %d for topic with id: %d was not found."
@@ -955,14 +1065,6 @@
       type: uint32
     - name: TopicId
       type: uint32
-- name: ConsumerGroupIdAlreadyExists
-  code: 5001
-  format: "consumer group with id: %d for topic with id: %d already exists."
-  fields:
-    - name: GroupId
-      type: uint32
-    - name: TopicId
-      type: uint32
 - name: InvalidConsumerGroupId
   code: 5002
   format: "invalid consumer group id"
@@ -1125,6 +1227,52 @@
   code: 10012
   format: "cannot read index timestamp"
   fields: []
+- name: TimestampOutOfRange
+  code: 10013
+  format: "timestamp out of range: %d"
+  fields:
+    - name: Timestamp
+      type: uint64
+- name: ShardNotFound
+  code: 11000
+  format: "shard not found for stream id: %d, topic id: %d, partition id: %d"
+  fields:
+    - name: StreamId
+      type: uint32
+    - name: TopicId
+      type: uint32
+    - name: PartitionId
+      type: uint32
+- name: ShardCommunicationError
+  code: 11001
+  format: "shard communication error"
+  fields: []
+- name: CannotBindToSocket
+  code: 12000
+  format: "cannot bind to socket with addr: %s"
+  fields:
+    - name: Addr
+      type: string
+- name: TaskTimeout
+  code: 12001
+  format: "task execution timeout"
+  fields: []
+- name: IoError
+  code: 13000
+  format: "io error: %s"
+  fields:
+    - name: Message
+      type: string
+- name: AlreadyAuthenticated
+  code: 14000
+  format: "vsr session already bound; reset before re-binding"
+  fields: []
+- name: InvalidSession
+  code: 14001
+  format: "vsr session value %d is invalid (must be non-zero)"
+  fields:
+    - name: Session
+      type: uint64
 - name: IncompatibleProtocolVersion
   code: 14003
   format: "incompatible binary protocol version: client %d, server accepts [%d, %d]"
diff --git a/foreign/go/errors/errors_gen.go b/foreign/go/errors/errors_gen.go
index 80677cf05..f69cfee3c 100644
--- a/foreign/go/errors/errors_gen.go
+++ b/foreign/go/errors/errors_gen.go
@@ -222,6 +222,15 @@ func (e ResourceNotFound) Is(target error) bool {
 	return ok
 }
 
+type CannotCloseWebSocketConnection struct{}
+
+func (e CannotCloseWebSocketConnection) Error() string { return "cannot close websocket connection" }
+func (e CannotCloseWebSocketConnection) Code() Code    { return 21 }
+func (e CannotCloseWebSocketConnection) Is(target error) bool {
+	_, ok := target.(CannotCloseWebSocketConnection)
+	return ok
+}
+
 type StaleClient struct{}
 
 func (e StaleClient) Error() string { return "stale client" }
@@ -281,6 +290,32 @@ func (e InvalidIpAddress) Is(target error) bool {
 	return ok
 }
 
+type HttpError struct {
+	Message string
+}
+
+func (e HttpError) Error() string {
+	return fmt.Sprintf("http error %s", e.Message)
+}
+func (e HttpError) Code() Code { return 36 }
+func (e HttpError) Is(target error) bool {
+	_, ok := target.(HttpError)
+	return ok
+}
+
+type InvalidApiUrl struct {
+	Url string
+}
+
+func (e InvalidApiUrl) Error() string {
+	return fmt.Sprintf("invalid api url: %s", e.Url)
+}
+func (e InvalidApiUrl) Code() Code { return 37 }
+func (e InvalidApiUrl) Is(target error) bool {
+	_, ok := target.(InvalidApiUrl)
+	return ok
+}
+
 type Unauthenticated struct{}
 
 func (e Unauthenticated) Error() string { return "unauthenticated" }
@@ -448,6 +483,17 @@ func (e UsersLimitReached) Is(target error) bool {
 	return ok
 }
 
+type InvalidPersonalAccessTokenExpiry struct{}
+
+func (e InvalidPersonalAccessTokenExpiry) Error() string {
+	return "invalid personal access token expiry"
+}
+func (e InvalidPersonalAccessTokenExpiry) Code() Code { return 56 }
+func (e InvalidPersonalAccessTokenExpiry) Is(target error) bool {
+	_, ok := target.(InvalidPersonalAccessTokenExpiry)
+	return ok
+}
+
 type TransientNotCommitted struct{}
 
 func (e TransientNotCommitted) Error() string { return "request transiently not committed; retry" }
@@ -468,6 +514,17 @@ func (e TransientNotAccepted) Is(target error) bool {
 	return ok
 }
 
+type RequestAlreadyApplied struct{}
+
+func (e RequestAlreadyApplied) Error() string {
+	return "request already applied; its reply is no longer available"
+}
+func (e RequestAlreadyApplied) Code() Code { return 59 }
+func (e RequestAlreadyApplied) Is(target error) bool {
+	_, ok := target.(RequestAlreadyApplied)
+	return ok
+}
+
 type NotConnected struct{}
 
 func (e NotConnected) Error() string { return "not connected" }
@@ -607,6 +664,19 @@ func (e InvalidAccessToken) Is(target error) bool {
 	return ok
 }
 
+type CannotFetchJwks struct {
+	Url string
+}
+
+func (e CannotFetchJwks) Error() string {
+	return fmt.Sprintf("cannot fetch jwks from url: %s", e.Url)
+}
+func (e CannotFetchJwks) Code() Code { return 79 }
+func (e CannotFetchJwks) Is(target error) bool {
+	_, ok := target.(CannotFetchJwks)
+	return ok
+}
+
 type InvalidSizeBytes struct{}
 
 func (e InvalidSizeBytes) Error() string { return "invalid size bytes" }
@@ -764,6 +834,51 @@ func (e CannotParseUrl) Is(target error) bool {
 	return ok
 }
 
+type WebSocketError struct{}
+
+func (e WebSocketError) Error() string { return "websocket error" }
+func (e WebSocketError) Code() Code    { return 400 }
+func (e WebSocketError) Is(target error) bool {
+	_, ok := target.(WebSocketError)
+	return ok
+}
+
+type WebSocketConnectionError struct{}
+
+func (e WebSocketConnectionError) Error() string { return "websocket connection error" }
+func (e WebSocketConnectionError) Code() Code    { return 401 }
+func (e WebSocketConnectionError) Is(target error) bool {
+	_, ok := target.(WebSocketConnectionError)
+	return ok
+}
+
+type WebSocketCloseError struct{}
+
+func (e WebSocketCloseError) Error() string { return "websocket close error" }
+func (e WebSocketCloseError) Code() Code    { return 402 }
+func (e WebSocketCloseError) Is(target error) bool {
+	_, ok := target.(WebSocketCloseError)
+	return ok
+}
+
+type WebSocketReceiveError struct{}
+
+func (e WebSocketReceiveError) Error() string { return "websocket receive error" }
+func (e WebSocketReceiveError) Code() Code    { return 403 }
+func (e WebSocketReceiveError) Is(target error) bool {
+	_, ok := target.(WebSocketReceiveError)
+	return ok
+}
+
+type WebSocketSendError struct{}
+
+func (e WebSocketSendError) Error() string { return "websocket send error" }
+func (e WebSocketSendError) Code() Code    { return 404 }
+func (e WebSocketSendError) Is(target error) bool {
+	_, ok := target.(WebSocketSendError)
+	return ok
+}
+
 type CannotCreateStreamsDirectory struct {
 	Path string
 }
@@ -908,16 +1023,16 @@ func (e StreamNameNotFound) Is(target error) bool {
 	return ok
 }
 
-type StreamIdAlreadyExists struct {
-	ID uint32
+type StreamDirectoryNotFound struct {
+	Path string
 }
 
-func (e StreamIdAlreadyExists) Error() string {
-	return fmt.Sprintf("stream with id: %d already exists.", e.ID)
+func (e StreamDirectoryNotFound) Error() string {
+	return fmt.Sprintf("stream with directory %s was not found.", e.Path)
 }
-func (e StreamIdAlreadyExists) Code() Code { return 1011 }
-func (e StreamIdAlreadyExists) Is(target error) bool {
-	_, ok := target.(StreamIdAlreadyExists)
+func (e StreamDirectoryNotFound) Code() Code { return 1011 }
+func (e StreamDirectoryNotFound) Is(target error) bool {
+	_, ok := target.(StreamDirectoryNotFound)
 	return ok
 }
 
@@ -975,6 +1090,15 @@ func (e InvalidTopicSize) Is(target error) bool {
 	return ok
 }
 
+type TooManyStreams struct{}
+
+func (e TooManyStreams) Error() string { return "too many streams" }
+func (e TooManyStreams) Code() Code    { return 1020 }
+func (e TooManyStreams) Is(target error) bool {
+	_, ok := target.(TooManyStreams)
+	return ok
+}
+
 type CannotCreateTopicsDirectory struct {
 	ID   uint32
 	Path string
@@ -1140,20 +1264,6 @@ func (e TopicNameNotFound) Is(target error) bool {
 	return ok
 }
 
-type TopicIdAlreadyExists struct {
-	TopicId  uint32
-	StreamId uint32
-}
-
-func (e TopicIdAlreadyExists) Error() string {
-	return fmt.Sprintf("topic with id: %d for stream with id: %d already exists.", e.TopicId, e.StreamId)
-}
-func (e TopicIdAlreadyExists) Code() Code { return 2012 }
-func (e TopicIdAlreadyExists) Is(target error) bool {
-	_, ok := target.(TopicIdAlreadyExists)
-	return ok
-}
-
 type TopicNameAlreadyExists struct {
 	TopicName string
 	StreamId  uint32
@@ -1217,6 +1327,37 @@ func (e InvalidReplicationFactor) Is(target error) bool {
 	return ok
 }
 
+type InvalidPartitionsCount struct{}
+
+func (e InvalidPartitionsCount) Error() string { return "invalid partitions count" }
+func (e InvalidPartitionsCount) Code() Code    { return 2019 }
+func (e InvalidPartitionsCount) Is(target error) bool {
+	_, ok := target.(InvalidPartitionsCount)
+	return ok
+}
+
+type TopicDirectoryNotFound struct {
+	Path string
+}
+
+func (e TopicDirectoryNotFound) Error() string {
+	return fmt.Sprintf("topic directory: %s not found", e.Path)
+}
+func (e TopicDirectoryNotFound) Code() Code { return 2020 }
+func (e TopicDirectoryNotFound) Is(target error) bool {
+	_, ok := target.(TopicDirectoryNotFound)
+	return ok
+}
+
+type TooManyTopics struct{}
+
+func (e TooManyTopics) Error() string { return "too many topics" }
+func (e TooManyTopics) Code() Code    { return 2021 }
+func (e TooManyTopics) Is(target error) bool {
+	_, ok := target.(TooManyTopics)
+	return ok
+}
+
 type CannotCreatePartition struct {
 	PartitionId uint32
 	StreamId    uint32
@@ -1417,6 +1558,43 @@ func (e ConsumerOffsetNotFound) Is(target error) bool {
 	return ok
 }
 
+type NotResolvedConsumer struct {
+	ID uint32
+}
+
+func (e NotResolvedConsumer) Error() string {
+	return fmt.Sprintf("failed to resolve consumer with id: %d", e.ID)
+}
+func (e NotResolvedConsumer) Code() Code { return 3022 }
+func (e NotResolvedConsumer) Is(target error) bool {
+	_, ok := target.(NotResolvedConsumer)
+	return ok
+}
+
+type CannotOpenConsumerOffsetsFile struct {
+	Path string
+}
+
+func (e CannotOpenConsumerOffsetsFile) Error() string {
+	return fmt.Sprintf("cannot open consumer offsets file for path: %s", e.Path)
+}
+func (e CannotOpenConsumerOffsetsFile) Code() Code { return 3023 }
+func (e CannotOpenConsumerOffsetsFile) Is(target error) bool {
+	_, ok := target.(CannotOpenConsumerOffsetsFile)
+	return ok
+}
+
+type PartitionIdSpaceExhausted struct{}
+
+func (e PartitionIdSpaceExhausted) Error() string {
+	return "partition id space exhausted for this topic"
+}
+func (e PartitionIdSpaceExhausted) Code() Code { return 3013 }
+func (e PartitionIdSpaceExhausted) Is(target error) bool {
+	_, ok := target.(PartitionIdSpaceExhausted)
+	return ok
+}
+
 type SegmentNotFound struct{}
 
 func (e SegmentNotFound) Error() string { return "segment not found" }
@@ -1823,6 +2001,86 @@ func (e TooSmallMessage) Is(target error) bool {
 	return ok
 }
 
+type InvalidMessageTimestampDelta struct {
+	Delta uint64
+}
+
+func (e InvalidMessageTimestampDelta) Error() string {
+	return fmt.Sprintf("invalid message timestamp delta: %d microseconds exceeds the per-batch limit", e.Delta)
+}
+func (e InvalidMessageTimestampDelta) Code() Code { return 4038 }
+func (e InvalidMessageTimestampDelta) Is(target error) bool {
+	_, ok := target.(InvalidMessageTimestampDelta)
+	return ok
+}
+
+type InvalidBatchChecksum struct {
+	Stored     uint64
+	Computed   uint64
+	BaseOffset uint64
+}
+
+func (e InvalidBatchChecksum) Error() string {
+	return fmt.Sprintf("invalid batch checksum: %d, expected: %d, for base offset: %d", e.Stored, e.Computed, e.BaseOffset)
+}
+func (e InvalidBatchChecksum) Code() Code { return 4039 }
+func (e InvalidBatchChecksum) Is(target error) bool {
+	_, ok := target.(InvalidBatchChecksum)
+	return ok
+}
+
+type InvalidHeaderKind struct {
+	Kind uint8
+}
+
+func (e InvalidHeaderKind) Error() string {
+	return fmt.Sprintf("invalid header kind code: %d", e.Kind)
+}
+func (e InvalidHeaderKind) Code() Code { return 4040 }
+func (e InvalidHeaderKind) Is(target error) bool {
+	_, ok := target.(InvalidHeaderKind)
+	return ok
+}
+
+type UnsupportedOptionKey struct {
+	Key string
+}
+
+func (e UnsupportedOptionKey) Error() string {
+	return fmt.Sprintf("unsupported option key: %s", e.Key)
+}
+func (e UnsupportedOptionKey) Code() Code { return 4041 }
+func (e UnsupportedOptionKey) Is(target error) bool {
+	_, ok := target.(UnsupportedOptionKey)
+	return ok
+}
+
+type InvalidOptionValue struct {
+	Key string
+}
+
+func (e InvalidOptionValue) Error() string {
+	return fmt.Sprintf("invalid option value for key: %s", e.Key)
+}
+func (e InvalidOptionValue) Code() Code { return 4042 }
+func (e InvalidOptionValue) Is(target error) bool {
+	_, ok := target.(InvalidOptionValue)
+	return ok
+}
+
+type OptionsBlockTooLarge struct {
+	Details string
+}
+
+func (e OptionsBlockTooLarge) Error() string {
+	return fmt.Sprintf("options block exceeds its limits: %s", e.Details)
+}
+func (e OptionsBlockTooLarge) Code() Code { return 4043 }
+func (e OptionsBlockTooLarge) Is(target error) bool {
+	_, ok := target.(OptionsBlockTooLarge)
+	return ok
+}
+
 type CannotSendMessagesDueToClientDisconnection struct{}
 
 func (e CannotSendMessagesDueToClientDisconnection) Error() string {
@@ -1879,15 +2137,6 @@ func (e BackgroundSendBufferOverflow) Is(target error) bool {
 	return ok
 }
 
-type ProducerSendFailed struct{}
-
-func (e ProducerSendFailed) Error() string { return "producer send failed" }
-func (e ProducerSendFailed) Code() Code    { return 4056 }
-func (e ProducerSendFailed) Is(target error) bool {
-	_, ok := target.(ProducerSendFailed)
-	return ok
-}
-
 type ProducerClosed struct{}
 
 func (e ProducerClosed) Error() string { return "producer closed" }
@@ -1910,31 +2159,30 @@ func (e InvalidOffset) Is(target error) bool {
 	return ok
 }
 
-type ConsumerGroupIdNotFound struct {
-	GroupId uint32
-	TopicId uint32
+type InvalidReservedField struct {
+	Value uint64
 }
 
-func (e ConsumerGroupIdNotFound) Error() string {
-	return fmt.Sprintf("consumer group with id: %d for topic with id: %d was not found.", e.GroupId, e.TopicId)
+func (e InvalidReservedField) Error() string {
+	return fmt.Sprintf("invalid reserved field value: %d, expected: 0", e.Value)
 }
-func (e ConsumerGroupIdNotFound) Code() Code { return 5000 }
-func (e ConsumerGroupIdNotFound) Is(target error) bool {
-	_, ok := target.(ConsumerGroupIdNotFound)
+func (e InvalidReservedField) Code() Code { return 4101 }
+func (e InvalidReservedField) Is(target error) bool {
+	_, ok := target.(InvalidReservedField)
 	return ok
 }
 
-type ConsumerGroupIdAlreadyExists struct {
+type ConsumerGroupIdNotFound struct {
 	GroupId uint32
 	TopicId uint32
 }
 
-func (e ConsumerGroupIdAlreadyExists) Error() string {
-	return fmt.Sprintf("consumer group with id: %d for topic with id: %d already exists.", e.GroupId, e.TopicId)
+func (e ConsumerGroupIdNotFound) Error() string {
+	return fmt.Sprintf("consumer group with id: %d for topic with id: %d was not found.", e.GroupId, e.TopicId)
 }
-func (e ConsumerGroupIdAlreadyExists) Code() Code { return 5001 }
-func (e ConsumerGroupIdAlreadyExists) Is(target error) bool {
-	_, ok := target.(ConsumerGroupIdAlreadyExists)
+func (e ConsumerGroupIdNotFound) Code() Code { return 5000 }
+func (e ConsumerGroupIdNotFound) Is(target error) bool {
+	_, ok := target.(ConsumerGroupIdNotFound)
 	return ok
 }
 
@@ -2270,6 +2518,102 @@ func (e CannotReadIndexTimestamp) Is(target error) bool {
 	return ok
 }
 
+type TimestampOutOfRange struct {
+	Timestamp uint64
+}
+
+func (e TimestampOutOfRange) Error() string {
+	return fmt.Sprintf("timestamp out of range: %d", e.Timestamp)
+}
+func (e TimestampOutOfRange) Code() Code { return 10013 }
+func (e TimestampOutOfRange) Is(target error) bool {
+	_, ok := target.(TimestampOutOfRange)
+	return ok
+}
+
+type ShardNotFound struct {
+	StreamId    uint32
+	TopicId     uint32
+	PartitionId uint32
+}
+
+func (e ShardNotFound) Error() string {
+	return fmt.Sprintf("shard not found for stream id: %d, topic id: %d, partition id: %d", e.StreamId, e.TopicId, e.PartitionId)
+}
+func (e ShardNotFound) Code() Code { return 11000 }
+func (e ShardNotFound) Is(target error) bool {
+	_, ok := target.(ShardNotFound)
+	return ok
+}
+
+type ShardCommunicationError struct{}
+
+func (e ShardCommunicationError) Error() string { return "shard communication error" }
+func (e ShardCommunicationError) Code() Code    { return 11001 }
+func (e ShardCommunicationError) Is(target error) bool {
+	_, ok := target.(ShardCommunicationError)
+	return ok
+}
+
+type CannotBindToSocket struct {
+	Addr string
+}
+
+func (e CannotBindToSocket) Error() string {
+	return fmt.Sprintf("cannot bind to socket with addr: %s", e.Addr)
+}
+func (e CannotBindToSocket) Code() Code { return 12000 }
+func (e CannotBindToSocket) Is(target error) bool {
+	_, ok := target.(CannotBindToSocket)
+	return ok
+}
+
+type TaskTimeout struct{}
+
+func (e TaskTimeout) Error() string { return "task execution timeout" }
+func (e TaskTimeout) Code() Code    { return 12001 }
+func (e TaskTimeout) Is(target error) bool {
+	_, ok := target.(TaskTimeout)
+	return ok
+}
+
+type IoError struct {
+	Message string
+}
+
+func (e IoError) Error() string {
+	return fmt.Sprintf("io error: %s", e.Message)
+}
+func (e IoError) Code() Code { return 13000 }
+func (e IoError) Is(target error) bool {
+	_, ok := target.(IoError)
+	return ok
+}
+
+type AlreadyAuthenticated struct{}
+
+func (e AlreadyAuthenticated) Error() string {
+	return "vsr session already bound; reset before re-binding"
+}
+func (e AlreadyAuthenticated) Code() Code { return 14000 }
+func (e AlreadyAuthenticated) Is(target error) bool {
+	_, ok := target.(AlreadyAuthenticated)
+	return ok
+}
+
+type InvalidSession struct {
+	Session uint64
+}
+
+func (e InvalidSession) Error() string {
+	return fmt.Sprintf("vsr session value %d is invalid (must be non-zero)", e.Session)
+}
+func (e InvalidSession) Code() Code { return 14001 }
+func (e InvalidSession) Is(target error) bool {
+	_, ok := target.(InvalidSession)
+	return ok
+}
+
 type IncompatibleProtocolVersion struct {
 	ClientVersion    uint32
 	ServerVersionMin uint32
@@ -2304,12 +2648,15 @@ var (
 	ErrInvalidStateEntryChecksum                  = InvalidStateEntryChecksum{}
 	ErrCannotOpenDatabase                         = CannotOpenDatabase{}
 	ErrResourceNotFound                           = ResourceNotFound{}
+	ErrCannotCloseWebSocketConnection             = CannotCloseWebSocketConnection{}
 	ErrStaleClient                                = StaleClient{}
 	ErrTcpError                                   = TcpError{}
 	ErrQuicError                                  = QuicError{}
 	ErrInvalidServerAddress                       = InvalidServerAddress{}
 	ErrInvalidClientAddress                       = InvalidClientAddress{}
 	ErrInvalidIpAddress                           = InvalidIpAddress{}
+	ErrHttpError                                  = HttpError{}
+	ErrInvalidApiUrl                              = InvalidApiUrl{}
 	ErrUnauthenticated                            = Unauthenticated{}
 	ErrUnauthorized                               = Unauthorized{}
 	ErrInvalidCredentials                         = InvalidCredentials{}
@@ -2326,8 +2673,10 @@ var (
 	ErrInvalidPersonalAccessToken                 = InvalidPersonalAccessToken{}
 	ErrPersonalAccessTokenExpired                 = PersonalAccessTokenExpired{}
 	ErrUsersLimitReached                          = UsersLimitReached{}
+	ErrInvalidPersonalAccessTokenExpiry           = InvalidPersonalAccessTokenExpiry{}
 	ErrTransientNotCommitted                      = TransientNotCommitted{}
 	ErrTransientNotAccepted                       = TransientNotAccepted{}
+	ErrRequestAlreadyApplied                      = RequestAlreadyApplied{}
 	ErrNotConnected                               = NotConnected{}
 	ErrClientShutdown                             = ClientShutdown{}
 	ErrInvalidTlsDomain                           = InvalidTlsDomain{}
@@ -2343,6 +2692,7 @@ var (
 	ErrCannotGenerateJwt                          = CannotGenerateJwt{}
 	ErrAccessTokenMissing                         = AccessTokenMissing{}
 	ErrInvalidAccessToken                         = InvalidAccessToken{}
+	ErrCannotFetchJwks                            = CannotFetchJwks{}
 	ErrInvalidSizeBytes                           = InvalidSizeBytes{}
 	ErrInvalidUtf8                                = InvalidUtf8{}
 	ErrInvalidNumberEncoding                      = InvalidNumberEncoding{}
@@ -2359,6 +2709,11 @@ var (
 	ErrEmptyResponse                              = EmptyResponse{}
 	ErrCannotCreateEndpoint                       = CannotCreateEndpoint{}
 	ErrCannotParseUrl                             = CannotParseUrl{}
+	ErrWebSocketError                             = WebSocketError{}
+	ErrWebSocketConnectionError                   = WebSocketConnectionError{}
+	ErrWebSocketCloseError                        = WebSocketCloseError{}
+	ErrWebSocketReceiveError                      = WebSocketReceiveError{}
+	ErrWebSocketSendError                         = WebSocketSendError{}
 	ErrCannotCreateStreamsDirectory               = CannotCreateStreamsDirectory{}
 	ErrCannotCreateStreamDirectory                = CannotCreateStreamDirectory{}
 	ErrCannotCreateStreamInfo                     = CannotCreateStreamInfo{}
@@ -2370,12 +2725,13 @@ var (
 	ErrCannotDeleteStreamDirectory                = CannotDeleteStreamDirectory{}
 	ErrStreamIdNotFound                           = StreamIdNotFound{}
 	ErrStreamNameNotFound                         = StreamNameNotFound{}
-	ErrStreamIdAlreadyExists                      = StreamIdAlreadyExists{}
+	ErrStreamDirectoryNotFound                    = StreamDirectoryNotFound{}
 	ErrStreamNameAlreadyExists                    = StreamNameAlreadyExists{}
 	ErrInvalidStreamName                          = InvalidStreamName{}
 	ErrInvalidStreamId                            = InvalidStreamId{}
 	ErrCannotReadStreams                          = CannotReadStreams{}
 	ErrInvalidTopicSize                           = InvalidTopicSize{}
+	ErrTooManyStreams                             = TooManyStreams{}
 	ErrCannotCreateTopicsDirectory                = CannotCreateTopicsDirectory{}
 	ErrCannotCreateTopicDirectory                 = CannotCreateTopicDirectory{}
 	ErrCannotCreateTopicInfo                      = CannotCreateTopicInfo{}
@@ -2388,13 +2744,15 @@ var (
 	ErrCannotPollTopic                            = CannotPollTopic{}
 	ErrTopicIdNotFound                            = TopicIdNotFound{}
 	ErrTopicNameNotFound                          = TopicNameNotFound{}
-	ErrTopicIdAlreadyExists                       = TopicIdAlreadyExists{}
 	ErrTopicNameAlreadyExists                     = TopicNameAlreadyExists{}
 	ErrInvalidTopicName                           = InvalidTopicName{}
 	ErrTooManyPartitions                          = TooManyPartitions{}
 	ErrInvalidTopicId                             = InvalidTopicId{}
 	ErrCannotReadTopics                           = CannotReadTopics{}
 	ErrInvalidReplicationFactor                   = InvalidReplicationFactor{}
+	ErrInvalidPartitionsCount                     = InvalidPartitionsCount{}
+	ErrTopicDirectoryNotFound                     = TopicDirectoryNotFound{}
+	ErrTooManyTopics                              = TooManyTopics{}
 	ErrCannotCreatePartition                      = CannotCreatePartition{}
 	ErrCannotCreatePartitionsDirectory            = CannotCreatePartitionsDirectory{}
 	ErrCannotCreatePartitionDirectory             = CannotCreatePartitionDirectory{}
@@ -2410,6 +2768,9 @@ var (
 	ErrCannotCreateConsumerOffsetsDirectory       = CannotCreateConsumerOffsetsDirectory{}
 	ErrCannotReadConsumerOffsets                  = CannotReadConsumerOffsets{}
 	ErrConsumerOffsetNotFound                     = ConsumerOffsetNotFound{}
+	ErrNotResolvedConsumer                        = NotResolvedConsumer{}
+	ErrCannotOpenConsumerOffsetsFile              = CannotOpenConsumerOffsetsFile{}
+	ErrPartitionIdSpaceExhausted                  = PartitionIdSpaceExhausted{}
 	ErrSegmentNotFound                            = SegmentNotFound{}
 	ErrSegmentClosed                              = SegmentClosed{}
 	ErrInvalidSegmentSize                         = InvalidSegmentSize{}
@@ -2448,17 +2809,22 @@ var (
 	ErrInvalidIndexesCount                        = InvalidIndexesCount{}
 	ErrInvalidMessagesSize                        = InvalidMessagesSize{}
 	ErrTooSmallMessage                            = TooSmallMessage{}
+	ErrInvalidMessageTimestampDelta               = InvalidMessageTimestampDelta{}
+	ErrInvalidBatchChecksum                       = InvalidBatchChecksum{}
+	ErrInvalidHeaderKind                          = InvalidHeaderKind{}
+	ErrUnsupportedOptionKey                       = UnsupportedOptionKey{}
+	ErrInvalidOptionValue                         = InvalidOptionValue{}
+	ErrOptionsBlockTooLarge                       = OptionsBlockTooLarge{}
 	ErrCannotSendMessagesDueToClientDisconnection = CannotSendMessagesDueToClientDisconnection{}
 	ErrBackgroundSendError                        = BackgroundSendError{}
 	ErrBackgroundSendTimeout                      = BackgroundSendTimeout{}
 	ErrBackgroundSendBufferFull                   = BackgroundSendBufferFull{}
 	ErrBackgroundWorkerDisconnected               = BackgroundWorkerDisconnected{}
 	ErrBackgroundSendBufferOverflow               = BackgroundSendBufferOverflow{}
-	ErrProducerSendFailed                         = ProducerSendFailed{}
 	ErrProducerClosed                             = ProducerClosed{}
 	ErrInvalidOffset                              = InvalidOffset{}
+	ErrInvalidReservedField                       = InvalidReservedField{}
 	ErrConsumerGroupIdNotFound                    = ConsumerGroupIdNotFound{}
-	ErrConsumerGroupIdAlreadyExists               = ConsumerGroupIdAlreadyExists{}
 	ErrInvalidConsumerGroupId                     = InvalidConsumerGroupId{}
 	ErrConsumerGroupNameNotFound                  = ConsumerGroupNameNotFound{}
 	ErrConsumerGroupNameAlreadyExists             = ConsumerGroupNameAlreadyExists{}
@@ -2492,6 +2858,14 @@ var (
 	ErrCannotReadIndexOffset                      = CannotReadIndexOffset{}
 	ErrCannotReadIndexPosition                    = CannotReadIndexPosition{}
 	ErrCannotReadIndexTimestamp                   = CannotReadIndexTimestamp{}
+	ErrTimestampOutOfRange                        = TimestampOutOfRange{}
+	ErrShardNotFound                              = ShardNotFound{}
+	ErrShardCommunicationError                    = ShardCommunicationError{}
+	ErrCannotBindToSocket                         = CannotBindToSocket{}
+	ErrTaskTimeout                                = TaskTimeout{}
+	ErrIoError                                    = IoError{}
+	ErrAlreadyAuthenticated                       = AlreadyAuthenticated{}
+	ErrInvalidSession                             = InvalidSession{}
 	ErrIncompatibleProtocolVersion                = IncompatibleProtocolVersion{}
 )
 
@@ -2516,12 +2890,15 @@ const (
 	InvalidStateEntryChecksumCode                  Code = 16
 	CannotOpenDatabaseCode                         Code = 19
 	ResourceNotFoundCode                           Code = 20
+	CannotCloseWebSocketConnectionCode             Code = 21
 	StaleClientCode                                Code = 30
 	TcpErrorCode                                   Code = 31
 	QuicErrorCode                                  Code = 32
 	InvalidServerAddressCode                       Code = 33
 	InvalidClientAddressCode                       Code = 34
 	InvalidIpAddressCode                           Code = 35
+	HttpErrorCode                                  Code = 36
+	InvalidApiUrlCode                              Code = 37
 	UnauthenticatedCode                            Code = 40
 	UnauthorizedCode                               Code = 41
 	InvalidCredentialsCode                         Code = 42
@@ -2538,8 +2915,10 @@ const (
 	InvalidPersonalAccessTokenCode                 Code = 53
 	PersonalAccessTokenExpiredCode                 Code = 54
 	UsersLimitReachedCode                          Code = 55
+	InvalidPersonalAccessTokenExpiryCode           Code = 56
 	TransientNotCommittedCode                      Code = 57
 	TransientNotAcceptedCode                       Code = 58
+	RequestAlreadyAppliedCode                      Code = 59
 	NotConnectedCode                               Code = 61
 	ClientShutdownCode                             Code = 63
 	InvalidTlsDomainCode                           Code = 64
@@ -2555,6 +2934,7 @@ const (
 	CannotGenerateJwtCode                          Code = 76
 	AccessTokenMissingCode                         Code = 77
 	InvalidAccessTokenCode                         Code = 78
+	CannotFetchJwksCode                            Code = 79
 	InvalidSizeBytesCode                           Code = 80
 	InvalidUtf8Code                                Code = 81
 	InvalidNumberEncodingCode                      Code = 82
@@ -2571,6 +2951,11 @@ const (
 	EmptyResponseCode                              Code = 304
 	CannotCreateEndpointCode                       Code = 305
 	CannotParseUrlCode                             Code = 306
+	WebSocketErrorCode                             Code = 400
+	WebSocketConnectionErrorCode                   Code = 401
+	WebSocketCloseErrorCode                        Code = 402
+	WebSocketReceiveErrorCode                      Code = 403
+	WebSocketSendErrorCode                         Code = 404
 	CannotCreateStreamsDirectoryCode               Code = 1000
 	CannotCreateStreamDirectoryCode                Code = 1001
 	CannotCreateStreamInfoCode                     Code = 1002
@@ -2582,12 +2967,13 @@ const (
 	CannotDeleteStreamDirectoryCode                Code = 1008
 	StreamIdNotFoundCode                           Code = 1009
 	StreamNameNotFoundCode                         Code = 1010
-	StreamIdAlreadyExistsCode                      Code = 1011
+	StreamDirectoryNotFoundCode                    Code = 1011
 	StreamNameAlreadyExistsCode                    Code = 1012
 	InvalidStreamNameCode                          Code = 1013
 	InvalidStreamIdCode                            Code = 1014
 	CannotReadStreamsCode                          Code = 1015
 	InvalidTopicSizeCode                           Code = 1019
+	TooManyStreamsCode                             Code = 1020
 	CannotCreateTopicsDirectoryCode                Code = 2000
 	CannotCreateTopicDirectoryCode                 Code = 2001
 	CannotCreateTopicInfoCode                      Code = 2002
@@ -2600,13 +2986,15 @@ const (
 	CannotPollTopicCode                            Code = 2009
 	TopicIdNotFoundCode                            Code = 2010
 	TopicNameNotFoundCode                          Code = 2011
-	TopicIdAlreadyExistsCode                       Code = 2012
 	TopicNameAlreadyExistsCode                     Code = 2013
 	InvalidTopicNameCode                           Code = 2014
 	TooManyPartitionsCode                          Code = 2015
 	InvalidTopicIdCode                             Code = 2016
 	CannotReadTopicsCode                           Code = 2017
 	InvalidReplicationFactorCode                   Code = 2018
+	InvalidPartitionsCountCode                     Code = 2019
+	TopicDirectoryNotFoundCode                     Code = 2020
+	TooManyTopicsCode                              Code = 2021
 	CannotCreatePartitionCode                      Code = 3000
 	CannotCreatePartitionsDirectoryCode            Code = 3001
 	CannotCreatePartitionDirectoryCode             Code = 3002
@@ -2622,6 +3010,9 @@ const (
 	CannotCreateConsumerOffsetsDirectoryCode       Code = 3012
 	CannotReadConsumerOffsetsCode                  Code = 3020
 	ConsumerOffsetNotFoundCode                     Code = 3021
+	NotResolvedConsumerCode                        Code = 3022
+	CannotOpenConsumerOffsetsFileCode              Code = 3023
+	PartitionIdSpaceExhaustedCode                  Code = 3013
 	SegmentNotFoundCode                            Code = 4000
 	SegmentClosedCode                              Code = 4001
 	InvalidSegmentSizeCode                         Code = 4002
@@ -2660,17 +3051,22 @@ const (
 	InvalidIndexesCountCode                        Code = 4035
 	InvalidMessagesSizeCode                        Code = 4036
 	TooSmallMessageCode                            Code = 4037
+	InvalidMessageTimestampDeltaCode               Code = 4038
+	InvalidBatchChecksumCode                       Code = 4039
+	InvalidHeaderKindCode                          Code = 4040
+	UnsupportedOptionKeyCode                       Code = 4041
+	InvalidOptionValueCode                         Code = 4042
+	OptionsBlockTooLargeCode                       Code = 4043
 	CannotSendMessagesDueToClientDisconnectionCode Code = 4050
 	BackgroundSendErrorCode                        Code = 4051
 	BackgroundSendTimeoutCode                      Code = 4052
 	BackgroundSendBufferFullCode                   Code = 4053
 	BackgroundWorkerDisconnectedCode               Code = 4054
 	BackgroundSendBufferOverflowCode               Code = 4055
-	ProducerSendFailedCode                         Code = 4056
 	ProducerClosedCode                             Code = 4057
 	InvalidOffsetCode                              Code = 4100
+	InvalidReservedFieldCode                       Code = 4101
 	ConsumerGroupIdNotFoundCode                    Code = 5000
-	ConsumerGroupIdAlreadyExistsCode               Code = 5001
 	InvalidConsumerGroupIdCode                     Code = 5002
 	ConsumerGroupNameNotFoundCode                  Code = 5003
 	ConsumerGroupNameAlreadyExistsCode             Code = 5004
@@ -2704,6 +3100,14 @@ const (
 	CannotReadIndexOffsetCode                      Code = 10010
 	CannotReadIndexPositionCode                    Code = 10011
 	CannotReadIndexTimestampCode                   Code = 10012
+	TimestampOutOfRangeCode                        Code = 10013
+	ShardNotFoundCode                              Code = 11000
+	ShardCommunicationErrorCode                    Code = 11001
+	CannotBindToSocketCode                         Code = 12000
+	TaskTimeoutCode                                Code = 12001
+	IoErrorCode                                    Code = 13000
+	AlreadyAuthenticatedCode                       Code = 14000
+	InvalidSessionCode                             Code = 14001
 	IncompatibleProtocolVersionCode                Code = 14003
 )
 
@@ -2745,6 +3149,8 @@ func (c Code) String() string {
 		return "CannotOpenDatabase"
 	case ResourceNotFoundCode:
 		return "ResourceNotFound"
+	case CannotCloseWebSocketConnectionCode:
+		return "CannotCloseWebSocketConnection"
 	case StaleClientCode:
 		return "StaleClient"
 	case TcpErrorCode:
@@ -2757,6 +3163,10 @@ func (c Code) String() string {
 		return "InvalidClientAddress"
 	case InvalidIpAddressCode:
 		return "InvalidIpAddress"
+	case HttpErrorCode:
+		return "HttpError"
+	case InvalidApiUrlCode:
+		return "InvalidApiUrl"
 	case UnauthenticatedCode:
 		return "Unauthenticated"
 	case UnauthorizedCode:
@@ -2789,10 +3199,14 @@ func (c Code) String() string {
 		return "PersonalAccessTokenExpired"
 	case UsersLimitReachedCode:
 		return "UsersLimitReached"
+	case InvalidPersonalAccessTokenExpiryCode:
+		return "InvalidPersonalAccessTokenExpiry"
 	case TransientNotCommittedCode:
 		return "TransientNotCommitted"
 	case TransientNotAcceptedCode:
 		return "TransientNotAccepted"
+	case RequestAlreadyAppliedCode:
+		return "RequestAlreadyApplied"
 	case NotConnectedCode:
 		return "NotConnected"
 	case ClientShutdownCode:
@@ -2823,6 +3237,8 @@ func (c Code) String() string {
 		return "AccessTokenMissing"
 	case InvalidAccessTokenCode:
 		return "InvalidAccessToken"
+	case CannotFetchJwksCode:
+		return "CannotFetchJwks"
 	case InvalidSizeBytesCode:
 		return "InvalidSizeBytes"
 	case InvalidUtf8Code:
@@ -2855,6 +3271,16 @@ func (c Code) String() string {
 		return "CannotCreateEndpoint"
 	case CannotParseUrlCode:
 		return "CannotParseUrl"
+	case WebSocketErrorCode:
+		return "WebSocketError"
+	case WebSocketConnectionErrorCode:
+		return "WebSocketConnectionError"
+	case WebSocketCloseErrorCode:
+		return "WebSocketCloseError"
+	case WebSocketReceiveErrorCode:
+		return "WebSocketReceiveError"
+	case WebSocketSendErrorCode:
+		return "WebSocketSendError"
 	case CannotCreateStreamsDirectoryCode:
 		return "CannotCreateStreamsDirectory"
 	case CannotCreateStreamDirectoryCode:
@@ -2877,8 +3303,8 @@ func (c Code) String() string {
 		return "StreamIdNotFound"
 	case StreamNameNotFoundCode:
 		return "StreamNameNotFound"
-	case StreamIdAlreadyExistsCode:
-		return "StreamIdAlreadyExists"
+	case StreamDirectoryNotFoundCode:
+		return "StreamDirectoryNotFound"
 	case StreamNameAlreadyExistsCode:
 		return "StreamNameAlreadyExists"
 	case InvalidStreamNameCode:
@@ -2889,6 +3315,8 @@ func (c Code) String() string {
 		return "CannotReadStreams"
 	case InvalidTopicSizeCode:
 		return "InvalidTopicSize"
+	case TooManyStreamsCode:
+		return "TooManyStreams"
 	case CannotCreateTopicsDirectoryCode:
 		return "CannotCreateTopicsDirectory"
 	case CannotCreateTopicDirectoryCode:
@@ -2913,8 +3341,6 @@ func (c Code) String() string {
 		return "TopicIdNotFound"
 	case TopicNameNotFoundCode:
 		return "TopicNameNotFound"
-	case TopicIdAlreadyExistsCode:
-		return "TopicIdAlreadyExists"
 	case TopicNameAlreadyExistsCode:
 		return "TopicNameAlreadyExists"
 	case InvalidTopicNameCode:
@@ -2927,6 +3353,12 @@ func (c Code) String() string {
 		return "CannotReadTopics"
 	case InvalidReplicationFactorCode:
 		return "InvalidReplicationFactor"
+	case InvalidPartitionsCountCode:
+		return "InvalidPartitionsCount"
+	case TopicDirectoryNotFoundCode:
+		return "TopicDirectoryNotFound"
+	case TooManyTopicsCode:
+		return "TooManyTopics"
 	case CannotCreatePartitionCode:
 		return "CannotCreatePartition"
 	case CannotCreatePartitionsDirectoryCode:
@@ -2957,6 +3389,12 @@ func (c Code) String() string {
 		return "CannotReadConsumerOffsets"
 	case ConsumerOffsetNotFoundCode:
 		return "ConsumerOffsetNotFound"
+	case NotResolvedConsumerCode:
+		return "NotResolvedConsumer"
+	case CannotOpenConsumerOffsetsFileCode:
+		return "CannotOpenConsumerOffsetsFile"
+	case PartitionIdSpaceExhaustedCode:
+		return "PartitionIdSpaceExhausted"
 	case SegmentNotFoundCode:
 		return "SegmentNotFound"
 	case SegmentClosedCode:
@@ -3033,6 +3471,18 @@ func (c Code) String() string {
 		return "InvalidMessagesSize"
 	case TooSmallMessageCode:
 		return "TooSmallMessage"
+	case InvalidMessageTimestampDeltaCode:
+		return "InvalidMessageTimestampDelta"
+	case InvalidBatchChecksumCode:
+		return "InvalidBatchChecksum"
+	case InvalidHeaderKindCode:
+		return "InvalidHeaderKind"
+	case UnsupportedOptionKeyCode:
+		return "UnsupportedOptionKey"
+	case InvalidOptionValueCode:
+		return "InvalidOptionValue"
+	case OptionsBlockTooLargeCode:
+		return "OptionsBlockTooLarge"
 	case CannotSendMessagesDueToClientDisconnectionCode:
 		return "CannotSendMessagesDueToClientDisconnection"
 	case BackgroundSendErrorCode:
@@ -3045,16 +3495,14 @@ func (c Code) String() string {
 		return "BackgroundWorkerDisconnected"
 	case BackgroundSendBufferOverflowCode:
 		return "BackgroundSendBufferOverflow"
-	case ProducerSendFailedCode:
-		return "ProducerSendFailed"
 	case ProducerClosedCode:
 		return "ProducerClosed"
 	case InvalidOffsetCode:
 		return "InvalidOffset"
+	case InvalidReservedFieldCode:
+		return "InvalidReservedField"
 	case ConsumerGroupIdNotFoundCode:
 		return "ConsumerGroupIdNotFound"
-	case ConsumerGroupIdAlreadyExistsCode:
-		return "ConsumerGroupIdAlreadyExists"
 	case InvalidConsumerGroupIdCode:
 		return "InvalidConsumerGroupId"
 	case ConsumerGroupNameNotFoundCode:
@@ -3121,6 +3569,22 @@ func (c Code) String() string {
 		return "CannotReadIndexPosition"
 	case CannotReadIndexTimestampCode:
 		return "CannotReadIndexTimestamp"
+	case TimestampOutOfRangeCode:
+		return "TimestampOutOfRange"
+	case ShardNotFoundCode:
+		return "ShardNotFound"
+	case ShardCommunicationErrorCode:
+		return "ShardCommunicationError"
+	case CannotBindToSocketCode:
+		return "CannotBindToSocket"
+	case TaskTimeoutCode:
+		return "TaskTimeout"
+	case IoErrorCode:
+		return "IoError"
+	case AlreadyAuthenticatedCode:
+		return "AlreadyAuthenticated"
+	case InvalidSessionCode:
+		return "InvalidSession"
 	case IncompatibleProtocolVersionCode:
 		return "IncompatibleProtocolVersion"
 	default:
@@ -3166,6 +3630,8 @@ func FromCode(code Code) IggyError {
 		return ErrCannotOpenDatabase
 	case ResourceNotFoundCode:
 		return ErrResourceNotFound
+	case CannotCloseWebSocketConnectionCode:
+		return ErrCannotCloseWebSocketConnection
 	case StaleClientCode:
 		return ErrStaleClient
 	case TcpErrorCode:
@@ -3178,6 +3644,10 @@ func FromCode(code Code) IggyError {
 		return ErrInvalidClientAddress
 	case InvalidIpAddressCode:
 		return ErrInvalidIpAddress
+	case HttpErrorCode:
+		return ErrHttpError
+	case InvalidApiUrlCode:
+		return ErrInvalidApiUrl
 	case UnauthenticatedCode:
 		return ErrUnauthenticated
 	case UnauthorizedCode:
@@ -3210,10 +3680,14 @@ func FromCode(code Code) IggyError {
 		return ErrPersonalAccessTokenExpired
 	case UsersLimitReachedCode:
 		return ErrUsersLimitReached
+	case InvalidPersonalAccessTokenExpiryCode:
+		return ErrInvalidPersonalAccessTokenExpiry
 	case TransientNotCommittedCode:
 		return ErrTransientNotCommitted
 	case TransientNotAcceptedCode:
 		return ErrTransientNotAccepted
+	case RequestAlreadyAppliedCode:
+		return ErrRequestAlreadyApplied
 	case NotConnectedCode:
 		return ErrNotConnected
 	case ClientShutdownCode:
@@ -3244,6 +3718,8 @@ func FromCode(code Code) IggyError {
 		return ErrAccessTokenMissing
 	case InvalidAccessTokenCode:
 		return ErrInvalidAccessToken
+	case CannotFetchJwksCode:
+		return ErrCannotFetchJwks
 	case InvalidSizeBytesCode:
 		return ErrInvalidSizeBytes
 	case InvalidUtf8Code:
@@ -3276,6 +3752,16 @@ func FromCode(code Code) IggyError {
 		return ErrCannotCreateEndpoint
 	case CannotParseUrlCode:
 		return ErrCannotParseUrl
+	case WebSocketErrorCode:
+		return ErrWebSocketError
+	case WebSocketConnectionErrorCode:
+		return ErrWebSocketConnectionError
+	case WebSocketCloseErrorCode:
+		return ErrWebSocketCloseError
+	case WebSocketReceiveErrorCode:
+		return ErrWebSocketReceiveError
+	case WebSocketSendErrorCode:
+		return ErrWebSocketSendError
 	case CannotCreateStreamsDirectoryCode:
 		return ErrCannotCreateStreamsDirectory
 	case CannotCreateStreamDirectoryCode:
@@ -3298,8 +3784,8 @@ func FromCode(code Code) IggyError {
 		return ErrStreamIdNotFound
 	case StreamNameNotFoundCode:
 		return ErrStreamNameNotFound
-	case StreamIdAlreadyExistsCode:
-		return ErrStreamIdAlreadyExists
+	case StreamDirectoryNotFoundCode:
+		return ErrStreamDirectoryNotFound
 	case StreamNameAlreadyExistsCode:
 		return ErrStreamNameAlreadyExists
 	case InvalidStreamNameCode:
@@ -3310,6 +3796,8 @@ func FromCode(code Code) IggyError {
 		return ErrCannotReadStreams
 	case InvalidTopicSizeCode:
 		return ErrInvalidTopicSize
+	case TooManyStreamsCode:
+		return ErrTooManyStreams
 	case CannotCreateTopicsDirectoryCode:
 		return ErrCannotCreateTopicsDirectory
 	case CannotCreateTopicDirectoryCode:
@@ -3334,8 +3822,6 @@ func FromCode(code Code) IggyError {
 		return ErrTopicIdNotFound
 	case TopicNameNotFoundCode:
 		return ErrTopicNameNotFound
-	case TopicIdAlreadyExistsCode:
-		return ErrTopicIdAlreadyExists
 	case TopicNameAlreadyExistsCode:
 		return ErrTopicNameAlreadyExists
 	case InvalidTopicNameCode:
@@ -3348,6 +3834,12 @@ func FromCode(code Code) IggyError {
 		return ErrCannotReadTopics
 	case InvalidReplicationFactorCode:
 		return ErrInvalidReplicationFactor
+	case InvalidPartitionsCountCode:
+		return ErrInvalidPartitionsCount
+	case TopicDirectoryNotFoundCode:
+		return ErrTopicDirectoryNotFound
+	case TooManyTopicsCode:
+		return ErrTooManyTopics
 	case CannotCreatePartitionCode:
 		return ErrCannotCreatePartition
 	case CannotCreatePartitionsDirectoryCode:
@@ -3378,6 +3870,12 @@ func FromCode(code Code) IggyError {
 		return ErrCannotReadConsumerOffsets
 	case ConsumerOffsetNotFoundCode:
 		return ErrConsumerOffsetNotFound
+	case NotResolvedConsumerCode:
+		return ErrNotResolvedConsumer
+	case CannotOpenConsumerOffsetsFileCode:
+		return ErrCannotOpenConsumerOffsetsFile
+	case PartitionIdSpaceExhaustedCode:
+		return ErrPartitionIdSpaceExhausted
 	case SegmentNotFoundCode:
 		return ErrSegmentNotFound
 	case SegmentClosedCode:
@@ -3454,6 +3952,18 @@ func FromCode(code Code) IggyError {
 		return ErrInvalidMessagesSize
 	case TooSmallMessageCode:
 		return ErrTooSmallMessage
+	case InvalidMessageTimestampDeltaCode:
+		return ErrInvalidMessageTimestampDelta
+	case InvalidBatchChecksumCode:
+		return ErrInvalidBatchChecksum
+	case InvalidHeaderKindCode:
+		return ErrInvalidHeaderKind
+	case UnsupportedOptionKeyCode:
+		return ErrUnsupportedOptionKey
+	case InvalidOptionValueCode:
+		return ErrInvalidOptionValue
+	case OptionsBlockTooLargeCode:
+		return ErrOptionsBlockTooLarge
 	case CannotSendMessagesDueToClientDisconnectionCode:
 		return ErrCannotSendMessagesDueToClientDisconnection
 	case BackgroundSendErrorCode:
@@ -3466,16 +3976,14 @@ func FromCode(code Code) IggyError {
 		return ErrBackgroundWorkerDisconnected
 	case BackgroundSendBufferOverflowCode:
 		return ErrBackgroundSendBufferOverflow
-	case ProducerSendFailedCode:
-		return ErrProducerSendFailed
 	case ProducerClosedCode:
 		return ErrProducerClosed
 	case InvalidOffsetCode:
 		return ErrInvalidOffset
+	case InvalidReservedFieldCode:
+		return ErrInvalidReservedField
 	case ConsumerGroupIdNotFoundCode:
 		return ErrConsumerGroupIdNotFound
-	case ConsumerGroupIdAlreadyExistsCode:
-		return ErrConsumerGroupIdAlreadyExists
 	case InvalidConsumerGroupIdCode:
 		return ErrInvalidConsumerGroupId
 	case ConsumerGroupNameNotFoundCode:
@@ -3542,6 +4050,22 @@ func FromCode(code Code) IggyError {
 		return ErrCannotReadIndexPosition
 	case CannotReadIndexTimestampCode:
 		return ErrCannotReadIndexTimestamp
+	case TimestampOutOfRangeCode:
+		return ErrTimestampOutOfRange
+	case ShardNotFoundCode:
+		return ErrShardNotFound
+	case ShardCommunicationErrorCode:
+		return ErrShardCommunicationError
+	case CannotBindToSocketCode:
+		return ErrCannotBindToSocket
+	case TaskTimeoutCode:
+		return ErrTaskTimeout
+	case IoErrorCode:
+		return ErrIoError
+	case AlreadyAuthenticatedCode:
+		return ErrAlreadyAuthenticated
+	case InvalidSessionCode:
+		return ErrInvalidSession
 	case IncompatibleProtocolVersionCode:
 		return ErrIncompatibleProtocolVersion
 	default:
diff --git a/foreign/java/java-sdk/src/main/java/org/apache/iggy/client/async/tcp/MessagesTcpClient.java b/foreign/java/java-sdk/src/main/java/org/apache/iggy/client/async/tcp/MessagesTcpClient.java
index 6873c670f..17b8bc5dd 100644
--- a/foreign/java/java-sdk/src/main/java/org/apache/iggy/client/async/tcp/MessagesTcpClient.java
+++ b/foreign/java/java-sdk/src/main/java/org/apache/iggy/client/async/tcp/MessagesTcpClient.java
@@ -254,8 +254,8 @@ public class MessagesTcpClient implements MessagesClient {
                     return CompletableFuture.completedFuture(emptyPolledMessages());
                 }
                 return CompletableFuture.failedFuture(new IggyResourceNotFoundException(
-                        IggyErrorCode.CONSUMER_GROUP_NOT_JOINED,
-                        IggyErrorCode.CONSUMER_GROUP_NOT_JOINED.getCode(),
+                        IggyErrorCode.CONSUMER_GROUP_MEMBER_NOT_FOUND,
+                        IggyErrorCode.CONSUMER_GROUP_MEMBER_NOT_FOUND.getCode(),
                         "Cannot poll consumer group " + consumer.id() + " for topic " + topicId + " in stream "
                                 + streamId + ": this client is not a member, join the group first",
                         Optional.empty(),
diff --git a/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyAuthenticationException.java b/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyAuthenticationException.java
index 247513519..c72932eee 100644
--- a/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyAuthenticationException.java
+++ b/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyAuthenticationException.java
@@ -36,9 +36,9 @@ public class IggyAuthenticationException extends IggyServerException {
             IggyErrorCode.INVALID_CREDENTIALS,
             IggyErrorCode.INVALID_USERNAME,
             IggyErrorCode.INVALID_PASSWORD,
-            IggyErrorCode.INVALID_PAT_TOKEN,
-            IggyErrorCode.PASSWORD_DOES_NOT_MATCH,
-            IggyErrorCode.PASSWORD_HASH_INTERNAL_ERROR);
+            IggyErrorCode.INVALID_PERSONAL_ACCESS_TOKEN,
+            IggyErrorCode.ACCESS_TOKEN_MISSING,
+            IggyErrorCode.INVALID_ACCESS_TOKEN);
 
     /**
      * Constructs a new IggyAuthenticationException.
diff --git a/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyConflictException.java b/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyConflictException.java
index 7ff6b0733..c0f97f9c7 100644
--- a/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyConflictException.java
+++ b/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyConflictException.java
@@ -33,11 +33,10 @@ public class IggyConflictException extends IggyServerException {
 
     private static final Set<IggyErrorCode> CODES = EnumSet.of(
             IggyErrorCode.USER_ALREADY_EXISTS,
-            IggyErrorCode.CLIENT_ALREADY_EXISTS,
-            IggyErrorCode.STREAM_ALREADY_EXISTS,
-            IggyErrorCode.TOPIC_ALREADY_EXISTS,
-            IggyErrorCode.CONSUMER_GROUP_ALREADY_EXISTS,
-            IggyErrorCode.PAT_NAME_ALREADY_EXISTS);
+            IggyErrorCode.PERSONAL_ACCESS_TOKEN_ALREADY_EXISTS,
+            IggyErrorCode.STREAM_NAME_ALREADY_EXISTS,
+            IggyErrorCode.TOPIC_NAME_ALREADY_EXISTS,
+            IggyErrorCode.CONSUMER_GROUP_NAME_ALREADY_EXISTS);
 
     /**
      * Constructs a new IggyConflictException.
diff --git a/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyErrorCode.java b/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyErrorCode.java
index 3780efc31..80e729572 100644
--- a/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyErrorCode.java
+++ b/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyErrorCode.java
@@ -36,14 +36,8 @@ public enum IggyErrorCode {
     INVALID_FORMAT(4),
     FEATURE_UNAVAILABLE(5),
     INVALID_IDENTIFIER(6),
-    CANNOT_PARSE_INT(7),
-    CANNOT_PARSE_SLICE(8),
-    CANNOT_PARSE_UTF8(9),
-    STALE_CLIENT(30),
-
-    // Resource errors
     RESOURCE_NOT_FOUND(20),
-    CANNOT_LOAD_RESOURCE(100),
+    STALE_CLIENT(30),
 
     // Authentication/Authorization errors
     UNAUTHENTICATED(40),
@@ -51,60 +45,74 @@ public enum IggyErrorCode {
     INVALID_CREDENTIALS(42),
     INVALID_USERNAME(43),
     INVALID_PASSWORD(44),
-    CLEAR_TEXT_PASSWORD_REQUIRED(45),
+    INVALID_USER_STATUS(45),
     USER_ALREADY_EXISTS(46),
     USER_INACTIVE(47),
-    CANNOT_DELETE_USER_WITH_ACTIVE_PAT(48),
-    CANNOT_UPDATE_OWN_PERMISSIONS(49),
-    CANNOT_DELETE_YOURSELF(50),
-    CLIENT_ALREADY_EXISTS(51),
-    CLIENT_NOT_FOUND(52),
-    INVALID_PAT_TOKEN(53),
-    PAT_NAME_ALREADY_EXISTS(54),
+    CANNOT_DELETE_USER(48),
+    CANNOT_CHANGE_PERMISSIONS(49),
+    INVALID_PERSONAL_ACCESS_TOKEN_NAME(50),
+    PERSONAL_ACCESS_TOKEN_ALREADY_EXISTS(51),
+    PERSONAL_ACCESS_TOKENS_LIMIT_REACHED(52),
+    INVALID_PERSONAL_ACCESS_TOKEN(53),
+    PERSONAL_ACCESS_TOKEN_EXPIRED(54),
     TRANSIENT_NOT_COMMITTED(57),
     TRANSIENT_NOT_ACCEPTED(58),
-    PASSWORD_DOES_NOT_MATCH(77),
-    PASSWORD_HASH_INTERNAL_ERROR(78),
+    ACCESS_TOKEN_MISSING(77),
+    INVALID_ACCESS_TOKEN(78),
+
+    // Wire decoding errors
+    INVALID_SIZE_BYTES(80),
+    INVALID_UTF8(81),
+    INVALID_NUMBER_ENCODING(82),
+    INVALID_BOOLEAN_VALUE(83),
+    INVALID_NUMBER_VALUE(84),
+
+    // Client errors
+    CLIENT_NOT_FOUND(100),
 
     // Stream errors
+    CANNOT_CREATE_STREAM_DIRECTORY(1001),
     STREAM_ID_NOT_FOUND(1009),
     STREAM_NAME_NOT_FOUND(1010),
-    STREAM_ALREADY_EXISTS(1012),
+    STREAM_NAME_ALREADY_EXISTS(1012),
     INVALID_STREAM_NAME(1013),
-    CANNOT_CREATE_STREAM_DIRECTORY(1014),
+    INVALID_STREAM_ID(1014),
+    TOO_MANY_STREAMS(1020),
 
     // Topic errors
+    CANNOT_CREATE_TOPIC_DIRECTORY(2001),
     TOPIC_ID_NOT_FOUND(2010),
     TOPIC_NAME_NOT_FOUND(2011),
-    TOPICS_COUNT_EXCEEDED(2012),
-    TOPIC_ALREADY_EXISTS(2013),
+    TOPIC_NAME_ALREADY_EXISTS(2013),
     INVALID_TOPIC_NAME(2014),
-    INVALID_REPLICATION_FACTOR(2015),
-    CANNOT_CREATE_TOPIC_DIRECTORY(2016),
+    TOO_MANY_PARTITIONS(2015),
+    INVALID_TOPIC_ID(2016),
+    INVALID_REPLICATION_FACTOR(2018),
+    TOO_MANY_TOPICS(2021),
 
     // Partition errors
     PARTITION_NOT_FOUND(3007),
-
-    // Consumer group errors
-    CONSUMER_GROUP_ID_NOT_FOUND(5000),
-    CONSUMER_GROUP_MEMBER_NOT_FOUND(5002),
-    CONSUMER_GROUP_NAME_NOT_FOUND(5003),
-    CONSUMER_GROUP_ALREADY_EXISTS(5004),
-    INVALID_CONSUMER_GROUP_NAME(5005),
-    CONSUMER_GROUP_NOT_JOINED(5006),
+    PARTITION_ID_SPACE_EXHAUSTED(3013),
 
     // Segment errors
     SEGMENT_NOT_FOUND(4000),
     SEGMENT_CLOSED(4001),
-    CANNOT_READ_SEGMENT(4002),
-    CANNOT_SAVE_SEGMENT(4003),
+    INVALID_SEGMENT_SIZE(4002),
+    CANNOT_CREATE_SEGMENT_LOG_FILE(4003),
 
     // Message errors
-    TOO_MANY_MESSAGES(7000),
-    EMPTY_MESSAGES(7001),
-    TOO_BIG_MESSAGE(7002),
-    INVALID_MESSAGE_CHECKSUM(7003),
-    MESSAGE_NOT_FOUND(7004),
+    TOO_BIG_MESSAGE_PAYLOAD(4022),
+    TOO_MANY_MESSAGES(4023),
+    EMPTY_MESSAGE_PAYLOAD(4024),
+    INVALID_MESSAGE_CHECKSUM(4027),
+
+    // Consumer group errors
+    CONSUMER_GROUP_ID_NOT_FOUND(5000),
+    INVALID_CONSUMER_GROUP_ID(5002),
+    CONSUMER_GROUP_NAME_NOT_FOUND(5003),
+    CONSUMER_GROUP_NAME_ALREADY_EXISTS(5004),
+    INVALID_CONSUMER_GROUP_NAME(5005),
+    CONSUMER_GROUP_MEMBER_NOT_FOUND(5006),
 
     // VSR protocol errors
     INCOMPATIBLE_PROTOCOL_VERSION(14003),
diff --git a/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyResourceNotFoundException.java b/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyResourceNotFoundException.java
index 1f5ac25e1..aa2f80c42 100644
--- a/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyResourceNotFoundException.java
+++ b/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyResourceNotFoundException.java
@@ -33,7 +33,6 @@ public class IggyResourceNotFoundException extends IggyServerException {
 
     private static final Set<IggyErrorCode> CODES = EnumSet.of(
             IggyErrorCode.RESOURCE_NOT_FOUND,
-            IggyErrorCode.CANNOT_LOAD_RESOURCE,
             IggyErrorCode.STREAM_ID_NOT_FOUND,
             IggyErrorCode.STREAM_NAME_NOT_FOUND,
             IggyErrorCode.TOPIC_ID_NOT_FOUND,
@@ -43,8 +42,7 @@ public class IggyResourceNotFoundException extends IggyServerException {
             IggyErrorCode.CLIENT_NOT_FOUND,
             IggyErrorCode.CONSUMER_GROUP_ID_NOT_FOUND,
             IggyErrorCode.CONSUMER_GROUP_NAME_NOT_FOUND,
-            IggyErrorCode.CONSUMER_GROUP_NOT_JOINED,
-            IggyErrorCode.MESSAGE_NOT_FOUND);
+            IggyErrorCode.CONSUMER_GROUP_MEMBER_NOT_FOUND);
 
     /**
      * Constructs a new IggyResourceNotFoundException.
diff --git a/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyValidationException.java b/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyValidationException.java
index 02ae07975..7ed3814f1 100644
--- a/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyValidationException.java
+++ b/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyValidationException.java
@@ -36,19 +36,20 @@ public class IggyValidationException extends IggyServerException {
             IggyErrorCode.INVALID_FORMAT,
             IggyErrorCode.FEATURE_UNAVAILABLE,
             IggyErrorCode.INVALID_IDENTIFIER,
-            IggyErrorCode.CANNOT_PARSE_INT,
-            IggyErrorCode.CANNOT_PARSE_SLICE,
-            IggyErrorCode.CANNOT_PARSE_UTF8,
+            IggyErrorCode.INVALID_NUMBER_ENCODING,
+            IggyErrorCode.INVALID_SIZE_BYTES,
+            IggyErrorCode.INVALID_UTF8,
             IggyErrorCode.INVALID_STREAM_NAME,
             IggyErrorCode.CANNOT_CREATE_STREAM_DIRECTORY,
             IggyErrorCode.INVALID_TOPIC_NAME,
+            IggyErrorCode.INVALID_TOPIC_ID,
             IggyErrorCode.INVALID_REPLICATION_FACTOR,
             IggyErrorCode.CANNOT_CREATE_TOPIC_DIRECTORY,
             IggyErrorCode.CONSUMER_GROUP_MEMBER_NOT_FOUND,
             IggyErrorCode.INVALID_CONSUMER_GROUP_NAME,
             IggyErrorCode.TOO_MANY_MESSAGES,
-            IggyErrorCode.EMPTY_MESSAGES,
-            IggyErrorCode.TOO_BIG_MESSAGE,
+            IggyErrorCode.EMPTY_MESSAGE_PAYLOAD,
+            IggyErrorCode.TOO_BIG_MESSAGE_PAYLOAD,
             IggyErrorCode.INVALID_MESSAGE_CHECKSUM);
 
     /**
diff --git a/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyAuthenticationExceptionTest.java b/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyAuthenticationExceptionTest.java
index 4383c92dc..fbc2c7181 100644
--- a/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyAuthenticationExceptionTest.java
+++ b/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyAuthenticationExceptionTest.java
@@ -50,9 +50,9 @@ class IggyAuthenticationExceptionTest {
                 "INVALID_CREDENTIALS",
                 "INVALID_USERNAME",
                 "INVALID_PASSWORD",
-                "INVALID_PAT_TOKEN",
-                "PASSWORD_DOES_NOT_MATCH",
-                "PASSWORD_HASH_INTERNAL_ERROR"
+                "INVALID_PERSONAL_ACCESS_TOKEN",
+                "ACCESS_TOKEN_MISSING",
+                "INVALID_ACCESS_TOKEN"
             })
     void matchesReturnsTrueForAuthenticationRelatedCodes(IggyErrorCode code) {
         assertThat(IggyAuthenticationException.matches(code)).isTrue();
@@ -66,9 +66,9 @@ class IggyAuthenticationExceptionTest {
                 "INVALID_CREDENTIALS",
                 "INVALID_USERNAME",
                 "INVALID_PASSWORD",
-                "INVALID_PAT_TOKEN",
-                "PASSWORD_DOES_NOT_MATCH",
-                "PASSWORD_HASH_INTERNAL_ERROR"
+                "INVALID_PERSONAL_ACCESS_TOKEN",
+                "ACCESS_TOKEN_MISSING",
+                "INVALID_ACCESS_TOKEN"
             },
             mode = Mode.EXCLUDE)
     void matchesReturnsFalseForNonAuthenticationRelatedCodes(IggyErrorCode code) {
diff --git a/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyConflictExceptionTest.java b/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyConflictExceptionTest.java
index 36e22f945..93b1842c2 100644
--- a/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyConflictExceptionTest.java
+++ b/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyConflictExceptionTest.java
@@ -47,11 +47,10 @@ class IggyConflictExceptionTest {
             value = IggyErrorCode.class,
             names = {
                 "USER_ALREADY_EXISTS",
-                "CLIENT_ALREADY_EXISTS",
-                "STREAM_ALREADY_EXISTS",
-                "TOPIC_ALREADY_EXISTS",
-                "CONSUMER_GROUP_ALREADY_EXISTS",
-                "PAT_NAME_ALREADY_EXISTS"
+                "PERSONAL_ACCESS_TOKEN_ALREADY_EXISTS",
+                "STREAM_NAME_ALREADY_EXISTS",
+                "TOPIC_NAME_ALREADY_EXISTS",
+                "CONSUMER_GROUP_NAME_ALREADY_EXISTS"
             })
     void matchesReturnsTrueForConflictRelatedCodes(IggyErrorCode code) {
         assertThat(IggyConflictException.matches(code)).isTrue();
@@ -62,11 +61,10 @@ class IggyConflictExceptionTest {
             value = IggyErrorCode.class,
             names = {
                 "USER_ALREADY_EXISTS",
-                "CLIENT_ALREADY_EXISTS",
-                "STREAM_ALREADY_EXISTS",
-                "TOPIC_ALREADY_EXISTS",
-                "CONSUMER_GROUP_ALREADY_EXISTS",
-                "PAT_NAME_ALREADY_EXISTS"
+                "PERSONAL_ACCESS_TOKEN_ALREADY_EXISTS",
+                "STREAM_NAME_ALREADY_EXISTS",
+                "TOPIC_NAME_ALREADY_EXISTS",
+                "CONSUMER_GROUP_NAME_ALREADY_EXISTS"
             },
             mode = Mode.EXCLUDE)
     void matchesReturnsFalseForNonConflictRelatedCodes(IggyErrorCode code) {
diff --git a/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyErrorCodeTest.java b/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyErrorCodeTest.java
index 97e60579e..3d87877c6 100644
--- a/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyErrorCodeTest.java
+++ b/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyErrorCodeTest.java
@@ -158,14 +158,8 @@ class IggyErrorCodeTest {
         "4, INVALID_FORMAT",
         "5, FEATURE_UNAVAILABLE",
         "6, INVALID_IDENTIFIER",
-        "7, CANNOT_PARSE_INT",
-        "8, CANNOT_PARSE_SLICE",
-        "9, CANNOT_PARSE_UTF8",
-        "30, STALE_CLIENT",
-
-        // Resource errors
         "20, RESOURCE_NOT_FOUND",
-        "100, CANNOT_LOAD_RESOURCE",
+        "30, STALE_CLIENT",
 
         // Authentication/Authorization errors
         "40, UNAUTHENTICATED",
@@ -173,60 +167,74 @@ class IggyErrorCodeTest {
         "42, INVALID_CREDENTIALS",
         "43, INVALID_USERNAME",
         "44, INVALID_PASSWORD",
-        "45, CLEAR_TEXT_PASSWORD_REQUIRED",
+        "45, INVALID_USER_STATUS",
         "46, USER_ALREADY_EXISTS",
         "47, USER_INACTIVE",
-        "48, CANNOT_DELETE_USER_WITH_ACTIVE_PAT",
-        "49, CANNOT_UPDATE_OWN_PERMISSIONS",
-        "50, CANNOT_DELETE_YOURSELF",
-        "51, CLIENT_ALREADY_EXISTS",
-        "52, CLIENT_NOT_FOUND",
-        "53, INVALID_PAT_TOKEN",
-        "54, PAT_NAME_ALREADY_EXISTS",
+        "48, CANNOT_DELETE_USER",
+        "49, CANNOT_CHANGE_PERMISSIONS",
+        "50, INVALID_PERSONAL_ACCESS_TOKEN_NAME",
+        "51, PERSONAL_ACCESS_TOKEN_ALREADY_EXISTS",
+        "52, PERSONAL_ACCESS_TOKENS_LIMIT_REACHED",
+        "53, INVALID_PERSONAL_ACCESS_TOKEN",
+        "54, PERSONAL_ACCESS_TOKEN_EXPIRED",
         "57, TRANSIENT_NOT_COMMITTED",
         "58, TRANSIENT_NOT_ACCEPTED",
-        "77, PASSWORD_DOES_NOT_MATCH",
-        "78, PASSWORD_HASH_INTERNAL_ERROR",
+        "77, ACCESS_TOKEN_MISSING",
+        "78, INVALID_ACCESS_TOKEN",
+
+        // Wire decoding errors
+        "80, INVALID_SIZE_BYTES",
+        "81, INVALID_UTF8",
+        "82, INVALID_NUMBER_ENCODING",
+        "83, INVALID_BOOLEAN_VALUE",
+        "84, INVALID_NUMBER_VALUE",
+
+        // Client errors
+        "100, CLIENT_NOT_FOUND",
 
         // Stream errors
+        "1001, CANNOT_CREATE_STREAM_DIRECTORY",
         "1009, STREAM_ID_NOT_FOUND",
         "1010, STREAM_NAME_NOT_FOUND",
-        "1012, STREAM_ALREADY_EXISTS",
+        "1012, STREAM_NAME_ALREADY_EXISTS",
         "1013, INVALID_STREAM_NAME",
-        "1014, CANNOT_CREATE_STREAM_DIRECTORY",
+        "1014, INVALID_STREAM_ID",
+        "1020, TOO_MANY_STREAMS",
 
         // Topic errors
+        "2001, CANNOT_CREATE_TOPIC_DIRECTORY",
         "2010, TOPIC_ID_NOT_FOUND",
         "2011, TOPIC_NAME_NOT_FOUND",
-        "2012, TOPICS_COUNT_EXCEEDED",
-        "2013, TOPIC_ALREADY_EXISTS",
+        "2013, TOPIC_NAME_ALREADY_EXISTS",
         "2014, INVALID_TOPIC_NAME",
-        "2015, INVALID_REPLICATION_FACTOR",
-        "2016, CANNOT_CREATE_TOPIC_DIRECTORY",
+        "2015, TOO_MANY_PARTITIONS",
+        "2016, INVALID_TOPIC_ID",
+        "2018, INVALID_REPLICATION_FACTOR",
+        "2021, TOO_MANY_TOPICS",
 
         // Partition errors
         "3007, PARTITION_NOT_FOUND",
-
-        // Consumer group errors
-        "5000, CONSUMER_GROUP_ID_NOT_FOUND",
-        "5002, CONSUMER_GROUP_MEMBER_NOT_FOUND",
-        "5003, CONSUMER_GROUP_NAME_NOT_FOUND",
-        "5004, CONSUMER_GROUP_ALREADY_EXISTS",
-        "5005, INVALID_CONSUMER_GROUP_NAME",
-        "5006, CONSUMER_GROUP_NOT_JOINED",
+        "3013, PARTITION_ID_SPACE_EXHAUSTED",
 
         // Segment errors
         "4000, SEGMENT_NOT_FOUND",
         "4001, SEGMENT_CLOSED",
-        "4002, CANNOT_READ_SEGMENT",
-        "4003, CANNOT_SAVE_SEGMENT",
+        "4002, INVALID_SEGMENT_SIZE",
+        "4003, CANNOT_CREATE_SEGMENT_LOG_FILE",
 
         // Message errors
-        "7000, TOO_MANY_MESSAGES",
-        "7001, EMPTY_MESSAGES",
-        "7002, TOO_BIG_MESSAGE",
-        "7003, INVALID_MESSAGE_CHECKSUM",
-        "7004, MESSAGE_NOT_FOUND",
+        "4022, TOO_BIG_MESSAGE_PAYLOAD",
+        "4023, TOO_MANY_MESSAGES",
+        "4024, EMPTY_MESSAGE_PAYLOAD",
+        "4027, INVALID_MESSAGE_CHECKSUM",
+
+        // Consumer group errors
+        "5000, CONSUMER_GROUP_ID_NOT_FOUND",
+        "5002, INVALID_CONSUMER_GROUP_ID",
+        "5003, CONSUMER_GROUP_NAME_NOT_FOUND",
+        "5004, CONSUMER_GROUP_NAME_ALREADY_EXISTS",
+        "5005, INVALID_CONSUMER_GROUP_NAME",
+        "5006, CONSUMER_GROUP_MEMBER_NOT_FOUND",
 
         // VSR protocol errors
         "14003, INCOMPATIBLE_PROTOCOL_VERSION",
diff --git a/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyResourceNotFoundExceptionTest.java b/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyResourceNotFoundExceptionTest.java
index e64129177..2cb9c9758 100644
--- a/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyResourceNotFoundExceptionTest.java
+++ b/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyResourceNotFoundExceptionTest.java
@@ -47,7 +47,6 @@ class IggyResourceNotFoundExceptionTest {
             value = IggyErrorCode.class,
             names = {
                 "RESOURCE_NOT_FOUND",
-                "CANNOT_LOAD_RESOURCE",
                 "STREAM_ID_NOT_FOUND",
                 "STREAM_NAME_NOT_FOUND",
                 "TOPIC_ID_NOT_FOUND",
@@ -57,8 +56,7 @@ class IggyResourceNotFoundExceptionTest {
                 "CLIENT_NOT_FOUND",
                 "CONSUMER_GROUP_ID_NOT_FOUND",
                 "CONSUMER_GROUP_NAME_NOT_FOUND",
-                "CONSUMER_GROUP_NOT_JOINED",
-                "MESSAGE_NOT_FOUND"
+                "CONSUMER_GROUP_MEMBER_NOT_FOUND",
             })
     void matchesReturnsTrueForResourceNotFoundRelatedCodes(IggyErrorCode code) {
         assertThat(IggyResourceNotFoundException.matches(code)).isTrue();
@@ -69,7 +67,6 @@ class IggyResourceNotFoundExceptionTest {
             value = IggyErrorCode.class,
             names = {
                 "RESOURCE_NOT_FOUND",
-                "CANNOT_LOAD_RESOURCE",
                 "STREAM_ID_NOT_FOUND",
                 "STREAM_NAME_NOT_FOUND",
                 "TOPIC_ID_NOT_FOUND",
@@ -79,8 +76,7 @@ class IggyResourceNotFoundExceptionTest {
                 "CLIENT_NOT_FOUND",
                 "CONSUMER_GROUP_ID_NOT_FOUND",
                 "CONSUMER_GROUP_NAME_NOT_FOUND",
-                "CONSUMER_GROUP_NOT_JOINED",
-                "MESSAGE_NOT_FOUND"
+                "CONSUMER_GROUP_MEMBER_NOT_FOUND",
             },
             mode = Mode.EXCLUDE)
     void matchesReturnsFalseForNonResourceNotFoundRelatedCodes(IggyErrorCode code) {
diff --git a/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyValidationExceptionTest.java b/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyValidationExceptionTest.java
index c0e3e12b2..51f5f7a49 100644
--- a/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyValidationExceptionTest.java
+++ b/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyValidationExceptionTest.java
@@ -50,19 +50,20 @@ class IggyValidationExceptionTest {
                 "INVALID_FORMAT",
                 "FEATURE_UNAVAILABLE",
                 "INVALID_IDENTIFIER",
-                "CANNOT_PARSE_INT",
-                "CANNOT_PARSE_SLICE",
-                "CANNOT_PARSE_UTF8",
+                "INVALID_NUMBER_ENCODING",
+                "INVALID_SIZE_BYTES",
+                "INVALID_UTF8",
                 "INVALID_STREAM_NAME",
                 "CANNOT_CREATE_STREAM_DIRECTORY",
                 "INVALID_TOPIC_NAME",
+                "INVALID_TOPIC_ID",
                 "INVALID_REPLICATION_FACTOR",
                 "CANNOT_CREATE_TOPIC_DIRECTORY",
                 "CONSUMER_GROUP_MEMBER_NOT_FOUND",
                 "INVALID_CONSUMER_GROUP_NAME",
                 "TOO_MANY_MESSAGES",
-                "EMPTY_MESSAGES",
-                "TOO_BIG_MESSAGE",
+                "EMPTY_MESSAGE_PAYLOAD",
+                "TOO_BIG_MESSAGE_PAYLOAD",
                 "INVALID_MESSAGE_CHECKSUM"
             })
     void matchesReturnsTrueForValidationRelatedCodes(IggyErrorCode code) {
@@ -77,19 +78,20 @@ class IggyValidationExceptionTest {
                 "INVALID_FORMAT",
                 "FEATURE_UNAVAILABLE",
                 "INVALID_IDENTIFIER",
-                "CANNOT_PARSE_INT",
-                "CANNOT_PARSE_SLICE",
-                "CANNOT_PARSE_UTF8",
+                "INVALID_NUMBER_ENCODING",
+                "INVALID_SIZE_BYTES",
+                "INVALID_UTF8",
                 "INVALID_STREAM_NAME",
                 "CANNOT_CREATE_STREAM_DIRECTORY",
                 "INVALID_TOPIC_NAME",
+                "INVALID_TOPIC_ID",
                 "INVALID_REPLICATION_FACTOR",
                 "CANNOT_CREATE_TOPIC_DIRECTORY",
                 "CONSUMER_GROUP_MEMBER_NOT_FOUND",
                 "INVALID_CONSUMER_GROUP_NAME",
                 "TOO_MANY_MESSAGES",
-                "EMPTY_MESSAGES",
-                "TOO_BIG_MESSAGE",
+                "EMPTY_MESSAGE_PAYLOAD",
+                "TOO_BIG_MESSAGE_PAYLOAD",
                 "INVALID_MESSAGE_CHECKSUM"
             },
             mode = Mode.EXCLUDE)
diff --git a/foreign/node/src/wire/error.code.test.ts b/foreign/node/src/wire/error.code.test.ts
index 68426929c..680d91be2 100644
--- a/foreign/node/src/wire/error.code.test.ts
+++ b/foreign/node/src/wire/error.code.test.ts
@@ -20,21 +20,36 @@ import { it } from 'node:test';
 import { translateErrorCode } from './error.code.js';
 
 it('translates the consumer-group error range', () => {
-  assert.equal(translateErrorCode(5000), 'Consumer group ID not found');
+  assert.equal(
+    translateErrorCode(5000),
+    'Consumer group with ID: {0} for topic with ID: {1} was not found.'
+  );
   assert.equal(translateErrorCode(5001), 'error');
   assert.equal(translateErrorCode(5002), 'Invalid consumer group ID');
-  assert.equal(translateErrorCode(5003), 'Consumer group name not found');
+  assert.equal(
+    translateErrorCode(5003),
+    'Consumer group with name: {0} for topic with ID: {1} was not found.'
+  );
   assert.equal(
     translateErrorCode(5004),
-    'Consumer group name already exists'
+    'Consumer group with name: {0} for topic with ID: {1} already exists.'
   );
   assert.equal(translateErrorCode(5005), 'Invalid consumer group name');
-  assert.equal(translateErrorCode(5006), 'Consumer group member not found');
-  assert.equal(translateErrorCode(5007), 'Cannot create consumer group info');
-  assert.equal(translateErrorCode(5008), 'Cannot delete consumer group info');
+  assert.equal(
+    translateErrorCode(5006),
+    'Consumer group member with client ID: {0} for group with ID: {1} for topic with ID: {2} was not found.'
+  );
+  assert.equal(
+    translateErrorCode(5007),
+    'Failed to create consumer group info file for ID: {0} for topic with ID: {1} for stream with ID: {2}.'
+  );
+  assert.equal(
+    translateErrorCode(5008),
+    'Failed to delete consumer group info file for ID: {0} for topic with ID: {1} for stream with ID: {2}.'
+  );
   assert.equal(
     translateErrorCode(5009),
-    'Consumer group partition not owned'
+    'Consumer group member with client ID: {0} does not own partition: {1} at the current generation (rebalance in progress).'
   );
   assert.equal(translateErrorCode(5010), 'error');
 });
diff --git a/foreign/node/src/wire/error.code.ts b/foreign/node/src/wire/error.code.ts
index 7ccb0a9dc..8c542c1d9 100644
--- a/foreign/node/src/wire/error.code.ts
+++ b/foreign/node/src/wire/error.code.ts
@@ -36,11 +36,15 @@ export const translateErrorCode = (code: number): string => {
     case '16': return "Invalid state entry checksum: {0}, expected: {1}, for index: {2}";
     case '19': return "Cannot open database, Path: {0}";
     case '20': return "Resource with key: {0} was not found.";
+    case '21': return "Cannot close WebSocket connection";
     case '30': return "Stale client";
     case '31': return "TCP error";
     case '32': return "QUIC error";
     case '33': return "Invalid server address";
     case '34': return "Invalid client address";
+    case '35': return "Invalid IP address: {0}:{1}";
+    case '36': return "Http error {0}";
+    case '37': return "Invalid API URL: {0}";
     case '40': return "Unauthenticated";
     case '41': return "Unauthorized";
     case '42': return "Invalid credentials";
@@ -57,6 +61,10 @@ export const translateErrorCode = (code: number): string => {
     case '53': return "Invalid personal access token";
     case '54': return "Personal access token: {0} for user with ID: {1} has expired.";
     case '55': return "Users limit reached.";
+    case '56': return "Invalid personal access token expiry";
+    case '57': return "Request transiently not committed; retry";
+    case '58': return "Request transiently not accepted; retry, on any replica";
+    case '59': return "Request already applied; its reply is no longer available";
     case '61': return "Not connected";
     case '63': return "Client shutdown";
     case '64': return "Invalid TLS domain";
@@ -72,6 +80,7 @@ export const translateErrorCode = (code: number): string => {
     case '76': return "Cannot generate JWT";
     case '77': return "Access token is missing";
     case '78': return "Invalid access token";
+    case '79': return "Cannot fetch JWKS from URL: {0}";
     case '80': return "Invalid size bytes";
     case '81': return "Invalid UTF-8";
     case '82': return "Invalid number encoding";
@@ -90,6 +99,11 @@ export const translateErrorCode = (code: number): string => {
     case '304': return "Empty response";
     case '305': return "Cannot create endpoint";
     case '306': return "Cannot parse URL";
+    case '400': return "WebSocket error";
+    case '401': return "WebSocket connection error";
+    case '402': return "WebSocket close error";
+    case '403': return "WebSocket receive error";
+    case '404': return "WebSocket send error";
 
     // STREAM
     case '1000': return "Cannot create streams directory, Path: {0}";
@@ -103,15 +117,13 @@ export const translateErrorCode = (code: number): string => {
     case '1008': return "Failed to delete stream directory with ID: {0}";
     case '1009': return "Stream with ID: {0} was not found.";
     case '1010': return "Stream with name: {0} was not found.";
-    case '1011': return "Stream with ID: {0} already exists.";
+    case '1011': return "Stream with directory {0} was not found.";
     case '1012': return "Stream with name: {0} already exists.";
     case '1013': return "Invalid stream name";
     case '1014': return "Invalid stream ID";
     case '1015': return "Cannot read streams";
-    case '1016': return "Missing streams";
-    case '1017': return "Missing topics for stream with ID: {0}";
-    case '1018': return "Missing partitions for topic with ID: {0} for stream with ID: {1}.";
     case '1019': return "Max topic size cannot be lower than segment size. Max topic size: {0} < segment size: {1}.";
+    case '1020': return "Too many streams";
 
 
     case '2000': return "Cannot create topics directory for stream with ID: {0}, Path: {1}";
@@ -126,13 +138,15 @@ export const translateErrorCode = (code: number): string => {
     case '2009': return "Cannot poll topic";
     case '2010': return "Topic with ID: {0} for stream with ID: {1} was not found.";
     case '2011': return "Topic with name: {0} for stream with ID: {1} was not found.";
-    case '2012': return "Topic with ID: {0} for stream with ID: {1} already exists.";
     case '2013': return "Topic with name: {0} for stream with ID: {1} already exists.";
     case '2014': return "Invalid topic name";
     case '2015': return "Too many partitions";
     case '2016': return "Invalid topic ID";
     case '2017': return "Cannot read topics for stream with ID: {0}";
     case '2018': return "Invalid replication factor";
+    case '2019': return "Invalid partitions count";
+    case '2020': return "Topic directory: {0} not found";
+    case '2021': return "Too many topics";
 
     // TOPIC
     case '3000': return "Cannot create partition with ID: {0} for stream with ID: {1} and topic with ID: {2}";
@@ -150,6 +164,9 @@ export const translateErrorCode = (code: number): string => {
     case '3012': return "Failed to create consumer offsets directory for path: {0}";
     case '3020': return "Failed to read consumers offsets from path: {0}";
     case '3021': return "Consumer offset for consumer with ID: {0} was not found.";
+    case '3022': return "Failed to resolve consumer with ID: {0}";
+    case '3023': return "Cannot open consumer offsets file for path: {0}";
+    case '3013': return "Partition id space exhausted for this topic";
 
     // MESSAGE
     case '4000': return "Segment not found";
@@ -180,18 +197,76 @@ export const translateErrorCode = (code: number): string => {
     case '4025': return "Invalid message payload length";
     case '4026': return "Cannot read message checksum";
     case '4027': return "Invalid message checksum: {0}, expected: {1}, for offset: {2}";
-    case '4028': return "Cannot append message to segment at offset: {0}";
+    case '4028': return "Invalid key value length";
+    case '4029': return "Command length error: {0}";
+    case '4030': return "Incorrect Segments Count size: {0}";
+    case '4031': return "Non-zero offset: {0} at index: {1}";
+    case '4032': return "Non-zero timestamp: {0} at index: {1}";
+    case '4033': return "Missing index: {0}";
+    case '4034': return "Invalid indexes byte size: {0}B, should be divisible by 16";
+    case '4035': return "Invalid indexes count: {0}, expected: {1}";
+    case '4036': return "Invalid messages byte size: {0}B, expected: {1}B";
+    case '4037': return "Too small message: {0}B, expected: {1}B";
+    case '4038': return "Invalid message timestamp delta: {0} microseconds exceeds the per-batch limit";
+    case '4039': return "Invalid batch checksum: {0}, expected: {1}, for base offset: {2}";
+    case '4040': return "Invalid header kind code: {0}";
+    case '4041': return "Unsupported option key: {0}";
+    case '4042': return "Invalid option value for key: {0}";
+    case '4043': return "Options block exceeds its limits: {0}";
+    case '4050': return "Cannot sed messages due to client disconnection";
+    case '4051': return "Background send error";
+    case '4052': return "Background send timeout";
+    case '4053': return "Background send buffer is full";
+    case '4054': return "Background worker disconnected";
+    case '4055': return "Background send buffer overflow";
+    case '4057': return "Producer closed";
+    case '4100': return "Invalid offset: {0}";
+    case '4101': return "Invalid reserved field value: {0}, expected: 0";
 
     // CONSUMER GROUP
-    case '5000': return "Consumer group ID not found";
+    case '5000': return "Consumer group with ID: {0} for topic with ID: {1} was not found.";
     case '5002': return "Invalid consumer group ID";
-    case '5003': return "Consumer group name not found";
-    case '5004': return "Consumer group name already exists";
+    case '5003': return "Consumer group with name: {0} for topic with ID: {1} was not found.";
+    case '5004': return "Consumer group with name: {0} for topic with ID: {1} already exists.";
     case '5005': return "Invalid consumer group name";
-    case '5006': return "Consumer group member not found";
-    case '5007': return "Cannot create consumer group info";
-    case '5008': return "Cannot delete consumer group info";
-    case '5009': return "Consumer group partition not owned";
+    case '5006': return "Consumer group member with client ID: {0} for group with ID: {1} for topic with ID: {2} was not found.";
+    case '5007': return "Failed to create consumer group info file for ID: {0} for topic with ID: {1} for stream with ID: {2}.";
+    case '5008': return "Failed to delete consumer group info file for ID: {0} for topic with ID: {1} for stream with ID: {2}.";
+    case '5009': return "Consumer group member with client ID: {0} does not own partition: {1} at the current generation (rebalance in progress).";
+    case '6000': return "Base offset is missing";
+    case '6001': return "Last offset delta is missing";
+    case '6002': return "Max timestamp is missing";
+    case '6003': return "Length is missing";
+    case '6004': return "Payload is missing";
+    case '7000': return "Cannot read batch base offset";
+    case '7001': return "Cannot read batch length";
+    case '7002': return "Cannot read batch last offset delta";
+    case '7003': return "Cannot read batch maximum timestamp";
+    case '7004': return "Cannot read batch payload";
+    case '8000': return "Invalid connection string";
+    case '9000': return "Snapshot file completion failed";
+    case '10000': return "Cannot serialize resource";
+    case '10001': return "Cannot deserialize resource";
+    case '10002': return "Cannot read file";
+    case '10003': return "Cannot read file metadata";
+    case '10004': return "Cannot seek file";
+    case '10005': return "Cannot append to file";
+    case '10006': return "Cannot write to file";
+    case '10007': return "Cannot overwrite file";
+    case '10008': return "Cannot delete file";
+    case '10009': return "Cannot sync file";
+    case '10010': return "Cannot read index offset";
+    case '10011': return "Cannot read index position";
+    case '10012': return "Cannot read index timestamp";
+    case '10013': return "Timestamp out of range: {0}";
+    case '11000': return "Shard not found for stream ID: {0}, topic ID: {1}, partition ID: {2}";
+    case '11001': return "Shard communication error";
+    case '12000': return "Cannot bind to socket with addr: {0}";
+    case '12001': return "Task execution timeout";
+    case '13000': return "IO error: {0}";
+    case '14000': return "VSR session already bound; reset before re-binding";
+    case '14001': return "VSR session value {0} is invalid (must be non-zero)";
+    case '14003': return "Incompatible binary protocol version: client {}, server accepts [{}, {}]";
 
     default: return 'error';
   }
diff --git a/foreign/node/src/wire/message/poll-messages.command.test.ts b/foreign/node/src/wire/message/poll-messages.command.test.ts
index 02bee6f04..f396e4539 100644
--- a/foreign/node/src/wire/message/poll-messages.command.test.ts
+++ b/foreign/node/src/wire/message/poll-messages.command.test.ts
@@ -120,7 +120,7 @@ describe('VSR consumer-group polling', () => {
       (error: unknown) =>
         error instanceof ResponseError &&
         error.errorCode === 5006 &&
-        error.message.includes('message: Consumer group member not found')
+        error.message.includes('message: Consumer group member with client ID:')
     );
   });