diff --git a/apps/docs/api-reference/emails/cancel-schedule.mdx b/apps/docs/api-reference/emails/cancel-schedule.mdx new file mode 100644 index 0000000..1ba9588 --- /dev/null +++ b/apps/docs/api-reference/emails/cancel-schedule.mdx @@ -0,0 +1,3 @@ +--- +openapi: post /v1/emails/{emailId}/cancel +--- diff --git a/apps/docs/api-reference/emails/update-schedule.mdx b/apps/docs/api-reference/emails/update-schedule.mdx new file mode 100644 index 0000000..f8b49cb --- /dev/null +++ b/apps/docs/api-reference/emails/update-schedule.mdx @@ -0,0 +1,3 @@ +--- +openapi: patch /v1/emails/{emailId} +--- diff --git a/apps/docs/api-reference/openapi.json b/apps/docs/api-reference/openapi.json index 5441974..2da5288 100644 --- a/apps/docs/api-reference/openapi.json +++ b/apps/docs/api-reference/openapi.json @@ -215,6 +215,7 @@ "status": { "type": "string", "enum": [ + "SCHEDULED", "QUEUED", "SENT", "DELIVERY_DELAYED", @@ -225,7 +226,8 @@ "OPENED", "CLICKED", "COMPLAINED", - "FAILED" + "FAILED", + "CANCELLED" ] }, "createdAt": { @@ -260,6 +262,56 @@ } } } + }, + "patch": { + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 3, + "example": "cuiwqdj74rygf74" + }, + "required": true, + "name": "emailId", + "in": "path" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "scheduledAt": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "scheduledAt" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Retrieve the user", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "emailId": { + "type": "string" + } + } + } + } + } + } + } } }, "/v1/emails": { @@ -352,6 +404,10 @@ "content" ] } + }, + "scheduledAt": { + "type": "string", + "format": "date-time" } }, "required": [ @@ -382,6 +438,39 @@ } } }, + "/v1/emails/{emailId}/cancel": { + "post": { + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 3, + "example": "cuiwqdj74rygf74" + }, + "required": true, + "name": "emailId", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Retrieve the user", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "emailId": { + "type": "string" + } + } + } + } + } + } + } + } + }, "/v1/contactBooks/{contactBookId}/contacts": { "post": { "parameters": [ diff --git a/apps/docs/mint.json b/apps/docs/mint.json index e191b07..30570d6 100644 --- a/apps/docs/mint.json +++ b/apps/docs/mint.json @@ -70,7 +70,9 @@ "group": "Emails", "pages": [ "api-reference/emails/get-email", - "api-reference/emails/send-email" + "api-reference/emails/send-email", + "api-reference/emails/update-schedule", + "api-reference/emails/cancel-schedule" ] }, { diff --git a/packages/sdk/src/email.ts b/packages/sdk/src/email.ts index 240f38e..edef510 100644 --- a/packages/sdk/src/email.ts +++ b/packages/sdk/src/email.ts @@ -25,6 +25,27 @@ type GetEmailResponse = { error: ErrorResponse | null; }; +type UpdateEmailPayload = + paths["/v1/emails/{emailId}"]["patch"]["requestBody"]["content"]["application/json"] & { + react?: React.ReactElement; + }; + +type UpdateEmailResponse = { + data: UpdateEmailResponseSuccess | null; + error: ErrorResponse | null; +}; + +type UpdateEmailResponseSuccess = + paths["/v1/emails/{emailId}"]["patch"]["responses"]["200"]["content"]["application/json"]; + +type CancelEmailResponse = { + data: CancelEmailResponseSuccess | null; + error: ErrorResponse | null; +}; + +type CancelEmailResponseSuccess = + paths["/v1/emails/{emailId}/cancel"]["post"]["responses"]["200"]["content"]["application/json"]; + export class Emails { constructor(private readonly unsend: Unsend) { this.unsend = unsend; @@ -54,4 +75,23 @@ export class Emails { ); return data; } + + async update( + id: string, + payload: UpdateEmailPayload + ): Promise { + const data = await this.unsend.patch( + `/emails/${id}`, + payload + ); + return data; + } + + async cancel(id: string): Promise { + const data = await this.unsend.post( + `/emails/${id}/cancel`, + {} + ); + return data; + } } diff --git a/packages/sdk/types/schema.d.ts b/packages/sdk/types/schema.d.ts index 2d27de8..0b4dacd 100644 --- a/packages/sdk/types/schema.d.ts +++ b/packages/sdk/types/schema.d.ts @@ -73,7 +73,7 @@ export interface paths { emailEvents: ({ emailId: string; /** @enum {string} */ - status: "QUEUED" | "SENT" | "DELIVERY_DELAYED" | "BOUNCED" | "REJECTED" | "RENDERING_FAILURE" | "DELIVERED" | "OPENED" | "CLICKED" | "COMPLAINED" | "FAILED"; + status: "SCHEDULED" | "QUEUED" | "SENT" | "DELIVERY_DELAYED" | "BOUNCED" | "REJECTED" | "RENDERING_FAILURE" | "DELIVERED" | "OPENED" | "CLICKED" | "COMPLAINED" | "FAILED" | "CANCELLED"; createdAt: string; data?: unknown; })[]; @@ -82,6 +82,31 @@ export interface paths { }; }; }; + patch: { + parameters: { + path: { + emailId: string; + }; + }; + requestBody: { + content: { + "application/json": { + /** Format: date-time */ + scheduledAt: string; + }; + }; + }; + responses: { + /** @description Retrieve the user */ + 200: { + content: { + "application/json": { + emailId?: string; + }; + }; + }; + }; + }; }; "/v1/emails": { post: { @@ -100,6 +125,8 @@ export interface paths { filename: string; content: string; }[]; + /** Format: date-time */ + scheduledAt?: string; }; }; }; @@ -115,6 +142,25 @@ export interface paths { }; }; }; + "/v1/emails/{emailId}/cancel": { + post: { + parameters: { + path: { + emailId: string; + }; + }; + responses: { + /** @description Retrieve the user */ + 200: { + content: { + "application/json": { + emailId?: string; + }; + }; + }; + }; + }; + }; "/v1/contactBooks/{contactBookId}/contacts": { post: { parameters: {