easypost 4.13.1 → 5.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +24 -1
- data/.gitignore +11 -11
- data/CHANGELOG.md +23 -2
- data/Makefile +15 -10
- data/README.md +49 -39
- data/UPGRADE_GUIDE.md +119 -0
- data/VERSION +1 -1
- data/easypost.gemspec +12 -10
- data/lib/easypost/client.rb +129 -0
- data/lib/easypost/connection.rb +2 -4
- data/lib/easypost/constants.rb +15 -0
- data/lib/easypost/errors/api/api_error.rb +106 -0
- data/lib/easypost/errors/api/connection_error.rb +6 -0
- data/lib/easypost/errors/api/external_api_error.rb +18 -0
- data/lib/easypost/errors/api/forbidden_error.rb +6 -0
- data/lib/easypost/errors/api/gateway_timeout_error.rb +6 -0
- data/lib/easypost/errors/api/internal_server_error.rb +6 -0
- data/lib/easypost/errors/api/invalid_request_error.rb +6 -0
- data/lib/easypost/errors/api/method_not_allowed_error.rb +6 -0
- data/lib/easypost/errors/api/not_found_error.rb +6 -0
- data/lib/easypost/errors/api/payment_error.rb +6 -0
- data/lib/easypost/errors/api/proxy_error.rb +6 -0
- data/lib/easypost/errors/api/rate_limit_error.rb +6 -0
- data/lib/easypost/errors/api/redirect_error.rb +6 -0
- data/lib/easypost/errors/api/retry_error.rb +6 -0
- data/lib/easypost/errors/api/service_unavailable_error.rb +6 -0
- data/lib/easypost/errors/api/ssl_error.rb +6 -0
- data/lib/easypost/errors/api/timeout_error.rb +6 -0
- data/lib/easypost/errors/api/unauthorized_error.rb +6 -0
- data/lib/easypost/errors/api/unknown_api_error.rb +6 -0
- data/lib/easypost/errors/easy_post_error.rb +7 -0
- data/lib/easypost/errors/end_of_pagination_error.rb +7 -0
- data/lib/easypost/errors/filtering_error.rb +4 -0
- data/lib/easypost/errors/invalid_object_error.rb +4 -0
- data/lib/easypost/errors/invalid_parameter_error.rb +11 -0
- data/lib/easypost/errors/missing_parameter_error.rb +9 -0
- data/lib/easypost/errors/signature_verification_error.rb +4 -0
- data/lib/easypost/errors.rb +31 -0
- data/lib/easypost/http_client.rb +65 -0
- data/lib/easypost/internal_utilities.rb +66 -0
- data/lib/easypost/models/address.rb +5 -0
- data/lib/easypost/models/api_key.rb +5 -0
- data/lib/easypost/models/base.rb +58 -0
- data/lib/easypost/models/batch.rb +5 -0
- data/lib/easypost/models/brand.rb +5 -0
- data/lib/easypost/{carbon_offset.rb → models/carbon_offset.rb} +1 -1
- data/lib/easypost/models/carrier_account.rb +5 -0
- data/lib/easypost/models/customs_info.rb +5 -0
- data/lib/easypost/models/customs_item.rb +5 -0
- data/lib/easypost/models/end_shipper.rb +5 -0
- data/lib/easypost/models/error.rb +21 -0
- data/lib/easypost/models/event.rb +5 -0
- data/lib/easypost/models/insurance.rb +6 -0
- data/lib/easypost/models/order.rb +9 -0
- data/lib/easypost/models/parcel.rb +5 -0
- data/lib/easypost/{payload.rb → models/payload.rb} +1 -1
- data/lib/easypost/models/payment_method.rb +5 -0
- data/lib/easypost/models/pickup.rb +9 -0
- data/lib/easypost/{pickup_rate.rb → models/pickup_rate.rb} +1 -1
- data/lib/easypost/{postage_label.rb → models/postage_label.rb} +1 -1
- data/lib/easypost/models/rate.rb +5 -0
- data/lib/easypost/models/referral.rb +5 -0
- data/lib/easypost/models/refund.rb +5 -0
- data/lib/easypost/models/report.rb +5 -0
- data/lib/easypost/models/scan_form.rb +6 -0
- data/lib/easypost/models/shipment.rb +10 -0
- data/lib/easypost/{tax_identifier.rb → models/tax_identifier.rb} +1 -1
- data/lib/easypost/models/tracker.rb +5 -0
- data/lib/easypost/models/user.rb +5 -0
- data/lib/easypost/models/webhook.rb +6 -0
- data/lib/easypost/models.rb +35 -0
- data/lib/easypost/services/address.rb +50 -0
- data/lib/easypost/services/api_key.rb +8 -0
- data/lib/easypost/services/base.rb +27 -0
- data/lib/easypost/services/batch.rb +53 -0
- data/lib/easypost/services/beta_rate.rb +12 -0
- data/lib/easypost/services/beta_referral_customer.rb +40 -0
- data/lib/easypost/services/billing.rb +75 -0
- data/lib/easypost/services/carrier_account.rb +44 -0
- data/lib/easypost/services/carrier_metadata.rb +22 -0
- data/lib/easypost/services/customs_info.rb +17 -0
- data/lib/easypost/services/customs_item.rb +15 -0
- data/lib/easypost/services/end_shipper.rb +31 -0
- data/lib/easypost/services/event.rb +32 -0
- data/lib/easypost/services/insurance.rb +26 -0
- data/lib/easypost/services/order.rb +30 -0
- data/lib/easypost/services/parcel.rb +16 -0
- data/lib/easypost/services/pickup.rb +40 -0
- data/lib/easypost/services/rate.rb +8 -0
- data/lib/easypost/services/referral_customer.rb +103 -0
- data/lib/easypost/services/refund.rb +26 -0
- data/lib/easypost/services/report.rb +42 -0
- data/lib/easypost/services/scan_form.rb +25 -0
- data/lib/easypost/services/shipment.rb +106 -0
- data/lib/easypost/services/tracker.rb +38 -0
- data/lib/easypost/services/user.rb +66 -0
- data/lib/easypost/services/webhook.rb +34 -0
- data/lib/easypost/services.rb +32 -0
- data/lib/easypost/util.rb +80 -187
- data/lib/easypost/utilities/constants.rb +5 -0
- data/lib/easypost/utilities/json.rb +23 -0
- data/lib/easypost/utilities/static_mapper.rb +73 -0
- data/lib/easypost/utilities/system.rb +36 -0
- data/lib/easypost.rb +12 -138
- metadata +147 -66
- data/.rubocop.yml +0 -11
- data/easycop.yml +0 -180
- data/lib/easypost/address.rb +0 -55
- data/lib/easypost/api_key.rb +0 -5
- data/lib/easypost/batch.rb +0 -52
- data/lib/easypost/beta/end_shipper.rb +0 -44
- data/lib/easypost/beta/payment_refund.rb +0 -5
- data/lib/easypost/beta/rate.rb +0 -14
- data/lib/easypost/beta/referral.rb +0 -158
- data/lib/easypost/beta.rb +0 -8
- data/lib/easypost/billing.rb +0 -72
- data/lib/easypost/brand.rb +0 -13
- data/lib/easypost/carrier_account.rb +0 -26
- data/lib/easypost/carrier_type.rb +0 -5
- data/lib/easypost/customs_info.rb +0 -9
- data/lib/easypost/customs_item.rb +0 -9
- data/lib/easypost/end_shipper.rb +0 -26
- data/lib/easypost/error.rb +0 -46
- data/lib/easypost/event.rb +0 -38
- data/lib/easypost/insurance.rb +0 -20
- data/lib/easypost/object.rb +0 -171
- data/lib/easypost/order.rb +0 -37
- data/lib/easypost/parcel.rb +0 -9
- data/lib/easypost/payment_method.rb +0 -12
- data/lib/easypost/pickup.rb +0 -47
- data/lib/easypost/rate.rb +0 -9
- data/lib/easypost/referral.rb +0 -117
- data/lib/easypost/refund.rb +0 -19
- data/lib/easypost/report.rb +0 -44
- data/lib/easypost/resource.rb +0 -124
- data/lib/easypost/scan_form.rb +0 -26
- data/lib/easypost/shipment.rb +0 -186
- data/lib/easypost/tracker.rb +0 -43
- data/lib/easypost/user.rb +0 -74
- data/lib/easypost/webhook.rb +0 -57
data/lib/easypost/user.rb
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# The User object can be used to manage your own account and to create child accounts.
|
|
4
|
-
class EasyPost::User < EasyPost::Resource
|
|
5
|
-
# Create a child User.
|
|
6
|
-
def self.create(params = {}, api_key = nil)
|
|
7
|
-
response = EasyPost.make_request(:post, url, api_key, { class_name.to_sym => params })
|
|
8
|
-
EasyPost::Util.convert_to_easypost_object(response, api_key)
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
# Save (update) a User.
|
|
12
|
-
def save
|
|
13
|
-
if @unsaved_values.length.positive?
|
|
14
|
-
values = {}
|
|
15
|
-
@unsaved_values.each { |k| values[k] = @values[k] }
|
|
16
|
-
|
|
17
|
-
wrapped_params = { user: values }
|
|
18
|
-
|
|
19
|
-
response = EasyPost.make_request(:patch, url, @api_key, wrapped_params)
|
|
20
|
-
refresh_from(response, api_key)
|
|
21
|
-
end
|
|
22
|
-
self
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
# Delete a User.
|
|
26
|
-
def delete
|
|
27
|
-
EasyPost.make_request(:delete, url, @api_key)
|
|
28
|
-
self
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
# Retrieve the authenticated User.
|
|
32
|
-
def self.retrieve_me
|
|
33
|
-
all
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# Retrieve a list of all ApiKey objects.
|
|
37
|
-
def self.all_api_keys
|
|
38
|
-
EasyPost::ApiKey.all
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
# Retrieve a list of ApiKey objects (works for the authenticated user or a child user).
|
|
42
|
-
def api_keys
|
|
43
|
-
api_keys = EasyPost::User.all_api_keys
|
|
44
|
-
|
|
45
|
-
if api_keys.id == id
|
|
46
|
-
# This function was called on the authenticated user
|
|
47
|
-
my_api_keys = api_keys.keys
|
|
48
|
-
else
|
|
49
|
-
# This function was called on a child user (authenticated as parent, only return this child user's details).
|
|
50
|
-
my_api_keys = []
|
|
51
|
-
api_keys.children.each do |child|
|
|
52
|
-
if child.id == id
|
|
53
|
-
my_api_keys = child.keys
|
|
54
|
-
break
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
my_api_keys
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
# Update the Brand of a User.
|
|
63
|
-
def update_brand(**attrs)
|
|
64
|
-
brand = EasyPost::Brand.new
|
|
65
|
-
data = { object: 'Brand', user_id: id, **attrs }
|
|
66
|
-
# Add accessors manually because there's no API to retrieve a brand
|
|
67
|
-
brand.add_accessors(data.keys)
|
|
68
|
-
# Assigning values with accessors defined above
|
|
69
|
-
data.each do |key, val|
|
|
70
|
-
brand.send("#{key}=", val)
|
|
71
|
-
end
|
|
72
|
-
brand.save
|
|
73
|
-
end
|
|
74
|
-
end
|
data/lib/easypost/webhook.rb
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# Each Webhook contains the url which EasyPost will notify whenever an object in our system updates. Several types of objects are processed
|
|
4
|
-
# asynchronously in the EasyPost system, so whenever an object updates, an Event is sent via HTTP POST to each configured webhook URL.
|
|
5
|
-
class EasyPost::Webhook < EasyPost::Resource
|
|
6
|
-
# Update a Webhook.
|
|
7
|
-
def update(params = {})
|
|
8
|
-
# NOTE: This method is redefined here since the "url" method conflicts with the objects field
|
|
9
|
-
unless id
|
|
10
|
-
raise EasyPost::Error.new("Could not determine which URL to request: #{self.class} instance has invalid ID: #{id.inspect}")
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
instance_url = "#{self.class.url}/#{CGI.escape(id)}"
|
|
14
|
-
|
|
15
|
-
response = EasyPost.make_request(:patch, instance_url, @api_key, params)
|
|
16
|
-
refresh_from(response, api_key)
|
|
17
|
-
|
|
18
|
-
self
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
# Delete a Webhook.
|
|
22
|
-
def delete
|
|
23
|
-
# NOTE: This method is redefined here since the "url" method conflicts with the objects field
|
|
24
|
-
unless id
|
|
25
|
-
raise EasyPost::Error.new("Could not determine which URL to request: #{self.class} instance has invalid ID: #{id.inspect}")
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
instance_url = "#{self.class.url}/#{CGI.escape(id)}"
|
|
29
|
-
|
|
30
|
-
response = EasyPost.make_request(:delete, instance_url, @api_key)
|
|
31
|
-
refresh_from(response, api_key)
|
|
32
|
-
|
|
33
|
-
self
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# Validate a webhook by comparing the HMAC signature header sent from EasyPost to your shared secret.
|
|
37
|
-
# If the signatures do not match, an error will be raised signifying the webhook either did not originate
|
|
38
|
-
# from EasyPost or the secrets do not match. If the signatures do match, the `event_body` will be returned
|
|
39
|
-
# as JSON.
|
|
40
|
-
def self.validate_webhook(event_body, headers, webhook_secret)
|
|
41
|
-
easypost_hmac_signature = headers['X-Hmac-Signature']
|
|
42
|
-
|
|
43
|
-
if easypost_hmac_signature.nil?
|
|
44
|
-
raise EasyPost::Error.new('Webhook received does not contain an HMAC signature.')
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
encoded_webhook_secret = webhook_secret.unicode_normalize(:nfkd).encode('utf-8')
|
|
48
|
-
|
|
49
|
-
expected_signature = OpenSSL::HMAC.hexdigest('sha256', encoded_webhook_secret, event_body)
|
|
50
|
-
digest = "hmac-sha256-hex=#{expected_signature}"
|
|
51
|
-
unless digest == easypost_hmac_signature
|
|
52
|
-
raise EasyPost::Error.new('Webhook received did not originate from EasyPost or had a webhook secret mismatch.')
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
JSON.parse(event_body)
|
|
56
|
-
end
|
|
57
|
-
end
|