@executor-js/plugin-graphql 1.4.29 → 1.4.30
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.
- package/dist/{AddGraphqlSource-3Z3DB4KQ.js → AddGraphqlSource-PBMKSY7Y.js} +29 -18
- package/dist/AddGraphqlSource-PBMKSY7Y.js.map +1 -0
- package/dist/{EditGraphqlSource-F37RPNKV.js → EditGraphqlSource-AFR4RQHY.js} +107 -91
- package/dist/EditGraphqlSource-AFR4RQHY.js.map +1 -0
- package/dist/{GraphqlSourceSummary-6EYBXVD2.js → GraphqlSourceSummary-MY4AW37M.js} +4 -4
- package/dist/GraphqlSourceSummary-MY4AW37M.js.map +1 -0
- package/dist/api/group.d.ts +71 -232
- package/dist/api/handlers.d.ts +5 -45
- package/dist/api/index.d.ts +76 -404
- package/dist/{chunk-PO2TPM5B.js → chunk-7S2FM3ZF.js} +578 -613
- package/dist/chunk-7S2FM3ZF.js.map +1 -0
- package/dist/chunk-D6E4WAYW.js +51 -0
- package/dist/chunk-D6E4WAYW.js.map +1 -0
- package/dist/{chunk-445ZPXHU.js → chunk-H422YIM4.js} +15 -34
- package/dist/chunk-H422YIM4.js.map +1 -0
- package/dist/{chunk-EW4Y3KEX.js → chunk-OYUIHBWZ.js} +23 -80
- package/dist/chunk-OYUIHBWZ.js.map +1 -0
- package/dist/client.js +7 -47
- package/dist/client.js.map +1 -1
- package/dist/core.js +3 -8
- package/dist/index.js +3 -2
- package/dist/react/atoms.d.ts +146 -186
- package/dist/react/client.d.ts +70 -231
- package/dist/sdk/index.d.ts +2 -2
- package/dist/sdk/introspect.d.ts +151 -151
- package/dist/sdk/invoke.d.ts +5 -5
- package/dist/sdk/plugin.d.ts +74 -228
- package/dist/sdk/presets.d.ts +1 -0
- package/dist/sdk/store.d.ts +3 -135
- package/dist/sdk/types.d.ts +31 -66
- package/dist/testing/index.d.ts +20 -2
- package/dist/testing.js +77 -29
- package/dist/testing.js.map +1 -1
- package/package.json +3 -3
- package/dist/AddGraphqlSource-3Z3DB4KQ.js.map +0 -1
- package/dist/EditGraphqlSource-F37RPNKV.js.map +0 -1
- package/dist/GraphqlSourceSummary-6EYBXVD2.js.map +0 -1
- package/dist/chunk-445ZPXHU.js.map +0 -1
- package/dist/chunk-EW4Y3KEX.js.map +0 -1
- package/dist/chunk-PO2TPM5B.js.map +0 -1
|
@@ -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 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"]}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// src/sdk/presets.ts
|
|
2
|
+
var graphqlPresets = [
|
|
3
|
+
{
|
|
4
|
+
id: "github-graphql",
|
|
5
|
+
name: "GitHub GraphQL",
|
|
6
|
+
summary: "Repos, issues, PRs, and users via GitHub's GraphQL API.",
|
|
7
|
+
url: "https://api.github.com/graphql",
|
|
8
|
+
endpoint: "https://api.github.com/graphql",
|
|
9
|
+
icon: "https://github.com/favicon.ico",
|
|
10
|
+
featured: true
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
id: "gitlab",
|
|
14
|
+
name: "GitLab",
|
|
15
|
+
summary: "Projects, merge requests, pipelines, and users.",
|
|
16
|
+
url: "https://gitlab.com/api/graphql",
|
|
17
|
+
endpoint: "https://gitlab.com/api/graphql",
|
|
18
|
+
icon: "https://gitlab.com/favicon.ico",
|
|
19
|
+
featured: true
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: "linear",
|
|
23
|
+
name: "Linear",
|
|
24
|
+
summary: "Issues, projects, teams, and cycles.",
|
|
25
|
+
url: "https://api.linear.app/graphql",
|
|
26
|
+
endpoint: "https://api.linear.app/graphql",
|
|
27
|
+
icon: "https://linear.app/favicon.ico",
|
|
28
|
+
featured: true
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
id: "monday",
|
|
32
|
+
name: "Monday.com",
|
|
33
|
+
summary: "Boards, items, columns, and workspace automation.",
|
|
34
|
+
url: "https://api.monday.com/v2",
|
|
35
|
+
endpoint: "https://api.monday.com/v2",
|
|
36
|
+
icon: "https://monday.com/favicon.ico"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
id: "anilist",
|
|
40
|
+
name: "AniList",
|
|
41
|
+
summary: "Anime and manga database \u2014 no auth required.",
|
|
42
|
+
url: "https://graphql.anilist.co",
|
|
43
|
+
endpoint: "https://graphql.anilist.co",
|
|
44
|
+
icon: "https://anilist.co/img/icons/favicon-32x32.png"
|
|
45
|
+
}
|
|
46
|
+
];
|
|
47
|
+
|
|
48
|
+
export {
|
|
49
|
+
graphqlPresets
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=chunk-D6E4WAYW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sdk/presets.ts"],"sourcesContent":["export interface GraphqlPreset {\n readonly id: string;\n readonly name: string;\n readonly summary: string;\n readonly url: string;\n readonly endpoint: string;\n readonly icon?: string;\n readonly featured?: boolean;\n}\n\nexport const graphqlPresets: readonly GraphqlPreset[] = [\n {\n id: \"github-graphql\",\n name: \"GitHub GraphQL\",\n summary: \"Repos, issues, PRs, and users via GitHub's GraphQL API.\",\n url: \"https://api.github.com/graphql\",\n endpoint: \"https://api.github.com/graphql\",\n icon: \"https://github.com/favicon.ico\",\n featured: true,\n },\n {\n id: \"gitlab\",\n name: \"GitLab\",\n summary: \"Projects, merge requests, pipelines, and users.\",\n url: \"https://gitlab.com/api/graphql\",\n endpoint: \"https://gitlab.com/api/graphql\",\n icon: \"https://gitlab.com/favicon.ico\",\n featured: true,\n },\n {\n id: \"linear\",\n name: \"Linear\",\n summary: \"Issues, projects, teams, and cycles.\",\n url: \"https://api.linear.app/graphql\",\n endpoint: \"https://api.linear.app/graphql\",\n icon: \"https://linear.app/favicon.ico\",\n featured: true,\n },\n {\n id: \"monday\",\n name: \"Monday.com\",\n summary: \"Boards, items, columns, and workspace automation.\",\n url: \"https://api.monday.com/v2\",\n endpoint: \"https://api.monday.com/v2\",\n icon: \"https://monday.com/favicon.ico\",\n },\n {\n id: \"anilist\",\n name: \"AniList\",\n summary: \"Anime and manga database — no auth required.\",\n url: \"https://graphql.anilist.co\",\n endpoint: \"https://graphql.anilist.co\",\n icon: \"https://anilist.co/img/icons/favicon-32x32.png\",\n },\n];\n"],"mappings":";AAUO,IAAM,iBAA2C;AAAA,EACtD;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,KAAK;AAAA,IACL,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,KAAK;AAAA,IACL,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,KAAK;AAAA,IACL,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,KAAK;AAAA,IACL,UAAU;AAAA,IACV,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,KAAK;AAAA,IACL,UAAU;AAAA,IACV,MAAM;AAAA,EACR;AACF;","names":[]}
|
|
@@ -21,12 +21,10 @@ var GraphqlInvocationError = class extends Data.TaggedError("GraphqlInvocationEr
|
|
|
21
21
|
import { Effect, Schema as Schema2 } from "effect";
|
|
22
22
|
import {
|
|
23
23
|
ConfiguredCredentialValue,
|
|
24
|
-
CredentialBindingValue,
|
|
25
24
|
credentialSlotKey,
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
} from "@executor-js/sdk/core";
|
|
25
|
+
SecretBackedValue
|
|
26
|
+
} from "@executor-js/sdk/shared";
|
|
27
|
+
import { HttpConfiguredValueInput, HttpCredentialInput } from "@executor-js/sdk/http-source";
|
|
30
28
|
var GraphqlOperationKind = Schema2.Literals(["query", "mutation"]);
|
|
31
29
|
var GraphqlArgument = Schema2.Struct({
|
|
32
30
|
name: Schema2.String,
|
|
@@ -62,11 +60,8 @@ var OperationBinding = Schema2.Struct({
|
|
|
62
60
|
var HeaderValue = SecretBackedValue;
|
|
63
61
|
var QueryParamValue = HeaderValue;
|
|
64
62
|
var ConfiguredGraphqlCredentialValue = ConfiguredCredentialValue;
|
|
65
|
-
var
|
|
66
|
-
|
|
67
|
-
HeaderValue,
|
|
68
|
-
ConfiguredGraphqlCredentialValue
|
|
69
|
-
]);
|
|
63
|
+
var GraphqlConfiguredValueInput = HttpConfiguredValueInput;
|
|
64
|
+
var GraphqlCredentialInput = HttpCredentialInput;
|
|
70
65
|
var graphqlHeaderSlot = (name) => credentialSlotKey("header", name);
|
|
71
66
|
var graphqlQueryParamSlot = (name) => credentialSlotKey("query_param", name);
|
|
72
67
|
var GRAPHQL_OAUTH_CONNECTION_SLOT = "auth:oauth2:connection";
|
|
@@ -78,29 +73,17 @@ var GraphqlSourceAuth = Schema2.Union([
|
|
|
78
73
|
})
|
|
79
74
|
]);
|
|
80
75
|
var GraphqlSourceAuthInput = Schema2.Union([
|
|
81
|
-
GraphqlSourceAuth,
|
|
82
76
|
Schema2.Struct({
|
|
83
|
-
kind: Schema2.Literal("
|
|
84
|
-
|
|
77
|
+
kind: Schema2.Literal("none")
|
|
78
|
+
}),
|
|
79
|
+
Schema2.Struct({
|
|
80
|
+
oauth2: Schema2.optional(
|
|
81
|
+
Schema2.Struct({
|
|
82
|
+
connection: Schema2.optional(HttpCredentialInput)
|
|
83
|
+
})
|
|
84
|
+
)
|
|
85
85
|
})
|
|
86
86
|
]);
|
|
87
|
-
var GraphqlSourceBindingValue = CredentialBindingValue;
|
|
88
|
-
var GraphqlSourceBindingInput = Schema2.Struct({
|
|
89
|
-
sourceId: Schema2.String,
|
|
90
|
-
sourceScope: ScopeId,
|
|
91
|
-
scope: ScopeId,
|
|
92
|
-
slot: Schema2.String,
|
|
93
|
-
value: GraphqlSourceBindingValue
|
|
94
|
-
});
|
|
95
|
-
var GraphqlSourceBindingRef = Schema2.Struct({
|
|
96
|
-
sourceId: Schema2.String,
|
|
97
|
-
sourceScopeId: ScopeId,
|
|
98
|
-
scopeId: ScopeId,
|
|
99
|
-
slot: Schema2.String,
|
|
100
|
-
value: GraphqlSourceBindingValue,
|
|
101
|
-
createdAt: Schema2.Date,
|
|
102
|
-
updatedAt: Schema2.Date
|
|
103
|
-
});
|
|
104
87
|
var InvocationConfig = Schema2.Struct({
|
|
105
88
|
/** The GraphQL endpoint URL */
|
|
106
89
|
endpoint: Schema2.String,
|
|
@@ -133,16 +116,14 @@ export {
|
|
|
133
116
|
HeaderValue,
|
|
134
117
|
QueryParamValue,
|
|
135
118
|
ConfiguredGraphqlCredentialValue,
|
|
119
|
+
GraphqlConfiguredValueInput,
|
|
136
120
|
GraphqlCredentialInput,
|
|
137
121
|
graphqlHeaderSlot,
|
|
138
122
|
graphqlQueryParamSlot,
|
|
139
123
|
GRAPHQL_OAUTH_CONNECTION_SLOT,
|
|
140
124
|
GraphqlSourceAuth,
|
|
141
125
|
GraphqlSourceAuthInput,
|
|
142
|
-
GraphqlSourceBindingValue,
|
|
143
|
-
GraphqlSourceBindingInput,
|
|
144
|
-
GraphqlSourceBindingRef,
|
|
145
126
|
InvocationConfig,
|
|
146
127
|
InvocationResult
|
|
147
128
|
};
|
|
148
|
-
//# sourceMappingURL=chunk-
|
|
129
|
+
//# sourceMappingURL=chunk-H422YIM4.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\";\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"]}
|
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ConfiguredGraphqlCredentialValue,
|
|
3
|
+
GraphqlConfiguredValueInput,
|
|
3
4
|
GraphqlCredentialInput,
|
|
4
5
|
GraphqlExtractionError,
|
|
5
6
|
GraphqlIntrospectionError,
|
|
6
7
|
GraphqlSourceAuth,
|
|
7
|
-
GraphqlSourceAuthInput
|
|
8
|
-
|
|
9
|
-
GraphqlSourceBindingRef
|
|
10
|
-
} from "./chunk-445ZPXHU.js";
|
|
8
|
+
GraphqlSourceAuthInput
|
|
9
|
+
} from "./chunk-H422YIM4.js";
|
|
11
10
|
|
|
12
11
|
// src/react/atoms.ts
|
|
13
12
|
import * as Atom from "effect/unstable/reactivity/Atom";
|
|
14
13
|
import * as AsyncResult from "effect/unstable/reactivity/AsyncResult";
|
|
15
|
-
import { sourcesOptimisticAtom } from "@executor-js/react/api/atoms";
|
|
14
|
+
import { sourceCredentialBindingsAtom, sourcesOptimisticAtom } from "@executor-js/react/api/atoms";
|
|
16
15
|
import { ReactivityKey } from "@executor-js/react/api/reactivity-keys";
|
|
17
16
|
|
|
18
17
|
// src/react/client.ts
|
|
@@ -22,7 +21,8 @@ import { getBaseUrl } from "@executor-js/react/api/base-url";
|
|
|
22
21
|
// src/api/group.ts
|
|
23
22
|
import { HttpApiEndpoint, HttpApiGroup } from "effect/unstable/httpapi";
|
|
24
23
|
import { Schema } from "effect";
|
|
25
|
-
import { InternalError, ScopeId } from "@executor-js/sdk/
|
|
24
|
+
import { InternalError, ScopeId } from "@executor-js/sdk/shared";
|
|
25
|
+
import { OAuth2SourceConfig } from "@executor-js/sdk/http-source";
|
|
26
26
|
var StoredSourceSchema = Schema.Struct({
|
|
27
27
|
namespace: Schema.String,
|
|
28
28
|
scope: ScopeId,
|
|
@@ -39,39 +39,22 @@ var SourceParams = {
|
|
|
39
39
|
scopeId: ScopeId,
|
|
40
40
|
namespace: Schema.String
|
|
41
41
|
};
|
|
42
|
-
var SourceBindingParams = {
|
|
43
|
-
scopeId: ScopeId,
|
|
44
|
-
namespace: Schema.String,
|
|
45
|
-
sourceScopeId: ScopeId
|
|
46
|
-
};
|
|
47
42
|
var AddSourcePayload = Schema.Struct({
|
|
48
|
-
targetScope: ScopeId,
|
|
49
43
|
endpoint: Schema.String,
|
|
50
|
-
name: Schema.
|
|
44
|
+
name: Schema.String,
|
|
51
45
|
introspectionJson: Schema.optional(Schema.String),
|
|
52
|
-
namespace: Schema.
|
|
53
|
-
headers: Schema.optional(Schema.Record(Schema.String,
|
|
54
|
-
queryParams: Schema.optional(Schema.Record(Schema.String,
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
credentialTargetScope: Schema.optional(ScopeId),
|
|
65
|
-
auth: Schema.optional(GraphqlSourceAuthInput)
|
|
66
|
-
});
|
|
67
|
-
var UpdateSourceResponse = Schema.Struct({
|
|
68
|
-
updated: Schema.Boolean
|
|
69
|
-
});
|
|
70
|
-
var RemoveBindingPayload = Schema.Struct({
|
|
71
|
-
sourceId: Schema.String,
|
|
72
|
-
sourceScope: ScopeId,
|
|
73
|
-
slot: Schema.String,
|
|
74
|
-
scope: ScopeId
|
|
46
|
+
namespace: Schema.String,
|
|
47
|
+
headers: Schema.optional(Schema.Record(Schema.String, GraphqlConfiguredValueInput)),
|
|
48
|
+
queryParams: Schema.optional(Schema.Record(Schema.String, GraphqlConfiguredValueInput)),
|
|
49
|
+
oauth2: Schema.optional(OAuth2SourceConfig),
|
|
50
|
+
credentials: Schema.optional(
|
|
51
|
+
Schema.Struct({
|
|
52
|
+
scope: ScopeId,
|
|
53
|
+
headers: Schema.optional(Schema.Record(Schema.String, GraphqlCredentialInput)),
|
|
54
|
+
queryParams: Schema.optional(Schema.Record(Schema.String, GraphqlCredentialInput)),
|
|
55
|
+
auth: Schema.optional(GraphqlSourceAuthInput)
|
|
56
|
+
})
|
|
57
|
+
)
|
|
75
58
|
});
|
|
76
59
|
var AddSourceResponse = Schema.Struct({
|
|
77
60
|
toolCount: Schema.Number,
|
|
@@ -93,37 +76,6 @@ var GraphqlGroup = HttpApiGroup.make("graphql").add(
|
|
|
93
76
|
success: Schema.NullOr(StoredSourceSchema),
|
|
94
77
|
error: GraphqlErrors
|
|
95
78
|
})
|
|
96
|
-
).add(
|
|
97
|
-
HttpApiEndpoint.patch("updateSource", "/scopes/:scopeId/graphql/sources/:namespace", {
|
|
98
|
-
params: SourceParams,
|
|
99
|
-
payload: UpdateSourcePayload,
|
|
100
|
-
success: UpdateSourceResponse,
|
|
101
|
-
error: GraphqlErrors
|
|
102
|
-
})
|
|
103
|
-
).add(
|
|
104
|
-
HttpApiEndpoint.get(
|
|
105
|
-
"listSourceBindings",
|
|
106
|
-
"/scopes/:scopeId/graphql/sources/:namespace/base/:sourceScopeId/bindings",
|
|
107
|
-
{
|
|
108
|
-
params: SourceBindingParams,
|
|
109
|
-
success: Schema.Array(GraphqlSourceBindingRef),
|
|
110
|
-
error: GraphqlErrors
|
|
111
|
-
}
|
|
112
|
-
)
|
|
113
|
-
).add(
|
|
114
|
-
HttpApiEndpoint.post("setSourceBinding", "/scopes/:scopeId/graphql/source-bindings", {
|
|
115
|
-
params: ScopeParams,
|
|
116
|
-
payload: GraphqlSourceBindingInput,
|
|
117
|
-
success: GraphqlSourceBindingRef,
|
|
118
|
-
error: GraphqlErrors
|
|
119
|
-
})
|
|
120
|
-
).add(
|
|
121
|
-
HttpApiEndpoint.post("removeSourceBinding", "/scopes/:scopeId/graphql/source-bindings/remove", {
|
|
122
|
-
params: ScopeParams,
|
|
123
|
-
payload: RemoveBindingPayload,
|
|
124
|
-
success: Schema.Struct({ removed: Schema.Boolean }),
|
|
125
|
-
error: GraphqlErrors
|
|
126
|
-
})
|
|
127
79
|
);
|
|
128
80
|
|
|
129
81
|
// src/react/client.ts
|
|
@@ -137,11 +89,7 @@ var graphqlSourceAtom = (scopeId, namespace) => GraphqlClient.query("graphql", "
|
|
|
137
89
|
timeToLive: "15 seconds",
|
|
138
90
|
reactivityKeys: [ReactivityKey.sources, ReactivityKey.tools]
|
|
139
91
|
});
|
|
140
|
-
var graphqlSourceBindingsAtom = (scopeId, namespace, sourceScopeId) =>
|
|
141
|
-
params: { scopeId, namespace, sourceScopeId },
|
|
142
|
-
timeToLive: "15 seconds",
|
|
143
|
-
reactivityKeys: [ReactivityKey.sources, ReactivityKey.secrets, ReactivityKey.connections]
|
|
144
|
-
});
|
|
92
|
+
var graphqlSourceBindingsAtom = (scopeId, namespace, sourceScopeId) => sourceCredentialBindingsAtom(scopeId, namespace, sourceScopeId);
|
|
145
93
|
var addGraphqlSource = GraphqlClient.mutation("graphql", "addSource");
|
|
146
94
|
var addGraphqlSourceOptimistic = Atom.family(
|
|
147
95
|
(scopeId) => sourcesOptimisticAtom(scopeId).pipe(
|
|
@@ -150,7 +98,7 @@ var addGraphqlSourceOptimistic = Atom.family(
|
|
|
150
98
|
const id = arg.payload.namespace ?? `pending-${Math.random().toString(36).slice(2)}`;
|
|
151
99
|
const source = {
|
|
152
100
|
id,
|
|
153
|
-
scopeId
|
|
101
|
+
scopeId,
|
|
154
102
|
kind: "graphql",
|
|
155
103
|
pluginId: "graphql",
|
|
156
104
|
name: arg.payload.name ?? id,
|
|
@@ -168,15 +116,10 @@ var addGraphqlSourceOptimistic = Atom.family(
|
|
|
168
116
|
})
|
|
169
117
|
)
|
|
170
118
|
);
|
|
171
|
-
var updateGraphqlSource = GraphqlClient.mutation("graphql", "updateSource");
|
|
172
|
-
var setGraphqlSourceBinding = GraphqlClient.mutation("graphql", "setSourceBinding");
|
|
173
|
-
var removeGraphqlSourceBinding = GraphqlClient.mutation("graphql", "removeSourceBinding");
|
|
174
119
|
|
|
175
120
|
export {
|
|
176
121
|
graphqlSourceAtom,
|
|
177
122
|
graphqlSourceBindingsAtom,
|
|
178
|
-
addGraphqlSourceOptimistic
|
|
179
|
-
updateGraphqlSource,
|
|
180
|
-
setGraphqlSourceBinding
|
|
123
|
+
addGraphqlSourceOptimistic
|
|
181
124
|
};
|
|
182
|
-
//# sourceMappingURL=chunk-
|
|
125
|
+
//# sourceMappingURL=chunk-OYUIHBWZ.js.map
|