@oddmaki-protocol/sdk 1.7.0 → 1.8.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
@@ -9289,9 +9289,14 @@ var GET_UNIFIED_MARKET_FEED = gql`
9289
9289
  $first: Int = 50
9290
9290
  $skip: Int = 0
9291
9291
  ) {
9292
- # Standalone binary markets (not in groups)
9292
+ # Standalone binary markets (not in groups, not part of a price series)
9293
9293
  standaloneMarkets: markets(
9294
- where: { groupId: "0", venue_: { venueId: $venueId }, status_not: "Draft" }
9294
+ where: {
9295
+ groupId: "0"
9296
+ venue_: { venueId: $venueId }
9297
+ status_not: "Draft"
9298
+ priceSeries: null
9299
+ }
9295
9300
  first: $first
9296
9301
  skip: $skip
9297
9302
  orderBy: createdAt
@@ -9386,6 +9391,62 @@ var GET_UNIFIED_MARKET_FEED = gql`
9386
9391
  }
9387
9392
  }
9388
9393
  }
9394
+
9395
+ # Price market series — one row per (venue, seriesKey)
9396
+ priceMarketSeries(
9397
+ where: { venue_: { venueId: $venueId }, status_not: "Resolved" }
9398
+ first: $first
9399
+ skip: $skip
9400
+ orderBy: updatedAt
9401
+ orderDirection: desc
9402
+ ) {
9403
+ id
9404
+ seriesKey
9405
+ asset
9406
+ kind
9407
+ interval
9408
+ intervalSeconds
9409
+ status
9410
+ tags
9411
+ createdAt
9412
+ updatedAt
9413
+ currentMarket {
9414
+ id
9415
+ marketId
9416
+ question
9417
+ outcomes
9418
+ status
9419
+ collateralToken
9420
+ conditionId
9421
+ tickSize
9422
+ lastPriceTick_0
9423
+ lastPriceTick_1
9424
+ lastTradeTimestamp
9425
+ lastTradeTimestamp_0
9426
+ lastTradeTimestamp_1
9427
+ topOfBook {
9428
+ outcome
9429
+ side
9430
+ topTick
9431
+ }
9432
+ totalVolume
9433
+ metadataURI
9434
+ createdAt
9435
+ priceMarket {
9436
+ provider
9437
+ feedId
9438
+ strikePrice
9439
+ priceExpo
9440
+ openTime
9441
+ closeTime
9442
+ }
9443
+ }
9444
+ venue {
9445
+ id
9446
+ venueId
9447
+ name
9448
+ }
9449
+ }
9389
9450
  }
9390
9451
  `;
9391
9452
  var GET_UNIFIED_MARKET_FEED_BY_VOLUME = gql`
@@ -9394,9 +9455,14 @@ var GET_UNIFIED_MARKET_FEED_BY_VOLUME = gql`
9394
9455
  $first: Int = 50
9395
9456
  $skip: Int = 0
9396
9457
  ) {
9397
- # Standalone binary markets sorted by volume
9458
+ # Standalone binary markets sorted by volume (excluding price series members)
9398
9459
  standaloneMarkets: markets(
9399
- where: { groupId: "0", venue_: { venueId: $venueId }, status_not: "Draft" }
9460
+ where: {
9461
+ groupId: "0"
9462
+ venue_: { venueId: $venueId }
9463
+ status_not: "Draft"
9464
+ priceSeries: null
9465
+ }
9400
9466
  first: $first
9401
9467
  skip: $skip
9402
9468
  orderBy: totalVolume
@@ -9478,13 +9544,68 @@ var GET_UNIFIED_MARKET_FEED_BY_VOLUME = gql`
9478
9544
  }
9479
9545
  }
9480
9546
  }
9547
+
9548
+ # Price market series — venue-scoped, only those with an active current market
9549
+ priceMarketSeries(
9550
+ where: { venue_: { venueId: $venueId }, status_not: "Resolved" }
9551
+ first: $first
9552
+ skip: $skip
9553
+ orderBy: updatedAt
9554
+ orderDirection: desc
9555
+ ) {
9556
+ id
9557
+ seriesKey
9558
+ asset
9559
+ kind
9560
+ interval
9561
+ intervalSeconds
9562
+ status
9563
+ tags
9564
+ createdAt
9565
+ updatedAt
9566
+ currentMarket {
9567
+ id
9568
+ marketId
9569
+ question
9570
+ outcomes
9571
+ status
9572
+ collateralToken
9573
+ tickSize
9574
+ lastPriceTick_0
9575
+ lastPriceTick_1
9576
+ lastTradeTimestamp
9577
+ lastTradeTimestamp_0
9578
+ lastTradeTimestamp_1
9579
+ topOfBook {
9580
+ outcome
9581
+ side
9582
+ topTick
9583
+ }
9584
+ totalVolume
9585
+ metadataURI
9586
+ createdAt
9587
+ priceMarket {
9588
+ provider
9589
+ feedId
9590
+ strikePrice
9591
+ priceExpo
9592
+ openTime
9593
+ closeTime
9594
+ }
9595
+ }
9596
+ venue {
9597
+ id
9598
+ venueId
9599
+ name
9600
+ }
9601
+ }
9481
9602
  }
