import type { IPushService } from '@rocket.chat/core-services'; import { ServiceClassInternal } from '@rocket.chat/core-services'; import { PushToken } from '@rocket.chat/models'; export class PushService extends ServiceClassInternal implements IPushService { protected name = 'push'; constructor() { super(); this.onEvent('watch.users', async (data) => { // for some reason data.diff can be set to undefined if (!('diff' in data) || !data.diff || !('services.resume.loginTokens' in data.diff)) { return; } const loginTokens = Array.isArray(data.diff['services.resume.loginTokens']) ? data.diff['services.resume.loginTokens'] : []; if (data.diff['services.resume.loginTokens'] === undefined || loginTokens.length === 0) { await PushToken.removeAllByUserId(data.id); return; } const tokens = loginTokens.map(({ hashedToken }: { hashedToken: string }) => hashedToken); if (tokens.length > 0) { await PushToken.removeByUserIdExceptTokens(data.id, tokens); } }); } }