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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56import { db, event, isStaging } from '#src/utils';
import { LambdaClient, InvokeCommand } from '@aws-sdk/client-lambda';
const lambda = new LambdaClient();
export const runScan = async () => {
const { audit_id } = event.body;
await db.connect();
const audit = (await db.query({
text: `SELECT * FROM "audits" WHERE "id"=$1`,
values: [audit_id],
})).rows?.[0];
try {
const scanResponse = await (await fetch(`https://scan${isStaging ? '-dev' : ''}.equalify.app/generate/${audit?.is_sitemap ? 'sitemapurl' : 'url'}`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ url: audit.audit_url, userId: event.claims.sub })
})).json();
// console.log(JSON.stringify({ scanResponse }));
for (const { jobId, url } of scanResponse?.jobs ?? []) {
const urlId = (await db.query({
text: `SELECT "id" FROM "urls" WHERE "organization_id"=$1 AND "url"=$2 AND "audit_id"=$3`,
values: [event.claims.profile, url, audit_id],
})).rows?.[0]?.id ?? (await db.query({
text: `INSERT INTO "urls" ("organization_id", "url", "audit_id") VALUES ($1, $2, $3) RETURNING "id"`,
values: [event.claims.profile, url, audit_id]
})).rows?.[0]?.id;
const scan = (await db.query({
text: `INSERT INTO "scans" ("user_id", "organization_id", "audit_id", "url_id", "job_id") VALUES ($1, $2, $3, $4, $5) RETURNING "job_id"`,
values: [event.claims.sub, event.claims.profile, audit_id, urlId, parseInt(jobId)]
})).rows[0];
}
lambda.send(new InvokeCommand({
FunctionName: `equalifyv2-api${isStaging ? '-staging' : ''}`,
InvocationType: "Event",
Payload: Buffer.from(JSON.stringify({
path: '/internal/processScans',
organization_id: event.claims.profile,
audit_id: audit_id,
is_sitemap: audit?.is_sitemap,
})),
}));
}
catch (err) {
console.log(err);
}
await db.clean();
return {
status: 'success',
message: 'Scan successfully queued',
};
}