Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .rubocop_todo.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# This configuration was generated by
# `rubocop --auto-gen-config`
# on 2025-09-21 15:55:34 UTC using RuboCop version 1.80.2.
# on 2025-09-30 11:28:27 UTC using RuboCop version 1.80.2.
# The point is for the user to remove these configuration records
# one by one as the offenses are removed from the code base.
# Note that changes in the inspected code, or installation of new
Expand All @@ -20,7 +20,7 @@ Metrics/BlockLength:
# Offense count: 1
# Configuration parameters: CountComments, CountAsOne.
Metrics/ClassLength:
Max: 132
Max: 135

# Offense count: 2
# Configuration parameters: AllowedMethods, AllowedPatterns.
Expand Down
32 changes: 32 additions & 0 deletions methods/_errors/common.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{
"errors": {
"ratelimited": "The request has been ratelimited. Refer to the Retry-After header for when to retry the request.",
"unknown_method": "This method is currently not available.",
"access_denied": "Access to a resource specified in the request is denied.",
"account_inactive": "Authentication token is for a deleted user or workspace when using a bot token.",
"deprecated_endpoint": "The endpoint has been deprecated.",
"ekm_access_denied": "Administrators have suspended the ability to post a message.",
"enterprise_is_restricted": "The method cannot be called from an Enterprise.",
"is_bot": "This method cannot be called by a legacy bot.",
"method_deprecated": "The method has been deprecated.",
"missing_scope": "The token used is not granted the specific scope permissions required to complete this request.",
"not_allowed_token_type": "The token type used in this request is not allowed.",
"not_authed": "No authentication token provided.",
"no_permission": "The workspace token used in this request does not have the permissions necessary to complete the request. Make sure your app is a member of the conversation it's attempting to post a message to.",
"org_login_required": "The workspace is undergoing an enterprise migration and will not be available until migration is complete.",
"token_expired": "Authentication token has expired.",
"token_revoked": "Authentication token is for a deleted user or workspace or the app has been removed when using a user token.",
"two_factor_setup_required": "Two factor setup is required.",
"accesslimited": "Access to this method is limited on the current network.",
"fatal_error": "The server could not complete your operation(s) without encountering a catastrophic error. It's possible some aspect of the operation succeeded before the error was raised.",
"invalid_arg_name": "The method was passed an argument whose name falls outside the bounds of accepted or expected values. This includes very long names and names with non-alphanumeric characters other than _. If you get this error, it is typically an indication that you have made a very malformed API call.",
"invalid_array_arg": "The method was passed an array as an argument. Please only input valid strings.",
"invalid_charset": "The method was called via a POST request, but the charset specified in the Content-Type header was invalid. Valid charset names are: utf-8 iso-8859-1.",
"invalid_form_data": "The method was called via a POST request with Content-Type application/x-www-form-urlencoded or multipart/form-data, but the form data was either missing or syntactically invalid.",
"invalid_post_type": "The method was called via a POST request, but the specified Content-Type was invalid. Valid types are: application/json application/x-www-form-urlencoded multipart/form-data text/plain.",
"missing_post_type": "The method was called via a POST request and included a data payload, but the request did not include a Content-Type header.",
"request_timeout": "The method was called via a POST request, but the POST data was either missing or truncated.",
"service_unavailable": "The service is temporarily unavailable.",
"team_added_to_org": "The workspace associated with your request is currently undergoing migration to an Enterprise Organization. Web API and other platform operations will be intermittently unavailable until the transition is complete."
}
}
6 changes: 5 additions & 1 deletion tasks/lib/slack_api/methods_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@ def generate!

private

def common_errors
@common_errors ||= JSON.load_file('methods/_errors/common.json')['errors']
end

def process_method(data)
args, fields = parse_args(data)

Expand All @@ -45,7 +49,7 @@ def process_method(data)
desc: strip_markdown(data['desc']),
args: args,
response: response,
errors: errors
errors: common_errors.merge(errors).sort.to_h
}.merge(fields)

patch_filename = "methods/_patches/#{data['group']}/#{data['name']}.json"
Expand Down
5 changes: 4 additions & 1 deletion tasks/methods.rake
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@ namespace :api do
task :validate do
schema = File.read('schemas/methods.json')
validator = SlackApi::SpecValidator.new(schema)
Dir.glob('methods/**/*.json').grep_v(%r{/_patches\b}).each do |file|
Dir.glob('methods/**/*.json')
.grep_v(%r{/_patches\b})
.grep_v(%r{/_errors\b})
.each do |file|
puts file
abort "Invalid file format: #{file}" unless validator.valid?(file)
end
Expand Down