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
16 changes: 14 additions & 2 deletions src/Endpoints/EmailEndpoint.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@
* }
* @phpstan-type EmailSettings array{
* track_opens?: bool,
* track_clicks?: bool
* track_clicks?: bool,
* tls?: 'opportunistic'|'enforced'
* }
* @phpstan-type EmailPayload array{
* from?: string,
Expand Down Expand Up @@ -273,7 +274,18 @@ public function ping(): string
*/
public function sendBatch(array $messages): SendBatchMailResponse
{
return $this->hydrateList(SendBatchMailResponse::class, $this->postArray('/v1/send/batch', $messages, []));
$headers = [];

if ($this->idempotencyKey !== null) {
$headers['Idempotency-Key'] = $this->idempotencyKey;
}

try {
return $this->hydrateList(SendBatchMailResponse::class, $this->postArray('/v1/send/batch', $messages, $headers));
} finally {
$this->payload = [];
$this->idempotencyKey = null;
}
}

/**
Expand Down
27 changes: 0 additions & 27 deletions src/Endpoints/ProjectsEndpoint.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,14 @@
use Lettermint\Responses\CreateRouteResponse;
use Lettermint\Responses\DeleteProjectResponse;
use Lettermint\Responses\ProjectListResponse;
use Lettermint\Responses\ProjectMemberResponse;
use Lettermint\Responses\ProjectResponse;
use Lettermint\Responses\ProjectRoutesResponse;
use Lettermint\Responses\RotateProjectTokenResponse;
use Lettermint\Responses\UpdateProjectMembersResponse;
use Lettermint\Responses\UpdateProjectResponse;

/**
* @phpstan-import-type StoreProjectData from \Lettermint\Types\ApiTypes
* @phpstan-import-type UpdateProjectData from \Lettermint\Types\ApiTypes
* @phpstan-import-type UpdateProjectMembersData from \Lettermint\Types\ApiTypes
* @phpstan-import-type StoreRouteData from \Lettermint\Types\ApiTypes
*/
class ProjectsEndpoint extends Endpoint
Expand Down Expand Up @@ -57,30 +54,6 @@ public function rotateToken(string $projectId): RotateProjectTokenResponse
return $this->hydrate(RotateProjectTokenResponse::class, $this->postArray($this->path('/projects/{projectId}/rotate-token', ['projectId' => $projectId]), [], []));
}

/**
* @phpstan-param UpdateProjectMembersData $data
*/
public function updateMembers(string $projectId, array $data): UpdateProjectMembersResponse
{
return $this->hydrate(UpdateProjectMembersResponse::class, $this->putArray($this->path('/projects/{projectId}/members', ['projectId' => $projectId]), $data, []));
}

public function addMember(string $projectId, string $teamMemberId): ProjectMemberResponse
{
return $this->hydrate(ProjectMemberResponse::class, $this->postArray($this->path('/projects/{projectId}/members/{teamMemberId}', [
'projectId' => $projectId,
'teamMemberId' => $teamMemberId,
]), [], []));
}

public function removeMember(string $projectId, string $teamMemberId): ProjectMemberResponse
{
return $this->hydrate(ProjectMemberResponse::class, $this->deleteArray($this->path('/projects/{projectId}/members/{teamMemberId}', [
'projectId' => $projectId,
'teamMemberId' => $teamMemberId,
]), []));
}

