import { Alepha, AlephaError, Static, TNull, TObject, TOptional, TSchema, TUnion } from "alepha";
import { ServerReply } from "alepha/server";
import { DateTimeProvider } from "alepha/datetime";
import { CryptoProvider } from "alepha/crypto";
import { BuildExtraConfigColumns, SQL } from "drizzle-orm";
import { PgColumnBuilderBase, PgSequenceOptions, PgTableExtraConfigValue, UpdateDeleteAction } from "drizzle-orm/pg-core";
import "drizzle-orm/pg-core/foreign-keys";
import "drizzle-orm/pg-core/session";
import "drizzle-kit/api";
import "drizzle-orm/d1";
import "drizzle-orm/sqlite-core";
//#region ../../src/orm/core/schemas/insertSchema.d.ts
/**
 * Transforms a TObject schema for insert operations.
 * All default properties at the root level are made optional.
 * Generated columns are excluded entirely.
 *
 * @example
 * Before: { name: string; age: number(default=0); fullName: generated }
 * After:  { name: string; age?: number; }
 */
type TObjectInsert<T extends TObject> = TObject<{ [K in keyof T["shape"] as T["shape"][K] extends {
  [PG_GENERATED]: any;
} ? never : K]: T["shape"][K] extends {
  [PG_DEFAULT]: any;
} | {
  [PG_ORGANIZATION]: any;
} ? TOptional<Extract<T["shape"][K], TSchema>> : T["shape"][K]; }>;
//#endregion
//#region ../../src/orm/core/schemas/updateSchema.d.ts
/**
 * Transforms a TObject schema for update operations.
 * All optional properties at the root level are made nullable (i.e., `T | null`).
 * Generated columns are excluded entirely.
 *
 * @example
 * Before: { name?: string; age: number; fullName: generated }
 * After:  { name?: string | null; age: number; }
 */
type TObjectUpdate<T extends TObject> = TObject<{ [K in keyof T["shape"] as T["shape"][K] extends {
  [PG_GENERATED]: any;
} ? never : K]: T["shape"][K] extends TOptional<infer U extends TSchema> ? TOptional<TUnion<[U, TNull]>> : T["shape"][K]; }>;
//#endregion
//#region ../../src/orm/core/primitives/$entity.d.ts
interface EntityPrimitiveOptions<T extends TObject, Keys = keyof Static<T>> {
  /**
   * The database table name that will be created for this entity.
   * If not provided, name will be inferred from the $repository variable name.
   */
  name: string;
  /**
   * TypeBox schema defining the table structure and column types.
   */
  schema: T;
  /**
   * Database indexes to create for query optimization.
   */
  indexes?: (Keys | {
    /**
     * Single column to index.
     */
    column: Keys;
    /**
     * Whether this should be a unique index (enforces uniqueness constraint).
     */
    unique?: boolean;
    /**
     * Custom name for the index. If not provided, generates name automatically.
     */
    name?: string;
    /**
     * Partial index condition. Only rows matching this SQL expression are indexed.
     */
    where?: SQL;
  } | {
    /**
     * Multiple columns for composite index (order matters for query optimization).
     */
    columns: Keys[];
    /**
     * Whether this should be a unique index (enforces uniqueness constraint).
     */
    unique?: boolean;
    /**
     * Custom name for the index. If not provided, generates name automatically.
     */
    name?: string;
    /**
     * Partial index condition. Only rows matching this SQL expression are indexed.
     */
    where?: SQL;
  } | {
    /**
     * SQL expressions for expression-based indexes.
     *
     * Can include column references and SQL functions like `LOWER()`, `UPPER()`, etc.
     * Columns and expressions can be mixed together.
     *
     * @example
     * ```ts
     * // Case-insensitive unique username per realm
     * indexes: [{
     *   expressions: (self) => [self.realm, sql`LOWER(${self.username})`],
     *   unique: true,
     *   name: "users_realm_username_lower_idx",
     * }]
     * ```
     */
    expressions: (self: Record<Keys & string, any>) => (SQL | any)[];
    /**
     * Whether this should be a unique index (enforces uniqueness constraint).
     */
    unique?: boolean;
    /**
     * Custom name for the index. If not provided, generates name automatically.
     */
    name: string;
    /**
     * Partial index condition. Only rows matching this SQL expression are indexed.
     */
    where?: SQL;
  })[];
  /**
   * Foreign key constraints to maintain referential integrity.
   */
  foreignKeys?: Array<{
    /**
     * Optional name for the foreign key constraint.
     */
    name?: string;
    /**
     * Local columns that reference the foreign table.
     */
    columns: Array<keyof Static<T>>;
    /**
     * Referenced columns in the foreign table.
     * Must be EntityColumn references from other entities.
     */
    foreignColumns: Array<() => EntityColumn<any>>;
  }>;
  /**
   * Additional table constraints for data validation.
   *
   * Constraints enforce business rules at the database level, providing
   * an additional layer of data integrity beyond application validation.
   *
   * **Constraint Types**:
   * - **Unique constraints**: Prevent duplicate values across columns
   * - **Check constraints**: Enforce custom validation rules with SQL expressions
   *
   * @example
   * ```ts
   * constraints: [
   *   {
   *     name: "unique_user_email",
   *     columns: ["email"],
   *     unique: true
   *   },
   *   {
   *     name: "valid_age_range",
   *     columns: ["age"],
   *     check: sql`age >= 0 AND age <= 150`
   *   },
   *   {
   *     name: "unique_user_username_per_tenant",
   *     columns: ["tenantId", "username"],
   *     unique: true
   *   }
   * ]
   * ```
   */
  constraints?: Array<{
    /**
     * Columns involved in this constraint.
     */
    columns: Array<keyof Static<T>>;
    /**
     * Optional name for the constraint.
     */
    name?: string;
    /**
     * Whether this is a unique constraint.
     */
    unique?: boolean | {};
    /**
     * SQL expression for check constraint validation.
     */
    check?: SQL;
  }>;
  /**
   * Advanced Drizzle ORM configuration for complex table setups.
   */
  config?: (self: BuildExtraConfigColumns<string, FromSchema<T>, "pg">) => PgTableExtraConfigValue[];
}
declare class EntityPrimitive<T extends TObject = TObject> {
  readonly options: EntityPrimitiveOptions<T>;
  constructor(options: EntityPrimitiveOptions<T>);
  alias(alias: string): this;
  get cols(): EntityColumns<T>;
  get name(): string;
  get schema(): T;
  protected _insertSchema?: TObjectInsert<T>;
  get insertSchema(): TObjectInsert<T>;
  protected _updateSchema?: TObjectUpdate<T>;
  get updateSchema(): TObjectUpdate<T>;
}
/**
 * Convert a schema to columns.
 */
type FromSchema<T extends TObject> = { [key in keyof T["properties"]]: PgColumnBuilderBase; };
type EntityColumn<T extends TObject> = {
  name: string;
  entity: EntityPrimitive<T>;
};
type EntityColumns<T extends TObject> = { [key in keyof T["properties"]]: EntityColumn<T>; };
//#endregion
//#region ../../src/orm/core/constants/PG_SYMBOLS.d.ts
declare const PG_DEFAULT: unique symbol;
declare const PG_PRIMARY_KEY: unique symbol;
declare const PG_CREATED_AT: unique symbol;
declare const PG_UPDATED_AT: unique symbol;
declare const PG_DELETED_AT: unique symbol;
declare const PG_VERSION: unique symbol;
declare const PG_IDENTITY: unique symbol;
declare const PG_ENUM: unique symbol;
declare const PG_REF: unique symbol;
declare const PG_GENERATED: unique symbol;
declare const PG_ORGANIZATION: unique symbol;
/**
 * @deprecated Use `PG_IDENTITY` instead.
 */
