1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39import { event } from "#src/utils";
import { LambdaClient, InvokeCommand } from "@aws-sdk/client-lambda";
const lambda = new LambdaClient();
//
// Invokes the crawler lambda to discover URLs from a site's sitemap
//
export const crawlUrl = async () => {
const url = (event.body as any)?.url;
if (!url) {
return {
statusCode: 400,
body: JSON.stringify({ error: "url is required" }),
};
}
const response = await lambda.send(
new InvokeCommand({
FunctionName: "aws-lambda-crawler",
InvocationType: "RequestResponse",
Payload: JSON.stringify({
body: JSON.stringify({ url }),
requestContext: { http: { method: "POST" } },
}),
})
);
const payload = JSON.parse(new TextDecoder().decode(response.Payload));
const body = JSON.parse(payload.body);
return {
statusCode: payload.statusCode,
body: JSON.stringify(body),
};
};