@the-situation/indexer 0.17.0 → 0.18.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/README.md +43 -4
- package/dist/aggregator/cohort.d.ts +30 -0
- package/dist/aggregator/cohort.d.ts.map +1 -0
- package/dist/aggregator/cohort.js +153 -0
- package/dist/aggregator/cohort.js.map +1 -0
- package/dist/aggregator/daily.d.ts +71 -0
- package/dist/aggregator/daily.d.ts.map +1 -0
- package/dist/aggregator/daily.js +249 -0
- package/dist/aggregator/daily.js.map +1 -0
- package/dist/aggregator/domains.d.ts +20 -0
- package/dist/aggregator/domains.d.ts.map +1 -0
- package/dist/aggregator/domains.js +38 -0
- package/dist/aggregator/domains.js.map +1 -0
- package/dist/aggregator/index.d.ts +31 -0
- package/dist/aggregator/index.d.ts.map +1 -0
- package/dist/aggregator/index.js +100 -0
- package/dist/aggregator/index.js.map +1 -0
- package/dist/aggregator/lifetime.d.ts +52 -0
- package/dist/aggregator/lifetime.d.ts.map +1 -0
- package/dist/aggregator/lifetime.js +222 -0
- package/dist/aggregator/lifetime.js.map +1 -0
- package/dist/aggregator/roi.d.ts +42 -0
- package/dist/aggregator/roi.d.ts.map +1 -0
- package/dist/aggregator/roi.js +153 -0
- package/dist/aggregator/roi.js.map +1 -0
- package/dist/aggregator/sources.d.ts +59 -0
- package/dist/aggregator/sources.d.ts.map +1 -0
- package/dist/aggregator/sources.js +53 -0
- package/dist/aggregator/sources.js.map +1 -0
- package/dist/aggregator/writers.d.ts +22 -0
- package/dist/aggregator/writers.d.ts.map +1 -0
- package/dist/aggregator/writers.js +147 -0
- package/dist/aggregator/writers.js.map +1 -0
- package/dist/api/app.d.ts +177 -13
- package/dist/api/app.d.ts.map +1 -1
- package/dist/api/app.js +4 -3
- package/dist/api/app.js.map +1 -1
- package/dist/api/routes/admin-subscriptions.d.ts +11 -11
- package/dist/api/routes/analytics.d.ts +205 -0
- package/dist/api/routes/analytics.d.ts.map +1 -0
- package/dist/api/routes/analytics.js +122 -0
- package/dist/api/routes/analytics.js.map +1 -0
- package/dist/api/routes/health.d.ts.map +1 -1
- package/dist/api/routes/health.js +2 -0
- package/dist/api/routes/health.js.map +1 -1
- package/dist/api/routes/index.d.ts +1 -0
- package/dist/api/routes/index.d.ts.map +1 -1
- package/dist/api/routes/index.js +1 -0
- package/dist/api/routes/index.js.map +1 -1
- package/dist/api/routes/rankings.d.ts +17 -3
- package/dist/api/routes/rankings.d.ts.map +1 -1
- package/dist/api/routes/rankings.js +44 -5
- package/dist/api/routes/rankings.js.map +1 -1
- package/dist/api/routes/trader-stats.d.ts +11 -2
- package/dist/api/routes/trader-stats.d.ts.map +1 -1
- package/dist/api/routes/trader-stats.js +72 -2
- package/dist/api/routes/trader-stats.js.map +1 -1
- package/dist/client/IndexerClient.d.ts +30 -1
- package/dist/client/IndexerClient.d.ts.map +1 -1
- package/dist/client/IndexerClient.js.map +1 -1
- package/dist/client/IndexerClientLive.d.ts.map +1 -1
- package/dist/client/IndexerClientLive.js +50 -1
- package/dist/client/IndexerClientLive.js.map +1 -1
- package/dist/client/convenience.d.ts +9 -2
- package/dist/client/convenience.d.ts.map +1 -1
- package/dist/client/convenience.js +9 -1
- package/dist/client/convenience.js.map +1 -1
- package/dist/client/index.d.ts +3 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/config.d.ts +17 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +39 -3
- package/dist/config.js.map +1 -1
- package/dist/etl/event-indexer.d.ts +1 -1
- package/dist/etl/lp-position-refresher.d.ts +2 -1
- package/dist/etl/lp-position-refresher.d.ts.map +1 -1
- package/dist/etl/lp-position-refresher.js +24 -11
- package/dist/etl/lp-position-refresher.js.map +1 -1
- package/dist/index.js +64 -8
- package/dist/index.js.map +1 -1
- package/dist/layers/ChainReaderLive.d.ts.map +1 -1
- package/dist/layers/ChainReaderLive.js +15 -0
- package/dist/layers/ChainReaderLive.js.map +1 -1
- package/dist/layers/VoyagerClientLive.d.ts +2 -1
- package/dist/layers/VoyagerClientLive.d.ts.map +1 -1
- package/dist/layers/VoyagerClientLive.js +89 -55
- package/dist/layers/VoyagerClientLive.js.map +1 -1
- package/dist/services/ChainReader.d.ts +10 -0
- package/dist/services/ChainReader.d.ts.map +1 -1
- package/dist/services/ChainReader.js.map +1 -1
- package/dist/services/VoyagerRateLimit.d.ts +11 -8
- package/dist/services/VoyagerRateLimit.d.ts.map +1 -1
- package/dist/services/VoyagerRateLimit.js +51 -26
- package/dist/services/VoyagerRateLimit.js.map +1 -1
- package/dist/types/analytics.d.ts +194 -0
- package/dist/types/analytics.d.ts.map +1 -0
- package/dist/types/analytics.js +10 -0
- package/dist/types/analytics.js.map +1 -0
- package/dist/types/api.d.ts +2 -0
- package/dist/types/api.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/warehouse/analytics-helpers.d.ts +36 -0
- package/dist/warehouse/analytics-helpers.d.ts.map +1 -0
- package/dist/warehouse/analytics-helpers.js +142 -0
- package/dist/warehouse/analytics-helpers.js.map +1 -0
- package/dist/warehouse/backfill.d.ts +26 -0
- package/dist/warehouse/backfill.d.ts.map +1 -0
- package/dist/warehouse/backfill.js +77 -0
- package/dist/warehouse/backfill.js.map +1 -0
- package/dist/warehouse/connection.d.ts +18 -0
- package/dist/warehouse/connection.d.ts.map +1 -0
- package/dist/warehouse/connection.js +24 -0
- package/dist/warehouse/connection.js.map +1 -0
- package/dist/warehouse/index.d.ts +14 -0
- package/dist/warehouse/index.d.ts.map +1 -0
- package/dist/warehouse/index.js +14 -0
- package/dist/warehouse/index.js.map +1 -0
- package/dist/warehouse/repositories/analytics.d.ts +61 -0
- package/dist/warehouse/repositories/analytics.d.ts.map +1 -0
- package/dist/warehouse/repositories/analytics.js +418 -0
- package/dist/warehouse/repositories/analytics.js.map +1 -0
- package/dist/warehouse/schema.d.ts +9 -0
- package/dist/warehouse/schema.d.ts.map +1 -0
- package/dist/warehouse/schema.js +219 -0
- package/dist/warehouse/schema.js.map +1 -0
- package/dist/warehouse/seed-domains.d.ts +29 -0
- package/dist/warehouse/seed-domains.d.ts.map +1 -0
- package/dist/warehouse/seed-domains.js +223 -0
- package/dist/warehouse/seed-domains.js.map +1 -0
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import { Effect } from 'effect';
|
|
5
5
|
import type { ActivityFeedQueryParams } from '../types/activity';
|
|
6
6
|
import type { AdminCreateMarketBody, AdminUpdateMarketBody, EventResponse, PaginatedResponse, RankingEntry } from '../types/api';
|
|
7
|
-
import type { EventQueryParams, RankingQueryParams } from './IndexerClient';
|
|
7
|
+
import type { AnalyticsLeaderboardQueryParams, CohortsQueryParams, EventQueryParams, RankingQueryParams, RoiQueryParams, TraderStatsQueryParams } from './IndexerClient';
|
|
8
8
|
import { type IndexerApiError, IndexerClient } from './IndexerClient';
|
|
9
9
|
export declare const checkHealth: Effect.Effect<import(".").HealthResponse, IndexerApiError, IndexerClient>;
|
|
10
10
|
export declare const getMarkets: Effect.Effect<readonly import(".").MarketResponse[], IndexerApiError, IndexerClient>;
|
|
@@ -14,9 +14,16 @@ export declare const getMarketTraders: (address: string) => Effect.Effect<readon
|
|
|
14
14
|
export declare const getMarketLPs: (address: string) => Effect.Effect<readonly import(".").LPPositionResponse[], IndexerApiError, IndexerClient>;
|
|
15
15
|
export declare const getTraderPositions: (trader: string) => Effect.Effect<readonly import(".").TraderPositionResponse[], IndexerApiError, IndexerClient>;
|
|
16
16
|
export declare const getTraderEvents: (trader: string, params?: EventQueryParams) => Effect.Effect<PaginatedResponse<import(".").TraderEventResponse>, IndexerApiError, IndexerClient>;
|
|
17
|
-
export declare const getTraderStats: (trader: string) => Effect.Effect<import(".").TraderStatsResponse, IndexerApiError, IndexerClient>;
|
|
17
|
+
export declare const getTraderStats: (trader: string, params?: TraderStatsQueryParams) => Effect.Effect<import(".").TraderStatsResponse, IndexerApiError, IndexerClient>;
|
|
18
18
|
export declare const getRankings: (params?: RankingQueryParams) => Effect.Effect<readonly RankingEntry[], IndexerApiError, IndexerClient>;
|
|
19
19
|
export declare const getActivityFeed: (params?: ActivityFeedQueryParams) => Effect.Effect<PaginatedResponse<import(".").ActivityFeedItem>, IndexerApiError, IndexerClient>;
|
|
20
|
+
export declare const getAnalyticsOverview: Effect.Effect<import(".").AnalyticsOverviewResponse, IndexerApiError, IndexerClient>;
|
|
21
|
+
export declare const getAnalyticsDomains: Effect.Effect<import(".").DomainsResponse, IndexerApiError, IndexerClient>;
|
|
22
|
+
export declare const getAnalyticsDomain: (slug: string) => Effect.Effect<import(".").DomainDetailResponse, IndexerApiError, IndexerClient>;
|
|
23
|
+
export declare const getAnalyticsCohorts: (params?: CohortsQueryParams) => Effect.Effect<import(".").CohortsResponse, IndexerApiError, IndexerClient>;
|
|
24
|
+
export declare const getAnalyticsRoi: (params?: RoiQueryParams) => Effect.Effect<import(".").RoiResponse, IndexerApiError, IndexerClient>;
|
|
25
|
+
export declare const getAnalyticsLeaderboard: (params?: AnalyticsLeaderboardQueryParams) => Effect.Effect<import(".").AnalyticsLeaderboardResponse, IndexerApiError, IndexerClient>;
|
|
26
|
+
export declare const getTraderAnalytics: (address: string) => Effect.Effect<import(".").TraderAnalyticsResponse, IndexerApiError, IndexerClient>;
|
|
20
27
|
/**
|
|
21
28
|
* Auto-paginate to fetch every event for a market (useful for full time series).
|
|
22
29
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convenience.d.ts","sourceRoot":"","sources":["../../src/client/convenience.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EACV,qBAAqB,EACrB,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,YAAY,EACb,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"convenience.d.ts","sourceRoot":"","sources":["../../src/client/convenience.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EACV,qBAAqB,EACrB,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,YAAY,EACb,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EACV,+BAA+B,EAC/B,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,eAAe,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAItE,eAAO,MAAM,WAAW,2EAA6D,CAAC;AAEtF,eAAO,MAAM,UAAU,sFAAiE,CAAC;AAEzF,eAAO,MAAM,SAAS,GAAI,SAAS,MAAM,8EAC6B,CAAC;AAEvE,eAAO,MAAM,eAAe,GAAI,SAAS,MAAM,EAAE,SAAS,gBAAgB,oFACU,CAAC;AAErF,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM,iGAC6B,CAAC;AAE9E,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,6FAC6B,CAAC;AAE1E,eAAO,MAAM,kBAAkB,GAAI,QAAQ,MAAM,iGAC6B,CAAC;AAE/E,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,EAAE,SAAS,gBAAgB,sGACU,CAAC;AAEpF,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,EAAE,SAAS,sBAAsB,mFACI,CAAC;AAEnF,eAAO,MAAM,WAAW,GAAI,SAAS,kBAAkB,2EACgB,CAAC;AAExE,eAAO,MAAM,eAAe,GAAI,SAAS,uBAAuB,mGACW,CAAC;AAI5E,eAAO,MAAM,oBAAoB,sFAEhC,CAAC;AAEF,eAAO,MAAM,mBAAmB,4EAE/B,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,oFAC6B,CAAC;AAE7E,eAAO,MAAM,mBAAmB,GAAI,SAAS,kBAAkB,+EACgB,CAAC;AAEhF,eAAO,MAAM,eAAe,GAAI,SAAS,cAAc,2EACoB,CAAC;AAE5E,eAAO,MAAM,uBAAuB,GAAI,SAAS,+BAA+B,4FACG,CAAC;AAEpF,eAAO,MAAM,kBAAkB,GAAI,SAAS,MAAM,uFAC6B,CAAC;AAIhF;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,SAAS,MAAM,EAAE,OAAO;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,4EAoB5E,CAAC;AAEL;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,SAAS,MAAM,EAAE,SAAS,gBAAgB;;;kCAS3E,CAAC;AAIJ,eAAO,MAAM,YAAY,GAAI,MAAM,qBAAqB;;kCACc,CAAC;AAEvE,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,EAAE,MAAM,qBAAqB;;kCACM,CAAC;AAEhF,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM;;kCAC6B,CAAC;AAE1E,eAAO,MAAM,uBAAuB,GAAI,SAAS,MAAM,EAAE,QAAQ,MAAM,4FACoB,CAAC;AAE5F;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,QAAQ,MAAM;;;;;;kCAsB5C,CAAC"}
|
|
@@ -12,9 +12,17 @@ export const getMarketTraders = (address) => Effect.flatMap(IndexerClient, (clie
|
|
|
12
12
|
export const getMarketLPs = (address) => Effect.flatMap(IndexerClient, (client) => client.getMarketLPs(address));
|
|
13
13
|
export const getTraderPositions = (trader) => Effect.flatMap(IndexerClient, (client) => client.getTraderPositions(trader));
|
|
14
14
|
export const getTraderEvents = (trader, params) => Effect.flatMap(IndexerClient, (client) => client.getTraderEvents(trader, params));
|
|
15
|
-
export const getTraderStats = (trader) => Effect.flatMap(IndexerClient, (client) => client.getTraderStats(trader));
|
|
15
|
+
export const getTraderStats = (trader, params) => Effect.flatMap(IndexerClient, (client) => client.getTraderStats(trader, params));
|
|
16
16
|
export const getRankings = (params) => Effect.flatMap(IndexerClient, (client) => client.getRankings(params));
|
|
17
17
|
export const getActivityFeed = (params) => Effect.flatMap(IndexerClient, (client) => client.getActivityFeed(params));
|
|
18
|
+
// ── Analytics warehouse ──────────────────────────────────────────────
|
|
19
|
+
export const getAnalyticsOverview = Effect.flatMap(IndexerClient, (client) => client.getAnalyticsOverview());
|
|
20
|
+
export const getAnalyticsDomains = Effect.flatMap(IndexerClient, (client) => client.getAnalyticsDomains());
|
|
21
|
+
export const getAnalyticsDomain = (slug) => Effect.flatMap(IndexerClient, (client) => client.getAnalyticsDomain(slug));
|
|
22
|
+
export const getAnalyticsCohorts = (params) => Effect.flatMap(IndexerClient, (client) => client.getAnalyticsCohorts(params));
|
|
23
|
+
export const getAnalyticsRoi = (params) => Effect.flatMap(IndexerClient, (client) => client.getAnalyticsRoi(params));
|
|
24
|
+
export const getAnalyticsLeaderboard = (params) => Effect.flatMap(IndexerClient, (client) => client.getAnalyticsLeaderboard(params));
|
|
25
|
+
export const getTraderAnalytics = (address) => Effect.flatMap(IndexerClient, (client) => client.getTraderAnalytics(address));
|
|
18
26
|
// ── Composed helpers ─────────────────────────────────────────────────
|
|
19
27
|
/**
|
|
20
28
|
* Auto-paginate to fetch every event for a market (useful for full time series).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convenience.js","sourceRoot":"","sources":["../../src/client/convenience.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"convenience.js","sourceRoot":"","sources":["../../src/client/convenience.ts"],"names":[],"mappings":"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"}
|
package/dist/client/index.d.ts
CHANGED
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
export type { ActivityEventType, ActivityFeedItem, ActivityFeedQueryParams, CreateSubscriptionInput, SubscriptionFilters, SubscriptionResponse, UpdateSubscriptionInput, } from '../types/activity';
|
|
7
7
|
export type { AdminCreateMarketBody, AdminUpdateMarketBody, EventResponse, HealthResponse, LPPositionResponse, MarketResponse, MarketStateResponse, MultinoulliMarketStateResponse, MultinoulliSnapshotResponse, MultinoulliSnapshotsResponse, PaginatedResponse, RankingEntry, TraderEventResponse, TraderPositionResponse, TraderStatsResponse, } from '../types/api';
|
|
8
8
|
export type { MarketType } from '../types/market';
|
|
9
|
-
export { checkHealth, createMarket, deleteMarket, getActivityFeed, getAllMarketEvents, getMarket, getMarketEvents, getMarketLPs, getMarkets, getMarketTraders, getMarketWithEvents, getMultinoulliSnapshots, getRankings, getTraderEvents, getTraderPositions, getTraderProfile, getTraderStats, updateMarket, } from './convenience';
|
|
10
|
-
export { type EventQueryParams, IndexerApiError, IndexerClient, type IndexerClientService, type RankingQueryParams, } from './IndexerClient';
|
|
9
|
+
export { checkHealth, createMarket, deleteMarket, getActivityFeed, getAllMarketEvents, getAnalyticsCohorts, getAnalyticsDomain, getAnalyticsDomains, getAnalyticsLeaderboard, getAnalyticsOverview, getAnalyticsRoi, getMarket, getMarketEvents, getMarketLPs, getMarkets, getMarketTraders, getMarketWithEvents, getMultinoulliSnapshots, getRankings, getTraderAnalytics, getTraderEvents, getTraderPositions, getTraderProfile, getTraderStats, updateMarket, } from './convenience';
|
|
10
|
+
export { type AnalyticsLeaderboardQueryParams, type CohortsQueryParams, type EventQueryParams, IndexerApiError, IndexerClient, type IndexerClientService, type RankingQueryParams, type RoiQueryParams, type TraderStatsQueryParams, } from './IndexerClient';
|
|
11
|
+
export type { AnalyticsFilters, AnalyticsLeaderboardEntry, AnalyticsLeaderboardResponse, AnalyticsOverviewResponse, AnalyticsTimeWindow, CohortRow, CohortsResponse, DomainDetailResponse, DomainSummary, DomainTimeSeriesPoint, DomainsResponse, EntityType, RoiHistogramBucket, RoiResponse, TraderAnalyticsResponse, } from '../types/analytics';
|
|
11
12
|
export { type IndexerClientConfig, IndexerClientLive, } from './IndexerClientLive';
|
|
12
13
|
export { computePnlHistory, getFullTraderProfile, getTraderActivity, type PnlDataPoint, type TraderActivityEntry, type TraderProfile, } from './trader-stats';
|
|
13
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,qBAAqB,EACrB,qBAAqB,EACrB,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,8BAA8B,EAC9B,2BAA2B,EAC3B,4BAA4B,EAC5B,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD,OAAO,EACL,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,SAAS,EACT,eAAe,EACf,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,KAAK,gBAAgB,EACrB,eAAe,EACf,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,qBAAqB,EACrB,qBAAqB,EACrB,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,8BAA8B,EAC9B,2BAA2B,EAC3B,4BAA4B,EAC5B,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD,OAAO,EACL,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACpB,eAAe,EACf,SAAS,EACT,eAAe,EACf,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,KAAK,+BAA+B,EACpC,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,eAAe,EACf,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,sBAAsB,GAC5B,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,gBAAgB,EAChB,yBAAyB,EACzB,4BAA4B,EAC5B,yBAAyB,EACzB,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,qBAAqB,EACrB,eAAe,EACf,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,KAAK,mBAAmB,EACxB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,aAAa,GACnB,MAAM,gBAAgB,CAAC"}
|
package/dist/client/index.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This module is completely isolated from server-side code (no bun:sqlite, no elysia).
|
|
5
5
|
*/
|
|
6
6
|
// ── Convenience functions ────────────────────────────────────────────
|
|
7
|
-
export { checkHealth, createMarket, deleteMarket, getActivityFeed, getAllMarketEvents, getMarket, getMarketEvents, getMarketLPs, getMarkets, getMarketTraders, getMarketWithEvents, getMultinoulliSnapshots, getRankings, getTraderEvents, getTraderPositions, getTraderProfile, getTraderStats, updateMarket, } from './convenience';
|
|
7
|
+
export { checkHealth, createMarket, deleteMarket, getActivityFeed, getAllMarketEvents, getAnalyticsCohorts, getAnalyticsDomain, getAnalyticsDomains, getAnalyticsLeaderboard, getAnalyticsOverview, getAnalyticsRoi, getMarket, getMarketEvents, getMarketLPs, getMarkets, getMarketTraders, getMarketWithEvents, getMultinoulliSnapshots, getRankings, getTraderAnalytics, getTraderEvents, getTraderPositions, getTraderProfile, getTraderStats, updateMarket, } from './convenience';
|
|
8
8
|
// ── Service & error ──────────────────────────────────────────────────
|
|
9
9
|
export { IndexerApiError, IndexerClient, } from './IndexerClient';
|
|
10
10
|
// ── Layer ────────────────────────────────────────────────────────────
|
package/dist/client/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiCH,wEAAwE;AACxE,OAAO,EACL,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,SAAS,EACT,eAAe,EACf,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,wEAAwE;AACxE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiCH,wEAAwE;AACxE,OAAO,EACL,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACpB,eAAe,EACf,SAAS,EACT,eAAe,EACf,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,wEAAwE;AACxE,OAAO,EAIL,eAAe,EACf,aAAa,GAKd,MAAM,iBAAiB,CAAC;AAmBzB,wEAAwE;AACxE,OAAO,EAEL,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,wEAAwE;AACxE,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,GAIlB,MAAM,gBAAgB,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
* Typed configuration parsed from environment variables.
|
|
3
3
|
*/
|
|
4
4
|
export interface IndexerConfig {
|
|
5
|
-
readonly
|
|
5
|
+
readonly network: StarknetNetwork;
|
|
6
|
+
readonly voyagerApiKeys: readonly string[];
|
|
7
|
+
readonly voyagerApiBaseUrl: string;
|
|
6
8
|
readonly adminApiKey: string;
|
|
7
9
|
readonly dbPath: string;
|
|
8
10
|
readonly port: number;
|
|
@@ -13,6 +15,20 @@ export interface IndexerConfig {
|
|
|
13
15
|
readonly voyagerMaxRetries: number;
|
|
14
16
|
readonly voyagerBaseDelayMs: number;
|
|
15
17
|
readonly voyagerMinRequestIntervalMs: number;
|
|
18
|
+
/**
|
|
19
|
+
* Postgres connection string for the analytics warehouse. When unset, the
|
|
20
|
+
* warehouse is disabled — the indexer runs in OLTP-only mode (no aggregator,
|
|
21
|
+
* no /api/analytics routes). Set to e.g.
|
|
22
|
+
* `postgres://user:pass@localhost:5432/situation_warehouse`.
|
|
23
|
+
*/
|
|
24
|
+
readonly warehouseDatabaseUrl: string | null;
|
|
25
|
+
/** Aggregator run interval. Default 5 min. */
|
|
26
|
+
readonly aggregatorIntervalMs: number;
|
|
16
27
|
}
|
|
28
|
+
export type StarknetNetwork = 'mainnet' | 'sepolia';
|
|
29
|
+
export declare const NETWORK_DEFAULTS: Record<StarknetNetwork, {
|
|
30
|
+
readonly starknetRpcUrl: string;
|
|
31
|
+
readonly voyagerApiBaseUrl: string;
|
|
32
|
+
}>;
|
|
17
33
|
export declare function loadConfig(): IndexerConfig;
|
|
18
34
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,2BAA2B,EAAE,MAAM,CAAC;IAC7C;;;;;OAKG;IACH,QAAQ,CAAC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,8CAA8C;IAC9C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;CACvC;AAED,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,SAAS,CAAC;AAEpD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CACnC,eAAe,EACf;IAAE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,CAUxE,CAAC;AAEF,wBAAgB,UAAU,IAAI,aAAa,CAkC1C"}
|
package/dist/config.js
CHANGED
|
@@ -1,24 +1,60 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Typed configuration parsed from environment variables.
|
|
3
3
|
*/
|
|
4
|
+
export const NETWORK_DEFAULTS = {
|
|
5
|
+
mainnet: {
|
|
6
|
+
starknetRpcUrl: 'https://api.cartridge.gg/x/starknet/mainnet',
|
|
7
|
+
voyagerApiBaseUrl: 'https://api.voyager.online/beta',
|
|
8
|
+
},
|
|
9
|
+
sepolia: {
|
|
10
|
+
starknetRpcUrl: 'https://api.cartridge.gg/x/starknet/sepolia',
|
|
11
|
+
voyagerApiBaseUrl: 'https://sepolia-api.voyager.online/beta',
|
|
12
|
+
},
|
|
13
|
+
};
|
|
4
14
|
export function loadConfig() {
|
|
5
|
-
const voyagerApiKey = requireEnv('VOYAGER_API_KEY');
|
|
6
15
|
const adminApiKey = requireEnv('ADMIN_API_KEY');
|
|
7
16
|
const env = process.env;
|
|
17
|
+
const network = parseNetwork(env.STARKNET_NETWORK);
|
|
18
|
+
const networkDefaults = NETWORK_DEFAULTS[network];
|
|
8
19
|
return {
|
|
9
|
-
|
|
20
|
+
network,
|
|
21
|
+
voyagerApiKeys: parseVoyagerApiKeys(env),
|
|
22
|
+
voyagerApiBaseUrl: env.VOYAGER_API_BASE_URL ?? networkDefaults.voyagerApiBaseUrl,
|
|
10
23
|
adminApiKey,
|
|
11
24
|
dbPath: env.DB_PATH ?? './data/indexer.db',
|
|
12
25
|
port: envInt('PORT', 3000),
|
|
13
|
-
starknetRpcUrl: env.STARKNET_RPC_URL ??
|
|
26
|
+
starknetRpcUrl: env.STARKNET_RPC_URL ?? networkDefaults.starknetRpcUrl,
|
|
14
27
|
eventPollIntervalMs: envInt('EVENT_POLL_INTERVAL_MS', 15000),
|
|
15
28
|
statePollIntervalMs: envInt('STATE_POLL_INTERVAL_MS', 30000),
|
|
16
29
|
positionPollIntervalMs: envInt('POSITION_POLL_INTERVAL_MS', 60000),
|
|
17
30
|
voyagerMaxRetries: envInt('VOYAGER_MAX_RETRIES', 5),
|
|
18
31
|
voyagerBaseDelayMs: envInt('VOYAGER_BASE_DELAY_MS', 3000),
|
|
19
32
|
voyagerMinRequestIntervalMs: envInt('VOYAGER_MIN_REQUEST_INTERVAL_MS', 250),
|
|
33
|
+
warehouseDatabaseUrl: env.WAREHOUSE_DATABASE_URL?.trim() || null,
|
|
34
|
+
aggregatorIntervalMs: envInt('AGGREGATOR_INTERVAL_MS', 300_000),
|
|
20
35
|
};
|
|
21
36
|
}
|
|
37
|
+
function parseVoyagerApiKeys(env) {
|
|
38
|
+
const rawKeys = [
|
|
39
|
+
...(env.VOYAGER_API_KEYS?.split(/[,\s]+/) ?? []),
|
|
40
|
+
env.VOYAGER_API_KEY,
|
|
41
|
+
env.VOYAGER_API_KEY_1,
|
|
42
|
+
env.VOYAGER_API_KEY_2,
|
|
43
|
+
env.VOYAGER_API_KEY_3,
|
|
44
|
+
];
|
|
45
|
+
const keys = Array.from(new Set(rawKeys.map((key) => key?.trim()).filter(Boolean)));
|
|
46
|
+
if (keys.length === 0) {
|
|
47
|
+
throw new Error('Missing required environment variable: VOYAGER_API_KEY or VOYAGER_API_KEYS');
|
|
48
|
+
}
|
|
49
|
+
return keys;
|
|
50
|
+
}
|
|
51
|
+
function parseNetwork(raw) {
|
|
52
|
+
const value = raw ?? 'sepolia';
|
|
53
|
+
if (value === 'mainnet' || value === 'sepolia') {
|
|
54
|
+
return value;
|
|
55
|
+
}
|
|
56
|
+
throw new Error(`Invalid STARKNET_NETWORK: "${value}"`);
|
|
57
|
+
}
|
|
22
58
|
function requireEnv(name) {
|
|
23
59
|
const value = process.env[name];
|
|
24
60
|
if (!value) {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,5 +12,5 @@ import { VoyagerClientTag } from '../services/VoyagerClient';
|
|
|
12
12
|
import type { MarketType } from '../types';
|
|
13
13
|
import type { IndexerCycleResult } from './types';
|
|
14
14
|
export declare const indexMarketEvents: (marketAddress: string, marketType?: MarketType) => Effect.Effect<IndexerCycleResult, never, DatabaseTag | VoyagerClientTag | ChainReaderTag | EventBusTag>;
|
|
15
|
-
export declare const indexAllMarkets: Effect.Effect<IndexerCycleResult[], never,
|
|
15
|
+
export declare const indexAllMarkets: Effect.Effect<IndexerCycleResult[], never, DatabaseTag | EventBusTag | ChainReaderTag | VoyagerClientTag>;
|
|
16
16
|
//# sourceMappingURL=event-indexer.d.ts.map
|
|
@@ -5,7 +5,7 @@ import { Effect } from 'effect';
|
|
|
5
5
|
import type { LPPositionRow } from '../db/repositories';
|
|
6
6
|
import { ChainReaderTag } from '../services/ChainReader';
|
|
7
7
|
import { DatabaseTag } from '../services/Database';
|
|
8
|
-
import type { MarketStateRow, MarketType } from '../types';
|
|
8
|
+
import type { MarketStateRow, MarketType, MultinoulliMarketStateRow } from '../types';
|
|
9
9
|
interface LPRefreshResult {
|
|
10
10
|
readonly marketAddress: string;
|
|
11
11
|
readonly provider: string;
|
|
@@ -14,6 +14,7 @@ interface LPRefreshResult {
|
|
|
14
14
|
}
|
|
15
15
|
interface LPRefreshContext {
|
|
16
16
|
readonly marketStateByMarket?: ReadonlyMap<string, MarketStateRow>;
|
|
17
|
+
readonly multinoulliMarketStateByMarket?: ReadonlyMap<string, MultinoulliMarketStateRow>;
|
|
17
18
|
readonly netTraderPnlByMarket?: ReadonlyMap<string, number>;
|
|
18
19
|
readonly existingLPByKey?: ReadonlyMap<string, LPPositionRow>;
|
|
19
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lp-position-refresher.d.ts","sourceRoot":"","sources":["../../src/etl/lp-position-refresher.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAmB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"lp-position-refresher.d.ts","sourceRoot":"","sources":["../../src/etl/lp-position-refresher.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,yBAAyB,EAAmB,MAAM,UAAU,CAAC;AAMvG,UAAU,eAAe;IACvB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,gBAAgB;IACxB,QAAQ,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACnE,QAAQ,CAAC,8BAA8B,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;IACzF,QAAQ,CAAC,oBAAoB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5D,QAAQ,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC/D;AAcD,eAAO,MAAM,iBAAiB,GAC5B,eAAe,MAAM,EACrB,UAAU,MAAM,EAChB,aAAY,UAAqB,EACjC,UAAS,gBAAqB,KAC7B,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,EAAE,WAAW,GAAG,cAAc,CAoGjE,CAAC;AAEL;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,2CAmClC,CAAC;AAEH,eAAO,MAAM,qBAAqB,uEAsEhC,CAAC"}
|
|
@@ -20,18 +20,26 @@ function computeNetTraderPnl(positions) {
|
|
|
20
20
|
export const refreshLPPosition = (marketAddress, provider, marketType = 'normal', context = {}) => Effect.gen(function* () {
|
|
21
21
|
const db = yield* DatabaseTag;
|
|
22
22
|
const chain = yield* ChainReaderTag;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
const sharesResult = yield* Effect.either(chain.readLPShares(marketAddress, provider, marketType));
|
|
23
|
+
const isMultinoulli = marketType === 'multinoulli';
|
|
24
|
+
const sharesResult = isMultinoulli
|
|
25
|
+
? yield* Effect.either(chain.readMultinoulliLPShares(marketAddress, provider))
|
|
26
|
+
: yield* Effect.either(chain.readLPShares(marketAddress, provider, marketType));
|
|
29
27
|
if (sharesResult._tag === 'Left') {
|
|
30
28
|
return { marketAddress, provider, success: false, error: sharesResult.left.message };
|
|
31
29
|
}
|
|
32
30
|
const { shares, sharesNumber } = sharesResult.right;
|
|
33
|
-
// Get pool totals from market state
|
|
34
|
-
|
|
31
|
+
// Get pool totals from market state. Continuous and multinoulli markets
|
|
32
|
+
// store their state in separate tables; pick the right one and project
|
|
33
|
+
// out the two fields the share-of-pool math actually needs (`total_shares`
|
|
34
|
+
// and `total_backing` are stored as raw SQ128 magnitude strings on both).
|
|
35
|
+
const continuousMarketState = isMultinoulli
|
|
36
|
+
? null
|
|
37
|
+
: context.marketStateByMarket?.get(marketAddress) ?? db.marketState.findByMarket(marketAddress);
|
|
38
|
+
const multinoulliMarketState = isMultinoulli
|
|
39
|
+
? context.multinoulliMarketStateByMarket?.get(marketAddress) ??
|
|
40
|
+
db.multinoulliMarketState.findByMarket(marketAddress)
|
|
41
|
+
: null;
|
|
42
|
+
const marketState = continuousMarketState ?? multinoulliMarketState;
|
|
35
43
|
let currentValue = null;
|
|
36
44
|
let totalShares = 0;
|
|
37
45
|
let totalBacking = 0;
|
|
@@ -75,9 +83,13 @@ export const refreshLPPosition = (marketAddress, provider, marketType = 'normal'
|
|
|
75
83
|
current_value: currentValue,
|
|
76
84
|
unrealized_pnl: unrealizedPnl,
|
|
77
85
|
});
|
|
78
|
-
// Backfill entry distribution if not yet populated
|
|
79
|
-
|
|
80
|
-
|
|
86
|
+
// Backfill entry distribution if not yet populated. Only meaningful for
|
|
87
|
+
// continuous markets — `entry_mean / entry_sigma / entry_k` describe a
|
|
88
|
+
// Gaussian/lognormal/bivariate snapshot at LP entry, which doesn't have
|
|
89
|
+
// a multinoulli analogue in this schema. Multinoulli LP entries skip
|
|
90
|
+
// this step (the row is still upserted above with shares + current_value).
|
|
91
|
+
if (existing && existing.entry_mean == null && continuousMarketState) {
|
|
92
|
+
db.lpPositions.upsertEntryDistribution(marketAddress, provider, continuousMarketState.mean ?? null, continuousMarketState.sigma ?? null, continuousMarketState.k ?? null);
|
|
81
93
|
}
|
|
82
94
|
return { marketAddress, provider, success: true };
|
|
83
95
|
});
|
|
@@ -161,6 +173,7 @@ export const refreshAllLPPositions = Effect.gen(function* () {
|
|
|
161
173
|
}
|
|
162
174
|
const refreshContext = {
|
|
163
175
|
marketStateByMarket: db.marketState.findAllAsMap(),
|
|
176
|
+
multinoulliMarketStateByMarket: db.multinoulliMarketState.findAllAsMap(),
|
|
164
177
|
netTraderPnlByMarket,
|
|
165
178
|
existingLPByKey,
|
|
166
179
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lp-position-refresher.js","sourceRoot":"","sources":["../../src/etl/lp-position-refresher.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGnD,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC;AACnC,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,IAAI,wBAAwB,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"lp-position-refresher.js","sourceRoot":"","sources":["../../src/etl/lp-position-refresher.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -22,18 +22,52 @@ import { EventBusTag } from './services/EventBus';
|
|
|
22
22
|
import { VoyagerClientTag } from './services/VoyagerClient';
|
|
23
23
|
import { createWebhookDispatcher } from './services/WebhookDispatcher';
|
|
24
24
|
import { VoyagerRateLimitState } from './services/VoyagerRateLimit';
|
|
25
|
+
import { backfillMarketDomains, createWarehouse, initializeWarehouseSchema, seedCanonicalDomains, } from './warehouse';
|
|
26
|
+
import { PgAnalyticsRepository } from './warehouse/repositories/analytics';
|
|
27
|
+
import { startAggregator } from './aggregator';
|
|
25
28
|
import { log } from './logger';
|
|
26
29
|
const config = loadConfig();
|
|
27
|
-
log.info('indexer starting', {
|
|
30
|
+
log.info('indexer starting', {
|
|
31
|
+
dbPath: config.dbPath,
|
|
32
|
+
network: config.network,
|
|
33
|
+
rpcUrl: config.starknetRpcUrl,
|
|
34
|
+
voyagerApiBaseUrl: config.voyagerApiBaseUrl,
|
|
35
|
+
voyagerApiKeyCount: config.voyagerApiKeys.length,
|
|
36
|
+
});
|
|
28
37
|
// ── Database setup (open + migrate) ────────────────────────────────────────
|
|
29
38
|
const db = createDatabase(config.dbPath);
|
|
30
39
|
initializeSchema(db);
|
|
31
40
|
log.info('database initialized');
|
|
41
|
+
// ── Warehouse setup (optional — gated on WAREHOUSE_DATABASE_URL) ──────────
|
|
42
|
+
let warehouse = null;
|
|
43
|
+
if (config.warehouseDatabaseUrl) {
|
|
44
|
+
try {
|
|
45
|
+
warehouse = await createWarehouse(config.warehouseDatabaseUrl);
|
|
46
|
+
await initializeWarehouseSchema(warehouse.sql);
|
|
47
|
+
await seedCanonicalDomains(warehouse.sql);
|
|
48
|
+
const backfill = await backfillMarketDomains(db, warehouse.sql);
|
|
49
|
+
log.info('warehouse initialized', {
|
|
50
|
+
markets: backfill.markets,
|
|
51
|
+
domainAssignments: backfill.assignments,
|
|
52
|
+
fallbacks: backfill.fallbacks,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
log.error('warehouse initialization failed — analytics disabled', {
|
|
57
|
+
error: err instanceof Error ? err.message : String(err),
|
|
58
|
+
});
|
|
59
|
+
warehouse = null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
log.info('warehouse disabled (WAREHOUSE_DATABASE_URL not set)');
|
|
64
|
+
}
|
|
32
65
|
// ── Build service layers ──────────────────────────────────────────────────
|
|
33
|
-
const voyagerRateLimit = new VoyagerRateLimitState(config.voyagerMinRequestIntervalMs);
|
|
34
|
-
const appLayer = Layer.mergeAll(DatabaseLive(db), EventBusLive(), VoyagerClientLive(config.
|
|
66
|
+
const voyagerRateLimit = new VoyagerRateLimitState(config.voyagerMinRequestIntervalMs, config.voyagerApiKeys.length);
|
|
67
|
+
const appLayer = Layer.mergeAll(DatabaseLive(db), EventBusLive(), VoyagerClientLive(config.voyagerApiKeys, voyagerRateLimit, {
|
|
35
68
|
maxRetries: config.voyagerMaxRetries,
|
|
36
69
|
baseDelayMs: config.voyagerBaseDelayMs,
|
|
70
|
+
baseUrl: config.voyagerApiBaseUrl,
|
|
37
71
|
}), ChainReaderLive(config.starknetRpcUrl));
|
|
38
72
|
// ── Extract plain service instances for imperative consumers ──────────────
|
|
39
73
|
const databaseService = Effect.runSync(Effect.provide(DatabaseTag, appLayer));
|
|
@@ -50,26 +84,48 @@ const scheduler = startScheduler(config, {
|
|
|
50
84
|
chainReader: chainReaderService,
|
|
51
85
|
eventBus: eventBusService,
|
|
52
86
|
});
|
|
87
|
+
// ── Start analytics aggregator (only if warehouse is configured) ──────────
|
|
88
|
+
let aggregator = null;
|
|
89
|
+
if (warehouse) {
|
|
90
|
+
aggregator = startAggregator(db, warehouse.sql, config.aggregatorIntervalMs);
|
|
91
|
+
log.info('aggregator started', { intervalMs: config.aggregatorIntervalMs });
|
|
92
|
+
}
|
|
53
93
|
// ── Start Elysia server ────────────────────────────────────────────────────
|
|
94
|
+
const analytics = warehouse ? new PgAnalyticsRepository(warehouse.sql) : null;
|
|
54
95
|
const app = createApp({
|
|
55
96
|
db: databaseService,
|
|
56
97
|
eventBus: eventBusService,
|
|
57
98
|
adminApiKey: config.adminApiKey,
|
|
58
99
|
rateLimit: voyagerRateLimit,
|
|
100
|
+
analytics,
|
|
59
101
|
});
|
|
60
102
|
app.listen({ port: config.port, hostname: '0.0.0.0' });
|
|
61
103
|
log.info('server listening', { port: config.port });
|
|
62
104
|
// ── Graceful shutdown ──────────────────────────────────────────────────────
|
|
63
|
-
|
|
105
|
+
async function shutdown(signal) {
|
|
106
|
+
log.info('shutdown signal received', { signal });
|
|
64
107
|
webhookDispatcher.stop();
|
|
65
108
|
scheduler.stop();
|
|
109
|
+
if (aggregator) {
|
|
110
|
+
aggregator.stop();
|
|
111
|
+
}
|
|
112
|
+
if (warehouse) {
|
|
113
|
+
try {
|
|
114
|
+
await warehouse.close();
|
|
115
|
+
}
|
|
116
|
+
catch (err) {
|
|
117
|
+
log.warn('warehouse close failed', {
|
|
118
|
+
error: err instanceof Error ? err.message : String(err),
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
66
122
|
db.close();
|
|
67
123
|
process.exit(0);
|
|
124
|
+
}
|
|
125
|
+
process.on('SIGTERM', () => {
|
|
126
|
+
void shutdown('SIGTERM');
|
|
68
127
|
});
|
|
69
128
|
process.on('SIGINT', () => {
|
|
70
|
-
|
|
71
|
-
scheduler.stop();
|
|
72
|
-
db.close();
|
|
73
|
-
process.exit(0);
|
|
129
|
+
void shutdown('SIGINT');
|
|
74
130
|
});
|
|
75
131
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChainReaderLive.d.ts","sourceRoot":"","sources":["../../src/layers/ChainReaderLive.ts"],"names":[],"mappings":"AASA,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEvC,OAAO,KAAK,EACV,kBAAkB,EAInB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAkB,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAoWzE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,
|
|
1
|
+
{"version":3,"file":"ChainReaderLive.d.ts","sourceRoot":"","sources":["../../src/layers/ChainReaderLive.ts"],"names":[],"mappings":"AASA,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEvC,OAAO,KAAK,EACV,kBAAkB,EAInB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAkB,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAoWzE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,CA+b3E;AAED,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,KAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CACS,CAAC"}
|
|
@@ -451,6 +451,21 @@ export function createChainReaderService(rpcUrl) {
|
|
|
451
451
|
},
|
|
452
452
|
catch: (e) => new ChainReadError(`Failed to read LP shares: ${e instanceof Error ? e.message : 'Unknown'}`, e),
|
|
453
453
|
}),
|
|
454
|
+
readMultinoulliLPShares: (marketAddress, provider) => Effect.tryPromise({
|
|
455
|
+
try: async () => {
|
|
456
|
+
// Reach the underlying starknet `Contract` rather than going through
|
|
457
|
+
// `MultinoulliAMMContract.getLPShares` so we can reuse the same SQ128
|
|
458
|
+
// decoding helpers as the continuous-market path. Decoding the raw
|
|
459
|
+
// call result ourselves keeps a single source of truth for the
|
|
460
|
+
// magnitude → string + magnitude → number conversion.
|
|
461
|
+
const amm = getMultinoulliAmm(marketAddress);
|
|
462
|
+
const raw = await amm.getUnderlyingContract().call('get_lp_shares', [provider]);
|
|
463
|
+
const shares = sq128MagnitudeToString(raw);
|
|
464
|
+
const sharesNumber = sq128ToNumber(raw) ?? 0;
|
|
465
|
+
return { shares, sharesNumber };
|
|
466
|
+
},
|
|
467
|
+
catch: (e) => new ChainReadError(`Failed to read multinoulli LP shares: ${e instanceof Error ? e.message : 'Unknown'}`, e),
|
|
468
|
+
}),
|
|
454
469
|
fetchEventsByContract: (contractAddress, fromBlock, chunkSize) => Effect.tryPromise({
|
|
455
470
|
try: async () => {
|
|
456
471
|
const safeChunkSize = Math.max(1, Math.min(chunkSize, 1000));
|