{"id":16878819,"url":"https://github.com/peterj/api-aggregation-wasm","last_synced_at":"2026-05-20T09:07:47.486Z","repository":{"id":242115172,"uuid":"808373751","full_name":"peterj/api-aggregation-wasm","owner":"peterj","description":"API aggregation with Envoy \u0026 WASM","archived":false,"fork":false,"pushed_at":"2024-05-31T18:51:56.000Z","size":11,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-19T21:43:01.750Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/peterj.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-31T00:05:23.000Z","updated_at":"2024-05-31T18:51:59.000Z","dependencies_parsed_at":null,"dependency_job_id":"971f490c-e331-437d-be33-63697801ebc7","html_url":"https://github.com/peterj/api-aggregation-wasm","commit_stats":null,"previous_names":["peterj/api-aggregation-wasm"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/peterj/api-aggregation-wasm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterj%2Fapi-aggregation-wasm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterj%2Fapi-aggregation-wasm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterj%2Fapi-aggregation-wasm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterj%2Fapi-aggregation-wasm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/peterj","download_url":"https://codeload.github.com/peterj/api-aggregation-wasm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterj%2Fapi-aggregation-wasm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33253127,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-20T04:48:54.280Z","status":"ssl_error","status_checked_at":"2026-05-20T04:48:10.851Z","response_time":356,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-13T15:51:34.236Z","updated_at":"2026-05-20T09:07:47.482Z","avatar_url":"https://github.com/peterj.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# API Aggregation with Envoy \u0026 WASM\n\nI'll try to build a simple API aggregation plugin for Envoy using WebAssembly (Wasm) as the extension mechanism.\n\n- Live stream: https://www.youtube.com/watch?v=Tbdj5Sw6HI0\n\n\n## What are we building?\n\nIf I make a request to `/hello` on the proxy, I want the proxy (or the extension) to make a call to:\n\n- GET host1 `/one`\n- GET host2 `/two`\n\nCombine (or aggregate) the responses from those two endpoints and then return that response.\n\nWe make request to `/hello` --\u003e Proxy makes requests to `/one` and `/two` --\u003e Proxy aggregates the responses and returns it to the client.\n\n```\nGET /hello --\u003e [{ \"value\": \"one\" }, { \"value\": \"two\"}]\n/one --\u003e { \"value\": \"one\" }\n/two --\u003e { \"value\": \"two\" }\n```\n\n## Configuration\n\n```json\n[{\n    \"path\": \"/\",\n    \"upstreams\": [\n        {\n            \"clusterName\": \"httpbin\",\n            \"path\": \"/ip\"\n        },\n        {\n            \"clusterName\": \"httpbin\",\n            \"path\": \"/headers\"\n        }\n    ],\n}]\n```\n\n\n## TODOs\n\n- [x] Scaffold the basic Wasm extension project\n- [x] Create (aka re-use) the Makefile for building the Wasm extension\n- [x] Implement calling multiple upstream services from the Wasm extension \u0026 aggregating the responses in some way\n- [x] Make the extension configurable with the upstream services to call and the aggregation strategy\n- [ ] Add authority and method to the configuration\n- [ ] Properly aggregate the responses","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeterj%2Fapi-aggregation-wasm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpeterj%2Fapi-aggregation-wasm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeterj%2Fapi-aggregation-wasm/lists"}