UNPKG

@drift-labs/common

Version:

Common functions for Drift

146 lines 6.05 kB
"use strict"; 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