@oddmaki-protocol/sdk 1.12.1 → 1.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -12289,9 +12289,107 @@ function parseMetadata(json) {
12289
12289
  }
12290
12290
  }
12291
12291
 
12292
+ // src/utils/feeAwarePricing.ts
12293
+ var BPS_DENOMINATOR = 10000n;
12294
+ var OPERATOR_FEE_BPS = 10n;
12295
+ function getTotalFeeBps(fees) {
12296
+ return fees.protocolFeeBps + fees.venueFeeBps + (fees.operatorFeeBps ?? OPERATOR_FEE_BPS);
12297
+ }
12298
+ function ceilDiv(numerator, denominator) {
12299
+ return (numerator + denominator - 1n) / denominator;
12300
+ }
12301
+ function fullPriceTicks(tickSize) {
12302
+ return 10n ** 18n / tickSize;
12303
+ }
12304
+ function minBuyTickToCross(params) {
12305
+ const fullTicks = fullPriceTicks(params.tickSize);
12306
+ const minTotalTicks = ceilDiv(fullTicks * (BPS_DENOMINATOR + params.feeBps), BPS_DENOMINATOR);
12307
+ let best = null;
12308
+ if (params.sameOutcomeAskTick && params.sameOutcomeAskTick > 0n) {
12309
+ const tick = ceilDiv(
12310
+ params.sameOutcomeAskTick * (BPS_DENOMINATOR + params.feeBps),
12311
+ BPS_DENOMINATOR
12312
+ );
12313
+ if (tick > 0n && tick <= fullTicks) {
12314
+ best = { tick, price: tickToPrice(tick, params.tickSize), path: "normal" };
12315
+ }
12316
+ }
12317
+ if (params.oppositeOutcomeBidTick && params.oppositeOutcomeBidTick > 0n) {
12318
+ if (params.oppositeOutcomeBidTick < minTotalTicks) {
12319
+ const tick = minTotalTicks - params.oppositeOutcomeBidTick;
12320
+ if (tick > 0n && tick <= fullTicks) {
12321
+ if (!best || tick < best.tick) {
12322
+ best = { tick, price: tickToPrice(tick, params.tickSize), path: "mint" };
12323
+ }
12324
+ }
12325
+ }
12326
+ }
12327
+ return best;
12328
+ }
12329
+ function maxSellTickToCross(params) {
12330
+ const fullTicks = fullPriceTicks(params.tickSize);
12331
+ const maxMergeTotalTicks = fullTicks * (BPS_DENOMINATOR - params.feeBps) / BPS_DENOMINATOR;
12332
+ let best = null;
12333
+ if (params.sameOutcomeBidTick && params.sameOutcomeBidTick > 0n) {
12334
+ const tick = params.sameOutcomeBidTick;
12335
+ best = { tick, price: tickToPrice(tick, params.tickSize), path: "normal" };
12336
+ }
12337
+ if (params.oppositeOutcomeAskTick && params.oppositeOutcomeAskTick > 0n) {
12338
+ if (maxMergeTotalTicks > params.oppositeOutcomeAskTick) {
12339
+ const tick = maxMergeTotalTicks - params.oppositeOutcomeAskTick;
12340
+ if (tick > 0n && (!best || tick > best.tick)) {
12341
+ best = { tick, price: tickToPrice(tick, params.tickSize), path: "merge" };
12342
+ }
12343
+ }
12344
+ }
12345
+ return best;
12346
+ }
12347
+ function applyTakerFeeBuffer(askTick, feeBps, tickSize) {
12348
+ const fullTicks = fullPriceTicks(tickSize);
12349
+ const tick = ceilDiv(askTick * (BPS_DENOMINATOR + feeBps), BPS_DENOMINATOR);
12350
+ return tick > fullTicks ? fullTicks : tick;
12351
+ }
12352
+ function estimateBuyFromShares(shares, pricePerShare) {
12353
+ const safeShares = Math.max(0, Number.isFinite(shares) ? shares : 0);
12354
+ const safePrice = Math.max(0, Number.isFinite(pricePerShare) ? pricePerShare : 0);
12355
+ const cost = safeShares * safePrice;
12356
+ const payout = safeShares;
12357
+ return {
12358
+ shares: safeShares,
12359
+ cost,
12360
+ payout,
12361
+ profit: payout - cost,
12362
+ avgPrice: safePrice
12363
+ };
12364
+ }
12365
+ function estimateBuyFromAmount(amount, pricePerShare) {
12366
+ const safeAmount = Math.max(0, Number.isFinite(amount) ? amount : 0);
12367
+ const safePrice = Math.max(0, Number.isFinite(pricePerShare) ? pricePerShare : 0);
12368
+ if (safePrice <= 0) {
12369
+ return { shares: 0, cost: safeAmount, payout: 0, profit: -safeAmount, avgPrice: 0 };
12370
+ }
12371
+ const shares = safeAmount / safePrice;
12372
+ return {
12373
+ shares,
12374
+ cost: safeAmount,
12375
+ payout: shares,
12376
+ profit: shares - safeAmount,
12377
+ avgPrice: safePrice
12378
+ };
12379
+ }
12380
+ function estimateSellFromShares(shares, pricePerShare) {
12381
+ const safeShares = Math.max(0, Number.isFinite(shares) ? shares : 0);
12382
+ const safePrice = Math.max(0, Number.isFinite(pricePerShare) ? pricePerShare : 0);
12383
+ return {
12384
+ shares: safeShares,
12385
+ avgPrice: safePrice,
12386
+ proceeds: safeShares * safePrice
12387
+ };
12388
+ }
12389
+
12292
12390
  // src/index.ts
