@yuants/vendor-aster 0.9.4 → 0.9.6

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.
@@ -1 +1 @@
1
- {"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../../src/api/public-api.ts"],"names":[],"mappings":"AA0CA;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;;;;;;YAQrB,MAAM;iBACD,MAAM;iBACN,MAAM;IAES,CAAC;AAEjC,MAAM,WAAW,eAAe;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;QACrC,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,cAAc,EAAE,MAAM,CAAC;QACvB,OAAO,EAAE;YACP,UAAU,EAAE,MAAM,CAAC;YACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;SACxB,EAAE,CAAC;KACL,EAAE,CAAC;IACJ,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;CAChC;AAED;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,gEAGjC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,gEAGhC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB;YAEtB,MAAM;;YAGN,MAAM;kBACA,MAAM;UACd,MAAM;EAEiB,CAAC;AAElC;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;YAGrB,MAAM;WACP,MAAM;;IAGgB,CAAC;AAElC;;;GAGG;AACH,eAAO,MAAM,qBAAqB;;;YAKpB,MAAM;eACH,MAAM;gBACL,MAAM;0BACI,MAAM;qBACX,MAAM;qBACN,MAAM;kBACT,MAAM;UACd,MAAM;;YAGJ,MAAM;eACH,MAAM;gBACL,MAAM;0BACI,MAAM;qBACX,MAAM;qBACN,MAAM;kBACT,MAAM;UACd,MAAM;IAEe,CAAC;AAElC,MAAM,WAAW,WAAY,SAAQ,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACzD,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe;YAEhB,MAAM;cACJ,MAAM;;;;4BAMO,CAAC;AAE5B;;;;;;GAMG;AACH,eAAO,MAAM,cAAc;YAEf,MAAM;cACJ,MAAM;;;;4BAMM,CAAC"}
1
+ {"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../../src/api/public-api.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,22 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getApiV1Klines = exports.getFApiV1Klines = exports.getFApiV1PremiumIndex = exports.getFApiV1TickerPrice = exports.getFApiV1OpenInterest = exports.getApiV1ExchangeInfo = exports.getFApiV1ExchangeInfo = exports.getFApiV1FundingRate = void 0;
4
4
  const protocol_1 = require("@yuants/protocol");
5
+ const utils_1 = require("@yuants/utils");
6
+ require("./client");
5
7
  const MetricsAsterApiCallCounter = protocol_1.GlobalPrometheusRegistry.counter('aster_api_call', 'Number of aster api call');
6
8
  const terminal = protocol_1.Terminal.fromNodeEnv();
9
+ const FutureBaseURL = 'https://fapi.asterdex.com';
10
+ const SpotBaseURL = 'https://sapi.asterdex.com';
11
+ const getKlinesRequestWeight = (limit) => {
12
+ const resolvedLimit = limit !== null && limit !== void 0 ? limit : 500;
13
+ if (resolvedLimit < 100)
14
+ return 1;
15
+ if (resolvedLimit < 500)
16
+ return 2;
17
+ if (resolvedLimit <= 1000)
18
+ return 5;
19
+ return 10;
20
+ };
7
21
  const request = async (method, baseUrl, endpoint, params = {}) => {
8
22
  const url = new URL(baseUrl);
9
23
  url.pathname = endpoint;
@@ -23,57 +37,154 @@ const request = async (method, baseUrl, endpoint, params = {}) => {
23
37
  }
24
38
  return res;
25
39
  };
26
- const createApi = (baseUrl) => (method, endpoint) => (params) => request(method, baseUrl, endpoint, params);
27
- const createFutureApi = createApi('https://fapi.asterdex.com');
28
- const createSpotApi = createApi('https://sapi.asterdex.com');
29
40
  /**
30
41
  * 获取资金费率历史
31
42
  *
43
+ * Weight: 1
44
+ *
32
45
  * https://github.com/asterdex/api-docs/blob/master/aster-finance-futures-api_CN.md#%E6%9F%A5%E8%AF%A2%E8%B5%84%E9%87%91%E8%B4%B9%E7%8E%87%E5%8E%86%E5%8F%B2
33
46
  */
34
- exports.getFApiV1FundingRate = createFutureApi('GET', '/fapi/v1/fundingRate');
47
+ const getFApiV1FundingRate = (params) => {
48
+ const endpoint = '/fapi/v1/fundingRate';
49
+ const url = new URL(FutureBaseURL);
50
+ url.pathname = endpoint;
51
+ const weight = 1;
52
+ (0, utils_1.scopeError)('ASTER_API_RATE_LIMIT', { method: 'GET', endpoint, host: url.host, path: url.pathname, bucketId: url.host, weight }, () => (0, utils_1.tokenBucket)(url.host).acquireSync(weight));
53
+ return request('GET', FutureBaseURL, endpoint, params);
54
+ };
55
+ exports.getFApiV1FundingRate = getFApiV1FundingRate;
35
56
  /**
36
57
  * 获取交易对信息
37
58
  *
59
+ * Weight: 1
60
+ *
38
61
  * https://github.com/asterdex/api-docs/blob/master/aster-finance-futures-api_CN.md#%E4%BA%A4%E6%98%93%E5%AF%B9%E4%BF%A1%E6%81%AF
39
62
  */
40
- exports.getFApiV1ExchangeInfo = createFutureApi('GET', '/fapi/v1/exchangeInfo');
63
+ const getFApiV1ExchangeInfo = (params) => {
64
+ const endpoint = '/fapi/v1/exchangeInfo';
65
+ const url = new URL(FutureBaseURL);
66
+ url.pathname = endpoint;
67
+ const weight = 1;
68
+ (0, utils_1.scopeError)('ASTER_API_RATE_LIMIT', { method: 'GET', endpoint, host: url.host, path: url.pathname, bucketId: url.host, weight }, () => (0, utils_1.tokenBucket)(url.host).acquireSync(weight));
69
+ return request('GET', FutureBaseURL, endpoint, params);
70
+ };
71
+ exports.getFApiV1ExchangeInfo = getFApiV1ExchangeInfo;
41
72
  /**
42
73
  * 获取现货交易对信息
43
74
  *
75
+ * Weight: 1
76
+ *
44
77
  * https://github.com/asterdex/api-docs/blob/master/aster-finance-spot-api_CN.md#L1080-L1145
45
78
  */
46
- exports.getApiV1ExchangeInfo = createSpotApi('GET', '/api/v1/exchangeInfo');
79
+ const getApiV1ExchangeInfo = (params) => {
80
+ const endpoint = '/api/v1/exchangeInfo';
81
+ const url = new URL(SpotBaseURL);
82
+ url.pathname = endpoint;
83
+ const weight = 1;
84
+ (0, utils_1.scopeError)('ASTER_API_RATE_LIMIT', { method: 'GET', endpoint, host: url.host, path: url.pathname, bucketId: url.host, weight }, () => (0, utils_1.tokenBucket)(url.host).acquireSync(weight));
85
+ return request('GET', SpotBaseURL, endpoint, params);
86
+ };
87
+ exports.getApiV1ExchangeInfo = getApiV1ExchangeInfo;
47
88
  /**
48
89
  * 获取未平仓合约数量
49
90
  *
50
91
  * 无 API 文档 (weird)
92
+ * 参考 Binance 风格接口:/fapi/v1/openInterest
93
+ *
94
+ * Weight: 1
95
+ * https://developers.binance.com/docs/zh-CN/derivatives/usds-margined-futures/market-data/rest-api/Open-Interest
51
96
  */
52
- exports.getFApiV1OpenInterest = createFutureApi('GET', '/fapi/v1/openInterest');
97
+ const getFApiV1OpenInterest = (params) => {
98
+ const endpoint = '/fapi/v1/openInterest';
99
+ const url = new URL(FutureBaseURL);
100
+ url.pathname = endpoint;
101
+ const weight = 1;
102
+ (0, utils_1.scopeError)('ASTER_API_RATE_LIMIT', { method: 'GET', endpoint, host: url.host, path: url.pathname, bucketId: url.host, weight }, () => (0, utils_1.tokenBucket)(url.host).acquireSync(weight));
103
+ return request('GET', FutureBaseURL, endpoint, params);
104
+ };
105
+ exports.getFApiV1OpenInterest = getFApiV1OpenInterest;
53
106
  /**
54
107
  * 获取最新价格
55
108
  *
109
+ * Weight: without symbol 2 (current implementation)
110
+ *
56
111
  * https://github.com/asterdex/api-docs/blob/master/aster-finance-futures-api_CN.md#%E6%9C%80%E6%96%B0%E4%BB%B7%E6%A0%BC
57
112
  */
58
- exports.getFApiV1TickerPrice = createFutureApi('GET', '/fapi/v1/ticker/price');
113
+ const getFApiV1TickerPrice = (params) => {
114
+ const endpoint = '/fapi/v1/ticker/price';
115
+ const url = new URL(FutureBaseURL);
116
+ url.pathname = endpoint;
117
+ const weight = 2;
118
+ (0, utils_1.scopeError)('ASTER_API_RATE_LIMIT', { method: 'GET', endpoint, host: url.host, path: url.pathname, bucketId: url.host, weight }, () => (0, utils_1.tokenBucket)(url.host).acquireSync(weight));
119
+ return request('GET', FutureBaseURL, endpoint, params);
120
+ };
121
+ exports.getFApiV1TickerPrice = getFApiV1TickerPrice;
59
122
  /**
60
123
  * 获取资金费率
124
+ *
125
+ * Weight: 1
126
+ *
61
127
  * https://github.com/asterdex/api-docs/blob/master/aster-finance-futures-api_CN.md
62
128
  */
63
- exports.getFApiV1PremiumIndex = createFutureApi('GET', '/fapi/v1/premiumIndex');
129
+ const getFApiV1PremiumIndex = (params) => {
130
+ const endpoint = '/fapi/v1/premiumIndex';
131
+ const url = new URL(FutureBaseURL);
132
+ url.pathname = endpoint;
133
+ const weight = 1;
134
+ (0, utils_1.scopeError)('ASTER_API_RATE_LIMIT', { method: 'GET', endpoint, host: url.host, path: url.pathname, bucketId: url.host, weight }, () => (0, utils_1.tokenBucket)(url.host).acquireSync(weight));
135
+ return request('GET', FutureBaseURL, endpoint, params);
136
+ };
137
+ exports.getFApiV1PremiumIndex = getFApiV1PremiumIndex;
64
138
  /**
65
139
  * 获取 K 线
66
140
  *
67
141
  * 参考 Binance 风格接口:/fapi/v1/klines
142
+ *
143
+ * Weight: by limit
144
+ *
68
145
  * https://github.com/asterdex/api-docs/blob/master/aster-finance-futures-api_CN.md#k%E7%BA%BF%E6%95%B0%E6%8D%AE
69
146
  */
70
- exports.getFApiV1Klines = createFutureApi('GET', '/fapi/v1/klines');
147
+ const getFApiV1Klines = (params) => {
148
+ const endpoint = '/fapi/v1/klines';
149
+ const url = new URL(FutureBaseURL);
150
+ url.pathname = endpoint;
151
+ const weight = getKlinesRequestWeight(params === null || params === void 0 ? void 0 : params.limit);
152
+ (0, utils_1.scopeError)('ASTER_API_RATE_LIMIT', {
153
+ method: 'GET',
154
+ endpoint,
155
+ host: url.host,
156
+ path: url.pathname,
157
+ bucketId: url.host,
158
+ weight,
159
+ limit: params === null || params === void 0 ? void 0 : params.limit,
160
+ }, () => (0, utils_1.tokenBucket)(url.host).acquireSync(weight));
161
+ return request('GET', FutureBaseURL, endpoint, params);
162
+ };
163
+ exports.getFApiV1Klines = getFApiV1Klines;
71
164
  /**
72
165
  * 获取现货 K 线
73
166
  *
74
167
  * 参考 Binance 风格接口:/api/v1/klines
75
168
  *
169
+ * Weight: not documented (temporary: follow futures limit table)
170
+ *
76
171
  * https://github.com/asterdex/api-docs/blob/master/aster-finance-spot-api_CN.md
77
172
  */
78
- exports.getApiV1Klines = createSpotApi('GET', '/api/v1/klines');
173
+ const getApiV1Klines = (params) => {
174
+ const endpoint = '/api/v1/klines';
175
+ const url = new URL(SpotBaseURL);
176
+ url.pathname = endpoint;
177
+ const weight = getKlinesRequestWeight(params === null || params === void 0 ? void 0 : params.limit);
178
+ (0, utils_1.scopeError)('ASTER_API_RATE_LIMIT', {
179
+ method: 'GET',
180
+ endpoint,
181
+ host: url.host,
182
+ path: url.pathname,
183
+ bucketId: url.host,
184
+ weight,
185
+ limit: params === null || params === void 0 ? void 0 : params.limit,
186
+ }, () => (0, utils_1.tokenBucket)(url.host).acquireSync(weight));
187
+ return request('GET', SpotBaseURL, endpoint, params);
188
+ };
189
+ exports.getApiV1Klines = getApiV1Klines;
79
190
  //# sourceMappingURL=public-api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"public-api.js","sourceRoot":"","sources":["../../src/api/public-api.ts"],"names":[],"mappings":";;;AAAA,+CAAsE;AAEtE,MAAM,0BAA0B,GAAG,mCAAwB,CAAC,OAAO,CACjE,gBAAgB,EAChB,0BAA0B,CAC3B,CAAC;AACF,MAAM,QAAQ,GAAG,mBAAQ,CAAC,WAAW,EAAE,CAAC;AACxC,MAAM,OAAO,GAAG,KAAK,EACnB,MAAc,EACd,OAAe,EACf,QAAgB,EAChB,SAAkC,EAAE,EACxB,EAAE;IACd,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7B,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACxB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QACjD,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;KACvC;IAED,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7B,0BAA0B,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;IACnG,MAAM,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;QACvC,MAAM;KACP,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAY,CAAC;IAEnD,MAAM,UAAU,GAAG,GAAwB,CAAC;IAC5C,IAAI,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE;QAChE,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;KAC3B;IACD,OAAO,GAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,SAAS,GACb,CAAC,OAAe,EAAE,EAAE,CACpB,CAA6C,MAAc,EAAE,QAAgB,EAAE,EAAE,CACjF,CAAC,MAAY,EAAE,EAAE,CACf,OAAO,CAAO,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AAErD,MAAM,eAAe,GAAG,SAAS,CAAC,2BAA2B,CAAC,CAAC;AAC/D,MAAM,aAAa,GAAG,SAAS,CAAC,2BAA2B,CAAC,CAAC;AAE7D;;;;GAIG;AACU,QAAA,oBAAoB,GAAG,eAAe,CAYjD,KAAK,EAAE,sBAAsB,CAAC,CAAC;AA2BjC;;;;GAIG;AACU,QAAA,qBAAqB,GAAG,eAAe,CAClD,KAAK,EACL,uBAAuB,CACxB,CAAC;AAEF;;;;GAIG;AACU,QAAA,oBAAoB,GAAG,aAAa,CAC/C,KAAK,EACL,sBAAsB,CACvB,CAAC;AAEF;;;;GAIG;AACU,QAAA,qBAAqB,GAAG,eAAe,CASlD,KAAK,EAAE,uBAAuB,CAAC,CAAC;AAElC;;;;GAIG;AACU,QAAA,oBAAoB,GAAG,eAAe,CAOjD,KAAK,EAAE,uBAAuB,CAAC,CAAC;AAElC;;;GAGG;AACU,QAAA,qBAAqB,GAAG,eAAe,CAwBlD,KAAK,EAAE,uBAAuB,CAAC,CAAC;AAiBlC;;;;;GAKG;AACU,QAAA,eAAe,GAAG,eAAe,CAS5C,KAAK,EAAE,iBAAiB,CAAC,CAAC;AAE5B;;;;;;GAMG;AACU,QAAA,cAAc,GAAG,aAAa,CASzC,KAAK,EAAE,gBAAgB,CAAC,CAAC","sourcesContent":["import { GlobalPrometheusRegistry, Terminal } from '@yuants/protocol';\n\nconst MetricsAsterApiCallCounter = GlobalPrometheusRegistry.counter(\n 'aster_api_call',\n 'Number of aster api call',\n);\nconst terminal = Terminal.fromNodeEnv();\nconst request = async <T>(\n method: string,\n baseUrl: string,\n endpoint: string,\n params: Record<string, unknown> = {},\n): Promise<T> => {\n const url = new URL(baseUrl);\n url.pathname = endpoint;\n for (const [key, value] of Object.entries(params)) {\n if (value === undefined) continue;\n url.searchParams.set(key, `${value}`);\n }\n\n console.info(url.toString());\n MetricsAsterApiCallCounter.labels({ path: url.pathname, terminal_id: terminal.terminal_id }).inc();\n const res = (await fetch(url.toString(), {\n method,\n }).then((response) => response.json())) as unknown;\n\n const maybeError = res as { code?: number };\n if (typeof maybeError.code === 'number' && maybeError.code !== 0) {\n throw JSON.stringify(res);\n }\n return res as T;\n};\n\nconst createApi =\n (baseUrl: string) =>\n <TReq extends Record<string, unknown>, TRes>(method: string, endpoint: string) =>\n (params: TReq) =>\n request<TRes>(method, baseUrl, endpoint, params);\n\nconst createFutureApi = createApi('https://fapi.asterdex.com');\nconst createSpotApi = createApi('https://sapi.asterdex.com');\n\n/**\n * 获取资金费率历史\n *\n * https://github.com/asterdex/api-docs/blob/master/aster-finance-futures-api_CN.md#%E6%9F%A5%E8%AF%A2%E8%B5%84%E9%87%91%E8%B4%B9%E7%8E%87%E5%8E%86%E5%8F%B2\n */\nexport const getFApiV1FundingRate = createFutureApi<\n {\n symbol?: string;\n startTime?: number;\n endTime?: number;\n limit?: number;\n },\n {\n symbol: string;\n fundingRate: string;\n fundingTime: number;\n }[]\n>('GET', '/fapi/v1/fundingRate');\n\nexport interface IAsterRateLimit {\n rateLimitType?: string;\n interval?: string;\n intervalNum?: number;\n limit?: number;\n}\n\nexport interface IAsterExchangeInfo {\n symbols: {\n symbol: string;\n status: 'TRADING' | 'BREAK' | 'HALT';\n baseAsset: string;\n quoteAsset: string;\n pricePrecision: number;\n quantityPrecision: number;\n baseAssetPrecision: number;\n quotePrecision: number;\n filters: {\n filterType: string;\n [key: string]: unknown;\n }[];\n }[];\n rateLimits?: IAsterRateLimit[];\n}\n\n/**\n * 获取交易对信息\n *\n * https://github.com/asterdex/api-docs/blob/master/aster-finance-futures-api_CN.md#%E4%BA%A4%E6%98%93%E5%AF%B9%E4%BF%A1%E6%81%AF\n */\nexport const getFApiV1ExchangeInfo = createFutureApi<Record<string, never>, IAsterExchangeInfo>(\n 'GET',\n '/fapi/v1/exchangeInfo',\n);\n\n/**\n * 获取现货交易对信息\n *\n * https://github.com/asterdex/api-docs/blob/master/aster-finance-spot-api_CN.md#L1080-L1145\n */\nexport const getApiV1ExchangeInfo = createSpotApi<Record<string, never>, IAsterExchangeInfo>(\n 'GET',\n '/api/v1/exchangeInfo',\n);\n\n/**\n * 获取未平仓合约数量\n *\n * 无 API 文档 (weird)\n */\nexport const getFApiV1OpenInterest = createFutureApi<\n {\n symbol: string;\n },\n {\n symbol: string;\n openInterest: string;\n time: number;\n }\n>('GET', '/fapi/v1/openInterest');\n\n/**\n * 获取最新价格\n *\n * https://github.com/asterdex/api-docs/blob/master/aster-finance-futures-api_CN.md#%E6%9C%80%E6%96%B0%E4%BB%B7%E6%A0%BC\n */\nexport const getFApiV1TickerPrice = createFutureApi<\n Record<string, never>,\n {\n symbol: string;\n price: string;\n time?: number;\n }[]\n>('GET', '/fapi/v1/ticker/price');\n\n/**\n * 获取资金费率\n * https://github.com/asterdex/api-docs/blob/master/aster-finance-futures-api_CN.md\n */\nexport const getFApiV1PremiumIndex = createFutureApi<\n {\n symbol?: string;\n },\n | {\n symbol: string; // 交易对\n markPrice: string; // 标记价格\n indexPrice: string; // 指数价格\n estimatedSettlePrice: string; // 预估结算价,仅在交割开始前最后一小时有意义\n lastFundingRate: string; // 最近更新的资金费率\n nextFundingTime: number; // 下次资金费时间\n interestRate: string; // 标的资产基础利率\n time: number; // 更新时间\n }\n | {\n symbol: string; // 交易对\n markPrice: string; // 标记价格\n indexPrice: string; // 指数价格\n estimatedSettlePrice: string; // 预估结算价,仅在交割开始前最后一小时有意义\n lastFundingRate: string; // 最近更新的资金费率\n nextFundingTime: number; // 下次资金费时间\n interestRate: string; // 标的资产基础利率\n time: number; // 更新时间\n }[]\n>('GET', '/fapi/v1/premiumIndex');\n\nexport interface IAsterKline extends Array<string | number> {\n 0: number; // Open time\n 1: string; // Open\n 2: string; // High\n 3: string; // Low\n 4: string; // Close\n 5: string; // Volume\n 6: number; // Close time\n 7: string; // Quote asset volume\n 8: number; // Number of trades\n 9: string; // Taker buy base asset volume\n 10: string; // Taker buy quote asset volume\n 11: string; // Ignore\n}\n\n/**\n * 获取 K 线\n *\n * 参考 Binance 风格接口:/fapi/v1/klines\n * https://github.com/asterdex/api-docs/blob/master/aster-finance-futures-api_CN.md#k%E7%BA%BF%E6%95%B0%E6%8D%AE\n */\nexport const getFApiV1Klines = createFutureApi<\n {\n symbol: string;\n interval: string;\n startTime?: number;\n endTime?: number;\n limit?: number;\n },\n IAsterKline[]\n>('GET', '/fapi/v1/klines');\n\n/**\n * 获取现货 K 线\n *\n * 参考 Binance 风格接口:/api/v1/klines\n *\n * https://github.com/asterdex/api-docs/blob/master/aster-finance-spot-api_CN.md\n */\nexport const getApiV1Klines = createSpotApi<\n {\n symbol: string;\n interval: string;\n startTime?: number;\n endTime?: number;\n limit?: number;\n },\n IAsterKline[]\n>('GET', '/api/v1/klines');\n"]}
1
+ {"version":3,"file":"public-api.js","sourceRoot":"","sources":["../../src/api/public-api.ts"],"names":[],"mappings":"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","sourcesContent":["import { GlobalPrometheusRegistry, Terminal } from '@yuants/protocol';\nimport { scopeError, tokenBucket } from '@yuants/utils';\n\nimport './client';\n\nconst MetricsAsterApiCallCounter = GlobalPrometheusRegistry.counter(\n 'aster_api_call',\n 'Number of aster api call',\n);\nconst terminal = Terminal.fromNodeEnv();\n\nconst FutureBaseURL = 'https://fapi.asterdex.com';\nconst SpotBaseURL = 'https://sapi.asterdex.com';\n\nconst getKlinesRequestWeight = (limit: number | undefined): number => {\n const resolvedLimit = limit ?? 500;\n if (resolvedLimit < 100) return 1;\n if (resolvedLimit < 500) return 2;\n if (resolvedLimit <= 1000) return 5;\n return 10;\n};\n\nconst request = async <T>(\n method: string,\n baseUrl: string,\n endpoint: string,\n params: Record<string, unknown> = {},\n): Promise<T> => {\n const url = new URL(baseUrl);\n url.pathname = endpoint;\n for (const [key, value] of Object.entries(params)) {\n if (value === undefined) continue;\n url.searchParams.set(key, `${value}`);\n }\n\n console.info(url.toString());\n MetricsAsterApiCallCounter.labels({ path: url.pathname, terminal_id: terminal.terminal_id }).inc();\n const res = (await fetch(url.toString(), {\n method,\n }).then((response) => response.json())) as unknown;\n\n const maybeError = res as { code?: number };\n if (typeof maybeError.code === 'number' && maybeError.code !== 0) {\n throw JSON.stringify(res);\n }\n return res as T;\n};\n\n/**\n * 获取资金费率历史\n *\n * Weight: 1\n *\n * https://github.com/asterdex/api-docs/blob/master/aster-finance-futures-api_CN.md#%E6%9F%A5%E8%AF%A2%E8%B5%84%E9%87%91%E8%B4%B9%E7%8E%87%E5%8E%86%E5%8F%B2\n */\nexport const getFApiV1FundingRate = (params: {\n symbol?: string;\n startTime?: number;\n endTime?: number;\n limit?: number;\n}): Promise<\n {\n symbol: string;\n fundingRate: string;\n fundingTime: number;\n }[]\n> => {\n const endpoint = '/fapi/v1/fundingRate';\n const url = new URL(FutureBaseURL);\n url.pathname = endpoint;\n const weight = 1;\n scopeError(\n 'ASTER_API_RATE_LIMIT',\n { method: 'GET', endpoint, host: url.host, path: url.pathname, bucketId: url.host, weight },\n () => tokenBucket(url.host).acquireSync(weight),\n );\n return request('GET', FutureBaseURL, endpoint, params);\n};\n\nexport interface IAsterRateLimit {\n rateLimitType?: string;\n interval?: string;\n intervalNum?: number;\n limit?: number;\n}\n\nexport interface IAsterExchangeInfo {\n symbols: {\n symbol: string;\n status: 'TRADING' | 'BREAK' | 'HALT';\n baseAsset: string;\n quoteAsset: string;\n pricePrecision: number;\n quantityPrecision: number;\n baseAssetPrecision: number;\n quotePrecision: number;\n filters: {\n filterType: string;\n [key: string]: unknown;\n }[];\n }[];\n rateLimits?: IAsterRateLimit[];\n}\n\n/**\n * 获取交易对信息\n *\n * Weight: 1\n *\n * https://github.com/asterdex/api-docs/blob/master/aster-finance-futures-api_CN.md#%E4%BA%A4%E6%98%93%E5%AF%B9%E4%BF%A1%E6%81%AF\n */\nexport const getFApiV1ExchangeInfo = (params: Record<string, never>): Promise<IAsterExchangeInfo> => {\n const endpoint = '/fapi/v1/exchangeInfo';\n const url = new URL(FutureBaseURL);\n url.pathname = endpoint;\n const weight = 1;\n scopeError(\n 'ASTER_API_RATE_LIMIT',\n { method: 'GET', endpoint, host: url.host, path: url.pathname, bucketId: url.host, weight },\n () => tokenBucket(url.host).acquireSync(weight),\n );\n return request('GET', FutureBaseURL, endpoint, params);\n};\n\n/**\n * 获取现货交易对信息\n *\n * Weight: 1\n *\n * https://github.com/asterdex/api-docs/blob/master/aster-finance-spot-api_CN.md#L1080-L1145\n */\nexport const getApiV1ExchangeInfo = (params: Record<string, never>): Promise<IAsterExchangeInfo> => {\n const endpoint = '/api/v1/exchangeInfo';\n const url = new URL(SpotBaseURL);\n url.pathname = endpoint;\n const weight = 1;\n scopeError(\n 'ASTER_API_RATE_LIMIT',\n { method: 'GET', endpoint, host: url.host, path: url.pathname, bucketId: url.host, weight },\n () => tokenBucket(url.host).acquireSync(weight),\n );\n return request('GET', SpotBaseURL, endpoint, params);\n};\n\n/**\n * 获取未平仓合约数量\n *\n * 无 API 文档 (weird)\n * 参考 Binance 风格接口:/fapi/v1/openInterest\n *\n * Weight: 1\n * https://developers.binance.com/docs/zh-CN/derivatives/usds-margined-futures/market-data/rest-api/Open-Interest\n */\nexport const getFApiV1OpenInterest = (params: {\n symbol: string;\n}): Promise<{\n symbol: string;\n openInterest: string;\n time: number;\n}> => {\n const endpoint = '/fapi/v1/openInterest';\n const url = new URL(FutureBaseURL);\n url.pathname = endpoint;\n const weight = 1;\n scopeError(\n 'ASTER_API_RATE_LIMIT',\n { method: 'GET', endpoint, host: url.host, path: url.pathname, bucketId: url.host, weight },\n () => tokenBucket(url.host).acquireSync(weight),\n );\n return request('GET', FutureBaseURL, endpoint, params);\n};\n\n/**\n * 获取最新价格\n *\n * Weight: without symbol 2 (current implementation)\n *\n * https://github.com/asterdex/api-docs/blob/master/aster-finance-futures-api_CN.md#%E6%9C%80%E6%96%B0%E4%BB%B7%E6%A0%BC\n */\nexport const getFApiV1TickerPrice = (\n params: Record<string, never>,\n): Promise<\n {\n symbol: string;\n price: string;\n time?: number;\n }[]\n> => {\n const endpoint = '/fapi/v1/ticker/price';\n const url = new URL(FutureBaseURL);\n url.pathname = endpoint;\n const weight = 2;\n scopeError(\n 'ASTER_API_RATE_LIMIT',\n { method: 'GET', endpoint, host: url.host, path: url.pathname, bucketId: url.host, weight },\n () => tokenBucket(url.host).acquireSync(weight),\n );\n return request('GET', FutureBaseURL, endpoint, params);\n};\n\n/**\n * 获取资金费率\n *\n * Weight: 1\n *\n * https://github.com/asterdex/api-docs/blob/master/aster-finance-futures-api_CN.md\n */\nexport const getFApiV1PremiumIndex = (params: {\n symbol?: string;\n}): Promise<\n | {\n symbol: string;\n markPrice: string;\n indexPrice: string;\n estimatedSettlePrice: string;\n lastFundingRate: string;\n nextFundingTime: number;\n interestRate: string;\n time: number;\n }\n | {\n symbol: string;\n markPrice: string;\n indexPrice: string;\n estimatedSettlePrice: string;\n lastFundingRate: string;\n nextFundingTime: number;\n interestRate: string;\n time: number;\n }[]\n> => {\n const endpoint = '/fapi/v1/premiumIndex';\n const url = new URL(FutureBaseURL);\n url.pathname = endpoint;\n const weight = 1;\n scopeError(\n 'ASTER_API_RATE_LIMIT',\n { method: 'GET', endpoint, host: url.host, path: url.pathname, bucketId: url.host, weight },\n () => tokenBucket(url.host).acquireSync(weight),\n );\n return request('GET', FutureBaseURL, endpoint, params);\n};\n\nexport interface IAsterKline extends Array<string | number> {\n 0: number; // Open time\n 1: string; // Open\n 2: string; // High\n 3: string; // Low\n 4: string; // Close\n 5: string; // Volume\n 6: number; // Close time\n 7: string; // Quote asset volume\n 8: number; // Number of trades\n 9: string; // Taker buy base asset volume\n 10: string; // Taker buy quote asset volume\n 11: string; // Ignore\n}\n\n/**\n * 获取 K 线\n *\n * 参考 Binance 风格接口:/fapi/v1/klines\n *\n * Weight: by limit\n *\n * https://github.com/asterdex/api-docs/blob/master/aster-finance-futures-api_CN.md#k%E7%BA%BF%E6%95%B0%E6%8D%AE\n */\nexport const getFApiV1Klines = (params: {\n symbol: string;\n interval: string;\n startTime?: number;\n endTime?: number;\n limit?: number;\n}): Promise<IAsterKline[]> => {\n const endpoint = '/fapi/v1/klines';\n const url = new URL(FutureBaseURL);\n url.pathname = endpoint;\n const weight = getKlinesRequestWeight(params?.limit);\n scopeError(\n 'ASTER_API_RATE_LIMIT',\n {\n method: 'GET',\n endpoint,\n host: url.host,\n path: url.pathname,\n bucketId: url.host,\n weight,\n limit: params?.limit,\n },\n () => tokenBucket(url.host).acquireSync(weight),\n );\n return request('GET', FutureBaseURL, endpoint, params);\n};\n\n/**\n * 获取现货 K 线\n *\n * 参考 Binance 风格接口:/api/v1/klines\n *\n * Weight: not documented (temporary: follow futures limit table)\n *\n * https://github.com/asterdex/api-docs/blob/master/aster-finance-spot-api_CN.md\n */\nexport const getApiV1Klines = (params: {\n symbol: string;\n interval: string;\n startTime?: number;\n endTime?: number;\n limit?: number;\n}): Promise<IAsterKline[]> => {\n const endpoint = '/api/v1/klines';\n const url = new URL(SpotBaseURL);\n url.pathname = endpoint;\n const weight = getKlinesRequestWeight(params?.limit);\n scopeError(\n 'ASTER_API_RATE_LIMIT',\n {\n method: 'GET',\n endpoint,\n host: url.host,\n path: url.pathname,\n bucketId: url.host,\n weight,\n limit: params?.limit,\n },\n () => tokenBucket(url.host).acquireSync(weight),\n );\n return request('GET', SpotBaseURL, endpoint, params);\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuants/vendor-aster",
3
- "version": "0.9.4",
3
+ "version": "0.9.6",
4
4
  "main": "lib/index.js",
5
5
  "files": [
6
6
  "dist",
@@ -8,19 +8,19 @@
8
8
  "temp"
9
9
  ],
10
10
  "dependencies": {
11
- "@yuants/protocol": "0.53.6",
12
- "@yuants/cache": "0.3.7",
13
- "@yuants/data-account": "0.11.3",
14
- "@yuants/utils": "0.18.0",
15
- "@yuants/data-series": "0.3.56",
16
- "@yuants/sql": "0.9.34",
17
- "@yuants/data-product": "0.5.4",
18
- "@yuants/data-ohlc": "0.5.2",
19
- "@yuants/data-order": "0.7.4",
20
- "@yuants/data-interest-rate": "0.2.2",
21
- "@yuants/transfer": "0.2.43",
22
- "@yuants/data-quote": "0.4.3",
23
- "@yuants/exchange": "0.8.4",
11
+ "@yuants/protocol": "0.53.7",
12
+ "@yuants/cache": "0.3.8",
13
+ "@yuants/data-account": "0.11.4",
14
+ "@yuants/utils": "0.19.0",
15
+ "@yuants/data-series": "0.3.57",
16
+ "@yuants/sql": "0.9.35",
17
+ "@yuants/data-product": "0.5.5",
18
+ "@yuants/data-ohlc": "0.5.3",
19
+ "@yuants/data-order": "0.7.5",
20
+ "@yuants/data-interest-rate": "0.2.3",
21
+ "@yuants/transfer": "0.2.44",
22
+ "@yuants/data-quote": "0.4.4",
23
+ "@yuants/exchange": "0.8.5",
24
24
  "rxjs": "~7.5.6"
25
25
  },
26
26
  "devDependencies": {
@@ -30,7 +30,7 @@
30
30
  "@rushstack/heft-node-rig": "~1.10.7",
31
31
  "@types/heft-jest": "1.0.3",
32
32
  "@types/node": "22",
33
- "@yuants/extension": "0.2.35",
33
+ "@yuants/extension": "0.2.36",
34
34
  "@yuants/tool-kit": "0.2.1",
35
35
  "typescript": "~4.7.4",
36
36
  "ts-node": "~10.9.2"
@@ -1,14 +1,15 @@
1
1
  {
2
2
  "apps/vendor-aster/AGENTS.md": "dcd006d19a5c3b73081525d7c0afea68cd6d058b",
3
- "apps/vendor-aster/CHANGELOG.json": "60a312aa8a8239ed29071af8ef987ab43e4ca440",
4
- "apps/vendor-aster/CHANGELOG.md": "d4a6a11d7639f83b1111cd05fba8893342764756",
5
- "apps/vendor-aster/SESSION_NOTES.md": "d91f7a251d148fab1715b6da62395455edcb3b93",
3
+ "apps/vendor-aster/CHANGELOG.json": "c4b649662cb1519e536987c4495f36e9823179fb",
4
+ "apps/vendor-aster/CHANGELOG.md": "0f5eafbbaf903d0d8bbf109dd3da7f1fca02dd93",
5
+ "apps/vendor-aster/SESSION_NOTES.md": "8190e547bbff4338deee5a18b0657eb0c2e400c6",
6
6
  "apps/vendor-aster/config/jest.config.json": "4bb17bde3ee911163a3edb36a6eb71491d80b1bd",
7
7
  "apps/vendor-aster/config/rig.json": "f6c7b5537dc77a3170ba9f008bae3b6c3ee11956",
8
8
  "apps/vendor-aster/config/typescript.json": "854907e8a821f2050f6533368db160c649c25348",
9
- "apps/vendor-aster/package.json": "8703601d2669ba91643d85fef19a78fa21209c0d",
10
- "apps/vendor-aster/src/api/private-api.ts": "b3288706373f8917be480210f8f02074890d5b34",
11
- "apps/vendor-aster/src/api/public-api.ts": "a20ac4c4465ab3e75e2dc024adc12ecc19422375",
9
+ "apps/vendor-aster/package.json": "3744e74b3c4aaed400d1c1d0efa0036e8eec4923",
10
+ "apps/vendor-aster/src/api/client.ts": "9464e0c848a0a7f1525d5d4fecdbcc5586f8b051",
11
+ "apps/vendor-aster/src/api/private-api.ts": "50b7c4ddd321b7abedfa58a0562b6fce1930c9d3",
12
+ "apps/vendor-aster/src/api/public-api.ts": "23a8ca6eac3f046d4132b5e2be4911a72f4712bf",
12
13
  "apps/vendor-aster/src/index.ts": "1decd1aabd3e77bc7a678427a42a9fa5fa84cf29",
13
14
  "apps/vendor-aster/src/services/accounts/profile.ts": "fc57e7d2c865790dd257c043c8dd5cf5c641b7fd",
14
15
  "apps/vendor-aster/src/services/accounts/spot.ts": "49d045e5daae100ce9919ebd84723506806060ea",
@@ -24,19 +25,19 @@
24
25
  "apps/vendor-aster/src/services/quotes.ts": "9e93bc9a89a26018fd50f9ca845897334f2429ce",
25
26
  "apps/vendor-aster/tsconfig.json": "81da8f78196974b5d15da0edb6b2d9f48641063c",
26
27
  "apps/vendor-aster/.rush/temp/shrinkwrap-deps.json": "5ded440ffb547a8aa495353d5b13c1fd1b164b4a",
27
- "libraries/protocol/temp/package-deps.json": "ad2b09da06aa0b6d98e9ca145c3da7c8418f30d1",
28
- "libraries/cache/temp/package-deps.json": "8faf993aa54072a8cc7773ca9502618ec1660be1",
29
- "libraries/data-account/temp/package-deps.json": "ec07276e124d707820e348948c8689cd4b4d5a84",
30
- "libraries/utils/temp/package-deps.json": "6afd4e6b9f8348c0c24e05f7289101fc6b8fa5a9",
31
- "libraries/data-series/temp/package-deps.json": "6744fc1995bb77846daccced427210187b5e774f",
32
- "libraries/sql/temp/package-deps.json": "1fb8bcfa1bd3912150e7567770b065794a3b2138",
33
- "libraries/data-product/temp/package-deps.json": "77b545e27fbd147bf5fded94beb5baaa33687563",
34
- "libraries/data-ohlc/temp/package-deps.json": "f6a0a2248e237fe960daf27c93071ec1c3235fa3",
35
- "libraries/data-order/temp/package-deps.json": "d2826719d6e1f86ad64cfe6556a0f61352e02897",
36
- "libraries/data-interest-rate/temp/package-deps.json": "d1a26e2ed8d3ecd147e0b3a897927720d7760597",
37
- "libraries/transfer/temp/package-deps.json": "52cd9bb451ece058b39c7a7b08dd3fef1a57b934",
38
- "libraries/data-quote/temp/package-deps.json": "5aa2671e9a9e7b94827a8891049c4af5eefe757e",
39
- "libraries/exchange/temp/package-deps.json": "8315951811f0278801081fe8e48ba07213af6816",
40
- "libraries/extension/temp/package-deps.json": "d0a314f466619661a85b5fa9cc12ffe0b427864b",
28
+ "libraries/protocol/temp/package-deps.json": "765a1ba74dfa437b95a8685a308a09df6de49706",
29
+ "libraries/cache/temp/package-deps.json": "3fe087e264b56a7a72d25df93f942e69de6ab765",
30
+ "libraries/data-account/temp/package-deps.json": "ef7f802f6cec62965d3a5ea3365df131b9ed46a0",
31
+ "libraries/utils/temp/package-deps.json": "ae24e0f28d8238425131202aa7e46e2fc6ba3ae2",
32
+ "libraries/data-series/temp/package-deps.json": "5148dcf1033142f34a1dff17076a7a031052cb21",
33
+ "libraries/sql/temp/package-deps.json": "35ac4d78347c54d6c247d31dd77a1d88cfaed20f",
34
+ "libraries/data-product/temp/package-deps.json": "d527946b0136eb9ad0ee4451d31ea2c18eb88fa3",
35
+ "libraries/data-ohlc/temp/package-deps.json": "048949cb4791307628bbf35de8edd31480b8cd5e",
36
+ "libraries/data-order/temp/package-deps.json": "9940b4267bcaaba4f3e0db2d2e07f575ea8afa34",
37
+ "libraries/data-interest-rate/temp/package-deps.json": "82005a4c9b295c0eab9599127946dd8c915adc64",
38
+ "libraries/transfer/temp/package-deps.json": "f4c5d1fc1bed3061cee9e67381ab36749fb9118f",
39
+ "libraries/data-quote/temp/package-deps.json": "1b8805efdca7fee957cf36c414a0c53d5faa454b",
40
+ "libraries/exchange/temp/package-deps.json": "c27614f8a83ec352ddc52e5e2f0f9c04ecc80a1e",
41
+ "libraries/extension/temp/package-deps.json": "0655b86a4838124dba78913552adf2425484e900",
41
42
  "tools/toolkit/temp/package-deps.json": "23e053490eb8feade23e4d45de4e54883e322711"
42
43
  }