{"version":3,"sources":["../src/domain.ts","../src/sdk.ts","../src/http.ts"],"names":["Effect"],"mappings":"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","file":"http.mjs","sourcesContent":["import { Data, Effect, Schema } from \"effect\";\n\nconst NonEmptyStringSchema = Schema.String.pipe(Schema.nonEmptyString());\n\nconst isIsoDateString = (value: string): boolean => {\n  const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(value);\n  if (!match) {\n    return false;\n  }\n\n  const [, year, month, day] = match;\n  const parsed = new Date(`${value}T00:00:00.000Z`);\n  return (\n    parsed.getUTCFullYear() === Number(year) &&\n    parsed.getUTCMonth() + 1 === Number(month) &&\n    parsed.getUTCDate() === Number(day)\n  );\n};\n\nconst IsoDateStringSchema = Schema.String.pipe(\n  Schema.filter(\n    (value) => isIsoDateString(value) || \"must be a valid ISO date string\"\n  )\n);\n\nconst UnitsSchema = Schema.Number.pipe(Schema.int(), Schema.positive());\nconst NpiSchema = Schema.String.pipe(Schema.pattern(/^\\d{10}$/));\nconst TinSchema = Schema.String.pipe(Schema.pattern(/^\\d{2}-\\d{7}$/));\n\nexport const SupportingInfoSchema = Schema.Struct({\n  id: NonEmptyStringSchema,\n  value: NonEmptyStringSchema,\n  source: Schema.Literal(\"chart\", \"patient\", \"payer\", \"external\")\n});\n\nexport type SupportingInfo = typeof SupportingInfoSchema.Type;\n\nexport const SupportingInfoListSchema = Schema.Array(SupportingInfoSchema);\n\nexport const decodeSupportingInfoList = (\n  input: unknown\n): Effect.Effect<ReadonlyArray<SupportingInfo>, ProtocolError> =>\n  Effect.suspend(() =>\n    Schema.decodeUnknown(SupportingInfoListSchema)(input).pipe(\n      Effect.mapError(\n        (detail) =>\n          new ProtocolError({\n            kind: \"validation\",\n            reason: \"invalid-evidence\",\n            detail\n          })\n      )\n    )\n  ).pipe(\n    Effect.catchAllDefect((detail) =>\n      Effect.fail(\n        new ProtocolError({\n          kind: \"validation\",\n          reason: \"invalid-evidence\",\n          detail\n        })\n      )\n    )\n  );\n\nexport const DocumentationRequirementSchema = Schema.Struct({\n  id: NonEmptyStringSchema,\n  description: NonEmptyStringSchema,\n  questionnaire: NonEmptyStringSchema\n});\n\nexport type DocumentationRequirement =\n  typeof DocumentationRequirementSchema.Type;\n\nexport const AuthorizationRequestSchema = Schema.Struct({\n  patient: Schema.Struct({\n    memberId: NonEmptyStringSchema,\n    dob: IsoDateStringSchema\n  }),\n  provider: Schema.Struct({\n    npi: NpiSchema,\n    tin: TinSchema\n  }),\n  service: Schema.Struct({\n    code: NonEmptyStringSchema,\n    codeSystem: NonEmptyStringSchema,\n    diagnosis: Schema.Array(NonEmptyStringSchema),\n    placeOfService: NonEmptyStringSchema,\n    requestedStart: IsoDateStringSchema,\n    units: UnitsSchema,\n    urgency: Schema.Literal(\"standard\", \"expedited\")\n  }),\n  supportingInfo: Schema.Array(SupportingInfoSchema)\n});\n\nexport type AuthorizationRequest = typeof AuthorizationRequestSchema.Type;\n\nexport type ProtocolErrorKind =\n  | \"validation\"\n  | \"transport\"\n  | \"workflow\"\n  | \"payer\";\n\nexport type ProtocolErrorReason =\n  | \"invalid-request\"\n  | \"invalid-evidence\"\n  | \"invalid-determination\"\n  | \"invalid-terminal-determination\"\n  | \"invalid-resume-token\"\n  | \"invalid-subscription-event\"\n  | \"unknown-subscription\"\n  | \"subscription-timeout\"\n  | \"evidence-required\"\n  | \"evidence-missing-requirements\"\n  | \"evidence-collection-failed\"\n  | \"max-steps-exceeded\"\n  | \"policy-evaluation-failed\"\n  | \"policy-review-failed\"\n  | \"http-error\"\n  | \"http-timeout\"\n  | \"http-request-failed\"\n  | \"missing-base-url\"\n  | \"smart-auth-configuration-invalid\"\n  | \"smart-configuration-failed\"\n  | \"smart-token-request-failed\"\n  | \"smart-token-response-invalid\"\n  | \"transport-authorize-failed\"\n  | \"transport-resume-failed\"\n  | \"transport-await-failed\"\n  | \"transport-audit-failed\"\n  | \"transport-verify-failed\"\n  | \"transport-capabilities-failed\"\n  | (string & {});\n\n/**\n * Structured protocol failure raised by the SDK and Effect services.\n *\n * @example\n * try {\n *   await client.request(request);\n * } catch (error) {\n *   if (error instanceof ProtocolError && error.kind === \"validation\") {\n *     console.error(error.reason, error.detail);\n *   }\n * }\n */\nexport class ProtocolError extends Data.TaggedError(\"ProtocolError\")<{\n  readonly reason: ProtocolErrorReason;\n  readonly kind?: ProtocolErrorKind;\n  readonly detail?: unknown;\n  readonly requestId?: string;\n}> {\n  override get message(): string {\n    const kind = this.kind ? `${this.kind}: ` : \"\";\n    return `${kind}${this.reason}`;\n  }\n}\n\nexport const decodeAuthorizationRequest = (\n  input: unknown\n): Effect.Effect<AuthorizationRequest, ProtocolError> =>\n  Effect.suspend(() =>\n    Schema.decodeUnknown(AuthorizationRequestSchema)(input).pipe(\n      Effect.mapError(\n        (detail) =>\n          new ProtocolError({\n            kind: \"validation\",\n            reason: \"invalid-request\",\n            detail\n          })\n      )\n    )\n  ).pipe(\n    Effect.catchAllDefect((detail) =>\n      Effect.fail(\n        new ProtocolError({\n          kind: \"validation\",\n          reason: \"invalid-request\",\n          detail\n        })\n      )\n    )\n  );\n\nexport type DeterminationStatus =\n  | \"approved\"\n  | \"denied\"\n  | \"info-needed\"\n  | \"pended\"\n  | \"error\";\n\nexport type NextAction =\n  | \"none\"\n  | \"attach-evidence\"\n  | \"await-payer\"\n  | \"appeal\"\n  | \"contact-payer\";\n\nexport type PendingReason =\n  | \"human-review\"\n  | \"payer-processing\"\n  | \"external-records\";\n\nexport type DeterminationBy = \"rules\" | \"clinical-reviewer\" | null;\n\nexport interface SignatureReceipt {\n  readonly alg: \"EdDSA\";\n  readonly format: \"detached-json\";\n  readonly keyId: string;\n  readonly issuedAt: string;\n  readonly requestHash: string;\n  readonly payloadHash: string;\n  readonly nonce: string;\n  readonly signature: string;\n}\n\nexport interface X278Capabilities {\n  readonly protocol: \"x278\";\n  readonly implementation: string;\n  readonly endpoints: {\n    readonly authorize: string;\n    readonly resume: string;\n    readonly awaitDetermination: string;\n    readonly auditLog?: string;\n    readonly verify?: string;\n  };\n  readonly signing?: {\n    readonly alg: SignatureReceipt[\"alg\"];\n    readonly publicKeyPem?: string;\n  };\n}\n\nexport const SignatureReceiptSchema = Schema.Struct({\n  alg: Schema.Literal(\"EdDSA\"),\n  format: Schema.Literal(\"detached-json\"),\n  keyId: Schema.String,\n  issuedAt: Schema.String,\n  requestHash: Schema.String,\n  payloadHash: Schema.String,\n  nonce: Schema.String,\n  signature: Schema.String\n});\n\nexport interface DeterminationBase {\n  readonly authId: string;\n  readonly status: DeterminationStatus;\n  readonly nextAction: NextAction;\n  readonly ruleSetVersion: string;\n  readonly expiresAt: string | null;\n  readonly determinationBy: DeterminationBy;\n}\n\nexport interface ApprovedDetermination extends DeterminationBase {\n  readonly status: \"approved\";\n  readonly nextAction: \"none\";\n  readonly authNumber: string;\n  readonly approvedUnits: number;\n  readonly validFrom: string;\n  readonly validThrough: string;\n  readonly determinationBy: \"rules\" | \"clinical-reviewer\";\n  readonly signature: SignatureReceipt;\n}\n\nexport const ApprovedDeterminationSchema = Schema.Struct({\n  authId: Schema.String,\n  status: Schema.Literal(\"approved\"),\n  nextAction: Schema.Literal(\"none\"),\n  ruleSetVersion: Schema.String,\n  expiresAt: Schema.NullOr(Schema.String),\n  determinationBy: Schema.Literal(\"rules\", \"clinical-reviewer\"),\n  authNumber: Schema.String,\n  approvedUnits: UnitsSchema,\n  validFrom: IsoDateStringSchema,\n  validThrough: IsoDateStringSchema,\n  signature: SignatureReceiptSchema\n});\n\nexport type UnsignedApprovedDetermination = Omit<\n  ApprovedDetermination,\n  \"signature\"\n>;\n\nexport interface DeniedDetermination extends DeterminationBase {\n  readonly status: \"denied\";\n  readonly nextAction: \"appeal\";\n  readonly reasonCode: string;\n  readonly reasonText: string;\n  readonly appealPath: string;\n  readonly determinationBy: \"rules\" | \"clinical-reviewer\";\n  readonly signature: SignatureReceipt;\n}\n\nexport const DeniedDeterminationSchema = Schema.Struct({\n  authId: Schema.String,\n  status: Schema.Literal(\"denied\"),\n  nextAction: Schema.Literal(\"appeal\"),\n  ruleSetVersion: Schema.String,\n  expiresAt: Schema.NullOr(Schema.String),\n  determinationBy: Schema.Literal(\"rules\", \"clinical-reviewer\"),\n  reasonCode: Schema.String,\n  reasonText: Schema.String,\n  appealPath: Schema.String,\n  signature: SignatureReceiptSchema\n});\n\nexport type UnsignedDeniedDetermination = Omit<DeniedDetermination, \"signature\">;\n\nexport type UnsignedTerminalDetermination =\n  | UnsignedApprovedDetermination\n  | UnsignedDeniedDetermination;\n\nexport interface InfoNeededDetermination extends DeterminationBase {\n  readonly status: \"info-needed\";\n  readonly nextAction: \"attach-evidence\";\n  readonly documentationRequired: ReadonlyArray<DocumentationRequirement>;\n  readonly resumeToken: string;\n  readonly determinationBy: null;\n}\n\nexport const InfoNeededDeterminationSchema = Schema.Struct({\n  authId: Schema.String,\n  status: Schema.Literal(\"info-needed\"),\n  nextAction: Schema.Literal(\"attach-evidence\"),\n  ruleSetVersion: Schema.String,\n  expiresAt: Schema.NullOr(Schema.String),\n  determinationBy: Schema.Null,\n  documentationRequired: Schema.Array(DocumentationRequirementSchema),\n  resumeToken: Schema.String\n});\n\nexport interface PendedDetermination extends DeterminationBase {\n  readonly status: \"pended\";\n  readonly nextAction: \"await-payer\";\n  readonly pendingReason: PendingReason;\n  readonly subscription: string;\n  readonly determinationBy: \"clinical-reviewer\" | null;\n}\n\nexport const PendedDeterminationSchema = Schema.Struct({\n  authId: Schema.String,\n  status: Schema.Literal(\"pended\"),\n  nextAction: Schema.Literal(\"await-payer\"),\n  ruleSetVersion: Schema.String,\n  expiresAt: Schema.NullOr(Schema.String),\n  determinationBy: Schema.NullOr(Schema.Literal(\"clinical-reviewer\")),\n  pendingReason: Schema.Literal(\n    \"human-review\",\n    \"payer-processing\",\n    \"external-records\"\n  ),\n  subscription: Schema.String\n});\n\nexport interface ErrorDetermination extends DeterminationBase {\n  readonly status: \"error\";\n  readonly nextAction: \"contact-payer\";\n  readonly reasonCode: string;\n  readonly reasonText: string;\n  readonly determinationBy: null;\n}\n\nexport const ErrorDeterminationSchema = Schema.Struct({\n  authId: Schema.String,\n  status: Schema.Literal(\"error\"),\n  nextAction: Schema.Literal(\"contact-payer\"),\n  ruleSetVersion: Schema.String,\n  expiresAt: Schema.NullOr(Schema.String),\n  determinationBy: Schema.Null,\n  reasonCode: Schema.String,\n  reasonText: Schema.String\n});\n\nexport type TerminalDetermination =\n  | ApprovedDetermination\n  | DeniedDetermination;\n\nexport type NonTerminalDetermination =\n  | InfoNeededDetermination\n  | PendedDetermination;\n\nexport type Determination =\n  | TerminalDetermination\n  | NonTerminalDetermination\n  | ErrorDetermination;\n\nexport const TerminalDeterminationSchema = Schema.Union(\n  ApprovedDeterminationSchema,\n  DeniedDeterminationSchema\n);\n\nexport const DeterminationSchema = Schema.Union(\n  ApprovedDeterminationSchema,\n  DeniedDeterminationSchema,\n  InfoNeededDeterminationSchema,\n  PendedDeterminationSchema,\n  ErrorDeterminationSchema\n);\n\nexport const decodeDetermination = (\n  input: unknown\n): Effect.Effect<Determination, ProtocolError> =>\n  Effect.suspend(() =>\n    Schema.decodeUnknown(DeterminationSchema)(input).pipe(\n      Effect.mapError(\n        (detail) =>\n          new ProtocolError({\n            kind: \"validation\",\n            reason: \"invalid-determination\",\n            detail\n          })\n      )\n    )\n  ).pipe(\n    Effect.catchAllDefect((detail) =>\n      Effect.fail(\n        new ProtocolError({\n          kind: \"validation\",\n          reason: \"invalid-determination\",\n          detail\n        })\n      )\n    )\n  );\n\nexport const decodeTerminalDetermination = (\n  input: unknown\n): Effect.Effect<TerminalDetermination, ProtocolError> =>\n  Effect.suspend(() =>\n    Schema.decodeUnknown(TerminalDeterminationSchema)(input).pipe(\n      Effect.mapError(\n        (detail) =>\n          new ProtocolError({\n            kind: \"validation\",\n            reason: \"invalid-terminal-determination\",\n            detail\n          })\n      )\n    )\n  ).pipe(\n    Effect.catchAllDefect((detail) =>\n      Effect.fail(\n        new ProtocolError({\n          kind: \"validation\",\n          reason: \"invalid-terminal-determination\",\n          detail\n        })\n      )\n    )\n  );\n\nexport interface AuditRecord {\n  readonly authId: string;\n  readonly status: TerminalDetermination[\"status\"];\n  readonly requestHash: string;\n  readonly determinationHash: string;\n  readonly signatureKeyId: string;\n  readonly appendedAt: string;\n}\n","import { Cause, Effect, Exit, Option } from \"effect\";\nimport type {\n  AuditRecord,\n  AuthorizationRequest,\n  Determination,\n  DocumentationRequirement,\n  PendedDetermination,\n  SupportingInfo,\n  TerminalDetermination,\n  X278Capabilities\n} from \"./domain.js\";\nimport {\n  ProtocolError,\n  type ProtocolErrorKind,\n  type ProtocolErrorReason,\n  decodeAuthorizationRequest,\n  decodeDetermination,\n  decodeSupportingInfoList,\n  decodeTerminalDetermination\n} from \"./domain.js\";\nimport {\n  type PayerAgentOptions,\n  type PayerAgentService,\n  makePayerAgent,\n  makeReferencePayerAgent\n} from \"./payer-agent.js\";\n\n/**\n * Effect-native transport implemented by payer adapters.\n *\n * @example\n * const client = createX278EffectClient(fromPayerAgent(payer));\n */\nexport interface X278EffectTransport {\n  readonly authorize: (\n    request: AuthorizationRequest\n  ) => Effect.Effect<Determination, ProtocolError>;\n  readonly resume: (\n    authId: string,\n    resumeToken: string,\n    evidence: ReadonlyArray<SupportingInfo>\n  ) => Effect.Effect<Determination, ProtocolError>;\n  readonly awaitDetermination: (\n    subscription: string\n  ) => Effect.Effect<TerminalDetermination, ProtocolError>;\n  readonly auditLog?: Effect.Effect<ReadonlyArray<AuditRecord>, ProtocolError>;\n  readonly verify?: (\n    request: AuthorizationRequest,\n    determination: TerminalDetermination\n  ) => Effect.Effect<boolean, ProtocolError>;\n  readonly capabilities?: Effect.Effect<X278Capabilities, ProtocolError>;\n}\n\n/**\n * Promise transport for applications that do not expose Effect at their edge.\n *\n * @example\n * const client = createX278Client({\n *   authorize: (request) => fetchDetermination(request),\n *   resume: (authId, token, evidence) => resumeDetermination(authId, token, evidence),\n *   awaitDetermination: (subscription) => waitForFinal(subscription)\n * });\n */\nexport interface X278Transport {\n  readonly authorize: (request: AuthorizationRequest) => Promise<Determination>;\n  readonly resume: (\n    authId: string,\n    resumeToken: string,\n    evidence: ReadonlyArray<SupportingInfo>\n  ) => Promise<Determination>;\n  readonly awaitDetermination: (\n    subscription: string\n  ) => Promise<TerminalDetermination>;\n  readonly auditLog?: () => Promise<ReadonlyArray<AuditRecord>>;\n  readonly verify?: (\n    request: AuthorizationRequest,\n    determination: TerminalDetermination\n  ) => Promise<boolean>;\n  readonly capabilities?: () => Promise<X278Capabilities>;\n}\n\n/**\n * Context passed to evidence collection hooks during an info-needed retry.\n */\nexport interface EvidenceCollectionContext {\n  readonly authId: string;\n  readonly attempt: number;\n}\n\n/**\n * Client behavior knobs. Defaults keep the loop bounded and require callers to\n * opt into automatic evidence collection.\n *\n * @example\n * const client = createMockX278Client({\n *   maxSteps: 4,\n *   collectEvidence: (_request, requirements) =>\n *     requirements.map((requirement) => ({\n *       id: requirement.id,\n *       value: \"chart evidence\",\n *       source: \"chart\"\n *     }))\n * });\n */\nexport interface X278ClientOptions {\n  readonly maxSteps?: number;\n  readonly collectEvidence?: (\n    request: AuthorizationRequest,\n    requirements: ReadonlyArray<DocumentationRequirement>,\n    context: EvidenceCollectionContext\n  ) =>\n    | ReadonlyArray<SupportingInfo>\n    | Promise<ReadonlyArray<SupportingInfo>>\n    | Effect.Effect<ReadonlyArray<SupportingInfo>, ProtocolError>;\n  readonly awaitPended?: (\n    request: AuthorizationRequest,\n    pended: PendedDetermination,\n    context: EvidenceCollectionContext\n  ) =>\n    | TerminalDetermination\n    | Promise<TerminalDetermination>\n    | Effect.Effect<TerminalDetermination, ProtocolError>;\n}\n\n/**\n * Full transcript for a provider-side request loop.\n */\nexport interface X278RequestTrace {\n  readonly originalRequest: AuthorizationRequest;\n  readonly finalRequest: AuthorizationRequest;\n  readonly steps: ReadonlyArray<Determination>;\n  readonly final: TerminalDetermination;\n}\n\n/**\n * Effect-native x278 client that validates unknown inputs before transport use.\n */\nexport interface X278EffectClient {\n  readonly authorize: (\n    request: unknown\n  ) => Effect.Effect<Determination, ProtocolError>;\n  readonly resume: (\n    authId: string,\n    resumeToken: string,\n    evidence: ReadonlyArray<SupportingInfo>\n  ) => Effect.Effect<Determination, ProtocolError>;\n  readonly awaitDetermination: (\n    subscription: string\n  ) => Effect.Effect<TerminalDetermination, ProtocolError>;\n  readonly request: (\n    request: unknown\n  ) => Effect.Effect<TerminalDetermination, ProtocolError>;\n  readonly requestWithTrace: (\n    request: unknown\n  ) => Effect.Effect<X278RequestTrace, ProtocolError>;\n  readonly auditLog?: Effect.Effect<ReadonlyArray<AuditRecord>, ProtocolError>;\n  readonly verify?: (\n    request: AuthorizationRequest,\n    determination: TerminalDetermination\n  ) => Effect.Effect<boolean, ProtocolError>;\n  readonly capabilities?: Effect.Effect<X278Capabilities, ProtocolError>;\n}\n\n/**\n * Promise x278 client for provider applications.\n *\n * @example\n * const client = createMockX278Client({ collectEvidence });\n * const determination = await client.request(authorizationRequest);\n */\nexport interface X278Client {\n  readonly authorize: (request: unknown) => Promise<Determination>;\n  readonly resume: (\n    authId: string,\n    resumeToken: string,\n    evidence: ReadonlyArray<SupportingInfo>\n  ) => Promise<Determination>;\n  readonly awaitDetermination: (\n    subscription: string\n  ) => Promise<TerminalDetermination>;\n  readonly request: (request: unknown) => Promise<TerminalDetermination>;\n  readonly requestWithTrace: (request: unknown) => Promise<X278RequestTrace>;\n  readonly auditLog?: () => Promise<ReadonlyArray<AuditRecord>>;\n  readonly verify?: (\n    request: AuthorizationRequest,\n    determination: TerminalDetermination\n  ) => Promise<boolean>;\n  readonly capabilities?: () => Promise<X278Capabilities>;\n}\n\nconst fromPromise = <A>(\n  promise: () => Promise<A>,\n  reason: ProtocolErrorReason,\n  kind: ProtocolErrorKind = \"transport\"\n): Effect.Effect<A, ProtocolError> =>\n  Effect.tryPromise({\n    try: promise,\n    catch: (detail) =>\n      detail instanceof ProtocolError\n        ? detail\n        : new ProtocolError({ kind, reason, detail })\n  });\n\nconst runProtocolPromise = async <A>(\n  effect: Effect.Effect<A, ProtocolError>\n): Promise<A> => {\n  const exit = await Effect.runPromiseExit(effect);\n\n  if (Exit.isSuccess(exit)) {\n    return exit.value;\n  }\n\n  const failure = Cause.failureOption(exit.cause);\n  if (Option.isSome(failure)) {\n    throw failure.value;\n  }\n\n  throw Cause.squash(exit.cause);\n};\n\nconst isEffect = <A, E>(value: unknown): value is Effect.Effect<A, E> =>\n  Effect.isEffect(value);\n\nconst collectEvidenceEffect = (\n  request: AuthorizationRequest,\n  requirements: ReadonlyArray<DocumentationRequirement>,\n  context: EvidenceCollectionContext,\n  options: X278ClientOptions\n): Effect.Effect<ReadonlyArray<SupportingInfo>, ProtocolError> => {\n  if (!options.collectEvidence) {\n    return Effect.fail(\n      new ProtocolError({\n        kind: \"workflow\",\n        reason: \"evidence-required\",\n        detail: requirements\n      })\n    );\n  }\n\n  const collectEvidence = options.collectEvidence;\n\n  return Effect.suspend(() => {\n    const result = collectEvidence(request, requirements, context);\n\n    if (isEffect<ReadonlyArray<SupportingInfo>, ProtocolError>(result)) {\n      return result.pipe(Effect.flatMap(decodeSupportingInfoList));\n    }\n\n    if (result instanceof Promise) {\n      return fromPromise(\n        () => result,\n        \"evidence-collection-failed\",\n        \"workflow\"\n      ).pipe(\n        Effect.flatMap(decodeSupportingInfoList)\n      );\n    }\n\n    return decodeSupportingInfoList(result ?? []);\n  });\n};\n\nconst awaitPendedEffect = (\n  request: AuthorizationRequest,\n  pended: PendedDetermination,\n  context: EvidenceCollectionContext,\n  options: X278ClientOptions\n): Effect.Effect<TerminalDetermination, ProtocolError> => {\n  if (!options.awaitPended) {\n    return Effect.fail(\n      new ProtocolError({\n        kind: \"workflow\",\n        reason: \"unknown-subscription\",\n        detail: pended.subscription\n      })\n    );\n  }\n\n  const awaitPended = options.awaitPended;\n\n  return Effect.suspend(() => {\n    const result = awaitPended(request, pended, context);\n\n    if (isEffect<TerminalDetermination, ProtocolError>(result)) {\n      return result.pipe(Effect.flatMap(decodeTerminalDetermination));\n    }\n\n    if (result instanceof Promise) {\n      return fromPromise(\n        () => result,\n        \"transport-await-failed\"\n      ).pipe(Effect.flatMap(decodeTerminalDetermination));\n    }\n\n    return decodeTerminalDetermination(result);\n  });\n};\n\nconst appendEvidence = (\n  request: AuthorizationRequest,\n  evidence: ReadonlyArray<SupportingInfo>\n): AuthorizationRequest => ({\n  ...request,\n  supportingInfo: [...request.supportingInfo, ...evidence]\n});\n\nconst toEffectTransport = (transport: X278Transport): X278EffectTransport => {\n  const auditLog = transport.auditLog;\n  const verify = transport.verify;\n  const capabilities = transport.capabilities;\n\n  return {\n    authorize: (request) =>\n      fromPromise(() => transport.authorize(request), \"transport-authorize-failed\").pipe(\n        Effect.flatMap(decodeDetermination)\n      ),\n    resume: (authId, resumeToken, evidence) =>\n      fromPromise(\n        () => transport.resume(authId, resumeToken, evidence),\n        \"transport-resume-failed\"\n      ).pipe(Effect.flatMap(decodeDetermination)),\n    awaitDetermination: (subscription) =>\n      fromPromise(\n        () => transport.awaitDetermination(subscription),\n        \"transport-await-failed\"\n      ).pipe(Effect.flatMap(decodeTerminalDetermination)),\n    ...(auditLog\n      ? {\n          auditLog: fromPromise(() => auditLog(), \"transport-audit-failed\")\n        }\n      : {}),\n    ...(verify\n      ? {\n          verify: (request, determination) =>\n            fromPromise(\n              () => verify(request, determination),\n              \"transport-verify-failed\"\n            )\n        }\n      : {}),\n    ...(capabilities\n      ? {\n          capabilities: fromPromise(\n            () => capabilities(),\n            \"transport-capabilities-failed\"\n          )\n        }\n      : {})\n  };\n};\n\n/**\n * Adapts an Effect payer service into an SDK transport.\n *\n * @example\n * const transport = fromPayerAgent(payer);\n * const client = createX278EffectClient(transport);\n */\nexport const fromPayerAgent = (\n  payer: PayerAgentService\n): X278EffectTransport => ({\n  authorize: (request) => payer.authorize(request),\n  resume: (authId, resumeToken, evidence) =>\n    payer.resume(authId, resumeToken, evidence),\n  awaitDetermination: (subscription) => payer.awaitDetermination(subscription),\n  auditLog: payer.auditLog,\n  verify: (request, determination) => payer.verify(request, determination)\n});\n\n/**\n * Creates an Effect-native provider client.\n *\n * @example\n * const client = createX278EffectClient(transport, { maxSteps: 4 });\n * const final = yield* client.request(request);\n */\nexport const createX278EffectClient = (\n  transport: X278EffectTransport,\n  options: X278ClientOptions = {}\n): X278EffectClient => {\n  const maxSteps = options.maxSteps ?? 8;\n\n  const authorize = (request: unknown) =>\n    decodeAuthorizationRequest(request).pipe(\n      Effect.flatMap((decoded) => transport.authorize(decoded)),\n      Effect.flatMap(decodeDetermination)\n    );\n\n  const resume = (\n    authId: string,\n    resumeToken: string,\n    evidence: ReadonlyArray<SupportingInfo>\n  ) =>\n    decodeSupportingInfoList(evidence).pipe(\n      Effect.flatMap((decodedEvidence) =>\n        transport.resume(authId, resumeToken, decodedEvidence)\n      ),\n      Effect.flatMap(decodeDetermination)\n    );\n\n  const awaitDetermination = (subscription: string) =>\n    transport\n      .awaitDetermination(subscription)\n      .pipe(Effect.flatMap(decodeTerminalDetermination));\n\n  const requestWithTrace = (\n    input: unknown\n  ): Effect.Effect<X278RequestTrace, ProtocolError> =>\n    Effect.gen(function* () {\n      const originalRequest = yield* decodeAuthorizationRequest(input);\n      let workingRequest = originalRequest;\n      const steps: Array<Determination> = [];\n\n      let current = yield* transport.authorize(workingRequest);\n      steps.push(current);\n\n      for (let attempt = 1; attempt <= maxSteps; attempt += 1) {\n        if (current.status === \"approved\" || current.status === \"denied\") {\n          return {\n            originalRequest,\n            finalRequest: workingRequest,\n            steps,\n            final: current\n          };\n        }\n\n        if (current.status === \"info-needed\") {\n          const evidence = yield* collectEvidenceEffect(\n            workingRequest,\n            current.documentationRequired,\n            { authId: current.authId, attempt },\n            options\n          );\n          workingRequest = appendEvidence(workingRequest, evidence);\n          current = yield* transport.resume(\n            current.authId,\n            current.resumeToken,\n            evidence\n          );\n          steps.push(current);\n          continue;\n        }\n\n        if (current.status === \"pended\") {\n          current = yield* (options.awaitPended\n            ? awaitPendedEffect(\n                workingRequest,\n                current,\n                { authId: current.authId, attempt },\n                options\n              )\n            : transport.awaitDetermination(current.subscription));\n          steps.push(current);\n          continue;\n        }\n\n        return yield* Effect.fail(\n          new ProtocolError({\n            kind: \"payer\",\n            reason: current.reasonCode,\n            detail: current.reasonText\n          })\n        );\n      }\n\n      return yield* Effect.fail(\n        new ProtocolError({\n          kind: \"workflow\",\n          reason: \"max-steps-exceeded\",\n          detail: { maxSteps, steps }\n        })\n      );\n    });\n\n  const auditLog = transport.auditLog;\n  const verify = transport.verify;\n  const capabilities = transport.capabilities;\n\n  return {\n    authorize,\n    resume,\n    awaitDetermination,\n    request: (request) =>\n      requestWithTrace(request).pipe(Effect.map((trace) => trace.final)),\n    requestWithTrace,\n    ...(auditLog ? { auditLog } : {}),\n    ...(verify ? { verify } : {}),\n    ...(capabilities ? { capabilities } : {})\n  };\n};\n\n/**\n * Creates a Promise-based provider client.\n *\n * @example\n * const client = createX278Client(transport, { collectEvidence });\n * const final = await client.request(request);\n */\nexport const createX278Client = (\n  transport: X278Transport,\n  options: X278ClientOptions = {}\n): X278Client => {\n  const effectClient = createX278EffectClient(toEffectTransport(transport), options);\n\n  const auditLog = effectClient.auditLog;\n  const verify = effectClient.verify;\n  const capabilities = effectClient.capabilities;\n\n  return {\n    authorize: (request) => runProtocolPromise(effectClient.authorize(request)),\n    resume: (authId, resumeToken, evidence) =>\n      runProtocolPromise(effectClient.resume(authId, resumeToken, evidence)),\n    awaitDetermination: (subscription) =>\n      runProtocolPromise(effectClient.awaitDetermination(subscription)),\n    request: (request) => runProtocolPromise(effectClient.request(request)),\n    requestWithTrace: (request) =>\n      runProtocolPromise(effectClient.requestWithTrace(request)),\n    ...(auditLog\n      ? { auditLog: () => runProtocolPromise(auditLog) }\n      : {}),\n    ...(verify\n      ? {\n          verify: (request, determination) =>\n            runProtocolPromise(verify(request, determination))\n        }\n      : {}),\n    ...(capabilities\n      ? { capabilities: () => runProtocolPromise(capabilities) }\n      : {})\n  };\n};\n\n/**\n * Creates the deterministic in-memory payer used by examples and consumer tests.\n *\n * @example\n * const payer = createMockPayer();\n * const client = createX278Client(payer);\n */\nexport const createMockPayer = (\n  options: PayerAgentOptions = {}\n): X278Transport & {\n  readonly publicKeyPem: string;\n} => {\n  const payer = Effect.runSync(\n    options.policy || options.keyId ? makePayerAgent(options) : makeReferencePayerAgent\n  );\n\n  return {\n    authorize: (request) => runProtocolPromise(payer.authorize(request)),\n    resume: (authId, resumeToken, evidence) =>\n      runProtocolPromise(payer.resume(authId, resumeToken, evidence)),\n    awaitDetermination: (subscription) =>\n      runProtocolPromise(payer.awaitDetermination(subscription)),\n    auditLog: () => runProtocolPromise(payer.auditLog),\n    verify: (request, determination) =>\n      runProtocolPromise(payer.verify(request, determination)),\n    publicKeyPem: payer.publicKeyPem\n  };\n};\n\n/**\n * Creates a deterministic in-memory payer with custom policy options.\n *\n * @example\n * const payer = createConfiguredMockPayer({ policy });\n */\nexport const createConfiguredMockPayer = (\n  options: PayerAgentOptions = {}\n): X278Transport & {\n  readonly publicKeyPem: string;\n} => createMockPayer(options);\n\n/**\n * Creates a Promise client wired to the deterministic in-memory payer.\n *\n * @example\n * const client = createMockX278Client({ collectEvidence });\n * const final = await client.request(kneeReplacementMissingDocs);\n */\nexport const createMockX278Client = (\n  options: X278ClientOptions = {}\n): X278Client => createX278Client(createMockPayer(), options);\n","import type {\n  AuditRecord,\n  AuthorizationRequest,\n  Determination,\n  SupportingInfo,\n  TerminalDetermination,\n  X278Capabilities\n} from \"./domain.js\";\nimport { ProtocolError } from \"./domain.js\";\nimport {\n  type X278Client,\n  type X278ClientOptions,\n  type X278Transport,\n  createX278Client\n} from \"./sdk.js\";\n\nexport type X278Fetch = (\n  input: string | URL | Request,\n  init?: RequestInit\n) => Promise<Response>;\n\nexport type X278HttpOperation =\n  | \"capabilities\"\n  | \"authorize\"\n  | \"resume\"\n  | \"awaitDetermination\"\n  | \"auditLog\"\n  | \"verify\";\n\nexport interface X278HttpRequestEvent {\n  readonly requestId: string;\n  readonly operation: X278HttpOperation;\n  readonly method: \"GET\" | \"POST\";\n  readonly url: string;\n  readonly attempt: number;\n  readonly headers: Readonly<Record<string, string>>;\n  readonly body?: unknown;\n}\n\nexport interface X278HttpResponseEvent extends X278HttpRequestEvent {\n  readonly status: number;\n  readonly durationMs: number;\n  readonly responseHeaders: Readonly<Record<string, string>>;\n  readonly responseBody: unknown;\n}\n\nexport interface X278HttpRetryEvent extends X278HttpRequestEvent {\n  readonly status?: number;\n  readonly retryAfterMs: number;\n  readonly error?: unknown;\n}\n\nexport interface X278HttpHooks {\n  readonly onRequest?: (event: X278HttpRequestEvent) => void | Promise<void>;\n  readonly onResponse?: (event: X278HttpResponseEvent) => void | Promise<void>;\n  readonly onRetry?: (event: X278HttpRetryEvent) => void | Promise<void>;\n  readonly onError?: (event: X278HttpRetryEvent) => void | Promise<void>;\n}\n\nexport interface X278Logger {\n  readonly debug?: (message: string, context?: unknown) => void;\n  readonly warn?: (message: string, context?: unknown) => void;\n  readonly error?: (message: string, context?: unknown) => void;\n}\n\nexport interface X278RetryOptions {\n  readonly maxRetries?: number;\n  readonly baseDelayMs?: number;\n  readonly maxDelayMs?: number;\n  readonly retryStatuses?: ReadonlyArray<number>;\n  readonly jitter?: boolean;\n}\n\nexport interface X278HttpTransportOptions {\n  readonly baseUrl: string | URL;\n  readonly fetch?: X278Fetch;\n  readonly headers?:\n    | HeadersInit\n    | ((event: X278HttpRequestEvent) => HeadersInit | Promise<HeadersInit>);\n  readonly bearerToken?: string | (() => string | Promise<string>);\n  readonly timeoutMs?: number;\n  readonly retry?: X278RetryOptions;\n  readonly debug?: boolean;\n  readonly logger?: X278Logger;\n  readonly hooks?: X278HttpHooks;\n}\n\nexport type X278HttpClientOptions = X278HttpTransportOptions &\n  X278ClientOptions;\n\nexport interface X278HttpTransport extends X278Transport {\n  readonly capabilities: () => Promise<X278Capabilities>;\n}\n\nexport type X278HttpClient = X278Client & {\n  readonly capabilities: () => Promise<X278Capabilities>;\n};\n\nexport interface X278Env extends Readonly<Record<string, string | undefined>> {\n  readonly X278_PAYER_URL?: string;\n  readonly X278_BEARER_TOKEN?: string;\n}\n\nconst defaultRetryStatuses = [408, 425, 429, 500, 502, 503, 504];\nconst defaultTimeoutMs = 30_000;\nconst defaultMaxRetries = 2;\nconst defaultBaseDelayMs = 250;\nconst defaultMaxDelayMs = 2_000;\n\nconst normalizeBaseUrl = (baseUrl: string | URL): URL => {\n  const normalized = new URL(baseUrl.toString());\n  if (!normalized.pathname.endsWith(\"/\")) {\n    normalized.pathname = `${normalized.pathname}/`;\n  }\n  return normalized;\n};\n\nconst sleep = (ms: number) =>\n  new Promise((resolve) => setTimeout(resolve, ms));\n\nconst headerRecord = (headers: Headers): Readonly<Record<string, string>> =>\n  Object.fromEntries([...headers.entries()].sort(([a], [b]) => a.localeCompare(b)));\n\nconst redactHeaders = (\n  headers: Headers\n): Readonly<Record<string, string>> => {\n  const redacted = new Headers(headers);\n  for (const key of [\"authorization\", \"cookie\", \"set-cookie\", \"x-api-key\"]) {\n    if (redacted.has(key)) {\n      redacted.set(key, \"[redacted]\");\n    }\n  }\n\n  return headerRecord(redacted);\n};\n\nconst resolveBearerToken = async (\n  bearerToken: X278HttpTransportOptions[\"bearerToken\"]\n): Promise<string | undefined> => {\n  if (!bearerToken) {\n    return undefined;\n  }\n\n  return typeof bearerToken === \"function\" ? bearerToken() : bearerToken;\n};\n\nconst resolveHeaders = async (\n  options: X278HttpTransportOptions,\n  event: X278HttpRequestEvent,\n  hasBody: boolean\n): Promise<Headers> => {\n  const resolved =\n    typeof options.headers === \"function\"\n      ? await options.headers(event)\n      : (options.headers ?? {});\n  const output = new Headers(resolved);\n  const token = await resolveBearerToken(options.bearerToken);\n\n  if (token && !output.has(\"authorization\")) {\n    output.set(\"authorization\", `Bearer ${token}`);\n  }\n  if (hasBody && !output.has(\"content-type\")) {\n    output.set(\"content-type\", \"application/json\");\n  }\n  if (!output.has(\"accept\")) {\n    output.set(\"accept\", \"application/json\");\n  }\n  if (!output.has(\"x-request-id\")) {\n    output.set(\"x-request-id\", event.requestId);\n  }\n  if (!output.has(\"x-x278-client\")) {\n    output.set(\"x-x278-client\", \"@backwork/x278\");\n  }\n\n  return output;\n};\n\nconst readJson = async (response: Response): Promise<unknown> => {\n  const text = await response.text();\n  if (text.length === 0) {\n    return null;\n  }\n\n  try {\n    return JSON.parse(text);\n  } catch {\n    return text;\n  }\n};\n\nconst responseRequestId = (\n  response: Response,\n  fallback: string\n): string => response.headers.get(\"x-request-id\") ?? fallback;\n\nconst retryDelay = (\n  response: Response | undefined,\n  attempt: number,\n  retry: Required<X278RetryOptions>\n): number => {\n  const retryAfter = response?.headers.get(\"retry-after\");\n  if (retryAfter) {\n    const seconds = Number(retryAfter);\n    if (Number.isFinite(seconds)) {\n      return Math.max(0, seconds * 1000);\n    }\n\n    const dateMs = Date.parse(retryAfter);\n    if (Number.isFinite(dateMs)) {\n      return Math.max(0, dateMs - Date.now());\n    }\n  }\n\n  const exponential = Math.min(\n    retry.maxDelayMs,\n    retry.baseDelayMs * 2 ** Math.max(0, attempt - 1)\n  );\n  return retry.jitter ? Math.round(exponential * (0.5 + Math.random() / 2)) : exponential;\n};\n\nconst isAbortError = (error: unknown): boolean =>\n  error instanceof DOMException\n    ? error.name === \"AbortError\" || error.name === \"TimeoutError\"\n    : error instanceof Error && error.name === \"AbortError\";\n\nconst toProtocolError = (\n  reason:\n    | \"http-error\"\n    | \"http-timeout\"\n    | \"http-request-failed\"\n    | \"missing-base-url\",\n  event: X278HttpRequestEvent,\n  detail: unknown,\n  requestId = event.requestId\n): ProtocolError =>\n  new ProtocolError({\n    kind: reason === \"missing-base-url\" ? \"validation\" : \"transport\",\n    reason,\n    requestId,\n    detail\n  });\n\nconst toRetryOptions = (\n  retry: X278RetryOptions | undefined\n): Required<X278RetryOptions> => ({\n  maxRetries: retry?.maxRetries ?? defaultMaxRetries,\n  baseDelayMs: retry?.baseDelayMs ?? defaultBaseDelayMs,\n  maxDelayMs: retry?.maxDelayMs ?? defaultMaxDelayMs,\n  retryStatuses: retry?.retryStatuses ?? defaultRetryStatuses,\n  jitter: retry?.jitter ?? true\n});\n\nconst log = (\n  options: X278HttpTransportOptions,\n  level: keyof X278Logger,\n  message: string,\n  context: unknown\n) => {\n  if (!options.debug && !options.logger?.[level]) {\n    return;\n  }\n\n  const logger = options.logger ?? console;\n  logger[level]?.(message, context);\n};\n\nconst withTimeout = <A>(\n  timeoutMs: number,\n  run: (signal: AbortSignal) => Promise<A>\n): Promise<A> => {\n  const controller = new AbortController();\n  const timeout = setTimeout(() => controller.abort(), timeoutMs);\n\n  return run(controller.signal).finally(() => clearTimeout(timeout));\n};\n\nconst makeInitialEvent = (\n  operation: X278HttpOperation,\n  method: \"GET\" | \"POST\",\n  url: string,\n  body: unknown | undefined\n): X278HttpRequestEvent => ({\n  requestId: crypto.randomUUID(),\n  operation,\n  method,\n  url,\n  attempt: 0,\n  headers: {},\n  ...(body === undefined ? {} : { body })\n});\n\nexport const defineX278HttpConfig = <Config extends X278HttpClientOptions>(\n  config: Config\n): Config => config;\n\n/**\n * Creates a fetch-backed x278 transport for production payer endpoints.\n *\n * @example\n * const transport = createX278HttpTransport({\n *   baseUrl: \"https://payer.example\",\n *   bearerToken: process.env.X278_BEARER_TOKEN,\n *   debug: true\n * });\n */\nexport const createX278HttpTransport = (\n  options: X278HttpTransportOptions\n): X278HttpTransport => {\n  const baseUrl = normalizeBaseUrl(options.baseUrl);\n  const fetcher: X278Fetch =\n    options.fetch ?? ((input, init) => fetch(input, init));\n  const retry = toRetryOptions(options.retry);\n\n  const requestJson = async <A>(\n    operation: X278HttpOperation,\n    path: string,\n    init: {\n      readonly method: \"GET\" | \"POST\";\n      readonly body?: unknown;\n    }\n  ): Promise<A> => {\n    const url = new URL(path, baseUrl);\n    const firstEvent = makeInitialEvent(\n      operation,\n      init.method,\n      url.toString(),\n      init.body\n    );\n    let lastError: unknown;\n\n    for (let attempt = 0; attempt <= retry.maxRetries; attempt += 1) {\n      const event = { ...firstEvent, attempt };\n      const hasBody = init.body !== undefined;\n      const headers = await resolveHeaders(options, event, hasBody);\n      const requestEvent = { ...event, headers: redactHeaders(headers) };\n      const startedAt = performance.now();\n\n      await options.hooks?.onRequest?.(requestEvent);\n      log(options, \"debug\", \"x278 http request\", requestEvent);\n\n      try {\n        const requestInit: RequestInit = {\n          method: init.method,\n          headers\n        };\n\n        if (hasBody) {\n          requestInit.body = JSON.stringify(init.body);\n        }\n\n        const response = await withTimeout(options.timeoutMs ?? defaultTimeoutMs, (signal) =>\n          fetcher(url, { ...requestInit, signal })\n        );\n        const body = await readJson(response);\n        const durationMs = Math.round(performance.now() - startedAt);\n        const responseEvent: X278HttpResponseEvent = {\n          ...requestEvent,\n          requestId: responseRequestId(response, event.requestId),\n          status: response.status,\n          durationMs,\n          responseHeaders: redactHeaders(response.headers),\n          responseBody: body\n        };\n\n        await options.hooks?.onResponse?.(responseEvent);\n        log(options, \"debug\", \"x278 http response\", responseEvent);\n\n        if (response.ok) {\n          return body as A;\n        }\n\n        lastError = toProtocolError(\n          \"http-error\",\n          requestEvent,\n          {\n            status: response.status,\n            statusText: response.statusText,\n            body,\n            operation,\n            url: url.toString()\n          },\n          responseEvent.requestId\n        );\n\n        if (\n          attempt < retry.maxRetries &&\n          retry.retryStatuses.includes(response.status)\n        ) {\n          const retryAfterMs = retryDelay(response, attempt + 1, retry);\n          const retryEvent = {\n            ...requestEvent,\n            status: response.status,\n            retryAfterMs,\n            error: lastError\n          };\n          await options.hooks?.onRetry?.(retryEvent);\n          log(options, \"warn\", \"x278 http retry\", retryEvent);\n          await sleep(retryAfterMs);\n          continue;\n        }\n\n        throw lastError;\n      } catch (error) {\n        const protocolError =\n          error instanceof ProtocolError\n            ? error\n            : toProtocolError(\n                isAbortError(error) ? \"http-timeout\" : \"http-request-failed\",\n                requestEvent,\n                {\n                  error,\n                  operation,\n                  url: url.toString()\n                }\n              );\n\n        lastError = protocolError;\n\n        if (attempt < retry.maxRetries && !(error instanceof ProtocolError)) {\n          const retryAfterMs = retryDelay(undefined, attempt + 1, retry);\n          const retryEvent = {\n            ...requestEvent,\n            retryAfterMs,\n            error: protocolError\n          };\n          await options.hooks?.onRetry?.(retryEvent);\n          log(options, \"warn\", \"x278 http retry\", retryEvent);\n          await sleep(retryAfterMs);\n          continue;\n        }\n\n        const errorEvent = {\n          ...requestEvent,\n          retryAfterMs: 0,\n          error: protocolError\n        };\n        await options.hooks?.onError?.(errorEvent);\n        log(options, \"error\", \"x278 http error\", errorEvent);\n        throw protocolError;\n      }\n    }\n\n    throw lastError;\n  };\n\n  return {\n    capabilities: () =>\n      requestJson<X278Capabilities>(\"capabilities\", \".well-known/x278\", {\n        method: \"GET\"\n      }),\n    authorize: (request: AuthorizationRequest) =>\n      requestJson<Determination>(\"authorize\", \"authorize\", {\n        method: \"POST\",\n        body: request\n      }),\n    resume: (\n      authId: string,\n      resumeToken: string,\n      evidence: ReadonlyArray<SupportingInfo>\n    ) =>\n      requestJson<Determination>(\n        \"resume\",\n        `authorizations/${encodeURIComponent(authId)}/resume`,\n        {\n          method: \"POST\",\n          body: { resumeToken, evidence }\n        }\n      ),\n    awaitDetermination: (subscription: string) =>\n      requestJson<TerminalDetermination>(\n        \"awaitDetermination\",\n        \"determinations/await\",\n        {\n          method: \"POST\",\n          body: { subscription }\n        }\n      ),\n    auditLog: () =>\n      requestJson<ReadonlyArray<AuditRecord>>(\"auditLog\", \"audit-log\", {\n        method: \"GET\"\n      }),\n    verify: (\n      request: AuthorizationRequest,\n      determination: TerminalDetermination\n    ) =>\n      requestJson<{ readonly valid: boolean }>(\"verify\", \"verify\", {\n        method: \"POST\",\n        body: { request, determination }\n      }).then((result) => result.valid)\n  };\n};\n\n/**\n * Creates the batteries-included Promise client for an x278 HTTP endpoint.\n *\n * @example\n * const client = createX278HttpClient({\n *   baseUrl: \"https://payer.example\",\n *   collectEvidence\n * });\n */\nexport const createX278HttpClient = (\n  options: string | URL | X278HttpClientOptions\n): X278HttpClient => {\n  const resolved =\n    typeof options === \"string\" || options instanceof URL\n      ? { baseUrl: options }\n      : options;\n  const { maxSteps, collectEvidence, ...transportOptions } = resolved;\n  const transport = createX278HttpTransport(transportOptions);\n  const clientOptions: X278ClientOptions = {\n    ...(maxSteps === undefined ? {} : { maxSteps }),\n    ...(collectEvidence ? { collectEvidence } : {})\n  };\n\n  const client = createX278Client(transport, clientOptions);\n\n  return {\n    ...client,\n    capabilities: transport.capabilities\n  };\n};\n\n/**\n * Creates an HTTP client from environment variables for local parity.\n *\n * @example\n * const client = createX278HttpClientFromEnv(process.env, { collectEvidence });\n */\nexport const createX278HttpClientFromEnv = (\n  env: X278Env = process.env,\n  options: Omit<X278HttpClientOptions, \"baseUrl\" | \"bearerToken\"> = {}\n): X278HttpClient => {\n  if (!env.X278_PAYER_URL) {\n    throw toProtocolError(\n      \"missing-base-url\",\n      makeInitialEvent(\"capabilities\", \"GET\", \"env:X278_PAYER_URL\", undefined),\n      \"Set X278_PAYER_URL to the payer x278 endpoint.\"\n    );\n  }\n\n  return createX278HttpClient({\n    ...options,\n    baseUrl: env.X278_PAYER_URL,\n    ...(env.X278_BEARER_TOKEN ? { bearerToken: env.X278_BEARER_TOKEN } : {})\n  });\n};\n"]}