@marketing-sdk/core 0.1.1-experimental.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/LICENSE +21 -0
- package/dist/base-provider.d.ts +52 -0
- package/dist/base-provider.d.ts.map +1 -0
- package/dist/base-provider.js +229 -0
- package/dist/base-provider.js.map +1 -0
- package/dist/config-validator.d.ts +16 -0
- package/dist/config-validator.d.ts.map +1 -0
- package/dist/config-validator.js +44 -0
- package/dist/config-validator.js.map +1 -0
- package/dist/http-client.d.ts +56 -0
- package/dist/http-client.d.ts.map +1 -0
- package/dist/http-client.js +148 -0
- package/dist/http-client.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +76 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/validators.d.ts +16 -0
- package/dist/validators.d.ts.map +1 -0
- package/dist/validators.js +62 -0
- package/dist/validators.js.map +1 -0
- package/package.json +32 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Cody
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { CreateResponse } from './types';
|
|
2
|
+
import { HttpClient, HttpRequestConfig } from './http-client';
|
|
3
|
+
export interface BaseProviderConfig {
|
|
4
|
+
baseURL?: string;
|
|
5
|
+
timeout?: number;
|
|
6
|
+
retryAttempts?: number;
|
|
7
|
+
retryDelay?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface Logger {
|
|
10
|
+
debug?(message: string, data?: unknown): void;
|
|
11
|
+
info?(message: string, data?: unknown): void;
|
|
12
|
+
warn?(message: string, data?: unknown): void;
|
|
13
|
+
error?(message: string, error?: unknown): void;
|
|
14
|
+
}
|
|
15
|
+
export declare enum ErrorType {
|
|
16
|
+
NETWORK = "NETWORK_ERROR",
|
|
17
|
+
AUTHENTICATION = "AUTHENTICATION_ERROR",
|
|
18
|
+
VALIDATION = "VALIDATION_ERROR",
|
|
19
|
+
RATE_LIMIT = "RATE_LIMIT_ERROR",
|
|
20
|
+
NOT_FOUND = "NOT_FOUND_ERROR",
|
|
21
|
+
SERVER = "SERVER_ERROR",
|
|
22
|
+
UNKNOWN = "UNKNOWN_ERROR"
|
|
23
|
+
}
|
|
24
|
+
export declare class ProviderError extends Error {
|
|
25
|
+
type: ErrorType;
|
|
26
|
+
statusCode?: number | undefined;
|
|
27
|
+
details?: unknown | undefined;
|
|
28
|
+
constructor(type: ErrorType, message: string, statusCode?: number | undefined, details?: unknown | undefined);
|
|
29
|
+
}
|
|
30
|
+
export declare abstract class BaseProvider {
|
|
31
|
+
protected client: HttpClient;
|
|
32
|
+
protected logger?: Logger;
|
|
33
|
+
protected retryAttempts: number;
|
|
34
|
+
protected retryDelay: number;
|
|
35
|
+
constructor(config?: BaseProviderConfig, logger?: Logger);
|
|
36
|
+
protected abstract getDefaultHeaders(): Record<string, string>;
|
|
37
|
+
protected abstract getAuthHeaders(): Record<string, string>;
|
|
38
|
+
mergeAuthHeaders(headers?: Record<string, string>): Record<string, string>;
|
|
39
|
+
makeRequest<T>(config: HttpRequestConfig & {
|
|
40
|
+
url: string;
|
|
41
|
+
}, operation: string): Promise<CreateResponse<T>>;
|
|
42
|
+
private retryRequest;
|
|
43
|
+
protected normalizeError(error: unknown, operation?: string): ProviderError;
|
|
44
|
+
protected extractErrorMessage(data: unknown): string | null;
|
|
45
|
+
protected buildUrl(endpoint: string, baseURL?: string): string;
|
|
46
|
+
protected validateRequired(data: unknown, requiredFields: string[], operation: string): void;
|
|
47
|
+
private getNestedValue;
|
|
48
|
+
protected sanitizeInput(input: unknown): unknown;
|
|
49
|
+
private getErrorMessage;
|
|
50
|
+
private isRecord;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=base-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-provider.d.ts","sourceRoot":"","sources":["../src/base-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAsB,MAAM,eAAe,CAAC;AAElF,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9C,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7C,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7C,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAChD;AAED,oBAAY,SAAS;IACnB,OAAO,kBAAkB;IACzB,cAAc,yBAAyB;IACvC,UAAU,qBAAqB;IAC/B,UAAU,qBAAqB;IAC/B,SAAS,oBAAoB;IAC7B,MAAM,iBAAiB;IACvB,OAAO,kBAAkB;CAC1B;AAED,qBAAa,aAAc,SAAQ,KAAK;IAE7B,IAAI,EAAE,SAAS;IAEf,UAAU,CAAC,EAAE,MAAM;IACnB,OAAO,CAAC,EAAE,OAAO;gBAHjB,IAAI,EAAE,SAAS,EACtB,OAAO,EAAE,MAAM,EACR,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,OAAO,CAAC,EAAE,OAAO,YAAA;CAK3B;AAED,8BAAsB,YAAY;IAChC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC;IAC7B,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEjB,MAAM,CAAC,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,MAAM;IAYxD,SAAS,CAAC,QAAQ,CAAC,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAC9D,SAAS,CAAC,QAAQ,CAAC,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAEpD,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAUpE,WAAW,CAAC,CAAC,EACxB,MAAM,EAAE,iBAAiB,GAAG;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,EAC3C,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YA0Cf,YAAY;IAgC1B,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa;IAoD3E,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAgC3D,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAQ9D,SAAS,CAAC,gBAAgB,CACxB,IAAI,EAAE,OAAO,EACb,cAAc,EAAE,MAAM,EAAE,EACxB,SAAS,EAAE,MAAM,GAChB,IAAI;IAgBP,OAAO,CAAC,cAAc;IAStB,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAyBhD,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,QAAQ;CAGjB"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BaseProvider = exports.ProviderError = exports.ErrorType = void 0;
|
|
4
|
+
const http_client_1 = require("./http-client");
|
|
5
|
+
var ErrorType;
|
|
6
|
+
(function (ErrorType) {
|
|
7
|
+
ErrorType["NETWORK"] = "NETWORK_ERROR";
|
|
8
|
+
ErrorType["AUTHENTICATION"] = "AUTHENTICATION_ERROR";
|
|
9
|
+
ErrorType["VALIDATION"] = "VALIDATION_ERROR";
|
|
10
|
+
ErrorType["RATE_LIMIT"] = "RATE_LIMIT_ERROR";
|
|
11
|
+
ErrorType["NOT_FOUND"] = "NOT_FOUND_ERROR";
|
|
12
|
+
ErrorType["SERVER"] = "SERVER_ERROR";
|
|
13
|
+
ErrorType["UNKNOWN"] = "UNKNOWN_ERROR";
|
|
14
|
+
})(ErrorType || (exports.ErrorType = ErrorType = {}));
|
|
15
|
+
class ProviderError extends Error {
|
|
16
|
+
constructor(type, message, statusCode, details) {
|
|
17
|
+
super(message);
|
|
18
|
+
this.type = type;
|
|
19
|
+
this.statusCode = statusCode;
|
|
20
|
+
this.details = details;
|
|
21
|
+
this.name = 'ProviderError';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.ProviderError = ProviderError;
|
|
25
|
+
class BaseProvider {
|
|
26
|
+
constructor(config, logger) {
|
|
27
|
+
this.logger = logger;
|
|
28
|
+
this.retryAttempts = config?.retryAttempts ?? 3;
|
|
29
|
+
this.retryDelay = config?.retryDelay ?? 1000;
|
|
30
|
+
this.client = http_client_1.http.create({
|
|
31
|
+
baseURL: config?.baseURL,
|
|
32
|
+
timeout: config?.timeout ?? 30000,
|
|
33
|
+
headers: this.getDefaultHeaders()
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
mergeAuthHeaders(headers) {
|
|
37
|
+
const defaultHeaders = this.getDefaultHeaders();
|
|
38
|
+
const authHeaders = this.getAuthHeaders();
|
|
39
|
+
return {
|
|
40
|
+
...defaultHeaders,
|
|
41
|
+
...headers,
|
|
42
|
+
...authHeaders
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
async makeRequest(config, operation) {
|
|
46
|
+
try {
|
|
47
|
+
if (this.logger?.debug) {
|
|
48
|
+
this.logger.debug(`${operation}: Making request`, {
|
|
49
|
+
method: config.method,
|
|
50
|
+
url: config.url
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
config.headers = this.mergeAuthHeaders(config.headers);
|
|
54
|
+
const response = await this.retryRequest(config);
|
|
55
|
+
if (this.logger?.debug) {
|
|
56
|
+
this.logger.debug(`${operation}: Success`, {
|
|
57
|
+
status: response.status
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
data: response.data,
|
|
62
|
+
error: null
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
const providerError = this.normalizeError(error, operation);
|
|
67
|
+
if (this.logger?.error) {
|
|
68
|
+
this.logger.error(`${operation}: Failed`, providerError);
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
data: null,
|
|
72
|
+
error: {
|
|
73
|
+
type: providerError.type,
|
|
74
|
+
message: providerError.message,
|
|
75
|
+
statusCode: providerError.statusCode,
|
|
76
|
+
details: providerError.details
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async retryRequest(config, attempt = 1) {
|
|
82
|
+
try {
|
|
83
|
+
return await this.client.request(config.url, config);
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
const providerError = this.normalizeError(error);
|
|
87
|
+
const shouldRetry = attempt < this.retryAttempts &&
|
|
88
|
+
(providerError.type === ErrorType.NETWORK ||
|
|
89
|
+
providerError.type === ErrorType.SERVER ||
|
|
90
|
+
providerError.type === ErrorType.RATE_LIMIT);
|
|
91
|
+
if (shouldRetry) {
|
|
92
|
+
const delay = this.retryDelay * attempt;
|
|
93
|
+
if (this.logger?.warn) {
|
|
94
|
+
this.logger.warn(`Retrying request (attempt ${attempt + 1}/${this.retryAttempts})`, {
|
|
95
|
+
delay,
|
|
96
|
+
error: providerError.message
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
100
|
+
return this.retryRequest(config, attempt + 1);
|
|
101
|
+
}
|
|
102
|
+
throw error;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
normalizeError(error, operation) {
|
|
106
|
+
if (error instanceof ProviderError) {
|
|
107
|
+
return error;
|
|
108
|
+
}
|
|
109
|
+
if (http_client_1.http.isHttpError(error)) {
|
|
110
|
+
const response = error.response;
|
|
111
|
+
const status = response?.status;
|
|
112
|
+
let type;
|
|
113
|
+
let message;
|
|
114
|
+
if (!response) {
|
|
115
|
+
type = ErrorType.NETWORK;
|
|
116
|
+
message = 'Network error occurred';
|
|
117
|
+
}
|
|
118
|
+
else if (status === 401 || status === 403) {
|
|
119
|
+
type = ErrorType.AUTHENTICATION;
|
|
120
|
+
message = status === 401 ? 'Invalid credentials' : 'Insufficient permissions';
|
|
121
|
+
}
|
|
122
|
+
else if (status === 404) {
|
|
123
|
+
type = ErrorType.NOT_FOUND;
|
|
124
|
+
message = 'Resource not found';
|
|
125
|
+
}
|
|
126
|
+
else if (status === 429) {
|
|
127
|
+
type = ErrorType.RATE_LIMIT;
|
|
128
|
+
message = 'Rate limit exceeded';
|
|
129
|
+
}
|
|
130
|
+
else if (status !== undefined && status >= 400 && status < 500) {
|
|
131
|
+
type = ErrorType.VALIDATION;
|
|
132
|
+
message = this.extractErrorMessage(response.data) || 'Validation error';
|
|
133
|
+
}
|
|
134
|
+
else if (status !== undefined && status >= 500) {
|
|
135
|
+
type = ErrorType.SERVER;
|
|
136
|
+
message = 'Server error occurred';
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
type = ErrorType.UNKNOWN;
|
|
140
|
+
message = 'An unexpected error occurred';
|
|
141
|
+
}
|
|
142
|
+
const prefix = operation ? `${operation}: ` : '';
|
|
143
|
+
return new ProviderError(type, prefix + message, status, response?.data);
|
|
144
|
+
}
|
|
145
|
+
return new ProviderError(ErrorType.UNKNOWN, operation ? `${operation}: ${this.getErrorMessage(error)}` : this.getErrorMessage(error), undefined, error);
|
|
146
|
+
}
|
|
147
|
+
extractErrorMessage(data) {
|
|
148
|
+
if (!this.isRecord(data)) {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
const message = data.message;
|
|
152
|
+
if (typeof message === 'string') {
|
|
153
|
+
return message;
|
|
154
|
+
}
|
|
155
|
+
const nestedError = data.error;
|
|
156
|
+
if (this.isRecord(nestedError) && typeof nestedError.message === 'string') {
|
|
157
|
+
return nestedError.message;
|
|
158
|
+
}
|
|
159
|
+
const errors = data.errors;
|
|
160
|
+
if (Array.isArray(errors) && errors.length > 0) {
|
|
161
|
+
const firstError = errors[0];
|
|
162
|
+
if (this.isRecord(firstError) && typeof firstError.message === 'string') {
|
|
163
|
+
return firstError.message;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
const detail = data.detail;
|
|
167
|
+
if (typeof detail === 'string') {
|
|
168
|
+
return detail;
|
|
169
|
+
}
|
|
170
|
+
const errorDescription = data.error_description;
|
|
171
|
+
return typeof errorDescription === 'string' ? errorDescription : null;
|
|
172
|
+
}
|
|
173
|
+
buildUrl(endpoint, baseURL) {
|
|
174
|
+
if (endpoint.startsWith('http')) {
|
|
175
|
+
return endpoint;
|
|
176
|
+
}
|
|
177
|
+
const base = baseURL || '';
|
|
178
|
+
return `${base}${endpoint}`;
|
|
179
|
+
}
|
|
180
|
+
validateRequired(data, requiredFields, operation) {
|
|
181
|
+
const missingFields = requiredFields.filter(field => {
|
|
182
|
+
const value = this.getNestedValue(data, field);
|
|
183
|
+
return value === undefined || value === null || value === '';
|
|
184
|
+
});
|
|
185
|
+
if (missingFields.length > 0) {
|
|
186
|
+
throw new ProviderError(ErrorType.VALIDATION, `${operation}: Missing required fields: ${missingFields.join(', ')}`, 400, { missingFields });
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
getNestedValue(obj, path) {
|
|
190
|
+
return path.split('.').reduce((current, key) => {
|
|
191
|
+
if (!this.isRecord(current)) {
|
|
192
|
+
return undefined;
|
|
193
|
+
}
|
|
194
|
+
return current[key];
|
|
195
|
+
}, obj);
|
|
196
|
+
}
|
|
197
|
+
sanitizeInput(input) {
|
|
198
|
+
if (typeof input === 'string') {
|
|
199
|
+
return input
|
|
200
|
+
.replace(/</g, '<')
|
|
201
|
+
.replace(/>/g, '>')
|
|
202
|
+
.replace(/"/g, '"')
|
|
203
|
+
.replace(/'/g, ''')
|
|
204
|
+
.replace(/\//g, '/');
|
|
205
|
+
}
|
|
206
|
+
if (Array.isArray(input)) {
|
|
207
|
+
return input.map(item => this.sanitizeInput(item));
|
|
208
|
+
}
|
|
209
|
+
if (this.isRecord(input)) {
|
|
210
|
+
const sanitized = {};
|
|
211
|
+
for (const [key, value] of Object.entries(input)) {
|
|
212
|
+
sanitized[key] = this.sanitizeInput(value);
|
|
213
|
+
}
|
|
214
|
+
return sanitized;
|
|
215
|
+
}
|
|
216
|
+
return input;
|
|
217
|
+
}
|
|
218
|
+
getErrorMessage(error) {
|
|
219
|
+
if (error instanceof Error && typeof error.message === 'string' && error.message.length > 0) {
|
|
220
|
+
return error.message;
|
|
221
|
+
}
|
|
222
|
+
return 'Unknown error';
|
|
223
|
+
}
|
|
224
|
+
isRecord(value) {
|
|
225
|
+
return typeof value === 'object' && value !== null;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
exports.BaseProvider = BaseProvider;
|
|
229
|
+
//# sourceMappingURL=base-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-provider.js","sourceRoot":"","sources":["../src/base-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface ConfigValidation {
|
|
2
|
+
[key: string]: {
|
|
3
|
+
required: boolean;
|
|
4
|
+
type: 'string' | 'number' | 'boolean';
|
|
5
|
+
pattern?: RegExp;
|
|
6
|
+
transform?: (value: string) => unknown;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export declare class ConfigurationError extends Error {
|
|
10
|
+
errors: string[];
|
|
11
|
+
constructor(message: string, errors: string[]);
|
|
12
|
+
}
|
|
13
|
+
export declare class ConfigValidator {
|
|
14
|
+
static validate(config: Record<string, string | undefined>, validations: ConfigValidation, providerName: string): Record<string, unknown>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=config-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-validator.d.ts","sourceRoot":"","sources":["../src/config-validator.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,QAAQ,EAAE,OAAO,CAAC;QAClB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;QACtC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;KACxC,CAAC;CACH;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IACP,MAAM,EAAE,MAAM,EAAE;gBAAxC,OAAO,EAAE,MAAM,EAAS,MAAM,EAAE,MAAM,EAAE;CAIrD;AAED,qBAAa,eAAe;IAC1B,MAAM,CAAC,QAAQ,CACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAC1C,WAAW,EAAE,gBAAgB,EAC7B,YAAY,EAAE,MAAM,GACnB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAsC3B"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConfigValidator = exports.ConfigurationError = void 0;
|
|
4
|
+
class ConfigurationError extends Error {
|
|
5
|
+
constructor(message, errors) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.errors = errors;
|
|
8
|
+
this.name = 'ConfigurationError';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.ConfigurationError = ConfigurationError;
|
|
12
|
+
class ConfigValidator {
|
|
13
|
+
static validate(config, validations, providerName) {
|
|
14
|
+
const errors = [];
|
|
15
|
+
const result = {};
|
|
16
|
+
for (const [key, validation] of Object.entries(validations)) {
|
|
17
|
+
const value = config[key];
|
|
18
|
+
if (validation.required && (!value || value.trim() === '')) {
|
|
19
|
+
errors.push(`${key} is required for ${providerName}`);
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
if (!value) {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (validation.pattern && !validation.pattern.test(value)) {
|
|
26
|
+
errors.push(`${key} has invalid format for ${providerName}`);
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
result[key] = validation.transform ? validation.transform(value) : value;
|
|
31
|
+
}
|
|
32
|
+
catch (e) {
|
|
33
|
+
const errorMessage = e instanceof Error ? e.message : String(e);
|
|
34
|
+
errors.push(`${key} has invalid value for ${providerName}: ${errorMessage}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (errors.length > 0) {
|
|
38
|
+
throw new ConfigurationError(`Invalid configuration for ${providerName}`, errors);
|
|
39
|
+
}
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.ConfigValidator = ConfigValidator;
|
|
44
|
+
//# sourceMappingURL=config-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-validator.js","sourceRoot":"","sources":["../src/config-validator.ts"],"names":[],"mappings":";;;AASA,MAAa,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,OAAe,EAAS,MAAgB;QAClD,KAAK,CAAC,OAAO,CAAC,CAAC;QADmB,WAAM,GAAN,MAAM,CAAU;QAElD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AALD,gDAKC;AAED,MAAa,eAAe;IAC1B,MAAM,CAAC,QAAQ,CACb,MAA0C,EAC1C,WAA6B,EAC7B,YAAoB;QAEpB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,MAAM,GAA4B,EAAE,CAAC;QAE3C,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAE1B,IAAI,UAAU,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBAC3D,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,oBAAoB,YAAY,EAAE,CAAC,CAAC;gBACtD,SAAS;YACX,CAAC;YAED,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,SAAS;YACX,CAAC;YAED,IAAI,UAAU,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1D,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,2BAA2B,YAAY,EAAE,CAAC,CAAC;gBAC7D,SAAS;YACX,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC3E,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,YAAY,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAChE,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,0BAA0B,YAAY,KAAK,YAAY,EAAE,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,kBAAkB,CAC1B,6BAA6B,YAAY,EAAE,EAC3C,MAAM,CACP,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AA3CD,0CA2CC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export interface HttpRequestConfig {
|
|
2
|
+
method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
|
|
3
|
+
headers?: Record<string, string>;
|
|
4
|
+
body?: unknown;
|
|
5
|
+
params?: Record<string, unknown>;
|
|
6
|
+
timeout?: number;
|
|
7
|
+
}
|
|
8
|
+
export interface HttpResponse<T = unknown> {
|
|
9
|
+
data: T;
|
|
10
|
+
status: number;
|
|
11
|
+
statusText: string;
|
|
12
|
+
headers: Headers;
|
|
13
|
+
}
|
|
14
|
+
export interface HttpError extends Error {
|
|
15
|
+
response?: {
|
|
16
|
+
data: unknown;
|
|
17
|
+
status: number;
|
|
18
|
+
statusText: string;
|
|
19
|
+
headers: Headers;
|
|
20
|
+
};
|
|
21
|
+
request?: HttpRequestConfig;
|
|
22
|
+
}
|
|
23
|
+
export declare class HttpClient {
|
|
24
|
+
private baseURL;
|
|
25
|
+
private defaultHeaders;
|
|
26
|
+
private timeout;
|
|
27
|
+
constructor(config?: {
|
|
28
|
+
baseURL?: string;
|
|
29
|
+
headers?: Record<string, string>;
|
|
30
|
+
timeout?: number;
|
|
31
|
+
});
|
|
32
|
+
request<T = unknown>(url: string, config?: HttpRequestConfig): Promise<HttpResponse<T>>;
|
|
33
|
+
get<T = unknown>(url: string, config?: HttpRequestConfig): Promise<HttpResponse<T>>;
|
|
34
|
+
post<T = unknown>(url: string, data?: unknown, config?: HttpRequestConfig): Promise<HttpResponse<T>>;
|
|
35
|
+
put<T = unknown>(url: string, data?: unknown, config?: HttpRequestConfig): Promise<HttpResponse<T>>;
|
|
36
|
+
patch<T = unknown>(url: string, data?: unknown, config?: HttpRequestConfig): Promise<HttpResponse<T>>;
|
|
37
|
+
delete<T = unknown>(url: string, config?: HttpRequestConfig): Promise<HttpResponse<T>>;
|
|
38
|
+
private buildFullUrl;
|
|
39
|
+
private mergeHeaders;
|
|
40
|
+
private parseResponse;
|
|
41
|
+
private createHttpError;
|
|
42
|
+
}
|
|
43
|
+
export declare const http: {
|
|
44
|
+
create(config?: {
|
|
45
|
+
baseURL?: string;
|
|
46
|
+
headers?: Record<string, string>;
|
|
47
|
+
timeout?: number;
|
|
48
|
+
}): HttpClient;
|
|
49
|
+
get<T = unknown>(url: string, config?: HttpRequestConfig): Promise<HttpResponse<T>>;
|
|
50
|
+
post<T = unknown>(url: string, data?: unknown, config?: HttpRequestConfig): Promise<HttpResponse<T>>;
|
|
51
|
+
put<T = unknown>(url: string, data?: unknown, config?: HttpRequestConfig): Promise<HttpResponse<T>>;
|
|
52
|
+
patch<T = unknown>(url: string, data?: unknown, config?: HttpRequestConfig): Promise<HttpResponse<T>>;
|
|
53
|
+
delete<T = unknown>(url: string, config?: HttpRequestConfig): Promise<HttpResponse<T>>;
|
|
54
|
+
isHttpError(error: unknown): error is HttpError;
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=http-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../src/http-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.http = exports.HttpClient = void 0;
|
|
4
|
+
class HttpClient {
|
|
5
|
+
constructor(config = {}) {
|
|
6
|
+
this.baseURL = config.baseURL || '';
|
|
7
|
+
this.defaultHeaders = config.headers || {};
|
|
8
|
+
this.timeout = config.timeout || 30000;
|
|
9
|
+
}
|
|
10
|
+
async request(url, config = {}) {
|
|
11
|
+
const controller = new AbortController();
|
|
12
|
+
const timeoutId = setTimeout(() => controller.abort(), config.timeout || this.timeout);
|
|
13
|
+
try {
|
|
14
|
+
const fullUrl = this.buildFullUrl(url, config.params);
|
|
15
|
+
const headers = this.mergeHeaders(config.headers);
|
|
16
|
+
let body;
|
|
17
|
+
if (config.body !== undefined && config.method !== 'GET') {
|
|
18
|
+
if (headers['Content-Type']?.includes('application/x-www-form-urlencoded')) {
|
|
19
|
+
body = new URLSearchParams(config.body).toString();
|
|
20
|
+
}
|
|
21
|
+
else if (headers['Content-Type']?.includes('application/json')) {
|
|
22
|
+
body = JSON.stringify(config.body);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
body = config.body;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const response = await fetch(fullUrl, {
|
|
29
|
+
method: config.method || 'GET',
|
|
30
|
+
headers,
|
|
31
|
+
body,
|
|
32
|
+
signal: controller.signal,
|
|
33
|
+
});
|
|
34
|
+
clearTimeout(timeoutId);
|
|
35
|
+
const data = await this.parseResponse(response);
|
|
36
|
+
if (!response.ok) {
|
|
37
|
+
throw this.createHttpError(`Request failed with status ${response.status}`, response, data, config);
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
data,
|
|
41
|
+
status: response.status,
|
|
42
|
+
statusText: response.statusText,
|
|
43
|
+
headers: response.headers,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
clearTimeout(timeoutId);
|
|
48
|
+
if (error instanceof Error && error.name === 'AbortError') {
|
|
49
|
+
throw this.createHttpError('Request timeout', undefined, undefined, config);
|
|
50
|
+
}
|
|
51
|
+
if (error instanceof Error && 'response' in error) {
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
throw this.createHttpError(error instanceof Error ? error.message : 'Network error occurred', undefined, undefined, config);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async get(url, config) {
|
|
58
|
+
return this.request(url, { ...config, method: 'GET' });
|
|
59
|
+
}
|
|
60
|
+
async post(url, data, config) {
|
|
61
|
+
return this.request(url, { ...config, method: 'POST', body: data });
|
|
62
|
+
}
|
|
63
|
+
async put(url, data, config) {
|
|
64
|
+
return this.request(url, { ...config, method: 'PUT', body: data });
|
|
65
|
+
}
|
|
66
|
+
async patch(url, data, config) {
|
|
67
|
+
return this.request(url, { ...config, method: 'PATCH', body: data });
|
|
68
|
+
}
|
|
69
|
+
async delete(url, config) {
|
|
70
|
+
return this.request(url, { ...config, method: 'DELETE' });
|
|
71
|
+
}
|
|
72
|
+
buildFullUrl(url, params) {
|
|
73
|
+
const fullUrl = url.startsWith('http') ? url : `${this.baseURL}${url}`;
|
|
74
|
+
if (!params || Object.keys(params).length === 0) {
|
|
75
|
+
return fullUrl;
|
|
76
|
+
}
|
|
77
|
+
const urlObj = new URL(fullUrl);
|
|
78
|
+
Object.entries(params).forEach(([key, value]) => {
|
|
79
|
+
if (value !== undefined && value !== null) {
|
|
80
|
+
urlObj.searchParams.append(key, String(value));
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
return urlObj.toString();
|
|
84
|
+
}
|
|
85
|
+
mergeHeaders(headers) {
|
|
86
|
+
return {
|
|
87
|
+
...this.defaultHeaders,
|
|
88
|
+
...headers,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
async parseResponse(response) {
|
|
92
|
+
const contentType = response.headers.get('Content-Type') || '';
|
|
93
|
+
if (contentType.includes('application/json')) {
|
|
94
|
+
return response.json();
|
|
95
|
+
}
|
|
96
|
+
if (contentType.includes('text')) {
|
|
97
|
+
return response.text();
|
|
98
|
+
}
|
|
99
|
+
if (response.status === 204 || response.headers.get('Content-Length') === '0') {
|
|
100
|
+
return {};
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
return response.json();
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return response.text();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
createHttpError(message, response, data, request) {
|
|
110
|
+
const error = new Error(message);
|
|
111
|
+
error.name = 'HttpError';
|
|
112
|
+
if (response) {
|
|
113
|
+
error.response = {
|
|
114
|
+
data,
|
|
115
|
+
status: response.status,
|
|
116
|
+
statusText: response.statusText,
|
|
117
|
+
headers: response.headers,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
error.request = request;
|
|
121
|
+
return error;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
exports.HttpClient = HttpClient;
|
|
125
|
+
exports.http = {
|
|
126
|
+
create(config) {
|
|
127
|
+
return new HttpClient(config);
|
|
128
|
+
},
|
|
129
|
+
get(url, config) {
|
|
130
|
+
return new HttpClient().get(url, config);
|
|
131
|
+
},
|
|
132
|
+
post(url, data, config) {
|
|
133
|
+
return new HttpClient().post(url, data, config);
|
|
134
|
+
},
|
|
135
|
+
put(url, data, config) {
|
|
136
|
+
return new HttpClient().put(url, data, config);
|
|
137
|
+
},
|
|
138
|
+
patch(url, data, config) {
|
|
139
|
+
return new HttpClient().patch(url, data, config);
|
|
140
|
+
},
|
|
141
|
+
delete(url, config) {
|
|
142
|
+
return new HttpClient().delete(url, config);
|
|
143
|
+
},
|
|
144
|
+
isHttpError(error) {
|
|
145
|
+
return error instanceof Error && 'response' in error;
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
//# sourceMappingURL=http-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.js","sourceRoot":"","sources":["../src/http-client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type { CreateResponse, QueryResponse, ILeadProvider, IContactProvider, IAccountProvider, IOpportunityProvider, ISubscriberProvider, ICustomerProvider, IRecordProvider, ICampaignProvider, IListProvider, ISegmentProvider, ITemplateProvider, IAnalyticsProvider, IAutomationProvider, IEcommerceProvider, IMessageProvider, } from './types';
|
|
2
|
+
export { BaseProvider, ErrorType, ProviderError, } from './base-provider';
|
|
3
|
+
export type { BaseProviderConfig, Logger, } from './base-provider';
|
|
4
|
+
export { HttpClient, http, } from './http-client';
|
|
5
|
+
export type { HttpRequestConfig, HttpResponse, HttpError, } from './http-client';
|
|
6
|
+
export { ConfigValidator, ConfigurationError, } from './config-validator';
|
|
7
|
+
export type { ConfigValidation, } from './config-validator';
|
|
8
|
+
export { Validators, ValidationError, } from './validators';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,cAAc,EACd,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,YAAY,EACZ,SAAS,EACT,aAAa,GACd,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,kBAAkB,EAClB,MAAM,GACP,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,UAAU,EACV,IAAI,GACL,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,iBAAiB,EACjB,YAAY,EACZ,SAAS,GACV,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,eAAe,EACf,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,UAAU,EACV,eAAe,GAChB,MAAM,cAAc,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ValidationError = exports.Validators = exports.ConfigurationError = exports.ConfigValidator = exports.http = exports.HttpClient = exports.ProviderError = exports.ErrorType = exports.BaseProvider = void 0;
|
|
4
|
+
var base_provider_1 = require("./base-provider");
|
|
5
|
+
Object.defineProperty(exports, "BaseProvider", { enumerable: true, get: function () { return base_provider_1.BaseProvider; } });
|
|
6
|
+
Object.defineProperty(exports, "ErrorType", { enumerable: true, get: function () { return base_provider_1.ErrorType; } });
|
|
7
|
+
Object.defineProperty(exports, "ProviderError", { enumerable: true, get: function () { return base_provider_1.ProviderError; } });
|
|
8
|
+
var http_client_1 = require("./http-client");
|
|
9
|
+
Object.defineProperty(exports, "HttpClient", { enumerable: true, get: function () { return http_client_1.HttpClient; } });
|
|
10
|
+
Object.defineProperty(exports, "http", { enumerable: true, get: function () { return http_client_1.http; } });
|
|
11
|
+
var config_validator_1 = require("./config-validator");
|
|
12
|
+
Object.defineProperty(exports, "ConfigValidator", { enumerable: true, get: function () { return config_validator_1.ConfigValidator; } });
|
|
13
|
+
Object.defineProperty(exports, "ConfigurationError", { enumerable: true, get: function () { return config_validator_1.ConfigurationError; } });
|
|
14
|
+
var validators_1 = require("./validators");
|
|
15
|
+
Object.defineProperty(exports, "Validators", { enumerable: true, get: function () { return validators_1.Validators; } });
|
|
16
|
+
Object.defineProperty(exports, "ValidationError", { enumerable: true, get: function () { return validators_1.ValidationError; } });
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAoBA,iDAIyB;AAHvB,6GAAA,YAAY,OAAA;AACZ,0GAAA,SAAS,OAAA;AACT,8GAAA,aAAa,OAAA;AAQf,6CAGuB;AAFrB,yGAAA,UAAU,OAAA;AACV,mGAAA,IAAI,OAAA;AASN,uDAG4B;AAF1B,mHAAA,eAAe,OAAA;AACf,sHAAA,kBAAkB,OAAA;AAOpB,2CAGsB;AAFpB,wGAAA,UAAU,OAAA;AACV,6GAAA,eAAe,OAAA"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
export type CreateResponse<T = unknown> = {
|
|
2
|
+
data: T | null;
|
|
3
|
+
error: unknown;
|
|
4
|
+
};
|
|
5
|
+
export type QueryResponse<T = unknown> = {
|
|
6
|
+
data: {
|
|
7
|
+
records: T[];
|
|
8
|
+
totalSize: number;
|
|
9
|
+
done: boolean;
|
|
10
|
+
} | null;
|
|
11
|
+
error: unknown;
|
|
12
|
+
};
|
|
13
|
+
export interface ILeadProvider<T = unknown, R = unknown> {
|
|
14
|
+
createLead(lead: T): Promise<CreateResponse<R>>;
|
|
15
|
+
}
|
|
16
|
+
export interface IContactProvider<T = unknown, R = unknown> {
|
|
17
|
+
createContact(contact: T): Promise<CreateResponse<R>>;
|
|
18
|
+
}
|
|
19
|
+
export interface IAccountProvider<T = unknown, R = unknown> {
|
|
20
|
+
createAccount(account: T): Promise<CreateResponse<R>>;
|
|
21
|
+
}
|
|
22
|
+
export interface IOpportunityProvider<T = unknown, R = unknown> {
|
|
23
|
+
createOpportunity(opportunity: T): Promise<CreateResponse<R>>;
|
|
24
|
+
}
|
|
25
|
+
export interface ISubscriberProvider<T = unknown, R = unknown> {
|
|
26
|
+
addSubscriber(subscriber: T): Promise<CreateResponse<R>>;
|
|
27
|
+
}
|
|
28
|
+
export interface ICustomerProvider<T = unknown, R = unknown> {
|
|
29
|
+
createCustomer(customer: T): Promise<CreateResponse<R>>;
|
|
30
|
+
}
|
|
31
|
+
export interface IRecordProvider<T = unknown, R = unknown, L = unknown> {
|
|
32
|
+
createRecord(record: T, tableName: string): Promise<CreateResponse<R>>;
|
|
33
|
+
getRecords(tableName: string, params?: Record<string, unknown>): Promise<CreateResponse<L>>;
|
|
34
|
+
updateRecord(recordId: string, record: T, tableName: string): Promise<CreateResponse<R>>;
|
|
35
|
+
deleteRecord(recordId: string, tableName: string): Promise<CreateResponse<unknown>>;
|
|
36
|
+
}
|
|
37
|
+
export interface ICampaignProvider<T = unknown, R = unknown> {
|
|
38
|
+
getCampaigns(params?: {
|
|
39
|
+
count?: number;
|
|
40
|
+
offset?: number;
|
|
41
|
+
}): Promise<CreateResponse<R>>;
|
|
42
|
+
createCampaign(campaign: T): Promise<CreateResponse<R>>;
|
|
43
|
+
sendCampaign(campaignId: string): Promise<CreateResponse<R>>;
|
|
44
|
+
}
|
|
45
|
+
export interface IListProvider<T = unknown, R = unknown> {
|
|
46
|
+
getLists(params?: {
|
|
47
|
+
count?: number;
|
|
48
|
+
offset?: number;
|
|
49
|
+
}): Promise<CreateResponse<R>>;
|
|
50
|
+
createList(list: T): Promise<CreateResponse<R>>;
|
|
51
|
+
}
|
|
52
|
+
export interface ISegmentProvider<T = unknown, R = unknown> {
|
|
53
|
+
getSegments(listId?: string): Promise<CreateResponse<R>>;
|
|
54
|
+
createSegment(segment: T, listId?: string): Promise<CreateResponse<R>>;
|
|
55
|
+
}
|
|
56
|
+
export interface ITemplateProvider<R = unknown> {
|
|
57
|
+
getTemplates(params?: {
|
|
58
|
+
count?: number;
|
|
59
|
+
offset?: number;
|
|
60
|
+
}): Promise<CreateResponse<R>>;
|
|
61
|
+
}
|
|
62
|
+
export interface IAnalyticsProvider<R = unknown> {
|
|
63
|
+
getCampaignReport(campaignId: string): Promise<CreateResponse<R>>;
|
|
64
|
+
}
|
|
65
|
+
export interface IAutomationProvider<R = unknown> {
|
|
66
|
+
getAutomations(): Promise<CreateResponse<R>>;
|
|
67
|
+
startAutomation(workflowId: string, emailId: string): Promise<CreateResponse<R>>;
|
|
68
|
+
}
|
|
69
|
+
export interface IEcommerceProvider<S = unknown, O = unknown, SR = unknown, OR = unknown> {
|
|
70
|
+
addStore(store: S): Promise<CreateResponse<SR>>;
|
|
71
|
+
addOrder(storeId: string, order: O): Promise<CreateResponse<OR>>;
|
|
72
|
+
}
|
|
73
|
+
export interface IMessageProvider<T = unknown, R = unknown> {
|
|
74
|
+
sendMessage(message: T): Promise<CreateResponse<R>>;
|
|
75
|
+
}
|
|
76
|
+
//# 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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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare class ValidationError extends Error {
|
|
2
|
+
field: string;
|
|
3
|
+
constructor(field: string, message: string);
|
|
4
|
+
}
|
|
5
|
+
export declare class Validators {
|
|
6
|
+
static validateEmail(email: string): boolean;
|
|
7
|
+
static validatePhone(phone: string): boolean;
|
|
8
|
+
static validateUrl(url: string): boolean;
|
|
9
|
+
static validateDate(date: string): boolean;
|
|
10
|
+
static validatePaginationParams(params: {
|
|
11
|
+
limit?: number;
|
|
12
|
+
offset?: number;
|
|
13
|
+
}): void;
|
|
14
|
+
static validateId(id: string, fieldName?: string): void;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=validators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAgB,SAAQ,KAAK;IACrB,KAAK,EAAE,MAAM;gBAAb,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAIlD;AAED,qBAAa,UAAU;IACrB,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAK5C,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAK5C,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IASxC,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQ1C,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAiBlF,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,IAAI;CAStD"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Validators = exports.ValidationError = void 0;
|
|
4
|
+
class ValidationError extends Error {
|
|
5
|
+
constructor(field, message) {
|
|
6
|
+
super(`Validation error for field '${field}': ${message}`);
|
|
7
|
+
this.field = field;
|
|
8
|
+
this.name = 'ValidationError';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.ValidationError = ValidationError;
|
|
12
|
+
class Validators {
|
|
13
|
+
static validateEmail(email) {
|
|
14
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
15
|
+
return emailRegex.test(email);
|
|
16
|
+
}
|
|
17
|
+
static validatePhone(phone) {
|
|
18
|
+
const phoneRegex = /^[\d\s\-+()]+$/;
|
|
19
|
+
return phoneRegex.test(phone) && phone.replace(/\D/g, '').length >= 10;
|
|
20
|
+
}
|
|
21
|
+
static validateUrl(url) {
|
|
22
|
+
try {
|
|
23
|
+
new URL(url);
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
static validateDate(date) {
|
|
31
|
+
const dateRegex = /^\d{4}-\d{2}-\d{2}$/;
|
|
32
|
+
if (!dateRegex.test(date))
|
|
33
|
+
return false;
|
|
34
|
+
const parsedDate = new Date(date);
|
|
35
|
+
return !isNaN(parsedDate.getTime());
|
|
36
|
+
}
|
|
37
|
+
static validatePaginationParams(params) {
|
|
38
|
+
if (params.limit !== undefined) {
|
|
39
|
+
if (!Number.isInteger(params.limit) || params.limit < 1) {
|
|
40
|
+
throw new ValidationError('limit', 'Limit must be a positive integer');
|
|
41
|
+
}
|
|
42
|
+
if (params.limit > 1000) {
|
|
43
|
+
throw new ValidationError('limit', 'Limit cannot exceed 1000');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (params.offset !== undefined) {
|
|
47
|
+
if (!Number.isInteger(params.offset) || params.offset < 0) {
|
|
48
|
+
throw new ValidationError('offset', 'Offset must be a non-negative integer');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
static validateId(id, fieldName = 'id') {
|
|
53
|
+
if (!id || id.trim() === '') {
|
|
54
|
+
throw new ValidationError(fieldName, `${fieldName} is required`);
|
|
55
|
+
}
|
|
56
|
+
if (!/^[a-zA-Z0-9_.-]+$/.test(id)) {
|
|
57
|
+
throw new ValidationError(fieldName, `${fieldName} contains invalid characters`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
exports.Validators = Validators;
|
|
62
|
+
//# sourceMappingURL=validators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":";;;AAAA,MAAa,eAAgB,SAAQ,KAAK;IACxC,YAAmB,KAAa,EAAE,OAAe;QAC/C,KAAK,CAAC,+BAA+B,KAAK,MAAM,OAAO,EAAE,CAAC,CAAC;QAD1C,UAAK,GAAL,KAAK,CAAQ;QAE9B,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AALD,0CAKC;AAED,MAAa,UAAU;IACrB,MAAM,CAAC,aAAa,CAAC,KAAa;QAChC,MAAM,UAAU,GAAG,4BAA4B,CAAC;QAChD,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,KAAa;QAChC,MAAM,UAAU,GAAG,gBAAgB,CAAC;QACpC,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;IACzE,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,IAAY;QAC9B,MAAM,SAAS,GAAG,qBAAqB,CAAC;QACxC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAExC,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,CAAC,wBAAwB,CAAC,MAA2C;QACzE,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBACxD,MAAM,IAAI,eAAe,CAAC,OAAO,EAAE,kCAAkC,CAAC,CAAC;YACzE,CAAC;YACD,IAAI,MAAM,CAAC,KAAK,GAAG,IAAI,EAAE,CAAC;gBACxB,MAAM,IAAI,eAAe,CAAC,OAAO,EAAE,0BAA0B,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1D,MAAM,IAAI,eAAe,CAAC,QAAQ,EAAE,uCAAuC,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,EAAU,EAAE,SAAS,GAAG,IAAI;QAC5C,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC5B,MAAM,IAAI,eAAe,CAAC,SAAS,EAAE,GAAG,SAAS,cAAc,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,eAAe,CAAC,SAAS,EAAE,GAAG,SAAS,8BAA8B,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;CACF;AAtDD,gCAsDC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@marketing-sdk/core",
|
|
3
|
+
"version": "0.1.1-experimental.0",
|
|
4
|
+
"description": "Core infrastructure for @marketing-sdk packages",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"require": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"publishConfig": {
|
|
18
|
+
"access": "public"
|
|
19
|
+
},
|
|
20
|
+
"license": "MIT",
|
|
21
|
+
"devDependencies": {},
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "tsc",
|
|
24
|
+
"dev": "tsc -w",
|
|
25
|
+
"test": "jest",
|
|
26
|
+
"test:watch": "jest --watch",
|
|
27
|
+
"test:coverage": "jest --coverage",
|
|
28
|
+
"lint": "eslint src --ext .ts",
|
|
29
|
+
"typecheck": "tsc --noEmit",
|
|
30
|
+
"clean": "rm -rf dist"
|
|
31
|
+
}
|
|
32
|
+
}
|