Unified · Split
| @@ -118,7 +118,6 @@ · 117 unmodified lines | |||
| 118 | "mcp-mcp": { | 118 | "mcp-mcp": { |
| 119 | "name": "Mcp MCP", | 119 | "name": "Mcp MCP", |
| 120 | "namespace": "mcp.mcp", | 120 | "namespace": "mcp.mcp", |
| 121 | "kind": "mcp", | ||
| 122 | "config": { | 121 | "config": { |
| 123 | "endpoint": "https://mcp.linear.app/mcp", | 122 | "endpoint": "https://mcp.linear.app/mcp", |
| 124 | "transport": "auto", | 123 | "transport": "auto", |
| @@ -195,6 +194,115 @@ · 70 unmodified lines | |||
| 195 | "client_id_issued_at": 1774854942 | 194 | "client_id_issued_at": 1774854942 |
| 196 | } | 195 | } |
| 197 | } | 196 | } |
| 197 | }, | ||
| 198 | "kind": "mcp" | ||
| 199 | }, | ||
| 200 | "google-calendar": { | ||
| 201 | "name": "Google Calendar", | ||
| 202 | "namespace": "google.calendar", | ||
| 203 | "config": { | ||
| 204 | "service": "calendar", | ||
| 205 | "version": "v3", | ||
| 206 | "discoveryUrl": "https://calendar-json.googleapis.com/$discovery/rest?version=v3", | ||
| 207 | "defaultHeaders": null, | ||
| 208 | "scopes": [ | ||
| 209 | "https://www.googleapis.com/auth/calendar" | ||
| 210 | ], | ||
| 211 | "auth": { | ||
| 212 | "kind": "oauth2", | ||
| 213 | "clientId": "171149749557-apegmds63qp2h2u2s55p6rom1j6m3m5k.apps.googleusercontent.com", | ||
| 214 | "clientSecretRef": { | ||
| 215 | "secretId": "sec_f2c1f3ce-97c5-429b-a7bf-22fcd6007de3" | ||
| 216 | }, | ||
| 217 | "clientAuthentication": "client_secret_post", | ||
| 218 | "authorizationEndpoint": "https://accounts.google.com/o/oauth2/v2/auth", | ||
| 219 | "tokenEndpoint": "https://oauth2.googleapis.com/token", | ||
| 220 | "scopes": [ | ||
| 221 | "https://www.googleapis.com/auth/calendar" | ||
| 222 | ], | ||
| 223 | "accessTokenRef": { | ||
| 224 | "secretId": "sec_023e64bd-8e6b-49cc-b33c-950c31612846" | ||
| 225 | }, | ||
| 226 | "refreshTokenRef": { | ||
| 227 | "secretId": "sec_e4c2e96c-b809-4d72-873c-a8ba7d595610" | ||
| 228 | }, | ||
| 229 | "expiresAt": 1774859675319 | ||
| 230 | } | ||
| 231 | }, | ||
| 232 | "kind": "google_discovery" | ||
| 233 | }, | ||
| 234 | "google-drive": { | ||
| 235 | "name": "Google Drive", | ||
| 236 | "namespace": "google.drive", | ||
| 237 | "config": { | ||
| 238 | "service": "drive", | ||
| 239 | "version": "v3", | ||
| 240 | "discoveryUrl": "https://www.googleapis.com/discovery/v1/apis/drive/v3/rest", | ||
| 241 | "defaultHeaders": null, | ||
| 242 | "scopes": [ | ||
| 243 | "https://www.googleapis.com/auth/drive", | ||
| 244 | "https://www.googleapis.com/auth/drive.apps.readonly" | ||
| 245 | ], | ||
| 246 | "auth": { | ||
| 247 | "kind": "oauth2", | ||
| 248 | "clientId": "171149749557-apegmds63qp2h2u2s55p6rom1j6m3m5k.apps.googleusercontent.com", | ||
| 249 | "clientSecretRef": { | ||
| 250 | "secretId": "sec_f2c1f3ce-97c5-429b-a7bf-22fcd6007de3" | ||
| 251 | }, | ||
| 252 | "clientAuthentication": "client_secret_post", | ||
| 253 | "authorizationEndpoint": "https://accounts.google.com/o/oauth2/v2/auth", | ||
| 254 | "tokenEndpoint": "https://oauth2.googleapis.com/token", | ||
| 255 | "scopes": [ | ||
| 256 | "https://www.googleapis.com/auth/drive", | ||
| 257 | "https://www.googleapis.com/auth/drive.apps.readonly" | ||
| 258 | ], | ||
| 259 | "accessTokenRef": { | ||
| 260 | "secretId": "sec_39d48e40-634c-4673-8038-8fc7c027c698" | ||
| 261 | }, | ||
| 262 | "refreshTokenRef": { | ||
| 263 | "secretId": "sec_ec05b35f-c0ff-4529-b80e-a5638589a6eb" | ||
| 264 | }, | ||
| 265 | "expiresAt": 1774859675319 | ||
| 266 | } | ||
| 267 | }, | ||
| 268 | "kind": "google_discovery" | ||
| 269 | }, | ||
| 270 | "google-gmail": { | ||
| 271 | "name": "Gmail", | ||
| 272 | "namespace": "google.gmail", | ||
| 273 | "kind": "google_discovery", | ||
| 274 | "config": { | ||
| 275 | "service": "gmail", | ||
| 276 | "version": "v1", | ||
| 277 | "discoveryUrl": "https://gmail.googleapis.com/$discovery/rest?version=v1", | ||
| 278 | "defaultHeaders": null, | ||
| 279 | "scopes": [ | ||
| 280 | "https://mail.google.com/", | ||
| 281 | "https://www.googleapis.com/auth/gmail.settings.basic", | ||
| 282 | "https://www.googleapis.com/auth/gmail.settings.sharing" | ||
| 283 | ], | ||
| 284 | "auth": { | ||
| 285 | "kind": "oauth2", | ||
| 286 | "clientId": "171149749557-apegmds63qp2h2u2s55p6rom1j6m3m5k.apps.googleusercontent.com", | ||
| 287 | "clientSecretRef": { | ||
| 288 | "secretId": "sec_f2c1f3ce-97c5-429b-a7bf-22fcd6007de3" | ||
| 289 | }, | ||
| 290 | "clientAuthentication": "client_secret_post", | ||
| 291 | "authorizationEndpoint": "https://accounts.google.com/o/oauth2/v2/auth", | ||
| 292 | "tokenEndpoint": "https://oauth2.googleapis.com/token", | ||
| 293 | "scopes": [ | ||
| 294 | "https://mail.google.com/", | ||
| 295 | "https://www.googleapis.com/auth/gmail.settings.basic", | ||
| 296 | "https://www.googleapis.com/auth/gmail.settings.sharing" | ||
| 297 | ], | ||
| 298 | "accessTokenRef": { | ||
| 299 | "secretId": "sec_379eee62-86fe-49fe-93dc-8af40fa04dc3" | ||
| 300 | }, | ||
| 301 | "refreshTokenRef": { | ||
| 302 | "secretId": "sec_c58e7cb5-296b-4024-8f22-8b49ef7a7f38" | ||
| 303 | }, | ||
| 304 | "expiresAt": 1774859675319 | ||
| 305 | } | ||
| 198 | } | 306 | } |
| 199 | } | 307 | } |
| 200 | }, | 308 | }, |
| @@ -68,8 +68,11 @@ export const getFrontendPluginRoute = ( · 67 unmodified lines | |||
| 68 | routeKey: string, | 68 | routeKey: string, |
| 69 | ) => frontendPluginRegistry.getRoute(pluginKey, routeKey); | 69 | ) => frontendPluginRegistry.getRoute(pluginKey, routeKey); |
| 70 | 70 | ||
| 71 | const resolveSourcePluginKey = (kind: string): string => | ||
| 72 | isGoogleDiscoverySource(kind) ? "google-discovery" : kind; | ||
| 73 | |||
| 71 | export const getSourceFrontendPlugin = (kind: string) => { | 74 | export const getSourceFrontendPlugin = (kind: string) => { |
| 72 | const plugin = getFrontendPlugin(kind); | 75 | const plugin = getFrontendPlugin(resolveSourcePluginKey(kind)); |
| 73 | return plugin && isSourceFrontendPlugin(plugin) ? plugin : null; | 76 | return plugin && isSourceFrontendPlugin(plugin) ? plugin : null; |
| 74 | }; | 77 | }; |
| 75 | 78 | ||
| @@ -104,17 +104,6 @@ export function SecretsPage() { · 103 unmodified lines | |||
| 104 | </p> | 104 | </p> |
| 105 | </div> | 105 | </div> |
| 106 | <div className="flex gap-2"> | 106 | <div className="flex gap-2"> |
| 107 | <Button | ||
| 108 | size="sm" | ||
| 109 | variant="outline" | ||
| 110 | onClick={() => { | ||
| 111 | setShowCreateStore(true); | ||
| 112 | }} | ||
| 113 | disabled={creatableStorePlugins.length === 0} | ||
| 114 | > | ||
| 115 | <IconPlus className="size-3.5" /> | ||
| 116 | Add store | ||
| 117 | </Button> | ||
| 118 | <Button | 107 | <Button |
| 119 | size="sm" | 108 | size="sm" |
| 120 | onClick={() => { | 109 | onClick={() => { |
| @@ -150,7 +139,7 @@ export function SecretsPage() { · 29 unmodified lines | |||
| 150 | items.length === 0 ? ( | 139 | items.length === 0 ? ( |
| 151 | <SectionEmptyState | 140 | <SectionEmptyState |
| 152 | title="No secret stores yet" | 141 | title="No secret stores yet" |
| 153 | description="Add a store to connect an external backend like 1Password." | 142 | description="External secret stores are currently unavailable in this app." |
| 154 | /> | 143 | /> |
| 155 | ) : ( | 144 | ) : ( |
| 156 | <div className="grid gap-3 md:grid-cols-2"> | 145 | <div className="grid gap-3 md:grid-cols-2"> |
| @@ -21,10 +21,6 @@ import { openApiHttpPlugin } from "@executor/plugin-openapi-http"; · 20 unmodified lines | |||
| 21 | import { | 21 | import { |
| 22 | openApiSdkPlugin, | 22 | openApiSdkPlugin, |
| 23 | } from "@executor/plugin-openapi-sdk"; | 23 | } from "@executor/plugin-openapi-sdk"; |
| 24 | import { onePasswordHttpPlugin } from "@executor/plugin-onepassword-http"; | ||
| 25 | import { | ||
| 26 | onePasswordSdkPlugin, | ||
| 27 | } from "@executor/plugin-onepassword-sdk"; | ||
| 28 | import { | 24 | import { |
| 29 | createExecutorApiLayer, | 25 | createExecutorApiLayer, |
| 30 | } from "@executor/platform-api/http"; | 26 | } from "@executor/platform-api/http"; |
| @@ -66,7 +62,6 @@ import { createFileGraphqlSourceStorage } from "./graphql-source-storage"; · 35 unmodified lines | |||
| 66 | import { createFileMcpOAuthSessionStorage } from "./mcp-oauth-session-storage"; | 62 | import { createFileMcpOAuthSessionStorage } from "./mcp-oauth-session-storage"; |
| 67 | import { createFileMcpSourceStorage } from "./mcp-source-storage"; | 63 | import { createFileMcpSourceStorage } from "./mcp-source-storage"; |
| 68 | import { createFileOpenApiSourceStorage } from "./openapi-source-storage"; | 64 | import { createFileOpenApiSourceStorage } from "./openapi-source-storage"; |
| 69 | import { createFileOnePasswordStoreStorage } from "./onepassword-store-storage"; | ||
| 70 | 65 | ||
| 71 | export { createFileGoogleDiscoveryOAuthSessionStorage } from "./google-discovery-oauth-session-storage"; | 66 | export { createFileGoogleDiscoveryOAuthSessionStorage } from "./google-discovery-oauth-session-storage"; |
| 72 | export { createFileGoogleDiscoverySourceStorage } from "./google-discovery-source-storage"; | 67 | export { createFileGoogleDiscoverySourceStorage } from "./google-discovery-source-storage"; |
| @@ -74,7 +69,6 @@ export { createFileGraphqlSourceStorage } from "./graphql-source-storage"; · 1 unmodified line | |||
| 74 | export { createFileMcpOAuthSessionStorage } from "./mcp-oauth-session-storage"; | 69 | export { createFileMcpOAuthSessionStorage } from "./mcp-oauth-session-storage"; |
| 75 | export { createFileMcpSourceStorage } from "./mcp-source-storage"; | 70 | export { createFileMcpSourceStorage } from "./mcp-source-storage"; |
| 76 | export { createFileOpenApiSourceStorage } from "./openapi-source-storage"; | 71 | export { createFileOpenApiSourceStorage } from "./openapi-source-storage"; |
| 77 | export { createFileOnePasswordStoreStorage } from "./onepassword-store-storage"; | ||
| 78 | 72 | ||
| 79 | export { | 73 | export { |
| 80 | DEFAULT_EXECUTOR_DATA_DIR, | 74 | DEFAULT_EXECUTOR_DATA_DIR, |
| @@ -142,7 +136,6 @@ const executorHttpPlugins = [ · 61 unmodified lines | |||
| 142 | graphqlHttpPlugin(), | 136 | graphqlHttpPlugin(), |
| 143 | googleDiscoveryHttpPlugin(), | 137 | googleDiscoveryHttpPlugin(), |
| 144 | mcpHttpPlugin(), | 138 | mcpHttpPlugin(), |
| 145 | onePasswordHttpPlugin(), | ||
| 146 | openApiHttpPlugin(), | 139 | openApiHttpPlugin(), |
| 147 | ] as const; | 140 | ] as const; |
| 148 | 141 | ||
| @@ -194,11 +187,6 @@ const createExecutorRuntime = ( · 45 unmodified lines | |||
| 194 | rootDir: resolve(localDataDir, "plugins", "openapi", "sources"), | 187 | rootDir: resolve(localDataDir, "plugins", "openapi", "sources"), |
| 195 | }), | 188 | }), |
| 196 | }), | 189 | }), |
| 197 | onePasswordSdkPlugin({ | ||
| 198 | storage: createFileOnePasswordStoreStorage({ | ||
| 199 | rootDir: resolve(localDataDir, "plugins", "onepassword", "stores"), | ||
| 200 | }), | ||
| 201 | }), | ||
| 202 | ] as const, | 190 | ] as const, |
| 203 | executionResolver: options.executionResolver, | 191 | executionResolver: options.executionResolver, |
| 204 | resolveSecretMaterial: options.resolveSecretMaterial, | 192 | resolveSecretMaterial: options.resolveSecretMaterial, |
| @@ -913,8 +913,8 @@ function GoogleDiscoveryBatchConnectPanel(props: { · 912 unmodified lines | |||
| 913 | onClick={() => toggleTemplate(template.id)} | 913 | onClick={() => toggleTemplate(template.id)} |
| 914 | className={ | 914 | className={ |
| 915 | selected | 915 | selected |
| 916 | ? "h-auto rounded-lg border border-primary/30 bg-primary/5 px-4 py-3 text-left" | 916 | ? "h-auto whitespace-normal rounded-lg border border-primary/30 bg-primary/5 px-4 py-3 text-left" |
| 917 | : "h-auto rounded-lg border border-border px-4 py-3 text-left hover:bg-accent/40" | 917 | : "h-auto whitespace-normal rounded-lg border border-border px-4 py-3 text-left hover:bg-accent/40" |
| 918 | } | 918 | } |
| 919 | > | 919 | > |
| 920 | <div className="flex items-start gap-3"> | 920 | <div className="flex items-start gap-3"> |