@striderlabs/mcp-postmates 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,70 @@
1
+ const SESSION_TIMEOUT_MS = 30 * 60 * 1000; // 30 minutes
2
+ export class SessionManager {
3
+ state = {
4
+ isAuthenticated: false,
5
+ lastActivity: new Date(),
6
+ };
7
+ cookies = {};
8
+ storageData = {};
9
+ isActive() {
10
+ const elapsed = Date.now() - this.state.lastActivity.getTime();
11
+ return elapsed < SESSION_TIMEOUT_MS;
12
+ }
13
+ isAuthenticated() {
14
+ return this.state.isAuthenticated && this.isActive();
15
+ }
16
+ setAuthenticated(userId) {
17
+ this.state.isAuthenticated = true;
18
+ this.state.userId = userId;
19
+ this.touch();
20
+ }
21
+ invalidate() {
22
+ this.state = {
23
+ isAuthenticated: false,
24
+ lastActivity: new Date(),
25
+ };
26
+ this.cookies = {};
27
+ this.storageData = {};
28
+ }
29
+ touch() {
30
+ this.state.lastActivity = new Date();
31
+ }
32
+ getUserId() {
33
+ return this.state.userId;
34
+ }
35
+ getCart() {
36
+ return this.state.currentCart;
37
+ }
38
+ setCart(cart) {
39
+ this.state.currentCart = cart;
40
+ this.touch();
41
+ }
42
+ clearCart() {
43
+ delete this.state.currentCart;
44
+ this.touch();
45
+ }
46
+ setCookie(name, value) {
47
+ this.cookies[name] = value;
48
+ }
49
+ getCookies() {
50
+ return { ...this.cookies };
51
+ }
52
+ setStorageItem(key, value) {
53
+ this.storageData[key] = value;
54
+ }
55
+ getStorageItem(key) {
56
+ return this.storageData[key];
57
+ }
58
+ getStatus() {
59
+ const status = {
60
+ authenticated: this.state.isAuthenticated,
61
+ hasCart: !!this.state.currentCart,
62
+ sessionAge: Math.floor((Date.now() - this.state.lastActivity.getTime()) / 1000),
63
+ };
64
+ if (this.state.userId !== undefined) {
65
+ status.userId = this.state.userId;
66
+ }
67
+ return status;
68
+ }
69
+ }
70
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAEA,MAAM,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;AAExD,MAAM,OAAO,cAAc;IACjB,KAAK,GAAiB;QAC5B,eAAe,EAAE,KAAK;QACtB,YAAY,EAAE,IAAI,IAAI,EAAE;KACzB,CAAC;IAEM,OAAO,GAA2B,EAAE,CAAC;IACrC,WAAW,GAA2B,EAAE,CAAC;IAEjD,QAAQ;QACN,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAC/D,OAAO,OAAO,GAAG,kBAAkB,CAAC;IACtC,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;IACvD,CAAC;IAED,gBAAgB,CAAC,MAAc;QAC7B,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,UAAU;QACR,IAAI,CAAC,KAAK,GAAG;YACX,eAAe,EAAE,KAAK;YACtB,YAAY,EAAE,IAAI,IAAI,EAAE;SACzB,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;IACxB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC;IACvC,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,IAAU;QAChB,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;QAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,SAAS,CAAC,IAAY,EAAE,KAAa;QACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IAC7B,CAAC;IAED,UAAU;QACR,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED,cAAc,CAAC,GAAW,EAAE,KAAa;QACvC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAChC,CAAC;IAED,cAAc,CAAC,GAAW;QACxB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,SAAS;QACP,MAAM,MAAM,GAAsF;YAChG,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe;YACzC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW;YACjC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;SAChF,CAAC;QACF,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACpC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QACpC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
@@ -0,0 +1,106 @@
1
+ import { z } from 'zod';
2
+ import { type PostmatesBrowser } from './browser.js';
3
+ import { type SessionManager } from './session.js';
4
+ export declare const SearchRestaurantsSchema: z.ZodObject<{
5
+ location: z.ZodString;
6
+ cuisine: z.ZodOptional<z.ZodString>;
7
+ maxResults: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
8
+ }, "strip", z.ZodTypeAny, {
9
+ location: string;
10
+ maxResults: number;
11
+ cuisine?: string | undefined;
12
+ }, {
13
+ location: string;
14
+ cuisine?: string | undefined;
15
+ maxResults?: number | undefined;
16
+ }>;
17
+ export declare const GetMenuSchema: z.ZodObject<{
18
+ restaurantId: z.ZodString;
19
+ category: z.ZodOptional<z.ZodString>;
20
+ }, "strip", z.ZodTypeAny, {
21
+ restaurantId: string;
22
+ category?: string | undefined;
23
+ }, {
24
+ restaurantId: string;
25
+ category?: string | undefined;
26
+ }>;
27
+ export declare const AddToCartSchema: z.ZodObject<{
28
+ restaurantId: z.ZodString;
29
+ menuItemId: z.ZodString;
30
+ quantity: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
31
+ specialInstructions: z.ZodOptional<z.ZodString>;
32
+ }, "strip", z.ZodTypeAny, {
33
+ restaurantId: string;
34
+ menuItemId: string;
35
+ quantity: number;
36
+ specialInstructions?: string | undefined;
37
+ }, {
38
+ restaurantId: string;
39
+ menuItemId: string;
40
+ quantity?: number | undefined;
41
+ specialInstructions?: string | undefined;
42
+ }>;
43
+ export declare const ViewCartSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
44
+ export declare const PlaceOrderSchema: z.ZodObject<{
45
+ deliveryAddress: z.ZodString;
46
+ paymentMethod: z.ZodDefault<z.ZodOptional<z.ZodString>>;
47
+ tip: z.ZodOptional<z.ZodNumber>;
48
+ contactlessDelivery: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
49
+ deliveryInstructions: z.ZodOptional<z.ZodString>;
50
+ }, "strip", z.ZodTypeAny, {
51
+ deliveryAddress: string;
52
+ paymentMethod: string;
53
+ contactlessDelivery: boolean;
54
+ tip?: number | undefined;
55
+ deliveryInstructions?: string | undefined;
56
+ }, {
57
+ deliveryAddress: string;
58
+ paymentMethod?: string | undefined;
59
+ tip?: number | undefined;
60
+ contactlessDelivery?: boolean | undefined;
61
+ deliveryInstructions?: string | undefined;
62
+ }>;
63
+ export declare const TrackOrderSchema: z.ZodObject<{
64
+ orderId: z.ZodString;
65
+ }, "strip", z.ZodTypeAny, {
66
+ orderId: string;
67
+ }, {
68
+ orderId: string;
69
+ }>;
70
+ export declare function handleSearchRestaurants(input: z.infer<typeof SearchRestaurantsSchema>, browser: PostmatesBrowser, session: SessionManager): Promise<{
71
+ content: Array<{
72
+ type: 'text';
73
+ text: string;
74
+ }>;
75
+ }>;
76
+ export declare function handleGetMenu(input: z.infer<typeof GetMenuSchema>, browser: PostmatesBrowser, session: SessionManager): Promise<{
77
+ content: Array<{
78
+ type: 'text';
79
+ text: string;
80
+ }>;
81
+ }>;
82
+ export declare function handleAddToCart(input: z.infer<typeof AddToCartSchema>, browser: PostmatesBrowser, session: SessionManager): Promise<{
83
+ content: Array<{
84
+ type: 'text';
85
+ text: string;
86
+ }>;
87
+ }>;
88
+ export declare function handleViewCart(_input: Record<string, never>, browser: PostmatesBrowser, session: SessionManager): Promise<{
89
+ content: Array<{
90
+ type: 'text';
91
+ text: string;
92
+ }>;
93
+ }>;
94
+ export declare function handlePlaceOrder(input: z.infer<typeof PlaceOrderSchema>, browser: PostmatesBrowser, session: SessionManager): Promise<{
95
+ content: Array<{
96
+ type: 'text';
97
+ text: string;
98
+ }>;
99
+ }>;
100
+ export declare function handleTrackOrder(input: z.infer<typeof TrackOrderSchema>, browser: PostmatesBrowser, session: SessionManager): Promise<{
101
+ content: Array<{
102
+ type: 'text';
103
+ text: string;
104
+ }>;
105
+ }>;
106
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAYnD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;EAiBlC,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;;;;EASxB,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;EAgB1B,CAAC;AAEH,eAAO,MAAM,cAAc,gDAAkD,CAAC;AAE9E,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;EA0B3B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;EAE3B,CAAC;AAIH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,EAC9C,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAwC7D;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,EACpC,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAqD7D;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,EACtC,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAyE7D;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAC7B,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA0D7D;AAED,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,EACvC,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAmD7D;AAED,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,EACvC,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA0C7D"}
package/dist/tools.js ADDED
@@ -0,0 +1,327 @@
1
+ import { z } from 'zod';
2
+ // ─── Input Schemas ──────────────────────────────────────────────────────────
3
+ export const SearchRestaurantsSchema = z.object({
4
+ location: z
5
+ .string()
6
+ .min(1)
7
+ .describe('Delivery address or location (e.g. "123 Main St, San Francisco, CA")'),
8
+ cuisine: z
9
+ .string()
10
+ .optional()
11
+ .describe('Cuisine type filter (e.g. "pizza", "sushi", "mexican")'),
12
+ maxResults: z
13
+ .number()
14
+ .int()
15
+ .min(1)
16
+ .max(20)
17
+ .optional()
18
+ .default(10)
19
+ .describe('Maximum number of results to return (1-20)'),
20
+ });
21
+ export const GetMenuSchema = z.object({
22
+ restaurantId: z
23
+ .string()
24
+ .min(1)
25
+ .describe('Restaurant ID from search results (e.g. "mcdonalds-downtown-sf")'),
26
+ category: z
27
+ .string()
28
+ .optional()
29
+ .describe('Filter by menu category (e.g. "Burgers", "Drinks")'),
30
+ });
31
+ export const AddToCartSchema = z.object({
32
+ restaurantId: z.string().min(1).describe('Restaurant ID'),
33
+ menuItemId: z.string().min(1).describe('Menu item ID from menu results'),
34
+ quantity: z
35
+ .number()
36
+ .int()
37
+ .min(1)
38
+ .max(10)
39
+ .optional()
40
+ .default(1)
41
+ .describe('Quantity to add (1-10)'),
42
+ specialInstructions: z
43
+ .string()
44
+ .max(200)
45
+ .optional()
46
+ .describe('Special instructions for the item'),
47
+ });
48
+ export const ViewCartSchema = z.object({}).describe('No parameters required');
49
+ export const PlaceOrderSchema = z.object({
50
+ deliveryAddress: z
51
+ .string()
52
+ .min(5)
53
+ .describe('Full delivery address (e.g. "456 Oak Ave, Apt 2B, San Francisco, CA 94105")'),
54
+ paymentMethod: z
55
+ .string()
56
+ .optional()
57
+ .default('saved')
58
+ .describe('Payment method: "saved" (use saved card), "new" (add new card)'),
59
+ tip: z
60
+ .number()
61
+ .min(0)
62
+ .max(100)
63
+ .optional()
64
+ .describe('Tip percentage (0-100). Defaults to 15% if not specified'),
65
+ contactlessDelivery: z
66
+ .boolean()
67
+ .optional()
68
+ .default(true)
69
+ .describe('Leave at door for contactless delivery'),
70
+ deliveryInstructions: z
71
+ .string()
72
+ .max(200)
73
+ .optional()
74
+ .describe('Special delivery instructions (e.g. "Ring doorbell", "Call on arrival")'),
75
+ });
76
+ export const TrackOrderSchema = z.object({
77
+ orderId: z.string().min(1).describe('Order ID from a placed order'),
78
+ });
79
+ // ─── Tool Handlers ──────────────────────────────────────────────────────────
80
+ export async function handleSearchRestaurants(input, browser, session) {
81
+ session.touch();
82
+ try {
83
+ await browser.launch();
84
+ const rawResults = await browser.searchRestaurants(input.location, input.cuisine);
85
+ if (!rawResults || rawResults.length === 0) {
86
+ return formatText(`No restaurants found for location "${input.location}"${input.cuisine ? ` with cuisine "${input.cuisine}"` : ''}. ` +
87
+ `Please check the address and try again.`);
88
+ }
89
+ const restaurants = rawResults.slice(0, input.maxResults ?? 10);
90
+ const lines = [
91
+ `## Restaurants near ${input.location}`,
92
+ input.cuisine ? `**Cuisine filter:** ${input.cuisine}` : '',
93
+ `**Found:** ${restaurants.length} restaurants`,
94
+ '',
95
+ ...restaurants.map((r, i) => [
96
+ `### ${i + 1}. ${r.name}`,
97
+ `- **ID:** \`${r.id}\``,
98
+ `- **Cuisine:** ${r.cuisine || 'Various'}`,
99
+ `- **Rating:** ${r.rating ? `${r.rating}/5` : 'N/A'}`,
100
+ `- **Delivery Time:** ${r.deliveryTime || 'N/A'}`,
101
+ `- **Delivery Fee:** ${r.deliveryFee || 'N/A'}`,
102
+ `- **Status:** ${r.isOpen ? '🟢 Open' : '🔴 Closed'}`,
103
+ ]
104
+ .filter(Boolean)
105
+ .join('\n')),
106
+ ].filter((l) => l !== null);
107
+ return formatText(lines.join('\n'));
108
+ }
109
+ finally {
110
+ await browser.close();
111
+ }
112
+ }
113
+ export async function handleGetMenu(input, browser, session) {
114
+ session.touch();
115
+ try {
116
+ await browser.launch();
117
+ const rawItems = await browser.getRestaurantMenu(input.restaurantId);
118
+ if (!rawItems || rawItems.length === 0) {
119
+ return formatText(`No menu items found for restaurant "${input.restaurantId}". The restaurant may be closed or unavailable.`);
120
+ }
121
+ let items = rawItems;
122
+ if (input.category) {
123
+ items = items.filter((item) => item.category.toLowerCase().includes(input.category.toLowerCase()));
124
+ }
125
+ // Group by category
126
+ const byCategory = items.reduce((acc, item) => {
127
+ const cat = item.category || 'Other';
128
+ if (!acc[cat])
129
+ acc[cat] = [];
130
+ acc[cat].push(item);
131
+ return acc;
132
+ }, {});
133
+ const lines = [
134
+ `## Menu for Restaurant: ${input.restaurantId}`,
135
+ input.category ? `**Category filter:** ${input.category}` : '',
136
+ `**Total items:** ${items.length}`,
137
+ '',
138
+ ];
139
+ for (const [category, catItems] of Object.entries(byCategory)) {
140
+ lines.push(`### ${category}`);
141
+ for (const item of catItems) {
142
+ lines.push(`**${item.name}** — $${item.price.toFixed(2)}`, `- **ID:** \`${item.id}\``, item.description ? `- ${item.description}` : '', `- **Available:** ${item.isAvailable ? 'Yes' : 'No'}`, '');
143
+ }
144
+ }
145
+ return formatText(lines.filter((l) => l !== null).join('\n'));
146
+ }
147
+ finally {
148
+ await browser.close();
149
+ }
150
+ }
151
+ export async function handleAddToCart(input, browser, session) {
152
+ session.touch();
153
+ try {
154
+ await browser.launch();
155
+ // Check if cart already has items from a different restaurant
156
+ const existingCart = session.getCart();
157
+ if (existingCart && existingCart.restaurantId !== input.restaurantId) {
158
+ return formatText(`⚠️ Your cart already has items from **${existingCart.restaurantName}**. ` +
159
+ `Please place or clear your current order before ordering from a different restaurant.`);
160
+ }
161
+ const success = await browser.addItemToCart(input.restaurantId, input.menuItemId, input.quantity ?? 1);
162
+ if (!success) {
163
+ return formatText(`Failed to add item \`${input.menuItemId}\` to cart. ` +
164
+ `The item may be unavailable or require specific customizations. ` +
165
+ `Please verify the item ID from the menu and try again.`);
166
+ }
167
+ // Update session cart
168
+ const cart = session.getCart() ?? {
169
+ restaurantId: input.restaurantId,
170
+ restaurantName: input.restaurantId,
171
+ items: [],
172
+ subtotal: 0,
173
+ deliveryFee: 0,
174
+ taxes: 0,
175
+ total: 0,
176
+ };
177
+ const existingItem = cart.items.find((i) => i.menuItemId === input.menuItemId);
178
+ if (existingItem) {
179
+ existingItem.quantity += input.quantity ?? 1;
180
+ existingItem.totalPrice = existingItem.unitPrice * existingItem.quantity;
181
+ }
182
+ else {
183
+ const newItem = {
184
+ menuItemId: input.menuItemId,
185
+ name: input.menuItemId,
186
+ quantity: input.quantity ?? 1,
187
+ unitPrice: 0,
188
+ totalPrice: 0,
189
+ ...(input.specialInstructions !== undefined && { specialInstructions: input.specialInstructions }),
190
+ };
191
+ cart.items.push(newItem);
192
+ }
193
+ session.setCart(cart);
194
+ const lines = [
195
+ `✅ **Item added to cart successfully!**`,
196
+ '',
197
+ `- **Restaurant:** ${input.restaurantId}`,
198
+ `- **Item ID:** \`${input.menuItemId}\``,
199
+ `- **Quantity:** ${input.quantity ?? 1}`,
200
+ input.specialInstructions ? `- **Instructions:** ${input.specialInstructions}` : '',
201
+ '',
202
+ `Your cart now has **${cart.items.length}** item(s). Use \`postmates_view_cart\` to see your full cart.`,
203
+ ];
204
+ return formatText(lines.filter(Boolean).join('\n'));
205
+ }
206
+ finally {
207
+ await browser.close();
208
+ }
209
+ }
210
+ export async function handleViewCart(_input, browser, session) {
211
+ session.touch();
212
+ const sessionCart = session.getCart();
213
+ if (!sessionCart || sessionCart.items.length === 0) {
214
+ return formatText(`🛒 **Your cart is empty.**\n\n` +
215
+ `Use \`postmates_search_restaurants\` to find restaurants, ` +
216
+ `\`postmates_get_menu\` to browse items, ` +
217
+ `and \`postmates_add_to_cart\` to add items.`);
218
+ }
219
+ try {
220
+ await browser.launch();
221
+ const liveCart = (await browser.getCurrentCart());
222
+ const items = liveCart?.items?.length ? liveCart.items : sessionCart.items;
223
+ const subtotal = liveCart?.subtotal || `$${sessionCart.subtotal.toFixed(2)}`;
224
+ const total = liveCart?.total || `$${sessionCart.total.toFixed(2)}`;
225
+ const lines = [
226
+ `## 🛒 Your Cart`,
227
+ `**Restaurant:** ${sessionCart.restaurantName}`,
228
+ '',
229
+ '### Items',
230
+ ];
231
+ if (Array.isArray(items) && items.length > 0) {
232
+ items.forEach((item, i) => {
233
+ const cartItem = item;
234
+ lines.push(`${i + 1}. **${cartItem.name || cartItem.menuItemId}** × ${cartItem.quantity}`, cartItem.specialInstructions ? ` _"${cartItem.specialInstructions}"_` : '');
235
+ });
236
+ }
237
+ lines.push('', '### Summary', `- **Subtotal:** ${subtotal}`, `- **Delivery Fee:** $${sessionCart.deliveryFee.toFixed(2) || 'TBD'}`, `- **Taxes:** $${sessionCart.taxes.toFixed(2) || 'TBD'}`, `- **Total:** ${total}`, '', `Use \`postmates_place_order\` to checkout.`);
238
+ return formatText(lines.filter((l) => l !== null).join('\n'));
239
+ }
240
+ finally {
241
+ await browser.close();
242
+ }
243
+ }
244
+ export async function handlePlaceOrder(input, browser, session) {
245
+ session.touch();
246
+ const cart = session.getCart();
247
+ if (!cart || cart.items.length === 0) {
248
+ return formatText(`❌ **Cannot place order: your cart is empty.**\n\n` +
249
+ `Add items using \`postmates_add_to_cart\` first.`);
250
+ }
251
+ try {
252
+ await browser.launch();
253
+ const result = (await browser.placeOrder(input.deliveryAddress, input.paymentMethod ?? 'saved'));
254
+ const order = {
255
+ orderId: result.orderId,
256
+ restaurantName: cart.restaurantName,
257
+ items: cart.items,
258
+ status: 'placed',
259
+ estimatedDelivery: result.estimatedDelivery,
260
+ total: cart.total,
261
+ deliveryAddress: input.deliveryAddress,
262
+ placedAt: new Date().toISOString(),
263
+ };
264
+ // Clear cart after successful order
265
+ session.clearCart();
266
+ const lines = [
267
+ `## ✅ Order Placed Successfully!`,
268
+ '',
269
+ `- **Order ID:** \`${order.orderId}\``,
270
+ `- **Restaurant:** ${order.restaurantName}`,
271
+ `- **Delivery to:** ${order.deliveryAddress}`,
272
+ `- **Estimated Delivery:** ${order.estimatedDelivery}`,
273
+ `- **Total:** $${order.total.toFixed(2)}`,
274
+ input.contactlessDelivery ? `- **Delivery:** Contactless (leave at door)` : '',
275
+ input.deliveryInstructions ? `- **Instructions:** ${input.deliveryInstructions}` : '',
276
+ '',
277
+ `Use \`postmates_track_order\` with order ID \`${order.orderId}\` to track your delivery.`,
278
+ ];
279
+ return formatText(lines.filter(Boolean).join('\n'));
280
+ }
281
+ finally {
282
+ await browser.close();
283
+ }
284
+ }
285
+ export async function handleTrackOrder(input, browser, session) {
286
+ session.touch();
287
+ try {
288
+ await browser.launch();
289
+ const tracking = (await browser.trackOrder(input.orderId));
290
+ const statusEmoji = {
291
+ placed: '📋',
292
+ confirmed: '✅',
293
+ preparing: '👨‍🍳',
294
+ ready_for_pickup: '📦',
295
+ out_for_delivery: '🛵',
296
+ delivered: '🎉',
297
+ cancelled: '❌',
298
+ unknown: '❓',
299
+ };
300
+ const emoji = statusEmoji[tracking.status] ?? '❓';
301
+ const lines = [
302
+ `## ${emoji} Order Tracking: \`${tracking.orderId}\``,
303
+ '',
304
+ `**Status:** ${tracking.statusMessage || tracking.status}`,
305
+ `**Estimated Delivery:** ${tracking.estimatedDelivery}`,
306
+ tracking.courierName ? `**Courier:** ${tracking.courierName}` : '',
307
+ tracking.courierPhone ? `**Courier Phone:** ${tracking.courierPhone}` : '',
308
+ `**Last Updated:** ${new Date(tracking.lastUpdated).toLocaleString()}`,
309
+ ];
310
+ if (tracking.steps && tracking.steps.length > 0) {
311
+ lines.push('', '### Delivery Progress');
312
+ tracking.steps.forEach((step) => {
313
+ const check = step.completed ? '✅' : '⏳';
314
+ lines.push(`${check} ${step.label}${step.timestamp ? ` _(${step.timestamp})_` : ''}`);
315
+ });
316
+ }
317
+ return formatText(lines.filter(Boolean).join('\n'));
318
+ }
319
+ finally {
320
+ await browser.close();
321
+ }
322
+ }
323
+ // ─── Helpers ─────────────────────────────────────────────────────────────────
324
+ function formatText(text) {
325
+ return { content: [{ type: 'text', text }] };
326
+ }
327
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ export interface Restaurant {
2
+ id: string;
3
+ name: string;
4
+ cuisine: string;
5
+ rating: number;
6
+ deliveryTime: string;
7
+ deliveryFee: string;
8
+ minimumOrder: string;
9
+ imageUrl?: string;
10
+ address?: string;
11
+ isOpen: boolean;
12
+ }
13
+ export interface MenuItem {
14
+ id: string;
15
+ name: string;
16
+ description: string;
17
+ price: number;
18
+ category: string;
19
+ imageUrl?: string;
20
+ customizations?: Customization[];
21
+ isAvailable: boolean;
22
+ }
23
+ export interface Customization {
24
+ id: string;
25
+ name: string;
26
+ required: boolean;
27
+ options: CustomizationOption[];
28
+ }
29
+ export interface CustomizationOption {
30
+ id: string;
31
+ name: string;
32
+ additionalPrice: number;
33
+ }
34
+ export interface CartItem {
35
+ menuItemId: string;
36
+ name: string;
37
+ quantity: number;
38
+ unitPrice: number;
39
+ totalPrice: number;
40
+ customizations?: SelectedCustomization[];
41
+ specialInstructions?: string;
42
+ }
43
+ export interface SelectedCustomization {
44
+ customizationId: string;
45
+ optionId: string;
46
+ name: string;
47
+ additionalPrice: number;
48
+ }
49
+ export interface Cart {
50
+ restaurantId: string;
51
+ restaurantName: string;
52
+ items: CartItem[];
53
+ subtotal: number;
54
+ deliveryFee: number;
55
+ taxes: number;
56
+ total: number;
57
+ }
58
+ export interface Order {
59
+ orderId: string;
60
+ restaurantName: string;
61
+ items: CartItem[];
62
+ status: OrderStatus;
63
+ estimatedDelivery: string;
64
+ total: number;
65
+ deliveryAddress: string;
66
+ placedAt: string;
67
+ }
68
+ export type OrderStatus = 'placed' | 'confirmed' | 'preparing' | 'ready_for_pickup' | 'out_for_delivery' | 'delivered' | 'cancelled';
69
+ export interface OrderTracking {
70
+ orderId: string;
71
+ status: OrderStatus;
72
+ statusMessage: string;
73
+ estimatedDelivery: string;
74
+ courierName?: string;
75
+ courierPhone?: string;
76
+ lastUpdated: string;
77
+ steps: TrackingStep[];
78
+ }
79
+ export interface TrackingStep {
80
+ label: string;
81
+ completed: boolean;
82
+ timestamp?: string;
83
+ }
84
+ export interface SessionState {
85
+ isAuthenticated: boolean;
86
+ userId?: string;
87
+ currentCart?: Cart;
88
+ lastActivity: Date;
89
+ }
90
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}