import { OrderLine, Order } from '@platform-modules/commerce-orders';
import { TransactionalDatabase } from '@platform-modules/db';
import { A as Address, L as Label, C as CarrierTrackResult, a as CarrierWebhookResult, b as FulfillmentDbSchema, F as FulfillmentNotification } from './schema-BKDZ5rS8.js';

interface StorageAdapter {
    put(key: string, body: Uint8Array | ArrayBuffer): Promise<void>;
    signedUrl(key: string, ttlSeconds: number): Promise<{
        url: string;
        expiresAt?: Date;
    }>;
}
interface CarrierCapabilities {
    webhooks: boolean;
    tracking: boolean;
}
interface BuyLabelArgs {
    shipmentId: string;
    address: Address;
    idempotencyKey: string;
}
interface CarrierAdapter {
    kind: string;
    capabilities: CarrierCapabilities;
    buyLabel(args: BuyLabelArgs): Promise<Label>;
    track(trackingNumber: string): Promise<CarrierTrackResult>;
    verifyWebhook(req: Request): Promise<CarrierWebhookResult | null>;
}
interface FulfillmentPorts {
    db: TransactionalDatabase<FulfillmentDbSchema>;
    storage: StorageAdapter;
    notify(notification: FulfillmentNotification): Promise<void>;
    resolveBlobKey(line: OrderLine): Promise<string>;
    resolveShippingAddress(order: Order): Promise<Address>;
    carriers?(kind: string): CarrierAdapter | undefined;
}

export type { BuyLabelArgs as B, CarrierAdapter as C, FulfillmentPorts as F, StorageAdapter as S, CarrierCapabilities as a };
