{"action":"created","comment":{"url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/pulls/comments/119942502","pull_request_review_id":41870264,"id":119942502,"diff_hunk":"@@ -81,3 +114,182 @@ export function submitForm(formConfig, form) {\n     );\n   };\n }\n+\n+/**\n+ * Transforms the data from an old version of a form to be used in the latest\n+ *  version.\n+ *\n+ * @param  {Object}  savedData    The formData from the old version of the form.\n+ * @param  {Ingeter} savedVersion The version of the form the corresponding\n+ *                                 data was saved with.\n+ * @param  {Array}   migrations   An array of functions which transform the\n+ *                                 data saved to work with the current version.\n+ * @return {Object}               The modified formData which should work with\n+ *                                 the current version of the form.\n+ */\n+function getUpdatedFormData(savedData, savedVersion, migrations) {\n+  // migrations is an array that looks like this:\n+  // [\n+  //   (savedData) => {\n+  //     // Makes modifications to savedData to update it from version 0 -> version 1\n+  //   },\n+  //   (savedData) => {\n+  //     // Makes modifications to update the data from version 1 -> version 2\n+  //   },\n+  //   ...\n+  // ]\n+  // The functions transform the data from version of their index to the next one up.\n+  // This works because every time the version is bumped on the form, it's because\n+  //  the saved data needs to be manipulated, so there will be no skipped versions.\n+  if (!migrations || typeof migrations[savedVersion] !== 'function') {\n+    return savedData;\n+  }\n+  return getUpdatedFormData(migrations[savedVersion](savedData), savedVersion + 1, migrations);\n+}\n+\n+/**\n+ * Loads the form data from the back end into the redux store.\n+ *\n+ * @param  {Integer} formId      The form's identifier\n+ * @param  {Array}   migrations  An array of functions to run the data returned\n+ *                                from the server through in the event that the\n+ *                                version of the form the data was saved with\n+ *                                is different from the current version.\n+ */\n+export function loadFormData(formId, migrations) {\n+  // TODO: Test if the form is still saved after submission.\n+  return dispatch => {\n+    const userToken = sessionStorage.userToken;\n+    // If we don't have a userToken, fail safely\n+    if (!userToken) {\n+      dispatch(setLoaded('no-auth')); // Shouldn't get here, but just in case\n+      return;\n+    }\n+\n+    // Update UI while we're waiting for the API\n+    dispatch(setLoaded('pending'));\n+\n+    // Query the api\n+    fetch(`${environment.API_URL}/v0/in_progress_forms/${formId}`, {\n+      // TODO: These headers should work, but trigger an api error right now\n+      headers: {\n+        'Content-Type': 'application/json',\n+        // 'X-Key-Inflection': 'camel',\n+        Authorization: `Token token=${userToken}`\n+      },\n+    }).then((res) => {\n+      // console.log('res', res);\n+      if (res.ok) {\n+        return res.json();\n+      }\n+\n+      let status = 'failure';\n+      if (res.status === 401) {\n+        // TODO: If they've sat on the page long enough for their token to expire\n+        //  and try to load, tell them their session expired and they need to log\n+        //  back in and try again.\n+        status = 'no-auth';\n+      } else if (res.status === 404) {\n+        status = 'not-found';\n+      }\n+      return Promise.reject(status);\n+    }).then((resBody) => {  // eslint-disable-line consistent-return\n+      // Just in case something funny happens where the json returned isn't an object as expected\n+      if (typeof resBody !== 'object') {\n+        return Promise.reject('invalid-data');\n+      }\n+\n+      // If an empty object is returned, throw a not-found\n+      // TODO: When / if we return a 404 for applications that don't exist, remove this\n+      if (Object.keys(resBody).length === 0) {\n+        return Promise.reject('not-found');\n+      }\n+\n+      // If we've made it this far, we've got valid form\n+\n+      // TODO: Remove the assignment once the API is updated to store and return\n+      //  formData and metadata\n+      let formData;\n+      try {\n+        // NOTE: This may change to be migrated in the back end before sent over\n+        formData = getUpdatedFormData(resBody.form_data, resBody.metadata.version, migrations);\n+        // formData = getUpdatedFormData(resBody.formData, resBody.metadata.version, migrations);\n+      } catch (e) {\n+        // TODO: Log e.message somewhere; it's the reason the data couldn't be\n+        //  transformed. Sentry error?\n+        return Promise.reject('invalid-data');\n+      }\n+      // Set the data in the redux store\n+      // NOTE: Until we get the api for the list of filled forms, we're using this\n+      //  function to see if the form has been filled in, so this is setting the\n+      //  data in a separate place to be pulled in when we _actually_ want to load\n+      //  the formData.\n+      // dispatch(setData(formData));\n+      dispatch(setLoadedData({ formData, metadata: resBody.metadata }));\n+      dispatch(setLoaded('success'));\n+    }).catch((status) => {\n+      let loadedStatus = status;\n+      // if res.json() has a parsing error, it'll reject with a SyntaxError\n+      if (status instanceof SyntaxError) {\n+        // TODO: Log this somehow...Sentry error?\n+        console.error('Could not parse response.', status); // eslint-disable-line no-console\n+        loadedStatus = 'invalid-data';\n+      }\n+      dispatch(setLoaded(loadedStatus));\n+    });\n+  };\n+}\n+\n+/**\n+ * Saves the form data to the back end\n+ * @param  {String}  formId    The form's formId\n+ * @param  {Ingeter} version   The form's version\n+ * @param  {String}  returnUrl The last URL the user was at before saving\n+ * @param  {Object}  formData  The data the user has entered so far\n+ */\n+export function saveFormData(formId, version, returnUrl, formData) {\n+  // Double stringify because of api reasons. Olive Branch issues, methinks.","path":"src/js/common/schemaform/actions.js","position":185,"original_position":185,"commit_id":"9458d907cf46b9c0e8770b9c1183325cb60ebb7e","original_commit_id":"9458d907cf46b9c0e8770b9c1183325cb60ebb7e","user":{"login":"cvalarida","id":12970166,"avatar_url":"https://avatars3.githubusercontent.com/u/12970166?v=3","gravatar_id":"","url":"https://api.github.com/users/cvalarida","html_url":"https://github.com/cvalarida","followers_url":"https://api.github.com/users/cvalarida/followers","following_url":"https://api.github.com/users/cvalarida/following{/other_user}","gists_url":"https://api.github.com/users/cvalarida/gists{/gist_id}","starred_url":"https://api.github.com/users/cvalarida/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cvalarida/subscriptions","organizations_url":"https://api.github.com/users/cvalarida/orgs","repos_url":"https://api.github.com/users/cvalarida/repos","events_url":"https://api.github.com/users/cvalarida/events{/privacy}","received_events_url":"https://api.github.com/users/cvalarida/received_events","type":"User","site_admin":false},"body":"There was [some chatter](https://github.com/department-of-veterans-affairs/vets.gov-team/issues/3046#issuecomment-305308118) about this the other day, but until I'm \"officially\" told not to, this is working.","created_at":"2017-06-02T20:10:25Z","updated_at":"2017-06-02T20:16:43Z","html_url":"https://github.com/department-of-veterans-affairs/vets-website/pull/5677#discussion_r119942502","pull_request_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/pulls/5677","_links":{"self":{"href":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/pulls/comments/119942502"},"html":{"href":"https://github.com/department-of-veterans-affairs/vets-website/pull/5677#discussion_r119942502"},"pull_request":{"href":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/pulls/5677"}}},"pull_request":{"url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/pulls/5677","id":123788815,"html_url":"https://github.com/department-of-veterans-affairs/vets-website/pull/5677","diff_url":"https://github.com/department-of-veterans-affairs/vets-website/pull/5677.diff","patch_url":"https://github.com/department-of-veterans-affairs/vets-website/pull/5677.patch","issue_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/issues/5677","number":5677,"state":"open","locked":false,"title":"Save in progress forms","user":{"login":"cvalarida","id":12970166,"avatar_url":"https://avatars3.githubusercontent.com/u/12970166?v=3","gravatar_id":"","url":"https://api.github.com/users/cvalarida","html_url":"https://github.com/cvalarida","followers_url":"https://api.github.com/users/cvalarida/followers","following_url":"https://api.github.com/users/cvalarida/following{/other_user}","gists_url":"https://api.github.com/users/cvalarida/gists{/gist_id}","starred_url":"https://api.github.com/users/cvalarida/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cvalarida/subscriptions","organizations_url":"https://api.github.com/users/cvalarida/orgs","repos_url":"https://api.github.com/users/cvalarida/repos","events_url":"https://api.github.com/users/cvalarida/events{/privacy}","received_events_url":"https://api.github.com/users/cvalarida/received_events","type":"User","site_admin":false},"body":"Connects to https://github.com/department-of-veterans-affairs/vets.gov-team/issues/2910\r\n\r\nIt's not quite finished, but I should have made a PR before this, so...it's high time.\r\n\r\n## What this entails\r\n- New login modal (@raquelromano-gov Please review!)\r\n- Saving form data\r\n- Loading form data\r\n\r\n## Workflow\r\nFirst, if we're not logged in, we'll have an info box on the introduction page telling us that we can save forms while they're in progress, but we'll have to log in first. While filling out the forms (still not logged in), we'll have a link at the bottom of each page directing us to sign in before we can save the application.\r\n\r\nOnce logged in, the introduction page (`FormIntroButtons` for lack of a better name) will allow us to continue the form we've already saved (if we've got one) or start over from scratch. If we continue, it'll load the data into the redux store at `form.data` and redirect us to the last page we were on.\r\n\r\n## Behind the scenes\r\nWhat's happening behind the scenes is a little hacky until we get an API endpoint which tells us all the forms we have saved.\r\n\r\nThe `FormIntroButtons` component is responsible for the actual querying of the saved data for now. When the component is loaded, it'll try to query for the data. If we signed in on the page that has the `FormIntroButtons`, it'll re-query because the last one will inevitably have failed (`no-auth`). This will update the buttons to allow us to \"load\" the data.\r\n\r\nI struggled with semantics a little bit because there are only so many ways to express that we're \"loading\" the data. First, we load the saved data into the redux store at `form.loadedData`. This holds both `formData` and `metadata`. When we click the button to \"load\" the saved form, we transfer the data from `form.loadedData.formData` to `form.data`.\r\n\r\nIdeally, we'd get the information about whether the form is filled in upon login and just check it in `FormIntroButtons`, then make the query when the button is clicked, but...Can't do that yet.\r\n\r\n## Still to come\r\n- Redirect upon save\r\n- Error messages upon failed save (for various reasons)\r\n- All the tests 😞","created_at":"2017-06-02T19:53:09Z","updated_at":"2017-06-02T20:16:44Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"assignees":[],"requested_reviewers":[{"login":"jbalboni","id":634932,"avatar_url":"https://avatars1.githubusercontent.com/u/634932?v=3","gravatar_id":"","url":"https://api.github.com/users/jbalboni","html_url":"https://github.com/jbalboni","followers_url":"https://api.github.com/users/jbalboni/followers","following_url":"https://api.github.com/users/jbalboni/following{/other_user}","gists_url":"https://api.github.com/users/jbalboni/gists{/gist_id}","starred_url":"https://api.github.com/users/jbalboni/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jbalboni/subscriptions","organizations_url":"https://api.github.com/users/jbalboni/orgs","repos_url":"https://api.github.com/users/jbalboni/repos","events_url":"https://api.github.com/users/jbalboni/events{/privacy}","received_events_url":"https://api.github.com/users/jbalboni/received_events","type":"User","site_admin":false},{"login":"raquelromano-gov","id":25439097,"avatar_url":"https://avatars2.githubusercontent.com/u/25439097?v=3","gravatar_id":"","url":"https://api.github.com/users/raquelromano-gov","html_url":"https://github.com/raquelromano-gov","followers_url":"https://api.github.com/users/raquelromano-gov/followers","following_url":"https://api.github.com/users/raquelromano-gov/following{/other_user}","gists_url":"https://api.github.com/users/raquelromano-gov/gists{/gist_id}","starred_url":"https://api.github.com/users/raquelromano-gov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/raquelromano-gov/subscriptions","organizations_url":"https://api.github.com/users/raquelromano-gov/orgs","repos_url":"https://api.github.com/users/raquelromano-gov/repos","events_url":"https://api.github.com/users/raquelromano-gov/events{/privacy}","received_events_url":"https://api.github.com/users/raquelromano-gov/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/pulls/5677/commits","review_comments_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/pulls/5677/comments","review_comment_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/pulls/comments{/number}","comments_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/issues/5677/comments","statuses_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/statuses/9458d907cf46b9c0e8770b9c1183325cb60ebb7e","head":{"label":"department-of-veterans-affairs:save-in-progress-cv","ref":"save-in-progress-cv","sha":"9458d907cf46b9c0e8770b9c1183325cb60ebb7e","user":{"login":"department-of-veterans-affairs","id":5421563,"avatar_url":"https://avatars2.githubusercontent.com/u/5421563?v=3","gravatar_id":"","url":"https://api.github.com/users/department-of-veterans-affairs","html_url":"https://github.com/department-of-veterans-affairs","followers_url":"https://api.github.com/users/department-of-veterans-affairs/followers","following_url":"https://api.github.com/users/department-of-veterans-affairs/following{/other_user}","gists_url":"https://api.github.com/users/department-of-veterans-affairs/gists{/gist_id}","starred_url":"https://api.github.com/users/department-of-veterans-affairs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/department-of-veterans-affairs/subscriptions","organizations_url":"https://api.github.com/users/department-of-veterans-affairs/orgs","repos_url":"https://api.github.com/users/department-of-veterans-affairs/repos","events_url":"https://api.github.com/users/department-of-veterans-affairs/events{/privacy}","received_events_url":"https://api.github.com/users/department-of-veterans-affairs/received_events","type":"Organization","site_admin":false},"repo":{"id":33202667,"name":"vets-website","full_name":"department-of-veterans-affairs/vets-website","owner":{"login":"department-of-veterans-affairs","id":5421563,"avatar_url":"https://avatars2.githubusercontent.com/u/5421563?v=3","gravatar_id":"","url":"https://api.github.com/users/department-of-veterans-affairs","html_url":"https://github.com/department-of-veterans-affairs","followers_url":"https://api.github.com/users/department-of-veterans-affairs/followers","following_url":"https://api.github.com/users/department-of-veterans-affairs/following{/other_user}","gists_url":"https://api.github.com/users/department-of-veterans-affairs/gists{/gist_id}","starred_url":"https://api.github.com/users/department-of-veterans-affairs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/department-of-veterans-affairs/subscriptions","organizations_url":"https://api.github.com/users/department-of-veterans-affairs/orgs","repos_url":"https://api.github.com/users/department-of-veterans-affairs/repos","events_url":"https://api.github.com/users/department-of-veterans-affairs/events{/privacy}","received_events_url":"https://api.github.com/users/department-of-veterans-affairs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/department-of-veterans-affairs/vets-website","description":"Beta version of Vets.gov","fork":false,"url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website","forks_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/forks","keys_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/keys{/key_id}","collaborators_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/teams","hooks_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/hooks","issue_events_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/issues/events{/number}","events_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/events","assignees_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/assignees{/user}","branches_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/branches{/branch}","tags_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/tags","blobs_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/git/refs{/sha}","trees_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/git/trees{/sha}","statuses_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/statuses/{sha}","languages_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/languages","stargazers_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/stargazers","contributors_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/contributors","subscribers_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/subscribers","subscription_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/subscription","commits_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/commits{/sha}","git_commits_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/git/commits{/sha}","comments_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/comments{/number}","issue_comment_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/issues/comments{/number}","contents_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/contents/{+path}","compare_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/compare/{base}...{head}","merges_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/merges","archive_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/downloads","issues_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/issues{/number}","pulls_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/pulls{/number}","milestones_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/milestones{/number}","notifications_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/labels{/name}","releases_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/releases{/id}","deployments_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/deployments","created_at":"2015-03-31T18:34:05Z","updated_at":"2017-05-22T13:56:26Z","pushed_at":"2017-06-02T19:53:10Z","git_url":"git://github.com/department-of-veterans-affairs/vets-website.git","ssh_url":"git@github.com:department-of-veterans-affairs/vets-website.git","clone_url":"https://github.com/department-of-veterans-affairs/vets-website.git","svn_url":"https://github.com/department-of-veterans-affairs/vets-website","homepage":"","size":110014,"stargazers_count":82,"watchers_count":82,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":47,"mirror_url":null,"open_issues_count":64,"forks":47,"open_issues":64,"watchers":82,"default_branch":"master"}},"base":{"label":"department-of-veterans-affairs:master","ref":"master","sha":"88827ba26f26e02e9ed9ae264007e052157aca17","user":{"login":"department-of-veterans-affairs","id":5421563,"avatar_url":"https://avatars2.githubusercontent.com/u/5421563?v=3","gravatar_id":"","url":"https://api.github.com/users/department-of-veterans-affairs","html_url":"https://github.com/department-of-veterans-affairs","followers_url":"https://api.github.com/users/department-of-veterans-affairs/followers","following_url":"https://api.github.com/users/department-of-veterans-affairs/following{/other_user}","gists_url":"https://api.github.com/users/department-of-veterans-affairs/gists{/gist_id}","starred_url":"https://api.github.com/users/department-of-veterans-affairs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/department-of-veterans-affairs/subscriptions","organizations_url":"https://api.github.com/users/department-of-veterans-affairs/orgs","repos_url":"https://api.github.com/users/department-of-veterans-affairs/repos","events_url":"https://api.github.com/users/department-of-veterans-affairs/events{/privacy}","received_events_url":"https://api.github.com/users/department-of-veterans-affairs/received_events","type":"Organization","site_admin":false},"repo":{"id":33202667,"name":"vets-website","full_name":"department-of-veterans-affairs/vets-website","owner":{"login":"department-of-veterans-affairs","id":5421563,"avatar_url":"https://avatars2.githubusercontent.com/u/5421563?v=3","gravatar_id":"","url":"https://api.github.com/users/department-of-veterans-affairs","html_url":"https://github.com/department-of-veterans-affairs","followers_url":"https://api.github.com/users/department-of-veterans-affairs/followers","following_url":"https://api.github.com/users/department-of-veterans-affairs/following{/other_user}","gists_url":"https://api.github.com/users/department-of-veterans-affairs/gists{/gist_id}","starred_url":"https://api.github.com/users/department-of-veterans-affairs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/department-of-veterans-affairs/subscriptions","organizations_url":"https://api.github.com/users/department-of-veterans-affairs/orgs","repos_url":"https://api.github.com/users/department-of-veterans-affairs/repos","events_url":"https://api.github.com/users/department-of-veterans-affairs/events{/privacy}","received_events_url":"https://api.github.com/users/department-of-veterans-affairs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/department-of-veterans-affairs/vets-website","description":"Beta version of Vets.gov","fork":false,"url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website","forks_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/forks","keys_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/keys{/key_id}","collaborators_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/teams","hooks_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/hooks","issue_events_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/issues/events{/number}","events_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/events","assignees_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/assignees{/user}","branches_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/branches{/branch}","tags_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/tags","blobs_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/git/refs{/sha}","trees_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/git/trees{/sha}","statuses_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/statuses/{sha}","languages_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/languages","stargazers_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/stargazers","contributors_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/contributors","subscribers_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/subscribers","subscription_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/subscription","commits_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/commits{/sha}","git_commits_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/git/commits{/sha}","comments_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/comments{/number}","issue_comment_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/issues/comments{/number}","contents_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/contents/{+path}","compare_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/compare/{base}...{head}","merges_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/merges","archive_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/downloads","issues_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/issues{/number}","pulls_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/pulls{/number}","milestones_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/milestones{/number}","notifications_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/labels{/name}","releases_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/releases{/id}","deployments_url":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/deployments","created_at":"2015-03-31T18:34:05Z","updated_at":"2017-05-22T13:56:26Z","pushed_at":"2017-06-02T19:53:10Z","git_url":"git://github.com/department-of-veterans-affairs/vets-website.git","ssh_url":"git@github.com:department-of-veterans-affairs/vets-website.git","clone_url":"https://github.com/department-of-veterans-affairs/vets-website.git","svn_url":"https://github.com/department-of-veterans-affairs/vets-website","homepage":"","size":110014,"stargazers_count":82,"watchers_count":82,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":47,"mirror_url":null,"open_issues_count":64,"forks":47,"open_issues":64,"watchers":82,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/pulls/5677"},"html":{"href":"https://github.com/department-of-veterans-affairs/vets-website/pull/5677"},"issue":{"href":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/issues/5677"},"comments":{"href":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/issues/5677/comments"},"review_comments":{"href":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/pulls/5677/comments"},"review_comment":{"href":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/pulls/5677/commits"},"statuses":{"href":"https://api.github.com/repos/department-of-veterans-affairs/vets-website/statuses/9458d907cf46b9c0e8770b9c1183325cb60ebb7e"}}}}
{"actor":{"display_login":"cvalarida"}}