feat(auth): request secure messenger start sessions
This commit is contained in:
49
app/composables/useMessengerStart.ts
Normal file
49
app/composables/useMessengerStart.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
import { buildMessengerBotStartUrl } from '~/composables/useMessengerBotLink';
|
||||
|
||||
type MessengerChannel = 'TELEGRAM' | 'MAX';
|
||||
|
||||
type MessengerStartResponse = {
|
||||
ok: true;
|
||||
startToken: string;
|
||||
expiresAt: string;
|
||||
mode: 'login' | 'connect';
|
||||
};
|
||||
|
||||
type MessengerStartInput = {
|
||||
channel: MessengerChannel;
|
||||
baseUrl: string;
|
||||
email?: string;
|
||||
};
|
||||
|
||||
export function useMessengerStart() {
|
||||
const pendingChannel = ref<MessengerChannel | null>(null);
|
||||
|
||||
async function openMessengerBot({ channel, baseUrl, email }: MessengerStartInput) {
|
||||
pendingChannel.value = channel;
|
||||
|
||||
const payloadPromise = $fetch<MessengerStartResponse>('/api/auth/messenger-start', {
|
||||
method: 'POST',
|
||||
body: {
|
||||
channel,
|
||||
email,
|
||||
},
|
||||
});
|
||||
payloadPromise.finally(() => {
|
||||
pendingChannel.value = null;
|
||||
});
|
||||
|
||||
const payload = await payloadPromise;
|
||||
|
||||
const startUrl = buildMessengerBotStartUrl(baseUrl, payload.startToken);
|
||||
if (import.meta.client) {
|
||||
window.open(startUrl, '_blank', 'noopener,noreferrer');
|
||||
}
|
||||
|
||||
return payload;
|
||||
}
|
||||
|
||||
return {
|
||||
pendingChannel,
|
||||
openMessengerBot,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user