feat: add telegram business connect onboarding and status sync
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
import { getAuthContext } from "../../../../../utils/auth";
|
||||
import { prisma } from "../../../../../utils/prisma";
|
||||
import { buildTelegramStartUrl, issueLinkToken } from "../../../../../utils/telegramBusinessConnect";
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const auth = await getAuthContext(event);
|
||||
const { token, payload } = issueLinkToken({ teamId: auth.teamId, userId: auth.userId });
|
||||
|
||||
const pendingId = `pending:${payload.nonce}`;
|
||||
await prisma.telegramBusinessConnection.upsert({
|
||||
where: {
|
||||
teamId_businessConnectionId: {
|
||||
teamId: auth.teamId,
|
||||
businessConnectionId: pendingId,
|
||||
},
|
||||
},
|
||||
create: {
|
||||
teamId: auth.teamId,
|
||||
businessConnectionId: pendingId,
|
||||
rawJson: {
|
||||
state: "pending_link",
|
||||
link: {
|
||||
nonce: payload.nonce,
|
||||
exp: payload.exp,
|
||||
createdAt: new Date().toISOString(),
|
||||
createdByUserId: auth.userId,
|
||||
},
|
||||
},
|
||||
},
|
||||
update: {
|
||||
isEnabled: null,
|
||||
canReply: null,
|
||||
rawJson: {
|
||||
state: "pending_link",
|
||||
link: {
|
||||
nonce: payload.nonce,
|
||||
exp: payload.exp,
|
||||
createdAt: new Date().toISOString(),
|
||||
createdByUserId: auth.userId,
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
ok: true,
|
||||
status: "pending_link",
|
||||
connectUrl: buildTelegramStartUrl(token),
|
||||
expiresAt: new Date(payload.exp * 1000).toISOString(),
|
||||
};
|
||||
});
|
||||
Reference in New Issue
Block a user