function sleep(ms) { return new Promise((resolve) => setTimeout(resolve, ms)) } function epochToDate(timestamp) { const pad = (n, s = 2) => `${new Array(s).fill(0)}${n}`.slice(-s) const date = new Date(parseInt((timestamp + "000").slice(0, 13))) return `${pad(date.getDate())}/${pad(date.getMonth() + 1)}/${pad(date.getFullYear(), 4)}` } function isObject(object) { return typeof object === "object" } function isObjectEmpty(object) { return Object.keys(object).length == 0 } function areObjectsEqual(obj1, obj2) { if (!isObject(obj1) || !isObject(obj2)) return false let props1 = Object.getOwnPropertyNames(obj1) let props2 = Object.getOwnPropertyNames(obj2) if (props1.length != props2.length) return false for (let i = 0; i < props1.length; i++) { let val1 = obj1[props1[i]] let val2 = obj2[props1[i]] let isObjects = isObject(val1) && isObject(val2) if ((isObjects && !areObjectsEqual(val1, val2)) || (!isObjects && val1 !== val2)) return false } return true } function areArraysEqual(arr1, arr2) { return JSON.stringify(arr1) == JSON.stringify(arr2) }