ark-email 0.13.0 → 0.14.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.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +9 -0
  3. data/README.md +1 -1
  4. data/lib/ark_email/client.rb +4 -0
  5. data/lib/ark_email/models/email_retrieve_params.rb +4 -1
  6. data/lib/ark_email/models/email_retrieve_response.rb +177 -1
  7. data/lib/ark_email/models/log_entry.rb +298 -0
  8. data/lib/ark_email/models/log_entry_detail.rb +102 -0
  9. data/lib/ark_email/models/log_list_params.rb +106 -0
  10. data/lib/ark_email/models/log_retrieve_params.rb +14 -0
  11. data/lib/ark_email/models/log_retrieve_response.rb +33 -0
  12. data/lib/ark_email/models.rb +8 -0
  13. data/lib/ark_email/resources/logs.rb +120 -0
  14. data/lib/ark_email/version.rb +1 -1
  15. data/lib/ark_email.rb +6 -0
  16. data/rbi/ark_email/client.rbi +3 -0
  17. data/rbi/ark_email/models/email_retrieve_params.rbi +8 -2
  18. data/rbi/ark_email/models/email_retrieve_response.rbi +379 -0
  19. data/rbi/ark_email/models/log_entry.rbi +431 -0
  20. data/rbi/ark_email/models/log_entry_detail.rbi +192 -0
  21. data/rbi/ark_email/models/log_list_params.rbi +163 -0
  22. data/rbi/ark_email/models/log_retrieve_params.rbi +27 -0
  23. data/rbi/ark_email/models/log_retrieve_response.rbi +59 -0
  24. data/rbi/ark_email/models.rbi +8 -0
  25. data/rbi/ark_email/resources/emails.rbi +4 -1
  26. data/rbi/ark_email/resources/logs.rbi +104 -0
  27. data/sig/ark_email/client.rbs +2 -0
  28. data/sig/ark_email/models/email_retrieve_response.rbs +179 -0
  29. data/sig/ark_email/models/log_entry.rbs +209 -0
  30. data/sig/ark_email/models/log_entry_detail.rbs +97 -0
  31. data/sig/ark_email/models/log_list_params.rbs +97 -0
  32. data/sig/ark_email/models/log_retrieve_params.rbs +15 -0
  33. data/sig/ark_email/models/log_retrieve_response.rbs +26 -0
  34. data/sig/ark_email/models.rbs +8 -0
  35. data/sig/ark_email/resources/logs.rbs +25 -0
  36. metadata +20 -2
