Variable PurchaseRecordSchemaConst

PurchaseRecordSchema: ZodObject<{
    amenityKind: ZodEnum<["shop", "supermarket", "car_wash", "parking", "house", "talk_time", "wallet_bundle", "apu_credit", "apu_debit"]>;
    at: ZodString;
    counterpartyNodeId: ZodOptional<ZodString>;
    creditSource: ZodOptional<ZodString>;
    debitSource: ZodOptional<ZodString>;
    detail: ZodOptional<ZodString>;
    id: ZodString;
    itemRef: ZodObject<{
        id: ZodString;
        kind: ZodEnum<["shop", "supermarket", "carwash", "parking", "house", "game", "apu", "talk", "bundle"]>;
    }, "strip", ZodTypeAny, {
        id: string;
        kind:
            | "supermarket"
            | "shop"
            | "parking"
            | "house"
            | "carwash"
            | "game"
            | "apu"
            | "talk"
            | "bundle";
    }, {
        id: string;
        kind:
            | "supermarket"
            | "shop"
            | "parking"
            | "house"
            | "carwash"
            | "game"
            | "apu"
            | "talk"
            | "bundle";
    }>;
    playerId: ZodString;
    powerUpsDelta: ZodOptional<ZodNumber>;
    powerUpsEarned: ZodOptional<ZodNumber>;
    powerUpsSpent: ZodOptional<ZodNumber>;
    priceUsd: ZodOptional<ZodNumber>;
    spaceId: ZodString;
    token: ZodOptional<ZodLiteral<"APU">>;
}, "strip", ZodTypeAny, {
    amenityKind:
        | "supermarket"
        | "shop"
        | "car_wash"
        | "parking"
        | "house"
        | "talk_time"
        | "wallet_bundle"
        | "apu_credit"
        | "apu_debit";
    at: string;
    counterpartyNodeId?: string;
    creditSource?: string;
    debitSource?: string;
    detail?: string;
    id: string;
    itemRef: {
        id: string;
        kind:
            | "supermarket"
            | "shop"
            | "parking"
            | "house"
            | "carwash"
            | "game"
            | "apu"
            | "talk"
            | "bundle";
    };
    playerId: string;
    powerUpsDelta?: number;
    powerUpsEarned?: number;
    powerUpsSpent?: number;
    priceUsd?: number;
    spaceId: string;
    token?: "APU";
}, {
    amenityKind:
        | "supermarket"
        | "shop"
        | "car_wash"
        | "parking"
        | "house"
        | "talk_time"
        | "wallet_bundle"
        | "apu_credit"
        | "apu_debit";
    at: string;
    counterpartyNodeId?: string;
    creditSource?: string;
    debitSource?: string;
    detail?: string;
    id: string;
    itemRef: {
        id: string;
        kind:
            | "supermarket"
            | "shop"
            | "parking"
            | "house"
            | "carwash"
            | "game"
            | "apu"
            | "talk"
            | "bundle";
    };
    playerId: string;
    powerUpsDelta?: number;
    powerUpsEarned?: number;
    powerUpsSpent?: number;
    priceUsd?: number;
    spaceId: string;
    token?: "APU";
}> = ...

Audit record appended each time a player completes a purchase.

Stored as a Redis list at agent-play:${hostId}:player:${playerId}:purchases with LPUSH so the newest entry is at index 0.