diff --git a/protocol/README.md b/protocol/README.md index 1e57440..96f71a2 100644 --- a/protocol/README.md +++ b/protocol/README.md @@ -8,6 +8,26 @@ In addition, a list of error codes and corresponding support articles to help un This ensures that with every Ably error message that includes a help link for the error in the format `https://help.ably.io/error/{{ERROR_CODE}}`, the user is taken to a relevant FAQ if it exists, and if one does not exist, we record the number of times that error code has been visited so that the docs/support team can work on adding relevant documentation. See [the `ably/help` repository (internal)](https://github.com/ably/help), the "simple help redirect site". +### Error Code Management + +**IMPORTANT**: Error codes and their definitions are now automatically managed by the [ably-os error documentation system](https://github.com/ably/ably-os/blob/main/docs/ERROR_COMMANDS_GUIDE.md). The files [errors.json](./errors.json) and [errorsHelp.json](./errorsHelp.json) are automatically updated from the ably-os system. + +**Do not manually edit these files directly.** Instead: + +1. **For error code updates**: Use the ably-os error commands to regenerate and update centralized error definitions: + ```bash + # From the ably-os repository: + ably-os errors aggregate-error-data # Consolidate all error data + ably-os errors update-ably-common # Update this repository's JSON files + ``` + +2. **For new error code ranges or categories**: When adding new error code ranges or categories: + - Add the range definition to this README file (see Ranges section below) + - Also add the category to the ably-os error categorization system: [`src/prompts/errors/error-docs-context.md`](https://github.com/ably/ably-os/blob/main/src/prompts/errors/error-docs-context.md) + - This ensures consistency between the protocol documentation and the automated error documentation system + +3. **For comprehensive error documentation**: The ably-os system generates individual error pages at `https://ably.com/docs/platform/errors/codes/[CODE]-[slug]` with detailed explanations, causes, and solutions. + If you need help understanding any error codes, or need technical support, please visit the [Ably support desk](https://www.ably.io/support). ### Ranges diff --git a/protocol/errors.json b/protocol/errors.json index 51f171b..d2b8b84 100644 --- a/protocol/errors.json +++ b/protocol/errors.json @@ -1,134 +1,128 @@ { - "10000": "no error", - - "20000": "general error code", - - "40000": "bad request", - "40001": "invalid request body", + "0": "Generic client error", + "1": "Unknown error", + "10000": "No error (operational state)", + "10200": "Unrecognized error code", + "20000": "Informational status", + "40000": "Bad request", + "40001": "Invalid request body", "40002": "invalid parameter name", - "40003": "invalid parameter value", - "40004": "invalid header", - "40005": "invalid credential", - "40006": "invalid connection id", + "40003": "Invalid Parameter Value", + "40004": "Invalid header", + "40005": "Invalid credential", + "40006": "Invalid connection ID", "40007": "invalid message id", - "40008": "invalid content length", - "40009": "maximum message length exceeded", - "40010": "invalid channel name", - "40011": "stale ring state", - "40012": "invalid client id", + "40008": "Invalid content length", + "40009": "Message size exceeded", + "40010": "Invalid channel name", + "40011": "Stale ring state or invalid data payload", + "40012": "Invalid client ID", "40013": "Invalid message data or encoding", "40014": "Resource disposed", - "40015": "Invalid device id", + "40015": "Invalid device ID", "40016": "Invalid message name", "40017": "Unsupported protocol version", - "40018": "Unable to decode message; channel attachment no longer viable", - "40019": "Required client library plugin not present", - "40020": "Batch error", + "40018": "Delta decode failure", + "40019": "Missing Plugin", + "40020": "Batch operation partial failure", "40021": "Feature requires a newer platform version", - "40022": "API Streamer has been shut down", - "40023": "Action requires a newer protocol version", - "40030": "Invalid publish request (unspecified)", - "40031": "Invalid publish request (invalid client-specified id)", - "40032": "Invalid publish request (impermissible extras field)", + "40022": "Invalid Resource or Deprecated Feature", + "40023": "Protocol Version Required", + "40024": "Channel Mode Required", + "40030": "Invalid publish request", + "40031": "Invalid message ID", + "40032": "Invalid extras field", "40033": "Operation cancelled", "40034": "Invalid publish request (maximum number of messages per ChannelMessage exceeded)", - "40099": "Reserved for artifical errors for testing", - - "40100": "unauthorized", - "40101": "invalid credentials", - "40102": "incompatible credentials", - "40103": "invalid use of Basic auth over non-TLS transport", - "40104": "timestamp not current", + "40099": "Internal Testing Error", + "40100": "Unauthorized access", + "40101": "Invalid credentials", + "40102": "Incompatible credentials", + "40103": "Basic authentication requires TLS", + "40104": "Timestamp not current", "40105": "nonce value replayed", - "40106": "Unable to obtain credentials from given parameters", + "40106": "Missing authentication credentials", "40110": "account disabled", "40111": "account restricted (connection limits exceeded)", "40112": "account blocked (message limits exceeded)", - "40113": "account blocked", + "40113": "Account blocked", "40114": "account restricted (channel limits exceeded)", - "40115": "maximum number of permitted applications exceeded", + "40115": "Account request limit exceeded", "40120": "application disabled", - "40121": "token revocation not enabled for this application", + "40121": "Token revocation not enabled", "40125": "maximum number of rules per application exceeded", "40126": "maximum number of namespaces per application exceeded", "40127": "maximum number of keys per application exceeded", - "40130": "key error (unspecified)", - "40131": "key revoked", - "40132": "key expired", - "40133": "key disabled", - "40133": "wrong key; cannot revoke tokens with a different key to the one that issued them", - "40140": "token error (unspecified)", + "40130": "Key removed", + "40131": "Key revoked", + "40132": "API key expired", + "40133": "Token revocation authorization error", + "40140": "Token error (unspecified)", "40141": "token revoked", - "40142": "token expired", + "40142": "Token expired", "40143": "token unrecognised", - "40144": "invalid JWT format", + "40144": "Invalid JWT token format", "40145": "invalid token format", + "40146": "Unsupported token claims", + "40149": "Token error range boundary", "40150": "connection blocked (limits exceeded)", - "40160": "operation not permitted with provided capability", - "40161": "operation not permitted as it requires an identified client", - "40162": "operation not permitted with a token, requires basic auth", + "40160": "Insufficient capabilities", + "40161": "Namespace Requires Identified Clients", + "40162": "Token revocation requires basic authentication", "40163": "operation not permitted, key not marked as permitting revocable tokens", - "40164": "channel state disabled", - "40170": "error from client token callback", - "40171": "no means provided to renew auth token", + "40164": "API key missing revocable tokens attribute", + "40170": "Authentication callback error", + "40171": "Token renewal not configured", "40172": "operation only permitted with token auth", "40180": "unable to send location notification; location notifications can only be sent using token authentication", "40181": "unable to send location notification; no location token for device", - - "40300": "forbidden", + "40300": "Forbidden", "40310": "account does not permit tls connection", "40311": "operation requires tls connection", "40320": "application requires authentication", "40330": "unable to activate account due to placement constraint (unspecified)", - "40331": "unable to activate account due to placement constraint (incompatible environment)", - "40332": "unable to activate account due to placement constraint (incompatible site)", - - "40400": "not found", - - "40500": "method not allowed", - + "40331": "Placement constraint environment error", + "40332": "Placement Constraint Violation", + "40400": "Resource not found", + "40500": "Method Not Allowed", + "40800": "Request timeout", "40900": "conflict", - "41001": "push device registration expired", - "42200": "unprocessable content", "42210": "content rejected (unspecified)", - "42211": "content rejected by before publish rule", + "42211": "Message rejected by before-publish rule", "42212": "content rejected by validation", - "42213": "content rejected by moderation", - + "42213": "Message rejected by moderation", "42910": "rate limit exceeded (nonfatal): request rejected (unspecified)", "42911": "max per-connection publish rate limit exceeded (nonfatal): unable to publish message", "42912": "there is a channel iteration call already in progress; only 1 active call is permitted to execute at any one time", "42920": "rate limit exceeded (fatal)", "42921": "max per-connection publish rate limit exceeded (fatal); closing connection", - "42922": "rate limit exceeded; too many requests", - - "50000": "internal error", - "50001": "internal channel error", - "50002": "internal connection error", - "50003": "timeout error", - "50004": "Request failed due to overloaded instance", - "50005": "Service unavailable (service temporarily in lockdown)", - - "50010": "Ably's edge proxy service has encountered an unknown internal error whilst processing the request", - "50210": "Ably's edge proxy service received an invalid (bad gateway) response from the Ably platform", - "50310": "Ably's edge proxy service received a service unavailable response code from the Ably platform", - + "42922": "Rate limit exceeded - too many requests", + "49900": "Call cancelled", + "50000": "Internal server error", + "50001": "Internal Channel Error", + "50002": "Internal connection error", + "50003": "Timeout error", + "50004": "Service Unavailable (Capacity Limit)", + "50005": "Service in lockdown", + "50010": "Internal server error", + "50210": "Bad Gateway", + "50300": "Service Unavailable", + "50310": "Edge service unavailable", "50320": "Active Traffic Management: traffic for this cluster is being temporarily redirected to a backup service", - "50330": "request reached the wrong cluster; retry (used during dns changes for cluster migrations)", - - "50410": "Ably's edge proxy service timed out waiting for the Ably platform", - + "50400": "Gateway Timeout", + "50410": "Edge proxy gateway timeout", + "61002": "Push activation clientId mismatch", + "65536": "Not an error code", "70000": "reactor operation failed", "70001": "reactor operation failed (post operation failed)", "70002": "reactor operation failed (post operation returned unexpected code)", - "70003": "reactor operation failed (maximum number of concurrent in-flight requests exceeded)", - "70004": "reactor operation failed (invalid or unaccepted message contents)", - "70005": "unable to deliver AMQP message (unspecified timeout)", - "70006": "unable to deliver AMQP message (cluster busy)", - + "70003": "Integration max concurrency exceeded", + "70004": "Integration Invalid Message Content", + "70005": "AMQP queue timeout", + "70006": "AMQP broker backpressure", "71000": "Exchange error (unspecified)", "71001": "Forced re-attachment due to permissions change", "71100": "Exchange publisher error (unspecified)", @@ -143,7 +137,6 @@ "71301": "Subscription disabled", "71302": "Requester has no subscription to this product", "71303": "Channel does not match the channel filter specified in the subscription to this product", - "72000": "ingress operation failed", "72001": "ingress failed to publish message", "72002": "ingress table is unhealthy", @@ -153,69 +146,71 @@ "72006": "unable to resume from change stream", "72007": "unable to store change stream resume token", "72008": "change stream history lost", - - "80000": "connection failed", + "80000": "Connection failed", "80001": "connection failed (no compatible transport)", - "80002": "connection suspended", - "80003": "disconnected", + "80002": "Connection suspended", + "80003": "Connection temporarily unavailable", "80004": "already connected", "80005": "invalid connection id (remote not found)", "80006": "unable to recover connection (messages expired)", "80007": "unable to recover connection (message limit exceeded)", - "80008": "unable to recover connection (connection expired)", - "80009": "connection not established (no transport handle)", - "80010": "invalid operation (invalid transport handle)", + "80008": "Connection recovery expired", + "80009": "Connection transport unavailable", + "80010": "Invalid transport handle", "80011": "unable to recover connection (incompatible auth params)", "80012": "unable to recover connection (invalid or unspecified connection serial)", - "80013": "protocol error", - "80014": "connection timed out", + "80013": "Protocol Error", + "80014": "Connection timeout", "80015": "incompatible connection parameters", - "80016": "operation on superseded connection", - "80017": "connection closed", - "80018": "invalid connection id (invalid format)", - "80019": "client configured authentication provider request failed", + "80016": "Operation on Superseded Connection", + "80017": "Connection closed", + "80018": "Invalid connection ID", + "80019": "Authentication provider request failed", "80020": "continuity loss due to maximum subscribe message rate exceeded", "80021": "exceeded maximum permitted account-wide rate of creating new connections", "80022": "unable to continue current comet connection", - "80023": "unable to resume connection from a different site", + "80023": "Unable to resume connection from another site", "80030": "client restriction not satisfied", - - "90000": "channel operation failed", - "90001": "channel operation failed (invalid channel state)", + "90000": "Channel operation failed", + "90001": "Channel operation failed (invalid channel state)", "90002": "channel operation failed (epoch expired or never existed)", - "90003": "unable to recover channel (messages expired)", - "90004": "unable to recover channel (message limit exceeded)", - "90005": "unable to recover channel (no matching epoch)", + "90003": "Unable to recover channel (messages expired)", + "90004": "Message Limit Exceeded", + "90005": "Channel Recovery Epoch Not Found", "90006": "unable to recover channel (unbounded request)", - "90007": "channel operation failed (no response from server)", - "90010": "maximum number of channels per connection/request exceeded", + "90007": "Channel operation timeout", + "90010": "Channel limit exceeded", "90021": "exceeded maximum permitted account-wide rate of creating new channels", - "91000": "unable to enter presence channel (no clientId)", - "91001": "unable to enter presence channel (invalid channel state)", + "90099": "Generic discontinuity", + "91000": "Presence requires client ID", + "91001": "presence-channel-invalid-state", "91002": "unable to leave presence channel that is not entered", "91003": "unable to enter presence channel (maximum member limit exceeded)", - "91004": "unable to automatically re-enter presence channel", - "91005": "presence state is out of sync", - "91100": "member implicitly left presence channel (connection closed)", - - "92000": "invalid object message", - "92001": "objects limit exceeded", - "92002": "unable to submit operation on tombstone object", - "92003": "unable to fetch object tree with tombstone object as root", - "92004": "object not found", - "92005": "no objects found matching operation path", + "91004": "Presence auto-reenter failed", + "91005": "Presence state out of sync", + "91100": "Member implicitly left presence channel", + "92000": "LiveObjects validation error", + "92001": "Conflicting Error Code Usage", + "92002": "Cipher algorithm mismatch", + "92003": "Cipher decryption failed", + "92004": "Dual Purpose Cipher or Object Error", + "92005": "Duplicate context error", "92006": "unable to perform operation without objectId or path", "92007": "operation not processable on path", - - "93001": "attempt to add an annotation listener without having requested the annotation_subscribe channel mode in ChannelOptions, which won't do anything (we only deliver annotations to clients who have explicitly requested them)", - "93002": "unable to perform operation; this operation can only be performed on channel in a namespace with Mutable Messages enabled", - - "101000": "must have a non-empty name for the space", - "101001": "must enter a space to perform this operation", - "101002": "lock request already exists", - "101003": "lock is currently locked", - "101004": "lock was invalidated by a concurrent lock request which now holds the lock", - + "92100": "Encoding value too long", + "93001": "Annotations channel state invalid", + "93002": "Mutable Messages feature required", + "100000": "Asset Tracking SDK error", + "100001": "Invalid Asset Tracking message format", + "100002": "Token fetch failed", + "100003": "Asset Tracking authentication failure", + "100004": "Subscriber never online", + "100005": "Subscriber not online", + "101000": "Space name missing", + "101001": "Not entered space", + "101002": "Lock request already exists", + "101003": "Lock is locked", + "101004": "Lock invalidated", "102000": "chat room name is invalid", "102001": "room attachment failed (messages)", "102002": "room attachment failed (presence)", @@ -227,13 +222,14 @@ "102052": "room detachment failed (reactions)", "102053": "room detachment failed (occupancy)", "102054": "room detachment failed (typing)", - "102100": "room discontinuity", - "102101": "unable to perform operation; room is in failed state", - "102102": "unable to perform operation; room is releasing", - "102103": "unable to perform operation; room is released", + "102100": "Room discontinuity", + "102101": "Room in failed state", + "102102": "Room is releasing", + "102103": "Room is released", "102104": "unable to perform operation; existing attempt failed", "102105": "unknown room lifecycle error", - + "102106": "Room released before operation completed", + "102107": "Room invalid state", "103000": "unable to publish push notification", "103001": "unable to publish push notification, retries exhausted", "103002": "unable to publish push notification, no recipient for direct publish", diff --git a/protocol/errorsHelp.json b/protocol/errorsHelp.json index bcb2047..b4f99bb 100644 --- a/protocol/errorsHelp.json +++ b/protocol/errorsHelp.json @@ -1,110 +1,171 @@ { - "10000": "https://faqs.ably.com/error-code-10000", - "20000": "https://faqs.ably.com/error-code-20000", - "400": "https://faqs.ably.com/error-code-40000-bad-request", - "40000": "https://faqs.ably.com/error-code-40000-bad-request", - "40001": "https://faqs.ably.com/error-code-40001-invalid-request-body", - "40003": "https://faqs.ably.com/error-40003", - "40005": "https://faqs.ably.com/error-code-40005-invalid-credentials", - "40006": "https://faqs.ably.com/error-code-40006-invalid-connection-id", - "40009": "https://faqs.ably.com/error-code-40009-maximum-message-length-exceeded", - "40010": "https://faqs.ably.com/error-code-40010-invalid-channel-name", - "40011": "https://faqs.ably.com/error-code-40011-stale-ring-state", - "40111": "https://faqs.ably.com/error-code-40111-connection-limits-exceeded", - "40012": "https://faqs.ably.com/error-code-40012-invalid-client-id", - "40013": "https://faqs.ably.com/error-code-40013", - "40015": "https://faqs.ably.com/error-code-40015", - "40016": "https://faqs.ably.com/error-code-40016", - "40017": "https://faqs.ably.com/error-code-40017", - "40020": "https://faqs.ably.com/error-code-40020", - "40022": "https://faqs.ably.com/error-code-40022", - "40030": "https://faqs.ably.com/error-code-40030", - "40031": "https://faqs.ably.com/client-specified-message-id-restrictions-for-multiple-messages-published-atomically", - "40032": "https://faqs.ably.com/error-code-40032-invalid-publish-request-impermissible-extras-field", - "40100": "https://faqs.ably.com/error-code-40100", - "40101": "https://faqs.ably.com/40101-invalid-credentials", - "40102": "https://faqs.ably.com/error-code-40102", - "40103": "https://faqs.ably.com/error-code-40103-invalid-use-of-basic-auth-over-non-tls-transport", - "40104": "https://faqs.ably.com/40104-timestamp-not-current", - "40105": "https://faqs.ably.com/40105-nonce-value-replayed", - "40106": "https://faqs.ably.com/error-code-40106-unable-to-obtain-credentials-from-given-parameters", - "40112": "https://faqs.ably.com/error-code-40112-account-blocked-message-limits-exceeded", - "40114": "https://faqs.ably.com/error-code-40114-account-wide-peak-channel-limit-exceeded", - "40115": "https://faqs.ably.com/error-code-40115-account-restricted-request-limit-exceeded", - "40125": "https://faqs.ably.com/error-code-40125-max-number-of-rules-per-application", - "40127": "https://faqs.ably.com/error-code-40127", - "40131": "https://faqs.ably.com/error-code-40131-key-revoked", - "40133": "https://faqs.ably.com/error-code-40133", - "40141": "https://faqs.ably.com/error-code-40141", - "40142": "https://faqs.ably.com/error-code-40142-token-expired-code", - "40143": "https://faqs.ably.com/error-code-40143-token-unrecognised", - "40144": "https://faqs.ably.com/error-code-40144-unexpected-error-decoding-jwt-decode-exception", - "40160": "https://faqs.ably.com/error-code-40160-action-not-permitted", - "40161": "https://faqs.ably.com/error-code-40161-access-denied-to-channel-namespace-requires-identified-clients", - "40170": "https://faqs.ably.com/error-code-40170", - "40171": "https://faqs.ably.com/error-code-40171-no-means-provided-to-renew-auth-token", - "40300": "https://faqs.ably.com/error-code-40300", - "40311": "https://faqs.ably.com/error-code-40311", - "40330": "https://faqs.ably.com/error-code-40330-unable-to-activate-account-due-to-placement-constraint-unspecified", - "40331": "https://faqs.ably.com/error-code-40331-unable-to-activate-account-due-to-placement-constraint-incompatible-environment", - "40332": "https://faqs.ably.com/error-code-40332-unable-to-activate-account-due-to-placement-constraint-incompatible-site", - "40400": "https://faqs.ably.com/error-code-40400-not-found", - "42910": "https://faqs.ably.com/error-code-42910-rate-limit-exceeded-request-rejected", - "42911": "https://faqs.ably.com/error-code-42911-maximum-account-wide-instantaneous-messages-rate-exceeded", - "42912": "https://faqs.ably.com/error-code-42912-channel-iteration-call-already-in-progress", - "42922": "https://faqs.ably.com/error-code-42922-rate-limit-exceeded-request-rejected", - "500": "https://faqs.ably.com/error-code-500", - "50000": "https://faqs.ably.com/error-code-50000-internal-error", - "50001": "https://faqs.ably.com/error-code-50001-internal-channel-error", - "50002": "https://faqs.ably.com/error-code-50002-internal-connection-error", - "50003": "https://faqs.ably.com/error-code-50003-timeout-error", - "50305": "https://faqs.ably.com/error-code-50305", - "61002": "https://faqs.ably.com/error-code-61002", - "70001": "https://faqs.ably.com/error-code-70001", - "70002": "https://faqs.ably.com/error-code-70002", - "72000": "https://faqs.ably.com/error-code-72000-ingress-operation-failed", - "72002": "https://faqs.ably.com/error-code-72002-ingress-table-is-unhealthy", - "72003": "https://faqs.ably.com/error-code-72003-ingress-cannot-connect-to-database", - "72004": "https://faqs.ably.com/error-code-72004-ingress-cannot-identify-channel-no-_ablychannel-field", - "72005": "https://faqs.ably.com/error-code-72005-ingress-invalid-pipeline", - "72006": "https://faqs.ably.com/error-code-72006-unable-to-resume-from-change-stream", - "72007": "https://faqs.ably.com/error-code-72007-unable-to-store-change-stream-resume-token", - "71302": "https://faqs.ably.com/error-71302-no-subscription-to-this-product-found-for-account", - "80000": "https://faqs.ably.com/error-code-80000-connection-failed", - "80002": "https://faqs.ably.com/error-code-80002-password-validation-request-timeout", - "80003": "https://faqs.ably.com/error-code-80003", - "80008": "https://faqs.ably.com/error-code-80008-unable-to-recover-connection-connection-expired", - "80014": "https://faqs.ably.com/error-code-80014", - "80016": "https://faqs.ably.com/error-code-80016-operation-on-superseded-connection", - "80017": "https://faqs.ably.com/error-code-80017-connection-already-closed", - "80018": "https://faqs.ably.com/error-code-80018-invalid-connection-id-invalid-format", - "80019": "https://faqs.ably.com/error-code-80019", - "80020": "https://faqs.ably.com/error-code-80020", - "80021": "https://faqs.ably.com/error-code-80021-max-new-connections-rate-exceeded", - "80022": "https://faqs.ably.com/error-code-80022-unable-to-find-connection", - "80023": "https://faqs.ably.com/error-code-80023-unable-to-resume-connection-from-a-different-site", - "90001": "https://faqs.ably.com/error-code-90001-channel-operation-failed-invalid-channel-state", - "90003": "https://faqs.ably.com/error-code-90003-unable-to-recover-channel-messages-expired", - "90004": "https://faqs.ably.com/error-code-90004", - "90007": "https://faqs.ably.com/error-code-90007", - "90010": "https://faqs.ably.com/error-code-90010-maximum-number-of-channels-per-connection-exceeded", - "90021": "https://faqs.ably.com/error-code-90021-max-channel-creation-rate-exceeded", - "91000": "https://faqs.ably.com/error-code-91000", - "91001": "https://faqs.ably.com/error-code-91001", - "91003": "https://faqs.ably.com/error-91003-maximum-member-limit-exceeded", - "91005": "https://faqs.ably.com/error-code-91005", - "91200": "https://faqs.ably.com/error-code-90007", - "92000": "https://faqs.ably.com/error-code-92000", - "92001": "https://faqs.ably.com/error-code-92001", - "92002": "https://faqs.ably.com/error-code-92002", - "92003": "https://faqs.ably.com/error-code-92003", - "92004": "https://faqs.ably.com/error-code-92004", - "92005": "https://faqs.ably.com/error-code-92005", - "92006": "https://faqs.ably.com/error-code-92006", - "92007": "https://faqs.ably.com/error-code-92007", - "101000": "https://faqs.ably.com/error-code-101000", - "101001": "https://faqs.ably.com/error-code-101001", - "101002": "https://faqs.ably.com/error-code-101002", - "101003": "https://faqs.ably.com/error-code-101003", - "101004": "https://faqs.ably.com/error-code-101004" + "0": "https://ably.com/docs/platform/errors/codes/0-generic-client-error", + "1": "https://ably.com/docs/platform/errors/codes/1-unknown-error", + "400": "https://ably.com/docs/platform/errors/codes/400-error-400", + "500": "https://ably.com/docs/platform/errors/codes/500-error-500", + "10000": "https://ably.com/docs/platform/errors/codes/10000-no-error-operational-state", + "10200": "https://ably.com/docs/platform/errors/codes/10200-unrecognized-error", + "20000": "https://ably.com/docs/platform/errors/codes/20000-informational-status", + "40000": "https://ably.com/docs/platform/errors/codes/40000-bad-request", + "40001": "https://ably.com/docs/platform/errors/codes/40001-invalid-request-body", + "40003": "https://ably.com/docs/platform/errors/codes/40003-invalid-parameter-value", + "40004": "https://ably.com/docs/platform/errors/codes/40004-invalid-header", + "40005": "https://ably.com/docs/platform/errors/codes/40005-invalid-credential", + "40006": "https://ably.com/docs/platform/errors/codes/40006-invalid-connection-id", + "40008": "https://ably.com/docs/platform/errors/codes/40008-invalid-content-length", + "40009": "https://ably.com/docs/platform/errors/codes/40009-message-size-exceeded", + "40010": "https://ably.com/docs/platform/errors/codes/40010-invalid-channel-name", + "40011": "https://ably.com/docs/platform/errors/codes/40011-stale-ring-state", + "40012": "https://ably.com/docs/platform/errors/codes/40012-invalid-client-id", + "40013": "https://ably.com/docs/platform/errors/codes/40013-invalid-message-data-or-encoding", + "40014": "https://ably.com/docs/platform/errors/codes/40014-resource-disposed", + "40015": "https://ably.com/docs/platform/errors/codes/40015-invalid-device-id", + "40016": "https://ably.com/docs/platform/errors/codes/40016-invalid-message-name", + "40017": "https://ably.com/docs/platform/errors/codes/40017-unsupported-protocol-version", + "40018": "https://ably.com/docs/platform/errors/codes/40018-delta-decode-failure", + "40019": "https://ably.com/docs/platform/errors/codes/40019-missing-plugin", + "40020": "https://ably.com/docs/platform/errors/codes/40020-batch-partial-failure", + "40022": "https://ably.com/docs/platform/errors/codes/40022-invalid-resource-or-deprecated-feature", + "40023": "https://ably.com/docs/platform/errors/codes/40023-protocol-version-required", + "40024": "https://ably.com/docs/platform/errors/codes/40024-channel-mode-required", + "40030": "https://ably.com/docs/platform/errors/codes/40030-invalid-publish-request", + "40031": "https://ably.com/docs/platform/errors/codes/40031-invalid-message-id", + "40032": "https://ably.com/docs/platform/errors/codes/40032-invalid-extras-field", + "40099": "https://ably.com/docs/platform/errors/codes/40099-internal-testing-error", + "40100": "https://ably.com/docs/platform/errors/codes/40100-unauthorized-access", + "40101": "https://ably.com/docs/platform/errors/codes/40101-invalid-credentials", + "40102": "https://ably.com/docs/platform/errors/codes/40102-incompatible-credentials", + "40103": "https://ably.com/docs/platform/errors/codes/40103-basic-auth-requires-tls", + "40104": "https://ably.com/docs/platform/errors/codes/40104-timestamp-not-current", + "40105": "https://ably.com/docs/platform/errors/codes/40105-nonce-value-replayed", + "40106": "https://ably.com/docs/platform/errors/codes/40106-missing-authentication-credentials", + "40111": "https://ably.com/docs/platform/errors/codes/40111-account-restricted-connection-limits-exceeded", + "40112": "https://ably.com/docs/platform/errors/codes/40112-account-blocked-message-limits-exceeded", + "40113": "https://ably.com/docs/platform/errors/codes/40113-account-blocked", + "40114": "https://ably.com/docs/platform/errors/codes/40114-account-restricted-channel-limits-exceeded", + "40115": "https://ably.com/docs/platform/errors/codes/40115-account-request-limit-exceeded", + "40121": "https://ably.com/docs/platform/errors/codes/40121-token-revocation-not-enabled", + "40125": "https://ably.com/docs/platform/errors/codes/40125-maximum-number-of-rules-per-application-exceeded", + "40127": "https://ably.com/docs/platform/errors/codes/40127-maximum-number-of-keys-per-application-exceeded", + "40130": "https://ably.com/docs/platform/errors/codes/40130-key-removed", + "40131": "https://ably.com/docs/platform/errors/codes/40131-key-revoked", + "40132": "https://ably.com/docs/platform/errors/codes/40132-api-key-expired", + "40133": "https://ably.com/docs/platform/errors/codes/40133-token-revocation-authorization-error", + "40140": "https://ably.com/docs/platform/errors/codes/40140-token-error-unspecified", + "40141": "https://ably.com/docs/platform/errors/codes/40141-token-revoked", + "40142": "https://ably.com/docs/platform/errors/codes/40142-token-expired", + "40143": "https://ably.com/docs/platform/errors/codes/40143-token-unrecognised", + "40144": "https://ably.com/docs/platform/errors/codes/40144-invalid-jwt-token-format", + "40146": "https://ably.com/docs/platform/errors/codes/40146-unsupported-token-claims", + "40149": "https://ably.com/docs/platform/errors/codes/40149-token-error-range-boundary", + "40160": "https://ably.com/docs/platform/errors/codes/40160-insufficient-capabilities", + "40161": "https://ably.com/docs/platform/errors/codes/40161-namespace-requires-identified-clients", + "40162": "https://ably.com/docs/platform/errors/codes/40162-token-revocation-requires-basic-auth", + "40164": "https://ably.com/docs/platform/errors/codes/40164-api-key-missing-revocable-tokens-attribute", + "40170": "https://ably.com/docs/platform/errors/codes/40170-auth-callback-error", + "40171": "https://ably.com/docs/platform/errors/codes/40171-token-renewal-not-configured", + "40300": "https://ably.com/docs/platform/errors/codes/40300-forbidden", + "40311": "https://ably.com/docs/platform/errors/codes/40311-operation-requires-tls-connection", + "40330": "https://ably.com/docs/platform/errors/codes/40330-unable-to-activate-account-due-to-placement-constraint-unspecified", + "40331": "https://ably.com/docs/platform/errors/codes/40331-placement-constraint-environment", + "40332": "https://ably.com/docs/platform/errors/codes/40332-placement-constraint-violation", + "40400": "https://ably.com/docs/platform/errors/codes/40400-resource-not-found", + "40500": "https://ably.com/docs/platform/errors/codes/40500-method-not-allowed", + "40800": "https://ably.com/docs/platform/errors/codes/40800-request-timeout", + "42211": "https://ably.com/docs/platform/errors/codes/42211-message-rejected-before-publish-rule", + "42213": "https://ably.com/docs/platform/errors/codes/42213-message-rejected-by-moderation", + "42910": "https://ably.com/docs/platform/errors/codes/42910-rate-limit-exceeded-nonfatal-request-rejected-unspecified", + "42911": "https://ably.com/docs/platform/errors/codes/42911-max-per-connection-publish-rate-limit-exceeded-nonfatal-unable-to-publish-message", + "42912": "https://ably.com/docs/platform/errors/codes/42912-there-is-a-channel-iteration-call-already-in-progress-only-1-active-call-is-permitted-to-execute-at-any-one-time", + "42922": "https://ably.com/docs/platform/errors/codes/42922-rate-limit-too-many-requests", + "49900": "https://ably.com/docs/platform/errors/codes/49900-call-cancelled", + "50000": "https://ably.com/docs/platform/errors/codes/50000-internal-server-error", + "50001": "https://ably.com/docs/platform/errors/codes/50001-internal-channel-error", + "50002": "https://ably.com/docs/platform/errors/codes/50002-internal-connection-error", + "50003": "https://ably.com/docs/platform/errors/codes/50003-timeout-error", + "50004": "https://ably.com/docs/platform/errors/codes/50004-service-unavailable-capacity-limit", + "50005": "https://ably.com/docs/platform/errors/codes/50005-service-lockdown", + "50010": "https://ably.com/docs/platform/errors/codes/50010-internal-server-error", + "50210": "https://ably.com/docs/platform/errors/codes/50210-bad-gateway", + "50300": "https://ably.com/docs/platform/errors/codes/50300-service-unavailable", + "50305": "https://ably.com/docs/platform/errors/codes/50305-error-50305", + "50310": "https://ably.com/docs/platform/errors/codes/50310-edge-service-unavailable", + "50400": "https://ably.com/docs/platform/errors/codes/50400-gateway-timeout", + "50410": "https://ably.com/docs/platform/errors/codes/50410-edge-proxy-gateway-timeout", + "61002": "https://ably.com/docs/platform/errors/codes/61002-push-activation-clientid-mismatch", + "65536": "https://ably.com/docs/platform/errors/codes/65536-not-an-error-code", + "70001": "https://ably.com/docs/platform/errors/codes/70001-reactor-operation-failed-post-operation-failed", + "70002": "https://ably.com/docs/platform/errors/codes/70002-reactor-operation-failed-post-operation-returned-unexpected-code", + "70003": "https://ably.com/docs/platform/errors/codes/70003-integration-max-concurrency-exceeded", + "70004": "https://ably.com/docs/platform/errors/codes/70004-integration-invalid-message-content", + "70005": "https://ably.com/docs/platform/errors/codes/70005-amqp-queue-timeout", + "70006": "https://ably.com/docs/platform/errors/codes/70006-amqp-backpressure", + "71302": "https://ably.com/docs/platform/errors/codes/71302-requester-has-no-subscription-to-this-product", + "72000": "https://ably.com/docs/platform/errors/codes/72000-ingress-operation-failed", + "72002": "https://ably.com/docs/platform/errors/codes/72002-ingress-table-is-unhealthy", + "72003": "https://ably.com/docs/platform/errors/codes/72003-ingress-cannot-connect-to-database", + "72004": "https://ably.com/docs/platform/errors/codes/72004-ingress-cannot-identify-channel-no-ablychannel-field", + "72005": "https://ably.com/docs/platform/errors/codes/72005-ingress-invalid-pipeline", + "72006": "https://ably.com/docs/platform/errors/codes/72006-unable-to-resume-from-change-stream", + "72007": "https://ably.com/docs/platform/errors/codes/72007-unable-to-store-change-stream-resume-token", + "80000": "https://ably.com/docs/platform/errors/codes/80000-connection-failed", + "80002": "https://ably.com/docs/platform/errors/codes/80002-connection-suspended", + "80003": "https://ably.com/docs/platform/errors/codes/80003-connection-temporarily-unavailable", + "80008": "https://ably.com/docs/platform/errors/codes/80008-connection-recovery-expired", + "80009": "https://ably.com/docs/platform/errors/codes/80009-connection-transport-unavailable", + "80010": "https://ably.com/docs/platform/errors/codes/80010-invalid-transport-handle", + "80013": "https://ably.com/docs/platform/errors/codes/80013-protocol-error", + "80014": "https://ably.com/docs/platform/errors/codes/80014-connection-timeout", + "80016": "https://ably.com/docs/platform/errors/codes/80016-operation-on-superseded-connection", + "80017": "https://ably.com/docs/platform/errors/codes/80017-connection-closed", + "80018": "https://ably.com/docs/platform/errors/codes/80018-invalid-connection-id", + "80019": "https://ably.com/docs/platform/errors/codes/80019-auth-provider-request-failed", + "80020": "https://ably.com/docs/platform/errors/codes/80020-continuity-loss-due-to-maximum-subscribe-message-rate-exceeded", + "80021": "https://ably.com/docs/platform/errors/codes/80021-exceeded-maximum-permitted-account-wide-rate-of-creating-new-connections", + "80022": "https://ably.com/docs/platform/errors/codes/80022-unable-to-continue-current-comet-connection", + "80023": "https://ably.com/docs/platform/errors/codes/80023-unable-to-resume-connection-from-another-site", + "90000": "https://ably.com/docs/platform/errors/codes/90000-channel-operation-failed", + "90001": "https://ably.com/docs/platform/errors/codes/90001-channel-operation-failed-invalid-state", + "90003": "https://ably.com/docs/platform/errors/codes/90003-unable-to-recover-channel-messages-expired", + "90004": "https://ably.com/docs/platform/errors/codes/90004-message-limit-exceeded", + "90005": "https://ably.com/docs/platform/errors/codes/90005-channel-recovery-epoch-not-found", + "90007": "https://ably.com/docs/platform/errors/codes/90007-channel-operation-timeout", + "90010": "https://ably.com/docs/platform/errors/codes/90010-channel-limit-exceeded", + "90021": "https://ably.com/docs/platform/errors/codes/90021-exceeded-maximum-permitted-account-wide-rate-of-creating-new-channels", + "90099": "https://ably.com/docs/platform/errors/codes/90099-generic-discontinuity", + "91000": "https://ably.com/docs/platform/errors/codes/91000-presence-requires-client-id", + "91001": "https://ably.com/docs/platform/errors/codes/91001-presence-channel-invalid-state", + "91003": "https://ably.com/docs/platform/errors/codes/91003-unable-to-enter-presence-channel-maximum-member-limit-exceeded", + "91004": "https://ably.com/docs/platform/errors/codes/91004-presence-auto-reenter-failed", + "91005": "https://ably.com/docs/platform/errors/codes/91005-presence-state-out-of-sync", + "91100": "https://ably.com/docs/platform/errors/codes/91100-member-implicitly-left-presence", + "91200": "https://ably.com/docs/platform/errors/codes/91200-error-91200", + "92000": "https://ably.com/docs/platform/errors/codes/92000-liveobjects-validation-error", + "92001": "https://ably.com/docs/platform/errors/codes/92001-conflicting-usage", + "92002": "https://ably.com/docs/platform/errors/codes/92002-cipher-algorithm-mismatch", + "92003": "https://ably.com/docs/platform/errors/codes/92003-cipher-decryption-failed", + "92004": "https://ably.com/docs/platform/errors/codes/92004-dual-purpose-cipher-or-object-error", + "92005": "https://ably.com/docs/platform/errors/codes/92005-duplicate-context-error", + "92006": "https://ably.com/docs/platform/errors/codes/92006-unable-to-perform-operation-without-objectid-or-path", + "92007": "https://ably.com/docs/platform/errors/codes/92007-operation-not-processable-on-path", + "92100": "https://ably.com/docs/platform/errors/codes/92100-encoding-value-too-long", + "93001": "https://ably.com/docs/platform/errors/codes/93001-annotations-channel-state-invalid", + "93002": "https://ably.com/docs/platform/errors/codes/93002-mutable-messages-feature-required", + "100000": "https://ably.com/docs/platform/errors/codes/100000-asset-tracking-sdk-error", + "100001": "https://ably.com/docs/platform/errors/codes/100001-invalid-asset-tracking-message", + "100002": "https://ably.com/docs/platform/errors/codes/100002-token-fetch-failed", + "100003": "https://ably.com/docs/platform/errors/codes/100003-asset-tracking-authentication-failure", + "100004": "https://ably.com/docs/platform/errors/codes/100004-subscriber-never-online", + "100005": "https://ably.com/docs/platform/errors/codes/100005-subscriber-not-online", + "101000": "https://ably.com/docs/platform/errors/codes/101000-space-name-missing", + "101001": "https://ably.com/docs/platform/errors/codes/101001-not-entered-space", + "101002": "https://ably.com/docs/platform/errors/codes/101002-lock-request-already-exists", + "101003": "https://ably.com/docs/platform/errors/codes/101003-lock-is-locked", + "101004": "https://ably.com/docs/platform/errors/codes/101004-lock-invalidated", + "102100": "https://ably.com/docs/platform/errors/codes/102100-room-discontinuity", + "102101": "https://ably.com/docs/platform/errors/codes/102101-room-in-failed-state", + "102102": "https://ably.com/docs/platform/errors/codes/102102-room-is-releasing", + "102103": "https://ably.com/docs/platform/errors/codes/102103-room-is-released", + "102106": "https://ably.com/docs/platform/errors/codes/102106-room-released-before-operation-completed", + "102107": "https://ably.com/docs/platform/errors/codes/102107-room-invalid-state" }