declare const PG_SERIAL: unique symbol;
type PgSymbols = {
  [PG_DEFAULT]: {};
  [PG_PRIMARY_KEY]: {};
  [PG_CREATED_AT]: {};
  [PG_UPDATED_AT]: {};
  [PG_DELETED_AT]: {};
  [PG_VERSION]: {};
  [PG_IDENTITY]: PgIdentityOptions;
  [PG_REF]: PgRefOptions;
  [PG_ENUM]: PgEnumOptions;
  [PG_GENERATED]: PgGeneratedOptions;
  [PG_ORGANIZATION]: PgOrganizationOptions;
  /**
   * @deprecated Use `PG_IDENTITY` instead.
   */
  [PG_SERIAL]: {};
};
type PgSymbolKeys = keyof PgSymbols;
interface PgOrganizationOptions {
  /**
   * Fail-closed tenant scoping. When `true`, the repository (a) refuses any
   * read/write with no resolved tenant instead of falling through to an
   * unfiltered "see/write everything" query, and (b) drops the
   * `OR organizationId IS NULL` "global row" escape — a scoped tenant never
   * sees NULL/global rows. Use for security-sensitive tables. Defaults to
   * `false` (the historic fail-open semantics).
   */
  strict?: boolean;
}
type PgIdentityOptions = {
  mode: "always" | "byDefault";
} & PgSequenceOptions & {
  name?: string;
};
interface PgEnumOptions {
  name?: string;
  description?: string;
}
interface PgGeneratedOptions {
  /**
   * SQL expression for the generated column.
   */
  expression: SQL;
  /**
   * Storage mode for the generated column.
   * - `"stored"` — value is computed on write and stored on disk (default for PostgreSQL).
   * - `"virtual"` — value is computed on read (default for SQLite).
   */
  mode?: "stored" | "virtual";
}
interface PgRefOptions {
  ref: () => {
    name: string;
    entity: EntityPrimitive;
  };
  actions?: {
    onUpdate?: UpdateDeleteAction;
    onDelete?: UpdateDeleteAction;
  };
}
//#endregion
//#region ../../src/orm/core/helpers/pgAttr.d.ts
/**
 * Type representation.
 */
type PgAttr<T extends TSchema, TAttr extends PgSymbolKeys> = T & { [K in TAttr]: PgSymbols[K]; };
//#endregion
//#region ../../src/orm/core/schemas/databaseEnvSchema.d.ts
/**
 * Base database environment schema.
 *
 * Defines the `DATABASE_URL` connection string used by all ORM providers
 * to determine the database driver and connection target.
 *
 * Supported URL formats:
 * - `sqlite://:memory:` or `sqlite://./path/to/db` — SQLite (Node.js or Bun)
 * - `postgres://user:password@host:port/database` — PostgreSQL (Node.js or Bun)
 * - `pglite://:memory:` or `pglite://./path` — PGlite (embedded Postgres)
 * - `d1://BINDING_NAME` — Cloudflare D1
 * - `hyperdrive://BINDING_NAME` — Cloudflare Hyperdrive
 */
