@executor-js/plugin-openapi 1.4.33 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/dist/AddOpenApiSource-7M52SRUX.js +893 -0
  2. package/dist/AddOpenApiSource-7M52SRUX.js.map +1 -0
  3. package/dist/EditOpenApiSource-WTAMRJUK.js +68 -0
  4. package/dist/EditOpenApiSource-WTAMRJUK.js.map +1 -0
  5. package/dist/OpenApiAccountsPanel-3VJJXNQF.js +112 -0
  6. package/dist/OpenApiAccountsPanel-3VJJXNQF.js.map +1 -0
  7. package/dist/api/group.d.ts +104 -225
  8. package/dist/api/index.d.ts +127 -271
  9. package/dist/{chunk-BB5IAKRG.js → chunk-AQ7JDDRM.js} +12 -2
  10. package/dist/chunk-AQ7JDDRM.js.map +1 -0
  11. package/dist/chunk-BSLE6HCE.js +181 -0
  12. package/dist/chunk-BSLE6HCE.js.map +1 -0
  13. package/dist/chunk-MZWZQ24W.js +226 -0
  14. package/dist/chunk-MZWZQ24W.js.map +1 -0
  15. package/dist/chunk-OSIFYIQP.js +623 -0
  16. package/dist/chunk-OSIFYIQP.js.map +1 -0
  17. package/dist/chunk-QSSRVK6M.js +139 -0
  18. package/dist/chunk-QSSRVK6M.js.map +1 -0
  19. package/dist/chunk-V7VCHYOY.js +1544 -0
  20. package/dist/chunk-V7VCHYOY.js.map +1 -0
  21. package/dist/{chunk-AN4HJFNP.js → chunk-YVRI7KRC.js} +162 -186
  22. package/dist/chunk-YVRI7KRC.js.map +1 -0
  23. package/dist/client.js +9 -8
  24. package/dist/client.js.map +1 -1
  25. package/dist/core.js +28 -11
  26. package/dist/index.js +11 -4
  27. package/dist/react/AddOpenApiSource.d.ts +2 -13
  28. package/dist/react/GoogleProductPicker.d.ts +9 -0
  29. package/dist/react/OpenApiAccountsPanel.d.ts +6 -0
  30. package/dist/react/OpenApiSourceDetailsFields.d.ts +3 -2
  31. package/dist/react/atoms.d.ts +177 -192
  32. package/dist/react/auth-method-config.d.ts +15 -0
  33. package/dist/react/client.d.ts +103 -224
  34. package/dist/react/index.d.ts +2 -2
  35. package/dist/react/source-plugin.d.ts +2 -2
  36. package/dist/sdk/config.d.ts +75 -0
  37. package/dist/sdk/configure.test.d.ts +1 -0
  38. package/dist/sdk/describe-auth-methods.test.d.ts +1 -0
  39. package/dist/sdk/errors.d.ts +4 -6
  40. package/dist/sdk/extract.d.ts +7 -5
  41. package/dist/sdk/google-bundle.test.d.ts +1 -0
  42. package/dist/sdk/google-discovery.d.ts +43 -0
  43. package/dist/sdk/google-discovery.test.d.ts +1 -0
  44. package/dist/sdk/google-oauth-batches.d.ts +13 -0
  45. package/dist/sdk/google-oauth-batches.test.d.ts +1 -0
  46. package/dist/sdk/google-oauth-scopes.d.ts +3 -0
  47. package/dist/sdk/google-oauth-scopes.test.d.ts +1 -0
  48. package/dist/sdk/google-presets.d.ts +16 -0
  49. package/dist/sdk/google-presets.test.d.ts +1 -0
  50. package/dist/sdk/google-product-picker-scopes.test.d.ts +1 -0
  51. package/dist/sdk/index.d.ts +7 -5
  52. package/dist/sdk/invoke.d.ts +6 -9
  53. package/dist/sdk/openapi-utils.d.ts +1 -0
  54. package/dist/sdk/plugin.d.ts +74 -231
  55. package/dist/sdk/presets.d.ts +2 -1
  56. package/dist/sdk/preview.d.ts +20 -15
  57. package/dist/sdk/query-serialization.test.d.ts +1 -0
  58. package/dist/sdk/store.d.ts +14 -41
  59. package/dist/sdk/types.d.ts +23 -51
  60. package/dist/testing/index.d.ts +49 -38
  61. package/dist/testing.js +46 -18
  62. package/dist/testing.js.map +1 -1
  63. package/package.json +6 -4
  64. package/dist/AddOpenApiSource-NSCULGTM.js +0 -19
  65. package/dist/AddOpenApiSource-NSCULGTM.js.map +0 -1
  66. package/dist/EditOpenApiSource-MV7NYTRP.js +0 -774
  67. package/dist/EditOpenApiSource-MV7NYTRP.js.map +0 -1
  68. package/dist/OpenApiSourceSummary-7JBS7PUV.js +0 -122
  69. package/dist/OpenApiSourceSummary-7JBS7PUV.js.map +0 -1
  70. package/dist/chunk-2ZKKZYZH.js +0 -1181
  71. package/dist/chunk-2ZKKZYZH.js.map +0 -1
  72. package/dist/chunk-AN4HJFNP.js.map +0 -1
  73. package/dist/chunk-BB5IAKRG.js.map +0 -1
  74. package/dist/chunk-PRVJDE43.js +0 -2101
  75. package/dist/chunk-PRVJDE43.js.map +0 -1
  76. package/dist/chunk-X5JX3KTA.js +0 -201
  77. package/dist/chunk-X5JX3KTA.js.map +0 -1
  78. package/dist/react/OpenApiSourceSummary.d.ts +0 -5
  79. package/dist/sdk/credential-status.d.ts +0 -23
  80. package/dist/sdk/source-contracts.d.ts +0 -55
  81. /package/dist/{sdk/credential-status.test.d.ts → react/auth-method-config.test.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,13 @@
1
+ import type { GoogleOpenApiOAuthAudience } from "./google-presets";
2
+ export type GoogleOAuthBatchInput = {
3
+ readonly id: string;
4
+ readonly name: string;
5
+ readonly oauthAudience: GoogleOpenApiOAuthAudience;
6
+ readonly scopes: readonly string[];
7
+ };
8
+ export type GoogleOAuthConsentBatch = {
9
+ readonly id: string;
10
+ readonly label: string;
11
+ readonly apiScopes: readonly string[];
12
+ };
13
+ export declare const googleOAuthConsentBatches: (items: readonly GoogleOAuthBatchInput[]) => readonly GoogleOAuthConsentBatch[];
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ export declare const isGoogleUserConsentOAuthScope: (scope: string) => boolean;
2
+ export declare const filterGoogleUserConsentOAuthScopes: (scopes: Iterable<string>) => string[];
3
+ export declare const compactGoogleOAuthScopes: (scopes: Iterable<string>) => string[];
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,16 @@
1
+ import type { OpenApiPreset } from "./presets";
2
+ export type GoogleOpenApiOAuthAudience = "standard-user" | "advanced-user" | "workspace-admin" | "unsupported-user";
3
+ export type GoogleOpenApiPreset = OpenApiPreset & {
4
+ readonly oauthAudience: GoogleOpenApiOAuthAudience;
5
+ };
6
+ export declare const GOOGLE_BUNDLE_PRESET_ID = "google";
7
+ export declare const googleOpenApiBundlePreset: OpenApiPreset;
8
+ export declare const googleOpenApiPresets: readonly GoogleOpenApiPreset[];
9
+ export declare const googleStandardUserOAuthPresets: GoogleOpenApiPreset[];
10
+ export declare const googleOAuthConsentScopes: Readonly<Record<string, readonly string[]>>;
11
+ export declare const googleOAuthConsentScopesForPreset: (presetId: string) => readonly string[];
12
+ export declare const googlePresetForDiscoveryUrl: (url: string) => GoogleOpenApiPreset | undefined;
13
+ /** The distinct caution-tier audiences (`workspace-admin`, `unsupported-user`)
14
+ * among the supplied Discovery URLs — the ones whose consent the user should be
15
+ * warned about. Returns `[]` when every URL is a standard/advanced API. */
16
+ export declare const googleAudienceWarningsForUrls: (urls: readonly string[]) => readonly GoogleOpenApiOAuthAudience[];
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -1,9 +1,11 @@
1
1
  export { parse, resolveSpecText, fetchSpecText } from "./parse";
2
+ export { convertGoogleDiscoveryBundleToOpenApi, convertGoogleDiscoveryToOpenApi, fetchGoogleDiscoveryDocument, isGoogleDiscoveryUrl, type GoogleDiscoveryOpenApiConversion, } from "./google-discovery";
2
3
  export { extract } from "./extract";
3
- export { invoke, invokeWithLayer, resolveHeaders, annotationsForOperation } from "./invoke";
4
- export { openApiPlugin, type OpenApiSpecConfig, type OpenApiConfigureCredentialInput, type OpenApiConfigureInput, type OpenApiPluginExtension, type OpenApiPluginOptions, type OpenApiSourceRef, } from "./plugin";
5
- export { openapiSchema, type OpenapiSchema, type OpenapiStore, type StoredOperation, type StoredSource, type SourceConfig, makeDefaultOpenapiStore, } from "./store";
4
+ export { invoke, invokeWithLayer, annotationsForOperation } from "./invoke";
5
+ export { openApiPlugin, type OpenApiSpecConfig, type OpenApiConfigureInput, type OpenApiSpecInput, type OpenApiPreviewInput, type OpenApiPluginExtension, type OpenApiPluginOptions, } from "./plugin";
6
+ export { type OpenapiStore, type StoredOperation, makeDefaultOpenapiStore } from "./store";
7
+ export { decodeOpenApiIntegrationConfig, renderAuthTemplate, AuthenticationSchema, OpenApiIntegrationConfigSchema, type OpenApiIntegrationConfig, type RenderedAuth, } from "./config";
6
8
  export { previewSpec, SecurityScheme, AuthStrategy, HeaderPreset, OAuth2Preset, OAuth2Flows, OAuth2AuthorizationCodeFlow, OAuth2ClientCredentialsFlow, PreviewOperation, SpecPreview, } from "./preview";
7
9
  export { DocResolver, resolveBaseUrl, substituteUrlVariables, preferredContent, } from "./openapi-utils";
8
- export { OpenApiParseError, OpenApiExtractionError, OpenApiInvocationError, OpenApiOAuthError, } from "./errors";
9
- export { EncodingObject, ExtractedOperation, ExtractionResult, InvocationResult, MediaBinding, OAuth2SourceConfig, OperationBinding, OperationParameter, OperationRequestBody, ServerInfo, ServerVariable, OperationId, HttpMethod, ParameterLocation, } from "./types";
10
+ export { OpenApiParseError, OpenApiExtractionError, OpenApiInvocationError, OpenApiOAuthError, OpenApiAuthRequiredError, } from "./errors";
11
+ export { EncodingObject, ExtractedOperation, ExtractionResult, InvocationResult, MediaBinding, OperationBinding, OperationParameter, OperationRequestBody, ServerInfo, ServerVariable, OperationId, HttpMethod, ParameterLocation, variable, type Authentication, type APIKeyAuthentication, type AuthenticationVariable, type AuthenticationTemplateValue, } from "./types";
@@ -1,20 +1,16 @@
1
1
  import { Effect, Layer, Option } from "effect";
2
2
  import { HttpClient } from "effect/unstable/http";
3
- import type { SecretOwnedByConnectionError, StorageFailure } from "@executor-js/sdk/core";
4
3
  import { OpenApiInvocationError } from "./errors";
5
- import { type HeaderValue, type OperationBinding } from "./types";
6
- export declare const resolveHeaders: (headers: Record<string, HeaderValue>, secrets: {
7
- readonly get: (id: string) => Effect.Effect<string | null, SecretOwnedByConnectionError | StorageFailure>;
8
- }) => Effect.Effect<Record<string, string>, OpenApiInvocationError | StorageFailure>;
4
+ import { type OperationBinding } from "./types";
9
5
  export declare const invoke: (operation: {
10
- readonly method: "post" | "options" | "delete" | "get" | "put" | "head" | "patch" | "trace";
6
+ readonly method: "post" | "options" | "delete" | "get" | "put" | "patch" | "head" | "trace";
11
7
  readonly parameters: readonly {
12
8
  readonly name: string;
13
9
  readonly required: boolean;
14
10
  readonly description: Option.Option<string>;
15
11
  readonly schema: Option.Option<unknown>;
16
12
  readonly style: Option.Option<string>;
17
- readonly location: "query" | "header" | "path" | "cookie";
13
+ readonly location: "header" | "query" | "path" | "cookie";
18
14
  readonly explode: Option.Option<boolean>;
19
15
  readonly allowReserved: Option.Option<boolean>;
20
16
  }[];
@@ -36,21 +32,22 @@ export declare const invoke: (operation: {
36
32
  }[]>;
37
33
  }>;
38
34
  readonly pathTemplate: string;
35
+ readonly baseUrl?: string | undefined;
39
36
  }, args: Record<string, unknown>, resolvedHeaders: Record<string, string>, sourceQueryParams?: Record<string, string> | undefined) => Effect.Effect<{
40
37
  readonly error: unknown;
38
+ readonly data: unknown;
41
39
  readonly status: number;
42
40
  readonly headers: {
43
41
  readonly [x: string]: string;
44
42
  };
45
- readonly data: unknown;
46
43
  }, OpenApiInvocationError, HttpClient.HttpClient>;
47
44
  export declare const invokeWithLayer: (operation: OperationBinding, args: Record<string, unknown>, baseUrl: string, resolvedHeaders: Record<string, string>, sourceQueryParams: Record<string, string>, httpClientLayer: Layer.Layer<HttpClient.HttpClient, never, never>) => Effect.Effect<{
48
45
  readonly error: unknown;
46
+ readonly data: unknown;
49
47
  readonly status: number;
50
48
  readonly headers: {
51
49
  readonly [x: string]: string;
52
50
  };
53
- readonly data: unknown;
54
51
  }, OpenApiInvocationError, never>;
55
52
  export declare const annotationsForOperation: (method: string, pathTemplate: string) => {
56
53
  requiresApproval?: boolean;
@@ -7,6 +7,7 @@ export type PathItemObject = OpenAPIV3.PathItemObject | OpenAPIV3_1.PathItemObje
7
7
  export type RequestBodyObject = OpenAPIV3.RequestBodyObject | OpenAPIV3_1.RequestBodyObject;
8
8
  export type ResponseObject = OpenAPIV3.ResponseObject | OpenAPIV3_1.ResponseObject;
9
9
  export type MediaTypeObject = OpenAPIV3.MediaTypeObject | OpenAPIV3_1.MediaTypeObject;
10
+ export type ServerObject = OpenAPIV3.ServerObject | OpenAPIV3_1.ServerObject;
10
11
  export declare class DocResolver {
11
12
  readonly doc: ParsedDocument;
12
13
  constructor(doc: ParsedDocument);
@@ -1,84 +1,60 @@
1
1
  import { Effect, Option, Schema } from "effect";
2
2
  import type { Layer } from "effect";
3
3
  import { HttpClient } from "effect/unstable/http";
4
- import { CredentialBindingRef, type StorageFailure } from "@executor-js/sdk/core";
5
- import { type ConfigFileSink } from "@executor-js/config";
4
+ import { IntegrationAlreadyExistsError, IntegrationSlug, type AuthMethodDescriptor, type Integration, type IntegrationRecord, type StorageFailure } from "@executor-js/sdk/core";
5
+ import { type OpenApiIntegrationConfig } from "./config";
6
6
  import { OpenApiExtractionError, OpenApiOAuthError, OpenApiParseError } from "./errors";
7
7
  import { type SpecPreview } from "./preview";
8
- import { type OpenapiStore, type SourceConfig, type StoredSource } from "./store";
9
- import { OAuth2SourceConfig, type ConfiguredHeaderValue as ConfiguredHeaderValueValue, type HeaderValue as HeaderValueValue } from "./types";
10
- export type HeaderValue = HeaderValueValue;
11
- export type ConfiguredHeaderValue = ConfiguredHeaderValueValue;
12
- export type OpenApiOAuthInput = OAuth2SourceConfig;
8
+ import { type OpenapiStore } from "./store";
9
+ import type { Authentication } from "./types";
13
10
  export type OpenApiSpecInput = typeof OpenApiSpecInputSchema.Type;
14
- export type OpenApiSecretShapeInput = typeof OpenApiSecretShapeInputSchema.Type;
15
- export type OpenApiConfiguredValueInput = string | OpenApiSecretShapeInput | ConfiguredHeaderValueValue;
16
- export interface OpenApiSpecFetchCredentialsInput {
17
- readonly headers?: Record<string, OpenApiConfiguredValueInput>;
18
- readonly queryParams?: Record<string, OpenApiConfiguredValueInput>;
19
- }
20
- export interface OpenApiPreviewSpecFetchCredentialsInput {
21
- readonly headers?: Record<string, HeaderValue>;
22
- readonly queryParams?: Record<string, HeaderValue>;
23
- }
24
11
  export interface OpenApiPreviewInput {
25
12
  readonly spec: string;
26
- readonly specFetchCredentials?: OpenApiPreviewSpecFetchCredentialsInput;
27
13
  }
14
+ /** Add an OpenAPI integration to the catalog. The integration is the API
15
+ * surface; connections (the credentials) are attached separately and resolve
16
+ * their value through the declared `authenticationTemplate`. */
28
17
  export interface OpenApiSpecConfig {
29
18
  readonly spec: OpenApiSpecInput;
30
- readonly specFetchCredentials?: OpenApiSpecFetchCredentialsInput;
31
- /**
32
- * Executor scope id that owns this source row. Must be one of the
33
- * executor's configured scopes. Typical shape: an admin adds the
34
- * source at the outermost (organization) scope so it's visible to
35
- * every inner (per-user) scope via fall-through reads.
36
- */
37
- readonly scope: string;
38
- readonly name: string;
39
- readonly baseUrl: string;
40
- readonly namespace: string;
41
- readonly headers?: Record<string, OpenApiConfiguredValueInput>;
42
- readonly queryParams?: Record<string, OpenApiConfiguredValueInput>;
43
- readonly oauth2?: OpenApiOAuthInput;
19
+ /** The catalog slug for the new integration (the `<integration>` segment). */
20
+ readonly slug: string;
21
+ /** Human description (defaults to the spec title). */
22
+ readonly description?: string;
23
+ readonly baseUrl?: string;
24
+ /** Static headers applied to every request (no secret material). */
25
+ readonly headers?: Record<string, string>;
26
+ /** Static query params applied to every request. */
27
+ readonly queryParams?: Record<string, string>;
28
+ /** Auth methods a connection's value renders through. */
29
+ readonly authenticationTemplate?: readonly Authentication[];
44
30
  }
45
- export interface OpenApiSourceRef {
46
- readonly id: string;
47
- readonly scope: string;
31
+ export interface OpenApiExtensionFailure {
32
+ readonly _tag: string;
33
+ }
34
+ /** Add / merge custom auth methods onto an existing OpenAPI integration's
35
+ * `authenticationTemplate`. Mirrors the GraphQL plugin's `configure`. */
36
+ export interface OpenApiConfigureInput {
37
+ /** The auth methods to add. Each entry is appended to (or, when its `slug`
38
+ * already exists, replaces) the integration's existing template array. A
39
+ * custom apiKey method with no `slug` is assigned a generated `custom_<id>`
40
+ * slug that is collision-checked against the existing template. */
41
+ readonly authenticationTemplate: readonly Authentication[];
42
+ readonly mode?: "merge" | "replace";
48
43
  }
49
- export type OpenApiConfigureCredentialInput = string | {
50
- readonly kind: "text";
51
- readonly text: string;
52
- readonly prefix?: string;
53
- } | {
54
- readonly kind: "secret";
55
- readonly secretId: string;
56
- readonly secretScope?: string;
57
- readonly prefix?: string;
58
- } | {
59
- readonly kind: "connection";
60
- readonly connectionId: string;
61
- };
62
- /**
63
- * Errors any OpenAPI extension method may surface. The first three are
64
- * plugin-domain tagged errors that flow directly to clients (4xx, each
65
- * carrying its own `HttpApiSchema` status). `StorageFailure` covers
66
- * raw backend failures (`StorageError`) plus `UniqueViolationError`;
67
- * the HTTP edge (`@executor-js/api`'s `withCapture`) translates
68
- * `StorageError` to the opaque `InternalError({ traceId })` at Layer
69
- * composition. `UniqueViolationError` passes through — plugins can
70
- * `Effect.catchTag` it if they want a friendlier user-facing error.
71
- */
72
- export type OpenApiExtensionFailure = OpenApiParseError | OpenApiExtractionError | OpenApiOAuthError | StorageFailure;
73
44
  export interface OpenApiPluginExtension {
74
45
  readonly previewSpec: (input: string | OpenApiPreviewInput) => Effect.Effect<SpecPreview, OpenApiParseError | OpenApiExtractionError | OpenApiOAuthError | StorageFailure>;
75
46
  readonly addSpec: (config: OpenApiSpecConfig) => Effect.Effect<{
76
- readonly sourceId: string;
47
+ readonly slug: IntegrationSlug;
77
48
  readonly toolCount: number;
78
- }, OpenApiParseError | OpenApiExtractionError | OpenApiOAuthError | StorageFailure>;
79
- readonly removeSpec: (namespace: string, scope: string) => Effect.Effect<void, StorageFailure>;
80
- readonly getSource: (namespace: string, scope: string) => Effect.Effect<StoredSource | null, StorageFailure>;
81
- readonly configure: (source: OpenApiSourceRef, input: OpenApiConfigureInput) => Effect.Effect<readonly CredentialBindingRef[], StorageFailure>;
49
+ }, OpenApiParseError | OpenApiExtractionError | OpenApiOAuthError | IntegrationAlreadyExistsError | StorageFailure>;
50
+ readonly removeSpec: (slug: string) => Effect.Effect<void, StorageFailure>;
51
+ readonly getIntegration: (slug: string) => Effect.Effect<Integration | null, StorageFailure>;
52
+ /** Read the integration's full opaque config, including its
53
+ * `authenticationTemplate`. Returns null when the integration is absent. */
54
+ readonly getConfig: (slug: string) => Effect.Effect<OpenApiIntegrationConfig | null, StorageFailure>;
55
+ /** Add / merge custom auth methods onto the integration's
56
+ * `authenticationTemplate`. Returns the resulting template array. */
57
+ readonly configure: (slug: string, input: OpenApiConfigureInput) => Effect.Effect<readonly Authentication[], StorageFailure>;
82
58
  }
83
59
  declare const OpenApiSpecInputSchema: Schema.Union<readonly [Schema.Struct<{
84
60
  readonly kind: Schema.Literal<"url">;
@@ -86,145 +62,36 @@ declare const OpenApiSpecInputSchema: Schema.Union<readonly [Schema.Struct<{
86
62
  }>, Schema.Struct<{
87
63
  readonly kind: Schema.Literal<"blob">;
88
64
  readonly value: Schema.String;
65
+ }>, Schema.Struct<{
66
+ readonly kind: Schema.Literal<"googleDiscovery">;
67
+ readonly url: Schema.String;
68
+ }>, Schema.Struct<{
69
+ readonly kind: Schema.Literal<"googleDiscoveryBundle">;
70
+ readonly urls: Schema.$Array<Schema.String>;
89
71
  }>]>;
90
- declare const OpenApiSecretShapeInputSchema: Schema.Struct<{
91
- readonly kind: Schema.Literal<"secret">;
92
- readonly prefix: Schema.optional<Schema.String>;
93
- }>;
94
- declare const OpenApiConfigureInputSchema: Schema.Struct<{
95
- readonly scope: Schema.String;
96
- readonly name: Schema.optional<Schema.String>;
97
- readonly baseUrl: Schema.optional<Schema.String>;
98
- readonly headers: Schema.optional<Schema.$Record<Schema.String, Schema.Union<readonly [Schema.String, Schema.Struct<{
99
- readonly kind: Schema.Literal<"text">;
100
- readonly text: Schema.String;
101
- readonly prefix: Schema.optional<Schema.String>;
102
- }>, Schema.Struct<{
103
- readonly kind: Schema.Literal<"secret">;
104
- readonly secretId: Schema.String;
105
- readonly secretScope: Schema.optional<Schema.String>;
106
- readonly prefix: Schema.optional<Schema.String>;
107
- }>, Schema.Struct<{
108
- readonly kind: Schema.Literal<"connection">;
109
- readonly connectionId: Schema.String;
110
- }>]>>>;
111
- readonly queryParams: Schema.optional<Schema.$Record<Schema.String, Schema.Union<readonly [Schema.String, Schema.Struct<{
112
- readonly kind: Schema.Literal<"text">;
113
- readonly text: Schema.String;
114
- readonly prefix: Schema.optional<Schema.String>;
115
- }>, Schema.Struct<{
116
- readonly kind: Schema.Literal<"secret">;
117
- readonly secretId: Schema.String;
118
- readonly secretScope: Schema.optional<Schema.String>;
119
- readonly prefix: Schema.optional<Schema.String>;
120
- }>, Schema.Struct<{
121
- readonly kind: Schema.Literal<"connection">;
122
- readonly connectionId: Schema.String;
123
- }>]>>>;
124
- readonly specFetchCredentials: Schema.optional<Schema.Struct<{
125
- readonly headers: Schema.optional<Schema.$Record<Schema.String, Schema.Union<readonly [Schema.String, Schema.Struct<{
126
- readonly kind: Schema.Literal<"text">;
127
- readonly text: Schema.String;
128
- readonly prefix: Schema.optional<Schema.String>;
129
- }>, Schema.Struct<{
130
- readonly kind: Schema.Literal<"secret">;
131
- readonly secretId: Schema.String;
132
- readonly secretScope: Schema.optional<Schema.String>;
133
- readonly prefix: Schema.optional<Schema.String>;
134
- }>, Schema.Struct<{
135
- readonly kind: Schema.Literal<"connection">;
136
- readonly connectionId: Schema.String;
137
- }>]>>>;
138
- readonly queryParams: Schema.optional<Schema.$Record<Schema.String, Schema.Union<readonly [Schema.String, Schema.Struct<{
139
- readonly kind: Schema.Literal<"text">;
140
- readonly text: Schema.String;
141
- readonly prefix: Schema.optional<Schema.String>;
142
- }>, Schema.Struct<{
143
- readonly kind: Schema.Literal<"secret">;
144
- readonly secretId: Schema.String;
145
- readonly secretScope: Schema.optional<Schema.String>;
146
- readonly prefix: Schema.optional<Schema.String>;
147
- }>, Schema.Struct<{
148
- readonly kind: Schema.Literal<"connection">;
149
- readonly connectionId: Schema.String;
150
- }>]>>>;
151
- }>>;
152
- readonly oauth2: Schema.optional<Schema.Struct<{
153
- readonly clientId: Schema.optional<Schema.Union<readonly [Schema.String, Schema.Struct<{
154
- readonly kind: Schema.Literal<"text">;
155
- readonly text: Schema.String;
156
- readonly prefix: Schema.optional<Schema.String>;
157
- }>, Schema.Struct<{
158
- readonly kind: Schema.Literal<"secret">;
159
- readonly secretId: Schema.String;
160
- readonly secretScope: Schema.optional<Schema.String>;
161
- readonly prefix: Schema.optional<Schema.String>;
162
- }>, Schema.Struct<{
163
- readonly kind: Schema.Literal<"connection">;
164
- readonly connectionId: Schema.String;
165
- }>]>>;
166
- readonly clientSecret: Schema.optional<Schema.Union<readonly [Schema.String, Schema.Struct<{
167
- readonly kind: Schema.Literal<"text">;
168
- readonly text: Schema.String;
169
- readonly prefix: Schema.optional<Schema.String>;
170
- }>, Schema.Struct<{
171
- readonly kind: Schema.Literal<"secret">;
172
- readonly secretId: Schema.String;
173
- readonly secretScope: Schema.optional<Schema.String>;
174
- readonly prefix: Schema.optional<Schema.String>;
175
- }>, Schema.Struct<{
176
- readonly kind: Schema.Literal<"connection">;
177
- readonly connectionId: Schema.String;
178
- }>]>>;
179
- readonly connection: Schema.optional<Schema.Union<readonly [Schema.String, Schema.Struct<{
180
- readonly kind: Schema.Literal<"text">;
181
- readonly text: Schema.String;
182
- readonly prefix: Schema.optional<Schema.String>;
183
- }>, Schema.Struct<{
184
- readonly kind: Schema.Literal<"secret">;
185
- readonly secretId: Schema.String;
186
- readonly secretScope: Schema.optional<Schema.String>;
187
- readonly prefix: Schema.optional<Schema.String>;
188
- }>, Schema.Struct<{
189
- readonly kind: Schema.Literal<"connection">;
190
- readonly connectionId: Schema.String;
191
- }>]>>;
192
- }>>;
193
- readonly oauth2Source: Schema.optional<Schema.Struct<{
194
- readonly kind: Schema.Literal<"oauth2">;
195
- readonly securitySchemeName: Schema.String;
196
- readonly flow: Schema.Literals<readonly ["authorizationCode", "clientCredentials"]>;
197
- readonly tokenUrl: Schema.String;
198
- readonly authorizationUrl: Schema.withDecodingDefault<Schema.optional<Schema.NullOr<Schema.String>>>;
199
- readonly issuerUrl: Schema.optional<Schema.NullOr<Schema.String>>;
200
- readonly clientIdSlot: Schema.String;
201
- readonly clientSecretSlot: Schema.NullOr<Schema.String>;
202
- readonly connectionSlot: Schema.String;
203
- readonly scopes: Schema.$Array<Schema.String>;
204
- }>>;
205
- }>;
206
- export type OpenApiConfigureInput = typeof OpenApiConfigureInputSchema.Type;
72
+ export declare const describeOpenApiAuthMethods: (record: IntegrationRecord) => readonly AuthMethodDescriptor[];
73
+ export declare const describeOpenApiIntegrationDisplay: (record: IntegrationRecord) => {
74
+ readonly url?: string;
75
+ };
207
76
  export interface OpenApiPluginOptions {
208
77
  readonly httpClientLayer?: Layer.Layer<HttpClient.HttpClient, never, never>;
209
- /** If provided, source add/remove is mirrored to executor.jsonc
210
- * (best-effort — file errors are logged, not raised). */
211
- readonly configFile?: ConfigFileSink;
212
78
  }
213
79
  export declare const openApiPlugin: import("@executor-js/sdk/core").ConfiguredPlugin<"openapi", {
214
80
  previewSpec: (input: string | OpenApiPreviewInput) => Effect.Effect<{
215
81
  readonly version: Option.Option<string>;
216
82
  readonly operations: readonly {
217
- readonly summary: Option.Option<string>;
218
- readonly method: "post" | "options" | "delete" | "get" | "put" | "head" | "patch" | "trace";
83
+ readonly method: "post" | "options" | "delete" | "get" | "put" | "patch" | "head" | "trace";
219
84
  readonly deprecated: boolean;
220
85
  readonly path: string;
86
+ readonly summary: Option.Option<string>;
221
87
  readonly tags: readonly string[];
222
88
  readonly operationId: string;
223
89
  }[];
224
90
  readonly title: Option.Option<string>;
91
+ readonly tags: readonly string[];
225
92
  readonly servers: readonly {
226
- readonly url: string;
227
93
  readonly description: Option.Option<string>;
94
+ readonly url: string;
228
95
  readonly variables: Option.Option<{
229
96
  readonly [x: string]: {
230
97
  readonly default: string;
@@ -233,29 +100,28 @@ export declare const openApiPlugin: import("@executor-js/sdk/core").ConfiguredPl
233
100
  };
234
101
  }>;
235
102
  }[];
236
- readonly tags: readonly string[];
237
103
  readonly securitySchemes: readonly {
238
104
  readonly name: string;
239
105
  readonly type: "oauth2" | "http" | "apiKey" | "openIdConnect";
240
- readonly in: Option.Option<"query" | "header" | "cookie">;
106
+ readonly in: Option.Option<"header" | "query" | "cookie">;
241
107
  readonly description: Option.Option<string>;
242
- readonly headerName: Option.Option<string>;
243
108
  readonly scheme: Option.Option<string>;
244
109
  readonly bearerFormat: Option.Option<string>;
110
+ readonly headerName: Option.Option<string>;
245
111
  readonly flows: Option.Option<{
246
112
  readonly authorizationCode: Option.Option<{
113
+ readonly authorizationUrl: string;
114
+ readonly tokenUrl: string;
247
115
  readonly scopes: {
248
116
  readonly [x: string]: string;
249
117
  };
250
- readonly authorizationUrl: string;
251
- readonly tokenUrl: string;
252
118
  readonly refreshUrl: Option.Option<string>;
253
119
  }>;
254
120
  readonly clientCredentials: Option.Option<{
121
+ readonly tokenUrl: string;
255
122
  readonly scopes: {
256
123
  readonly [x: string]: string;
257
124
  };
258
- readonly tokenUrl: string;
259
125
  readonly refreshUrl: Option.Option<string>;
260
126
  }>;
261
127
  }>;
@@ -265,56 +131,33 @@ export declare const openApiPlugin: import("@executor-js/sdk/core").ConfiguredPl
265
131
  readonly schemes: readonly string[];
266
132
  }[];
267
133
  readonly headerPresets: readonly {
134
+ readonly label: string;
268
135
  readonly headers: {
269
136
  readonly [x: string]: string | null;
270
137
  };
271
138
  readonly secretHeaders: readonly string[];
272
- readonly label: string;
273
139
  }[];
274
140
  readonly oauth2Presets: readonly {
141
+ readonly label: string;
142
+ readonly authorizationUrl: Option.Option<string>;
143
+ readonly tokenUrl: string;
275
144
  readonly scopes: {
276
145
  readonly [x: string]: string;
277
146
  };
278
- readonly authorizationUrl: Option.Option<string>;
279
- readonly securitySchemeName: string;
280
- readonly flow: "authorizationCode" | "clientCredentials";
281
- readonly tokenUrl: string;
282
147
  readonly refreshUrl: Option.Option<string>;
283
- readonly label: string;
148
+ readonly flow: "authorizationCode" | "clientCredentials";
149
+ readonly identityScopes: false | "auto" | readonly string[];
150
+ readonly securitySchemeName: string;
284
151
  }[];
285
152
  readonly operationCount: number;
286
- }, StorageFailure | OpenApiParseError | OpenApiExtractionError | OpenApiOAuthError, never>;
153
+ }, OpenApiParseError | OpenApiExtractionError, never>;
287
154
  addSpec: (config: OpenApiSpecConfig) => Effect.Effect<{
288
- sourceId: string;
155
+ slug: string & import("effect/Brand").Brand<"IntegrationSlug">;
289
156
  toolCount: number;
290
- }, StorageFailure | OpenApiParseError | OpenApiExtractionError | OpenApiOAuthError, never>;
291
- removeSpec: (namespace: string, scope: string) => Effect.Effect<void, StorageFailure, never>;
292
- getSource: (namespace: string, scope: string) => Effect.Effect<{
293
- config: SourceConfig;
294
- namespace: string;
295
- scope: string;
296
- name: string;
297
- } | null, StorageFailure, never>;
298
- configure: (source: OpenApiSourceRef, input: OpenApiConfigureInput) => Effect.Effect<readonly {
299
- readonly value: {
300
- readonly text: string;
301
- readonly kind: "text";
302
- } | {
303
- readonly secretId: string & import("effect/Brand").Brand<"SecretId">;
304
- readonly kind: "secret";
305
- readonly secretScopeId?: (string & import("effect/Brand").Brand<"ScopeId">) | undefined;
306
- } | {
307
- readonly connectionId: string & import("effect/Brand").Brand<"ConnectionId">;
308
- readonly kind: "connection";
309
- };
310
- readonly id: string & import("effect/Brand").Brand<"CredentialBindingId">;
311
- readonly scopeId: string & import("effect/Brand").Brand<"ScopeId">;
312
- readonly createdAt: Date;
313
- readonly updatedAt: Date;
314
- readonly pluginId: string;
315
- readonly sourceId: string;
316
- readonly sourceScopeId: string & import("effect/Brand").Brand<"ScopeId">;
317
- readonly slotKey: string;
318
- }[], StorageFailure, never>;
319
- }, OpenapiStore, OpenApiPluginOptions, {}, undefined, Layer.Layer<unknown, never, never>, import("effect/unstable/httpapi/HttpApiGroup").Any>;
157
+ }, StorageFailure | IntegrationAlreadyExistsError | OpenApiParseError | OpenApiExtractionError | OpenApiOAuthError, never>;
158
+ removeSpec: (slug: string) => Effect.Effect<void, StorageFailure, never>;
159
+ getIntegration: (slug: string) => Effect.Effect<Integration | null, StorageFailure, never>;
160
+ getConfig: (slug: string) => Effect.Effect<OpenApiIntegrationConfig | null, StorageFailure>;
161
+ configure: (slug: string, input: OpenApiConfigureInput) => Effect.Effect<readonly Authentication[], StorageFailure>;
162
+ }, OpenapiStore, OpenApiPluginOptions, undefined, Layer.Layer<unknown, never, never>, import("effect/unstable/httpapi/HttpApiGroup").Any>;
320
163
  export {};
@@ -2,8 +2,9 @@ export interface OpenApiPreset {
2
2
  readonly id: string;
3
3
  readonly name: string;
4
4
  readonly summary: string;
5
- readonly url: string;
5
+ readonly url?: string;
6
6
  readonly icon?: string;
7
7
  readonly featured?: boolean;
8
8
  }
9
+ export { googleOpenApiPresets, googleStandardUserOAuthPresets } from "./google-presets";
9
10
  export declare const openApiPresets: readonly OpenApiPreset[];
@@ -88,6 +88,8 @@ export declare const OAuth2Preset: Schema.Struct<{
88
88
  readonly refreshUrl: Schema.OptionFromOptional<Schema.String>;
89
89
  /** Declared scopes for this flow: `{ scope: description }`. */
90
90
  readonly scopes: Schema.$Record<Schema.String, Schema.String>;
91
+ /** Identity scopes to request alongside API scopes. `"auto"` discovers standard OIDC scopes. */
92
+ readonly identityScopes: Schema.Union<readonly [Schema.Literal<"auto">, Schema.Literal<false>, Schema.$Array<Schema.String>]>;
91
93
  }>;
92
94
  export type OAuth2Preset = typeof OAuth2Preset.Type;
93
95
  export declare const PreviewOperation: Schema.Struct<{
@@ -184,6 +186,8 @@ export declare const SpecPreview: Schema.Struct<{
184
186
  readonly refreshUrl: Schema.OptionFromOptional<Schema.String>;
185
187
  /** Declared scopes for this flow: `{ scope: description }`. */
186
188
  readonly scopes: Schema.$Record<Schema.String, Schema.String>;
189
+ /** Identity scopes to request alongside API scopes. `"auto"` discovers standard OIDC scopes. */
190
+ readonly identityScopes: Schema.Union<readonly [Schema.Literal<"auto">, Schema.Literal<false>, Schema.$Array<Schema.String>]>;
187
191
  }>>;
188
192
  }>;
189
193
  export type SpecPreview = typeof SpecPreview.Type;
@@ -192,17 +196,18 @@ export type SpecPreview = typeof SpecPreview.Type;
192
196
  export declare const previewSpec: (input: string) => Effect.Effect<{
193
197
  readonly version: Option.Option<string>;
194
198
  readonly operations: readonly {
195
- readonly summary: Option.Option<string>;
196
- readonly method: "post" | "options" | "delete" | "get" | "put" | "head" | "patch" | "trace";
199
+ readonly method: "post" | "options" | "delete" | "get" | "put" | "patch" | "head" | "trace";
197
200
  readonly deprecated: boolean;
198
201
  readonly path: string;
202
+ readonly summary: Option.Option<string>;
199
203
  readonly tags: readonly string[];
200
204
  readonly operationId: string;
201
205
  }[];
202
206
  readonly title: Option.Option<string>;
207
+ readonly tags: readonly string[];
203
208
  readonly servers: readonly {
204
- readonly url: string;
205
209
  readonly description: Option.Option<string>;
210
+ readonly url: string;
206
211
  readonly variables: Option.Option<{
207
212
  readonly [x: string]: {
208
213
  readonly default: string;
@@ -211,29 +216,28 @@ export declare const previewSpec: (input: string) => Effect.Effect<{
211
216
  };
212
217
  }>;
213
218
  }[];
214
- readonly tags: readonly string[];
215
219
  readonly securitySchemes: readonly {
216
220
  readonly name: string;
217
221
  readonly type: "oauth2" | "http" | "apiKey" | "openIdConnect";
218
- readonly in: Option.Option<"query" | "header" | "cookie">;
222
+ readonly in: Option.Option<"header" | "query" | "cookie">;
219
223
  readonly description: Option.Option<string>;
220
- readonly headerName: Option.Option<string>;
221
224
  readonly scheme: Option.Option<string>;
222
225
  readonly bearerFormat: Option.Option<string>;
226
+ readonly headerName: Option.Option<string>;
223
227
  readonly flows: Option.Option<{
224
228
  readonly authorizationCode: Option.Option<{
229
+ readonly authorizationUrl: string;
230
+ readonly tokenUrl: string;
225
231
  readonly scopes: {
226
232
  readonly [x: string]: string;
227
233
  };
228
- readonly authorizationUrl: string;
229
- readonly tokenUrl: string;
230
234
  readonly refreshUrl: Option.Option<string>;
231
235
  }>;
232
236
  readonly clientCredentials: Option.Option<{
237
+ readonly tokenUrl: string;
233
238
  readonly scopes: {
234
239
  readonly [x: string]: string;
235
240
  };
236
- readonly tokenUrl: string;
237
241
  readonly refreshUrl: Option.Option<string>;
238
242
  }>;
239
243
  }>;
@@ -243,22 +247,23 @@ export declare const previewSpec: (input: string) => Effect.Effect<{
243
247
  readonly schemes: readonly string[];
244
248
  }[];
245
249
  readonly headerPresets: readonly {
250
+ readonly label: string;
246
251
  readonly headers: {
247
252
  readonly [x: string]: string | null;
248
253
  };
249
254
  readonly secretHeaders: readonly string[];
250
- readonly label: string;
251
255
  }[];
252
256
  readonly oauth2Presets: readonly {
257
+ readonly label: string;
258
+ readonly authorizationUrl: Option.Option<string>;
259
+ readonly tokenUrl: string;
253
260
  readonly scopes: {
254
261
  readonly [x: string]: string;
255
262
  };
256
- readonly authorizationUrl: Option.Option<string>;
257
- readonly securitySchemeName: string;
258
- readonly flow: "authorizationCode" | "clientCredentials";
259
- readonly tokenUrl: string;
260
263
  readonly refreshUrl: Option.Option<string>;
261
- readonly label: string;
264
+ readonly flow: "authorizationCode" | "clientCredentials";
265
+ readonly identityScopes: false | "auto" | readonly string[];
266
+ readonly securitySchemeName: string;
262
267
  }[];
263
268
  readonly operationCount: number;
264
269
  }, import("./errors").OpenApiParseError | import("./errors").OpenApiExtractionError, import("effect/unstable/http/HttpClient").HttpClient>;
@@ -0,0 +1 @@
1
+ export {};