@@ -0,0 +1,106 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ArkEmail
4
+ module Models
5
+ # @see ArkEmail::Resources::Logs#list
6
+ class LogListParams < ArkEmail::Internal::Type::BaseModel
7
+ extend ArkEmail::Internal::Type::RequestParameters::Converter
8
+ include ArkEmail::Internal::Type::RequestParameters
9
+
10
+ # @!attribute credential_id
11
+ # Filter by API credential ID
12
+ #
13
+ # @return [String, nil]
14
+ optional :credential_id, String
15
+
16
+ # @!attribute end_date
17
+ # Filter logs before this date (ISO 8601 format)
18
+ #
19
+ # @return [Time, nil]
20
+ optional :end_date, Time
21
+
22
+ # @!attribute endpoint
23
+ # Filter by endpoint name
24
+ #
25
+ # @return [String, nil]
26
+ optional :endpoint, String
27
+
28
+ # @!attribute page
29
+ # Page number
30
+ #
31
+ # @return [Integer, nil]
32
+ optional :page, Integer
33
+
34
+ # @!attribute per_page
35
+ # Results per page (max 100)
36
+ #
37
+ # @return [Integer, nil]
38
+ optional :per_page, Integer
39
+
40
+ # @!attribute request_id
41
+ # Filter by request ID (partial match)
42
+ #
43
+ # @return [String, nil]
44
+ optional :request_id, String
45
+
46
+ # @!attribute start_date
47
+ # Filter logs after this date (ISO 8601 format)
48
+ #
49
+ # @return [Time, nil]
50
+ optional :start_date, Time
51
+
52
+ # @!attribute status
53
+ # Filter by status category:
54
+ #
55
+ # - `success` - Status codes < 400
56
+ # - `error` - Status codes >= 400
57
+ #
58
+ # @return [Symbol, ArkEmail::Models::LogListParams::Status, nil]
59
+ optional :status, enum: -> { ArkEmail::LogListParams::Status }
60
+
61
+ # @!attribute status_code
62
+ # Filter by exact HTTP status code (100-599)
63
+ #
64
+ # @return [Integer, nil]
65
+ optional :status_code, Integer
66
+
67
+ # @!method initialize(credential_id: nil, end_date: nil, endpoint: nil, page: nil, per_page: nil, request_id: nil, start_date: nil, status: nil, status_code: nil, request_options: {})
68
+ # Some parameter documentations has been truncated, see
69
+ # {ArkEmail::Models::LogListParams} for more details.
70
+ #
71
+ # @param credential_id [String] Filter by API credential ID
72
+ #
73
+ # @param end_date [Time] Filter logs before this date (ISO 8601 format)
74
+ #
75
+ # @param endpoint [String] Filter by endpoint name
76
+ #
77
+ # @param page [Integer] Page number
78
+ #
79
+ # @param per_page [Integer] Results per page (max 100)
80
+ #
81
+ # @param request_id [String] Filter by request ID (partial match)
82
+ #
83
+ # @param start_date [Time] Filter logs after this date (ISO 8601 format)
84
+ #
85
+ # @param status [Symbol, ArkEmail::Models::LogListParams::Status] Filter by status category:
86
+ #
87
+ # @param status_code [Integer] Filter by exact HTTP status code (100-599)
88
+ #
89
+ # @param request_options [ArkEmail::RequestOptions, Hash{Symbol=>Object}]
90
+
91
+ # Filter by status category:
92
+ #
93
+ # - `success` - Status codes < 400
94
+ # - `error` - Status codes >= 400
95
+ module Status
96
+ extend ArkEmail::Internal::Type::Enum
97
+
98
+ SUCCESS = :success
99
+ ERROR = :error
100
+
101
+ # @!method self.values
102
+ # @return [Array<Symbol>]
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ArkEmail
4
+ module Models
5
+ # @see ArkEmail::Resources::Logs#retrieve
6
+ class LogRetrieveParams < ArkEmail::Internal::Type::BaseModel
7
+ extend ArkEmail::Internal::Type::RequestParameters::Converter
8
+ include ArkEmail::Internal::Type::RequestParameters
9
+
10
+ # @!method initialize(request_options: {})
11
+ # @param request_options [ArkEmail::RequestOptions, Hash{Symbol=>Object}]
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ArkEmail
4
+ module Models
5
+ # @see ArkEmail::Resources::Logs#retrieve
6
+ class LogRetrieveResponse < ArkEmail::Internal::Type::BaseModel
7
+ # @!attribute data
8
+ # Full API request log entry with bodies
9
+ #
10
+ # @return [ArkEmail::Models::LogEntryDetail]
11
+ required :data, -> { ArkEmail::LogEntryDetail }
12
+
13
+ # @!attribute meta
14
+ #
15
+ # @return [ArkEmail::Models::APIMeta]
16
+ required :meta, -> { ArkEmail::APIMeta }
17
+
18
+ # @!attribute success
19
+ #
20
+ # @return [Boolean, true]
21
+ required :success, const: true
22
+
23
+ # @!method initialize(data:, meta:, success: true)
24
+ # Detailed API request log with request/response bodies
25
+ #
26
+ # @param data [ArkEmail::Models::LogEntryDetail] Full API request log entry with bodies
27
+ #
28
+ # @param meta [ArkEmail::Models::APIMeta]
29
+ #
30
+ # @param success [Boolean, true]
31
+ end
32
+ end
33
+ end
@@ -67,6 +67,14 @@ module ArkEmail
67
67
 
68
68
  EmailSendRawParams = ArkEmail::Models::EmailSendRawParams
69
69
 
70
+ LogEntry = ArkEmail::Models::LogEntry
71
+
72
+ LogEntryDetail = ArkEmail::Models::LogEntryDetail
73
+
74
+ LogListParams = ArkEmail::Models::LogListParams
75
+
76
+ LogRetrieveParams = ArkEmail::Models::LogRetrieveParams
77
+
70
78
  SuppressionBulkCreateParams = ArkEmail::Models::SuppressionBulkCreateParams
71
79
 
