Documentation Index
Fetch the complete documentation index at: https://docs.heylua.ai/llms.txt
Use this file to discover all available pages before exploring further.
Overview
File: src/tools/BasketTool.ts
Nine tools demonstrating the complete shopping cart workflow from creation to checkout.
Create Basket
Start a new shopping session
Add Items
Add products to cart (can add multiple)
Manage Cart
Remove items, update quantities, add notes
Checkout
Convert basket to order
import { LuaTool, Baskets } from 'lua-cli';
import { z } from 'zod';
export class CreateBasketTool implements LuaTool {
name = "create_basket";
description = "Create a new shopping basket";
inputSchema = z.object({
currency: z.string().default('USD')
});
async execute(input: z.infer<typeof this.inputSchema>) {
const basket = await Baskets.create({
currency: input.currency,
metadata: { createdBy: 'chat' }
});
return {
basketId: basket.id,
message: "New basket created! Start adding items."
};
}
}
export class AddItemToBasketTool implements LuaTool {
name = "add_to_basket";
description = "Add a product to the shopping basket";
inputSchema = z.object({
basketId: z.string(),
productId: z.string(),
quantity: z.number().min(1).default(1)
});
async execute(input: z.infer<typeof this.inputSchema>) {
// Get product to get current price
const product = await Products.getById(input.productId);
// Check stock
if (!product.inStock) {
return {
success: false,
message: `${product.name} is currently out of stock`
};
}
// Add to basket
const updated = await Baskets.addItem(input.basketId, {
id: input.productId,
price: product.price,
quantity: input.quantity,
SKU: product.sku
});
return {
basketId: updated.id,
itemCount: updated.common.itemCount,
total: `$${updated.common.totalAmount.toFixed(2)}`,
message: `Added ${input.quantity}x ${product.name} to basket`
};
}
}
export class CheckoutBasketTool implements LuaTool {
name = "checkout_basket";
description = "Complete purchase and create order";
inputSchema = z.object({
basketId: z.string(),
shippingAddress: z.object({
street: z.string(),
city: z.string(),
zip: z.string()
}),
paymentMethod: z.string().default('stripe')
});
async execute(input: z.infer<typeof this.inputSchema>) {
const order = await Baskets.placeOrder({
shippingAddress: input.shippingAddress,
paymentMethod: input.paymentMethod
}, input.basketId);
return {
orderId: order.id,
status: order.common.status,
total: `$${order.common.totalAmount.toFixed(2)}`,
message: "Order created successfully!"
};
}
}
- CreateBasketTool - Start shopping
- GetBasketsTool - List all baskets
- AddItemToBasketTool - Add products
- RemoveItemFromBasketTool - Remove products
- ClearBasketTool - Empty cart
- UpdateBasketStatusTool - Change status
- UpdateBasketMetadataTool - Add notes/data
- CheckoutBasketTool - Convert to order
- GetBasketByIdTool - View specific basket
Testing the Flow
Select sandbox mode, then try this conversation:
- “Create a shopping basket”
- “Search for laptop”
- “Add that laptop to my basket”
- “Show me my cart”
- “Checkout with shipping to 123 Main St, New York”
What You’ll Learn
Multi-Step Workflows
Handle complex processes
State Management
Track cart state over time
API Chaining
Combine multiple API calls
Business Logic
Implement e-commerce rules
Next Steps
Baskets API
Complete API reference
Orders API
Manage orders after checkout