{"action":"created","comment":{"url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/pulls/comments/199998763","pull_request_review_id":134224758,"id":199998763,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5OTk5ODc2Mw==","diff_hunk":"@@ -1 +1,15 @@\n-# ens-validation\n+# ENS Validation\r\n+\r\n+Following the alorithm used for Google's IDN policy, this library can validate a ENS domain.\r","path":"README.md","position":4,"original_position":4,"commit_id":"9262757e32d534c1cd578be141b918c53216ccc0","original_commit_id":"9262757e32d534c1cd578be141b918c53216ccc0","user":{"login":"briansoule","id":1596183,"node_id":"MDQ6VXNlcjE1OTYxODM=","avatar_url":"https://avatars2.githubusercontent.com/u/1596183?v=4","gravatar_id":"","url":"https://api.github.com/users/briansoule","html_url":"https://github.com/briansoule","followers_url":"https://api.github.com/users/briansoule/followers","following_url":"https://api.github.com/users/briansoule/following{/other_user}","gists_url":"https://api.github.com/users/briansoule/gists{/gist_id}","starred_url":"https://api.github.com/users/briansoule/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/briansoule/subscriptions","organizations_url":"https://api.github.com/users/briansoule/orgs","repos_url":"https://api.github.com/users/briansoule/repos","events_url":"https://api.github.com/users/briansoule/events{/privacy}","received_events_url":"https://api.github.com/users/briansoule/received_events","type":"User","site_admin":false},"body":"I could probably add a little color here if it would help","created_at":"2018-07-04T03:11:37Z","updated_at":"2018-07-04T03:18:02Z","html_url":"https://github.com/MyCryptoHQ/ens-validation/pull/2#discussion_r199998763","pull_request_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/pulls/2","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/MyCryptoHQ/ens-validation/pulls/comments/199998763"},"html":{"href":"https://github.com/MyCryptoHQ/ens-validation/pull/2#discussion_r199998763"},"pull_request":{"href":"https://api.github.com/repos/MyCryptoHQ/ens-validation/pulls/2"}}},"pull_request":{"url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/pulls/2","id":183845401,"node_id":"MDExOlB1bGxSZXF1ZXN0MTgzODQ1NDAx","html_url":"https://github.com/MyCryptoHQ/ens-validation/pull/2","diff_url":"https://github.com/MyCryptoHQ/ens-validation/pull/2.diff","patch_url":"https://github.com/MyCryptoHQ/ens-validation/pull/2.patch","issue_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/issues/2","number":2,"state":"open","locked":false,"title":"WIP - ENS Validation based on Google's IDN Policy algorithm","user":{"login":"matthewlilley","id":6063350,"node_id":"MDQ6VXNlcjYwNjMzNTA=","avatar_url":"https://avatars3.githubusercontent.com/u/6063350?v=4","gravatar_id":"","url":"https://api.github.com/users/matthewlilley","html_url":"https://github.com/matthewlilley","followers_url":"https://api.github.com/users/matthewlilley/followers","following_url":"https://api.github.com/users/matthewlilley/following{/other_user}","gists_url":"https://api.github.com/users/matthewlilley/gists{/gist_id}","starred_url":"https://api.github.com/users/matthewlilley/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/matthewlilley/subscriptions","organizations_url":"https://api.github.com/users/matthewlilley/orgs","repos_url":"https://api.github.com/users/matthewlilley/repos","events_url":"https://api.github.com/users/matthewlilley/events{/privacy}","received_events_url":"https://api.github.com/users/matthewlilley/received_events","type":"User","site_admin":false},"body":"WIP\r\n\r\nhttps://cs.chromium.org/chromium/src/components/url_formatter/idn_spoof_checker.cc\r\n\r\n### Google IDN policy algorithm\r\n- [x] Convert each component stored in the ACE to Unicode per UTS 46 transitional processing (ToUnicode).\r\n- [x] If there is an error in ToUnicode conversion (e.g. contains disallowed characters, starts with a combining mark, or violates BiDi rules), punycode is displayed.\r\n- [x] If any character is outside the union of the following sets, punycode is displayed.\r\n-- Characters allowed in identifiers per Unicode Technical Standard 39 (UTS 39)\r\n-- Characters suitable for identifiers in 5 Aspirational scripts per Unicode Standard Annex 31 (UAX 31) : Starting with Chrome 64, domains with these characters are turned to punycode.\r\n- [x] If the component contains either U+0338 or U+2027, punycode is displayed.\r\n- [x] Latin, Cyrillic or Greek characters cannot be mixed with each other\r\n- [x]  Latin characters in the ASCII range can be mixed with characters in another script as long as it's not Greek nor Cyrillic.\r\n- [x]  Latin characters in the ASCII range can be mixed ONLY with Chinese (Han, Bopomofo), Japanese (Kanji, Katakana, Hiragana), or Korean (Hangul, Hanja). \r\n- [x]  Latin characters in the ASCII range can be mixed ONLY with Chinese (Han, Bopomofo), Japanese (Kanji, Katakana, Hiragana), or Korean (Hangul, Hanja).\r\n- [x]  Han (CJK Ideographs) can be mixed with Bopomofo\r\n- [x]  Han can be mixed with Hiragana and Katakana\r\n- [x]  Han can be mixed with Korean Hangul\r\n- [x]  Han can be mixed with Korean Hangul\r\n- [x] If two or more numbering systems (e.g. European digits + Bengali digits) are mixed, punycode is shown.\r\n- [x] If there are any invisible characters (e.g. a sequence of the same combining mark or a sequence of Kana combining marks), punycode is shown. \r\n- [x] Test the label for mixed script confusable per UTS 39. If mixed script confusable is detected, show punycode.\r\n- [x] If a hostname belongs to an non-IDN TLD(top-level-domain) such as 'com', 'net', or 'uk' and all the letters in a given label belong to a set of Cyrillic letters that look like Latin letters (e.g. Cyrillic Small Letter IE - е  ), show punycode.\r\n- [x] If the label matches a dangerous pattern, punycode is shown.\r\n- [ ] If the end of a hostname is identical to one of top 10k domains after removing diacritic marks and mapping each character to its spoofing skeleton (e.g. www.googlé.com with 'é' in place of 'e'), punycode is shown.  - IN PROGRESS\r\n\r\n### Refactor\r\n- [ ] \r\n\r\n","created_at":"2018-04-24T19:51:51Z","updated_at":"2018-07-04T03:18:02Z","closed_at":null,"merged_at":null,"merge_commit_sha":"4cc712cdf24ade6b28d39ca55f7b2eac0ad1ed65","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/pulls/2/commits","review_comments_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/pulls/2/comments","review_comment_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/pulls/comments{/number}","comments_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/issues/2/comments","statuses_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/statuses/9262757e32d534c1cd578be141b918c53216ccc0","head":{"label":"matthewlilley:master","ref":"master","sha":"9262757e32d534c1cd578be141b918c53216ccc0","user":{"login":"matthewlilley","id":6063350,"node_id":"MDQ6VXNlcjYwNjMzNTA=","avatar_url":"https://avatars3.githubusercontent.com/u/6063350?v=4","gravatar_id":"","url":"https://api.github.com/users/matthewlilley","html_url":"https://github.com/matthewlilley","followers_url":"https://api.github.com/users/matthewlilley/followers","following_url":"https://api.github.com/users/matthewlilley/following{/other_user}","gists_url":"https://api.github.com/users/matthewlilley/gists{/gist_id}","starred_url":"https://api.github.com/users/matthewlilley/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/matthewlilley/subscriptions","organizations_url":"https://api.github.com/users/matthewlilley/orgs","repos_url":"https://api.github.com/users/matthewlilley/repos","events_url":"https://api.github.com/users/matthewlilley/events{/privacy}","received_events_url":"https://api.github.com/users/matthewlilley/received_events","type":"User","site_admin":false},"repo":{"id":130905779,"node_id":"MDEwOlJlcG9zaXRvcnkxMzA5MDU3Nzk=","name":"ens-validation","full_name":"matthewlilley/ens-validation","owner":{"login":"matthewlilley","id":6063350,"node_id":"MDQ6VXNlcjYwNjMzNTA=","avatar_url":"https://avatars3.githubusercontent.com/u/6063350?v=4","gravatar_id":"","url":"https://api.github.com/users/matthewlilley","html_url":"https://github.com/matthewlilley","followers_url":"https://api.github.com/users/matthewlilley/followers","following_url":"https://api.github.com/users/matthewlilley/following{/other_user}","gists_url":"https://api.github.com/users/matthewlilley/gists{/gist_id}","starred_url":"https://api.github.com/users/matthewlilley/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/matthewlilley/subscriptions","organizations_url":"https://api.github.com/users/matthewlilley/orgs","repos_url":"https://api.github.com/users/matthewlilley/repos","events_url":"https://api.github.com/users/matthewlilley/events{/privacy}","received_events_url":"https://api.github.com/users/matthewlilley/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/matthewlilley/ens-validation","description":null,"fork":true,"url":"https://api.github.com/repos/matthewlilley/ens-validation","forks_url":"https://api.github.com/repos/matthewlilley/ens-validation/forks","keys_url":"https://api.github.com/repos/matthewlilley/ens-validation/keys{/key_id}","collaborators_url":"https://api.github.com/repos/matthewlilley/ens-validation/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/matthewlilley/ens-validation/teams","hooks_url":"https://api.github.com/repos/matthewlilley/ens-validation/hooks","issue_events_url":"https://api.github.com/repos/matthewlilley/ens-validation/issues/events{/number}","events_url":"https://api.github.com/repos/matthewlilley/ens-validation/events","assignees_url":"https://api.github.com/repos/matthewlilley/ens-validation/assignees{/user}","branches_url":"https://api.github.com/repos/matthewlilley/ens-validation/branches{/branch}","tags_url":"https://api.github.com/repos/matthewlilley/ens-validation/tags","blobs_url":"https://api.github.com/repos/matthewlilley/ens-validation/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/matthewlilley/ens-validation/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/matthewlilley/ens-validation/git/refs{/sha}","trees_url":"https://api.github.com/repos/matthewlilley/ens-validation/git/trees{/sha}","statuses_url":"https://api.github.com/repos/matthewlilley/ens-validation/statuses/{sha}","languages_url":"https://api.github.com/repos/matthewlilley/ens-validation/languages","stargazers_url":"https://api.github.com/repos/matthewlilley/ens-validation/stargazers","contributors_url":"https://api.github.com/repos/matthewlilley/ens-validation/contributors","subscribers_url":"https://api.github.com/repos/matthewlilley/ens-validation/subscribers","subscription_url":"https://api.github.com/repos/matthewlilley/ens-validation/subscription","commits_url":"https://api.github.com/repos/matthewlilley/ens-validation/commits{/sha}","git_commits_url":"https://api.github.com/repos/matthewlilley/ens-validation/git/commits{/sha}","comments_url":"https://api.github.com/repos/matthewlilley/ens-validation/comments{/number}","issue_comment_url":"https://api.github.com/repos/matthewlilley/ens-validation/issues/comments{/number}","contents_url":"https://api.github.com/repos/matthewlilley/ens-validation/contents/{+path}","compare_url":"https://api.github.com/repos/matthewlilley/ens-validation/compare/{base}...{head}","merges_url":"https://api.github.com/repos/matthewlilley/ens-validation/merges","archive_url":"https://api.github.com/repos/matthewlilley/ens-validation/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/matthewlilley/ens-validation/downloads","issues_url":"https://api.github.com/repos/matthewlilley/ens-validation/issues{/number}","pulls_url":"https://api.github.com/repos/matthewlilley/ens-validation/pulls{/number}","milestones_url":"https://api.github.com/repos/matthewlilley/ens-validation/milestones{/number}","notifications_url":"https://api.github.com/repos/matthewlilley/ens-validation/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/matthewlilley/ens-validation/labels{/name}","releases_url":"https://api.github.com/repos/matthewlilley/ens-validation/releases{/id}","deployments_url":"https://api.github.com/repos/matthewlilley/ens-validation/deployments","created_at":"2018-04-24T19:46:48Z","updated_at":"2018-06-16T06:28:35Z","pushed_at":"2018-06-16T06:28:33Z","git_url":"git://github.com/matthewlilley/ens-validation.git","ssh_url":"git@github.com:matthewlilley/ens-validation.git","clone_url":"https://github.com/matthewlilley/ens-validation.git","svn_url":"https://github.com/matthewlilley/ens-validation","homepage":null,"size":133,"stargazers_count":0,"watchers_count":0,"language":"TypeScript","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"MyCryptoHQ:master","ref":"master","sha":"e8f9303a0d3d73a952c5ed02f7dfc435cc4d4a9c","user":{"login":"MyCryptoHQ","id":32279762,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMyMjc5NzYy","avatar_url":"https://avatars1.githubusercontent.com/u/32279762?v=4","gravatar_id":"","url":"https://api.github.com/users/MyCryptoHQ","html_url":"https://github.com/MyCryptoHQ","followers_url":"https://api.github.com/users/MyCryptoHQ/followers","following_url":"https://api.github.com/users/MyCryptoHQ/following{/other_user}","gists_url":"https://api.github.com/users/MyCryptoHQ/gists{/gist_id}","starred_url":"https://api.github.com/users/MyCryptoHQ/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MyCryptoHQ/subscriptions","organizations_url":"https://api.github.com/users/MyCryptoHQ/orgs","repos_url":"https://api.github.com/users/MyCryptoHQ/repos","events_url":"https://api.github.com/users/MyCryptoHQ/events{/privacy}","received_events_url":"https://api.github.com/users/MyCryptoHQ/received_events","type":"Organization","site_admin":false},"repo":{"id":129183611,"node_id":"MDEwOlJlcG9zaXRvcnkxMjkxODM2MTE=","name":"ens-validation","full_name":"MyCryptoHQ/ens-validation","owner":{"login":"MyCryptoHQ","id":32279762,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMyMjc5NzYy","avatar_url":"https://avatars1.githubusercontent.com/u/32279762?v=4","gravatar_id":"","url":"https://api.github.com/users/MyCryptoHQ","html_url":"https://github.com/MyCryptoHQ","followers_url":"https://api.github.com/users/MyCryptoHQ/followers","following_url":"https://api.github.com/users/MyCryptoHQ/following{/other_user}","gists_url":"https://api.github.com/users/MyCryptoHQ/gists{/gist_id}","starred_url":"https://api.github.com/users/MyCryptoHQ/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MyCryptoHQ/subscriptions","organizations_url":"https://api.github.com/users/MyCryptoHQ/orgs","repos_url":"https://api.github.com/users/MyCryptoHQ/repos","events_url":"https://api.github.com/users/MyCryptoHQ/events{/privacy}","received_events_url":"https://api.github.com/users/MyCryptoHQ/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/MyCryptoHQ/ens-validation","description":null,"fork":false,"url":"https://api.github.com/repos/MyCryptoHQ/ens-validation","forks_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/forks","keys_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/keys{/key_id}","collaborators_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/teams","hooks_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/hooks","issue_events_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/issues/events{/number}","events_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/events","assignees_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/assignees{/user}","branches_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/branches{/branch}","tags_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/tags","blobs_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/git/refs{/sha}","trees_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/git/trees{/sha}","statuses_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/statuses/{sha}","languages_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/languages","stargazers_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/stargazers","contributors_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/contributors","subscribers_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/subscribers","subscription_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/subscription","commits_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/commits{/sha}","git_commits_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/git/commits{/sha}","comments_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/comments{/number}","issue_comment_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/issues/comments{/number}","contents_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/contents/{+path}","compare_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/compare/{base}...{head}","merges_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/merges","archive_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/downloads","issues_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/issues{/number}","pulls_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/pulls{/number}","milestones_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/milestones{/number}","notifications_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/labels{/name}","releases_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/releases{/id}","deployments_url":"https://api.github.com/repos/MyCryptoHQ/ens-validation/deployments","created_at":"2018-04-12T02:52:02Z","updated_at":"2018-07-04T02:52:39Z","pushed_at":"2018-06-16T06:28:34Z","git_url":"git://github.com/MyCryptoHQ/ens-validation.git","ssh_url":"git@github.com:MyCryptoHQ/ens-validation.git","clone_url":"https://github.com/MyCryptoHQ/ens-validation.git","svn_url":"https://github.com/MyCryptoHQ/ens-validation","homepage":null,"size":0,"stargazers_count":1,"watchers_count":1,"language":null,"has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"archived":false,"open_issues_count":2,"license":null,"forks":2,"open_issues":2,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/MyCryptoHQ/ens-validation/pulls/2"},"html":{"href":"https://github.com/MyCryptoHQ/ens-validation/pull/2"},"issue":{"href":"https://api.github.com/repos/MyCryptoHQ/ens-validation/issues/2"},"comments":{"href":"https://api.github.com/repos/MyCryptoHQ/ens-validation/issues/2/comments"},"review_comments":{"href":"https://api.github.com/repos/MyCryptoHQ/ens-validation/pulls/2/comments"},"review_comment":{"href":"https://api.github.com/repos/MyCryptoHQ/ens-validation/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/MyCryptoHQ/ens-validation/pulls/2/commits"},"statuses":{"href":"https://api.github.com/repos/MyCryptoHQ/ens-validation/statuses/9262757e32d534c1cd578be141b918c53216ccc0"}},"author_association":"NONE"}}
{"actor":{"display_login":"briansoule"}}