Closed micalevisk closed 6 years ago
Criar um diretório functions
que será a raiz do projeto para o Webtask
mkdir -p functions
cd functions
npm init -y
npm i -S axios
npm i -g wt-cli
wt create fetchMicaleviskRepos.js
Para refletir as atualizações nesse diretório, executar cd functions && wt update fetchMicaleviskRepos fetchMicaleviskRepos.js
(pode ser um npm script com nome wt:update
)
axios
para solicitações externas corretamente.
Caso não permita, a versão antiga será mantida; [EDIT] foi testado em https://micalevisk.github.io/testegit e (no mobile) o loading não termina; o fetch
nativo também não; terá que manter o XMLHttpRequest
fetchMicaleviskRepos.js
// inspirado em https://github.com/stursby/hasvuepassedreactyet/blob/master/functions/fetchGithubStars.js
const axios = require('axios');
// https://developer.github.com/v4/explorer
const gitHubGrapQLAPI = {
baseURL: 'https://api.github.com',
endpoint: 'graphql',
queries: {
getRepositories: (numberOfRepos = 100, numberOfLangs = 10) => `
query {
viewer {
bio
repositories(first: ${numberOfRepos}, orderBy: { field: CREATED_AT, direction: DESC }) {
edges {
node {
...repoInfo
languages(first: ${numberOfLangs}) {
edges {
node {
name
color
}
}
}
}
}
}
}
}
fragment repoInfo on Repository {
name
url
description
homepageUrl
createdAt
updatedAt
isFork
isPrivate
owner {
login
}
}
`
}
};
/**
* @param context {WebtaskContext}
*/
module.exports = function(context, cb) {
const { GITHUB_TOKEN } = context.secrets;
const { baseURL, endpoint, queries } = gitHubGrapQLAPI;
// Github GraphQL axios instance
const github = axios.create({
baseURL,
headers: {
'Authorization': `Bearer ${GITHUB_TOKEN}`
}
});
github.post(endpoint, { query: queries.getRepositories() })
.catch(err => {
console.error(err);
return cb(err);
})
.then(res => cb(null, res.data));
};
adicionar as tokens no
Secrets
do Webtask
Versão inicial (código apenas no Webtask) concluída no merge f24bcb66b0fe7c2a3e623f8cf414775996d30a2d vide PR #10
resta implementar usando o Node
feito em a758b6dedb0c0ac441b0d43544abbbda862c0a5f
Usar o https://webtask.io com um endpoint que realizará a consulta à API GraphQL do GitHub, afim de esconder os tokens privados.