9482
9603
  `;
9483
9604
  var GET_ALL_MARKETS_FEED = gql`
9484
9605
  query GetAllMarketsFeed($first: Int = 50, $skip: Int = 0) {
9485
- # Standalone binary markets (not in groups)
9606
+ # Standalone binary markets (not in groups, not part of a price series)
9486
9607
  standaloneMarkets: markets(
9487
- where: { groupId: "0", status_not: "Draft" }
9608
+ where: { groupId: "0", status_not: "Draft", priceSeries: null }
9488
9609
  first: $first
9489
9610
  skip: $skip
9490
9611
  orderBy: createdAt
@@ -9573,12 +9694,64 @@ var GET_ALL_MARKETS_FEED = gql`
9573
9694
  }
9574
9695
  }
9575
9696
  }
9697
+
9698
+ # Price market series across all venues
9699
+ priceMarketSeries(
9700
+ where: { status_not: "Resolved" }
9701
+ first: $first
9702
+ skip: $skip
9703
+ orderBy: updatedAt
9704
+ orderDirection: desc
9705
+ ) {
9706
+ id
9707
+ seriesKey
9708
+ asset
9709
+ kind
9710
+ interval
9711
+ intervalSeconds
9712
+ status
9713
+ tags
9714
+ createdAt
9715
+ updatedAt
9716
+ currentMarket {
9717
+ id
9718
+ marketId
9719
+ question
9720
+ outcomes
9721
+ status
9722
+ collateralToken
9723
+ tickSize
9724
+ lastPriceTick_0
9725
+ lastPriceTick_1
9726
+ lastTradeTimestamp
9727
+ topOfBook {
9728
+ outcome
9729
+ side
9730
+ topTick
9731
+ }
9732
+ totalVolume
9733
+ createdAt
9734
+ priceMarket {
9735
+ provider
9736
+ feedId
9737
+ strikePrice
9738
+ priceExpo
9739
+ openTime
9740
+ closeTime
9741
+ }
9742
+ }
9743
+ venue {
9744
+ id
9745
+ venueId
9746
+ name
9747
+ }
9748
+ }
9576
9749
  }
9577
9750
  `;
9578
9751
  var GET_ALL_MARKETS_FEED_BY_VOLUME = gql`
9579
9752
  query GetAllMarketsFeedByVolume($first: Int = 50, $skip: Int = 0) {
9580
9753
  standaloneMarkets: markets(
9581
- where: { groupId: "0", status_not: "Draft" }
9754
+ where: { groupId: "0", status_not: "Draft", priceSeries: null }
9582
9755
  first: $first
9583
9756
  skip: $skip
9584
9757
  orderBy: totalVolume
@@ -9662,6 +9835,102 @@ var GET_ALL_MARKETS_FEED_BY_VOLUME = gql`
9662
9835
  }
9663
9836
  }
9664
9837
  }
9838
+
9839
+ # Price market series across all venues, sorted by volume of current market
9840
+ priceMarketSeries(
9841
+ where: { status_not: "Resolved" }
9842
+ first: $first
9843
+ skip: $skip
9844
+ orderBy: updatedAt
9845
+ orderDirection: desc
9846
+ ) {
9847
+ id
9848
+ seriesKey
9849
+ asset
9850
+ kind
9851
+ interval
9852
+ intervalSeconds
9853
+ status
9854
+ tags
9855
+ createdAt
9856
+ updatedAt
9857
+ currentMarket {
9858
+ id
9859
+ marketId
9860
+ question
9861
+ outcomes
9862
+ status
9863
+ collateralToken
9864
+ tickSize
9865
+ lastPriceTick_0
9866
+ lastPriceTick_1
9867
+ lastTradeTimestamp
9868
+ topOfBook {
9869
+ outcome
9870
+ side
9871
+ topTick
9872
+ }
9873
+ totalVolume
9874
+ createdAt
9875
+ priceMarket {
9876
+ provider
9877
+ feedId
9878
+ strikePrice
9879
+ priceExpo
9880
+ openTime
9881
+ closeTime
9882
+ }
9883
+ }
9884
+ venue {
9885
+ id
9886
+ venueId
9887
+ name
9888
+ }
9889
+ }
9890
+ }
9891
+ `;
9892
+ var GET_PRICE_MARKET_SERIES = gql`
9893
+ query GetPriceMarketSeries($venueId: BigInt!, $seriesKey: String!) {
9894
+ priceMarketSeries(
9895
+ where: { venue_: { venueId: $venueId }, seriesKey: $seriesKey }
9896
+ first: 1
9897
+ ) {
9898
+ id
9899
+ seriesKey
9900
+ asset
9901
+ kind
9902
+ interval
9903
+ intervalSeconds
9904
+ status
9905
+ tags
9906
+ createdAt
9907
+ updatedAt
9908
+ currentMarket {
9909
+ id
9910
+ marketId
9911
+ }
9912
+ venue {
9913
+ id
9914
+ venueId
9915
+ name
9916
+ }
9917
+ markets {
9918
+ id
9919
+ marketId
9920
+ question
9921
+ status
9922
+ resolvedOutcome
9923
+ outcomes
9924
+ priceMarket {
9925
+ openTime
9926
+ closeTime
9927
+ resolved
9928
+ outcome
9929
+ finalPrice
9930
+ strikePrice
9931
+ }
9932
+ }
9933
+ }
9665
9934
  }
