run402-mcp
Version:
MCP server for Run402 — full-stack backend infrastructure for AI agents: Postgres, auth, storage, serverless functions and atomic deploys. Paid with x402/MPP. Includes $0.03 image generation.
60 lines • 2.95 kB
TypeScript
/**
* Sanitized local journal for automatic x402 and MPP payment attempts.
*
* Each attempt is a separate mode-0600 file. Separate files avoid lost
* updates when multiple SDK processes pay concurrently. Records intentionally
* exclude request headers, query strings, bodies, wallet keys, signed payment
* authorizations, and provider proofs.
*/
export declare const PAYMENT_ATTEMPT_HEADER = "X-Run402-Payment-Attempt-Id";
export declare const PAYMENT_ATTEMPT_ID_PATTERN: RegExp;
export type PaymentAttemptJournalState = "intent" | "submitting" | "response_received" | "intent_pending" | "completed" | "failed" | "ambiguous";
export interface PaymentAttemptRecord {
version: 1;
payment_attempt_id: string;
rail: "x402" | "mpp";
state: PaymentAttemptJournalState;
mutation_state: "not_started" | "in_progress" | "completed" | "ambiguous";
method: string;
origin: string | null;
/** SHA-256 of the URL pathname; raw path/query values are never persisted. */
path_sha256: string | null;
/** SHA-256 of the caller key; the raw Idempotency-Key is never persisted. */
caller_key_sha256?: string;
created_at: string;
updated_at: string;
provider_started_at?: string;
response_status?: number;
last_error_code?: string;
payment_id?: string;
intent_state?: string;
retry_after_seconds?: number;
}
export interface PaymentAttemptStore {
/** Atomically reserve a new id; returns false when it already exists. */
claim(record: PaymentAttemptRecord): boolean;
write(record: PaymentAttemptRecord): void;
read(paymentAttemptId: string): PaymentAttemptRecord | null;
}
export declare function createPaymentAttemptId(): string;
export declare function paymentAttemptJournalDir(): string;
export declare function createFilePaymentAttemptStore(dir?: string): PaymentAttemptStore;
/** Read one sanitized attempt from the active wallet profile's journal. */
export declare function readPaymentAttempt(paymentAttemptId: string): PaymentAttemptRecord | null;
/**
* List recent sanitized attempts for reconciliation. This is a local read;
* provider/target state remains authoritative for ambiguous attempts.
*/
export declare function listPaymentAttempts(opts?: {
limit?: number;
}): PaymentAttemptRecord[];
export declare function requestSummary(input: RequestInfo | URL, init?: RequestInit): {
method: string;
origin: string | null;
path_sha256: string | null;
caller_key_sha256: string | null;
};
export declare function attemptIdFromRequest(input: RequestInfo | URL, init?: RequestInit): string | null;
export declare function withPaymentAttemptHeader(input: RequestInfo | URL, init: RequestInit | undefined, paymentAttemptId: string, paymentBearing: boolean): [RequestInfo | URL, RequestInit];
export declare function hasPaymentAuthorization(input: RequestInfo | URL, init?: RequestInit): boolean;
//# sourceMappingURL=payment-attempts.d.ts.map