magicbell
Version:
MagicBell API wrapper
65 lines • 2.61 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.isOptionsHash = isOptionsHash;
exports.assertHasValidOptions = assertHasValidOptions;
exports.assertHasRequiredOptions = assertHasRequiredOptions;
exports.assertHasSomeOptions = assertHasSomeOptions;
exports.mergeHooks = mergeHooks;
const utils_js_1 = require("../lib/utils.js");
const optionValidators = {
host: utils_js_1.isString,
maxRetryDelay: utils_js_1.isNumber,
timeout: utils_js_1.isNumber,
token: utils_js_1.isString,
apiKey: utils_js_1.isString,
maxRetries: utils_js_1.isNumber,
userEmail: utils_js_1.isString,
userExternalId: utils_js_1.isString,
userHmac: utils_js_1.isString,
idempotencyKey: utils_js_1.isString,
telemetry: utils_js_1.isBoolean,
apiSecret: utils_js_1.isString,
appInfo: utils_js_1.isObject,
features: utils_js_1.isObject,
headers: utils_js_1.isObject,
hooks: utils_js_1.isObject,
cacheTTL: utils_js_1.isNumber,
};
function isOptionsHash(object) {
if (!(0, utils_js_1.isObject)(object))
return false;
for (const key of Object.keys(object)) {
if (!optionValidators[key]?.(object[key]))
return false;
}
return true;
}
function assertHasValidOptions(options) {
const invalidOptions = Object.keys(options).filter((x) => options[x] != null && !optionValidators[x]?.(options[x]));
if (invalidOptions.length) {
throw new Error(`You have provided invalid client options. Please check the options ${(0, utils_js_1.joinAnd)(...invalidOptions)}.`);
}
}
function assertHasRequiredOptions(options, required) {
const missingOptions = required.filter((x) => !(0, utils_js_1.hasOwn)(options, x) || options[x] == null || options[x] === '');
if (missingOptions.length) {
throw new Error(`You have not provided all required client options. Please provide ${(0, utils_js_1.joinAnd)(...missingOptions)}.`);
}
}
function assertHasSomeOptions(options, keys) {
const missingOptions = keys.filter((x) => !(0, utils_js_1.hasOwn)(options, x) || options[x] == null || options[x] === '');
if (missingOptions.length === keys.length) {
throw new Error(`You have not provided any of the required client options. Please provide ${(0, utils_js_1.joinOr)(...keys)}.`);
}
}
function mergeHooks(...hooks) {
const result = {};
for (const hook of hooks) {
for (const key of Object.keys(hook || {})) {
result[key] ??= [];
result[key].push(...hook[key]);
}
}
return result;
}
//# sourceMappingURL=options.js.map