Class: Mailkite::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/mailkite.rb

Constant Summary collapse

VERBS =
{
  "GET" => Net::HTTP::Get,
  "POST" => Net::HTTP::Post,
  "PUT" => Net::HTTP::Put,
  "DELETE" => Net::HTTP::Delete,
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(api_key, base_url = DEFAULT_BASE_URL) ⇒ Client

Returns a new instance of Client.



135
136
137
138
# File 'lib/mailkite.rb', line 135

def initialize(api_key, base_url = DEFAULT_BASE_URL)
  @api_key = api_key
  @base_url = base_url.sub(%r{/+\z}, "")
end

Instance Method Details

#agent(message) ⇒ Object

Run an inbound message through an AI agent. message keys: text (required), plus optional subject/from/html/routeId/address/model.



171
172
173
# File 'lib/mailkite.rb', line 171

def agent(message)
  request("POST", "/v1/agent", message)
end

#checkDomainAvailability(domain) ⇒ Object



214
215
216
# File 'lib/mailkite.rb', line 214

def checkDomainAvailability(domain)
  request("GET", "/api/domains/register/check?domain=#{CGI.escape(domain)}")
end

#createDomain(body) ⇒ Object



186
187
188
# File 'lib/mailkite.rb', line 186

def createDomain(body)
  request("POST", "/api/domains", body)
end

#createRoute(body) ⇒ Object



227
228
229
# File 'lib/mailkite.rb', line 227

def createRoute(body)
  request("POST", "/api/routes", body)
end

#createTemplate(body) ⇒ Object



244
245
246
# File 'lib/mailkite.rb', line 244

def createTemplate(body)
  request("POST", "/api/templates", body)
end

#decrypt(envelope, private_key) ⇒ Object



277
278
279
# File 'lib/mailkite.rb', line 277

def decrypt(envelope, private_key)
  Mailkite.decrypt(envelope, private_key)
end

#deleteDomain(id) ⇒ Object



194
195
196
# File 'lib/mailkite.rb', line 194

def deleteDomain(id)
  request("DELETE", "/api/domains/#{id}")
end

#deleteWebhook(id) ⇒ Object



206
207
208
# File 'lib/mailkite.rb', line 206

def deleteWebhook(id)
  request("DELETE", "/api/domains/#{id}/webhook")
end

#encrypt(plaintext, public_key) ⇒ Object



273
274
275
# File 'lib/mailkite.rb', line 273

def encrypt(plaintext, public_key)
  Mailkite.encrypt(plaintext, public_key)
end

#getDomain(id) ⇒ Object



190
191
192
# File 'lib/mailkite.rb', line 190

def getDomain(id)
  request("GET", "/api/domains/#{id}")
end

#getMessage(id) ⇒ Object



253
254
255
# File 'lib/mailkite.rb', line 253

def getMessage(id)
  request("GET", "/api/messages/#{id}")
end

#getTemplate(id) ⇒ Object



240
241
242
# File 'lib/mailkite.rb', line 240

def getTemplate(id)
  request("GET", "/api/templates/#{id}")
end

#listBaseTemplatesObject



236
237
238
# File 'lib/mailkite.rb', line 236

def listBaseTemplates
  request("GET", "/api/templates/base")
end

#listDomainsObject

— Domains ——————————————————–



182
183
184
# File 'lib/mailkite.rb', line 182

def listDomains
  request("GET", "/api/domains")
end

#listMessagesObject

— Messages & deliveries —————————————–



249
250
251
# File 'lib/mailkite.rb', line 249

def listMessages
  request("GET", "/api/messages")
end

#listRoutesObject

— Routes ———————————————————



223
224
225
# File 'lib/mailkite.rb', line 223

def listRoutes
  request("GET", "/api/routes")
end

#listTemplatesObject

— Templates ——————————————————



232
233
234
# File 'lib/mailkite.rb', line 232

def listTemplates
  request("GET", "/api/templates")
end

#registerDomain(body) ⇒ Object



218
219
220
# File 'lib/mailkite.rb', line 218

def registerDomain(body)
  request("POST", "/api/domains/register", body)
end

#reply_okObject

Instance wrappers around the module-level crypto helpers. No network call.



269
270
271
# File 'lib/mailkite.rb', line 269

def reply_ok
  Mailkite.reply_ok
end

#request(method, path, body = nil) ⇒ Object

Low-level request. Every method below is a one-liner on top of this.



141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/mailkite.rb', line 141

def request(method, path, body = nil)
  uri = URI(@base_url + path)
  req = VERBS.fetch(method).new(uri)
  req["Authorization"] = "Bearer #{@api_key}"
  unless body.nil?
    req["Content-Type"] = "application/json"
    req.body = JSON.generate(body)
  end

  res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") { |http| http.request(req) }
  text = res.body
  data = text && !text.empty? ? JSON.parse(text) : nil
  code = res.code.to_i
  unless code >= 200 && code < 300
    message = data.is_a?(Hash) ? data["error"] : nil
    raise Error.new(code, message || res.message || "HTTP #{code}", data)
  end
  data
end

#retryDelivery(id) ⇒ Object



257
258
259
# File 'lib/mailkite.rb', line 257

def retryDelivery(id)
  request("POST", "/api/deliveries/#{id}/retry")
end

#route(message) ⇒ Object

Route an inbound message to its configured destination. message keys: from (required), plus optional routeId/address/subject/text/html.



177
178
179
# File 'lib/mailkite.rb', line 177

def route(message)
  request("POST", "/v1/route", message)
end

#send(message) ⇒ Object

— Sending ——————————————————– message keys: from, to, text/html, etc. ‘subject` is optional when a template supplies it. Pass `templateId` to render a stored template and `templateData` (a hash) to fill its variables.



165
166
167
# File 'lib/mailkite.rb', line 165

def send(message)
  request("POST", "/v1/send", message)
end

#setWebhook(id, body) ⇒ Object



202
203
204
# File 'lib/mailkite.rb', line 202

def setWebhook(id, body)
  request("PUT", "/api/domains/#{id}/webhook", body)
end

#testWebhook(id) ⇒ Object



210
211
212
# File 'lib/mailkite.rb', line 210

def testWebhook(id)
  request("POST", "/api/domains/#{id}/webhook/test")
end

#verifyDomain(id) ⇒ Object



198
199
200
# File 'lib/mailkite.rb', line 198

def verifyDomain(id)
  request("POST", "/api/domains/#{id}/verify")
end

#verifyWebhook(signature, payload, secret, tolerance_ms = DEFAULT_TOLERANCE_MS) ⇒ Object

— Webhooks ——————————————————- Instance wrapper around Mailkite.verify_webhook, so you can verify on an existing client. No network call; no API key required.



264
265
266
# File 'lib/mailkite.rb', line 264

def verifyWebhook(signature, payload, secret, tolerance_ms = DEFAULT_TOLERANCE_MS)
  Mailkite.verify_webhook(signature, payload, secret, tolerance_ms)
end