diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 2083f82..564dbdb 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,6 +1,6 @@ { "name": "unsend", - "version": "1.0.0", + "version": "1.1.0", "description": "", "main": "./dist/index.js", "module": "./dist/index.mjs", diff --git a/packages/sdk/src/contact.ts b/packages/sdk/src/contact.ts index e69de29..5a9c49d 100644 --- a/packages/sdk/src/contact.ts +++ b/packages/sdk/src/contact.ts @@ -0,0 +1,74 @@ +import { Unsend } from "./unsend"; +import { paths } from "../types/schema"; +import { ErrorResponse } from "../types"; + +type CreateContactPayload = + paths["/v1/contactBooks/{contactBookId}/contacts"]["post"]["requestBody"]["content"]["application/json"]; + +type CreateContactResponse = { + data: CreateContactResponseSuccess | null; + error: ErrorResponse | null; +}; + +type CreateContactResponseSuccess = + paths["/v1/contactBooks/{contactBookId}/contacts"]["post"]["responses"]["200"]["content"]["application/json"]; + +type GetContactResponseSuccess = + paths["/v1/contactBooks/{contactBookId}/contacts/{contactId}"]["get"]["responses"]["200"]["content"]["application/json"]; + +type GetContactResponse = { + data: GetContactResponseSuccess | null; + error: ErrorResponse | null; +}; + +type UpdateContactPayload = + paths["/v1/contactBooks/{contactBookId}/contacts/{contactId}"]["patch"]["requestBody"]["content"]["application/json"]; + +type UpdateContactResponseSuccess = + paths["/v1/contactBooks/{contactBookId}/contacts/{contactId}"]["patch"]["responses"]["200"]["content"]["application/json"]; + +type UpdateContactResponse = { + data: UpdateContactResponseSuccess | null; + error: ErrorResponse | null; +}; + +export class Contacts { + constructor(private readonly unsend: Unsend) { + this.unsend = unsend; + } + + async create( + contactBookId: string, + payload: CreateContactPayload + ): Promise { + const data = await this.unsend.post( + `/contactBooks/${contactBookId}/contacts`, + payload + ); + + return data; + } + + async get( + contactBookId: string, + contactId: string + ): Promise { + const data = await this.unsend.get( + `/contactBooks/${contactBookId}/contacts/${contactId}` + ); + return data; + } + + async update( + contactBookId: string, + contactId: string, + payload: UpdateContactPayload + ): Promise { + const data = await this.unsend.patch( + `/contactBooks/${contactBookId}/contacts/${contactId}`, + payload + ); + + return data; + } +} diff --git a/packages/sdk/src/unsend.ts b/packages/sdk/src/unsend.ts index 67d4cda..0005b0e 100644 --- a/packages/sdk/src/unsend.ts +++ b/packages/sdk/src/unsend.ts @@ -1,4 +1,5 @@ import { ErrorResponse } from "../types"; +import { Contacts } from "./contact"; import { Emails } from "./email"; const defaultBaseUrl = "https://app.unsend.dev"; @@ -14,6 +15,7 @@ export class Unsend { // readonly domains = new Domains(this); readonly emails = new Emails(this); + readonly contacts = new Contacts(this); url = baseUrl; constructor(