12293
12391
  var version = "0.1.0";
12294
12392
 
12295
- export { AccessControlFacet_default as AccessControlFacetABI, AccessControlModule, BatchOrdersFacet_default as BatchOrdersFacetABI, CONTRACT_ADDRESSES, ConditionalTokens_default as ConditionalTokensABI, DEFAULT_CHAIN, ERC20_default as ERC20ABI, FeedProvider, GET_ALL_MARKETS_FEED, GET_ALL_MARKETS_FEED_BY_VOLUME, GET_CHART_TRADES, GET_CHART_TRADES_ALL, GET_GROUP_MARKETS, GET_LEADERBOARD, GET_MARKET, GET_MARKETS, GET_MARKETS_WITH_PRICING, GET_MARKET_GROUP, GET_MARKET_GROUPS, GET_MARKET_GROUP_ITEM, GET_MARKET_TOP_HOLDERS, GET_ORDERS, GET_PRICE_MARKET_SERIES, GET_PROTOCOL_STATS, GET_QUESTION, GET_QUESTIONS, GET_RECENT_MARKETS, GET_RECENT_TRADES, GET_TOP_OF_BOOK, GET_TRADER_CLOSED_POSITIONS, GET_TRADER_FILLS, GET_TRADER_POSITIONS, GET_TRADER_PROFILE, GET_TRADER_VENUE_CLOSED_POSITIONS, GET_TRADER_VENUE_FILLS, GET_TRADER_VENUE_POSITIONS, GET_TRADER_VENUE_PROFILE, GET_TRADES, GET_UNIFIED_MARKET_FEED, GET_UNIFIED_MARKET_FEED_BY_VOLUME, GET_USER, GET_VENUES, GET_VENUE_LEADERBOARD, LimitOrdersFacet_default as LimitOrdersFacetABI, MarketGroupFacet_default as MarketGroupFacetABI, MarketModule, MarketOrdersFacet_default as MarketOrdersFacetABI, MarketsFacet_default as MarketsFacetABI, MatchingFacet_default as MatchingFacetABI, MetadataFacet_default as MetadataFacetABI, NegRiskFacet_default as NegRiskFacetABI, OddMakiClient, OrderBookFacet_default as OrderBookFacetABI, PROTOCOL_FEES, PriceMarketFacet_default as PriceMarketFacetABI, PriceMarketModule, ProtocolFacet_default as ProtocolFacetABI, PublicModule, PythResolutionFacet_default as PythResolutionFacetABI, ResolutionFacet_default as ResolutionFacetABI, SUBGRAPH_IDS, SubgraphClient, TICK_SIZE_FINE, TICK_SIZE_STANDARD, TagsFacet_default as TagsFacetABI, TokenModule, TradeModule, UMA_DEFAULTS, UmaModule, UmaOracle_default as UmaOracleABI, VALID_TICK_SIZES, VaultFacet_default as VaultFacetABI, VenueFacet_default as VenueFacetABI, VenueModule, WhitelistAccessControl_default as WhitelistAccessControlABI, buildSubgraphGatewayUrl, calculateChancePercent, clearDecimalsCache, createExpiry, createOddMakiClient, formatAmount, formatAncillaryData, formatTimestamp, getCachedTokenDecimals, getOutcomePrice, getTokenDecimals, isValidTickSize, parseAmount, parseAncillaryData, parseMetadata, parseTokenAmount, priceToTick, resolveIPFSUri, tickToPercentage, tickToPrice, version };
12393
+ export { AccessControlFacet_default as AccessControlFacetABI, AccessControlModule, BPS_DENOMINATOR, BatchOrdersFacet_default as BatchOrdersFacetABI, CONTRACT_ADDRESSES, ConditionalTokens_default as ConditionalTokensABI, DEFAULT_CHAIN, ERC20_default as ERC20ABI, FeedProvider, GET_ALL_MARKETS_FEED, GET_ALL_MARKETS_FEED_BY_VOLUME, GET_CHART_TRADES, GET_CHART_TRADES_ALL, GET_GROUP_MARKETS, GET_LEADERBOARD, GET_MARKET, GET_MARKETS, GET_MARKETS_WITH_PRICING, GET_MARKET_GROUP, GET_MARKET_GROUPS, GET_MARKET_GROUP_ITEM, GET_MARKET_TOP_HOLDERS, GET_ORDERS, GET_PRICE_MARKET_SERIES, GET_PROTOCOL_STATS, GET_QUESTION, GET_QUESTIONS, GET_RECENT_MARKETS, GET_RECENT_TRADES, GET_TOP_OF_BOOK, GET_TRADER_CLOSED_POSITIONS, GET_TRADER_FILLS, GET_TRADER_POSITIONS, GET_TRADER_PROFILE, GET_TRADER_VENUE_CLOSED_POSITIONS, GET_TRADER_VENUE_FILLS, GET_TRADER_VENUE_POSITIONS, GET_TRADER_VENUE_PROFILE, GET_TRADES, GET_UNIFIED_MARKET_FEED, GET_UNIFIED_MARKET_FEED_BY_VOLUME, GET_USER, GET_VENUES, GET_VENUE_LEADERBOARD, LimitOrdersFacet_default as LimitOrdersFacetABI, MarketGroupFacet_default as MarketGroupFacetABI, MarketModule, MarketOrdersFacet_default as MarketOrdersFacetABI, MarketsFacet_default as MarketsFacetABI, MatchingFacet_default as MatchingFacetABI, MetadataFacet_default as MetadataFacetABI, NegRiskFacet_default as NegRiskFacetABI, OPERATOR_FEE_BPS, OddMakiClient, OrderBookFacet_default as OrderBookFacetABI, PROTOCOL_FEES, PriceMarketFacet_default as PriceMarketFacetABI, PriceMarketModule, ProtocolFacet_default as ProtocolFacetABI, PublicModule, PythResolutionFacet_default as PythResolutionFacetABI, ResolutionFacet_default as ResolutionFacetABI, SUBGRAPH_IDS, SubgraphClient, TICK_SIZE_FINE, TICK_SIZE_STANDARD, TagsFacet_default as TagsFacetABI, TokenModule, TradeModule, UMA_DEFAULTS, UmaModule, UmaOracle_default as UmaOracleABI, VALID_TICK_SIZES, VaultFacet_default as VaultFacetABI, VenueFacet_default as VenueFacetABI, VenueModule, WhitelistAccessControl_default as WhitelistAccessControlABI, applyTakerFeeBuffer, buildSubgraphGatewayUrl, calculateChancePercent, clearDecimalsCache, createExpiry, createOddMakiClient, estimateBuyFromAmount, estimateBuyFromShares, estimateSellFromShares, formatAmount, formatAncillaryData, formatTimestamp, getCachedTokenDecimals, getOutcomePrice, getTokenDecimals, getTotalFeeBps, isValidTickSize, maxSellTickToCross, minBuyTickToCross, parseAmount, parseAncillaryData, parseMetadata, parseTokenAmount, priceToTick, resolveIPFSUri, tickToPercentage, tickToPrice, version };
12296
12394
  //# sourceMappingURL=index.mjs.map
12297
12395
  //# sourceMappingURL=index.mjs.map