declare const databaseEnvSchema: import("zod").ZodObject<{
  DATABASE_URL: import("zod").ZodOptional<import("zod").ZodString>;
  DATABASE_SYNC: import("zod").ZodOptional<import("zod").ZodBoolean>;
}, import("zod/v4/core").$strip>;
declare module "alepha" {
  interface Env extends Partial<Static<typeof databaseEnvSchema>> {}
}
//#endregion
//#region ../../src/api/payments/entities/paymentIntents.d.ts
declare const paymentIntents: import("alepha/orm").EntityPrimitive<import("zod").ZodObject<{
  id: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodString, typeof import("alepha/orm").PG_PRIMARY_KEY>, typeof import("alepha/orm").PG_DEFAULT>;
  version: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodInt, typeof import("alepha/orm").PG_VERSION>, typeof import("alepha/orm").PG_DEFAULT>;
  createdAt: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodString, typeof import("alepha/orm").PG_CREATED_AT>, typeof import("alepha/orm").PG_DEFAULT>;
  updatedAt: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodString, typeof import("alepha/orm").PG_UPDATED_AT>, typeof import("alepha/orm").PG_DEFAULT>;
  organizationId: import("alepha/orm").PgAttr<import("zod").ZodOptional<import("zod").ZodString> | import("zod").ZodString, typeof import("alepha/orm").PG_ORGANIZATION>;
  amount: import("zod").ZodInt;
  currency: import("zod").ZodString;
  status: import("zod").ZodEnum<{
    authorized: "authorized";
    cancelled: "cancelled";
    captured: "captured";
    created: "created";
    expired: "expired";
    failed: "failed";
    partially_refunded: "partially_refunded";
    processing: "processing";
    refunded: "refunded";
    voided: "voided";
  }>;
  providerRef: import("zod").ZodOptional<import("zod").ZodString>;
  providerRaw: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodAny>>;
  metadata: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodAny>>;
  paymentMethodId: import("zod").ZodOptional<import("zod").ZodString>;
  userId: import("zod").ZodOptional<import("zod").ZodString>;
}, import("zod/v4/core").$strip>>;
type PaymentIntentEntity = Static<typeof paymentIntents.schema>;
//#endregion
//#region ../../src/api/payments/entities/refunds.d.ts
declare const refunds: import("alepha/orm").EntityPrimitive<import("zod").ZodObject<{
  id: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodString, typeof import("alepha/orm").PG_PRIMARY_KEY>, typeof import("alepha/orm").PG_DEFAULT>;
  version: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodInt, typeof import("alepha/orm").PG_VERSION>, typeof import("alepha/orm").PG_DEFAULT>;
  createdAt: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodString, typeof import("alepha/orm").PG_CREATED_AT>, typeof import("alepha/orm").PG_DEFAULT>;
  updatedAt: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodString, typeof import("alepha/orm").PG_UPDATED_AT>, typeof import("alepha/orm").PG_DEFAULT>;
  organizationId: import("alepha/orm").PgAttr<import("zod").ZodOptional<import("zod").ZodString> | import("zod").ZodString, typeof import("alepha/orm").PG_ORGANIZATION>;
  intentId: import("zod").ZodString;
  amount: import("zod").ZodInt;
  currency: import("zod").ZodString;
  status: import("zod").ZodEnum<{
    completed: "completed";
    failed: "failed";
    pending: "pending";
    processing: "processing";
  }>;
  reason: import("zod").ZodOptional<import("zod").ZodString>;
  providerRef: import("zod").ZodOptional<import("zod").ZodString>;
}, import("zod/v4/core").$strip>>;
type RefundEntity = Static<typeof refunds.schema>;
//#endregion
//#region ../../src/api/payments/providers/PaymentProvider.d.ts
interface CreateSessionResult {
  url: string;
  providerRef: string;
}
interface RefundResult {
  providerRef: string;
}
interface WebhookEvent {
  providerRef: string;
  /**
   * Secondary reference to try when `providerRef` matches no stored intent.
   * Checkout-session events carry BOTH a session id and a PaymentIntent id,
   * while the stored intent ref is whichever existed at session-creation
   * time (the PI when eager, the session id when the PSP creates the PI
   * lazily — e.g. Stripe Checkout on connected accounts).
   */
  providerRefAlt?: string;
  status: string;
  /**
   * PSP account that emitted the event, when delivered by a
   * connected-accounts endpoint (Stripe: `acct_…` on `connect: true`
   * endpoints). Lets multi-tenant consumers route the event to the right
   * tenant before resolving the intent.
   */
  account?: string;
  raw: unknown;
}
interface CreatePaymentMethodResult {
  providerRef: string;
  type: string;
  brand?: string;
  last4?: string;
  expMonth?: number;
  expYear?: number;
}
declare abstract class PaymentProvider {
  /**
   * Create a checkout session with the PSP.
   * Returns a URL to redirect the user to, and the PSP's reference ID.
   */
  abstract createSession(intent: PaymentIntentEntity, options: {
    returnUrl: string;
    authorize?: boolean;
    stripeAccount?: string;
    applicationFeeAmount?: number;
    /** Pre-fill the payer's email on the hosted checkout page. */
    customerEmail?: string;
  }): Promise<CreateSessionResult>;
  /**
   * Capture a previously authorized payment.
   * Amount can differ from the original authorization (partial capture).
   */
  abstract capturePayment(providerRef: string, amount: number): Promise<void>;
  /**
   * Void/cancel a previously authorized payment before capture.
   */
  abstract voidPayment(providerRef: string): Promise<void>;
  /**
   * Refund a captured payment (partial or full).
   */
  abstract refundPayment(providerRef: string, amount: number, options?: {
    stripeAccount?: string;
  }): Promise<RefundResult>;
  /**
   * Parse and verify the authenticity of an incoming PSP webhook request.
   *
   * Implementations MUST establish authenticity before returning. Two
   * common strategies, both acceptable:
   *
   * - Signature verification (Stripe, Adyen): verify an HMAC header
   *   against the raw body using a shared secret. Throw if invalid.
   * - Re-fetch (Mollie, legacy webhooks): the body only carries an id;
   *   call back into the PSP API with your authenticated client to
   *   fetch the real resource state. The fetch itself is the auth —
   *   an attacker can POST a fake id but cannot influence the result.
   *
   * Throw an error if authenticity cannot be established. This endpoint
   * has no $secure middleware; provider verification is its only auth.
   */
  abstract parseWebhook(request: Request): Promise<WebhookEvent>;
  /**
   * Store a payment method token with the PSP and return the saved
   * instrument's reference. Implementations that don't support
   * tokenize-then-attach (e.g. Mollie, where mandates are created by
   * making a "first" payment) MAY throw to signal the host app to use
   * the checkout flow with `setup_future_usage`-style options instead.
   */
  abstract createPaymentMethod(userId: string, token: string): Promise<CreatePaymentMethodResult>;
  /**
   * Delete a stored payment method from the PSP. Implementations that
   * don't manage payment methods directly MAY no-op.
   */
  abstract deletePaymentMethod(providerRef: string): Promise<void>;
  /**
   * Expire/cancel a checkout session on the PSP side.
   * Called during stale session cleanup.
   */
  abstract expireSession(providerRef: string): Promise<void>;
}
//#endregion
//#region ../../src/api/payments/services/PaymentService.d.ts
declare class PaymentService {
  protected readonly alepha: Alepha;
  protected readonly log: import("alepha/logger").Logger;
  protected readonly dateTime: DateTimeProvider;
  protected readonly provider: PaymentProvider;
  protected readonly intentRepo: import("alepha/orm").Repository<import("zod").ZodObject<{
    id: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodString, typeof import("alepha/orm").PG_PRIMARY_KEY>, typeof import("alepha/orm").PG_DEFAULT>;
    version: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodInt, typeof import("alepha/orm").PG_VERSION>, typeof import("alepha/orm").PG_DEFAULT>;
    createdAt: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodString, typeof import("alepha/orm").PG_CREATED_AT>, typeof import("alepha/orm").PG_DEFAULT>;
    updatedAt: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodString, typeof import("alepha/orm").PG_UPDATED_AT>, typeof import("alepha/orm").PG_DEFAULT>;
    organizationId: import("alepha/orm").PgAttr<import("zod").ZodOptional<import("zod").ZodString> | import("zod").ZodString, typeof import("alepha/orm").PG_ORGANIZATION>;
    amount: import("zod").ZodInt;
    currency: import("zod").ZodString;
    status: import("zod").ZodEnum<{
      authorized: "authorized";
      cancelled: "cancelled";
      captured: "captured";
      created: "created";
      expired: "expired";
      failed: "failed";
      partially_refunded: "partially_refunded";
      processing: "processing";
      refunded: "refunded";
      voided: "voided";
    }>;
    providerRef: import("zod").ZodOptional<import("zod").ZodString>;
    providerRaw: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodAny>>;
    metadata: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodAny>>;
    paymentMethodId: import("zod").ZodOptional<import("zod").ZodString>;
    userId: import("zod").ZodOptional<import("zod").ZodString>;
  }, import("zod/v4/core").$strip>>;
  protected readonly refundRepo: import("alepha/orm").Repository<import("zod").ZodObject<{
    id: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodString, typeof import("alepha/orm").PG_PRIMARY_KEY>, typeof import("alepha/orm").PG_DEFAULT>;
    version: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodInt, typeof import("alepha/orm").PG_VERSION>, typeof import("alepha/orm").PG_DEFAULT>;
    createdAt: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodString, typeof import("alepha/orm").PG_CREATED_AT>, typeof import("alepha/orm").PG_DEFAULT>;
    updatedAt: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodString, typeof import("alepha/orm").PG_UPDATED_AT>, typeof import("alepha/orm").PG_DEFAULT>;
    organizationId: import("alepha/orm").PgAttr<import("zod").ZodOptional<import("zod").ZodString> | import("zod").ZodString, typeof import("alepha/orm").PG_ORGANIZATION>;
    intentId: import("zod").ZodString;
    amount: import("zod").ZodInt;
    currency: import("zod").ZodString;
    status: import("zod").ZodEnum<{
      completed: "completed";
      failed: "failed";
      pending: "pending";
      processing: "processing";
    }>;
    reason: import("zod").ZodOptional<import("zod").ZodString>;
    providerRef: import("zod").ZodOptional<import("zod").ZodString>;
  }, import("zod/v4/core").$strip>>;
  /**
   * Expires stale payment intents that have been in "processing" status
   * for more than 30 minutes. Runs every 5 minutes — shares the CF wrangler
   * trigger with the jobs sweep so no extra binding is consumed.
   */
  protected readonly expireStaleIntents: import("alepha/api/jobs").JobPrimitive<import("alepha").ZType>;
  /**
   * Create a new payment intent in "created" status.
   */
  createIntent(amount: number, currency: string, metadata?: unknown, options?: {
    paymentMethodId?: string;
    userId?: string;
  }): Promise<PaymentIntentEntity>;
  /**
   * Create a checkout session with the payment provider and
   * transition the intent to "processing".
   */
  createSession(intentId: string, returnUrl: string, authorize?: boolean, userId?: string, options?: {
    stripeAccount?: string;
    applicationFeeAmount?: number;
    /**
     * Pre-fills the payer's email on the PSP checkout page. Useful when
     * the session runs on a sub-account (Stripe connected account) where
     * no customer object exists — without it the hosted checkout makes
     * the payer retype an address the platform already knows.
     */
    customerEmail?: string;
  }): Promise<{
    url: string;
    intentId: string;
  }>;
  /**
   * Handle an incoming webhook from the payment provider.
   */
  handleWebhook(request: Request): Promise<void>;
  /**
   * Resolve an already-parsed webhook event to its stored intent and apply
   * it. Split from `handleWebhook` so callers that parse with a DIFFERENT
   * verification path (e.g. a connected-accounts endpoint that must first
   * route the event to a tenant) can reuse the matching + transition logic.
   */
  handleParsedWebhook(event: WebhookEvent): Promise<void>;
  /**
   * Process a webhook event by updating the intent status and emitting
   * the corresponding payment event.
   */
  /**
   * Valid status transitions from webhook events.
   * Only these transitions are allowed — all others are silently ignored.
   */
  protected static readonly VALID_WEBHOOK_TRANSITIONS: Record<string, string[]>;
  handleWebhookEvent(intentId: string, status: string, raw?: unknown): Promise<void>;
  /**
   * Capture a previously authorized payment. Optionally specify a different
   * amount for partial capture.
   */
  capture(intentId: string, finalAmount?: number): Promise<PaymentIntentEntity>;
  /**
   * Void a previously authorized payment before capture.
   */
  void(intentId: string): Promise<PaymentIntentEntity>;
  /**
   * Refund a captured payment (partial or full).
   */
  refund(intentId: string, amount: number, reason?: string, options?: {
    /**
     * PSP sub-account holding the charge (Stripe connected account) —
     * required to refund payments that were created with the same option,
     * e.g. direct charges on a club's connected account.
     */
    stripeAccount?: string;
  }): Promise<RefundEntity>;
  /**
   * Record a cash or offline payment directly as captured,
   * bypassing the checkout flow.
   */
  recordCashPayment(amount: number, currency: string, metadata?: unknown): Promise<PaymentIntentEntity>;
  /**
   * Cancel a payment intent that has not yet entered processing.
   */
  cancel(intentId: string): Promise<PaymentIntentEntity>;
  /**
   * Get a payment intent by ID. Throws NotFoundError if not found.
   */
  getIntent(intentId: string): Promise<PaymentIntentEntity>;
  /**
   * Find payment intents with optional filters and pagination.
   */
  findIntents(query: {
    status?: string;
    userId?: string;
    sort?: string;
    size?: number;
    page?: number;
  }): Promise<import("alepha").Page<import("alepha/orm").PgStatic<import("zod").ZodObject<{
    id: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodString, typeof import("alepha/orm").PG_PRIMARY_KEY>, typeof import("alepha/orm").PG_DEFAULT>;
    version: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodInt, typeof import("alepha/orm").PG_VERSION>, typeof import("alepha/orm").PG_DEFAULT>;
    createdAt: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodString, typeof import("alepha/orm").PG_CREATED_AT>, typeof import("alepha/orm").PG_DEFAULT>;
    updatedAt: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodString, typeof import("alepha/orm").PG_UPDATED_AT>, typeof import("alepha/orm").PG_DEFAULT>;
    organizationId: import("alepha/orm").PgAttr<import("zod").ZodOptional<import("zod").ZodString> | import("zod").ZodString, typeof import("alepha/orm").PG_ORGANIZATION>;
    amount: import("zod").ZodInt;
    currency: import("zod").ZodString;
    status: import("zod").ZodEnum<{
      authorized: "authorized";
      cancelled: "cancelled";
      captured: "captured";
      created: "created";
      expired: "expired";
      failed: "failed";
      partially_refunded: "partially_refunded";
      processing: "processing";
      refunded: "refunded";
      voided: "voided";
    }>;
    providerRef: import("zod").ZodOptional<import("zod").ZodString>;
    providerRaw: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodAny>>;
    metadata: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodAny>>;
    paymentMethodId: import("zod").ZodOptional<import("zod").ZodString>;
    userId: import("zod").ZodOptional<import("zod").ZodString>;
  }, import("zod/v4/core").$strip>, import("alepha/orm").PgRelationMap<import("zod").ZodObject<{
    id: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodString, typeof import("alepha/orm").PG_PRIMARY_KEY>, typeof import("alepha/orm").PG_DEFAULT>;
    version: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodInt, typeof import("alepha/orm").PG_VERSION>, typeof import("alepha/orm").PG_DEFAULT>;
    createdAt: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodString, typeof import("alepha/orm").PG_CREATED_AT>, typeof import("alepha/orm").PG_DEFAULT>;
    updatedAt: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodString, typeof import("alepha/orm").PG_UPDATED_AT>, typeof import("alepha/orm").PG_DEFAULT>;
    organizationId: import("alepha/orm").PgAttr<import("zod").ZodOptional<import("zod").ZodString> | import("zod").ZodString, typeof import("alepha/orm").PG_ORGANIZATION>;
    amount: import("zod").ZodInt;
    currency: import("zod").ZodString;
    status: import("zod").ZodEnum<{
      authorized: "authorized";
      cancelled: "cancelled";
      captured: "captured";
      created: "created";
      expired: "expired";
      failed: "failed";
      partially_refunded: "partially_refunded";
      processing: "processing";
      refunded: "refunded";
      voided: "voided";
    }>;
    providerRef: import("zod").ZodOptional<import("zod").ZodString>;
    providerRaw: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodAny>>;
    metadata: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodAny>>;
    paymentMethodId: import("zod").ZodOptional<import("zod").ZodString>;
    userId: import("zod").ZodOptional<import("zod").ZodString>;
  }, import("zod/v4/core").$strip>>>>>;
  protected assertStatus(intent: PaymentIntentEntity, expected: PaymentIntentEntity["status"], operation: string): void;
}
//#endregion
//#region ../../src/api/payments/controllers/AdminPaymentController.d.ts
declare class AdminPaymentController {
  protected readonly url = "/admin/payments";
  protected readonly group = "admin:payments";
  protected readonly payments: PaymentService;
  /**
   * List payment intents with pagination and filtering.
   */
  readonly listIntents: import("alepha/server").ActionPrimitiveFn<{
    query: import("zod").ZodObject<{
      page: import("zod").ZodOptional<import("zod").ZodDefault<import("zod").ZodInt>>;
      size: import("zod").ZodOptional<import("zod").ZodDefault<import("zod").ZodInt>>;
      sort: import("zod").ZodOptional<import("zod").ZodString>;
      status: import("zod").ZodOptional<import("zod").ZodString>;
      userId: import("zod").ZodOptional<import("zod").ZodString>;
    }, import("zod/v4/core").$strip>;
    response: import("zod").ZodObject<{
      content: import("zod").ZodArray<import("zod").ZodObject<{
        id: PgAttr<PgAttr<import("zod").ZodString, typeof PG_PRIMARY_KEY>, typeof PG_DEFAULT>;
        version: PgAttr<PgAttr<import("zod").ZodInt, typeof PG_VERSION>, typeof PG_DEFAULT>;
        createdAt: PgAttr<PgAttr<import("zod").ZodString, typeof PG_CREATED_AT>, typeof PG_DEFAULT>;
        updatedAt: PgAttr<PgAttr<import("zod").ZodString, typeof PG_UPDATED_AT>, typeof PG_DEFAULT>;
        organizationId: PgAttr<import("zod").ZodOptional<import("zod").ZodString> | import("zod").ZodString, typeof PG_ORGANIZATION>;
        amount: import("zod").ZodInt;
        currency: import("zod").ZodString;
        status: import("zod").ZodEnum<{
          authorized: "authorized";
          cancelled: "cancelled";
          captured: "captured";
          created: "created";
          expired: "expired";
          failed: "failed";
          partially_refunded: "partially_refunded";
          processing: "processing";
          refunded: "refunded";
          voided: "voided";
        }>;
        providerRef: import("zod").ZodOptional<import("zod").ZodString>;
        providerRaw: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodAny>>;
        metadata: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodAny>>;
        paymentMethodId: import("zod").ZodOptional<import("zod").ZodString>;
        userId: import("zod").ZodOptional<import("zod").ZodString>;
      }, import("zod/v4/core").$strip>>;
      page: import("zod").ZodObject<{
        number: import("zod").ZodInt;
        size: import("zod").ZodInt;
        offset: import("zod").ZodInt;
        numberOfElements: import("zod").ZodInt;
        totalElements: import("zod").ZodOptional<import("zod").ZodInt>;
        totalPages: import("zod").ZodOptional<import("zod").ZodInt>;
        isEmpty: import("zod").ZodBoolean;
        isFirst: import("zod").ZodBoolean;
        isLast: import("zod").ZodBoolean;
      }, import("zod/v4/core").$strip>;
    }, import("zod/v4/core").$strip>;
  }>;
  /**
   * Get a payment intent by ID.
   */
  readonly getIntent: import("alepha/server").ActionPrimitiveFn<{
    params: import("zod").ZodObject<{
      id: import("zod").ZodString;
    }, import("zod/v4/core").$strip>;
    response: import("zod").ZodObject<{
      id: PgAttr<PgAttr<import("zod").ZodString, typeof PG_PRIMARY_KEY>, typeof PG_DEFAULT>;
      version: PgAttr<PgAttr<import("zod").ZodInt, typeof PG_VERSION>, typeof PG_DEFAULT>;
      createdAt: PgAttr<PgAttr<import("zod").ZodString, typeof PG_CREATED_AT>, typeof PG_DEFAULT>;
      updatedAt: PgAttr<PgAttr<import("zod").ZodString, typeof PG_UPDATED_AT>, typeof PG_DEFAULT>;
      organizationId: PgAttr<import("zod").ZodOptional<import("zod").ZodString> | import("zod").ZodString, typeof PG_ORGANIZATION>;
      amount: import("zod").ZodInt;
      currency: import("zod").ZodString;
      status: import("zod").ZodEnum<{
        authorized: "authorized";
        cancelled: "cancelled";
        captured: "captured";
        created: "created";
        expired: "expired";
        failed: "failed";
        partially_refunded: "partially_refunded";
        processing: "processing";
        refunded: "refunded";
        voided: "voided";
      }>;
      providerRef: import("zod").ZodOptional<import("zod").ZodString>;
      providerRaw: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodAny>>;
      metadata: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodAny>>;
      paymentMethodId: import("zod").ZodOptional<import("zod").ZodString>;
      userId: import("zod").ZodOptional<import("zod").ZodString>;
    }, import("zod/v4/core").$strip>;
  }>;
  /**
   * Capture an authorized intent.
   */
  readonly captureIntent: import("alepha/server").ActionPrimitiveFn<{
    params: import("zod").ZodObject<{
      id: import("zod").ZodString;
    }, import("zod/v4/core").$strip>;
    body: import("zod").ZodObject<{
      amount: import("zod").ZodOptional<import("zod").ZodInt>;
    }, import("zod/v4/core").$strip>;
    response: import("zod").ZodObject<{
      id: PgAttr<PgAttr<import("zod").ZodString, typeof PG_PRIMARY_KEY>, typeof PG_DEFAULT>;
      version: PgAttr<PgAttr<import("zod").ZodInt, typeof PG_VERSION>, typeof PG_DEFAULT>;
      createdAt: PgAttr<PgAttr<import("zod").ZodString, typeof PG_CREATED_AT>, typeof PG_DEFAULT>;
      updatedAt: PgAttr<PgAttr<import("zod").ZodString, typeof PG_UPDATED_AT>, typeof PG_DEFAULT>;
      organizationId: PgAttr<import("zod").ZodOptional<import("zod").ZodString> | import("zod").ZodString, typeof PG_ORGANIZATION>;
      amount: import("zod").ZodInt;
      currency: import("zod").ZodString;
      status: import("zod").ZodEnum<{
        authorized: "authorized";
        cancelled: "cancelled";
        captured: "captured";
        created: "created";
        expired: "expired";
        failed: "failed";
        partially_refunded: "partially_refunded";
        processing: "processing";
        refunded: "refunded";
        voided: "voided";
      }>;
      providerRef: import("zod").ZodOptional<import("zod").ZodString>;
      providerRaw: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodAny>>;
      metadata: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodAny>>;
      paymentMethodId: import("zod").ZodOptional<import("zod").ZodString>;
      userId: import("zod").ZodOptional<import("zod").ZodString>;
    }, import("zod/v4/core").$strip>;
  }>;
  /**
   * Void an authorized intent.
   */
  readonly voidIntent: import("alepha/server").ActionPrimitiveFn<{
    params: import("zod").ZodObject<{
      id: import("zod").ZodString;
    }, import("zod/v4/core").$strip>;
    response: import("zod").ZodObject<{
      id: PgAttr<PgAttr<import("zod").ZodString, typeof PG_PRIMARY_KEY>, typeof PG_DEFAULT>;
      version: PgAttr<PgAttr<import("zod").ZodInt, typeof PG_VERSION>, typeof PG_DEFAULT>;
      createdAt: PgAttr<PgAttr<import("zod").ZodString, typeof PG_CREATED_AT>, typeof PG_DEFAULT>;
      updatedAt: PgAttr<PgAttr<import("zod").ZodString, typeof PG_UPDATED_AT>, typeof PG_DEFAULT>;
      organizationId: PgAttr<import("zod").ZodOptional<import("zod").ZodString> | import("zod").ZodString, typeof PG_ORGANIZATION>;
      amount: import("zod").ZodInt;
      currency: import("zod").ZodString;
      status: import("zod").ZodEnum<{
        authorized: "authorized";
        cancelled: "cancelled";
        captured: "captured";
        created: "created";
        expired: "expired";
        failed: "failed";
        partially_refunded: "partially_refunded";
        processing: "processing";
        refunded: "refunded";
        voided: "voided";
      }>;
      providerRef: import("zod").ZodOptional<import("zod").ZodString>;
      providerRaw: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodAny>>;
      metadata: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodAny>>;
      paymentMethodId: import("zod").ZodOptional<import("zod").ZodString>;
      userId: import("zod").ZodOptional<import("zod").ZodString>;
    }, import("zod/v4/core").$strip>;
  }>;
  /**
   * Refund a captured intent.
   */
  readonly refundIntent: import("alepha/server").ActionPrimitiveFn<{
    params: import("zod").ZodObject<{
      id: import("zod").ZodString;
    }, import("zod/v4/core").$strip>;
    body: import("zod").ZodObject<{
      amount: import("zod").ZodInt;
      reason: import("zod").ZodOptional<import("zod").ZodString>;
    }, import("zod/v4/core").$strip>;
    response: import("zod").ZodObject<{
      id: PgAttr<PgAttr<import("zod").ZodString, typeof PG_PRIMARY_KEY>, typeof PG_DEFAULT>;
      version: PgAttr<PgAttr<import("zod").ZodInt, typeof PG_VERSION>, typeof PG_DEFAULT>;
      createdAt: PgAttr<PgAttr<import("zod").ZodString, typeof PG_CREATED_AT>, typeof PG_DEFAULT>;
      updatedAt: PgAttr<PgAttr<import("zod").ZodString, typeof PG_UPDATED_AT>, typeof PG_DEFAULT>;
      organizationId: PgAttr<import("zod").ZodOptional<import("zod").ZodString> | import("zod").ZodString, typeof PG_ORGANIZATION>;
      intentId: import("zod").ZodString;
      amount: import("zod").ZodInt;
      currency: import("zod").ZodString;
      status: import("zod").ZodEnum<{
        completed: "completed";
        failed: "failed";
        pending: "pending";
        processing: "processing";
      }>;
      reason: import("zod").ZodOptional<import("zod").ZodString>;
      providerRef: import("zod").ZodOptional<import("zod").ZodString>;
    }, import("zod/v4/core").$strip>;
  }>;
  /**
   * Cancel a created intent.
   */
  readonly cancelIntent: import("alepha/server").ActionPrimitiveFn<{
    params: import("zod").ZodObject<{
      id: import("zod").ZodString;
    }, import("zod/v4/core").$strip>;
    response: import("zod").ZodObject<{
      id: PgAttr<PgAttr<import("zod").ZodString, typeof PG_PRIMARY_KEY>, typeof PG_DEFAULT>;
      version: PgAttr<PgAttr<import("zod").ZodInt, typeof PG_VERSION>, typeof PG_DEFAULT>;
      createdAt: PgAttr<PgAttr<import("zod").ZodString, typeof PG_CREATED_AT>, typeof PG_DEFAULT>;
      updatedAt: PgAttr<PgAttr<import("zod").ZodString, typeof PG_UPDATED_AT>, typeof PG_DEFAULT>;
      organizationId: PgAttr<import("zod").ZodOptional<import("zod").ZodString> | import("zod").ZodString, typeof PG_ORGANIZATION>;
      amount: import("zod").ZodInt;
      currency: import("zod").ZodString;
      status: import("zod").ZodEnum<{
        authorized: "authorized";
        cancelled: "cancelled";
        captured: "captured";
        created: "created";
        expired: "expired";
        failed: "failed";
        partially_refunded: "partially_refunded";
        processing: "processing";
        refunded: "refunded";
        voided: "voided";
      }>;
      providerRef: import("zod").ZodOptional<import("zod").ZodString>;
      providerRaw: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodAny>>;
      metadata: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodAny>>;
      paymentMethodId: import("zod").ZodOptional<import("zod").ZodString>;
      userId: import("zod").ZodOptional<import("zod").ZodString>;
    }, import("zod/v4/core").$strip>;
  }>;
  /**
   * Record a cash payment.
   */
  readonly recordCash: import("alepha/server").ActionPrimitiveFn<{
    body: import("zod").ZodObject<{
      amount: import("zod").ZodInt;
      currency: import("zod").ZodString;
      metadata: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodAny>>;
    }, import("zod/v4/core").$strip>;
    response: import("zod").ZodObject<{
      id: PgAttr<PgAttr<import("zod").ZodString, typeof PG_PRIMARY_KEY>, typeof PG_DEFAULT>;
      version: PgAttr<PgAttr<import("zod").ZodInt, typeof PG_VERSION>, typeof PG_DEFAULT>;
      createdAt: PgAttr<PgAttr<import("zod").ZodString, typeof PG_CREATED_AT>, typeof PG_DEFAULT>;
      updatedAt: PgAttr<PgAttr<import("zod").ZodString, typeof PG_UPDATED_AT>, typeof PG_DEFAULT>;
      organizationId: PgAttr<import("zod").ZodOptional<import("zod").ZodString> | import("zod").ZodString, typeof PG_ORGANIZATION>;
      amount: import("zod").ZodInt;
      currency: import("zod").ZodString;
      status: import("zod").ZodEnum<{
        authorized: "authorized";
        cancelled: "cancelled";
        captured: "captured";
        created: "created";
        expired: "expired";
        failed: "failed";
        partially_refunded: "partially_refunded";
        processing: "processing";
        refunded: "refunded";
        voided: "voided";
      }>;
      providerRef: import("zod").ZodOptional<import("zod").ZodString>;
      providerRaw: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodAny>>;
      metadata: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodAny>>;
      paymentMethodId: import("zod").ZodOptional<import("zod").ZodString>;
      userId: import("zod").ZodOptional<import("zod").ZodString>;
    }, import("zod/v4/core").$strip>;
  }>;
  /**
   * PSP webhook endpoint (not under /admin, no auth — verified by provider).
   */
  readonly webhook: import("alepha/server").ActionPrimitiveFn<{
    response: import("zod").ZodObject<{
      ok: import("zod").ZodBoolean;
      id: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodInt]>>;
      count: import("zod").ZodOptional<import("zod").ZodNumber>;
    }, import("zod/v4/core").$strip>;
  }>;
}
//#endregion
//#region ../../src/api/payments/controllers/MockCheckoutController.d.ts
declare class MockCheckoutController {
  protected readonly url = "/payments/mock-checkout";
  protected readonly payments: PaymentService;
  protected readonly provider: PaymentProvider;
  protected isMemoryProvider(): boolean;
  protected forbidden(reply: ServerReply): string;
  readonly mockCheckoutPage: import("alepha/server").RoutePrimitive<{
    params: import("zod").ZodObject<{
      id: import("zod").ZodString;
    }, import("zod/v4/core").$strip>;
    query: import("zod").ZodObject<{
      returnUrl: import("zod").ZodOptional<import("zod").ZodString>;
    }, import("zod/v4/core").$strip>;
  }>;
  readonly mockCheckoutConfirm: import("alepha/server").RoutePrimitive<{
    params: import("zod").ZodObject<{
      id: import("zod").ZodString;
    }, import("zod/v4/core").$strip>;
    body: import("zod").ZodObject<{
      returnUrl: import("zod").ZodOptional<import("zod").ZodString>;
    }, import("zod/v4/core").$strip>;
  }>;
  readonly mockCheckoutCancel: import("alepha/server").RoutePrimitive<{
    params: import("zod").ZodObject<{
      id: import("zod").ZodString;
    }, import("zod/v4/core").$strip>;
    body: import("zod").ZodObject<{
      returnUrl: import("zod").ZodOptional<import("zod").ZodString>;
    }, import("zod/v4/core").$strip>;
  }>;
}
//#endregion
//#region ../../src/api/payments/entities/paymentMethods.d.ts
declare const paymentMethods: import("alepha/orm").EntityPrimitive<import("zod").ZodObject<{
  id: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodString, typeof import("alepha/orm").PG_PRIMARY_KEY>, typeof import("alepha/orm").PG_DEFAULT>;
  version: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodInt, typeof import("alepha/orm").PG_VERSION>, typeof import("alepha/orm").PG_DEFAULT>;
  createdAt: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodString, typeof import("alepha/orm").PG_CREATED_AT>, typeof import("alepha/orm").PG_DEFAULT>;
  updatedAt: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodString, typeof import("alepha/orm").PG_UPDATED_AT>, typeof import("alepha/orm").PG_DEFAULT>;
  organizationId: import("alepha/orm").PgAttr<import("zod").ZodOptional<import("zod").ZodString> | import("zod").ZodString, typeof import("alepha/orm").PG_ORGANIZATION>;
  userId: import("zod").ZodString;
  type: import("zod").ZodString;
  brand: import("zod").ZodOptional<import("zod").ZodString>;
  last4: import("zod").ZodOptional<import("zod").ZodString>;
  expMonth: import("zod").ZodOptional<import("zod").ZodInt>;
  expYear: import("zod").ZodOptional<import("zod").ZodInt>;
  isDefault: import("zod").ZodBoolean;
  providerRef: import("zod").ZodString;
}, import("zod/v4/core").$strip>>;
type PaymentMethodEntity = Static<typeof paymentMethods.schema>;
//#endregion
//#region ../../src/api/payments/services/PaymentMethodService.d.ts
declare class PaymentMethodService {
  protected readonly log: import("alepha/logger").Logger;
  protected readonly provider: PaymentProvider;
  protected readonly methodRepo: import("alepha/orm").Repository<import("zod").ZodObject<{
    id: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodString, typeof import("alepha/orm").PG_PRIMARY_KEY>, typeof import("alepha/orm").PG_DEFAULT>;
    version: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodInt, typeof import("alepha/orm").PG_VERSION>, typeof import("alepha/orm").PG_DEFAULT>;
    createdAt: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodString, typeof import("alepha/orm").PG_CREATED_AT>, typeof import("alepha/orm").PG_DEFAULT>;
    updatedAt: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodString, typeof import("alepha/orm").PG_UPDATED_AT>, typeof import("alepha/orm").PG_DEFAULT>;
    organizationId: import("alepha/orm").PgAttr<import("zod").ZodOptional<import("zod").ZodString> | import("zod").ZodString, typeof import("alepha/orm").PG_ORGANIZATION>;
    userId: import("zod").ZodString;
    type: import("zod").ZodString;
    brand: import("zod").ZodOptional<import("zod").ZodString>;
    last4: import("zod").ZodOptional<import("zod").ZodString>;
    expMonth: import("zod").ZodOptional<import("zod").ZodInt>;
    expYear: import("zod").ZodOptional<import("zod").ZodInt>;
    isDefault: import("zod").ZodBoolean;
    providerRef: import("zod").ZodString;
  }, import("zod/v4/core").$strip>>;
  addPaymentMethod(userId: string, organizationId: string, token: string): Promise<PaymentMethodEntity>;
  listPaymentMethods(userId: string): Promise<PaymentMethodEntity[]>;
  removePaymentMethod(methodId: string, userId: string): Promise<void>;
  setDefault(methodId: string, userId: string): Promise<PaymentMethodEntity>;
}
//#endregion
//#region ../../src/api/payments/controllers/PaymentController.d.ts
declare class PaymentController {
  protected readonly url = "/payments";
  protected readonly group = "payments";
  protected readonly payments: PaymentService;
  protected readonly paymentMethods: PaymentMethodService;
  /**
   * List the current user's saved payment methods.
   */
  readonly listPaymentMethods: import("alepha/server").ActionPrimitiveFn<{
    response: import("zod").ZodArray<import("zod").ZodObject<{
      id: PgAttr<PgAttr<import("zod").ZodString, typeof PG_PRIMARY_KEY>, typeof PG_DEFAULT>;
      version: PgAttr<PgAttr<import("zod").ZodInt, typeof PG_VERSION>, typeof PG_DEFAULT>;
      createdAt: PgAttr<PgAttr<import("zod").ZodString, typeof PG_CREATED_AT>, typeof PG_DEFAULT>;
      updatedAt: PgAttr<PgAttr<import("zod").ZodString, typeof PG_UPDATED_AT>, typeof PG_DEFAULT>;
      organizationId: PgAttr<import("zod").ZodOptional<import("zod").ZodString> | import("zod").ZodString, typeof PG_ORGANIZATION>;
      userId: import("zod").ZodString;
      type: import("zod").ZodString;
      brand: import("zod").ZodOptional<import("zod").ZodString>;
      last4: import("zod").ZodOptional<import("zod").ZodString>;
      expMonth: import("zod").ZodOptional<import("zod").ZodInt>;
      expYear: import("zod").ZodOptional<import("zod").ZodInt>;
      isDefault: import("zod").ZodBoolean;
      providerRef: import("zod").ZodString;
    }, import("zod/v4/core").$strip>>;
  }>;
  /**
   * Add a new payment method.
   */
  readonly addPaymentMethod: import("alepha/server").ActionPrimitiveFn<{
    body: import("zod").ZodObject<{
      token: import("zod").ZodString;
    }, import("zod/v4/core").$strip>;
    response: import("zod").ZodObject<{
      id: PgAttr<PgAttr<import("zod").ZodString, typeof PG_PRIMARY_KEY>, typeof PG_DEFAULT>;
      version: PgAttr<PgAttr<import("zod").ZodInt, typeof PG_VERSION>, typeof PG_DEFAULT>;
      createdAt: PgAttr<PgAttr<import("zod").ZodString, typeof PG_CREATED_AT>, typeof PG_DEFAULT>;
      updatedAt: PgAttr<PgAttr<import("zod").ZodString, typeof PG_UPDATED_AT>, typeof PG_DEFAULT>;
      organizationId: PgAttr<import("zod").ZodOptional<import("zod").ZodString> | import("zod").ZodString, typeof PG_ORGANIZATION>;
      userId: import("zod").ZodString;
      type: import("zod").ZodString;
      brand: import("zod").ZodOptional<import("zod").ZodString>;
      last4: import("zod").ZodOptional<import("zod").ZodString>;
      expMonth: import("zod").ZodOptional<import("zod").ZodInt>;
      expYear: import("zod").ZodOptional<import("zod").ZodInt>;
      isDefault: import("zod").ZodBoolean;
      providerRef: import("zod").ZodString;
    }, import("zod/v4/core").$strip>;
  }>;
  /**
   * Remove a payment method.
   */
  readonly removePaymentMethod: import("alepha/server").ActionPrimitiveFn<{
    params: import("zod").ZodObject<{
      id: import("zod").ZodString;
    }, import("zod/v4/core").$strip>;
    response: import("zod").ZodObject<{
      ok: import("zod").ZodBoolean;
      id: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodInt]>>;
      count: import("zod").ZodOptional<import("zod").ZodNumber>;
    }, import("zod/v4/core").$strip>;
  }>;
  /**
   * Set a payment method as default.
   */
  readonly setDefaultPaymentMethod: import("alepha/server").ActionPrimitiveFn<{
    params: import("zod").ZodObject<{
      id: import("zod").ZodString;
    }, import("zod/v4/core").$strip>;
    response: import("zod").ZodObject<{
      id: PgAttr<PgAttr<import("zod").ZodString, typeof PG_PRIMARY_KEY>, typeof PG_DEFAULT>;
      version: PgAttr<PgAttr<import("zod").ZodInt, typeof PG_VERSION>, typeof PG_DEFAULT>;
      createdAt: PgAttr<PgAttr<import("zod").ZodString, typeof PG_CREATED_AT>, typeof PG_DEFAULT>;
      updatedAt: PgAttr<PgAttr<import("zod").ZodString, typeof PG_UPDATED_AT>, typeof PG_DEFAULT>;
      organizationId: PgAttr<import("zod").ZodOptional<import("zod").ZodString> | import("zod").ZodString, typeof PG_ORGANIZATION>;
      userId: import("zod").ZodString;
      type: import("zod").ZodString;
      brand: import("zod").ZodOptional<import("zod").ZodString>;
      last4: import("zod").ZodOptional<import("zod").ZodString>;
      expMonth: import("zod").ZodOptional<import("zod").ZodInt>;
      expYear: import("zod").ZodOptional<import("zod").ZodInt>;
      isDefault: import("zod").ZodBoolean;
      providerRef: import("zod").ZodString;
    }, import("zod/v4/core").$strip>;
  }>;
  /**
   * Create a checkout session.
   */
  readonly createCheckout: import("alepha/server").ActionPrimitiveFn<{
    body: import("zod").ZodObject<{
      intentId: import("zod").ZodString;
      returnUrl: import("zod").ZodString;
      authorize: import("zod").ZodOptional<import("zod").ZodBoolean>;
    }, import("zod/v4/core").$strip>;
    response: import("zod").ZodObject<{
      url: import("zod").ZodString;
      intentId: import("zod").ZodString;
    }, import("zod/v4/core").$strip>;
  }>;
}
//#endregion
//#region ../../src/api/payments/errors/PaymentError.d.ts
declare class PaymentError extends AlephaError {
  readonly status = 400;
}
//#endregion
//#region ../../src/api/payments/providers/MemoryPaymentProvider.d.ts
interface MemoryCharge {
  providerRef: string;
  amount: number;
  status: string;
}
interface MemoryRefund {
  providerRef: string;
  chargeRef: string;
  amount: number;
}
declare class MemoryPaymentProvider implements PaymentProvider {
  protected readonly crypto: CryptoProvider;
  protected readonly charges: Map<string, MemoryCharge>;
  protected readonly refundRecords: Map<string, MemoryRefund>;
  protected readonly methods: Map<string, CreatePaymentMethodResult>;
  protected readonly expiredSessions: Set<string>;
  createSession(intent: PaymentIntentEntity, options: {
    returnUrl: string;
    authorize?: boolean;
    stripeAccount?: string;
    applicationFeeAmount?: number;
  }): Promise<CreateSessionResult>;
  capturePayment(providerRef: string, amount: number): Promise<void>;
  voidPayment(providerRef: string): Promise<void>;
  refundPayment(providerRef: string, amount: number): Promise<RefundResult>;
  parseWebhook(request: Request): Promise<WebhookEvent>;
  createPaymentMethod(_userId: string, _token: string): Promise<CreatePaymentMethodResult>;
  deletePaymentMethod(providerRef: string): Promise<void>;
  expireSession(providerRef: string): Promise<void>;
  wasCharged(providerRef: string): boolean;
  wasRefunded(providerRef: string): boolean;
  wasExpired(providerRef: string): boolean;
  getCharges(): MemoryCharge[];
  getRefunds(): MemoryRefund[];
}
//#endregion
//#region ../../src/api/payments/schemas/intentSchemas.d.ts
declare const createIntentSchema: import("zod").ZodObject<{
  amount: import("zod").ZodInt;
  currency: import("zod").ZodString;
  metadata: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodAny>>;
  paymentMethodId: import("zod").ZodOptional<import("zod").ZodString>;
}, import("zod/v4/core").$strip>;
type CreateIntent = Static<typeof createIntentSchema>;
declare const createCheckoutSchema: import("zod").ZodObject<{
  intentId: import("zod").ZodString;
  returnUrl: import("zod").ZodString;
  authorize: import("zod").ZodOptional<import("zod").ZodBoolean>;
}, import("zod/v4/core").$strip>;
type CreateCheckout = Static<typeof createCheckoutSchema>;
declare const checkoutResponseSchema: import("zod").ZodObject<{
  url: import("zod").ZodString;
  intentId: import("zod").ZodString;
}, import("zod/v4/core").$strip>;
type CheckoutResponse = Static<typeof checkoutResponseSchema>;
declare const captureIntentSchema: import("zod").ZodObject<{
  amount: import("zod").ZodOptional<import("zod").ZodInt>;
}, import("zod/v4/core").$strip>;
type CaptureIntent = Static<typeof captureIntentSchema>;
declare const refundIntentSchema: import("zod").ZodObject<{
  amount: import("zod").ZodInt;
  reason: import("zod").ZodOptional<import("zod").ZodString>;
}, import("zod/v4/core").$strip>;
type RefundIntent = Static<typeof refundIntentSchema>;
declare const recordCashSchema: import("zod").ZodObject<{
  amount: import("zod").ZodInt;
  currency: import("zod").ZodString;
  metadata: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodAny>>;
}, import("zod/v4/core").$strip>;
type RecordCash = Static<typeof recordCashSchema>;
declare const intentQuerySchema: import("zod").ZodObject<{
  page: import("zod").ZodOptional<import("zod").ZodDefault<import("zod").ZodInt>>;
  size: import("zod").ZodOptional<import("zod").ZodDefault<import("zod").ZodInt>>;
  sort: import("zod").ZodOptional<import("zod").ZodString>;
  status: import("zod").ZodOptional<import("zod").ZodString>;
  userId: import("zod").ZodOptional<import("zod").ZodString>;
}, import("zod/v4/core").$strip>;
type IntentQuery = Static<typeof intentQuerySchema>;
declare const intentResourceSchema: import("zod").ZodObject<{
  id: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodString, typeof import("alepha/orm").PG_PRIMARY_KEY>, typeof import("alepha/orm").PG_DEFAULT>;
  version: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodInt, typeof import("alepha/orm").PG_VERSION>, typeof import("alepha/orm").PG_DEFAULT>;
  createdAt: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodString, typeof import("alepha/orm").PG_CREATED_AT>, typeof import("alepha/orm").PG_DEFAULT>;
  updatedAt: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("zod").ZodString, typeof import("alepha/orm").PG_UPDATED_AT>, typeof import("alepha/orm").PG_DEFAULT>;
  organizationId: import("alepha/orm").PgAttr<import("zod").ZodOptional<import("zod").ZodString> | import("zod").ZodString, typeof import("alepha/orm").PG_ORGANIZATION>;
  amount: import("zod").ZodInt;
  currency: import("zod").ZodString;
  status: import("zod").ZodEnum<{
    authorized: "authorized";
    cancelled: "cancelled";
    captured: "captured";
    created: "created";
    expired: "expired";
    failed: "failed";
    partially_refunded: "partially_refunded";
    processing: "processing";
    refunded: "refunded";
    voided: "voided";
  }>;
  providerRef: import("zod").ZodOptional<import("zod").ZodString>;
  providerRaw: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodAny>>;
  metadata: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodAny>>;
  paymentMethodId: import("zod").ZodOptional<import("zod").ZodString>;
  userId: import("zod").ZodOptional<import("zod").ZodString>;
}, import("zod/v4/core").$strip>;
type IntentResource = Static<typeof intentResourceSchema>;
//#endregion
//#region ../../src/api/payments/schemas/paymentMethodSchemas.d.ts
declare const addPaymentMethodSchema: import("zod").ZodObject<{
  token: import("zod").ZodString;
}, import("zod/v4/core").$strip>;
type AddPaymentMethod = Static<typeof addPaymentMethodSchema>;
declare const paymentMethodResourceSchema: import("zod").ZodObject<{
  id: PgAttr<PgAttr<import("zod").ZodString, typeof PG_PRIMARY_KEY>, typeof PG_DEFAULT>;
  version: PgAttr<PgAttr<import("zod").ZodInt, typeof PG_VERSION>, typeof PG_DEFAULT>;
  createdAt: PgAttr<PgAttr<import("zod").ZodString, typeof PG_CREATED_AT>, typeof PG_DEFAULT>;
  updatedAt: PgAttr<PgAttr<import("zod").ZodString, typeof PG_UPDATED_AT>, typeof PG_DEFAULT>;
  organizationId: PgAttr<import("zod").ZodOptional<import("zod").ZodString> | import("zod").ZodString, typeof PG_ORGANIZATION>;
  userId: import("zod").ZodString;
  type: import("zod").ZodString;
  brand: import("zod").ZodOptional<import("zod").ZodString>;
  last4: import("zod").ZodOptional<import("zod").ZodString>;
  expMonth: import("zod").ZodOptional<import("zod").ZodInt>;
  expYear: import("zod").ZodOptional<import("zod").ZodInt>;
  isDefault: import("zod").ZodBoolean;
  providerRef: import("zod").ZodString;
}, import("zod/v4/core").$strip>;
type PaymentMethodResource = Static<typeof paymentMethodResourceSchema>;
//#endregion
//#region ../../src/api/payments/schemas/refundSchemas.d.ts
declare const refundResourceSchema: import("zod").ZodObject<{
  id: PgAttr<PgAttr<import("zod").ZodString, typeof PG_PRIMARY_KEY>, typeof PG_DEFAULT>;
  version: PgAttr<PgAttr<import("zod").ZodInt, typeof PG_VERSION>, typeof PG_DEFAULT>;
  createdAt: PgAttr<PgAttr<import("zod").ZodString, typeof PG_CREATED_AT>, typeof PG_DEFAULT>;
  updatedAt: PgAttr<PgAttr<import("zod").ZodString, typeof PG_UPDATED_AT>, typeof PG_DEFAULT>;
  organizationId: PgAttr<import("zod").ZodOptional<import("zod").ZodString> | import("zod").ZodString, typeof PG_ORGANIZATION>;
  intentId: import("zod").ZodString;
  amount: import("zod").ZodInt;
  currency: import("zod").ZodString;
  status: import("zod").ZodEnum<{
    completed: "completed";
    failed: "failed";
    pending: "pending";
    processing: "processing";
  }>;
  reason: import("zod").ZodOptional<import("zod").ZodString>;
  providerRef: import("zod").ZodOptional<import("zod").ZodString>;
}, import("zod/v4/core").$strip>;
type RefundResource = Static<typeof refundResourceSchema>;
//#endregion
//#region ../../src/api/payments/index.d.ts
declare module "alepha" {
  interface Hooks {
    "payments:authorized": {
      intentId: string;
      amount: number;
      currency: string;
      metadata?: unknown;
    };
    "payments:captured": {
      intentId: string;
      amount: number;
      currency: string;
      metadata?: unknown;
    };
    "payments:failed": {
      intentId: string;
      amount: number;
      currency: string;
      metadata?: unknown;
    };
    "payments:voided": {
      intentId: string;
      amount: number;
      currency: string;
      metadata?: unknown;
    };
    "payments:refunded": {
      intentId: string;
      refundId: string;
      amount: number;
      currency: string;
      metadata?: unknown;
    };
    "payments:cancelled": {
      intentId: string;
      amount: number;
      currency: string;
      metadata?: unknown;
    };
  }
}
declare const AlephaApiPayments: import("alepha").Service<import("alepha").Module>;
//#endregion
export { AddPaymentMethod, AdminPaymentController, AlephaApiPayments, CaptureIntent, CheckoutResponse, CreateCheckout, CreateIntent, CreatePaymentMethodResult, CreateSessionResult, IntentQuery, IntentResource, MemoryPaymentProvider, MockCheckoutController, PaymentController, PaymentError, PaymentIntentEntity, PaymentMethodEntity, PaymentMethodResource, PaymentMethodService, PaymentProvider, PaymentService, RecordCash, RefundEntity, RefundIntent, RefundResource, RefundResult, WebhookEvent, addPaymentMethodSchema, captureIntentSchema, checkoutResponseSchema, createCheckoutSchema, createIntentSchema, intentQuerySchema, intentResourceSchema, paymentIntents, paymentMethodResourceSchema, paymentMethods, recordCashSchema, refundIntentSchema, refundResourceSchema, refunds };
//# sourceMappingURL=index.d.ts.map