@imbingox/acex 0.1.0 → 0.2.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.
Files changed (85) hide show
  1. package/README.md +92 -285
  2. package/index.ts +1 -0
  3. package/package.json +40 -23
  4. package/src/adapters/binance/adapter.ts +80 -0
  5. package/src/adapters/binance/book-ticker.ts +123 -0
  6. package/src/adapters/binance/mark-price.ts +126 -0
  7. package/src/adapters/binance/market-catalog.ts +258 -0
  8. package/src/adapters/binance/private-adapter.ts +833 -0
  9. package/src/adapters/types.ts +219 -0
  10. package/src/client/context.ts +123 -0
  11. package/src/client/create-client.ts +6 -0
  12. package/src/client/private-subscription-coordinator.ts +512 -0
  13. package/src/client/runtime.ts +410 -0
  14. package/src/errors.ts +27 -0
  15. package/src/index.ts +5 -0
  16. package/src/internal/async-event-bus.ts +100 -0
  17. package/src/internal/filters.ts +117 -0
  18. package/src/internal/managed-websocket.ts +280 -0
  19. package/src/managers/account-manager.ts +609 -0
  20. package/src/managers/market-manager.ts +889 -0
  21. package/src/managers/order-manager.ts +685 -0
  22. package/src/types/account.ts +157 -0
  23. package/src/types/client.ts +79 -0
  24. package/src/types/index.ts +5 -0
  25. package/src/types/market.ts +150 -0
  26. package/src/types/order.ts +177 -0
  27. package/src/types/shared.ts +93 -0
  28. package/dist/adapters/binance/composite-adapter.d.ts +0 -116
  29. package/dist/adapters/binance/composite-adapter.js +0 -121
  30. package/dist/adapters/binance/market-types.d.ts +0 -63
  31. package/dist/adapters/binance/market-types.js +0 -1
  32. package/dist/adapters/binance/native-market-adapter.d.ts +0 -102
  33. package/dist/adapters/binance/native-market-adapter.js +0 -455
  34. package/dist/adapters/binance/normalizers.d.ts +0 -8
  35. package/dist/adapters/binance/normalizers.js +0 -123
  36. package/dist/adapters/binance/rest-client.d.ts +0 -17
  37. package/dist/adapters/binance/rest-client.js +0 -66
  38. package/dist/adapters/binance/symbol-router.d.ts +0 -9
  39. package/dist/adapters/binance/symbol-router.js +0 -174
  40. package/dist/adapters/binance/ws-client.d.ts +0 -24
  41. package/dist/adapters/binance/ws-client.js +0 -261
  42. package/dist/adapters/ccxt/aster-ccxt-adapter.d.ts +0 -157
  43. package/dist/adapters/ccxt/aster-ccxt-adapter.js +0 -272
  44. package/dist/adapters/ccxt/binance-usdm-ccxt-adapter.d.ts +0 -180
  45. package/dist/adapters/ccxt/binance-usdm-ccxt-adapter.js +0 -539
  46. package/dist/adapters/ccxt/binance-usdm-exchange.d.ts +0 -22
  47. package/dist/adapters/ccxt/binance-usdm-exchange.js +0 -23
  48. package/dist/adapters/fake/fake-aster-adapter.d.ts +0 -130
  49. package/dist/adapters/fake/fake-aster-adapter.js +0 -283
  50. package/dist/adapters/types.d.ts +0 -210
  51. package/dist/adapters/types.js +0 -1
  52. package/dist/core/client.d.ts +0 -50
  53. package/dist/core/client.js +0 -403
  54. package/dist/core/recovery.d.ts +0 -22
  55. package/dist/core/recovery.js +0 -18
  56. package/dist/core/runtime.d.ts +0 -26
  57. package/dist/core/runtime.js +0 -150
  58. package/dist/errors/acex-error.d.ts +0 -25
  59. package/dist/errors/acex-error.js +0 -54
  60. package/dist/index.d.ts +0 -6
  61. package/dist/index.js +0 -3
  62. package/dist/managers/account-manager.d.ts +0 -41
  63. package/dist/managers/account-manager.js +0 -80
  64. package/dist/managers/market-manager.d.ts +0 -16
  65. package/dist/managers/market-manager.js +0 -28
  66. package/dist/managers/order-manager.d.ts +0 -87
  67. package/dist/managers/order-manager.js +0 -122
  68. package/dist/runtime/async-queue.d.ts +0 -8
  69. package/dist/runtime/async-queue.js +0 -88
  70. package/dist/runtime/request-id.d.ts +0 -1
  71. package/dist/runtime/request-id.js +0 -5
  72. package/dist/runtime/ws-connection-supervisor.d.ts +0 -76
  73. package/dist/runtime/ws-connection-supervisor.js +0 -522
  74. package/dist/store/account-store.d.ts +0 -52
  75. package/dist/store/account-store.js +0 -18
  76. package/dist/store/health-store.d.ts +0 -16
  77. package/dist/store/health-store.js +0 -29
  78. package/dist/store/market-store.d.ts +0 -42
  79. package/dist/store/market-store.js +0 -51
  80. package/dist/store/order-store.d.ts +0 -38
  81. package/dist/store/order-store.js +0 -49
  82. package/dist/testing/create-fake-runtime.d.ts +0 -5
  83. package/dist/testing/create-fake-runtime.js +0 -7
  84. package/dist/types/public.d.ts +0 -5
  85. package/dist/types/public.js +0 -1
