@executor-js/plugin-graphql 1.4.31 → 1.4.33

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.
@@ -3,8 +3,8 @@ import {
3
3
  } from "./chunk-M4SJY6CB.js";
4
4
  import {
5
5
  addGraphqlSourceOptimistic
6
- } from "./chunk-OYUIHBWZ.js";
7
- import "./chunk-H422YIM4.js";
6
+ } from "./chunk-D3FN3ZDA.js";
7
+ import "./chunk-UIAHATHP.js";
8
8
 
9
9
  // src/react/AddGraphqlSource.tsx
10
10
  import { useCallback, useState } from "react";
@@ -247,4 +247,4 @@ function AddGraphqlSource(props) {
247
247
  export {
248
248
  AddGraphqlSource as default
249
249
  };
250
- //# sourceMappingURL=AddGraphqlSource-PBMKSY7Y.js.map
250
+ //# sourceMappingURL=AddGraphqlSource-CJCUUYNM.js.map
@@ -4,8 +4,8 @@ import {
4
4
  import {
5
5
  graphqlSourceAtom,
6
6
  graphqlSourceBindingsAtom
7
- } from "./chunk-OYUIHBWZ.js";
8
- import "./chunk-H422YIM4.js";
7
+ } from "./chunk-D3FN3ZDA.js";
8
+ import "./chunk-UIAHATHP.js";
9
9
 
10
10
  // src/react/EditGraphqlSource.tsx
11
11
  import { useMemo, useState } from "react";
@@ -264,4 +264,4 @@ function EditGraphqlSource(props) {
264
264
  export {
265
265
  EditGraphqlSource as default
266
266
  };
267
- //# sourceMappingURL=EditGraphqlSource-AFR4RQHY.js.map
267
+ //# sourceMappingURL=EditGraphqlSource-YLTPUYW4.js.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  graphqlSourceAtom,
3
3
  graphqlSourceBindingsAtom
4
- } from "./chunk-OYUIHBWZ.js";
5
- import "./chunk-H422YIM4.js";
4
+ } from "./chunk-D3FN3ZDA.js";
5
+ import "./chunk-UIAHATHP.js";
6
6
 
7
7
  // src/react/GraphqlSourceSummary.tsx
8
8
  import { useAtomValue } from "@effect/atom-react";
@@ -67,4 +67,4 @@ function GraphqlSourceSummary(props) {
67
67
  export {
68
68
  GraphqlSourceSummary as default
69
69
  };
70
- //# sourceMappingURL=GraphqlSourceSummary-MY4AW37M.js.map
70
+ //# sourceMappingURL=GraphqlSourceSummary-YWJX6ONU.js.map
@@ -6,6 +6,7 @@ import {
6
6
  ExtractionResult,
7
7
  GRAPHQL_OAUTH_CONNECTION_SLOT,
8
8
  GraphqlArgument,
9
+ GraphqlAuthRequiredError,
9
10
  GraphqlConfiguredValueInput,
10
11
  GraphqlCredentialInput,
11
12
  GraphqlExtractionError,
@@ -17,7 +18,7 @@ import {
17
18
  OperationBinding,
18
19
  graphqlHeaderSlot,
19
20
  graphqlQueryParamSlot
20
- } from "./chunk-H422YIM4.js";
21
+ } from "./chunk-UIAHATHP.js";
21
22
 
22
23
  // src/sdk/introspect.ts
23
24
  import { Effect, Option, Schema } from "effect";
@@ -749,7 +750,8 @@ import {
749
750
  ScopeId,
750
751
  SourceDetectionResult,
751
752
  StorageError,
752
- ToolResult
753
+ ToolResult,
754
+ authToolFailure
753
755
  } from "@executor-js/sdk/core";
754
756
  import {
755
757
  compileHttpNamedCredentialMap,
@@ -838,6 +840,26 @@ var graphqlToolFailure = (code, message, details) => ToolResult.fail({
838
840
  message,
839
841
  ...details === void 0 ? {} : { details }
840
842
  });
843
+ var graphqlAuthToolFailure = (failure) => authToolFailure({
844
+ code: failure.code,
845
+ message: failure.message,
846
+ source: { id: failure.sourceId, scope: failure.sourceScope },
847
+ credential: {
848
+ kind: failure.credentialKind,
849
+ ...failure.credentialLabel ? { label: failure.credentialLabel } : {},
850
+ ...failure.slotKey ? { slotKey: failure.slotKey } : {},
851
+ ...failure.secretId ? { secretId: failure.secretId } : {},
852
+ ...failure.connectionId ? { connectionId: failure.connectionId } : {}
853
+ },
854
+ ...failure.status !== void 0 ? { status: failure.status } : {},
855
+ ...failure.details !== void 0 ? {
856
+ upstream: {
857
+ ...failure.status !== void 0 ? { status: failure.status } : {},
858
+ details: failure.details
859
+ }
860
+ } : {},
861
+ recovery: { configureSourceTool: "executor.graphql.configureSource" }
862
+ });
841
863
  var resolveStaticScopeInput = (ctx, value) => String(
842
864
  ctx.scopes.find((scope) => scope.name === value || String(scope.id) === value)?.id ?? value
843
865
  );
@@ -1101,20 +1123,35 @@ var resolveGraphqlBindingValueMap = (ctx, values, params) => Effect5.gen(functio
1101
1123
  value.slot
1102
1124
  );
1103
1125
  if (binding?.value.kind === "secret") {
1104
- const secret = yield* ctx.secrets.getAtScope(binding.value.secretId, binding.scopeId).pipe(
1126
+ const secretBinding = binding.value;
1127
+ const secret = yield* ctx.secrets.getAtScope(secretBinding.secretId, binding.scopeId).pipe(
1105
1128
  Effect5.catchTag(
1106
1129
  "SecretOwnedByConnectionError",
1107
1130
  () => Effect5.fail(
1108
- params.makeError(`Secret not found for ${params.missingLabel} "${name}"`)
1131
+ new GraphqlAuthRequiredError({
1132
+ code: "credential_secret_missing",
1133
+ sourceId: params.sourceId,
1134
+ sourceScope: params.sourceScope,
1135
+ credentialKind: "secret",
1136
+ credentialLabel: name,
1137
+ slotKey: value.slot,
1138
+ secretId: String(secretBinding.secretId),
1139
+ message: `Secret not found for ${params.missingLabel} "${name}"`
1140
+ })
1109
1141
  )
1110
1142
  )
1111
1143
  );
1112
1144
  if (secret === null) {
1113
- return yield* Effect5.fail(
1114
- params.makeError(
1115
- `Missing secret "${binding.value.secretId}" for ${params.missingLabel} "${name}"`
1116
- )
1117
- );
1145
+ return yield* new GraphqlAuthRequiredError({
1146
+ code: "credential_secret_missing",
1147
+ sourceId: params.sourceId,
1148
+ sourceScope: params.sourceScope,
1149
+ credentialKind: "secret",
1150
+ credentialLabel: name,
1151
+ slotKey: value.slot,
1152
+ secretId: String(secretBinding.secretId),
1153
+ message: `Missing secret "${secretBinding.secretId}" for ${params.missingLabel} "${name}"`
1154
+ });
1118
1155
  }
1119
1156
  resolved[name] = value.prefix ? `${value.prefix}${secret}` : secret;
1120
1157
  continue;
@@ -1123,9 +1160,15 @@ var resolveGraphqlBindingValueMap = (ctx, values, params) => Effect5.gen(functio
1123
1160
  resolved[name] = value.prefix ? `${value.prefix}${binding.value.text}` : binding.value.text;
1124
1161
  continue;
1125
1162
  }
1126
- return yield* Effect5.fail(
1127
- params.makeError(`Missing binding for ${params.missingLabel} "${name}"`)
1128
- );
1163
+ return yield* new GraphqlAuthRequiredError({
1164
+ code: "credential_binding_missing",
1165
+ sourceId: params.sourceId,
1166
+ sourceScope: params.sourceScope,
1167
+ credentialKind: "secret",
1168
+ credentialLabel: name,
1169
+ slotKey: value.slot,
1170
+ message: `Missing binding for ${params.missingLabel} "${name}"`
1171
+ });
1129
1172
  }
1130
1173
  return Object.keys(resolved).length > 0 ? resolved : void 0;
1131
1174
  });
@@ -1138,14 +1181,80 @@ var resolveGraphqlStoredOAuthHeader = (ctx, sourceId, sourceScope, auth) => Effe
1138
1181
  auth.connectionSlot
1139
1182
  );
