refactor Notifications rc
This commit is contained in:
parent
448ef06a26
commit
87d9a0bc1d
@ -101,10 +101,18 @@ export async function GET(request: Request) {
|
|||||||
|
|
||||||
const tokenData = await createTokenResponse.json();
|
const tokenData = await createTokenResponse.json();
|
||||||
|
|
||||||
|
logger.debug('[ROCKET_CHAT_USER_TOKEN] Token created', {
|
||||||
|
userId: currentUser._id,
|
||||||
|
hasAuthToken: !!tokenData.data?.authToken,
|
||||||
|
tokenLength: tokenData.data?.authToken?.length,
|
||||||
|
});
|
||||||
|
|
||||||
return NextResponse.json({
|
return NextResponse.json({
|
||||||
userId: currentUser._id,
|
userId: currentUser._id,
|
||||||
authToken: tokenData.data.authToken,
|
authToken: tokenData.data.authToken,
|
||||||
username: currentUser.username,
|
username: currentUser.username,
|
||||||
|
// Also return the full token data for debugging
|
||||||
|
tokenData: tokenData.data,
|
||||||
});
|
});
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
logger.error('[ROCKET_CHAT_USER_TOKEN] Error', {
|
logger.error('[ROCKET_CHAT_USER_TOKEN] Error', {
|
||||||
|
|||||||
@ -20,8 +20,64 @@ export function LayoutWrapper({ children, isSignInPage, isAuthenticated }: Layou
|
|||||||
const { currentBackground, changeBackground } = useBackgroundImage();
|
const { currentBackground, changeBackground } = useBackgroundImage();
|
||||||
const { data: session } = useSession();
|
const { data: session } = useSession();
|
||||||
|
|
||||||
// Listen for incoming RocketChat calls
|
// Listen for incoming RocketChat calls via WebSocket
|
||||||
useRocketChatCalls();
|
useRocketChatCalls();
|
||||||
|
|
||||||
|
// Also listen for RocketChat iframe events (fallback)
|
||||||
|
useEffect(() => {
|
||||||
|
if (isSignInPage) return;
|
||||||
|
|
||||||
|
const handleRocketChatMessage = (event: MessageEvent) => {
|
||||||
|
// Listen for RocketChat iframe events
|
||||||
|
if (event.data && typeof event.data === 'object') {
|
||||||
|
// Check for new messages that might be call invitations
|
||||||
|
if (event.data.event === 'new-message' || event.data.eventName === 'new-message') {
|
||||||
|
const message = event.data.message || event.data.data;
|
||||||
|
if (message) {
|
||||||
|
// Check if message contains call-related content
|
||||||
|
const text = message.text || message.msg || '';
|
||||||
|
const isCallMessage =
|
||||||
|
text.includes('video') ||
|
||||||
|
text.includes('audio') ||
|
||||||
|
text.includes('call') ||
|
||||||
|
message.attachments?.some((att: any) =>
|
||||||
|
att.actions?.some((action: any) =>
|
||||||
|
action.type === 'button' &&
|
||||||
|
(action.text?.toLowerCase().includes('join') || action.text?.toLowerCase().includes('appel'))
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (isCallMessage) {
|
||||||
|
console.log('[ROCKETCHAT_IFRAME] 📞 Possible call message detected from iframe', message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for notification events that might be calls
|
||||||
|
if (event.data.event === 'notification' || event.data.eventName === 'notification') {
|
||||||
|
const notification = event.data.notification || event.data.data;
|
||||||
|
if (notification) {
|
||||||
|
const title = notification.title || '';
|
||||||
|
const text = notification.text || '';
|
||||||
|
const isCallNotification =
|
||||||
|
title.toLowerCase().includes('call') ||
|
||||||
|
title.toLowerCase().includes('appel') ||
|
||||||
|
text.toLowerCase().includes('video') ||
|
||||||
|
text.toLowerCase().includes('audio');
|
||||||
|
|
||||||
|
if (isCallNotification) {
|
||||||
|
console.log('[ROCKETCHAT_IFRAME] 📞 Possible call notification from iframe', notification);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
window.addEventListener('message', handleRocketChatMessage);
|
||||||
|
return () => {
|
||||||
|
window.removeEventListener('message', handleRocketChatMessage);
|
||||||
|
};
|
||||||
|
}, [isSignInPage]);
|
||||||
|
|
||||||
// Global listener for logout messages from iframe applications
|
// Global listener for logout messages from iframe applications
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
@ -104,7 +104,9 @@ export class RocketChatCallListener {
|
|||||||
collection: message.collection,
|
collection: message.collection,
|
||||||
id: message.id,
|
id: message.id,
|
||||||
eventName: message.fields?.eventName,
|
eventName: message.fields?.eventName,
|
||||||
fullMessage: message,
|
error: message.error,
|
||||||
|
reason: message.reason,
|
||||||
|
fullMessage: JSON.stringify(message, null, 2),
|
||||||
});
|
});
|
||||||
this.handleMessage(message);
|
this.handleMessage(message);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -143,7 +145,7 @@ export class RocketChatCallListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Authenticate with RocketChat
|
* Authenticate with RocketChat using resume token
|
||||||
*/
|
*/
|
||||||
private authenticate(): void {
|
private authenticate(): void {
|
||||||
if (!this.ws || !this.authToken || !this.userId) {
|
if (!this.ws || !this.authToken || !this.userId) {
|
||||||
@ -155,6 +157,7 @@ export class RocketChatCallListener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Try method 1: resume token
|
||||||
const loginMessage = {
|
const loginMessage = {
|
||||||
msg: 'method',
|
msg: 'method',
|
||||||
method: 'login',
|
method: 'login',
|
||||||
@ -166,13 +169,38 @@ export class RocketChatCallListener {
|
|||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
console.log('[ROCKETCHAT_CALL_LISTENER] 🔐 Sending login message', {
|
console.log('[ROCKETCHAT_CALL_LISTENER] 🔐 Sending login message (resume token)', {
|
||||||
|
method: 'login',
|
||||||
|
hasToken: !!this.authToken,
|
||||||
|
userId: this.userId,
|
||||||
|
tokenLength: this.authToken.length,
|
||||||
|
});
|
||||||
|
logger.debug('[ROCKETCHAT_CALL_LISTENER] Sending login message');
|
||||||
|
this.ws.send(JSON.stringify(loginMessage));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Alternative authentication method - try different token formats
|
||||||
|
*/
|
||||||
|
private authenticateAlternative(): void {
|
||||||
|
if (!this.ws || !this.authToken || !this.userId) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try method 2: token as string (not in object)
|
||||||
|
const loginMessage2 = {
|
||||||
|
msg: 'method',
|
||||||
|
method: 'login',
|
||||||
|
id: `login-alt-${Date.now()}`,
|
||||||
|
params: [this.authToken],
|
||||||
|
};
|
||||||
|
|
||||||
|
console.log('[ROCKETCHAT_CALL_LISTENER] 🔐 Trying alternative login (token as string)', {
|
||||||
method: 'login',
|
method: 'login',
|
||||||
hasToken: !!this.authToken,
|
hasToken: !!this.authToken,
|
||||||
userId: this.userId,
|
userId: this.userId,
|
||||||
});
|
});
|
||||||
logger.debug('[ROCKETCHAT_CALL_LISTENER] Sending login message');
|
this.ws.send(JSON.stringify(loginMessage2));
|
||||||
this.ws.send(JSON.stringify(loginMessage));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -224,6 +252,28 @@ export class RocketChatCallListener {
|
|||||||
* Handle incoming WebSocket messages
|
* Handle incoming WebSocket messages
|
||||||
*/
|
*/
|
||||||
private handleMessage(message: any): void {
|
private handleMessage(message: any): void {
|
||||||
|
// Handle error messages
|
||||||
|
if (message.msg === 'error') {
|
||||||
|
const errorDetails = {
|
||||||
|
error: message.error,
|
||||||
|
reason: message.reason,
|
||||||
|
message: message.message,
|
||||||
|
errorType: message.error?.error,
|
||||||
|
errorMessage: message.error?.message,
|
||||||
|
errorIsString: typeof message.error === 'string',
|
||||||
|
fullError: JSON.stringify(message, null, 2),
|
||||||
|
};
|
||||||
|
console.error('[ROCKETCHAT_CALL_LISTENER] ❌ WebSocket error received:', errorDetails);
|
||||||
|
console.error('[ROCKETCHAT_CALL_LISTENER] ❌ Full error object:', message);
|
||||||
|
|
||||||
|
// If it's a login error, log it but don't retry automatically
|
||||||
|
if (message.id?.startsWith('login-') || message.id?.startsWith('login-alt-')) {
|
||||||
|
console.error('[ROCKETCHAT_CALL_LISTENER] 🔴 LOGIN FAILED - Error details above');
|
||||||
|
// The error message will tell us what's wrong
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Handle login response
|
// Handle login response
|
||||||
if (message.msg === 'result' && message.id?.startsWith('login-')) {
|
if (message.msg === 'result' && message.id?.startsWith('login-')) {
|
||||||
console.log('[ROCKETCHAT_CALL_LISTENER] 📋 Login response received', {
|
console.log('[ROCKETCHAT_CALL_LISTENER] 📋 Login response received', {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user