@executor-js/plugin-openapi 1.5.6 → 1.5.7

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 (58) hide show
  1. package/dist/{AddOpenApiSource-7M52SRUX.js → AddOpenApiSource-7O4LSD7C.js} +79 -241
  2. package/dist/AddOpenApiSource-7O4LSD7C.js.map +1 -0
  3. package/dist/{EditOpenApiSource-WTAMRJUK.js → EditOpenApiSource-GIN5RQPL.js} +3 -3
  4. package/dist/{OpenApiAccountsPanel-3VJJXNQF.js → OpenApiAccountsPanel-7XT6ZMD5.js} +30 -28
  5. package/dist/OpenApiAccountsPanel-7XT6ZMD5.js.map +1 -0
  6. package/dist/api/group.d.ts +38 -37
  7. package/dist/api/index.d.ts +39 -38
  8. package/dist/{chunk-YVRI7KRC.js → chunk-C3IJX4AN.js} +257 -219
  9. package/dist/chunk-C3IJX4AN.js.map +1 -0
  10. package/dist/{chunk-OSIFYIQP.js → chunk-C6PH4R7Q.js} +94 -5
  11. package/dist/chunk-C6PH4R7Q.js.map +1 -0
  12. package/dist/{chunk-BSLE6HCE.js → chunk-IB36ED7Y.js} +13 -27
  13. package/dist/chunk-IB36ED7Y.js.map +1 -0
  14. package/dist/chunk-RCBR3QMJ.js +73 -0
  15. package/dist/chunk-RCBR3QMJ.js.map +1 -0
  16. package/dist/{chunk-V7VCHYOY.js → chunk-WJQIWTZF.js} +97 -172
  17. package/dist/chunk-WJQIWTZF.js.map +1 -0
  18. package/dist/client.js +3 -3
  19. package/dist/core.js +133 -7
  20. package/dist/core.js.map +1 -1
  21. package/dist/index.js +7 -5
  22. package/dist/index.js.map +1 -1
  23. package/dist/react/AddOpenApiSource.d.ts +0 -1
  24. package/dist/react/OpenApiSourceDetailsFields.d.ts +3 -0
  25. package/dist/react/atoms.d.ts +40 -52
  26. package/dist/react/auth-method-config.d.ts +7 -4
  27. package/dist/react/client.d.ts +38 -37
  28. package/dist/sdk/config.d.ts +27 -27
  29. package/dist/sdk/derive-auth.d.ts +9 -0
  30. package/dist/sdk/extract.d.ts +11 -1
  31. package/dist/sdk/index.d.ts +6 -2
  32. package/dist/sdk/invoke.d.ts +11 -1
  33. package/dist/sdk/migrate-config.d.ts +4 -0
  34. package/dist/sdk/migrate-config.test.d.ts +1 -0
  35. package/dist/sdk/openapi-utils.d.ts +4 -8
  36. package/dist/sdk/output-schema-migration.d.ts +21 -0
  37. package/dist/sdk/output-schema-migration.test.d.ts +1 -0
  38. package/dist/sdk/plugin.d.ts +6 -4
  39. package/dist/sdk/preview.d.ts +77 -1
  40. package/dist/sdk/server-url-resolution.test.d.ts +1 -0
  41. package/dist/sdk/spec-blob-migration.d.ts +7 -0
  42. package/dist/sdk/spec-blob.test.d.ts +1 -0
  43. package/dist/sdk/store.d.ts +10 -1
  44. package/dist/sdk/tool-row-projection.test.d.ts +1 -0
  45. package/dist/sdk/types.d.ts +61 -36
  46. package/dist/testing/index.d.ts +1 -1
  47. package/dist/testing.js +4 -20
  48. package/dist/testing.js.map +1 -1
  49. package/package.json +3 -3
  50. package/dist/AddOpenApiSource-7M52SRUX.js.map +0 -1
  51. package/dist/OpenApiAccountsPanel-3VJJXNQF.js.map +0 -1
  52. package/dist/chunk-BSLE6HCE.js.map +0 -1
  53. package/dist/chunk-OSIFYIQP.js.map +0 -1
  54. package/dist/chunk-QSSRVK6M.js +0 -139
  55. package/dist/chunk-QSSRVK6M.js.map +0 -1
  56. package/dist/chunk-V7VCHYOY.js.map +0 -1
  57. package/dist/chunk-YVRI7KRC.js.map +0 -1
  58. /package/dist/{EditOpenApiSource-WTAMRJUK.js.map → EditOpenApiSource-GIN5RQPL.js.map} +0 -0
