@drift-labs/common
Version:
Common functions for Drift
146 lines • 6.05 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.mapAuctionParamsResponse = void 0;
const sdk_1 = require("@drift-labs/sdk");
const utils_1 = require("../../utils");
const FIELD_MAPPING = {
// Enums (string -> enum object)
orderType: { type: 'enum' },
marketType: { type: 'enum' },
direction: { type: 'enum' },
postOnly: { type: 'enum' },
triggerCondition: { type: 'enum' },
// Numbers (keep as numbers)
userOrderId: { type: 'number' },
marketIndex: { type: 'number' },
auctionDuration: { type: 'number' },
// Booleans
reduceOnly: { type: 'boolean' },
immediateOrCancel: { type: 'boolean' },
// BNs (string/number -> BN)
baseAssetAmount: { type: 'bn' },
auctionStartPrice: { type: 'bn' },
auctionEndPrice: { type: 'bn' },
// Nullable BNs
oraclePriceOffset: { type: 'bn_nullable' },
triggerPrice: { type: 'bn_nullable' },
maxTs: { type: 'bn_nullable' },
};
// Type conversion functions
const convertValue = (value, type) => {
switch (type) {
case 'enum':
try {
// Convert string values to proper SDK enums
let enumResult;
switch (value) {
case 'oracle':
enumResult = sdk_1.OrderType.ORACLE;
break;
case 'market':
enumResult = sdk_1.OrderType.MARKET;
break;
case 'limit':
enumResult = sdk_1.OrderType.LIMIT;
break;
case 'trigger_market':
enumResult = sdk_1.OrderType.TRIGGER_MARKET;
break;
case 'trigger_limit':
enumResult = sdk_1.OrderType.TRIGGER_LIMIT;
break;
case 'perp':
enumResult = sdk_1.MarketType.PERP;
break;
case 'spot':
enumResult = sdk_1.MarketType.SPOT;
break;
case 'long':
enumResult = sdk_1.PositionDirection.LONG;
break;
case 'short':
enumResult = sdk_1.PositionDirection.SHORT;
break;
case 'none':
enumResult = sdk_1.PostOnlyParams.NONE;
break;
case 'must_post_only':
enumResult = sdk_1.PostOnlyParams.MUST_POST_ONLY;
break;
case 'try_post_only':
enumResult = sdk_1.PostOnlyParams.TRY_POST_ONLY;
break;
case 'above':
enumResult = sdk_1.OrderTriggerCondition.ABOVE;
break;
case 'below':
enumResult = sdk_1.OrderTriggerCondition.BELOW;
break;
case 'triggered_above':
enumResult = sdk_1.OrderTriggerCondition.TRIGGERED_ABOVE;
break;
case 'triggered_below':
enumResult = sdk_1.OrderTriggerCondition.TRIGGERED_BELOW;
break;
default:
console.warn(`⚠️ [Converter] Unknown enum value: ${value}, using ENUM_UTILS.toObj as fallback`);
enumResult = utils_1.ENUM_UTILS.toObj(value);
}
return enumResult;
}
catch (error) {
console.error(`❌ [Converter] Enum conversion failed for ${value}:`, error);
throw error;
}
case 'bn':
if (value === null || value === undefined) {
// Server returned null for a required BN field, this should cause fallback to client-side calculation
throw new Error(`Server returned ${value === null ? 'null' : 'undefined'} for required BN field, expected non-null value`);
}
return new sdk_1.BN(value.toString());
case 'bn_nullable':
return value === null || value === undefined
? null
: new sdk_1.BN(value.toString());
case 'number':
return value;
case 'boolean':
return value;
default:
return value;
}
};
/**
* Maps the server response from getOrderParams back to proper client-side types
*/
function mapAuctionParamsResponse(serverAuctionParams) {
const mapped = {};
// Extract the actual params from the nested structure
if (!serverAuctionParams) {
throw new Error('Invalid server response: missing data.params');
}
// Process each field based on its configuration
Object.entries(FIELD_MAPPING).forEach(([fieldName, config]) => {
const serverValue = serverAuctionParams[fieldName];
if (serverValue !== undefined) {
try {
mapped[fieldName] = convertValue(serverValue, config.type);
}
catch (error) {
console.error(`🔴 [Mapper] Field conversion error:`, {
fieldName,
serverValue,
expectedType: config.type,
actualType: typeof serverValue,
isNull: serverValue === null,
isUndefined: serverValue === undefined,
fullServerResponse: serverAuctionParams,
});
throw new Error(`Failed to convert field '${fieldName}' (value: ${serverValue}, type: ${config.type}): ${error instanceof Error ? error.message : error}`);
}
}
});
return mapped;
}
exports.mapAuctionParamsResponse = mapAuctionParamsResponse;
//# sourceMappingURL=auctionParamsResponseMapper.js.map
;