{"action":"opened","issue":{"url":"https://api.github.com/repos/ably/docs/issues/455","repository_url":"https://api.github.com/repos/ably/docs","labels_url":"https://api.github.com/repos/ably/docs/issues/455/labels{/name}","comments_url":"https://api.github.com/repos/ably/docs/issues/455/comments","events_url":"https://api.github.com/repos/ably/docs/issues/455/events","html_url":"https://github.com/ably/docs/issues/455","id":336637724,"node_id":"MDU6SXNzdWUzMzY2Mzc3MjQ=","number":455,"title":"RTN14a (api key clientside validity check) is a bit underspecified","user":{"login":"SimonWoolf","id":5908687,"node_id":"MDQ6VXNlcjU5MDg2ODc=","avatar_url":"https://avatars1.githubusercontent.com/u/5908687?v=4","gravatar_id":"","url":"https://api.github.com/users/SimonWoolf","html_url":"https://github.com/SimonWoolf","followers_url":"https://api.github.com/users/SimonWoolf/followers","following_url":"https://api.github.com/users/SimonWoolf/following{/other_user}","gists_url":"https://api.github.com/users/SimonWoolf/gists{/gist_id}","starred_url":"https://api.github.com/users/SimonWoolf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SimonWoolf/subscriptions","organizations_url":"https://api.github.com/users/SimonWoolf/orgs","repos_url":"https://api.github.com/users/SimonWoolf/repos","events_url":"https://api.github.com/users/SimonWoolf/events{/privacy}","received_events_url":"https://api.github.com/users/SimonWoolf/received_events","type":"User","site_admin":false},"labels":[{"id":361723096,"node_id":"MDU6TGFiZWwzNjE3MjMwOTY=","url":"https://api.github.com/repos/ably/docs/labels/client%20lib%20spec","name":"client lib spec","color":"fbca04","default":false}],"state":"open","locked":false,"assignee":{"login":"funkyboy","id":348355,"node_id":"MDQ6VXNlcjM0ODM1NQ==","avatar_url":"https://avatars3.githubusercontent.com/u/348355?v=4","gravatar_id":"","url":"https://api.github.com/users/funkyboy","html_url":"https://github.com/funkyboy","followers_url":"https://api.github.com/users/funkyboy/followers","following_url":"https://api.github.com/users/funkyboy/following{/other_user}","gists_url":"https://api.github.com/users/funkyboy/gists{/gist_id}","starred_url":"https://api.github.com/users/funkyboy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/funkyboy/subscriptions","organizations_url":"https://api.github.com/users/funkyboy/orgs","repos_url":"https://api.github.com/users/funkyboy/repos","events_url":"https://api.github.com/users/funkyboy/events{/privacy}","received_events_url":"https://api.github.com/users/funkyboy/received_events","type":"User","site_admin":false},"assignees":[{"login":"funkyboy","id":348355,"node_id":"MDQ6VXNlcjM0ODM1NQ==","avatar_url":"https://avatars3.githubusercontent.com/u/348355?v=4","gravatar_id":"","url":"https://api.github.com/users/funkyboy","html_url":"https://github.com/funkyboy","followers_url":"https://api.github.com/users/funkyboy/followers","following_url":"https://api.github.com/users/funkyboy/following{/other_user}","gists_url":"https://api.github.com/users/funkyboy/gists{/gist_id}","starred_url":"https://api.github.com/users/funkyboy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/funkyboy/subscriptions","organizations_url":"https://api.github.com/users/funkyboy/orgs","repos_url":"https://api.github.com/users/funkyboy/repos","events_url":"https://api.github.com/users/funkyboy/events{/privacy}","received_events_url":"https://api.github.com/users/funkyboy/received_events","type":"User","site_admin":false},{"login":"paddybyers","id":1137574,"node_id":"MDQ6VXNlcjExMzc1NzQ=","avatar_url":"https://avatars2.githubusercontent.com/u/1137574?v=4","gravatar_id":"","url":"https://api.github.com/users/paddybyers","html_url":"https://github.com/paddybyers","followers_url":"https://api.github.com/users/paddybyers/followers","following_url":"https://api.github.com/users/paddybyers/following{/other_user}","gists_url":"https://api.github.com/users/paddybyers/gists{/gist_id}","starred_url":"https://api.github.com/users/paddybyers/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/paddybyers/subscriptions","organizations_url":"https://api.github.com/users/paddybyers/orgs","repos_url":"https://api.github.com/users/paddybyers/repos","events_url":"https://api.github.com/users/paddybyers/events{/privacy}","received_events_url":"https://api.github.com/users/paddybyers/received_events","type":"User","site_admin":false}],"milestone":null,"comments":0,"created_at":"2018-06-28T14:08:47Z","updated_at":"2018-06-28T14:08:47Z","closed_at":null,"author_association":"MEMBER","body":"`RTN14a If an API key is invalid, then the connection will transition to the FAILED state and the Connection#errorReason will be set on the Connection object as well as the emitted ConnectionStateChange`\r\n\r\nthis is a spec item about clientside regex validation of api keys -- serverside responses are covered in RTN14b and c. But that isn't very clear from the spec item, and it doesn't specify how to test whether the key is invalid or not. (ably-js validates against `/^([^:\\s]+):([^:.\\s]+)$/`, ably-ruby against `/^[\\w-]{2,}\\.[\\w-]{2,}:[\\w-]{2,}$/`).\r\n\r\nWe should include a canonical validation regex in the spec. (Or maybe just get rid of the spec item altogether and rely on serverside validation?)\r\n\r\nThx to @withakay for pointing out the issue"}}
{"actor":{"display_login":"SimonWoolf"}}