@@ -1,116 +0,0 @@
1
- import type { ExchangeAdapter, NormalizedAccountEvent, NormalizedMarketEvent, NormalizedOrderEvent } from "../types.js";
2
- interface BinanceMarketInfoRecord {
3
- exchange: string;
4
- symbol: string;
5
- baseAsset: string;
6
- quoteAsset: string;
7
- marketType: string;
8
- pricePrecision: number;
9
- amountPrecision: number;
10
- active: boolean;
11
- }
12
- interface BinanceCompositeMarketAdapter extends ExchangeAdapter {
13
- fetchMarketInfo(): Promise<BinanceMarketInfoRecord[]>;
14
- }
15
- export declare class BinanceCompositeAdapter implements ExchangeAdapter {
16
- private readonly input;
17
- readonly exchange = "binance";
18
- constructor(input: {
19
- marketAdapter: BinanceCompositeMarketAdapter;
20
- privateAdapter: ExchangeAdapter;
21
- });
22
- get capabilities(): {
23
- publicWs: boolean;
24
- l1BookStream: boolean;
25
- fundingRateStream: boolean;
26
- fetchMarketInfo: boolean;
27
- privateWs: boolean;
28
- accountStream: boolean;
29
- orderStream: boolean;
30
- fetchBalances: boolean;
31
- fetchPositions: boolean;
32
- fetchRisk: boolean;
33
- fetchOpenOrders: boolean;
34
- fetchMyTrades: boolean;
35
- fetchOrderById: boolean;
36
- };
37
- start(): Promise<void>;
38
- stop(): Promise<void>;
39
- subscribeL1Book(input: {
40
- exchange: string;
41
- symbol: string;
42
- }): Promise<void>;
43
- subscribeFundingRate(input: {
44
- exchange: string;
45
- symbol: string;
46
- }): Promise<void>;
47
- fetchMarketInfo(): Promise<BinanceMarketInfoRecord[]>;
48
- watchMarketEvents(): AsyncIterable<NormalizedMarketEvent>;
49
- setMarketEventSink(sink: ((event: NormalizedMarketEvent) => void) | undefined): void;
50
- watchInternalErrors(): AsyncGenerator<Error, void, any>;
51
- subscribeOrders(input: {
52
- accountId: string;
53
- }): Promise<void>;
54
- fetchOpenOrdersBaseline(accountId: string): Promise<({
55
- accountId: string;
56
- exchange: string;
57
- symbol: string;
58
- side: "buy" | "sell";
59
- type: string;
60
- status: string;
61
- amount: string;
62
- filled: string;
63
- price?: string;
64
- seq: number;
65
- receivedAt: number;
66
- updatedAt: number;
67
- orderId?: string;
68
- clientOrderId?: string;
69
- } | {
70
- accountId: string;
71
- exchange: string;
72
- symbol: string;
73
- side: "buy" | "sell";
74
- type: string;
75
- status: string;
76
- amount: string;
77
- filled: string;
78
- price?: string;
79
- seq: number;
80
- receivedAt: number;
81
- updatedAt: number;
82
- orderId?: string;
83
- clientOrderId?: string;
84
- })[]>;
85
- watchOrderEvents(): AsyncIterable<NormalizedOrderEvent>;
86
- setOrderEventSink(sink: ((event: NormalizedOrderEvent) => void) | undefined): void;
87
- fetchAccountBaseline(accountId: string): Promise<import("../types.js").AdapterAccountBaseline>;
88
- watchAccountEvents(): AsyncIterable<NormalizedAccountEvent>;
89
- setAccountEventSink(sink: ((event: NormalizedAccountEvent) => void) | undefined): void;
90
- placeOrder(input: Parameters<ExchangeAdapter["placeOrder"]>[0]): Promise<{
91
- clientOrderId?: string;
92
- orderId?: string;
93
- receivedAt: number;
94
- }>;
95
- amendOrder(input: Parameters<ExchangeAdapter["amendOrder"]>[0]): Promise<{
96
- clientOrderId?: string;
97
- orderId?: string;
98
- receivedAt: number;
99
- }>;
100
- cancelOrder(input: Parameters<ExchangeAdapter["cancelOrder"]>[0]): Promise<{
101
- clientOrderId?: string;
102
- orderId?: string;
103
- receivedAt: number;
104
- }>;
105
- cancelAllOrders(input: Parameters<ExchangeAdapter["cancelAllOrders"]>[0]): Promise<{
106
- accountId: string;
107
- exchange: string;
108
- canceledCount: number;
109
- }>;
110
- getHealth(): {
111
- exchange: string;
112
- status: string;
113
- wsConnected: boolean;
114
- };
115
- }
116
- export {};
@@ -1,121 +0,0 @@
1
- import { createAsyncQueue } from "../../runtime/async-queue.js";
2
- function toError(error) {
3
- return error instanceof Error ? error : new Error(String(error));
4
- }
5
- async function* mergeErrors(left, right) {
6
- const queue = createAsyncQueue({ maxBufferSize: 20 });
7
- let completedStreams = 0;
8
- const forward = async (source) => {
9
- try {
10
- for await (const error of source) {
11
- queue.push(error);
12
- }
13
- }
14
- catch (error) {
15
- queue.push(toError(error));
16
- }
17
- finally {
18
- completedStreams += 1;
19
- if (completedStreams === 2) {
20
- queue.close();
21
- }
22
- }
23
- };
24
- void forward(left);
25
- void forward(right);
26
- yield* queue;
27
- }
28
- export class BinanceCompositeAdapter {
29
- input;
30
- exchange = "binance";
31
- constructor(input) {
32
- this.input = input;
33
- }
34
- get capabilities() {
35
- return {
36
- ...this.input.privateAdapter.capabilities,
37
- publicWs: this.input.marketAdapter.capabilities.publicWs,
38
- l1BookStream: this.input.marketAdapter.capabilities.l1BookStream,
39
- fundingRateStream: this.input.marketAdapter.capabilities.fundingRateStream,
40
- fetchMarketInfo: this.input.marketAdapter.capabilities.fetchMarketInfo,
41
- };
42
- }
43
- async start() {
44
- await this.input.marketAdapter.start();
45
- try {
46
- await this.input.privateAdapter.start();
47
- }
48
- catch (error) {
49
- await this.input.marketAdapter.stop();
50
- throw error;
51
- }
52
- }
53
- async stop() {
54
- await Promise.allSettled([this.input.marketAdapter.stop(), this.input.privateAdapter.stop()]);
55
- }
56
- async subscribeL1Book(input) {
57
- return this.input.marketAdapter.subscribeL1Book(input);
58
- }
59
- async subscribeFundingRate(input) {
60
- return this.input.marketAdapter.subscribeFundingRate(input);
61
- }
62
- async fetchMarketInfo() {
63
- return this.input.marketAdapter.fetchMarketInfo();
64
- }
65
- watchMarketEvents() {
66
- return this.input.marketAdapter.watchMarketEvents();
67
- }
68
- setMarketEventSink(sink) {
69
- this.input.marketAdapter.setMarketEventSink?.(sink);
70
- }
71
- watchInternalErrors() {
72
- return mergeErrors(this.input.marketAdapter.watchInternalErrors(), this.input.privateAdapter.watchInternalErrors());
73
- }
74
- async subscribeOrders(input) {
75
- return this.input.privateAdapter.subscribeOrders(input);
76
- }
77
- async fetchOpenOrdersBaseline(accountId) {
78
- return this.input.privateAdapter.fetchOpenOrdersBaseline(accountId);
79
- }
80
- watchOrderEvents() {
81
- return this.input.privateAdapter.watchOrderEvents();
82
- }
83
- setOrderEventSink(sink) {
84
- this.input.privateAdapter.setOrderEventSink?.(sink);
85
- }
86
- async fetchAccountBaseline(accountId) {
87
- return this.input.privateAdapter.fetchAccountBaseline(accountId);
88
- }
89
- watchAccountEvents() {
90
- return this.input.privateAdapter.watchAccountEvents();
91
- }
92
- setAccountEventSink(sink) {
93
- this.input.privateAdapter.setAccountEventSink?.(sink);
94
- }
95
- async placeOrder(input) {
96
- return this.input.privateAdapter.placeOrder(input);
97
- }
98
- async amendOrder(input) {
99
- return this.input.privateAdapter.amendOrder(input);
100
- }
101
- async cancelOrder(input) {
102
- return this.input.privateAdapter.cancelOrder(input);
103
- }
104
- async cancelAllOrders(input) {
105
- return this.input.privateAdapter.cancelAllOrders(input);
106
- }
107
- getHealth() {
108
- const market = this.input.marketAdapter.getHealth();
109
- const privateHealth = this.input.privateAdapter.getHealth();
110
- const status = market.status === "healthy" && privateHealth.status === "healthy"
111
- ? "healthy"
112
- : market.status === "idle" && privateHealth.status === "idle"
113
- ? "idle"
114
- : "degraded";
115
- return {
116
- exchange: this.exchange,
117
- status,
118
- wsConnected: market.wsConnected && privateHealth.wsConnected,
119
- };
120
- }
121
- }
@@ -1,63 +0,0 @@
1
- export type BinanceMarketFamily = "spot" | "usdm" | "coinm";
2
- export interface BinanceSymbolFilter {
3
- filterType: string;
4
- tickSize?: string;
5
- stepSize?: string;
6
- }
7
- export interface BinanceSpotExchangeInfo {
8
- symbols: Array<{
9
- symbol: string;
10
- status: string;
11
- baseAsset: string;
12
- quoteAsset: string;
13
- filters: BinanceSymbolFilter[];
14
- }>;
15
- }
16
- export interface BinanceUsdmExchangeInfo {
17
- symbols: Array<{
18
- symbol: string;
19
- pair: string;
20
- status: string;
21
- contractType: string;
22
- baseAsset: string;
23
- quoteAsset: string;
24
- marginAsset: string;
25
- pricePrecision: number;
26
- quantityPrecision: number;
27
- filters: BinanceSymbolFilter[];
28
- }>;
29
- }
30
- export interface BinanceCoinmExchangeInfo {
31
- symbols: Array<{
32
- symbol: string;
33
- pair: string;
34
- contractType: string;
35
- contractStatus: string;
36
- baseAsset: string;
37
- quoteAsset: string;
38
- marginAsset: string;
39
- deliveryDate?: number;
40
- pricePrecision: number;
41
- quantityPrecision: number;
42
- filters: BinanceSymbolFilter[];
43
- }>;
44
- }
45
- export interface BinanceMarketRecord {
46
- exchange: "binance";
47
- family: BinanceMarketFamily;
48
- nativeSymbol: string;
49
- unifiedSymbol: string;
50
- baseAsset: string;
51
- quoteAsset: string;
52
- settleAsset?: string;
53
- contractType?: string;
54
- fundingEligible: boolean;
55
- active: boolean;
56
- pricePrecision: number;
57
- amountPrecision: number;
58
- }
59
- export interface BinanceMarketIndex {
60
- byUnifiedSymbol: Map<string, BinanceMarketRecord>;
61
- byNativeSymbol: Map<string, BinanceMarketRecord>;
62
- markets: BinanceMarketRecord[];
63
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1,102 +0,0 @@
1
- import type { AdapterAccountBaseline, ExchangeAdapter, ExchangeCapabilities, NormalizedAccountEvent, NormalizedMarketEvent, NormalizedOrderEvent } from "../types.js";
2
- import type { BinanceMarketFamily } from "./market-types.js";
3
- import { type BinanceMarketRestClient } from "./rest-client.js";
4
- import { type BinanceMarketWsTransport } from "./ws-client.js";
5
- export interface CreateBinanceNativeMarketAdapterInput {
6
- restClient?: BinanceMarketRestClient;
7
- createTransport?: (input: {
8
- family: BinanceMarketFamily;
9
- }) => BinanceMarketWsTransport;
10
- now?: () => number;
11
- }
12
- export declare class BinanceNativeMarketAdapter implements ExchangeAdapter {
13
- #private;
14
- readonly exchange = "binance";
15
- readonly capabilities: ExchangeCapabilities;
16
- constructor(input?: CreateBinanceNativeMarketAdapterInput);
17
- start(): Promise<void>;
18
- stop(): Promise<void>;
19
- fetchMarketInfo(): Promise<{
20
- exchange: string;
21
- symbol: string;
22
- baseAsset: string;
23
- quoteAsset: string;
24
- marketType: "spot" | "swap" | "future";
25
- pricePrecision: number;
26
- amountPrecision: number;
27
- active: boolean;
28
- }[]>;
29
- subscribeL1Book(input: {
30
- exchange: string;
31
- symbol: string;
32
- }): Promise<void>;
33
- subscribeFundingRate(input: {
34
- exchange: string;
35
- symbol: string;
36
- }): Promise<void>;
37
- watchMarketEvents(): import("../../runtime/async-queue.js").AsyncQueue<NormalizedMarketEvent>;
38
- setMarketEventSink(sink: ((event: NormalizedMarketEvent) => void) | undefined): void;
39
- watchInternalErrors(): import("../../runtime/async-queue.js").AsyncQueue<Error>;
40
- subscribeOrders(_input: {
41
- accountId: string;
42
- }): Promise<void>;
43
- fetchOpenOrdersBaseline(_accountId: string): Promise<NormalizedOrderEvent["snapshot"][]>;
44
- watchOrderEvents(): import("../../runtime/async-queue.js").AsyncQueue<NormalizedOrderEvent>;
45
- setOrderEventSink(sink: ((event: NormalizedOrderEvent) => void) | undefined): void;
46
- fetchAccountBaseline(_accountId: string): Promise<AdapterAccountBaseline>;
47
- watchAccountEvents(): import("../../runtime/async-queue.js").AsyncQueue<NormalizedAccountEvent>;
48
- setAccountEventSink(sink: ((event: NormalizedAccountEvent) => void) | undefined): void;
49
- placeOrder(_input: {
50
- accountId: string;
51
- exchange: string;
52
- symbol: string;
53
- side: "buy" | "sell";
54
- amount: string;
55
- clientOrderId: string;
56
- type: string;
57
- price?: string;
58
- reduceOnly?: boolean;
59
- }): Promise<{
60
- clientOrderId?: string;
61
- orderId?: string;
62
- receivedAt: number;
63
- }>;
64
- amendOrder(_input: {
65
- accountId: string;
66
- exchange: string;
67
- clientOrderId?: string;
68
- orderId?: string;
69
- symbol?: string;
70
- newPrice?: string;
71
- }): Promise<{
72
- clientOrderId?: string;
73
- orderId?: string;
74
- receivedAt: number;
75
- }>;
76
- cancelOrder(_input: {
77
- accountId: string;
78
- exchange: string;
79
- clientOrderId?: string;
80
- orderId?: string;
81
- }): Promise<{
82
- clientOrderId?: string;
83
- orderId?: string;
84
- receivedAt: number;
85
- }>;
86
- cancelAllOrders(_input: {
87
- accountId: string;
88
- exchange: string;
89
- }): Promise<{
90
- accountId: string;
91
- exchange: string;
92
- canceledCount: number;
93
- }>;
94
- getHealth(): {
95
- exchange: string;
96
- status: string;
97
- wsConnected: boolean;
98
- };
99
- handleTransportMessage(family: BinanceMarketFamily, payload: unknown): void;
100
- handleTransportClose(family: BinanceMarketFamily): void;
101
- handleTransportReconnect(family: BinanceMarketFamily): Promise<void>;
102
- }