72
80
  SuppressionCreateParams = ArkEmail::Models::SuppressionCreateParams
@@ -0,0 +1,120 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ArkEmail
4
+ module Resources
5
+ class Logs
6
+ # Retrieve detailed information about a specific API request log, including the
7
+ # full request and response bodies.
8
+ #
9
+ # **Body decryption:** Request and response bodies are stored encrypted and
10
+ # automatically decrypted when retrieved. Bodies larger than 25KB are truncated at
11
+ # storage time with a `... [truncated]` marker.
12
+ #
13
+ # **Use cases:**
14
+ #
15
+ # - Debug a specific failed request
16
+ # - Review the exact payload sent/received
17
+ # - Share request details with support
18
+ #
19
+ # **Related endpoints:**
20
+ #
21
+ # - `GET /logs` - List logs with filters
22
+ #
23
+ # @overload retrieve(request_id, request_options: {})
24
+ #
25
+ # @param request_id [String] The request ID (format `req_*`)
26
+ #
27
+ # @param request_options [ArkEmail::RequestOptions, Hash{Symbol=>Object}, nil]
28
+ #
29
+ # @return [ArkEmail::Models::LogRetrieveResponse]
30
+ #
31
+ # @see ArkEmail::Models::LogRetrieveParams
32
+ def retrieve(request_id, params = {})
33
+ @client.request(
34
+ method: :get,
35
+ path: ["logs/%1$s", request_id],
36
+ model: ArkEmail::Models::LogRetrieveResponse,
37
+ options: params[:request_options]
38
+ )
39
+ end
40
+
41
+ # Some parameter documentations has been truncated, see
42
+ # {ArkEmail::Models::LogListParams} for more details.
43
+ #
44
+ # Retrieve a paginated list of API request logs for debugging and monitoring.
45
+ # Results are ordered by timestamp, newest first.
46
+ #
47
+ # **Use cases:**
48
+ #
49
+ # - Debug integration issues by reviewing recent requests
50
+ # - Monitor error rates and response times
51
+ # - Audit API usage patterns
52
+ #
53
+ # **Filters:**
54
+ #
55
+ # - `status` - Filter by success or error category
56
+ # - `statusCode` - Filter by exact HTTP status code
57
+ # - `endpoint` - Filter by endpoint name (e.g., `emails.send`)
58
+ # - `credentialId` - Filter by API key
59
+ # - `startDate`/`endDate` - Filter by date range
60
+ #
61
+ # **Note:** Request and response bodies are only included when retrieving a single
62
+ # log entry with `GET /logs/{requestId}`.
63
+ #
64
+ # **Related endpoints:**
65
+ #
66
+ # - `GET /logs/{requestId}` - Get full log details with request/response bodies
67
+ #
68
+ # @overload list(credential_id: nil, end_date: nil, endpoint: nil, page: nil, per_page: nil, request_id: nil, start_date: nil, status: nil, status_code: nil, request_options: {})
69
+ #
70
+ # @param credential_id [String] Filter by API credential ID
71
+ #
72
+ # @param end_date [Time] Filter logs before this date (ISO 8601 format)
73
+ #
74
+ # @param endpoint [String] Filter by endpoint name
75
+ #
76
+ # @param page [Integer] Page number
77
+ #
78
+ # @param per_page [Integer] Results per page (max 100)
79
+ #
80
+ # @param request_id [String] Filter by request ID (partial match)
81
+ #
82
+ # @param start_date [Time] Filter logs after this date (ISO 8601 format)
83
+ #
84
+ # @param status [Symbol, ArkEmail::Models::LogListParams::Status] Filter by status category:
85
+ #
86
+ # @param status_code [Integer] Filter by exact HTTP status code (100-599)
87
+ #
88
+ # @param request_options [ArkEmail::RequestOptions, Hash{Symbol=>Object}, nil]
89
+ #
90
+ # @return [ArkEmail::Internal::PageNumberPagination<ArkEmail::Models::LogEntry>]
91
+ #
92
+ # @see ArkEmail::Models::LogListParams
93
+ def list(params = {})
94
+ parsed, options = ArkEmail::LogListParams.dump_request(params)
95
+ @client.request(
96
+ method: :get,
97
+ path: "logs",
98
+ query: parsed.transform_keys(
99
+ credential_id: "credentialId",
100
+ end_date: "endDate",
101
+ per_page: "perPage",
102
+ request_id: "requestId",
103
+ start_date: "startDate",
104
+ status_code: "statusCode"
105
+ ),
106
+ page: ArkEmail::Internal::PageNumberPagination,
107
+ model: ArkEmail::LogEntry,
108
+ options: options
109
+ )
110
+ end
111
+
112
+ # @api private
113
+ #
114
+ # @param client [ArkEmail::Client]
115
+ def initialize(client:)
116
+ @client = client
117
+ end
118
+ end
119
+ end
120
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ArkEmail
4
- VERSION = "0.13.0"
4
+ VERSION = "0.14.0"
5
5
  end
