You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+11-1Lines changed: 11 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,6 +4,16 @@ All notable changes to this project will be documented in this file.
4
4
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
7
+
# [4.0.3]
8
+
9
+
## Changed
10
+
11
+
- Migrate OAuth base URL from `openapi.longbridgeapp.com` to `openapi.longbridge.com`.
12
+
- Migrate CN endpoint URLs from `longportapp.cn` to `longbridge.cn`.
13
+
- Change OAuth token storage path from `~/.longbridge-openapi/` to `~/.longbridge/openapi/`.
14
+
- Update all README docs to use `openapi.longbridge.com` for OAuth registration endpoints.
15
+
- Update proto submodule with latest upstream changes (URL migration in proto comments).
16
+
7
17
# [4.0.2]
8
18
9
19
## Added
@@ -24,7 +34,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
24
34
25
35
## Added
26
36
27
-
-**OAuth 2.0** authentication for all language bindings (Rust, C, C++, Java, Python, Node.js). Use `OAuthBuilder` to run the browser flow; pass the resulting `OAuth` handle to `Config::from_oauth()`. Tokens are persisted under `~/.longbridge-openapi/tokens/<client_id>` and reused; the browser is only opened when no valid token exists.
37
+
-**OAuth 2.0** authentication for all language bindings (Rust, C, C++, Java, Python, Node.js). Use `OAuthBuilder` to run the browser flow; pass the resulting `OAuth` handle to `Config::from_oauth()`. Tokens are persisted under `~/.longbridge/openapi/tokens/<client_id>` and reused; the browser is only opened when no valid token exists.
28
38
29
39
-**Python — async callbacks:**`AsyncQuoteContext` and `AsyncTradeContext` accept async callbacks for `set_on_quote`, `set_on_depth`, `set_on_brokers`, `set_on_trades`, `set_on_candlestick`, and `set_on_order_changed`. If a callback returns a coroutine, the SDK schedules it on the asyncio loop. Sync callbacks still work as before.
30
40
-**Python — `loop_` parameter:**`AsyncQuoteContext.create()` and `AsyncTradeContext.create()` take an optional `loop_` argument. When using async callbacks, pass `loop_=asyncio.get_running_loop()` so the SDK can schedule coroutines with `asyncio.run_coroutine_threadsafe`. Omit `loop_` when using only sync callbacks.
0 commit comments