@@ -1,125 +1,27 @@
1
- // src/sdk/types.ts
2
- import { Schema } from "effect";
3
- var variable = (name) => ({
4
- type: "variable",
5
- name
6
- });
7
- var TOKEN_VARIABLE = "token";
8
- var OperationId = Schema.String.pipe(Schema.brand("OperationId"));
9
- var HttpMethod = Schema.Literals([
10
- "get",
11
- "put",
12
- "post",
13
- "delete",
14
- "patch",
15
- "head",
16
- "options",
17
- "trace"
18
- ]);
19
- var ParameterLocation = Schema.Literals(["path", "query", "header", "cookie"]);
20
- var OperationParameter = Schema.Struct({
21
- name: Schema.String,
22
- location: ParameterLocation,
23
- required: Schema.Boolean,
24
- schema: Schema.OptionFromOptional(Schema.Unknown),
25
- style: Schema.OptionFromOptional(Schema.String),
26
- explode: Schema.OptionFromOptional(Schema.Boolean),
27
- allowReserved: Schema.OptionFromOptional(Schema.Boolean),
28
- description: Schema.OptionFromOptional(Schema.String)
29
- });
30
- var EncodingObject = Schema.Struct({
31
- contentType: Schema.OptionFromOptional(Schema.String),
32
- style: Schema.OptionFromOptional(Schema.String),
33
- explode: Schema.OptionFromOptional(Schema.Boolean),
34
- allowReserved: Schema.OptionFromOptional(Schema.Boolean)
35
- });
36
- var MediaBinding = Schema.Struct({
37
- contentType: Schema.String,
38
- schema: Schema.OptionFromOptional(Schema.Unknown),
39
- encoding: Schema.OptionFromOptional(Schema.Record(Schema.String, EncodingObject))
40
- });
41
- var OperationRequestBody = Schema.Struct({
42
- required: Schema.Boolean,
43
- /** Default media type — first declared in spec order (not JSON-first).
44
- * Used when the caller does not override via the tool's `contentType` arg. */
45
- contentType: Schema.String,
46
- /** Schema of the default media type. Kept for backward compat with stored
47
- * bindings from before `contents` was added. */
48
- schema: Schema.OptionFromOptional(Schema.Unknown),
49
- /** All declared media types in spec order. Populated by `extract.ts`
50
- * going forward; older persisted bindings may have this unset and will
51
- * fall back to `{contentType, schema}`. */
52
- contents: Schema.OptionFromOptional(Schema.Array(MediaBinding))
53
- });
54
- var ExtractedOperation = Schema.Struct({
55
- operationId: OperationId,
56
- toolPath: Schema.OptionFromOptional(Schema.String),
57
- method: HttpMethod,
58
- baseUrl: Schema.optional(Schema.String),
59
- pathTemplate: Schema.String,
60
- summary: Schema.OptionFromOptional(Schema.String),
61
- description: Schema.OptionFromOptional(Schema.String),
62
- tags: Schema.Array(Schema.String),
63
- parameters: Schema.Array(OperationParameter),
64
- requestBody: Schema.OptionFromOptional(OperationRequestBody),
65
- inputSchema: Schema.OptionFromOptional(Schema.Unknown),
66
- outputSchema: Schema.OptionFromOptional(Schema.Unknown),
67
- deprecated: Schema.Boolean
68
- });
69
- var ServerVariable = Schema.Struct({
70
- default: Schema.String,
71
- enum: Schema.OptionFromOptional(Schema.Array(Schema.String)),
72
- description: Schema.OptionFromOptional(Schema.String)
73
- });
74
- var ServerInfo = Schema.Struct({
75
- url: Schema.String,
76
- description: Schema.OptionFromOptional(Schema.String),
77
- variables: Schema.OptionFromOptional(Schema.Record(Schema.String, ServerVariable))
78
- });
79
- var ExtractionResult = Schema.Struct({
80
- title: Schema.OptionFromOptional(Schema.String),
81
- version: Schema.OptionFromOptional(Schema.String),
82
- servers: Schema.Array(ServerInfo),
83
- operations: Schema.Array(ExtractedOperation)
84
- });
85
- var OperationBinding = Schema.Struct({
86
- method: HttpMethod,
87
- baseUrl: Schema.optional(Schema.String),
88
- pathTemplate: Schema.String,
89
- parameters: Schema.Array(OperationParameter),
90
- requestBody: Schema.OptionFromOptional(OperationRequestBody)
91
- });
92
- var InvocationResult = Schema.Struct({
93
- status: Schema.Number,
94
- headers: Schema.Record(Schema.String, Schema.String),
95
- data: Schema.NullOr(Schema.Unknown),
96
- error: Schema.NullOr(Schema.Unknown)
97
- });
98
-
99
1
  // src/sdk/errors.ts
