omnisend-node-sdk
Version:
🔹 Typesafe Omnisend API SDK for Node.js
136 lines (135 loc) • 6.78 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.HttpClient = exports.ContentType = void 0;
const axios_1 = __importStar(require("axios"));
const form_data_1 = __importDefault(require("form-data"));
var ContentType;
(function (ContentType) {
ContentType["Json"] = "application/json";
ContentType["FormData"] = "multipart/form-data";
ContentType["UrlEncoded"] = "application/x-www-form-urlencoded";
ContentType["Text"] = "text/plain";
})(ContentType || (exports.ContentType = ContentType = {}));
class HttpClient {
constructor(_a = {}) {
var { securityWorker, secure, format, safeMode } = _a, axiosConfig = __rest(_a, ["securityWorker", "secure", "format", "safeMode"]);
this.securityData = null;
this.setSecurityData = (data) => {
this.securityData = data;
};
this.request = (_b) => __awaiter(this, void 0, void 0, function* () {
var _c, _d;
var { secure, path, type, query, format, body } = _b, params = __rest(_b, ["secure", "path", "type", "query", "format", "body"]);
const secureParams = ((typeof secure === "boolean" ? secure : this.secure) &&
this.securityWorker &&
(yield this.securityWorker(this.securityData))) ||
{};
const requestParams = this.mergeRequestParams(params, secureParams);
const responseFormat = format || this.format || undefined;
if (type === ContentType.FormData &&
body &&
body !== null &&
typeof body === "object") {
body = this.createFormData(body);
}
if (type === ContentType.Text && body && body !== null && typeof body !== "string") {
body = JSON.stringify(body);
}
try {
const res = yield this.instance.request(Object.assign(Object.assign({}, requestParams), { headers: Object.assign(Object.assign({}, (requestParams.headers || {})), (type && type !== ContentType.FormData ? { "Content-Type": type } : {})), params: query, responseType: responseFormat, data: body, url: path }));
if (this.safeMode) {
return { success: true, data: res.data };
}
return res.data;
}
catch (error) {
if (this.safeMode) {
if ((0, axios_1.isAxiosError)(error)) {
const apiErr = (_d = (_c = error.response) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.error;
if (apiErr && typeof apiErr === "string") {
return { success: false, error: apiErr };
}
return { success: false, error: undefined };
}
}
throw error;
}
});
this.instance = axios_1.default.create(Object.assign(Object.assign({}, axiosConfig), { baseURL: axiosConfig.baseURL || "https://api.omnisend.com/v3" }));
this.secure = secure;
this.format = format;
this.securityWorker = securityWorker;
this.safeMode = safeMode;
}
mergeRequestParams(params1, params2) {
const method = params1.method || (params2 && params2.method);
return Object.assign(Object.assign(Object.assign(Object.assign({}, this.instance.defaults), params1), (params2 || {})), { headers: Object.assign(Object.assign(Object.assign({}, ((method &&
this.instance.defaults.headers[method.toLowerCase()]) ||
{})), (params1.headers || {})), ((params2 && params2.headers) || {})) });
}
stringifyFormItem(formItem) {
if (typeof formItem === "object" && formItem !== null) {
return JSON.stringify(formItem);
}
else {
return `${formItem}`;
}
}
createFormData(input) {
return Object.keys(input || {}).reduce((formData, key) => {
const property = input[key];
const propertyContent = property instanceof Array ? property : [property];
for (const formItem of propertyContent) {
formData.append(key, this.stringifyFormItem(formItem));
}
return formData;
}, new form_data_1.default());
}
}
exports.HttpClient = HttpClient;