History

add specUrl to OpenAPI source templates and refine template types

- Split SourceTemplate into OpenApiSourceTemplate and NonOpenApiSourceTemplate discriminated union for type-safe specUrl access - Add specUrl to GitHub, OpenAI, Vercel, and Stripe templates - Wire specUrl through both add-source and source-editor form defaults

Rhys Sullivan committed 8 months ago

Commit 74ceb1c1 parent 5ca042b3 files · +19 −4Browse files

Unified · Split

3 files
  1. apps/web/src/views/add-source.tsx +2 −1
  2. apps/web/src/views/source-editor.tsx +1 −1
  3. apps/web/src/views/source-templates.ts +16 −2
apps/web/src/views/add-source.tsx+2−1
@@ -216,8 +216,9 @@ const defaultConnectForm = (discovery?: SourceDiscoveryResult): ConnectFormState · 215 unmodified lines
216216
217217 const connectFormFromTemplate = (template: SourceTemplate): ConnectFormState => ({
218218 ...defaultConnectForm(),
219− kind: template.kind === "internal" ? "openapi" : template.kind,
219+ kind: template.kind,
220220 endpoint: template.endpoint,
221+ specUrl: "specUrl" in template ? template.specUrl : "",
221222 name: template.name,
222223 namespace: namespaceFromUrl(template.endpoint),
223224 transport: template.kind === "mcp" ? "auto" : "",
apps/web/src/views/source-editor.tsx+1−1
@@ -260,7 +260,7 @@ const defaultFormState = (template?: SourceTemplate): SourceFormState => ({ · 259 unmodified lines
260260 transport: template?.kind === "mcp" ? "auto" : "",
261261 queryParamsText: "",
262262 headersText: "",
263− specUrl: "",
263+ specUrl: template && "specUrl" in template ? template.specUrl : "",
264264 defaultHeadersText: "",
265265 authKind: "none",
266266 authHeaderName: "Authorization",
apps/web/src/views/source-templates.ts+16−2
@@ -1,13 +1,23 @@
11 import type { Source } from "@executor-v3/react";
22
3−export type SourceTemplate = {
3+type SourceTemplateBase = {
44 id: string;
55 name: string;
66 summary: string;
7− kind: Source["kind"];
87 endpoint: string;
98 };
109
10+export type OpenApiSourceTemplate = SourceTemplateBase & {
11+ kind: "openapi";
12+ specUrl: string;
13+};
14+
15+export type NonOpenApiSourceTemplate = SourceTemplateBase & {
16+ kind: Exclude<Source["kind"], "openapi" | "internal">;
17+};
18+
19+export type SourceTemplate = OpenApiSourceTemplate | NonOpenApiSourceTemplate;
20+
1121 export const sourceTemplates: ReadonlyArray<SourceTemplate> = [
1222 {
1323 id: "deepwiki-mcp",
@@ -29,6 +39,7 @@ export const sourceTemplates: ReadonlyArray<SourceTemplate> = [ · 15 unmodified lines
2939 summary: "Repos, issues, pull requests, actions, and org settings.",
3040 kind: "openapi",
3141 endpoint: "https://api.github.com",
42+ specUrl: "https://raw.githubusercontent.com/github/rest-api-description/main/descriptions/api.github.com/api.github.com.yaml",
3243 },
3344 {
3445 id: "github-graphql",
@@ -50,6 +61,7 @@ export const sourceTemplates: ReadonlyArray<SourceTemplate> = [ · 15 unmodified lines
5061 summary: "Models, files, responses, and fine-tuning.",
5162 kind: "openapi",
5263 endpoint: "https://api.openai.com/v1",
64+ specUrl: "https://app.stainless.com/api/spec/documented/openai/openapi.documented.yml",
5365 },
5466 {
5567 id: "vercel-api",
@@ -57,6 +69,7 @@ export const sourceTemplates: ReadonlyArray<SourceTemplate> = [ · 1 unmodified line
5769 summary: "Deployments, projects, domains, and environments.",
5870 kind: "openapi",
5971 endpoint: "https://api.vercel.com",
72+ specUrl: "https://openapi.vercel.sh",
6073 },
6174 {
6275 id: "stripe-api",
@@ -64,6 +77,7 @@ export const sourceTemplates: ReadonlyArray<SourceTemplate> = [ · 1 unmodified line
6477 summary: "Payments, billing, subscriptions, and invoices.",
6578 kind: "openapi",
6679 endpoint: "https://api.stripe.com",
80+ specUrl: "https://raw.githubusercontent.com/stripe/openapi/master/openapi/spec3.json",
6781 },
6882 {
6983 id: "linear-graphql",