1140
1183
  if (binding?.value.kind !== "connection") {
1141
- return yield* new GraphqlInvocationError({
1142
- message: `Missing OAuth connection binding for GraphQL source "${sourceId}"`,
1143
- statusCode: Option5.none()
1184
+ return yield* new GraphqlAuthRequiredError({
1185
+ code: "oauth_connection_missing",
1186
+ sourceId,
1187
+ sourceScope,
1188
+ credentialKind: "connection",
1189
+ credentialLabel: "OAuth sign-in",
1190
+ slotKey: auth.connectionSlot,
1191
+ message: `Missing OAuth connection binding for GraphQL source "${sourceId}"`
1144
1192
  });
1145
1193
  }
1146
- const accessToken = yield* ctx.connections.accessTokenAtScope(
1147
- binding.value.connectionId,
1148
- binding.scopeId
1194
+ const connectionId = binding.value.connectionId;
1195
+ const accessToken = yield* ctx.connections.accessTokenAtScope(connectionId, binding.scopeId).pipe(
1196
+ Effect5.catchTags({
1197
+ ConnectionReauthRequiredError: ({ message, connectionId: connectionId2 }) => Effect5.fail(
1198
+ new GraphqlAuthRequiredError({
1199
+ code: "oauth_reauth_required",
1200
+ sourceId,
1201
+ sourceScope,
1202
+ credentialKind: "oauth",
1203
+ credentialLabel: "OAuth sign-in",
1204
+ slotKey: auth.connectionSlot,
1205
+ connectionId: String(connectionId2),
1206
+ message: `OAuth connection "${connectionId2}" needs re-authentication: ${message}`
1207
+ })
1208
+ ),
1209
+ ConnectionNotFoundError: ({ connectionId: connectionId2 }) => Effect5.fail(
1210
+ new GraphqlAuthRequiredError({
1211
+ code: "oauth_connection_missing",
1212
+ sourceId,
1213
+ sourceScope,
1214
+ credentialKind: "connection",
1215
+ credentialLabel: "OAuth sign-in",
1216
+ slotKey: auth.connectionSlot,
1217
+ connectionId: String(connectionId2),
1218
+ message: `OAuth connection "${connectionId2}" was not found for GraphQL source "${sourceId}"`
1219
+ })
1220
+ ),
1221
+ ConnectionProviderNotRegisteredError: ({ provider }) => Effect5.fail(
1222
+ new GraphqlAuthRequiredError({
1223
+ code: "oauth_connection_failed",
1224
+ sourceId,
1225
+ sourceScope,
1226
+ credentialKind: "oauth",
1227
+ credentialLabel: "OAuth sign-in",
1228
+ slotKey: auth.connectionSlot,
1229
+ connectionId: String(connectionId),
1230
+ message: `OAuth provider "${provider}" is not registered`
1231
+ })
1232
+ ),
1233
+ ConnectionRefreshNotSupportedError: ({ provider, connectionId: connectionId2 }) => Effect5.fail(
1234
+ new GraphqlAuthRequiredError({
1235
+ code: "oauth_connection_failed",
1236
+ sourceId,
1237
+ sourceScope,
1238
+ credentialKind: "oauth",
1239
+ credentialLabel: "OAuth sign-in",
1240
+ slotKey: auth.connectionSlot,
1241
+ connectionId: String(connectionId2),
1242
+ message: `OAuth provider "${provider}" cannot refresh connection "${connectionId2}"`
1243
+ })
1244
+ ),
1245
+ ConnectionRefreshError: ({ message, connectionId: connectionId2 }) => Effect5.fail(
1246
+ new GraphqlAuthRequiredError({
1247
+ code: "oauth_connection_failed",
1248
+ sourceId,
1249
+ sourceScope,
1250
+ credentialKind: "oauth",
1251
+ credentialLabel: "OAuth sign-in",
1252
+ slotKey: auth.connectionSlot,
1253
+ connectionId: String(connectionId2),
1254
+ message: `OAuth connection "${connectionId2}" refresh failed: ${message}`
1255
+ })
1256
+ )
1257
+ })
1149
1258
  );
1150
1259
  return { Authorization: `Bearer ${accessToken}` };
1151
1260
  });
@@ -1462,14 +1571,12 @@ var graphqlPlugin = definePlugin((options) => {
1462
1571
  const resolvedHeaders = (yield* resolveGraphqlBindingValueMap(ctx, source.headers, {
1463
1572
  sourceId: source.namespace,
1464
1573
  sourceScope: source.scope,
1465
- missingLabel: "header",
1466
- makeError: (message) => new GraphqlInvocationError({ message, statusCode: Option5.none() })
1574
+ missingLabel: "header"
1467
1575
  })) ?? {};
1468
1576
  const resolvedQueryParams = (yield* resolveGraphqlBindingValueMap(ctx, source.queryParams, {
1469
1577
  sourceId: source.namespace,
1470
1578
  sourceScope: source.scope,
1471
- missingLabel: "query parameter",
1472
- makeError: (message) => new GraphqlInvocationError({ message, statusCode: Option5.none() })
1579
+ missingLabel: "query parameter"
1473
1580
  })) ?? {};
1474
1581
  const oauthHeader = yield* resolveGraphqlStoredOAuthHeader(
1475
1582
  ctx,
@@ -1496,6 +1603,23 @@ var graphqlPlugin = definePlugin((options) => {
1496
1603
  });
1497
1604
  }
1498
1605
  if (result.status < 200 || result.status >= 300) {
1606
+ if (result.status === 401 || result.status === 403) {
1607
+ return authToolFailure({
1608
+ code: "credential_rejected",
1609
+ status: result.status,
1610
+ message: `Upstream rejected credentials for GraphQL source "${source.namespace}" with HTTP ${result.status}. Re-authenticate or update the source credentials before retrying this tool.`,
1611
+ source: { id: source.namespace, scope: source.scope },
1612
+ credential: { kind: "upstream", label: "Upstream authorization" },
1613
+ upstream: {
1614
+ status: result.status,
1615
+ details: {
1616
+ data: result.data,
1617
+ errors: result.errors
1618
+ }
1619
+ },
1620
+ recovery: { configureSourceTool: "executor.graphql.configureSource" }
1621
+ });
1622
+ }
1499
1623
  return ToolResult.fail({
1500
1624
  code: "graphql_http_error",
1501
1625
  status: result.status,
@@ -1508,7 +1632,12 @@ var graphqlPlugin = definePlugin((options) => {
1508
1632
  });
1509
1633
  }
1510
1634
  return ToolResult.ok(result.data);
1511
- }),
1635
+ }).pipe(
1636
+ Effect5.catchTag(
1637
+ "GraphqlAuthRequiredError",
1638
+ (error) => Effect5.succeed(graphqlAuthToolFailure(error))
1639
+ )
1640
+ ),
1512
1641
  resolveAnnotations: ({ ctx, sourceId, toolRows }) => Effect5.gen(function* () {
1513
1642
  const scopes = /* @__PURE__ */ new Set();
1514
1643
  for (const row of toolRows) {
@@ -1598,4 +1727,4 @@ export {
1598
1727
  makeDefaultGraphqlStore,
1599
1728
  graphqlPlugin
1600
1729
  };
1601
- //# sourceMappingURL=chunk-7S2FM3ZF.js.map
1730
+ //# sourceMappingURL=chunk-2252RTCE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/sdk/introspect.ts","../src/sdk/extract.ts","../src/sdk/invoke.ts","../src/sdk/store.ts","../src/sdk/plugin.ts"],"sourcesContent":["import { Effect, Option, Schema } from \"effect\";\nimport { HttpClient, HttpClientRequest } from \"effect/unstable/http\";\n\nimport { GraphqlIntrospectionError } from \"./errors\";\n\n// ---------------------------------------------------------------------------\n// Introspection query — standard GraphQL introspection\n// ---------------------------------------------------------------------------\n\nconst INTROSPECTION_QUERY = `\n query IntrospectionQuery {\n __schema {\n queryType { name }\n mutationType { name }\n types {\n kind\n name\n description\n fields(includeDeprecated: false) {\n name\n description\n args {\n name\n description\n type {\n ...TypeRef\n }\n defaultValue\n }\n type {\n ...TypeRef\n }\n }\n inputFields {\n name\n description\n type {\n ...TypeRef\n }\n defaultValue\n }\n enumValues(includeDeprecated: false) {\n name\n description\n }\n }\n }\n }\n\n fragment TypeRef on __Type {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n }\n }\n }\n }\n }\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Introspection result types\n// ---------------------------------------------------------------------------\n\nconst IntrospectionTypeRefLeaf = Schema.Struct({\n kind: Schema.String,\n name: Schema.NullOr(Schema.String),\n ofType: Schema.optional(Schema.Null),\n});\n\nconst IntrospectionTypeRef5 = Schema.Struct({\n kind: Schema.String,\n name: Schema.NullOr(Schema.String),\n ofType: Schema.optional(Schema.NullOr(IntrospectionTypeRefLeaf)),\n});\n\nconst IntrospectionTypeRef4 = Schema.Struct({\n kind: Schema.String,\n name: Schema.NullOr(Schema.String),\n ofType: Schema.optional(Schema.NullOr(IntrospectionTypeRef5)),\n});\n\nconst IntrospectionTypeRef3 = Schema.Struct({\n kind: Schema.String,\n name: Schema.NullOr(Schema.String),\n ofType: Schema.optional(Schema.NullOr(IntrospectionTypeRef4)),\n});\n\nconst IntrospectionTypeRef2 = Schema.Struct({\n kind: Schema.String,\n name: Schema.NullOr(Schema.String),\n ofType: Schema.optional(Schema.NullOr(IntrospectionTypeRef3)),\n});\n\nconst IntrospectionTypeRefSchema = Schema.Struct({\n kind: Schema.String,\n name: Schema.NullOr(Schema.String),\n ofType: Schema.optional(Schema.NullOr(IntrospectionTypeRef2)),\n});\n\nconst IntrospectionInputValueSchema = Schema.Struct({\n name: Schema.String,\n description: Schema.NullOr(Schema.String),\n type: IntrospectionTypeRefSchema,\n defaultValue: Schema.NullOr(Schema.String),\n});\n\nconst IntrospectionFieldSchema = Schema.Struct({\n name: Schema.String,\n description: Schema.NullOr(Schema.String),\n args: Schema.Array(IntrospectionInputValueSchema),\n type: IntrospectionTypeRefSchema,\n});\n\nconst IntrospectionTypeSchema = Schema.Struct({\n kind: Schema.String,\n name: Schema.String,\n description: Schema.NullOr(Schema.String),\n fields: Schema.NullOr(Schema.Array(IntrospectionFieldSchema)),\n inputFields: Schema.NullOr(Schema.Array(IntrospectionInputValueSchema)),\n enumValues: Schema.NullOr(\n Schema.Array(\n Schema.Struct({\n name: Schema.String,\n description: Schema.NullOr(Schema.String),\n }),\n ),\n ),\n});\n\nconst IntrospectionResultSchema = Schema.Struct({\n __schema: Schema.Struct({\n queryType: Schema.NullOr(Schema.Struct({ name: Schema.String })),\n mutationType: Schema.NullOr(Schema.Struct({ name: Schema.String })),\n types: Schema.Array(IntrospectionTypeSchema),\n }),\n});\n\nconst IntrospectionResponseSchema = Schema.Struct({\n data: Schema.optional(IntrospectionResultSchema),\n errors: Schema.optional(Schema.Array(Schema.Unknown)),\n});\n\nconst UpstreamErrorResponseSchema = Schema.Struct({\n message: Schema.optional(Schema.String),\n errors: Schema.optional(\n Schema.Array(\n Schema.Struct({\n message: Schema.optional(Schema.String),\n }),\n ),\n ),\n});\n\nconst IntrospectionJsonSchema = Schema.Union([\n Schema.Struct({ data: IntrospectionResultSchema }),\n IntrospectionResultSchema,\n]);\nconst JsonTextSchema = Schema.fromJsonString(Schema.Unknown);\n\nconst decodeUpstreamErrorResponse = Schema.decodeUnknownOption(UpstreamErrorResponseSchema);\n\nexport type IntrospectionTypeRef = typeof IntrospectionTypeRefSchema.Type;\nexport type IntrospectionInputValue = typeof IntrospectionInputValueSchema.Type;\nexport type IntrospectionField = typeof IntrospectionFieldSchema.Type;\nexport type IntrospectionEnumValue = NonNullable<\n (typeof IntrospectionTypeSchema.Type)[\"enumValues\"]\n>[number];\nexport type IntrospectionType = typeof IntrospectionTypeSchema.Type;\nexport type IntrospectionSchema = (typeof IntrospectionResultSchema.Type)[\"__schema\"];\nexport type IntrospectionResult = typeof IntrospectionResultSchema.Type;\n\nconst firstUpstreamErrorMessage = (value: unknown): string | null => {\n const decoded = decodeUpstreamErrorResponse(value);\n return Option.match(decoded, {\n onNone: () => null,\n onSome: (response) => {\n if (response.message) return response.message;\n for (const entry of response.errors ?? []) {\n const message = entry.message;\n if (message) return message;\n }\n return null;\n },\n });\n};\n\nconst redactUpstreamBody = (body: string): string =>\n body\n .replaceAll(\n /(\"(?:access_token|refresh_token|id_token|client_secret|token|authorization)\"\\s*:\\s*\")[^\"]*(\")/gi,\n \"$1[redacted]$2\",\n )\n .replaceAll(\n /((?:access_token|refresh_token|id_token|client_secret|token|authorization)=)[^&\\s]*/gi,\n \"$1[redacted]\",\n )\n .replaceAll(\n /((?:authorization|access-token|refresh-token|id-token|client-secret|token)\\s*:\\s*)(?:bearer\\s+)?[^\\s,;]+/gi,\n \"$1[redacted]\",\n );\n\nconst upstreamTextMessage = (body: string): string | null => {\n const text = redactUpstreamBody(body.replaceAll(/\\s+/g, \" \").trim());\n if (text.length === 0) return null;\n return text.length > 500 ? `${text.slice(0, 500)}...` : text;\n};\n\n// ---------------------------------------------------------------------------\n// Introspect a GraphQL endpoint\n// ---------------------------------------------------------------------------\n\nexport const introspect = Effect.fn(\"GraphQL.introspect\")(function* (\n endpoint: string,\n headers?: Record<string, string>,\n queryParams?: Record<string, string>,\n) {\n const client = yield* HttpClient.HttpClient;\n const requestEndpoint =\n queryParams && Object.keys(queryParams).length > 0\n ? (() => {\n const url = new URL(endpoint);\n for (const [name, value] of Object.entries(queryParams)) {\n url.searchParams.set(name, value);\n }\n return url.toString();\n })()\n : endpoint;\n\n let request = HttpClientRequest.post(requestEndpoint).pipe(\n HttpClientRequest.setHeader(\"Content-Type\", \"application/json\"),\n HttpClientRequest.setHeader(\"Accept\", \"application/json\"),\n HttpClientRequest.setHeader(\"User-Agent\", \"executor-graphql\"),\n HttpClientRequest.bodyJsonUnsafe({\n query: INTROSPECTION_QUERY,\n }),\n );\n\n if (headers) {\n for (const [k, v] of Object.entries(headers)) {\n request = HttpClientRequest.setHeader(request, k, v);\n }\n }\n\n const response = yield* client.execute(request).pipe(\n Effect.tapCause((cause) => Effect.logError(\"graphql introspection request failed\", cause)),\n Effect.mapError(\n () =>\n new GraphqlIntrospectionError({\n message: \"Failed to reach GraphQL endpoint\",\n }),\n ),\n );\n\n if (response.status !== 200) {\n const responseText = yield* response.text.pipe(Effect.catch(() => Effect.succeed(\"\")));\n const raw = responseText\n ? yield* Schema.decodeUnknownEffect(JsonTextSchema)(responseText).pipe(\n Effect.catch(() => Effect.succeed(null)),\n )\n : null;\n const upstreamMessage = upstreamTextMessage(\n (raw === null ? null : firstUpstreamErrorMessage(raw)) ?? responseText,\n );\n return yield* new GraphqlIntrospectionError({\n message: upstreamMessage\n ? `Introspection failed with status ${response.status}: ${upstreamMessage}`\n : `Introspection failed with status ${response.status}`,\n });\n }\n\n const raw = yield* response.json.pipe(\n Effect.tapCause((cause) => Effect.logError(\"graphql introspection JSON parse failed\", cause)),\n Effect.mapError(\n () =>\n new GraphqlIntrospectionError({\n message: `Failed to parse introspection response as JSON`,\n }),\n ),\n );\n\n const json = yield* Schema.decodeUnknownEffect(IntrospectionResponseSchema)(raw).pipe(\n Effect.mapError(\n () =>\n new GraphqlIntrospectionError({\n message: \"Introspection response has an invalid shape\",\n }),\n ),\n );\n\n if (json.errors && Array.isArray(json.errors) && json.errors.length > 0) {\n const upstreamMessage = firstUpstreamErrorMessage(json);\n return yield* new GraphqlIntrospectionError({\n message: upstreamMessage\n ? `Introspection returned ${json.errors.length} error(s): ${upstreamMessage}`\n : `Introspection returned ${json.errors.length} error(s)`,\n });\n }\n\n if (!json.data?.__schema) {\n return yield* new GraphqlIntrospectionError({\n message: \"Introspection response missing __schema\",\n });\n }\n\n return json.data;\n});\n\n// ---------------------------------------------------------------------------\n// Parse an introspection result from a JSON string (for offline/text input)\n// ---------------------------------------------------------------------------\n\nexport const parseIntrospectionJson = (\n text: string,\n): Effect.Effect<IntrospectionResult, GraphqlIntrospectionError> =>\n Schema.decodeUnknownEffect(Schema.fromJsonString(IntrospectionJsonSchema))(text).pipe(\n Effect.map((parsed) => (\"data\" in parsed ? parsed.data : parsed)),\n Effect.mapError(\n () =>\n new GraphqlIntrospectionError({\n message: \"Failed to parse introspection JSON\",\n }),\n ),\n );\n","import { Effect, Match, Option } from \"effect\";\n\nimport { GraphqlExtractionError } from \"./errors\";\nimport type {\n IntrospectionResult,\n IntrospectionSchema,\n IntrospectionType,\n IntrospectionTypeRef,\n IntrospectionInputValue,\n} from \"./introspect\";\nimport {\n ExtractedField,\n ExtractionResult,\n GraphqlArgument,\n type GraphqlOperationKind,\n} from \"./types\";\n\n// ---------------------------------------------------------------------------\n// Type ref helpers\n// ---------------------------------------------------------------------------\n\n/** Unwrap NON_NULL / LIST wrappers to get the leaf type name */\nconst unwrapTypeName = (ref: IntrospectionTypeRef): string => {\n if (ref.name) return ref.name;\n if (ref.ofType) return unwrapTypeName(ref.ofType);\n return \"Unknown\";\n};\n\n/** Check if a type ref is non-null (required) */\nconst isNonNull = (ref: IntrospectionTypeRef): boolean => ref.kind === \"NON_NULL\";\n\n// ---------------------------------------------------------------------------\n// Build shared definitions from all INPUT_OBJECT and ENUM types\n// ---------------------------------------------------------------------------\n\nconst buildDefinitions = (\n types: ReadonlyMap<string, IntrospectionType>,\n): Record<string, unknown> => {\n const defs: Record<string, unknown> = {};\n\n for (const [name, type] of types) {\n // Skip internal types\n if (name.startsWith(\"__\")) continue;\n\n if (type.kind === \"INPUT_OBJECT\" && type.inputFields) {\n const properties: Record<string, unknown> = {};\n const required: string[] = [];\n\n for (const field of type.inputFields) {\n const schema = typeRefToJsonSchema(field.type, types);\n if (field.description) {\n (schema as Record<string, unknown>).description = field.description;\n }\n properties[field.name] = schema;\n if (isNonNull(field.type)) {\n required.push(field.name);\n }\n }\n\n const def: Record<string, unknown> = { type: \"object\", properties };\n if (required.length > 0) def.required = required;\n if (type.description) def.description = type.description;\n defs[name] = def;\n }\n\n if (type.kind === \"ENUM\" && type.enumValues) {\n defs[name] = {\n type: \"string\",\n enum: type.enumValues.map((v) => v.name),\n ...(type.description ? { description: type.description } : {}),\n };\n }\n }\n\n return defs;\n};\n\n// ---------------------------------------------------------------------------\n// Convert a type ref to JSON Schema using $ref for complex types\n// ---------------------------------------------------------------------------\n\nconst typeRefToJsonSchema = (\n ref: IntrospectionTypeRef,\n // oxlint-disable-next-line only-used-in-recursion\n types: ReadonlyMap<string, IntrospectionType>,\n): Record<string, unknown> =>\n Match.value(ref.kind).pipe(\n Match.when(\n \"NON_NULL\",\n (): Record<string, unknown> => (ref.ofType ? typeRefToJsonSchema(ref.ofType, types) : {}),\n ),\n Match.when(\n \"LIST\",\n (): Record<string, unknown> => ({\n type: \"array\",\n items: ref.ofType ? typeRefToJsonSchema(ref.ofType, types) : {},\n }),\n ),\n Match.when(\"SCALAR\", (): Record<string, unknown> => scalarToJsonSchema(ref.name ?? \"String\")),\n Match.when(\n \"ENUM\",\n (): Record<string, unknown> =>\n ref.name ? { $ref: `#/$defs/${ref.name}` } : { type: \"string\" },\n ),\n Match.when(\n \"INPUT_OBJECT\",\n (): Record<string, unknown> =>\n ref.name ? { $ref: `#/$defs/${ref.name}` } : { type: \"object\" },\n ),\n Match.whenOr(\n \"OBJECT\",\n \"INTERFACE\",\n \"UNION\",\n (): Record<string, unknown> => ({ type: \"object\" }),\n ),\n Match.option,\n Option.getOrElse((): Record<string, unknown> => ({})),\n );\n\nconst scalarToJsonSchema = (name: string): Record<string, unknown> =>\n Match.value(name).pipe(\n Match.whenOr(\"String\", \"ID\", (): Record<string, unknown> => ({ type: \"string\" })),\n Match.when(\"Int\", (): Record<string, unknown> => ({ type: \"integer\" })),\n Match.when(\"Float\", (): Record<string, unknown> => ({ type: \"number\" })),\n Match.when(\"Boolean\", (): Record<string, unknown> => ({ type: \"boolean\" })),\n Match.option,\n Option.getOrElse(\n (): Record<string, unknown> => ({ type: \"string\", description: `Custom scalar: ${name}` }),\n ),\n );\n\n// ---------------------------------------------------------------------------\n// Build input JSON Schema from field arguments\n// ---------------------------------------------------------------------------\n\nconst buildInputSchema = (\n args: readonly IntrospectionInputValue[],\n types: ReadonlyMap<string, IntrospectionType>,\n): Record<string, unknown> | undefined => {\n if (args.length === 0) return undefined;\n\n const properties: Record<string, unknown> = {};\n const required: string[] = [];\n\n for (const arg of args) {\n const schema = typeRefToJsonSchema(arg.type, types);\n if (arg.description) {\n (schema as Record<string, unknown>).description = arg.description;\n }\n properties[arg.name] = schema;\n if (isNonNull(arg.type)) {\n required.push(arg.name);\n }\n }\n\n const inputSchema: Record<string, unknown> = {\n type: \"object\",\n properties,\n };\n if (required.length > 0) inputSchema.required = required;\n return inputSchema;\n};\n\n/** Format a type ref back to GraphQL type notation (e.g. \"[String!]!\") */\nconst formatTypeRef = (ref: IntrospectionTypeRef): string =>\n Match.value(ref.kind).pipe(\n Match.when(\"NON_NULL\", () => (ref.ofType ? `${formatTypeRef(ref.ofType)}!` : \"Unknown!\")),\n Match.when(\"LIST\", () => (ref.ofType ? `[${formatTypeRef(ref.ofType)}]` : \"[Unknown]\")),\n Match.option,\n Option.getOrElse(() => ref.name ?? \"Unknown\"),\n );\n\n// ---------------------------------------------------------------------------\n// Extract fields from schema\n// ---------------------------------------------------------------------------\n\nconst extractFields = (\n _schema: IntrospectionSchema,\n kind: GraphqlOperationKind,\n typeName: string | null | undefined,\n types: ReadonlyMap<string, IntrospectionType>,\n): ExtractedField[] => {\n if (!typeName) return [];\n\n const type = types.get(typeName);\n if (!type?.fields) return [];\n\n return type.fields\n .filter((f) => !f.name.startsWith(\"__\"))\n .map((field) => {\n const args = field.args.map((arg) =>\n GraphqlArgument.make({\n name: arg.name,\n typeName: formatTypeRef(arg.type),\n required: isNonNull(arg.type),\n description: arg.description ? Option.some(arg.description) : Option.none(),\n }),\n );\n\n const inputSchema = buildInputSchema(field.args, types);\n\n return ExtractedField.make({\n fieldName: field.name,\n kind,\n description: field.description ? Option.some(field.description) : Option.none(),\n arguments: args,\n inputSchema: inputSchema ? Option.some(inputSchema) : Option.none(),\n returnTypeName: unwrapTypeName(field.type),\n });\n });\n};\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\nexport interface ExtractionOutput {\n readonly result: ExtractionResult;\n /** Shared JSON Schema definitions for INPUT_OBJECT and ENUM types.\n * Tool input schemas use `$ref` pointers into these. */\n readonly definitions: Record<string, unknown>;\n}\n\nexport const extract = (\n introspection: IntrospectionResult,\n): Effect.Effect<ExtractionOutput, GraphqlExtractionError> =>\n Effect.try({\n try: () => {\n const schema = introspection.__schema;\n const typeMap = new Map<string, IntrospectionType>();\n for (const t of schema.types) {\n typeMap.set(t.name, t);\n }\n\n const definitions = buildDefinitions(typeMap);\n\n const queryFields = extractFields(schema, \"query\", schema.queryType?.name, typeMap);\n const mutationFields = extractFields(schema, \"mutation\", schema.mutationType?.name, typeMap);\n\n return {\n result: ExtractionResult.make({\n schemaName: Option.none(),\n fields: [...queryFields, ...mutationFields],\n }),\n definitions,\n };\n },\n catch: () =>\n new GraphqlExtractionError({\n message: \"Failed to extract GraphQL schema\",\n }),\n });\n","import { Effect, Layer, Option } from \"effect\";\nimport { HttpClient, HttpClientRequest } from \"effect/unstable/http\";\nimport { resolveSecretBackedMap } from \"@executor-js/sdk/core\";\n\nimport { GraphqlInvocationError } from \"./errors\";\nimport { type HeaderValue, type OperationBinding, InvocationResult } from \"./types\";\n\n// ---------------------------------------------------------------------------\n// Header resolution — resolves secret refs at invocation time\n// ---------------------------------------------------------------------------\n\nexport const resolveHeaders = (\n headers: Record<string, HeaderValue>,\n secrets: { readonly get: (id: string) => Effect.Effect<string | null, unknown> },\n): Effect.Effect<Record<string, string>> => {\n const entries = Object.entries(headers);\n const secretCount = entries.reduce(\n (acc, [, value]) => (typeof value === \"string\" ? acc : acc + 1),\n 0,\n );\n return resolveSecretBackedMap({\n values: headers,\n getSecret: (secretId) => secrets.get(secretId).pipe(Effect.catch(() => Effect.succeed(null))),\n missing: \"drop\",\n onMissing: (name) =>\n new GraphqlInvocationError({\n message: `Missing secret for header \"${name}\"`,\n statusCode: Option.none(),\n }),\n }).pipe(\n Effect.catch(() => Effect.succeed<Record<string, string> | undefined>(undefined)),\n Effect.map((resolved) => resolved ?? {}),\n Effect.withSpan(\"plugin.graphql.secret.resolve\", {\n attributes: {\n \"plugin.graphql.headers.total\": entries.length,\n \"plugin.graphql.headers.secret_count\": secretCount,\n },\n }),\n );\n};\n\nconst endpointWithQueryParams = (endpoint: string, queryParams: Record<string, string>): string => {\n if (Object.keys(queryParams).length === 0) return endpoint;\n const url = new URL(endpoint);\n for (const [name, value] of Object.entries(queryParams)) {\n url.searchParams.set(name, value);\n }\n return url.toString();\n};\n\nexport const endpointForTelemetry = (endpoint: string): string => {\n if (!URL.canParse(endpoint)) return endpoint;\n const url = new URL(endpoint);\n url.search = \"\";\n url.hash = \"\";\n return url.toString();\n};\n\n// ---------------------------------------------------------------------------\n// Response helpers\n// ---------------------------------------------------------------------------\n\nconst isJsonContentType = (ct: string | null | undefined): boolean => {\n if (!ct) return false;\n const normalized = ct.split(\";\")[0]?.trim().toLowerCase() ?? \"\";\n return (\n normalized === \"application/json\" || normalized.includes(\"+json\") || normalized.includes(\"json\")\n );\n};\n\n// ---------------------------------------------------------------------------\n// Public API — execute a GraphQL operation\n// ---------------------------------------------------------------------------\n\nexport const invoke = Effect.fn(\"GraphQL.invoke\")(function* (\n operation: OperationBinding,\n args: Record<string, unknown>,\n endpoint: string,\n resolvedHeaders: Record<string, string>,\n resolvedQueryParams: Record<string, string> = {},\n) {\n const client = yield* HttpClient.HttpClient;\n const requestEndpoint = endpointWithQueryParams(endpoint, resolvedQueryParams);\n const telemetryEndpoint = endpointForTelemetry(endpoint);\n\n yield* Effect.annotateCurrentSpan({\n \"http.method\": \"POST\",\n \"http.url\": telemetryEndpoint,\n \"plugin.graphql.endpoint\": telemetryEndpoint,\n \"plugin.graphql.operation_kind\": operation.kind,\n \"plugin.graphql.field_name\": operation.fieldName,\n \"plugin.graphql.headers.resolved_count\": Object.keys(resolvedHeaders).length,\n \"plugin.graphql.query_params.resolved_count\": Object.keys(resolvedQueryParams).length,\n });\n\n // Build the GraphQL request body\n const variables: Record<string, unknown> = {};\n for (const varName of operation.variableNames) {\n if (args[varName] !== undefined) {\n variables[varName] = args[varName];\n }\n }\n\n // Also pick up any variables from a \"variables\" container\n if (typeof args.variables === \"object\" && args.variables !== null) {\n Object.assign(variables, args.variables);\n }\n\n let request = HttpClientRequest.post(requestEndpoint).pipe(\n HttpClientRequest.setHeader(\"Content-Type\", \"application/json\"),\n HttpClientRequest.bodyJsonUnsafe({\n query: operation.operationString,\n variables: Object.keys(variables).length > 0 ? variables : undefined,\n }),\n );\n\n for (const [name, value] of Object.entries(resolvedHeaders)) {\n request = HttpClientRequest.setHeader(request, name, value);\n }\n\n const response = yield* client.execute(request).pipe(\n Effect.mapError(\n (err) =>\n new GraphqlInvocationError({\n message: \"GraphQL request failed\",\n statusCode: Option.none(),\n cause: err,\n }),\n ),\n );\n\n const status = response.status;\n const contentType = response.headers[\"content-type\"] ?? null;\n\n const body: unknown = isJsonContentType(contentType)\n ? yield* response.json.pipe(Effect.catch(() => response.text))\n : yield* response.text;\n\n // GraphQL responses are always 200 with { data, errors }\n const gqlBody = body as { data?: unknown; errors?: unknown[] } | null;\n const hasErrors = Array.isArray(gqlBody?.errors) && gqlBody.errors.length > 0;\n\n yield* Effect.annotateCurrentSpan({\n \"http.status_code\": status,\n \"plugin.graphql.has_errors\": hasErrors,\n \"plugin.graphql.error_count\": hasErrors ? gqlBody!.errors!.length : 0,\n });\n\n return InvocationResult.make({\n status,\n data: gqlBody?.data ?? null,\n errors: hasErrors ? gqlBody!.errors : null,\n });\n});\n\n// ---------------------------------------------------------------------------\n// Invoke a GraphQL operation with a provided HttpClient layer\n// ---------------------------------------------------------------------------\n\nexport const invokeWithLayer = (\n operation: OperationBinding,\n args: Record<string, unknown>,\n endpoint: string,\n resolvedHeaders: Record<string, string>,\n resolvedQueryParams: Record<string, string>,\n httpClientLayer: Layer.Layer<HttpClient.HttpClient>,\n) =>\n invoke(operation, args, endpoint, resolvedHeaders, resolvedQueryParams).pipe(\n Effect.provide(httpClientLayer),\n Effect.withSpan(\"plugin.graphql.invoke\", {\n attributes: {\n \"plugin.graphql.endpoint\": endpointForTelemetry(endpoint),\n \"plugin.graphql.operation_kind\": operation.kind,\n \"plugin.graphql.field_name\": operation.fieldName,\n },\n }),\n );\n","import { Effect, Option, Predicate, Schema } from \"effect\";\n\nimport {\n ConfiguredCredentialBinding,\n type FumaTables,\n type PluginStorageEntry,\n type StorageDeps,\n type StorageFailure,\n} from \"@executor-js/sdk/core\";\n\nimport {\n GraphqlSourceAuth,\n OperationBinding,\n type ConfiguredGraphqlCredentialValue,\n} from \"./types\";\n\nexport const graphqlSchema = {} satisfies FumaTables;\nexport type GraphqlSchema = typeof graphqlSchema;\n\nexport interface StoredGraphqlSource {\n readonly namespace: string;\n readonly scope: string;\n readonly name: string;\n readonly endpoint: string;\n readonly headers: Record<string, ConfiguredGraphqlCredentialValue>;\n readonly queryParams: Record<string, ConfiguredGraphqlCredentialValue>;\n readonly auth: GraphqlSourceAuth;\n}\n\nexport interface StoredOperation {\n readonly toolId: string;\n readonly sourceId: string;\n readonly binding: OperationBinding;\n}\n\nconst SOURCE_COLLECTION = \"source\";\nconst OPERATION_COLLECTION = \"operation\";\n\nconst OperationBindingFromJsonString = Schema.fromJsonString(OperationBinding);\nconst decodeOperationBindingFromJsonString = Schema.decodeUnknownSync(\n OperationBindingFromJsonString,\n);\nconst decodeOperationBinding = Schema.decodeUnknownSync(OperationBinding);\nconst encodeBinding = Schema.encodeSync(OperationBinding);\n\nconst decodeBinding = (value: unknown): OperationBinding => {\n if (typeof value === \"string\") return decodeOperationBindingFromJsonString(value);\n return decodeOperationBinding(value);\n};\n\nconst toJsonRecord = (value: unknown): Record<string, unknown> => value as Record<string, unknown>;\n\nconst OptionalNullableString = Schema.optional(Schema.NullOr(Schema.String));\nconst ConfiguredCredentialBindingStorage = Schema.Struct({\n kind: Schema.Literal(\"binding\"),\n slot: Schema.String,\n prefix: OptionalNullableString,\n});\nconst ConfiguredCredentialValueStorage = Schema.Union([\n Schema.String,\n ConfiguredCredentialBindingStorage,\n]);\nconst CredentialMapStorage = Schema.Record(Schema.String, ConfiguredCredentialValueStorage);\nconst SourceStorage = Schema.Struct({\n namespace: Schema.String,\n scope: Schema.String,\n name: Schema.String,\n endpoint: Schema.String,\n headers: Schema.optional(CredentialMapStorage),\n queryParams: Schema.optional(CredentialMapStorage),\n auth: GraphqlSourceAuth,\n});\nconst OperationStorage = Schema.Struct({\n toolId: Schema.String,\n sourceId: Schema.String,\n binding: Schema.Unknown,\n});\nconst decodeSourceStorage = Schema.decodeUnknownOption(SourceStorage);\nconst decodeOperationStorage = Schema.decodeUnknownOption(OperationStorage);\n\nconst normalizeCredentialMap = (\n values: Readonly<Record<string, typeof ConfiguredCredentialValueStorage.Type>> | undefined,\n): Record<string, ConfiguredGraphqlCredentialValue> => {\n if (!values) return {};\n const normalized: Record<string, ConfiguredGraphqlCredentialValue> = {};\n for (const [name, value] of Object.entries(values)) {\n if (typeof value === \"string\") {\n normalized[name] = value;\n continue;\n }\n normalized[name] =\n value.prefix != null\n ? ConfiguredCredentialBinding.make({\n kind: \"binding\",\n slot: value.slot,\n prefix: value.prefix,\n })\n : ConfiguredCredentialBinding.make({\n kind: \"binding\",\n slot: value.slot,\n });\n }\n return normalized;\n};\n\nconst sourceData = (source: StoredGraphqlSource) => ({\n namespace: source.namespace,\n scope: source.scope,\n name: source.name,\n endpoint: source.endpoint,\n headers: source.headers,\n queryParams: source.queryParams,\n auth: source.auth,\n});\n\nconst operationData = (operation: StoredOperation) => ({\n toolId: operation.toolId,\n sourceId: operation.sourceId,\n binding: toJsonRecord(encodeBinding(operation.binding)),\n});\n\nconst rowToSource = (row: PluginStorageEntry): StoredGraphqlSource | null => {\n const decoded = decodeSourceStorage(row.data);\n if (Option.isNone(decoded)) return null;\n const source = decoded.value;\n return {\n namespace: source.namespace,\n scope: source.scope,\n name: source.name,\n endpoint: source.endpoint,\n headers: normalizeCredentialMap(source.headers),\n queryParams: normalizeCredentialMap(source.queryParams),\n auth: source.auth,\n };\n};\n\nconst rowToOperation = (row: PluginStorageEntry): StoredOperation | null => {\n const decoded = decodeOperationStorage(row.data);\n if (Option.isNone(decoded)) return null;\n const operation = decoded.value;\n return {\n toolId: operation.toolId,\n sourceId: operation.sourceId,\n binding: decodeBinding(operation.binding),\n };\n};\n\nexport interface GraphqlStore {\n readonly upsertSource: (\n input: StoredGraphqlSource,\n operations: readonly StoredOperation[],\n ) => Effect.Effect<void, StorageFailure>;\n readonly updateSourceMeta: (\n namespace: string,\n scope: string,\n patch: {\n readonly name?: string;\n readonly endpoint?: string;\n readonly headers?: Record<string, ConfiguredGraphqlCredentialValue>;\n readonly queryParams?: Record<string, ConfiguredGraphqlCredentialValue>;\n readonly auth?: GraphqlSourceAuth;\n },\n ) => Effect.Effect<void, StorageFailure>;\n readonly getSource: (\n namespace: string,\n scope: string,\n ) => Effect.Effect<StoredGraphqlSource | null, StorageFailure>;\n readonly listSources: () => Effect.Effect<readonly StoredGraphqlSource[], StorageFailure>;\n readonly getOperationByToolId: (\n toolId: string,\n scope: string,\n ) => Effect.Effect<StoredOperation | null, StorageFailure>;\n readonly listOperationsBySource: (\n sourceId: string,\n scope: string,\n ) => Effect.Effect<readonly StoredOperation[], StorageFailure>;\n readonly removeSource: (namespace: string, scope: string) => Effect.Effect<void, StorageFailure>;\n}\n\nexport const makeDefaultGraphqlStore = ({\n pluginStorage,\n}: StorageDeps<GraphqlSchema>): GraphqlStore => {\n const listOperationRowsForSourceScope = (sourceId: string, scope: string) =>\n pluginStorage\n .list({\n collection: OPERATION_COLLECTION,\n keyPrefix: `${sourceId}.`,\n })\n .pipe(\n Effect.map((rows) =>\n rows.filter((row) => {\n if (String(row.scopeId) !== scope) return false;\n return rowToOperation(row)?.sourceId === sourceId;\n }),\n ),\n );\n\n const removeOperationsForSourceScope = (sourceId: string, scope: string) =>\n Effect.gen(function* () {\n const rows = yield* listOperationRowsForSourceScope(sourceId, scope);\n for (const row of rows) {\n yield* pluginStorage.remove({\n scope,\n collection: OPERATION_COLLECTION,\n key: row.key,\n });\n }\n });\n\n const deleteSource = (namespace: string, scope: string) =>\n Effect.gen(function* () {\n yield* removeOperationsForSourceScope(namespace, scope);\n yield* pluginStorage.remove({\n scope,\n collection: SOURCE_COLLECTION,\n key: namespace,\n });\n });\n\n return {\n upsertSource: (input, operations) =>\n Effect.gen(function* () {\n yield* deleteSource(input.namespace, input.scope);\n yield* pluginStorage.put({\n scope: input.scope,\n collection: SOURCE_COLLECTION,\n key: input.namespace,\n data: sourceData(input),\n });\n for (const operation of operations) {\n yield* pluginStorage.put({\n scope: input.scope,\n collection: OPERATION_COLLECTION,\n key: operation.toolId,\n data: operationData(operation),\n });\n }\n }),\n\n updateSourceMeta: (namespace, scope, patch) =>\n Effect.gen(function* () {\n const existing = yield* pluginStorage.getAtScope({\n scope,\n collection: SOURCE_COLLECTION,\n key: namespace,\n });\n if (!existing) return;\n const source = rowToSource(existing);\n if (!source) return;\n yield* pluginStorage.put({\n scope,\n collection: SOURCE_COLLECTION,\n key: namespace,\n data: sourceData({\n ...source,\n name: patch.name ?? source.name,\n endpoint: patch.endpoint ?? source.endpoint,\n headers: patch.headers ?? source.headers,\n queryParams: patch.queryParams ?? source.queryParams,\n auth: patch.auth ?? source.auth,\n }),\n });\n }),\n\n getSource: (namespace, scope) =>\n pluginStorage\n .getAtScope({ scope, collection: SOURCE_COLLECTION, key: namespace })\n .pipe(Effect.map((row) => (row ? rowToSource(row) : null))),\n\n listSources: () =>\n pluginStorage\n .list({ collection: SOURCE_COLLECTION })\n .pipe(Effect.map((rows) => rows.map(rowToSource).filter(Predicate.isNotNull))),\n\n getOperationByToolId: (toolId, scope) =>\n pluginStorage\n .getAtScope({ scope, collection: OPERATION_COLLECTION, key: toolId })\n .pipe(Effect.map((row) => (row ? rowToOperation(row) : null))),\n\n listOperationsBySource: (sourceId, scope) =>\n listOperationRowsForSourceScope(sourceId, scope).pipe(\n Effect.map((rows) => rows.map(rowToOperation).filter(Predicate.isNotNull)),\n ),\n\n removeSource: (namespace, scope) => deleteSource(namespace, scope),\n };\n};\n","import { Effect, Match, Option, Schema } from \"effect\";\nimport type { Layer } from \"effect\";\nimport { HttpClient } from \"effect/unstable/http\";\n\nimport {\n type CredentialBindingRef,\n type CredentialBindingValue,\n definePlugin,\n tool,\n defaultSourceInstallScopeId,\n ScopeId,\n SourceDetectionResult,\n StorageError,\n ToolResult,\n authToolFailure,\n type PluginCtx,\n type StorageFailure,\n type ToolAnnotations,\n type ToolRow,\n} from \"@executor-js/sdk/core\";\nimport {\n compileHttpNamedCredentialMap,\n OAuth2SourceConfig,\n httpCredentialInputToBindingValue,\n type HttpConfiguredValueInput,\n} from \"@executor-js/sdk/http-source\";\n\nimport {\n headersToConfigValues,\n type ConfigFileSink,\n type GraphqlSourceConfig as GraphqlConfigEntry,\n} from \"@executor-js/config\";\n\nimport {\n introspect,\n parseIntrospectionJson,\n type IntrospectionResult,\n type IntrospectionType,\n type IntrospectionField,\n type IntrospectionTypeRef,\n} from \"./introspect\";\nimport { extract } from \"./extract\";\nimport {\n GraphqlAuthRequiredError,\n GraphqlIntrospectionError,\n GraphqlInvocationError,\n} from \"./errors\";\nimport { invokeWithLayer } from \"./invoke\";\nimport { graphqlPresets } from \"./presets\";\nimport {\n graphqlSchema,\n makeDefaultGraphqlStore,\n type GraphqlStore,\n type StoredGraphqlSource,\n type StoredOperation,\n} from \"./store\";\nimport {\n ExtractedField,\n GraphqlConfiguredValueInput as GraphqlConfiguredValueInputSchema,\n GRAPHQL_OAUTH_CONNECTION_SLOT,\n GraphqlCredentialInput as GraphqlCredentialInputSchema,\n GraphqlSourceAuthInput as GraphqlSourceAuthInputSchema,\n graphqlHeaderSlot,\n graphqlQueryParamSlot,\n OperationBinding,\n type ConfiguredGraphqlCredentialValue,\n type GraphqlConfiguredValueInput,\n type GraphqlCredentialInput,\n type GraphqlSourceAuth,\n type HeaderValue as HeaderValueValue,\n type GraphqlSourceAuthInput,\n type GraphqlOperationKind,\n} from \"./types\";\n\n// ---------------------------------------------------------------------------\n// Plugin config\n// ---------------------------------------------------------------------------\n\nconst GraphqlErrorBody = Schema.Struct({ message: Schema.String });\nconst GraphqlErrorsBody = Schema.Array(Schema.Unknown);\nconst decodeGraphqlErrorBody = Schema.decodeUnknownOption(GraphqlErrorBody);\nconst decodeGraphqlErrorsBody = Schema.decodeUnknownOption(GraphqlErrorsBody);\n\nconst decodeGraphqlErrors = (errors: unknown): readonly unknown[] | undefined =>\n Option.getOrUndefined(decodeGraphqlErrorsBody(errors));\n\nconst extractGraphqlErrorMessage = (errors: readonly unknown[]): string | undefined =>\n errors\n .map((error) => Option.getOrUndefined(decodeGraphqlErrorBody(error))?.message)\n .find((message) => message !== undefined && message.length > 0);\n\nexport type HeaderValue = HeaderValueValue;\nexport type GraphqlCredentialValue = ConfiguredGraphqlCredentialValue;\n\nexport interface GraphqlSourceConfig {\n /** The GraphQL endpoint URL */\n readonly endpoint: string;\n /**\n * Executor scope id that owns this source row. Must be one of the\n * executor's configured scopes. Typical shape: an admin adds the\n * source at the outermost (organization) scope so it's visible to\n * every inner (per-user) scope via fall-through reads.\n */\n readonly scope: string;\n /** Display name for the source. */\n readonly name: string;\n /** Optional: introspection JSON text (if endpoint doesn't support introspection) */\n readonly introspectionJson?: string;\n /** Namespace for the tools. */\n readonly namespace: string;\n /** Headers applied to every request. Secret entries declare source-owned slots. */\n readonly headers?: Record<string, GraphqlConfiguredValueInput>;\n /** Query parameters applied to every request. Secret entries declare source-owned slots. */\n readonly queryParams?: Record<string, GraphqlConfiguredValueInput>;\n /** Optional OAuth2 credential used as a Bearer token for every request. */\n readonly oauth2?: OAuth2SourceConfig;\n /** Initial credential bindings used while adding and introspecting this source. */\n readonly credentials?: GraphqlInitialCredentialsInput;\n}\n\nconst GraphqlInitialCredentialsInputSchema = Schema.Struct({\n scope: Schema.String,\n headers: Schema.optional(Schema.Record(Schema.String, GraphqlCredentialInputSchema)),\n queryParams: Schema.optional(Schema.Record(Schema.String, GraphqlCredentialInputSchema)),\n auth: Schema.optional(GraphqlSourceAuthInputSchema),\n});\ntype GraphqlInitialCredentialsInput = typeof GraphqlInitialCredentialsInputSchema.Type;\n\nconst StaticAddSourceInputSchema = Schema.Struct({\n endpoint: Schema.String,\n name: Schema.String,\n introspectionJson: Schema.optional(Schema.String),\n namespace: Schema.String,\n headers: Schema.optional(Schema.Record(Schema.String, GraphqlConfiguredValueInputSchema)),\n queryParams: Schema.optional(Schema.Record(Schema.String, GraphqlConfiguredValueInputSchema)),\n oauth2: Schema.optional(OAuth2SourceConfig),\n credentials: Schema.optional(GraphqlInitialCredentialsInputSchema),\n});\nconst SourceConfigureInputSchema = Schema.Struct({\n name: Schema.optional(Schema.String),\n endpoint: Schema.optional(Schema.String),\n headers: Schema.optional(Schema.Record(Schema.String, GraphqlCredentialInputSchema)),\n queryParams: Schema.optional(Schema.Record(Schema.String, GraphqlCredentialInputSchema)),\n auth: Schema.optional(GraphqlSourceAuthInputSchema),\n});\nconst StaticConfigureSourceInputSchema = Schema.Struct({\n source: Schema.Struct({\n id: Schema.String,\n scope: Schema.String,\n }),\n scope: Schema.String,\n ...SourceConfigureInputSchema.fields,\n});\nconst StaticConfigureSourceOutputSchema = Schema.Struct({\n configured: Schema.Boolean,\n});\nconst StaticGetSourceInputSchema = Schema.Struct({\n namespace: Schema.String,\n scope: Schema.String,\n});\nconst StaticGetSourceOutputSchema = Schema.Struct({\n source: Schema.NullOr(Schema.Unknown),\n});\n\nconst StaticAddSourceInputStandardSchema = Schema.toStandardSchemaV1(\n Schema.toStandardJSONSchemaV1(StaticAddSourceInputSchema),\n);\nconst StaticAddSourceOutputStandardSchema = Schema.toStandardSchemaV1(\n Schema.toStandardJSONSchemaV1(\n Schema.Struct({\n namespace: Schema.String,\n source: Schema.Struct({\n id: Schema.String,\n scope: Schema.String,\n }),\n toolCount: Schema.Number,\n }),\n ),\n);\nconst StaticGetSourceInputStandardSchema = Schema.toStandardSchemaV1(\n Schema.toStandardJSONSchemaV1(StaticGetSourceInputSchema),\n);\nconst StaticGetSourceOutputStandardSchema = Schema.toStandardSchemaV1(\n Schema.toStandardJSONSchemaV1(StaticGetSourceOutputSchema),\n);\nconst StaticConfigureSourceInputStandardSchema = Schema.toStandardSchemaV1(\n Schema.toStandardJSONSchemaV1(StaticConfigureSourceInputSchema),\n);\nconst StaticConfigureSourceOutputStandardSchema = Schema.toStandardSchemaV1(\n Schema.toStandardJSONSchemaV1(StaticConfigureSourceOutputSchema),\n);\n\nconst graphqlToolFailure = (code: string, message: string, details?: unknown) =>\n ToolResult.fail({\n code,\n message,\n ...(details === undefined ? {} : { details }),\n });\n\nconst graphqlAuthToolFailure = (failure: GraphqlAuthRequiredError) =>\n authToolFailure({\n code: failure.code,\n message: failure.message,\n source: { id: failure.sourceId, scope: failure.sourceScope },\n credential: {\n kind: failure.credentialKind,\n ...(failure.credentialLabel ? { label: failure.credentialLabel } : {}),\n ...(failure.slotKey ? { slotKey: failure.slotKey } : {}),\n ...(failure.secretId ? { secretId: failure.secretId } : {}),\n ...(failure.connectionId ? { connectionId: failure.connectionId } : {}),\n },\n ...(failure.status !== undefined ? { status: failure.status } : {}),\n ...(failure.details !== undefined\n ? {\n upstream: {\n ...(failure.status !== undefined ? { status: failure.status } : {}),\n details: failure.details,\n },\n }\n : {}),\n recovery: { configureSourceTool: \"executor.graphql.configureSource\" },\n });\n\nconst resolveStaticScopeInput = (\n ctx: { readonly scopes: readonly { readonly id: ScopeId; readonly name: string }[] },\n value: string,\n): string =>\n String(\n ctx.scopes.find((scope) => scope.name === value || String(scope.id) === value)?.id ?? value,\n );\n\n// ---------------------------------------------------------------------------\n// Plugin extension\n// ---------------------------------------------------------------------------\n\nexport interface GraphqlSourceRef {\n readonly id: string;\n readonly scope: string;\n}\n\nexport interface GraphqlConfigureSourceInput {\n readonly scope: string;\n readonly name?: string;\n readonly endpoint?: string;\n readonly headers?: Record<string, GraphqlCredentialInput>;\n readonly queryParams?: Record<string, GraphqlCredentialInput>;\n readonly auth?: GraphqlSourceAuthInput;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Match `token` as a separator-bounded run inside a URL hostname or path,\n * used as a low-confidence detection hint when introspection fails.\n * Boundary chars are everything non-alphanumeric, so `/api/graphql`,\n * `graphql.example.com`, `graphql-api`, and `graphql_v2` all match while\n * `graphqlserver` and `/graphqlite` do not. */\nconst urlMatchesToken = (url: URL, token: string): boolean => {\n const re = new RegExp(`(?:^|[^a-z0-9])${token}(?:$|[^a-z0-9])`, \"i\");\n return re.test(url.hostname) || re.test(url.pathname);\n};\n\n/** Derive a namespace from an endpoint URL */\nconst namespaceFromEndpoint = (endpoint: string): string => {\n // oxlint-disable-next-line executor/no-try-catch-or-throw -- boundary: URL construction throws; this helper intentionally falls back to the stable default namespace\n try {\n const url = new URL(endpoint);\n return url.hostname.replace(/[^a-z0-9]+/gi, \"_\").toLowerCase();\n } catch {\n return \"graphql\";\n }\n};\n\nconst formatTypeRef = (ref: IntrospectionTypeRef): string =>\n Match.value(ref.kind).pipe(\n Match.when(\"NON_NULL\", () => (ref.ofType ? `${formatTypeRef(ref.ofType)}!` : \"Unknown!\")),\n Match.when(\"LIST\", () => (ref.ofType ? `[${formatTypeRef(ref.ofType)}]` : \"[Unknown]\")),\n Match.option,\n Option.getOrElse(() => ref.name ?? \"Unknown\"),\n );\n\nconst unwrapTypeName = (ref: IntrospectionTypeRef): string => {\n if (ref.name) return ref.name;\n if (ref.ofType) return unwrapTypeName(ref.ofType);\n return \"Unknown\";\n};\n\nconst buildSelectionSet = (\n ref: IntrospectionTypeRef,\n types: ReadonlyMap<string, IntrospectionType>,\n depth: number,\n seen: Set<string>,\n): string => {\n if (depth > 2) return \"\";\n\n const leafName = unwrapTypeName(ref);\n if (seen.has(leafName)) return \"\";\n\n const objectType = types.get(leafName);\n if (!objectType?.fields) return \"\";\n\n const kind = objectType.kind;\n if (kind === \"SCALAR\" || kind === \"ENUM\") return \"\";\n\n seen.add(leafName);\n\n const subFields = objectType.fields\n .filter((f) => !f.name.startsWith(\"__\"))\n .slice(0, 12)\n .map((f) => {\n const sub = buildSelectionSet(f.type, types, depth + 1, seen);\n return sub ? `${f.name} ${sub}` : f.name;\n });\n\n seen.delete(leafName);\n\n return subFields.length > 0 ? `{ ${subFields.join(\" \")} }` : \"\";\n};\n\nconst buildOperationStringForField = (\n kind: GraphqlOperationKind,\n field: IntrospectionField,\n types: ReadonlyMap<string, IntrospectionType>,\n): string => {\n const opType = kind === \"query\" ? \"query\" : \"mutation\";\n\n const varDefs = field.args.map((arg) => {\n const typeName = formatTypeRef(arg.type);\n return `$${arg.name}: ${typeName}`;\n });\n\n const argPasses = field.args.map((arg) => `${arg.name}: $${arg.name}`);\n const selectionSet = buildSelectionSet(field.type, types, 0, new Set());\n\n const varDefsStr = varDefs.length > 0 ? `(${varDefs.join(\", \")})` : \"\";\n const argPassStr = argPasses.length > 0 ? `(${argPasses.join(\", \")})` : \"\";\n\n return `${opType}${varDefsStr} { ${field.name}${argPassStr}${selectionSet ? ` ${selectionSet}` : \"\"} }`;\n};\n\ninterface PreparedOperation {\n readonly toolPath: string;\n readonly description: string;\n readonly inputSchema: unknown;\n readonly binding: OperationBinding;\n}\n\nconst prepareOperations = (\n fields: readonly ExtractedField[],\n introspection: IntrospectionResult,\n): readonly PreparedOperation[] => {\n const typeMap = new Map<string, IntrospectionType>();\n for (const t of introspection.__schema.types) {\n typeMap.set(t.name, t);\n }\n\n const fieldMap = new Map<string, { kind: GraphqlOperationKind; field: IntrospectionField }>();\n const schema = introspection.__schema;\n for (const rootKind of [\"query\", \"mutation\"] as const) {\n const typeName = rootKind === \"query\" ? schema.queryType?.name : schema.mutationType?.name;\n if (!typeName) continue;\n const rootType = typeMap.get(typeName);\n if (!rootType?.fields) continue;\n for (const f of rootType.fields) {\n if (!f.name.startsWith(\"__\")) {\n fieldMap.set(`${rootKind}.${f.name}`, { kind: rootKind, field: f });\n }\n }\n }\n\n return fields.map((extracted) => {\n const prefix = extracted.kind === \"mutation\" ? \"mutation\" : \"query\";\n const toolPath = `${prefix}.${extracted.fieldName}`;\n const description = Option.getOrElse(\n extracted.description,\n () => `GraphQL ${extracted.kind}: ${extracted.fieldName} -> ${extracted.returnTypeName}`,\n );\n\n const key = `${extracted.kind}.${extracted.fieldName}`;\n const entry = fieldMap.get(key);\n const operationString = entry\n ? buildOperationStringForField(entry.kind, entry.field, typeMap)\n : `${extracted.kind} { ${extracted.fieldName} }`;\n\n const binding = OperationBinding.make({\n kind: extracted.kind,\n fieldName: extracted.fieldName,\n operationString,\n variableNames: extracted.arguments.map((a) => a.name),\n });\n\n return {\n toolPath,\n description,\n inputSchema: Option.getOrUndefined(extracted.inputSchema),\n binding,\n };\n });\n};\n\nconst annotationsFor = (binding: OperationBinding): ToolAnnotations => {\n if (binding.kind === \"mutation\") {\n return {\n requiresApproval: true,\n approvalDescription: `mutation ${binding.fieldName}`,\n };\n }\n return {};\n};\n\n// ---------------------------------------------------------------------------\n// Plugin factory\n// ---------------------------------------------------------------------------\n\nexport interface GraphqlPluginOptions {\n readonly httpClientLayer?: Layer.Layer<HttpClient.HttpClient>;\n /** If provided, source add/remove is mirrored to executor.jsonc\n * (best-effort — file errors are logged, not raised). */\n readonly configFile?: ConfigFileSink;\n}\n\nconst toGraphqlConfigEntry = (\n namespace: string,\n config: GraphqlSourceConfig,\n): GraphqlConfigEntry => {\n const headers: Record<string, HeaderValue> = {};\n for (const [name, value] of Object.entries(config.headers ?? {})) {\n if (typeof value === \"string\" || !(\"kind\" in value)) {\n headers[name] = value;\n }\n }\n return {\n kind: \"graphql\",\n endpoint: config.endpoint,\n introspectionJson: config.introspectionJson,\n namespace,\n headers: headersToConfigValues(Object.keys(headers).length > 0 ? headers : undefined),\n };\n};\n\nconst GRAPHQL_PLUGIN_ID = \"graphql\";\n\nconst scopeRanks = (ctx: PluginCtx<GraphqlStore>): ReadonlyMap<string, number> =>\n new Map(ctx.scopes.map((scope, index) => [String(scope.id), index]));\n\nconst scopeRank = (ranks: ReadonlyMap<string, number>, scopeId: string): number =>\n ranks.get(scopeId) ?? Infinity;\n\nconst resolveGraphqlSourceBinding = (\n ctx: PluginCtx<GraphqlStore>,\n sourceId: string,\n sourceScope: string,\n slot: string,\n): Effect.Effect<CredentialBindingRef | null, StorageFailure> =>\n Effect.gen(function* () {\n const ranks = scopeRanks(ctx);\n const sourceSourceRank = scopeRank(ranks, sourceScope);\n if (sourceSourceRank === Infinity) return null;\n const bindings = yield* ctx.credentialBindings.listForSource({\n pluginId: GRAPHQL_PLUGIN_ID,\n sourceId,\n sourceScope: ScopeId.make(sourceScope),\n });\n const binding = bindings\n .filter(\n (candidate) =>\n candidate.slotKey === slot && scopeRank(ranks, candidate.scopeId) <= sourceSourceRank,\n )\n .sort((a, b) => scopeRank(ranks, a.scopeId) - scopeRank(ranks, b.scopeId))[0];\n return binding ?? null;\n });\n\nconst validateGraphqlBindingTarget = (\n ctx: PluginCtx<GraphqlStore>,\n input: {\n readonly sourceScope: string;\n readonly targetScope: string;\n readonly sourceId: string;\n },\n): Effect.Effect<void, StorageFailure> =>\n Effect.gen(function* () {\n const ranks = scopeRanks(ctx);\n const sourceSourceRank = scopeRank(ranks, input.sourceScope);\n const targetRank = scopeRank(ranks, input.targetScope);\n const scopeList = `[${ctx.scopes.map((s) => s.id).join(\", \")}]`;\n if (sourceSourceRank === Infinity) {\n return yield* new StorageError({\n message:\n `GraphQL source binding references source scope \"${input.sourceScope}\" ` +\n `which is not in the executor's scope stack ${scopeList}.`,\n cause: undefined,\n });\n }\n if (targetRank === Infinity) {\n return yield* new StorageError({\n message:\n `GraphQL source binding targets scope \"${input.targetScope}\" which is not ` +\n `in the executor's scope stack ${scopeList}.`,\n cause: undefined,\n });\n }\n if (targetRank > sourceSourceRank) {\n return yield* new StorageError({\n message:\n `GraphQL source bindings for \"${input.sourceId}\" cannot be written at ` +\n `outer scope \"${input.targetScope}\" because the base source lives at ` +\n `\"${input.sourceScope}\"`,\n cause: undefined,\n });\n }\n });\n\nconst canonicalizeCredentialMap = compileHttpNamedCredentialMap;\n\nconst canonicalizeConfiguredValueMap = (\n values: Record<string, GraphqlConfiguredValueInput> | undefined,\n slotForName: (name: string) => string,\n): Record<string, ConfiguredGraphqlCredentialValue> => {\n const next: Record<string, ConfiguredGraphqlCredentialValue> = {};\n for (const [name, value] of Object.entries(values ?? {})) {\n if (typeof value === \"string\") {\n next[name] = value;\n continue;\n }\n next[name] = {\n kind: \"binding\",\n slot: slotForName(name),\n prefix: value.prefix,\n };\n }\n return next;\n};\n\nconst resolveConfiguredValueMap = (\n values: Record<string, HttpConfiguredValueInput> | undefined,\n): Record<string, string> | undefined => {\n if (!values) return undefined;\n const resolved: Record<string, string> = {};\n for (const [name, value] of Object.entries(values)) {\n if (typeof value === \"string\") resolved[name] = value;\n }\n return Object.keys(resolved).length > 0 ? resolved : undefined;\n};\n\nconst authFromOAuth2Source = (oauth2: OAuth2SourceConfig | undefined): GraphqlSourceAuth =>\n oauth2 ? { kind: \"oauth2\", connectionSlot: oauth2.connectionSlot } : { kind: \"none\" };\n\nconst canonicalizeAuth = (\n auth: GraphqlSourceAuthInput | undefined,\n): {\n readonly auth: GraphqlSourceAuth;\n readonly bindings: ReadonlyArray<{\n readonly slot: string;\n readonly value: CredentialBindingValue;\n readonly targetScope?: string;\n }>;\n} => {\n if (!auth || \"kind\" in auth || !auth.oauth2) return { auth: { kind: \"none\" }, bindings: [] };\n const connection = auth.oauth2.connection;\n return {\n auth: { kind: \"oauth2\", connectionSlot: GRAPHQL_OAUTH_CONNECTION_SLOT },\n bindings: connection\n ? [\n {\n slot: GRAPHQL_OAUTH_CONNECTION_SLOT,\n value: httpCredentialInputToBindingValue(connection),\n },\n ]\n : [],\n };\n};\n\nconst resolveInitialCredentialValueMap = (\n ctx: PluginCtx<GraphqlStore>,\n values: Record<string, ConfiguredGraphqlCredentialValue>,\n bindings: ReadonlyArray<{ readonly slot: string; readonly value: CredentialBindingValue }>,\n targetScope: string,\n): Effect.Effect<Record<string, string> | undefined, GraphqlIntrospectionError | StorageFailure> =>\n Effect.gen(function* () {\n const bySlot = new Map(bindings.map((binding) => [binding.slot, binding.value] as const));\n const resolved: Record<string, string> = {};\n for (const [name, value] of Object.entries(values)) {\n if (typeof value === \"string\") {\n resolved[name] = value;\n continue;\n }\n const binding = bySlot.get(value.slot);\n if (binding?.kind === \"secret\") {\n const secret = yield* ctx.secrets\n .getAtScope(binding.secretId, binding.secretScopeId ?? ScopeId.make(targetScope))\n .pipe(\n Effect.catchTag(\"SecretOwnedByConnectionError\", () =>\n Effect.fail(\n new GraphqlIntrospectionError({\n message: `Secret not found for ${name}`,\n }),\n ),\n ),\n );\n if (secret === null) {\n return yield* new GraphqlIntrospectionError({\n message: `Missing secret \"${binding.secretId}\" for ${name}`,\n });\n }\n resolved[name] = value.prefix ? `${value.prefix}${secret}` : secret;\n continue;\n }\n if (binding?.kind === \"text\") {\n resolved[name] = value.prefix ? `${value.prefix}${binding.text}` : binding.text;\n }\n }\n return Object.keys(resolved).length > 0 ? resolved : undefined;\n });\n\nconst resolveInitialOAuthHeaders = (\n ctx: PluginCtx<GraphqlStore>,\n bindings: ReadonlyArray<{ readonly slot: string; readonly value: CredentialBindingValue }>,\n targetScope: string,\n): Effect.Effect<Record<string, string> | undefined, GraphqlIntrospectionError | StorageFailure> =>\n Effect.gen(function* () {\n const connection = bindings.find(\n (binding) =>\n binding.slot === GRAPHQL_OAUTH_CONNECTION_SLOT && binding.value.kind === \"connection\",\n );\n if (!connection || connection.value.kind !== \"connection\") return undefined;\n const connectionId = connection.value.connectionId;\n const accessToken = yield* ctx.connections\n .accessTokenAtScope(connectionId, ScopeId.make(targetScope))\n .pipe(\n Effect.mapError(\n ({ message }) =>\n new GraphqlIntrospectionError({\n message: `Failed to resolve OAuth connection \"${connectionId}\": ${message}`,\n }),\n ),\n );\n return { Authorization: `Bearer ${accessToken}` };\n });\n\nconst resolveGraphqlBindingValueMap = (\n ctx: PluginCtx<GraphqlStore>,\n values: Record<string, ConfiguredGraphqlCredentialValue> | undefined,\n params: {\n readonly sourceId: string;\n readonly sourceScope: string;\n readonly missingLabel: string;\n },\n): Effect.Effect<Record<string, string> | undefined, GraphqlAuthRequiredError | StorageFailure> =>\n Effect.gen(function* () {\n if (!values) return undefined;\n const resolved: Record<string, string> = {};\n for (const [name, value] of Object.entries(values)) {\n if (typeof value === \"string\") {\n resolved[name] = value;\n continue;\n }\n const binding = yield* resolveGraphqlSourceBinding(\n ctx,\n params.sourceId,\n params.sourceScope,\n value.slot,\n );\n if (binding?.value.kind === \"secret\") {\n const secretBinding = binding.value;\n const secret = yield* ctx.secrets.getAtScope(secretBinding.secretId, binding.scopeId).pipe(\n Effect.catchTag(\"SecretOwnedByConnectionError\", () =>\n Effect.fail(\n new GraphqlAuthRequiredError({\n code: \"credential_secret_missing\",\n sourceId: params.sourceId,\n sourceScope: params.sourceScope,\n credentialKind: \"secret\",\n credentialLabel: name,\n slotKey: value.slot,\n secretId: String(secretBinding.secretId),\n message: `Secret not found for ${params.missingLabel} \"${name}\"`,\n }),\n ),\n ),\n );\n if (secret === null) {\n return yield* new GraphqlAuthRequiredError({\n code: \"credential_secret_missing\",\n sourceId: params.sourceId,\n sourceScope: params.sourceScope,\n credentialKind: \"secret\",\n credentialLabel: name,\n slotKey: value.slot,\n secretId: String(secretBinding.secretId),\n message: `Missing secret \"${secretBinding.secretId}\" for ${params.missingLabel} \"${name}\"`,\n });\n }\n resolved[name] = value.prefix ? `${value.prefix}${secret}` : secret;\n continue;\n }\n if (binding?.value.kind === \"text\") {\n resolved[name] = value.prefix ? `${value.prefix}${binding.value.text}` : binding.value.text;\n continue;\n }\n return yield* new GraphqlAuthRequiredError({\n code: \"credential_binding_missing\",\n sourceId: params.sourceId,\n sourceScope: params.sourceScope,\n credentialKind: \"secret\",\n credentialLabel: name,\n slotKey: value.slot,\n message: `Missing binding for ${params.missingLabel} \"${name}\"`,\n });\n }\n return Object.keys(resolved).length > 0 ? resolved : undefined;\n });\n\nconst resolveGraphqlStoredOAuthHeader = (\n ctx: PluginCtx<GraphqlStore>,\n sourceId: string,\n sourceScope: string,\n auth: GraphqlSourceAuth | undefined,\n) =>\n Effect.gen(function* () {\n if (!auth || auth.kind === \"none\") return undefined;\n const binding = yield* resolveGraphqlSourceBinding(\n ctx,\n sourceId,\n sourceScope,\n auth.connectionSlot,\n );\n if (binding?.value.kind !== \"connection\") {\n return yield* new GraphqlAuthRequiredError({\n code: \"oauth_connection_missing\",\n sourceId,\n sourceScope,\n credentialKind: \"connection\",\n credentialLabel: \"OAuth sign-in\",\n slotKey: auth.connectionSlot,\n message: `Missing OAuth connection binding for GraphQL source \"${sourceId}\"`,\n });\n }\n const connectionId = binding.value.connectionId;\n const accessToken = yield* ctx.connections\n .accessTokenAtScope(connectionId, binding.scopeId)\n .pipe(\n Effect.catchTags({\n ConnectionReauthRequiredError: ({ message, connectionId }) =>\n Effect.fail(\n new GraphqlAuthRequiredError({\n code: \"oauth_reauth_required\",\n sourceId,\n sourceScope,\n credentialKind: \"oauth\",\n credentialLabel: \"OAuth sign-in\",\n slotKey: auth.connectionSlot,\n connectionId: String(connectionId),\n message: `OAuth connection \"${connectionId}\" needs re-authentication: ${message}`,\n }),\n ),\n ConnectionNotFoundError: ({ connectionId }) =>\n Effect.fail(\n new GraphqlAuthRequiredError({\n code: \"oauth_connection_missing\",\n sourceId,\n sourceScope,\n credentialKind: \"connection\",\n credentialLabel: \"OAuth sign-in\",\n slotKey: auth.connectionSlot,\n connectionId: String(connectionId),\n message: `OAuth connection \"${connectionId}\" was not found for GraphQL source \"${sourceId}\"`,\n }),\n ),\n ConnectionProviderNotRegisteredError: ({ provider }) =>\n Effect.fail(\n new GraphqlAuthRequiredError({\n code: \"oauth_connection_failed\",\n sourceId,\n sourceScope,\n credentialKind: \"oauth\",\n credentialLabel: \"OAuth sign-in\",\n slotKey: auth.connectionSlot,\n connectionId: String(connectionId),\n message: `OAuth provider \"${provider}\" is not registered`,\n }),\n ),\n ConnectionRefreshNotSupportedError: ({ provider, connectionId }) =>\n Effect.fail(\n new GraphqlAuthRequiredError({\n code: \"oauth_connection_failed\",\n sourceId,\n sourceScope,\n credentialKind: \"oauth\",\n credentialLabel: \"OAuth sign-in\",\n slotKey: auth.connectionSlot,\n connectionId: String(connectionId),\n message: `OAuth provider \"${provider}\" cannot refresh connection \"${connectionId}\"`,\n }),\n ),\n ConnectionRefreshError: ({ message, connectionId }) =>\n Effect.fail(\n new GraphqlAuthRequiredError({\n code: \"oauth_connection_failed\",\n sourceId,\n sourceScope,\n credentialKind: \"oauth\",\n credentialLabel: \"OAuth sign-in\",\n slotKey: auth.connectionSlot,\n connectionId: String(connectionId),\n message: `OAuth connection \"${connectionId}\" refresh failed: ${message}`,\n }),\n ),\n }),\n );\n return { Authorization: `Bearer ${accessToken}` };\n });\n\nconst makeGraphqlExtension = (\n ctx: PluginCtx<GraphqlStore>,\n httpClientLayer: Layer.Layer<HttpClient.HttpClient>,\n configFile: ConfigFileSink | undefined,\n) => {\n const addSourceInternal = (config: GraphqlSourceConfig) =>\n ctx.transaction(\n Effect.gen(function* () {\n const namespace = config.namespace;\n const canonicalHeaders = canonicalizeConfiguredValueMap(config.headers, graphqlHeaderSlot);\n const canonicalQueryParams = canonicalizeConfiguredValueMap(\n config.queryParams,\n graphqlQueryParamSlot,\n );\n const initialHeaders =\n config.credentials?.headers !== undefined\n ? canonicalizeCredentialMap(config.credentials.headers, graphqlHeaderSlot)\n : null;\n const initialQueryParams =\n config.credentials?.queryParams !== undefined\n ? canonicalizeCredentialMap(config.credentials.queryParams, graphqlQueryParamSlot)\n : null;\n const initialAuth =\n config.credentials?.auth !== undefined ? canonicalizeAuth(config.credentials.auth) : null;\n const auth = config.oauth2\n ? authFromOAuth2Source(config.oauth2)\n : (initialAuth?.auth ?? { kind: \"none\" });\n const initialBindings = [\n ...(initialHeaders?.bindings ?? []),\n ...(initialQueryParams?.bindings ?? []),\n ...(initialAuth?.bindings ?? []),\n ];\n const initialScope = config.credentials?.scope;\n if (initialScope && initialBindings.length > 0) {\n yield* validateGraphqlBindingTarget(ctx, {\n sourceId: namespace,\n sourceScope: config.scope,\n targetScope: initialScope,\n });\n }\n\n let introspectionResult: IntrospectionResult;\n if (config.introspectionJson) {\n introspectionResult = yield* parseIntrospectionJson(config.introspectionJson);\n } else {\n const resolvedInitialHeaders =\n initialHeaders && initialScope\n ? yield* resolveInitialCredentialValueMap(\n ctx,\n canonicalHeaders,\n initialHeaders.bindings,\n initialScope,\n )\n : undefined;\n const resolvedOAuthHeaders =\n initialAuth && initialScope\n ? yield* resolveInitialOAuthHeaders(ctx, initialAuth.bindings, initialScope)\n : undefined;\n const resolvedHeaders = {\n ...(resolveConfiguredValueMap(config.headers) ?? {}),\n ...(resolvedInitialHeaders ?? {}),\n ...(resolvedOAuthHeaders ?? {}),\n };\n const resolvedInitialQueryParams =\n initialQueryParams && initialScope\n ? yield* resolveInitialCredentialValueMap(\n ctx,\n canonicalQueryParams,\n initialQueryParams.bindings,\n initialScope,\n )\n : undefined;\n const resolvedQueryParams = {\n ...(resolveConfiguredValueMap(config.queryParams) ?? {}),\n ...(resolvedInitialQueryParams ?? {}),\n };\n introspectionResult = yield* introspect(\n config.endpoint,\n Object.keys(resolvedHeaders).length > 0 ? resolvedHeaders : undefined,\n Object.keys(resolvedQueryParams).length > 0 ? resolvedQueryParams : undefined,\n ).pipe(Effect.provide(httpClientLayer));\n }\n\n const { result, definitions } = yield* extract(introspectionResult);\n const prepared = prepareOperations(result.fields, introspectionResult);\n\n const displayName = config.name?.trim() || namespace;\n\n const storedSource: StoredGraphqlSource = {\n namespace,\n scope: config.scope,\n name: displayName,\n endpoint: config.endpoint,\n headers: canonicalHeaders,\n queryParams: canonicalQueryParams,\n auth,\n };\n\n const storedOps: StoredOperation[] = prepared.map((p) => ({\n toolId: `${namespace}.${p.toolPath}`,\n sourceId: namespace,\n binding: p.binding,\n }));\n\n yield* ctx.storage.upsertSource(storedSource, storedOps);\n yield* ctx.core.sources.register({\n id: namespace,\n scope: config.scope,\n kind: \"graphql\",\n name: displayName,\n url: config.endpoint,\n canRemove: true,\n canRefresh: false,\n canEdit: true,\n tools: prepared.map((p) => ({\n name: p.toolPath,\n description: p.description,\n inputSchema: p.inputSchema,\n })),\n });\n if (initialScope && initialBindings.length > 0) {\n yield* ctx.credentialBindings.replaceForSource({\n targetScope: ScopeId.make(initialScope),\n pluginId: GRAPHQL_PLUGIN_ID,\n sourceId: namespace,\n sourceScope: ScopeId.make(config.scope),\n slotPrefixes: [\n ...(config.credentials?.headers !== undefined ? [\"header:\"] : []),\n ...(config.credentials?.queryParams !== undefined ? [\"query_param:\"] : []),\n ...(config.credentials?.auth !== undefined ? [\"auth:\"] : []),\n ],\n bindings: initialBindings.map((binding) => ({\n slotKey: binding.slot,\n value: binding.value,\n })),\n });\n }\n\n if (Object.keys(definitions).length > 0) {\n yield* ctx.core.definitions.register({\n sourceId: namespace,\n scope: config.scope,\n definitions,\n });\n }\n\n return { toolCount: prepared.length, namespace };\n }),\n );\n\n const configureSource = (\n namespace: string,\n scope: string,\n targetScope: string,\n input: Omit<GraphqlConfigureSourceInput, \"scope\">,\n ) =>\n Effect.gen(function* () {\n const existing = yield* ctx.storage.getSource(namespace, scope);\n if (!existing) return;\n const canonicalHeaders =\n input.headers !== undefined\n ? canonicalizeCredentialMap(input.headers, graphqlHeaderSlot)\n : null;\n const canonicalQueryParams =\n input.queryParams !== undefined\n ? canonicalizeCredentialMap(input.queryParams, graphqlQueryParamSlot)\n : null;\n const canonicalAuth = input.auth !== undefined ? canonicalizeAuth(input.auth) : null;\n const directBindings = [\n ...(canonicalHeaders?.bindings ?? []),\n ...(canonicalQueryParams?.bindings ?? []),\n ...(canonicalAuth?.bindings ?? []),\n ];\n if (directBindings.length > 0) {\n yield* validateGraphqlBindingTarget(ctx, {\n sourceId: namespace,\n sourceScope: scope,\n targetScope,\n });\n }\n const affectedPrefixes = [\n ...(input.headers !== undefined ? [\"header:\"] : []),\n ...(input.queryParams !== undefined ? [\"query_param:\"] : []),\n ...(input.auth !== undefined ? [\"auth:\"] : []),\n ];\n yield* ctx.transaction(\n Effect.gen(function* () {\n yield* ctx.storage.updateSourceMeta(namespace, scope, {\n name: input.name?.trim() || undefined,\n endpoint: input.endpoint,\n headers: canonicalHeaders?.values,\n queryParams: canonicalQueryParams?.values,\n auth: canonicalAuth?.auth,\n });\n if (affectedPrefixes.length > 0 || directBindings.length > 0) {\n yield* ctx.credentialBindings.replaceForSource({\n targetScope: ScopeId.make(targetScope),\n pluginId: GRAPHQL_PLUGIN_ID,\n sourceId: namespace,\n sourceScope: ScopeId.make(scope),\n slotPrefixes: affectedPrefixes,\n bindings: directBindings.map((binding) => ({\n slotKey: binding.slot,\n value: binding.value,\n })),\n });\n }\n }),\n );\n });\n\n return {\n addSource: (config: GraphqlSourceConfig) =>\n addSourceInternal(config).pipe(\n Effect.tap((result) =>\n configFile\n ? configFile.upsertSource(toGraphqlConfigEntry(result.namespace, config))\n : Effect.void,\n ),\n ),\n\n removeSource: (namespace: string, scope: string) =>\n Effect.gen(function* () {\n yield* ctx.transaction(\n Effect.gen(function* () {\n yield* ctx.credentialBindings.removeForSource({\n pluginId: GRAPHQL_PLUGIN_ID,\n sourceId: namespace,\n sourceScope: ScopeId.make(scope),\n });\n yield* ctx.storage.removeSource(namespace, scope);\n yield* ctx.core.sources.unregister({ id: namespace, targetScope: scope });\n }),\n );\n if (configFile) {\n yield* configFile.removeSource(namespace);\n }\n }),\n\n getSource: (namespace: string, scope: string) => ctx.storage.getSource(namespace, scope),\n\n configureSource,\n\n configure: (source: GraphqlSourceRef, input: GraphqlConfigureSourceInput) =>\n configureSource(source.id, source.scope, input.scope, input),\n };\n};\n\nexport type GraphqlPluginExtension = ReturnType<typeof makeGraphqlExtension>;\n\nexport const graphqlPlugin = definePlugin((options?: GraphqlPluginOptions) => {\n return {\n id: \"graphql\" as const,\n packageName: \"@executor-js/plugin-graphql\",\n sourcePresets: graphqlPresets,\n schema: graphqlSchema,\n storage: (deps): GraphqlStore => makeDefaultGraphqlStore(deps),\n\n extension: (ctx) =>\n makeGraphqlExtension(\n ctx,\n options?.httpClientLayer ?? ctx.httpClientLayer,\n options?.configFile,\n ),\n\n sourceConfigure: {\n type: \"graphql\",\n schema: SourceConfigureInputSchema,\n configure: ({ ctx, sourceId, sourceScope, targetScope, config }) =>\n makeGraphqlExtension(\n ctx,\n options?.httpClientLayer ?? ctx.httpClientLayer,\n options?.configFile,\n ).configureSource(\n sourceId,\n sourceScope,\n targetScope,\n config as GraphqlConfigureSourceInput,\n ),\n },\n\n staticSources: (self) => [\n {\n id: \"graphql\",\n kind: \"executor\",\n name: \"GraphQL\",\n tools: [\n tool({\n name: \"getSource\",\n description:\n \"Inspect an existing GraphQL source, including endpoint, auth mode, configured headers/query params, and credential slots. Use this before repairing an existing source with `graphql.configureSource`, `secrets.create`, or `oauth.start`.\",\n inputSchema: StaticGetSourceInputStandardSchema,\n outputSchema: StaticGetSourceOutputStandardSchema,\n execute: (input, { ctx }) =>\n Effect.map(\n self.getSource(input.namespace, resolveStaticScopeInput(ctx, input.scope)),\n (source) => ToolResult.ok({ source }),\n ),\n }),\n tool({\n name: \"addSource\",\n description:\n \"Add a GraphQL endpoint and register its operations as tools. Executor chooses the source install scope (local scope locally, organization scope in cloud) and returns it as `source`. For API keys or bearer tokens, first call `executor.coreTools.secrets.create` at the user's chosen credential scope and pass secret refs through `credentials`. For OAuth, start the browser flow with `executor.coreTools.oauth.start` using `credentialScope` set to the user's chosen personal or organization credential scope, verify completion with `connections.list`, then bind the connection through `credentials` or `graphql.configureSource`.\",\n annotations: {\n requiresApproval: true,\n approvalDescription: \"Add a GraphQL source\",\n },\n inputSchema: StaticAddSourceInputStandardSchema,\n outputSchema: StaticAddSourceOutputStandardSchema,\n execute: (input, { ctx }) => {\n const sourceScope = defaultSourceInstallScopeId(ctx.scopes);\n if (sourceScope === null) {\n return Effect.succeed(\n graphqlToolFailure(\n \"source_scope_unavailable\",\n \"Cannot add a GraphQL source because this executor has no source install scope.\",\n ),\n );\n }\n return self.addSource({ ...input, scope: sourceScope }).pipe(\n Effect.map((result) =>\n ToolResult.ok({\n ...result,\n source: { id: result.namespace, scope: sourceScope },\n }),\n ),\n Effect.catchTags({\n GraphqlIntrospectionError: ({ message }) =>\n Effect.succeed(graphqlToolFailure(\"graphql_introspection_failed\", message)),\n GraphqlExtractionError: ({ message }) =>\n Effect.succeed(graphqlToolFailure(\"graphql_extraction_failed\", message)),\n }),\n );\n },\n }),\n tool({\n name: \"configureSource\",\n description:\n 'Configure an existing GraphQL source with concrete fields. Use `source` returned by `graphql.addSource` or `sources.list`. The top-level `scope` is the credential target scope for bindings; in cloud, choose the user or organization credential scope deliberately. Pass secret refs as `{kind:\"secret\", secretId}` and OAuth connections as `{kind:\"connection\", connectionId}`.',\n annotations: {\n requiresApproval: true,\n approvalDescription: \"Configure a GraphQL source\",\n },\n inputSchema: StaticConfigureSourceInputStandardSchema,\n outputSchema: StaticConfigureSourceOutputStandardSchema,\n execute: (input, { ctx }) => {\n const { source, ...config } = input as typeof StaticConfigureSourceInputSchema.Type;\n const sourceScope = resolveStaticScopeInput(ctx, source.scope);\n const targetScope = resolveStaticScopeInput(ctx, config.scope);\n return Effect.as(\n self.configure(\n { id: source.id, scope: sourceScope },\n { ...config, scope: targetScope },\n ),\n ToolResult.ok({ configured: true }),\n );\n },\n }),\n ],\n },\n ],\n\n invokeTool: ({ ctx, toolRow, args }) =>\n Effect.gen(function* () {\n const httpClientLayer = options?.httpClientLayer ?? ctx.httpClientLayer;\n // toolRow.scope_id is the resolved owning scope of the tool\n // (innermost-wins from the executor's stack). The matching\n // GraphQL operation + source plugin-storage rows live at the same\n // scope, so pin every store lookup to it instead of relying on\n // stack-wide scope fall-through.\n const toolScope = toolRow.scope_id;\n const op = yield* ctx.storage.getOperationByToolId(toolRow.id, toolScope);\n if (!op) {\n return yield* new GraphqlInvocationError({\n message: `No GraphQL operation found for tool \"${toolRow.id}\"`,\n statusCode: Option.none(),\n });\n }\n const source = yield* ctx.storage.getSource(op.sourceId, toolScope);\n if (!source) {\n return yield* new GraphqlInvocationError({\n message: `No GraphQL source found for \"${op.sourceId}\"`,\n statusCode: Option.none(),\n });\n }\n\n const resolvedHeaders =\n (yield* resolveGraphqlBindingValueMap(ctx, source.headers, {\n sourceId: source.namespace,\n sourceScope: source.scope,\n missingLabel: \"header\",\n })) ?? {};\n const resolvedQueryParams =\n (yield* resolveGraphqlBindingValueMap(ctx, source.queryParams, {\n sourceId: source.namespace,\n sourceScope: source.scope,\n missingLabel: \"query parameter\",\n })) ?? {};\n const oauthHeader = yield* resolveGraphqlStoredOAuthHeader(\n ctx,\n source.namespace,\n source.scope,\n source.auth,\n );\n Object.assign(resolvedHeaders, oauthHeader ?? {});\n\n const result = yield* invokeWithLayer(\n op.binding,\n (args ?? {}) as Record<string, unknown>,\n source.endpoint,\n resolvedHeaders,\n resolvedQueryParams,\n httpClientLayer,\n );\n\n const errors = decodeGraphqlErrors(result.errors);\n if (errors !== undefined && errors.length > 0) {\n const firstMessage = extractGraphqlErrorMessage(errors);\n return ToolResult.fail({\n code: \"graphql_errors\",\n message: firstMessage !== undefined ? firstMessage : \"GraphQL request returned errors\",\n details: { errors },\n });\n }\n if (result.status < 200 || result.status >= 300) {\n if (result.status === 401 || result.status === 403) {\n return authToolFailure({\n code: \"credential_rejected\",\n status: result.status,\n message: `Upstream rejected credentials for GraphQL source \"${source.namespace}\" with HTTP ${result.status}. Re-authenticate or update the source credentials before retrying this tool.`,\n source: { id: source.namespace, scope: source.scope },\n credential: { kind: \"upstream\", label: \"Upstream authorization\" },\n upstream: {\n status: result.status,\n details: {\n data: result.data,\n errors: result.errors,\n },\n },\n recovery: { configureSourceTool: \"executor.graphql.configureSource\" },\n });\n }\n return ToolResult.fail({\n code: \"graphql_http_error\",\n status: result.status,\n message: `GraphQL request failed with HTTP ${result.status}`,\n details: {\n status: result.status,\n data: result.data,\n errors: result.errors,\n },\n });\n }\n return ToolResult.ok(result.data);\n }).pipe(\n Effect.catchTag(\"GraphqlAuthRequiredError\", (error) =>\n Effect.succeed(graphqlAuthToolFailure(error)),\n ),\n ),\n\n resolveAnnotations: ({ ctx, sourceId, toolRows }) =>\n Effect.gen(function* () {\n // toolRows for a single (plugin_id, source_id) group can still\n // straddle multiple scopes when the source is shadowed (e.g. an\n // org-level GraphQL source plus a per-user override that\n // re-registers the same tool ids). Run one listOperationsBySource\n // per distinct scope so each lookup pins {source_id, scope_id}\n // and we don't fall through to the wrong scope's bindings.\n const scopes = new Set<string>();\n for (const row of toolRows as readonly ToolRow[]) {\n scopes.add(row.scope_id);\n }\n // One listOperationsBySource per scope is independent storage\n // work; run them in parallel so a shadowed source doesn't\n // serialise two ~200ms reads back-to-back in the caller's\n // `executor.tools.list.annotations` span.\n const entries = yield* Effect.forEach(\n [...scopes],\n (scope) =>\n Effect.gen(function* () {\n const ops = yield* ctx.storage.listOperationsBySource(sourceId, scope);\n const byId = new Map<string, OperationBinding>();\n for (const op of ops) byId.set(op.toolId, op.binding);\n return [scope, byId] as const;\n }),\n { concurrency: \"unbounded\" },\n );\n const byScope = new Map<string, Map<string, OperationBinding>>(entries);\n\n const out: Record<string, ToolAnnotations> = {};\n for (const row of toolRows as readonly ToolRow[]) {\n const binding = byScope.get(row.scope_id)?.get(row.id);\n if (binding) out[row.id] = annotationsFor(binding);\n }\n return out;\n }),\n\n removeSource: ({ ctx, sourceId, scope }) =>\n Effect.gen(function* () {\n yield* ctx.transaction(\n Effect.gen(function* () {\n yield* ctx.credentialBindings.removeForSource({\n pluginId: GRAPHQL_PLUGIN_ID,\n sourceId,\n sourceScope: ScopeId.make(scope),\n });\n yield* ctx.storage.removeSource(sourceId, scope);\n }),\n );\n if (options?.configFile) {\n yield* options.configFile.removeSource(sourceId);\n }\n }),\n\n usagesForSecret: () => Effect.succeed([]),\n\n usagesForConnection: () => Effect.succeed([]),\n\n detect: ({ ctx, url }) =>\n Effect.gen(function* () {\n const httpClientLayer = options?.httpClientLayer ?? ctx.httpClientLayer;\n const trimmed = url.trim();\n if (!trimmed) return null;\n const parsed = yield* Effect.try({\n try: () => new URL(trimmed),\n catch: (cause) => cause,\n }).pipe(Effect.option);\n if (Option.isNone(parsed)) return null;\n\n const ok = yield* introspect(trimmed).pipe(\n Effect.provide(httpClientLayer),\n Effect.map(() => true),\n Effect.catch(() => Effect.succeed(false)),\n );\n\n const name = namespaceFromEndpoint(trimmed);\n\n if (ok) {\n return SourceDetectionResult.make({\n kind: \"graphql\",\n confidence: \"high\",\n endpoint: trimmed,\n name,\n namespace: name,\n });\n }\n\n // Low-confidence URL-token fallback. Introspection can fail for\n // many reasons (auth, CORS, the endpoint disabled introspection\n // in production, transport errors). When the URL itself\n // strongly implies GraphQL, surface a candidate so the user\n // can still pick it from the detect dropdown.\n if (urlMatchesToken(parsed.value, \"graphql\")) {\n return SourceDetectionResult.make({\n kind: \"graphql\",\n confidence: \"low\",\n endpoint: trimmed,\n name,\n namespace: name,\n });\n }\n\n return null;\n }),\n };\n // HTTP transport (routes/handlers/extensionService) is layered on by\n // the api-aware factory in `@executor-js/plugin-graphql/api`. Hosts that\n // want the HTTP surface import the plugin from there; SDK-only\n // consumers stay on this entry and avoid the server-only deps.\n});\n"],"mappings":"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","names":["raw","Effect","Option","Option","Effect","Effect","Option","HttpClient","HttpClientRequest","Effect","Option","HttpClient","HttpClientRequest","Effect","Option","Schema","Schema","Option","Effect","Effect","Match","Option","Schema","Schema","Option","formatTypeRef","Match","unwrapTypeName","Effect","connectionId"]}
@@ -6,7 +6,7 @@ import {
6
6
  GraphqlIntrospectionError,
7
7
  GraphqlSourceAuth,
8
8
  GraphqlSourceAuthInput
9
- } from "./chunk-H422YIM4.js";
9
+ } from "./chunk-UIAHATHP.js";
10
10
 
11
11
  // src/react/atoms.ts
12
12
  import * as Atom from "effect/unstable/reactivity/Atom";
@@ -122,4 +122,4 @@ export {
122
122
  graphqlSourceBindingsAtom,
123
123
  addGraphqlSourceOptimistic
124
124
  };
125
- //# sourceMappingURL=chunk-OYUIHBWZ.js.map
125
+ //# sourceMappingURL=chunk-D3FN3ZDA.js.map
@@ -16,6 +16,8 @@ var GraphqlExtractionError = class extends Schema.TaggedErrorClass()(
16
16
  };
17
17
  var GraphqlInvocationError = class extends Data.TaggedError("GraphqlInvocationError") {
18
18
  };
19
+ var GraphqlAuthRequiredError = class extends Data.TaggedError("GraphqlAuthRequiredError") {
20
+ };
19
21
 
20
22
  // src/sdk/types.ts
21
23
  import { Effect, Schema as Schema2 } from "effect";
@@ -108,6 +110,7 @@ export {
108
110
  GraphqlIntrospectionError,
109
111
  GraphqlExtractionError,
110
112
  GraphqlInvocationError,
113
+ GraphqlAuthRequiredError,
111
114
  GraphqlOperationKind,
112
115
  GraphqlArgument,
113
116
  ExtractedField,
@@ -126,4 +129,4 @@ export {
126
129
  InvocationConfig,
127
130
  InvocationResult
128
131
  };
129
- //# sourceMappingURL=chunk-H422YIM4.js.map
132
+ //# sourceMappingURL=chunk-UIAHATHP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/sdk/errors.ts","../src/sdk/types.ts"],"sourcesContent":["import { Data, Schema } from \"effect\";\nimport type { Option } from \"effect\";\nimport type { AuthToolFailureCode } from \"@executor-js/sdk/core\";\n\nexport class GraphqlIntrospectionError extends Schema.TaggedErrorClass<GraphqlIntrospectionError>()(\n \"GraphqlIntrospectionError\",\n {\n message: Schema.String,\n },\n) {}\n\nexport class GraphqlExtractionError extends Schema.TaggedErrorClass<GraphqlExtractionError>()(\n \"GraphqlExtractionError\",\n {\n message: Schema.String,\n },\n) {}\n\nexport class GraphqlInvocationError extends Data.TaggedError(\"GraphqlInvocationError\")<{\n readonly message: string;\n readonly statusCode: Option.Option<number>;\n readonly cause?: unknown;\n}> {}\n\nexport class GraphqlAuthRequiredError extends Data.TaggedError(\"GraphqlAuthRequiredError\")<{\n readonly code: AuthToolFailureCode;\n readonly message: string;\n readonly sourceId: string;\n readonly sourceScope: string;\n readonly credentialKind: \"secret\" | \"connection\" | \"oauth\" | \"upstream\";\n readonly credentialLabel?: string;\n readonly slotKey?: string;\n readonly secretId?: string;\n readonly connectionId?: string;\n readonly status?: number;\n readonly details?: unknown;\n readonly cause?: unknown;\n}> {}\n","import { Effect, Schema } from \"effect\";\nimport {\n ConfiguredCredentialValue,\n credentialSlotKey,\n SecretBackedValue,\n} from \"@executor-js/sdk/shared\";\nimport { HttpConfiguredValueInput, HttpCredentialInput } from \"@executor-js/sdk/http-source\";\n\n// ---------------------------------------------------------------------------\n// GraphQL operation kind\n// ---------------------------------------------------------------------------\n\nexport const GraphqlOperationKind = Schema.Literals([\"query\", \"mutation\"]);\nexport type GraphqlOperationKind = typeof GraphqlOperationKind.Type;\n\n// ---------------------------------------------------------------------------\n// Extracted field (becomes a tool)\n// ---------------------------------------------------------------------------\n\nexport const GraphqlArgument = Schema.Struct({\n name: Schema.String,\n typeName: Schema.String,\n required: Schema.Boolean,\n description: Schema.OptionFromOptional(Schema.String),\n});\nexport type GraphqlArgument = typeof GraphqlArgument.Type;\n\nexport const ExtractedField = Schema.Struct({\n /** e.g. \"user\", \"createUser\" */\n fieldName: Schema.String,\n /** \"query\" or \"mutation\" */\n kind: GraphqlOperationKind,\n description: Schema.OptionFromOptional(Schema.String),\n arguments: Schema.Array(GraphqlArgument),\n /** JSON Schema for the input (built from arguments) */\n inputSchema: Schema.OptionFromOptional(Schema.Unknown),\n /** The return type name for documentation */\n returnTypeName: Schema.String,\n});\nexport type ExtractedField = typeof ExtractedField.Type;\n\nexport const ExtractionResult = Schema.Struct({\n /** Schema name from introspection */\n schemaName: Schema.OptionFromOptional(Schema.String),\n fields: Schema.Array(ExtractedField),\n});\nexport type ExtractionResult = typeof ExtractionResult.Type;\n\n// ---------------------------------------------------------------------------\n// Operation binding — minimal data needed to invoke\n// ---------------------------------------------------------------------------\n\nexport const OperationBinding = Schema.Struct({\n kind: GraphqlOperationKind,\n fieldName: Schema.String,\n /** The full GraphQL query/mutation string */\n operationString: Schema.String,\n /** Ordered variable names for mapping */\n variableNames: Schema.Array(Schema.String),\n});\nexport type OperationBinding = typeof OperationBinding.Type;\n\n// ---------------------------------------------------------------------------\n// Invocation\n// ---------------------------------------------------------------------------\n\nexport const HeaderValue = SecretBackedValue;\nexport type HeaderValue = typeof HeaderValue.Type;\nexport const QueryParamValue = HeaderValue;\nexport type QueryParamValue = typeof QueryParamValue.Type;\n\nexport const ConfiguredGraphqlCredentialValue = ConfiguredCredentialValue;\nexport type ConfiguredGraphqlCredentialValue = typeof ConfiguredGraphqlCredentialValue.Type;\nexport const GraphqlConfiguredValueInput = HttpConfiguredValueInput;\nexport type GraphqlConfiguredValueInput = typeof GraphqlConfiguredValueInput.Type;\nexport const GraphqlCredentialInput = HttpCredentialInput;\nexport type GraphqlCredentialInput = typeof GraphqlCredentialInput.Type;\n\nexport const graphqlHeaderSlot = (name: string): string => credentialSlotKey(\"header\", name);\nexport const graphqlQueryParamSlot = (name: string): string =>\n credentialSlotKey(\"query_param\", name);\nexport const GRAPHQL_OAUTH_CONNECTION_SLOT = \"auth:oauth2:connection\";\n\n// ---------------------------------------------------------------------------\n// Source auth\n// ---------------------------------------------------------------------------\n\nexport const GraphqlSourceAuth = Schema.Union([\n Schema.Struct({ kind: Schema.Literal(\"none\") }),\n Schema.Struct({\n kind: Schema.Literal(\"oauth2\"),\n connectionSlot: Schema.String,\n }),\n]);\nexport type GraphqlSourceAuth = typeof GraphqlSourceAuth.Type;\n\nexport const GraphqlSourceAuthInput = Schema.Union([\n Schema.Struct({\n kind: Schema.Literal(\"none\"),\n }),\n Schema.Struct({\n oauth2: Schema.optional(\n Schema.Struct({\n connection: Schema.optional(HttpCredentialInput),\n }),\n ),\n }),\n]);\nexport type GraphqlSourceAuthInput = typeof GraphqlSourceAuthInput.Type;\n\nexport const InvocationConfig = Schema.Struct({\n /** The GraphQL endpoint URL */\n endpoint: Schema.String,\n /** Headers applied to every request. Values can reference secrets. */\n headers: Schema.Record(Schema.String, ConfiguredGraphqlCredentialValue).pipe(\n Schema.withDecodingDefault(Effect.succeed({})),\n Schema.withConstructorDefault(Effect.succeed({})),\n ),\n /** Query parameters applied to every request. Values can reference secrets. */\n queryParams: Schema.Record(Schema.String, ConfiguredGraphqlCredentialValue).pipe(\n Schema.withDecodingDefault(Effect.succeed({})),\n Schema.withConstructorDefault(Effect.succeed({})),\n ),\n});\nexport type InvocationConfig = typeof InvocationConfig.Type;\n\nexport const InvocationResult = Schema.Struct({\n status: Schema.Number,\n data: Schema.NullOr(Schema.Unknown),\n errors: Schema.NullOr(Schema.Unknown),\n});\nexport type InvocationResult = typeof InvocationResult.Type;\n"],"mappings":"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","names":["Schema"]}
package/dist/client.js CHANGED
@@ -7,9 +7,9 @@ import { defineClientPlugin } from "@executor-js/sdk/client";
7
7
 
8
8
  // src/react/source-plugin.ts
9
9
  import { lazy } from "react";
10
- var importAdd = () => import("./AddGraphqlSource-PBMKSY7Y.js");
11
- var importEdit = () => import("./EditGraphqlSource-AFR4RQHY.js");
12
- var importSummary = () => import("./GraphqlSourceSummary-MY4AW37M.js");
10
+ var importAdd = () => import("./AddGraphqlSource-CJCUUYNM.js");
11
+ var importEdit = () => import("./EditGraphqlSource-YLTPUYW4.js");
12
+ var importSummary = () => import("./GraphqlSourceSummary-YWJX6ONU.js");
13
13
  var graphqlSourcePlugin = {
14
14
  key: "graphql",
15
15
  label: "GraphQL",
package/dist/core.js CHANGED
@@ -8,7 +8,7 @@ import {
8
8
  makeDefaultGraphqlStore,
9
9
  parseIntrospectionJson,
10
10
  resolveHeaders
11
- } from "./chunk-7S2FM3ZF.js";
11
+ } from "./chunk-2252RTCE.js";
12
12
  import "./chunk-D6E4WAYW.js";
13
13
  import {
14
14
  ConfiguredGraphqlCredentialValue,
@@ -30,7 +30,7 @@ import {
30
30
  QueryParamValue,
31
31
  graphqlHeaderSlot,
32
32
  graphqlQueryParamSlot
33
- } from "./chunk-H422YIM4.js";
33
+ } from "./chunk-UIAHATHP.js";
34
34
  export {
35
35
  ConfiguredGraphqlCredentialValue,
36
36
  ExtractedField,
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  graphqlPlugin
3
- } from "./chunk-7S2FM3ZF.js";
3
+ } from "./chunk-2252RTCE.js";
4
4
  import "./chunk-D6E4WAYW.js";
5
- import "./chunk-H422YIM4.js";
5
+ import "./chunk-UIAHATHP.js";
6
6
  export {
7
7
  graphqlPlugin
8
8
  };
@@ -1,5 +1,6 @@
1
1
  import { Schema } from "effect";
2
2
  import type { Option } from "effect";
3
+ import type { AuthToolFailureCode } from "@executor-js/sdk/core";
3
4
  declare const GraphqlIntrospectionError_base: Schema.Class<GraphqlIntrospectionError, Schema.TaggedStruct<"GraphqlIntrospectionError", {
4
5
  readonly message: Schema.String;
5
6
  }>, import("effect/Cause").YieldableError>;
@@ -19,4 +20,22 @@ export declare class GraphqlInvocationError extends GraphqlInvocationError_base<
19
20
  readonly cause?: unknown;
20
21
  }> {
21
22
  }
23
+ declare const GraphqlAuthRequiredError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
24
+ readonly _tag: "GraphqlAuthRequiredError";
25
+ } & Readonly<A>;
26
+ export declare class GraphqlAuthRequiredError extends GraphqlAuthRequiredError_base<{
27
+ readonly code: AuthToolFailureCode;
28
+ readonly message: string;
29
+ readonly sourceId: string;
30
+ readonly sourceScope: string;
31
+ readonly credentialKind: "secret" | "connection" | "oauth" | "upstream";
32
+ readonly credentialLabel?: string;
33
+ readonly slotKey?: string;
34
+ readonly secretId?: string;
35
+ readonly connectionId?: string;
36
+ readonly status?: number;
37
+ readonly details?: unknown;
38
+ readonly cause?: unknown;
39
+ }> {
40
+ }
22
41
  export {};
@@ -15,9 +15,9 @@ export declare const invoke: (operation: {
15
15
  readonly data: unknown;
16
16
  readonly status: number;
17
17
  readonly errors: unknown;
18
- }, GraphqlInvocationError | import("effect/unstable/http/HttpClientError").HttpClientError, HttpClient.HttpClient>;
18
+ }, import("effect/unstable/http/HttpClientError").HttpClientError | GraphqlInvocationError, HttpClient.HttpClient>;
19
19
  export declare const invokeWithLayer: (operation: OperationBinding, args: Record<string, unknown>, endpoint: string, resolvedHeaders: Record<string, string>, resolvedQueryParams: Record<string, string>, httpClientLayer: Layer.Layer<HttpClient.HttpClient>) => Effect.Effect<{
20
20
  readonly data: unknown;
21
21
  readonly status: number;
22
22
  readonly errors: unknown;
23
- }, GraphqlInvocationError | import("effect/unstable/http/HttpClientError").HttpClientError, never>;
23
+ }, import("effect/unstable/http/HttpClientError").HttpClientError | GraphqlInvocationError, never>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@executor-js/plugin-graphql",
3
- "version": "1.4.31",
3
+ "version": "1.4.33",
4
4
  "homepage": "https://github.com/RhysSullivan/executor/tree/main/packages/plugins/graphql",
