hisend 1.0.0
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 +7 -0
- data/lib/hisend/client.rb +55 -0
- data/lib/hisend/errors.rb +10 -0
- data/lib/hisend/resources/domains.rb +29 -0
- data/lib/hisend/resources/emails.rb +25 -0
- data/lib/hisend/resources/routing.rb +29 -0
- data/lib/hisend/resources/threads.rb +17 -0
- data/lib/hisend.rb +14 -0
- metadata +63 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: e8cf15bd446a532daa5f3d6037ba959697017299c1ab53d9e0d0d5428b2607ae
|
|
4
|
+
data.tar.gz: b105cc09f5cd95fbf0f05ba0121c859ff21bae60cfa2a36653f71773711a9666
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 4bde86c3c218112b8a668f2315d5f27f8ff9c9aca7e38675c2760ca632e73021b2c235a0fa3ddc3c0fc3ce806749159767e60e020f1edde36eb4358419e9048e
|
|
7
|
+
data.tar.gz: 55b06063de5c084426cc5dd69898a9deb5dd33b80c5248df23a7ac15715efc5b6c698ca259c65924b5a7f6ff0796e47fc5aaf7e73a8613a3370b302b3d526e96
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
module Hisend
|
|
2
|
+
class Client
|
|
3
|
+
attr_reader :emails, :domains, :routing, :threads
|
|
4
|
+
|
|
5
|
+
def initialize(api_key:, base_url: 'https://api.hisend.app/v1')
|
|
6
|
+
@api_key = api_key
|
|
7
|
+
@base_url = base_url.chomp('/')
|
|
8
|
+
|
|
9
|
+
@emails = Hisend::Resources::Emails.new(self)
|
|
10
|
+
@domains = Hisend::Resources::Domains.new(self)
|
|
11
|
+
@routing = Hisend::Resources::Routing.new(self)
|
|
12
|
+
@threads = Hisend::Resources::Threads.new(self)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def request(method, endpoint, payload = nil)
|
|
16
|
+
uri = URI("#{@base_url}/#{endpoint.sub(/^\//, '')}")
|
|
17
|
+
|
|
18
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
|
19
|
+
http.use_ssl = uri.scheme == 'https'
|
|
20
|
+
|
|
21
|
+
req_class = case method.to_s.upcase
|
|
22
|
+
when 'GET' then Net::HTTP::Get
|
|
23
|
+
when 'POST' then Net::HTTP::Post
|
|
24
|
+
when 'PUT' then Net::HTTP::Put
|
|
25
|
+
when 'DELETE' then Net::HTTP::Delete
|
|
26
|
+
else raise ArgumentError, "Unsupported method: #{method}"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
req = req_class.new(uri)
|
|
30
|
+
req['Authorization'] = "Bearer #{@api_key}"
|
|
31
|
+
req['Content-Type'] = 'application/json'
|
|
32
|
+
req['Accept'] = 'application/json'
|
|
33
|
+
|
|
34
|
+
if payload
|
|
35
|
+
# Map :from_ to :from internally for ruby aesthetics if passed as a symbol
|
|
36
|
+
if payload.key?(:from_)
|
|
37
|
+
payload[:from] = payload.delete(:from_)
|
|
38
|
+
end
|
|
39
|
+
req.body = JSON.generate(payload)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
response = http.request(req)
|
|
43
|
+
body = response.body.to_s.empty? ? nil : JSON.parse(response.body, symbolize_names: true)
|
|
44
|
+
|
|
45
|
+
unless response.is_a?(Net::HTTPSuccess)
|
|
46
|
+
error_msg = body.is_a?(Hash) && (body[:message] || body[:error]) ? (body[:message] || body[:error]) : response.body
|
|
47
|
+
raise Hisend::Error.new("API request failed: #{error_msg}", response.code.to_i)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
body
|
|
51
|
+
rescue JSON::ParserError
|
|
52
|
+
raise Hisend::Error.new("Invalid JSON response from server: #{response.body}", response&.code&.to_i)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module Hisend
|
|
2
|
+
module Resources
|
|
3
|
+
class Domains
|
|
4
|
+
def initialize(client)
|
|
5
|
+
@client = client
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def list
|
|
9
|
+
@client.request(:get, 'domains')
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def get(id)
|
|
13
|
+
@client.request(:get, "domains/#{id}")
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def verify(id)
|
|
17
|
+
@client.request(:get, "domains/#{id}/verify")
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def add(data)
|
|
21
|
+
@client.request(:post, 'domains', data)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def delete(id)
|
|
25
|
+
@client.request(:delete, "domains/#{id}")
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module Hisend
|
|
2
|
+
module Resources
|
|
3
|
+
class Emails
|
|
4
|
+
def initialize(client)
|
|
5
|
+
@client = client
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def list
|
|
9
|
+
@client.request(:get, 'emails')
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def get(id)
|
|
13
|
+
@client.request(:get, "emails/#{id}")
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def send(data)
|
|
17
|
+
@client.request(:post, 'emails', data)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def send_batch(data)
|
|
21
|
+
@client.request(:post, 'emails/batch', data)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module Hisend
|
|
2
|
+
module Resources
|
|
3
|
+
class Routing
|
|
4
|
+
def initialize(client)
|
|
5
|
+
@client = client
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def list(domain_id)
|
|
9
|
+
@client.request(:get, "domains/#{domain_id}/routing")
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def create(domain_id, data)
|
|
13
|
+
@client.request(:post, "domains/#{domain_id}/routing", data)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def update(domain_id, id, data)
|
|
17
|
+
@client.request(:put, "domains/#{domain_id}/routing/#{id}", data)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def get(domain_id, id)
|
|
21
|
+
@client.request(:get, "domains/#{domain_id}/routing/#{id}")
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def delete(domain_id, id)
|
|
25
|
+
@client.request(:delete, "domains/#{domain_id}/routing/#{id}")
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Hisend
|
|
2
|
+
module Resources
|
|
3
|
+
class Threads
|
|
4
|
+
def initialize(client)
|
|
5
|
+
@client = client
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def list
|
|
9
|
+
@client.request(:get, 'threads')
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def get_emails(id)
|
|
13
|
+
@client.request(:get, "threads/#{id}/emails")
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
data/lib/hisend.rb
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
require 'net/http'
|
|
3
|
+
require 'uri'
|
|
4
|
+
|
|
5
|
+
require_relative 'hisend/errors'
|
|
6
|
+
require_relative 'hisend/client'
|
|
7
|
+
require_relative 'hisend/resources/domains'
|
|
8
|
+
require_relative 'hisend/resources/emails'
|
|
9
|
+
require_relative 'hisend/resources/routing'
|
|
10
|
+
require_relative 'hisend/resources/threads'
|
|
11
|
+
|
|
12
|
+
module Hisend
|
|
13
|
+
# Entry point is Hisend::Client
|
|
14
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: hisend
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Hisend
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2026-03-24 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: minitest
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '5.0'
|
|
20
|
+
type: :development
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '5.0'
|
|
27
|
+
description: The official Hisend Ruby client for interacting with the Hisend API.
|
|
28
|
+
email: support@hisend.app
|
|
29
|
+
executables: []
|
|
30
|
+
extensions: []
|
|
31
|
+
extra_rdoc_files: []
|
|
32
|
+
files:
|
|
33
|
+
- lib/hisend.rb
|
|
34
|
+
- lib/hisend/client.rb
|
|
35
|
+
- lib/hisend/errors.rb
|
|
36
|
+
- lib/hisend/resources/domains.rb
|
|
37
|
+
- lib/hisend/resources/emails.rb
|
|
38
|
+
- lib/hisend/resources/routing.rb
|
|
39
|
+
- lib/hisend/resources/threads.rb
|
|
40
|
+
homepage: https://hisend.app
|
|
41
|
+
licenses:
|
|
42
|
+
- MIT
|
|
43
|
+
metadata: {}
|
|
44
|
+
post_install_message:
|
|
45
|
+
rdoc_options: []
|
|
46
|
+
require_paths:
|
|
47
|
+
- lib
|
|
48
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
49
|
+
requirements:
|
|
50
|
+
- - ">="
|
|
51
|
+
- !ruby/object:Gem::Version
|
|
52
|
+
version: 2.6.0
|
|
53
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
54
|
+
requirements:
|
|
55
|
+
- - ">="
|
|
56
|
+
- !ruby/object:Gem::Version
|
|
57
|
+
version: '0'
|
|
58
|
+
requirements: []
|
|
59
|
+
rubygems_version: 3.0.3.1
|
|
60
|
+
signing_key:
|
|
61
|
+
specification_version: 4
|
|
62
|
+
summary: Official Ruby SDK for Hisend
|
|
63
|
+
test_files: []
|