Problem
Adding Google Drive from the catalogue on self-hosted Executor v2 fails before reaching account connection or OAuth.
The UI shows:
The app could not be imported. Check its source or try a different catalog entry.
The install request returns HTTP 422:
{
"_tag": "CatalogImportFailed",
"reason": "The catalog must provide a public HTTPS definition URL."
}
Reproduction
- Open Apps → Add app on self-hosted v2.
- Select Google Drive (OpenAPI, drive.google.com).
- Click Add app.
Expected: import the API definition and proceed to account setup.
Actual: the import fails with the error above.
Cause
The live catalogue at https://integrations.sh/api.json contains this entry (relevant fields):
{
"id": "curated/google-drive",
"kind": "openapi",
"feeds": ["curated"],
"connectUrl": "https://integrations.sh/specs/google/google-drive.json"
}
In packages/catalog/src/implementation/source.ts, the importer selects:
const url = URL.parse(entry.feeds?.[0] ?? entry.connectUrl ?? "");
This selects "curated", which is not a URL, rather than the valid connectUrl. I fetched the connectUrl successfully: it contains a Google Drive OpenAPI 3.1.0 definition with 45 paths.
Version
Reproduced on the self-hosted beta image pinned to:
ghcr.io/usefulsoftwareco/executor-selfhost@sha256:467c48d075ce1bfb74f2e786d7cdf54a1414175da65d4ceb49bf16c1d8199f0b
The same URL-selection logic remains in public v2 commit dad925e:
|
// Registry entries are third-party input: they never reach a host-internal destination. |
Suggested fix
Prefer a valid HTTPS connectUrl, falling back to a valid HTTPS definition URL in feeds for entries that use that format. Retain the existing outbound destination checks. Add a regression test for a catalogue entry whose feeds contains a label such as "curated".
Problem
Adding Google Drive from the catalogue on self-hosted Executor v2 fails before reaching account connection or OAuth.
The UI shows:
The install request returns HTTP 422:
{ "_tag": "CatalogImportFailed", "reason": "The catalog must provide a public HTTPS definition URL." }Reproduction
Expected: import the API definition and proceed to account setup.
Actual: the import fails with the error above.
Cause
The live catalogue at https://integrations.sh/api.json contains this entry (relevant fields):
{ "id": "curated/google-drive", "kind": "openapi", "feeds": ["curated"], "connectUrl": "https://integrations.sh/specs/google/google-drive.json" }In packages/catalog/src/implementation/source.ts, the importer selects:
This selects "curated", which is not a URL, rather than the valid connectUrl. I fetched the connectUrl successfully: it contains a Google Drive OpenAPI 3.1.0 definition with 45 paths.
Version
Reproduced on the self-hosted beta image pinned to:
The same URL-selection logic remains in public v2 commit dad925e:
executor/packages/catalog/src/implementation/source.ts
Line 113 in dad925e
Suggested fix
Prefer a valid HTTPS connectUrl, falling back to a valid HTTPS definition URL in feeds for entries that use that format. Retain the existing outbound destination checks. Add a regression test for a catalogue entry whose feeds contains a label such as "curated".