Skip to content

Contacts api #64

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 44 commits into
base: main
Choose a base branch
from
Draft

Contacts api #64

wants to merge 44 commits into from

Conversation

narekhovhannisyan
Copy link
Collaborator

@narekhovhannisyan narekhovhannisyan commented May 17, 2025

Contacts API Integration

Motivation

The contacts and contact lists APIs were not properly integrated into the Mailtrap client. We needed to add these APIs as direct getters on the MailtrapClient class to maintain consistency with the API design and provide easy access to contact management functionality.

Changes

  • Added contacts and contactLists getters to MailtrapClient class
  • Updated tests to use direct getters instead of accessing through general API
  • Fixed test assertions to match axios interceptor response format

How to test

  • Run the test suite to verify all tests pass:
    yarn test
  • Verify contacts API functionality:
    const client = new MailtrapClient({ token: "YOUR_TOKEN", accountId: 123 });
    
    // Create a contact
    const contact = await client.contacts.create({
      email: "[email protected]",
      fields: { name: "Test User" }
    });
    
    // Update a contact
    await client.contacts.update(contact.id, {
      fields: { name: "Updated Name" }
    });
    
    // Delete a contact
    await client.contacts.delete(contact.id);
  • Verify contact lists API functionality:
    const client = new MailtrapClient({ token: "YOUR_TOKEN", accountId: 123 });
    
    // List contact lists
    const lists = await client.contactLists.list();

Summary by CodeRabbit

  • New Features

    • Introduced batch email sending, allowing multiple emails to be sent in a single request.
    • Added support for managing contacts and contact lists, including creating, updating, deleting contacts, and listing contact lists.
  • Documentation

    • Expanded README with new examples for batch sending and contact management.
    • Added example scripts demonstrating batch sending (general, transactional, bulk, sandbox), and contact operations (full lifecycle, listing contact lists).
    • Updated inline documentation for clarity.
  • Tests

    • Added comprehensive tests for batch sending and contact management APIs, including success and error scenarios.
  • Style

    • Improved type definitions for batch sending and contact management to enhance type safety and clarity.

Copy link

coderabbitai bot commented May 17, 2025

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

"""

Walkthrough

This update introduces batch email sending and contact management features to the codebase. It adds new example scripts demonstrating batch sending and contact operations, extends the MailtrapClient API with batchSend method and contacts/contactLists getters, implements new API resource classes, updates type definitions, enhances buffer encoding flexibility, and adds comprehensive tests for these new capabilities. Documentation is updated accordingly.

Changes

File(s) Change Summary
README.md Updated documentation to include new example references for contacts and batch sending APIs, adding a new "Batch Sending API" section with multiple batch send examples.
examples/batch/bulk.ts
examples/batch/sandbox.ts
examples/batch/template.ts
examples/batch/transactional.ts
Added new example scripts demonstrating various batch email sending scenarios: bulk, sandbox, template-based, and transactional batch sends.
examples/contacts/contact-lists.ts
examples/contacts/everything.ts
Added example scripts for listing contact lists and managing the full lifecycle of a contact (create, update, delete).
examples/testing/send-mail.ts Updated comment block to correctly reference the Demo Domain setup documentation.
src/tests/lib/mailtrap-client.test.ts Added tests for batch sending, contacts, and contact lists APIs, covering both success and error scenarios.
src/lib/MailtrapClient.ts Extended MailtrapClient with contacts and contactLists getters returning new API instances, and added a new async batchSend method for batch email operations.
src/lib/api/Contacts.ts Introduced ContactsAPI class grouping contact and contact list API resources, initialized with Axios client and optional account ID.
src/lib/api/resources/contacts/ContactLists.ts Added ContactListsApi class to list contact lists via API with an async list() method.
src/lib/api/resources/contacts/Contacts.ts Added ContactsApi class providing async methods to create, update, and delete contacts via API endpoints.
src/lib/mail-buffer-encoder.ts Updated encodeMailBuffers function signature to accept and return Partial<Mail> instead of full Mail for broader applicability, without changing encoding logic.
src/types/mailtrap.ts Added new types/interfaces supporting batch sending (BatchMail, BatchSendRequest, BatchSendResponse, etc.) and contact management (ContactFields, ContactData).

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant MailtrapClient
    participant API

    User->>MailtrapClient: batchSend(request)
    MailtrapClient->>API: POST /api/batch (with encoded mail batch)
    API-->>MailtrapClient: BatchSendResponse
    MailtrapClient-->>User: Promise<BatchSendResponse>
Loading
sequenceDiagram
    participant User
    participant MailtrapClient
    participant ContactsApi
    participant ContactListsApi
    participant API

    User->>MailtrapClient: contacts.create(data)
    MailtrapClient->>ContactsApi: create(data)
    ContactsApi->>API: POST /accounts/{id}/contacts
    API-->>ContactsApi: Contact created
    ContactsApi-->>MailtrapClient: Contact response
    MailtrapClient-->>User: Promise<Contact>

    User->>MailtrapClient: contactLists.list()
    MailtrapClient->>ContactListsApi: list()
    ContactListsApi->>API: GET /accounts/{id}/contact_lists
    API-->>ContactListsApi: List of contact lists
    ContactListsApi-->>MailtrapClient: List response
    MailtrapClient-->>User: Promise<List>
Loading

Poem

🐇
New features hop in, batch emails take flight,
Contacts now managed with ease and delight.
Examples abound for each API path,
And tests keep it safe from a bug’s little wrath.
With docs now refreshed and types oh-so neat,
This update’s a carrot—so tasty, so sweet!

"""


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@narekhovhannisyan narekhovhannisyan marked this pull request as draft May 17, 2025 18:14
@narekhovhannisyan narekhovhannisyan marked this pull request as ready for review May 17, 2025 18:18
@narekhovhannisyan narekhovhannisyan self-assigned this May 17, 2025
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

