chaingate
Version:
Multi-chain cryptocurrency SDK for TypeScript — unified API for Bitcoin, Ethereum, Litecoin, Dogecoin, Bitcoin Cash, Polygon, Arbitrum, and any EVM-compatible chain. Create wallets, query balances, send transactions, and manage tokens and NFTs across UTXO
105 lines (104 loc) • 3.18 kB
JavaScript
;
// This file is auto-generated by @hey-api/openapi-ts
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildClientParams = void 0;
const extraPrefixesMap = {
$body_: 'body',
$headers_: 'headers',
$path_: 'path',
$query_: 'query',
};
const extraPrefixes = Object.entries(extraPrefixesMap);
const buildKeyMap = (fields, map) => {
if (!map) {
map = new Map();
}
for (const config of fields) {
if ('in' in config) {
if (config.key) {
map.set(config.key, {
in: config.in,
map: config.map,
});
}
}
else if ('key' in config) {
map.set(config.key, {
map: config.map,
});
}
else if (config.args) {
buildKeyMap(config.args, map);
}
}
return map;
};
const stripEmptySlots = (params) => {
for (const [slot, value] of Object.entries(params)) {
if (value && typeof value === 'object' && !Array.isArray(value) && !Object.keys(value).length) {
delete params[slot];
}
}
};
const buildClientParams = (args, fields) => {
const params = {
body: {},
headers: {},
path: {},
query: {},
};
const map = buildKeyMap(fields);
let config;
for (const [index, arg] of args.entries()) {
if (fields[index]) {
config = fields[index];
}
if (!config) {
continue;
}
if ('in' in config) {
if (config.key) {
const field = map.get(config.key);
const name = field.map || config.key;
if (field.in) {
params[field.in][name] = arg;
}
}
else {
params.body = arg;
}
}
else {
for (const [key, value] of Object.entries(arg ?? {})) {
const field = map.get(key);
if (field) {
if (field.in) {
const name = field.map || key;
params[field.in][name] = value;
}
else {
params[field.map] = value;
}
}
else {
const extra = extraPrefixes.find(([prefix]) => key.startsWith(prefix));
if (extra) {
const [prefix, slot] = extra;
params[slot][key.slice(prefix.length)] = value;
}
else if ('allowExtra' in config && config.allowExtra) {
for (const [slot, allowed] of Object.entries(config.allowExtra)) {
if (allowed) {
params[slot][key] = value;
break;
}
}
}
}
}
}
}
stripEmptySlots(params);
return params;
};
exports.buildClientParams = buildClientParams;