100
- import { Data, Schema as Schema2 } from "effect";
101
- var OpenApiParseError = class extends Schema2.TaggedErrorClass()(
2
+ import { Data, Schema } from "effect";
3
+ var OpenApiParseError = class extends Schema.TaggedErrorClass()(
102
4
  "OpenApiParseError",
103
5
  {
104
- message: Schema2.String
6
+ message: Schema.String
105
7
  },
106
8
  { httpApiStatus: 400 }
107
9
  ) {
108
10
  };
109
- var OpenApiExtractionError = class extends Schema2.TaggedErrorClass()(
11
+ var OpenApiExtractionError = class extends Schema.TaggedErrorClass()(
110
12
  "OpenApiExtractionError",
111
13
  {
112
- message: Schema2.String
14
+ message: Schema.String
113
15
  },
114
16
  { httpApiStatus: 400 }
115
17
  ) {
116
18
  };
117
19
  var OpenApiInvocationError = class extends Data.TaggedError("OpenApiInvocationError") {
118
20
  };
119
- var OpenApiOAuthError = class extends Schema2.TaggedErrorClass()(
21
+ var OpenApiOAuthError = class extends Schema.TaggedErrorClass()(
120
22
  "OpenApiOAuthError",
121
23
  {
122
- message: Schema2.String
24
+ message: Schema.String
123
25
  },
124
26
  { httpApiStatus: 400 }
125
27
  ) {
@@ -128,7 +30,7 @@ var OpenApiAuthRequiredError = class extends Data.TaggedError("OpenApiAuthRequir
128
30
  };
129
31
 
130
32
  // src/sdk/parse.ts
131
- import { Duration, Effect, Schema as Schema3 } from "effect";
33
+ import { Duration, Effect, Schema as Schema2 } from "effect";
132
34
  import { HttpClient, HttpClientRequest } from "effect/unstable/http";
133
35
  import YAML from "yaml";
134
36
  var OpenApiExtractionErrorFromParse = class extends OpenApiExtractionError {
@@ -198,7 +100,7 @@ var parseTextToObject = (text) => Effect.gen(function* () {
198
100
  }
199
101
  return parsed;
200
102
  });
201
- var parseJsonText = Schema3.decodeUnknownEffect(Schema3.fromJsonString(Schema3.Unknown));
103
+ var parseJsonText = Schema2.decodeUnknownEffect(Schema2.fromJsonString(Schema2.Unknown));
202
104
  var parseJsonLike = (text) => {
203
105
  const parseYaml = Effect.try({
204
106
  try: () => YAML.parse(text),
@@ -209,7 +111,6 @@ var parseJsonLike = (text) => {
209
111
  };
210
112
 
211
113
  // src/sdk/openapi-utils.ts
212
- import { Option } from "effect";
213
114
  var DocResolver = class {
214
115
  constructor(doc) {
215
116
  this.doc = doc;
@@ -242,33 +143,13 @@ var substituteUrlVariables = (url, values) => {
242
143
  }
243
144
  return out;
244
145
  };
245
- var OPENAPI_MAX_SERVER_VARIABLE_OPTIONS = 64;
246
- var expandServerUrlOptions = (server, limit = OPENAPI_MAX_SERVER_VARIABLE_OPTIONS) => {
247
- if (!Option.isSome(server.variables)) return [server.url];
248
- let urls = [server.url];
249
- for (const [name, variable2] of Object.entries(server.variables.value)) {
250
- const enumValues = typeof variable2 === "string" ? [] : Option.getOrElse(variable2.enum, () => []);
251
- const values = enumValues.length > 0 ? enumValues : [typeof variable2 === "string" ? variable2 : variable2.default];
252
- const next = [];
253
- for (const url of urls) {
254
- for (const value of values) {
255
- next.push(url.replaceAll(`{${name}}`, value));
256
- if (next.length >= limit) return next;
257
- }
258
- }
259
- urls = next;
260
- }
261
- return urls;
262
- };
263
- var resolveBaseUrl = (servers) => {
264
- const server = servers[0];
265
- if (!server) return "";
266
- if (!Option.isSome(server.variables)) return server.url;
146
+ var resolveServerUrl = (templateUrl, variables, overrides) => {
267
147
  const values = {};
268
- for (const [name, v] of Object.entries(server.variables.value)) {
269
- values[name] = typeof v === "string" ? v : v.default;
148
+ for (const [name, v] of Object.entries(variables ?? {})) values[name] = v.default;
149
+ for (const [name, value] of Object.entries(overrides)) {
150
+ if (value) values[name] = value;
270
151
  }
271
- return substituteUrlVariables(server.url, values);
152
+ return substituteUrlVariables(templateUrl, values);
272
153
  };
273
154
  var declaredContents = (content) => {
274
155
  if (!content) return [];
@@ -285,8 +166,114 @@ var preferredResponseContent = (content) => {
285
166
  return pick ? { mediaType: pick[0], media: pick[1] } : void 0;
286
167
  };
287
168
 
169
+ // src/sdk/types.ts
170
+ import { Schema as Schema3 } from "effect";
171
+ import { AuthTemplateSlug } from "@executor-js/sdk/shared";
172
+ import {
173
+ apiKeyMethodFromAuthTemplate,
174
+ isApiKeyAuthTemplate
175
+ } from "@executor-js/sdk/http-auth";
176
+ import { TOKEN_VARIABLE } from "@executor-js/sdk/http-auth";
177
+ var normalizeOpenApiAuthInputs = (inputs) => inputs.map((input) => {
178
+ if (!isApiKeyAuthTemplate(input)) {
179
+ return { ...input, slug: AuthTemplateSlug.make(input.slug) };
180
+ }
181
+ const method = apiKeyMethodFromAuthTemplate(input);
182
+ return { ...method, slug: method.slug ?? "" };
183
+ });
184
+ var OperationId = Schema3.String.pipe(Schema3.brand("OperationId"));
185
+ var HttpMethod = Schema3.Literals([
186
+ "get",
187
+ "put",
188
+ "post",
189
+ "delete",
190
+ "patch",
191
+ "head",
192
+ "options",
193
+ "trace"
194
+ ]);
195
+ var ParameterLocation = Schema3.Literals(["path", "query", "header", "cookie"]);
196
+ var OperationParameter = Schema3.Struct({
197
+ name: Schema3.String,
198
+ location: ParameterLocation,
199
+ required: Schema3.Boolean,
200
+ schema: Schema3.OptionFromOptional(Schema3.Unknown),
201
+ style: Schema3.OptionFromOptional(Schema3.String),
202
+ explode: Schema3.OptionFromOptional(Schema3.Boolean),
203
+ allowReserved: Schema3.OptionFromOptional(Schema3.Boolean),
204
+ description: Schema3.OptionFromOptional(Schema3.String)
205
+ });
206
+ var EncodingObject = Schema3.Struct({
207
+ contentType: Schema3.OptionFromOptional(Schema3.String),
208
+ style: Schema3.OptionFromOptional(Schema3.String),
209
+ explode: Schema3.OptionFromOptional(Schema3.Boolean),
210
+ allowReserved: Schema3.OptionFromOptional(Schema3.Boolean)
211
+ });
212
+ var MediaBinding = Schema3.Struct({
213
+ contentType: Schema3.String,
214
+ schema: Schema3.OptionFromOptional(Schema3.Unknown),
215
+ encoding: Schema3.OptionFromOptional(Schema3.Record(Schema3.String, EncodingObject))
216
+ });
217
+ var OperationRequestBody = Schema3.Struct({
218
+ required: Schema3.Boolean,
219
+ /** Default media type — first declared in spec order (not JSON-first).
220
+ * Used when the caller does not override via the tool's `contentType` arg. */
221
+ contentType: Schema3.String,
222
+ /** Schema of the default media type. Kept for backward compat with stored
223
+ * bindings from before `contents` was added. */
224
+ schema: Schema3.OptionFromOptional(Schema3.Unknown),
225
+ /** All declared media types in spec order. Populated by `extract.ts`
226
+ * going forward; older persisted bindings may have this unset and will
227
+ * fall back to `{contentType, schema}`. */
228
+ contents: Schema3.OptionFromOptional(Schema3.Array(MediaBinding))
229
+ });
230
+ var ServerVariable = Schema3.Struct({
231
+ default: Schema3.String,
232
+ enum: Schema3.OptionFromOptional(Schema3.Array(Schema3.String)),
233
+ description: Schema3.OptionFromOptional(Schema3.String)
234
+ });
235
+ var ServerInfo = Schema3.Struct({
236
+ url: Schema3.String,
237
+ description: Schema3.OptionFromOptional(Schema3.String),
238
+ variables: Schema3.OptionFromOptional(Schema3.Record(Schema3.String, ServerVariable))
239
+ });
240
+ var ExtractedOperation = Schema3.Struct({
241
+ operationId: OperationId,
242
+ toolPath: Schema3.OptionFromOptional(Schema3.String),
243
+ method: HttpMethod,
244
+ servers: Schema3.Array(ServerInfo),
245
+ pathTemplate: Schema3.String,
246
+ summary: Schema3.OptionFromOptional(Schema3.String),
247
+ description: Schema3.OptionFromOptional(Schema3.String),
248
+ tags: Schema3.Array(Schema3.String),
249
+ parameters: Schema3.Array(OperationParameter),
250
+ requestBody: Schema3.OptionFromOptional(OperationRequestBody),
251
+ inputSchema: Schema3.OptionFromOptional(Schema3.Unknown),
252
+ outputSchema: Schema3.OptionFromOptional(Schema3.Unknown),
253
+ deprecated: Schema3.Boolean
254
+ });
255
+ var ExtractionResult = Schema3.Struct({
256
+ title: Schema3.OptionFromOptional(Schema3.String),
257
+ version: Schema3.OptionFromOptional(Schema3.String),
258
+ servers: Schema3.Array(ServerInfo),
259
+ operations: Schema3.Array(ExtractedOperation)
260
+ });
261
+ var OperationBinding = Schema3.Struct({
262
+ method: HttpMethod,
263
+ servers: Schema3.optional(Schema3.Array(ServerInfo)),
264
+ pathTemplate: Schema3.String,
265
+ parameters: Schema3.Array(OperationParameter),
266
+ requestBody: Schema3.OptionFromOptional(OperationRequestBody)
267
+ });
268
+ var InvocationResult = Schema3.Struct({
269
+ status: Schema3.Number,
270
+ headers: Schema3.Record(Schema3.String, Schema3.String),
271
+ data: Schema3.NullOr(Schema3.Unknown),
272
+ error: Schema3.NullOr(Schema3.Unknown)
273
+ });
274
+
288
275
  // src/sdk/extract.ts
289
- import { Effect as Effect2, Option as Option2 } from "effect";
276
+ import { Effect as Effect2, Option } from "effect";
290
277
  var HTTP_METHODS = [
291
278
  "get",
292
279
  "put",
@@ -315,11 +302,11 @@ var extractParameters = (pathItem, operation, r) => {
315
302
  name: p.name,
316
303
  location: p.in,
317
304
  required: p.in === "path" ? true : p.required === true,
318
- schema: Option2.fromNullishOr(p.schema),
319
- style: Option2.fromNullishOr(p.style),
320
- explode: Option2.fromNullishOr(p.explode),
321
- allowReserved: Option2.fromNullishOr("allowReserved" in p ? p.allowReserved : void 0),
322
- description: Option2.fromNullishOr(p.description)
305
+ schema: Option.fromNullishOr(p.schema),
306
+ style: Option.fromNullishOr(p.style),
307
+ explode: Option.fromNullishOr(p.explode),
308
+ allowReserved: Option.fromNullishOr("allowReserved" in p ? p.allowReserved : void 0),
309
+ description: Option.fromNullishOr(p.description)
323
310
  })
324
311
  );
325
312
  };
@@ -330,10 +317,10 @@ var buildEncodingRecord = (encoding) => {
330
317
  if (typeof raw !== "object" || raw === null) continue;
331
318
  const e = raw;
332
319
  out[prop] = EncodingObject.make({
333
- contentType: Option2.fromNullishOr(e.contentType),
334
- style: Option2.fromNullishOr(e.style),
335
- explode: Option2.fromNullishOr(e.explode),
336
- allowReserved: Option2.fromNullishOr(e.allowReserved)
320
+ contentType: Option.fromNullishOr(e.contentType),
321
+ style: Option.fromNullishOr(e.style),
322
+ explode: Option.fromNullishOr(e.explode),
323
+ allowReserved: Option.fromNullishOr(e.allowReserved)
337
324
  });
338
325
  }
339
326
  return Object.keys(out).length > 0 ? out : void 0;
@@ -345,8 +332,8 @@ var extractRequestBody = (operation, r) => {
345
332
  const contents = declaredContents(body.content).map(
346
333
  ({ mediaType, media }) => MediaBinding.make({
347
334
  contentType: mediaType,
348
- schema: Option2.fromNullishOr(media.schema),
349
- encoding: Option2.fromNullishOr(
335
+ schema: Option.fromNullishOr(media.schema),
336
+ encoding: Option.fromNullishOr(
350
337
  buildEncodingRecord(media.encoding)
351
338
  )
352
339
  })
@@ -357,7 +344,7 @@ var extractRequestBody = (operation, r) => {
357
344
  required: body.required === true,
358
345
  contentType: defaultContent.contentType,
359
346
  schema: defaultContent.schema,
360
- contents: Option2.some(contents)
347
+ contents: Option.some(contents)
361
348
  });
362
349
  };
363
350
  var extractOutputSchema = (operation, r) => {
@@ -375,17 +362,63 @@ var extractOutputSchema = (operation, r) => {
375
362
  }
376
363
  return void 0;
377
364
  };
378
- var buildInputSchema = (parameters, requestBody) => {
365
+ var buildServerInputProperty = (servers) => {
366
+ const variableDefs = {};
367
+ for (const server of servers) {
368
+ for (const [name, v] of Object.entries(Option.getOrUndefined(server.variables) ?? {})) {
369
+ if (!(name in variableDefs)) variableDefs[name] = v;
370
+ }
371
+ }
372
+ const hasMultiple = servers.length > 1;
373
+ const variableNames = Object.keys(variableDefs);
374
+ if (!hasMultiple && variableNames.length === 0) return void 0;
375
+ const properties = {};
376
+ if (hasMultiple) {
377
+ properties.url = {
378
+ type: "string",
379
+ enum: servers.map((server) => server.url),
380
+ default: servers[0].url,
381
+ description: "Which of the spec's servers to send the request to."
382
+ };
383
+ }
384
+ if (variableNames.length > 0) {
385
+ properties.variables = {
386
+ type: "object",
387
+ additionalProperties: false,
388
+ properties: Object.fromEntries(
389
+ Object.entries(variableDefs).map(([name, v]) => [
390
+ name,
391
+ {
392
+ type: "string",
393
+ default: v.default,
394
+ ...Option.isSome(v.enum) ? { enum: v.enum.value } : {},
395
+ ...Option.isSome(v.description) ? { description: v.description.value } : {}
396
+ }
397
+ ])
398
+ ),
399
+ description: "Values for the server URL `{variables}`; spec defaults apply when omitted."
400
+ };
401
+ }
402
+ return {
403
+ type: "object",
404
+ additionalProperties: false,
405
+ properties,
406
+ description: "Optional host selection and server-URL variables for this request."
407
+ };
408
+ };
409
+ var buildInputSchema = (parameters, requestBody, servers) => {
379
410
  const properties = {};
380
411
  const required = [];
381
412
  for (const param of parameters) {
382
- properties[param.name] = Option2.getOrElse(param.schema, () => ({ type: "string" }));
413
+ properties[param.name] = Option.getOrElse(param.schema, () => ({ type: "string" }));
383
414
  if (param.required) required.push(param.name);
384
415
  }
416
+ const serverProperty = buildServerInputProperty(servers);
417
+ if (serverProperty && !("server" in properties)) properties.server = serverProperty;
385
418
  if (requestBody) {
386
- properties.body = Option2.getOrElse(requestBody.schema, () => ({ type: "object" }));
419
+ properties.body = Option.getOrElse(requestBody.schema, () => ({ type: "object" }));
387
420
  if (requestBody.required) required.push("body");
388
- const contents = Option2.getOrUndefined(requestBody.contents);
421
+ const contents = Option.getOrUndefined(requestBody.contents);
389
422
  if (contents && contents.length > 1) {
390
423
  properties.contentType = {
391
424
  type: "string",
@@ -424,8 +457,8 @@ var extractServerList = (servers) => (servers ?? []).flatMap((server) => {
424
457
  name,
425
458
  ServerVariable.make({
426
459
  default: String(v.default),
427
- enum: enumValues && enumValues.length > 0 ? Option2.some(enumValues) : Option2.none(),
428
- description: Option2.fromNullishOr(v.description)
460
+ enum: enumValues && enumValues.length > 0 ? Option.some(enumValues) : Option.none(),
461
+ description: Option.fromNullishOr(v.description)
429
462
  })
430
463
  ]
431
464
  ];
@@ -434,18 +467,18 @@ var extractServerList = (servers) => (servers ?? []).flatMap((server) => {
434
467
  return [
435
468
  ServerInfo.make({
436
469
  url: server.url,
437
- description: Option2.fromNullishOr(server.description),
438
- variables: vars && Object.keys(vars).length > 0 ? Option2.some(vars) : Option2.none()
470
+ description: Option.fromNullishOr(server.description),
471
+ variables: vars && Object.keys(vars).length > 0 ? Option.some(vars) : Option.none()
439
472
  })
440
473
  ];
441
474
  });
442
475
  var extractServers = (doc) => extractServerList(doc.servers);
443
- var extractOperationBaseUrl = (pathItem, operation) => {
444
- const operationServers = extractServerList(operation.servers);
445
- if (operationServers.length > 0) return resolveBaseUrl(operationServers);
446
- const pathServers = extractServerList(pathItem.servers);
447
- if (pathServers.length > 0) return resolveBaseUrl(pathServers);
448
- return void 0;
476
+ var operationServers = (pathItem, operation, docServers) => {
477
+ const operationLevel = extractServerList(operation.servers);
478
+ if (operationLevel.length > 0) return operationLevel;
479
+ const pathLevel = extractServerList(pathItem.servers);
480
+ if (pathLevel.length > 0) return pathLevel;
481
+ return docServers;
449
482
  };
450
483
  var extract = Effect2.fn("OpenApi.extract")(function* (doc) {
451
484
  const paths = doc.paths;
@@ -455,6 +488,7 @@ var extract = Effect2.fn("OpenApi.extract")(function* (doc) {
455
488
  });
456
489
  }
457
490
  const r = new DocResolver(doc);
491
+ const docServers = extractServers(doc);
458
492
  const operations = [];
459
493
  for (const [pathTemplate, pathItem] of Object.entries(paths).sort(
460
494
  ([a], [b]) => a.localeCompare(b)
@@ -465,39 +499,40 @@ var extract = Effect2.fn("OpenApi.extract")(function* (doc) {
465
499
  if (!operation) continue;
466
500
  const parameters = extractParameters(pathItem, operation, r);
467
501
  const requestBody = extractRequestBody(operation, r);
468
- const inputSchema = buildInputSchema(parameters, requestBody);
502
+ const servers = operationServers(pathItem, operation, docServers);
503
+ const inputSchema = buildInputSchema(parameters, requestBody, servers);
469
504
  const outputSchema = extractOutputSchema(operation, r);
470
505
  const tags = (operation.tags ?? []).filter((t) => t.trim().length > 0);
471
506
  const operationPathTemplate = explicitPathTemplate(operation) ?? pathTemplate;
472
507
  operations.push(
473
508
  ExtractedOperation.make({
474
509
  operationId: OperationId.make(deriveOperationId(method, pathTemplate, operation)),
475
- toolPath: Option2.fromNullishOr(explicitToolPath(operation)),
510
+ toolPath: Option.fromNullishOr(explicitToolPath(operation)),
476
511
  method,
477
- baseUrl: extractOperationBaseUrl(pathItem, operation),
512
+ servers,
478
513
  pathTemplate: operationPathTemplate,
479
- summary: Option2.fromNullishOr(operation.summary),
480
- description: Option2.fromNullishOr(operation.description),
514
+ summary: Option.fromNullishOr(operation.summary),
515
+ description: Option.fromNullishOr(operation.description),
481
516
  tags,
482
517
  parameters,
483
- requestBody: Option2.fromNullishOr(requestBody),
484
- inputSchema: Option2.fromNullishOr(inputSchema),
485
- outputSchema: Option2.fromNullishOr(outputSchema),
518
+ requestBody: Option.fromNullishOr(requestBody),
519
+ inputSchema: Option.fromNullishOr(inputSchema),
520
+ outputSchema: Option.fromNullishOr(outputSchema),
486
521
  deprecated: operation.deprecated === true
487
522
  })
488
523
  );
489
524
  }
490
525
  }
491
526
  return ExtractionResult.make({
492
- title: Option2.fromNullishOr(doc.info?.title),
493
- version: Option2.fromNullishOr(doc.info?.version),
494
- servers: extractServers(doc),
527
+ title: Option.fromNullishOr(doc.info?.title),
528
+ version: Option.fromNullishOr(doc.info?.version),
529
+ servers: docServers,
495
530
  operations
496
531
  });
497
532
  });
498
533
 
499
534
  // src/sdk/preview.ts
500
- import { Effect as Effect3, Option as Option3, Predicate } from "effect";
535
+ import { Effect as Effect3, Option as Option2, Predicate } from "effect";
501
536
  import { Schema as Schema4 } from "effect";
502
537
  var OAuth2Scopes = Schema4.Record(Schema4.String, Schema4.String);
503
538
  var SecuritySchemeType = Schema4.Literals(["http", "apiKey", "oauth2", "openIdConnect"]);
@@ -604,21 +639,21 @@ var stringRecord = (value) => {
604
639
  return out;
605
640
  };
606
641
  var extractFlows = (rawFlows) => {
607
- if (!rawFlows || typeof rawFlows !== "object") return Option3.none();
642
+ if (!rawFlows || typeof rawFlows !== "object") return Option2.none();
608
643
  const flows = rawFlows;
609
644
  const parseFlow = (key) => flows[key];
610
- let authorizationCode = Option3.none();
645
+ let authorizationCode = Option2.none();
611
646
  const authCodeRaw = parseFlow("authorizationCode");
612
647
  if (authCodeRaw && typeof authCodeRaw === "object") {
613
648
  const f = authCodeRaw;
614
649
  const authUrl = typeof f.authorizationUrl === "string" ? f.authorizationUrl : null;
615
650
  const tokenUrl = typeof f.tokenUrl === "string" ? f.tokenUrl : null;
616
651
  if (authUrl && tokenUrl) {
617
- authorizationCode = Option3.some(
652
+ authorizationCode = Option2.some(
618
653
  OAuth2AuthorizationCodeFlow.make({
619
654
  authorizationUrl: authUrl,
620
655
  tokenUrl,
621
- refreshUrl: Option3.fromNullishOr(
656
+ refreshUrl: Option2.fromNullishOr(
622
657
  typeof f.refreshUrl === "string" ? f.refreshUrl : void 0
623
658
  ),
624
659
  scopes: stringRecord(f.scopes)
@@ -626,16 +661,16 @@ var extractFlows = (rawFlows) => {
626
661
  );
627
662
  }
628
663
  }
629
- let clientCredentials = Option3.none();
664
+ let clientCredentials = Option2.none();
630
665
  const ccRaw = parseFlow("clientCredentials");
631
666
  if (ccRaw && typeof ccRaw === "object") {
632
667
  const f = ccRaw;
633
668
  const tokenUrl = typeof f.tokenUrl === "string" ? f.tokenUrl : null;
634
669
  if (tokenUrl) {
635
- clientCredentials = Option3.some(
670
+ clientCredentials = Option2.some(
636
671
  OAuth2ClientCredentialsFlow.make({
637
672
  tokenUrl,
638
- refreshUrl: Option3.fromNullishOr(
673
+ refreshUrl: Option2.fromNullishOr(
639
674
  typeof f.refreshUrl === "string" ? f.refreshUrl : void 0
640
675
  ),
641
676
  scopes: stringRecord(f.scopes)
@@ -643,10 +678,10 @@ var extractFlows = (rawFlows) => {
643
678
  );
644
679
  }
645
680
  }
646
- if (Option3.isNone(authorizationCode) && Option3.isNone(clientCredentials)) {
647
- return Option3.none();
681
+ if (Option2.isNone(authorizationCode) && Option2.isNone(clientCredentials)) {
682
+ return Option2.none();
648
683
  }
649
- return Option3.some(OAuth2Flows.make({ authorizationCode, clientCredentials }));
684
+ return Option2.some(OAuth2Flows.make({ authorizationCode, clientCredentials }));
650
685
  };
651
686
  var extractSecuritySchemes = (rawSchemes, resolver) => Object.entries(rawSchemes).flatMap(([name, schemeOrRef]) => {
652
687
  if (!schemeOrRef || typeof schemeOrRef !== "object") return [];
@@ -656,19 +691,19 @@ var extractSecuritySchemes = (rawSchemes, resolver) => Object.entries(rawSchemes
656
691
  if (!resolved || typeof resolved !== "object") return [];
657
692
  const scheme = resolved;
658
693
  const type = decodeSecuritySchemeType(scheme.type);
659
- if (Option3.isNone(type)) return [];
694
+ if (Option2.isNone(type)) return [];
660
695
  const schemeType = type.value;
661
696
  return [
662
697
  SecurityScheme.make({
663
698
  name,
664
699
  type: schemeType,
665
- scheme: Option3.fromNullishOr(scheme.scheme),
666
- bearerFormat: Option3.fromNullishOr(scheme.bearerFormat),
667
- in: Option3.fromNullishOr(scheme.in),
668
- headerName: Option3.fromNullishOr(scheme.name),
669
- description: Option3.fromNullishOr(scheme.description),
670
- flows: schemeType === "oauth2" ? extractFlows(scheme.flows) : Option3.none(),
671
- openIdConnectUrl: Option3.fromNullishOr(scheme.openIdConnectUrl)
700
+ scheme: Option2.fromNullishOr(scheme.scheme),
701
+ bearerFormat: Option2.fromNullishOr(scheme.bearerFormat),
702
+ in: Option2.fromNullishOr(scheme.in),
703
+ headerName: Option2.fromNullishOr(scheme.name),
704
+ description: Option2.fromNullishOr(scheme.description),
705
+ flows: schemeType === "oauth2" ? extractFlows(scheme.flows) : Option2.none(),
706
+ openIdConnectUrl: Option2.fromNullishOr(scheme.openIdConnectUrl)
672
707
  })
673
708
  ];
674
709
  });
@@ -681,21 +716,21 @@ var buildHeaderPresets = (schemes, strategies) => {
681
716
  const secretHeaders = [];
682
717
  const labelParts = [];
683
718
  for (const scheme of resolved) {
684
- if (scheme.type === "http" && Option3.getOrElse(scheme.scheme, () => "") === "bearer") {
719
+ if (scheme.type === "http" && Option2.getOrElse(scheme.scheme, () => "") === "bearer") {
685
720
  headers["Authorization"] = null;
686
721
  secretHeaders.push("Authorization");
687
722
  labelParts.push("Bearer Token");
688
- } else if (scheme.type === "http" && Option3.getOrElse(scheme.scheme, () => "") === "basic") {
723
+ } else if (scheme.type === "http" && Option2.getOrElse(scheme.scheme, () => "") === "basic") {
689
724
  headers["Authorization"] = null;
690
725
  secretHeaders.push("Authorization");
691
726
  labelParts.push("Basic Auth");
692
- } else if (scheme.type === "apiKey" && Option3.getOrElse(scheme.in, () => "") === "header") {
693
- const headerName = Option3.getOrElse(scheme.headerName, () => scheme.name);
727
+ } else if (scheme.type === "apiKey" && Option2.getOrElse(scheme.in, () => "") === "header") {
728
+ const headerName = Option2.getOrElse(scheme.headerName, () => scheme.name);
694
729
  headers[headerName] = null;
695
730
  secretHeaders.push(headerName);
696
731
  labelParts.push(scheme.name);
697
732
  } else if (scheme.type === "apiKey") {
698
- labelParts.push(`${scheme.name} (${Option3.getOrElse(scheme.in, () => "unknown")})`);
733
+ labelParts.push(`${scheme.name} (${Option2.getOrElse(scheme.in, () => "unknown")})`);
699
734
  } else if (scheme.type === "oauth2" || scheme.type === "openIdConnect") {
700
735
  return [];
701
736
  } else {
@@ -724,16 +759,16 @@ var buildOAuth2Presets = (schemes) => {
724
759
  const presets = [];
725
760
  for (const scheme of schemes) {
726
761
  if (scheme.type !== "oauth2") continue;
727
- if (Option3.isNone(scheme.flows)) continue;
762
+ if (Option2.isNone(scheme.flows)) continue;
728
763
  const flows = scheme.flows.value;
729
- if (Option3.isSome(flows.authorizationCode)) {
764
+ if (Option2.isSome(flows.authorizationCode)) {
730
765
  const flow = flows.authorizationCode.value;
731
766
  presets.push(
732
767
  OAuth2Preset.make({
733
768
  label: `OAuth2 Authorization Code \xB7 ${scheme.name}`,
734
769
  securitySchemeName: scheme.name,
735
770
  flow: "authorizationCode",
736
- authorizationUrl: Option3.some(flow.authorizationUrl),
771
+ authorizationUrl: Option2.some(flow.authorizationUrl),
737
772
  tokenUrl: flow.tokenUrl,
738
773
  refreshUrl: flow.refreshUrl,
739
774
  scopes: flow.scopes,
@@ -741,14 +776,14 @@ var buildOAuth2Presets = (schemes) => {
741
776
  })
742
777
  );
743
778
  }
744
- if (Option3.isSome(flows.clientCredentials)) {
779
+ if (Option2.isSome(flows.clientCredentials)) {
745
780
  const flow = flows.clientCredentials.value;
746
781
  presets.push(
747
782
  OAuth2Preset.make({
748
783
  label: `OAuth2 Client Credentials \xB7 ${scheme.name}`,
749
784
  securitySchemeName: scheme.name,
750
785
  flow: "clientCredentials",
751
- authorizationUrl: Option3.none(),
786
+ authorizationUrl: Option2.none(),
752
787
  tokenUrl: flow.tokenUrl,
753
788
  refreshUrl: flow.refreshUrl,
754
789
  scopes: flow.scopes,
@@ -766,8 +801,7 @@ var collectTags = (result) => {
766
801
  }
767
802
  return [...tagSet].sort();
768
803
  };
769
- var previewSpec = Effect3.fn("OpenApi.previewSpec")(function* (input) {
770
- const specText = yield* resolveSpecText(input);
804
+ var previewSpecText = Effect3.fn("OpenApi.previewSpecText")(function* (specText) {
771
805
  const doc = yield* parse(specText);
772
806
  const result = yield* extract(doc);
773
807
  const resolver = new DocResolver(doc);
@@ -799,10 +833,25 @@ var previewSpec = Effect3.fn("OpenApi.previewSpec")(function* (input) {
799
833
  oauth2Presets: buildOAuth2Presets(securitySchemes)
800
834
  });
801
835
  });
836
+ var previewSpec = Effect3.fn("OpenApi.previewSpec")(function* (input) {
837
+ const specText = yield* resolveSpecText(input);
838
+ return yield* previewSpecText(specText);
839
+ });
802
840
 
803
841
  export {
804
- variable,
805
- TOKEN_VARIABLE,
842
+ OpenApiParseError,
843
+ OpenApiExtractionError,
844
+ OpenApiInvocationError,
845
+ OpenApiOAuthError,
846
+ OpenApiAuthRequiredError,
847
+ fetchSpecText,
848
+ resolveSpecText,
849
+ parse,
850
+ DocResolver,
851
+ substituteUrlVariables,
852
+ resolveServerUrl,
853
+ preferredContent,
854
+ normalizeOpenApiAuthInputs,
806
855
  OperationId,
807
856
  HttpMethod,
808
857
  ParameterLocation,
@@ -810,25 +859,13 @@ export {
810
859
  EncodingObject,
811
860
  MediaBinding,
812
861
  OperationRequestBody,
813
- ExtractedOperation,
814
862
  ServerVariable,
815
863
  ServerInfo,
864
+ ExtractedOperation,
816
865
  ExtractionResult,
817
866
  OperationBinding,
818
867
  InvocationResult,
819
- OpenApiParseError,
820
- OpenApiExtractionError,
821
- OpenApiInvocationError,
822
- OpenApiOAuthError,
823
- OpenApiAuthRequiredError,
824
- fetchSpecText,
825
- resolveSpecText,
826
- parse,
827
- DocResolver,
828
- substituteUrlVariables,
829
- expandServerUrlOptions,
830
- resolveBaseUrl,
831
- preferredContent,
868
+ TOKEN_VARIABLE,
832
869
  extract,
833
870
  OAuth2AuthorizationCodeFlow,
834
871
  OAuth2ClientCredentialsFlow,
@@ -839,6 +876,7 @@ export {
839
876
  OAuth2Preset,
840
877
  PreviewOperation,
841
878
  SpecPreview,
879
+ previewSpecText,
842
880
  previewSpec
843
881
  };
844
- //# sourceMappingURL=chunk-YVRI7KRC.js.map
882
+ //# sourceMappingURL=chunk-C3IJX4AN.js.map