@imbingox/acex 0.1.0-beta.0 → 0.1.0-beta.1
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 +12 -54
- package/index.ts +1 -0
- package/package.json +15 -24
- package/src/adapters/binance/adapter.ts +53 -0
- package/src/adapters/binance/book-ticker.ts +123 -0
- package/src/adapters/binance/market-catalog.ts +251 -0
- package/src/adapters/types.ts +43 -0
- package/src/client/context.ts +60 -0
- package/src/client/create-client.ts +6 -0
- package/src/client/runtime.ts +283 -0
- package/src/errors.ts +20 -0
- package/src/index.ts +4 -0
- package/src/internal/async-event-bus.ts +100 -0
- package/src/internal/filters.ts +119 -0
- package/src/internal/managed-websocket.ts +258 -0
- package/src/managers/account-manager.ts +315 -0
- package/src/managers/market-manager.ts +642 -0
- package/src/managers/order-manager.ts +304 -0
- package/src/types/account.ts +160 -0
- package/src/types/client.ts +79 -0
- package/src/types/index.ts +5 -0
- package/src/types/market.ts +136 -0
- package/src/types/order.ts +142 -0
- package/src/types/shared.ts +78 -0
- package/dist/adapters/ccxt/aster-ccxt-adapter.d.ts +0 -157
- package/dist/adapters/ccxt/aster-ccxt-adapter.js +0 -272
- package/dist/adapters/ccxt/binance-usdm-ccxt-adapter.d.ts +0 -179
- package/dist/adapters/ccxt/binance-usdm-ccxt-adapter.js +0 -537
- package/dist/adapters/fake/fake-aster-adapter.d.ts +0 -130
- package/dist/adapters/fake/fake-aster-adapter.js +0 -283
- package/dist/adapters/types.d.ts +0 -210
- package/dist/adapters/types.js +0 -1
- package/dist/core/client.d.ts +0 -37
- package/dist/core/client.js +0 -45
- package/dist/core/recovery.d.ts +0 -22
- package/dist/core/recovery.js +0 -18
- package/dist/core/runtime.d.ts +0 -26
- package/dist/core/runtime.js +0 -150
- package/dist/errors/acex-error.d.ts +0 -25
- package/dist/errors/acex-error.js +0 -54
- package/dist/index.d.ts +0 -5
- package/dist/index.js +0 -3
- package/dist/managers/account-manager.d.ts +0 -41
- package/dist/managers/account-manager.js +0 -80
- package/dist/managers/market-manager.d.ts +0 -16
- package/dist/managers/market-manager.js +0 -28
- package/dist/managers/order-manager.d.ts +0 -87
- package/dist/managers/order-manager.js +0 -122
- package/dist/runtime/async-queue.d.ts +0 -8
- package/dist/runtime/async-queue.js +0 -88
- package/dist/runtime/request-id.d.ts +0 -1
- package/dist/runtime/request-id.js +0 -5
- package/dist/store/account-store.d.ts +0 -52
- package/dist/store/account-store.js +0 -18
- package/dist/store/health-store.d.ts +0 -16
- package/dist/store/health-store.js +0 -29
- package/dist/store/market-store.d.ts +0 -42
- package/dist/store/market-store.js +0 -51
- package/dist/store/order-store.d.ts +0 -38
- package/dist/store/order-store.js +0 -49
- package/dist/testing/create-fake-runtime.d.ts +0 -5
- package/dist/testing/create-fake-runtime.js +0 -7
- package/dist/types/public.d.ts +0 -11
- package/dist/types/public.js +0 -1
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { createAcexError } from "../errors/acex-error.js";
|
|
2
|
-
export function createAsyncQueue(input) {
|
|
3
|
-
const buffer = [];
|
|
4
|
-
const pendingNext = [];
|
|
5
|
-
let isClosed = false;
|
|
6
|
-
let overflowError;
|
|
7
|
-
const drainPending = () => {
|
|
8
|
-
while (pendingNext.length > 0) {
|
|
9
|
-
const next = pendingNext.shift();
|
|
10
|
-
if (next === undefined) {
|
|
11
|
-
return;
|
|
12
|
-
}
|
|
13
|
-
if (overflowError !== undefined) {
|
|
14
|
-
next.reject(overflowError);
|
|
15
|
-
continue;
|
|
16
|
-
}
|
|
17
|
-
if (buffer.length > 0) {
|
|
18
|
-
const slot = buffer.shift();
|
|
19
|
-
if (slot === undefined) {
|
|
20
|
-
next.resolve({ done: true, value: undefined });
|
|
21
|
-
continue;
|
|
22
|
-
}
|
|
23
|
-
next.resolve({ done: false, value: slot.value });
|
|
24
|
-
continue;
|
|
25
|
-
}
|
|
26
|
-
if (isClosed) {
|
|
27
|
-
next.resolve({ done: true, value: undefined });
|
|
28
|
-
continue;
|
|
29
|
-
}
|
|
30
|
-
pendingNext.unshift(next);
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
const next = () => {
|
|
35
|
-
if (overflowError !== undefined) {
|
|
36
|
-
return Promise.reject(overflowError);
|
|
37
|
-
}
|
|
38
|
-
if (buffer.length > 0) {
|
|
39
|
-
const slot = buffer.shift();
|
|
40
|
-
if (slot !== undefined) {
|
|
41
|
-
return Promise.resolve({ done: false, value: slot.value });
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
if (isClosed) {
|
|
45
|
-
return Promise.resolve({ done: true, value: undefined });
|
|
46
|
-
}
|
|
47
|
-
return new Promise((resolve, reject) => {
|
|
48
|
-
pendingNext.push({ resolve, reject });
|
|
49
|
-
});
|
|
50
|
-
};
|
|
51
|
-
const queue = {
|
|
52
|
-
push(value) {
|
|
53
|
-
if (isClosed || overflowError !== undefined) {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
if (pendingNext.length > 0) {
|
|
57
|
-
const waiter = pendingNext.shift();
|
|
58
|
-
if (waiter !== undefined) {
|
|
59
|
-
waiter.resolve({ done: false, value });
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
if (buffer.length >= input.maxBufferSize) {
|
|
64
|
-
overflowError = createAcexError({
|
|
65
|
-
code: "EVENT_CONSUMER_OVERFLOW",
|
|
66
|
-
message: "EVENT_CONSUMER_OVERFLOW",
|
|
67
|
-
retryable: false,
|
|
68
|
-
});
|
|
69
|
-
drainPending();
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
buffer.push({ value });
|
|
73
|
-
},
|
|
74
|
-
close() {
|
|
75
|
-
if (isClosed) {
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
isClosed = true;
|
|
79
|
-
drainPending();
|
|
80
|
-
},
|
|
81
|
-
[Symbol.asyncIterator]() {
|
|
82
|
-
return {
|
|
83
|
-
next,
|
|
84
|
-
};
|
|
85
|
-
},
|
|
86
|
-
};
|
|
87
|
-
return queue;
|
|
88
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function nextRequestId(): string;
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
export interface AccountBalanceSnapshot {
|
|
2
|
-
accountId: string;
|
|
3
|
-
exchange: string;
|
|
4
|
-
asset: string;
|
|
5
|
-
free: string;
|
|
6
|
-
used: string;
|
|
7
|
-
total: string;
|
|
8
|
-
seq: number;
|
|
9
|
-
receivedAt: number;
|
|
10
|
-
updatedAt: number;
|
|
11
|
-
}
|
|
12
|
-
export interface AccountRiskSnapshot {
|
|
13
|
-
accountId: string;
|
|
14
|
-
exchange: string;
|
|
15
|
-
seq: number;
|
|
16
|
-
receivedAt: number;
|
|
17
|
-
updatedAt: number;
|
|
18
|
-
equity: string;
|
|
19
|
-
}
|
|
20
|
-
export interface AccountPositionSnapshot {
|
|
21
|
-
accountId: string;
|
|
22
|
-
exchange: string;
|
|
23
|
-
symbol: string;
|
|
24
|
-
side: string;
|
|
25
|
-
size: string;
|
|
26
|
-
seq: number;
|
|
27
|
-
receivedAt: number;
|
|
28
|
-
updatedAt: number;
|
|
29
|
-
}
|
|
30
|
-
export interface AccountSnapshot {
|
|
31
|
-
accountId: string;
|
|
32
|
-
exchange: string;
|
|
33
|
-
balances: Record<string, AccountBalanceSnapshot>;
|
|
34
|
-
positions: AccountPositionSnapshot[];
|
|
35
|
-
risk?: AccountRiskSnapshot;
|
|
36
|
-
receivedAt: number;
|
|
37
|
-
updatedAt: number;
|
|
38
|
-
}
|
|
39
|
-
export interface AccountStatus {
|
|
40
|
-
accountId: string;
|
|
41
|
-
exchange: string;
|
|
42
|
-
status: "healthy" | "degraded" | "reconciling";
|
|
43
|
-
bootstrapCompleted: boolean;
|
|
44
|
-
unresolvedOrdersCount?: number;
|
|
45
|
-
}
|
|
46
|
-
export interface AccountStore {
|
|
47
|
-
replaceSnapshot(snapshot: AccountSnapshot): void;
|
|
48
|
-
getSnapshot(accountId: string): AccountSnapshot | undefined;
|
|
49
|
-
setStatus(status: AccountStatus): void;
|
|
50
|
-
getStatus(accountId: string): AccountStatus | undefined;
|
|
51
|
-
}
|
|
52
|
-
export declare function createAccountStore(): AccountStore;
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export function createAccountStore() {
|
|
2
|
-
const snapshots = new Map();
|
|
3
|
-
const statuses = new Map();
|
|
4
|
-
return {
|
|
5
|
-
replaceSnapshot(snapshot) {
|
|
6
|
-
snapshots.set(snapshot.accountId, snapshot);
|
|
7
|
-
},
|
|
8
|
-
getSnapshot(accountId) {
|
|
9
|
-
return snapshots.get(accountId);
|
|
10
|
-
},
|
|
11
|
-
setStatus(status) {
|
|
12
|
-
statuses.set(status.accountId, status);
|
|
13
|
-
},
|
|
14
|
-
getStatus(accountId) {
|
|
15
|
-
return statuses.get(accountId);
|
|
16
|
-
},
|
|
17
|
-
};
|
|
18
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { ClientStatus } from "../types/public.js";
|
|
2
|
-
export interface HealthSnapshot {
|
|
3
|
-
clientStatus: ClientStatus;
|
|
4
|
-
exchanges: Record<string, unknown>;
|
|
5
|
-
accounts: Record<string, unknown>;
|
|
6
|
-
orders: Record<string, unknown>;
|
|
7
|
-
updatedAt: number;
|
|
8
|
-
}
|
|
9
|
-
export interface HealthStore {
|
|
10
|
-
setClientStatus(status: ClientStatus): void;
|
|
11
|
-
setExchangeHealth(exchange: string, health: unknown): void;
|
|
12
|
-
setAccountStatus(accountId: string, status: unknown): void;
|
|
13
|
-
setOrderStatus(accountId: string, status: unknown): void;
|
|
14
|
-
snapshot(): HealthSnapshot;
|
|
15
|
-
}
|
|
16
|
-
export declare function createHealthStore(): HealthStore;
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
export function createHealthStore() {
|
|
2
|
-
let clientStatus = "idle";
|
|
3
|
-
const exchanges = new Map();
|
|
4
|
-
const accounts = new Map();
|
|
5
|
-
const orders = new Map();
|
|
6
|
-
return {
|
|
7
|
-
setClientStatus(status) {
|
|
8
|
-
clientStatus = status;
|
|
9
|
-
},
|
|
10
|
-
setExchangeHealth(exchange, health) {
|
|
11
|
-
exchanges.set(exchange, health);
|
|
12
|
-
},
|
|
13
|
-
setAccountStatus(accountId, status) {
|
|
14
|
-
accounts.set(accountId, status);
|
|
15
|
-
},
|
|
16
|
-
setOrderStatus(accountId, status) {
|
|
17
|
-
orders.set(accountId, status);
|
|
18
|
-
},
|
|
19
|
-
snapshot() {
|
|
20
|
-
return {
|
|
21
|
-
clientStatus,
|
|
22
|
-
exchanges: Object.fromEntries(exchanges),
|
|
23
|
-
accounts: Object.fromEntries(accounts),
|
|
24
|
-
orders: Object.fromEntries(orders),
|
|
25
|
-
updatedAt: Date.now(),
|
|
26
|
-
};
|
|
27
|
-
},
|
|
28
|
-
};
|
|
29
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
export interface MarketStoreKey {
|
|
2
|
-
exchange: string;
|
|
3
|
-
symbol: string;
|
|
4
|
-
}
|
|
5
|
-
export interface MarketDataStatus extends MarketStoreKey {
|
|
6
|
-
freshness: "fresh" | "stale" | "reconciling";
|
|
7
|
-
lastStreamReceivedAt?: number;
|
|
8
|
-
lastBaselineSyncAt?: number;
|
|
9
|
-
staleSince?: number;
|
|
10
|
-
reason?: "bootstrap_pending" | "ws_disconnected" | "heartbeat_timeout" | "sequence_gap" | "reconciling";
|
|
11
|
-
}
|
|
12
|
-
export interface L1BookSnapshot extends MarketStoreKey {
|
|
13
|
-
bidPrice: string;
|
|
14
|
-
bidSize: string;
|
|
15
|
-
askPrice: string;
|
|
16
|
-
askSize: string;
|
|
17
|
-
exchangeTs?: number;
|
|
18
|
-
receivedAt: number;
|
|
19
|
-
updatedAt: number;
|
|
20
|
-
version: number;
|
|
21
|
-
}
|
|
22
|
-
export interface FundingRateSnapshot extends MarketStoreKey {
|
|
23
|
-
fundingRate: string;
|
|
24
|
-
exchangeTs?: number;
|
|
25
|
-
receivedAt: number;
|
|
26
|
-
updatedAt: number;
|
|
27
|
-
version: number;
|
|
28
|
-
}
|
|
29
|
-
export interface MarketSnapshot {
|
|
30
|
-
l1Book?: L1BookSnapshot;
|
|
31
|
-
fundingRate?: FundingRateSnapshot;
|
|
32
|
-
}
|
|
33
|
-
export interface MarketStore {
|
|
34
|
-
upsertL1Book(input: Omit<L1BookSnapshot, "updatedAt" | "version">): L1BookSnapshot;
|
|
35
|
-
getL1Book(key: MarketStoreKey): L1BookSnapshot | undefined;
|
|
36
|
-
upsertFundingRate(input: Omit<FundingRateSnapshot, "updatedAt" | "version">): FundingRateSnapshot;
|
|
37
|
-
getFundingRate(key: MarketStoreKey): FundingRateSnapshot | undefined;
|
|
38
|
-
getSnapshot(key: MarketStoreKey): MarketSnapshot;
|
|
39
|
-
setStatus(status: MarketDataStatus): void;
|
|
40
|
-
getStatus(key: MarketStoreKey): MarketDataStatus | undefined;
|
|
41
|
-
}
|
|
42
|
-
export declare function createMarketStore(): MarketStore;
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
export function createMarketStore() {
|
|
2
|
-
const books = new Map();
|
|
3
|
-
const fundingRates = new Map();
|
|
4
|
-
const statuses = new Map();
|
|
5
|
-
const keyFor = ({ exchange, symbol }) => `${exchange}:${symbol}`;
|
|
6
|
-
return {
|
|
7
|
-
upsertL1Book(input) {
|
|
8
|
-
const key = keyFor(input);
|
|
9
|
-
const previous = books.get(key);
|
|
10
|
-
const next = {
|
|
11
|
-
...input,
|
|
12
|
-
updatedAt: input.receivedAt,
|
|
13
|
-
version: (previous?.version ?? 0) + 1,
|
|
14
|
-
};
|
|
15
|
-
books.set(key, next);
|
|
16
|
-
return next;
|
|
17
|
-
},
|
|
18
|
-
getL1Book(key) {
|
|
19
|
-
return books.get(keyFor(key));
|
|
20
|
-
},
|
|
21
|
-
upsertFundingRate(input) {
|
|
22
|
-
const key = keyFor(input);
|
|
23
|
-
const previous = fundingRates.get(key);
|
|
24
|
-
const next = {
|
|
25
|
-
...input,
|
|
26
|
-
updatedAt: input.receivedAt,
|
|
27
|
-
version: (previous?.version ?? 0) + 1,
|
|
28
|
-
};
|
|
29
|
-
fundingRates.set(key, next);
|
|
30
|
-
return next;
|
|
31
|
-
},
|
|
32
|
-
getFundingRate(key) {
|
|
33
|
-
return fundingRates.get(keyFor(key));
|
|
34
|
-
},
|
|
35
|
-
getSnapshot(key) {
|
|
36
|
-
const marketKey = keyFor(key);
|
|
37
|
-
const l1Book = books.get(marketKey);
|
|
38
|
-
const fundingRate = fundingRates.get(marketKey);
|
|
39
|
-
return {
|
|
40
|
-
...(l1Book === undefined ? {} : { l1Book }),
|
|
41
|
-
...(fundingRate === undefined ? {} : { fundingRate }),
|
|
42
|
-
};
|
|
43
|
-
},
|
|
44
|
-
setStatus(status) {
|
|
45
|
-
statuses.set(keyFor(status), status);
|
|
46
|
-
},
|
|
47
|
-
getStatus(key) {
|
|
48
|
-
return statuses.get(keyFor(key));
|
|
49
|
-
},
|
|
50
|
-
};
|
|
51
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
export interface OrderSnapshot {
|
|
2
|
-
accountId: string;
|
|
3
|
-
exchange: string;
|
|
4
|
-
symbol: string;
|
|
5
|
-
side: "buy" | "sell";
|
|
6
|
-
type: string;
|
|
7
|
-
status: string;
|
|
8
|
-
amount: string;
|
|
9
|
-
filled: string;
|
|
10
|
-
price?: string;
|
|
11
|
-
seq: number;
|
|
12
|
-
receivedAt: number;
|
|
13
|
-
updatedAt: number;
|
|
14
|
-
orderId?: string;
|
|
15
|
-
clientOrderId?: string;
|
|
16
|
-
}
|
|
17
|
-
export interface OrderStatus {
|
|
18
|
-
accountId: string;
|
|
19
|
-
exchange?: string;
|
|
20
|
-
status: "healthy" | "degraded" | "reconciling";
|
|
21
|
-
bootstrapCompleted: boolean;
|
|
22
|
-
unresolvedOrdersCount?: number;
|
|
23
|
-
}
|
|
24
|
-
export interface OrderLocator {
|
|
25
|
-
orderId?: string;
|
|
26
|
-
clientOrderId?: string;
|
|
27
|
-
}
|
|
28
|
-
export interface OrderStore {
|
|
29
|
-
upsertOrder(snapshot: OrderSnapshot): void;
|
|
30
|
-
getOrder(accountId: string, locator: OrderLocator): OrderSnapshot | undefined;
|
|
31
|
-
getOpenOrders(accountId: string): OrderSnapshot[];
|
|
32
|
-
recordFill(fillId: string): void;
|
|
33
|
-
hasSeenFill(fillId: string): boolean;
|
|
34
|
-
setUnresolvedCount(accountId: string, unresolvedOrdersCount: number): void;
|
|
35
|
-
setStatus(status: OrderStatus): void;
|
|
36
|
-
getStatus(accountId: string): OrderStatus | undefined;
|
|
37
|
-
}
|
|
38
|
-
export declare function createOrderStore(): OrderStore;
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
export function createOrderStore() {
|
|
2
|
-
const orders = new Map();
|
|
3
|
-
const seenFills = new Set();
|
|
4
|
-
const statuses = new Map();
|
|
5
|
-
return {
|
|
6
|
-
upsertOrder(snapshot) {
|
|
7
|
-
const key = snapshot.orderId ?? snapshot.clientOrderId;
|
|
8
|
-
if (key === undefined) {
|
|
9
|
-
return;
|
|
10
|
-
}
|
|
11
|
-
orders.set(`${snapshot.accountId}:${key}`, snapshot);
|
|
12
|
-
},
|
|
13
|
-
getOrder(accountId, locator) {
|
|
14
|
-
const key = locator.orderId ?? locator.clientOrderId;
|
|
15
|
-
if (key === undefined) {
|
|
16
|
-
return undefined;
|
|
17
|
-
}
|
|
18
|
-
return orders.get(`${accountId}:${key}`);
|
|
19
|
-
},
|
|
20
|
-
getOpenOrders(accountId) {
|
|
21
|
-
return [...orders.values()].filter((order) => {
|
|
22
|
-
return order.accountId === accountId && order.status === "open";
|
|
23
|
-
});
|
|
24
|
-
},
|
|
25
|
-
recordFill(fillId) {
|
|
26
|
-
seenFills.add(fillId);
|
|
27
|
-
},
|
|
28
|
-
hasSeenFill(fillId) {
|
|
29
|
-
return seenFills.has(fillId);
|
|
30
|
-
},
|
|
31
|
-
setUnresolvedCount(accountId, unresolvedOrdersCount) {
|
|
32
|
-
const current = statuses.get(accountId) ?? {
|
|
33
|
-
accountId,
|
|
34
|
-
status: "healthy",
|
|
35
|
-
bootstrapCompleted: true,
|
|
36
|
-
};
|
|
37
|
-
statuses.set(accountId, {
|
|
38
|
-
...current,
|
|
39
|
-
unresolvedOrdersCount,
|
|
40
|
-
});
|
|
41
|
-
},
|
|
42
|
-
setStatus(status) {
|
|
43
|
-
statuses.set(status.accountId, status);
|
|
44
|
-
},
|
|
45
|
-
getStatus(accountId) {
|
|
46
|
-
return statuses.get(accountId);
|
|
47
|
-
},
|
|
48
|
-
};
|
|
49
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { FakeAsterAdapter } from "../adapters/fake/fake-aster-adapter.js";
|
|
2
|
-
import { createInternalClient } from "../core/client.js";
|
|
3
|
-
export function createFakeRuntime() {
|
|
4
|
-
const adapter = new FakeAsterAdapter();
|
|
5
|
-
const client = createInternalClient({ adapter });
|
|
6
|
-
return { adapter, client };
|
|
7
|
-
}
|
package/dist/types/public.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export declare const IMPLEMENTED_EXCHANGES: readonly ["binance"];
|
|
2
|
-
export type ImplementedExchange = (typeof IMPLEMENTED_EXCHANGES)[number];
|
|
3
|
-
export type Exchange = string;
|
|
4
|
-
export type ClientStatus = "idle" | "starting" | "running" | "stopping" | "stopped";
|
|
5
|
-
export interface Logger {
|
|
6
|
-
debug(message: string, context?: Record<string, unknown>): void;
|
|
7
|
-
info(message: string, context?: Record<string, unknown>): void;
|
|
8
|
-
warn(message: string, context?: Record<string, unknown>): void;
|
|
9
|
-
error(message: string, context?: Record<string, unknown>): void;
|
|
10
|
-
}
|
|
11
|
-
export type AcexErrorCode = "VALIDATION_ERROR" | "EXCHANGE_NOT_SUPPORTED" | "ACCOUNT_NOT_FOUND" | "AUTH_FAILED" | "RATE_LIMITED" | "TRANSPORT_UNAVAILABLE" | "ORDER_REJECTED" | "INSUFFICIENT_BALANCE" | "REQUEST_OUTCOME_UNKNOWN" | "ORDER_STATE_UNKNOWN" | "EVENT_CONSUMER_OVERFLOW" | "CAPABILITY_NOT_SUPPORTED" | "INTERNAL_ERROR";
|
package/dist/types/public.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export const IMPLEMENTED_EXCHANGES = ["binance"];
|