refactor(auth): unify messenger bot link flow across login/profile/notifications

This commit is contained in:
Ruslan Bakiev
2026-04-02 16:12:34 +07:00
parent b0f461a74e
commit f4a4b41dd5
4 changed files with 21 additions and 18 deletions

View File

@@ -0,0 +1,10 @@
export function buildMessengerBotStartUrl(baseUrl: string, email: string) {
const normalizedEmail = email.trim().toLowerCase();
if (!baseUrl || !normalizedEmail) {
return '';
}
const payload = encodeURIComponent(`login:${normalizedEmail}`);
const separator = baseUrl.includes('?') ? '&' : '?';
return `${baseUrl}${separator}start=${payload}`;
}

View File

@@ -5,6 +5,7 @@ import {
RequestLoginCodeDocument, RequestLoginCodeDocument,
VerifyLoginCodeDocument, VerifyLoginCodeDocument,
} from '~/composables/graphql/generated'; } from '~/composables/graphql/generated';
import { buildMessengerBotStartUrl } from '~/composables/useMessengerBotLink';
const config = useRuntimeConfig(); const config = useRuntimeConfig();
const route = useRoute(); const route = useRoute();
@@ -35,18 +36,12 @@ const maxBotUrl = computed(() => config.public.maxBotUrl || '');
const normalizedEmail = computed(() => email.value.trim().toLowerCase()); const normalizedEmail = computed(() => email.value.trim().toLowerCase());
const isEmailReady = computed(() => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(normalizedEmail.value)); const isEmailReady = computed(() => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(normalizedEmail.value));
function buildBotLoginUrl(baseUrl: string) { const telegramLoginUrl = computed(() =>
if (!isEmailReady.value || !baseUrl) { isEmailReady.value ? buildMessengerBotStartUrl(telegramBotUrl.value, normalizedEmail.value) : '',
return ''; );
} const maxLoginUrl = computed(() =>
isEmailReady.value ? buildMessengerBotStartUrl(maxBotUrl.value, normalizedEmail.value) : '',
const payload = encodeURIComponent(`login:${normalizedEmail.value}`); );
const separator = baseUrl.includes('?') ? '&' : '?';
return `${baseUrl}${separator}start=${payload}`;
}
const telegramLoginUrl = computed(() => buildBotLoginUrl(telegramBotUrl.value));
const maxLoginUrl = computed(() => buildBotLoginUrl(maxBotUrl.value));
async function finalizeSession(accessToken: string) { async function finalizeSession(accessToken: string) {
authCookie.value = accessToken; authCookie.value = accessToken;

View File

@@ -6,6 +6,7 @@ import {
MyNotificationHistoryDocument, MyNotificationHistoryDocument,
SendTestMessengerMessageDocument, SendTestMessengerMessageDocument,
} from '~/composables/graphql/generated'; } from '~/composables/graphql/generated';
import { buildMessengerBotStartUrl } from '~/composables/useMessengerBotLink';
const selectedChannel = ref<'TELEGRAM' | 'MAX'>('TELEGRAM'); const selectedChannel = ref<'TELEGRAM' | 'MAX'>('TELEGRAM');
const customMessage = ref('Тест канала уведомлений Fregat'); const customMessage = ref('Тест канала уведомлений Fregat');
@@ -55,9 +56,7 @@ function buildBotConnectUrl(baseUrl: string) {
return ''; return '';
} }
const payload = encodeURIComponent(`login:${email}`); return buildMessengerBotStartUrl(baseUrl, email);
const separator = baseUrl.includes('?') ? '&' : '?';
return `${baseUrl}${separator}start=${payload}`;
} }
const telegramConnectUrl = computed(() => buildBotConnectUrl(config.public.telegramBotUrl || '')); const telegramConnectUrl = computed(() => buildBotConnectUrl(config.public.telegramBotUrl || ''));

View File

@@ -1,6 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { useMutation, useQuery } from '@vue/apollo-composable'; import { useMutation, useQuery } from '@vue/apollo-composable';
import { MeDocument, MyMessengerConnectionsDocument, RegisterSelfDocument } from '~/composables/graphql/generated'; import { MeDocument, MyMessengerConnectionsDocument, RegisterSelfDocument } from '~/composables/graphql/generated';
import { buildMessengerBotStartUrl } from '~/composables/useMessengerBotLink';
const companyName = ref(''); const companyName = ref('');
const inn = ref(''); const inn = ref('');
@@ -45,9 +46,7 @@ function buildBotConnectUrl(baseUrl: string) {
return ''; return '';
} }
const payload = encodeURIComponent(`login:${accountEmail}`); return buildMessengerBotStartUrl(baseUrl, accountEmail);
const separator = baseUrl.includes('?') ? '&' : '?';
return `${baseUrl}${separator}start=${payload}`;
} }
const telegramConnectUrl = computed(() => buildBotConnectUrl(config.public.telegramBotUrl || '')); const telegramConnectUrl = computed(() => buildBotConnectUrl(config.public.telegramBotUrl || ''));