@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.
Files changed (125) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +21 -0
  3. package/README.md +208 -2
  4. package/dist/cjs/core.d.ts +95 -0
  5. package/dist/cjs/core.d.ts.map +1 -0
  6. package/dist/cjs/core.js +231 -0
  7. package/dist/cjs/core.js.map +1 -0
  8. package/dist/cjs/errors.d.ts +34 -0
  9. package/dist/cjs/errors.d.ts.map +1 -0
  10. package/dist/cjs/errors.js +110 -0
  11. package/dist/cjs/errors.js.map +1 -0
  12. package/dist/cjs/index.d.ts +52 -0
  13. package/dist/cjs/index.d.ts.map +1 -0
  14. package/dist/cjs/index.js +80 -0
  15. package/dist/cjs/index.js.map +1 -0
  16. package/dist/cjs/package.json +3 -0
  17. package/dist/cjs/render.d.ts +14 -0
  18. package/dist/cjs/render.d.ts.map +1 -0
  19. package/dist/cjs/render.js +64 -0
  20. package/dist/cjs/render.js.map +1 -0
  21. package/dist/cjs/resources/audience.d.ts +51 -0
  22. package/dist/cjs/resources/audience.d.ts.map +1 -0
  23. package/dist/cjs/resources/audience.js +105 -0
  24. package/dist/cjs/resources/audience.js.map +1 -0
  25. package/dist/cjs/resources/domains.d.ts +22 -0
  26. package/dist/cjs/resources/domains.d.ts.map +1 -0
  27. package/dist/cjs/resources/domains.js +45 -0
  28. package/dist/cjs/resources/domains.js.map +1 -0
  29. package/dist/cjs/resources/emails.d.ts +34 -0
  30. package/dist/cjs/resources/emails.d.ts.map +1 -0
  31. package/dist/cjs/resources/emails.js +67 -0
  32. package/dist/cjs/resources/emails.js.map +1 -0
  33. package/dist/cjs/resources/mailboxes.d.ts +27 -0
  34. package/dist/cjs/resources/mailboxes.d.ts.map +1 -0
  35. package/dist/cjs/resources/mailboxes.js +65 -0
  36. package/dist/cjs/resources/mailboxes.js.map +1 -0
  37. package/dist/cjs/resources/sandboxes.d.ts +54 -0
  38. package/dist/cjs/resources/sandboxes.d.ts.map +1 -0
  39. package/dist/cjs/resources/sandboxes.js +107 -0
  40. package/dist/cjs/resources/sandboxes.js.map +1 -0
  41. package/dist/cjs/resources/templates.d.ts +58 -0
  42. package/dist/cjs/resources/templates.d.ts.map +1 -0
  43. package/dist/cjs/resources/templates.js +97 -0
  44. package/dist/cjs/resources/templates.js.map +1 -0
  45. package/dist/cjs/resources/webhooks.d.ts +39 -0
  46. package/dist/cjs/resources/webhooks.d.ts.map +1 -0
  47. package/dist/cjs/resources/webhooks.js +75 -0
  48. package/dist/cjs/resources/webhooks.js.map +1 -0
  49. package/dist/cjs/resources/workspace.d.ts +21 -0
  50. package/dist/cjs/resources/workspace.d.ts.map +1 -0
  51. package/dist/cjs/resources/workspace.js +38 -0
  52. package/dist/cjs/resources/workspace.js.map +1 -0
  53. package/dist/cjs/types.d.ts +662 -0
  54. package/dist/cjs/types.d.ts.map +1 -0
  55. package/dist/cjs/types.js +9 -0
  56. package/dist/cjs/types.js.map +1 -0
  57. package/dist/cjs/version.d.ts +3 -0
  58. package/dist/cjs/version.d.ts.map +1 -0
  59. package/dist/cjs/version.js +6 -0
  60. package/dist/cjs/version.js.map +1 -0
  61. package/dist/cjs/webhook-signature.d.ts +38 -0
  62. package/dist/cjs/webhook-signature.d.ts.map +1 -0
  63. package/dist/cjs/webhook-signature.js +102 -0
  64. package/dist/cjs/webhook-signature.js.map +1 -0
  65. package/dist/esm/core.d.ts +95 -0
  66. package/dist/esm/core.d.ts.map +1 -0
  67. package/dist/esm/core.js +225 -0
  68. package/dist/esm/core.js.map +1 -0
  69. package/dist/esm/errors.d.ts +34 -0
  70. package/dist/esm/errors.d.ts.map +1 -0
  71. package/dist/esm/errors.js +102 -0
  72. package/dist/esm/errors.js.map +1 -0
  73. package/dist/esm/index.d.ts +52 -0
  74. package/dist/esm/index.d.ts.map +1 -0
  75. package/dist/esm/index.js +65 -0
  76. package/dist/esm/index.js.map +1 -0
  77. package/dist/esm/render.d.ts +14 -0
  78. package/dist/esm/render.d.ts.map +1 -0
  79. package/dist/esm/render.js +28 -0
  80. package/dist/esm/render.js.map +1 -0
  81. package/dist/esm/resources/audience.d.ts +51 -0
  82. package/dist/esm/resources/audience.d.ts.map +1 -0
  83. package/dist/esm/resources/audience.js +99 -0
  84. package/dist/esm/resources/audience.js.map +1 -0
  85. package/dist/esm/resources/domains.d.ts +22 -0
  86. package/dist/esm/resources/domains.d.ts.map +1 -0
  87. package/dist/esm/resources/domains.js +41 -0
  88. package/dist/esm/resources/domains.js.map +1 -0
  89. package/dist/esm/resources/emails.d.ts +34 -0
  90. package/dist/esm/resources/emails.d.ts.map +1 -0
  91. package/dist/esm/resources/emails.js +62 -0
  92. package/dist/esm/resources/emails.js.map +1 -0
  93. package/dist/esm/resources/mailboxes.d.ts +27 -0
  94. package/dist/esm/resources/mailboxes.d.ts.map +1 -0
  95. package/dist/esm/resources/mailboxes.js +60 -0
  96. package/dist/esm/resources/mailboxes.js.map +1 -0
  97. package/dist/esm/resources/sandboxes.d.ts +54 -0
  98. package/dist/esm/resources/sandboxes.d.ts.map +1 -0
  99. package/dist/esm/resources/sandboxes.js +102 -0
  100. package/dist/esm/resources/sandboxes.js.map +1 -0
  101. package/dist/esm/resources/templates.d.ts +58 -0
  102. package/dist/esm/resources/templates.d.ts.map +1 -0
  103. package/dist/esm/resources/templates.js +91 -0
  104. package/dist/esm/resources/templates.js.map +1 -0
  105. package/dist/esm/resources/webhooks.d.ts +39 -0
  106. package/dist/esm/resources/webhooks.d.ts.map +1 -0
  107. package/dist/esm/resources/webhooks.js +70 -0
  108. package/dist/esm/resources/webhooks.js.map +1 -0
  109. package/dist/esm/resources/workspace.d.ts +21 -0
  110. package/dist/esm/resources/workspace.d.ts.map +1 -0
  111. package/dist/esm/resources/workspace.js +32 -0
  112. package/dist/esm/resources/workspace.js.map +1 -0
  113. package/dist/esm/types.d.ts +662 -0
  114. package/dist/esm/types.d.ts.map +1 -0
  115. package/dist/esm/types.js +8 -0
  116. package/dist/esm/types.js.map +1 -0
  117. package/dist/esm/version.d.ts +3 -0
  118. package/dist/esm/version.d.ts.map +1 -0
  119. package/dist/esm/version.js +3 -0
  120. package/dist/esm/version.js.map +1 -0
  121. package/dist/esm/webhook-signature.d.ts +38 -0
  122. package/dist/esm/webhook-signature.d.ts.map +1 -0
  123. package/dist/esm/webhook-signature.js +95 -0
  124. package/dist/esm/webhook-signature.js.map +1 -0
  125. package/package.json +72 -4
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebhookVerificationError = exports.SendClipperConnectionError = exports.SendClipperApiError = exports.SendClipperError = void 0;
4
+ exports.toApiError = toApiError;
5
+ /** Base class for everything this SDK throws on purpose. */
6
+ class SendClipperError extends Error {
7
+ constructor(message) {
8
+ super(message);
9
+ this.name = 'SendClipperError';
10
+ }
11
+ }
12
+ exports.SendClipperError = SendClipperError;
13
+ /**
14
+ * The API answered with a non-2xx status. `code` is the API's own
15
+ * machine-readable reason (`domain_not_verified`, `template_variables_missing`,
16
+ * `rate_limited`, …) and is the field to branch on; `message` is a sentence
17
+ * meant for a person.
18
+ */
19
+ class SendClipperApiError extends SendClipperError {
20
+ status;
21
+ code;
22
+ detail;
23
+ headers;
24
+ constructor(status, code, message, detail, headers) {
25
+ super(message);
26
+ this.status = status;
27
+ this.code = code;
28
+ this.detail = detail;
29
+ this.headers = headers;
30
+ this.name = 'SendClipperApiError';
31
+ }
32
+ }
33
+ exports.SendClipperApiError = SendClipperApiError;
34
+ /** The request never got an answer: DNS, TLS, a reset socket or the timeout. */
35
+ class SendClipperConnectionError extends SendClipperError {
36
+ cause;
37
+ constructor(message, cause) {
38
+ super(message);
39
+ this.cause = cause;
40
+ this.name = 'SendClipperConnectionError';
41
+ }
42
+ }
43
+ exports.SendClipperConnectionError = SendClipperConnectionError;
44
+ /** `webhooks.verify()` refused a delivery. `reason` says which check failed. */
45
+ class WebhookVerificationError extends SendClipperError {
46
+ reason;
47
+ constructor(reason, message) {
48
+ super(message);
49
+ this.reason = reason;
50
+ this.name = 'WebhookVerificationError';
51
+ }
52
+ }
53
+ exports.WebhookVerificationError = WebhookVerificationError;
54
+ /**
55
+ * The API answers refusals in two shapes: the house envelope
56
+ * `{ error: { code, message, detail? } }` and Nest's default
57
+ * `{ statusCode, message: string | string[], error }` (request validation).
58
+ */
59
+ function toApiError(status, text, headers) {
60
+ let parsed;
61
+ try {
62
+ parsed = JSON.parse(text);
63
+ }
64
+ catch {
65
+ parsed = undefined;
66
+ }
67
+ const obj = (parsed && typeof parsed === 'object' ? parsed : {});
68
+ const env = obj.error;
69
+ if (env && typeof env === 'object') {
70
+ const e = env;
71
+ return new SendClipperApiError(status, String(e.code ?? codeForStatus(status)), String(e.message ?? `HTTP ${status}`), e.detail ?? e.details, headers);
72
+ }
73
+ const msg = obj.message;
74
+ if (msg && typeof msg === 'object' && !Array.isArray(msg)) {
75
+ const inner = msg.error;
76
+ if (inner && typeof inner === 'object') {
77
+ const e = inner;
78
+ return new SendClipperApiError(status, String(e.code ?? codeForStatus(status)), String(e.message ?? `HTTP ${status}`), e.detail, headers);
79
+ }
80
+ }
81
+ if (Array.isArray(msg)) {
82
+ return new SendClipperApiError(status, 'validation_failed', msg.join('; '), msg, headers);
83
+ }
84
+ if (typeof msg === 'string') {
85
+ return new SendClipperApiError(status, codeForStatus(status), msg, undefined, headers);
86
+ }
87
+ const snippet = text.trim().slice(0, 300);
88
+ return new SendClipperApiError(status, codeForStatus(status), snippet || `HTTP ${status}`, undefined, headers);
89
+ }
90
+ function codeForStatus(status) {
91
+ switch (status) {
92
+ case 400:
93
+ return 'bad_request';
94
+ case 401:
95
+ return 'unauthorized';
96
+ case 403:
97
+ return 'forbidden';
98
+ case 404:
99
+ return 'not_found';
100
+ case 409:
101
+ return 'conflict';
102
+ case 413:
103
+ return 'payload_too_large';
104
+ case 429:
105
+ return 'rate_limited';
106
+ default:
107
+ return `http_${status}`;
108
+ }
109
+ }
110
+ //# 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,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VERSION = exports.WEBHOOK_TOLERANCE_SECONDS = exports.parseSignatureHeader = exports.signPayload = exports.signatureHeader = exports.verifyWebhook = exports.WebhookVerificationError = exports.SendClipperConnectionError = exports.SendClipperApiError = exports.SendClipperError = exports.DEFAULT_BASE_URL = exports.SendClipper = void 0;
4
+ const core_js_1 = require("./core.js");
5
+ const audience_js_1 = require("./resources/audience.js");
6
+ const domains_js_1 = require("./resources/domains.js");
7
+ const emails_js_1 = require("./resources/emails.js");
8
+ const mailboxes_js_1 = require("./resources/mailboxes.js");
9
+ const sandboxes_js_1 = require("./resources/sandboxes.js");
10
+ const templates_js_1 = require("./resources/templates.js");
11
+ const webhooks_js_1 = require("./resources/webhooks.js");
12
+ const workspace_js_1 = require("./resources/workspace.js");
13
+ /**
14
+ * The SendClipper API client.
15
+ *
16
+ * ```ts
17
+ * import { SendClipper } from '@sendclipper/node';
18
+ *
19
+ * const sc = new SendClipper(process.env.SENDCLIPPER_API_KEY);
20
+ * const { data, error } = await sc.emails.send({
21
+ * from: 'hello@acme.io',
22
+ * to: 'ada@lumen.io',
23
+ * subject: 'Hi',
24
+ * html: '<p>Hi</p>',
25
+ * });
26
+ * ```
27
+ */
28
+ class SendClipper {
29
+ emails;
30
+ batch;
31
+ domains;
32
+ templates;
33
+ sandboxes;
34
+ webhooks;
35
+ contacts;
36
+ audiences;
37
+ suppressions;
38
+ mailboxes;
39
+ automations;
40
+ workspace;
41
+ apiKeys;
42
+ /** The API origin requests go to, without `/v1`. */
43
+ baseUrl;
44
+ constructor(keyOrOptions, options = {}) {
45
+ const opts = typeof keyOrOptions === 'string' ? { ...options, apiKey: keyOrOptions } : { ...(keyOrOptions ?? {}) };
46
+ const http = new core_js_1.HttpClient(opts);
47
+ this.baseUrl = http.baseUrl;
48
+ this.emails = new emails_js_1.Emails(http);
49
+ this.batch = new emails_js_1.Batch(http);
50
+ this.domains = new domains_js_1.Domains(http);
51
+ this.templates = new templates_js_1.Templates(http);
52
+ this.sandboxes = new sandboxes_js_1.Sandboxes(http);
53
+ this.webhooks = new webhooks_js_1.Webhooks(http);
54
+ this.contacts = new audience_js_1.Contacts(http);
55
+ this.audiences = new audience_js_1.Audiences(http);
56
+ this.suppressions = new audience_js_1.Suppressions(http);
57
+ this.mailboxes = new mailboxes_js_1.Mailboxes(http);
58
+ this.automations = new workspace_js_1.Automations(http);
59
+ this.workspace = new workspace_js_1.WorkspaceResource(http);
60
+ this.apiKeys = new workspace_js_1.ApiKeys(http);
61
+ }
62
+ }
63
+ exports.SendClipper = SendClipper;
64
+ exports.default = SendClipper;
65
+ var core_js_2 = require("./core.js");
66
+ Object.defineProperty(exports, "DEFAULT_BASE_URL", { enumerable: true, get: function () { return core_js_2.DEFAULT_BASE_URL; } });
67
+ var errors_js_1 = require("./errors.js");
68
+ Object.defineProperty(exports, "SendClipperError", { enumerable: true, get: function () { return errors_js_1.SendClipperError; } });
69
+ Object.defineProperty(exports, "SendClipperApiError", { enumerable: true, get: function () { return errors_js_1.SendClipperApiError; } });
70
+ Object.defineProperty(exports, "SendClipperConnectionError", { enumerable: true, get: function () { return errors_js_1.SendClipperConnectionError; } });
71
+ Object.defineProperty(exports, "WebhookVerificationError", { enumerable: true, get: function () { return errors_js_1.WebhookVerificationError; } });
72
+ var webhook_signature_js_1 = require("./webhook-signature.js");
73
+ Object.defineProperty(exports, "verifyWebhook", { enumerable: true, get: function () { return webhook_signature_js_1.verifyWebhook; } });
74
+ Object.defineProperty(exports, "signatureHeader", { enumerable: true, get: function () { return webhook_signature_js_1.signatureHeader; } });
75
+ Object.defineProperty(exports, "signPayload", { enumerable: true, get: function () { return webhook_signature_js_1.signPayload; } });
76
+ Object.defineProperty(exports, "parseSignatureHeader", { enumerable: true, get: function () { return webhook_signature_js_1.parseSignatureHeader; } });
77
+ Object.defineProperty(exports, "WEBHOOK_TOLERANCE_SECONDS", { enumerable: true, get: function () { return webhook_signature_js_1.WEBHOOK_TOLERANCE_SECONDS; } });
78
+ var version_js_1 = require("./version.js");
79
+ Object.defineProperty(exports, "VERSION", { enumerable: true, get: function () { return version_js_1.VERSION; } });
80
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,uCAA2D;AAC3D,yDAA4E;AAC5E,uDAAiD;AACjD,qDAAsD;AACtD,2DAAqD;AACrD,2DAAqD;AACrD,2DAAqD;AACrD,yDAAmD;AACnD,2DAAmF;AAEnF;;;;;;;;;;;;;;GAcG;AACH,MAAa,WAAW;IACb,MAAM,CAAS;IACf,KAAK,CAAQ;IACb,OAAO,CAAU;IACjB,SAAS,CAAY;IACrB,SAAS,CAAY;IACrB,QAAQ,CAAW;IACnB,QAAQ,CAAW;IACnB,SAAS,CAAY;IACrB,YAAY,CAAe;IAC3B,SAAS,CAAY;IACrB,WAAW,CAAc;IACzB,SAAS,CAAoB;IAC7B,OAAO,CAAU;IAE1B,oDAAoD;IAC3C,OAAO,CAAS;IAIzB,YAAY,YAAqC,EAAE,UAAyC,EAAE;QAC5F,MAAM,IAAI,GACR,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,CAAC;QACxG,MAAM,IAAI,GAAG,IAAI,oBAAU,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,kBAAM,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,IAAI,iBAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,oBAAO,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,IAAI,wBAAS,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,IAAI,wBAAS,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,IAAI,sBAAQ,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,IAAI,sBAAQ,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,IAAI,uBAAS,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,IAAI,0BAAY,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,IAAI,wBAAS,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,WAAW,GAAG,IAAI,0BAAW,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,IAAI,gCAAiB,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,GAAG,IAAI,sBAAO,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;CACF;AAvCD,kCAuCC;AAED,kBAAe,WAAW,CAAC;AAE3B,qCAA6C;AAApC,2GAAA,gBAAgB,OAAA;AAEzB,yCAKqB;AAJnB,6GAAA,gBAAgB,OAAA;AAChB,gHAAA,mBAAmB,OAAA;AACnB,uHAAA,0BAA0B,OAAA;AAC1B,qHAAA,wBAAwB,OAAA;AAE1B,+DAMgC;AAL9B,qHAAA,aAAa,OAAA;AACb,uHAAA,eAAe,OAAA;AACf,mHAAA,WAAW,OAAA;AACX,4HAAA,oBAAoB,OAAA;AACpB,iIAAA,yBAAyB,OAAA;AAG3B,2CAAuC;AAA9B,qGAAA,OAAO,OAAA"}
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "commonjs"
3
+ }
@@ -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,64 @@
1
+ "use strict";
2
+ /**
3
+ * `react` support, the way Resend does it: render a React Email component to
4
+ * HTML (and a plain-text alternative) with `@react-email/render`, an OPTIONAL
5
+ * peer dependency loaded only when a message actually carries `react`.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.withRenderedReact = withRenderedReact;
42
+ let cached;
43
+ function loadRenderer() {
44
+ // A variable specifier keeps bundlers and tsc from resolving the module
45
+ // when nobody uses `react`.
46
+ const specifier = '@react-email/render';
47
+ cached ??= Promise.resolve(`${specifier}`).then(s => __importStar(require(s))).catch((err) => {
48
+ cached = undefined;
49
+ throw new Error('Sending with `react` needs @react-email/render. Install it: npm i @react-email/render ' +
50
+ `(${err.message})`);
51
+ });
52
+ return cached;
53
+ }
54
+ /** Replace `react` with the `html` (and, if absent, `text`) it renders to. */
55
+ async function withRenderedReact(params) {
56
+ if (params.react === undefined || params.react === null)
57
+ return params;
58
+ const { react, ...rest } = params;
59
+ const { render } = await loadRenderer();
60
+ const html = await render(react);
61
+ const text = rest.text ?? (await render(react, { plainText: true }));
62
+ return { ...rest, html, text };
63
+ }
64
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/render.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BH,8CASC;AA1BD,IAAI,MAAyC,CAAC;AAE9C,SAAS,YAAY;IACnB,wEAAwE;IACxE,4BAA4B;IAC5B,MAAM,SAAS,GAAG,qBAAqB,CAAC;IACxC,MAAM,KAAM,mBAAO,SAAS,uCAA2B,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;AACvE,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,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Suppressions = exports.Audiences = exports.Contacts = void 0;
4
+ const core_js_1 = require("../core.js");
5
+ class Contacts {
6
+ http;
7
+ constructor(http) {
8
+ this.http = http;
9
+ }
10
+ list(params = {}, options = {}) {
11
+ return this.http.call({ method: 'GET', path: '/contacts', query: { ...params }, ...options });
12
+ }
13
+ async *iterate(params = {}, options = {}) {
14
+ const pageSize = params.pageSize ?? 200;
15
+ for (let page = 1;; page++) {
16
+ const res = (0, core_js_1.unwrap)(await this.list({ ...params, page, pageSize }, options));
17
+ yield* res.items;
18
+ if (page >= res.totalPages || res.items.length === 0)
19
+ return;
20
+ }
21
+ }
22
+ create(params, options = {}) {
23
+ return this.http.call({ method: 'POST', path: '/contacts', body: params, ...options });
24
+ }
25
+ /** Import a CSV or vCard file. Importing never suppresses anyone. */
26
+ import(params, options = {}) {
27
+ return this.http.call({ method: 'POST', path: '/contacts/import', form: importForm(params), ...options });
28
+ }
29
+ /** What an import would do, without importing. */
30
+ importPreview(params, options = {}) {
31
+ return this.http.call({ method: 'POST', path: '/contacts/import/preview', form: importForm(params), ...options });
32
+ }
33
+ /** Every contact as CSV (re-importable) or vCard 4.0. */
34
+ export(params = {}, options = {}) {
35
+ return this.http.call({ method: 'GET', path: '/contacts/export', query: { ...params }, as: 'text', ...options });
36
+ }
37
+ }
38
+ exports.Contacts = Contacts;
39
+ class Audiences {
40
+ http;
41
+ constructor(http) {
42
+ this.http = http;
43
+ }
44
+ list(options = {}) {
45
+ return this.http.call({ method: 'GET', path: '/audiences', ...options });
46
+ }
47
+ }
48
+ exports.Audiences = Audiences;
49
+ class Suppressions {
50
+ http;
51
+ constructor(http) {
52
+ this.http = http;
53
+ }
54
+ list(params = {}, options = {}) {
55
+ return this.http.call({ method: 'GET', path: '/suppressions', query: { ...params }, ...options });
56
+ }
57
+ async *iterate(params = {}, options = {}) {
58
+ let cursor;
59
+ for (;;) {
60
+ const res = (0, core_js_1.unwrap)(await this.list({ ...params, cursor }, options));
61
+ yield* res.data;
62
+ if (!res.page.hasMore || !res.page.cursor)
63
+ return;
64
+ cursor = res.page.cursor;
65
+ }
66
+ }
67
+ /**
68
+ * Stop all mail to an address (reason `manual`). `created` is `false` when
69
+ * the address was already suppressed; `row` is the entry either way.
70
+ */
71
+ create(params, options = {}) {
72
+ return this.http.call({ method: 'POST', path: '/suppressions', body: params, ...options });
73
+ }
74
+ /**
75
+ * Lift a suppression. `reason` (10+ characters) is recorded. Complaint and
76
+ * provider suppressions cannot be removed (`suppression_not_removable`).
77
+ */
78
+ remove(id, reason, options = {}) {
79
+ return this.http.call({ method: 'DELETE', path: `/suppressions/${(0, core_js_1.seg)(id)}`, body: { reason }, ...options });
80
+ }
81
+ /** The list as CSV. */
82
+ export(params = {}, options = {}) {
83
+ return this.http.call({ method: 'GET', path: '/suppressions/export', query: { ...params }, as: 'text', ...options });
84
+ }
85
+ }
86
+ exports.Suppressions = Suppressions;
87
+ function importForm(params) {
88
+ const form = new FormData();
89
+ const name = params.filename ?? 'contacts.csv';
90
+ const type = /\.vcf$/i.test(name) ? 'text/vcard' : 'text/csv';
91
+ const bytes = typeof params.file === 'string' ? params.file : new Uint8Array(params.file);
92
+ form.append('file', new Blob([bytes], { type }), name);
93
+ if (params.audienceId)
94
+ form.append('audienceId', params.audienceId);
95
+ if (params.newAudience)
96
+ form.append('newAudience', params.newAudience);
97
+ if (params.createAudiences !== undefined)
98
+ form.append('createAudiences', String(params.createAudiences));
99
+ if (params.onDuplicate)
100
+ form.append('onDuplicate', params.onDuplicate);
101
+ if (params.mapping)
102
+ form.append('mapping', JSON.stringify(params.mapping));
103
+ return form;
104
+ }
105
+ //# sourceMappingURL=audience.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audience.js","sourceRoot":"","sources":["../../../src/resources/audience.ts"],"names":[],"mappings":";;;AACA,wCAAyC;AAazC,MAAa,QAAQ;IACU;IAA7B,YAA6B,IAAgB;QAAhB,SAAI,GAAJ,IAAI,CAAY;IAAG,CAAC;IAEjD,IAAI,CAAC,SAA6B,EAAE,EAAE,UAA0B,EAAE;QAChE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAChG,CAAC;IAED,KAAK,CAAC,CAAC,OAAO,CAAC,SAA2C,EAAE,EAAE,UAA0B,EAAE;QACxF,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,GAAG,CAAC;QACxC,KAAK,IAAI,IAAI,GAAG,CAAC,GAAI,IAAI,EAAE,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,IAAA,gBAAM,EAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;YAC5E,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;YACjB,IAAI,IAAI,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;QAC/D,CAAC;IACH,CAAC;IAED,MAAM,CAAC,MAA2B,EAAE,UAA0B,EAAE;QAC9D,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,qEAAqE;IACrE,MAAM,CAAC,MAA4B,EAAE,UAA0B,EAAE;QAC/D,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAC5G,CAAC;IAED,kDAAkD;IAClD,aAAa,CACX,MAAuD,EACvD,UAA0B,EAAE;QAE5B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACpH,CAAC;IAED,yDAAyD;IACzD,MAAM,CACJ,SAAwD,EAAE,EAC1D,UAA0B,EAAE;QAE5B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACnH,CAAC;CACF;AAxCD,4BAwCC;AAED,MAAa,SAAS;IACS;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,YAAY,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAC3E,CAAC;CACF;AAND,8BAMC;AAED,MAAa,YAAY;IACM;IAA7B,YAA6B,IAAgB;QAAhB,SAAI,GAAJ,IAAI,CAAY;IAAG,CAAC;IAEjD,IAAI,CAAC,SAAiC,EAAE,EAAE,UAA0B,EAAE;QACpE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACpG,CAAC;IAED,KAAK,CAAC,CAAC,OAAO,CAAC,SAAiD,EAAE,EAAE,UAA0B,EAAE;QAC9F,IAAI,MAA0B,CAAC;QAC/B,SAAS,CAAC;YACR,MAAM,GAAG,GAAG,IAAA,gBAAM,EAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;YACpE,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;YAChB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM;gBAAE,OAAO;YAClD,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,MAAM,CACJ,MAAwC,EACxC,UAA0B,EAAE;QAE5B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,EAAU,EAAE,MAAc,EAAE,UAA0B,EAAE;QAC7D,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAC9G,CAAC;IAED,uBAAuB;IACvB,MAAM,CAAC,SAA2D,EAAE,EAAE,UAA0B,EAAE;QAChG,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACvH,CAAC;CACF;AAxCD,oCAwCC;AAED,SAAS,UAAU,CAAC,MAAuF;IACzG,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,IAAI,cAAc,CAAC;IAC/C,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC;IAC9D,MAAM,KAAK,GAAG,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1F,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IACvD,IAAI,MAAM,CAAC,UAAU;QAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IACpE,IAAI,MAAM,CAAC,WAAW;QAAE,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IACvE,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS;QAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;IACzG,IAAI,MAAM,CAAC,WAAW;QAAE,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IACvE,IAAI,MAAM,CAAC,OAAO;QAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3E,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -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,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Domains = void 0;
4
+ const core_js_1 = require("../core.js");
5
+ class Domains {
6
+ http;
7
+ constructor(http) {
8
+ this.http = http;
9
+ }
10
+ list(options = {}) {
11
+ return this.http.call({ method: 'GET', path: '/domains', ...options });
12
+ }
13
+ /** Register a sending domain. Next: `records()`, publish them, then `verify()`. */
14
+ create(params, options = {}) {
15
+ return this.http.call({ method: 'POST', path: '/domains', body: params, ...options });
16
+ }
17
+ /** The DNS records to publish, each with its current status. */
18
+ records(id, options = {}) {
19
+ return this.http.call({ method: 'GET', path: `/domains/${(0, core_js_1.seg)(id)}/records`, ...options });
20
+ }
21
+ /** Check DNS now instead of waiting for the background check. */
22
+ verify(id, options = {}) {
23
+ return this.http.call({ method: 'POST', path: `/domains/${(0, core_js_1.seg)(id)}/verify`, ...options });
24
+ }
25
+ /** Start receiving mail on this domain. Adds receiving records; never blocks sending. */
26
+ enableReceiving(id, options = {}) {
27
+ return this.http.call({ method: 'POST', path: `/domains/${(0, core_js_1.seg)(id)}/receiving`, ...options });
28
+ }
29
+ disableReceiving(id, options = {}) {
30
+ return this.http.call({ method: 'DELETE', path: `/domains/${(0, core_js_1.seg)(id)}/receiving`, ...options });
31
+ }
32
+ /** Move a domain to another region. Refused (`region_immutable`) once it holds messages. */
33
+ setRegion(id, region, options = {}) {
34
+ return this.http.call({ method: 'PATCH', path: `/domains/${(0, core_js_1.seg)(id)}/region`, body: { region }, ...options });
35
+ }
36
+ /** What deleting the domain would take with it. */
37
+ deletionPreview(id, options = {}) {
38
+ return this.http.call({ method: 'GET', path: `/domains/${(0, core_js_1.seg)(id)}/deletion`, ...options });
39
+ }
40
+ remove(id, options = {}) {
41
+ return this.http.call({ method: 'DELETE', path: `/domains/${(0, core_js_1.seg)(id)}`, ...options });
42
+ }
43
+ }
44
+ exports.Domains = Domains;
45
+ //# sourceMappingURL=domains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domains.js","sourceRoot":"","sources":["../../../src/resources/domains.ts"],"names":[],"mappings":";;;AACA,wCAAiC;AAGjC,MAAa,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,IAAA,aAAG,EAAC,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,IAAA,aAAG,EAAC,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,IAAA,aAAG,EAAC,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,IAAA,aAAG,EAAC,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,IAAA,aAAG,EAAC,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,IAAA,aAAG,EAAC,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,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACvF,CAAC;CACF;AA5CD,0BA4CC"}