9666
9935
  `;
9667
9936
  var GET_RECENT_TRADES = gql`
@@ -10107,7 +10376,8 @@ var PublicModule = class extends BaseModule {
10107
10376
  }
10108
10377
  /**
10109
10378
  * Merge and sort unified feed results
10110
- * Combines standaloneMarkets and marketGroups into a single sorted array
10379
+ * Combines standaloneMarkets, marketGroups, and priceMarketSeries into a single sorted array.
10380
+ * Each row in the merged feed carries a `type` discriminator: 'standalone' | 'group' | 'series'.
10111
10381
  */
10112
10382
  mergeAndSortFeed(feedData, sortBy = "created", limit) {
10113
10383
  const standalone = (feedData.standaloneMarkets || []).map((m) => ({
@@ -10127,11 +10397,49 @@ var PublicModule = class extends BaseModule {
10127
10397
  sortValue: sortBy === "volume" ? totalVolume : BigInt(g.createdAt || "0")
10128
10398
  };
10129
10399
  });
10130
- const merged = [...standalone, ...groups].sort((a, b) => {
10400
+ const series = (feedData.priceMarketSeries || []).map((s) => ({
10401
+ ...s,
10402
+ type: "series",
10403
+ sortValue: sortBy === "volume" ? BigInt(s.currentMarket?.totalVolume || "0") : BigInt(s.updatedAt || s.createdAt || "0")
10404
+ }));
10405
+ const merged = [...standalone, ...groups, ...series].sort((a, b) => {
10131
10406
  return a.sortValue > b.sortValue ? -1 : 1;
10132
10407
  });
10133
10408
  return limit ? merged.slice(0, limit) : merged;
10134
10409
  }
10410
+ /**
10411
+ * Get a PriceMarketSeries with all its member markets.
10412
+ *
10413
+ * Used by the market detail page to render the time-button navigation strip
10414
+ * showing past, current, and upcoming windows for the same asset+interval.
10415
+ *
10416
+ * @param params.venueId - Venue the series belongs to
10417
+ * @param params.seriesKey - Series key, e.g. "btc-updown-5m"
10418
+ * @returns The series with `markets` array, or null if not found
10419
+ */
10420
+ async getPriceMarketSeries(params) {
10421
+ const response = await this.subgraph.request(GET_PRICE_MARKET_SERIES, {
10422
+ venueId: params.venueId.toString(),
10423
+ seriesKey: params.seriesKey
10424
+ });
10425
+ return response.priceMarketSeries?.[0] || null;
10426
+ }
10427
+ /**
10428
+ * Helper: extract the seriesKey from a market's tags.
10429
+ *
10430
+ * A market belongs to a price series iff its tags contain both "price-market"
10431
+ * and a "series:<key>" tag. Returns the key (without prefix) or null.
10432
+ */
10433
+ extractSeriesKey(tags) {
10434
+ if (!tags) return null;
10435
+ let hasPriceMarketTag = false;
10436
+ let seriesKey = null;
10437
+ for (const t of tags) {
10438
+ if (t === "price-market") hasPriceMarketTag = true;
10439
+ else if (t.startsWith("series:")) seriesKey = t.slice("series:".length);
10440
+ }
10441
+ return hasPriceMarketTag ? seriesKey : null;
10442
+ }
10135
10443
  /**
10136
10444
  * Calculate probability for a market using mark price waterfall.
10137
10445
  * Returns probability as a decimal string (e.g., "0.65" for 65%)
@@ -11582,6 +11890,6 @@ function parseMetadata(json) {
11582
11890
  // src/index.ts
11583
11891
  var version = "0.1.0";
11584
11892
 
11585
- 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_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_TRADES, GET_UNIFIED_MARKET_FEED, GET_UNIFIED_MARKET_FEED_BY_VOLUME, GET_USER, GET_VENUES, 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 };
11893
+ 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_TRADES, GET_UNIFIED_MARKET_FEED, GET_UNIFIED_MARKET_FEED_BY_VOLUME, GET_USER, GET_VENUES, 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 };
11586
11894
  //# sourceMappingURL=index.mjs.map
11587
11895
  //# sourceMappingURL=index.mjs.map