{
  "version": 3,
  "sources": ["../../../src/services/credentials.ts", "../../../src/services/function-invocation-service.ts", "../../../src/services/tracing.ts", "../../../src/types/url.ts", "../../../src/protocol/protocol.ts", "../../../src/protocol/functions-ai-http-client.ts"],
  "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as HttpClient from '@effect/platform/HttpClient';\nimport * as HttpClientRequest from '@effect/platform/HttpClientRequest';\nimport type * as Config from 'effect/Config';\nimport * as Context from 'effect/Context';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\nimport * as Redacted from 'effect/Redacted';\n\nimport { Credential } from '@dxos/compute';\nimport { Database, Query } from '@dxos/echo';\nimport { AccessToken } from '@dxos/types';\n\nexport class ConfiguredCredentialsService implements Context.Tag.Service<Credential.CredentialsService> {\n  constructor(private readonly credentials: Credential.ServiceCredential[] = []) {}\n\n  addCredentials(credentials: Credential.ServiceCredential[]): ConfiguredCredentialsService {\n    this.credentials.push(...credentials);\n    return this;\n  }\n\n  async queryCredentials(query: Credential.CredentialQuery): Promise<Credential.ServiceCredential[]> {\n    return this.credentials.filter((credential) => credential.service === query.service);\n  }\n\n  async getCredential(query: Credential.CredentialQuery): Promise<Credential.ServiceCredential> {\n    const credential = this.credentials.find((credential) => credential.service === query.service);\n    if (!credential) {\n      throw new Error(`Credential not found for service: ${query.service}`);\n    }\n\n    return credential;\n  }\n}\n\n/**\n * Maps the request to include the given token in the Authorization header.\n */\nexport const withAuthorization = (token: string, kind?: 'Bearer' | 'Basic') =>\n  HttpClient.mapRequest((request) => {\n    const authorization = kind ? `${kind} ${token}` : token;\n    return HttpClientRequest.setHeader(request, 'Authorization', authorization);\n  });\n\nexport const configuredCredentialsLayer = (credentials: Credential.ServiceCredential[]) =>\n  Layer.succeed(Credential.CredentialsService, new ConfiguredCredentialsService(credentials));\n\nexport const credentialsLayerConfig = (\n  credentials: {\n    service: string;\n    apiKey: Config.Config<Redacted.Redacted<string>>;\n  }[],\n) =>\n  Layer.effect(\n    Credential.CredentialsService,\n    Effect.gen(function* () {\n      const serviceCredentials = yield* Effect.forEach(credentials, ({ service, apiKey }) =>\n        Effect.gen(function* () {\n          return {\n            service,\n            apiKey: Redacted.value(yield* apiKey),\n          };\n        }),\n      );\n\n      return new ConfiguredCredentialsService(serviceCredentials);\n    }),\n  );\n\nexport const credentialsLayerFromDatabase = ({ caching = false }: { caching?: boolean } = {}) =>\n  Layer.effect(\n    Credential.CredentialsService,\n    Effect.gen(function* () {\n      const dbService = yield* Database.Service;\n      const cache = new Map<string, Credential.ServiceCredential[]>();\n\n      const queryCredentials = async (query: Credential.CredentialQuery): Promise<Credential.ServiceCredential[]> => {\n        const cacheKey = JSON.stringify(query);\n        if (caching && cache.has(cacheKey)) {\n          return cache.get(cacheKey)!;\n        }\n\n        const accessTokens = await dbService.db.query(Query.type(AccessToken.AccessToken)).run();\n        const credentials = accessTokens\n          .filter((accessToken) => accessToken.source === query.service)\n          .map((accessToken) => ({\n            service: accessToken.source,\n            apiKey: accessToken.token,\n          }));\n\n        if (caching) {\n          cache.set(cacheKey, credentials);\n        }\n\n        return credentials;\n      };\n\n      return {\n        getCredential: async (query) => {\n          const credentials = await queryCredentials(query);\n          if (credentials.length === 0) {\n            throw new Error(`Credential not found for service: ${query.service}`);\n          }\n\n          return credentials[0];\n        },\n        queryCredentials: async (query) => {\n          return queryCredentials(query);\n        },\n      };\n    }),\n  );\n", "//\n// Copyright 2025 DXOS.org\n//\nimport * as Context from 'effect/Context';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\n\nimport { type FunctionNotFoundError, Operation } from '@dxos/compute';\n\n/**\n * @deprecated\n */\nexport class FunctionInvocationService extends Context.Tag('@dxos/functions/FunctionInvocationService')<\n  FunctionInvocationService,\n  {\n    invokeFunction<I, O>(functionDef: Operation.Definition<I, O, any>, input: I): Effect.Effect<O>;\n\n    resolveFunction(key: string): Effect.Effect<Operation.Definition.Any, FunctionNotFoundError>;\n  }\n>() {\n  static layerNotAvailable = Layer.succeed(FunctionInvocationService, {\n    invokeFunction: () => Effect.die('FunctionInvocationService is not avaialble.'),\n    resolveFunction: () => Effect.die('FunctionInvocationService is not available.'),\n  });\n\n  static invokeFunction = <I, O>(\n    functionDef: Operation.Definition<I, O, any>,\n    input: I,\n  ): Effect.Effect<O, never, FunctionInvocationService> =>\n    Effect.serviceFunctionEffect(FunctionInvocationService, (service) => service.invokeFunction)(functionDef, input);\n\n  static resolveFunction = (\n    key: string,\n  ): Effect.Effect<Operation.Definition.Any, FunctionNotFoundError, FunctionInvocationService> =>\n    Effect.serviceFunctionEffect(FunctionInvocationService, (service) => service.resolveFunction)(key);\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\n/**\n * Goes into {@link Message['properties']}\n */\nexport const MESSAGE_PROPERTY_TOOL_CALL_ID = 'toolCallId' as const;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Obj } from '@dxos/echo';\n\n// TODO: use URL scheme for source?\nexport const FUNCTIONS_META_KEY = 'org.dxos.service.function';\n\nexport const FUNCTIONS_PRESET_META_KEY = 'org.dxos.service.function-preset';\n\n/**\n * NOTE: functionId is backend ID, not ECHO object id.\n */\nexport const getUserFunctionIdInMetadata = (meta: Obj.ReadonlyMeta) => {\n  return meta.keys.find((key) => key.source === FUNCTIONS_META_KEY)?.id;\n};\n\n/**\n * NOTE: functionId is backend ID, not ECHO object id.\n * Must be called inside Obj.update() since it mutates the meta.\n */\nexport const setUserFunctionIdInMetadata = (meta: Obj.Meta, functionId: string) => {\n  const key = meta.keys.find((key) => key.source === FUNCTIONS_META_KEY);\n  if (key) {\n    if (key.id !== functionId) {\n      throw new Error('Metadata mismatch');\n    }\n  } else {\n    meta.keys.push({ source: FUNCTIONS_META_KEY, id: functionId });\n  }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as AnthropicClient from '@effect/ai-anthropic/AnthropicClient';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { AiModelResolver, AiService, OpaqueToolkit } from '@dxos/ai';\nimport { AnthropicResolver } from '@dxos/ai/resolvers';\nimport {\n  FunctionError,\n  Header,\n  InvalidOperationInputError,\n  InvalidOperationOutputError,\n  Operation,\n  Trace,\n} from '@dxos/compute';\nimport { LifecycleState, Resource } from '@dxos/context';\nimport { Database, Feed, JsonSchema, Ref, Registry, type Type } from '@dxos/echo';\nimport {\n  createFeedServiceLayer,\n  EchoClient,\n  type DatabaseImpl,\n  makeRegistry,\n  type QueueFactory,\n} from '@dxos/echo-client';\nimport { refFromEncodedReference } from '@dxos/echo/internal';\nimport { EffectEx } from '@dxos/effect';\nimport { assertState, failedInvariant, invariant } from '@dxos/invariant';\nimport { PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { EdgeFunctionEnv, ErrorCodec, type FunctionProtocol, type TraceProtocol } from '@dxos/protocols';\n\nimport { type FunctionServices } from '../sdk';\nimport { configuredCredentialsLayer, credentialsLayerFromDatabase, FunctionInvocationService } from '../services';\nimport { FunctionsAiHttpClient } from './functions-ai-http-client';\n\nexport interface FunctionWrappingOptions {\n  /**\n   * Additional types to register with the database.\n   */\n  types?: Type.AnyEntity[];\n\n  /**\n   * Toolkits to make available via the `OpaqueToolkitProvider`.\n   */\n  toolkits?: OpaqueToolkit.OpaqueToolkit[];\n}\n\n/**\n * Wraps a function handler made with `defineFunction` to a protocol that the functions-runtime expects.\n */\nexport const wrapFunctionHandler = (\n  func: Operation.WithHandler<Operation.Definition.Any>,\n  opts: FunctionWrappingOptions = {},\n): FunctionProtocol.Func => {\n  if (!Operation.isOperationWithHandler(func)) {\n    throw new TypeError('Expected operation with handler');\n  }\n\n  const serviceTags = func.services.map((service) => service.key);\n\n  return {\n    meta: {\n      key: func.meta.key,\n      name: func.meta.name,\n      description: func.meta.description,\n      inputSchema: JsonSchema.toJsonSchema(func.input),\n      outputSchema: func.output === undefined ? undefined : JsonSchema.toJsonSchema(func.output),\n      services: func.services.map((service) => service.key),\n    },\n    handler: async ({ data, context }) => {\n      if (\n        (serviceTags.includes(Database.Service.key) || serviceTags.includes(Feed.FeedService.key)) &&\n        (!context.services.dataService || !context.services.queryService)\n      ) {\n        throw new FunctionError({\n          message: 'Services not provided: dataService, queryService',\n        });\n      }\n\n      // eslint-disable-next-line no-useless-catch\n      try {\n        if (!SchemaAST.isAnyKeyword(func.input.ast)) {\n          try {\n            Schema.validateSync(func.input, { onExcessProperty: 'error' })(data);\n          } catch (error: any) {\n            throw new InvalidOperationInputError({\n              message: `Operation input did not match schema (${func.meta.key}): ${error.message}`,\n              cause: error,\n            });\n          }\n        }\n\n        await using funcContext = await new FunctionContext(context, opts).open();\n\n        const types = [...(opts.types ?? []), ...(func.types ?? [])];\n        if (types.length > 0) {\n          invariant(funcContext.db, 'Database is required for functions with types');\n          funcContext.db.graph.registry.add(types);\n        }\n\n        const dataWithDecodedRefs =\n          funcContext.db && !SchemaAST.isAnyKeyword(func.input.ast)\n            ? decodeRefsFromSchema(func.input.ast, data, funcContext.db)\n            : data;\n\n        let result: any = await func.handler(dataWithDecodedRefs);\n\n        if (Effect.isEffect(result)) {\n          result = await EffectEx.runAndForwardErrors(\n            (result as Effect.Effect<unknown, unknown, FunctionServices>).pipe(\n              Effect.orDie,\n              Effect.provide(funcContext.createLayer()),\n            ),\n          );\n        }\n\n        // Flush in-memory ECHO writes before the function scope closes.\n        // Writes performed by `db.add` / `db.remove` are buffered in the in-memory\n        // `DatabaseImpl` and only pushed across the `DataService` binding when\n        // `db.flush({ disk })` is called. `FunctionContext._close` (invoked by the\n        // `await using` above) calls `db.close()` but does NOT flush, so mutations\n        // performed by handlers that declare `Database.Service` (e.g. `object-create`,\n        // `object-update`, `relation-create`) would be silently dropped before reaching\n        // the edge `AutomergeReplicator`. Flushing here closes that hole.\n        if (serviceTags.includes(Database.Service.key) && funcContext.db) {\n          await funcContext.db.flush({ disk: true, indexes: false });\n        }\n\n        if (func.output && !SchemaAST.isAnyKeyword(func.output.ast)) {\n          try {\n            Schema.validateSync(func.output, { onExcessProperty: 'error' })(result);\n          } catch (error: any) {\n            throw new InvalidOperationOutputError({\n              message: `Operation output did not match schema (${func.meta.key}): ${error.message}`,\n              cause: error,\n            });\n          }\n        }\n\n        return result;\n      } catch (error) {\n        // TODO(dmaretskyi): We might do error wrapping here and add extra context.\n        throw error;\n      }\n    },\n  };\n};\n\n/**\n * Container for services and context for a function.\n */\nclass FunctionContext extends Resource {\n  readonly context: FunctionProtocol.Context;\n  readonly client: EchoClient | undefined;\n  db: DatabaseImpl | undefined;\n  queues: QueueFactory | undefined;\n  readonly opts: FunctionWrappingOptions;\n\n  constructor(context: FunctionProtocol.Context, opts: FunctionWrappingOptions) {\n    super();\n    this.context = context;\n    this.opts = opts;\n    if (context.services.dataService && context.services.queryService) {\n      this.client = new EchoClient().connectToService({\n        dataService: context.services.dataService,\n        queryService: context.services.queryService,\n        queueService: context.services.queueService,\n      });\n    }\n  }\n\n  override async _open() {\n    await this.client?.open();\n    this.db =\n      this.client && this.context.spaceId\n        ? this.client.constructDatabase({\n            spaceId: this.context.spaceId ?? failedInvariant(),\n            spaceKey: PublicKey.fromHex(this.context.spaceKey ?? failedInvariant('spaceKey missing in context')),\n            reactiveSchemaQuery: false,\n            preloadSchemaOnOpen: false,\n          })\n        : undefined;\n\n    await this.db?.setSpaceRoot(this.context.spaceRootUrl ?? failedInvariant('spaceRootUrl missing in context'));\n    await this.db?.open();\n    this.queues =\n      this.client && this.context.spaceId ? this.client.constructQueueFactory(this.context.spaceId) : undefined;\n  }\n\n  override async _close() {\n    await this.db?.close();\n    await this.client?.close();\n  }\n\n  createLayer(): Layer.Layer<FunctionServices> {\n    assertState(this._lifecycleState === LifecycleState.OPEN, 'FunctionContext is not open');\n\n    const dbLayer = this.db ? Database.layer(this.db) : Database.notAvailable;\n    const feedLayer = this.queues ? createFeedServiceLayer(this.queues) : Feed.notAvailable;\n    const credentials = dbLayer\n      ? credentialsLayerFromDatabase({ caching: true }).pipe(Layer.provide(dbLayer))\n      : configuredCredentialsLayer([]);\n\n    const aiLayer = this.context.services.functionsAiService\n      ? InternalAiServiceLayer(this.context.services.functionsAiService).pipe(Layer.provide(credentials))\n      : AiService.notAvailable;\n\n    const operationServiceLayer = this.context.services.functionsService\n      ? makeOperationServiceLayer(this.context.services.functionsService)\n      : unavailableOperationServiceLayer;\n\n    const traceWriterLayer = this.context.services.traceService\n      ? makeTraceWriterLayer(this.context.services.traceService)\n      : Trace.writerLayerNoop;\n\n    log('Creating function context layer', {\n      traceService: !!this.context.services.traceService,\n      functionsService: !!this.context.services.functionsService,\n      functionsAiService: !!this.context.services.functionsAiService,\n      spaceId: this.context.spaceId,\n      spaceRootUrl: this.context.spaceRootUrl,\n      toolkits: this.opts.toolkits?.length ?? 0,\n      types: this.opts.types?.length ?? 0,\n    });\n\n    const registryLayer = this.db\n      ? Layer.succeed(Registry.Service, this.db.graph.registry)\n      : Layer.succeed(Registry.Service, makeRegistry());\n\n    return Layer.mergeAll(\n      dbLayer,\n      feedLayer,\n      credentials,\n      operationServiceLayer,\n      aiLayer,\n      OpaqueToolkit.providerLayer(OpaqueToolkit.merge(...(this.opts.toolkits ?? []))),\n      traceWriterLayer,\n      registryLayer,\n\n      // `FunctionInvocationService` is deprecated; new code should yield `Operation.Service`.\n      // The cloudflare wrapper provides only the unavailable layer to satisfy the (still-present)\n      // type union — handlers that yield it will die at invocation time.\n      FunctionInvocationService.layerNotAvailable,\n    );\n  }\n}\n\n/**\n * Backs `Trace.TraceService` with the EDGE-provided `TraceService` so that operation\n * handlers can write trace events that are forwarded to the runtime's trace sink.\n */\nconst makeTraceWriterLayer = (traceService: TraceProtocol.TraceService): Layer.Layer<Trace.TraceService> =>\n  Layer.succeed(Trace.TraceService, {\n    write: (eventType, payload) => {\n      log('Writing trace event', {\n        eventType: eventType.key,\n      });\n      traceService.write([\n        {\n          key: eventType.key,\n          isEphemeral: eventType.isEphemeral,\n          data: payload,\n        },\n      ]);\n    },\n  });\n\n/** Proxies Anthropic requests through the EDGE-provided `FunctionsAiService`, BYOK-wrapped. */\nconst InternalAiServiceLayer = (functionsAiService: EdgeFunctionEnv.FunctionsAiService) => {\n  // `apiUrl` is a sentinel — the request gets re-routed by the AI gateway in EDGE.\n  const httpClient = Header.byokLayer('anthropic.com').pipe(\n    Layer.provide(FunctionsAiHttpClient.layer(functionsAiService)),\n  );\n  const anthropicClient = AnthropicClient.layer({ apiUrl: 'http://internal/provider/anthropic' }).pipe(\n    Layer.provide(httpClient),\n  );\n  const resolver = AnthropicResolver.make().pipe(Layer.provide(anthropicClient));\n  return AiModelResolver.AiModelResolver.buildAiService.pipe(Layer.provide(resolver));\n};\n\n/**\n * Backs `Operation.Service` with the EDGE-provided `FunctionsService` so that operation\n * handlers can invoke other deployed operations remotely. The `deployedId` on the operation\n * definition is used as the routing key.\n */\nconst makeOperationServiceLayer = (\n  functionsService: EdgeFunctionEnv.FunctionsService,\n): Layer.Layer<Operation.Service> => {\n  const invokeRemote = async (\n    op: Operation.Definition.Any,\n    input: unknown,\n    options?: Operation.InvokeOptions,\n  ): Promise<{ data?: unknown; error?: Error }> => {\n    invariant(op.meta.deployedId, `Operation '${op.meta.key}' has no deployedId; cannot invoke remotely.`);\n    const result = await functionsService.invoke(op.meta.deployedId, input, {\n      spaceId: options?.spaceId,\n      // Forward the conversation DXN so the remote runtime can rebuild conversation-scoped\n      // services (e.g. `AiContext.Service`) needed by operations like `GetContext`.\n      conversation: options?.conversation,\n    });\n    if (result._kind === 'success') {\n      return { data: result.data };\n    }\n    return { error: ErrorCodec.decode(result.error) };\n  };\n\n  return Layer.succeed(Operation.Service, {\n    invoke: ((op: Operation.Definition.Any, input: unknown, options?: Operation.InvokeOptions) =>\n      Effect.tryPromise(() => invokeRemote(op, input, options)).pipe(\n        Effect.orDie,\n        Effect.flatMap((outcome) =>\n          outcome.error ? Effect.die(outcome.error) : Effect.succeed(outcome.data as never),\n        ),\n      )) as Operation.OperationService['invoke'],\n    schedule: ((op: Operation.Definition.Any, input: unknown, _options?: Operation.InvokeOptions) =>\n      Effect.sync(() => {\n        invariant(op.meta.deployedId, `Operation '${op.meta.key}' has no deployedId; cannot schedule remotely.`);\n        // Fire and forget — schedule is intentionally non-awaiting.\n        void functionsService.invoke(op.meta.deployedId, input).catch(() => {\n          // Swallow errors — schedule is observability-only.\n        });\n      })) as Operation.OperationService['schedule'],\n    invokePromise: ((op: Operation.Definition.Any, input: unknown, options?: Operation.InvokeOptions) =>\n      invokeRemote(op, input, options).catch((error: unknown) => ({\n        error: error instanceof Error ? error : new Error(String(error)),\n      }))) as Operation.OperationService['invokePromise'],\n  } satisfies Operation.OperationService);\n};\n\nconst unavailableOperationServiceLayer = Layer.succeed(Operation.Service, {\n  invoke: () => Effect.die('Operation.Service is not available: missing functionsService in EDGE context.'),\n  schedule: () => Effect.die('Operation.Service is not available: missing functionsService in EDGE context.'),\n  invokePromise: async () => ({\n    error: new Error('Operation.Service is not available: missing functionsService in EDGE context.'),\n  }),\n} as Operation.OperationService);\n\nconst decodeRefsFromSchema = (ast: SchemaAST.AST, value: unknown, db: DatabaseImpl): unknown => {\n  if (value == null) {\n    return value;\n  }\n\n  const encoded = SchemaAST.encodedBoundAST(ast);\n  if (Ref.isRefType(encoded)) {\n    if (Ref.isRef(value)) {\n      return value;\n    }\n\n    if (typeof value === 'object' && value !== null && typeof (value as any)['/'] === 'string') {\n      const resolver = db.graph.createRefResolver({ context: { space: db.spaceId } });\n      return refFromEncodedReference(value as any, resolver);\n    }\n\n    return value;\n  }\n\n  switch (encoded._tag) {\n    case 'TypeLiteral': {\n      if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n        return value;\n      }\n      const result: Record<string, unknown> = { ...(value as any) };\n      for (const prop of SchemaAST.getPropertySignatures(encoded)) {\n        const key = prop.name.toString();\n        if (key in result) {\n          result[key] = decodeRefsFromSchema(prop.type, (result as any)[key], db);\n        }\n      }\n      return result;\n    }\n\n    case 'TupleType': {\n      if (!Array.isArray(value)) {\n        return value;\n      }\n\n      // For arrays, effect uses TupleType with empty elements and a single rest element.\n      if (encoded.elements.length === 0 && encoded.rest.length === 1) {\n        const elementType = encoded.rest[0].type;\n        return (value as unknown[]).map((item) => decodeRefsFromSchema(elementType, item, db));\n      }\n\n      return value;\n    }\n\n    case 'Union': {\n      // Optional values are represented as union with undefined.\n      const nonUndefined = encoded.types.filter((t) => !SchemaAST.isUndefinedKeyword(t));\n      if (nonUndefined.length === 1) {\n        return decodeRefsFromSchema(nonUndefined[0], value, db);\n      }\n\n      // For other unions we can't safely pick a branch without validating.\n      return value;\n    }\n\n    case 'Suspend': {\n      return decodeRefsFromSchema(encoded.f(), value, db);\n    }\n\n    case 'Refinement': {\n      return decodeRefsFromSchema(encoded.from, value, db);\n    }\n\n    default: {\n      return value;\n    }\n  }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Headers from '@effect/platform/Headers';\nimport * as HttpClient from '@effect/platform/HttpClient';\nimport * as HttpClientError from '@effect/platform/HttpClientError';\nimport * as HttpClientResponse from '@effect/platform/HttpClientResponse';\nimport * as Effect from 'effect/Effect';\nimport * as FiberRef from 'effect/FiberRef';\nimport * as Layer from 'effect/Layer';\nimport * as Stream from 'effect/Stream';\n\nimport { FunctionsAiMemoizationMissError, FunctionsAiUpstreamError } from '@dxos/compute';\nimport { log } from '@dxos/log';\nimport { type EdgeFunctionEnv, ErrorCodec } from '@dxos/protocols';\n\n/**\n * Copy pasted from https://github.com/Effect-TS/effect/blob/main/packages/platform/src/internal/fetchHttpClient.ts\n */\nexport const requestInitTagKey = '@effect/platform/FetchHttpClient/FetchOptions';\n\n/**\n * Shape of the JSON error envelope emitted by the upstream AI gateway (and by the memoization\n * layer that fronts it in test environments).\n *\n * @example\n * ```json\n * {\n *   \"type\": \"error\",\n *   \"error\": {\n *     \"type\": \"memoization_miss\",\n *     \"message\": \"No memoized Anthropic conversation found for ...\",\n *     \"cacheKey\": \"114dae3db8fe60...\"\n *   }\n * }\n * ```\n */\ntype UpstreamErrorEnvelope = {\n  type?: string;\n  error?: {\n    type?: string;\n    message?: string;\n    cacheKey?: string;\n  };\n};\n\nexport class FunctionsAiHttpClient {\n  static make = (service: EdgeFunctionEnv.FunctionsAiService) =>\n    HttpClient.make((request, url, signal, fiber) => {\n      const context = fiber.getFiberRef(FiberRef.currentContext);\n      const options: RequestInit = context.unsafeMap.get(requestInitTagKey) ?? {};\n      const headers = options.headers\n        ? Headers.merge(Headers.fromInput(options.headers), request.headers)\n        : request.headers;\n\n      const send = (body: BodyInit | undefined) =>\n        Effect.tryPromise({\n          try: () =>\n            service.fetch(\n              new Request(url, {\n                ...options,\n                method: request.method,\n                headers,\n                body,\n                // Note: Don't pass signal - it can't be serialized through RPC\n              }),\n            ),\n          catch: (cause) => {\n            log.error('Failed to fetch', { errorSerialized: ErrorCodec.encode(cause as Error) });\n            return new HttpClientError.RequestError({\n              request,\n              reason: 'Transport',\n              cause,\n            });\n          },\n        }).pipe(\n          Effect.flatMap((response) =>\n            // Inspect the body before handing the response to `@effect/ai` so that structured\n            // upstream errors surface as typed defects (`FunctionsAiUpstreamError` and friends)\n            // rather than as the generic `HttpResponseError` from `@effect/ai/AiError`.\n            Effect.flatMap(\n              Effect.promise(() => parseUpstreamError(response)),\n              (typedError) =>\n                typedError ? Effect.die(typedError) : Effect.succeed(HttpClientResponse.fromWeb(request, response)),\n            ),\n          ),\n        );\n\n      switch (request.body._tag) {\n        case 'Raw':\n        case 'Uint8Array':\n          return send(request.body.body as any);\n        case 'FormData':\n          return send(request.body.formData);\n        case 'Stream':\n          return Stream.toReadableStreamEffect(request.body.stream).pipe(Effect.flatMap(send));\n      }\n\n      return send(undefined);\n    });\n\n  static layer = (service: EdgeFunctionEnv.FunctionsAiService) =>\n    Layer.succeed(HttpClient.HttpClient, FunctionsAiHttpClient.make(service));\n}\n\n/**\n * Returns a typed error if the response is a non-2xx JSON payload matching\n * {@link UpstreamErrorEnvelope}; otherwise returns `undefined` and the response is forwarded\n * unchanged.\n */\nconst parseUpstreamError = async (response: Response): Promise<Error | undefined> => {\n  if (response.ok) {\n    return undefined;\n  }\n  const contentType = response.headers.get('content-type') ?? '';\n  if (!contentType.toLowerCase().includes('application/json')) {\n    return undefined;\n  }\n  let body: UpstreamErrorEnvelope;\n  try {\n    body = (await response.clone().json()) as UpstreamErrorEnvelope;\n  } catch {\n    return undefined;\n  }\n  if (!body || body.type !== 'error' || typeof body.error !== 'object' || body.error === null) {\n    return undefined;\n  }\n  const inner = body.error;\n  const message = inner.message ?? `Upstream AI service responded with HTTP ${response.status}`;\n  if (inner.type === 'memoization_miss' && typeof inner.cacheKey === 'string') {\n    return new FunctionsAiMemoizationMissError({\n      message,\n      context: { cacheKey: inner.cacheKey, status: response.status },\n    });\n  }\n  return new FunctionsAiUpstreamError({\n    message,\n    context: { type: inner.type, status: response.status, ...(inner.cacheKey ? { cacheKey: inner.cacheKey } : {}) },\n  });\n};\n"],
  "mappings": "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",
  "names": ["HttpClient", "HttpClientRequest", "Effect", "Layer", "Redacted", "Credential", "Database", "Query", "AccessToken", "ConfiguredCredentialsService", "credentials", "addCredentials", "push", "queryCredentials", "query", "filter", "credential", "service", "getCredential", "find", "Error", "withAuthorization", "token", "kind", "mapRequest", "request", "authorization", "setHeader", "configuredCredentialsLayer", "succeed", "CredentialsService", "credentialsLayerConfig", "effect", "gen", "serviceCredentials", "forEach", "apiKey", "value", "credentialsLayerFromDatabase", "caching", "dbService", "Service", "cache", "Map", "cacheKey", "JSON", "stringify", "has", "get", "accessTokens", "db", "type", "run", "accessToken", "source", "map", "set", "length", "Context", "Effect", "Layer", "FunctionInvocationService", "Tag", "layerNotAvailable", "succeed", "invokeFunction", "die", "resolveFunction", "functionDef", "input", "serviceFunctionEffect", "service", "key", "MESSAGE_PROPERTY_TOOL_CALL_ID", "FUNCTIONS_META_KEY", "FUNCTIONS_PRESET_META_KEY", "getUserFunctionIdInMetadata", "meta", "keys", "find", "key", "source", "id", "setUserFunctionIdInMetadata", "functionId", "Error", "push", "Effect", "Layer", "Schema", "SchemaAST", "AiModelResolver", "AiService", "AnthropicResolver", "FunctionError", "InvalidOperationInputError", "LifecycleState", "Resource", "Database", "JsonSchema", "createFeedServiceLayer", "EchoClient", "refFromEncodedReference", "EffectEx", "assertState", "failedInvariant", "PublicKey", "log", "ErrorCodec", "configuredCredentialsLayer", "Headers", "HttpClient", "HttpClientError", "HttpClientResponse", "Effect", "FiberRef", "Layer", "Stream", "FunctionsAiMemoizationMissError", "FunctionsAiUpstreamError", "log", "ErrorCodec", "make", "getFiberRef", "options", "unsafeMap", "get", "requestInitTagKey", "headers", "merge", "fromInput", "send", "body", "tryPromise", "service", "Request", "method", "request", "cause", "errorSerialized", "RequestError", "reason", "formData", "toReadableStreamEffect", "undefined", "layer", "contentType", "inner", "message", "context", "status", "cacheKey", "Operation", "isOperationWithHandler", "func", "TypeError", "meta", "key", "name", "description", "inputSchema", "JsonSchema", "outputSchema", "output", "undefined", "services", "service", "handler", "serviceTags", "includes", "Database", "FunctionError", "message", "Schema", "onExcessProperty", "data", "error", "InvalidOperationInputError", "cause", "types", "invariant", "funcContext", "registry", "result", "dataWithDecodedRefs", "Effect", "isEffect", "EffectEx", "runAndForwardErrors", "flush", "disk", "indexes", "InvalidOperationOutputError", "context", "client", "db", "queues", "opts", "connectToService", "dataService", "queryService", "queueService", "spaceId", "failedInvariant", "spaceKey", "PublicKey", "fromHex", "reactiveSchemaQuery", "preloadSchemaOnOpen", "open", "close", "createLayer", "assertState", "dbLayer", "layer", "feedLayer", "createFeedServiceLayer", "credentials", "credentialsLayerFromDatabase", "caching", "pipe", "Layer", "aiLayer", "InternalAiServiceLayer", "operationServiceLayer", "functionsService", "makeOperationServiceLayer", "unavailableOperationServiceLayer", "traceWriterLayer", "traceService", "makeTraceWriterLayer", "writerLayerNoop", "log", "functionsAiService", "spaceRootUrl", "toolkits", "length", "registryLayer", "succeed", "Registry", "OpaqueToolkit", "providerLayer", "write", "payload", "eventType", "__dxlog_file", "isEphemeral", "anthropicClient", "AnthropicClient", "apiUrl", "resolver", "AnthropicResolver", "AiModelResolver", "buildAiService", "invokeRemote", "input", "options", "deployedId", "op", "ErrorCodec", "schedule", "invokePromise", "Error", "String", "invoke", "die", "value", "Ref", "encoded", "createRefResolver", "space", "toString", "decodeRefsFromSchema", "elementType", "rest", "item", "nonUndefined"]
}
