@sendclipper/node 0.0.0-stage → 0.1.0
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/CHANGELOG.md +12 -0
- package/LICENSE +21 -0
- package/README.md +208 -2
- package/dist/cjs/core.d.ts +95 -0
- package/dist/cjs/core.d.ts.map +1 -0
- package/dist/cjs/core.js +231 -0
- package/dist/cjs/core.js.map +1 -0
- package/dist/cjs/errors.d.ts +34 -0
- package/dist/cjs/errors.d.ts.map +1 -0
- package/dist/cjs/errors.js +110 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/index.d.ts +52 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +80 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/render.d.ts +14 -0
- package/dist/cjs/render.d.ts.map +1 -0
- package/dist/cjs/render.js +64 -0
- package/dist/cjs/render.js.map +1 -0
- package/dist/cjs/resources/audience.d.ts +51 -0
- package/dist/cjs/resources/audience.d.ts.map +1 -0
- package/dist/cjs/resources/audience.js +105 -0
- package/dist/cjs/resources/audience.js.map +1 -0
- package/dist/cjs/resources/domains.d.ts +22 -0
- package/dist/cjs/resources/domains.d.ts.map +1 -0
- package/dist/cjs/resources/domains.js +45 -0
- package/dist/cjs/resources/domains.js.map +1 -0
- package/dist/cjs/resources/emails.d.ts +34 -0
- package/dist/cjs/resources/emails.d.ts.map +1 -0
- package/dist/cjs/resources/emails.js +67 -0
- package/dist/cjs/resources/emails.js.map +1 -0
- package/dist/cjs/resources/mailboxes.d.ts +27 -0
- package/dist/cjs/resources/mailboxes.d.ts.map +1 -0
- package/dist/cjs/resources/mailboxes.js +65 -0
- package/dist/cjs/resources/mailboxes.js.map +1 -0
- package/dist/cjs/resources/sandboxes.d.ts +54 -0
- package/dist/cjs/resources/sandboxes.d.ts.map +1 -0
- package/dist/cjs/resources/sandboxes.js +107 -0
- package/dist/cjs/resources/sandboxes.js.map +1 -0
- package/dist/cjs/resources/templates.d.ts +58 -0
- package/dist/cjs/resources/templates.d.ts.map +1 -0
- package/dist/cjs/resources/templates.js +97 -0
- package/dist/cjs/resources/templates.js.map +1 -0
- package/dist/cjs/resources/webhooks.d.ts +39 -0
- package/dist/cjs/resources/webhooks.d.ts.map +1 -0
- package/dist/cjs/resources/webhooks.js +75 -0
- package/dist/cjs/resources/webhooks.js.map +1 -0
- package/dist/cjs/resources/workspace.d.ts +21 -0
- package/dist/cjs/resources/workspace.d.ts.map +1 -0
- package/dist/cjs/resources/workspace.js +38 -0
- package/dist/cjs/resources/workspace.js.map +1 -0
- package/dist/cjs/types.d.ts +662 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +9 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/version.d.ts +3 -0
- package/dist/cjs/version.d.ts.map +1 -0
- package/dist/cjs/version.js +6 -0
- package/dist/cjs/version.js.map +1 -0
- package/dist/cjs/webhook-signature.d.ts +38 -0
- package/dist/cjs/webhook-signature.d.ts.map +1 -0
- package/dist/cjs/webhook-signature.js +102 -0
- package/dist/cjs/webhook-signature.js.map +1 -0
- package/dist/esm/core.d.ts +95 -0
- package/dist/esm/core.d.ts.map +1 -0
- package/dist/esm/core.js +225 -0
- package/dist/esm/core.js.map +1 -0
- package/dist/esm/errors.d.ts +34 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/errors.js +102 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/index.d.ts +52 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +65 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/render.d.ts +14 -0
- package/dist/esm/render.d.ts.map +1 -0
- package/dist/esm/render.js +28 -0
- package/dist/esm/render.js.map +1 -0
- package/dist/esm/resources/audience.d.ts +51 -0
- package/dist/esm/resources/audience.d.ts.map +1 -0
- package/dist/esm/resources/audience.js +99 -0
- package/dist/esm/resources/audience.js.map +1 -0
- package/dist/esm/resources/domains.d.ts +22 -0
- package/dist/esm/resources/domains.d.ts.map +1 -0
- package/dist/esm/resources/domains.js +41 -0
- package/dist/esm/resources/domains.js.map +1 -0
- package/dist/esm/resources/emails.d.ts +34 -0
- package/dist/esm/resources/emails.d.ts.map +1 -0
- package/dist/esm/resources/emails.js +62 -0
- package/dist/esm/resources/emails.js.map +1 -0
- package/dist/esm/resources/mailboxes.d.ts +27 -0
- package/dist/esm/resources/mailboxes.d.ts.map +1 -0
- package/dist/esm/resources/mailboxes.js +60 -0
- package/dist/esm/resources/mailboxes.js.map +1 -0
- package/dist/esm/resources/sandboxes.d.ts +54 -0
- package/dist/esm/resources/sandboxes.d.ts.map +1 -0
- package/dist/esm/resources/sandboxes.js +102 -0
- package/dist/esm/resources/sandboxes.js.map +1 -0
- package/dist/esm/resources/templates.d.ts +58 -0
- package/dist/esm/resources/templates.d.ts.map +1 -0
- package/dist/esm/resources/templates.js +91 -0
- package/dist/esm/resources/templates.js.map +1 -0
- package/dist/esm/resources/webhooks.d.ts +39 -0
- package/dist/esm/resources/webhooks.d.ts.map +1 -0
- package/dist/esm/resources/webhooks.js +70 -0
- package/dist/esm/resources/webhooks.js.map +1 -0
- package/dist/esm/resources/workspace.d.ts +21 -0
- package/dist/esm/resources/workspace.d.ts.map +1 -0
- package/dist/esm/resources/workspace.js +32 -0
- package/dist/esm/resources/workspace.js.map +1 -0
- package/dist/esm/types.d.ts +662 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +8 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/version.d.ts +3 -0
- package/dist/esm/version.d.ts.map +1 -0
- package/dist/esm/version.js +3 -0
- package/dist/esm/version.js.map +1 -0
- package/dist/esm/webhook-signature.d.ts +38 -0
- package/dist/esm/webhook-signature.d.ts.map +1 -0
- package/dist/esm/webhook-signature.js +95 -0
- package/dist/esm/webhook-signature.js.map +1 -0
- package/package.json +72 -4
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/** Base class for everything this SDK throws on purpose. */
|
|
2
|
+
export class SendClipperError extends Error {
|
|
3
|
+
constructor(message) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.name = 'SendClipperError';
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* The API answered with a non-2xx status. `code` is the API's own
|
|
10
|
+
* machine-readable reason (`domain_not_verified`, `template_variables_missing`,
|
|
11
|
+
* `rate_limited`, …) and is the field to branch on; `message` is a sentence
|
|
12
|
+
* meant for a person.
|
|
13
|
+
*/
|
|
14
|
+
export class SendClipperApiError extends SendClipperError {
|
|
15
|
+
status;
|
|
16
|
+
code;
|
|
17
|
+
detail;
|
|
18
|
+
headers;
|
|
19
|
+
constructor(status, code, message, detail, headers) {
|
|
20
|
+
super(message);
|
|
21
|
+
this.status = status;
|
|
22
|
+
this.code = code;
|
|
23
|
+
this.detail = detail;
|
|
24
|
+
this.headers = headers;
|
|
25
|
+
this.name = 'SendClipperApiError';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** The request never got an answer: DNS, TLS, a reset socket or the timeout. */
|
|
29
|
+
export class SendClipperConnectionError extends SendClipperError {
|
|
30
|
+
cause;
|
|
31
|
+
constructor(message, cause) {
|
|
32
|
+
super(message);
|
|
33
|
+
this.cause = cause;
|
|
34
|
+
this.name = 'SendClipperConnectionError';
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** `webhooks.verify()` refused a delivery. `reason` says which check failed. */
|
|
38
|
+
export class WebhookVerificationError extends SendClipperError {
|
|
39
|
+
reason;
|
|
40
|
+
constructor(reason, message) {
|
|
41
|
+
super(message);
|
|
42
|
+
this.reason = reason;
|
|
43
|
+
this.name = 'WebhookVerificationError';
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The API answers refusals in two shapes: the house envelope
|
|
48
|
+
* `{ error: { code, message, detail? } }` and Nest's default
|
|
49
|
+
* `{ statusCode, message: string | string[], error }` (request validation).
|
|
50
|
+
*/
|
|
51
|
+
export function toApiError(status, text, headers) {
|
|
52
|
+
let parsed;
|
|
53
|
+
try {
|
|
54
|
+
parsed = JSON.parse(text);
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
parsed = undefined;
|
|
58
|
+
}
|
|
59
|
+
const obj = (parsed && typeof parsed === 'object' ? parsed : {});
|
|
60
|
+
const env = obj.error;
|
|
61
|
+
if (env && typeof env === 'object') {
|
|
62
|
+
const e = env;
|
|
63
|
+
return new SendClipperApiError(status, String(e.code ?? codeForStatus(status)), String(e.message ?? `HTTP ${status}`), e.detail ?? e.details, headers);
|
|
64
|
+
}
|
|
65
|
+
const msg = obj.message;
|
|
66
|
+
if (msg && typeof msg === 'object' && !Array.isArray(msg)) {
|
|
67
|
+
const inner = msg.error;
|
|
68
|
+
if (inner && typeof inner === 'object') {
|
|
69
|
+
const e = inner;
|
|
70
|
+
return new SendClipperApiError(status, String(e.code ?? codeForStatus(status)), String(e.message ?? `HTTP ${status}`), e.detail, headers);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (Array.isArray(msg)) {
|
|
74
|
+
return new SendClipperApiError(status, 'validation_failed', msg.join('; '), msg, headers);
|
|
75
|
+
}
|
|
76
|
+
if (typeof msg === 'string') {
|
|
77
|
+
return new SendClipperApiError(status, codeForStatus(status), msg, undefined, headers);
|
|
78
|
+
}
|
|
79
|
+
const snippet = text.trim().slice(0, 300);
|
|
80
|
+
return new SendClipperApiError(status, codeForStatus(status), snippet || `HTTP ${status}`, undefined, headers);
|
|
81
|
+
}
|
|
82
|
+
function codeForStatus(status) {
|
|
83
|
+
switch (status) {
|
|
84
|
+
case 400:
|
|
85
|
+
return 'bad_request';
|
|
86
|
+
case 401:
|
|
87
|
+
return 'unauthorized';
|
|
88
|
+
case 403:
|
|
89
|
+
return 'forbidden';
|
|
90
|
+
case 404:
|
|
91
|
+
return 'not_found';
|
|
92
|
+
case 409:
|
|
93
|
+
return 'conflict';
|
|
94
|
+
case 413:
|
|
95
|
+
return 'payload_too_large';
|
|
96
|
+
case 429:
|
|
97
|
+
return 'rate_limited';
|
|
98
|
+
default:
|
|
99
|
+
return `http_${status}`;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { type ClientOptions } from './core.js';
|
|
2
|
+
import { Audiences, Contacts, Suppressions } from './resources/audience.js';
|
|
3
|
+
import { Domains } from './resources/domains.js';
|
|
4
|
+
import { Batch, Emails } from './resources/emails.js';
|
|
5
|
+
import { Mailboxes } from './resources/mailboxes.js';
|
|
6
|
+
import { Sandboxes } from './resources/sandboxes.js';
|
|
7
|
+
import { Templates } from './resources/templates.js';
|
|
8
|
+
import { Webhooks } from './resources/webhooks.js';
|
|
9
|
+
import { ApiKeys, Automations, WorkspaceResource } from './resources/workspace.js';
|
|
10
|
+
/**
|
|
11
|
+
* The SendClipper API client.
|
|
12
|
+
*
|
|
13
|
+
* ```ts
|
|
14
|
+
* import { SendClipper } from '@sendclipper/node';
|
|
15
|
+
*
|
|
16
|
+
* const sc = new SendClipper(process.env.SENDCLIPPER_API_KEY);
|
|
17
|
+
* const { data, error } = await sc.emails.send({
|
|
18
|
+
* from: 'hello@acme.io',
|
|
19
|
+
* to: 'ada@lumen.io',
|
|
20
|
+
* subject: 'Hi',
|
|
21
|
+
* html: '<p>Hi</p>',
|
|
22
|
+
* });
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare class SendClipper {
|
|
26
|
+
readonly emails: Emails;
|
|
27
|
+
readonly batch: Batch;
|
|
28
|
+
readonly domains: Domains;
|
|
29
|
+
readonly templates: Templates;
|
|
30
|
+
readonly sandboxes: Sandboxes;
|
|
31
|
+
readonly webhooks: Webhooks;
|
|
32
|
+
readonly contacts: Contacts;
|
|
33
|
+
readonly audiences: Audiences;
|
|
34
|
+
readonly suppressions: Suppressions;
|
|
35
|
+
readonly mailboxes: Mailboxes;
|
|
36
|
+
readonly automations: Automations;
|
|
37
|
+
readonly workspace: WorkspaceResource;
|
|
38
|
+
readonly apiKeys: ApiKeys;
|
|
39
|
+
/** The API origin requests go to, without `/v1`. */
|
|
40
|
+
readonly baseUrl: string;
|
|
41
|
+
constructor(apiKey?: string, options?: Omit<ClientOptions, 'apiKey'>);
|
|
42
|
+
constructor(options?: ClientOptions);
|
|
43
|
+
}
|
|
44
|
+
export default SendClipper;
|
|
45
|
+
export { DEFAULT_BASE_URL } from './core.js';
|
|
46
|
+
export type { ClientOptions, RequestOptions, DownloadedFile, Query, Result, ErrorResponse } from './core.js';
|
|
47
|
+
export { SendClipperError, SendClipperApiError, SendClipperConnectionError, WebhookVerificationError, } from './errors.js';
|
|
48
|
+
export { verifyWebhook, signatureHeader, signPayload, parseSignatureHeader, WEBHOOK_TOLERANCE_SECONDS, } from './webhook-signature.js';
|
|
49
|
+
export type { VerifyWebhookParams, HeaderSource } from './webhook-signature.js';
|
|
50
|
+
export { VERSION } from './version.js';
|
|
51
|
+
export type * from './types.js';
|
|
52
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAEnF;;;;;;;;;;;;;;GAcG;AACH,qBAAa,WAAW;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B,oDAAoD;IACpD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEb,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;gBACxD,OAAO,CAAC,EAAE,aAAa;CAoBpC;AAED,eAAe,WAAW,CAAC;AAE3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC7G,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,aAAa,EACb,eAAe,EACf,WAAW,EACX,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,mBAAmB,YAAY,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { HttpClient } from './core.js';
|
|
2
|
+
import { Audiences, Contacts, Suppressions } from './resources/audience.js';
|
|
3
|
+
import { Domains } from './resources/domains.js';
|
|
4
|
+
import { Batch, Emails } from './resources/emails.js';
|
|
5
|
+
import { Mailboxes } from './resources/mailboxes.js';
|
|
6
|
+
import { Sandboxes } from './resources/sandboxes.js';
|
|
7
|
+
import { Templates } from './resources/templates.js';
|
|
8
|
+
import { Webhooks } from './resources/webhooks.js';
|
|
9
|
+
import { ApiKeys, Automations, WorkspaceResource } from './resources/workspace.js';
|
|
10
|
+
/**
|
|
11
|
+
* The SendClipper API client.
|
|
12
|
+
*
|
|
13
|
+
* ```ts
|
|
14
|
+
* import { SendClipper } from '@sendclipper/node';
|
|
15
|
+
*
|
|
16
|
+
* const sc = new SendClipper(process.env.SENDCLIPPER_API_KEY);
|
|
17
|
+
* const { data, error } = await sc.emails.send({
|
|
18
|
+
* from: 'hello@acme.io',
|
|
19
|
+
* to: 'ada@lumen.io',
|
|
20
|
+
* subject: 'Hi',
|
|
21
|
+
* html: '<p>Hi</p>',
|
|
22
|
+
* });
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export class SendClipper {
|
|
26
|
+
emails;
|
|
27
|
+
batch;
|
|
28
|
+
domains;
|
|
29
|
+
templates;
|
|
30
|
+
sandboxes;
|
|
31
|
+
webhooks;
|
|
32
|
+
contacts;
|
|
33
|
+
audiences;
|
|
34
|
+
suppressions;
|
|
35
|
+
mailboxes;
|
|
36
|
+
automations;
|
|
37
|
+
workspace;
|
|
38
|
+
apiKeys;
|
|
39
|
+
/** The API origin requests go to, without `/v1`. */
|
|
40
|
+
baseUrl;
|
|
41
|
+
constructor(keyOrOptions, options = {}) {
|
|
42
|
+
const opts = typeof keyOrOptions === 'string' ? { ...options, apiKey: keyOrOptions } : { ...(keyOrOptions ?? {}) };
|
|
43
|
+
const http = new HttpClient(opts);
|
|
44
|
+
this.baseUrl = http.baseUrl;
|
|
45
|
+
this.emails = new Emails(http);
|
|
46
|
+
this.batch = new Batch(http);
|
|
47
|
+
this.domains = new Domains(http);
|
|
48
|
+
this.templates = new Templates(http);
|
|
49
|
+
this.sandboxes = new Sandboxes(http);
|
|
50
|
+
this.webhooks = new Webhooks(http);
|
|
51
|
+
this.contacts = new Contacts(http);
|
|
52
|
+
this.audiences = new Audiences(http);
|
|
53
|
+
this.suppressions = new Suppressions(http);
|
|
54
|
+
this.mailboxes = new Mailboxes(http);
|
|
55
|
+
this.automations = new Automations(http);
|
|
56
|
+
this.workspace = new WorkspaceResource(http);
|
|
57
|
+
this.apiKeys = new ApiKeys(http);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export default SendClipper;
|
|
61
|
+
export { DEFAULT_BASE_URL } from './core.js';
|
|
62
|
+
export { SendClipperError, SendClipperApiError, SendClipperConnectionError, WebhookVerificationError, } from './errors.js';
|
|
63
|
+
export { verifyWebhook, signatureHeader, signPayload, parseSignatureHeader, WEBHOOK_TOLERANCE_SECONDS, } from './webhook-signature.js';
|
|
64
|
+
export { VERSION } from './version.js';
|
|
65
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `react` support, the way Resend does it: render a React Email component to
|
|
3
|
+
* HTML (and a plain-text alternative) with `@react-email/render`, an OPTIONAL
|
|
4
|
+
* peer dependency loaded only when a message actually carries `react`.
|
|
5
|
+
*/
|
|
6
|
+
/** A React element. Typed loosely so the SDK needs no React types. */
|
|
7
|
+
export type ReactNodeLike = unknown;
|
|
8
|
+
/** Replace `react` with the `html` (and, if absent, `text`) it renders to. */
|
|
9
|
+
export declare function withRenderedReact<T extends {
|
|
10
|
+
react?: ReactNodeLike;
|
|
11
|
+
html?: string;
|
|
12
|
+
text?: string;
|
|
13
|
+
}>(params: T): Promise<Omit<T, 'react'>>;
|
|
14
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/render.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,sEAAsE;AACtE,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC;AAsBpC,8EAA8E;AAC9E,wBAAsB,iBAAiB,CAAC,CAAC,SAAS;IAAE,KAAK,CAAC,EAAE,aAAa,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EACvG,MAAM,EAAE,CAAC,GACR,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAO3B"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `react` support, the way Resend does it: render a React Email component to
|
|
3
|
+
* HTML (and a plain-text alternative) with `@react-email/render`, an OPTIONAL
|
|
4
|
+
* peer dependency loaded only when a message actually carries `react`.
|
|
5
|
+
*/
|
|
6
|
+
let cached;
|
|
7
|
+
function loadRenderer() {
|
|
8
|
+
// A variable specifier keeps bundlers and tsc from resolving the module
|
|
9
|
+
// when nobody uses `react`.
|
|
10
|
+
const specifier = '@react-email/render';
|
|
11
|
+
cached ??= import(specifier).catch((err) => {
|
|
12
|
+
cached = undefined;
|
|
13
|
+
throw new Error('Sending with `react` needs @react-email/render. Install it: npm i @react-email/render ' +
|
|
14
|
+
`(${err.message})`);
|
|
15
|
+
});
|
|
16
|
+
return cached;
|
|
17
|
+
}
|
|
18
|
+
/** Replace `react` with the `html` (and, if absent, `text`) it renders to. */
|
|
19
|
+
export async function withRenderedReact(params) {
|
|
20
|
+
if (params.react === undefined || params.react === null)
|
|
21
|
+
return params;
|
|
22
|
+
const { react, ...rest } = params;
|
|
23
|
+
const { render } = await loadRenderer();
|
|
24
|
+
const html = await render(react);
|
|
25
|
+
const text = rest.text ?? (await render(react, { plainText: true }));
|
|
26
|
+
return { ...rest, html, text };
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/render.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,IAAI,MAAyC,CAAC;AAE9C,SAAS,YAAY;IACnB,wEAAwE;IACxE,4BAA4B;IAC5B,MAAM,SAAS,GAAG,qBAAqB,CAAC;IACxC,MAAM,KAAM,MAAM,CAAC,SAAS,CAA2B,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;QAC7E,MAAM,GAAG,SAAS,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,wFAAwF;YACtF,IAAK,GAAa,CAAC,OAAO,GAAG,CAChC,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAS;IAET,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IACvE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IAClC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,YAAY,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,MAAM,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACrE,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,EAAsB,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { HttpClient, RequestOptions, Result } from '../core.js';
|
|
2
|
+
import type { Audience, Contact, ContactList, CreateContactParams, ImportContactsParams, ListContactsParams, ListSuppressionsParams, Suppression, SuppressionList } from '../types.js';
|
|
3
|
+
export declare class Contacts {
|
|
4
|
+
private readonly http;
|
|
5
|
+
constructor(http: HttpClient);
|
|
6
|
+
list(params?: ListContactsParams, options?: RequestOptions): Promise<Result<ContactList>>;
|
|
7
|
+
iterate(params?: Omit<ListContactsParams, 'page'>, options?: RequestOptions): AsyncGenerator<Contact>;
|
|
8
|
+
create(params: CreateContactParams, options?: RequestOptions): Promise<Result<Contact>>;
|
|
9
|
+
/** Import a CSV or vCard file. Importing never suppresses anyone. */
|
|
10
|
+
import(params: ImportContactsParams, options?: RequestOptions): Promise<Result<Record<string, unknown>>>;
|
|
11
|
+
/** What an import would do, without importing. */
|
|
12
|
+
importPreview(params: Pick<ImportContactsParams, 'file' | 'filename'>, options?: RequestOptions): Promise<Result<Record<string, unknown>>>;
|
|
13
|
+
/** Every contact as CSV (re-importable) or vCard 4.0. */
|
|
14
|
+
export(params?: {
|
|
15
|
+
format?: 'csv' | 'vcf';
|
|
16
|
+
audience?: string;
|
|
17
|
+
}, options?: RequestOptions): Promise<Result<string>>;
|
|
18
|
+
}
|
|
19
|
+
export declare class Audiences {
|
|
20
|
+
private readonly http;
|
|
21
|
+
constructor(http: HttpClient);
|
|
22
|
+
list(options?: RequestOptions): Promise<Result<{
|
|
23
|
+
audiences: Audience[];
|
|
24
|
+
totalContacts: number;
|
|
25
|
+
}>>;
|
|
26
|
+
}
|
|
27
|
+
export declare class Suppressions {
|
|
28
|
+
private readonly http;
|
|
29
|
+
constructor(http: HttpClient);
|
|
30
|
+
list(params?: ListSuppressionsParams, options?: RequestOptions): Promise<Result<SuppressionList>>;
|
|
31
|
+
iterate(params?: Omit<ListSuppressionsParams, 'cursor'>, options?: RequestOptions): AsyncGenerator<Suppression>;
|
|
32
|
+
/**
|
|
33
|
+
* Stop all mail to an address (reason `manual`). `created` is `false` when
|
|
34
|
+
* the address was already suppressed; `row` is the entry either way.
|
|
35
|
+
*/
|
|
36
|
+
create(params: {
|
|
37
|
+
email: string;
|
|
38
|
+
note?: string;
|
|
39
|
+
}, options?: RequestOptions): Promise<Result<{
|
|
40
|
+
created: boolean;
|
|
41
|
+
row: Suppression | null;
|
|
42
|
+
}>>;
|
|
43
|
+
/**
|
|
44
|
+
* Lift a suppression. `reason` (10+ characters) is recorded. Complaint and
|
|
45
|
+
* provider suppressions cannot be removed (`suppression_not_removable`).
|
|
46
|
+
*/
|
|
47
|
+
remove(id: string, reason: string, options?: RequestOptions): Promise<Result<Record<string, unknown>>>;
|
|
48
|
+
/** The list as CSV. */
|
|
49
|
+
export(params?: Omit<ListSuppressionsParams, 'cursor' | 'limit'>, options?: RequestOptions): Promise<Result<string>>;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=audience.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audience.d.ts","sourceRoot":"","sources":["../../../src/resources/audience.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { seg, unwrap } from '../core.js';
|
|
2
|
+
export class Contacts {
|
|
3
|
+
http;
|
|
4
|
+
constructor(http) {
|
|
5
|
+
this.http = http;
|
|
6
|
+
}
|
|
7
|
+
list(params = {}, options = {}) {
|
|
8
|
+
return this.http.call({ method: 'GET', path: '/contacts', query: { ...params }, ...options });
|
|
9
|
+
}
|
|
10
|
+
async *iterate(params = {}, options = {}) {
|
|
11
|
+
const pageSize = params.pageSize ?? 200;
|
|
12
|
+
for (let page = 1;; page++) {
|
|
13
|
+
const res = unwrap(await this.list({ ...params, page, pageSize }, options));
|
|
14
|
+
yield* res.items;
|
|
15
|
+
if (page >= res.totalPages || res.items.length === 0)
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
create(params, options = {}) {
|
|
20
|
+
return this.http.call({ method: 'POST', path: '/contacts', body: params, ...options });
|
|
21
|
+
}
|
|
22
|
+
/** Import a CSV or vCard file. Importing never suppresses anyone. */
|
|
23
|
+
import(params, options = {}) {
|
|
24
|
+
return this.http.call({ method: 'POST', path: '/contacts/import', form: importForm(params), ...options });
|
|
25
|
+
}
|
|
26
|
+
/** What an import would do, without importing. */
|
|
27
|
+
importPreview(params, options = {}) {
|
|
28
|
+
return this.http.call({ method: 'POST', path: '/contacts/import/preview', form: importForm(params), ...options });
|
|
29
|
+
}
|
|
30
|
+
/** Every contact as CSV (re-importable) or vCard 4.0. */
|
|
31
|
+
export(params = {}, options = {}) {
|
|
32
|
+
return this.http.call({ method: 'GET', path: '/contacts/export', query: { ...params }, as: 'text', ...options });
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export class Audiences {
|
|
36
|
+
http;
|
|
37
|
+
constructor(http) {
|
|
38
|
+
this.http = http;
|
|
39
|
+
}
|
|
40
|
+
list(options = {}) {
|
|
41
|
+
return this.http.call({ method: 'GET', path: '/audiences', ...options });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export class Suppressions {
|
|
45
|
+
http;
|
|
46
|
+
constructor(http) {
|
|
47
|
+
this.http = http;
|
|
48
|
+
}
|
|
49
|
+
list(params = {}, options = {}) {
|
|
50
|
+
return this.http.call({ method: 'GET', path: '/suppressions', query: { ...params }, ...options });
|
|
51
|
+
}
|
|
52
|
+
async *iterate(params = {}, options = {}) {
|
|
53
|
+
let cursor;
|
|
54
|
+
for (;;) {
|
|
55
|
+
const res = unwrap(await this.list({ ...params, cursor }, options));
|
|
56
|
+
yield* res.data;
|
|
57
|
+
if (!res.page.hasMore || !res.page.cursor)
|
|
58
|
+
return;
|
|
59
|
+
cursor = res.page.cursor;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Stop all mail to an address (reason `manual`). `created` is `false` when
|
|
64
|
+
* the address was already suppressed; `row` is the entry either way.
|
|
65
|
+
*/
|
|
66
|
+
create(params, options = {}) {
|
|
67
|
+
return this.http.call({ method: 'POST', path: '/suppressions', body: params, ...options });
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Lift a suppression. `reason` (10+ characters) is recorded. Complaint and
|
|
71
|
+
* provider suppressions cannot be removed (`suppression_not_removable`).
|
|
72
|
+
*/
|
|
73
|
+
remove(id, reason, options = {}) {
|
|
74
|
+
return this.http.call({ method: 'DELETE', path: `/suppressions/${seg(id)}`, body: { reason }, ...options });
|
|
75
|
+
}
|
|
76
|
+
/** The list as CSV. */
|
|
77
|
+
export(params = {}, options = {}) {
|
|
78
|
+
return this.http.call({ method: 'GET', path: '/suppressions/export', query: { ...params }, as: 'text', ...options });
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function importForm(params) {
|
|
82
|
+
const form = new FormData();
|
|
83
|
+
const name = params.filename ?? 'contacts.csv';
|
|
84
|
+
const type = /\.vcf$/i.test(name) ? 'text/vcard' : 'text/csv';
|
|
85
|
+
const bytes = typeof params.file === 'string' ? params.file : new Uint8Array(params.file);
|
|
86
|
+
form.append('file', new Blob([bytes], { type }), name);
|
|
87
|
+
if (params.audienceId)
|
|
88
|
+
form.append('audienceId', params.audienceId);
|
|
89
|
+
if (params.newAudience)
|
|
90
|
+
form.append('newAudience', params.newAudience);
|
|
91
|
+
if (params.createAudiences !== undefined)
|
|
92
|
+
form.append('createAudiences', String(params.createAudiences));
|
|
93
|
+
if (params.onDuplicate)
|
|
94
|
+
form.append('onDuplicate', params.onDuplicate);
|
|
95
|
+
if (params.mapping)
|
|
96
|
+
form.append('mapping', JSON.stringify(params.mapping));
|
|
97
|
+
return form;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=audience.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audience.js","sourceRoot":"","sources":["../../../src/resources/audience.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { HttpClient, RequestOptions, Result } from '../core.js';
|
|
2
|
+
import type { CreateDomainParams, Domain, DomainRecords, DomainRegion } from '../types.js';
|
|
3
|
+
export declare class Domains {
|
|
4
|
+
private readonly http;
|
|
5
|
+
constructor(http: HttpClient);
|
|
6
|
+
list(options?: RequestOptions): Promise<Result<Domain[]>>;
|
|
7
|
+
/** Register a sending domain. Next: `records()`, publish them, then `verify()`. */
|
|
8
|
+
create(params: CreateDomainParams, options?: RequestOptions): Promise<Result<Domain>>;
|
|
9
|
+
/** The DNS records to publish, each with its current status. */
|
|
10
|
+
records(id: string, options?: RequestOptions): Promise<Result<DomainRecords>>;
|
|
11
|
+
/** Check DNS now instead of waiting for the background check. */
|
|
12
|
+
verify(id: string, options?: RequestOptions): Promise<Result<Domain>>;
|
|
13
|
+
/** Start receiving mail on this domain. Adds receiving records; never blocks sending. */
|
|
14
|
+
enableReceiving(id: string, options?: RequestOptions): Promise<Result<Domain>>;
|
|
15
|
+
disableReceiving(id: string, options?: RequestOptions): Promise<Result<Domain>>;
|
|
16
|
+
/** Move a domain to another region. Refused (`region_immutable`) once it holds messages. */
|
|
17
|
+
setRegion(id: string, region: DomainRegion, options?: RequestOptions): Promise<Result<Domain>>;
|
|
18
|
+
/** What deleting the domain would take with it. */
|
|
19
|
+
deletionPreview(id: string, options?: RequestOptions): Promise<Result<Record<string, unknown>>>;
|
|
20
|
+
remove(id: string, options?: RequestOptions): Promise<Result<void>>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=domains.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domains.d.ts","sourceRoot":"","sources":["../../../src/resources/domains.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAErE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3F,qBAAa,OAAO;IACN,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAE7C,IAAI,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAI7D,mFAAmF;IACnF,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAIzF,gEAAgE;IAChE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAIjF,iEAAiE;IACjE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAIzE,yFAAyF;IACzF,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAIlF,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAInF,4FAA4F;IAC5F,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAIlG,mDAAmD;IACnD,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAInG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAGxE"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { seg } from '../core.js';
|
|
2
|
+
export class Domains {
|
|
3
|
+
http;
|
|
4
|
+
constructor(http) {
|
|
5
|
+
this.http = http;
|
|
6
|
+
}
|
|
7
|
+
list(options = {}) {
|
|
8
|
+
return this.http.call({ method: 'GET', path: '/domains', ...options });
|
|
9
|
+
}
|
|
10
|
+
/** Register a sending domain. Next: `records()`, publish them, then `verify()`. */
|
|
11
|
+
create(params, options = {}) {
|
|
12
|
+
return this.http.call({ method: 'POST', path: '/domains', body: params, ...options });
|
|
13
|
+
}
|
|
14
|
+
/** The DNS records to publish, each with its current status. */
|
|
15
|
+
records(id, options = {}) {
|
|
16
|
+
return this.http.call({ method: 'GET', path: `/domains/${seg(id)}/records`, ...options });
|
|
17
|
+
}
|
|
18
|
+
/** Check DNS now instead of waiting for the background check. */
|
|
19
|
+
verify(id, options = {}) {
|
|
20
|
+
return this.http.call({ method: 'POST', path: `/domains/${seg(id)}/verify`, ...options });
|
|
21
|
+
}
|
|
22
|
+
/** Start receiving mail on this domain. Adds receiving records; never blocks sending. */
|
|
23
|
+
enableReceiving(id, options = {}) {
|
|
24
|
+
return this.http.call({ method: 'POST', path: `/domains/${seg(id)}/receiving`, ...options });
|
|
25
|
+
}
|
|
26
|
+
disableReceiving(id, options = {}) {
|
|
27
|
+
return this.http.call({ method: 'DELETE', path: `/domains/${seg(id)}/receiving`, ...options });
|
|
28
|
+
}
|
|
29
|
+
/** Move a domain to another region. Refused (`region_immutable`) once it holds messages. */
|
|
30
|
+
setRegion(id, region, options = {}) {
|
|
31
|
+
return this.http.call({ method: 'PATCH', path: `/domains/${seg(id)}/region`, body: { region }, ...options });
|
|
32
|
+
}
|
|
33
|
+
/** What deleting the domain would take with it. */
|
|
34
|
+
deletionPreview(id, options = {}) {
|
|
35
|
+
return this.http.call({ method: 'GET', path: `/domains/${seg(id)}/deletion`, ...options });
|
|
36
|
+
}
|
|
37
|
+
remove(id, options = {}) {
|
|
38
|
+
return this.http.call({ method: 'DELETE', path: `/domains/${seg(id)}`, ...options });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=domains.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domains.js","sourceRoot":"","sources":["../../../src/resources/domains.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAGjC,MAAM,OAAO,OAAO;IACW;IAA7B,YAA6B,IAAgB;QAAhB,SAAI,GAAJ,IAAI,CAAY;IAAG,CAAC;IAEjD,IAAI,CAAC,UAA0B,EAAE;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,mFAAmF;IACnF,MAAM,CAAC,MAA0B,EAAE,UAA0B,EAAE;QAC7D,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,gEAAgE;IAChE,OAAO,CAAC,EAAU,EAAE,UAA0B,EAAE;QAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,GAAG,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,iEAAiE;IACjE,MAAM,CAAC,EAAU,EAAE,UAA0B,EAAE;QAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,yFAAyF;IACzF,eAAe,CAAC,EAAU,EAAE,UAA0B,EAAE;QACtD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAC/F,CAAC;IAED,gBAAgB,CAAC,EAAU,EAAE,UAA0B,EAAE;QACvD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,4FAA4F;IAC5F,SAAS,CAAC,EAAU,EAAE,MAAoB,EAAE,UAA0B,EAAE;QACtE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAC/G,CAAC;IAED,mDAAmD;IACnD,eAAe,CAAC,EAAU,EAAE,UAA0B,EAAE;QACtD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,MAAM,CAAC,EAAU,EAAE,UAA0B,EAAE;QAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACvF,CAAC;CACF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { HttpClient, RequestOptions, Result } from '../core.js';
|
|
2
|
+
import type { EmailDetail, EmailList, EmailRow, EmailStats, ListEmailsParams, SendBatchResponse, SendEmailParams, SentEmail } from '../types.js';
|
|
3
|
+
export declare class Emails {
|
|
4
|
+
private readonly http;
|
|
5
|
+
constructor(http: HttpClient);
|
|
6
|
+
/**
|
|
7
|
+
* Send one message. Resolves once SendClipper accepted it (status `queued`);
|
|
8
|
+
* delivery is reported later through `emails.get()` and webhooks.
|
|
9
|
+
*
|
|
10
|
+
* Every call carries an `Idempotency-Key`, so the SDK's own retries never
|
|
11
|
+
* send twice. Pass `idempotencyKey` yourself to make YOUR retries safe too.
|
|
12
|
+
*/
|
|
13
|
+
send(params: SendEmailParams, options?: RequestOptions): Promise<Result<SentEmail>>;
|
|
14
|
+
/** Same as `batch.send()`. */
|
|
15
|
+
sendBatch(emails: SendEmailParams[], options?: RequestOptions): Promise<Result<SendBatchResponse>>;
|
|
16
|
+
/** One message with its body and event timeline. */
|
|
17
|
+
get(id: string, options?: RequestOptions): Promise<Result<EmailDetail>>;
|
|
18
|
+
/** One page of the sent-mail log, newest first. */
|
|
19
|
+
list(params?: ListEmailsParams, options?: RequestOptions): Promise<Result<EmailList>>;
|
|
20
|
+
/** Every message matching `params`, page after page. */
|
|
21
|
+
iterate(params?: Omit<ListEmailsParams, 'page'>, options?: RequestOptions): AsyncGenerator<EmailRow>;
|
|
22
|
+
/** Counts per status. */
|
|
23
|
+
stats(options?: RequestOptions): Promise<Result<EmailStats>>;
|
|
24
|
+
}
|
|
25
|
+
export declare class Batch {
|
|
26
|
+
private readonly http;
|
|
27
|
+
constructor(http: HttpClient);
|
|
28
|
+
/**
|
|
29
|
+
* Up to 500 messages in one request (one recipient each). Every item is
|
|
30
|
+
* accepted or refused on its own; a refused item costs its siblings nothing.
|
|
31
|
+
*/
|
|
32
|
+
send(emails: SendEmailParams[], options?: RequestOptions): Promise<Result<SendBatchResponse>>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=emails.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emails.d.ts","sourceRoot":"","sources":["../../../src/resources/emails.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGrE,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,SAAS,EACV,MAAM,aAAa,CAAC;AAErB,qBAAa,MAAM;IACL,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAE7C;;;;;;OAMG;IACG,IAAI,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAI7F,8BAA8B;IAC9B,SAAS,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAItG,oDAAoD;IACpD,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAI3E,mDAAmD;IACnD,IAAI,CAAC,MAAM,GAAE,gBAAqB,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAI7F,wDAAwD;IACjD,OAAO,CAAC,MAAM,GAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,cAAc,CAAC,QAAQ,CAAC;IASnH,yBAAyB;IACzB,KAAK,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;CAGjE;AAED,qBAAa,KAAK;IACJ,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAE7C;;;OAGG;IACH,IAAI,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;CAGlG"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { seg, unwrap } from '../core.js';
|
|
2
|
+
import { withRenderedReact } from '../render.js';
|
|
3
|
+
export class Emails {
|
|
4
|
+
http;
|
|
5
|
+
constructor(http) {
|
|
6
|
+
this.http = http;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Send one message. Resolves once SendClipper accepted it (status `queued`);
|
|
10
|
+
* delivery is reported later through `emails.get()` and webhooks.
|
|
11
|
+
*
|
|
12
|
+
* Every call carries an `Idempotency-Key`, so the SDK's own retries never
|
|
13
|
+
* send twice. Pass `idempotencyKey` yourself to make YOUR retries safe too.
|
|
14
|
+
*/
|
|
15
|
+
async send(params, options = {}) {
|
|
16
|
+
return this.http.call({ method: 'POST', path: '/emails', body: await withRenderedReact(params), ...options });
|
|
17
|
+
}
|
|
18
|
+
/** Same as `batch.send()`. */
|
|
19
|
+
sendBatch(emails, options = {}) {
|
|
20
|
+
return sendBatch(this.http, emails, options);
|
|
21
|
+
}
|
|
22
|
+
/** One message with its body and event timeline. */
|
|
23
|
+
get(id, options = {}) {
|
|
24
|
+
return this.http.call({ method: 'GET', path: `/emails/${seg(id)}`, ...options });
|
|
25
|
+
}
|
|
26
|
+
/** One page of the sent-mail log, newest first. */
|
|
27
|
+
list(params = {}, options = {}) {
|
|
28
|
+
return this.http.call({ method: 'GET', path: '/emails', query: { ...params }, ...options });
|
|
29
|
+
}
|
|
30
|
+
/** Every message matching `params`, page after page. */
|
|
31
|
+
async *iterate(params = {}, options = {}) {
|
|
32
|
+
const pageSize = params.pageSize ?? 100;
|
|
33
|
+
for (let page = 1;; page++) {
|
|
34
|
+
const res = unwrap(await this.list({ ...params, page, pageSize }, options));
|
|
35
|
+
yield* res.items;
|
|
36
|
+
if (res.items.length < pageSize || page * pageSize >= res.total)
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/** Counts per status. */
|
|
41
|
+
stats(options = {}) {
|
|
42
|
+
return this.http.call({ method: 'GET', path: '/emails/stats/summary', ...options });
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export class Batch {
|
|
46
|
+
http;
|
|
47
|
+
constructor(http) {
|
|
48
|
+
this.http = http;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Up to 500 messages in one request (one recipient each). Every item is
|
|
52
|
+
* accepted or refused on its own; a refused item costs its siblings nothing.
|
|
53
|
+
*/
|
|
54
|
+
send(emails, options = {}) {
|
|
55
|
+
return sendBatch(this.http, emails, options);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async function sendBatch(http, emails, options) {
|
|
59
|
+
const rendered = await Promise.all(emails.map((e) => withRenderedReact(e)));
|
|
60
|
+
return http.call({ method: 'POST', path: '/emails/batch', body: { emails: rendered }, ...options });
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=emails.js.map
|