emailsdone 0.1.10

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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) EmailsDone
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,121 @@
1
+ # EmailsDone for Node / TypeScript
2
+
3
+ EmailsDone.dev — Production-ready app email for developers who do not want an email project.
4
+
5
+ Add password resets, verification, notifications and billing emails without building templates, writing HTML or wiring email infrastructure.
6
+
7
+ Emails. Done.
8
+
9
+ ## Install
10
+
11
+ ```bash
12
+ npm install emailsdone
13
+ ```
14
+
15
+ ## Run the example
16
+
17
+ To run the interactive console example from this repository:
18
+
19
+ ```bash
20
+ cd libraries/node/Examples
21
+ npm install
22
+ npm run start
23
+ ```
24
+
25
+ The example builds the local SDK, prompts for your API key, validates it with `getQuota()`, and then lets you send templates or check recipient status from a menu.
26
+
27
+ ## API key
28
+
29
+ Store your EmailsDone API key in server-side configuration. Environment variables are the simplest starting point:
30
+
31
+ ```bash
32
+ EMAILSDONE_API_KEY=your_api_key_here
33
+ ```
34
+
35
+ Do not put this key in browser JavaScript, mobile apps, public frontend configuration, source control, or client-side logs.
36
+
37
+ ## Send an email
38
+
39
+ ```ts
40
+ import { EmailsDoneClient } from "emailsdone";
41
+
42
+ const emailsDone = EmailsDoneClient.fromApiKey(process.env.EMAILSDONE_API_KEY!);
43
+
44
+ await emailsDone.authentication().welcome("https://app.example.com/action").send("user@example.com");
45
+ ```
46
+
47
+ Templates with required fields expose those fields as typed parameters where that keeps the call obvious:
48
+
49
+ ```ts
50
+ await emailsDone
51
+ .authentication()
52
+ .loginCode(
53
+ "123456"
54
+ )
55
+ .send("user@example.com");
56
+ ```
57
+
58
+ Optional template fields and send controls use options objects:
59
+
60
+ ```ts
61
+ await emailsDone
62
+ .authentication()
63
+ .loginCode(
64
+ "123456",
65
+ {
66
+ footerNote: "If you did not request this code, you can safely ignore this email.",
67
+ fromName: "Acme App",
68
+ idempotencyKey: "email-user-123-v1",
69
+ }
70
+ )
71
+ .send("user@example.com");
72
+ ```
73
+
74
+ ## Recipient status
75
+
76
+ ```ts
77
+ const recipientStatus = await emailsDone
78
+ .recipient("user@example.com")
79
+ .getStatus();
80
+
81
+ if (recipientStatus.recipient?.subscription?.status !== "subscribed") {
82
+ await emailsDone
83
+ .recipient("user@example.com")
84
+ .resubscribe();
85
+ }
86
+ ```
87
+
88
+ ## Quota
89
+
90
+ ```ts
91
+ const quota = await emailsDone.getQuota();
92
+ ```
93
+
94
+ ## Idempotency
95
+
96
+ Use an idempotency key for password resets, billing emails, and other flows where your app or worker may retry the same send.
97
+
98
+ ```ts
99
+ await emailsDone
100
+ .billing()
101
+ .paymentFailed({
102
+ actionButtonUrl: "https://app.example.com/action",
103
+ idempotencyKey: `payment-failed-${invoiceId}`,
104
+ })
105
+ .send("user@example.com");
106
+ ```
107
+
108
+ ## Fluent template groups
109
+
110
+ The generated client mirrors EmailsDone template categories and recipient resource actions:
111
+
112
+ - `await emailsDone.getQuota()`
113
+ - `emailsDone.recipient(email).getStatus()`
114
+ - `emailsDone.recipient(email).resubscribe()`
115
+ - `emailsDone.authentication()`
116
+ - `emailsDone.billing()`
117
+ - `emailsDone.developer()`
118
+ - `emailsDone.notifications()`
119
+ - `emailsDone.team()`
120
+
121
+ Each method sends a named EmailsDone template through `/v1/send`.
@@ -0,0 +1,25 @@
1
+ import { AuthenticationTemplates, BillingTemplates, DeveloperTemplates, NotificationsTemplates, TeamTemplates, RecipientClient } from "./templates.js";
2
+ import type { EmailsDoneClientOptions, GetQuotaResponse, GetRecipientStatusOptions, GetRecipientStatusResponse, ResubscribeRecipientResponse, SendEmailResponse, SendTemplatePayload } from "./types.js";
3
+ export declare class EmailsDoneClient {
4
+ private readonly authenticationTemplates;
5
+ private readonly billingTemplates;
6
+ private readonly developerTemplates;
7
+ private readonly notificationsTemplates;
8
+ private readonly teamTemplates;
9
+ private readonly apiKey;
10
+ private readonly apiBaseUrl;
11
+ constructor(options: EmailsDoneClientOptions);
12
+ static fromApiKey(apiKey: string, options?: Omit<EmailsDoneClientOptions, "apiKey">): EmailsDoneClient;
13
+ authentication(): AuthenticationTemplates;
14
+ billing(): BillingTemplates;
15
+ developer(): DeveloperTemplates;
16
+ notifications(): NotificationsTemplates;
17
+ team(): TeamTemplates;
18
+ recipient(email: string): RecipientClient;
19
+ getQuota(): Promise<GetQuotaResponse>;
20
+ resubscribeRecipient(email: string): Promise<ResubscribeRecipientResponse>;
21
+ getRecipientStatus(email: string, options?: GetRecipientStatusOptions): Promise<GetRecipientStatusResponse>;
22
+ internalSendTemplate(payload: SendTemplatePayload): Promise<SendEmailResponse>;
23
+ private requestJson;
24
+ }
25
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,aAAa,EACb,eAAe,EAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EACV,uBAAuB,EACvB,gBAAgB,EAChB,yBAAyB,EACzB,0BAA0B,EAE1B,4BAA4B,EAC5B,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAEpB,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA0B;IAClE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IACxD,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAyB;IAChE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,OAAO,EAAE,uBAAuB;IAc5C,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,IAAI,CAAC,uBAAuB,EAAE,QAAQ,CAAM,GAAG,gBAAgB;IAI1G,cAAc,IAAI,uBAAuB;IAIzC,OAAO,IAAI,gBAAgB;IAI3B,SAAS,IAAI,kBAAkB;IAI/B,aAAa,IAAI,sBAAsB;IAIvC,IAAI,IAAI,aAAa;IAKrB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe;IAKnC,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAIrC,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,4BAA4B,CAAC;IAS1E,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,yBAA8B,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAS/G,oBAAoB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC;YAyBtE,WAAW;CAiC1B"}
@@ -0,0 +1,138 @@
1
+ import { EmailsDoneError } from "./errors.js";
2
+ import { AuthenticationTemplates, BillingTemplates, DeveloperTemplates, NotificationsTemplates, TeamTemplates, RecipientClient, } from "./templates.js";
3
+ export class EmailsDoneClient {
4
+ authenticationTemplates;
5
+ billingTemplates;
6
+ developerTemplates;
7
+ notificationsTemplates;
8
+ teamTemplates;
9
+ apiKey;
10
+ apiBaseUrl;
11
+ constructor(options) {
12
+ if (!options.apiKey || !options.apiKey.trim()) {
13
+ throw new Error("An EmailsDone API key is required. Store it in server-side configuration, not frontend code.");
14
+ }
15
+ this.apiKey = options.apiKey;
16
+ this.apiBaseUrl = (options.apiBaseUrl ?? "https://api.emailsdone.dev").replace(/\/+$/, "");
17
+ this.authenticationTemplates = new AuthenticationTemplates(this);
18
+ this.billingTemplates = new BillingTemplates(this);
19
+ this.developerTemplates = new DeveloperTemplates(this);
20
+ this.notificationsTemplates = new NotificationsTemplates(this);
21
+ this.teamTemplates = new TeamTemplates(this);
22
+ }
23
+ static fromApiKey(apiKey, options = {}) {
24
+ return new EmailsDoneClient({ ...options, apiKey });
25
+ }
26
+ authentication() {
27
+ return this.authenticationTemplates;
28
+ }
29
+ billing() {
30
+ return this.billingTemplates;
31
+ }
32
+ developer() {
33
+ return this.developerTemplates;
34
+ }
35
+ notifications() {
36
+ return this.notificationsTemplates;
37
+ }
38
+ team() {
39
+ return this.teamTemplates;
40
+ }
41
+ recipient(email) {
42
+ requireRecipientEmail(email);
43
+ return new RecipientClient(this, email);
44
+ }
45
+ async getQuota() {
46
+ return this.requestJson("GET", "/v1/quota");
47
+ }
48
+ async resubscribeRecipient(email) {
49
+ requireRecipientEmail(email);
50
+ return this.requestJson("POST", "/v1/recipients/resubscribe", {
51
+ email,
52
+ scope: "app_notifications",
53
+ });
54
+ }
55
+ async getRecipientStatus(email, options = {}) {
56
+ requireRecipientEmail(email);
57
+ return this.requestJson("POST", "/v1/recipients/status", {
58
+ email,
59
+ ...(options.limit === undefined ? {} : { limit: options.limit }),
60
+ });
61
+ }
62
+ async internalSendTemplate(payload) {
63
+ if (!payload.templateId || !payload.templateId.trim()) {
64
+ throw new Error("Template id is required.");
65
+ }
66
+ if (!payload.to || !payload.to.trim()) {
67
+ throw new Error("Recipient email address is required.");
68
+ }
69
+ const body = {
70
+ templateId: payload.templateId,
71
+ to: payload.to,
72
+ data: payload.data,
73
+ };
74
+ addIfSet(body, "templateVersion", payload.templateVersion);
75
+ addIfSet(body, "from", payload.from);
76
+ addIfSet(body, "fromName", payload.fromName);
77
+ addIfSet(body, "replyTo", payload.replyTo);
78
+ const headers = requestHeadersWithIdempotency(payload);
79
+ return this.requestJson("POST", "/v1/send", body, headers);
80
+ }
81
+ async requestJson(method, path, body, extraHeaders = {}) {
82
+ const headers = {
83
+ Authorization: `Bearer ${this.apiKey}`,
84
+ Accept: "application/json",
85
+ ...extraHeaders,
86
+ };
87
+ if (body) {
88
+ headers["Content-Type"] = "application/json";
89
+ }
90
+ const response = await fetch(`${this.apiBaseUrl}${path}`, {
91
+ method,
92
+ headers,
93
+ ...(body ? { body: JSON.stringify(body) } : {}),
94
+ });
95
+ const responseBody = await response.text();
96
+ if (!response.ok) {
97
+ throw errorFromResponse(response.status, responseBody);
98
+ }
99
+ try {
100
+ return JSON.parse(responseBody);
101
+ }
102
+ catch (error) {
103
+ throw new EmailsDoneError(response.status, "invalid_response", "EmailsDone returned invalid JSON.", responseBody);
104
+ }
105
+ }
106
+ }
107
+ function addIfSet(target, key, value) {
108
+ if (value?.trim()) {
109
+ target[key] = value;
110
+ }
111
+ }
112
+ function requestHeadersWithIdempotency(options) {
113
+ const headers = {
114
+ Accept: "application/json",
115
+ "Content-Type": "application/json",
116
+ };
117
+ if (options.idempotencyKey?.trim()) {
118
+ headers["Idempotency-Key"] = options.idempotencyKey;
119
+ }
120
+ return headers;
121
+ }
122
+ function requireRecipientEmail(email) {
123
+ if (!email || !email.trim()) {
124
+ throw new Error("Recipient email address is required.");
125
+ }
126
+ }
127
+ function errorFromResponse(statusCode, responseBody) {
128
+ try {
129
+ const parsed = JSON.parse(responseBody);
130
+ const errorCode = parsed.error || "api_error";
131
+ const message = parsed.message || errorCode;
132
+ return new EmailsDoneError(statusCode, errorCode, message, responseBody);
133
+ }
134
+ catch {
135
+ return new EmailsDoneError(statusCode, "api_error", "EmailsDone returned an error response.", responseBody);
136
+ }
137
+ }
138
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare class EmailsDoneError extends Error {
2
+ readonly statusCode: number;
3
+ readonly errorCode: string;
4
+ readonly responseBody: string;
5
+ constructor(statusCode: number, errorCode: string, message: string, responseBody: string);
6
+ }
7
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;gBAElB,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;CAOzF"}
@@ -0,0 +1,13 @@
1
+ export class EmailsDoneError extends Error {
2
+ statusCode;
3
+ errorCode;
4
+ responseBody;
5
+ constructor(statusCode, errorCode, message, responseBody) {
6
+ super(message);
7
+ this.name = "EmailsDoneError";
8
+ this.statusCode = statusCode;
9
+ this.errorCode = errorCode;
10
+ this.responseBody = responseBody;
11
+ }
12
+ }
13
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,UAAU,CAAS;IACnB,SAAS,CAAS;IAClB,YAAY,CAAS;IAE9B,YAAY,UAAkB,EAAE,SAAiB,EAAE,OAAe,EAAE,YAAoB;QACtF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ export { EmailsDoneClient } from "./client.js";
2
+ export { EmailsDoneError } from "./errors.js";
3
+ export { AuthenticationTemplates, BillingTemplates, DeveloperTemplates, NotificationsTemplates, PendingTemplateRequest, RecipientClient, TeamTemplates, } from "./templates.js";
4
+ export type { EmailsDoneClientOptions, GetQuotaResponse, GetRecipientStatusOptions, GetRecipientStatusResponse, ResubscribeRecipientResponse, SendEmailResponse, SendOptions, TemplateOptions, } from "./types.js";
5
+ export type * from "./types.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,EACf,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,uBAAuB,EACvB,gBAAgB,EAChB,yBAAyB,EACzB,0BAA0B,EAC1B,4BAA4B,EAC5B,iBAAiB,EACjB,WAAW,EACX,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,mBAAmB,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { EmailsDoneClient } from "./client.js";
2
+ export { EmailsDoneError } from "./errors.js";
3
+ export { AuthenticationTemplates, BillingTemplates, DeveloperTemplates, NotificationsTemplates, PendingTemplateRequest, RecipientClient, TeamTemplates, } from "./templates.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,EACf,aAAa,GACd,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,87 @@
1
+ import type { EmailsDoneClient } from "./client.js";
2
+ import type { GetRecipientStatusOptions, GetRecipientStatusResponse, ResubscribeRecipientResponse, SendEmailResponse, SendOptions, SendTemplatePayload, AccountLockedOptions, EmailChangedOptions, LoginCodeOptions, MagicLinkOptions, MfaDisabledOptions, MfaEnabledOptions, NewDeviceLoginOptions, PasswordChangedOptions, PasswordResetOptions, SuspiciousLoginOptions, VerifyEmailOptions, WelcomeOptions, InvoiceOptions, InvoiceOverdueOptions, PaymentFailedOptions, PaymentSucceededOptions, RefundIssuedOptions, SubscriptionCancelledOptions, SubscriptionPausedOptions, SubscriptionRenewedOptions, SubscriptionStartedOptions, TrialEndingOptions, TrialStartedOptions, UsageThresholdOptions, ApiKeyCreatedOptions, ApiKeyRotatedOptions, CreditsExhaustedOptions, CreditsLowOptions, AnnouncementOptions, ApprovalApprovedOptions, ApprovalNeededOptions, ApprovalRejectedOptions, DigestOptions, ExportReadyOptions, GenerationCompleteOptions, ImportCompleteOptions, JobCompleteOptions, NotificationAlertOptions, NotificationInfoOptions, NotificationSuccessOptions, NotificationWarningOptions, ProcessingFailedOptions, QueuedRequestReadyOptions, ReminderOptions, ReportReadyOptions, UploadCompleteOptions, InvitationAcceptedOptions, InvitedToWorkspaceOptions, RoleChangedOptions, TeamMemberAddedOptions, TeamMemberRemovedOptions } from "./types.js";
3
+ export declare class PendingTemplateRequest {
4
+ private readonly client;
5
+ private readonly payload;
6
+ constructor(client: EmailsDoneClient, payload: SendTemplatePayload);
7
+ send(to: string, options?: SendOptions): Promise<SendEmailResponse>;
8
+ }
9
+ export declare class RecipientClient {
10
+ private readonly client;
11
+ private readonly email;
12
+ constructor(client: EmailsDoneClient, email: string);
13
+ getStatus(options?: GetRecipientStatusOptions): Promise<GetRecipientStatusResponse>;
14
+ resubscribe(): Promise<ResubscribeRecipientResponse>;
15
+ }
16
+ export declare class AuthenticationTemplates {
17
+ private readonly client;
18
+ constructor(client: EmailsDoneClient);
19
+ accountLocked(options?: AccountLockedOptions): PendingTemplateRequest;
20
+ emailChanged(options?: EmailChangedOptions): PendingTemplateRequest;
21
+ loginCode(code: string, options?: LoginCodeOptions): PendingTemplateRequest;
22
+ magicLink(url: string, options?: MagicLinkOptions): PendingTemplateRequest;
23
+ mfaDisabled(options?: MfaDisabledOptions): PendingTemplateRequest;
24
+ mfaEnabled(options?: MfaEnabledOptions): PendingTemplateRequest;
25
+ newDeviceLogin(options?: NewDeviceLoginOptions): PendingTemplateRequest;
26
+ passwordChanged(options?: PasswordChangedOptions): PendingTemplateRequest;
27
+ passwordReset(resetUrl: string, options?: PasswordResetOptions): PendingTemplateRequest;
28
+ suspiciousLogin(options?: SuspiciousLoginOptions): PendingTemplateRequest;
29
+ verifyEmail(verificationUrl: string, options?: VerifyEmailOptions): PendingTemplateRequest;
30
+ welcome(actionUrl: string, options?: WelcomeOptions): PendingTemplateRequest;
31
+ }
32
+ export declare class BillingTemplates {
33
+ private readonly client;
34
+ constructor(client: EmailsDoneClient);
35
+ invoice(options: InvoiceOptions): PendingTemplateRequest;
36
+ invoiceOverdue(options: InvoiceOverdueOptions): PendingTemplateRequest;
37
+ paymentFailed(options: PaymentFailedOptions): PendingTemplateRequest;
38
+ paymentSucceeded(options?: PaymentSucceededOptions): PendingTemplateRequest;
39
+ refundIssued(options?: RefundIssuedOptions): PendingTemplateRequest;
40
+ subscriptionCancelled(options?: SubscriptionCancelledOptions): PendingTemplateRequest;
41
+ subscriptionPaused(options?: SubscriptionPausedOptions): PendingTemplateRequest;
42
+ subscriptionRenewed(options?: SubscriptionRenewedOptions): PendingTemplateRequest;
43
+ subscriptionStarted(options?: SubscriptionStartedOptions): PendingTemplateRequest;
44
+ trialEnding(options: TrialEndingOptions): PendingTemplateRequest;
45
+ trialStarted(options?: TrialStartedOptions): PendingTemplateRequest;
46
+ usageThreshold(options: UsageThresholdOptions): PendingTemplateRequest;
47
+ }
48
+ export declare class DeveloperTemplates {
49
+ private readonly client;
50
+ constructor(client: EmailsDoneClient);
51
+ apiKeyCreated(options?: ApiKeyCreatedOptions): PendingTemplateRequest;
52
+ apiKeyRotated(options?: ApiKeyRotatedOptions): PendingTemplateRequest;
53
+ creditsExhausted(options: CreditsExhaustedOptions): PendingTemplateRequest;
54
+ creditsLow(options?: CreditsLowOptions): PendingTemplateRequest;
55
+ }
56
+ export declare class NotificationsTemplates {
57
+ private readonly client;
58
+ constructor(client: EmailsDoneClient);
59
+ announcement(options: AnnouncementOptions): PendingTemplateRequest;
60
+ approvalApproved(options: ApprovalApprovedOptions): PendingTemplateRequest;
61
+ approvalNeeded(options: ApprovalNeededOptions): PendingTemplateRequest;
62
+ approvalRejected(options: ApprovalRejectedOptions): PendingTemplateRequest;
63
+ digest(options?: DigestOptions): PendingTemplateRequest;
64
+ exportReady(options: ExportReadyOptions): PendingTemplateRequest;
65
+ generationComplete(options: GenerationCompleteOptions): PendingTemplateRequest;
66
+ importComplete(options?: ImportCompleteOptions): PendingTemplateRequest;
67
+ jobComplete(options?: JobCompleteOptions): PendingTemplateRequest;
68
+ notificationAlert(options: NotificationAlertOptions): PendingTemplateRequest;
69
+ notificationInfo(options: NotificationInfoOptions): PendingTemplateRequest;
70
+ notificationSuccess(options: NotificationSuccessOptions): PendingTemplateRequest;
71
+ notificationWarning(options: NotificationWarningOptions): PendingTemplateRequest;
72
+ processingFailed(options?: ProcessingFailedOptions): PendingTemplateRequest;
73
+ queuedRequestReady(options: QueuedRequestReadyOptions): PendingTemplateRequest;
74
+ reminder(options: ReminderOptions): PendingTemplateRequest;
75
+ reportReady(options: ReportReadyOptions): PendingTemplateRequest;
76
+ uploadComplete(options?: UploadCompleteOptions): PendingTemplateRequest;
77
+ }
78
+ export declare class TeamTemplates {
79
+ private readonly client;
80
+ constructor(client: EmailsDoneClient);
81
+ invitationAccepted(options?: InvitationAcceptedOptions): PendingTemplateRequest;
82
+ invitedToWorkspace(options: InvitedToWorkspaceOptions): PendingTemplateRequest;
83
+ roleChanged(options?: RoleChangedOptions): PendingTemplateRequest;
84
+ teamMemberAdded(options?: TeamMemberAddedOptions): PendingTemplateRequest;
85
+ teamMemberRemoved(options?: TeamMemberRemovedOptions): PendingTemplateRequest;
86
+ }
87
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"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"}