Refactoring 3
This commit is contained in:
parent
e4b78ceec2
commit
d1fb9b4d06
20 changed files with 201 additions and 123 deletions
|
|
@ -1,57 +0,0 @@
|
|||
import Wreck from "@hapi/wreck";
|
||||
import * as R from "remeda";
|
||||
import { withDb, AppDatabase } from "../../lib/db";
|
||||
// import logger from "../logger";
|
||||
|
||||
export interface WebhookOptions {
|
||||
webhookId: string;
|
||||
payload: any;
|
||||
}
|
||||
|
||||
const notifyWebhooksTask = async (options: WebhookOptions): Promise<void> =>
|
||||
withDb(async (db: AppDatabase) => {
|
||||
const { webhookId, payload } = options;
|
||||
|
||||
const webhook = await db.webhooks.findById({ id: webhookId });
|
||||
if (!webhook) {
|
||||
// logger.debug(
|
||||
// { webhookId },
|
||||
// "notify-webhook: no webhook registered with id",
|
||||
// );
|
||||
return;
|
||||
}
|
||||
|
||||
const { endpointUrl, httpMethod, headers } = webhook;
|
||||
const headersFormatted = R.reduce(
|
||||
headers || [],
|
||||
(acc: any, h: any) => {
|
||||
acc[h.header] = h.value;
|
||||
return acc;
|
||||
},
|
||||
{},
|
||||
);
|
||||
|
||||
const wreck = Wreck.defaults({
|
||||
json: true,
|
||||
headers: headersFormatted,
|
||||
});
|
||||
|
||||
// http errors will bubble up and cause the job to fail and be retried
|
||||
try {
|
||||
// logger.debug(
|
||||
// { webhookId, endpointUrl, httpMethod },
|
||||
// "notify-webhook: notifying",
|
||||
// );
|
||||
await (httpMethod === "post"
|
||||
? wreck.post(endpointUrl, { payload })
|
||||
: wreck.put(endpointUrl, { payload }));
|
||||
} catch (error: any) {
|
||||
// logger.error(
|
||||
// { webhookId, error: error.output },
|
||||
// "notify-webhook failed with this error",
|
||||
// );
|
||||
throw new Error(`webhook failed webhookId=${webhookId}`);
|
||||
}
|
||||
});
|
||||
|
||||
export default notifyWebhooksTask;
|
||||
31
apps/bridge-worker/tasks/common/notify-webhooks.ts
Normal file
31
apps/bridge-worker/tasks/common/notify-webhooks.ts
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
import { db } from "bridge-common";
|
||||
|
||||
export interface NotifyWebhooksOptions {
|
||||
backendId: string;
|
||||
payload: any;
|
||||
}
|
||||
|
||||
const notifyWebhooksTask = async (
|
||||
options: NotifyWebhooksOptions,
|
||||
): Promise<void> => {
|
||||
const { backendId, payload } = options;
|
||||
|
||||
const webhooks = await db
|
||||
.selectFrom("Webhook")
|
||||
.selectAll()
|
||||
.where("backendId", "=", backendId)
|
||||
.execute();
|
||||
|
||||
for (const webhook of webhooks) {
|
||||
const { endpointUrl, httpMethod, headers } = webhook;
|
||||
const finalHeaders = { "Content-Type": "application/json", ...headers };
|
||||
|
||||
await fetch(endpointUrl, {
|
||||
method: httpMethod,
|
||||
headers: finalHeaders,
|
||||
body: JSON.stringify(payload),
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export default notifyWebhooksTask;
|
||||
|
|
@ -17,9 +17,13 @@ const receiveFacebookMessageTask = async ({
|
|||
.selectAll()
|
||||
.where("pageId", "=", pageId)
|
||||
.executeTakeFirstOrThrow();
|
||||
const backendId = row.id;
|
||||
const payload = {
|
||||
text: messaging.message.text,
|
||||
recipient: messaging.sender.id,
|
||||
};
|
||||
|
||||
console.log({ row });
|
||||
await worker.addJob("notify_webhooks", messaging);
|
||||
await worker.addJob("common/notify-webhooks", { backendId, payload });
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,64 +1,34 @@
|
|||
interface SendFacebookMessageTaskOptions {}
|
||||
import { db } from "bridge-common";
|
||||
|
||||
interface SendFacebookMessageTaskOptions {
|
||||
token: string;
|
||||
message: any;
|
||||
}
|
||||
|
||||
const sendFacebookMessageTask = async (
|
||||
options: SendFacebookMessageTaskOptions,
|
||||
): Promise<void> => {
|
||||
console.log(options);
|
||||
|
||||
|
||||
const message = await req.json();
|
||||
|
||||
const message = await req.json();
|
||||
for (const entry of message.entry) {
|
||||
for (const messaging of entry.messaging) {
|
||||
const pageId = messaging.recipient.id;
|
||||
const row = await db
|
||||
.selectFrom("FacebookBot")
|
||||
.selectAll()
|
||||
.where("pageId", "=", pageId)
|
||||
.executeTakeFirst();
|
||||
|
||||
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
|
||||
const { token, message } = options;
|
||||
const { pageId, pageAccessToken } = await db
|
||||
.selectFrom("FacebookBot")
|
||||
.selectAll()
|
||||
.where("pageId", "=", pageId)
|
||||
.executeTakeFirst();
|
||||
|
||||
console.log({ row });
|
||||
.where("token", "=", token)
|
||||
.executeTakeFirstOrThrow();
|
||||
|
||||
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!` },
|
||||
recipient: { id: message.recipient },
|
||||
message: { text: `"${message.text}", right back at you!` },
|
||||
messaging_type: "RESPONSE",
|
||||
access_token: row?.pageAccessToken,
|
||||
access_token: pageAccessToken,
|
||||
};
|
||||
console.log({ outgoingMessage });
|
||||
const response = await fetch(endpoint, {
|
||||
|
||||
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" });
|
||||
|
||||
// withDb(async (db: AppDatabase) => {
|
||||
// await notifyWebhooks(db, options);
|
||||
// });
|
||||
};
|
||||
|
||||
export default sendFacebookMessageTask;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
import { db, getWorkerUtils } from "bridge-common";
|
||||
|
||||
interface ReceiveSignalMessageTaskOptions {
|
||||
message: any;
|
||||
}
|
||||
|
||||
const receiveSignalMessageTask = async ({
|
||||
message,
|
||||
}: ReceiveSignalMessageTaskOptions): Promise<void> => {};
|
||||
|
||||
export default receiveSignalMessageTask;
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
import { db, getWorkerUtils } from "bridge-common";
|
||||
|
||||
interface SendSignalMessageTaskOptions {
|
||||
message: any;
|
||||
}
|
||||
|
||||
const sendSignalMessageTask = async ({
|
||||
message,
|
||||
}: SendSignalMessageTaskOptions): Promise<void> => {};
|
||||
|
||||
export default sendSignalMessageTask;
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
import { db, getWorkerUtils } from "bridge-common";
|
||||
|
||||
interface ReceiveVoiceMessageTaskOptions {
|
||||
message: any;
|
||||
}
|
||||
|
||||
const receiveVoiceMessageTask = async ({
|
||||
message,
|
||||
}: ReceiveVoiceMessageTaskOptions): Promise<void> => {};
|
||||
|
||||
export default receiveVoiceMessageTask;
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
import { db, getWorkerUtils } from "bridge-common";
|
||||
|
||||
interface SendVoiceMessageTaskOptions {
|
||||
message: any;
|
||||
}
|
||||
|
||||
const sendVoiceMessageTask = async ({
|
||||
message,
|
||||
}: SendVoiceMessageTaskOptions): Promise<void> => {};
|
||||
|
||||
export default sendVoiceMessageTask;
|
||||
|
|
@ -1,4 +1,17 @@
|
|||
import { db, getWorkerUtils } from "bridge-common";
|
||||
|
||||
interface ReceiveWhatsappMessageTaskOptions {
|
||||
message: any;
|
||||
}
|
||||
|
||||
const receiveWhatsappMessageTask = async ({
|
||||
message,
|
||||
}: ReceiveWhatsappMessageTaskOptions): Promise<void> => {};
|
||||
|
||||
export default receiveWhatsappMessageTask;
|
||||
|
||||
/* eslint-disable camelcase */
|
||||
/*
|
||||
import { withDb, AppDatabase } from "../../lib/db";
|
||||
import workerUtils from "../../lib/utils";
|
||||
|
||||
|
|
@ -93,3 +106,4 @@ const whatsappMessageTask = async (
|
|||
};
|
||||
|
||||
export default whatsappMessageTask;
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
import { db, getWorkerUtils } from "bridge-common";
|
||||
|
||||
interface SendWhatsappMessageTaskOptions {
|
||||
message: any;
|
||||
}
|
||||
|
||||
const sendWhatsappMessageTask = async ({
|
||||
message,
|
||||
}: SendWhatsappMessageTaskOptions): Promise<void> => {};
|
||||
|
||||
export default sendWhatsappMessageTask;
|
||||
Loading…
Add table
Add a link
Reference in a new issue