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
216 216
217const connectFormFromTemplate = (template: SourceTemplate): ConnectFormState => ({217const connectFormFromTemplate = (template: SourceTemplate): ConnectFormState => ({
218 ...defaultConnectForm(),218 ...defaultConnectForm(),
219 kind: template.kind === "internal" ? "openapi" : template.kind,219 kind: template.kind,
220 endpoint: template.endpoint,220 endpoint: template.endpoint,
221 specUrl: "specUrl" in template ? template.specUrl : "",
221 name: template.name,222 name: template.name,
222 namespace: namespaceFromUrl(template.endpoint),223 namespace: namespaceFromUrl(template.endpoint),
223 transport: template.kind === "mcp" ? "auto" : "",224 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
260 transport: template?.kind === "mcp" ? "auto" : "",260 transport: template?.kind === "mcp" ? "auto" : "",
261 queryParamsText: "",261 queryParamsText: "",
262 headersText: "",262 headersText: "",
263 specUrl: "",263 specUrl: template && "specUrl" in template ? template.specUrl : "",
264 defaultHeadersText: "",264 defaultHeadersText: "",
265 authKind: "none",265 authKind: "none",
266 authHeaderName: "Authorization",266 authHeaderName: "Authorization",
apps/web/src/views/source-templates.ts+16−2
@@ -1,13 +1,23 @@
1import type { Source } from "@executor-v3/react";1import type { Source } from "@executor-v3/react";
2 2
3export type SourceTemplate = {3type SourceTemplateBase = {
4 id: string;4 id: string;
5 name: string;5 name: string;
6 summary: string;6 summary: string;
7 kind: Source["kind"];
8 endpoint: string;7 endpoint: string;
9};8};
10 9
10export type OpenApiSourceTemplate = SourceTemplateBase & {
11 kind: "openapi";
12 specUrl: string;
13};
14
15export type NonOpenApiSourceTemplate = SourceTemplateBase & {
16 kind: Exclude<Source["kind"], "openapi" | "internal">;
17};
18
19export type SourceTemplate = OpenApiSourceTemplate | NonOpenApiSourceTemplate;
20
11export const sourceTemplates: ReadonlyArray<SourceTemplate> = [21export const sourceTemplates: ReadonlyArray<SourceTemplate> = [
12 {22 {
13 id: "deepwiki-mcp",23 id: "deepwiki-mcp",
@@ -29,6 +39,7 @@ export const sourceTemplates: ReadonlyArray<SourceTemplate> = [ · 15 unmodified lines
29 summary: "Repos, issues, pull requests, actions, and org settings.",39 summary: "Repos, issues, pull requests, actions, and org settings.",
30 kind: "openapi",40 kind: "openapi",
31 endpoint: "https://api.github.com",41 endpoint: "https://api.github.com",
42 specUrl: "https://raw.githubusercontent.com/github/rest-api-description/main/descriptions/api.github.com/api.github.com.yaml",
32 },43 },
33 {44 {
34 id: "github-graphql",45 id: "github-graphql",
@@ -50,6 +61,7 @@ export const sourceTemplates: ReadonlyArray<SourceTemplate> = [ · 15 unmodified lines
50 summary: "Models, files, responses, and fine-tuning.",61 summary: "Models, files, responses, and fine-tuning.",
51 kind: "openapi",62 kind: "openapi",
52 endpoint: "https://api.openai.com/v1",63 endpoint: "https://api.openai.com/v1",
64 specUrl: "https://app.stainless.com/api/spec/documented/openai/openapi.documented.yml",
53 },65 },
54 {66 {
55 id: "vercel-api",67 id: "vercel-api",
@@ -57,6 +69,7 @@ export const sourceTemplates: ReadonlyArray<SourceTemplate> = [ · 1 unmodified line
57 summary: "Deployments, projects, domains, and environments.",69 summary: "Deployments, projects, domains, and environments.",
58 kind: "openapi",70 kind: "openapi",
59 endpoint: "https://api.vercel.com",71 endpoint: "https://api.vercel.com",
72 specUrl: "https://openapi.vercel.sh",
60 },73 },
61 {74 {
62 id: "stripe-api",75 id: "stripe-api",
@@ -64,6 +77,7 @@ export const sourceTemplates: ReadonlyArray<SourceTemplate> = [ · 1 unmodified line
64 summary: "Payments, billing, subscriptions, and invoices.",77 summary: "Payments, billing, subscriptions, and invoices.",
65 kind: "openapi",78 kind: "openapi",
66 endpoint: "https://api.stripe.com",79 endpoint: "https://api.stripe.com",
80 specUrl: "https://raw.githubusercontent.com/stripe/openapi/master/openapi/spec3.json",
67 },81 },
68 {82 {
69 id: "linear-graphql",83 id: "linear-graphql",