data/lib/ark_email.rb CHANGED
@@ -53,6 +53,7 @@ require_relative "ark_email/internal/transport/base_client"
53
53
  require_relative "ark_email/internal/transport/pooled_net_requester"
54
54
  require_relative "ark_email/client"
55
55
  require_relative "ark_email/internal/page_number_pagination"
56
+ require_relative "ark_email/models/log_entry"
56
57
  require_relative "ark_email/models/api_meta"
57
58
  require_relative "ark_email/models/dns_record"
58
59
  require_relative "ark_email/models/domain_create_params"
@@ -79,6 +80,10 @@ require_relative "ark_email/models/email_send_params"
79
80
  require_relative "ark_email/models/email_send_raw_params"
80
81
  require_relative "ark_email/models/email_send_raw_response"
81
82
  require_relative "ark_email/models/email_send_response"
83
+ require_relative "ark_email/models/log_entry_detail"
84
+ require_relative "ark_email/models/log_list_params"
85
+ require_relative "ark_email/models/log_retrieve_params"
86
+ require_relative "ark_email/models/log_retrieve_response"
82
87
  require_relative "ark_email/models/suppression_bulk_create_params"
83
88
  require_relative "ark_email/models/suppression_bulk_create_response"
84
89
  require_relative "ark_email/models/suppression_create_params"
@@ -123,6 +128,7 @@ require_relative "ark_email/models/webhook_update_response"
123
128
  require_relative "ark_email/models"
124
129
  require_relative "ark_email/resources/domains"
125
130
  require_relative "ark_email/resources/emails"
131
+ require_relative "ark_email/resources/logs"
126
132
  require_relative "ark_email/resources/suppressions"
127
133
  require_relative "ark_email/resources/tracking"
128
134
  require_relative "ark_email/resources/webhooks"
@@ -34,6 +34,9 @@ module ArkEmail
34
34
  sig { returns(ArkEmail::Resources::Tracking) }
35
35
  attr_reader :tracking
36
36
 
37
+ sig { returns(ArkEmail::Resources::Logs) }
38
+ attr_reader :logs
39
+
37
40
  # @api private
38
41
  sig { override.returns(T::Hash[String, String]) }
39
42
  private def auth_headers
@@ -13,10 +13,13 @@ module ArkEmail
13
13
 
14
14
  # Comma-separated list of fields to include:
15
15
  #
16
+ # - `full` - Include all expanded fields in a single request
16
17
  # - `content` - HTML and plain text body
17
18
  # - `headers` - Email headers
18
19
  # - `deliveries` - Delivery attempt history
19
- # - `activity` - Opens and clicks
20
+ # - `activity` - Opens and clicks tracking data
21
+ # - `attachments` - File attachments with content (base64 encoded)
22
+ # - `raw` - Complete raw MIME message (base64 encoded)
20
23
  sig { returns(T.nilable(String)) }
21
24
  attr_reader :expand
22
25
 
@@ -32,10 +35,13 @@ module ArkEmail
32
35
  def self.new(
33
36
  # Comma-separated list of fields to include:
34
37
  #
38
+ # - `full` - Include all expanded fields in a single request
35
39
  # - `content` - HTML and plain text body
36
40
  # - `headers` - Email headers
37
41
  # - `deliveries` - Delivery attempt history
38
- # - `activity` - Opens and clicks
42
+ # - `activity` - Opens and clicks tracking data
43
+ # - `attachments` - File attachments with content (base64 encoded)
44
+ # - `raw` - Complete raw MIME message (base64 encoded)
39
45
  expand: nil,
40
46
  request_options: {}
41
47
  )