{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":472838340,"defaultBranch":"master","name":"Lean.Brokerages.Coinbase","ownerLogin":"QuantConnect","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2022-03-22T16:01:12.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/3912814?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1726775465.0","currentOid":""},"activityList":{"items":[{"before":"7c2b562b90e8510d2f117d88293af06e99a9159f","after":"cf6731c2661694ee79a0a7e69726fa55c8983ddb","ref":"refs/heads/master","pushedAt":"2024-08-22T14:28:14.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Martin-Molinero","name":null,"path":"/Martin-Molinero","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18473240?s=80&v=4"},"commit":{"message":"remove: not used Downloader (use general Lean) (#24)","shortMessageHtmlLink":"remove: not used Downloader (use general Lean) (#24)"}},{"before":"ab08b9291509d91b9af7851ea214a083538c006d","after":"7c2b562b90e8510d2f117d88293af06e99a9159f","ref":"refs/heads/master","pushedAt":"2024-08-21T21:16:25.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Martin-Molinero","name":null,"path":"/Martin-Molinero","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18473240?s=80&v=4"},"commit":{"message":"Feature: new Authentication process (#23)\n\n* feat: add additional pckges to proj\r\n\r\n* feat: REST implement of JWT auth\r\n\r\n* test:fix: ApiTests\r\n\r\n* feat: implement of JWT for WebSocket connection\r\n\r\n* refactor: new Auth in ApiClient\r\n\r\n* test:refactor: CoinbaseBrokerage tests\r\n\r\n* rename: apiKey and apiSecret to name and privateKey\r\n\r\n* rename: config name of keys\r\n\r\n* remove: extra nuget to validate JWT token\r\ntest:feat: validate JWT token\r\n\r\n* fix: missed OrderStatus in Order WS response\r\n\r\n* refactor: use aggregator instance like part of Instance\r\n\r\n* remove: extra GenerateRestToken in ApiClient\r\n\r\n* refactor: reuse constant variable to save performance\r\n\r\n* refactor: RandomHex()\r\n\r\n* remove: parameter in RandomHex\r\n\r\n* refactor: ParseKey() in ApiClient\r\n\r\n* feat: condition to prevent creating string WS response","shortMessageHtmlLink":"Feature: new Authentication process (#23)"}},{"before":"e6f02cf308e218396631d62ff11d099502794ee3","after":"ab08b9291509d91b9af7851ea214a083538c006d","ref":"refs/heads/master","pushedAt":"2024-05-02T13:19:54.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Martin-Molinero","name":null,"path":"/Martin-Molinero","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18473240?s=80&v=4"},"commit":{"message":"Feature: download specification (#21)\n\n* feat: download specification\r\n\r\n* refactor: spacing in json","shortMessageHtmlLink":"Feature: download specification (#21)"}},{"before":"285d5fcb08bc5a9a72e7137c93db1fa99c3b2db3","after":"e6f02cf308e218396631d62ff11d099502794ee3","ref":"refs/heads/master","pushedAt":"2024-02-29T18:11:57.000Z","pushType":"pr_merge","commitsCount":4,"pusher":{"login":"jhonabreul","name":"Jhonathan Abreu","path":"/jhonabreul","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25215064?s=80&v=4"},"commit":{"message":"Merge pull request #20 from jhonabreul/refactor-normalize-namespaces\n\nNormalize namespace to match all other Lean brokerages","shortMessageHtmlLink":"Merge pull request #20 from jhonabreul/refactor-normalize-namespaces"}},{"before":"cb7b0baffc492c28e281c1be0e3908180c05db51","after":"285d5fcb08bc5a9a72e7137c93db1fa99c3b2db3","ref":"refs/heads/master","pushedAt":"2024-02-27T13:12:11.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"jhonabreul","name":"Jhonathan Abreu","path":"/jhonabreul","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25215064?s=80&v=4"},"commit":{"message":"Merge pull request #19 from jhonabreul/feature-null-history-for-unsupported-securities\n\nReturn null on unsupported history and data download requests","shortMessageHtmlLink":"Merge pull request #19 from jhonabreul/feature-null-history-for-unsup…"}},{"before":"58a5f78ff062c182cafb516defaf5406e950d8bd","after":"cb7b0baffc492c28e281c1be0e3908180c05db51","ref":"refs/heads/master","pushedAt":"2024-02-21T18:24:49.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jhonabreul","name":"Jhonathan Abreu","path":"/jhonabreul","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25215064?s=80&v=4"},"commit":{"message":"Merge pull request #18 from jhonabreul/refactor-subscription-validation\n\nUse Globals for credentials access for subscription validation","shortMessageHtmlLink":"Merge pull request #18 from jhonabreul/refactor-subscription-validation"}},{"before":"586bf3b272b08cca5c10977b328f5f11b5aeab1d","after":"58a5f78ff062c182cafb516defaf5406e950d8bd","ref":"refs/heads/master","pushedAt":"2024-02-08T20:27:02.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jaredbroad","name":"Jared","path":"/jaredbroad","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2243225?s=80&v=4"},"commit":{"message":"Create coinbase.json","shortMessageHtmlLink":"Create coinbase.json"}},{"before":"9e81fc257f452a77760c2529fea1ab5fee9c3c8b","after":null,"ref":"refs/heads/bug-data-queue-handler-improvements","pushedAt":"2024-02-01T14:27:13.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"Martin-Molinero","name":null,"path":"/Martin-Molinero","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18473240?s=80&v=4"}},{"before":"7550d79fe8286b535f5bda66a30357ab9439861c","after":"586bf3b272b08cca5c10977b328f5f11b5aeab1d","ref":"refs/heads/master","pushedAt":"2024-02-01T14:27:12.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Martin-Molinero","name":null,"path":"/Martin-Molinero","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18473240?s=80&v=4"},"commit":{"message":"Filter out old trade data and don't emit invalid quotes (#17)\n\n* Filter out old trade data and don't emit invalid quotes\r\n\r\n* Filter repeated trade ids","shortMessageHtmlLink":"Filter out old trade data and don't emit invalid quotes (#17)"}},{"before":"5914b6b330285b6dd89a2ace4f218f30f9eca936","after":"9e81fc257f452a77760c2529fea1ab5fee9c3c8b","ref":"refs/heads/bug-data-queue-handler-improvements","pushedAt":"2024-02-01T14:17:05.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Martin-Molinero","name":null,"path":"/Martin-Molinero","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18473240?s=80&v=4"},"commit":{"message":"Filter repeated trade ids","shortMessageHtmlLink":"Filter repeated trade ids"}},{"before":null,"after":"5914b6b330285b6dd89a2ace4f218f30f9eca936","ref":"refs/heads/bug-data-queue-handler-improvements","pushedAt":"2024-02-01T13:16:07.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"Martin-Molinero","name":null,"path":"/Martin-Molinero","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18473240?s=80&v=4"},"commit":{"message":"Filter out old trade data and don't emit invalid quotes","shortMessageHtmlLink":"Filter out old trade data and don't emit invalid quotes"}},{"before":"2c102834dd16c241dfed00b9e54a62b468d8b0fe","after":"7550d79fe8286b535f5bda66a30357ab9439861c","ref":"refs/heads/master","pushedAt":"2024-01-05T21:49:55.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Martin-Molinero","name":null,"path":"/Martin-Molinero","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18473240?s=80&v=4"},"commit":{"message":"CoinbasePro migrate to Advanced version (#14)\n\n* refactor: authentication process\r\nremove: extra config passphrase token\r\n\r\n* feat: GetOpenOrder & GetCashBalance\r\n\r\n* refactor: reduce ByteToHexString implementation\r\n\r\n* refactor: add description to Account, Order Models\r\n\r\n* feat: handle stopLimit in OpenOrders mthd\r\n\r\n* feat: CancelOrder()\r\n\r\n* feat: mock IRestClient.BuildUri\r\n\r\n* feat: timeInForce prop in GetOpenOrders\r\n\r\n* feat: add coinbase api + client OOP, dry, kiss\r\nrefactor: new enums for deserialized object\r\n* part of implementation independently restclient\r\n\r\n* feat: missed limit order type ioc\r\n* create abstract for limit order types\r\n\r\n* feat: PlaceOrder api\r\nfeat: description to some method\r\nrefactor: change string type to enum in models\r\nrefactor: remove old code\r\n\r\n* feat: property in test's config file\r\n\r\n* fix: marketTrade nullable properties\r\n\r\n* feat: custom json converter decimal<->string\r\n\r\n* refactor: rename PlaceOrder to CreateOrder like in business logic\r\n\r\n* feat: CreateOrder return model\r\nrefactor: remove public write opportunity in some properties\r\nrefactor: clean brokerage placeOrder mthd\r\n\r\n* rename: enum failure cancel order reason\r\n\r\n* feat: handler of bad create order response\r\n\r\n* refactor: GetCashBalance()\r\n\r\n* remove: old get tick mthd\r\n\r\n* remove: old ExecuteRestRequest()\r\n\r\n* fix: add missed brokerId in PlaceOrder()\r\n\r\n* refactor/remove: old parts of app (big commit)\r\nrefactor: GDAXBrokerageFactory\r\nrefactor: initialize(), some init of prop\\variable\r\nrefactor: constructot of GDAXBrokerage\r\nfeat: CanSubscribe()\r\nremove: old public\\private rateGate\r\nremove: old Ex\r\nremove: old GetAuthenticationToken()\r\nremove: old GetTick()\r\nremove: FillMonitorAction() -> strange polling process\r\nrefactor: unify DataQueueHandler with main brokerage class\r\nrefactor: SetJob()\r\nrefactor: test to new one constructor and changes...\r\n* neat code, be happy\r\n\r\n* feat: auth WS connection\r\nrefactor: subscription on Symbol update\r\ntest: tamplate for testing ws connection\r\n\r\n* feat: handle level2 & trade change event\r\n\r\n* refactor: Additional test class\r\nrefactor: msg of log debug\r\nfeat: add mark about error response failure message\r\n\r\n* feat: add exception in Market Trade endpoint\r\n\r\n* fix: GetHistory()\r\n\r\n* refacotr: enum orderSide, missed apiPrefix\r\n\r\n* refactor: create json setting global instance\r\n\r\n* fix: price buy precision in market order\r\n\r\n* fix: Coinbase(GDAX) Tool box\r\n\r\n* remove: deprecated PriceProvider\r\n\r\n* revert: old globals.datafolder in toolbox\r\n\r\n* remove: not used enteties\r\nremove: old auth method\r\nremove: mock offline tests\r\nremove: missed xml comment\r\n\r\n* update: readme fees & supported order types\r\n\r\n* rename: gdax.brokerage -> coinbase.brokerage (huge commit)\r\n\r\n* remove: not use enum failureCancelOrderReason\r\n\r\n* feat: handle wrong http response status code\r\n\r\n* feat: description about UpdateOrder\r\n\r\n* fix: all enums register to CamelCase\r\n\r\n* test: coinbaseApi\r\n\r\n* fix: several PR remarks\r\n\r\n* feat: sync subs on ws user update\r\nfeat: add order provider\r\nfeat: add description on enteties\r\n\r\n* fix: ternary style to simple if\r\nfix: missed null checker in AuthenticateRequest + test\r\nfix: access modifier in GetSign()\r\ntest: CancelOrder with wrong OrderId in CoinbaseApi\r\nrefactor: rename method in coinbaseApi\r\nfeat: description for mthds\r\n\r\n* fix: style of error msg\r\n\r\n* feat: add sync context for ws subscriptions\r\n\r\n* refactor: reduce subs\\unsubs ws code\r\n\r\n* feat: add _sequenceNumbers variable for ws\r\n\r\n* remove: extra prop EventTime\r\n\r\n* feat: add unsubscribe proccess before subscribe\r\n\r\n* refactor: increase waitone in test\r\n\r\n* remove: random data from tests\r\nrefactor: coinbase api test to hardcode value\r\nremove: extra new rows\r\nremove: missed value in EmitQuoteTick\r\n\r\n* remove: old not used code\r\n\r\n* feat: CoinbaseOrderProperties\r\n\r\n* remove: extra parsing obj\r\n\r\n* remove: manualResetEvent which blocked WS responses\r\nremove: restore data process cuz it use base logic from class BaseWS\r\n\r\n* rename: MarketName in brokerage\r\n\r\n* feat: BrokerageUpdateOrder()\r\n\r\n* feat: handle order update from WS response\r\nrefactor: cancellatioToken\r\ntest: small fixes\r\n\r\n* fix: CoinbaseOrderProperty in PlaceOrder()\r\n\r\n* feat: uncomment ValidateSubscription()\r\nremove: Exchange Name from TradeTick()\r\n\r\n* feat: add warning WS in seq number\r\n\r\n* rename: config-url to old ones\r\n\r\n* feat: download tickers in ToolBox\r\n\r\n* remove: skipping of delisted tickers in ToolBox\r\n\r\n* refactor: resubscription process\r\n\r\n* rename: gdax -> coinbase in test\r\n\r\n* fix: coinbase paramLess ctor\r\n\r\n* feat: support usdc pair\r\n\r\n* refactor: history brokerage test\r\nfeat: add BTCUSDC symbol in history test\r\nfix: invalid url initialization in history test\r\n\r\n* remove: not uses tests\r\n\r\n* rename: market Gdax -> coinbase\r\n\r\n* refactor: gdaxModel -> coinbaseModel in factory\r\n\r\n* fix: exchangeInfoDownloader test\r\n\r\n* fix: tick clone and symbol quote\r\nfeature: add comment\r\nfix: ignore to explicit\r\n\r\n* feat: test for USD,USDC,USDT\r\n\r\n* fix: code format style","shortMessageHtmlLink":"CoinbasePro migrate to Advanced version (#14)"}},{"before":"b3ce753a09b5abcdc78eb49cd5cd8fb645e28b69","after":"acac4da8bc31f7c26cf5d93e046037c6ecccb708","ref":"refs/heads/refactor-coinbase-advance-trade","pushedAt":"2023-06-01T22:13:52.646Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"Martin-Molinero","name":null,"path":"/Martin-Molinero","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18473240?s=80&v=4"},"commit":{"message":"Refactor to support new Advance Trade Api\n\n- Fix rest api authentication\n\nSee https://docs.cloud.coinbase.com/advanced-trade-api/docs/welcome","shortMessageHtmlLink":"Refactor to support new Advance Trade Api"}},{"before":null,"after":"b3ce753a09b5abcdc78eb49cd5cd8fb645e28b69","ref":"refs/heads/refactor-coinbase-advance-trade","pushedAt":"2023-06-01T22:10:26.937Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"Martin-Molinero","name":null,"path":"/Martin-Molinero","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18473240?s=80&v=4"},"commit":{"message":"WIP\n\n- Fix authentication","shortMessageHtmlLink":"WIP"}},{"before":"258d4b4460b5b556c703f0c54b27742f1bcbe9ad","after":null,"ref":"refs/heads/bug-4342-remove-data-directory","pushedAt":"2023-05-12T21:04:40.088Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"Martin-Molinero","name":null,"path":"/Martin-Molinero","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18473240?s=80&v=4"}},{"before":"12a7bea235118894864de953dd5e1eaa50952e0e","after":"2c102834dd16c241dfed00b9e54a62b468d8b0fe","ref":"refs/heads/master","pushedAt":"2023-05-12T21:04:38.941Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"Martin-Molinero","name":null,"path":"/Martin-Molinero","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18473240?s=80&v=4"},"commit":{"message":"Merge pull request #10 from QuantConnect/bug-4342-remove-data-directory\n\nRemove 'data-directory' usage","shortMessageHtmlLink":"Merge pull request #10 from QuantConnect/bug-4342-remove-data-directory"}},{"before":null,"after":"258d4b4460b5b556c703f0c54b27742f1bcbe9ad","ref":"refs/heads/bug-4342-remove-data-directory","pushedAt":"2023-05-12T20:30:17.343Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"Martin-Molinero","name":null,"path":"/Martin-Molinero","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18473240?s=80&v=4"},"commit":{"message":"Remove 'data-directory' usage","shortMessageHtmlLink":"Remove 'data-directory' usage"}}],"hasNextPage":false,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOC0yMlQxNDoyODoxNC4wMDAwMDBazwAAAAShZOlB","startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOC0yMlQxNDoyODoxNC4wMDAwMDBazwAAAAShZOlB","endCursor":"Y3Vyc29yOnYyOpK7MjAyMy0wNS0xMlQyMDozMDoxNy4zNDM5NThazwAAAAMrygBq"}},"title":"Activity · QuantConnect/Lean.Brokerages.Coinbase"}