@usherlabs/cex-broker 0.2.48 → 0.2.49
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/commands/cex-canonical-orderbook-export.js +30 -350
- package/dist/commands/cex-canonical-orderbook-export.js.map +7 -19
- package/dist/commands/cli.js +100 -35
- package/dist/commands/market-data-vendor-backfill.js +1463 -1742
- package/dist/commands/market-data-vendor-backfill.js.map +12 -24
- package/dist/helpers/logger.d.ts +4 -0
- package/dist/helpers/market-data-vendor-backfill/cryptohftdata.d.ts +2 -1
- package/dist/helpers/market-data-vendor-backfill/manifests.d.ts +29 -2
- package/dist/helpers/market-data-vendor-backfill/semantic-verification.d.ts +1 -0
- package/dist/helpers/otel.d.ts +1 -0
- package/dist/index.js +59 -31
- package/dist/index.js.map +5 -5
- package/dist/market-data-preparation/fixtures/conformance-v2.json +2 -2
- package/dist/market-data-preparation/policies/capability-policy-v1.json +28 -0
- package/dist/market-data-preparation/policies/capability-policy.json +3 -3
- package/dist/market-data-preparation.js +30 -351
- package/dist/market-data-preparation.js.map +9 -21
- package/dist/market-data-vendor-backfill/policies/capability-policy-v2.json +28 -0
- package/dist/market-data-vendor-backfill.js +1028 -1306
- package/dist/market-data-vendor-backfill.js.map +13 -25
- package/package.json +1 -1
package/dist/helpers/logger.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { LogLayer } from "loglayer";
|
|
2
|
+
export declare function attachOtelLogTransport(): void;
|
|
3
|
+
export declare function detachOtelLogTransport(): void;
|
|
1
4
|
declare const log: {
|
|
2
5
|
trace: (...args: unknown[]) => void;
|
|
3
6
|
debug: (...args: unknown[]) => void;
|
|
@@ -5,5 +8,6 @@ declare const log: {
|
|
|
5
8
|
warn: (...args: unknown[]) => void;
|
|
6
9
|
error: (...args: unknown[]) => void;
|
|
7
10
|
fatal: (...args: unknown[]) => void;
|
|
11
|
+
withMetadata: LogLayer["withMetadata"];
|
|
8
12
|
};
|
|
9
13
|
export { log };
|
|
@@ -16,7 +16,7 @@ export type CryptoHftDataCapabilityProfile = Readonly<{
|
|
|
16
16
|
snapshotGrouping: "event_time_last_update_id_object" | "event_time_final_update_id_object";
|
|
17
17
|
sequenceSemantics: "binance_u_U_pu" | "okx_seq_id_prev_seq_id";
|
|
18
18
|
constructionModes: readonly ["sampled_top_n_snapshot"];
|
|
19
|
-
sourcePolicies: readonly
|
|
19
|
+
sourcePolicies: readonly ("authoritative_window" | "fill_gaps")[];
|
|
20
20
|
}>;
|
|
21
21
|
export declare const CRYPTOHFTDATA_BINANCE_SPOT_BTCUSDT_PROFILE: CryptoHftDataCapabilityProfile;
|
|
22
22
|
export declare const CRYPTOHFTDATA_OKX_SPOT_ARBUSDT_PROFILE: CryptoHftDataCapabilityProfile;
|
|
@@ -53,6 +53,7 @@ export type ReconstructedCryptoHftBook = {
|
|
|
53
53
|
};
|
|
54
54
|
export declare function cryptoHftDataCapabilityFor(request: MarketDataVendorBackfillRequest, profiles?: readonly CryptoHftDataCapabilityProfile[]): ProviderCapability | undefined;
|
|
55
55
|
export declare function enumerateCryptoHftDataObjects(request: MarketDataVendorBackfillRequest, providerExchangeId: string, resolvedSymbol: string): string[];
|
|
56
|
+
export declare function providerAcquisitionRequest(request: MarketDataVendorBackfillRequest): MarketDataVendorBackfillRequest;
|
|
56
57
|
export declare function reconstructCryptoHftDataOrderBooks(request: MarketDataVendorBackfillRequest, inputRows: readonly CryptoHftDataOrderBookRow[], profile?: CryptoHftDataCapabilityProfile): ReconstructedCryptoHftBook[];
|
|
57
58
|
export declare function decodeCryptoHftParquetZstd(bytes: Uint8Array): Promise<Record<string, unknown>[]>;
|
|
58
59
|
type CryptoHftDataAdapterOptions = {
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
export declare const
|
|
1
|
+
export declare const LEGACY_CAPABILITY_POLICY_ID: "market-data-vendor-backfill-capabilities/v1";
|
|
2
|
+
export declare const CAPABILITY_POLICY_ID: "market-data-vendor-backfill-capabilities/v2";
|
|
2
3
|
export declare const RESOURCE_POLICY_ID: "market-data-vendor-backfill-resources/v1";
|
|
3
4
|
export declare const ADAPTER_POLICY_ID: "cryptohftdata-orderbook-adapter/v1";
|
|
4
5
|
export declare const ACQUISITION_POLICY_ID: "cryptohftdata-hourly-acquisition/v1";
|
|
5
|
-
export declare const
|
|
6
|
+
export declare const LEGACY_CAPABILITY_POLICY: Readonly<{
|
|
6
7
|
policy_sha256: string;
|
|
7
8
|
policy_id: "market-data-vendor-backfill-capabilities/v1";
|
|
8
9
|
provider: "cryptohftdata";
|
|
@@ -28,6 +29,32 @@ export declare const CAPABILITY_POLICY: Readonly<{
|
|
|
28
29
|
readonly max_depth: 400;
|
|
29
30
|
}];
|
|
30
31
|
}>;
|
|
32
|
+
export declare const CAPABILITY_POLICY: Readonly<{
|
|
33
|
+
policy_sha256: string;
|
|
34
|
+
policy_id: "market-data-vendor-backfill-capabilities/v2";
|
|
35
|
+
profiles: {
|
|
36
|
+
source_policies: readonly ["authoritative_window", "fill_gaps"];
|
|
37
|
+
exchange: "okx";
|
|
38
|
+
market_type: "spot";
|
|
39
|
+
feed: "ORDERBOOK";
|
|
40
|
+
canonical_trading_pair: "ARB-USDT";
|
|
41
|
+
provider_exchange_id: "okx_spot";
|
|
42
|
+
resolved_symbol: "ARB-USDT";
|
|
43
|
+
construction_modes: readonly ["sampled_top_n_snapshot"];
|
|
44
|
+
max_depth: 400;
|
|
45
|
+
}[];
|
|
46
|
+
provider: "cryptohftdata";
|
|
47
|
+
adapter_policy: {
|
|
48
|
+
readonly policy_id: "cryptohftdata-orderbook-adapter/v1";
|
|
49
|
+
readonly adapter_version: "cryptohftdata-orderbook/v2";
|
|
50
|
+
};
|
|
51
|
+
acquisition_policy: {
|
|
52
|
+
readonly policy_id: "cryptohftdata-hourly-acquisition/v1";
|
|
53
|
+
readonly object_granularity: "utc_hour";
|
|
54
|
+
readonly authentication: "bearer";
|
|
55
|
+
readonly initialization_lookback_ms: 0;
|
|
56
|
+
};
|
|
57
|
+
}>;
|
|
31
58
|
export declare const RESOURCE_POLICY: Readonly<{
|
|
32
59
|
policy_sha256: string;
|
|
33
60
|
policy_id: "market-data-vendor-backfill-resources/v1";
|
package/dist/helpers/otel.d.ts
CHANGED
|
@@ -37,6 +37,7 @@ declare abstract class BaseOtelSignal<TProvider> {
|
|
|
37
37
|
private readonly signal;
|
|
38
38
|
private provider;
|
|
39
39
|
private isEnabled;
|
|
40
|
+
private closePromise;
|
|
40
41
|
private readonly serviceName;
|
|
41
42
|
protected constructor(config: OtelConfig | undefined, signal: "metrics" | "logs");
|
|
42
43
|
protected abstract createProvider(endpoint: string, serviceName: string, appendSignalPath: boolean): TProvider;
|
package/dist/index.js
CHANGED
|
@@ -289048,16 +289048,20 @@ var tslogLogger = new Logger({
|
|
|
289048
289048
|
minLevel: process.env.LOG_LEVEL === "debug" ? 0 : 3
|
|
289049
289049
|
});
|
|
289050
289050
|
var baseLogger = new LogLayer({
|
|
289051
|
-
transport: [
|
|
289052
|
-
new TsLogTransport({ id: "tslog", logger: tslogLogger }),
|
|
289053
|
-
new OpenTelemetryTransport({
|
|
289054
|
-
id: "otel",
|
|
289055
|
-
enabled: true
|
|
289056
|
-
})
|
|
289057
|
-
],
|
|
289051
|
+
transport: [new TsLogTransport({ id: "tslog", logger: tslogLogger })],
|
|
289058
289052
|
plugins: [openTelemetryPlugin()],
|
|
289059
289053
|
errorSerializer: serializeError
|
|
289060
289054
|
});
|
|
289055
|
+
var OTEL_TRANSPORT_ID = "otel";
|
|
289056
|
+
function attachOtelLogTransport() {
|
|
289057
|
+
baseLogger.addTransport(new OpenTelemetryTransport({
|
|
289058
|
+
id: OTEL_TRANSPORT_ID,
|
|
289059
|
+
enabled: true
|
|
289060
|
+
}));
|
|
289061
|
+
}
|
|
289062
|
+
function detachOtelLogTransport() {
|
|
289063
|
+
baseLogger.removeTransport(OTEL_TRANSPORT_ID);
|
|
289064
|
+
}
|
|
289061
289065
|
if (process.env.LOG_LEVEL !== "debug") {
|
|
289062
289066
|
baseLogger.setLevel("info");
|
|
289063
289067
|
}
|
|
@@ -293484,11 +293488,14 @@ var import_sdk_metrics = __toESM(require_src9(), 1);
|
|
|
293484
293488
|
var DEFAULT_SERVICE = "cex-broker";
|
|
293485
293489
|
var DEFAULT_OTLP_PORT = 4318;
|
|
293486
293490
|
var EXPORT_INTERVAL_MS = 5000;
|
|
293491
|
+
var EXPORT_TIMEOUT_MS = 2000;
|
|
293492
|
+
var SHUTDOWN_TIMEOUT_MS = 3000;
|
|
293487
293493
|
|
|
293488
293494
|
class BaseOtelSignal {
|
|
293489
293495
|
signal;
|
|
293490
293496
|
provider = null;
|
|
293491
293497
|
isEnabled = false;
|
|
293498
|
+
closePromise = null;
|
|
293492
293499
|
serviceName;
|
|
293493
293500
|
constructor(config, signal) {
|
|
293494
293501
|
this.signal = signal;
|
|
@@ -293520,19 +293527,35 @@ class BaseOtelSignal {
|
|
|
293520
293527
|
isOtelEnabled() {
|
|
293521
293528
|
return this.isEnabled && this.provider !== null;
|
|
293522
293529
|
}
|
|
293523
|
-
|
|
293524
|
-
if (
|
|
293525
|
-
return;
|
|
293526
|
-
|
|
293527
|
-
try {
|
|
293528
|
-
await this.shutdownProvider(this.provider);
|
|
293529
|
-
log.info(`OTel ${this.signal} provider shut down`);
|
|
293530
|
-
} catch (error) {
|
|
293531
|
-
log.error(`Error shutting down OTel ${this.signal} provider:`, error);
|
|
293532
|
-
}
|
|
293530
|
+
close() {
|
|
293531
|
+
if (this.closePromise)
|
|
293532
|
+
return this.closePromise;
|
|
293533
|
+
const provider = this.provider;
|
|
293533
293534
|
this.provider = null;
|
|
293534
293535
|
this.isEnabled = false;
|
|
293535
293536
|
this.onProviderClosed();
|
|
293537
|
+
if (!provider) {
|
|
293538
|
+
this.closePromise = Promise.resolve();
|
|
293539
|
+
return this.closePromise;
|
|
293540
|
+
}
|
|
293541
|
+
const shutdown = Promise.resolve().then(() => this.shutdownProvider(provider)).then(() => {
|
|
293542
|
+
log.info(`OTel ${this.signal} provider shut down`);
|
|
293543
|
+
}, (error) => {
|
|
293544
|
+
log.error(`Error shutting down OTel ${this.signal} provider:`, error);
|
|
293545
|
+
});
|
|
293546
|
+
let deadlineTimer;
|
|
293547
|
+
const deadline = new Promise((resolve) => {
|
|
293548
|
+
deadlineTimer = setTimeout(() => {
|
|
293549
|
+
deadlineTimer = undefined;
|
|
293550
|
+
log.warn(`OTel ${this.signal} provider shutdown exceeded ${SHUTDOWN_TIMEOUT_MS}ms; continuing shutdown`);
|
|
293551
|
+
resolve();
|
|
293552
|
+
}, SHUTDOWN_TIMEOUT_MS);
|
|
293553
|
+
});
|
|
293554
|
+
this.closePromise = Promise.race([shutdown, deadline]).finally(() => {
|
|
293555
|
+
if (deadlineTimer !== undefined)
|
|
293556
|
+
clearTimeout(deadlineTimer);
|
|
293557
|
+
});
|
|
293558
|
+
return this.closePromise;
|
|
293536
293559
|
}
|
|
293537
293560
|
}
|
|
293538
293561
|
function toAttributes(labels, service) {
|
|
@@ -293555,11 +293578,13 @@ class OtelMetrics extends BaseOtelSignal {
|
|
|
293555
293578
|
}
|
|
293556
293579
|
createProvider(endpoint, serviceName, appendSignalPath) {
|
|
293557
293580
|
const exporter = new import_exporter_metrics_otlp_http.OTLPMetricExporter({
|
|
293558
|
-
url: appendOtlpPath(endpoint, "metrics", appendSignalPath)
|
|
293581
|
+
url: appendOtlpPath(endpoint, "metrics", appendSignalPath),
|
|
293582
|
+
timeoutMillis: EXPORT_TIMEOUT_MS
|
|
293559
293583
|
});
|
|
293560
293584
|
const reader = new import_sdk_metrics.PeriodicExportingMetricReader({
|
|
293561
293585
|
exporter,
|
|
293562
|
-
exportIntervalMillis: EXPORT_INTERVAL_MS
|
|
293586
|
+
exportIntervalMillis: EXPORT_INTERVAL_MS,
|
|
293587
|
+
exportTimeoutMillis: EXPORT_TIMEOUT_MS
|
|
293563
293588
|
});
|
|
293564
293589
|
const resource = import_resources.resourceFromAttributes({
|
|
293565
293590
|
"service.name": serviceName
|
|
@@ -293680,15 +293705,23 @@ class OtelMetrics extends BaseOtelSignal {
|
|
|
293680
293705
|
}
|
|
293681
293706
|
|
|
293682
293707
|
class OtelLogs extends BaseOtelSignal {
|
|
293683
|
-
logger
|
|
293708
|
+
logger;
|
|
293684
293709
|
constructor(config) {
|
|
293685
293710
|
super(config, "logs");
|
|
293711
|
+
const provider = this.getProvider();
|
|
293712
|
+
this.logger = provider?.getLogger("cex-broker-logs", "1.0.0") ?? null;
|
|
293713
|
+
if (provider) {
|
|
293714
|
+
attachOtelLogTransport();
|
|
293715
|
+
}
|
|
293686
293716
|
}
|
|
293687
293717
|
createProvider(endpoint, serviceName, appendSignalPath) {
|
|
293688
293718
|
const exporter = new import_exporter_logs_otlp_http.OTLPLogExporter({
|
|
293689
|
-
url: appendOtlpPath(endpoint, "logs", appendSignalPath)
|
|
293719
|
+
url: appendOtlpPath(endpoint, "logs", appendSignalPath),
|
|
293720
|
+
timeoutMillis: EXPORT_TIMEOUT_MS
|
|
293721
|
+
});
|
|
293722
|
+
const processor = new import_sdk_logs.BatchLogRecordProcessor(exporter, {
|
|
293723
|
+
exportTimeoutMillis: EXPORT_TIMEOUT_MS
|
|
293690
293724
|
});
|
|
293691
|
-
const processor = new import_sdk_logs.BatchLogRecordProcessor(exporter);
|
|
293692
293725
|
const resource = import_resources.resourceFromAttributes({
|
|
293693
293726
|
"service.name": serviceName
|
|
293694
293727
|
});
|
|
@@ -293699,12 +293732,12 @@ class OtelLogs extends BaseOtelSignal {
|
|
|
293699
293732
|
}
|
|
293700
293733
|
onProviderCreated(provider) {
|
|
293701
293734
|
import_api_logs3.logs.setGlobalLoggerProvider(provider);
|
|
293702
|
-
this.logger = provider.getLogger("cex-broker-logs", "1.0.0");
|
|
293703
293735
|
}
|
|
293704
293736
|
shutdownProvider(provider) {
|
|
293705
|
-
return provider.
|
|
293737
|
+
return provider.shutdown();
|
|
293706
293738
|
}
|
|
293707
293739
|
onProviderClosed() {
|
|
293740
|
+
detachOtelLogTransport();
|
|
293708
293741
|
this.logger = null;
|
|
293709
293742
|
}
|
|
293710
293743
|
emit(record) {
|
|
@@ -313101,12 +313134,7 @@ class CEXBroker {
|
|
|
313101
313134
|
if (this.brokerArchiver) {
|
|
313102
313135
|
await this.brokerArchiver.close();
|
|
313103
313136
|
}
|
|
313104
|
-
|
|
313105
|
-
await this.otelMetrics.close();
|
|
313106
|
-
}
|
|
313107
|
-
if (this.otelLogs) {
|
|
313108
|
-
await this.otelLogs.close();
|
|
313109
|
-
}
|
|
313137
|
+
await Promise.all([this.otelMetrics?.close(), this.otelLogs?.close()]);
|
|
313110
313138
|
}
|
|
313111
313139
|
async run() {
|
|
313112
313140
|
const marketArchiveState = resolveMarketCaptureArchiveState({
|
|
@@ -313224,4 +313252,4 @@ export {
|
|
|
313224
313252
|
CEXBroker as default
|
|
313225
313253
|
};
|
|
313226
313254
|
|
|
313227
|
-
//# debugId=
|
|
313255
|
+
//# debugId=D97F25782E1185C764756E2164756E21
|