5
5
  "bugs": {
6
6
  "url": "https://github.com/RhysSullivan/executor/issues"
@@ -53,8 +53,8 @@
53
53
  },
54
54
  "dependencies": {
55
55
  "@effect/platform-node": "4.0.0-beta.59",
56
- "@executor-js/config": "1.4.31",
57
- "@executor-js/sdk": "1.4.31",
56
+ "@executor-js/config": "1.4.33",
57
+ "@executor-js/sdk": "1.4.33",
58
58
  "effect": "4.0.0-beta.59",
59
59
  "graphql": "^16.12.0",
60
60
  "graphql-yoga": "^5.17.0"
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/sdk/introspect.ts","../src/sdk/extract.ts","../src/sdk/invoke.ts","../src/sdk/store.ts","../src/sdk/plugin.ts"],"sourcesContent":["import { Effect, Option, Schema } from \"effect\";\nimport { HttpClient, HttpClientRequest } from \"effect/unstable/http\";\n\nimport { GraphqlIntrospectionError } from \"./errors\";\n\n// ---------------------------------------------------------------------------\n// Introspection query — standard GraphQL introspection\n// ---------------------------------------------------------------------------\n\nconst INTROSPECTION_QUERY = `\n query IntrospectionQuery {\n __schema {\n queryType { name }\n mutationType { name }\n types {\n kind\n name\n description\n fields(includeDeprecated: false) {\n name\n description\n args {\n name\n description\n type {\n ...TypeRef\n }\n defaultValue\n }\n type {\n ...TypeRef\n }\n }\n inputFields {\n name\n description\n type {\n ...TypeRef\n }\n defaultValue\n }\n enumValues(includeDeprecated: false) {\n name\n description\n }\n }\n }\n }\n\n fragment TypeRef on __Type {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n }\n }\n }\n }\n }\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Introspection result types\n// ---------------------------------------------------------------------------\n\nconst IntrospectionTypeRefLeaf = Schema.Struct({\n kind: Schema.String,\n name: Schema.NullOr(Schema.String),\n ofType: Schema.optional(Schema.Null),\n});\n\nconst IntrospectionTypeRef5 = Schema.Struct({\n kind: Schema.String,\n name: Schema.NullOr(Schema.String),\n ofType: Schema.optional(Schema.NullOr(IntrospectionTypeRefLeaf)),\n});\n\nconst IntrospectionTypeRef4 = Schema.Struct({\n kind: Schema.String,\n name: Schema.NullOr(Schema.String),\n ofType: Schema.optional(Schema.NullOr(IntrospectionTypeRef5)),\n});\n\nconst IntrospectionTypeRef3 = Schema.Struct({\n kind: Schema.String,\n name: Schema.NullOr(Schema.String),\n ofType: Schema.optional(Schema.NullOr(IntrospectionTypeRef4)),\n});\n\nconst IntrospectionTypeRef2 = Schema.Struct({\n kind: Schema.String,\n name: Schema.NullOr(Schema.String),\n ofType: Schema.optional(Schema.NullOr(IntrospectionTypeRef3)),\n});\n\nconst IntrospectionTypeRefSchema = Schema.Struct({\n kind: Schema.String,\n name: Schema.NullOr(Schema.String),\n ofType: Schema.optional(Schema.NullOr(IntrospectionTypeRef2)),\n});\n\nconst IntrospectionInputValueSchema = Schema.Struct({\n name: Schema.String,\n description: Schema.NullOr(Schema.String),\n type: IntrospectionTypeRefSchema,\n defaultValue: Schema.NullOr(Schema.String),\n});\n\nconst IntrospectionFieldSchema = Schema.Struct({\n name: Schema.String,\n description: Schema.NullOr(Schema.String),\n args: Schema.Array(IntrospectionInputValueSchema),\n type: IntrospectionTypeRefSchema,\n});\n\nconst IntrospectionTypeSchema = Schema.Struct({\n kind: Schema.String,\n name: Schema.String,\n description: Schema.NullOr(Schema.String),\n fields: Schema.NullOr(Schema.Array(IntrospectionFieldSchema)),\n inputFields: Schema.NullOr(Schema.Array(IntrospectionInputValueSchema)),\n enumValues: Schema.NullOr(\n Schema.Array(\n Schema.Struct({\n name: Schema.String,\n description: Schema.NullOr(Schema.String),\n }),\n ),\n ),\n});\n\nconst IntrospectionResultSchema = Schema.Struct({\n __schema: Schema.Struct({\n queryType: Schema.NullOr(Schema.Struct({ name: Schema.String })),\n mutationType: Schema.NullOr(Schema.Struct({ name: Schema.String })),\n types: Schema.Array(IntrospectionTypeSchema),\n }),\n});\n\nconst IntrospectionResponseSchema = Schema.Struct({\n data: Schema.optional(IntrospectionResultSchema),\n errors: Schema.optional(Schema.Array(Schema.Unknown)),\n});\n\nconst UpstreamErrorResponseSchema = Schema.Struct({\n message: Schema.optional(Schema.String),\n errors: Schema.optional(\n Schema.Array(\n Schema.Struct({\n message: Schema.optional(Schema.String),\n }),\n ),\n ),\n});\n\nconst IntrospectionJsonSchema = Schema.Union([\n Schema.Struct({ data: IntrospectionResultSchema }),\n IntrospectionResultSchema,\n]);\nconst JsonTextSchema = Schema.fromJsonString(Schema.Unknown);\n\nconst decodeUpstreamErrorResponse = Schema.decodeUnknownOption(UpstreamErrorResponseSchema);\n\nexport type IntrospectionTypeRef = typeof IntrospectionTypeRefSchema.Type;\nexport type IntrospectionInputValue = typeof IntrospectionInputValueSchema.Type;\nexport type IntrospectionField = typeof IntrospectionFieldSchema.Type;\nexport type IntrospectionEnumValue = NonNullable<\n (typeof IntrospectionTypeSchema.Type)[\"enumValues\"]\n>[number];\nexport type IntrospectionType = typeof IntrospectionTypeSchema.Type;\nexport type IntrospectionSchema = (typeof IntrospectionResultSchema.Type)[\"__schema\"];\nexport type IntrospectionResult = typeof IntrospectionResultSchema.Type;\n\nconst firstUpstreamErrorMessage = (value: unknown): string | null => {\n const decoded = decodeUpstreamErrorResponse(value);\n return Option.match(decoded, {\n onNone: () => null,\n onSome: (response) => {\n if (response.message) return response.message;\n for (const entry of response.errors ?? []) {\n const message = entry.message;\n if (message) return message;\n }\n return null;\n },\n });\n};\n\nconst redactUpstreamBody = (body: string): string =>\n body\n .replaceAll(\n /(\"(?:access_token|refresh_token|id_token|client_secret|token|authorization)\"\\s*:\\s*\")[^\"]*(\")/gi,\n \"$1[redacted]$2\",\n )\n .replaceAll(\n /((?:access_token|refresh_token|id_token|client_secret|token|authorization)=)[^&\\s]*/gi,\n \"$1[redacted]\",\n )\n .replaceAll(\n /((?:authorization|access-token|refresh-token|id-token|client-secret|token)\\s*:\\s*)(?:bearer\\s+)?[^\\s,;]+/gi,\n \"$1[redacted]\",\n );\n\nconst upstreamTextMessage = (body: string): string | null => {\n const text = redactUpstreamBody(body.replaceAll(/\\s+/g, \" \").trim());\n if (text.length === 0) return null;\n return text.length > 500 ? `${text.slice(0, 500)}...` : text;\n};\n\n// ---------------------------------------------------------------------------\n// Introspect a GraphQL endpoint\n// ---------------------------------------------------------------------------\n\nexport const introspect = Effect.fn(\"GraphQL.introspect\")(function* (\n endpoint: string,\n headers?: Record<string, string>,\n queryParams?: Record<string, string>,\n) {\n const client = yield* HttpClient.HttpClient;\n const requestEndpoint =\n queryParams && Object.keys(queryParams).length > 0\n ? (() => {\n const url = new URL(endpoint);\n for (const [name, value] of Object.entries(queryParams)) {\n url.searchParams.set(name, value);\n }\n return url.toString();\n })()\n : endpoint;\n\n let request = HttpClientRequest.post(requestEndpoint).pipe(\n HttpClientRequest.setHeader(\"Content-Type\", \"application/json\"),\n HttpClientRequest.setHeader(\"Accept\", \"application/json\"),\n HttpClientRequest.setHeader(\"User-Agent\", \"executor-graphql\"),\n HttpClientRequest.bodyJsonUnsafe({\n query: INTROSPECTION_QUERY,\n }),\n );\n\n if (headers) {\n for (const [k, v] of Object.entries(headers)) {\n request = HttpClientRequest.setHeader(request, k, v);\n }\n }\n\n const response = yield* client.execute(request).pipe(\n Effect.tapCause((cause) => Effect.logError(\"graphql introspection request failed\", cause)),\n Effect.mapError(\n () =>\n new GraphqlIntrospectionError({\n message: \"Failed to reach GraphQL endpoint\",\n }),\n ),\n );\n\n if (response.status !== 200) {\n const responseText = yield* response.text.pipe(Effect.catch(() => Effect.succeed(\"\")));\n const raw = responseText\n ? yield* Schema.decodeUnknownEffect(JsonTextSchema)(responseText).pipe(\n Effect.catch(() => Effect.succeed(null)),\n )\n : null;\n const upstreamMessage = upstreamTextMessage(\n (raw === null ? null : firstUpstreamErrorMessage(raw)) ?? responseText,\n );\n return yield* new GraphqlIntrospectionError({\n message: upstreamMessage\n ? `Introspection failed with status ${response.status}: ${upstreamMessage}`\n : `Introspection failed with status ${response.status}`,\n });\n }\n\n const raw = yield* response.json.pipe(\n Effect.tapCause((cause) => Effect.logError(\"graphql introspection JSON parse failed\", cause)),\n Effect.mapError(\n () =>\n new GraphqlIntrospectionError({\n message: `Failed to parse introspection response as JSON`,\n }),\n ),\n );\n\n const json = yield* Schema.decodeUnknownEffect(IntrospectionResponseSchema)(raw).pipe(\n Effect.mapError(\n () =>\n new GraphqlIntrospectionError({\n message: \"Introspection response has an invalid shape\",\n }),\n ),\n );\n\n if (json.errors && Array.isArray(json.errors) && json.errors.length > 0) {\n const upstreamMessage = firstUpstreamErrorMessage(json);\n return yield* new GraphqlIntrospectionError({\n message: upstreamMessage\n ? `Introspection returned ${json.errors.length} error(s): ${upstreamMessage}`\n : `Introspection returned ${json.errors.length} error(s)`,\n });\n }\n\n if (!json.data?.__schema) {\n return yield* new GraphqlIntrospectionError({\n message: \"Introspection response missing __schema\",\n });\n }\n\n return json.data;\n});\n\n// ---------------------------------------------------------------------------\n// Parse an introspection result from a JSON string (for offline/text input)\n// ---------------------------------------------------------------------------\n\nexport const parseIntrospectionJson = (\n text: string,\n): Effect.Effect<IntrospectionResult, GraphqlIntrospectionError> =>\n Schema.decodeUnknownEffect(Schema.fromJsonString(IntrospectionJsonSchema))(text).pipe(\n Effect.map((parsed) => (\"data\" in parsed ? parsed.data : parsed)),\n Effect.mapError(\n () =>\n new GraphqlIntrospectionError({\n message: \"Failed to parse introspection JSON\",\n }),\n ),\n );\n","import { Effect, Match, Option } from \"effect\";\n\nimport { GraphqlExtractionError } from \"./errors\";\nimport type {\n IntrospectionResult,\n IntrospectionSchema,\n IntrospectionType,\n IntrospectionTypeRef,\n IntrospectionInputValue,\n} from \"./introspect\";\nimport {\n ExtractedField,\n ExtractionResult,\n GraphqlArgument,\n type GraphqlOperationKind,\n} from \"./types\";\n\n// ---------------------------------------------------------------------------\n// Type ref helpers\n// ---------------------------------------------------------------------------\n\n/** Unwrap NON_NULL / LIST wrappers to get the leaf type name */\nconst unwrapTypeName = (ref: IntrospectionTypeRef): string => {\n if (ref.name) return ref.name;\n if (ref.ofType) return unwrapTypeName(ref.ofType);\n return \"Unknown\";\n};\n\n/** Check if a type ref is non-null (required) */\nconst isNonNull = (ref: IntrospectionTypeRef): boolean => ref.kind === \"NON_NULL\";\n\n// ---------------------------------------------------------------------------\n// Build shared definitions from all INPUT_OBJECT and ENUM types\n// ---------------------------------------------------------------------------\n\nconst buildDefinitions = (\n types: ReadonlyMap<string, IntrospectionType>,\n): Record<string, unknown> => {\n const defs: Record<string, unknown> = {};\n\n for (const [name, type] of types) {\n // Skip internal types\n if (name.startsWith(\"__\")) continue;\n\n if (type.kind === \"INPUT_OBJECT\" && type.inputFields) {\n const properties: Record<string, unknown> = {};\n const required: string[] = [];\n\n for (const field of type.inputFields) {\n const schema = typeRefToJsonSchema(field.type, types);\n if (field.description) {\n (schema as Record<string, unknown>).description = field.description;\n }\n properties[field.name] = schema;\n if (isNonNull(field.type)) {\n required.push(field.name);\n }\n }\n\n const def: Record<string, unknown> = { type: \"object\", properties };\n if (required.length > 0) def.required = required;\n if (type.description) def.description = type.description;\n defs[name] = def;\n }\n\n if (type.kind === \"ENUM\" && type.enumValues) {\n defs[name] = {\n type: \"string\",\n enum: type.enumValues.map((v) => v.name),\n ...(type.description ? { description: type.description } : {}),\n };\n }\n }\n\n return defs;\n};\n\n// ---------------------------------------------------------------------------\n// Convert a type ref to JSON Schema using $ref for complex types\n// ---------------------------------------------------------------------------\n\nconst typeRefToJsonSchema = (\n ref: IntrospectionTypeRef,\n // oxlint-disable-next-line only-used-in-recursion\n types: ReadonlyMap<string, IntrospectionType>,\n): Record<string, unknown> =>\n Match.value(ref.kind).pipe(\n Match.when(\n \"NON_NULL\",\n (): Record<string, unknown> => (ref.ofType ? typeRefToJsonSchema(ref.ofType, types) : {}),\n ),\n Match.when(\n \"LIST\",\n (): Record<string, unknown> => ({\n type: \"array\",\n items: ref.ofType ? typeRefToJsonSchema(ref.ofType, types) : {},\n }),\n ),\n Match.when(\"SCALAR\", (): Record<string, unknown> => scalarToJsonSchema(ref.name ?? \"String\")),\n Match.when(\n \"ENUM\",\n (): Record<string, unknown> =>\n ref.name ? { $ref: `#/$defs/${ref.name}` } : { type: \"string\" },\n ),\n Match.when(\n \"INPUT_OBJECT\",\n (): Record<string, unknown> =>\n ref.name ? { $ref: `#/$defs/${ref.name}` } : { type: \"object\" },\n ),\n Match.whenOr(\n \"OBJECT\",\n \"INTERFACE\",\n \"UNION\",\n (): Record<string, unknown> => ({ type: \"object\" }),\n ),\n Match.option,\n Option.getOrElse((): Record<string, unknown> => ({})),\n );\n\nconst scalarToJsonSchema = (name: string): Record<string, unknown> =>\n Match.value(name).pipe(\n Match.whenOr(\"String\", \"ID\", (): Record<string, unknown> => ({ type: \"string\" })),\n Match.when(\"Int\", (): Record<string, unknown> => ({ type: \"integer\" })),\n Match.when(\"Float\", (): Record<string, unknown> => ({ type: \"number\" })),\n Match.when(\"Boolean\", (): Record<string, unknown> => ({ type: \"boolean\" })),\n Match.option,\n Option.getOrElse(\n (): Record<string, unknown> => ({ type: \"string\", description: `Custom scalar: ${name}` }),\n ),\n );\n\n// ---------------------------------------------------------------------------\n// Build input JSON Schema from field arguments\n// ---------------------------------------------------------------------------\n\nconst buildInputSchema = (\n args: readonly IntrospectionInputValue[],\n types: ReadonlyMap<string, IntrospectionType>,\n): Record<string, unknown> | undefined => {\n if (args.length === 0) return undefined;\n\n const properties: Record<string, unknown> = {};\n const required: string[] = [];\n\n for (const arg of args) {\n const schema = typeRefToJsonSchema(arg.type, types);\n if (arg.description) {\n (schema as Record<string, unknown>).description = arg.description;\n }\n properties[arg.name] = schema;\n if (isNonNull(arg.type)) {\n required.push(arg.name);\n }\n }\n\n const inputSchema: Record<string, unknown> = {\n type: \"object\",\n properties,\n };\n if (required.length > 0) inputSchema.required = required;\n return inputSchema;\n};\n\n/** Format a type ref back to GraphQL type notation (e.g. \"[String!]!\") */\nconst formatTypeRef = (ref: IntrospectionTypeRef): string =>\n Match.value(ref.kind).pipe(\n Match.when(\"NON_NULL\", () => (ref.ofType ? `${formatTypeRef(ref.ofType)}!` : \"Unknown!\")),\n Match.when(\"LIST\", () => (ref.ofType ? `[${formatTypeRef(ref.ofType)}]` : \"[Unknown]\")),\n Match.option,\n Option.getOrElse(() => ref.name ?? \"Unknown\"),\n );\n\n// ---------------------------------------------------------------------------\n// Extract fields from schema\n// ---------------------------------------------------------------------------\n\nconst extractFields = (\n _schema: IntrospectionSchema,\n kind: GraphqlOperationKind,\n typeName: string | null | undefined,\n types: ReadonlyMap<string, IntrospectionType>,\n): ExtractedField[] => {\n if (!typeName) return [];\n\n const type = types.get(typeName);\n if (!type?.fields) return [];\n\n return type.fields\n .filter((f) => !f.name.startsWith(\"__\"))\n .map((field) => {\n const args = field.args.map((arg) =>\n GraphqlArgument.make({\n name: arg.name,\n typeName: formatTypeRef(arg.type),\n required: isNonNull(arg.type),\n description: arg.description ? Option.some(arg.description) : Option.none(),\n }),\n );\n\n const inputSchema = buildInputSchema(field.args, types);\n\n return ExtractedField.make({\n fieldName: field.name,\n kind,\n description: field.description ? Option.some(field.description) : Option.none(),\n arguments: args,\n inputSchema: inputSchema ? Option.some(inputSchema) : Option.none(),\n returnTypeName: unwrapTypeName(field.type),\n });\n });\n};\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\nexport interface ExtractionOutput {\n readonly result: ExtractionResult;\n /** Shared JSON Schema definitions for INPUT_OBJECT and ENUM types.\n * Tool input schemas use `$ref` pointers into these. */\n readonly definitions: Record<string, unknown>;\n}\n\nexport const extract = (\n introspection: IntrospectionResult,\n): Effect.Effect<ExtractionOutput, GraphqlExtractionError> =>\n Effect.try({\n try: () => {\n const schema = introspection.__schema;\n const typeMap = new Map<string, IntrospectionType>();\n for (const t of schema.types) {\n typeMap.set(t.name, t);\n }\n\n const definitions = buildDefinitions(typeMap);\n\n const queryFields = extractFields(schema, \"query\", schema.queryType?.name, typeMap);\n const mutationFields = extractFields(schema, \"mutation\", schema.mutationType?.name, typeMap);\n\n return {\n result: ExtractionResult.make({\n schemaName: Option.none(),\n fields: [...queryFields, ...mutationFields],\n }),\n definitions,\n };\n },\n catch: () =>\n new GraphqlExtractionError({\n message: \"Failed to extract GraphQL schema\",\n }),\n });\n","import { Effect, Layer, Option } from \"effect\";\nimport { HttpClient, HttpClientRequest } from \"effect/unstable/http\";\nimport { resolveSecretBackedMap } from \"@executor-js/sdk/core\";\n\nimport { GraphqlInvocationError } from \"./errors\";\nimport { type HeaderValue, type OperationBinding, InvocationResult } from \"./types\";\n\n// ---------------------------------------------------------------------------\n// Header resolution — resolves secret refs at invocation time\n// ---------------------------------------------------------------------------\n\nexport const resolveHeaders = (\n headers: Record<string, HeaderValue>,\n secrets: { readonly get: (id: string) => Effect.Effect<string | null, unknown> },\n): Effect.Effect<Record<string, string>> => {\n const entries = Object.entries(headers);\n const secretCount = entries.reduce(\n (acc, [, value]) => (typeof value === \"string\" ? acc : acc + 1),\n 0,\n );\n return resolveSecretBackedMap({\n values: headers,\n getSecret: (secretId) => secrets.get(secretId).pipe(Effect.catch(() => Effect.succeed(null))),\n missing: \"drop\",\n onMissing: (name) =>\n new GraphqlInvocationError({\n message: `Missing secret for header \"${name}\"`,\n statusCode: Option.none(),\n }),\n }).pipe(\n Effect.catch(() => Effect.succeed<Record<string, string> | undefined>(undefined)),\n Effect.map((resolved) => resolved ?? {}),\n Effect.withSpan(\"plugin.graphql.secret.resolve\", {\n attributes: {\n \"plugin.graphql.headers.total\": entries.length,\n \"plugin.graphql.headers.secret_count\": secretCount,\n },\n }),\n );\n};\n\nconst endpointWithQueryParams = (endpoint: string, queryParams: Record<string, string>): string => {\n if (Object.keys(queryParams).length === 0) return endpoint;\n const url = new URL(endpoint);\n for (const [name, value] of Object.entries(queryParams)) {\n url.searchParams.set(name, value);\n }\n return url.toString();\n};\n\nexport const endpointForTelemetry = (endpoint: string): string => {\n if (!URL.canParse(endpoint)) return endpoint;\n const url = new URL(endpoint);\n url.search = \"\";\n url.hash = \"\";\n return url.toString();\n};\n\n// ---------------------------------------------------------------------------\n// Response helpers\n// ---------------------------------------------------------------------------\n\nconst isJsonContentType = (ct: string | null | undefined): boolean => {\n if (!ct) return false;\n const normalized = ct.split(\";\")[0]?.trim().toLowerCase() ?? \"\";\n return (\n normalized === \"application/json\" || normalized.includes(\"+json\") || normalized.includes(\"json\")\n );\n};\n\n// ---------------------------------------------------------------------------\n// Public API — execute a GraphQL operation\n// ---------------------------------------------------------------------------\n\nexport const invoke = Effect.fn(\"GraphQL.invoke\")(function* (\n operation: OperationBinding,\n args: Record<string, unknown>,\n endpoint: string,\n resolvedHeaders: Record<string, string>,\n resolvedQueryParams: Record<string, string> = {},\n) {\n const client = yield* HttpClient.HttpClient;\n const requestEndpoint = endpointWithQueryParams(endpoint, resolvedQueryParams);\n const telemetryEndpoint = endpointForTelemetry(endpoint);\n\n yield* Effect.annotateCurrentSpan({\n \"http.method\": \"POST\",\n \"http.url\": telemetryEndpoint,\n \"plugin.graphql.endpoint\": telemetryEndpoint,\n \"plugin.graphql.operation_kind\": operation.kind,\n \"plugin.graphql.field_name\": operation.fieldName,\n \"plugin.graphql.headers.resolved_count\": Object.keys(resolvedHeaders).length,\n \"plugin.graphql.query_params.resolved_count\": Object.keys(resolvedQueryParams).length,\n });\n\n // Build the GraphQL request body\n const variables: Record<string, unknown> = {};\n for (const varName of operation.variableNames) {\n if (args[varName] !== undefined) {\n variables[varName] = args[varName];\n }\n }\n\n // Also pick up any variables from a \"variables\" container\n if (typeof args.variables === \"object\" && args.variables !== null) {\n Object.assign(variables, args.variables);\n }\n\n let request = HttpClientRequest.post(requestEndpoint).pipe(\n HttpClientRequest.setHeader(\"Content-Type\", \"application/json\"),\n HttpClientRequest.bodyJsonUnsafe({\n query: operation.operationString,\n variables: Object.keys(variables).length > 0 ? variables : undefined,\n }),\n );\n\n for (const [name, value] of Object.entries(resolvedHeaders)) {\n request = HttpClientRequest.setHeader(request, name, value);\n }\n\n const response = yield* client.execute(request).pipe(\n Effect.mapError(\n (err) =>\n new GraphqlInvocationError({\n message: \"GraphQL request failed\",\n statusCode: Option.none(),\n cause: err,\n }),\n ),\n );\n\n const status = response.status;\n const contentType = response.headers[\"content-type\"] ?? null;\n\n const body: unknown = isJsonContentType(contentType)\n ? yield* response.json.pipe(Effect.catch(() => response.text))\n : yield* response.text;\n\n // GraphQL responses are always 200 with { data, errors }\n const gqlBody = body as { data?: unknown; errors?: unknown[] } | null;\n const hasErrors = Array.isArray(gqlBody?.errors) && gqlBody.errors.length > 0;\n\n yield* Effect.annotateCurrentSpan({\n \"http.status_code\": status,\n \"plugin.graphql.has_errors\": hasErrors,\n \"plugin.graphql.error_count\": hasErrors ? gqlBody!.errors!.length : 0,\n });\n\n return InvocationResult.make({\n status,\n data: gqlBody?.data ?? null,\n errors: hasErrors ? gqlBody!.errors : null,\n });\n});\n\n// ---------------------------------------------------------------------------\n// Invoke a GraphQL operation with a provided HttpClient layer\n// ---------------------------------------------------------------------------\n\nexport const invokeWithLayer = (\n operation: OperationBinding,\n args: Record<string, unknown>,\n endpoint: string,\n resolvedHeaders: Record<string, string>,\n resolvedQueryParams: Record<string, string>,\n httpClientLayer: Layer.Layer<HttpClient.HttpClient>,\n) =>\n invoke(operation, args, endpoint, resolvedHeaders, resolvedQueryParams).pipe(\n Effect.provide(httpClientLayer),\n Effect.withSpan(\"plugin.graphql.invoke\", {\n attributes: {\n \"plugin.graphql.endpoint\": endpointForTelemetry(endpoint),\n \"plugin.graphql.operation_kind\": operation.kind,\n \"plugin.graphql.field_name\": operation.fieldName,\n },\n }),\n );\n","import { Effect, Option, Predicate, Schema } from \"effect\";\n\nimport {\n ConfiguredCredentialBinding,\n type FumaTables,\n type PluginStorageEntry,\n type StorageDeps,\n type StorageFailure,\n} from \"@executor-js/sdk/core\";\n\nimport {\n GraphqlSourceAuth,\n OperationBinding,\n type ConfiguredGraphqlCredentialValue,\n} from \"./types\";\n\nexport const graphqlSchema = {} satisfies FumaTables;\nexport type GraphqlSchema = typeof graphqlSchema;\n\nexport interface StoredGraphqlSource {\n readonly namespace: string;\n readonly scope: string;\n readonly name: string;\n readonly endpoint: string;\n readonly headers: Record<string, ConfiguredGraphqlCredentialValue>;\n readonly queryParams: Record<string, ConfiguredGraphqlCredentialValue>;\n readonly auth: GraphqlSourceAuth;\n}\n\nexport interface StoredOperation {\n readonly toolId: string;\n readonly sourceId: string;\n readonly binding: OperationBinding;\n}\n\nconst SOURCE_COLLECTION = \"source\";\nconst OPERATION_COLLECTION = \"operation\";\n\nconst OperationBindingFromJsonString = Schema.fromJsonString(OperationBinding);\nconst decodeOperationBindingFromJsonString = Schema.decodeUnknownSync(\n OperationBindingFromJsonString,\n);\nconst decodeOperationBinding = Schema.decodeUnknownSync(OperationBinding);\nconst encodeBinding = Schema.encodeSync(OperationBinding);\n\nconst decodeBinding = (value: unknown): OperationBinding => {\n if (typeof value === \"string\") return decodeOperationBindingFromJsonString(value);\n return decodeOperationBinding(value);\n};\n\nconst toJsonRecord = (value: unknown): Record<string, unknown> => value as Record<string, unknown>;\n\nconst OptionalNullableString = Schema.optional(Schema.NullOr(Schema.String));\nconst ConfiguredCredentialBindingStorage = Schema.Struct({\n kind: Schema.Literal(\"binding\"),\n slot: Schema.String,\n prefix: OptionalNullableString,\n});\nconst ConfiguredCredentialValueStorage = Schema.Union([\n Schema.String,\n ConfiguredCredentialBindingStorage,\n]);\nconst CredentialMapStorage = Schema.Record(Schema.String, ConfiguredCredentialValueStorage);\nconst SourceStorage = Schema.Struct({\n namespace: Schema.String,\n scope: Schema.String,\n name: Schema.String,\n endpoint: Schema.String,\n headers: Schema.optional(CredentialMapStorage),\n queryParams: Schema.optional(CredentialMapStorage),\n auth: GraphqlSourceAuth,\n});\nconst OperationStorage = Schema.Struct({\n toolId: Schema.String,\n sourceId: Schema.String,\n binding: Schema.Unknown,\n});\nconst decodeSourceStorage = Schema.decodeUnknownOption(SourceStorage);\nconst decodeOperationStorage = Schema.decodeUnknownOption(OperationStorage);\n\nconst normalizeCredentialMap = (\n values: Readonly<Record<string, typeof ConfiguredCredentialValueStorage.Type>> | undefined,\n): Record<string, ConfiguredGraphqlCredentialValue> => {\n if (!values) return {};\n const normalized: Record<string, ConfiguredGraphqlCredentialValue> = {};\n for (const [name, value] of Object.entries(values)) {\n if (typeof value === \"string\") {\n normalized[name] = value;\n continue;\n }\n normalized[name] =\n value.prefix != null\n ? ConfiguredCredentialBinding.make({\n kind: \"binding\",\n slot: value.slot,\n prefix: value.prefix,\n })\n : ConfiguredCredentialBinding.make({\n kind: \"binding\",\n slot: value.slot,\n });\n }\n return normalized;\n};\n\nconst sourceData = (source: StoredGraphqlSource) => ({\n namespace: source.namespace,\n scope: source.scope,\n name: source.name,\n endpoint: source.endpoint,\n headers: source.headers,\n queryParams: source.queryParams,\n auth: source.auth,\n});\n\nconst operationData = (operation: StoredOperation) => ({\n toolId: operation.toolId,\n sourceId: operation.sourceId,\n binding: toJsonRecord(encodeBinding(operation.binding)),\n});\n\nconst rowToSource = (row: PluginStorageEntry): StoredGraphqlSource | null => {\n const decoded = decodeSourceStorage(row.data);\n if (Option.isNone(decoded)) return null;\n const source = decoded.value;\n return {\n namespace: source.namespace,\n scope: source.scope,\n name: source.name,\n endpoint: source.endpoint,\n headers: normalizeCredentialMap(source.headers),\n queryParams: normalizeCredentialMap(source.queryParams),\n auth: source.auth,\n };\n};\n\nconst rowToOperation = (row: PluginStorageEntry): StoredOperation | null => {\n const decoded = decodeOperationStorage(row.data);\n if (Option.isNone(decoded)) return null;\n const operation = decoded.value;\n return {\n toolId: operation.toolId,\n sourceId: operation.sourceId,\n binding: decodeBinding(operation.binding),\n };\n};\n\nexport interface GraphqlStore {\n readonly upsertSource: (\n input: StoredGraphqlSource,\n operations: readonly StoredOperation[],\n ) => Effect.Effect<void, StorageFailure>;\n readonly updateSourceMeta: (\n namespace: string,\n scope: string,\n patch: {\n readonly name?: string;\n readonly endpoint?: string;\n readonly headers?: Record<string, ConfiguredGraphqlCredentialValue>;\n readonly queryParams?: Record<string, ConfiguredGraphqlCredentialValue>;\n readonly auth?: GraphqlSourceAuth;\n },\n ) => Effect.Effect<void, StorageFailure>;\n readonly getSource: (\n namespace: string,\n scope: string,\n ) => Effect.Effect<StoredGraphqlSource | null, StorageFailure>;\n readonly listSources: () => Effect.Effect<readonly StoredGraphqlSource[], StorageFailure>;\n readonly getOperationByToolId: (\n toolId: string,\n scope: string,\n ) => Effect.Effect<StoredOperation | null, StorageFailure>;\n readonly listOperationsBySource: (\n sourceId: string,\n scope: string,\n ) => Effect.Effect<readonly StoredOperation[], StorageFailure>;\n readonly removeSource: (namespace: string, scope: string) => Effect.Effect<void, StorageFailure>;\n}\n\nexport const makeDefaultGraphqlStore = ({\n pluginStorage,\n}: StorageDeps<GraphqlSchema>): GraphqlStore => {\n const listOperationRowsForSourceScope = (sourceId: string, scope: string) =>\n pluginStorage\n .list({\n collection: OPERATION_COLLECTION,\n keyPrefix: `${sourceId}.`,\n })\n .pipe(\n Effect.map((rows) =>\n rows.filter((row) => {\n if (String(row.scopeId) !== scope) return false;\n return rowToOperation(row)?.sourceId === sourceId;\n }),\n ),\n );\n\n const removeOperationsForSourceScope = (sourceId: string, scope: string) =>\n Effect.gen(function* () {\n const rows = yield* listOperationRowsForSourceScope(sourceId, scope);\n for (const row of rows) {\n yield* pluginStorage.remove({\n scope,\n collection: OPERATION_COLLECTION,\n key: row.key,\n });\n }\n });\n\n const deleteSource = (namespace: string, scope: string) =>\n Effect.gen(function* () {\n yield* removeOperationsForSourceScope(namespace, scope);\n yield* pluginStorage.remove({\n scope,\n collection: SOURCE_COLLECTION,\n key: namespace,\n });\n });\n\n return {\n upsertSource: (input, operations) =>\n Effect.gen(function* () {\n yield* deleteSource(input.namespace, input.scope);\n yield* pluginStorage.put({\n scope: input.scope,\n collection: SOURCE_COLLECTION,\n key: input.namespace,\n data: sourceData(input),\n });\n for (const operation of operations) {\n yield* pluginStorage.put({\n scope: input.scope,\n collection: OPERATION_COLLECTION,\n key: operation.toolId,\n data: operationData(operation),\n });\n }\n }),\n\n updateSourceMeta: (namespace, scope, patch) =>\n Effect.gen(function* () {\n const existing = yield* pluginStorage.getAtScope({\n scope,\n collection: SOURCE_COLLECTION,\n key: namespace,\n });\n if (!existing) return;\n const source = rowToSource(existing);\n if (!source) return;\n yield* pluginStorage.put({\n scope,\n collection: SOURCE_COLLECTION,\n key: namespace,\n data: sourceData({\n ...source,\n name: patch.name ?? source.name,\n endpoint: patch.endpoint ?? source.endpoint,\n headers: patch.headers ?? source.headers,\n queryParams: patch.queryParams ?? source.queryParams,\n auth: patch.auth ?? source.auth,\n }),\n });\n }),\n\n getSource: (namespace, scope) =>\n pluginStorage\n .getAtScope({ scope, collection: SOURCE_COLLECTION, key: namespace })\n .pipe(Effect.map((row) => (row ? rowToSource(row) : null))),\n\n listSources: () =>\n pluginStorage\n .list({ collection: SOURCE_COLLECTION })\n .pipe(Effect.map((rows) => rows.map(rowToSource).filter(Predicate.isNotNull))),\n\n getOperationByToolId: (toolId, scope) =>\n pluginStorage\n .getAtScope({ scope, collection: OPERATION_COLLECTION, key: toolId })\n .pipe(Effect.map((row) => (row ? rowToOperation(row) : null))),\n\n listOperationsBySource: (sourceId, scope) =>\n listOperationRowsForSourceScope(sourceId, scope).pipe(\n Effect.map((rows) => rows.map(rowToOperation).filter(Predicate.isNotNull)),\n ),\n\n removeSource: (namespace, scope) => deleteSource(namespace, scope),\n };\n};\n","import { Effect, Match, Option, Schema } from \"effect\";\nimport type { Layer } from \"effect\";\nimport { HttpClient } from \"effect/unstable/http\";\n\nimport {\n type CredentialBindingRef,\n type CredentialBindingValue,\n definePlugin,\n tool,\n defaultSourceInstallScopeId,\n ScopeId,\n SourceDetectionResult,\n StorageError,\n ToolResult,\n type PluginCtx,\n type StorageFailure,\n type ToolAnnotations,\n type ToolRow,\n} from \"@executor-js/sdk/core\";\nimport {\n compileHttpNamedCredentialMap,\n OAuth2SourceConfig,\n httpCredentialInputToBindingValue,\n type HttpConfiguredValueInput,\n} from \"@executor-js/sdk/http-source\";\n\nimport {\n headersToConfigValues,\n type ConfigFileSink,\n type GraphqlSourceConfig as GraphqlConfigEntry,\n} from \"@executor-js/config\";\n\nimport {\n introspect,\n parseIntrospectionJson,\n type IntrospectionResult,\n type IntrospectionType,\n type IntrospectionField,\n type IntrospectionTypeRef,\n} from \"./introspect\";\nimport { extract } from \"./extract\";\nimport { GraphqlIntrospectionError, GraphqlInvocationError } from \"./errors\";\nimport { invokeWithLayer } from \"./invoke\";\nimport { graphqlPresets } from \"./presets\";\nimport {\n graphqlSchema,\n makeDefaultGraphqlStore,\n type GraphqlStore,\n type StoredGraphqlSource,\n type StoredOperation,\n} from \"./store\";\nimport {\n ExtractedField,\n GraphqlConfiguredValueInput as GraphqlConfiguredValueInputSchema,\n GRAPHQL_OAUTH_CONNECTION_SLOT,\n GraphqlCredentialInput as GraphqlCredentialInputSchema,\n GraphqlSourceAuthInput as GraphqlSourceAuthInputSchema,\n graphqlHeaderSlot,\n graphqlQueryParamSlot,\n OperationBinding,\n type ConfiguredGraphqlCredentialValue,\n type GraphqlConfiguredValueInput,\n type GraphqlCredentialInput,\n type GraphqlSourceAuth,\n type HeaderValue as HeaderValueValue,\n type GraphqlSourceAuthInput,\n type GraphqlOperationKind,\n} from \"./types\";\n\n// ---------------------------------------------------------------------------\n// Plugin config\n// ---------------------------------------------------------------------------\n\nconst GraphqlErrorBody = Schema.Struct({ message: Schema.String });\nconst GraphqlErrorsBody = Schema.Array(Schema.Unknown);\nconst decodeGraphqlErrorBody = Schema.decodeUnknownOption(GraphqlErrorBody);\nconst decodeGraphqlErrorsBody = Schema.decodeUnknownOption(GraphqlErrorsBody);\n\nconst decodeGraphqlErrors = (errors: unknown): readonly unknown[] | undefined =>\n Option.getOrUndefined(decodeGraphqlErrorsBody(errors));\n\nconst extractGraphqlErrorMessage = (errors: readonly unknown[]): string | undefined =>\n errors\n .map((error) => Option.getOrUndefined(decodeGraphqlErrorBody(error))?.message)\n .find((message) => message !== undefined && message.length > 0);\n\nexport type HeaderValue = HeaderValueValue;\nexport type GraphqlCredentialValue = ConfiguredGraphqlCredentialValue;\n\nexport interface GraphqlSourceConfig {\n /** The GraphQL endpoint URL */\n readonly endpoint: string;\n /**\n * Executor scope id that owns this source row. Must be one of the\n * executor's configured scopes. Typical shape: an admin adds the\n * source at the outermost (organization) scope so it's visible to\n * every inner (per-user) scope via fall-through reads.\n */\n readonly scope: string;\n /** Display name for the source. */\n readonly name: string;\n /** Optional: introspection JSON text (if endpoint doesn't support introspection) */\n readonly introspectionJson?: string;\n /** Namespace for the tools. */\n readonly namespace: string;\n /** Headers applied to every request. Secret entries declare source-owned slots. */\n readonly headers?: Record<string, GraphqlConfiguredValueInput>;\n /** Query parameters applied to every request. Secret entries declare source-owned slots. */\n readonly queryParams?: Record<string, GraphqlConfiguredValueInput>;\n /** Optional OAuth2 credential used as a Bearer token for every request. */\n readonly oauth2?: OAuth2SourceConfig;\n /** Initial credential bindings used while adding and introspecting this source. */\n readonly credentials?: GraphqlInitialCredentialsInput;\n}\n\nconst GraphqlInitialCredentialsInputSchema = Schema.Struct({\n scope: Schema.String,\n headers: Schema.optional(Schema.Record(Schema.String, GraphqlCredentialInputSchema)),\n queryParams: Schema.optional(Schema.Record(Schema.String, GraphqlCredentialInputSchema)),\n auth: Schema.optional(GraphqlSourceAuthInputSchema),\n});\ntype GraphqlInitialCredentialsInput = typeof GraphqlInitialCredentialsInputSchema.Type;\n\nconst StaticAddSourceInputSchema = Schema.Struct({\n endpoint: Schema.String,\n name: Schema.String,\n introspectionJson: Schema.optional(Schema.String),\n namespace: Schema.String,\n headers: Schema.optional(Schema.Record(Schema.String, GraphqlConfiguredValueInputSchema)),\n queryParams: Schema.optional(Schema.Record(Schema.String, GraphqlConfiguredValueInputSchema)),\n oauth2: Schema.optional(OAuth2SourceConfig),\n credentials: Schema.optional(GraphqlInitialCredentialsInputSchema),\n});\nconst SourceConfigureInputSchema = Schema.Struct({\n name: Schema.optional(Schema.String),\n endpoint: Schema.optional(Schema.String),\n headers: Schema.optional(Schema.Record(Schema.String, GraphqlCredentialInputSchema)),\n queryParams: Schema.optional(Schema.Record(Schema.String, GraphqlCredentialInputSchema)),\n auth: Schema.optional(GraphqlSourceAuthInputSchema),\n});\nconst StaticConfigureSourceInputSchema = Schema.Struct({\n source: Schema.Struct({\n id: Schema.String,\n scope: Schema.String,\n }),\n scope: Schema.String,\n ...SourceConfigureInputSchema.fields,\n});\nconst StaticConfigureSourceOutputSchema = Schema.Struct({\n configured: Schema.Boolean,\n});\nconst StaticGetSourceInputSchema = Schema.Struct({\n namespace: Schema.String,\n scope: Schema.String,\n});\nconst StaticGetSourceOutputSchema = Schema.Struct({\n source: Schema.NullOr(Schema.Unknown),\n});\n\nconst StaticAddSourceInputStandardSchema = Schema.toStandardSchemaV1(\n Schema.toStandardJSONSchemaV1(StaticAddSourceInputSchema),\n);\nconst StaticAddSourceOutputStandardSchema = Schema.toStandardSchemaV1(\n Schema.toStandardJSONSchemaV1(\n Schema.Struct({\n namespace: Schema.String,\n source: Schema.Struct({\n id: Schema.String,\n scope: Schema.String,\n }),\n toolCount: Schema.Number,\n }),\n ),\n);\nconst StaticGetSourceInputStandardSchema = Schema.toStandardSchemaV1(\n Schema.toStandardJSONSchemaV1(StaticGetSourceInputSchema),\n);\nconst StaticGetSourceOutputStandardSchema = Schema.toStandardSchemaV1(\n Schema.toStandardJSONSchemaV1(StaticGetSourceOutputSchema),\n);\nconst StaticConfigureSourceInputStandardSchema = Schema.toStandardSchemaV1(\n Schema.toStandardJSONSchemaV1(StaticConfigureSourceInputSchema),\n);\nconst StaticConfigureSourceOutputStandardSchema = Schema.toStandardSchemaV1(\n Schema.toStandardJSONSchemaV1(StaticConfigureSourceOutputSchema),\n);\n\nconst graphqlToolFailure = (code: string, message: string, details?: unknown) =>\n ToolResult.fail({\n code,\n message,\n ...(details === undefined ? {} : { details }),\n });\n\nconst resolveStaticScopeInput = (\n ctx: { readonly scopes: readonly { readonly id: ScopeId; readonly name: string }[] },\n value: string,\n): string =>\n String(\n ctx.scopes.find((scope) => scope.name === value || String(scope.id) === value)?.id ?? value,\n );\n\n// ---------------------------------------------------------------------------\n// Plugin extension\n// ---------------------------------------------------------------------------\n\nexport interface GraphqlSourceRef {\n readonly id: string;\n readonly scope: string;\n}\n\nexport interface GraphqlConfigureSourceInput {\n readonly scope: string;\n readonly name?: string;\n readonly endpoint?: string;\n readonly headers?: Record<string, GraphqlCredentialInput>;\n readonly queryParams?: Record<string, GraphqlCredentialInput>;\n readonly auth?: GraphqlSourceAuthInput;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Match `token` as a separator-bounded run inside a URL hostname or path,\n * used as a low-confidence detection hint when introspection fails.\n * Boundary chars are everything non-alphanumeric, so `/api/graphql`,\n * `graphql.example.com`, `graphql-api`, and `graphql_v2` all match while\n * `graphqlserver` and `/graphqlite` do not. */\nconst urlMatchesToken = (url: URL, token: string): boolean => {\n const re = new RegExp(`(?:^|[^a-z0-9])${token}(?:$|[^a-z0-9])`, \"i\");\n return re.test(url.hostname) || re.test(url.pathname);\n};\n\n/** Derive a namespace from an endpoint URL */\nconst namespaceFromEndpoint = (endpoint: string): string => {\n // oxlint-disable-next-line executor/no-try-catch-or-throw -- boundary: URL construction throws; this helper intentionally falls back to the stable default namespace\n try {\n const url = new URL(endpoint);\n return url.hostname.replace(/[^a-z0-9]+/gi, \"_\").toLowerCase();\n } catch {\n return \"graphql\";\n }\n};\n\nconst formatTypeRef = (ref: IntrospectionTypeRef): string =>\n Match.value(ref.kind).pipe(\n Match.when(\"NON_NULL\", () => (ref.ofType ? `${formatTypeRef(ref.ofType)}!` : \"Unknown!\")),\n Match.when(\"LIST\", () => (ref.ofType ? `[${formatTypeRef(ref.ofType)}]` : \"[Unknown]\")),\n Match.option,\n Option.getOrElse(() => ref.name ?? \"Unknown\"),\n );\n\nconst unwrapTypeName = (ref: IntrospectionTypeRef): string => {\n if (ref.name) return ref.name;\n if (ref.ofType) return unwrapTypeName(ref.ofType);\n return \"Unknown\";\n};\n\nconst buildSelectionSet = (\n ref: IntrospectionTypeRef,\n types: ReadonlyMap<string, IntrospectionType>,\n depth: number,\n seen: Set<string>,\n): string => {\n if (depth > 2) return \"\";\n\n const leafName = unwrapTypeName(ref);\n if (seen.has(leafName)) return \"\";\n\n const objectType = types.get(leafName);\n if (!objectType?.fields) return \"\";\n\n const kind = objectType.kind;\n if (kind === \"SCALAR\" || kind === \"ENUM\") return \"\";\n\n seen.add(leafName);\n\n const subFields = objectType.fields\n .filter((f) => !f.name.startsWith(\"__\"))\n .slice(0, 12)\n .map((f) => {\n const sub = buildSelectionSet(f.type, types, depth + 1, seen);\n return sub ? `${f.name} ${sub}` : f.name;\n });\n\n seen.delete(leafName);\n\n return subFields.length > 0 ? `{ ${subFields.join(\" \")} }` : \"\";\n};\n\nconst buildOperationStringForField = (\n kind: GraphqlOperationKind,\n field: IntrospectionField,\n types: ReadonlyMap<string, IntrospectionType>,\n): string => {\n const opType = kind === \"query\" ? \"query\" : \"mutation\";\n\n const varDefs = field.args.map((arg) => {\n const typeName = formatTypeRef(arg.type);\n return `$${arg.name}: ${typeName}`;\n });\n\n const argPasses = field.args.map((arg) => `${arg.name}: $${arg.name}`);\n const selectionSet = buildSelectionSet(field.type, types, 0, new Set());\n\n const varDefsStr = varDefs.length > 0 ? `(${varDefs.join(\", \")})` : \"\";\n const argPassStr = argPasses.length > 0 ? `(${argPasses.join(\", \")})` : \"\";\n\n return `${opType}${varDefsStr} { ${field.name}${argPassStr}${selectionSet ? ` ${selectionSet}` : \"\"} }`;\n};\n\ninterface PreparedOperation {\n readonly toolPath: string;\n readonly description: string;\n readonly inputSchema: unknown;\n readonly binding: OperationBinding;\n}\n\nconst prepareOperations = (\n fields: readonly ExtractedField[],\n introspection: IntrospectionResult,\n): readonly PreparedOperation[] => {\n const typeMap = new Map<string, IntrospectionType>();\n for (const t of introspection.__schema.types) {\n typeMap.set(t.name, t);\n }\n\n const fieldMap = new Map<string, { kind: GraphqlOperationKind; field: IntrospectionField }>();\n const schema = introspection.__schema;\n for (const rootKind of [\"query\", \"mutation\"] as const) {\n const typeName = rootKind === \"query\" ? schema.queryType?.name : schema.mutationType?.name;\n if (!typeName) continue;\n const rootType = typeMap.get(typeName);\n if (!rootType?.fields) continue;\n for (const f of rootType.fields) {\n if (!f.name.startsWith(\"__\")) {\n fieldMap.set(`${rootKind}.${f.name}`, { kind: rootKind, field: f });\n }\n }\n }\n\n return fields.map((extracted) => {\n const prefix = extracted.kind === \"mutation\" ? \"mutation\" : \"query\";\n const toolPath = `${prefix}.${extracted.fieldName}`;\n const description = Option.getOrElse(\n extracted.description,\n () => `GraphQL ${extracted.kind}: ${extracted.fieldName} -> ${extracted.returnTypeName}`,\n );\n\n const key = `${extracted.kind}.${extracted.fieldName}`;\n const entry = fieldMap.get(key);\n const operationString = entry\n ? buildOperationStringForField(entry.kind, entry.field, typeMap)\n : `${extracted.kind} { ${extracted.fieldName} }`;\n\n const binding = OperationBinding.make({\n kind: extracted.kind,\n fieldName: extracted.fieldName,\n operationString,\n variableNames: extracted.arguments.map((a) => a.name),\n });\n\n return {\n toolPath,\n description,\n inputSchema: Option.getOrUndefined(extracted.inputSchema),\n binding,\n };\n });\n};\n\nconst annotationsFor = (binding: OperationBinding): ToolAnnotations => {\n if (binding.kind === \"mutation\") {\n return {\n requiresApproval: true,\n approvalDescription: `mutation ${binding.fieldName}`,\n };\n }\n return {};\n};\n\n// ---------------------------------------------------------------------------\n// Plugin factory\n// ---------------------------------------------------------------------------\n\nexport interface GraphqlPluginOptions {\n readonly httpClientLayer?: Layer.Layer<HttpClient.HttpClient>;\n /** If provided, source add/remove is mirrored to executor.jsonc\n * (best-effort — file errors are logged, not raised). */\n readonly configFile?: ConfigFileSink;\n}\n\nconst toGraphqlConfigEntry = (\n namespace: string,\n config: GraphqlSourceConfig,\n): GraphqlConfigEntry => {\n const headers: Record<string, HeaderValue> = {};\n for (const [name, value] of Object.entries(config.headers ?? {})) {\n if (typeof value === \"string\" || !(\"kind\" in value)) {\n headers[name] = value;\n }\n }\n return {\n kind: \"graphql\",\n endpoint: config.endpoint,\n introspectionJson: config.introspectionJson,\n namespace,\n headers: headersToConfigValues(Object.keys(headers).length > 0 ? headers : undefined),\n };\n};\n\nconst GRAPHQL_PLUGIN_ID = \"graphql\";\n\nconst scopeRanks = (ctx: PluginCtx<GraphqlStore>): ReadonlyMap<string, number> =>\n new Map(ctx.scopes.map((scope, index) => [String(scope.id), index]));\n\nconst scopeRank = (ranks: ReadonlyMap<string, number>, scopeId: string): number =>\n ranks.get(scopeId) ?? Infinity;\n\nconst resolveGraphqlSourceBinding = (\n ctx: PluginCtx<GraphqlStore>,\n sourceId: string,\n sourceScope: string,\n slot: string,\n): Effect.Effect<CredentialBindingRef | null, StorageFailure> =>\n Effect.gen(function* () {\n const ranks = scopeRanks(ctx);\n const sourceSourceRank = scopeRank(ranks, sourceScope);\n if (sourceSourceRank === Infinity) return null;\n const bindings = yield* ctx.credentialBindings.listForSource({\n pluginId: GRAPHQL_PLUGIN_ID,\n sourceId,\n sourceScope: ScopeId.make(sourceScope),\n });\n const binding = bindings\n .filter(\n (candidate) =>\n candidate.slotKey === slot && scopeRank(ranks, candidate.scopeId) <= sourceSourceRank,\n )\n .sort((a, b) => scopeRank(ranks, a.scopeId) - scopeRank(ranks, b.scopeId))[0];\n return binding ?? null;\n });\n\nconst validateGraphqlBindingTarget = (\n ctx: PluginCtx<GraphqlStore>,\n input: {\n readonly sourceScope: string;\n readonly targetScope: string;\n readonly sourceId: string;\n },\n): Effect.Effect<void, StorageFailure> =>\n Effect.gen(function* () {\n const ranks = scopeRanks(ctx);\n const sourceSourceRank = scopeRank(ranks, input.sourceScope);\n const targetRank = scopeRank(ranks, input.targetScope);\n const scopeList = `[${ctx.scopes.map((s) => s.id).join(\", \")}]`;\n if (sourceSourceRank === Infinity) {\n return yield* new StorageError({\n message:\n `GraphQL source binding references source scope \"${input.sourceScope}\" ` +\n `which is not in the executor's scope stack ${scopeList}.`,\n cause: undefined,\n });\n }\n if (targetRank === Infinity) {\n return yield* new StorageError({\n message:\n `GraphQL source binding targets scope \"${input.targetScope}\" which is not ` +\n `in the executor's scope stack ${scopeList}.`,\n cause: undefined,\n });\n }\n if (targetRank > sourceSourceRank) {\n return yield* new StorageError({\n message:\n `GraphQL source bindings for \"${input.sourceId}\" cannot be written at ` +\n `outer scope \"${input.targetScope}\" because the base source lives at ` +\n `\"${input.sourceScope}\"`,\n cause: undefined,\n });\n }\n });\n\nconst canonicalizeCredentialMap = compileHttpNamedCredentialMap;\n\nconst canonicalizeConfiguredValueMap = (\n values: Record<string, GraphqlConfiguredValueInput> | undefined,\n slotForName: (name: string) => string,\n): Record<string, ConfiguredGraphqlCredentialValue> => {\n const next: Record<string, ConfiguredGraphqlCredentialValue> = {};\n for (const [name, value] of Object.entries(values ?? {})) {\n if (typeof value === \"string\") {\n next[name] = value;\n continue;\n }\n next[name] = {\n kind: \"binding\",\n slot: slotForName(name),\n prefix: value.prefix,\n };\n }\n return next;\n};\n\nconst resolveConfiguredValueMap = (\n values: Record<string, HttpConfiguredValueInput> | undefined,\n): Record<string, string> | undefined => {\n if (!values) return undefined;\n const resolved: Record<string, string> = {};\n for (const [name, value] of Object.entries(values)) {\n if (typeof value === \"string\") resolved[name] = value;\n }\n return Object.keys(resolved).length > 0 ? resolved : undefined;\n};\n\nconst authFromOAuth2Source = (oauth2: OAuth2SourceConfig | undefined): GraphqlSourceAuth =>\n oauth2 ? { kind: \"oauth2\", connectionSlot: oauth2.connectionSlot } : { kind: \"none\" };\n\nconst canonicalizeAuth = (\n auth: GraphqlSourceAuthInput | undefined,\n): {\n readonly auth: GraphqlSourceAuth;\n readonly bindings: ReadonlyArray<{\n readonly slot: string;\n readonly value: CredentialBindingValue;\n readonly targetScope?: string;\n }>;\n} => {\n if (!auth || \"kind\" in auth || !auth.oauth2) return { auth: { kind: \"none\" }, bindings: [] };\n const connection = auth.oauth2.connection;\n return {\n auth: { kind: \"oauth2\", connectionSlot: GRAPHQL_OAUTH_CONNECTION_SLOT },\n bindings: connection\n ? [\n {\n slot: GRAPHQL_OAUTH_CONNECTION_SLOT,\n value: httpCredentialInputToBindingValue(connection),\n },\n ]\n : [],\n };\n};\n\nconst resolveInitialCredentialValueMap = (\n ctx: PluginCtx<GraphqlStore>,\n values: Record<string, ConfiguredGraphqlCredentialValue>,\n bindings: ReadonlyArray<{ readonly slot: string; readonly value: CredentialBindingValue }>,\n targetScope: string,\n): Effect.Effect<Record<string, string> | undefined, GraphqlIntrospectionError | StorageFailure> =>\n Effect.gen(function* () {\n const bySlot = new Map(bindings.map((binding) => [binding.slot, binding.value] as const));\n const resolved: Record<string, string> = {};\n for (const [name, value] of Object.entries(values)) {\n if (typeof value === \"string\") {\n resolved[name] = value;\n continue;\n }\n const binding = bySlot.get(value.slot);\n if (binding?.kind === \"secret\") {\n const secret = yield* ctx.secrets\n .getAtScope(binding.secretId, binding.secretScopeId ?? ScopeId.make(targetScope))\n .pipe(\n Effect.catchTag(\"SecretOwnedByConnectionError\", () =>\n Effect.fail(\n new GraphqlIntrospectionError({\n message: `Secret not found for ${name}`,\n }),\n ),\n ),\n );\n if (secret === null) {\n return yield* new GraphqlIntrospectionError({\n message: `Missing secret \"${binding.secretId}\" for ${name}`,\n });\n }\n resolved[name] = value.prefix ? `${value.prefix}${secret}` : secret;\n continue;\n }\n if (binding?.kind === \"text\") {\n resolved[name] = value.prefix ? `${value.prefix}${binding.text}` : binding.text;\n }\n }\n return Object.keys(resolved).length > 0 ? resolved : undefined;\n });\n\nconst resolveInitialOAuthHeaders = (\n ctx: PluginCtx<GraphqlStore>,\n bindings: ReadonlyArray<{ readonly slot: string; readonly value: CredentialBindingValue }>,\n targetScope: string,\n): Effect.Effect<Record<string, string> | undefined, GraphqlIntrospectionError | StorageFailure> =>\n Effect.gen(function* () {\n const connection = bindings.find(\n (binding) =>\n binding.slot === GRAPHQL_OAUTH_CONNECTION_SLOT && binding.value.kind === \"connection\",\n );\n if (!connection || connection.value.kind !== \"connection\") return undefined;\n const connectionId = connection.value.connectionId;\n const accessToken = yield* ctx.connections\n .accessTokenAtScope(connectionId, ScopeId.make(targetScope))\n .pipe(\n Effect.mapError(\n ({ message }) =>\n new GraphqlIntrospectionError({\n message: `Failed to resolve OAuth connection \"${connectionId}\": ${message}`,\n }),\n ),\n );\n return { Authorization: `Bearer ${accessToken}` };\n });\n\nconst resolveGraphqlBindingValueMap = <E>(\n ctx: PluginCtx<GraphqlStore>,\n values: Record<string, ConfiguredGraphqlCredentialValue> | undefined,\n params: {\n readonly sourceId: string;\n readonly sourceScope: string;\n readonly missingLabel: string;\n readonly makeError: (message: string) => E;\n },\n): Effect.Effect<Record<string, string> | undefined, E | StorageFailure> =>\n Effect.gen(function* () {\n if (!values) return undefined;\n const resolved: Record<string, string> = {};\n for (const [name, value] of Object.entries(values)) {\n if (typeof value === \"string\") {\n resolved[name] = value;\n continue;\n }\n const binding = yield* resolveGraphqlSourceBinding(\n ctx,\n params.sourceId,\n params.sourceScope,\n value.slot,\n );\n if (binding?.value.kind === \"secret\") {\n const secret = yield* ctx.secrets\n .getAtScope(binding.value.secretId, binding.scopeId)\n .pipe(\n Effect.catchTag(\"SecretOwnedByConnectionError\", () =>\n Effect.fail(\n params.makeError(`Secret not found for ${params.missingLabel} \"${name}\"`),\n ),\n ),\n );\n if (secret === null) {\n return yield* Effect.fail(\n params.makeError(\n `Missing secret \"${binding.value.secretId}\" for ${params.missingLabel} \"${name}\"`,\n ),\n );\n }\n resolved[name] = value.prefix ? `${value.prefix}${secret}` : secret;\n continue;\n }\n if (binding?.value.kind === \"text\") {\n resolved[name] = value.prefix ? `${value.prefix}${binding.value.text}` : binding.value.text;\n continue;\n }\n return yield* Effect.fail(\n params.makeError(`Missing binding for ${params.missingLabel} \"${name}\"`),\n );\n }\n return Object.keys(resolved).length > 0 ? resolved : undefined;\n });\n\nconst resolveGraphqlStoredOAuthHeader = (\n ctx: PluginCtx<GraphqlStore>,\n sourceId: string,\n sourceScope: string,\n auth: GraphqlSourceAuth | undefined,\n) =>\n Effect.gen(function* () {\n if (!auth || auth.kind === \"none\") return undefined;\n const binding = yield* resolveGraphqlSourceBinding(\n ctx,\n sourceId,\n sourceScope,\n auth.connectionSlot,\n );\n if (binding?.value.kind !== \"connection\") {\n return yield* new GraphqlInvocationError({\n message: `Missing OAuth connection binding for GraphQL source \"${sourceId}\"`,\n statusCode: Option.none(),\n });\n }\n const accessToken = yield* ctx.connections.accessTokenAtScope(\n binding.value.connectionId,\n binding.scopeId,\n );\n return { Authorization: `Bearer ${accessToken}` };\n });\n\nconst makeGraphqlExtension = (\n ctx: PluginCtx<GraphqlStore>,\n httpClientLayer: Layer.Layer<HttpClient.HttpClient>,\n configFile: ConfigFileSink | undefined,\n) => {\n const addSourceInternal = (config: GraphqlSourceConfig) =>\n ctx.transaction(\n Effect.gen(function* () {\n const namespace = config.namespace;\n const canonicalHeaders = canonicalizeConfiguredValueMap(config.headers, graphqlHeaderSlot);\n const canonicalQueryParams = canonicalizeConfiguredValueMap(\n config.queryParams,\n graphqlQueryParamSlot,\n );\n const initialHeaders =\n config.credentials?.headers !== undefined\n ? canonicalizeCredentialMap(config.credentials.headers, graphqlHeaderSlot)\n : null;\n const initialQueryParams =\n config.credentials?.queryParams !== undefined\n ? canonicalizeCredentialMap(config.credentials.queryParams, graphqlQueryParamSlot)\n : null;\n const initialAuth =\n config.credentials?.auth !== undefined ? canonicalizeAuth(config.credentials.auth) : null;\n const auth = config.oauth2\n ? authFromOAuth2Source(config.oauth2)\n : (initialAuth?.auth ?? { kind: \"none\" });\n const initialBindings = [\n ...(initialHeaders?.bindings ?? []),\n ...(initialQueryParams?.bindings ?? []),\n ...(initialAuth?.bindings ?? []),\n ];\n const initialScope = config.credentials?.scope;\n if (initialScope && initialBindings.length > 0) {\n yield* validateGraphqlBindingTarget(ctx, {\n sourceId: namespace,\n sourceScope: config.scope,\n targetScope: initialScope,\n });\n }\n\n let introspectionResult: IntrospectionResult;\n if (config.introspectionJson) {\n introspectionResult = yield* parseIntrospectionJson(config.introspectionJson);\n } else {\n const resolvedInitialHeaders =\n initialHeaders && initialScope\n ? yield* resolveInitialCredentialValueMap(\n ctx,\n canonicalHeaders,\n initialHeaders.bindings,\n initialScope,\n )\n : undefined;\n const resolvedOAuthHeaders =\n initialAuth && initialScope\n ? yield* resolveInitialOAuthHeaders(ctx, initialAuth.bindings, initialScope)\n : undefined;\n const resolvedHeaders = {\n ...(resolveConfiguredValueMap(config.headers) ?? {}),\n ...(resolvedInitialHeaders ?? {}),\n ...(resolvedOAuthHeaders ?? {}),\n };\n const resolvedInitialQueryParams =\n initialQueryParams && initialScope\n ? yield* resolveInitialCredentialValueMap(\n ctx,\n canonicalQueryParams,\n initialQueryParams.bindings,\n initialScope,\n )\n : undefined;\n const resolvedQueryParams = {\n ...(resolveConfiguredValueMap(config.queryParams) ?? {}),\n ...(resolvedInitialQueryParams ?? {}),\n };\n introspectionResult = yield* introspect(\n config.endpoint,\n Object.keys(resolvedHeaders).length > 0 ? resolvedHeaders : undefined,\n Object.keys(resolvedQueryParams).length > 0 ? resolvedQueryParams : undefined,\n ).pipe(Effect.provide(httpClientLayer));\n }\n\n const { result, definitions } = yield* extract(introspectionResult);\n const prepared = prepareOperations(result.fields, introspectionResult);\n\n const displayName = config.name?.trim() || namespace;\n\n const storedSource: StoredGraphqlSource = {\n namespace,\n scope: config.scope,\n name: displayName,\n endpoint: config.endpoint,\n headers: canonicalHeaders,\n queryParams: canonicalQueryParams,\n auth,\n };\n\n const storedOps: StoredOperation[] = prepared.map((p) => ({\n toolId: `${namespace}.${p.toolPath}`,\n sourceId: namespace,\n binding: p.binding,\n }));\n\n yield* ctx.storage.upsertSource(storedSource, storedOps);\n yield* ctx.core.sources.register({\n id: namespace,\n scope: config.scope,\n kind: \"graphql\",\n name: displayName,\n url: config.endpoint,\n canRemove: true,\n canRefresh: false,\n canEdit: true,\n tools: prepared.map((p) => ({\n name: p.toolPath,\n description: p.description,\n inputSchema: p.inputSchema,\n })),\n });\n if (initialScope && initialBindings.length > 0) {\n yield* ctx.credentialBindings.replaceForSource({\n targetScope: ScopeId.make(initialScope),\n pluginId: GRAPHQL_PLUGIN_ID,\n sourceId: namespace,\n sourceScope: ScopeId.make(config.scope),\n slotPrefixes: [\n ...(config.credentials?.headers !== undefined ? [\"header:\"] : []),\n ...(config.credentials?.queryParams !== undefined ? [\"query_param:\"] : []),\n ...(config.credentials?.auth !== undefined ? [\"auth:\"] : []),\n ],\n bindings: initialBindings.map((binding) => ({\n slotKey: binding.slot,\n value: binding.value,\n })),\n });\n }\n\n if (Object.keys(definitions).length > 0) {\n yield* ctx.core.definitions.register({\n sourceId: namespace,\n scope: config.scope,\n definitions,\n });\n }\n\n return { toolCount: prepared.length, namespace };\n }),\n );\n\n const configureSource = (\n namespace: string,\n scope: string,\n targetScope: string,\n input: Omit<GraphqlConfigureSourceInput, \"scope\">,\n ) =>\n Effect.gen(function* () {\n const existing = yield* ctx.storage.getSource(namespace, scope);\n if (!existing) return;\n const canonicalHeaders =\n input.headers !== undefined\n ? canonicalizeCredentialMap(input.headers, graphqlHeaderSlot)\n : null;\n const canonicalQueryParams =\n input.queryParams !== undefined\n ? canonicalizeCredentialMap(input.queryParams, graphqlQueryParamSlot)\n : null;\n const canonicalAuth = input.auth !== undefined ? canonicalizeAuth(input.auth) : null;\n const directBindings = [\n ...(canonicalHeaders?.bindings ?? []),\n ...(canonicalQueryParams?.bindings ?? []),\n ...(canonicalAuth?.bindings ?? []),\n ];\n if (directBindings.length > 0) {\n yield* validateGraphqlBindingTarget(ctx, {\n sourceId: namespace,\n sourceScope: scope,\n targetScope,\n });\n }\n const affectedPrefixes = [\n ...(input.headers !== undefined ? [\"header:\"] : []),\n ...(input.queryParams !== undefined ? [\"query_param:\"] : []),\n ...(input.auth !== undefined ? [\"auth:\"] : []),\n ];\n yield* ctx.transaction(\n Effect.gen(function* () {\n yield* ctx.storage.updateSourceMeta(namespace, scope, {\n name: input.name?.trim() || undefined,\n endpoint: input.endpoint,\n headers: canonicalHeaders?.values,\n queryParams: canonicalQueryParams?.values,\n auth: canonicalAuth?.auth,\n });\n if (affectedPrefixes.length > 0 || directBindings.length > 0) {\n yield* ctx.credentialBindings.replaceForSource({\n targetScope: ScopeId.make(targetScope),\n pluginId: GRAPHQL_PLUGIN_ID,\n sourceId: namespace,\n sourceScope: ScopeId.make(scope),\n slotPrefixes: affectedPrefixes,\n bindings: directBindings.map((binding) => ({\n slotKey: binding.slot,\n value: binding.value,\n })),\n });\n }\n }),\n );\n });\n\n return {\n addSource: (config: GraphqlSourceConfig) =>\n addSourceInternal(config).pipe(\n Effect.tap((result) =>\n configFile\n ? configFile.upsertSource(toGraphqlConfigEntry(result.namespace, config))\n : Effect.void,\n ),\n ),\n\n removeSource: (namespace: string, scope: string) =>\n Effect.gen(function* () {\n yield* ctx.transaction(\n Effect.gen(function* () {\n yield* ctx.credentialBindings.removeForSource({\n pluginId: GRAPHQL_PLUGIN_ID,\n sourceId: namespace,\n sourceScope: ScopeId.make(scope),\n });\n yield* ctx.storage.removeSource(namespace, scope);\n yield* ctx.core.sources.unregister({ id: namespace, targetScope: scope });\n }),\n );\n if (configFile) {\n yield* configFile.removeSource(namespace);\n }\n }),\n\n getSource: (namespace: string, scope: string) => ctx.storage.getSource(namespace, scope),\n\n configureSource,\n\n configure: (source: GraphqlSourceRef, input: GraphqlConfigureSourceInput) =>\n configureSource(source.id, source.scope, input.scope, input),\n };\n};\n\nexport type GraphqlPluginExtension = ReturnType<typeof makeGraphqlExtension>;\n\nexport const graphqlPlugin = definePlugin((options?: GraphqlPluginOptions) => {\n return {\n id: \"graphql\" as const,\n packageName: \"@executor-js/plugin-graphql\",\n sourcePresets: graphqlPresets,\n schema: graphqlSchema,\n storage: (deps): GraphqlStore => makeDefaultGraphqlStore(deps),\n\n extension: (ctx) =>\n makeGraphqlExtension(\n ctx,\n options?.httpClientLayer ?? ctx.httpClientLayer,\n options?.configFile,\n ),\n\n sourceConfigure: {\n type: \"graphql\",\n schema: SourceConfigureInputSchema,\n configure: ({ ctx, sourceId, sourceScope, targetScope, config }) =>\n makeGraphqlExtension(\n ctx,\n options?.httpClientLayer ?? ctx.httpClientLayer,\n options?.configFile,\n ).configureSource(\n sourceId,\n sourceScope,\n targetScope,\n config as GraphqlConfigureSourceInput,\n ),\n },\n\n staticSources: (self) => [\n {\n id: \"graphql\",\n kind: \"executor\",\n name: \"GraphQL\",\n tools: [\n tool({\n name: \"getSource\",\n description:\n \"Inspect an existing GraphQL source, including endpoint, auth mode, configured headers/query params, and credential slots. Use this before repairing an existing source with `graphql.configureSource`, `secrets.create`, or `oauth.start`.\",\n inputSchema: StaticGetSourceInputStandardSchema,\n outputSchema: StaticGetSourceOutputStandardSchema,\n execute: (input, { ctx }) =>\n Effect.map(\n self.getSource(input.namespace, resolveStaticScopeInput(ctx, input.scope)),\n (source) => ToolResult.ok({ source }),\n ),\n }),\n tool({\n name: \"addSource\",\n description:\n \"Add a GraphQL endpoint and register its operations as tools. Executor chooses the source install scope (local scope locally, organization scope in cloud) and returns it as `source`. For API keys or bearer tokens, first call `executor.coreTools.secrets.create` at the user's chosen credential scope and pass secret refs through `credentials`. For OAuth, start the browser flow with `executor.coreTools.oauth.start` using `credentialScope` set to the user's chosen personal or organization credential scope, verify completion with `connections.list`, then bind the connection through `credentials` or `graphql.configureSource`.\",\n annotations: {\n requiresApproval: true,\n approvalDescription: \"Add a GraphQL source\",\n },\n inputSchema: StaticAddSourceInputStandardSchema,\n outputSchema: StaticAddSourceOutputStandardSchema,\n execute: (input, { ctx }) => {\n const sourceScope = defaultSourceInstallScopeId(ctx.scopes);\n if (sourceScope === null) {\n return Effect.succeed(\n graphqlToolFailure(\n \"source_scope_unavailable\",\n \"Cannot add a GraphQL source because this executor has no source install scope.\",\n ),\n );\n }\n return self.addSource({ ...input, scope: sourceScope }).pipe(\n Effect.map((result) =>\n ToolResult.ok({\n ...result,\n source: { id: result.namespace, scope: sourceScope },\n }),\n ),\n Effect.catchTags({\n GraphqlIntrospectionError: ({ message }) =>\n Effect.succeed(graphqlToolFailure(\"graphql_introspection_failed\", message)),\n GraphqlExtractionError: ({ message }) =>\n Effect.succeed(graphqlToolFailure(\"graphql_extraction_failed\", message)),\n }),\n );\n },\n }),\n tool({\n name: \"configureSource\",\n description:\n 'Configure an existing GraphQL source with concrete fields. Use `source` returned by `graphql.addSource` or `sources.list`. The top-level `scope` is the credential target scope for bindings; in cloud, choose the user or organization credential scope deliberately. Pass secret refs as `{kind:\"secret\", secretId}` and OAuth connections as `{kind:\"connection\", connectionId}`.',\n annotations: {\n requiresApproval: true,\n approvalDescription: \"Configure a GraphQL source\",\n },\n inputSchema: StaticConfigureSourceInputStandardSchema,\n outputSchema: StaticConfigureSourceOutputStandardSchema,\n execute: (input, { ctx }) => {\n const { source, ...config } = input as typeof StaticConfigureSourceInputSchema.Type;\n const sourceScope = resolveStaticScopeInput(ctx, source.scope);\n const targetScope = resolveStaticScopeInput(ctx, config.scope);\n return Effect.as(\n self.configure(\n { id: source.id, scope: sourceScope },\n { ...config, scope: targetScope },\n ),\n ToolResult.ok({ configured: true }),\n );\n },\n }),\n ],\n },\n ],\n\n invokeTool: ({ ctx, toolRow, args }) =>\n Effect.gen(function* () {\n const httpClientLayer = options?.httpClientLayer ?? ctx.httpClientLayer;\n // toolRow.scope_id is the resolved owning scope of the tool\n // (innermost-wins from the executor's stack). The matching\n // GraphQL operation + source plugin-storage rows live at the same\n // scope, so pin every store lookup to it instead of relying on\n // stack-wide scope fall-through.\n const toolScope = toolRow.scope_id;\n const op = yield* ctx.storage.getOperationByToolId(toolRow.id, toolScope);\n if (!op) {\n return yield* new GraphqlInvocationError({\n message: `No GraphQL operation found for tool \"${toolRow.id}\"`,\n statusCode: Option.none(),\n });\n }\n const source = yield* ctx.storage.getSource(op.sourceId, toolScope);\n if (!source) {\n return yield* new GraphqlInvocationError({\n message: `No GraphQL source found for \"${op.sourceId}\"`,\n statusCode: Option.none(),\n });\n }\n\n const resolvedHeaders =\n (yield* resolveGraphqlBindingValueMap(ctx, source.headers, {\n sourceId: source.namespace,\n sourceScope: source.scope,\n missingLabel: \"header\",\n makeError: (message) =>\n new GraphqlInvocationError({ message, statusCode: Option.none() }),\n })) ?? {};\n const resolvedQueryParams =\n (yield* resolveGraphqlBindingValueMap(ctx, source.queryParams, {\n sourceId: source.namespace,\n sourceScope: source.scope,\n missingLabel: \"query parameter\",\n makeError: (message) =>\n new GraphqlInvocationError({ message, statusCode: Option.none() }),\n })) ?? {};\n const oauthHeader = yield* resolveGraphqlStoredOAuthHeader(\n ctx,\n source.namespace,\n source.scope,\n source.auth,\n );\n Object.assign(resolvedHeaders, oauthHeader ?? {});\n\n const result = yield* invokeWithLayer(\n op.binding,\n (args ?? {}) as Record<string, unknown>,\n source.endpoint,\n resolvedHeaders,\n resolvedQueryParams,\n httpClientLayer,\n );\n\n const errors = decodeGraphqlErrors(result.errors);\n if (errors !== undefined && errors.length > 0) {\n const firstMessage = extractGraphqlErrorMessage(errors);\n return ToolResult.fail({\n code: \"graphql_errors\",\n message: firstMessage !== undefined ? firstMessage : \"GraphQL request returned errors\",\n details: { errors },\n });\n }\n if (result.status < 200 || result.status >= 300) {\n return ToolResult.fail({\n code: \"graphql_http_error\",\n status: result.status,\n message: `GraphQL request failed with HTTP ${result.status}`,\n details: {\n status: result.status,\n data: result.data,\n errors: result.errors,\n },\n });\n }\n return ToolResult.ok(result.data);\n }),\n\n resolveAnnotations: ({ ctx, sourceId, toolRows }) =>\n Effect.gen(function* () {\n // toolRows for a single (plugin_id, source_id) group can still\n // straddle multiple scopes when the source is shadowed (e.g. an\n // org-level GraphQL source plus a per-user override that\n // re-registers the same tool ids). Run one listOperationsBySource\n // per distinct scope so each lookup pins {source_id, scope_id}\n // and we don't fall through to the wrong scope's bindings.\n const scopes = new Set<string>();\n for (const row of toolRows as readonly ToolRow[]) {\n scopes.add(row.scope_id);\n }\n // One listOperationsBySource per scope is independent storage\n // work; run them in parallel so a shadowed source doesn't\n // serialise two ~200ms reads back-to-back in the caller's\n // `executor.tools.list.annotations` span.\n const entries = yield* Effect.forEach(\n [...scopes],\n (scope) =>\n Effect.gen(function* () {\n const ops = yield* ctx.storage.listOperationsBySource(sourceId, scope);\n const byId = new Map<string, OperationBinding>();\n for (const op of ops) byId.set(op.toolId, op.binding);\n return [scope, byId] as const;\n }),\n { concurrency: \"unbounded\" },\n );\n const byScope = new Map<string, Map<string, OperationBinding>>(entries);\n\n const out: Record<string, ToolAnnotations> = {};\n for (const row of toolRows as readonly ToolRow[]) {\n const binding = byScope.get(row.scope_id)?.get(row.id);\n if (binding) out[row.id] = annotationsFor(binding);\n }\n return out;\n }),\n\n removeSource: ({ ctx, sourceId, scope }) =>\n Effect.gen(function* () {\n yield* ctx.transaction(\n Effect.gen(function* () {\n yield* ctx.credentialBindings.removeForSource({\n pluginId: GRAPHQL_PLUGIN_ID,\n sourceId,\n sourceScope: ScopeId.make(scope),\n });\n yield* ctx.storage.removeSource(sourceId, scope);\n }),\n );\n if (options?.configFile) {\n yield* options.configFile.removeSource(sourceId);\n }\n }),\n\n usagesForSecret: () => Effect.succeed([]),\n\n usagesForConnection: () => Effect.succeed([]),\n\n detect: ({ ctx, url }) =>\n Effect.gen(function* () {\n const httpClientLayer = options?.httpClientLayer ?? ctx.httpClientLayer;\n const trimmed = url.trim();\n if (!trimmed) return null;\n const parsed = yield* Effect.try({\n try: () => new URL(trimmed),\n catch: (cause) => cause,\n }).pipe(Effect.option);\n if (Option.isNone(parsed)) return null;\n\n const ok = yield* introspect(trimmed).pipe(\n Effect.provide(httpClientLayer),\n Effect.map(() => true),\n Effect.catch(() => Effect.succeed(false)),\n );\n\n const name = namespaceFromEndpoint(trimmed);\n\n if (ok) {\n return SourceDetectionResult.make({\n kind: \"graphql\",\n confidence: \"high\",\n endpoint: trimmed,\n name,\n namespace: name,\n });\n }\n\n // Low-confidence URL-token fallback. Introspection can fail for\n // many reasons (auth, CORS, the endpoint disabled introspection\n // in production, transport errors). When the URL itself\n // strongly implies GraphQL, surface a candidate so the user\n // can still pick it from the detect dropdown.\n if (urlMatchesToken(parsed.value, \"graphql\")) {\n return SourceDetectionResult.make({\n kind: \"graphql\",\n confidence: \"low\",\n endpoint: trimmed,\n name,\n namespace: name,\n });\n }\n\n return null;\n }),\n };\n // HTTP transport (routes/handlers/extensionService) is layered on by\n // the api-aware factory in `@executor-js/plugin-graphql/api`. Hosts that\n // want the HTTP surface import the plugin from there; SDK-only\n // consumers stay on this entry and avoid the server-only deps.\n});\n"],"mappings":"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","names":["raw","Effect","Option","Option","Effect","Effect","Option","HttpClient","HttpClientRequest","Effect","Option","HttpClient","HttpClientRequest","Effect","Option","Schema","Schema","Option","Effect","Effect","Match","Option","Schema","Schema","Option","formatTypeRef","Match","unwrapTypeName","Effect"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/sdk/errors.ts","../src/sdk/types.ts"],"sourcesContent":["import { Data, Schema } from \"effect\";\nimport type { Option } from \"effect\";\n\nexport class GraphqlIntrospectionError extends Schema.TaggedErrorClass<GraphqlIntrospectionError>()(\n \"GraphqlIntrospectionError\",\n {\n message: Schema.String,\n },\n) {}\n\nexport class GraphqlExtractionError extends Schema.TaggedErrorClass<GraphqlExtractionError>()(\n \"GraphqlExtractionError\",\n {\n message: Schema.String,\n },\n) {}\n\nexport class GraphqlInvocationError extends Data.TaggedError(\"GraphqlInvocationError\")<{\n readonly message: string;\n readonly statusCode: Option.Option<number>;\n readonly cause?: unknown;\n}> {}\n","import { Effect, Schema } from \"effect\";\nimport {\n ConfiguredCredentialValue,\n credentialSlotKey,\n SecretBackedValue,\n} from \"@executor-js/sdk/shared\";\nimport { HttpConfiguredValueInput, HttpCredentialInput } from \"@executor-js/sdk/http-source\";\n\n// ---------------------------------------------------------------------------\n// GraphQL operation kind\n// ---------------------------------------------------------------------------\n\nexport const GraphqlOperationKind = Schema.Literals([\"query\", \"mutation\"]);\nexport type GraphqlOperationKind = typeof GraphqlOperationKind.Type;\n\n// ---------------------------------------------------------------------------\n// Extracted field (becomes a tool)\n// ---------------------------------------------------------------------------\n\nexport const GraphqlArgument = Schema.Struct({\n name: Schema.String,\n typeName: Schema.String,\n required: Schema.Boolean,\n description: Schema.OptionFromOptional(Schema.String),\n});\nexport type GraphqlArgument = typeof GraphqlArgument.Type;\n\nexport const ExtractedField = Schema.Struct({\n /** e.g. \"user\", \"createUser\" */\n fieldName: Schema.String,\n /** \"query\" or \"mutation\" */\n kind: GraphqlOperationKind,\n description: Schema.OptionFromOptional(Schema.String),\n arguments: Schema.Array(GraphqlArgument),\n /** JSON Schema for the input (built from arguments) */\n inputSchema: Schema.OptionFromOptional(Schema.Unknown),\n /** The return type name for documentation */\n returnTypeName: Schema.String,\n});\nexport type ExtractedField = typeof ExtractedField.Type;\n\nexport const ExtractionResult = Schema.Struct({\n /** Schema name from introspection */\n schemaName: Schema.OptionFromOptional(Schema.String),\n fields: Schema.Array(ExtractedField),\n});\nexport type ExtractionResult = typeof ExtractionResult.Type;\n\n// ---------------------------------------------------------------------------\n// Operation binding — minimal data needed to invoke\n// ---------------------------------------------------------------------------\n\nexport const OperationBinding = Schema.Struct({\n kind: GraphqlOperationKind,\n fieldName: Schema.String,\n /** The full GraphQL query/mutation string */\n operationString: Schema.String,\n /** Ordered variable names for mapping */\n variableNames: Schema.Array(Schema.String),\n});\nexport type OperationBinding = typeof OperationBinding.Type;\n\n// ---------------------------------------------------------------------------\n// Invocation\n// ---------------------------------------------------------------------------\n\nexport const HeaderValue = SecretBackedValue;\nexport type HeaderValue = typeof HeaderValue.Type;\nexport const QueryParamValue = HeaderValue;\nexport type QueryParamValue = typeof QueryParamValue.Type;\n\nexport const ConfiguredGraphqlCredentialValue = ConfiguredCredentialValue;\nexport type ConfiguredGraphqlCredentialValue = typeof ConfiguredGraphqlCredentialValue.Type;\nexport const GraphqlConfiguredValueInput = HttpConfiguredValueInput;\nexport type GraphqlConfiguredValueInput = typeof GraphqlConfiguredValueInput.Type;\nexport const GraphqlCredentialInput = HttpCredentialInput;\nexport type GraphqlCredentialInput = typeof GraphqlCredentialInput.Type;\n\nexport const graphqlHeaderSlot = (name: string): string => credentialSlotKey(\"header\", name);\nexport const graphqlQueryParamSlot = (name: string): string =>\n credentialSlotKey(\"query_param\", name);\nexport const GRAPHQL_OAUTH_CONNECTION_SLOT = \"auth:oauth2:connection\";\n\n// ---------------------------------------------------------------------------\n// Source auth\n// ---------------------------------------------------------------------------\n\nexport const GraphqlSourceAuth = Schema.Union([\n Schema.Struct({ kind: Schema.Literal(\"none\") }),\n Schema.Struct({\n kind: Schema.Literal(\"oauth2\"),\n connectionSlot: Schema.String,\n }),\n]);\nexport type GraphqlSourceAuth = typeof GraphqlSourceAuth.Type;\n\nexport const GraphqlSourceAuthInput = Schema.Union([\n Schema.Struct({\n kind: Schema.Literal(\"none\"),\n }),\n Schema.Struct({\n oauth2: Schema.optional(\n Schema.Struct({\n connection: Schema.optional(HttpCredentialInput),\n }),\n ),\n }),\n]);\nexport type GraphqlSourceAuthInput = typeof GraphqlSourceAuthInput.Type;\n\nexport const InvocationConfig = Schema.Struct({\n /** The GraphQL endpoint URL */\n endpoint: Schema.String,\n /** Headers applied to every request. Values can reference secrets. */\n headers: Schema.Record(Schema.String, ConfiguredGraphqlCredentialValue).pipe(\n Schema.withDecodingDefault(Effect.succeed({})),\n Schema.withConstructorDefault(Effect.succeed({})),\n ),\n /** Query parameters applied to every request. Values can reference secrets. */\n queryParams: Schema.Record(Schema.String, ConfiguredGraphqlCredentialValue).pipe(\n Schema.withDecodingDefault(Effect.succeed({})),\n Schema.withConstructorDefault(Effect.succeed({})),\n ),\n});\nexport type InvocationConfig = typeof InvocationConfig.Type;\n\nexport const InvocationResult = Schema.Struct({\n status: Schema.Number,\n data: Schema.NullOr(Schema.Unknown),\n errors: Schema.NullOr(Schema.Unknown),\n});\nexport type InvocationResult = typeof InvocationResult.Type;\n"],"mappings":"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","names":["Schema"]}