{"action":"created","comment":{"url":"https://api.github.com/repos/AzureAD/passport-azure-ad/pulls/comments/84927076","pull_request_review_id":5673452,"id":84927076,"diff_hunk":"@@ -620,38 +619,62 @@ Strategy.prototype.collectInfoFromReq = function(params, req, next) {\n   // -------------------------------------------------------------------------\n   if (params.id_token || params.code || params.err) {\n     if (!params.state)\n-      return self.failWithLog('In collectInfoFromReq: missing state in the request');\n+      return next(new Error('In collectInfoFromReq: missing state in the request'));\n     var tuple = self._sessionContentHandler.findAndDeleteTupleByState(req, self._key, params.state);\n     if (!tuple)\n-      return self.failWithLog('In collectInfoFromReq: invalid state received in the request');\n+      return next(new Error('In collectInfoFromReq: invalid state received in the request'));\n     params.nonce = tuple['nonce'];\n     params.policy = tuple['policy'];\n     params.resource = tuple['resource'];\n+    // user provided tenantIdOrName will be ignored for redirectUrl, since we saved the one we used in session\n+    if (params.tenantIdOrName)\n+      log.info(`user provided tenantIdOrName '${params.tenantIdOrName}' is ignored for redirectUrl, we will use the one stored in session`);\n+    params.tenantIdOrName = tuple['tenantIdOrName'];\n   } else {\n     params.policy = req.query.p ? req.query.p.toLowerCase() : null;\n   }\n \n+  // if we are not using the common endpoint, but we have tenantIdOrName, just ignore it\n+  if (!self._options.isCommonEndpoint && params.tenantIdOrName) {\n+    log.info(`identityMetadata is tenant-specific, so we ignore the tenantIdOrName '${params.tenantIdOrName}'`);\n+    params.tenantIdOrName = null;\n+  }\n+\n+  // if we are using the common endpoint and we want to validate issuer, then user has to \n+  // provide issuer in config, or provide tenant id or name using tenantIdOrName option in\n+  // passport.authenticate. Otherwise we won't know the issuer.\n+  if (self._options.isCommonEndpoint && self._options.validateIssuer &&\n+    (!self._options.issuer && !params.tenantIdOrName))\n+    return next(new Error('In collectInfoFromReq: issuer or tenantIdOrName must be provided in order to validate issuer on common endpoint'));\n+\n   // for B2C, we must have policy\n   if (self._options.isB2C && !params.policy)\n-    return self.failWithLog('In collectInfoFromReq: policy is missing');\n+    return next(new Error('In collectInfoFromReq: policy is missing'));\n+  // for B2C, if we are using common endpoint, we must have tenantIdOrName provided\n+  if (self._options.isB2C && self._options.isCommonEndpoint && !params.tenantIdOrName)\n+    return next(new Error('In collectInfoFromReq: we are using common endpoint for B2C but tenantIdOrName is not provided'));\n \n   // -------------------------------------------------------------------------\n-  // create a cachekey and an Metadata object instance  \n+  // calculate metadataUrl, create a cachekey and an Metadata object instance  \n   // we will fetch the metadata, save it into the object using the cachekey       \n-  // -------------------------------------------------------------------------        \n-  var metadataUrl = self._options.identityMetadata;\n+  // -------------------------------------------------------------------------   \n+  var metadataUrl = self._options.identityMetadata;   \n \n-  if (self._options.isB2C) {\n-    metadataUrl = metadataUrl.concat(`&p=${params.policy}`);\n-    params.cachekey = 'policy: ' + params.policy;  // B2C metadata cachekey\n-    log.info(`B2C metadataUrl is: ${metadataUrl}`);\n-  } else {\n-    params.cachekey = 'ordinary'; // non B2C metadata cachekey\n-    log.info(`metadataUrl is: ${metadataUrl}`);\n+  // if we are using common endpoint and we are given the tenantIdOrName, let's replace it\n+  if (self._options.isCommonEndpoint && params.tenantIdOrName) {\n+    metadataUrl = metadataUrl.replace('/common/', `/${params.tenantIdOrName}/`);","path":"lib/oidcstrategy.js","position":174,"original_position":174,"commit_id":"48a9776aa67becc254c7ef2c9af33de909acc0b2","original_commit_id":"b370e258b9583dd6fe89ef7d5bbe03f16c177c75","user":{"login":"polita","id":7873171,"avatar_url":"https://avatars.githubusercontent.com/u/7873171?v=3","gravatar_id":"","url":"https://api.github.com/users/polita","html_url":"https://github.com/polita","followers_url":"https://api.github.com/users/polita/followers","following_url":"https://api.github.com/users/polita/following{/other_user}","gists_url":"https://api.github.com/users/polita/gists{/gist_id}","starred_url":"https://api.github.com/users/polita/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/polita/subscriptions","organizations_url":"https://api.github.com/users/polita/orgs","repos_url":"https://api.github.com/users/polita/repos","events_url":"https://api.github.com/users/polita/events{/privacy}","received_events_url":"https://api.github.com/users/polita/received_events","type":"User","site_admin":false},"body":"I understand that's where it will fail if we don't validate. I'm suggesting we should validate before then so we can give a better error message if it's set to something invalid. This is true for both tenantIdOrName and the policy name.","created_at":"2016-10-25T15:16:10Z","updated_at":"2016-10-25T15:16:10Z","html_url":"https://github.com/AzureAD/passport-azure-ad/pull/237#discussion_r84927076","pull_request_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/pulls/237","_links":{"self":{"href":"https://api.github.com/repos/AzureAD/passport-azure-ad/pulls/comments/84927076"},"html":{"href":"https://github.com/AzureAD/passport-azure-ad/pull/237#discussion_r84927076"},"pull_request":{"href":"https://api.github.com/repos/AzureAD/passport-azure-ad/pulls/237"}}},"pull_request":{"url":"https://api.github.com/repos/AzureAD/passport-azure-ad/pulls/237","id":90309472,"html_url":"https://github.com/AzureAD/passport-azure-ad/pull/237","diff_url":"https://github.com/AzureAD/passport-azure-ad/pull/237.diff","patch_url":"https://github.com/AzureAD/passport-azure-ad/pull/237.patch","issue_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/issues/237","number":237,"state":"open","locked":false,"title":"Couple of issues","user":{"login":"lovemaths","id":6593843,"avatar_url":"https://avatars.githubusercontent.com/u/6593843?v=3","gravatar_id":"","url":"https://api.github.com/users/lovemaths","html_url":"https://github.com/lovemaths","followers_url":"https://api.github.com/users/lovemaths/followers","following_url":"https://api.github.com/users/lovemaths/following{/other_user}","gists_url":"https://api.github.com/users/lovemaths/gists{/gist_id}","starred_url":"https://api.github.com/users/lovemaths/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lovemaths/subscriptions","organizations_url":"https://api.github.com/users/lovemaths/orgs","repos_url":"https://api.github.com/users/lovemaths/repos","events_url":"https://api.github.com/users/lovemaths/events{/privacy}","received_events_url":"https://api.github.com/users/lovemaths/received_events","type":"User","site_admin":false},"body":"(1) Issue #229, use tenant id dynamically for each request\r\n\r\n(2) Issue #233, provide documentation with more details\r\n\r\n(3) Issue #123, Question: what is the difference between OIDCStrategy and BearerStrategy. Which one should I use?\r\n\r\n(4) now pass all the errors to async.waterfall and call self.fail at one place instead of everywhere\r\n\r\n(5) updated readme and changelog","created_at":"2016-10-21T01:29:29Z","updated_at":"2016-10-25T15:16:10Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a7948848dd073262eb42a6c4d8b301026c98ddf7","assignee":{"login":"brentschmaltz","id":3172421,"avatar_url":"https://avatars.githubusercontent.com/u/3172421?v=3","gravatar_id":"","url":"https://api.github.com/users/brentschmaltz","html_url":"https://github.com/brentschmaltz","followers_url":"https://api.github.com/users/brentschmaltz/followers","following_url":"https://api.github.com/users/brentschmaltz/following{/other_user}","gists_url":"https://api.github.com/users/brentschmaltz/gists{/gist_id}","starred_url":"https://api.github.com/users/brentschmaltz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brentschmaltz/subscriptions","organizations_url":"https://api.github.com/users/brentschmaltz/orgs","repos_url":"https://api.github.com/users/brentschmaltz/repos","events_url":"https://api.github.com/users/brentschmaltz/events{/privacy}","received_events_url":"https://api.github.com/users/brentschmaltz/received_events","type":"User","site_admin":false},"assignees":[{"login":"brentschmaltz","id":3172421,"avatar_url":"https://avatars.githubusercontent.com/u/3172421?v=3","gravatar_id":"","url":"https://api.github.com/users/brentschmaltz","html_url":"https://github.com/brentschmaltz","followers_url":"https://api.github.com/users/brentschmaltz/followers","following_url":"https://api.github.com/users/brentschmaltz/following{/other_user}","gists_url":"https://api.github.com/users/brentschmaltz/gists{/gist_id}","starred_url":"https://api.github.com/users/brentschmaltz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brentschmaltz/subscriptions","organizations_url":"https://api.github.com/users/brentschmaltz/orgs","repos_url":"https://api.github.com/users/brentschmaltz/repos","events_url":"https://api.github.com/users/brentschmaltz/events{/privacy}","received_events_url":"https://api.github.com/users/brentschmaltz/received_events","type":"User","site_admin":false},{"login":"polita","id":7873171,"avatar_url":"https://avatars.githubusercontent.com/u/7873171?v=3","gravatar_id":"","url":"https://api.github.com/users/polita","html_url":"https://github.com/polita","followers_url":"https://api.github.com/users/polita/followers","following_url":"https://api.github.com/users/polita/following{/other_user}","gists_url":"https://api.github.com/users/polita/gists{/gist_id}","starred_url":"https://api.github.com/users/polita/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/polita/subscriptions","organizations_url":"https://api.github.com/users/polita/orgs","repos_url":"https://api.github.com/users/polita/repos","events_url":"https://api.github.com/users/polita/events{/privacy}","received_events_url":"https://api.github.com/users/polita/received_events","type":"User","site_admin":false},{"login":"SomkaPe","id":21348914,"avatar_url":"https://avatars.githubusercontent.com/u/21348914?v=3","gravatar_id":"","url":"https://api.github.com/users/SomkaPe","html_url":"https://github.com/SomkaPe","followers_url":"https://api.github.com/users/SomkaPe/followers","following_url":"https://api.github.com/users/SomkaPe/following{/other_user}","gists_url":"https://api.github.com/users/SomkaPe/gists{/gist_id}","starred_url":"https://api.github.com/users/SomkaPe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SomkaPe/subscriptions","organizations_url":"https://api.github.com/users/SomkaPe/orgs","repos_url":"https://api.github.com/users/SomkaPe/repos","events_url":"https://api.github.com/users/SomkaPe/events{/privacy}","received_events_url":"https://api.github.com/users/SomkaPe/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/pulls/237/commits","review_comments_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/pulls/237/comments","review_comment_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/pulls/comments{/number}","comments_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/issues/237/comments","statuses_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/statuses/48a9776aa67becc254c7ef2c9af33de909acc0b2","head":{"label":"AzureAD:sijliu/3.0.1","ref":"sijliu/3.0.1","sha":"48a9776aa67becc254c7ef2c9af33de909acc0b2","user":{"login":"AzureAD","id":2966316,"avatar_url":"https://avatars.githubusercontent.com/u/2966316?v=3","gravatar_id":"","url":"https://api.github.com/users/AzureAD","html_url":"https://github.com/AzureAD","followers_url":"https://api.github.com/users/AzureAD/followers","following_url":"https://api.github.com/users/AzureAD/following{/other_user}","gists_url":"https://api.github.com/users/AzureAD/gists{/gist_id}","starred_url":"https://api.github.com/users/AzureAD/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AzureAD/subscriptions","organizations_url":"https://api.github.com/users/AzureAD/orgs","repos_url":"https://api.github.com/users/AzureAD/repos","events_url":"https://api.github.com/users/AzureAD/events{/privacy}","received_events_url":"https://api.github.com/users/AzureAD/received_events","type":"Organization","site_admin":false},"repo":{"id":10182011,"name":"passport-azure-ad","full_name":"AzureAD/passport-azure-ad","owner":{"login":"AzureAD","id":2966316,"avatar_url":"https://avatars.githubusercontent.com/u/2966316?v=3","gravatar_id":"","url":"https://api.github.com/users/AzureAD","html_url":"https://github.com/AzureAD","followers_url":"https://api.github.com/users/AzureAD/followers","following_url":"https://api.github.com/users/AzureAD/following{/other_user}","gists_url":"https://api.github.com/users/AzureAD/gists{/gist_id}","starred_url":"https://api.github.com/users/AzureAD/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AzureAD/subscriptions","organizations_url":"https://api.github.com/users/AzureAD/orgs","repos_url":"https://api.github.com/users/AzureAD/repos","events_url":"https://api.github.com/users/AzureAD/events{/privacy}","received_events_url":"https://api.github.com/users/AzureAD/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/AzureAD/passport-azure-ad","description":"Azure Active Directory Authentication Strategies using Node and Passportjs","fork":false,"url":"https://api.github.com/repos/AzureAD/passport-azure-ad","forks_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/forks","keys_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/keys{/key_id}","collaborators_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/teams","hooks_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/hooks","issue_events_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/issues/events{/number}","events_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/events","assignees_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/assignees{/user}","branches_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/branches{/branch}","tags_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/tags","blobs_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/git/refs{/sha}","trees_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/git/trees{/sha}","statuses_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/statuses/{sha}","languages_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/languages","stargazers_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/stargazers","contributors_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/contributors","subscribers_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/subscribers","subscription_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/subscription","commits_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/commits{/sha}","git_commits_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/git/commits{/sha}","comments_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/comments{/number}","issue_comment_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/issues/comments{/number}","contents_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/contents/{+path}","compare_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/compare/{base}...{head}","merges_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/merges","archive_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/downloads","issues_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/issues{/number}","pulls_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/pulls{/number}","milestones_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/milestones{/number}","notifications_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/labels{/name}","releases_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/releases{/id}","deployments_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/deployments","created_at":"2013-05-20T21:08:54Z","updated_at":"2016-09-30T18:38:55Z","pushed_at":"2016-10-24T22:33:39Z","git_url":"git://github.com/AzureAD/passport-azure-ad.git","ssh_url":"git@github.com:AzureAD/passport-azure-ad.git","clone_url":"https://github.com/AzureAD/passport-azure-ad.git","svn_url":"https://github.com/AzureAD/passport-azure-ad","homepage":"","size":824,"stargazers_count":97,"watchers_count":97,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":64,"mirror_url":null,"open_issues_count":11,"forks":64,"open_issues":11,"watchers":97,"default_branch":"master"}},"base":{"label":"AzureAD:dev","ref":"dev","sha":"32065ff0e94a983c5f9fc3378cd69859176283da","user":{"login":"AzureAD","id":2966316,"avatar_url":"https://avatars.githubusercontent.com/u/2966316?v=3","gravatar_id":"","url":"https://api.github.com/users/AzureAD","html_url":"https://github.com/AzureAD","followers_url":"https://api.github.com/users/AzureAD/followers","following_url":"https://api.github.com/users/AzureAD/following{/other_user}","gists_url":"https://api.github.com/users/AzureAD/gists{/gist_id}","starred_url":"https://api.github.com/users/AzureAD/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AzureAD/subscriptions","organizations_url":"https://api.github.com/users/AzureAD/orgs","repos_url":"https://api.github.com/users/AzureAD/repos","events_url":"https://api.github.com/users/AzureAD/events{/privacy}","received_events_url":"https://api.github.com/users/AzureAD/received_events","type":"Organization","site_admin":false},"repo":{"id":10182011,"name":"passport-azure-ad","full_name":"AzureAD/passport-azure-ad","owner":{"login":"AzureAD","id":2966316,"avatar_url":"https://avatars.githubusercontent.com/u/2966316?v=3","gravatar_id":"","url":"https://api.github.com/users/AzureAD","html_url":"https://github.com/AzureAD","followers_url":"https://api.github.com/users/AzureAD/followers","following_url":"https://api.github.com/users/AzureAD/following{/other_user}","gists_url":"https://api.github.com/users/AzureAD/gists{/gist_id}","starred_url":"https://api.github.com/users/AzureAD/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AzureAD/subscriptions","organizations_url":"https://api.github.com/users/AzureAD/orgs","repos_url":"https://api.github.com/users/AzureAD/repos","events_url":"https://api.github.com/users/AzureAD/events{/privacy}","received_events_url":"https://api.github.com/users/AzureAD/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/AzureAD/passport-azure-ad","description":"Azure Active Directory Authentication Strategies using Node and Passportjs","fork":false,"url":"https://api.github.com/repos/AzureAD/passport-azure-ad","forks_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/forks","keys_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/keys{/key_id}","collaborators_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/teams","hooks_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/hooks","issue_events_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/issues/events{/number}","events_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/events","assignees_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/assignees{/user}","branches_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/branches{/branch}","tags_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/tags","blobs_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/git/refs{/sha}","trees_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/git/trees{/sha}","statuses_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/statuses/{sha}","languages_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/languages","stargazers_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/stargazers","contributors_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/contributors","subscribers_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/subscribers","subscription_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/subscription","commits_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/commits{/sha}","git_commits_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/git/commits{/sha}","comments_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/comments{/number}","issue_comment_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/issues/comments{/number}","contents_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/contents/{+path}","compare_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/compare/{base}...{head}","merges_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/merges","archive_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/downloads","issues_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/issues{/number}","pulls_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/pulls{/number}","milestones_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/milestones{/number}","notifications_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/labels{/name}","releases_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/releases{/id}","deployments_url":"https://api.github.com/repos/AzureAD/passport-azure-ad/deployments","created_at":"2013-05-20T21:08:54Z","updated_at":"2016-09-30T18:38:55Z","pushed_at":"2016-10-24T22:33:39Z","git_url":"git://github.com/AzureAD/passport-azure-ad.git","ssh_url":"git@github.com:AzureAD/passport-azure-ad.git","clone_url":"https://github.com/AzureAD/passport-azure-ad.git","svn_url":"https://github.com/AzureAD/passport-azure-ad","homepage":"","size":824,"stargazers_count":97,"watchers_count":97,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":64,"mirror_url":null,"open_issues_count":11,"forks":64,"open_issues":11,"watchers":97,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/AzureAD/passport-azure-ad/pulls/237"},"html":{"href":"https://github.com/AzureAD/passport-azure-ad/pull/237"},"issue":{"href":"https://api.github.com/repos/AzureAD/passport-azure-ad/issues/237"},"comments":{"href":"https://api.github.com/repos/AzureAD/passport-azure-ad/issues/237/comments"},"review_comments":{"href":"https://api.github.com/repos/AzureAD/passport-azure-ad/pulls/237/comments"},"review_comment":{"href":"https://api.github.com/repos/AzureAD/passport-azure-ad/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/AzureAD/passport-azure-ad/pulls/237/commits"},"statuses":{"href":"https://api.github.com/repos/AzureAD/passport-azure-ad/statuses/48a9776aa67becc254c7ef2c9af33de909acc0b2"}}}}
{"actor":{"display_login":"polita"}}