41 |
42 |
43 | purchase_stock({JSON.stringify(args)})
44 |
45 |
46 | {!result && status.type !== "running" && (
47 |
52 | )}
53 | {resultObj.approve &&
}
54 | {resultObj.approve === false && (
55 |
User rejected purchase
56 | )}
57 | {resultObj.cancelled && (
58 |
Cancelled
59 | )}
60 |
61 | );
62 | },
63 | }
64 | );
65 |
--------------------------------------------------------------------------------
/frontend/app/api/[..._path]/route.ts:
--------------------------------------------------------------------------------
1 | import { NextRequest, NextResponse } from "next/server";
2 |
3 | export const runtime = "edge";
4 |
5 | function getCorsHeaders() {
6 | return {
7 | "Access-Control-Allow-Origin": "*",
8 | "Access-Control-Allow-Methods": "GET, POST, PUT, PATCH, DELETE, OPTIONS",
9 | "Access-Control-Allow-Headers": "*",
10 | };
11 | }
12 |
13 | async function handleRequest(req: NextRequest, method: string) {
14 | try {
15 | const path = req.nextUrl.pathname.replace(/^\/?api\//, "");
16 | const url = new URL(req.url);
17 | const searchParams = new URLSearchParams(url.search);
18 | searchParams.delete("_path");
19 | searchParams.delete("nxtP_path");
20 | const queryString = searchParams.toString()
21 | ? `?${searchParams.toString()}`
22 | : "";
23 |
24 | const options: RequestInit = {
25 | method,
26 | headers: {
27 | "x-api-key": process.env["LANGCHAIN_API_KEY"] || "",
28 | },
29 | };
30 |
31 | if (["POST", "PUT", "PATCH"].includes(method)) {
32 | options.body = await req.text();
33 | }
34 |
35 | const res = await fetch(
36 | `${process.env["LANGGRAPH_API_URL"]}/${path}${queryString}`,
37 | options,
38 | );
39 |
40 | return new NextResponse(res.body, {
41 | status: res.status,
42 | statusText: res.statusText,
43 | headers: {
44 | ...res.headers,
45 | ...getCorsHeaders(),
46 | },
47 | });
48 | } catch (e: any) {
49 | return NextResponse.json({ error: e.message }, { status: e.status ?? 500 });
50 | }
51 | }
52 |
53 | export const GET = (req: NextRequest) => handleRequest(req, "GET");
54 | export const POST = (req: NextRequest) => handleRequest(req, "POST");
55 | export const PUT = (req: NextRequest) => handleRequest(req, "PUT");
56 | export const PATCH = (req: NextRequest) => handleRequest(req, "PATCH");
57 | export const DELETE = (req: NextRequest) => handleRequest(req, "DELETE");
58 |
59 | // Add a new OPTIONS handler
60 | export const OPTIONS = () => {
61 | return new NextResponse(null, {
62 | status: 204,
63 | headers: {
64 | ...getCorsHeaders(),
65 | },
66 | });
67 | };
68 |
--------------------------------------------------------------------------------
/frontend/components/ui/card.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react"
2 |
3 | import { cn } from "@/lib/utils"
4 |
5 | const Card = React.forwardRef<
6 | HTMLDivElement,
7 | React.HTMLAttributes