import { Effect } from "effect"; import type { AuditRecord, AuthorizationRequest, Determination, DocumentationRequirement, PendedDetermination, SupportingInfo, TerminalDetermination, X278Capabilities } from "./domain.mjs"; import { ProtocolError } from "./domain.mjs"; import { type PayerAgentOptions, type PayerAgentService } from "./payer-agent.mjs"; /** * Effect-native transport implemented by payer adapters. * * @example * const client = createX278EffectClient(fromPayerAgent(payer)); */ export interface X278EffectTransport { readonly authorize: (request: AuthorizationRequest) => Effect.Effect; readonly resume: (authId: string, resumeToken: string, evidence: ReadonlyArray) => Effect.Effect; readonly awaitDetermination: (subscription: string) => Effect.Effect; readonly auditLog?: Effect.Effect, ProtocolError>; readonly verify?: (request: AuthorizationRequest, determination: TerminalDetermination) => Effect.Effect; readonly capabilities?: Effect.Effect; } /** * Promise transport for applications that do not expose Effect at their edge. * * @example * const client = createX278Client({ * authorize: (request) => fetchDetermination(request), * resume: (authId, token, evidence) => resumeDetermination(authId, token, evidence), * awaitDetermination: (subscription) => waitForFinal(subscription) * }); */ export interface X278Transport { readonly authorize: (request: AuthorizationRequest) => Promise; readonly resume: (authId: string, resumeToken: string, evidence: ReadonlyArray) => Promise; readonly awaitDetermination: (subscription: string) => Promise; readonly auditLog?: () => Promise>; readonly verify?: (request: AuthorizationRequest, determination: TerminalDetermination) => Promise; readonly capabilities?: () => Promise; } /** * Context passed to evidence collection hooks during an info-needed retry. */ export interface EvidenceCollectionContext { readonly authId: string; readonly attempt: number; } /** * Client behavior knobs. Defaults keep the loop bounded and require callers to * opt into automatic evidence collection. * * @example * const client = createMockX278Client({ * maxSteps: 4, * collectEvidence: (_request, requirements) => * requirements.map((requirement) => ({ * id: requirement.id, * value: "chart evidence", * source: "chart" * })) * }); */ export interface X278ClientOptions { readonly maxSteps?: number; readonly collectEvidence?: (request: AuthorizationRequest, requirements: ReadonlyArray, context: EvidenceCollectionContext) => ReadonlyArray | Promise> | Effect.Effect, ProtocolError>; readonly awaitPended?: (request: AuthorizationRequest, pended: PendedDetermination, context: EvidenceCollectionContext) => TerminalDetermination | Promise | Effect.Effect; } /** * Full transcript for a provider-side request loop. */ export interface X278RequestTrace { readonly originalRequest: AuthorizationRequest; readonly finalRequest: AuthorizationRequest; readonly steps: ReadonlyArray; readonly final: TerminalDetermination; } /** * Effect-native x278 client that validates unknown inputs before transport use. */ export interface X278EffectClient { readonly authorize: (request: unknown) => Effect.Effect; readonly resume: (authId: string, resumeToken: string, evidence: ReadonlyArray) => Effect.Effect; readonly awaitDetermination: (subscription: string) => Effect.Effect; readonly request: (request: unknown) => Effect.Effect; readonly requestWithTrace: (request: unknown) => Effect.Effect; readonly auditLog?: Effect.Effect, ProtocolError>; readonly verify?: (request: AuthorizationRequest, determination: TerminalDetermination) => Effect.Effect; readonly capabilities?: Effect.Effect; } /** * Promise x278 client for provider applications. * * @example * const client = createMockX278Client({ collectEvidence }); * const determination = await client.request(authorizationRequest); */ export interface X278Client { readonly authorize: (request: unknown) => Promise; readonly resume: (authId: string, resumeToken: string, evidence: ReadonlyArray) => Promise; readonly awaitDetermination: (subscription: string) => Promise; readonly request: (request: unknown) => Promise; readonly requestWithTrace: (request: unknown) => Promise; readonly auditLog?: () => Promise>; readonly verify?: (request: AuthorizationRequest, determination: TerminalDetermination) => Promise; readonly capabilities?: () => Promise; } /** * Adapts an Effect payer service into an SDK transport. * * @example * const transport = fromPayerAgent(payer); * const client = createX278EffectClient(transport); */ export declare const fromPayerAgent: (payer: PayerAgentService) => X278EffectTransport; /** * Creates an Effect-native provider client. * * @example * const client = createX278EffectClient(transport, { maxSteps: 4 }); * const final = yield* client.request(request); */ export declare const createX278EffectClient: (transport: X278EffectTransport, options?: X278ClientOptions) => X278EffectClient; /** * Creates a Promise-based provider client. * * @example * const client = createX278Client(transport, { collectEvidence }); * const final = await client.request(request); */ export declare const createX278Client: (transport: X278Transport, options?: X278ClientOptions) => X278Client; /** * Creates the deterministic in-memory payer used by examples and consumer tests. * * @example * const payer = createMockPayer(); * const client = createX278Client(payer); */ export declare const createMockPayer: (options?: PayerAgentOptions) => X278Transport & { readonly publicKeyPem: string; }; /** * Creates a deterministic in-memory payer with custom policy options. * * @example * const payer = createConfiguredMockPayer({ policy }); */ export declare const createConfiguredMockPayer: (options?: PayerAgentOptions) => X278Transport & { readonly publicKeyPem: string; }; /** * Creates a Promise client wired to the deterministic in-memory payer. * * @example * const client = createMockX278Client({ collectEvidence }); * const final = await client.request(kneeReplacementMissingDocs); */ export declare const createMockX278Client: (options?: X278ClientOptions) => X278Client; //# sourceMappingURL=sdk.d.mts.map