public function routes(string $projectId, array $query = []): ProjectRoutesResponse
{
return $this->hydrate(ProjectRoutesResponse::class, $this->getArray($this->path('/projects/{projectId}/routes', ['projectId' => $projectId]), $query));
Expand Down
22 changes: 22 additions & 0 deletions src/Endpoints/TeamEndpoint.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,17 @@

namespace Lettermint\Endpoints;

use Lettermint\Responses\TeamMembersAssignmentUpdateResponse;
use Lettermint\Responses\TeamMembersResponse;
use Lettermint\Responses\TeamMembersShowResponse;
use Lettermint\Responses\TeamResponse;
use Lettermint\Responses\TeamRolesResponse;
use Lettermint\Responses\TeamUsageResponse;
use Lettermint\Responses\UpdateTeamResponse;

/**
* @phpstan-import-type UpdateTeamData from \Lettermint\Types\ApiTypes
* @phpstan-import-type UpdateTeamMemberAssignmentData from \Lettermint\Types\ApiTypes
*/
class TeamEndpoint extends Endpoint
{
Expand All @@ -30,8 +34,26 @@ public function usage(): TeamUsageResponse
return $this->hydrate(TeamUsageResponse::class, $this->getArray($this->path('/team/usage'), []));
}

public function roles(): TeamRolesResponse
{
return $this->hydrate(TeamRolesResponse::class, $this->getArray($this->path('/team/roles'), []));
}

public function members(array $query = []): TeamMembersResponse
{
return $this->hydrate(TeamMembersResponse::class, $this->getArray($this->path('/team/members'), $query));
}

public function member(string $userId): TeamMembersShowResponse
{
return $this->hydrate(TeamMembersShowResponse::class, $this->getArray($this->path('/team/members/{userId}', ['userId' => $userId]), []));
}

/**
* @phpstan-param UpdateTeamMemberAssignmentData $data
*/
public function updateMemberAssignment(string $userId, array $data): TeamMembersAssignmentUpdateResponse
{
return $this->hydrate(TeamMembersAssignmentUpdateResponse::class, $this->putArray($this->path('/team/members/{userId}/assignment', ['userId' => $userId]), $data, []));
}
}
6 changes: 4 additions & 2 deletions src/Objects/DomainData.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,16 @@
/**
* @property string $id
* @property string $domain
* @property 'legacy_txt'|'managed_cname' $dkim_mode
* @property bool $rotation_ready
* @property string|null $status_changed_at
* @property list<\Lettermint\Objects\DomainDnsRecordData> $dns_records
* @property list<DomainDnsRecordData> $dns_records
* @property list<array<string, mixed>> $projects
* @property string $created_at
*/
final class DomainData extends Resource
{
protected static array $casts = [
'dns_records' => [\Lettermint\Objects\DomainDnsRecordData::class],
'dns_records' => [DomainDnsRecordData::class],
];
}
3 changes: 3 additions & 0 deletions src/Objects/DomainDnsRecordData.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
* @property string $fqdn
* @property string $content
* @property 'active'|'failed'|'pending' $status
* @property 'return_path'|'dmarc'|'dkim_legacy'|'dkim_primary'|'dkim_secondary' $purpose
* @property 'required'|'recommended'|'migration'|'deprecated' $verification_scope
* @property bool $required_for_verification
* @property string|null $verified_at
* @property string|null $last_checked_at
*/
Expand Down
1 change: 1 addition & 0 deletions src/Objects/DomainListData.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
* @property string $id
* @property string $domain
* @property 'verified'|'partially_verified'|'pending_verification'|'failed_verification' $status
* @property 'legacy_txt'|'managed_cname' $dkim_mode
* @property string|null $status_changed_at
* @property string $created_at
*/
Expand Down
8 changes: 5 additions & 3 deletions src/Objects/MessageListData.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,16 @@
* @property string $id
* @property 'inbound'|'outbound' $type
* @property 'pending'|'queued'|'suppressed'|'processed'|'delivered'|'opened'|'clicked'|'soft_bounced'|'hard_bounced'|'spam_complaint'|'failed'|'blocked'|'policy_rejected'|'unsubscribed' $status
* @property float|int|null $spam_score
* @property string $from_email
* @property string|null $from_name
* @property string|null $subject
* @property list<\Lettermint\Objects\MessageRecipientData>|null $to
* @property list<\Lettermint\Objects\MessageRecipientData>|null $cc
* @property list<\Lettermint\Objects\MessageRecipientData>|null $bcc
* @property list<MessageRecipientData>|null $to
* @property list<MessageRecipientData>|null $cc
* @property list<MessageRecipientData>|null $bcc
* @property list<string>|null $reply_to
* @property string|null $tag
* @property string|null $status_changed_at
* @property string $created_at
*/
final class MessageListData extends Resource
Expand Down
13 changes: 5 additions & 8 deletions src/Objects/ProjectData.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,18 @@
* @property string|null $token_generated_at
* @property string|null $token_last_used_at
* @property string|null $token_last_used_ip
* @property list<\Lettermint\Objects\RouteListData> $routes
* @property list<RouteListData> $routes
* @property int $routes_count
* @property list<\Lettermint\Objects\DomainData> $domains
* @property list<DomainData> $domains
* @property int $domains_count
* @property list<\Lettermint\Objects\TeamMemberData> $team_members
* @property int $team_members_count
* @property \Lettermint\Objects\MessageStatsData|mixed $last_28_days
* @property MessageStatsData|mixed $last_28_days
* @property string $created_at
* @property string $updated_at
*/
final class ProjectData extends Resource
{
protected static array $casts = [
'routes' => [\Lettermint\Objects\RouteData::class],
'domains' => [\Lettermint\Objects\DomainData::class],
'team_members' => [\Lettermint\Objects\TeamMemberData::class],
'routes' => [RouteData::class],
'domains' => [DomainData::class],
];
}
5 changes: 2 additions & 3 deletions src/Objects/ProjectListData.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,13 @@
* @property bool $smtp_enabled
* @property int $routes_count
* @property int $domains_count
* @property int $team_members_count
* @property \Lettermint\Objects\MessageStatsData $last_28_days
* @property MessageStatsData $last_28_days
* @property string $created_at
* @property string $updated_at
*/
final class ProjectListData extends Resource
{
protected static array $casts = [
'last_28_days' => \Lettermint\Objects\MessageStatsData::class,
'last_28_days' => MessageStatsData::class,
];
}
15 changes: 8 additions & 7 deletions src/Objects/RouteData.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,22 @@
* @property string $name
* @property 'transactional'|'broadcast'|'inbound' $route_type
* @property bool $is_default
* @property string $inbound_address
* @property string $inbound_domain
* @property string $inbound_domain_verified_at
* @property float|int $inbound_spam_threshold
* @property string|null $inbound_address
* @property string|null $inbound_domain
* @property string|null $inbound_domain_verified_at
* @property float|int|null $inbound_spam_threshold
* @property 'inline'|'url' $attachment_delivery
* @property \Lettermint\Objects\ProjectListData $project
* @property array<string, mixed>|mixed $settings
* @property ProjectListData $project
* @property int $webhooks_count
* @property int $suppressed_recipients_count
* @property array<string, mixed>|list<\Lettermint\Objects\RouteStatisticData> $statistics
* @property array<string, mixed>|list<RouteStatisticData> $statistics
* @property string $created_at
* @property string $updated_at
*/
final class RouteData extends Resource
{
protected static array $casts = [
'project' => \Lettermint\Objects\ProjectData::class,
'project' => ProjectData::class,
];
}
3 changes: 3 additions & 0 deletions src/Objects/RouteStatisticData.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@
* @property int $hard_bounce_count
* @property int $spam_complaint_count
* @property int $inbound_received_count
* @property int|null $observed_opened_count
* @property int|null $human_opened_count
* @property int|null $privacy_opened_count
* @property int|null $effective_opened_count
* @property int|null $machine_opened_count
* @property int|null $machine_clicked_count
Expand Down
11 changes: 7 additions & 4 deletions src/Objects/StatsDailyData.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,19 @@
* @property int $spam_complaints
* @property int|null $opened
* @property int|null $clicked
* @property \Lettermint\Objects\StatsInboundData $inbound
* @property \Lettermint\Objects\StatsTypeData|mixed $transactional
* @property \Lettermint\Objects\StatsTypeData|mixed $broadcast
* @property StatsInboundData $inbound
* @property StatsTypeData|mixed $transactional
* @property StatsTypeData|mixed $broadcast
* @property int|null $observed_opened
* @property int|null $human_opened
* @property int|null $privacy_opened
* @property int|null $effective_opened
* @property int|null $machine_opened
* @property int|null $machine_clicked
*/
final class StatsDailyData extends Resource
{
protected static array $casts = [
'inbound' => \Lettermint\Objects\StatsInboundData::class,
'inbound' => StatsInboundData::class,
];
}
11 changes: 7 additions & 4 deletions src/Objects/StatsTotalsData.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,19 @@
* @property int $spam_complaints
* @property int|null $opened
* @property int|null $clicked
* @property \Lettermint\Objects\StatsInboundData $inbound
* @property \Lettermint\Objects\StatsTypeData|mixed $transactional
* @property \Lettermint\Objects\StatsTypeData|mixed $broadcast
* @property StatsInboundData $inbound
* @property StatsTypeData|mixed $transactional
* @property StatsTypeData|mixed $broadcast
* @property int|null $observed_opened
* @property int|null $human_opened
* @property int|null $privacy_opened
* @property int|null $effective_opened
* @property int|null $machine_opened
* @property int|null $machine_clicked
*/
final class StatsTotalsData extends Resource
{
protected static array $casts = [
'inbound' => \Lettermint\Objects\StatsInboundData::class,
'inbound' => StatsInboundData::class,
];
}
2 changes: 1 addition & 1 deletion src/Objects/StoreWebhookData.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
* @property string $url
* @property bool|null $enabled
* @property bool|null $include_machine_events
* @property list<'message.created'|'message.sent'|'message.delivered'|'message.auto_replied'|'message.hard_bounced'|'message.soft_bounced'|'message.spam_complaint'|'message.failed'|'message.suppressed'|'message.unsubscribed'|'message.opened'|'message.clicked'|'message.inbound'|'message.policy_rejected'|'webhook.test'> $events
* @property list<'message.created'|'message.sent'|'message.delivered'|'message.auto_replied'|'message.hard_bounced'|'message.soft_bounced'|'message.spam_complaint'|'message.failed'|'message.suppressed'|'message.unsubscribed'|'message.opened'|'message.clicked'|'message.inbound'|'message.policy_rejected'|'suppression.added'|'suppression.removed'|'webhook.test'> $events
*/
final class StoreWebhookData extends Resource
{
Expand Down
5 changes: 4 additions & 1 deletion src/Objects/SuppressedRecipientData.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,13 @@
* @property 'global'|'team'|'project'|'route' $scope
* @property string|null $project_id
* @property string|null $route_id
* @property SuppressionSourceMessageData|null $source_message
* @property string $created_at
* @property string $updated_at
*/
final class SuppressedRecipientData extends Resource
{
//
protected static array $casts = [
'source_message' => SuppressionSourceMessageData::class,
];
}
16 changes: 16 additions & 0 deletions src/Objects/SuppressionSourceMessageData.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?php

namespace Lettermint\Objects;

use Lettermint\Resource;

/**
* @property string $id
* @property bool $available
* @property string|null $subject
* @property string|null $created_at
*/
final class SuppressionSourceMessageData extends Resource
{
//
}
7 changes: 4 additions & 3 deletions src/Objects/TeamData.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,11 @@
* @property string $name
* @property 'personal'|'business' $type
* @property 'free'|'starter'|'growth'|'pro' $plan
* @property 300|10000|50000|125000|300000|500000|750000|1000000|1500000 $tier
* @property int $included_volume
* @property int $tier
* @property string|null $verified_at
* @property list<string> $features
* @property list<\Lettermint\Objects\TeamAddonData> $addons
* @property list<TeamAddonData> $addons
* @property string $created_at
* @property int $domains_count
* @property int $projects_count
Expand All @@ -21,6 +22,6 @@
final class TeamData extends Resource
{
protected static array $casts = [
'addons' => [\Lettermint\Objects\TeamAddonData::class],
'addons' => [TeamAddonData::class],
];
}
8 changes: 5 additions & 3 deletions src/Objects/TeamMemberData.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@

/**
* @property string $id
* @property \Lettermint\Objects\UserData $user
* @property string|null $role
* @property string $name
* @property string $email
* @property array<string, mixed> $role
* @property TeamMemberProjectAccessData $project_access
* @property string|null $joined_at
*/
final class TeamMemberData extends Resource
{
protected static array $casts = [
'user' => \Lettermint\Objects\UserData::class,
'project_access' => TeamMemberProjectAccessData::class,
];
}
Loading