Fix adapter bugs and add 13 new connectors#96
Merged
Conversation
REST engine:
- mapParams now recurses into nested objects/arrays (fixes FastBill-style nested bodies)
- Add QUERY_AUTH auth type for APIs that carry credentials as query params
- Support embedded ${param} interpolation inside query/body strings (e.g. OData filters)
- Query params merge with auth-injected params instead of overwriting
16 existing adapters: fix systemic placeholder and config bugs
- ${x} -> {x} in paths (engine resolves path via {name})
- ${x} -> $x in queryParams/bodyMapping/headers (engine resolves refs via single $)
- authType BASIC -> BASIC_AUTH (FastBill, MFR)
- body -> bodyMapping/bodyTemplate (FastBill, Scopevisio, MFR link endpoints)
- Destatis: credentials moved from queryParams to QUERY_AUTH authConfig
Smoke tests:
- Parametrized catalog.spec validates every adapter tool (method, path, auth, placeholder references exist in declared parameters)
- rest.engine.spec covers new features: nested bodyMapping, QUERY_AUTH, embedded interpolation, missing-param drop behaviour
New adapters (13):
- Public data: vies-vat, handelsregister, deutsche-bahn, openplz
- Baustoff/Wholesale: oxomi
- Logistics: dpd-germany, gls-tracking, shipcloud, sendcloud
- Other categories: xentral (ERP), shopware-6 (e-commerce), here-geocoding (mapping), personio (HR)
All adapters declare requiredEnvVars so the import UI auto-prompts for credentials.
Catalog now exposes 29 adapters total, 275 adapter+engine tests passing.
This was referenced Apr 21, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Two-part change: fix systemic bugs that were preventing every JSON adapter in the catalog from working, and add 13 new adapters covering public data, Baustoff/Wholesale, logistics, ERP, e-commerce, mapping, and HR.
REST engine fixes
mapParamsnow recurses into nested objects/arrays — FastBill-style nested bodies (FILTER.TERM) now interpolate correctly instead of shipping literal$TERM.QUERY_AUTHauth type: injectsauthConfigvalues as query parameters, for APIs that pass credentials in the URL (e.g. Destatis, Oxomi, HERE).${param}interpolation now works embedded inside strings (e.g."ExternalId eq '${externalId}'"for OData filters), not just as whole-string references.queryParamsmerge with auth-injected params instead of overwriting them.Existing adapters (16) — bug fixes
All 16 DE adapters were affected by at least one of:
${x}inpath(engine expects{x}) — widespread${x}inqueryParams/bodyMapping/headers(engine expects$x) — widespread"authType": "BASIC"instead of"BASIC_AUTH"— FastBill, MFR"body"field instead of"bodyMapping"/"bodyTemplate"— FastBill, Scopevisio, MFR link endpointsqueryParamswith{{VAR}}templating that never ran — moved toQUERY_AUTHauthConfigAll fixes applied via a migration script (
.context/fix-adapters.mjs, gitignored).Tests
packages/backend/src/adapters/catalog.spec.ts(new): parametrized smoke test over every adapter — validates method, path placeholder format, authType whitelist, no legacybodyfield, and that every$ref/${ref}inqueryParams/bodyMapping/headerspoints to a declared tool parameter (catches typos in future adapters).packages/backend/src/connectors/engines/rest.engine.spec.ts: added coverage for recursive bodyMapping, missing-param drop, QUERY_AUTH injection + queryParams merge, embedded${x}interpolation, empty-result drop.275/275 tests passing across
rest.engine.spec+catalog.spec. TypeScript compiles clean. The 5 test failures inroles/users/tool-registryare pre-existing onmain(verified by stashing changes) and unrelated to this PR.New adapters (13)
All declare
requiredEnvVarsso the frontend import UI auto-generates the credential form with masked inputs for keys/tokens/passwords.Public data
vies-vat— EU VAT number validation (no auth)handelsregister— German commercial register via handelsregister.ai (API key)deutsche-bahn— DB timetable & journey planner via v6.db.transport.rest (no auth)openplz— German postal codes, localities, streets, districts (no auth)Baustoff/Wholesale
oxomi— Catalog, product, document search across Baustoff suppliers (portal id + user + access token)Logistics
dpd-germany— Public DPD parcel tracking (no auth)gls-tracking— Public GLS Track & Trace (no auth)shipcloud— Multi-carrier shipping aggregator for DE/EU (API key)sendcloud— Multi-carrier shipping for EU (public + secret key)Other categories
xentral— Xentral ERP (instance URL + user + password)shopware-6— Shopware 6 Store API (instance URL + access key)here-geocoding— HERE geocoding & search (API key)personio— Personio HR (bearer token — Personio's rotating-token limitation documented ininstructions)Catalog is now 29 adapters total.
Test plan