{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":519265820,"defaultBranch":"main","name":"ngrok-go","ownerLogin":"ngrok","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2022-07-29T15:36:58.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/10625446?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1716947981.0","currentOid":""},"activityList":{"items":[{"before":"958f1630bf9358fc8d9b8f2fd1641a0039562a57","after":"49175627fde09869bdb569e9030ba6135c63924e","ref":"refs/heads/main","pushedAt":"2024-05-29T02:10:42.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"euank","name":"Euan Kemp","path":"/euank","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2147649?s=80&v=4"},"commit":{"message":"Merge pull request #163 from euank/join-halfclose\n\nPropagate half-closes correctly in forward","shortMessageHtmlLink":"Merge pull request #163 from euank/join-halfclose"}},{"before":"c67a6d263f9cc0be4665d7254dcc260fa40218f7","after":"27de5d7dc18ce7bc2cb5226748b9df33219b38f9","ref":"refs/heads/tmp/ci/euan/join-halfclose","pushedAt":"2024-05-29T02:01:33.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"euank","name":"Euan Kemp","path":"/euank","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2147649?s=80&v=4"},"commit":{"message":"Propagate half-closes correctly in forward\n\nBefore, the following would not work as you would expect:\n\n```go\n// # One terminal\n// $ ncat --recv-only -l 9090\n\n// ngrok-go code\nfwd, err := sess.ListenAndForward(\n ctx,\n \"127.0.0.1:9090\",\n config.TCPEndpoint(),\n)\n\n// fwd.URL() is 0.tcp.jp.ngrok.io:14517 for this example\n\n// another terminal\n// $ ncat --send-only 0.tcp.jp.ngrok.io 14517 < hello-world.txt\n```\n\nWhat we would expect from the above would be for the send side to send\n\"hello world\" and exit, and then the recv side to print \"hello world\"\nand also exit.\n\nThis is what happens if you do `ncat --send-only localhost 9090`\ninstead of copying through the ngrok tcp tunnel.\n\nBefore this change, when copying through ngrok the recv side would not\nexit because the 'Close' of the connection did not get propagated\nthrough the 'join'.\n\nI've also added a unit test showing this.\n\nThank you to @abakum for originally noticing this issue and offering a\nfix over in #137.\nIn the hopes of landing this more quickly, I've written a new version, derived from\nthe internal ngrok agent's join code, which should thus be easier to\nreview etc.\n\nTo try and give credit correctly, I've maintained the original commits\nfrom #137 as well.","shortMessageHtmlLink":"Propagate half-closes correctly in forward"}},{"before":null,"after":"c67a6d263f9cc0be4665d7254dcc260fa40218f7","ref":"refs/heads/tmp/ci/euan/join-halfclose","pushedAt":"2024-05-29T01:59:41.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"euank","name":"Euan Kemp","path":"/euank","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2147649?s=80&v=4"},"commit":{"message":"Propagate half-closes correctly in forward\n\nBefore, the following would not work as you would expect:\n\n```go\n// # One terminal\n// $ ncat --recv-only -l 9090\n\n// ngrok-go code\nfwd, err := sess.ListenAndForward(\n ctx,\n \"127.0.0.1:9090\",\n config.TCPEndpoint(),\n)\n\n// fwd.URL() is 0.tcp.jp.ngrok.io:14517 for this example\n\n// another terminal\n// $ ncat --send-only 0.tcp.jp.ngrok.io 14517 < hello-world.txt\n```\n\nWhat we would expect from the above would be for the send side to send\n\"hello world\" and exit, and then the recv side to print \"hello world\"\nand also exit.\n\nThis is what happens if you do `ncat --send-only localhost 9090`\ninstead of copying through the ngrok tcp tunnel.\n\nBefore this change, when copying through ngrok the recv side would not\nexit because the 'Close' of the connection did not get propagated\nthrough the 'join'.\n\nI've also added a unit test showing this.\n\nThank you to @abakum for originally noticing this issue and offering a\nfix over in #137.\nIn the hopes of landing this more quickly, I've written a new version, derived from\nthe internal ngrok agent's join code, which should thus be easier to\nreview etc.\n\nTo try and give credit correctly, I've maintained the original commits\nfrom #137 as well.","shortMessageHtmlLink":"Propagate half-closes correctly in forward"}},{"before":"272b038b2f8b3896810efe42b5307d22975ccd6a","after":null,"ref":"refs/heads/log-adapter-licenses","pushedAt":"2024-05-28T20:05:20.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"masonj5n","name":"Mason Johnson","path":"/masonj5n","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25966620?s=80&v=4"}},{"before":"79dc3b2132ab98d3ac64ebe603216d0dbfe15f9f","after":"958f1630bf9358fc8d9b8f2fd1641a0039562a57","ref":"refs/heads/main","pushedAt":"2024-05-28T20:05:19.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"masonj5n","name":"Mason Johnson","path":"/masonj5n","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25966620?s=80&v=4"},"commit":{"message":"Merge pull request #164 from ngrok/log-adapter-licenses\n\nreplace log adapter module license symlinks with full files","shortMessageHtmlLink":"Merge pull request #164 from ngrok/log-adapter-licenses"}},{"before":null,"after":"272b038b2f8b3896810efe42b5307d22975ccd6a","ref":"refs/heads/log-adapter-licenses","pushedAt":"2024-05-28T19:50:06.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"masonj5n","name":"Mason Johnson","path":"/masonj5n","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25966620?s=80&v=4"},"commit":{"message":"replace log adapter module license symlinks with full files","shortMessageHtmlLink":"replace log adapter module license symlinks with full files"}},{"before":null,"after":"c1bc4d3f2a4a9838188e80a0468fd3818fe9a4d0","ref":"refs/heads/lotsagrok","pushedAt":"2024-05-24T16:03:04.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"jrobsonchase","name":"Josh Robson Chase","path":"/jrobsonchase","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1553581?s=80&v=4"},"commit":{"message":"basic example","shortMessageHtmlLink":"basic example"}},{"before":"c261bedf44c3b00ba263f40f35632b03d01a3a11","after":null,"ref":"refs/heads/cyrus/fasthttp-example","pushedAt":"2024-04-10T17:55:38.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"bobzilladev","name":"bobzilla","path":"/bobzilladev","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2207276?s=80&v=4"}},{"before":"2fba2d604a5c33de12b6e2926d4256c3d3cc36ed","after":"79dc3b2132ab98d3ac64ebe603216d0dbfe15f9f","ref":"refs/heads/main","pushedAt":"2024-04-10T17:55:37.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"bobzilladev","name":"bobzilla","path":"/bobzilladev","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2207276?s=80&v=4"},"commit":{"message":"Merge pull request #162 from ngrok/cyrus/fasthttp-example\n\nCyrus/fasthttp example","shortMessageHtmlLink":"Merge pull request #162 from ngrok/cyrus/fasthttp-example"}},{"before":"f92afa811a8c9ee0b04993699188958e2fe5f707","after":"c261bedf44c3b00ba263f40f35632b03d01a3a11","ref":"refs/heads/cyrus/fasthttp-example","pushedAt":"2024-04-08T18:36:19.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"bobzilladev","name":"bobzilla","path":"/bobzilladev","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2207276?s=80&v=4"},"commit":{"message":"appease linter","shortMessageHtmlLink":"appease linter"}},{"before":"c127d324a4cf1967570a2f2cbddd5bc10008bbe2","after":"f92afa811a8c9ee0b04993699188958e2fe5f707","ref":"refs/heads/cyrus/fasthttp-example","pushedAt":"2024-04-08T18:25:21.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"bobzilladev","name":"bobzilla","path":"/bobzilladev","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2207276?s=80&v=4"},"commit":{"message":"appease linter","shortMessageHtmlLink":"appease linter"}},{"before":null,"after":"c127d324a4cf1967570a2f2cbddd5bc10008bbe2","ref":"refs/heads/cyrus/fasthttp-example","pushedAt":"2024-04-08T16:23:05.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"bobzilladev","name":"bobzilla","path":"/bobzilladev","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2207276?s=80&v=4"},"commit":{"message":"appease linter","shortMessageHtmlLink":"appease linter"}},{"before":"467099c9537dec77c145450650b871c066cc8b9d","after":null,"ref":"refs/heads/bob/close-once","pushedAt":"2024-03-13T20:15:43.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"bobzilladev","name":"bobzilla","path":"/bobzilladev","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2207276?s=80&v=4"}},{"before":"3c5574136b0546cf2e5c07c603de36a8936c110b","after":"2fba2d604a5c33de12b6e2926d4256c3d3cc36ed","ref":"refs/heads/main","pushedAt":"2024-03-13T20:15:42.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"bobzilladev","name":"bobzilla","path":"/bobzilladev","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2207276?s=80&v=4"},"commit":{"message":"Merge pull request #160 from ngrok/bob/close-once\n\nprotect against failPermanent writing to closed channel","shortMessageHtmlLink":"Merge pull request #160 from ngrok/bob/close-once"}},{"before":"c71f735a1b4e23ea2fb5512478418a6ebc81600f","after":"467099c9537dec77c145450650b871c066cc8b9d","ref":"refs/heads/bob/close-once","pushedAt":"2024-03-13T20:10:02.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"bobzilladev","name":"bobzilla","path":"/bobzilladev","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2207276?s=80&v=4"},"commit":{"message":"protect against failPermanent writing to closed channel","shortMessageHtmlLink":"protect against failPermanent writing to closed channel"}},{"before":"6da7ef6d8d17a93b000c47e3cd4a26e0f783af74","after":"c71f735a1b4e23ea2fb5512478418a6ebc81600f","ref":"refs/heads/bob/close-once","pushedAt":"2024-03-13T19:46:26.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"bobzilladev","name":"bobzilla","path":"/bobzilladev","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2207276?s=80&v=4"},"commit":{"message":"protect against failPermanent writing to closed channel","shortMessageHtmlLink":"protect against failPermanent writing to closed channel"}},{"before":null,"after":"6da7ef6d8d17a93b000c47e3cd4a26e0f783af74","ref":"refs/heads/bob/close-once","pushedAt":"2024-03-13T19:39:37.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"bobzilladev","name":"bobzilla","path":"/bobzilladev","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2207276?s=80&v=4"},"commit":{"message":"protect against failPermanent writing to closed channel","shortMessageHtmlLink":"protect against failPermanent writing to closed channel"}},{"before":"37ef8c7d0fd68c660d5607cba830a01db86794c9","after":null,"ref":"refs/heads/bob/1.9.0","pushedAt":"2024-02-28T22:03:04.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"bobzilladev","name":"bobzilla","path":"/bobzilladev","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2207276?s=80&v=4"}},{"before":"f1d6f3c7fd02a021cf922ff33122f5ae856847a7","after":"3c5574136b0546cf2e5c07c603de36a8936c110b","ref":"refs/heads/main","pushedAt":"2024-02-28T22:03:04.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"bobzilladev","name":"bobzilla","path":"/bobzilladev","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2207276?s=80&v=4"},"commit":{"message":"Merge pull request #159 from ngrok/bob/1.9.0\n\n1.9.0 release","shortMessageHtmlLink":"Merge pull request #159 from ngrok/bob/1.9.0"}},{"before":null,"after":"37ef8c7d0fd68c660d5607cba830a01db86794c9","ref":"refs/heads/bob/1.9.0","pushedAt":"2024-02-28T21:59:20.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"bobzilladev","name":"bobzilla","path":"/bobzilladev","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2207276?s=80&v=4"},"commit":{"message":"1.9.0 release","shortMessageHtmlLink":"1.9.0 release"}},{"before":"83880e3b8e34af740b181fc500eec39c97d2a0fc","after":null,"ref":"refs/heads/bob/muleg","pushedAt":"2024-02-28T21:53:55.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"bobzilladev","name":"bobzilla","path":"/bobzilladev","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2207276?s=80&v=4"}},{"before":"4d959c47e21fc78e74175095f8d18a2f485cde43","after":"f1d6f3c7fd02a021cf922ff33122f5ae856847a7","ref":"refs/heads/main","pushedAt":"2024-02-28T21:53:54.000Z","pushType":"pr_merge","commitsCount":5,"pusher":{"login":"bobzilladev","name":"bobzilla","path":"/bobzilladev","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2207276?s=80&v=4"},"commit":{"message":"Merge pull request #158 from ngrok/bob/muleg\n\nmultiple session legs support","shortMessageHtmlLink":"Merge pull request #158 from ngrok/bob/muleg"}},{"before":"c5699e02de0242907332d0456fb4b39883b2a757","after":"83880e3b8e34af740b181fc500eec39c97d2a0fc","ref":"refs/heads/bob/muleg","pushedAt":"2024-02-28T18:14:19.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"bobzilladev","name":"bobzilla","path":"/bobzilladev","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2207276?s=80&v=4"},"commit":{"message":"remove public ConnectAddress","shortMessageHtmlLink":"remove public ConnectAddress"}},{"before":"70399c70d674a3534bfd2e19f5cef148fd78580e","after":"c5699e02de0242907332d0456fb4b39883b2a757","ref":"refs/heads/bob/muleg","pushedAt":"2024-02-28T18:08:21.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"bobzilladev","name":"bobzilla","path":"/bobzilladev","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2207276?s=80&v=4"},"commit":{"message":"remove public ConnectAddress","shortMessageHtmlLink":"remove public ConnectAddress"}},{"before":"e3926dfc0e95e8fa9bd058f4bd87b61ba4073dad","after":"70399c70d674a3534bfd2e19f5cef148fd78580e","ref":"refs/heads/bob/muleg","pushedAt":"2024-02-27T17:37:56.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"bobzilladev","name":"bobzilla","path":"/bobzilladev","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2207276?s=80&v=4"},"commit":{"message":"fix ConnectAddresses speling, desiredLegs commentary","shortMessageHtmlLink":"fix ConnectAddresses speling, desiredLegs commentary"}},{"before":"90c99c988488818130918bfa67fa0425e77c27e4","after":"e3926dfc0e95e8fa9bd058f4bd87b61ba4073dad","ref":"refs/heads/bob/muleg","pushedAt":"2024-02-22T22:10:57.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"bobzilladev","name":"bobzilla","path":"/bobzilladev","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2207276?s=80&v=4"},"commit":{"message":"least-latency regex and function to method","shortMessageHtmlLink":"least-latency regex and function to method"}},{"before":"6b5624730092a2e5ec3abeccb4648eaacb9fb104","after":"90c99c988488818130918bfa67fa0425e77c27e4","ref":"refs/heads/bob/muleg","pushedAt":"2024-02-22T15:52:30.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"bobzilladev","name":"bobzilla","path":"/bobzilladev","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2207276?s=80&v=4"},"commit":{"message":"multiple session legs support","shortMessageHtmlLink":"multiple session legs support"}},{"before":"a30442187a92e11e22a93b2848993d33fe5d6d22","after":"6b5624730092a2e5ec3abeccb4648eaacb9fb104","ref":"refs/heads/bob/muleg","pushedAt":"2024-02-21T22:44:53.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"bobzilladev","name":"bobzilla","path":"/bobzilladev","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2207276?s=80&v=4"},"commit":{"message":"multiple session legs support","shortMessageHtmlLink":"multiple session legs support"}},{"before":"01481e845977e137dee5d967f960ec7e6c1bcf41","after":"a30442187a92e11e22a93b2848993d33fe5d6d22","ref":"refs/heads/bob/muleg","pushedAt":"2024-02-21T22:08:48.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"bobzilladev","name":"bobzilla","path":"/bobzilladev","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2207276?s=80&v=4"},"commit":{"message":"multiple session legs support","shortMessageHtmlLink":"multiple session legs support"}},{"before":"9d8a3ae1a4f952b57e46e8c4eb04b24228810e2b","after":"01481e845977e137dee5d967f960ec7e6c1bcf41","ref":"refs/heads/bob/muleg","pushedAt":"2024-02-21T21:57:56.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"bobzilladev","name":"bobzilla","path":"/bobzilladev","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2207276?s=80&v=4"},"commit":{"message":"multiple session legs support","shortMessageHtmlLink":"multiple session legs support"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEVnH2JwA","startCursor":null,"endCursor":null}},"title":"Activity ยท ngrok/ngrok-go"}