profile = "vcs/user-repos@2.0" provider = "github" """ UserRepos map. Returns all github repositories of specified user """ map UserRepos { call Paginate( user = input.user, ) { return map error if (outcome.error) outcome.error return map result { repos = outcome.data.repositories } } } operation Paginate { data = [] page = 1 // FIXME: Hack to create a while with maximum loop count - use Superface stdlib instead call foreach(_x of Array(1000)) FetchRepos(user = args.user, page = page) { fail if (outcome.error) outcome.error data = [...data, ...outcome.data.repositories] page = page + 1 return if (outcome.data.repositories.length === 0) { repositories: data, statusCode: 200 } } return { repositories: data, statusCode: 200 } } operation FetchRepos { http GET "/users/{args.user}/repos" { request { query { page = args.page } } response { fail if(statusCode !== 200){ message: body.message, description: body.documentation_url, statusCode: statusCode } return { repositories: body.map((r) => { const repo = { name: r.name }; if (r.description) { repo.description = r.description; } return repo; }), statusCode: statusCode } } } }