@tigeropenapi/tigeropen 0.4.0 → 0.4.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.
Files changed (55) hide show
  1. package/README.md +2 -2
  2. package/dist/cjs/client/api-response.js +21 -2
  3. package/dist/cjs/client/case-convert.js +4 -3
  4. package/dist/cjs/client/http-client.js +122 -5
  5. package/dist/cjs/config/client-config.js +56 -12
  6. package/dist/cjs/config/index.js +3 -1
  7. package/dist/cjs/config/token-manager.js +54 -4
  8. package/dist/cjs/index.js +51 -2
  9. package/dist/cjs/model/enums.js +14 -1
  10. package/dist/cjs/model/order-helpers.js +44 -0
  11. package/dist/cjs/push/push-client.js +40 -15
  12. package/dist/cjs/quote/quote-client.js +14 -2
  13. package/dist/cjs/trade/trade-client.js +57 -8
  14. package/dist/esm/client/api-request.js +1 -1
  15. package/dist/esm/client/api-response.js +22 -3
  16. package/dist/esm/client/case-convert.js +4 -3
  17. package/dist/esm/client/http-client.js +127 -10
  18. package/dist/esm/client/index.js +6 -6
  19. package/dist/esm/config/client-config.js +59 -15
  20. package/dist/esm/config/index.js +4 -3
  21. package/dist/esm/config/token-manager.js +55 -5
  22. package/dist/esm/index.js +15 -1
  23. package/dist/esm/logger/index.js +1 -1
  24. package/dist/esm/model/contract-helpers.js +1 -1
  25. package/dist/esm/model/enums.js +13 -0
  26. package/dist/esm/model/order-helpers.js +43 -1
  27. package/dist/esm/model/order-status.js +1 -1
  28. package/dist/esm/push/index.js +5 -5
  29. package/dist/esm/push/pb/PushData.js +11 -11
  30. package/dist/esm/push/pb/QuoteBasicData.js +1 -1
  31. package/dist/esm/push/pb/Response.js +1 -1
  32. package/dist/esm/push/pb/index.js +17 -17
  33. package/dist/esm/push/proto-message.js +3 -3
  34. package/dist/esm/push/push-client.js +47 -22
  35. package/dist/esm/quote/index.js +1 -1
  36. package/dist/esm/quote/quote-client.js +16 -4
  37. package/dist/esm/signer/index.js +2 -2
  38. package/dist/esm/trade/index.js +1 -1
  39. package/dist/esm/trade/trade-client.js +60 -11
  40. package/dist/types/client/api-response.d.ts +1 -0
  41. package/dist/types/client/case-convert.d.ts +3 -1
  42. package/dist/types/client/http-client.d.ts +32 -1
  43. package/dist/types/config/client-config.d.ts +16 -1
  44. package/dist/types/config/index.d.ts +2 -0
  45. package/dist/types/config/token-manager.d.ts +27 -3
  46. package/dist/types/index.d.ts +22 -1
  47. package/dist/types/model/enums.d.ts +13 -1
  48. package/dist/types/model/order-helpers.d.ts +11 -0
  49. package/dist/types/model/order.d.ts +17 -2
  50. package/dist/types/model/trade-requests.d.ts +65 -0
  51. package/dist/types/model/trade.d.ts +108 -15
  52. package/dist/types/push/push-client.d.ts +5 -3
  53. package/dist/types/quote/quote-client.d.ts +3 -1
  54. package/dist/types/trade/trade-client.d.ts +19 -7
  55. package/package.json +3 -2
@@ -84,18 +84,22 @@ export interface PreviewResult {
84
84
  message?: string;
85
85
  }
86
86
  export interface PlaceOrderResult {
87
- id: number;
87
+ /** int64 order ID — may be a string when it exceeds Number.MAX_SAFE_INTEGER */
88
+ id: number | string;
88
89
  /** Account-level order ID; the server returns snake_case `order_id` */
89
- order_id?: number;
90
- subIds?: number[];
90
+ order_id?: number | string;
91
+ subIds?: (number | string)[];
91
92
  orders?: Order[];
92
93
  }
