keplars 1.0.3
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/README.md +227 -0
- package/dist/cjs/audiences.js +32 -0
- package/dist/cjs/audiences.js.map +1 -0
- package/dist/cjs/automations.js +32 -0
- package/dist/cjs/automations.js.map +1 -0
- package/dist/cjs/client.js +135 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/contacts.js +38 -0
- package/dist/cjs/contacts.js.map +1 -0
- package/dist/cjs/domains.js +34 -0
- package/dist/cjs/domains.js.map +1 -0
- package/dist/cjs/emails.js +101 -0
- package/dist/cjs/emails.js.map +1 -0
- package/dist/cjs/errors.js +87 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/index.js +35 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/utils.js +87 -0
- package/dist/cjs/utils.js.map +1 -0
- package/dist/esm/audiences.js +28 -0
- package/dist/esm/audiences.js.map +1 -0
- package/dist/esm/automations.js +28 -0
- package/dist/esm/automations.js.map +1 -0
- package/dist/esm/client.js +131 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/contacts.js +34 -0
- package/dist/esm/contacts.js.map +1 -0
- package/dist/esm/domains.js +30 -0
- package/dist/esm/domains.js.map +1 -0
- package/dist/esm/emails.js +97 -0
- package/dist/esm/emails.js.map +1 -0
- package/dist/esm/errors.js +72 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/index.js +9 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/utils.js +76 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/types/audiences.d.ts +11 -0
- package/dist/types/audiences.d.ts.map +1 -0
- package/dist/types/automations.d.ts +11 -0
- package/dist/types/automations.d.ts.map +1 -0
- package/dist/types/client.d.ts +24 -0
- package/dist/types/client.d.ts.map +1 -0
- package/dist/types/contacts.d.ts +12 -0
- package/dist/types/contacts.d.ts.map +1 -0
- package/dist/types/domains.d.ts +22 -0
- package/dist/types/domains.d.ts.map +1 -0
- package/dist/types/emails.d.ts +16 -0
- package/dist/types/emails.d.ts.map +1 -0
- package/dist/types/errors.d.ts +48 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/types.d.ts +162 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/utils.d.ts +10 -0
- package/dist/types/utils.d.ts.map +1 -0
- package/package.json +73 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
export class KeplarsError extends Error {
|
|
2
|
+
constructor(message, code, requestId, statusCode) {
|
|
3
|
+
super(message);
|
|
4
|
+
this.name = this.constructor.name;
|
|
5
|
+
this.code = code;
|
|
6
|
+
this.requestId = requestId;
|
|
7
|
+
this.statusCode = statusCode;
|
|
8
|
+
Error.captureStackTrace(this, this.constructor);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export class ValidationError extends KeplarsError {
|
|
12
|
+
constructor(message, details, requestId) {
|
|
13
|
+
super(message, 'VALIDATION_ERROR', requestId, 400);
|
|
14
|
+
this.details = details;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export class AuthenticationError extends KeplarsError {
|
|
18
|
+
constructor(message, requestId) {
|
|
19
|
+
super(message, 'AUTHENTICATION_ERROR', requestId, 401);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export class AuthorizationError extends KeplarsError {
|
|
23
|
+
constructor(message, requestId) {
|
|
24
|
+
super(message, 'AUTHORIZATION_ERROR', requestId, 403);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export class DomainNotVerifiedError extends KeplarsError {
|
|
28
|
+
constructor(message, details, requestId) {
|
|
29
|
+
super(message, 'DOMAIN_NOT_VERIFIED', requestId, 403);
|
|
30
|
+
this.details = details;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export class RateLimitError extends KeplarsError {
|
|
34
|
+
constructor(message, retryAfter, requestId) {
|
|
35
|
+
super(message, 'RATE_LIMIT_EXCEEDED', requestId, 429);
|
|
36
|
+
this.retryAfter = retryAfter;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export class NotFoundError extends KeplarsError {
|
|
40
|
+
constructor(message, requestId) {
|
|
41
|
+
super(message, 'NOT_FOUND', requestId, 404);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export class PlanLimitError extends KeplarsError {
|
|
45
|
+
constructor(message, details, requestId) {
|
|
46
|
+
super(message, 'PLAN_LIMIT_EXCEEDED', requestId, 403);
|
|
47
|
+
this.details = details;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export class QuotaExceededError extends KeplarsError {
|
|
51
|
+
constructor(message, details, requestId) {
|
|
52
|
+
super(message, 'QUOTA_EXCEEDED', requestId, 403);
|
|
53
|
+
this.details = details;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export class ConflictError extends KeplarsError {
|
|
57
|
+
constructor(message, requestId) {
|
|
58
|
+
super(message, 'CONFLICT', requestId, 409);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export class InternalError extends KeplarsError {
|
|
62
|
+
constructor(message, requestId) {
|
|
63
|
+
super(message, 'INTERNAL_ERROR', requestId, 500);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
export class NetworkError extends KeplarsError {
|
|
67
|
+
constructor(message, originalError) {
|
|
68
|
+
super(message, 'NETWORK_ERROR');
|
|
69
|
+
this.originalError = originalError;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# 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,9 @@
|
|
|
1
|
+
export { Keplars } from './client';
|
|
2
|
+
export { Emails } from './emails';
|
|
3
|
+
export { Contacts } from './contacts';
|
|
4
|
+
export { Audiences } from './audiences';
|
|
5
|
+
export { Automations } from './automations';
|
|
6
|
+
export { Domains } from './domains';
|
|
7
|
+
export { KeplarsError, ValidationError, AuthenticationError, AuthorizationError, DomainNotVerifiedError, RateLimitError, NotFoundError, PlanLimitError, QuotaExceededError, ConflictError, InternalError, NetworkError, } from './errors';
|
|
8
|
+
export { validateEmail, validateScheduleDate, normalizeEmail, verifyWebhookSignature, renderTemplate, } from './utils';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EACL,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACd,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,YAAY,GACb,MAAM,UAAU,CAAC;AAiClB,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,sBAAsB,EACtB,cAAc,GACf,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { createHmac, timingSafeEqual } from 'crypto';
|
|
2
|
+
export async function sleep(ms) {
|
|
3
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
4
|
+
}
|
|
5
|
+
export function calculateExponentialBackoff(retryCount, baseDelay) {
|
|
6
|
+
const exponentialDelay = baseDelay * Math.pow(2, retryCount);
|
|
7
|
+
const jitter = Math.random() * 0.3 * exponentialDelay;
|
|
8
|
+
return Math.min(exponentialDelay + jitter, 30000);
|
|
9
|
+
}
|
|
10
|
+
export function verifyWebhookSignature(payload, signature, timestamp, secret, toleranceSeconds = 300) {
|
|
11
|
+
const currentTimestamp = Math.floor(Date.now() / 1000);
|
|
12
|
+
const payloadTimestamp = parseInt(timestamp, 10);
|
|
13
|
+
if (Math.abs(currentTimestamp - payloadTimestamp) > toleranceSeconds) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
const signedPayload = `${timestamp}.${payload}`;
|
|
17
|
+
const expectedSignature = createHmac('sha256', secret).update(signedPayload).digest('hex');
|
|
18
|
+
try {
|
|
19
|
+
return timingSafeEqual(Buffer.from(signature), Buffer.from(expectedSignature));
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export function renderTemplate(template, variables) {
|
|
26
|
+
return template.replace(/\{\{(\w+)\}\}/g, (match, key) => {
|
|
27
|
+
const value = variables[key];
|
|
28
|
+
return value !== undefined ? String(value) : match;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
export function normalizeEmail(email) {
|
|
32
|
+
return email.trim().toLowerCase();
|
|
33
|
+
}
|
|
34
|
+
export function validateEmail(email) {
|
|
35
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
36
|
+
return emailRegex.test(email);
|
|
37
|
+
}
|
|
38
|
+
export function validateEmailList(emails) {
|
|
39
|
+
const emailList = Array.isArray(emails) ? emails : [emails];
|
|
40
|
+
emailList.forEach((email) => {
|
|
41
|
+
if (!validateEmail(email)) {
|
|
42
|
+
throw new Error(`Invalid email address: ${email}`);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
return emailList;
|
|
46
|
+
}
|
|
47
|
+
export function buildQueryString(params) {
|
|
48
|
+
const filteredParams = Object.entries(params)
|
|
49
|
+
.filter(([_, value]) => value !== undefined && value !== null)
|
|
50
|
+
.map(([key, value]) => {
|
|
51
|
+
if (Array.isArray(value)) {
|
|
52
|
+
return value
|
|
53
|
+
.map((v) => `${encodeURIComponent(key)}=${encodeURIComponent(String(v))}`)
|
|
54
|
+
.join('&');
|
|
55
|
+
}
|
|
56
|
+
return `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`;
|
|
57
|
+
})
|
|
58
|
+
.join('&');
|
|
59
|
+
return filteredParams ? `?${filteredParams}` : '';
|
|
60
|
+
}
|
|
61
|
+
export function validateScheduleDate(dateString) {
|
|
62
|
+
const scheduledDate = new Date(dateString);
|
|
63
|
+
if (isNaN(scheduledDate.getTime())) {
|
|
64
|
+
throw new Error('Invalid scheduled_for date format. Use ISO 8601 format (e.g., 2025-02-14T09:00:00Z)');
|
|
65
|
+
}
|
|
66
|
+
const now = new Date();
|
|
67
|
+
const minScheduleTime = new Date(now.getTime() + 60000); // 1 minute from now
|
|
68
|
+
const maxScheduleTime = new Date(now.getTime() + 365 * 24 * 60 * 60 * 1000); // 365 days from now
|
|
69
|
+
if (scheduledDate < minScheduleTime) {
|
|
70
|
+
throw new Error('scheduled_for must be at least 1 minute in the future');
|
|
71
|
+
}
|
|
72
|
+
if (scheduledDate > maxScheduleTime) {
|
|
73
|
+
throw new Error('scheduled_for cannot be more than 365 days in the future');
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,EAAU;IACpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,UAAkB,EAAE,SAAiB;IAC/E,MAAM,gBAAgB,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,gBAAgB,CAAC;IACtD,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,OAAe,EACf,SAAiB,EACjB,SAAiB,EACjB,MAAc,EACd,mBAA2B,GAAG;IAE9B,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACvD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAEjD,IAAI,IAAI,CAAC,GAAG,CAAC,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,gBAAgB,EAAE,CAAC;QACrE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,aAAa,GAAG,GAAG,SAAS,IAAI,OAAO,EAAE,CAAC;IAChD,MAAM,iBAAiB,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAE3F,IAAI,CAAC;QACH,OAAO,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACjF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,SAAkC;IACjF,OAAO,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,KAAa,EAAE,GAAW,EAAE,EAAE;QACvE,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC7B,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,UAAU,GAAG,4BAA4B,CAAC;IAChD,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAyB;IACzD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAE5D,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAA+B;IAC9D,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SAC1C,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;SAC7D,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACpB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK;iBACT,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;iBACzE,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,CAAC;QACD,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;IAC3E,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,cAAc,CAAC,CAAC,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,UAAkB;IACrD,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;IAE3C,IAAI,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,qFAAqF,CACtF,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,eAAe,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,oBAAoB;IAC7E,MAAM,eAAe,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,oBAAoB;IAEjG,IAAI,aAAa,GAAG,eAAe,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,aAAa,GAAG,eAAe,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Keplars } from './client';
|
|
2
|
+
import { Audience, ApiResponse, ApiDataResponse, ApiListResponse, ApiMessageResponse } from './types';
|
|
3
|
+
export declare class Audiences {
|
|
4
|
+
private readonly client;
|
|
5
|
+
constructor(client: Keplars);
|
|
6
|
+
create(name: string, description?: string): Promise<ApiResponse<Audience>>;
|
|
7
|
+
list(page?: number, limit?: number): Promise<ApiListResponse<Audience>>;
|
|
8
|
+
get(id: string): Promise<ApiDataResponse<Audience>>;
|
|
9
|
+
delete(id: string): Promise<ApiMessageResponse>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=audiences.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audiences.d.ts","sourceRoot":"","sources":["../../src/audiences.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EACL,QAAQ,EACR,WAAW,EACX,eAAe,EACf,eAAe,EACf,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAEjB,qBAAa,SAAS;IACR,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,OAAO;IAEtC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAS1E,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IAavE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IAQnD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAOtD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Keplars } from './client';
|
|
2
|
+
import { Automation, ApiDataResponse, ApiListResponse, ApiMessageResponse } from './types';
|
|
3
|
+
export declare class Automations {
|
|
4
|
+
private readonly client;
|
|
5
|
+
constructor(client: Keplars);
|
|
6
|
+
list(page?: number, limit?: number): Promise<ApiListResponse<Automation>>;
|
|
7
|
+
get(id: string): Promise<ApiDataResponse<Automation>>;
|
|
8
|
+
enroll(id: string, email: string): Promise<ApiMessageResponse>;
|
|
9
|
+
unenroll(id: string, email: string): Promise<ApiMessageResponse>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=automations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"automations.d.ts","sourceRoot":"","sources":["../../src/automations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE3F,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,OAAO;IAEtC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IAazE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IAQrD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAS9D,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAQvE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { KeplarsConfig, RateLimitInfo } from './types';
|
|
2
|
+
import { Emails } from './emails';
|
|
3
|
+
import { Contacts } from './contacts';
|
|
4
|
+
import { Audiences } from './audiences';
|
|
5
|
+
import { Automations } from './automations';
|
|
6
|
+
import { Domains } from './domains';
|
|
7
|
+
export declare class Keplars {
|
|
8
|
+
private readonly config;
|
|
9
|
+
readonly emails: Emails;
|
|
10
|
+
readonly contacts: Contacts;
|
|
11
|
+
readonly audiences: Audiences;
|
|
12
|
+
readonly automations: Automations;
|
|
13
|
+
readonly domains: Domains;
|
|
14
|
+
constructor(config: KeplarsConfig);
|
|
15
|
+
private validateApiKey;
|
|
16
|
+
request<T>(method: string, path: string, body?: unknown, retryCount?: number): Promise<{
|
|
17
|
+
data: T;
|
|
18
|
+
rateLimitInfo?: RateLimitInfo;
|
|
19
|
+
}>;
|
|
20
|
+
private extractRateLimitInfo;
|
|
21
|
+
private handleErrorResponse;
|
|
22
|
+
private isRetryableError;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAYvD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,QAAQ,EAAE,QAAQ,CAAC;IACnC,SAAgB,SAAS,EAAE,SAAS,CAAC;IACrC,SAAgB,WAAW,EAAE,WAAW,CAAC;IACzC,SAAgB,OAAO,EAAE,OAAO,CAAC;gBAErB,MAAM,EAAE,aAAa;IA2BjC,OAAO,CAAC,cAAc;IAShB,OAAO,CAAC,CAAC,EACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,UAAU,SAAI,GACb,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,aAAa,CAAC,EAAE,aAAa,CAAA;KAAE,CAAC;IA+CtD,OAAO,CAAC,oBAAoB;YAgBd,mBAAmB;IA0CjC,OAAO,CAAC,gBAAgB;CAOzB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Keplars } from './client';
|
|
2
|
+
import { Contact, AddContactRequest, UpdateContactRequest, ApiResponse, ApiDataResponse, ApiListResponse, ApiMessageResponse } from './types';
|
|
3
|
+
export declare class Contacts {
|
|
4
|
+
private readonly client;
|
|
5
|
+
constructor(client: Keplars);
|
|
6
|
+
add(params: AddContactRequest): Promise<ApiResponse<Contact>>;
|
|
7
|
+
get(email: string): Promise<ApiDataResponse<Contact>>;
|
|
8
|
+
list(audienceId?: string, page?: number, limit?: number): Promise<ApiListResponse<Contact>>;
|
|
9
|
+
update(email: string, params: UpdateContactRequest): Promise<ApiResponse<Contact>>;
|
|
10
|
+
delete(email: string): Promise<ApiMessageResponse>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=contacts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contacts.d.ts","sourceRoot":"","sources":["../../src/contacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EACL,OAAO,EACP,iBAAiB,EACjB,oBAAoB,EACpB,WAAW,EACX,eAAe,EACf,eAAe,EACf,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAEjB,qBAAa,QAAQ;IACP,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,OAAO;IAEtC,GAAG,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAS7D,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAQrD,IAAI,CACR,UAAU,CAAC,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAc9B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IASlF,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAOzD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Keplars } from './client';
|
|
2
|
+
import { DomainListItem, CreateDomainResponse, DomainStatusResponse, DomainVerificationResult, DomainAPIKeyResponse } from './types';
|
|
3
|
+
export declare class Domains {
|
|
4
|
+
private readonly client;
|
|
5
|
+
constructor(client: Keplars);
|
|
6
|
+
add(domain: string): Promise<CreateDomainResponse>;
|
|
7
|
+
list(): Promise<{
|
|
8
|
+
success: boolean;
|
|
9
|
+
data: DomainListItem[];
|
|
10
|
+
}>;
|
|
11
|
+
getStatus(domainId: string): Promise<DomainStatusResponse>;
|
|
12
|
+
verify(domainId: string): Promise<DomainVerificationResult>;
|
|
13
|
+
delete(domainId: string): Promise<{
|
|
14
|
+
success: boolean;
|
|
15
|
+
message: string;
|
|
16
|
+
}>;
|
|
17
|
+
createApiKey(params: {
|
|
18
|
+
domain_id: string;
|
|
19
|
+
name?: string;
|
|
20
|
+
}): Promise<DomainAPIKeyResponse>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=domains.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domains.d.ts","sourceRoot":"","sources":["../../src/domains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAEjB,qBAAa,OAAO;IACN,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,OAAO;IAEtC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IASlD,IAAI,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,cAAc,EAAE,CAAA;KAAE,CAAC;IAQ7D,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAQ1D,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAQ3D,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAQxE,YAAY,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC;CAQhG"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Keplars } from './client';
|
|
2
|
+
import { SendEmailRequest, SendEmailResponse, ScheduleEmailRequest, ScheduledEmailResponse } from './types';
|
|
3
|
+
export declare class Emails {
|
|
4
|
+
private readonly client;
|
|
5
|
+
constructor(client: Keplars);
|
|
6
|
+
sendInstant(request: SendEmailRequest): Promise<SendEmailResponse>;
|
|
7
|
+
sendHigh(request: SendEmailRequest): Promise<SendEmailResponse>;
|
|
8
|
+
sendAsync(request: SendEmailRequest): Promise<SendEmailResponse>;
|
|
9
|
+
sendBulk(request: SendEmailRequest): Promise<SendEmailResponse>;
|
|
10
|
+
send(request: SendEmailRequest): Promise<SendEmailResponse>;
|
|
11
|
+
schedule(request: ScheduleEmailRequest): Promise<ScheduledEmailResponse>;
|
|
12
|
+
private validateEmailRequest;
|
|
13
|
+
private validateRecipientField;
|
|
14
|
+
private validateRecipientList;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=emails.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emails.d.ts","sourceRoot":"","sources":["../../src/emails.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EAEvB,MAAM,SAAS,CAAC;AAGjB,qBAAa,MAAM;IACL,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,OAAO;IAEtC,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAYlE,QAAQ,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAY/D,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAYhE,QAAQ,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAY/D,IAAI,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAI3D,QAAQ,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAkB9E,OAAO,CAAC,oBAAoB;IAmD5B,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,qBAAqB;CAU9B"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ErrorDetail, ErrorCode } from './types';
|
|
2
|
+
export declare class KeplarsError extends Error {
|
|
3
|
+
readonly code: ErrorCode | 'NETWORK_ERROR';
|
|
4
|
+
readonly requestId?: string;
|
|
5
|
+
readonly statusCode?: number;
|
|
6
|
+
constructor(message: string, code: ErrorCode | 'NETWORK_ERROR', requestId?: string, statusCode?: number);
|
|
7
|
+
}
|
|
8
|
+
export declare class ValidationError extends KeplarsError {
|
|
9
|
+
readonly details?: ErrorDetail[];
|
|
10
|
+
constructor(message: string, details?: ErrorDetail[], requestId?: string);
|
|
11
|
+
}
|
|
12
|
+
export declare class AuthenticationError extends KeplarsError {
|
|
13
|
+
constructor(message: string, requestId?: string);
|
|
14
|
+
}
|
|
15
|
+
export declare class AuthorizationError extends KeplarsError {
|
|
16
|
+
constructor(message: string, requestId?: string);
|
|
17
|
+
}
|
|
18
|
+
export declare class DomainNotVerifiedError extends KeplarsError {
|
|
19
|
+
readonly domain?: string;
|
|
20
|
+
readonly details?: Record<string, unknown>;
|
|
21
|
+
constructor(message: string, details?: Record<string, unknown>, requestId?: string);
|
|
22
|
+
}
|
|
23
|
+
export declare class RateLimitError extends KeplarsError {
|
|
24
|
+
readonly retryAfter: number;
|
|
25
|
+
constructor(message: string, retryAfter: number, requestId?: string);
|
|
26
|
+
}
|
|
27
|
+
export declare class NotFoundError extends KeplarsError {
|
|
28
|
+
constructor(message: string, requestId?: string);
|
|
29
|
+
}
|
|
30
|
+
export declare class PlanLimitError extends KeplarsError {
|
|
31
|
+
readonly details?: Record<string, unknown>;
|
|
32
|
+
constructor(message: string, details?: Record<string, unknown>, requestId?: string);
|
|
33
|
+
}
|
|
34
|
+
export declare class QuotaExceededError extends KeplarsError {
|
|
35
|
+
readonly details?: Record<string, unknown>;
|
|
36
|
+
constructor(message: string, details?: Record<string, unknown>, requestId?: string);
|
|
37
|
+
}
|
|
38
|
+
export declare class ConflictError extends KeplarsError {
|
|
39
|
+
constructor(message: string, requestId?: string);
|
|
40
|
+
}
|
|
41
|
+
export declare class InternalError extends KeplarsError {
|
|
42
|
+
constructor(message: string, requestId?: string);
|
|
43
|
+
}
|
|
44
|
+
export declare class NetworkError extends KeplarsError {
|
|
45
|
+
readonly originalError: Error;
|
|
46
|
+
constructor(message: string, originalError: Error);
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEjD,qBAAa,YAAa,SAAQ,KAAK;IACrC,SAAgB,IAAI,EAAE,SAAS,GAAG,eAAe,CAAC;IAClD,SAAgB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnC,SAAgB,UAAU,CAAC,EAAE,MAAM,CAAC;gBAGlC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,GAAG,eAAe,EACjC,SAAS,CAAC,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM;CAStB;AAED,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,SAAgB,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;gBAE5B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM;CAIzE;AAED,qBAAa,mBAAoB,SAAQ,YAAY;gBACvC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;CAGhD;AAED,qBAAa,kBAAmB,SAAQ,YAAY;gBACtC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;CAGhD;AAED,qBAAa,sBAAuB,SAAQ,YAAY;IACtD,SAAgB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChC,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAEtC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM;CAInF;AAED,qBAAa,cAAe,SAAQ,YAAY;IAC9C,SAAgB,UAAU,EAAE,MAAM,CAAC;gBAEvB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;CAIpE;AAED,qBAAa,aAAc,SAAQ,YAAY;gBACjC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;CAGhD;AAED,qBAAa,cAAe,SAAQ,YAAY;IAC9C,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAEtC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM;CAInF;AAED,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAEtC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM;CAInF;AAED,qBAAa,aAAc,SAAQ,YAAY;gBACjC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;CAGhD;AAED,qBAAa,aAAc,SAAQ,YAAY;gBACjC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;CAGhD;AAED,qBAAa,YAAa,SAAQ,YAAY;IAC5C,SAAgB,aAAa,EAAE,KAAK,CAAC;gBAEzB,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK;CAIlD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { Keplars } from './client';
|
|
2
|
+
export { Emails } from './emails';
|
|
3
|
+
export { Contacts } from './contacts';
|
|
4
|
+
export { Audiences } from './audiences';
|
|
5
|
+
export { Automations } from './automations';
|
|
6
|
+
export { Domains } from './domains';
|
|
7
|
+
export { KeplarsError, ValidationError, AuthenticationError, AuthorizationError, DomainNotVerifiedError, RateLimitError, NotFoundError, PlanLimitError, QuotaExceededError, ConflictError, InternalError, NetworkError, } from './errors';
|
|
8
|
+
export { KeplarsConfig, EmailPriority, EmailRecipient, SendEmailRequest, SendEmailResponse, SendEmailData, ScheduleEmailRequest, ScheduledEmailResponse, Contact, AddContactRequest, UpdateContactRequest, Audience, Automation, DomainListItem, CreateDomainResponse, DomainStatusResponse, DomainVerificationResult, DomainAPIKeyResponse, PaginatedMeta, ApiResponse, ApiDataResponse, ApiListResponse, ApiMessageResponse, ErrorDetail, ErrorCode, KeplarsErrorResponse, RateLimitInfo, RateLimitHeaders, } from './types';
|
|
9
|
+
export { validateEmail, validateScheduleDate, normalizeEmail, verifyWebhookSignature, renderTemplate, } from './utils';
|
|
10
|
+
//# 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,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EACL,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACd,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,YAAY,GACb,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EACpB,sBAAsB,EACtB,OAAO,EACP,iBAAiB,EACjB,oBAAoB,EACpB,QAAQ,EACR,UAAU,EACV,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,aAAa,EACb,WAAW,EACX,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,WAAW,EACX,SAAS,EACT,oBAAoB,EACpB,aAAa,EACb,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,sBAAsB,EACtB,cAAc,GACf,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
export interface KeplarsConfig {
|
|
2
|
+
apiKey: string;
|
|
3
|
+
baseUrl?: string;
|
|
4
|
+
timeout?: number;
|
|
5
|
+
maxRetries?: number;
|
|
6
|
+
retryDelay?: number;
|
|
7
|
+
}
|
|
8
|
+
export type EmailPriority = 'instant' | 'high' | 'async' | 'bulk';
|
|
9
|
+
export interface EmailRecipient {
|
|
10
|
+
email: string;
|
|
11
|
+
name?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface SendEmailRequest {
|
|
14
|
+
to: string | EmailRecipient[];
|
|
15
|
+
from: string;
|
|
16
|
+
subject: string;
|
|
17
|
+
text?: string;
|
|
18
|
+
html?: string;
|
|
19
|
+
cc?: EmailRecipient[];
|
|
20
|
+
bcc?: EmailRecipient[];
|
|
21
|
+
reply_to?: string;
|
|
22
|
+
custom_headers?: Record<string, string>;
|
|
23
|
+
template_id?: string;
|
|
24
|
+
template_data?: Record<string, unknown>;
|
|
25
|
+
}
|
|
26
|
+
export interface SendEmailData {
|
|
27
|
+
job_id: string;
|
|
28
|
+
priority: string;
|
|
29
|
+
}
|
|
30
|
+
export interface SendEmailResponse {
|
|
31
|
+
success: boolean;
|
|
32
|
+
message: string;
|
|
33
|
+
data: SendEmailData;
|
|
34
|
+
}
|
|
35
|
+
export interface ScheduleEmailRequest extends SendEmailRequest {
|
|
36
|
+
scheduled_for: string;
|
|
37
|
+
timezone?: string;
|
|
38
|
+
priority?: EmailPriority;
|
|
39
|
+
}
|
|
40
|
+
export interface ScheduledEmailResponse {
|
|
41
|
+
success: boolean;
|
|
42
|
+
message: string;
|
|
43
|
+
data: SendEmailData;
|
|
44
|
+
}
|
|
45
|
+
export interface Contact {
|
|
46
|
+
id: string;
|
|
47
|
+
email: string;
|
|
48
|
+
name?: string;
|
|
49
|
+
audience_id?: string;
|
|
50
|
+
created_at: string;
|
|
51
|
+
updated_at?: string;
|
|
52
|
+
[key: string]: unknown;
|
|
53
|
+
}
|
|
54
|
+
export interface AddContactRequest {
|
|
55
|
+
email: string;
|
|
56
|
+
name?: string;
|
|
57
|
+
audience_id?: string;
|
|
58
|
+
[key: string]: unknown;
|
|
59
|
+
}
|
|
60
|
+
export interface UpdateContactRequest {
|
|
61
|
+
name?: string;
|
|
62
|
+
audience_id?: string;
|
|
63
|
+
[key: string]: unknown;
|
|
64
|
+
}
|
|
65
|
+
export interface Audience {
|
|
66
|
+
id: string;
|
|
67
|
+
name: string;
|
|
68
|
+
description?: string;
|
|
69
|
+
created_at: string;
|
|
70
|
+
updated_at?: string;
|
|
71
|
+
}
|
|
72
|
+
export interface Automation {
|
|
73
|
+
id: string;
|
|
74
|
+
name: string;
|
|
75
|
+
status: string;
|
|
76
|
+
created_at: string;
|
|
77
|
+
[key: string]: unknown;
|
|
78
|
+
}
|
|
79
|
+
export interface DomainListItem {
|
|
80
|
+
id: string;
|
|
81
|
+
domain: string;
|
|
82
|
+
verified: boolean;
|
|
83
|
+
created_at: string;
|
|
84
|
+
}
|
|
85
|
+
export interface CreateDomainResponse {
|
|
86
|
+
success: boolean;
|
|
87
|
+
message: string;
|
|
88
|
+
data: {
|
|
89
|
+
domain_id: string;
|
|
90
|
+
domain: string;
|
|
91
|
+
dns_records: Record<string, unknown>[];
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
export interface DomainStatusResponse {
|
|
95
|
+
success: boolean;
|
|
96
|
+
data: {
|
|
97
|
+
domain_id: string;
|
|
98
|
+
domain: string;
|
|
99
|
+
verified: boolean;
|
|
100
|
+
dns_records: Record<string, unknown>[];
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
export interface DomainVerificationResult {
|
|
104
|
+
success: boolean;
|
|
105
|
+
message: string;
|
|
106
|
+
data: {
|
|
107
|
+
verified: boolean;
|
|
108
|
+
domain: string;
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
export interface DomainAPIKeyResponse {
|
|
112
|
+
success: boolean;
|
|
113
|
+
data: {
|
|
114
|
+
api_key: string;
|
|
115
|
+
domain_id: string;
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
export interface ApiResponse<T> {
|
|
119
|
+
success: boolean;
|
|
120
|
+
message: string;
|
|
121
|
+
data: T;
|
|
122
|
+
}
|
|
123
|
+
export interface ApiDataResponse<T> {
|
|
124
|
+
success: boolean;
|
|
125
|
+
data: T;
|
|
126
|
+
}
|
|
127
|
+
export interface ApiListResponse<T> {
|
|
128
|
+
success: boolean;
|
|
129
|
+
data: T[];
|
|
130
|
+
meta: Record<string, unknown>;
|
|
131
|
+
}
|
|
132
|
+
export interface ApiMessageResponse {
|
|
133
|
+
success: boolean;
|
|
134
|
+
message: string;
|
|
135
|
+
}
|
|
136
|
+
export interface PaginatedMeta {
|
|
137
|
+
page: number;
|
|
138
|
+
limit: number;
|
|
139
|
+
total: number;
|
|
140
|
+
}
|
|
141
|
+
export interface ErrorDetail {
|
|
142
|
+
field?: string;
|
|
143
|
+
message: string;
|
|
144
|
+
value?: unknown;
|
|
145
|
+
}
|
|
146
|
+
export interface KeplarsErrorResponse {
|
|
147
|
+
success: false;
|
|
148
|
+
error: string;
|
|
149
|
+
message: string;
|
|
150
|
+
}
|
|
151
|
+
export type ErrorCode = 'VALIDATION_ERROR' | 'AUTHENTICATION_ERROR' | 'AUTHORIZATION_ERROR' | 'DOMAIN_NOT_VERIFIED' | 'RATE_LIMIT_EXCEEDED' | 'NOT_FOUND' | 'PLAN_LIMIT_EXCEEDED' | 'QUOTA_EXCEEDED' | 'CONFLICT' | 'INTERNAL_ERROR';
|
|
152
|
+
export interface RateLimitInfo {
|
|
153
|
+
limit: number;
|
|
154
|
+
remaining: number;
|
|
155
|
+
reset: number;
|
|
156
|
+
}
|
|
157
|
+
export interface RateLimitHeaders {
|
|
158
|
+
'x-ratelimit-limit'?: string;
|
|
159
|
+
'x-ratelimit-remaining'?: string;
|
|
160
|
+
'x-ratelimit-reset'?: string;
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare function sleep(ms: number): Promise<void>;
|
|
2
|
+
export declare function calculateExponentialBackoff(retryCount: number, baseDelay: number): number;
|
|
3
|
+
export declare function verifyWebhookSignature(payload: string, signature: string, timestamp: string, secret: string, toleranceSeconds?: number): boolean;
|
|
4
|
+
export declare function renderTemplate(template: string, variables: Record<string, unknown>): string;
|
|
5
|
+
export declare function normalizeEmail(email: string): string;
|
|
6
|
+
export declare function validateEmail(email: string): boolean;
|
|
7
|
+
export declare function validateEmailList(emails: string | string[]): string[];
|
|
8
|
+
export declare function buildQueryString(params: Record<string, unknown>): string;
|
|
9
|
+
export declare function validateScheduleDate(dateString: string): void;
|
|
10
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAEA,wBAAsB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErD;AAED,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAIzF;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,gBAAgB,GAAE,MAAY,GAC7B,OAAO,CAgBT;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAK3F;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGpD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,CAUrE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAcxE;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAoB7D"}
|