🧹 Nitpick comments (6)
src/lib/api/resources/contacts/ContactLists.ts (1)

8-24: ContactListsApi implementation looks good but could be enhanced

The ContactListsApi class has a clean implementation for listing contact lists. However, there are a few enhancements to consider:

  1. The account ID is optional in the constructor but the URL construction doesn't handle the case when it's undefined.
  2. There's no type definition for the response structure.
  3. The API doesn't support pagination which might be needed for accounts with many contact lists.

Consider adding these improvements:

import { AxiosInstance } from "axios";

import CONFIG from "../../../../config";
+ import { ContactListsResponse } from "../../../../../types/mailtrap";

const { CLIENT_SETTINGS } = CONFIG;
const { GENERAL_ENDPOINT } = CLIENT_SETTINGS;

export default class ContactListsApi {
  private client: AxiosInstance;

  private contactListsURL: string;

  constructor(client: AxiosInstance, accountId?: number) {
    this.client = client;
+   if (!accountId) {
+     throw new Error("Account ID is required for ContactListsApi");
+   }
    this.contactListsURL = `${GENERAL_ENDPOINT}/api/accounts/${accountId}/contacts/lists`;
  }

  /**
   * Lists all contact lists for the account.
+  * @returns Promise with contact lists data
   */
-  public async list() {
-    return this.client.get(this.contactListsURL);
+  public async list(params?: { page?: number; per_page?: number }) {
+    return this.client.get<ContactListsResponse>(this.contactListsURL, { params });
  }
}
src/lib/api/resources/contacts/Contacts.ts (1)

21-23: Add return type annotations for better code clarity

Adding explicit return type annotations to the async methods would improve code clarity and provide better TypeScript type checking.

- public async create(data: ContactData) {
+ public async create(data: ContactData): Promise<AxiosResponse> {
    return this.client.post(this.contactsURL, { contact: data });
  }

- public async update(id: number, data: ContactData) {
+ public async update(id: number, data: ContactData): Promise<AxiosResponse> {
    const url = `${this.contactsURL}/${id}`;
    return this.client.patch(url, { contact: data });
  }

- public async delete(id: number) {
+ public async delete(id: number): Promise<AxiosResponse> {
    const url = `${this.contactsURL}/${id}`;
    return this.client.delete(url);
  }

Don't forget to also import the AxiosResponse type:

- import { AxiosInstance } from "axios";
+ import { AxiosInstance, AxiosResponse } from "axios";

Also applies to: 28-31, 36-39

src/lib/MailtrapClient.ts (1)

155-179: Minor clean-ups inside batchSend

  1. preparedRequests still serialises properties that are undefined; removing them trims the payload and matches classic Mailtrap examples.
-    const preparedRequests = request.requests.map((req) => ({
-      to: req.to,
-      cc: req.cc,
-      bcc: req.bcc,
-      custom_variables: req.custom_variables,
-    }));
+    const preparedRequests = request.requests.map(
+      ({ to, cc, bcc, custom_variables }) =>
+        Object.fromEntries(
+          Object.entries({ to, cc, bcc, custom_variables }).filter(
+            ([, v]) => v !== undefined
+          )
+        )
+    );
  1. A short JSDoc block describing the supported shapes (InlineBatchSendBase | TemplateBatchSendBase) would help IDEs and consumers.
src/types/mailtrap.ts (1)

79-83: BaseAddress duplicates Address – keep a single source of truth

BaseAddress and the earlier-declared Address share the exact shape. Re-use Address instead of introducing a parallel type to avoid drift.

-interface BaseAddress {
-  email: string;
-  name?: string;
-}
+type BaseAddress = Address;
src/__tests__/lib/mailtrap-client.test.ts (2)

331-675: Isolate Axios mocks between test suites

The AxiosMockAdapter instance is created only inside the send() suite.
batch sending tests run inside that suite (✓) but later contacts and contact lists suites rely on the same mock without their own beforeAll/afterEach, risking leftover interceptors if additional suites are appended in the future.

A minimal fix is to move the adapter initialisation & reset one level up:

describe("lib/mailtrap-client: ", () => {
-  let mock: AxiosMockAdapter;
+  let mock: AxiosMockAdapter;
+
+  beforeAll(() => {
+    mock = new AxiosMockAdapter(axios);
+  });
+
+  afterEach(() => {
+    mock.reset();
+  });

…and remove the nested beforeAll / afterEach blocks.
This guarantees every test starts with a clean slate.


733-871: Expand coverage & negative cases for Contacts / Lists APIs

Nice positive-path assertions! Two quick wins:

  1. Add a test that accessing client.contacts/client.contactLists without an accountId throws MailtrapError once you implement the guard recommended above.
  2. Verify that fields and list_ids round-trip correctly when present in responses, ensuring JSON serialisation remains symmetric.

Would you like help drafting these extra tests?

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
Cache: Disabled due to data retention organization setting
Knowledge Base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between 9f24dfd and 91b0cde.

📒 Files selected for processing (15)
  • README.md (2 hunks)
  • examples/batch/bulk.ts (1 hunks)
  • examples/batch/sandbox.ts (1 hunks)
  • examples/batch/template.ts (1 hunks)
  • examples/batch/transactional.ts (1 hunks)
  • examples/contacts/contact-lists.ts (1 hunks)
  • examples/contacts/everything.ts (1 hunks)
  • examples/testing/send-mail.ts (1 hunks)
  • src/__tests__/lib/mailtrap-client.test.ts (3 hunks)
  • src/lib/MailtrapClient.ts (3 hunks)
  • src/lib/api/Contacts.ts (1 hunks)
  • src/lib/api/resources/contacts/ContactLists.ts (1 hunks)
  • src/lib/api/resources/contacts/Contacts.ts (1 hunks)
  • src/lib/mail-buffer-encoder.ts (1 hunks)
  • src/types/mailtrap.ts (1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (5)
src/lib/mail-buffer-encoder.ts (1)
src/types/mailtrap.ts (1)
  • Mail (52-52)
src/lib/api/Contacts.ts (2)
src/lib/api/resources/contacts/Contacts.ts (1)
  • ContactsApi (8-40)
src/lib/api/resources/contacts/ContactLists.ts (1)
  • ContactListsApi (8-24)
src/lib/api/resources/contacts/Contacts.ts (1)
src/types/mailtrap.ts (1)
  • ContactData (121-125)
src/__tests__/lib/mailtrap-client.test.ts (1)
src/lib/MailtrapError.ts (1)
  • MailtrapError (1-1)
src/lib/MailtrapClient.ts (4)
src/lib/api/resources/contacts/Contacts.ts (1)
  • ContactsApi (8-40)
src/lib/api/resources/contacts/ContactLists.ts (1)
  • ContactListsApi (8-24)
src/types/mailtrap.ts (2)
  • BatchSendRequest (105-113)
  • BatchSendResponse (74-77)
src/lib/mail-buffer-encoder.ts (1)
  • encodeMailBuffers (8-33)
🪛 LanguageTool
README.md

[grammar] ~61-~61: You’ve repeated a verb. Did you mean to only write one of them?
Context: ...s](examples/general/permissions.ts) - Contacts - [Contact Lists](examples/contacts/contact-lists....

(REPEATED_VERBS)


[grammar] ~74-~74: Possible verb agreement error. Did you mean “sends”? (Some collective nouns can be treated as both singular and plural, so ‘Send’ is not always incorrect.)
Context: ...ails](examples/batch/send-batch.ts) - [Send a batch of transactional emails](exampl...

(COLLECTIVE_NOUN_VERB_AGREEMENT_VBP)

🪛 markdownlint-cli2 (0.17.2)
README.md

61-61: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


62-62: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


73-73: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


74-74: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


75-75: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


76-76: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)

🔇 Additional comments (10)
examples/testing/send-mail.ts (1)

7-7: Documentation enhancement looks good!

Adding a more specific link to the Demo Domain setup section is helpful for users following this example. This improves the documentation quality.

examples/contacts/contact-lists.ts (1)

1-20: Well-structured example for the new contactLists API

This example effectively demonstrates how to use the newly added contactLists API, providing a clear pattern for users to follow. The code showcases:

  • Proper initialization of the client with token and accountId
  • Direct access to the contactLists getter
  • Appropriate error handling

This example aligns well with the PR objective of integrating contact lists APIs into the Mailtrap client as direct getters.

README.md (2)

61-62: Documentation updates for new contact APIs look good

Adding references to the new contact-related examples aligns with the PR objective of integrating contacts and contact lists APIs into the Mailtrap client.

🧰 Tools
🪛 LanguageTool

[grammar] ~61-~61: You’ve repeated a verb. Did you mean to only write one of them?
Context: ...s](examples/general/permissions.ts) - Contacts - [Contact Lists](examples/contacts/contact-lists....

(REPEATED_VERBS)

🪛 markdownlint-cli2 (0.17.2)

61-61: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


62-62: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


71-77: New Batch Sending API section enhances documentation

This new section with examples for batch sending provides valuable user guidance. While batch sending isn't mentioned in the PR objectives, it complements the contacts API integration by providing comprehensive documentation.

🧰 Tools
🪛 LanguageTool

[grammar] ~74-~74: Possible verb agreement error. Did you mean “sends”? (Some collective nouns can be treated as both singular and plural, so ‘Send’ is not always incorrect.)
Context: ...ails](examples/batch/send-batch.ts) - [Send a batch of transactional emails](exampl...

(COLLECTIVE_NOUN_VERB_AGREEMENT_VBP)

🪛 markdownlint-cli2 (0.17.2)

73-73: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


74-74: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


75-75: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


76-76: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)

src/lib/mail-buffer-encoder.ts (1)

8-8: Good improvement to function signature flexibility

Changing from Mail to Partial<Mail> allows the function to handle objects with any subset of Mail properties. This increases the function's reusability and makes it compatible with partial mail objects that might be used in batch operations or contact-related functionality.

The implementation correctly maintains its behavior while supporting this more flexible type.

examples/batch/bulk.ts (1)

1-40: Well-structured batch email example with proper error handling

This example clearly demonstrates how to use the batch sending API for multiple recipients with custom variables. The code structure follows best practices with promise chaining and proper error handling.

examples/batch/template.ts (1)

1-39: Clear template-based batch sending example

The example effectively demonstrates how to use the template-based batch sending capability with different template variables for each recipient. The code is well-structured and follows consistent patterns with other examples.

examples/contacts/everything.ts (1)

1-37: Overall good example demonstrating contact lifecycle management

This example effectively shows the complete contact lifecycle including creation, updating, and deletion. The code is well-structured with appropriate error handling.

Also applies to: 41-44

examples/batch/transactional.ts (1)

1-37: Well-structured example demonstrating batch transactional email sending

This example clearly demonstrates how to use the batch sending API with a well-organized structure including base email configuration, multiple recipient requests with custom variables, and proper promise handling.

examples/batch/sandbox.ts (1)

1-42: Well-implemented sandbox mode example

This example correctly demonstrates how to configure the client for sandbox mode with a test inbox ID and structure a batch send request with custom variables. The code follows good practices for promise handling and clearly shows the configuration differences compared to standard transactional sending.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
README.md (2)

61-62: Remove leading space before list items under "General API"
The list markers for the new "Contacts" and "Contact Lists" entries are indented and trigger markdownlint MD007. They should be aligned at the margin.

-  - [Contacts](examples/contacts/everything.ts)
+ - [Contacts](examples/contacts/everything.ts)

-  - [Contact Lists](examples/contacts/contact-lists.ts)
+ - [Contact Lists](examples/contacts/contact-lists.ts)
🧰 Tools
🪛 LanguageTool

[grammar] ~61-~61: You’ve repeated a verb. Did you mean to only write one of them?
Context: ...s](examples/general/permissions.ts) - Contacts - [Contact Lists](examples/contacts/contact-lists....

(REPEATED_VERBS)

🪛 markdownlint-cli2 (0.17.2)

61-61: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


62-62: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


73-76: Remove leading space before list items under "Batch Sending API"
The new batch sending example entries are indented and trigger markdownlint MD007. Align the list markers at the root margin for consistency.

-  - [Send a batch of emails](examples/batch/send-batch.ts)
+ - [Send a batch of emails](examples/batch/send-batch.ts)

-  - [Send a batch of transactional emails](examples/batch/transactional-batch.ts)
+ - [Send a batch of transactional emails](examples/batch/transactional-batch.ts)

-  - [Send a batch of bulk emails](examples/batch/bulk-batch.ts)
+ - [Send a batch of bulk emails](examples/batch/bulk-batch.ts)

-  - [Send a batch of sandbox emails](examples/batch/sandbox-batch.ts)
+ - [Send a batch of sandbox emails](examples/batch/sandbox-batch.ts)
🧰 Tools
🪛 LanguageTool

[grammar] ~74-~74: Possible verb agreement error. Did you mean “sends”? (Some collective nouns can be treated as both singular and plural, so ‘Send’ is not always incorrect.)
Context: ...ails](examples/batch/send-batch.ts) - [Send a batch of transactional emails](exampl...

(COLLECTIVE_NOUN_VERB_AGREEMENT_VBP)

🪛 markdownlint-cli2 (0.17.2)

73-73: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


74-74: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


75-75: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


76-76: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
Cache: Disabled due to data retention organization setting
Knowledge Base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between 91b0cde and 7f75f82.

📒 Files selected for processing (3)
  • README.md (2 hunks)
  • src/lib/api/Contacts.ts (1 hunks)
  • src/types/mailtrap.ts (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • src/types/mailtrap.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/lib/api/Contacts.ts
🧰 Additional context used
🪛 LanguageTool
README.md

[grammar] ~61-~61: You’ve repeated a verb. Did you mean to only write one of them?
Context: ...s](examples/general/permissions.ts) - Contacts - [Contact Lists](examples/contacts/contact-lists....

(REPEATED_VERBS)


[grammar] ~74-~74: Possible verb agreement error. Did you mean “sends”? (Some collective nouns can be treated as both singular and plural, so ‘Send’ is not always incorrect.)
Context: ...ails](examples/batch/send-batch.ts) - [Send a batch of transactional emails](exampl...

(COLLECTIVE_NOUN_VERB_AGREEMENT_VBP)

🪛 markdownlint-cli2 (0.17.2)
README.md

61-61: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


62-62: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


73-73: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


74-74: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


75-75: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


76-76: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)

@narekhovhannisyan narekhovhannisyan marked this pull request as draft May 17, 2025 18:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant