Refactoring
This commit is contained in:
parent
39cfada3e8
commit
dd14dfe72e
41 changed files with 866 additions and 742 deletions
|
|
@ -1,138 +1,18 @@
|
|||
import { NextRequest, NextResponse } from "next/server";
|
||||
import { Service, ServiceConfig } from "./service";
|
||||
import { makeWorkerUtils, WorkerUtils } from "graphile-worker";
|
||||
import { Service } from "./service";
|
||||
import { db } from "./database";
|
||||
|
||||
export const facebookConfig: ServiceConfig = {
|
||||
entity: "facebook",
|
||||
table: "FacebookBot",
|
||||
displayName: "Facebook Connection",
|
||||
createFields: [
|
||||
{
|
||||
name: "name",
|
||||
label: "Name",
|
||||
required: true,
|
||||
size: 12,
|
||||
},
|
||||
{
|
||||
name: "description",
|
||||
label: "Description",
|
||||
size: 12,
|
||||
lines: 3,
|
||||
},
|
||||
{ name: "appId", label: "App ID", required: true },
|
||||
{ name: "appSecret", label: "App Secret", required: true },
|
||||
{ name: "pageId", label: "Page ID", required: true },
|
||||
{
|
||||
name: "pageAccessToken",
|
||||
label: "Page Access Token",
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
name: "token",
|
||||
label: "Token",
|
||||
hidden: true,
|
||||
required: true,
|
||||
autogenerated: "token",
|
||||
},
|
||||
{
|
||||
name: "verifyToken",
|
||||
label: "Verify Token",
|
||||
hidden: true,
|
||||
required: true,
|
||||
autogenerated: "token",
|
||||
},
|
||||
],
|
||||
updateFields: [
|
||||
{ name: "name", label: "Name", required: true, size: 12 },
|
||||
{
|
||||
name: "description",
|
||||
label: "Description",
|
||||
size: 12,
|
||||
lines: 3,
|
||||
},
|
||||
{
|
||||
name: "token",
|
||||
label: "Token",
|
||||
disabled: true,
|
||||
refreshable: true,
|
||||
},
|
||||
{
|
||||
name: "verifyToken",
|
||||
label: "Verify Token",
|
||||
disabled: true,
|
||||
refreshable: true,
|
||||
},
|
||||
{ name: "appId", label: "App ID", required: true },
|
||||
{ name: "appSecret", label: "App Secret", required: true },
|
||||
{ name: "pageId", label: "Page ID", required: true },
|
||||
{
|
||||
name: "pageAccessToken",
|
||||
label: "Page Access Token",
|
||||
required: true,
|
||||
},
|
||||
],
|
||||
displayFields: [
|
||||
{ name: "name", label: "Name", required: true, size: 12 },
|
||||
{
|
||||
name: "description",
|
||||
label: "Description",
|
||||
required: true,
|
||||
size: 12,
|
||||
},
|
||||
{
|
||||
name: "token",
|
||||
label: "Token",
|
||||
copyable: true,
|
||||
},
|
||||
{
|
||||
name: "verifyToken",
|
||||
label: "Verify Token",
|
||||
copyable: true,
|
||||
},
|
||||
let workerUtils: WorkerUtils;
|
||||
|
||||
{ name: "appId", label: "App ID", required: true },
|
||||
{ name: "appSecret", label: "App Secret", required: true },
|
||||
{
|
||||
name: "pageId",
|
||||
label: "Page ID",
|
||||
required: true,
|
||||
copyable: true,
|
||||
},
|
||||
{
|
||||
name: "pageAccessToken",
|
||||
label: "Page Access Token",
|
||||
required: true,
|
||||
},
|
||||
],
|
||||
listColumns: [
|
||||
{
|
||||
field: "name",
|
||||
headerName: "Name",
|
||||
flex: 1,
|
||||
},
|
||||
{
|
||||
field: "description",
|
||||
headerName: "Description",
|
||||
flex: 2,
|
||||
},
|
||||
{
|
||||
field: "updatedAt",
|
||||
headerName: "Updated At",
|
||||
valueGetter: (value: any) => new Date(value).toLocaleString(),
|
||||
flex: 1,
|
||||
},
|
||||
],
|
||||
};
|
||||
const getWorkerUtils = async () => {
|
||||
if (!workerUtils) {
|
||||
workerUtils = await makeWorkerUtils({
|
||||
connectionString: process.env.DATABASE_URL,
|
||||
});
|
||||
}
|
||||
|
||||
const getAllBots = async (req: NextRequest) => {
|
||||
console.log({ req });
|
||||
|
||||
return NextResponse.json({ response: "ok" });
|
||||
};
|
||||
|
||||
const getOneBot = async (req: NextRequest) => {
|
||||
console.log({ req });
|
||||
|
||||
return NextResponse.json({ response: "ok" });
|
||||
return workerUtils;
|
||||
};
|
||||
|
||||
const sendMessage = async (req: NextRequest) => {
|
||||
|
|
@ -147,80 +27,75 @@ const receiveMessages = async (req: NextRequest) => {
|
|||
return NextResponse.json({ response: "ok" });
|
||||
};
|
||||
|
||||
const registerBot = async (req: NextRequest) => {
|
||||
console.log({ req });
|
||||
|
||||
return NextResponse.json({ response: "ok" });
|
||||
};
|
||||
|
||||
const resetBot = async (req: NextRequest) => {
|
||||
console.log({ req });
|
||||
|
||||
return NextResponse.json({ response: "ok" });
|
||||
};
|
||||
|
||||
const requestCode = async (req: NextRequest) => {
|
||||
console.log({ req });
|
||||
|
||||
return NextResponse.json({ response: "ok" });
|
||||
};
|
||||
|
||||
const unverifyBot = async (req: NextRequest) => {
|
||||
console.log({ req });
|
||||
|
||||
return NextResponse.json({ response: "ok" });
|
||||
};
|
||||
|
||||
const refreshBot = async (req: NextRequest) => {
|
||||
console.log({ req });
|
||||
|
||||
return NextResponse.json({ response: "ok" });
|
||||
};
|
||||
|
||||
const createBot = async (req: NextRequest) => {
|
||||
console.log({ req });
|
||||
|
||||
return NextResponse.json({ response: "ok" });
|
||||
};
|
||||
|
||||
const deleteBot = async (req: NextRequest) => {
|
||||
console.log({ req });
|
||||
|
||||
return NextResponse.json({ response: "ok" });
|
||||
};
|
||||
|
||||
const handleWebhook = async (req: NextRequest) => {
|
||||
console.log({ req });
|
||||
|
||||
const { searchParams } = req.nextUrl;
|
||||
const token = searchParams.get("hub.verify_token");
|
||||
const submittedToken = searchParams.get("hub.verify_token");
|
||||
|
||||
if (token !== process.env.FB_VERIFY_TOKEN) {
|
||||
// return NextResponse.error("Invalid token", { status: 403 });
|
||||
if (submittedToken) {
|
||||
console.log({ submittedToken });
|
||||
const row = await db
|
||||
.selectFrom("FacebookBot")
|
||||
.selectAll()
|
||||
.where("verifyToken", "=", submittedToken)
|
||||
.executeTakeFirst();
|
||||
|
||||
console.log({ row });
|
||||
|
||||
if (!row) {
|
||||
return NextResponse.error();
|
||||
}
|
||||
|
||||
if (searchParams.get("hub.mode") === "subscribe") {
|
||||
const challenge = searchParams.get("hub.challenge");
|
||||
console.log(submittedToken);
|
||||
console.log(challenge);
|
||||
|
||||
return NextResponse.json(challenge) as any;
|
||||
}
|
||||
}
|
||||
|
||||
if (searchParams.get("hub.mode") === "subscribe") {
|
||||
const challenge = searchParams.get("hub.challenge");
|
||||
console.log(token);
|
||||
console.log(challenge);
|
||||
const message = await req.json();
|
||||
console.log({ message });
|
||||
const entry = message.entry[0];
|
||||
console.log({ entry });
|
||||
const messaging = entry?.messaging[0];
|
||||
const pageId = messaging?.recipient?.id;
|
||||
console.log({ pageId });
|
||||
const row = await db
|
||||
.selectFrom("FacebookBot")
|
||||
.selectAll()
|
||||
.where("pageId", "=", pageId)
|
||||
.executeTakeFirst();
|
||||
|
||||
return new Response(challenge, { status: 200 }) as NextResponse;
|
||||
}
|
||||
console.log({ row });
|
||||
|
||||
const endpoint = `https://graph.facebook.com/v19.0/${pageId}/messages`;
|
||||
const inMessage = messaging?.message?.text;
|
||||
const outgoingMessage = {
|
||||
recipient: { id: messaging?.sender?.id },
|
||||
message: { text: `"${inMessage}", right back at you!` },
|
||||
messaging_type: "RESPONSE",
|
||||
access_token: row?.pageAccessToken,
|
||||
};
|
||||
console.log({ outgoingMessage });
|
||||
const response = await fetch(endpoint, {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify(outgoingMessage),
|
||||
});
|
||||
|
||||
console.log({ response });
|
||||
|
||||
console.log(message);
|
||||
const wu = await getWorkerUtils();
|
||||
|
||||
await wu.addJob("receive_facebook_message", message);
|
||||
|
||||
return NextResponse.json({ response: "ok" });
|
||||
};
|
||||
|
||||
export const Facebook: Service = {
|
||||
getAllBots,
|
||||
getOneBot,
|
||||
sendMessage,
|
||||
receiveMessages,
|
||||
registerBot,
|
||||
resetBot,
|
||||
requestCode,
|
||||
unverifyBot,
|
||||
refreshBot,
|
||||
createBot,
|
||||
deleteBot,
|
||||
handleWebhook,
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue