@the-situation/indexer 0.9.1 → 0.9.3
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/api/app.d.ts +2 -0
- package/dist/api/app.d.ts.map +1 -1
- package/dist/api/app.js +1 -1
- package/dist/api/app.js.map +1 -1
- package/dist/api/middleware/admin-auth.d.ts.map +1 -1
- package/dist/api/middleware/admin-auth.js +7 -1
- package/dist/api/middleware/admin-auth.js.map +1 -1
- package/dist/api/middleware/error-handler.d.ts.map +1 -1
- package/dist/api/middleware/error-handler.js +3 -2
- package/dist/api/middleware/error-handler.js.map +1 -1
- package/dist/api/routes/admin.d.ts.map +1 -1
- package/dist/api/routes/admin.js +19 -0
- package/dist/api/routes/admin.js.map +1 -1
- package/dist/api/routes/health.d.ts +3 -2
- package/dist/api/routes/health.d.ts.map +1 -1
- package/dist/api/routes/health.js +11 -4
- package/dist/api/routes/health.js.map +1 -1
- package/dist/api/routes/market-events.d.ts.map +1 -1
- package/dist/api/routes/market-events.js +8 -6
- package/dist/api/routes/market-events.js.map +1 -1
- package/dist/api/routes/markets.d.ts.map +1 -1
- package/dist/api/routes/markets.js +73 -4
- package/dist/api/routes/markets.js.map +1 -1
- package/dist/api/routes/rankings.js +1 -1
- package/dist/api/routes/rankings.js.map +1 -1
- package/dist/api/routes/trader-events.d.ts.map +1 -1
- package/dist/api/routes/trader-events.js +8 -6
- package/dist/api/routes/trader-events.js.map +1 -1
- package/dist/client/IndexerClient.d.ts +10 -1
- package/dist/client/IndexerClient.d.ts.map +1 -1
- package/dist/client/IndexerClient.js.map +1 -1
- package/dist/client/IndexerClientLive.d.ts +1 -0
- package/dist/client/IndexerClientLive.d.ts.map +1 -1
- package/dist/client/IndexerClientLive.js +38 -0
- package/dist/client/IndexerClientLive.js.map +1 -1
- package/dist/client/convenience.d.ts +10 -1
- package/dist/client/convenience.d.ts.map +1 -1
- package/dist/client/convenience.js +4 -0
- 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 +3 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +17 -4
- package/dist/config.js.map +1 -1
- package/dist/db/connection.d.ts.map +1 -1
- package/dist/db/connection.js +4 -1
- package/dist/db/connection.js.map +1 -1
- package/dist/db/repositories/event.d.ts.map +1 -1
- package/dist/db/repositories/event.js +10 -6
- package/dist/db/repositories/event.js.map +1 -1
- package/dist/db/repositories/index.d.ts +1 -0
- package/dist/db/repositories/index.d.ts.map +1 -1
- package/dist/db/repositories/index.js +1 -0
- package/dist/db/repositories/index.js.map +1 -1
- package/dist/db/repositories/market-state.d.ts +1 -0
- package/dist/db/repositories/market-state.d.ts.map +1 -1
- package/dist/db/repositories/market-state.js +10 -0
- package/dist/db/repositories/market-state.js.map +1 -1
- package/dist/db/repositories/market.d.ts.map +1 -1
- package/dist/db/repositories/market.js +29 -5
- package/dist/db/repositories/market.js.map +1 -1
- package/dist/db/repositories/multinoulli-market-state.d.ts +30 -0
- package/dist/db/repositories/multinoulli-market-state.d.ts.map +1 -0
- package/dist/db/repositories/multinoulli-market-state.js +48 -0
- package/dist/db/repositories/multinoulli-market-state.js.map +1 -0
- package/dist/db/repositories/position.d.ts.map +1 -1
- package/dist/db/repositories/position.js +8 -3
- package/dist/db/repositories/position.js.map +1 -1
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +68 -1
- package/dist/db/schema.js.map +1 -1
- package/dist/etl/decoder.d.ts +4 -3
- package/dist/etl/decoder.d.ts.map +1 -1
- package/dist/etl/decoder.js +123 -9
- package/dist/etl/decoder.js.map +1 -1
- package/dist/etl/event-indexer.d.ts +2 -1
- package/dist/etl/event-indexer.d.ts.map +1 -1
- package/dist/etl/event-indexer.js +126 -32
- package/dist/etl/event-indexer.js.map +1 -1
- package/dist/etl/position-refresher.d.ts +2 -1
- package/dist/etl/position-refresher.d.ts.map +1 -1
- package/dist/etl/position-refresher.js +45 -6
- package/dist/etl/position-refresher.js.map +1 -1
- package/dist/etl/state-refresher.d.ts +2 -1
- package/dist/etl/state-refresher.d.ts.map +1 -1
- package/dist/etl/state-refresher.js +39 -7
- package/dist/etl/state-refresher.js.map +1 -1
- package/dist/index.js +116 -15
- package/dist/index.js.map +1 -1
- package/dist/layers/ChainReaderLive.d.ts.map +1 -1
- package/dist/layers/ChainReaderLive.js +89 -3
- package/dist/layers/ChainReaderLive.js.map +1 -1
- package/dist/layers/DatabaseLive.d.ts.map +1 -1
- package/dist/layers/DatabaseLive.js +2 -1
- package/dist/layers/DatabaseLive.js.map +1 -1
- package/dist/layers/VoyagerClientLive.d.ts +3 -2
- package/dist/layers/VoyagerClientLive.d.ts.map +1 -1
- package/dist/layers/VoyagerClientLive.js +20 -5
- package/dist/layers/VoyagerClientLive.js.map +1 -1
- package/dist/services/ChainReader.d.ts +3 -0
- package/dist/services/ChainReader.d.ts.map +1 -1
- package/dist/services/ChainReader.js.map +1 -1
- package/dist/services/Database.d.ts +2 -1
- package/dist/services/Database.d.ts.map +1 -1
- package/dist/services/Database.js.map +1 -1
- package/dist/services/VoyagerRateLimit.d.ts +40 -0
- package/dist/services/VoyagerRateLimit.d.ts.map +1 -0
- package/dist/services/VoyagerRateLimit.js +92 -0
- package/dist/services/VoyagerRateLimit.js.map +1 -0
- package/dist/types/api.d.ts +48 -1
- package/dist/types/api.d.ts.map +1 -1
- package/dist/types/event.d.ts +43 -2
- package/dist/types/event.d.ts.map +1 -1
- package/dist/types/index.d.ts +3 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/market.d.ts +64 -0
- package/dist/types/market.d.ts.map +1 -1
- package/dist/types/position.d.ts +8 -0
- package/dist/types/position.d.ts.map +1 -1
- package/package.json +6 -6
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Layer } from 'effect';
|
|
2
2
|
import { VoyagerClientTag } from '../services/VoyagerClient';
|
|
3
|
-
|
|
3
|
+
import type { VoyagerRateLimitState } from '../services/VoyagerRateLimit';
|
|
4
|
+
export interface VoyagerClientConfig {
|
|
4
5
|
readonly maxRetries: number;
|
|
5
6
|
readonly baseDelayMs: number;
|
|
6
7
|
}
|
|
7
|
-
export declare const VoyagerClientLive: (apiKey: string,
|
|
8
|
+
export declare const VoyagerClientLive: (apiKey: string, rateLimit: VoyagerRateLimitState, clientConfig?: VoyagerClientConfig) => Layer.Layer<VoyagerClientTag>;
|
|
8
9
|
//# sourceMappingURL=VoyagerClientLive.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VoyagerClientLive.d.ts","sourceRoot":"","sources":["../../src/layers/VoyagerClientLive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,EAAY,MAAM,QAAQ,CAAC;AAC3D,OAAO,EACL,gBAAgB,EAGjB,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"VoyagerClientLive.d.ts","sourceRoot":"","sources":["../../src/layers/VoyagerClientLive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,EAAY,MAAM,QAAQ,CAAC;AAC3D,OAAO,EACL,gBAAgB,EAGjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAK1E,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAeD,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,MAAM,EACd,WAAW,qBAAqB,EAChC,eAAc,mBAAoC,KACjD,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAkF5B,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Duration, Effect, Layer, Schedule } from 'effect';
|
|
2
2
|
import { VoyagerClientTag, VoyagerApiError, isRetryableVoyagerError, } from '../services/VoyagerClient';
|
|
3
3
|
const BASE_URL = 'https://sepolia-api.voyager.online/beta';
|
|
4
|
-
const
|
|
4
|
+
const DEFAULT_CONFIG = {
|
|
5
5
|
maxRetries: 3,
|
|
6
|
-
baseDelayMs:
|
|
6
|
+
baseDelayMs: 3000,
|
|
7
7
|
};
|
|
8
8
|
function parseRetryAfterMs(response) {
|
|
9
9
|
const header = response.headers.get('Retry-After');
|
|
@@ -14,10 +14,17 @@ function parseRetryAfterMs(response) {
|
|
|
14
14
|
return seconds * 1000;
|
|
15
15
|
return undefined;
|
|
16
16
|
}
|
|
17
|
-
export const VoyagerClientLive = (apiKey,
|
|
17
|
+
export const VoyagerClientLive = (apiKey, rateLimit, clientConfig = DEFAULT_CONFIG) => Layer.succeed(VoyagerClientTag, VoyagerClientTag.of({
|
|
18
18
|
fetchEvents: (contractAddress, page, pageSize) => {
|
|
19
19
|
const fetchOnce = Effect.tryPromise({
|
|
20
20
|
try: async () => {
|
|
21
|
+
// Check rate limit
|
|
22
|
+
if (rateLimit.isLimited()) {
|
|
23
|
+
const status = rateLimit.getStatus();
|
|
24
|
+
throw new VoyagerApiError(`Rate limited — ${status.message}`, 429);
|
|
25
|
+
}
|
|
26
|
+
// Inter-request throttle
|
|
27
|
+
await rateLimit.throttle();
|
|
21
28
|
const url = new URL(`${BASE_URL}/events`);
|
|
22
29
|
url.searchParams.set('contract', contractAddress);
|
|
23
30
|
url.searchParams.set('p', page.toString());
|
|
@@ -29,8 +36,13 @@ export const VoyagerClientLive = (apiKey, retryConfig = DEFAULT_RETRY_CONFIG) =>
|
|
|
29
36
|
},
|
|
30
37
|
});
|
|
31
38
|
if (!response.ok) {
|
|
32
|
-
|
|
39
|
+
const retryAfterMs = parseRetryAfterMs(response);
|
|
40
|
+
if (response.status === 429 || response.status === 503) {
|
|
41
|
+
rateLimit.recordRateLimit();
|
|
42
|
+
}
|
|
43
|
+
throw new VoyagerApiError(`Voyager API ${response.status}: ${response.statusText}`, response.status, retryAfterMs);
|
|
33
44
|
}
|
|
45
|
+
rateLimit.recordSuccess();
|
|
34
46
|
const data = (await response.json());
|
|
35
47
|
return { events: data.items, lastPage: data.lastPage };
|
|
36
48
|
},
|
|
@@ -40,10 +52,13 @@ export const VoyagerClientLive = (apiKey, retryConfig = DEFAULT_RETRY_CONFIG) =>
|
|
|
40
52
|
return new VoyagerApiError(e instanceof Error ? e.message : 'Unknown Voyager API error');
|
|
41
53
|
},
|
|
42
54
|
});
|
|
43
|
-
const retrySchedule = Schedule.compose(Schedule.jittered(Schedule.exponential(Duration.millis(
|
|
55
|
+
const retrySchedule = Schedule.compose(Schedule.jittered(Schedule.exponential(Duration.millis(clientConfig.baseDelayMs))), Schedule.recurs(clientConfig.maxRetries));
|
|
44
56
|
return fetchOnce.pipe(Effect.retry({
|
|
45
57
|
schedule: retrySchedule,
|
|
46
58
|
while: (error) => {
|
|
59
|
+
// Don't retry if we've just opened the rate-limit cooldown
|
|
60
|
+
if (rateLimit.isLimited())
|
|
61
|
+
return false;
|
|
47
62
|
const shouldRetry = isRetryableVoyagerError(error);
|
|
48
63
|
if (shouldRetry) {
|
|
49
64
|
console.warn(`[VoyagerClient] Retrying after ${error.status} for contract=${contractAddress} page=${page}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VoyagerClientLive.js","sourceRoot":"","sources":["../../src/layers/VoyagerClientLive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC3D,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"VoyagerClientLive.js","sourceRoot":"","sources":["../../src/layers/VoyagerClientLive.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Context, type Effect } from 'effect';
|
|
2
|
+
import type { MultinoulliMarketChainState, MultinoulliTraderPosition } from '../types';
|
|
2
3
|
export interface MarketChainState {
|
|
3
4
|
readonly mean: number | null;
|
|
4
5
|
readonly sigma: number | null;
|
|
@@ -32,6 +33,8 @@ export declare class ChainReadError {
|
|
|
32
33
|
export interface ChainReaderService {
|
|
33
34
|
readonly readMarketState: (marketAddress: string) => Effect.Effect<MarketChainState, ChainReadError>;
|
|
34
35
|
readonly readPosition: (marketAddress: string, trader: string) => Effect.Effect<TraderPosition, ChainReadError>;
|
|
36
|
+
readonly readMultinoulliMarketState: (marketAddress: string) => Effect.Effect<MultinoulliMarketChainState, ChainReadError>;
|
|
37
|
+
readonly readMultinoulliPosition: (marketAddress: string, trader: string) => Effect.Effect<MultinoulliTraderPosition, ChainReadError>;
|
|
35
38
|
}
|
|
36
39
|
declare const ChainReaderTag_base: Context.TagClass<ChainReaderTag, "indexer/ChainReader", ChainReaderService>;
|
|
37
40
|
export declare class ChainReaderTag extends ChainReaderTag_base {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChainReader.d.ts","sourceRoot":"","sources":["../../src/services/ChainReader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"ChainReader.d.ts","sourceRoot":"","sources":["../../src/services/ChainReader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,KAAK,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAEvF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,cAAc;IAGvB,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO;IAH1B,QAAQ,CAAC,IAAI,oBAAoB;gBAEtB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,OAAO,YAAA;CAE3B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,eAAe,EAAE,CACxB,aAAa,EAAE,MAAM,KAClB,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;IAErD,QAAQ,CAAC,YAAY,EAAE,CACrB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,KACX,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;IAEnD,QAAQ,CAAC,0BAA0B,EAAE,CACnC,aAAa,EAAE,MAAM,KAClB,MAAM,CAAC,MAAM,CAAC,2BAA2B,EAAE,cAAc,CAAC,CAAC;IAEhE,QAAQ,CAAC,uBAAuB,EAAE,CAChC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,KACX,MAAM,CAAC,MAAM,CAAC,yBAAyB,EAAE,cAAc,CAAC,CAAC;CAC/D;;AAED,qBAAa,cAAe,SAAQ,mBAGjC;CAAG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChainReader.js","sourceRoot":"","sources":["../../src/services/ChainReader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"ChainReader.js","sourceRoot":"","sources":["../../src/services/ChainReader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,QAAQ,CAAC;AA6B9C,MAAM,OAAO,cAAc;IAGd;IACA;IAHF,IAAI,GAAG,gBAAgB,CAAC;IACjC,YACW,OAAe,EACf,KAAe;QADf,YAAO,GAAP,OAAO,CAAQ;QACf,UAAK,GAAL,KAAK,CAAU;IACvB,CAAC;CACL;AAsBD,MAAM,OAAO,cAAe,SAAQ,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAGnE;CAAG"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { Context } from 'effect';
|
|
2
2
|
import type { Database as BunDatabase } from 'bun:sqlite';
|
|
3
|
-
import type { MarketRepository, EventRepository, MarketStateRepository, PositionRepository, CursorRepository, RankingRepository } from '../db/repositories';
|
|
3
|
+
import type { MarketRepository, EventRepository, MarketStateRepository, MultinoulliMarketStateRepository, PositionRepository, CursorRepository, RankingRepository } from '../db/repositories';
|
|
4
4
|
export interface DatabaseService {
|
|
5
5
|
readonly db: BunDatabase;
|
|
6
6
|
readonly markets: MarketRepository;
|
|
7
7
|
readonly events: EventRepository;
|
|
8
8
|
readonly marketState: MarketStateRepository;
|
|
9
|
+
readonly multinoulliMarketState: MultinoulliMarketStateRepository;
|
|
9
10
|
readonly positions: PositionRepository;
|
|
10
11
|
readonly cursors: CursorRepository;
|
|
11
12
|
readonly rankings: RankingRepository;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Database.d.ts","sourceRoot":"","sources":["../../src/services/Database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,EAAE,QAAQ,IAAI,WAAW,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;CACtC;;AAED,qBAAa,WAAY,SAAQ,gBAG9B;CAAG"}
|
|
1
|
+
{"version":3,"file":"Database.d.ts","sourceRoot":"","sources":["../../src/services/Database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,EAAE,QAAQ,IAAI,WAAW,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,gCAAgC,EAChC,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAC;IAC5C,QAAQ,CAAC,sBAAsB,EAAE,gCAAgC,CAAC;IAClE,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;CACtC;;AAED,qBAAa,WAAY,SAAQ,gBAG9B;CAAG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Database.js","sourceRoot":"","sources":["../../src/services/Database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"Database.js","sourceRoot":"","sources":["../../src/services/Database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAuBjC,MAAM,OAAO,WAAY,SAAQ,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAG7D;CAAG"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Voyager rate-limit state with escalating backoff.
|
|
3
|
+
*
|
|
4
|
+
* On the very first 429, the indexer pauses ALL Voyager requests for 60s.
|
|
5
|
+
* Each subsequent trip escalates: 60s → 2m → 4m → 8m → 12m → 30m.
|
|
6
|
+
* A successful request resets the escalation level.
|
|
7
|
+
*
|
|
8
|
+
* This state is observable — the health API reads it to surface a
|
|
9
|
+
* human-friendly message like "Chain metrics delayed, retrying in 3m 42s".
|
|
10
|
+
*/
|
|
11
|
+
export interface RateLimitStatus {
|
|
12
|
+
/** Whether Voyager requests are currently paused. */
|
|
13
|
+
readonly isLimited: boolean;
|
|
14
|
+
/** Unix ms when the current cooldown expires (0 = not limited). */
|
|
15
|
+
readonly resumesAt: number;
|
|
16
|
+
/** Seconds remaining until resume (0 = not limited). */
|
|
17
|
+
readonly retryInSeconds: number;
|
|
18
|
+
/** How many times we've escalated (0 = no escalation yet). */
|
|
19
|
+
readonly escalationLevel: number;
|
|
20
|
+
/** Human-readable status message for the frontend. */
|
|
21
|
+
readonly message: string | null;
|
|
22
|
+
}
|
|
23
|
+
export declare class VoyagerRateLimitState {
|
|
24
|
+
private escalationLevel;
|
|
25
|
+
private cooldownUntil;
|
|
26
|
+
private minRequestIntervalMs;
|
|
27
|
+
private lastRequestTime;
|
|
28
|
+
constructor(minRequestIntervalMs?: number);
|
|
29
|
+
/** Check if requests are currently paused. If cooldown has expired, auto-close. */
|
|
30
|
+
isLimited(): boolean;
|
|
31
|
+
/** Record a successful Voyager response — resets escalation. */
|
|
32
|
+
recordSuccess(): void;
|
|
33
|
+
/** Record a 429/503 — immediately opens the circuit with escalating cooldown. */
|
|
34
|
+
recordRateLimit(): void;
|
|
35
|
+
/** Inter-request throttle: sleep if needed to respect min interval. */
|
|
36
|
+
throttle(): Promise<void>;
|
|
37
|
+
/** Observable status snapshot for the health API. */
|
|
38
|
+
getStatus(): RateLimitStatus;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=VoyagerRateLimit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VoyagerRateLimit.d.ts","sourceRoot":"","sources":["../../src/services/VoyagerRateLimit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAYH,MAAM,WAAW,eAAe;IAC9B,qDAAqD;IACrD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,mEAAmE;IACnE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,wDAAwD;IACxD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,8DAA8D;IAC9D,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,sDAAsD;IACtD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,eAAe,CAAK;gBAEhB,oBAAoB,SAAM;IAItC,mFAAmF;IACnF,SAAS,IAAI,OAAO;IAWpB,gEAAgE;IAChE,aAAa,IAAI,IAAI;IAKrB,iFAAiF;IACjF,eAAe,IAAI,IAAI;IAYvB,uEAAuE;IACjE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAW/B,qDAAqD;IACrD,SAAS,IAAI,eAAe;CAqB7B"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Voyager rate-limit state with escalating backoff.
|
|
3
|
+
*
|
|
4
|
+
* On the very first 429, the indexer pauses ALL Voyager requests for 60s.
|
|
5
|
+
* Each subsequent trip escalates: 60s → 2m → 4m → 8m → 12m → 30m.
|
|
6
|
+
* A successful request resets the escalation level.
|
|
7
|
+
*
|
|
8
|
+
* This state is observable — the health API reads it to surface a
|
|
9
|
+
* human-friendly message like "Chain metrics delayed, retrying in 3m 42s".
|
|
10
|
+
*/
|
|
11
|
+
/** Escalating cooldown durations in milliseconds. */
|
|
12
|
+
const COOLDOWN_STEPS_MS = [
|
|
13
|
+
60_000, // 60s
|
|
14
|
+
120_000, // 2m
|
|
15
|
+
240_000, // 4m
|
|
16
|
+
480_000, // 8m
|
|
17
|
+
720_000, // 12m
|
|
18
|
+
1_800_000, // 30m
|
|
19
|
+
];
|
|
20
|
+
export class VoyagerRateLimitState {
|
|
21
|
+
escalationLevel = 0;
|
|
22
|
+
cooldownUntil = 0;
|
|
23
|
+
minRequestIntervalMs;
|
|
24
|
+
lastRequestTime = 0;
|
|
25
|
+
constructor(minRequestIntervalMs = 250) {
|
|
26
|
+
this.minRequestIntervalMs = minRequestIntervalMs;
|
|
27
|
+
}
|
|
28
|
+
/** Check if requests are currently paused. If cooldown has expired, auto-close. */
|
|
29
|
+
isLimited() {
|
|
30
|
+
if (this.cooldownUntil === 0)
|
|
31
|
+
return false;
|
|
32
|
+
if (Date.now() >= this.cooldownUntil) {
|
|
33
|
+
// Cooldown expired — don't reset escalation level yet (only on success)
|
|
34
|
+
console.warn('[VoyagerRateLimit] Cooldown expired — resuming requests');
|
|
35
|
+
this.cooldownUntil = 0;
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
/** Record a successful Voyager response — resets escalation. */
|
|
41
|
+
recordSuccess() {
|
|
42
|
+
this.escalationLevel = 0;
|
|
43
|
+
this.cooldownUntil = 0;
|
|
44
|
+
}
|
|
45
|
+
/** Record a 429/503 — immediately opens the circuit with escalating cooldown. */
|
|
46
|
+
recordRateLimit() {
|
|
47
|
+
const step = Math.min(this.escalationLevel, COOLDOWN_STEPS_MS.length - 1);
|
|
48
|
+
const cooldownMs = COOLDOWN_STEPS_MS[step];
|
|
49
|
+
this.cooldownUntil = Date.now() + cooldownMs;
|
|
50
|
+
this.escalationLevel++;
|
|
51
|
+
const label = formatDuration(cooldownMs);
|
|
52
|
+
console.warn(`[VoyagerRateLimit] Rate limited — pausing for ${label} (escalation level ${this.escalationLevel})`);
|
|
53
|
+
}
|
|
54
|
+
/** Inter-request throttle: sleep if needed to respect min interval. */
|
|
55
|
+
async throttle() {
|
|
56
|
+
const now = Date.now();
|
|
57
|
+
const elapsed = now - this.lastRequestTime;
|
|
58
|
+
if (elapsed < this.minRequestIntervalMs) {
|
|
59
|
+
await new Promise((resolve) => setTimeout(resolve, this.minRequestIntervalMs - elapsed));
|
|
60
|
+
}
|
|
61
|
+
this.lastRequestTime = Date.now();
|
|
62
|
+
}
|
|
63
|
+
/** Observable status snapshot for the health API. */
|
|
64
|
+
getStatus() {
|
|
65
|
+
const now = Date.now();
|
|
66
|
+
const isLimited = this.isLimited();
|
|
67
|
+
const retryInSeconds = isLimited
|
|
68
|
+
? Math.max(0, Math.ceil((this.cooldownUntil - now) / 1000))
|
|
69
|
+
: 0;
|
|
70
|
+
let message = null;
|
|
71
|
+
if (isLimited) {
|
|
72
|
+
const label = formatDuration(retryInSeconds * 1000);
|
|
73
|
+
message = `Chain metrics delayed, rate limit reached, retrying in ${label}`;
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
isLimited,
|
|
77
|
+
resumesAt: isLimited ? this.cooldownUntil : 0,
|
|
78
|
+
retryInSeconds,
|
|
79
|
+
escalationLevel: this.escalationLevel,
|
|
80
|
+
message,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function formatDuration(ms) {
|
|
85
|
+
const totalSeconds = Math.ceil(ms / 1000);
|
|
86
|
+
if (totalSeconds < 60)
|
|
87
|
+
return `${totalSeconds}s`;
|
|
88
|
+
const minutes = Math.floor(totalSeconds / 60);
|
|
89
|
+
const seconds = totalSeconds % 60;
|
|
90
|
+
return seconds > 0 ? `${minutes}m ${seconds}s` : `${minutes}m`;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=VoyagerRateLimit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VoyagerRateLimit.js","sourceRoot":"","sources":["../../src/services/VoyagerRateLimit.ts"],"names":[],"mappings":"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"}
|
package/dist/types/api.d.ts
CHANGED
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* API response shapes.
|
|
3
3
|
*/
|
|
4
|
+
import type { MarketType } from './market';
|
|
5
|
+
export interface VoyagerRateLimitInfo {
|
|
6
|
+
readonly isLimited: boolean;
|
|
7
|
+
readonly retryInSeconds: number;
|
|
8
|
+
readonly escalationLevel: number;
|
|
9
|
+
readonly message: string | null;
|
|
10
|
+
}
|
|
4
11
|
export interface HealthResponse {
|
|
5
|
-
readonly status: 'ok' | 'error';
|
|
12
|
+
readonly status: 'ok' | 'degraded' | 'error';
|
|
6
13
|
readonly uptime: number;
|
|
7
14
|
readonly dbStatus: 'connected' | 'disconnected';
|
|
8
15
|
readonly marketsCount: number;
|
|
9
16
|
readonly eventsCount: number;
|
|
10
17
|
readonly lastPollAt: number | null;
|
|
18
|
+
readonly voyager: VoyagerRateLimitInfo;
|
|
11
19
|
}
|
|
12
20
|
export interface MarketResponse {
|
|
13
21
|
readonly address: string;
|
|
@@ -15,11 +23,36 @@ export interface MarketResponse {
|
|
|
15
23
|
readonly description: string;
|
|
16
24
|
readonly category: string;
|
|
17
25
|
readonly topics: readonly string[];
|
|
26
|
+
readonly marketType: MarketType;
|
|
27
|
+
readonly xAxisLabel: string | null;
|
|
28
|
+
readonly xAxisUnit: string | null;
|
|
29
|
+
readonly outcomeLabels: readonly string[] | null;
|
|
30
|
+
readonly rowLabels: readonly string[] | null;
|
|
31
|
+
readonly colLabels: readonly string[] | null;
|
|
32
|
+
readonly resolutionSource: string | null;
|
|
18
33
|
readonly isActive: boolean;
|
|
19
34
|
readonly state: MarketStateResponse | null;
|
|
35
|
+
readonly multinoulliState?: MultinoulliMarketStateResponse | null;
|
|
20
36
|
readonly createdAt: number;
|
|
21
37
|
readonly updatedAt: number;
|
|
22
38
|
}
|
|
39
|
+
export interface MultinoulliMarketStateResponse {
|
|
40
|
+
readonly outcomeCount: number;
|
|
41
|
+
readonly probs: readonly number[];
|
|
42
|
+
readonly k: number | null;
|
|
43
|
+
readonly effectiveK: number | null;
|
|
44
|
+
readonly totalShares: string | null;
|
|
45
|
+
readonly totalBacking: string | null;
|
|
46
|
+
readonly isInitialized: boolean;
|
|
47
|
+
readonly isPaused: boolean;
|
|
48
|
+
readonly isSettled: boolean;
|
|
49
|
+
readonly settlementOutcomes: readonly number[];
|
|
50
|
+
readonly matrixEnabled: boolean;
|
|
51
|
+
readonly matrixRows: number;
|
|
52
|
+
readonly matrixCols: number;
|
|
53
|
+
readonly matrixEnforceFullRow: boolean;
|
|
54
|
+
readonly fetchedAt: number;
|
|
55
|
+
}
|
|
23
56
|
export interface MarketStateResponse {
|
|
24
57
|
readonly mean: number | null;
|
|
25
58
|
readonly sigma: number | null;
|
|
@@ -106,6 +139,13 @@ export interface AdminCreateMarketBody {
|
|
|
106
139
|
readonly description?: string | undefined;
|
|
107
140
|
readonly category?: string | undefined;
|
|
108
141
|
readonly topics?: readonly string[] | undefined;
|
|
142
|
+
readonly market_type?: MarketType | undefined;
|
|
143
|
+
readonly x_axis_label?: string | undefined;
|
|
144
|
+
readonly x_axis_unit?: string | undefined;
|
|
145
|
+
readonly outcome_labels?: readonly string[] | undefined;
|
|
146
|
+
readonly row_labels?: readonly string[] | undefined;
|
|
147
|
+
readonly col_labels?: readonly string[] | undefined;
|
|
148
|
+
readonly resolution_source?: string | undefined;
|
|
109
149
|
}
|
|
110
150
|
export interface AdminUpdateMarketBody {
|
|
111
151
|
readonly title?: string | undefined;
|
|
@@ -113,5 +153,12 @@ export interface AdminUpdateMarketBody {
|
|
|
113
153
|
readonly category?: string | undefined;
|
|
114
154
|
readonly topics?: readonly string[] | undefined;
|
|
115
155
|
readonly is_active?: boolean | undefined;
|
|
156
|
+
readonly market_type?: MarketType | undefined;
|
|
157
|
+
readonly x_axis_label?: string | null | undefined;
|
|
158
|
+
readonly x_axis_unit?: string | null | undefined;
|
|
159
|
+
readonly outcome_labels?: readonly string[] | null | undefined;
|
|
160
|
+
readonly row_labels?: readonly string[] | null | undefined;
|
|
161
|
+
readonly col_labels?: readonly string[] | null | undefined;
|
|
162
|
+
readonly resolution_source?: string | null | undefined;
|
|
116
163
|
}
|
|
117
164
|
//# sourceMappingURL=api.d.ts.map
|
package/dist/types/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/types/api.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/types/api.ts"],"names":[],"mappings":"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"}
|
package/dist/types/event.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Event domain types for the indexer.
|
|
3
3
|
*/
|
|
4
|
-
export type EventType = 'bootstrapped' | 'trade_moved' | 'market_initialized' | 'trade_executed';
|
|
4
|
+
export type EventType = 'bootstrapped' | 'trade_moved' | 'market_initialized' | 'trade_executed' | 'multinoulli_trade_executed' | 'market_settled' | 'market_settled_multi';
|
|
5
5
|
export interface MarketEventRow {
|
|
6
6
|
readonly id: number;
|
|
7
7
|
readonly market_address: string;
|
|
8
8
|
readonly tx_hash: string;
|
|
9
9
|
readonly block_number: number;
|
|
10
10
|
readonly timestamp: number;
|
|
11
|
-
readonly event_type:
|
|
11
|
+
readonly event_type: string;
|
|
12
12
|
readonly trader: string | null;
|
|
13
13
|
readonly mean: number;
|
|
14
14
|
readonly std_dev: number;
|
|
@@ -18,6 +18,11 @@ export interface MarketEventRow {
|
|
|
18
18
|
readonly old_std_dev: number | null;
|
|
19
19
|
readonly collateral_posted: string | null;
|
|
20
20
|
readonly raw_data: string | null;
|
|
21
|
+
readonly outcome_count: number | null;
|
|
22
|
+
readonly min_outcome_index: number | null;
|
|
23
|
+
readonly is_position_sell: number | null;
|
|
24
|
+
readonly settlement_outcome_index: number | null;
|
|
25
|
+
readonly settlement_outcomes_json: string | null;
|
|
21
26
|
readonly created_at: number;
|
|
22
27
|
}
|
|
23
28
|
export interface InsertEventInput {
|
|
@@ -35,6 +40,11 @@ export interface InsertEventInput {
|
|
|
35
40
|
readonly old_std_dev: number | null;
|
|
36
41
|
readonly collateral_posted: string | null;
|
|
37
42
|
readonly raw_data: string | null;
|
|
43
|
+
readonly outcome_count?: number | null;
|
|
44
|
+
readonly min_outcome_index?: number | null;
|
|
45
|
+
readonly is_position_sell?: boolean | null;
|
|
46
|
+
readonly settlement_outcome_index?: number | null;
|
|
47
|
+
readonly settlement_outcomes_json?: string | null;
|
|
38
48
|
}
|
|
39
49
|
/**
|
|
40
50
|
* Voyager API response types.
|
|
@@ -85,4 +95,35 @@ export interface DecodedMarketEvent {
|
|
|
85
95
|
readonly collateralPosted: string | null;
|
|
86
96
|
readonly rawData: readonly string[];
|
|
87
97
|
}
|
|
98
|
+
export interface DecodedMultinoulliTradeEvent {
|
|
99
|
+
readonly timestamp: number;
|
|
100
|
+
readonly blockNumber: number;
|
|
101
|
+
readonly eventType: 'multinoulli_trade_executed';
|
|
102
|
+
readonly txHash: string;
|
|
103
|
+
readonly trader: string | null;
|
|
104
|
+
readonly outcomeCount: number;
|
|
105
|
+
readonly minOutcomeIndex: number;
|
|
106
|
+
readonly tokenAmount: string;
|
|
107
|
+
readonly isPositionSell: boolean;
|
|
108
|
+
readonly rawData: readonly string[];
|
|
109
|
+
}
|
|
110
|
+
export interface DecodedMarketSettledEvent {
|
|
111
|
+
readonly timestamp: number;
|
|
112
|
+
readonly blockNumber: number;
|
|
113
|
+
readonly eventType: 'market_settled';
|
|
114
|
+
readonly txHash: string;
|
|
115
|
+
readonly settlementOutcomeIndex: number;
|
|
116
|
+
readonly by: string | null;
|
|
117
|
+
readonly rawData: readonly string[];
|
|
118
|
+
}
|
|
119
|
+
export interface DecodedMarketSettledMultiEvent {
|
|
120
|
+
readonly timestamp: number;
|
|
121
|
+
readonly blockNumber: number;
|
|
122
|
+
readonly eventType: 'market_settled_multi';
|
|
123
|
+
readonly txHash: string;
|
|
124
|
+
readonly outcomes: readonly number[];
|
|
125
|
+
readonly by: string | null;
|
|
126
|
+
readonly rawData: readonly string[];
|
|
127
|
+
}
|
|
128
|
+
export type DecodedEvent = DecodedMarketEvent | DecodedMultinoulliTradeEvent | DecodedMarketSettledEvent | DecodedMarketSettledMultiEvent;
|
|
88
129
|
//# sourceMappingURL=event.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/types/event.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/types/event.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export type { MarketRow, MarketStateRow, CreateMarketInput, UpdateMarketInput, } from './market';
|
|
2
|
-
export type { EventType, MarketEventRow, InsertEventInput, VoyagerEventsResponse, VoyagerEvent, DecodedEventData, DecodedMarketEvent, } from './event';
|
|
1
|
+
export type { MarketType, MarketRow, MarketStateRow, MultinoulliMarketStateRow, MultinoulliMarketChainState, MultinoulliTraderPosition, CreateMarketInput, UpdateMarketInput, } from './market';
|
|
2
|
+
export type { EventType, MarketEventRow, InsertEventInput, VoyagerEventsResponse, VoyagerEvent, DecodedEventData, DecodedMarketEvent, DecodedMultinoulliTradeEvent, DecodedMarketSettledEvent, DecodedMarketSettledMultiEvent, DecodedEvent, } from './event';
|
|
3
3
|
export type { SettlementState, UserPositionRow, UpsertPositionInput, CursorRow, } from './position';
|
|
4
|
-
export type { HealthResponse, MarketResponse, MarketStateResponse, EventResponse, TraderPositionResponse, TraderEventResponse, TraderStatsResponse, RankingEntry, PaginatedResponse, AdminCreateMarketBody, AdminUpdateMarketBody, } from './api';
|
|
4
|
+
export type { VoyagerRateLimitInfo, HealthResponse, MarketResponse, MarketStateResponse, MultinoulliMarketStateResponse, EventResponse, TraderPositionResponse, TraderEventResponse, TraderStatsResponse, RankingEntry, PaginatedResponse, AdminCreateMarketBody, AdminUpdateMarketBody, } from './api';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,SAAS,EACT,cAAc,EACd,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,SAAS,EACT,cAAc,EACd,yBAAyB,EACzB,2BAA2B,EAC3B,yBAAyB,EACzB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,4BAA4B,EAC5B,yBAAyB,EACzB,8BAA8B,EAC9B,YAAY,GACb,MAAM,SAAS,CAAC;AAEjB,YAAY,EACV,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,8BAA8B,EAC9B,aAAa,EACb,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,OAAO,CAAC"}
|
package/dist/types/market.d.ts
CHANGED
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Market domain types for the indexer.
|
|
3
3
|
*/
|
|
4
|
+
export type MarketType = 'normal' | 'multinoulli';
|
|
4
5
|
export interface MarketRow {
|
|
5
6
|
readonly address: string;
|
|
6
7
|
readonly title: string;
|
|
7
8
|
readonly description: string;
|
|
8
9
|
readonly category: string;
|
|
9
10
|
readonly topics: string;
|
|
11
|
+
readonly market_type: string;
|
|
12
|
+
readonly x_axis_label: string | null;
|
|
13
|
+
readonly x_axis_unit: string | null;
|
|
14
|
+
readonly outcome_labels: string | null;
|
|
15
|
+
readonly row_labels: string | null;
|
|
16
|
+
readonly col_labels: string | null;
|
|
17
|
+
readonly resolution_source: string | null;
|
|
10
18
|
readonly is_active: number;
|
|
11
19
|
readonly created_at: number;
|
|
12
20
|
readonly updated_at: number;
|
|
@@ -27,12 +35,61 @@ export interface MarketStateRow {
|
|
|
27
35
|
readonly variance_raw: string | null;
|
|
28
36
|
readonly fetched_at: number;
|
|
29
37
|
}
|
|
38
|
+
export interface MultinoulliMarketStateRow {
|
|
39
|
+
readonly market_address: string;
|
|
40
|
+
readonly outcome_count: number;
|
|
41
|
+
readonly probs_json: string;
|
|
42
|
+
readonly k: number | null;
|
|
43
|
+
readonly effective_k: number | null;
|
|
44
|
+
readonly total_shares: string | null;
|
|
45
|
+
readonly total_backing: string | null;
|
|
46
|
+
readonly is_initialized: number;
|
|
47
|
+
readonly is_paused: number;
|
|
48
|
+
readonly is_settled: number;
|
|
49
|
+
readonly settlement_outcomes_json: string;
|
|
50
|
+
readonly matrix_enabled: number;
|
|
51
|
+
readonly matrix_rows: number;
|
|
52
|
+
readonly matrix_cols: number;
|
|
53
|
+
readonly matrix_enforce_full_row: number;
|
|
54
|
+
readonly fetched_at: number;
|
|
55
|
+
}
|
|
56
|
+
export interface MultinoulliMarketChainState {
|
|
57
|
+
readonly outcomeCount: number;
|
|
58
|
+
readonly probs: readonly number[];
|
|
59
|
+
readonly k: number | null;
|
|
60
|
+
readonly effectiveK: number | null;
|
|
61
|
+
readonly totalShares: string | null;
|
|
62
|
+
readonly totalBacking: string | null;
|
|
63
|
+
readonly isInitialized: boolean;
|
|
64
|
+
readonly isPaused: boolean;
|
|
65
|
+
readonly isSettled: boolean;
|
|
66
|
+
readonly settlementOutcomes: readonly number[];
|
|
67
|
+
readonly matrixEnabled: boolean;
|
|
68
|
+
readonly matrixRows: number;
|
|
69
|
+
readonly matrixCols: number;
|
|
70
|
+
readonly matrixEnforceFullRow: boolean;
|
|
71
|
+
}
|
|
72
|
+
export interface MultinoulliTraderPosition {
|
|
73
|
+
readonly exists: boolean;
|
|
74
|
+
readonly claimed: boolean;
|
|
75
|
+
readonly totalCollateralLocked: string | null;
|
|
76
|
+
readonly outcomeCount: number;
|
|
77
|
+
readonly originalProbs: readonly number[];
|
|
78
|
+
readonly settlementState: string;
|
|
79
|
+
}
|
|
30
80
|
export interface CreateMarketInput {
|
|
31
81
|
readonly address: string;
|
|
32
82
|
readonly title: string;
|
|
33
83
|
readonly description?: string | undefined;
|
|
34
84
|
readonly category?: string | undefined;
|
|
35
85
|
readonly topics?: readonly string[] | undefined;
|
|
86
|
+
readonly market_type?: MarketType | undefined;
|
|
87
|
+
readonly x_axis_label?: string | undefined;
|
|
88
|
+
readonly x_axis_unit?: string | undefined;
|
|
89
|
+
readonly outcome_labels?: readonly string[] | undefined;
|
|
90
|
+
readonly row_labels?: readonly string[] | undefined;
|
|
91
|
+
readonly col_labels?: readonly string[] | undefined;
|
|
92
|
+
readonly resolution_source?: string | undefined;
|
|
36
93
|
}
|
|
37
94
|
export interface UpdateMarketInput {
|
|
38
95
|
readonly title?: string | undefined;
|
|
@@ -40,5 +97,12 @@ export interface UpdateMarketInput {
|
|
|
40
97
|
readonly category?: string | undefined;
|
|
41
98
|
readonly topics?: readonly string[] | undefined;
|
|
42
99
|
readonly is_active?: boolean | undefined;
|
|
100
|
+
readonly market_type?: MarketType | undefined;
|
|
101
|
+
readonly x_axis_label?: string | null | undefined;
|
|
102
|
+
readonly x_axis_unit?: string | null | undefined;
|
|
103
|
+
readonly outcome_labels?: readonly string[] | null | undefined;
|
|
104
|
+
readonly row_labels?: readonly string[] | null | undefined;
|
|
105
|
+
readonly col_labels?: readonly string[] | null | undefined;
|
|
106
|
+
readonly resolution_source?: string | null | undefined;
|
|
43
107
|
}
|
|
44
108
|
//# sourceMappingURL=market.d.ts.map
|