93
94
  export interface OrderIdResult {
94
- id: number;
95
+ /** int64 order ID — may be a string when it exceeds Number.MAX_SAFE_INTEGER */
96
+ id: number | string;
95
97
  }
96
98
  export interface Transaction {
97
99
  id?: number;
98
100
  orderId?: number;
101
+ /** Numeric account ID (wire: accountId). */
102
+ accountId?: number;
99
103
  account?: string;
100
104
  symbol?: string;
101
105
  secType?: string;
@@ -103,12 +107,24 @@ export interface Transaction {
103
107
  currency?: string;
104
108
  identifier?: string;
105
109
  action?: string;
110
+ /** Order/commission price. */
106
111
  price?: number;
112
+ /** Fill price (wire: filledPrice). */
113
+ filledPrice?: number;
107
114
  quantity?: number;
108
115
  filledQuantity?: number;
116
+ /** Scale for filledQuantity (wire: filledQuantityScale). */
117
+ filledQuantityScale?: number;
118
+ /** Order amount. */
109
119
  amount?: number;
120
+ /** Fill amount (wire: filledAmount). */
121
+ filledAmount?: number;
110
122
  commission?: number;
111
- transactedAt?: number;
123
+ /** Fill timestamp string, format "YYYY-MM-DD HH:MM:SS" (server returns string, not number). */
124
+ transactedAt?: string;
125
+ /** Fill time as Unix millisecond timestamp (wire: transactionTime). */
126
+ transactionTime?: number;
127
+ /** Legacy time field. */
112
128
  time?: number;
113
129
  }
114
130
  export interface ManagedAccount {
@@ -154,15 +170,25 @@ export interface ForexOrderResult {
154
170
  rate?: number;
155
171
  submitTime?: number;
156
172
  }
173
+ /** Segment fund available item (segment_fund_available response). */
174
+ export interface SegmentFundAvailableItem {
175
+ fromSegment?: string;
176
+ currency?: string;
177
+ amount?: number;
178
+ }
179
+ /** Segment fund transfer/cancel response. */
157
180
  export interface SegmentFund {
158
- id?: string;
159
- status?: string;
181
+ id?: string | number;
160
182
  fromSegment?: string;
161
183
  toSegment?: string;
162
184
  currency?: string;
163
185
  amount?: number;
164
- availableAmount?: number;
165
- submitTime?: number;
186
+ status?: string;
187
+ statusDesc?: string;
188
+ message?: string;
189
+ settledAt?: number;
190
+ createdAt?: number;
191
+ updatedAt?: number;
166
192
  }
167
193
  export interface SegmentFundHistoryItem {
168
194
  id?: number;
@@ -171,8 +197,10 @@ export interface SegmentFundHistoryItem {
171
197
  currency?: string;
172
198
  amount?: number;
173
199
  status?: string;
174
- submitTime?: number;
175
- updateTime?: number;
200
+ statusDesc?: string;
201
+ settledAt?: number;
202
+ createdAt?: number;
203
+ updatedAt?: number;
176
204
  }
177
205
  export interface FundDetails {
178
206
  id?: number;
@@ -187,13 +215,18 @@ export interface FundDetails {
187
215
  externalId?: string;
188
216
  }
189
217
  export interface FundingHistoryItem {
190
- id?: string;
191
- segType?: string;
218
+ id?: number;
219
+ refId?: string;
220
+ type?: number;
221
+ typeDesc?: string;
192
222
  currency?: string;
193
223
  amount?: number;
224
+ businessDate?: string;
194
225
  status?: string;
195
- submitTime?: number;
196
- updateTime?: number;
226
+ statusDesc?: string;
227
+ completedStatus?: boolean;
228
+ createdAt?: number;
229
+ updatedAt?: number;
197
230
  }
198
231
  export interface TransferItem {
199
232
  symbol?: string;
@@ -233,3 +266,63 @@ export interface PositionTransferExternalRecord {
233
266
  submitTime?: number;
234
267
  updateTime?: number;
235
268
  }
269
+ /** 行权检验结果 */
270
+ export interface OptionExerciseCheckResult {
271
+ availableQuantity: number;
272
+ position: number;
273
+ stkPosition: number;
274
+ stkPositionChange: number;
275
+ stkPositionBefore: number;
276
+ stkPositionAfter: number;
277
+ symbol?: string;
278
+ }
279
+ /** 可行权期权持仓条目 */
280
+ export interface OptionExercisePosition {
281
+ contractId?: number;
282
+ symbol?: string;
283
+ stkSymbol?: string;
284
+ expireDate?: string;
285
+ strike?: string;
286
+ callPut?: string;
287
+ market?: string;
288
+ accountId?: number;
289
+ position: number;
290
+ availableQuantity: number;
291
+ }
292
+ /** 可行权持仓分页结果 */
293
+ export interface OptionExercisePositionPageResult {
294
+ pageNum: number;
295
+ pageSize: number;
296
+ itemCount: number;
297
+ pageCount: number;
298
+ items?: OptionExercisePosition[];
299
+ }
300
+ /** 行权申请记录条目 */
301
+ export interface OptionExerciseRecord {
302
+ id?: number;
303
+ contractId?: number;
304
+ symbol?: string;
305
+ stkSymbol?: string;
306
+ expireDate?: string;
307
+ strike?: string;
308
+ callPut?: string;
309
+ /** Exercise | Expire */
310
+ type?: string;
311
+ requestQuantity: number;
312
+ quantity: number;
313
+ /** New | Cancel | Success | Fail */
314
+ status?: string;
315
+ executingDate?: string;
316
+ itmRate: number;
317
+ isForce: boolean;
318
+ reason?: string;
319
+ accountId?: number;
320
+ }
321
+ /** 行权记录分页结果 */
322
+ export interface OptionExerciseRecordPageResult {
323
+ pageNum: number;
324
+ pageSize: number;
325
+ itemCount: number;
326
+ pageCount: number;
327
+ items?: OptionExerciseRecord[];
328
+ }
@@ -44,10 +44,12 @@ export declare class PushClient {
44
44
  private useFullTick;
45
45
  private socket;
46
46
  private _state;
47
+ /** Whether this connect attempt already fell back to unverified TLS */
48
+ private tlsFallback;
47
49
  private callbacks;
48
50
  /** Subscription state: subject -> Set<symbol> */
49
51
  private subscriptions;
50
- /** Account-level subscriptions */
52
+ /** Account-level subscriptions: subject -> account string used at subscribe time */
51
53
  private accountSubs;
52
54
  private heartbeatTimer;
53
55
  private reconnectTimer;
@@ -166,6 +168,6 @@ export declare class PushClient {
166
168
  unsubscribeTransaction(): void;
167
169
  /** Get current market data subscriptions */
168
170
  getSubscriptions(): Map<SubjectType, string[]>;
169
- /** Get account-level subscriptions */
170
- getAccountSubscriptions(): SubjectType[];
171
+ /** Get account-level subscriptions: subject -> account */
172
+ getAccountSubscriptions(): Map<SubjectType, string>;
171
173
  }
@@ -124,7 +124,9 @@ export declare class QuoteClient {
124
124
  getFutureBars(req: FutureBarsRequest): Promise<FutureKline[]>;
125
125
  /** Client-side paginated futures K-line fetch. */
126
126
  getFutureBarsByPage(req: FutureBarsByPageRequest): Promise<FutureKlineItem[]>;
127
- /** Futures tick trades. wire: future_tick (API v3.0) */
127
+ /** Futures tick trades. wire: future_tick (API v3.0)
128
+ * Server returns {contractCode, items:[...]}; unwrap items and backfill contractCode.
129
+ * endIndex defaults to 30 when not set (consistent with Python/Go SDK). */
128
130
  getFutureTradeTicks(req: FutureTradeTicksRequest): Promise<FutureTradeTickItem[]>;
129
131
  /** Futures depth. wire: future_depth */
130
132
  getFutureDepth(req: FutureDepthRequest): Promise<FutureDepth[]>;
@@ -11,13 +11,14 @@ import type { HttpClient } from '../client/http-client';
11
11
  import type { OrderRequest, Order } from '../model/order';
12
12
  import type { Contract } from '../model/contract';
13
13
  import type { Position } from '../model/position';
14
- import type { Asset, PrimeAsset, PreviewResult, PlaceOrderResult, OrderIdResult, Transaction, ManagedAccount, AnalyticsAsset, AggregateAssets, EstimateTradableQuantity, ForexOrderResult, SegmentFund, SegmentFundHistoryItem, FundDetails, FundingHistoryItem, PositionTransferRecord, PositionTransferDetail, PositionTransferExternalRecord } from '../model/trade';
15
- import type { OrdersRequest, GetOrderRequest, OrderTransactionsRequest, PositionsRequest, AssetsRequest, ManagedAccountsRequest, DerivativeContractsRequest, AnalyticsAssetRequest, AggregateAssetsRequest, EstimateTradableQuantityRequest, ForexOrderRequest, SegmentFundRequest, FundDetailsRequest, FundingHistoryRequest, PositionTransferRequest, PositionTransferRecordsRequest, PositionTransferDetailRequest, PositionTransferExternalRecordsRequest } from '../model/trade-requests';
14
+ import type { Asset, PrimeAsset, PreviewResult, PlaceOrderResult, OrderIdResult, Transaction, ManagedAccount, AnalyticsAsset, AggregateAssets, EstimateTradableQuantity, ForexOrderResult, SegmentFund, SegmentFundAvailableItem, SegmentFundHistoryItem, FundDetails, FundingHistoryItem, PositionTransferRecord, PositionTransferDetail, PositionTransferExternalRecord, OptionExerciseCheckResult, OptionExercisePositionPageResult, OptionExerciseRecordPageResult } from '../model/trade';
15
+ import type { OrdersRequest, GetOrderRequest, OrderTransactionsRequest, PositionsRequest, AssetsRequest, ManagedAccountsRequest, DerivativeContractsRequest, AnalyticsAssetRequest, AggregateAssetsRequest, EstimateTradableQuantityRequest, ForexOrderRequest, SegmentFundRequest, FundDetailsRequest, FundingHistoryRequest, PositionTransferRequest, PositionTransferRecordsRequest, PositionTransferDetailRequest, PositionTransferExternalRecordsRequest, OptionExerciseCheckRequest, OptionExercisePositionRequest, OptionExerciseSubmitRequest, OptionExerciseRecordsRequest, OptionExerciseCancelRequest } from '../model/trade-requests';
16
16
  /** Trading client wrapping all trade-related APIs. */
17
17
  export declare class TradeClient {
18
18
  private httpClient;
19
19
  private account;
20
- constructor(httpClient: HttpClient, account: string);
20
+ private secretKey?;
21
+ constructor(httpClient: HttpClient, account: string, secretKey?: string);
21
22
  private callInto;
22
23
  /** Strip `{items: [...]}` envelope used by most trade read endpoints. */
23
24
  private callIntoItems;
@@ -30,8 +31,8 @@ export declare class TradeClient {
30
31
  getQuoteContract(symbol: string, secType: string, expiry: string): Promise<Contract[]>;
31
32
  placeOrder(order: OrderRequest): Promise<PlaceOrderResult | undefined>;
32
33
  previewOrder(order: OrderRequest): Promise<PreviewResult | undefined>;
33
- modifyOrder(id: number, order: OrderRequest): Promise<OrderIdResult | undefined>;
34
- cancelOrder(id: number): Promise<OrderIdResult | undefined>;
34
+ modifyOrder(id: number | string, order: OrderRequest): Promise<OrderIdResult | undefined>;
35
+ cancelOrder(id: number | string, secretKey?: string): Promise<OrderIdResult | undefined>;
35
36
  /**
36
37
  * Query all historical orders. v0.4.0: optional OrdersRequest for filtering.
37
38
  *
@@ -91,7 +92,7 @@ export declare class TradeClient {
91
92
  /** Place forex order (sub-account base-currency swap). */
92
93
  placeForexOrder(req: ForexOrderRequest): Promise<ForexOrderResult | undefined>;
93
94
  /** Query amount available for inter-segment transfer. Returns array. */
94
- getSegmentFundAvailable(req: SegmentFundRequest): Promise<SegmentFund[]>;
95
+ getSegmentFundAvailable(req: SegmentFundRequest): Promise<SegmentFundAvailableItem[]>;
95
96
  /** Query segment fund transfer history. Server returns plain array (no items wrapper). */
96
97
  getSegmentFundHistory(req: SegmentFundRequest): Promise<SegmentFundHistoryItem[]>;
97
98
  /** Execute an inter-segment fund transfer. */
@@ -100,7 +101,8 @@ export declare class TradeClient {
100
101
  cancelSegmentFund(req: SegmentFundRequest): Promise<SegmentFund | undefined>;
101
102
  /** Fund-movement details (by segment / currency / fund-type). */
102
103
  getFundDetails(req: FundDetailsRequest): Promise<FundDetails[]>;
103
- /** Funding history (wire method: `transfer_fund`). */
104
+ /** Funding history (wire method: `transfer_fund`).
105
+ * Server returns bare list (no items wrapper). */
104
106
  getFundingHistory(req: FundingHistoryRequest): Promise<FundingHistoryItem[]>;
105
107
  /**
106
108
  * Internal position transfer (cross sub-account).
@@ -113,4 +115,14 @@ export declare class TradeClient {
113
115
  getPositionTransferDetail(req: PositionTransferDetailRequest): Promise<PositionTransferDetail | undefined>;
114
116
  /** Query external position transfer records (DWAC / FOP / etc.). */
115
117
  getPositionTransferExternalRecords(req: PositionTransferExternalRecordsRequest): Promise<PositionTransferExternalRecord[]>;
118
+ /** 行权检验:预估行权/作废后正股持仓变化 (wire: option_exercise_check) */
119
+ checkOptionExercise(req: OptionExerciseCheckRequest): Promise<OptionExerciseCheckResult | undefined>;
120
+ /** 查询可行权持仓列表 (wire: option_exercise_position) */
121
+ getOptionExercisePositions(req: OptionExercisePositionRequest): Promise<OptionExercisePositionPageResult | undefined>;
122
+ /** 提交行权/作废申请 (wire: option_exercise_submit) */
123
+ submitOptionExercise(req: OptionExerciseSubmitRequest): Promise<boolean>;
124
+ /** 分页查询行权记录 (wire: option_exercise_record) */
125
+ getOptionExerciseRecords(req: OptionExerciseRecordsRequest): Promise<OptionExerciseRecordPageResult | undefined>;
126
+ /** 撤销行权申请 (wire: option_exercise_cancel) */
127
+ cancelOptionExercise(req: OptionExerciseCancelRequest): Promise<boolean>;
116
128
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tigeropenapi/tigeropen",
3
- "version": "0.4.0",
3
+ "version": "0.4.6",
4
4
  "description": "Tiger Brokers OpenAPI TypeScript SDK for market data, trading, and real-time push",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",
@@ -24,7 +24,7 @@
24
24
  "url": "https://github.com/tigerfintech/openapi-typescript-sdk/issues"
25
25
  },
26
26
  "scripts": {
27
- "build": "tsc -p tsconfig.json && tsc -p tsconfig.cjs.json",
27
+ "build": "tsc -p tsconfig.json && tsc -p tsconfig.cjs.json && node scripts/fix-esm-imports.mjs",
28
28
  "build:esm": "tsc -p tsconfig.json",
29
29
  "build:cjs": "tsc -p tsconfig.cjs.json",
30
30
  "prepublishOnly": "npm run build",
@@ -50,6 +50,7 @@
50
50
  "@types/node": "^25.6.0",
51
51
  "fast-check": "^3.15.0",
52
52
  "ts-proto": "^2.11.6",
53
+ "tsx": "^4.22.4",
53
54
  "typescript": "^5.3.0",
54
55
  "vitest": "^1.2.0"
55
56
  },