diff --git a/Rakefile b/Rakefile index 94aa0080f..f67a506bf 100644 --- a/Rakefile +++ b/Rakefile @@ -29,6 +29,35 @@ begin Rake::Task[:spec].invoke end end + + desc 'Generate error code constants from ably-common: https://github.com/ably/ably-common/issues/32' + task :generate_error_codes do + errors_json_path = File.join(File.dirname(__FILE__), 'lib/submodules/ably-common/protocol/errors.json') + module_path = File.join(File.dirname(__FILE__), 'lib/ably/modules/exception_codes.rb') + max_length = 0 + + errors = JSON.parse(File.read(errors_json_path)).each_with_object({}) do |(key, val), hash| + hash[key] = val.split(/\s+/).map { |d| d.upcase.gsub(/[^a-zA-Z]+/, '') }.join('_') + end.each do |code, const_name| + max_length = [const_name.length, max_length].max + end.map do |code, const_name| + " #{const_name.ljust(max_length, ' ')} = #{code}" + end.join("\n") + module_content = <<-EOF +# This file is generated by running `rake :generate_error_codes` +# Do not manually modify this file +# Generated at: #{Time.now.utc} +# +module Ably + module Exceptions + module Codes +#{errors} + end + end +end +EOF + File.open(module_path, 'w') { |file| file.write module_content } + end rescue LoadError # RSpec not available end diff --git a/lib/ably/exceptions.rb b/lib/ably/exceptions.rb index aa9428dfb..cfcb75d98 100644 --- a/lib/ably/exceptions.rb +++ b/lib/ably/exceptions.rb @@ -1,3 +1,5 @@ +require 'ably/modules/exception_codes' + module Ably module Exceptions TOKEN_EXPIRED_CODE = 40140..40149 diff --git a/lib/ably/modules/exception_codes.rb b/lib/ably/modules/exception_codes.rb new file mode 100644 index 000000000..595c1377a --- /dev/null +++ b/lib/ably/modules/exception_codes.rb @@ -0,0 +1,125 @@ +# This file is generated by running `rake :generate_error_codes` +# Do not manually modify this file +# Generated at: 2018-08-31 09:09:15 UTC +# +module Ably + module Exceptions + module Codes + NO_ERROR = 10000 + BAD_REQUEST = 40000 + INVALID_REQUEST_BODY = 40001 + INVALID_PARAMETER_NAME = 40002 + INVALID_PARAMETER_VALUE = 40003 + INVALID_HEADER = 40004 + INVALID_CREDENTIAL = 40005 + INVALID_CONNECTION_ID = 40006 + INVALID_MESSAGE_ID = 40007 + INVALID_CONTENT_LENGTH = 40008 + MAXIMUM_MESSAGE_LENGTH_EXCEEDED = 40009 + INVALID_CHANNEL_NAME = 40010 + STALE_RING_STATE = 40011 + INVALID_CLIENT_ID = 40012 + INVALID_MESSAGE_DATA_OR_ENCODING = 40013 + RESOURCE_DISPOSED = 40014 + INVALID_DEVICE_ID = 40015 + BATCH_ERROR = 40020 + INVALID_PUBLISH_REQUEST_UNSPECIFIED = 40030 + INVALID_PUBLISH_REQUEST_INVALID_CLIENTSPECIFIED_ID = 40031 + UNAUTHORIZED = 40100 + INVALID_CREDENTIALS = 40101 + INCOMPATIBLE_CREDENTIALS = 40102 + INVALID_USE_OF_BASIC_AUTH_OVER_NONTLS_TRANSPORT = 40103 + TIMESTAMP_NOT_CURRENT = 40104 + NONCE_VALUE_REPLAYED = 40105 + UNABLE_TO_OBTAIN_CREDENTIALS_FROM_GIVEN_PARAMETERS = 40106 + ACCOUNT_DISABLED = 40110 + ACCOUNT_RESTRICTED_CONNECTION_LIMITS_EXCEEDED = 40111 + ACCOUNT_BLOCKED_MESSAGE_LIMITS_EXCEEDED = 40112 + ACCOUNT_BLOCKED = 40113 + ACCOUNT_RESTRICTED_CHANNEL_LIMITS_EXCEEDED = 40114 + APPLICATION_DISABLED = 40120 + KEY_ERROR_UNSPECIFIED = 40130 + KEY_REVOKED = 40131 + KEY_EXPIRED = 40132 + KEY_DISABLED = 40133 + TOKEN_ERROR_UNSPECIFIED = 40140 + TOKEN_REVOKED = 40141 + TOKEN_EXPIRED = 40142 + TOKEN_UNRECOGNISED = 40143 + INVALID_JWT_FORMAT = 40144 + INVALID_TOKEN_FORMAT = 40145 + CONNECTION_BLOCKED_LIMITS_EXCEEDED = 40150 + OPERATION_NOT_PERMITTED_WITH_PROVIDED_CAPABILITY = 40160 + ERROR_FROM_CLIENT_TOKEN_CALLBACK = 40170 + FORBIDDEN = 40300 + ACCOUNT_DOES_NOT_PERMIT_TLS_CONNECTION = 40310 + OPERATION_REQUIRES_TLS_CONNECTION = 40311 + APPLICATION_REQUIRES_AUTHENTICATION = 40320 + NOT_FOUND = 40400 + METHOD_NOT_ALLOWED = 40500 + RATE_LIMIT_EXCEEDED_NONFATAL_REQUEST_REJECTED_UNSPECIFIED = 42910 + MAX_PERCONNECTION_PUBLISH_RATE_LIMIT_EXCEEDED_NONFATAL_UNABLE_TO_PUBLISH_MESSAGE = 42911 + RATE_LIMIT_EXCEEDED_FATAL = 42920 + MAX_PERCONNECTION_PUBLISH_RATE_LIMIT_EXCEEDED_FATAL_CLOSING_CONNECTION = 42921 + INTERNAL_ERROR = 50000 + INTERNAL_CHANNEL_ERROR = 50001 + INTERNAL_CONNECTION_ERROR = 50002 + TIMEOUT_ERROR = 50003 + REQUEST_FAILED_DUE_TO_OVERLOADED_INSTANCE = 50004 + REACTOR_OPERATION_FAILED = 70000 + REACTOR_OPERATION_FAILED_POST_OPERATION_FAILED = 70001 + REACTOR_OPERATION_FAILED_POST_OPERATION_RETURNED_UNEXPECTED_CODE = 70002 + REACTOR_OPERATION_FAILED_MAXIMUM_NUMBER_OF_CONCURRENT_INFLIGHT_REQUESTS_EXCEEDED = 70003 + EXCHANGE_ERROR_UNSPECIFIED = 71000 + FORCED_REATTACHMENT_DUE_TO_PERMISSIONS_CHANGE = 71001 + EXCHANGE_PUBLISHER_ERROR_UNSPECIFIED = 71100 + NO_SUCH_PUBLISHER = 71101 + PUBLISHER_NOT_ENABLED_AS_AN_EXCHANGE_PUBLISHER = 71102 + EXCHANGE_PRODUCT_ERROR_UNSPECIFIED = 71200 + NO_SUCH_PRODUCT = 71201 + PRODUCT_DISABLED = 71202 + NO_SUCH_CHANNEL_IN_THIS_PRODUCT = 71203 + EXCHANGE_SUBSCRIPTION_ERROR_UNSPECIFIED = 71300 + SUBSCRIPTION_DISABLED = 71301 + REQUESTER_HAS_NO_SUBSCRIPTION_TO_THIS_PRODUCT = 71302 + CONNECTION_FAILED = 80000 + CONNECTION_FAILED_NO_COMPATIBLE_TRANSPORT = 80001 + CONNECTION_SUSPENDED = 80002 + DISCONNECTED = 80003 + ALREADY_CONNECTED = 80004 + INVALID_CONNECTION_ID_REMOTE_NOT_FOUND = 80005 + UNABLE_TO_RECOVER_CONNECTION_MESSAGES_EXPIRED = 80006 + UNABLE_TO_RECOVER_CONNECTION_MESSAGE_LIMIT_EXCEEDED = 80007 + UNABLE_TO_RECOVER_CONNECTION_CONNECTION_EXPIRED = 80008 + CONNECTION_NOT_ESTABLISHED_NO_TRANSPORT_HANDLE = 80009 + INVALID_OPERATION_INVALID_TRANSPORT_HANDLE = 80010 + UNABLE_TO_RECOVER_CONNECTION_INCOMPATIBLE_AUTH_PARAMS = 80011 + UNABLE_TO_RECOVER_CONNECTION_INVALID_OR_UNSPECIFIED_CONNECTION_SERIAL = 80012 + PROTOCOL_ERROR = 80013 + CONNECTION_TIMED_OUT = 80014 + INCOMPATIBLE_CONNECTION_PARAMETERS = 80015 + OPERATION_ON_SUPERSEDED_TRANSPORT = 80016 + CONNECTION_CLOSED = 80017 + INVALID_CONNECTION_ID_INVALID_FORMAT = 80018 + CLIENT_CONFIGURED_AUTHENTICATION_PROVIDER_REQUEST_FAILED = 80019 + CONTINUITY_LOSS_DUE_TO_MAXIMUM_SUBSCRIBE_MESSAGE_RATE_EXCEEDED = 80020 + CLIENT_RESTRICTION_NOT_SATISFIED = 80030 + CHANNEL_OPERATION_FAILED = 90000 + CHANNEL_OPERATION_FAILED_INVALID_CHANNEL_STATE = 90001 + CHANNEL_OPERATION_FAILED_EPOCH_EXPIRED_OR_NEVER_EXISTED = 90002 + UNABLE_TO_RECOVER_CHANNEL_MESSAGES_EXPIRED = 90003 + UNABLE_TO_RECOVER_CHANNEL_MESSAGE_LIMIT_EXCEEDED = 90004 + UNABLE_TO_RECOVER_CHANNEL_NO_MATCHING_EPOCH = 90005 + UNABLE_TO_RECOVER_CHANNEL_UNBOUNDED_REQUEST = 90006 + CHANNEL_OPERATION_FAILED_NO_RESPONSE_FROM_SERVER = 90007 + MAXIMUM_NUMBER_OF_CHANNELS_PER_CONNECTION_EXCEEDED = 90010 + UNABLE_TO_ENTER_PRESENCE_CHANNEL_NO_CLIENTID = 91000 + UNABLE_TO_ENTER_PRESENCE_CHANNEL_INVALID_CHANNEL_STATE = 91001 + UNABLE_TO_LEAVE_PRESENCE_CHANNEL_THAT_IS_NOT_ENTERED = 91002 + UNABLE_TO_ENTER_PRESENCE_CHANNEL_MAXIMUM_MEMBER_LIMIT_EXCEEDED = 91003 + UNABLE_TO_AUTOMATICALLY_REENTER_PRESENCE_CHANNEL = 91004 + PRESENCE_STATE_IS_OUT_OF_SYNC = 91005 + MEMBER_IMPLICITLY_LEFT_PRESENCE_CHANNEL_CONNECTION_CLOSED = 91100 + end + end +end diff --git a/lib/submodules/ably-common b/lib/submodules/ably-common index 33d08824d..df3ae5340 160000 --- a/lib/submodules/ably-common +++ b/lib/submodules/ably-common @@ -1 +1 @@ -Subproject commit 33d08824d3ce42988305dcf6af63642e65239cd1 +Subproject commit df3ae5340cf4aede7bf563f6b83c19effa90fe8e