[{"id":"36955971936","type":"IssueCommentEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":689102279,"name":"replit/river","url":"https://api.github.com/repos/replit/river"},"payload":{"action":"created","issue":{"url":"https://api.github.com/repos/replit/river/issues/64","repository_url":"https://api.github.com/repos/replit/river","labels_url":"https://api.github.com/repos/replit/river/issues/64/labels{/name}","comments_url":"https://api.github.com/repos/replit/river/issues/64/comments","events_url":"https://api.github.com/repos/replit/river/issues/64/events","html_url":"https://github.com/replit/river/pull/64","id":2212418743,"node_id":"PR_kwDOKRLdx85rAs0A","number":64,"title":"error hooks, test stability","user":{"login":"jackyzha0","id":23178940,"node_id":"MDQ6VXNlcjIzMTc4OTQw","avatar_url":"https://avatars.githubusercontent.com/u/23178940?v=4","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","html_url":"https://github.com/jackyzha0","followers_url":"https://api.github.com/users/jackyzha0/followers","following_url":"https://api.github.com/users/jackyzha0/following{/other_user}","gists_url":"https://api.github.com/users/jackyzha0/gists{/gist_id}","starred_url":"https://api.github.com/users/jackyzha0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jackyzha0/subscriptions","organizations_url":"https://api.github.com/users/jackyzha0/orgs","repos_url":"https://api.github.com/users/jackyzha0/repos","events_url":"https://api.github.com/users/jackyzha0/events{/privacy}","received_events_url":"https://api.github.com/users/jackyzha0/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":1,"created_at":"2024-03-28T06:00:19Z","updated_at":"2024-03-28T06:36:34Z","closed_at":null,"author_association":"MEMBER","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/replit/river/pulls/64","html_url":"https://github.com/replit/river/pull/64","diff_url":"https://github.com/replit/river/pull/64.diff","patch_url":"https://github.com/replit/river/pull/64.patch","merged_at":null},"body":"- improve test stability\r\n- introduce the `ProtocolErrorType` event type on the transport event dispatcher\r\n\r\ncurrently, we emit events for\r\n\r\n```ts\r\nexport const enum ProtocolErrorType {\r\n RetriesExceeded = 'conn_retry_exceeded',\r\n HandshakeFailed = 'handshake_failed',\r\n UseAfterDestroy = 'use_after_destroy',\r\n}\r\n```","reactions":{"url":"https://api.github.com/repos/replit/river/issues/64/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/replit/river/issues/64/timeline","performed_via_github_app":null,"state_reason":null},"comment":{"url":"https://api.github.com/repos/replit/river/issues/comments/2024500421","html_url":"https://github.com/replit/river/pull/64#issuecomment-2024500421","issue_url":"https://api.github.com/repos/replit/river/issues/64","id":2024500421,"node_id":"IC_kwDOKRLdx854q2zF","user":{"login":"jackyzha0","id":23178940,"node_id":"MDQ6VXNlcjIzMTc4OTQw","avatar_url":"https://avatars.githubusercontent.com/u/23178940?v=4","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","html_url":"https://github.com/jackyzha0","followers_url":"https://api.github.com/users/jackyzha0/followers","following_url":"https://api.github.com/users/jackyzha0/following{/other_user}","gists_url":"https://api.github.com/users/jackyzha0/gists{/gist_id}","starred_url":"https://api.github.com/users/jackyzha0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jackyzha0/subscriptions","organizations_url":"https://api.github.com/users/jackyzha0/orgs","repos_url":"https://api.github.com/users/jackyzha0/repos","events_url":"https://api.github.com/users/jackyzha0/events{/privacy}","received_events_url":"https://api.github.com/users/jackyzha0/received_events","type":"User","site_admin":false},"created_at":"2024-03-28T06:36:33Z","updated_at":"2024-03-28T06:36:33Z","author_association":"MEMBER","body":"@replit/micromanager merge demon hours shipping szn","reactions":{"url":"https://api.github.com/repos/replit/river/issues/comments/2024500421/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}},"public":true,"created_at":"2024-03-28T06:36:34Z","org":{"id":983194,"login":"replit","gravatar_id":"","url":"https://api.github.com/orgs/replit","avatar_url":"https://avatars.githubusercontent.com/u/983194?"}},{"id":"36955354477","type":"PushEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":689102279,"name":"replit/river","url":"https://api.github.com/repos/replit/river"},"payload":{"repository_id":689102279,"push_id":17740629601,"size":1,"distinct_size":1,"ref":"refs/heads/jackyzha0/error-hooks","head":"58111dbe3b60060729f7f2e20934c7684d78f8ff","before":"6dcf152f277318e2d6c84f846b4e79b30eb74db3","commits":[{"sha":"58111dbe3b60060729f7f2e20934c7684d78f8ff","author":{"email":"j.zhao2k19@gmail.com","name":"Jacky Zhao"},"message":"pkg: bump to 0.15.0","distinct":true,"url":"https://api.github.com/repos/replit/river/commits/58111dbe3b60060729f7f2e20934c7684d78f8ff"}]},"public":true,"created_at":"2024-03-28T06:05:09Z","org":{"id":983194,"login":"replit","gravatar_id":"","url":"https://api.github.com/orgs/replit","avatar_url":"https://avatars.githubusercontent.com/u/983194?"}},{"id":"36955265081","type":"PullRequestEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":689102279,"name":"replit/river","url":"https://api.github.com/repos/replit/river"},"payload":{"action":"opened","number":64,"pull_request":{"url":"https://api.github.com/repos/replit/river/pulls/64","id":1795345664,"node_id":"PR_kwDOKRLdx85rAs0A","html_url":"https://github.com/replit/river/pull/64","diff_url":"https://github.com/replit/river/pull/64.diff","patch_url":"https://github.com/replit/river/pull/64.patch","issue_url":"https://api.github.com/repos/replit/river/issues/64","number":64,"state":"open","locked":false,"title":"error hooks, test stability","user":{"login":"jackyzha0","id":23178940,"node_id":"MDQ6VXNlcjIzMTc4OTQw","avatar_url":"https://avatars.githubusercontent.com/u/23178940?v=4","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","html_url":"https://github.com/jackyzha0","followers_url":"https://api.github.com/users/jackyzha0/followers","following_url":"https://api.github.com/users/jackyzha0/following{/other_user}","gists_url":"https://api.github.com/users/jackyzha0/gists{/gist_id}","starred_url":"https://api.github.com/users/jackyzha0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jackyzha0/subscriptions","organizations_url":"https://api.github.com/users/jackyzha0/orgs","repos_url":"https://api.github.com/users/jackyzha0/repos","events_url":"https://api.github.com/users/jackyzha0/events{/privacy}","received_events_url":"https://api.github.com/users/jackyzha0/received_events","type":"User","site_admin":false},"body":"- improve test stability\r\n- introduce the `ProtocolErrorType` event type on the transport event dispatcher\r\n\r\ncurrently, we emit events for\r\n\r\n```ts\r\nexport const enum ProtocolErrorType {\r\n RetriesExceeded = 'conn_retry_exceeded',\r\n HandshakeFailed = 'handshake_failed',\r\n UseAfterDestroy = 'use_after_destroy',\r\n}\r\n```","created_at":"2024-03-28T06:00:19Z","updated_at":"2024-03-28T06:00:19Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/replit/river/pulls/64/commits","review_comments_url":"https://api.github.com/repos/replit/river/pulls/64/comments","review_comment_url":"https://api.github.com/repos/replit/river/pulls/comments{/number}","comments_url":"https://api.github.com/repos/replit/river/issues/64/comments","statuses_url":"https://api.github.com/repos/replit/river/statuses/6dcf152f277318e2d6c84f846b4e79b30eb74db3","head":{"label":"replit:jackyzha0/error-hooks","ref":"jackyzha0/error-hooks","sha":"6dcf152f277318e2d6c84f846b4e79b30eb74db3","user":{"login":"replit","id":983194,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk4MzE5NA==","avatar_url":"https://avatars.githubusercontent.com/u/983194?v=4","gravatar_id":"","url":"https://api.github.com/users/replit","html_url":"https://github.com/replit","followers_url":"https://api.github.com/users/replit/followers","following_url":"https://api.github.com/users/replit/following{/other_user}","gists_url":"https://api.github.com/users/replit/gists{/gist_id}","starred_url":"https://api.github.com/users/replit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/replit/subscriptions","organizations_url":"https://api.github.com/users/replit/orgs","repos_url":"https://api.github.com/users/replit/repos","events_url":"https://api.github.com/users/replit/events{/privacy}","received_events_url":"https://api.github.com/users/replit/received_events","type":"Organization","site_admin":false},"repo":{"id":689102279,"node_id":"R_kgDOKRLdxw","name":"river","full_name":"replit/river","private":false,"owner":{"login":"replit","id":983194,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk4MzE5NA==","avatar_url":"https://avatars.githubusercontent.com/u/983194?v=4","gravatar_id":"","url":"https://api.github.com/users/replit","html_url":"https://github.com/replit","followers_url":"https://api.github.com/users/replit/followers","following_url":"https://api.github.com/users/replit/following{/other_user}","gists_url":"https://api.github.com/users/replit/gists{/gist_id}","starred_url":"https://api.github.com/users/replit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/replit/subscriptions","organizations_url":"https://api.github.com/users/replit/orgs","repos_url":"https://api.github.com/users/replit/repos","events_url":"https://api.github.com/users/replit/events{/privacy}","received_events_url":"https://api.github.com/users/replit/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/replit/river","description":"🌊 Long-lived Streaming Remote Procedure Calls","fork":false,"url":"https://api.github.com/repos/replit/river","forks_url":"https://api.github.com/repos/replit/river/forks","keys_url":"https://api.github.com/repos/replit/river/keys{/key_id}","collaborators_url":"https://api.github.com/repos/replit/river/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/replit/river/teams","hooks_url":"https://api.github.com/repos/replit/river/hooks","issue_events_url":"https://api.github.com/repos/replit/river/issues/events{/number}","events_url":"https://api.github.com/repos/replit/river/events","assignees_url":"https://api.github.com/repos/replit/river/assignees{/user}","branches_url":"https://api.github.com/repos/replit/river/branches{/branch}","tags_url":"https://api.github.com/repos/replit/river/tags","blobs_url":"https://api.github.com/repos/replit/river/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/replit/river/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/replit/river/git/refs{/sha}","trees_url":"https://api.github.com/repos/replit/river/git/trees{/sha}","statuses_url":"https://api.github.com/repos/replit/river/statuses/{sha}","languages_url":"https://api.github.com/repos/replit/river/languages","stargazers_url":"https://api.github.com/repos/replit/river/stargazers","contributors_url":"https://api.github.com/repos/replit/river/contributors","subscribers_url":"https://api.github.com/repos/replit/river/subscribers","subscription_url":"https://api.github.com/repos/replit/river/subscription","commits_url":"https://api.github.com/repos/replit/river/commits{/sha}","git_commits_url":"https://api.github.com/repos/replit/river/git/commits{/sha}","comments_url":"https://api.github.com/repos/replit/river/comments{/number}","issue_comment_url":"https://api.github.com/repos/replit/river/issues/comments{/number}","contents_url":"https://api.github.com/repos/replit/river/contents/{+path}","compare_url":"https://api.github.com/repos/replit/river/compare/{base}...{head}","merges_url":"https://api.github.com/repos/replit/river/merges","archive_url":"https://api.github.com/repos/replit/river/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/replit/river/downloads","issues_url":"https://api.github.com/repos/replit/river/issues{/number}","pulls_url":"https://api.github.com/repos/replit/river/pulls{/number}","milestones_url":"https://api.github.com/repos/replit/river/milestones{/number}","notifications_url":"https://api.github.com/repos/replit/river/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/replit/river/labels{/name}","releases_url":"https://api.github.com/repos/replit/river/releases{/id}","deployments_url":"https://api.github.com/repos/replit/river/deployments","created_at":"2023-09-08T20:04:13Z","updated_at":"2024-03-25T11:40:43Z","pushed_at":"2024-03-28T06:00:19Z","git_url":"git://github.com/replit/river.git","ssh_url":"git@github.com:replit/river.git","clone_url":"https://github.com/replit/river.git","svn_url":"https://github.com/replit/river","homepage":"https://www.npmjs.com/package/@replit/river","size":586,"stargazers_count":34,"watchers_count":34,"language":"TypeScript","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":false,"forks_count":3,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":1,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["api","rpc-framework"],"visibility":"public","forks":3,"open_issues":1,"watchers":34,"default_branch":"main"}},"base":{"label":"replit:main","ref":"main","sha":"9d41af67efba291f41df699961b30d7d0d601efd","user":{"login":"replit","id":983194,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk4MzE5NA==","avatar_url":"https://avatars.githubusercontent.com/u/983194?v=4","gravatar_id":"","url":"https://api.github.com/users/replit","html_url":"https://github.com/replit","followers_url":"https://api.github.com/users/replit/followers","following_url":"https://api.github.com/users/replit/following{/other_user}","gists_url":"https://api.github.com/users/replit/gists{/gist_id}","starred_url":"https://api.github.com/users/replit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/replit/subscriptions","organizations_url":"https://api.github.com/users/replit/orgs","repos_url":"https://api.github.com/users/replit/repos","events_url":"https://api.github.com/users/replit/events{/privacy}","received_events_url":"https://api.github.com/users/replit/received_events","type":"Organization","site_admin":false},"repo":{"id":689102279,"node_id":"R_kgDOKRLdxw","name":"river","full_name":"replit/river","private":false,"owner":{"login":"replit","id":983194,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk4MzE5NA==","avatar_url":"https://avatars.githubusercontent.com/u/983194?v=4","gravatar_id":"","url":"https://api.github.com/users/replit","html_url":"https://github.com/replit","followers_url":"https://api.github.com/users/replit/followers","following_url":"https://api.github.com/users/replit/following{/other_user}","gists_url":"https://api.github.com/users/replit/gists{/gist_id}","starred_url":"https://api.github.com/users/replit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/replit/subscriptions","organizations_url":"https://api.github.com/users/replit/orgs","repos_url":"https://api.github.com/users/replit/repos","events_url":"https://api.github.com/users/replit/events{/privacy}","received_events_url":"https://api.github.com/users/replit/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/replit/river","description":"🌊 Long-lived Streaming Remote Procedure Calls","fork":false,"url":"https://api.github.com/repos/replit/river","forks_url":"https://api.github.com/repos/replit/river/forks","keys_url":"https://api.github.com/repos/replit/river/keys{/key_id}","collaborators_url":"https://api.github.com/repos/replit/river/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/replit/river/teams","hooks_url":"https://api.github.com/repos/replit/river/hooks","issue_events_url":"https://api.github.com/repos/replit/river/issues/events{/number}","events_url":"https://api.github.com/repos/replit/river/events","assignees_url":"https://api.github.com/repos/replit/river/assignees{/user}","branches_url":"https://api.github.com/repos/replit/river/branches{/branch}","tags_url":"https://api.github.com/repos/replit/river/tags","blobs_url":"https://api.github.com/repos/replit/river/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/replit/river/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/replit/river/git/refs{/sha}","trees_url":"https://api.github.com/repos/replit/river/git/trees{/sha}","statuses_url":"https://api.github.com/repos/replit/river/statuses/{sha}","languages_url":"https://api.github.com/repos/replit/river/languages","stargazers_url":"https://api.github.com/repos/replit/river/stargazers","contributors_url":"https://api.github.com/repos/replit/river/contributors","subscribers_url":"https://api.github.com/repos/replit/river/subscribers","subscription_url":"https://api.github.com/repos/replit/river/subscription","commits_url":"https://api.github.com/repos/replit/river/commits{/sha}","git_commits_url":"https://api.github.com/repos/replit/river/git/commits{/sha}","comments_url":"https://api.github.com/repos/replit/river/comments{/number}","issue_comment_url":"https://api.github.com/repos/replit/river/issues/comments{/number}","contents_url":"https://api.github.com/repos/replit/river/contents/{+path}","compare_url":"https://api.github.com/repos/replit/river/compare/{base}...{head}","merges_url":"https://api.github.com/repos/replit/river/merges","archive_url":"https://api.github.com/repos/replit/river/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/replit/river/downloads","issues_url":"https://api.github.com/repos/replit/river/issues{/number}","pulls_url":"https://api.github.com/repos/replit/river/pulls{/number}","milestones_url":"https://api.github.com/repos/replit/river/milestones{/number}","notifications_url":"https://api.github.com/repos/replit/river/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/replit/river/labels{/name}","releases_url":"https://api.github.com/repos/replit/river/releases{/id}","deployments_url":"https://api.github.com/repos/replit/river/deployments","created_at":"2023-09-08T20:04:13Z","updated_at":"2024-03-25T11:40:43Z","pushed_at":"2024-03-28T06:00:19Z","git_url":"git://github.com/replit/river.git","ssh_url":"git@github.com:replit/river.git","clone_url":"https://github.com/replit/river.git","svn_url":"https://github.com/replit/river","homepage":"https://www.npmjs.com/package/@replit/river","size":586,"stargazers_count":34,"watchers_count":34,"language":"TypeScript","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":false,"forks_count":3,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":1,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["api","rpc-framework"],"visibility":"public","forks":3,"open_issues":1,"watchers":34,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/replit/river/pulls/64"},"html":{"href":"https://github.com/replit/river/pull/64"},"issue":{"href":"https://api.github.com/repos/replit/river/issues/64"},"comments":{"href":"https://api.github.com/repos/replit/river/issues/64/comments"},"review_comments":{"href":"https://api.github.com/repos/replit/river/pulls/64/comments"},"review_comment":{"href":"https://api.github.com/repos/replit/river/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/replit/river/pulls/64/commits"},"statuses":{"href":"https://api.github.com/repos/replit/river/statuses/6dcf152f277318e2d6c84f846b4e79b30eb74db3"}},"author_association":"MEMBER","auto_merge":null,"active_lock_reason":null,"merged":false,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":null,"comments":0,"review_comments":0,"maintainer_can_modify":false,"commits":1,"additions":174,"deletions":23,"changed_files":7}},"public":true,"created_at":"2024-03-28T06:00:21Z","org":{"id":983194,"login":"replit","gravatar_id":"","url":"https://api.github.com/orgs/replit","avatar_url":"https://avatars.githubusercontent.com/u/983194?"}},{"id":"36955242751","type":"CreateEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":689102279,"name":"replit/river","url":"https://api.github.com/repos/replit/river"},"payload":{"ref":"jackyzha0/error-hooks","ref_type":"branch","master_branch":"main","description":"🌊 Long-lived Streaming Remote Procedure Calls","pusher_type":"user"},"public":true,"created_at":"2024-03-28T05:59:04Z","org":{"id":983194,"login":"replit","gravatar_id":"","url":"https://api.github.com/orgs/replit","avatar_url":"https://avatars.githubusercontent.com/u/983194?"}},{"id":"36953636124","type":"IssueCommentEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":387213208,"name":"jackyzha0/quartz","url":"https://api.github.com/repos/jackyzha0/quartz"},"payload":{"action":"created","issue":{"url":"https://api.github.com/repos/jackyzha0/quartz/issues/1039","repository_url":"https://api.github.com/repos/jackyzha0/quartz","labels_url":"https://api.github.com/repos/jackyzha0/quartz/issues/1039/labels{/name}","comments_url":"https://api.github.com/repos/jackyzha0/quartz/issues/1039/comments","events_url":"https://api.github.com/repos/jackyzha0/quartz/issues/1039/events","html_url":"https://github.com/jackyzha0/quartz/issues/1039","id":2212294921,"node_id":"I_kwDOFxRnmM6D3PEJ","number":1039,"title":"Config option to create the slug URL in lower case","user":{"login":"xnivaxhzne","id":24503078,"node_id":"MDQ6VXNlcjI0NTAzMDc4","avatar_url":"https://avatars.githubusercontent.com/u/24503078?v=4","gravatar_id":"","url":"https://api.github.com/users/xnivaxhzne","html_url":"https://github.com/xnivaxhzne","followers_url":"https://api.github.com/users/xnivaxhzne/followers","following_url":"https://api.github.com/users/xnivaxhzne/following{/other_user}","gists_url":"https://api.github.com/users/xnivaxhzne/gists{/gist_id}","starred_url":"https://api.github.com/users/xnivaxhzne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xnivaxhzne/subscriptions","organizations_url":"https://api.github.com/users/xnivaxhzne/orgs","repos_url":"https://api.github.com/users/xnivaxhzne/repos","events_url":"https://api.github.com/users/xnivaxhzne/events{/privacy}","received_events_url":"https://api.github.com/users/xnivaxhzne/received_events","type":"User","site_admin":false},"labels":[{"id":3179553347,"node_id":"MDU6TGFiZWwzMTc5NTUzMzQ3","url":"https://api.github.com/repos/jackyzha0/quartz/labels/enhancement","name":"enhancement","color":"a2eeef","default":true,"description":"New feature or request"}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":1,"created_at":"2024-03-28T03:53:20Z","updated_at":"2024-03-28T04:22:45Z","closed_at":"2024-03-28T04:22:45Z","author_association":"NONE","active_lock_reason":null,"body":"**Is your feature request related to a problem? Please describe.**\r\nI always wanted to see the URL of the post in lower case. But it is in upper case joined by `-`.\r\nExample: If my title is `Hello World`, now the URL slug is `Hello-World`. But I would like to have it as `hello-world`. Because I feel that is the convention and looks good.\r\n\r\n**Describe the solution you'd like**\r\n[Here](https://github.com/jackyzha0/quartz/blob/v4/quartz/util/path.ts#L59), we can add the following line\r\n> .toLowerCase(),\r\n\r\nI am not sure about the config.\r\n\r\n\r\n\r\n\r\n","reactions":{"url":"https://api.github.com/repos/jackyzha0/quartz/issues/1039/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/jackyzha0/quartz/issues/1039/timeline","performed_via_github_app":null,"state_reason":"completed"},"comment":{"url":"https://api.github.com/repos/jackyzha0/quartz/issues/comments/2024369267","html_url":"https://github.com/jackyzha0/quartz/issues/1039#issuecomment-2024369267","issue_url":"https://api.github.com/repos/jackyzha0/quartz/issues/1039","id":2024369267,"node_id":"IC_kwDOFxRnmM54qWxz","user":{"login":"jackyzha0","id":23178940,"node_id":"MDQ6VXNlcjIzMTc4OTQw","avatar_url":"https://avatars.githubusercontent.com/u/23178940?v=4","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","html_url":"https://github.com/jackyzha0","followers_url":"https://api.github.com/users/jackyzha0/followers","following_url":"https://api.github.com/users/jackyzha0/following{/other_user}","gists_url":"https://api.github.com/users/jackyzha0/gists{/gist_id}","starred_url":"https://api.github.com/users/jackyzha0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jackyzha0/subscriptions","organizations_url":"https://api.github.com/users/jackyzha0/orgs","repos_url":"https://api.github.com/users/jackyzha0/repos","events_url":"https://api.github.com/users/jackyzha0/events{/privacy}","received_events_url":"https://api.github.com/users/jackyzha0/received_events","type":"User","site_admin":false},"created_at":"2024-03-28T04:22:45Z","updated_at":"2024-03-28T04:22:45Z","author_association":"OWNER","body":"You can change this in your own Quartz config but some people have case-sensitive notes so I'm going to avoid making this breaking change","reactions":{"url":"https://api.github.com/repos/jackyzha0/quartz/issues/comments/2024369267/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}},"public":true,"created_at":"2024-03-28T04:22:46Z"},{"id":"36953635969","type":"IssuesEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":387213208,"name":"jackyzha0/quartz","url":"https://api.github.com/repos/jackyzha0/quartz"},"payload":{"action":"closed","issue":{"url":"https://api.github.com/repos/jackyzha0/quartz/issues/1039","repository_url":"https://api.github.com/repos/jackyzha0/quartz","labels_url":"https://api.github.com/repos/jackyzha0/quartz/issues/1039/labels{/name}","comments_url":"https://api.github.com/repos/jackyzha0/quartz/issues/1039/comments","events_url":"https://api.github.com/repos/jackyzha0/quartz/issues/1039/events","html_url":"https://github.com/jackyzha0/quartz/issues/1039","id":2212294921,"node_id":"I_kwDOFxRnmM6D3PEJ","number":1039,"title":"Config option to create the slug URL in lower case","user":{"login":"xnivaxhzne","id":24503078,"node_id":"MDQ6VXNlcjI0NTAzMDc4","avatar_url":"https://avatars.githubusercontent.com/u/24503078?v=4","gravatar_id":"","url":"https://api.github.com/users/xnivaxhzne","html_url":"https://github.com/xnivaxhzne","followers_url":"https://api.github.com/users/xnivaxhzne/followers","following_url":"https://api.github.com/users/xnivaxhzne/following{/other_user}","gists_url":"https://api.github.com/users/xnivaxhzne/gists{/gist_id}","starred_url":"https://api.github.com/users/xnivaxhzne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xnivaxhzne/subscriptions","organizations_url":"https://api.github.com/users/xnivaxhzne/orgs","repos_url":"https://api.github.com/users/xnivaxhzne/repos","events_url":"https://api.github.com/users/xnivaxhzne/events{/privacy}","received_events_url":"https://api.github.com/users/xnivaxhzne/received_events","type":"User","site_admin":false},"labels":[{"id":3179553347,"node_id":"MDU6TGFiZWwzMTc5NTUzMzQ3","url":"https://api.github.com/repos/jackyzha0/quartz/labels/enhancement","name":"enhancement","color":"a2eeef","default":true,"description":"New feature or request"}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":1,"created_at":"2024-03-28T03:53:20Z","updated_at":"2024-03-28T04:22:45Z","closed_at":"2024-03-28T04:22:45Z","author_association":"NONE","active_lock_reason":null,"body":"**Is your feature request related to a problem? Please describe.**\r\nI always wanted to see the URL of the post in lower case. But it is in upper case joined by `-`.\r\nExample: If my title is `Hello World`, now the URL slug is `Hello-World`. But I would like to have it as `hello-world`. Because I feel that is the convention and looks good.\r\n\r\n**Describe the solution you'd like**\r\n[Here](https://github.com/jackyzha0/quartz/blob/v4/quartz/util/path.ts#L59), we can add the following line\r\n> .toLowerCase(),\r\n\r\nI am not sure about the config.\r\n\r\n\r\n\r\n\r\n","reactions":{"url":"https://api.github.com/repos/jackyzha0/quartz/issues/1039/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/jackyzha0/quartz/issues/1039/timeline","performed_via_github_app":null,"state_reason":"completed"}},"public":true,"created_at":"2024-03-28T04:22:46Z"},{"id":"36945862373","type":"PushEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":689102279,"name":"replit/river","url":"https://api.github.com/repos/replit/river"},"payload":{"repository_id":689102279,"push_id":17735700350,"size":1,"distinct_size":1,"ref":"refs/heads/main","head":"9d41af67efba291f41df699961b30d7d0d601efd","before":"89ca69639f548338dfd6a3714e616fe5f65d66e4","commits":[{"sha":"9d41af67efba291f41df699961b30d7d0d601efd","author":{"email":"j.zhao2k19@gmail.com","name":"Jacky Zhao"},"message":"pkg: bump to 0.14.1 (#63)","distinct":true,"url":"https://api.github.com/repos/replit/river/commits/9d41af67efba291f41df699961b30d7d0d601efd"}]},"public":true,"created_at":"2024-03-27T20:40:17Z","org":{"id":983194,"login":"replit","gravatar_id":"","url":"https://api.github.com/orgs/replit","avatar_url":"https://avatars.githubusercontent.com/u/983194?"}},{"id":"36945862215","type":"DeleteEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":689102279,"name":"replit/river","url":"https://api.github.com/repos/replit/river"},"payload":{"ref":"jackyzha0/bump-0.14.1","ref_type":"branch","pusher_type":"user"},"public":true,"created_at":"2024-03-27T20:40:17Z","org":{"id":983194,"login":"replit","gravatar_id":"","url":"https://api.github.com/orgs/replit","avatar_url":"https://avatars.githubusercontent.com/u/983194?"}},{"id":"36945861970","type":"PullRequestEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":689102279,"name":"replit/river","url":"https://api.github.com/repos/replit/river"},"payload":{"action":"closed","number":63,"pull_request":{"url":"https://api.github.com/repos/replit/river/pulls/63","id":1794860520,"node_id":"PR_kwDOKRLdx85q-2Xo","html_url":"https://github.com/replit/river/pull/63","diff_url":"https://github.com/replit/river/pull/63.diff","patch_url":"https://github.com/replit/river/pull/63.patch","issue_url":"https://api.github.com/repos/replit/river/issues/63","number":63,"state":"closed","locked":false,"title":"pkg: bump to 0.14.1","user":{"login":"jackyzha0","id":23178940,"node_id":"MDQ6VXNlcjIzMTc4OTQw","avatar_url":"https://avatars.githubusercontent.com/u/23178940?v=4","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","html_url":"https://github.com/jackyzha0","followers_url":"https://api.github.com/users/jackyzha0/followers","following_url":"https://api.github.com/users/jackyzha0/following{/other_user}","gists_url":"https://api.github.com/users/jackyzha0/gists{/gist_id}","starred_url":"https://api.github.com/users/jackyzha0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jackyzha0/subscriptions","organizations_url":"https://api.github.com/users/jackyzha0/orgs","repos_url":"https://api.github.com/users/jackyzha0/repos","events_url":"https://api.github.com/users/jackyzha0/events{/privacy}","received_events_url":"https://api.github.com/users/jackyzha0/received_events","type":"User","site_admin":false},"body":null,"created_at":"2024-03-27T20:38:21Z","updated_at":"2024-03-27T20:40:16Z","closed_at":"2024-03-27T20:40:15Z","merged_at":"2024-03-27T20:40:15Z","merge_commit_sha":"9d41af67efba291f41df699961b30d7d0d601efd","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/replit/river/pulls/63/commits","review_comments_url":"https://api.github.com/repos/replit/river/pulls/63/comments","review_comment_url":"https://api.github.com/repos/replit/river/pulls/comments{/number}","comments_url":"https://api.github.com/repos/replit/river/issues/63/comments","statuses_url":"https://api.github.com/repos/replit/river/statuses/fbb35a68a59cc437f2fc9406fe75484c603e6e07","head":{"label":"replit:jackyzha0/bump-0.14.1","ref":"jackyzha0/bump-0.14.1","sha":"fbb35a68a59cc437f2fc9406fe75484c603e6e07","user":{"login":"replit","id":983194,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk4MzE5NA==","avatar_url":"https://avatars.githubusercontent.com/u/983194?v=4","gravatar_id":"","url":"https://api.github.com/users/replit","html_url":"https://github.com/replit","followers_url":"https://api.github.com/users/replit/followers","following_url":"https://api.github.com/users/replit/following{/other_user}","gists_url":"https://api.github.com/users/replit/gists{/gist_id}","starred_url":"https://api.github.com/users/replit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/replit/subscriptions","organizations_url":"https://api.github.com/users/replit/orgs","repos_url":"https://api.github.com/users/replit/repos","events_url":"https://api.github.com/users/replit/events{/privacy}","received_events_url":"https://api.github.com/users/replit/received_events","type":"Organization","site_admin":false},"repo":{"id":689102279,"node_id":"R_kgDOKRLdxw","name":"river","full_name":"replit/river","private":false,"owner":{"login":"replit","id":983194,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk4MzE5NA==","avatar_url":"https://avatars.githubusercontent.com/u/983194?v=4","gravatar_id":"","url":"https://api.github.com/users/replit","html_url":"https://github.com/replit","followers_url":"https://api.github.com/users/replit/followers","following_url":"https://api.github.com/users/replit/following{/other_user}","gists_url":"https://api.github.com/users/replit/gists{/gist_id}","starred_url":"https://api.github.com/users/replit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/replit/subscriptions","organizations_url":"https://api.github.com/users/replit/orgs","repos_url":"https://api.github.com/users/replit/repos","events_url":"https://api.github.com/users/replit/events{/privacy}","received_events_url":"https://api.github.com/users/replit/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/replit/river","description":"🌊 Long-lived Streaming Remote Procedure Calls","fork":false,"url":"https://api.github.com/repos/replit/river","forks_url":"https://api.github.com/repos/replit/river/forks","keys_url":"https://api.github.com/repos/replit/river/keys{/key_id}","collaborators_url":"https://api.github.com/repos/replit/river/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/replit/river/teams","hooks_url":"https://api.github.com/repos/replit/river/hooks","issue_events_url":"https://api.github.com/repos/replit/river/issues/events{/number}","events_url":"https://api.github.com/repos/replit/river/events","assignees_url":"https://api.github.com/repos/replit/river/assignees{/user}","branches_url":"https://api.github.com/repos/replit/river/branches{/branch}","tags_url":"https://api.github.com/repos/replit/river/tags","blobs_url":"https://api.github.com/repos/replit/river/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/replit/river/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/replit/river/git/refs{/sha}","trees_url":"https://api.github.com/repos/replit/river/git/trees{/sha}","statuses_url":"https://api.github.com/repos/replit/river/statuses/{sha}","languages_url":"https://api.github.com/repos/replit/river/languages","stargazers_url":"https://api.github.com/repos/replit/river/stargazers","contributors_url":"https://api.github.com/repos/replit/river/contributors","subscribers_url":"https://api.github.com/repos/replit/river/subscribers","subscription_url":"https://api.github.com/repos/replit/river/subscription","commits_url":"https://api.github.com/repos/replit/river/commits{/sha}","git_commits_url":"https://api.github.com/repos/replit/river/git/commits{/sha}","comments_url":"https://api.github.com/repos/replit/river/comments{/number}","issue_comment_url":"https://api.github.com/repos/replit/river/issues/comments{/number}","contents_url":"https://api.github.com/repos/replit/river/contents/{+path}","compare_url":"https://api.github.com/repos/replit/river/compare/{base}...{head}","merges_url":"https://api.github.com/repos/replit/river/merges","archive_url":"https://api.github.com/repos/replit/river/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/replit/river/downloads","issues_url":"https://api.github.com/repos/replit/river/issues{/number}","pulls_url":"https://api.github.com/repos/replit/river/pulls{/number}","milestones_url":"https://api.github.com/repos/replit/river/milestones{/number}","notifications_url":"https://api.github.com/repos/replit/river/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/replit/river/labels{/name}","releases_url":"https://api.github.com/repos/replit/river/releases{/id}","deployments_url":"https://api.github.com/repos/replit/river/deployments","created_at":"2023-09-08T20:04:13Z","updated_at":"2024-03-25T11:40:43Z","pushed_at":"2024-03-27T20:40:15Z","git_url":"git://github.com/replit/river.git","ssh_url":"git@github.com:replit/river.git","clone_url":"https://github.com/replit/river.git","svn_url":"https://github.com/replit/river","homepage":"https://www.npmjs.com/package/@replit/river","size":508,"stargazers_count":34,"watchers_count":34,"language":"TypeScript","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":false,"forks_count":3,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["api","rpc-framework"],"visibility":"public","forks":3,"open_issues":0,"watchers":34,"default_branch":"main"}},"base":{"label":"replit:main","ref":"main","sha":"89ca69639f548338dfd6a3714e616fe5f65d66e4","user":{"login":"replit","id":983194,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk4MzE5NA==","avatar_url":"https://avatars.githubusercontent.com/u/983194?v=4","gravatar_id":"","url":"https://api.github.com/users/replit","html_url":"https://github.com/replit","followers_url":"https://api.github.com/users/replit/followers","following_url":"https://api.github.com/users/replit/following{/other_user}","gists_url":"https://api.github.com/users/replit/gists{/gist_id}","starred_url":"https://api.github.com/users/replit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/replit/subscriptions","organizations_url":"https://api.github.com/users/replit/orgs","repos_url":"https://api.github.com/users/replit/repos","events_url":"https://api.github.com/users/replit/events{/privacy}","received_events_url":"https://api.github.com/users/replit/received_events","type":"Organization","site_admin":false},"repo":{"id":689102279,"node_id":"R_kgDOKRLdxw","name":"river","full_name":"replit/river","private":false,"owner":{"login":"replit","id":983194,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk4MzE5NA==","avatar_url":"https://avatars.githubusercontent.com/u/983194?v=4","gravatar_id":"","url":"https://api.github.com/users/replit","html_url":"https://github.com/replit","followers_url":"https://api.github.com/users/replit/followers","following_url":"https://api.github.com/users/replit/following{/other_user}","gists_url":"https://api.github.com/users/replit/gists{/gist_id}","starred_url":"https://api.github.com/users/replit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/replit/subscriptions","organizations_url":"https://api.github.com/users/replit/orgs","repos_url":"https://api.github.com/users/replit/repos","events_url":"https://api.github.com/users/replit/events{/privacy}","received_events_url":"https://api.github.com/users/replit/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/replit/river","description":"🌊 Long-lived Streaming Remote Procedure Calls","fork":false,"url":"https://api.github.com/repos/replit/river","forks_url":"https://api.github.com/repos/replit/river/forks","keys_url":"https://api.github.com/repos/replit/river/keys{/key_id}","collaborators_url":"https://api.github.com/repos/replit/river/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/replit/river/teams","hooks_url":"https://api.github.com/repos/replit/river/hooks","issue_events_url":"https://api.github.com/repos/replit/river/issues/events{/number}","events_url":"https://api.github.com/repos/replit/river/events","assignees_url":"https://api.github.com/repos/replit/river/assignees{/user}","branches_url":"https://api.github.com/repos/replit/river/branches{/branch}","tags_url":"https://api.github.com/repos/replit/river/tags","blobs_url":"https://api.github.com/repos/replit/river/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/replit/river/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/replit/river/git/refs{/sha}","trees_url":"https://api.github.com/repos/replit/river/git/trees{/sha}","statuses_url":"https://api.github.com/repos/replit/river/statuses/{sha}","languages_url":"https://api.github.com/repos/replit/river/languages","stargazers_url":"https://api.github.com/repos/replit/river/stargazers","contributors_url":"https://api.github.com/repos/replit/river/contributors","subscribers_url":"https://api.github.com/repos/replit/river/subscribers","subscription_url":"https://api.github.com/repos/replit/river/subscription","commits_url":"https://api.github.com/repos/replit/river/commits{/sha}","git_commits_url":"https://api.github.com/repos/replit/river/git/commits{/sha}","comments_url":"https://api.github.com/repos/replit/river/comments{/number}","issue_comment_url":"https://api.github.com/repos/replit/river/issues/comments{/number}","contents_url":"https://api.github.com/repos/replit/river/contents/{+path}","compare_url":"https://api.github.com/repos/replit/river/compare/{base}...{head}","merges_url":"https://api.github.com/repos/replit/river/merges","archive_url":"https://api.github.com/repos/replit/river/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/replit/river/downloads","issues_url":"https://api.github.com/repos/replit/river/issues{/number}","pulls_url":"https://api.github.com/repos/replit/river/pulls{/number}","milestones_url":"https://api.github.com/repos/replit/river/milestones{/number}","notifications_url":"https://api.github.com/repos/replit/river/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/replit/river/labels{/name}","releases_url":"https://api.github.com/repos/replit/river/releases{/id}","deployments_url":"https://api.github.com/repos/replit/river/deployments","created_at":"2023-09-08T20:04:13Z","updated_at":"2024-03-25T11:40:43Z","pushed_at":"2024-03-27T20:40:15Z","git_url":"git://github.com/replit/river.git","ssh_url":"git@github.com:replit/river.git","clone_url":"https://github.com/replit/river.git","svn_url":"https://github.com/replit/river","homepage":"https://www.npmjs.com/package/@replit/river","size":508,"stargazers_count":34,"watchers_count":34,"language":"TypeScript","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":false,"forks_count":3,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["api","rpc-framework"],"visibility":"public","forks":3,"open_issues":0,"watchers":34,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/replit/river/pulls/63"},"html":{"href":"https://github.com/replit/river/pull/63"},"issue":{"href":"https://api.github.com/repos/replit/river/issues/63"},"comments":{"href":"https://api.github.com/repos/replit/river/issues/63/comments"},"review_comments":{"href":"https://api.github.com/repos/replit/river/pulls/63/comments"},"review_comment":{"href":"https://api.github.com/repos/replit/river/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/replit/river/pulls/63/commits"},"statuses":{"href":"https://api.github.com/repos/replit/river/statuses/fbb35a68a59cc437f2fc9406fe75484c603e6e07"}},"author_association":"MEMBER","auto_merge":null,"active_lock_reason":null,"merged":true,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":{"login":"jackyzha0","id":23178940,"node_id":"MDQ6VXNlcjIzMTc4OTQw","avatar_url":"https://avatars.githubusercontent.com/u/23178940?v=4","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","html_url":"https://github.com/jackyzha0","followers_url":"https://api.github.com/users/jackyzha0/followers","following_url":"https://api.github.com/users/jackyzha0/following{/other_user}","gists_url":"https://api.github.com/users/jackyzha0/gists{/gist_id}","starred_url":"https://api.github.com/users/jackyzha0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jackyzha0/subscriptions","organizations_url":"https://api.github.com/users/jackyzha0/orgs","repos_url":"https://api.github.com/users/jackyzha0/repos","events_url":"https://api.github.com/users/jackyzha0/events{/privacy}","received_events_url":"https://api.github.com/users/jackyzha0/received_events","type":"User","site_admin":false},"comments":0,"review_comments":0,"maintainer_can_modify":false,"commits":1,"additions":3,"deletions":3,"changed_files":2}},"public":true,"created_at":"2024-03-27T20:40:16Z","org":{"id":983194,"login":"replit","gravatar_id":"","url":"https://api.github.com/orgs/replit","avatar_url":"https://avatars.githubusercontent.com/u/983194?"}},{"id":"36945816296","type":"PullRequestEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":689102279,"name":"replit/river","url":"https://api.github.com/repos/replit/river"},"payload":{"action":"opened","number":63,"pull_request":{"url":"https://api.github.com/repos/replit/river/pulls/63","id":1794860520,"node_id":"PR_kwDOKRLdx85q-2Xo","html_url":"https://github.com/replit/river/pull/63","diff_url":"https://github.com/replit/river/pull/63.diff","patch_url":"https://github.com/replit/river/pull/63.patch","issue_url":"https://api.github.com/repos/replit/river/issues/63","number":63,"state":"open","locked":false,"title":"pkg: bump to 0.14.1","user":{"login":"jackyzha0","id":23178940,"node_id":"MDQ6VXNlcjIzMTc4OTQw","avatar_url":"https://avatars.githubusercontent.com/u/23178940?v=4","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","html_url":"https://github.com/jackyzha0","followers_url":"https://api.github.com/users/jackyzha0/followers","following_url":"https://api.github.com/users/jackyzha0/following{/other_user}","gists_url":"https://api.github.com/users/jackyzha0/gists{/gist_id}","starred_url":"https://api.github.com/users/jackyzha0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jackyzha0/subscriptions","organizations_url":"https://api.github.com/users/jackyzha0/orgs","repos_url":"https://api.github.com/users/jackyzha0/repos","events_url":"https://api.github.com/users/jackyzha0/events{/privacy}","received_events_url":"https://api.github.com/users/jackyzha0/received_events","type":"User","site_admin":false},"body":null,"created_at":"2024-03-27T20:38:21Z","updated_at":"2024-03-27T20:38:21Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/replit/river/pulls/63/commits","review_comments_url":"https://api.github.com/repos/replit/river/pulls/63/comments","review_comment_url":"https://api.github.com/repos/replit/river/pulls/comments{/number}","comments_url":"https://api.github.com/repos/replit/river/issues/63/comments","statuses_url":"https://api.github.com/repos/replit/river/statuses/fbb35a68a59cc437f2fc9406fe75484c603e6e07","head":{"label":"replit:jackyzha0/bump-0.14.1","ref":"jackyzha0/bump-0.14.1","sha":"fbb35a68a59cc437f2fc9406fe75484c603e6e07","user":{"login":"replit","id":983194,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk4MzE5NA==","avatar_url":"https://avatars.githubusercontent.com/u/983194?v=4","gravatar_id":"","url":"https://api.github.com/users/replit","html_url":"https://github.com/replit","followers_url":"https://api.github.com/users/replit/followers","following_url":"https://api.github.com/users/replit/following{/other_user}","gists_url":"https://api.github.com/users/replit/gists{/gist_id}","starred_url":"https://api.github.com/users/replit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/replit/subscriptions","organizations_url":"https://api.github.com/users/replit/orgs","repos_url":"https://api.github.com/users/replit/repos","events_url":"https://api.github.com/users/replit/events{/privacy}","received_events_url":"https://api.github.com/users/replit/received_events","type":"Organization","site_admin":false},"repo":{"id":689102279,"node_id":"R_kgDOKRLdxw","name":"river","full_name":"replit/river","private":false,"owner":{"login":"replit","id":983194,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk4MzE5NA==","avatar_url":"https://avatars.githubusercontent.com/u/983194?v=4","gravatar_id":"","url":"https://api.github.com/users/replit","html_url":"https://github.com/replit","followers_url":"https://api.github.com/users/replit/followers","following_url":"https://api.github.com/users/replit/following{/other_user}","gists_url":"https://api.github.com/users/replit/gists{/gist_id}","starred_url":"https://api.github.com/users/replit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/replit/subscriptions","organizations_url":"https://api.github.com/users/replit/orgs","repos_url":"https://api.github.com/users/replit/repos","events_url":"https://api.github.com/users/replit/events{/privacy}","received_events_url":"https://api.github.com/users/replit/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/replit/river","description":"🌊 Long-lived Streaming Remote Procedure Calls","fork":false,"url":"https://api.github.com/repos/replit/river","forks_url":"https://api.github.com/repos/replit/river/forks","keys_url":"https://api.github.com/repos/replit/river/keys{/key_id}","collaborators_url":"https://api.github.com/repos/replit/river/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/replit/river/teams","hooks_url":"https://api.github.com/repos/replit/river/hooks","issue_events_url":"https://api.github.com/repos/replit/river/issues/events{/number}","events_url":"https://api.github.com/repos/replit/river/events","assignees_url":"https://api.github.com/repos/replit/river/assignees{/user}","branches_url":"https://api.github.com/repos/replit/river/branches{/branch}","tags_url":"https://api.github.com/repos/replit/river/tags","blobs_url":"https://api.github.com/repos/replit/river/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/replit/river/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/replit/river/git/refs{/sha}","trees_url":"https://api.github.com/repos/replit/river/git/trees{/sha}","statuses_url":"https://api.github.com/repos/replit/river/statuses/{sha}","languages_url":"https://api.github.com/repos/replit/river/languages","stargazers_url":"https://api.github.com/repos/replit/river/stargazers","contributors_url":"https://api.github.com/repos/replit/river/contributors","subscribers_url":"https://api.github.com/repos/replit/river/subscribers","subscription_url":"https://api.github.com/repos/replit/river/subscription","commits_url":"https://api.github.com/repos/replit/river/commits{/sha}","git_commits_url":"https://api.github.com/repos/replit/river/git/commits{/sha}","comments_url":"https://api.github.com/repos/replit/river/comments{/number}","issue_comment_url":"https://api.github.com/repos/replit/river/issues/comments{/number}","contents_url":"https://api.github.com/repos/replit/river/contents/{+path}","compare_url":"https://api.github.com/repos/replit/river/compare/{base}...{head}","merges_url":"https://api.github.com/repos/replit/river/merges","archive_url":"https://api.github.com/repos/replit/river/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/replit/river/downloads","issues_url":"https://api.github.com/repos/replit/river/issues{/number}","pulls_url":"https://api.github.com/repos/replit/river/pulls{/number}","milestones_url":"https://api.github.com/repos/replit/river/milestones{/number}","notifications_url":"https://api.github.com/repos/replit/river/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/replit/river/labels{/name}","releases_url":"https://api.github.com/repos/replit/river/releases{/id}","deployments_url":"https://api.github.com/repos/replit/river/deployments","created_at":"2023-09-08T20:04:13Z","updated_at":"2024-03-25T11:40:43Z","pushed_at":"2024-03-27T20:38:22Z","git_url":"git://github.com/replit/river.git","ssh_url":"git@github.com:replit/river.git","clone_url":"https://github.com/replit/river.git","svn_url":"https://github.com/replit/river","homepage":"https://www.npmjs.com/package/@replit/river","size":508,"stargazers_count":34,"watchers_count":34,"language":"TypeScript","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":false,"forks_count":3,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":1,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["api","rpc-framework"],"visibility":"public","forks":3,"open_issues":1,"watchers":34,"default_branch":"main"}},"base":{"label":"replit:main","ref":"main","sha":"89ca69639f548338dfd6a3714e616fe5f65d66e4","user":{"login":"replit","id":983194,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk4MzE5NA==","avatar_url":"https://avatars.githubusercontent.com/u/983194?v=4","gravatar_id":"","url":"https://api.github.com/users/replit","html_url":"https://github.com/replit","followers_url":"https://api.github.com/users/replit/followers","following_url":"https://api.github.com/users/replit/following{/other_user}","gists_url":"https://api.github.com/users/replit/gists{/gist_id}","starred_url":"https://api.github.com/users/replit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/replit/subscriptions","organizations_url":"https://api.github.com/users/replit/orgs","repos_url":"https://api.github.com/users/replit/repos","events_url":"https://api.github.com/users/replit/events{/privacy}","received_events_url":"https://api.github.com/users/replit/received_events","type":"Organization","site_admin":false},"repo":{"id":689102279,"node_id":"R_kgDOKRLdxw","name":"river","full_name":"replit/river","private":false,"owner":{"login":"replit","id":983194,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk4MzE5NA==","avatar_url":"https://avatars.githubusercontent.com/u/983194?v=4","gravatar_id":"","url":"https://api.github.com/users/replit","html_url":"https://github.com/replit","followers_url":"https://api.github.com/users/replit/followers","following_url":"https://api.github.com/users/replit/following{/other_user}","gists_url":"https://api.github.com/users/replit/gists{/gist_id}","starred_url":"https://api.github.com/users/replit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/replit/subscriptions","organizations_url":"https://api.github.com/users/replit/orgs","repos_url":"https://api.github.com/users/replit/repos","events_url":"https://api.github.com/users/replit/events{/privacy}","received_events_url":"https://api.github.com/users/replit/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/replit/river","description":"🌊 Long-lived Streaming Remote Procedure Calls","fork":false,"url":"https://api.github.com/repos/replit/river","forks_url":"https://api.github.com/repos/replit/river/forks","keys_url":"https://api.github.com/repos/replit/river/keys{/key_id}","collaborators_url":"https://api.github.com/repos/replit/river/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/replit/river/teams","hooks_url":"https://api.github.com/repos/replit/river/hooks","issue_events_url":"https://api.github.com/repos/replit/river/issues/events{/number}","events_url":"https://api.github.com/repos/replit/river/events","assignees_url":"https://api.github.com/repos/replit/river/assignees{/user}","branches_url":"https://api.github.com/repos/replit/river/branches{/branch}","tags_url":"https://api.github.com/repos/replit/river/tags","blobs_url":"https://api.github.com/repos/replit/river/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/replit/river/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/replit/river/git/refs{/sha}","trees_url":"https://api.github.com/repos/replit/river/git/trees{/sha}","statuses_url":"https://api.github.com/repos/replit/river/statuses/{sha}","languages_url":"https://api.github.com/repos/replit/river/languages","stargazers_url":"https://api.github.com/repos/replit/river/stargazers","contributors_url":"https://api.github.com/repos/replit/river/contributors","subscribers_url":"https://api.github.com/repos/replit/river/subscribers","subscription_url":"https://api.github.com/repos/replit/river/subscription","commits_url":"https://api.github.com/repos/replit/river/commits{/sha}","git_commits_url":"https://api.github.com/repos/replit/river/git/commits{/sha}","comments_url":"https://api.github.com/repos/replit/river/comments{/number}","issue_comment_url":"https://api.github.com/repos/replit/river/issues/comments{/number}","contents_url":"https://api.github.com/repos/replit/river/contents/{+path}","compare_url":"https://api.github.com/repos/replit/river/compare/{base}...{head}","merges_url":"https://api.github.com/repos/replit/river/merges","archive_url":"https://api.github.com/repos/replit/river/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/replit/river/downloads","issues_url":"https://api.github.com/repos/replit/river/issues{/number}","pulls_url":"https://api.github.com/repos/replit/river/pulls{/number}","milestones_url":"https://api.github.com/repos/replit/river/milestones{/number}","notifications_url":"https://api.github.com/repos/replit/river/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/replit/river/labels{/name}","releases_url":"https://api.github.com/repos/replit/river/releases{/id}","deployments_url":"https://api.github.com/repos/replit/river/deployments","created_at":"2023-09-08T20:04:13Z","updated_at":"2024-03-25T11:40:43Z","pushed_at":"2024-03-27T20:38:22Z","git_url":"git://github.com/replit/river.git","ssh_url":"git@github.com:replit/river.git","clone_url":"https://github.com/replit/river.git","svn_url":"https://github.com/replit/river","homepage":"https://www.npmjs.com/package/@replit/river","size":508,"stargazers_count":34,"watchers_count":34,"language":"TypeScript","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":false,"forks_count":3,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":1,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["api","rpc-framework"],"visibility":"public","forks":3,"open_issues":1,"watchers":34,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/replit/river/pulls/63"},"html":{"href":"https://github.com/replit/river/pull/63"},"issue":{"href":"https://api.github.com/repos/replit/river/issues/63"},"comments":{"href":"https://api.github.com/repos/replit/river/issues/63/comments"},"review_comments":{"href":"https://api.github.com/repos/replit/river/pulls/63/comments"},"review_comment":{"href":"https://api.github.com/repos/replit/river/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/replit/river/pulls/63/commits"},"statuses":{"href":"https://api.github.com/repos/replit/river/statuses/fbb35a68a59cc437f2fc9406fe75484c603e6e07"}},"author_association":"MEMBER","auto_merge":null,"active_lock_reason":null,"merged":false,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":null,"comments":0,"review_comments":0,"maintainer_can_modify":false,"commits":1,"additions":3,"deletions":3,"changed_files":2}},"public":true,"created_at":"2024-03-27T20:38:23Z","org":{"id":983194,"login":"replit","gravatar_id":"","url":"https://api.github.com/orgs/replit","avatar_url":"https://avatars.githubusercontent.com/u/983194?"}},{"id":"36945782674","type":"CreateEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":689102279,"name":"replit/river","url":"https://api.github.com/repos/replit/river"},"payload":{"ref":"jackyzha0/bump-0.14.1","ref_type":"branch","master_branch":"main","description":"🌊 Long-lived Streaming Remote Procedure Calls","pusher_type":"user"},"public":true,"created_at":"2024-03-27T20:37:04Z","org":{"id":983194,"login":"replit","gravatar_id":"","url":"https://api.github.com/orgs/replit","avatar_url":"https://avatars.githubusercontent.com/u/983194?"}},{"id":"36945753000","type":"PushEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":689102279,"name":"replit/river","url":"https://api.github.com/repos/replit/river"},"payload":{"repository_id":689102279,"push_id":17735648930,"size":1,"distinct_size":1,"ref":"refs/heads/main","head":"89ca69639f548338dfd6a3714e616fe5f65d66e4","before":"8c4538f0006ac3f3f28c07ee4f9eb6505744a214","commits":[{"sha":"89ca69639f548338dfd6a3714e616fe5f65d66e4","author":{"email":"bradymadden97@gmail.com","name":"Brady Madden"},"message":"Allow subscriptions to provide cleanup functions from handler (#62)\n\n* cleanup\r\n\r\n* fix","distinct":true,"url":"https://api.github.com/repos/replit/river/commits/89ca69639f548338dfd6a3714e616fe5f65d66e4"}]},"public":true,"created_at":"2024-03-27T20:35:53Z","org":{"id":983194,"login":"replit","gravatar_id":"","url":"https://api.github.com/orgs/replit","avatar_url":"https://avatars.githubusercontent.com/u/983194?"}},{"id":"36945752821","type":"DeleteEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":689102279,"name":"replit/river","url":"https://api.github.com/repos/replit/river"},"payload":{"ref":"bm/cleanup-subscriptions","ref_type":"branch","pusher_type":"user"},"public":true,"created_at":"2024-03-27T20:35:52Z","org":{"id":983194,"login":"replit","gravatar_id":"","url":"https://api.github.com/orgs/replit","avatar_url":"https://avatars.githubusercontent.com/u/983194?"}},{"id":"36945752643","type":"PullRequestEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":689102279,"name":"replit/river","url":"https://api.github.com/repos/replit/river"},"payload":{"action":"closed","number":62,"pull_request":{"url":"https://api.github.com/repos/replit/river/pulls/62","id":1794724603,"node_id":"PR_kwDOKRLdx85q-VL7","html_url":"https://github.com/replit/river/pull/62","diff_url":"https://github.com/replit/river/pull/62.diff","patch_url":"https://github.com/replit/river/pull/62.patch","issue_url":"https://api.github.com/repos/replit/river/issues/62","number":62,"state":"closed","locked":false,"title":"Allow subscriptions to provide cleanup functions from handler","user":{"login":"bradymadden97","id":16962017,"node_id":"MDQ6VXNlcjE2OTYyMDE3","avatar_url":"https://avatars.githubusercontent.com/u/16962017?v=4","gravatar_id":"","url":"https://api.github.com/users/bradymadden97","html_url":"https://github.com/bradymadden97","followers_url":"https://api.github.com/users/bradymadden97/followers","following_url":"https://api.github.com/users/bradymadden97/following{/other_user}","gists_url":"https://api.github.com/users/bradymadden97/gists{/gist_id}","starred_url":"https://api.github.com/users/bradymadden97/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bradymadden97/subscriptions","organizations_url":"https://api.github.com/users/bradymadden97/orgs","repos_url":"https://api.github.com/users/bradymadden97/repos","events_url":"https://api.github.com/users/bradymadden97/events{/privacy}","received_events_url":"https://api.github.com/users/bradymadden97/received_events","type":"User","site_admin":false},"body":"See discussion here: https://replit.slack.com/archives/C05GZ4NRSJ3/p1711562720244819\r\n\r\nOtherwise we could have listeners set up within subscription handlers that we don't have a good way of cleaning up. Now, subscriptions can return a disposal callback `() => void` that gets called when the subscription ends.\r\n\r\n I didn't implement this for streams or uploads yet because there is another way of handling it for now:\r\n ```\r\nfor await (const msg of input) {\r\n // processing...\r\n}\r\n\r\n\r\n// by the time we get here we're closed, so you can clean up right here\r\n```\r\n\r\n\r\n\r\n\r\n```\r\n~/replit/river [main] \r\n> npm run test\r\n\r\n> @replit/river@0.14.0 test\r\n> vitest --test-timeout=500\r\n\r\n\r\n DEV v1.3.1 /Users/brady/replit/river\r\n\r\n ✓ transport/impls/ws/ws.test.ts (3)\r\n ✓ __tests__/disconnects.test.ts (16)\r\n ✓ __tests__/cleanup.test.ts (24)\r\n ✓ transport/impls/ws/ws.test.ts (3)\r\n ✓ __tests__/disconnects.test.ts (16)\r\n ✓ transport/impls/ws/ws.test.ts (3)\r\n ✓ __tests__/disconnects.test.ts (16)\r\n ✓ __tests__/cleanup.test.ts (24)\r\n ✓ __tests__/e2e.test.ts (48)\r\n ✓ transport/transport.test.ts (40) 453ms\r\n ✓ __tests__/negative.test.ts (2)\r\n ✓ transport/transforms/messageFraming.test.ts (6)\r\n ✓ __tests__/proxy.test.ts (1)\r\n ✓ transport/impls/uds/uds.test.ts (1)\r\n ✓ codec/codec.test.ts (12)\r\n ✓ __tests__/handler.test.ts (9)\r\n ✓ __tests__/serialize.test.ts (3)\r\n ✓ transport/message.test.ts (7)\r\n ✓ __tests__/typescript-stress.test.ts (2)\r\n ✓ __tests__/fixtures/observable.test.ts (4)\r\n\r\n Test Files 15 passed (15)\r\n Tests 178 passed (178)\r\n Start at 15:12:30\r\n Duration 1.19s (transform 378ms, setup 2ms, collect 2.20s, tests 1.11s, environment 2ms, prepare 878ms)\r\n```","created_at":"2024-03-27T19:15:16Z","updated_at":"2024-03-27T20:35:52Z","closed_at":"2024-03-27T20:35:51Z","merged_at":"2024-03-27T20:35:51Z","merge_commit_sha":"89ca69639f548338dfd6a3714e616fe5f65d66e4","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/replit/river/pulls/62/commits","review_comments_url":"https://api.github.com/repos/replit/river/pulls/62/comments","review_comment_url":"https://api.github.com/repos/replit/river/pulls/comments{/number}","comments_url":"https://api.github.com/repos/replit/river/issues/62/comments","statuses_url":"https://api.github.com/repos/replit/river/statuses/9698b7d69cdb06c4a4d955031590b2d60b2eb89f","head":{"label":"replit:bm/cleanup-subscriptions","ref":"bm/cleanup-subscriptions","sha":"9698b7d69cdb06c4a4d955031590b2d60b2eb89f","user":{"login":"replit","id":983194,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk4MzE5NA==","avatar_url":"https://avatars.githubusercontent.com/u/983194?v=4","gravatar_id":"","url":"https://api.github.com/users/replit","html_url":"https://github.com/replit","followers_url":"https://api.github.com/users/replit/followers","following_url":"https://api.github.com/users/replit/following{/other_user}","gists_url":"https://api.github.com/users/replit/gists{/gist_id}","starred_url":"https://api.github.com/users/replit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/replit/subscriptions","organizations_url":"https://api.github.com/users/replit/orgs","repos_url":"https://api.github.com/users/replit/repos","events_url":"https://api.github.com/users/replit/events{/privacy}","received_events_url":"https://api.github.com/users/replit/received_events","type":"Organization","site_admin":false},"repo":{"id":689102279,"node_id":"R_kgDOKRLdxw","name":"river","full_name":"replit/river","private":false,"owner":{"login":"replit","id":983194,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk4MzE5NA==","avatar_url":"https://avatars.githubusercontent.com/u/983194?v=4","gravatar_id":"","url":"https://api.github.com/users/replit","html_url":"https://github.com/replit","followers_url":"https://api.github.com/users/replit/followers","following_url":"https://api.github.com/users/replit/following{/other_user}","gists_url":"https://api.github.com/users/replit/gists{/gist_id}","starred_url":"https://api.github.com/users/replit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/replit/subscriptions","organizations_url":"https://api.github.com/users/replit/orgs","repos_url":"https://api.github.com/users/replit/repos","events_url":"https://api.github.com/users/replit/events{/privacy}","received_events_url":"https://api.github.com/users/replit/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/replit/river","description":"🌊 Long-lived Streaming Remote Procedure Calls","fork":false,"url":"https://api.github.com/repos/replit/river","forks_url":"https://api.github.com/repos/replit/river/forks","keys_url":"https://api.github.com/repos/replit/river/keys{/key_id}","collaborators_url":"https://api.github.com/repos/replit/river/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/replit/river/teams","hooks_url":"https://api.github.com/repos/replit/river/hooks","issue_events_url":"https://api.github.com/repos/replit/river/issues/events{/number}","events_url":"https://api.github.com/repos/replit/river/events","assignees_url":"https://api.github.com/repos/replit/river/assignees{/user}","branches_url":"https://api.github.com/repos/replit/river/branches{/branch}","tags_url":"https://api.github.com/repos/replit/river/tags","blobs_url":"https://api.github.com/repos/replit/river/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/replit/river/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/replit/river/git/refs{/sha}","trees_url":"https://api.github.com/repos/replit/river/git/trees{/sha}","statuses_url":"https://api.github.com/repos/replit/river/statuses/{sha}","languages_url":"https://api.github.com/repos/replit/river/languages","stargazers_url":"https://api.github.com/repos/replit/river/stargazers","contributors_url":"https://api.github.com/repos/replit/river/contributors","subscribers_url":"https://api.github.com/repos/replit/river/subscribers","subscription_url":"https://api.github.com/repos/replit/river/subscription","commits_url":"https://api.github.com/repos/replit/river/commits{/sha}","git_commits_url":"https://api.github.com/repos/replit/river/git/commits{/sha}","comments_url":"https://api.github.com/repos/replit/river/comments{/number}","issue_comment_url":"https://api.github.com/repos/replit/river/issues/comments{/number}","contents_url":"https://api.github.com/repos/replit/river/contents/{+path}","compare_url":"https://api.github.com/repos/replit/river/compare/{base}...{head}","merges_url":"https://api.github.com/repos/replit/river/merges","archive_url":"https://api.github.com/repos/replit/river/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/replit/river/downloads","issues_url":"https://api.github.com/repos/replit/river/issues{/number}","pulls_url":"https://api.github.com/repos/replit/river/pulls{/number}","milestones_url":"https://api.github.com/repos/replit/river/milestones{/number}","notifications_url":"https://api.github.com/repos/replit/river/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/replit/river/labels{/name}","releases_url":"https://api.github.com/repos/replit/river/releases{/id}","deployments_url":"https://api.github.com/repos/replit/river/deployments","created_at":"2023-09-08T20:04:13Z","updated_at":"2024-03-25T11:40:43Z","pushed_at":"2024-03-27T20:35:51Z","git_url":"git://github.com/replit/river.git","ssh_url":"git@github.com:replit/river.git","clone_url":"https://github.com/replit/river.git","svn_url":"https://github.com/replit/river","homepage":"https://www.npmjs.com/package/@replit/river","size":508,"stargazers_count":34,"watchers_count":34,"language":"TypeScript","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":false,"forks_count":3,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["api","rpc-framework"],"visibility":"public","forks":3,"open_issues":0,"watchers":34,"default_branch":"main"}},"base":{"label":"replit:main","ref":"main","sha":"8c4538f0006ac3f3f28c07ee4f9eb6505744a214","user":{"login":"replit","id":983194,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk4MzE5NA==","avatar_url":"https://avatars.githubusercontent.com/u/983194?v=4","gravatar_id":"","url":"https://api.github.com/users/replit","html_url":"https://github.com/replit","followers_url":"https://api.github.com/users/replit/followers","following_url":"https://api.github.com/users/replit/following{/other_user}","gists_url":"https://api.github.com/users/replit/gists{/gist_id}","starred_url":"https://api.github.com/users/replit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/replit/subscriptions","organizations_url":"https://api.github.com/users/replit/orgs","repos_url":"https://api.github.com/users/replit/repos","events_url":"https://api.github.com/users/replit/events{/privacy}","received_events_url":"https://api.github.com/users/replit/received_events","type":"Organization","site_admin":false},"repo":{"id":689102279,"node_id":"R_kgDOKRLdxw","name":"river","full_name":"replit/river","private":false,"owner":{"login":"replit","id":983194,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk4MzE5NA==","avatar_url":"https://avatars.githubusercontent.com/u/983194?v=4","gravatar_id":"","url":"https://api.github.com/users/replit","html_url":"https://github.com/replit","followers_url":"https://api.github.com/users/replit/followers","following_url":"https://api.github.com/users/replit/following{/other_user}","gists_url":"https://api.github.com/users/replit/gists{/gist_id}","starred_url":"https://api.github.com/users/replit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/replit/subscriptions","organizations_url":"https://api.github.com/users/replit/orgs","repos_url":"https://api.github.com/users/replit/repos","events_url":"https://api.github.com/users/replit/events{/privacy}","received_events_url":"https://api.github.com/users/replit/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/replit/river","description":"🌊 Long-lived Streaming Remote Procedure Calls","fork":false,"url":"https://api.github.com/repos/replit/river","forks_url":"https://api.github.com/repos/replit/river/forks","keys_url":"https://api.github.com/repos/replit/river/keys{/key_id}","collaborators_url":"https://api.github.com/repos/replit/river/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/replit/river/teams","hooks_url":"https://api.github.com/repos/replit/river/hooks","issue_events_url":"https://api.github.com/repos/replit/river/issues/events{/number}","events_url":"https://api.github.com/repos/replit/river/events","assignees_url":"https://api.github.com/repos/replit/river/assignees{/user}","branches_url":"https://api.github.com/repos/replit/river/branches{/branch}","tags_url":"https://api.github.com/repos/replit/river/tags","blobs_url":"https://api.github.com/repos/replit/river/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/replit/river/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/replit/river/git/refs{/sha}","trees_url":"https://api.github.com/repos/replit/river/git/trees{/sha}","statuses_url":"https://api.github.com/repos/replit/river/statuses/{sha}","languages_url":"https://api.github.com/repos/replit/river/languages","stargazers_url":"https://api.github.com/repos/replit/river/stargazers","contributors_url":"https://api.github.com/repos/replit/river/contributors","subscribers_url":"https://api.github.com/repos/replit/river/subscribers","subscription_url":"https://api.github.com/repos/replit/river/subscription","commits_url":"https://api.github.com/repos/replit/river/commits{/sha}","git_commits_url":"https://api.github.com/repos/replit/river/git/commits{/sha}","comments_url":"https://api.github.com/repos/replit/river/comments{/number}","issue_comment_url":"https://api.github.com/repos/replit/river/issues/comments{/number}","contents_url":"https://api.github.com/repos/replit/river/contents/{+path}","compare_url":"https://api.github.com/repos/replit/river/compare/{base}...{head}","merges_url":"https://api.github.com/repos/replit/river/merges","archive_url":"https://api.github.com/repos/replit/river/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/replit/river/downloads","issues_url":"https://api.github.com/repos/replit/river/issues{/number}","pulls_url":"https://api.github.com/repos/replit/river/pulls{/number}","milestones_url":"https://api.github.com/repos/replit/river/milestones{/number}","notifications_url":"https://api.github.com/repos/replit/river/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/replit/river/labels{/name}","releases_url":"https://api.github.com/repos/replit/river/releases{/id}","deployments_url":"https://api.github.com/repos/replit/river/deployments","created_at":"2023-09-08T20:04:13Z","updated_at":"2024-03-25T11:40:43Z","pushed_at":"2024-03-27T20:35:51Z","git_url":"git://github.com/replit/river.git","ssh_url":"git@github.com:replit/river.git","clone_url":"https://github.com/replit/river.git","svn_url":"https://github.com/replit/river","homepage":"https://www.npmjs.com/package/@replit/river","size":508,"stargazers_count":34,"watchers_count":34,"language":"TypeScript","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":false,"forks_count":3,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["api","rpc-framework"],"visibility":"public","forks":3,"open_issues":0,"watchers":34,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/replit/river/pulls/62"},"html":{"href":"https://github.com/replit/river/pull/62"},"issue":{"href":"https://api.github.com/repos/replit/river/issues/62"},"comments":{"href":"https://api.github.com/repos/replit/river/issues/62/comments"},"review_comments":{"href":"https://api.github.com/repos/replit/river/pulls/62/comments"},"review_comment":{"href":"https://api.github.com/repos/replit/river/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/replit/river/pulls/62/commits"},"statuses":{"href":"https://api.github.com/repos/replit/river/statuses/9698b7d69cdb06c4a4d955031590b2d60b2eb89f"}},"author_association":"CONTRIBUTOR","auto_merge":null,"active_lock_reason":null,"merged":true,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":{"login":"jackyzha0","id":23178940,"node_id":"MDQ6VXNlcjIzMTc4OTQw","avatar_url":"https://avatars.githubusercontent.com/u/23178940?v=4","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","html_url":"https://github.com/jackyzha0","followers_url":"https://api.github.com/users/jackyzha0/followers","following_url":"https://api.github.com/users/jackyzha0/following{/other_user}","gists_url":"https://api.github.com/users/jackyzha0/gists{/gist_id}","starred_url":"https://api.github.com/users/jackyzha0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jackyzha0/subscriptions","organizations_url":"https://api.github.com/users/jackyzha0/orgs","repos_url":"https://api.github.com/users/jackyzha0/repos","events_url":"https://api.github.com/users/jackyzha0/events{/privacy}","received_events_url":"https://api.github.com/users/jackyzha0/received_events","type":"User","site_admin":false},"comments":1,"review_comments":0,"maintainer_can_modify":false,"commits":2,"additions":24,"deletions":3,"changed_files":6}},"public":true,"created_at":"2024-03-27T20:35:52Z","org":{"id":983194,"login":"replit","gravatar_id":"","url":"https://api.github.com/orgs/replit","avatar_url":"https://avatars.githubusercontent.com/u/983194?"}},{"id":"36943883722","type":"PullRequestReviewEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":689102279,"name":"replit/river","url":"https://api.github.com/repos/replit/river"},"payload":{"action":"created","review":{"id":1964562993,"node_id":"PRR_kwDOKRLdx851GNox","user":{"login":"jackyzha0","id":23178940,"node_id":"MDQ6VXNlcjIzMTc4OTQw","avatar_url":"https://avatars.githubusercontent.com/u/23178940?v=4","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","html_url":"https://github.com/jackyzha0","followers_url":"https://api.github.com/users/jackyzha0/followers","following_url":"https://api.github.com/users/jackyzha0/following{/other_user}","gists_url":"https://api.github.com/users/jackyzha0/gists{/gist_id}","starred_url":"https://api.github.com/users/jackyzha0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jackyzha0/subscriptions","organizations_url":"https://api.github.com/users/jackyzha0/orgs","repos_url":"https://api.github.com/users/jackyzha0/repos","events_url":"https://api.github.com/users/jackyzha0/events{/privacy}","received_events_url":"https://api.github.com/users/jackyzha0/received_events","type":"User","site_admin":false},"body":"","commit_id":"6626118b9a17737602dc15af9133b7cf84681847","submitted_at":"2024-03-27T19:26:50Z","state":"approved","html_url":"https://github.com/replit/river/pull/62#pullrequestreview-1964562993","pull_request_url":"https://api.github.com/repos/replit/river/pulls/62","author_association":"MEMBER","_links":{"html":{"href":"https://github.com/replit/river/pull/62#pullrequestreview-1964562993"},"pull_request":{"href":"https://api.github.com/repos/replit/river/pulls/62"}}},"pull_request":{"url":"https://api.github.com/repos/replit/river/pulls/62","id":1794724603,"node_id":"PR_kwDOKRLdx85q-VL7","html_url":"https://github.com/replit/river/pull/62","diff_url":"https://github.com/replit/river/pull/62.diff","patch_url":"https://github.com/replit/river/pull/62.patch","issue_url":"https://api.github.com/repos/replit/river/issues/62","number":62,"state":"open","locked":false,"title":"Allow subscriptions to provide cleanup functions from handler","user":{"login":"bradymadden97","id":16962017,"node_id":"MDQ6VXNlcjE2OTYyMDE3","avatar_url":"https://avatars.githubusercontent.com/u/16962017?v=4","gravatar_id":"","url":"https://api.github.com/users/bradymadden97","html_url":"https://github.com/bradymadden97","followers_url":"https://api.github.com/users/bradymadden97/followers","following_url":"https://api.github.com/users/bradymadden97/following{/other_user}","gists_url":"https://api.github.com/users/bradymadden97/gists{/gist_id}","starred_url":"https://api.github.com/users/bradymadden97/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bradymadden97/subscriptions","organizations_url":"https://api.github.com/users/bradymadden97/orgs","repos_url":"https://api.github.com/users/bradymadden97/repos","events_url":"https://api.github.com/users/bradymadden97/events{/privacy}","received_events_url":"https://api.github.com/users/bradymadden97/received_events","type":"User","site_admin":false},"body":"See discussion here: https://replit.slack.com/archives/C05GZ4NRSJ3/p1711562720244819\r\n\r\nOtherwise we could have listeners set up within subscription handlers that we don't have a good way of cleaning up. Now, subscriptions can return a disposal callback `() => void` that gets called when the subscription ends.\r\n\r\n I didn't implement this for streams or uploads yet because there is another way of handling it for now:\r\n ```\r\nfor await (const msg of input) {\r\n // processing...\r\n}\r\n\r\n\r\n// by the time we get here we're closed, so you can clean up right here\r\n```\r\n\r\n\r\n\r\n\r\n```\r\n~/replit/river [main] \r\n> npm run test\r\n\r\n> @replit/river@0.14.0 test\r\n> vitest --test-timeout=500\r\n\r\n\r\n DEV v1.3.1 /Users/brady/replit/river\r\n\r\n ✓ transport/impls/ws/ws.test.ts (3)\r\n ✓ __tests__/disconnects.test.ts (16)\r\n ✓ __tests__/cleanup.test.ts (24)\r\n ✓ transport/impls/ws/ws.test.ts (3)\r\n ✓ __tests__/disconnects.test.ts (16)\r\n ✓ transport/impls/ws/ws.test.ts (3)\r\n ✓ __tests__/disconnects.test.ts (16)\r\n ✓ __tests__/cleanup.test.ts (24)\r\n ✓ __tests__/e2e.test.ts (48)\r\n ✓ transport/transport.test.ts (40) 453ms\r\n ✓ __tests__/negative.test.ts (2)\r\n ✓ transport/transforms/messageFraming.test.ts (6)\r\n ✓ __tests__/proxy.test.ts (1)\r\n ✓ transport/impls/uds/uds.test.ts (1)\r\n ✓ codec/codec.test.ts (12)\r\n ✓ __tests__/handler.test.ts (9)\r\n ✓ __tests__/serialize.test.ts (3)\r\n ✓ transport/message.test.ts (7)\r\n ✓ __tests__/typescript-stress.test.ts (2)\r\n ✓ __tests__/fixtures/observable.test.ts (4)\r\n\r\n Test Files 15 passed (15)\r\n Tests 178 passed (178)\r\n Start at 15:12:30\r\n Duration 1.19s (transform 378ms, setup 2ms, collect 2.20s, tests 1.11s, environment 2ms, prepare 878ms)\r\n```","created_at":"2024-03-27T19:15:16Z","updated_at":"2024-03-27T19:26:50Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ce4a4ffb1e406b365a02ab76686d45d612938968","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/replit/river/pulls/62/commits","review_comments_url":"https://api.github.com/repos/replit/river/pulls/62/comments","review_comment_url":"https://api.github.com/repos/replit/river/pulls/comments{/number}","comments_url":"https://api.github.com/repos/replit/river/issues/62/comments","statuses_url":"https://api.github.com/repos/replit/river/statuses/6626118b9a17737602dc15af9133b7cf84681847","head":{"label":"replit:bm/cleanup-subscriptions","ref":"bm/cleanup-subscriptions","sha":"6626118b9a17737602dc15af9133b7cf84681847","user":{"login":"replit","id":983194,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk4MzE5NA==","avatar_url":"https://avatars.githubusercontent.com/u/983194?v=4","gravatar_id":"","url":"https://api.github.com/users/replit","html_url":"https://github.com/replit","followers_url":"https://api.github.com/users/replit/followers","following_url":"https://api.github.com/users/replit/following{/other_user}","gists_url":"https://api.github.com/users/replit/gists{/gist_id}","starred_url":"https://api.github.com/users/replit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/replit/subscriptions","organizations_url":"https://api.github.com/users/replit/orgs","repos_url":"https://api.github.com/users/replit/repos","events_url":"https://api.github.com/users/replit/events{/privacy}","received_events_url":"https://api.github.com/users/replit/received_events","type":"Organization","site_admin":false},"repo":{"id":689102279,"node_id":"R_kgDOKRLdxw","name":"river","full_name":"replit/river","private":false,"owner":{"login":"replit","id":983194,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk4MzE5NA==","avatar_url":"https://avatars.githubusercontent.com/u/983194?v=4","gravatar_id":"","url":"https://api.github.com/users/replit","html_url":"https://github.com/replit","followers_url":"https://api.github.com/users/replit/followers","following_url":"https://api.github.com/users/replit/following{/other_user}","gists_url":"https://api.github.com/users/replit/gists{/gist_id}","starred_url":"https://api.github.com/users/replit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/replit/subscriptions","organizations_url":"https://api.github.com/users/replit/orgs","repos_url":"https://api.github.com/users/replit/repos","events_url":"https://api.github.com/users/replit/events{/privacy}","received_events_url":"https://api.github.com/users/replit/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/replit/river","description":"🌊 Long-lived Streaming Remote Procedure Calls","fork":false,"url":"https://api.github.com/repos/replit/river","forks_url":"https://api.github.com/repos/replit/river/forks","keys_url":"https://api.github.com/repos/replit/river/keys{/key_id}","collaborators_url":"https://api.github.com/repos/replit/river/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/replit/river/teams","hooks_url":"https://api.github.com/repos/replit/river/hooks","issue_events_url":"https://api.github.com/repos/replit/river/issues/events{/number}","events_url":"https://api.github.com/repos/replit/river/events","assignees_url":"https://api.github.com/repos/replit/river/assignees{/user}","branches_url":"https://api.github.com/repos/replit/river/branches{/branch}","tags_url":"https://api.github.com/repos/replit/river/tags","blobs_url":"https://api.github.com/repos/replit/river/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/replit/river/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/replit/river/git/refs{/sha}","trees_url":"https://api.github.com/repos/replit/river/git/trees{/sha}","statuses_url":"https://api.github.com/repos/replit/river/statuses/{sha}","languages_url":"https://api.github.com/repos/replit/river/languages","stargazers_url":"https://api.github.com/repos/replit/river/stargazers","contributors_url":"https://api.github.com/repos/replit/river/contributors","subscribers_url":"https://api.github.com/repos/replit/river/subscribers","subscription_url":"https://api.github.com/repos/replit/river/subscription","commits_url":"https://api.github.com/repos/replit/river/commits{/sha}","git_commits_url":"https://api.github.com/repos/replit/river/git/commits{/sha}","comments_url":"https://api.github.com/repos/replit/river/comments{/number}","issue_comment_url":"https://api.github.com/repos/replit/river/issues/comments{/number}","contents_url":"https://api.github.com/repos/replit/river/contents/{+path}","compare_url":"https://api.github.com/repos/replit/river/compare/{base}...{head}","merges_url":"https://api.github.com/repos/replit/river/merges","archive_url":"https://api.github.com/repos/replit/river/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/replit/river/downloads","issues_url":"https://api.github.com/repos/replit/river/issues{/number}","pulls_url":"https://api.github.com/repos/replit/river/pulls{/number}","milestones_url":"https://api.github.com/repos/replit/river/milestones{/number}","notifications_url":"https://api.github.com/repos/replit/river/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/replit/river/labels{/name}","releases_url":"https://api.github.com/repos/replit/river/releases{/id}","deployments_url":"https://api.github.com/repos/replit/river/deployments","created_at":"2023-09-08T20:04:13Z","updated_at":"2024-03-25T11:40:43Z","pushed_at":"2024-03-27T19:15:16Z","git_url":"git://github.com/replit/river.git","ssh_url":"git@github.com:replit/river.git","clone_url":"https://github.com/replit/river.git","svn_url":"https://github.com/replit/river","homepage":"https://www.npmjs.com/package/@replit/river","size":505,"stargazers_count":34,"watchers_count":34,"language":"TypeScript","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":false,"forks_count":3,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":1,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["api","rpc-framework"],"visibility":"public","forks":3,"open_issues":1,"watchers":34,"default_branch":"main"}},"base":{"label":"replit:main","ref":"main","sha":"8c4538f0006ac3f3f28c07ee4f9eb6505744a214","user":{"login":"replit","id":983194,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk4MzE5NA==","avatar_url":"https://avatars.githubusercontent.com/u/983194?v=4","gravatar_id":"","url":"https://api.github.com/users/replit","html_url":"https://github.com/replit","followers_url":"https://api.github.com/users/replit/followers","following_url":"https://api.github.com/users/replit/following{/other_user}","gists_url":"https://api.github.com/users/replit/gists{/gist_id}","starred_url":"https://api.github.com/users/replit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/replit/subscriptions","organizations_url":"https://api.github.com/users/replit/orgs","repos_url":"https://api.github.com/users/replit/repos","events_url":"https://api.github.com/users/replit/events{/privacy}","received_events_url":"https://api.github.com/users/replit/received_events","type":"Organization","site_admin":false},"repo":{"id":689102279,"node_id":"R_kgDOKRLdxw","name":"river","full_name":"replit/river","private":false,"owner":{"login":"replit","id":983194,"node_id":"MDEyOk9yZ2FuaXphdGlvbjk4MzE5NA==","avatar_url":"https://avatars.githubusercontent.com/u/983194?v=4","gravatar_id":"","url":"https://api.github.com/users/replit","html_url":"https://github.com/replit","followers_url":"https://api.github.com/users/replit/followers","following_url":"https://api.github.com/users/replit/following{/other_user}","gists_url":"https://api.github.com/users/replit/gists{/gist_id}","starred_url":"https://api.github.com/users/replit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/replit/subscriptions","organizations_url":"https://api.github.com/users/replit/orgs","repos_url":"https://api.github.com/users/replit/repos","events_url":"https://api.github.com/users/replit/events{/privacy}","received_events_url":"https://api.github.com/users/replit/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/replit/river","description":"🌊 Long-lived Streaming Remote Procedure Calls","fork":false,"url":"https://api.github.com/repos/replit/river","forks_url":"https://api.github.com/repos/replit/river/forks","keys_url":"https://api.github.com/repos/replit/river/keys{/key_id}","collaborators_url":"https://api.github.com/repos/replit/river/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/replit/river/teams","hooks_url":"https://api.github.com/repos/replit/river/hooks","issue_events_url":"https://api.github.com/repos/replit/river/issues/events{/number}","events_url":"https://api.github.com/repos/replit/river/events","assignees_url":"https://api.github.com/repos/replit/river/assignees{/user}","branches_url":"https://api.github.com/repos/replit/river/branches{/branch}","tags_url":"https://api.github.com/repos/replit/river/tags","blobs_url":"https://api.github.com/repos/replit/river/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/replit/river/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/replit/river/git/refs{/sha}","trees_url":"https://api.github.com/repos/replit/river/git/trees{/sha}","statuses_url":"https://api.github.com/repos/replit/river/statuses/{sha}","languages_url":"https://api.github.com/repos/replit/river/languages","stargazers_url":"https://api.github.com/repos/replit/river/stargazers","contributors_url":"https://api.github.com/repos/replit/river/contributors","subscribers_url":"https://api.github.com/repos/replit/river/subscribers","subscription_url":"https://api.github.com/repos/replit/river/subscription","commits_url":"https://api.github.com/repos/replit/river/commits{/sha}","git_commits_url":"https://api.github.com/repos/replit/river/git/commits{/sha}","comments_url":"https://api.github.com/repos/replit/river/comments{/number}","issue_comment_url":"https://api.github.com/repos/replit/river/issues/comments{/number}","contents_url":"https://api.github.com/repos/replit/river/contents/{+path}","compare_url":"https://api.github.com/repos/replit/river/compare/{base}...{head}","merges_url":"https://api.github.com/repos/replit/river/merges","archive_url":"https://api.github.com/repos/replit/river/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/replit/river/downloads","issues_url":"https://api.github.com/repos/replit/river/issues{/number}","pulls_url":"https://api.github.com/repos/replit/river/pulls{/number}","milestones_url":"https://api.github.com/repos/replit/river/milestones{/number}","notifications_url":"https://api.github.com/repos/replit/river/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/replit/river/labels{/name}","releases_url":"https://api.github.com/repos/replit/river/releases{/id}","deployments_url":"https://api.github.com/repos/replit/river/deployments","created_at":"2023-09-08T20:04:13Z","updated_at":"2024-03-25T11:40:43Z","pushed_at":"2024-03-27T19:15:16Z","git_url":"git://github.com/replit/river.git","ssh_url":"git@github.com:replit/river.git","clone_url":"https://github.com/replit/river.git","svn_url":"https://github.com/replit/river","homepage":"https://www.npmjs.com/package/@replit/river","size":505,"stargazers_count":34,"watchers_count":34,"language":"TypeScript","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":false,"forks_count":3,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":1,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["api","rpc-framework"],"visibility":"public","forks":3,"open_issues":1,"watchers":34,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/replit/river/pulls/62"},"html":{"href":"https://github.com/replit/river/pull/62"},"issue":{"href":"https://api.github.com/repos/replit/river/issues/62"},"comments":{"href":"https://api.github.com/repos/replit/river/issues/62/comments"},"review_comments":{"href":"https://api.github.com/repos/replit/river/pulls/62/comments"},"review_comment":{"href":"https://api.github.com/repos/replit/river/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/replit/river/pulls/62/commits"},"statuses":{"href":"https://api.github.com/repos/replit/river/statuses/6626118b9a17737602dc15af9133b7cf84681847"}},"author_association":"CONTRIBUTOR","auto_merge":null,"active_lock_reason":null}},"public":true,"created_at":"2024-03-27T19:26:51Z","org":{"id":983194,"login":"replit","gravatar_id":"","url":"https://api.github.com/orgs/replit","avatar_url":"https://avatars.githubusercontent.com/u/983194?"}},{"id":"36943837333","type":"IssueCommentEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":689102279,"name":"replit/river","url":"https://api.github.com/repos/replit/river"},"payload":{"action":"created","issue":{"url":"https://api.github.com/repos/replit/river/issues/62","repository_url":"https://api.github.com/repos/replit/river","labels_url":"https://api.github.com/repos/replit/river/issues/62/labels{/name}","comments_url":"https://api.github.com/repos/replit/river/issues/62/comments","events_url":"https://api.github.com/repos/replit/river/issues/62/events","html_url":"https://github.com/replit/river/pull/62","id":2211716369,"node_id":"PR_kwDOKRLdx85q-VL7","number":62,"title":"Allow subscriptions to provide cleanup functions from handler","user":{"login":"bradymadden97","id":16962017,"node_id":"MDQ6VXNlcjE2OTYyMDE3","avatar_url":"https://avatars.githubusercontent.com/u/16962017?v=4","gravatar_id":"","url":"https://api.github.com/users/bradymadden97","html_url":"https://github.com/bradymadden97","followers_url":"https://api.github.com/users/bradymadden97/followers","following_url":"https://api.github.com/users/bradymadden97/following{/other_user}","gists_url":"https://api.github.com/users/bradymadden97/gists{/gist_id}","starred_url":"https://api.github.com/users/bradymadden97/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bradymadden97/subscriptions","organizations_url":"https://api.github.com/users/bradymadden97/orgs","repos_url":"https://api.github.com/users/bradymadden97/repos","events_url":"https://api.github.com/users/bradymadden97/events{/privacy}","received_events_url":"https://api.github.com/users/bradymadden97/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":1,"created_at":"2024-03-27T19:15:16Z","updated_at":"2024-03-27T19:25:06Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/replit/river/pulls/62","html_url":"https://github.com/replit/river/pull/62","diff_url":"https://github.com/replit/river/pull/62.diff","patch_url":"https://github.com/replit/river/pull/62.patch","merged_at":null},"body":"See discussion here: https://replit.slack.com/archives/C05GZ4NRSJ3/p1711562720244819\r\n\r\nOtherwise we could have listeners set up within subscription handlers that we don't have a good way of cleaning up. Now, subscriptions can return a disposal callback `() => void` that gets called when the subscription ends.\r\n\r\n I didn't implement this for streams or uploads yet because there is another way of handling it for now:\r\n ```\r\nfor await (const msg of input) {\r\n // processing...\r\n}\r\n\r\n\r\n// by the time we get here we're closed, so you can clean up right here\r\n```\r\n\r\n\r\n\r\n\r\n```\r\n~/replit/river [main] \r\n> npm run test\r\n\r\n> @replit/river@0.14.0 test\r\n> vitest --test-timeout=500\r\n\r\n\r\n DEV v1.3.1 /Users/brady/replit/river\r\n\r\n ✓ transport/impls/ws/ws.test.ts (3)\r\n ✓ __tests__/disconnects.test.ts (16)\r\n ✓ __tests__/cleanup.test.ts (24)\r\n ✓ transport/impls/ws/ws.test.ts (3)\r\n ✓ __tests__/disconnects.test.ts (16)\r\n ✓ transport/impls/ws/ws.test.ts (3)\r\n ✓ __tests__/disconnects.test.ts (16)\r\n ✓ __tests__/cleanup.test.ts (24)\r\n ✓ __tests__/e2e.test.ts (48)\r\n ✓ transport/transport.test.ts (40) 453ms\r\n ✓ __tests__/negative.test.ts (2)\r\n ✓ transport/transforms/messageFraming.test.ts (6)\r\n ✓ __tests__/proxy.test.ts (1)\r\n ✓ transport/impls/uds/uds.test.ts (1)\r\n ✓ codec/codec.test.ts (12)\r\n ✓ __tests__/handler.test.ts (9)\r\n ✓ __tests__/serialize.test.ts (3)\r\n ✓ transport/message.test.ts (7)\r\n ✓ __tests__/typescript-stress.test.ts (2)\r\n ✓ __tests__/fixtures/observable.test.ts (4)\r\n\r\n Test Files 15 passed (15)\r\n Tests 178 passed (178)\r\n Start at 15:12:30\r\n Duration 1.19s (transform 378ms, setup 2ms, collect 2.20s, tests 1.11s, environment 2ms, prepare 878ms)\r\n```","reactions":{"url":"https://api.github.com/repos/replit/river/issues/62/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/replit/river/issues/62/timeline","performed_via_github_app":null,"state_reason":null},"comment":{"url":"https://api.github.com/repos/replit/river/issues/comments/2023798408","html_url":"https://github.com/replit/river/pull/62#issuecomment-2023798408","issue_url":"https://api.github.com/repos/replit/river/issues/62","id":2023798408,"node_id":"IC_kwDOKRLdx854oLaI","user":{"login":"jackyzha0","id":23178940,"node_id":"MDQ6VXNlcjIzMTc4OTQw","avatar_url":"https://avatars.githubusercontent.com/u/23178940?v=4","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","html_url":"https://github.com/jackyzha0","followers_url":"https://api.github.com/users/jackyzha0/followers","following_url":"https://api.github.com/users/jackyzha0/following{/other_user}","gists_url":"https://api.github.com/users/jackyzha0/gists{/gist_id}","starred_url":"https://api.github.com/users/jackyzha0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jackyzha0/subscriptions","organizations_url":"https://api.github.com/users/jackyzha0/orgs","repos_url":"https://api.github.com/users/jackyzha0/repos","events_url":"https://api.github.com/users/jackyzha0/events{/privacy}","received_events_url":"https://api.github.com/users/jackyzha0/received_events","type":"User","site_admin":false},"created_at":"2024-03-27T19:25:05Z","updated_at":"2024-03-27T19:25:05Z","author_association":"MEMBER","body":"can you run `npm run fix` to make the linter happy? (surprised that vscode didn't pick it up)","reactions":{"url":"https://api.github.com/repos/replit/river/issues/comments/2023798408/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}},"public":true,"created_at":"2024-03-27T19:25:06Z","org":{"id":983194,"login":"replit","gravatar_id":"","url":"https://api.github.com/orgs/replit","avatar_url":"https://avatars.githubusercontent.com/u/983194?"}},{"id":"36939104328","type":"PullRequestEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":9433979,"name":"jepsen-io/jepsen","url":"https://api.github.com/repos/jepsen-io/jepsen"},"payload":{"action":"opened","number":589,"pull_request":{"url":"https://api.github.com/repos/jepsen-io/jepsen/pulls/589","id":1794413045,"node_id":"PR_kwDOAI_ze85q9JH1","html_url":"https://github.com/jepsen-io/jepsen/pull/589","diff_url":"https://github.com/jepsen-io/jepsen/pull/589.diff","patch_url":"https://github.com/jepsen-io/jepsen/pull/589.patch","issue_url":"https://api.github.com/repos/jepsen-io/jepsen/issues/589","number":589,"state":"open","locked":false,"title":"change base image to work on m1 (closes #588)","user":{"login":"jackyzha0","id":23178940,"node_id":"MDQ6VXNlcjIzMTc4OTQw","avatar_url":"https://avatars.githubusercontent.com/u/23178940?v=4","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","html_url":"https://github.com/jackyzha0","followers_url":"https://api.github.com/users/jackyzha0/followers","following_url":"https://api.github.com/users/jackyzha0/following{/other_user}","gists_url":"https://api.github.com/users/jackyzha0/gists{/gist_id}","starred_url":"https://api.github.com/users/jackyzha0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jackyzha0/subscriptions","organizations_url":"https://api.github.com/users/jackyzha0/orgs","repos_url":"https://api.github.com/users/jackyzha0/repos","events_url":"https://api.github.com/users/jackyzha0/events{/privacy}","received_events_url":"https://api.github.com/users/jackyzha0/received_events","type":"User","site_admin":false},"body":"## source\r\nThe improved debian based images aren't build for arm64 out of the box but the official debian images are. We can follow `jgoerzen`'s guide to add these improvements to the official image\r\n\r\nhttps://salsa.debian.org/jgoerzen/docker-debian-base-standard/-/tree/master?ref_type=heads#advanced-topic-adding-these-enhancements-to-other-images\r\n\r\n## tests\r\n- ensure `./docker/bin/up` works on an M1 (and also other machine types)","created_at":"2024-03-27T16:59:14Z","updated_at":"2024-03-27T16:59:14Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/jepsen-io/jepsen/pulls/589/commits","review_comments_url":"https://api.github.com/repos/jepsen-io/jepsen/pulls/589/comments","review_comment_url":"https://api.github.com/repos/jepsen-io/jepsen/pulls/comments{/number}","comments_url":"https://api.github.com/repos/jepsen-io/jepsen/issues/589/comments","statuses_url":"https://api.github.com/repos/jepsen-io/jepsen/statuses/6d1260d7fad35159ab0b4165df7ce7ffa79ed212","head":{"label":"jackyzha0:main","ref":"main","sha":"6d1260d7fad35159ab0b4165df7ce7ffa79ed212","user":{"login":"jackyzha0","id":23178940,"node_id":"MDQ6VXNlcjIzMTc4OTQw","avatar_url":"https://avatars.githubusercontent.com/u/23178940?v=4","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","html_url":"https://github.com/jackyzha0","followers_url":"https://api.github.com/users/jackyzha0/followers","following_url":"https://api.github.com/users/jackyzha0/following{/other_user}","gists_url":"https://api.github.com/users/jackyzha0/gists{/gist_id}","starred_url":"https://api.github.com/users/jackyzha0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jackyzha0/subscriptions","organizations_url":"https://api.github.com/users/jackyzha0/orgs","repos_url":"https://api.github.com/users/jackyzha0/repos","events_url":"https://api.github.com/users/jackyzha0/events{/privacy}","received_events_url":"https://api.github.com/users/jackyzha0/received_events","type":"User","site_admin":false},"repo":{"id":778403855,"node_id":"R_kgDOLmWADw","name":"jepsen","full_name":"jackyzha0/jepsen","private":false,"owner":{"login":"jackyzha0","id":23178940,"node_id":"MDQ6VXNlcjIzMTc4OTQw","avatar_url":"https://avatars.githubusercontent.com/u/23178940?v=4","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","html_url":"https://github.com/jackyzha0","followers_url":"https://api.github.com/users/jackyzha0/followers","following_url":"https://api.github.com/users/jackyzha0/following{/other_user}","gists_url":"https://api.github.com/users/jackyzha0/gists{/gist_id}","starred_url":"https://api.github.com/users/jackyzha0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jackyzha0/subscriptions","organizations_url":"https://api.github.com/users/jackyzha0/orgs","repos_url":"https://api.github.com/users/jackyzha0/repos","events_url":"https://api.github.com/users/jackyzha0/events{/privacy}","received_events_url":"https://api.github.com/users/jackyzha0/received_events","type":"User","site_admin":false},"html_url":"https://github.com/jackyzha0/jepsen","description":"A framework for distributed systems verification, with fault injection","fork":true,"url":"https://api.github.com/repos/jackyzha0/jepsen","forks_url":"https://api.github.com/repos/jackyzha0/jepsen/forks","keys_url":"https://api.github.com/repos/jackyzha0/jepsen/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jackyzha0/jepsen/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jackyzha0/jepsen/teams","hooks_url":"https://api.github.com/repos/jackyzha0/jepsen/hooks","issue_events_url":"https://api.github.com/repos/jackyzha0/jepsen/issues/events{/number}","events_url":"https://api.github.com/repos/jackyzha0/jepsen/events","assignees_url":"https://api.github.com/repos/jackyzha0/jepsen/assignees{/user}","branches_url":"https://api.github.com/repos/jackyzha0/jepsen/branches{/branch}","tags_url":"https://api.github.com/repos/jackyzha0/jepsen/tags","blobs_url":"https://api.github.com/repos/jackyzha0/jepsen/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jackyzha0/jepsen/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jackyzha0/jepsen/git/refs{/sha}","trees_url":"https://api.github.com/repos/jackyzha0/jepsen/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jackyzha0/jepsen/statuses/{sha}","languages_url":"https://api.github.com/repos/jackyzha0/jepsen/languages","stargazers_url":"https://api.github.com/repos/jackyzha0/jepsen/stargazers","contributors_url":"https://api.github.com/repos/jackyzha0/jepsen/contributors","subscribers_url":"https://api.github.com/repos/jackyzha0/jepsen/subscribers","subscription_url":"https://api.github.com/repos/jackyzha0/jepsen/subscription","commits_url":"https://api.github.com/repos/jackyzha0/jepsen/commits{/sha}","git_commits_url":"https://api.github.com/repos/jackyzha0/jepsen/git/commits{/sha}","comments_url":"https://api.github.com/repos/jackyzha0/jepsen/comments{/number}","issue_comment_url":"https://api.github.com/repos/jackyzha0/jepsen/issues/comments{/number}","contents_url":"https://api.github.com/repos/jackyzha0/jepsen/contents/{+path}","compare_url":"https://api.github.com/repos/jackyzha0/jepsen/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jackyzha0/jepsen/merges","archive_url":"https://api.github.com/repos/jackyzha0/jepsen/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jackyzha0/jepsen/downloads","issues_url":"https://api.github.com/repos/jackyzha0/jepsen/issues{/number}","pulls_url":"https://api.github.com/repos/jackyzha0/jepsen/pulls{/number}","milestones_url":"https://api.github.com/repos/jackyzha0/jepsen/milestones{/number}","notifications_url":"https://api.github.com/repos/jackyzha0/jepsen/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jackyzha0/jepsen/labels{/name}","releases_url":"https://api.github.com/repos/jackyzha0/jepsen/releases{/id}","deployments_url":"https://api.github.com/repos/jackyzha0/jepsen/deployments","created_at":"2024-03-27T16:52:40Z","updated_at":"2024-03-27T16:57:06Z","pushed_at":"2024-03-27T16:57:01Z","git_url":"git://github.com/jackyzha0/jepsen.git","ssh_url":"git@github.com:jackyzha0/jepsen.git","clone_url":"https://github.com/jackyzha0/jepsen.git","svn_url":"https://github.com/jackyzha0/jepsen","homepage":"","size":46733,"stargazers_count":0,"watchers_count":0,"language":"Clojure","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":null,"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":0,"open_issues":0,"watchers":0,"default_branch":"main"}},"base":{"label":"jepsen-io:main","ref":"main","sha":"a1cd00088b9921e026c43e9c41d4cbe1506df074","user":{"login":"jepsen-io","id":19334403,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE5MzM0NDAz","avatar_url":"https://avatars.githubusercontent.com/u/19334403?v=4","gravatar_id":"","url":"https://api.github.com/users/jepsen-io","html_url":"https://github.com/jepsen-io","followers_url":"https://api.github.com/users/jepsen-io/followers","following_url":"https://api.github.com/users/jepsen-io/following{/other_user}","gists_url":"https://api.github.com/users/jepsen-io/gists{/gist_id}","starred_url":"https://api.github.com/users/jepsen-io/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jepsen-io/subscriptions","organizations_url":"https://api.github.com/users/jepsen-io/orgs","repos_url":"https://api.github.com/users/jepsen-io/repos","events_url":"https://api.github.com/users/jepsen-io/events{/privacy}","received_events_url":"https://api.github.com/users/jepsen-io/received_events","type":"Organization","site_admin":false},"repo":{"id":9433979,"node_id":"MDEwOlJlcG9zaXRvcnk5NDMzOTc5","name":"jepsen","full_name":"jepsen-io/jepsen","private":false,"owner":{"login":"jepsen-io","id":19334403,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE5MzM0NDAz","avatar_url":"https://avatars.githubusercontent.com/u/19334403?v=4","gravatar_id":"","url":"https://api.github.com/users/jepsen-io","html_url":"https://github.com/jepsen-io","followers_url":"https://api.github.com/users/jepsen-io/followers","following_url":"https://api.github.com/users/jepsen-io/following{/other_user}","gists_url":"https://api.github.com/users/jepsen-io/gists{/gist_id}","starred_url":"https://api.github.com/users/jepsen-io/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jepsen-io/subscriptions","organizations_url":"https://api.github.com/users/jepsen-io/orgs","repos_url":"https://api.github.com/users/jepsen-io/repos","events_url":"https://api.github.com/users/jepsen-io/events{/privacy}","received_events_url":"https://api.github.com/users/jepsen-io/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/jepsen-io/jepsen","description":"A framework for distributed systems verification, with fault injection","fork":false,"url":"https://api.github.com/repos/jepsen-io/jepsen","forks_url":"https://api.github.com/repos/jepsen-io/jepsen/forks","keys_url":"https://api.github.com/repos/jepsen-io/jepsen/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jepsen-io/jepsen/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jepsen-io/jepsen/teams","hooks_url":"https://api.github.com/repos/jepsen-io/jepsen/hooks","issue_events_url":"https://api.github.com/repos/jepsen-io/jepsen/issues/events{/number}","events_url":"https://api.github.com/repos/jepsen-io/jepsen/events","assignees_url":"https://api.github.com/repos/jepsen-io/jepsen/assignees{/user}","branches_url":"https://api.github.com/repos/jepsen-io/jepsen/branches{/branch}","tags_url":"https://api.github.com/repos/jepsen-io/jepsen/tags","blobs_url":"https://api.github.com/repos/jepsen-io/jepsen/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jepsen-io/jepsen/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jepsen-io/jepsen/git/refs{/sha}","trees_url":"https://api.github.com/repos/jepsen-io/jepsen/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jepsen-io/jepsen/statuses/{sha}","languages_url":"https://api.github.com/repos/jepsen-io/jepsen/languages","stargazers_url":"https://api.github.com/repos/jepsen-io/jepsen/stargazers","contributors_url":"https://api.github.com/repos/jepsen-io/jepsen/contributors","subscribers_url":"https://api.github.com/repos/jepsen-io/jepsen/subscribers","subscription_url":"https://api.github.com/repos/jepsen-io/jepsen/subscription","commits_url":"https://api.github.com/repos/jepsen-io/jepsen/commits{/sha}","git_commits_url":"https://api.github.com/repos/jepsen-io/jepsen/git/commits{/sha}","comments_url":"https://api.github.com/repos/jepsen-io/jepsen/comments{/number}","issue_comment_url":"https://api.github.com/repos/jepsen-io/jepsen/issues/comments{/number}","contents_url":"https://api.github.com/repos/jepsen-io/jepsen/contents/{+path}","compare_url":"https://api.github.com/repos/jepsen-io/jepsen/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jepsen-io/jepsen/merges","archive_url":"https://api.github.com/repos/jepsen-io/jepsen/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jepsen-io/jepsen/downloads","issues_url":"https://api.github.com/repos/jepsen-io/jepsen/issues{/number}","pulls_url":"https://api.github.com/repos/jepsen-io/jepsen/pulls{/number}","milestones_url":"https://api.github.com/repos/jepsen-io/jepsen/milestones{/number}","notifications_url":"https://api.github.com/repos/jepsen-io/jepsen/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jepsen-io/jepsen/labels{/name}","releases_url":"https://api.github.com/repos/jepsen-io/jepsen/releases{/id}","deployments_url":"https://api.github.com/repos/jepsen-io/jepsen/deployments","created_at":"2013-04-14T19:20:27Z","updated_at":"2024-03-27T14:50:41Z","pushed_at":"2024-03-27T16:59:14Z","git_url":"git://github.com/jepsen-io/jepsen.git","ssh_url":"git@github.com:jepsen-io/jepsen.git","clone_url":"https://github.com/jepsen-io/jepsen.git","svn_url":"https://github.com/jepsen-io/jepsen","homepage":"","size":46733,"stargazers_count":6576,"watchers_count":6576,"language":"Clojure","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"has_discussions":false,"forks_count":704,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":58,"license":null,"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":704,"open_issues":58,"watchers":6576,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/jepsen-io/jepsen/pulls/589"},"html":{"href":"https://github.com/jepsen-io/jepsen/pull/589"},"issue":{"href":"https://api.github.com/repos/jepsen-io/jepsen/issues/589"},"comments":{"href":"https://api.github.com/repos/jepsen-io/jepsen/issues/589/comments"},"review_comments":{"href":"https://api.github.com/repos/jepsen-io/jepsen/pulls/589/comments"},"review_comment":{"href":"https://api.github.com/repos/jepsen-io/jepsen/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/jepsen-io/jepsen/pulls/589/commits"},"statuses":{"href":"https://api.github.com/repos/jepsen-io/jepsen/statuses/6d1260d7fad35159ab0b4165df7ce7ffa79ed212"}},"author_association":"NONE","auto_merge":null,"active_lock_reason":null,"merged":false,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":null,"comments":0,"review_comments":0,"maintainer_can_modify":true,"commits":1,"additions":16,"deletions":2,"changed_files":2}},"public":true,"created_at":"2024-03-27T16:59:15Z","org":{"id":19334403,"login":"jepsen-io","gravatar_id":"","url":"https://api.github.com/orgs/jepsen-io","avatar_url":"https://avatars.githubusercontent.com/u/19334403?"}},{"id":"36939030526","type":"PushEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":778403855,"name":"jackyzha0/jepsen","url":"https://api.github.com/repos/jackyzha0/jepsen"},"payload":{"repository_id":778403855,"push_id":17732705612,"size":1,"distinct_size":1,"ref":"refs/heads/main","head":"6d1260d7fad35159ab0b4165df7ce7ffa79ed212","before":"a1cd00088b9921e026c43e9c41d4cbe1506df074","commits":[{"sha":"6d1260d7fad35159ab0b4165df7ce7ffa79ed212","author":{"email":"j.zhao2k19@gmail.com","name":"Jacky Zhao"},"message":"change base image to work on m1","distinct":true,"url":"https://api.github.com/repos/jackyzha0/jepsen/commits/6d1260d7fad35159ab0b4165df7ce7ffa79ed212"}]},"public":true,"created_at":"2024-03-27T16:57:02Z"},{"id":"36938886472","type":"ForkEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":9433979,"name":"jepsen-io/jepsen","url":"https://api.github.com/repos/jepsen-io/jepsen"},"payload":{"forkee":{"id":778403855,"node_id":"R_kgDOLmWADw","name":"jepsen","full_name":"jackyzha0/jepsen","private":false,"owner":{"login":"jackyzha0","id":23178940,"node_id":"MDQ6VXNlcjIzMTc4OTQw","avatar_url":"https://avatars.githubusercontent.com/u/23178940?v=4","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","html_url":"https://github.com/jackyzha0","followers_url":"https://api.github.com/users/jackyzha0/followers","following_url":"https://api.github.com/users/jackyzha0/following{/other_user}","gists_url":"https://api.github.com/users/jackyzha0/gists{/gist_id}","starred_url":"https://api.github.com/users/jackyzha0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jackyzha0/subscriptions","organizations_url":"https://api.github.com/users/jackyzha0/orgs","repos_url":"https://api.github.com/users/jackyzha0/repos","events_url":"https://api.github.com/users/jackyzha0/events{/privacy}","received_events_url":"https://api.github.com/users/jackyzha0/received_events","type":"User","site_admin":false},"html_url":"https://github.com/jackyzha0/jepsen","description":"A framework for distributed systems verification, with fault injection","fork":true,"url":"https://api.github.com/repos/jackyzha0/jepsen","forks_url":"https://api.github.com/repos/jackyzha0/jepsen/forks","keys_url":"https://api.github.com/repos/jackyzha0/jepsen/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jackyzha0/jepsen/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jackyzha0/jepsen/teams","hooks_url":"https://api.github.com/repos/jackyzha0/jepsen/hooks","issue_events_url":"https://api.github.com/repos/jackyzha0/jepsen/issues/events{/number}","events_url":"https://api.github.com/repos/jackyzha0/jepsen/events","assignees_url":"https://api.github.com/repos/jackyzha0/jepsen/assignees{/user}","branches_url":"https://api.github.com/repos/jackyzha0/jepsen/branches{/branch}","tags_url":"https://api.github.com/repos/jackyzha0/jepsen/tags","blobs_url":"https://api.github.com/repos/jackyzha0/jepsen/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jackyzha0/jepsen/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jackyzha0/jepsen/git/refs{/sha}","trees_url":"https://api.github.com/repos/jackyzha0/jepsen/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jackyzha0/jepsen/statuses/{sha}","languages_url":"https://api.github.com/repos/jackyzha0/jepsen/languages","stargazers_url":"https://api.github.com/repos/jackyzha0/jepsen/stargazers","contributors_url":"https://api.github.com/repos/jackyzha0/jepsen/contributors","subscribers_url":"https://api.github.com/repos/jackyzha0/jepsen/subscribers","subscription_url":"https://api.github.com/repos/jackyzha0/jepsen/subscription","commits_url":"https://api.github.com/repos/jackyzha0/jepsen/commits{/sha}","git_commits_url":"https://api.github.com/repos/jackyzha0/jepsen/git/commits{/sha}","comments_url":"https://api.github.com/repos/jackyzha0/jepsen/comments{/number}","issue_comment_url":"https://api.github.com/repos/jackyzha0/jepsen/issues/comments{/number}","contents_url":"https://api.github.com/repos/jackyzha0/jepsen/contents/{+path}","compare_url":"https://api.github.com/repos/jackyzha0/jepsen/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jackyzha0/jepsen/merges","archive_url":"https://api.github.com/repos/jackyzha0/jepsen/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jackyzha0/jepsen/downloads","issues_url":"https://api.github.com/repos/jackyzha0/jepsen/issues{/number}","pulls_url":"https://api.github.com/repos/jackyzha0/jepsen/pulls{/number}","milestones_url":"https://api.github.com/repos/jackyzha0/jepsen/milestones{/number}","notifications_url":"https://api.github.com/repos/jackyzha0/jepsen/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jackyzha0/jepsen/labels{/name}","releases_url":"https://api.github.com/repos/jackyzha0/jepsen/releases{/id}","deployments_url":"https://api.github.com/repos/jackyzha0/jepsen/deployments","created_at":"2024-03-27T16:52:40Z","updated_at":"2024-03-27T16:52:40Z","pushed_at":"2024-03-19T06:31:02Z","git_url":"git://github.com/jackyzha0/jepsen.git","ssh_url":"git@github.com:jackyzha0/jepsen.git","clone_url":"https://github.com/jackyzha0/jepsen.git","svn_url":"https://github.com/jackyzha0/jepsen","homepage":"","size":46733,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":null,"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":0,"open_issues":0,"watchers":0,"default_branch":"main","public":true}},"public":true,"created_at":"2024-03-27T16:52:40Z","org":{"id":19334403,"login":"jepsen-io","gravatar_id":"","url":"https://api.github.com/orgs/jepsen-io","avatar_url":"https://avatars.githubusercontent.com/u/19334403?"}},{"id":"36938538874","type":"IssueCommentEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":9433979,"name":"jepsen-io/jepsen","url":"https://api.github.com/repos/jepsen-io/jepsen"},"payload":{"action":"created","issue":{"url":"https://api.github.com/repos/jepsen-io/jepsen/issues/588","repository_url":"https://api.github.com/repos/jepsen-io/jepsen","labels_url":"https://api.github.com/repos/jepsen-io/jepsen/issues/588/labels{/name}","comments_url":"https://api.github.com/repos/jepsen-io/jepsen/issues/588/comments","events_url":"https://api.github.com/repos/jepsen-io/jepsen/issues/588/events","html_url":"https://github.com/jepsen-io/jepsen/issues/588","id":2209669158,"node_id":"I_kwDOAI_ze86DtOAm","number":588,"title":"Docker doesn't work out of the box with M1 Macs","user":{"login":"jackyzha0","id":23178940,"node_id":"MDQ6VXNlcjIzMTc4OTQw","avatar_url":"https://avatars.githubusercontent.com/u/23178940?v=4","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","html_url":"https://github.com/jackyzha0","followers_url":"https://api.github.com/users/jackyzha0/followers","following_url":"https://api.github.com/users/jackyzha0/following{/other_user}","gists_url":"https://api.github.com/users/jackyzha0/gists{/gist_id}","starred_url":"https://api.github.com/users/jackyzha0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jackyzha0/subscriptions","organizations_url":"https://api.github.com/users/jackyzha0/orgs","repos_url":"https://api.github.com/users/jackyzha0/repos","events_url":"https://api.github.com/users/jackyzha0/events{/privacy}","received_events_url":"https://api.github.com/users/jackyzha0/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":2,"created_at":"2024-03-27T02:07:34Z","updated_at":"2024-03-27T16:42:42Z","closed_at":null,"author_association":"NONE","active_lock_reason":null,"body":"I know that Docker compose is now deprecated but I found a workaround that builds a custom base image that allows it to work on arm64, let me know if this would be a useful contribution!\r\n\r\n```Dockerfile\r\nFROM jgoerzen/debian-base-minimal:bookworm as debian-addons\r\nFROM debian:bookworm-slim\r\n\r\nENV container=docker\r\nSTOPSIGNAL SIGRTMIN+3\r\n\r\nCOPY --from=debian-addons /usr/local/preinit/ /usr/local/preinit/\r\nCOPY --from=debian-addons /usr/local/bin/ /usr/local/bin/\r\nCOPY --from=debian-addons /usr/local/debian-base-setup/ /usr/local/debian-base-setup/\r\n\r\nRUN run-parts --exit-on-error --verbose /usr/local/debian-base-setup\r\n\r\n...\r\n\r\nCMD [\"/usr/local/bin/boot-debian-base\"]\r\n```","reactions":{"url":"https://api.github.com/repos/jepsen-io/jepsen/issues/588/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/jepsen-io/jepsen/issues/588/timeline","performed_via_github_app":null,"state_reason":null},"comment":{"url":"https://api.github.com/repos/jepsen-io/jepsen/issues/comments/2023261591","html_url":"https://github.com/jepsen-io/jepsen/issues/588#issuecomment-2023261591","issue_url":"https://api.github.com/repos/jepsen-io/jepsen/issues/588","id":2023261591,"node_id":"IC_kwDOAI_ze854mIWX","user":{"login":"jackyzha0","id":23178940,"node_id":"MDQ6VXNlcjIzMTc4OTQw","avatar_url":"https://avatars.githubusercontent.com/u/23178940?v=4","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","html_url":"https://github.com/jackyzha0","followers_url":"https://api.github.com/users/jackyzha0/followers","following_url":"https://api.github.com/users/jackyzha0/following{/other_user}","gists_url":"https://api.github.com/users/jackyzha0/gists{/gist_id}","starred_url":"https://api.github.com/users/jackyzha0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jackyzha0/subscriptions","organizations_url":"https://api.github.com/users/jackyzha0/orgs","repos_url":"https://api.github.com/users/jackyzha0/repos","events_url":"https://api.github.com/users/jackyzha0/events{/privacy}","received_events_url":"https://api.github.com/users/jackyzha0/received_events","type":"User","site_admin":false},"created_at":"2024-03-27T16:42:42Z","updated_at":"2024-03-27T16:42:42Z","author_association":"NONE","body":"should be safe! i'm just following https://salsa.debian.org/jgoerzen/docker-debian-base-standard/-/tree/master?ref_type=heads#advanced-topic-adding-these-enhancements-to-other-images as `jgoerzen`'s base images don't work out of the box with `arm64`\r\n\r\ni'll PR this and you can make the final call on whether to merge or not :)","reactions":{"url":"https://api.github.com/repos/jepsen-io/jepsen/issues/comments/2023261591/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}},"public":true,"created_at":"2024-03-27T16:42:42Z","org":{"id":19334403,"login":"jepsen-io","gravatar_id":"","url":"https://api.github.com/orgs/jepsen-io","avatar_url":"https://avatars.githubusercontent.com/u/19334403?"}},{"id":"36938427376","type":"WatchEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":55260959,"name":"aphyr/distsys-class","url":"https://api.github.com/repos/aphyr/distsys-class"},"payload":{"action":"started"},"public":true,"created_at":"2024-03-27T16:40:38Z"},{"id":"36913741148","type":"CreateEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":778062262,"name":"jackyzha0/river-jepsen","url":"https://api.github.com/repos/jackyzha0/river-jepsen"},"payload":{"ref":"master","ref_type":"branch","master_branch":"master","description":"jepsen testing for @replit/river","pusher_type":"user"},"public":true,"created_at":"2024-03-27T02:08:53Z"},{"id":"36913738079","type":"CreateEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":778062262,"name":"jackyzha0/river-jepsen","url":"https://api.github.com/repos/jackyzha0/river-jepsen"},"payload":{"ref":null,"ref_type":"repository","master_branch":"main","description":"jepsen testing for @replit/river","pusher_type":"user"},"public":true,"created_at":"2024-03-27T02:08:40Z"},{"id":"36913722023","type":"IssuesEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":9433979,"name":"jepsen-io/jepsen","url":"https://api.github.com/repos/jepsen-io/jepsen"},"payload":{"action":"opened","issue":{"url":"https://api.github.com/repos/jepsen-io/jepsen/issues/588","repository_url":"https://api.github.com/repos/jepsen-io/jepsen","labels_url":"https://api.github.com/repos/jepsen-io/jepsen/issues/588/labels{/name}","comments_url":"https://api.github.com/repos/jepsen-io/jepsen/issues/588/comments","events_url":"https://api.github.com/repos/jepsen-io/jepsen/issues/588/events","html_url":"https://github.com/jepsen-io/jepsen/issues/588","id":2209669158,"node_id":"I_kwDOAI_ze86DtOAm","number":588,"title":"Docker doesn't work out of the box with M1 Macs","user":{"login":"jackyzha0","id":23178940,"node_id":"MDQ6VXNlcjIzMTc4OTQw","avatar_url":"https://avatars.githubusercontent.com/u/23178940?v=4","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","html_url":"https://github.com/jackyzha0","followers_url":"https://api.github.com/users/jackyzha0/followers","following_url":"https://api.github.com/users/jackyzha0/following{/other_user}","gists_url":"https://api.github.com/users/jackyzha0/gists{/gist_id}","starred_url":"https://api.github.com/users/jackyzha0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jackyzha0/subscriptions","organizations_url":"https://api.github.com/users/jackyzha0/orgs","repos_url":"https://api.github.com/users/jackyzha0/repos","events_url":"https://api.github.com/users/jackyzha0/events{/privacy}","received_events_url":"https://api.github.com/users/jackyzha0/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2024-03-27T02:07:34Z","updated_at":"2024-03-27T02:07:34Z","closed_at":null,"author_association":"NONE","active_lock_reason":null,"body":"I know that Docker compose is now deprecated but I found a workaround that builds a custom base image that allows it to work on arm64, let me know if this would be a useful contribution!\r\n\r\n```Dockerfile\r\nFROM jgoerzen/debian-base-minimal:bookworm as debian-addons\r\nFROM debian:bookworm-slim\r\n\r\nENV container=docker\r\nSTOPSIGNAL SIGRTMIN+3\r\n\r\nCOPY --from=debian-addons /usr/local/preinit/ /usr/local/preinit/\r\nCOPY --from=debian-addons /usr/local/bin/ /usr/local/bin/\r\nCOPY --from=debian-addons /usr/local/debian-base-setup/ /usr/local/debian-base-setup/\r\n\r\nRUN run-parts --exit-on-error --verbose /usr/local/debian-base-setup\r\n\r\n...\r\n\r\nCMD [\"/usr/local/bin/boot-debian-base\"]\r\n```","reactions":{"url":"https://api.github.com/repos/jepsen-io/jepsen/issues/588/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/jepsen-io/jepsen/issues/588/timeline","performed_via_github_app":null,"state_reason":null}},"public":true,"created_at":"2024-03-27T02:07:35Z","org":{"id":19334403,"login":"jepsen-io","gravatar_id":"","url":"https://api.github.com/orgs/jepsen-io","avatar_url":"https://avatars.githubusercontent.com/u/19334403?"}},{"id":"36909017029","type":"DeleteEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":689102279,"name":"replit/river","url":"https://api.github.com/repos/replit/river"},"payload":{"ref":"ping-pong","ref_type":"branch","pusher_type":"user"},"public":true,"created_at":"2024-03-26T21:33:20Z","org":{"id":983194,"login":"replit","gravatar_id":"","url":"https://api.github.com/orgs/replit","avatar_url":"https://avatars.githubusercontent.com/u/983194?"}},{"id":"36908482855","type":"PushEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":765906498,"name":"jackyzha0/riverbed","url":"https://api.github.com/repos/jackyzha0/riverbed"},"payload":{"repository_id":765906498,"push_id":17718091403,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"7d6c76ccc1e74b0ada7f2a18363f93bfc0d459fd","before":"12de91d55159d763f3e2e6daa37bf3f7f01e4172","commits":[{"sha":"7d6c76ccc1e74b0ada7f2a18363f93bfc0d459fd","author":{"email":"j.zhao2k19@gmail.com","name":"Jacky Zhao"},"message":"bump river","distinct":true,"url":"https://api.github.com/repos/jackyzha0/riverbed/commits/7d6c76ccc1e74b0ada7f2a18363f93bfc0d459fd"}]},"public":true,"created_at":"2024-03-26T21:10:06Z"},{"id":"36865529554","type":"WatchEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":9433979,"name":"jepsen-io/jepsen","url":"https://api.github.com/repos/jepsen-io/jepsen"},"payload":{"action":"started"},"public":true,"created_at":"2024-03-25T18:43:28Z","org":{"id":19334403,"login":"jepsen-io","gravatar_id":"","url":"https://api.github.com/orgs/jepsen-io","avatar_url":"https://avatars.githubusercontent.com/u/19334403?"}},{"id":"36837695494","type":"IssueCommentEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":387213208,"name":"jackyzha0/quartz","url":"https://api.github.com/repos/jackyzha0/quartz"},"payload":{"action":"created","issue":{"url":"https://api.github.com/repos/jackyzha0/quartz/issues/1032","repository_url":"https://api.github.com/repos/jackyzha0/quartz","labels_url":"https://api.github.com/repos/jackyzha0/quartz/issues/1032/labels{/name}","comments_url":"https://api.github.com/repos/jackyzha0/quartz/issues/1032/comments","events_url":"https://api.github.com/repos/jackyzha0/quartz/issues/1032/events","html_url":"https://github.com/jackyzha0/quartz/issues/1032","id":2204468055,"node_id":"I_kwDOFxRnmM6DZYNX","number":1032,"title":"Separate Quartz installation, configuration and content in user repositories","user":{"login":"daemonspring","id":92009746,"node_id":"U_kgDOBXv1Eg","avatar_url":"https://avatars.githubusercontent.com/u/92009746?v=4","gravatar_id":"","url":"https://api.github.com/users/daemonspring","html_url":"https://github.com/daemonspring","followers_url":"https://api.github.com/users/daemonspring/followers","following_url":"https://api.github.com/users/daemonspring/following{/other_user}","gists_url":"https://api.github.com/users/daemonspring/gists{/gist_id}","starred_url":"https://api.github.com/users/daemonspring/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/daemonspring/subscriptions","organizations_url":"https://api.github.com/users/daemonspring/orgs","repos_url":"https://api.github.com/users/daemonspring/repos","events_url":"https://api.github.com/users/daemonspring/events{/privacy}","received_events_url":"https://api.github.com/users/daemonspring/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":7,"created_at":"2024-03-24T17:30:08Z","updated_at":"2024-03-25T00:11:25Z","closed_at":"2024-03-24T22:30:55Z","author_association":"NONE","active_lock_reason":null,"body":"## Problem Definition\r\n\r\nI'd like to keep these three things conceptually separate:\r\n\r\n- My Obsidian vault\r\n- My installation of Quartz (Node package/Official repository clone/User fork)\r\n- My website, which is a *configuration and/or extension* of Quartz, which *serves* my notes\r\n\r\nFollowing the documentation, I end up with a clone of the Quartz repository as the root of my project. This does not make sense. This is how my project should be organised, based on how it is conceptually organised:\r\n\r\n- `website`\r\n\t- `quartz`\r\n\t- `vault`\r\n\r\nOrganising it this way ensures `quartz` and `vault` do not need to know anything about each other or `website`. Development for each is cleanly separated into the appropriate module. Only `website` needs to know about `vault` and `quartz`.\r\n\r\nThe current organisation looks like this in the filesystem if I use symlinked content:\r\n\r\n- `quartz`+`website` My changes are mixed with quartz source code\r\n\t- `vault`\r\n\r\nIt looks like this in the git history regardless of what I do in the filesystem:\r\n\r\n- `quartz`+`website`+`vault` Every component is mixed together in the history\r\n\r\nNo modularity and not even consistent between git and my filesystem. Chaos. For example:\r\n\r\n- What is the `LICENSE` for my work? Where should it go?\r\n- What about the `README`?\r\n- When I clone my project will I remember to re-add the symlink?\r\n- Is it even legal to move the root `LICENSE` file and replace it?\r\n- What happens if I do change the `README`, `LICENSE` or configuration and try to update Quartz?\r\n\r\nI either have to do extra work (if I remember), or live with a confusing repository. It feels like I'm living in someone else's house.\r\n\r\n## Additional Thoughts\r\n\r\nFor me this is a blocking issue. Even though Quartz is exactly what I want as output, if I am forced to have a confusing repository organised around Quartz and not me, I will hate working with it long-term.\r\n\r\nCurrently I am considering, as an alternative, trying to configure [Hexo](https://hexo.io/docs/) to serve my notes instead and replicating missing features.\r\n\r\nYou may find Hexo's user repository layout to be a good reference. I have also been wondering whether Quartz could be implemented more flexibly as an opinionated collection of Hexo plugins and a theme.\r\n\r\n## Solution\r\n\r\nWhat Quartz needs:\r\n\r\n- Generate a default user repository layout from a template instead of cloning the source code\r\n- Install Quartz as either a normal node package, or include it as a git submodule in the default user repository layout (which could be implemented as a cloned template repository)\r\n- Make Quartz search for its configuration in the user repository's root\r\n- Search for user stylesheets/plugins/etc in folders located in the user repository's root","reactions":{"url":"https://api.github.com/repos/jackyzha0/quartz/issues/1032/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/jackyzha0/quartz/issues/1032/timeline","performed_via_github_app":null,"state_reason":"completed"},"comment":{"url":"https://api.github.com/repos/jackyzha0/quartz/issues/comments/2017003884","html_url":"https://github.com/jackyzha0/quartz/issues/1032#issuecomment-2017003884","issue_url":"https://api.github.com/repos/jackyzha0/quartz/issues/1032","id":2017003884,"node_id":"IC_kwDOFxRnmM54OQls","user":{"login":"jackyzha0","id":23178940,"node_id":"MDQ6VXNlcjIzMTc4OTQw","avatar_url":"https://avatars.githubusercontent.com/u/23178940?v=4","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","html_url":"https://github.com/jackyzha0","followers_url":"https://api.github.com/users/jackyzha0/followers","following_url":"https://api.github.com/users/jackyzha0/following{/other_user}","gists_url":"https://api.github.com/users/jackyzha0/gists{/gist_id}","starred_url":"https://api.github.com/users/jackyzha0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jackyzha0/subscriptions","organizations_url":"https://api.github.com/users/jackyzha0/orgs","repos_url":"https://api.github.com/users/jackyzha0/repos","events_url":"https://api.github.com/users/jackyzha0/events{/privacy}","received_events_url":"https://api.github.com/users/jackyzha0/received_events","type":"User","site_admin":false},"created_at":"2024-03-25T00:11:23Z","updated_at":"2024-03-25T00:11:23Z","author_association":"OWNER","body":"No one is treating you like an idiot, you started this issue pointing fingers at Quartz for what you feel are deficiencies in how it works for you and we told you that it is working as intended. You are the one who started using strong language in this thread.\r\n\r\nYour feedback is helpful but is something we have actively considered in the past and decided not to go down that route so we closed this issue because we're not planning on pursuing that direction.\r\n\r\nSee https://github.com/jackyzha0/quartz/issues/502 and https://github.com/jackyzha0/quartz/issues/555. If you want to keep things separate, you're going against the grain of Quartz and every tool has ways of holding it that work better with how its intended to be used. Of course it will feel painful because that's not how Quartz was meant to be used.\r\n\r\nHope this answers your question adequately. I'd like to remind you that this is an open-source project we maintain on volunteer time, if you think something about it is bad, you can help improve it by submitting pull requests.","reactions":{"url":"https://api.github.com/repos/jackyzha0/quartz/issues/comments/2017003884/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}},"public":true,"created_at":"2024-03-25T00:11:25Z"},{"id":"36837270267","type":"PushEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":387213208,"name":"jackyzha0/quartz","url":"https://api.github.com/repos/jackyzha0/quartz"},"payload":{"repository_id":387213208,"push_id":17684707729,"size":1,"distinct_size":1,"ref":"refs/heads/v4","head":"d75928ad5cb99c87de40c1c884ddca6bf86163d5","before":"0a2b52f618c8a76a2f2a0e29223b5289c0225634","commits":[{"sha":"d75928ad5cb99c87de40c1c884ddca6bf86163d5","author":{"email":"ewjbangma@hotmail.com","name":"Emile Bangma"},"message":"fix(assets): pdf page linking support. (#1025)\n\n* github-slugger pdf workaround\r\n\r\n* Skip sluggifying on pdf file extension\r\n\r\n* Account for pdf files without anchor\r\n\r\n* Address feedback","distinct":true,"url":"https://api.github.com/repos/jackyzha0/quartz/commits/d75928ad5cb99c87de40c1c884ddca6bf86163d5"}]},"public":true,"created_at":"2024-03-24T23:23:27Z"},{"id":"36837270227","type":"IssuesEvent","actor":{"id":23178940,"login":"jackyzha0","display_login":"jackyzha0","gravatar_id":"","url":"https://api.github.com/users/jackyzha0","avatar_url":"https://avatars.githubusercontent.com/u/23178940?"},"repo":{"id":387213208,"name":"jackyzha0/quartz","url":"https://api.github.com/repos/jackyzha0/quartz"},"payload":{"action":"closed","issue":{"url":"https://api.github.com/repos/jackyzha0/quartz/issues/1022","repository_url":"https://api.github.com/repos/jackyzha0/quartz","labels_url":"https://api.github.com/repos/jackyzha0/quartz/issues/1022/labels{/name}","comments_url":"https://api.github.com/repos/jackyzha0/quartz/issues/1022/comments","events_url":"https://api.github.com/repos/jackyzha0/quartz/issues/1022/events","html_url":"https://github.com/jackyzha0/quartz/issues/1022","id":2202907336,"node_id":"I_kwDOFxRnmM6DTbLI","number":1022,"title":"Link to specific page of PDF gets garbled","user":{"login":"wjdenny","id":1389674,"node_id":"MDQ6VXNlcjEzODk2NzQ=","avatar_url":"https://avatars.githubusercontent.com/u/1389674?v=4","gravatar_id":"","url":"https://api.github.com/users/wjdenny","html_url":"https://github.com/wjdenny","followers_url":"https://api.github.com/users/wjdenny/followers","following_url":"https://api.github.com/users/wjdenny/following{/other_user}","gists_url":"https://api.github.com/users/wjdenny/gists{/gist_id}","starred_url":"https://api.github.com/users/wjdenny/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wjdenny/subscriptions","organizations_url":"https://api.github.com/users/wjdenny/orgs","repos_url":"https://api.github.com/users/wjdenny/repos","events_url":"https://api.github.com/users/wjdenny/events{/privacy}","received_events_url":"https://api.github.com/users/wjdenny/received_events","type":"User","site_admin":false},"labels":[{"id":3179553344,"node_id":"MDU6TGFiZWwzMTc5NTUzMzQ0","url":"https://api.github.com/repos/jackyzha0/quartz/labels/bug","name":"bug","color":"d73a4a","default":true,"description":"Something isn't working"}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":1,"created_at":"2024-03-22T16:47:20Z","updated_at":"2024-03-24T23:23:26Z","closed_at":"2024-03-24T23:23:26Z","author_association":"NONE","active_lock_reason":null,"body":"When linking to a specific page in a PDF file using [a page specifier](https://helpx.adobe.com/acrobat/kb/link-html-pdf-page-acrobat.html) gets changed in the Quartz website output, removing the `=` between `page` and the page number.\r\n\r\n**To reproduce**\r\nIn a Markdown file with contents:\r\n```markdown\r\n[this paper](file.pdf#page=5)\r\n```\r\n\r\nthe contents gets transformed to:\r\n```html\r\nthis paper\r\n```\r\n\r\nNote the missing `=` between `page` and `5` in the output HTML.\r\n\r\n**Expected behavior**\r\nExpected output would be the full link without changing the URL.\r\n\r\n```html\r\nthis paper\r\n```\r\n\r\n- Quartz Version: 4.2.3\r\n- `node` Version: 21.6.2\r\n- `npm` version: 10.5.0\r\n- OS: Debian 12\r\n- Browser: Mozilla Firefox 123.0.1 ","reactions":{"url":"https://api.github.com/repos/jackyzha0/quartz/issues/1022/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/jackyzha0/quartz/issues/1022/timeline","performed_via_github_app":null,"state_reason":"completed"}},"public":true,"created_at":"2024-03-24T23:23:27Z"}]