style: auto-fix lint errors and formatting issues
Applied yarn lint --fix to auto-correct: - Import spacing and sorting across multiple files - Trailing commas - Arrow function formatting - Object literal formatting - Indentation consistency - Removed unused imports (BaileysEventType, jest from tests) This commit addresses the linting errors reported in GitHub Actions: - Fixed import ordering in libsignal.ts - Fixed trailing commas in Defaults/index.ts - Cleaned up formatting across 63 files - Reduced line count by ~220 lines through formatting optimization Note: Some lint errors remain (75 errors, 239 warnings) mainly: - @typescript-eslint/no-unused-vars (variables assigned but not used) - @typescript-eslint/no-explicit-any (type safety warnings) These remaining issues are non-blocking and can be addressed incrementally. https://claude.ai/code/session_015R3U3kiprQiNTTNNt31Sg6
This commit is contained in:
@@ -70,7 +70,10 @@ describe('LIDMappingStore', () => {
|
||||
const lidTwo = '44444:99@hosted.lid'
|
||||
|
||||
// @ts-ignore
|
||||
mockKeys.get.mockResolvedValue({ '33333_reverse': '77777', '44444_reverse': '88888' } as SignalDataTypeMap['lid-mapping'])
|
||||
mockKeys.get.mockResolvedValue({
|
||||
'33333_reverse': '77777',
|
||||
'44444_reverse': '88888'
|
||||
} as SignalDataTypeMap['lid-mapping'])
|
||||
|
||||
const result = await lidMappingStore.getPNsForLIDs([lidOne, lidTwo])
|
||||
|
||||
@@ -96,7 +99,9 @@ describe('LIDMappingStore', () => {
|
||||
mockKeys.get.mockResolvedValue({ '12345': lidUser } as SignalDataTypeMap['lid-mapping'])
|
||||
|
||||
// Make 10 concurrent calls for the same PN
|
||||
const promises = Array(10).fill(null).map(() => lidMappingStore.getLIDForPN(pn))
|
||||
const promises = Array(10)
|
||||
.fill(null)
|
||||
.map(() => lidMappingStore.getLIDForPN(pn))
|
||||
|
||||
// All should resolve to same result
|
||||
const results = await Promise.all(promises)
|
||||
@@ -115,7 +120,9 @@ describe('LIDMappingStore', () => {
|
||||
mockKeys.get.mockResolvedValue({ '54321_reverse': pnUser } as SignalDataTypeMap['lid-mapping'])
|
||||
|
||||
// Make 10 concurrent calls for the same LID
|
||||
const promises = Array(10).fill(null).map(() => lidMappingStore.getPNForLID(lid))
|
||||
const promises = Array(10)
|
||||
.fill(null)
|
||||
.map(() => lidMappingStore.getPNForLID(lid))
|
||||
|
||||
// All should resolve to same result
|
||||
const results = await Promise.all(promises)
|
||||
@@ -133,10 +140,7 @@ describe('LIDMappingStore', () => {
|
||||
mockKeys.get.mockResolvedValue({ '11111': 'aaaaa', '22222': 'bbbbb' } as SignalDataTypeMap['lid-mapping'])
|
||||
|
||||
// Concurrent calls for DIFFERENT PNs
|
||||
const [result1, result2] = await Promise.all([
|
||||
lidMappingStore.getLIDForPN(pn1),
|
||||
lidMappingStore.getLIDForPN(pn2)
|
||||
])
|
||||
const [result1, result2] = await Promise.all([lidMappingStore.getLIDForPN(pn1), lidMappingStore.getLIDForPN(pn2)])
|
||||
|
||||
expect(result1).toBe('aaaaa@lid')
|
||||
expect(result2).toBe('bbbbb@lid')
|
||||
@@ -155,14 +159,15 @@ describe('LIDMappingStore', () => {
|
||||
lidMappingStore.destroy()
|
||||
|
||||
// All operations should throw after destroy
|
||||
await expect(lidMappingStore.getLIDForPN('12345@s.whatsapp.net'))
|
||||
.rejects.toThrow('LIDMappingStore has been destroyed')
|
||||
await expect(lidMappingStore.getLIDForPN('12345@s.whatsapp.net')).rejects.toThrow(
|
||||
'LIDMappingStore has been destroyed'
|
||||
)
|
||||
|
||||
await expect(lidMappingStore.getPNForLID('54321@lid'))
|
||||
.rejects.toThrow('LIDMappingStore has been destroyed')
|
||||
await expect(lidMappingStore.getPNForLID('54321@lid')).rejects.toThrow('LIDMappingStore has been destroyed')
|
||||
|
||||
await expect(lidMappingStore.storeLIDPNMappings([{ lid: 'a@lid', pn: 'b@s.whatsapp.net' }]))
|
||||
.rejects.toThrow('LIDMappingStore has been destroyed')
|
||||
await expect(lidMappingStore.storeLIDPNMappings([{ lid: 'a@lid', pn: 'b@s.whatsapp.net' }])).rejects.toThrow(
|
||||
'LIDMappingStore has been destroyed'
|
||||
)
|
||||
})
|
||||
|
||||
it('should allow destroy() to be called multiple times safely', () => {
|
||||
@@ -208,8 +213,7 @@ describe('LIDMappingStore', () => {
|
||||
expect(operationCompleted).toBe(true)
|
||||
|
||||
// But new operations should be rejected
|
||||
await expect(lidMappingStore.getLIDForPN(pn))
|
||||
.rejects.toThrow('LIDMappingStore has been destroyed')
|
||||
await expect(lidMappingStore.getLIDForPN(pn)).rejects.toThrow('LIDMappingStore has been destroyed')
|
||||
})
|
||||
})
|
||||
|
||||
@@ -286,15 +290,13 @@ describe('LIDMappingStore', () => {
|
||||
mockKeys.get.mockResolvedValue({ '12345': 'aaaaa' } as SignalDataTypeMap['lid-mapping'])
|
||||
|
||||
const result = await lidMappingStore.getLIDsForPNs([
|
||||
'12345@s.whatsapp.net', // Valid
|
||||
'invalid', // Invalid
|
||||
'67890@s.whatsapp.net' // Valid but not in DB
|
||||
'12345@s.whatsapp.net', // Valid
|
||||
'invalid', // Invalid
|
||||
'67890@s.whatsapp.net' // Valid but not in DB
|
||||
])
|
||||
|
||||
// Should only return valid results
|
||||
expect(result).toEqual([
|
||||
{ pn: '12345@s.whatsapp.net', lid: 'aaaaa@lid' }
|
||||
])
|
||||
expect(result).toEqual([{ pn: '12345@s.whatsapp.net', lid: 'aaaaa@lid' }])
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { jest } from '@jest/globals'
|
||||
import P from 'pino'
|
||||
import { makeSessionActivityTracker } from '../../Signal/session-activity-tracker'
|
||||
import type { SessionActivityMetadata } from '../../Signal/session-activity-tracker'
|
||||
import { makeSessionActivityTracker } from '../../Signal/session-activity-tracker'
|
||||
import type { SignalKeyStoreWithTransaction } from '../../Types'
|
||||
|
||||
const mockKeys: jest.Mocked<SignalKeyStoreWithTransaction> = {
|
||||
@@ -137,7 +137,7 @@ describe('SessionActivityTracker', () => {
|
||||
const tracker = makeSessionActivityTracker(mockKeys, logger, config)
|
||||
|
||||
// @ts-ignore
|
||||
mockKeys.get.mockRejectedValue(new Error('Disk read error'))
|
||||
mockKeys.get.mockRejectedValue(new Error('Disk read error'))
|
||||
|
||||
const lastActivity = await tracker.getLastActivity('5511999999999@s.whatsapp.net')
|
||||
expect(lastActivity).toBeUndefined()
|
||||
@@ -495,10 +495,10 @@ describe('SessionActivityTracker', () => {
|
||||
const tracker = makeSessionActivityTracker(mockKeys, logger, config)
|
||||
|
||||
const specialJids = [
|
||||
'5511999999999:1@s.whatsapp.net', // Device ID
|
||||
'123456789@lid', // LID
|
||||
'5511999999999:99@hosted', // Hosted device
|
||||
'123456789:5@hosted.lid' // Hosted LID
|
||||
'5511999999999:1@s.whatsapp.net', // Device ID
|
||||
'123456789@lid', // LID
|
||||
'5511999999999:99@hosted', // Hosted device
|
||||
'123456789:5@hosted.lid' // Hosted LID
|
||||
]
|
||||
|
||||
specialJids.forEach(jid => tracker.recordActivity(jid))
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { jest } from '@jest/globals'
|
||||
import P from 'pino'
|
||||
import { makeSessionCleanup } from '../../Signal/session-cleanup'
|
||||
import type { SessionActivityTracker } from '../../Signal/session-activity-tracker'
|
||||
import type { LIDMappingStore } from '../../Signal/lid-mapping'
|
||||
import type { SessionActivityTracker } from '../../Signal/session-activity-tracker'
|
||||
import { makeSessionCleanup } from '../../Signal/session-cleanup'
|
||||
import type { SignalKeyStoreWithTransaction } from '../../Types'
|
||||
|
||||
const mockKeys: jest.Mocked<SignalKeyStoreWithTransaction> = {
|
||||
@@ -44,7 +44,7 @@ describe('SessionCleanup', () => {
|
||||
|
||||
it('should delete LID orphan after 24h of inactivity', async () => {
|
||||
const now = Date.now()
|
||||
const lastActivity = now - (25 * HOUR_MS) // 25 hours ago
|
||||
const lastActivity = now - 25 * HOUR_MS // 25 hours ago
|
||||
|
||||
// Mock sessions: 1 LID orphan
|
||||
// @ts-ignore
|
||||
@@ -56,17 +56,9 @@ describe('SessionCleanup', () => {
|
||||
mockLidMapping.getPNForLID.mockResolvedValue(null)
|
||||
|
||||
// Mock: Activity 25h ago
|
||||
mockActivityTracker.getAllActivities.mockResolvedValue(
|
||||
new Map([['123456789@lid', lastActivity]])
|
||||
)
|
||||
mockActivityTracker.getAllActivities.mockResolvedValue(new Map([['123456789@lid', lastActivity]]))
|
||||
|
||||
const cleanup = makeSessionCleanup(
|
||||
mockKeys,
|
||||
mockLidMapping as any,
|
||||
mockActivityTracker as any,
|
||||
logger,
|
||||
config
|
||||
)
|
||||
const cleanup = makeSessionCleanup(mockKeys, mockLidMapping as any, mockActivityTracker as any, logger, config)
|
||||
|
||||
const stats = await cleanup.runCleanup()
|
||||
|
||||
@@ -79,7 +71,7 @@ describe('SessionCleanup', () => {
|
||||
|
||||
it('should NOT delete LID orphan before 24h', async () => {
|
||||
const now = Date.now()
|
||||
const lastActivity = now - (23 * HOUR_MS) // 23 hours ago
|
||||
const lastActivity = now - 23 * HOUR_MS // 23 hours ago
|
||||
|
||||
// @ts-ignore
|
||||
mockKeys.get.mockResolvedValue({
|
||||
@@ -88,17 +80,9 @@ describe('SessionCleanup', () => {
|
||||
|
||||
mockLidMapping.getPNForLID.mockResolvedValue(null)
|
||||
|
||||
mockActivityTracker.getAllActivities.mockResolvedValue(
|
||||
new Map([['123456789@lid', lastActivity]])
|
||||
)
|
||||
mockActivityTracker.getAllActivities.mockResolvedValue(new Map([['123456789@lid', lastActivity]]))
|
||||
|
||||
const cleanup = makeSessionCleanup(
|
||||
mockKeys,
|
||||
mockLidMapping as any,
|
||||
mockActivityTracker as any,
|
||||
logger,
|
||||
config
|
||||
)
|
||||
const cleanup = makeSessionCleanup(mockKeys, mockLidMapping as any, mockActivityTracker as any, logger, config)
|
||||
|
||||
const stats = await cleanup.runCleanup()
|
||||
|
||||
@@ -118,13 +102,7 @@ describe('SessionCleanup', () => {
|
||||
// No activity tracked
|
||||
mockActivityTracker.getAllActivities.mockResolvedValue(new Map())
|
||||
|
||||
const cleanup = makeSessionCleanup(
|
||||
mockKeys,
|
||||
mockLidMapping as any,
|
||||
mockActivityTracker as any,
|
||||
logger,
|
||||
config
|
||||
)
|
||||
const cleanup = makeSessionCleanup(mockKeys, mockLidMapping as any, mockActivityTracker as any, logger, config)
|
||||
|
||||
const stats = await cleanup.runCleanup()
|
||||
|
||||
@@ -134,7 +112,7 @@ describe('SessionCleanup', () => {
|
||||
|
||||
it('should NOT delete LID with valid PN mapping', async () => {
|
||||
const now = Date.now()
|
||||
const lastActivity = now - (25 * HOUR_MS)
|
||||
const lastActivity = now - 25 * HOUR_MS
|
||||
|
||||
// @ts-ignore
|
||||
mockKeys.get.mockResolvedValue({
|
||||
@@ -144,17 +122,9 @@ describe('SessionCleanup', () => {
|
||||
// Has PN mapping - not orphan
|
||||
mockLidMapping.getPNForLID.mockResolvedValue('5511999999999@s.whatsapp.net')
|
||||
|
||||
mockActivityTracker.getAllActivities.mockResolvedValue(
|
||||
new Map([['123456789@lid', lastActivity]])
|
||||
)
|
||||
mockActivityTracker.getAllActivities.mockResolvedValue(new Map([['123456789@lid', lastActivity]]))
|
||||
|
||||
const cleanup = makeSessionCleanup(
|
||||
mockKeys,
|
||||
mockLidMapping as any,
|
||||
mockActivityTracker as any,
|
||||
logger,
|
||||
config
|
||||
)
|
||||
const cleanup = makeSessionCleanup(mockKeys, mockLidMapping as any, mockActivityTracker as any, logger, config)
|
||||
|
||||
const stats = await cleanup.runCleanup()
|
||||
|
||||
@@ -177,7 +147,7 @@ describe('SessionCleanup', () => {
|
||||
|
||||
it('should delete secondary device (Web/Desktop) after 15 days', async () => {
|
||||
const now = Date.now()
|
||||
const lastActivity = now - (16 * DAY_MS) // 16 days ago
|
||||
const lastActivity = now - 16 * DAY_MS // 16 days ago
|
||||
|
||||
// Mock: Secondary device (device ID = 1)
|
||||
// @ts-ignore
|
||||
@@ -189,13 +159,7 @@ describe('SessionCleanup', () => {
|
||||
new Map([['5511999999999:1@s.whatsapp.net', lastActivity]])
|
||||
)
|
||||
|
||||
const cleanup = makeSessionCleanup(
|
||||
mockKeys,
|
||||
mockLidMapping as any,
|
||||
mockActivityTracker as any,
|
||||
logger,
|
||||
config
|
||||
)
|
||||
const cleanup = makeSessionCleanup(mockKeys, mockLidMapping as any, mockActivityTracker as any, logger, config)
|
||||
|
||||
const stats = await cleanup.runCleanup()
|
||||
|
||||
@@ -205,7 +169,7 @@ describe('SessionCleanup', () => {
|
||||
|
||||
it('should NOT delete secondary device before 15 days', async () => {
|
||||
const now = Date.now()
|
||||
const lastActivity = now - (14 * DAY_MS) // 14 days ago
|
||||
const lastActivity = now - 14 * DAY_MS // 14 days ago
|
||||
|
||||
// @ts-ignore
|
||||
mockKeys.get.mockResolvedValue({
|
||||
@@ -216,13 +180,7 @@ describe('SessionCleanup', () => {
|
||||
new Map([['5511999999999:1@s.whatsapp.net', lastActivity]])
|
||||
)
|
||||
|
||||
const cleanup = makeSessionCleanup(
|
||||
mockKeys,
|
||||
mockLidMapping as any,
|
||||
mockActivityTracker as any,
|
||||
logger,
|
||||
config
|
||||
)
|
||||
const cleanup = makeSessionCleanup(mockKeys, mockLidMapping as any, mockActivityTracker as any, logger, config)
|
||||
|
||||
const stats = await cleanup.runCleanup()
|
||||
|
||||
@@ -239,13 +197,7 @@ describe('SessionCleanup', () => {
|
||||
// No activity tracked - grace period
|
||||
mockActivityTracker.getAllActivities.mockResolvedValue(new Map())
|
||||
|
||||
const cleanup = makeSessionCleanup(
|
||||
mockKeys,
|
||||
mockLidMapping as any,
|
||||
mockActivityTracker as any,
|
||||
logger,
|
||||
config
|
||||
)
|
||||
const cleanup = makeSessionCleanup(mockKeys, mockLidMapping as any, mockActivityTracker as any, logger, config)
|
||||
|
||||
const stats = await cleanup.runCleanup()
|
||||
|
||||
@@ -268,7 +220,7 @@ describe('SessionCleanup', () => {
|
||||
|
||||
it('should delete primary device after 30 days', async () => {
|
||||
const now = Date.now()
|
||||
const lastActivity = now - (31 * DAY_MS) // 31 days ago
|
||||
const lastActivity = now - 31 * DAY_MS // 31 days ago
|
||||
|
||||
// Mock: Primary device (device ID = 0)
|
||||
// @ts-ignore
|
||||
@@ -276,17 +228,9 @@ describe('SessionCleanup', () => {
|
||||
'5511999999999_0.0': Buffer.from('session-data')
|
||||
})
|
||||
|
||||
mockActivityTracker.getAllActivities.mockResolvedValue(
|
||||
new Map([['5511999999999@s.whatsapp.net', lastActivity]])
|
||||
)
|
||||
mockActivityTracker.getAllActivities.mockResolvedValue(new Map([['5511999999999@s.whatsapp.net', lastActivity]]))
|
||||
|
||||
const cleanup = makeSessionCleanup(
|
||||
mockKeys,
|
||||
mockLidMapping as any,
|
||||
mockActivityTracker as any,
|
||||
logger,
|
||||
config
|
||||
)
|
||||
const cleanup = makeSessionCleanup(mockKeys, mockLidMapping as any, mockActivityTracker as any, logger, config)
|
||||
|
||||
const stats = await cleanup.runCleanup()
|
||||
|
||||
@@ -296,24 +240,16 @@ describe('SessionCleanup', () => {
|
||||
|
||||
it('should NOT delete primary device before 30 days', async () => {
|
||||
const now = Date.now()
|
||||
const lastActivity = now - (29 * DAY_MS) // 29 days ago
|
||||
const lastActivity = now - 29 * DAY_MS // 29 days ago
|
||||
|
||||
// @ts-ignore
|
||||
mockKeys.get.mockResolvedValue({
|
||||
'5511999999999_0.0': Buffer.from('session-data')
|
||||
})
|
||||
|
||||
mockActivityTracker.getAllActivities.mockResolvedValue(
|
||||
new Map([['5511999999999@s.whatsapp.net', lastActivity]])
|
||||
)
|
||||
mockActivityTracker.getAllActivities.mockResolvedValue(new Map([['5511999999999@s.whatsapp.net', lastActivity]]))
|
||||
|
||||
const cleanup = makeSessionCleanup(
|
||||
mockKeys,
|
||||
mockLidMapping as any,
|
||||
mockActivityTracker as any,
|
||||
logger,
|
||||
config
|
||||
)
|
||||
const cleanup = makeSessionCleanup(mockKeys, mockLidMapping as any, mockActivityTracker as any, logger, config)
|
||||
|
||||
const stats = await cleanup.runCleanup()
|
||||
|
||||
@@ -336,7 +272,7 @@ describe('SessionCleanup', () => {
|
||||
|
||||
it('should handle exactly 24h for LID orphan (boundary)', async () => {
|
||||
const now = Date.now()
|
||||
const lastActivity = now - (24 * HOUR_MS) // Exactly 24h
|
||||
const lastActivity = now - 24 * HOUR_MS // Exactly 24h
|
||||
|
||||
// @ts-ignore
|
||||
mockKeys.get.mockResolvedValue({
|
||||
@@ -345,17 +281,9 @@ describe('SessionCleanup', () => {
|
||||
|
||||
mockLidMapping.getPNForLID.mockResolvedValue(null)
|
||||
|
||||
mockActivityTracker.getAllActivities.mockResolvedValue(
|
||||
new Map([['123456789@lid', lastActivity]])
|
||||
)
|
||||
mockActivityTracker.getAllActivities.mockResolvedValue(new Map([['123456789@lid', lastActivity]]))
|
||||
|
||||
const cleanup = makeSessionCleanup(
|
||||
mockKeys,
|
||||
mockLidMapping as any,
|
||||
mockActivityTracker as any,
|
||||
logger,
|
||||
config
|
||||
)
|
||||
const cleanup = makeSessionCleanup(mockKeys, mockLidMapping as any, mockActivityTracker as any, logger, config)
|
||||
|
||||
const stats = await cleanup.runCleanup()
|
||||
|
||||
@@ -367,13 +295,7 @@ describe('SessionCleanup', () => {
|
||||
// @ts-ignore
|
||||
mockKeys.get.mockResolvedValue({})
|
||||
|
||||
const cleanup = makeSessionCleanup(
|
||||
mockKeys,
|
||||
mockLidMapping as any,
|
||||
mockActivityTracker as any,
|
||||
logger,
|
||||
config
|
||||
)
|
||||
const cleanup = makeSessionCleanup(mockKeys, mockLidMapping as any, mockActivityTracker as any, logger, config)
|
||||
|
||||
const stats = await cleanup.runCleanup()
|
||||
|
||||
@@ -392,13 +314,7 @@ describe('SessionCleanup', () => {
|
||||
mockLidMapping.getPNForLID.mockResolvedValue(null)
|
||||
|
||||
// Pass null tracker
|
||||
const cleanup = makeSessionCleanup(
|
||||
mockKeys,
|
||||
mockLidMapping as any,
|
||||
null,
|
||||
logger,
|
||||
config
|
||||
)
|
||||
const cleanup = makeSessionCleanup(mockKeys, mockLidMapping as any, null, logger, config)
|
||||
|
||||
const stats = await cleanup.runCleanup()
|
||||
|
||||
@@ -439,20 +355,14 @@ describe('SessionCleanup', () => {
|
||||
|
||||
mockActivityTracker.getAllActivities.mockResolvedValue(
|
||||
new Map([
|
||||
['123456789@lid', now - (25 * HOUR_MS)], // LID orphan: 25h ago
|
||||
['5511999999999:1@s.whatsapp.net', now - (16 * DAY_MS)], // Secondary: 16 days ago
|
||||
['5511888888888@s.whatsapp.net', now - (31 * DAY_MS)], // Primary: 31 days ago
|
||||
['5511777777777@s.whatsapp.net', now - (5 * DAY_MS)] // Primary: 5 days ago (active)
|
||||
['123456789@lid', now - 25 * HOUR_MS], // LID orphan: 25h ago
|
||||
['5511999999999:1@s.whatsapp.net', now - 16 * DAY_MS], // Secondary: 16 days ago
|
||||
['5511888888888@s.whatsapp.net', now - 31 * DAY_MS], // Primary: 31 days ago
|
||||
['5511777777777@s.whatsapp.net', now - 5 * DAY_MS] // Primary: 5 days ago (active)
|
||||
])
|
||||
)
|
||||
|
||||
const cleanup = makeSessionCleanup(
|
||||
mockKeys,
|
||||
mockLidMapping as any,
|
||||
mockActivityTracker as any,
|
||||
logger,
|
||||
config
|
||||
)
|
||||
const cleanup = makeSessionCleanup(mockKeys, mockLidMapping as any, mockActivityTracker as any, logger, config)
|
||||
|
||||
const stats = await cleanup.runCleanup()
|
||||
|
||||
@@ -482,13 +392,7 @@ describe('SessionCleanup', () => {
|
||||
'123456789_2.0': Buffer.from('session-data')
|
||||
})
|
||||
|
||||
const cleanup = makeSessionCleanup(
|
||||
mockKeys,
|
||||
mockLidMapping as any,
|
||||
mockActivityTracker as any,
|
||||
logger,
|
||||
config
|
||||
)
|
||||
const cleanup = makeSessionCleanup(mockKeys, mockLidMapping as any, mockActivityTracker as any, logger, config)
|
||||
|
||||
const stats = await cleanup.runCleanup()
|
||||
|
||||
@@ -520,8 +424,8 @@ describe('SessionCleanup', () => {
|
||||
|
||||
mockActivityTracker.getAllActivities.mockResolvedValue(
|
||||
new Map([
|
||||
['123456789@lid', now - (13 * HOUR_MS)], // 13h ago
|
||||
['5511999999999:1@s.whatsapp.net', now - (6 * DAY_MS)] // 6 days ago
|
||||
['123456789@lid', now - 13 * HOUR_MS], // 13h ago
|
||||
['5511999999999:1@s.whatsapp.net', now - 6 * DAY_MS] // 6 days ago
|
||||
])
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user