From 30982cc659153f90affecef8ccba508c6c7037e0 Mon Sep 17 00:00:00 2001 From: Nick Adamson Date: Wed, 15 Nov 2023 13:13:26 -0800 Subject: [PATCH 1/6] test: update test case now that access pass check is gone --- src/entities/trader/trader.test.ts | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/entities/trader/trader.test.ts b/src/entities/trader/trader.test.ts index bbfc3b35..28d5ca76 100644 --- a/src/entities/trader/trader.test.ts +++ b/src/entities/trader/trader.test.ts @@ -13,8 +13,7 @@ const authClient = createPromiseClient(Auth, transport); const rfqClient = createPromiseClient(RFQ, transport); describe('Trader Class', () => { - it('Should fail to sign in due to access pass', async () => { - const logSpy = vi.spyOn(console, 'log'); + it('Should successfully sign in', async () => { const errorSpy = vi.spyOn(console, 'error'); const account = privateKeyToAccount(PRIVATE_KEY); @@ -28,11 +27,7 @@ describe('Trader Class', () => { }); await trader.signIn(); - expect(trader.authenticated).toBeFalsy(); - - expect(logSpy).toHaveBeenCalledWith('SIWE Verification failed.'); - expect(errorSpy).toHaveBeenCalledWith( - '\nGRPC Error: [unknown] [unauthenticated] Access denied: No Access Pass Found. "Address 0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266 does not hold access pass"\nCode: 2\n', - ); + expect(trader.authenticated).toBeTruthy(); + expect(errorSpy).not.toHaveBeenCalled(); }); }); From a87704891b1fa836911a607a6bba842be5c19206 Mon Sep 17 00:00:00 2001 From: Nick Adamson Date: Wed, 15 Nov 2023 13:14:10 -0800 Subject: [PATCH 2/6] fix: unixTimestamp bug where it could return a float --- src/utils/timestamps.ts | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/utils/timestamps.ts b/src/utils/timestamps.ts index 3e735c25..acd45011 100644 --- a/src/utils/timestamps.ts +++ b/src/utils/timestamps.ts @@ -1,5 +1,11 @@ import { ONE_DAY_UNIX } from '../constants'; +/** + * Convert the UTC date to a unix timestamp, + * Casts to integer (via Math.floor) for conversion to BigInts + */ +export const toUnix = (date: Date) => Math.floor(date.getTime() / 1000); + /** * By aligning to 8AM UTC, we limit fragmentation of liquidity * @@ -7,11 +13,10 @@ import { ONE_DAY_UNIX } from '../constants'; * @returns The adjusted 8 AM UTC date. */ export function get8AMUTCDate(date: Date) { - const today = new Date(); - // Convert tomorrow's date to its UTC equivalent. This is achieved by adjusting + // Convert the date to its UTC equivalent. This is achieved by adjusting // the local date with the timezone offset in milliseconds. - const tzOffsetMS = today.getTimezoneOffset() * 60000; - const utcDateMilliseconds = today.getTime() + tzOffsetMS; + const tzOffsetMS = date.getTimezoneOffset() * 60000; + const utcDateMilliseconds = date.getTime() + tzOffsetMS; // Create a new Date object from the UTC milliseconds. const utcDate = new Date(utcDateMilliseconds); @@ -23,16 +28,17 @@ export function get8AMUTCDate(date: Date) { // the 8AM date. Otherwise, return 8AM of the following day. This ensures that // we're always returning a future date relative to the original input. if (date.getTime() >= utcDate.getTime()) { - return (utcDate.getTime() + ONE_DAY_UNIX) / 1000; // Convert the UTC date to a unix timestamp + utcDate.setDate(utcDate.getDate() + 1); // Add a day to the UTC date } - return utcDate.getTime() / 1000; // Convert the UTC date to a unix timestamp + + return toUnix(utcDate); } -export function get24HrTimestamps(): { +export function get24HrTimestamps(date?: Date): { exerciseTimestamp: number; expiryTimestamp: number; } { - const exerciseTimestamp = get8AMUTCDate(new Date()); + const exerciseTimestamp = get8AMUTCDate(date ?? new Date()); const expiryTimestamp = exerciseTimestamp + ONE_DAY_UNIX; // expires in 1 day return { exerciseTimestamp, expiryTimestamp }; From b904a168019ac759c27c2eab88918264ef96d228 Mon Sep 17 00:00:00 2001 From: Nick Adamson Date: Wed, 15 Nov 2023 13:14:21 -0800 Subject: [PATCH 3/6] test: add test cases for timestamps --- src/utils/timestamps.test.ts | 46 ++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/utils/timestamps.test.ts diff --git a/src/utils/timestamps.test.ts b/src/utils/timestamps.test.ts new file mode 100644 index 00000000..1598f71f --- /dev/null +++ b/src/utils/timestamps.test.ts @@ -0,0 +1,46 @@ +import { describe, expect, it } from 'vitest'; +import { get24HrTimestamps, get8AMUTCDate, toUnix } from './timestamps'; + +describe('Timestamps', () => { + describe('toUnix', () => { + it('Should convert a date to a unix timestamp that is an integer', () => { + const problematicMillisecondTimestamp = 1700081643333; + const expectedUnixConversion = 1700081643; + const badUnixConversion = problematicMillisecondTimestamp / 1000; + expect(badUnixConversion).not.toEqual(expectedUnixConversion); + expect(toUnix(new Date(problematicMillisecondTimestamp))).toEqual( + expectedUnixConversion, + ); + }); + }); + + describe('get8AMUTCDate', () => { + it('Should return a date that is 8AM UTC', () => { + const testTimestamp = Date.UTC(2023, 12, 31, 0, 0, 0, 333); // 2023-12-31T00:00:00.333Z + const expectedTimestamp = Date.UTC(2023, 12, 31, 8, 0, 0, 0); // 2023-12-31T08:00:00.000Z + expect(get8AMUTCDate(new Date(testTimestamp))).toEqual( + toUnix(new Date(expectedTimestamp)), + ); + }); + + it('Should return the next day if UTC date is before the passed date', () => { + const testTimestamp = Date.UTC(2023, 12, 31, 9, 0, 0, 333); // 2023-12-31T09:00:00.333Z + const expectedTimestamp = Date.UTC(2024, 1, 1, 8, 0, 0, 0); // 2024-1-1T08:00:00.000Z + expect(get8AMUTCDate(new Date(testTimestamp))).toEqual( + toUnix(new Date(expectedTimestamp)), + ); + }); + }); + + describe('get24HrTimestamps', () => { + it('Should return two timestamps that are 24 hours apart', () => { + const testTimestamp = Date.UTC(2023, 12, 31, 9, 0, 0, 333); // 2023-12-31T09:00:00.333Z + const { exerciseTimestamp, expiryTimestamp } = get24HrTimestamps( + new Date(testTimestamp), + ); + expect(expiryTimestamp - exerciseTimestamp).toEqual(86400); + expect(exerciseTimestamp * 1000).toEqual(Date.UTC(2024, 1, 1, 8)); + expect(expiryTimestamp * 1000).toEqual(Date.UTC(2024, 1, 2, 8)); + }); + }); +}); From 97f3e01c79a4f02dc8e4f03099ff111e7b1dda5b Mon Sep 17 00:00:00 2001 From: Nick Adamson Date: Wed, 15 Nov 2023 13:42:11 -0800 Subject: [PATCH 4/6] chore: bump dependencies and bump pkg version --- package.json | 28 ++-- pnpm-lock.yaml | 406 ++++++++++++++++++++++++------------------------- 2 files changed, 217 insertions(+), 217 deletions(-) diff --git a/package.json b/package.json index 46e1363e..6df5ffef 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@valorem-labs-inc/sdk", - "version": "0.0.2-alpha.0", + "version": "0.0.2-alpha.1", "repository": { "type": "git", "url": "https://github.com/valorem-labs-inc/typescript-sdk.git" @@ -38,27 +38,27 @@ }, "prettier": "@vercel/style-guide/prettier", "dependencies": { - "@bufbuild/buf": "^1.27.0", - "@bufbuild/protobuf": "^1.4.0", - "@connectrpc/connect": "^1.1.2", + "@bufbuild/buf": "^1.28.1", + "@bufbuild/protobuf": "^1.4.2", + "@connectrpc/connect": "^1.1.3", "@wagmi/core": "^1.4.4" }, "devDependencies": { - "@bufbuild/protoc-gen-es": "^1.4.0", - "@connectrpc/connect-node": "^1.1.2", - "@connectrpc/connect-web": "^1.1.2", - "@connectrpc/protoc-gen-connect-es": "^1.1.2", - "@types/node": "^20.8.7", - "@vercel/style-guide": "^5.0.1", + "@bufbuild/protoc-gen-es": "^1.4.2", + "@connectrpc/connect-node": "^1.1.3", + "@connectrpc/connect-web": "^1.1.3", + "@connectrpc/protoc-gen-connect-es": "^1.1.3", + "@types/node": "^20.9.0", + "@vercel/style-guide": "^5.1.0", "@vitest/coverage-v8": "^0.34.6", - "eslint": "^8.51.0", - "prettier": "^3.0.3", + "eslint": "^8.53.0", + "prettier": "^3.1.0", "ts-node": "^10.9.1", "tsup": "^7.2.0", - "typedoc": "^0.25.2", + "typedoc": "^0.25.3", "typedoc-plugin-missing-exports": "^2.1.0", "typescript": "^5.2.2", - "viem": "^1.16.5", + "viem": "^1.19.1", "vitest": "^0.34.6" }, "peerDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7aeb924f..4a762498 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,64 +6,64 @@ settings: dependencies: '@bufbuild/buf': - specifier: ^1.27.0 - version: 1.27.1 + specifier: ^1.28.1 + version: 1.28.1 '@bufbuild/protobuf': - specifier: ^1.4.0 - version: 1.4.0 + specifier: ^1.4.2 + version: 1.4.2 '@connectrpc/connect': - specifier: ^1.1.2 - version: 1.1.2(@bufbuild/protobuf@1.4.0) + specifier: ^1.1.3 + version: 1.1.3(@bufbuild/protobuf@1.4.2) '@wagmi/core': specifier: ^1.4.4 - version: 1.4.5(react@18.2.0)(typescript@5.2.2)(viem@1.16.6) + version: 1.4.5(react@18.2.0)(typescript@5.2.2)(viem@1.19.1) devDependencies: '@bufbuild/protoc-gen-es': - specifier: ^1.4.0 - version: 1.4.0(@bufbuild/protobuf@1.4.0) + specifier: ^1.4.2 + version: 1.4.2(@bufbuild/protobuf@1.4.2) '@connectrpc/connect-node': - specifier: ^1.1.2 - version: 1.1.2(@bufbuild/protobuf@1.4.0)(@connectrpc/connect@1.1.2) + specifier: ^1.1.3 + version: 1.1.3(@bufbuild/protobuf@1.4.2)(@connectrpc/connect@1.1.3) '@connectrpc/connect-web': - specifier: ^1.1.2 - version: 1.1.2(@bufbuild/protobuf@1.4.0)(@connectrpc/connect@1.1.2) + specifier: ^1.1.3 + version: 1.1.3(@bufbuild/protobuf@1.4.2)(@connectrpc/connect@1.1.3) '@connectrpc/protoc-gen-connect-es': - specifier: ^1.1.2 - version: 1.1.2(@bufbuild/protoc-gen-es@1.4.0)(@connectrpc/connect@1.1.2) + specifier: ^1.1.3 + version: 1.1.3(@bufbuild/protoc-gen-es@1.4.2)(@connectrpc/connect@1.1.3) '@types/node': - specifier: ^20.8.7 - version: 20.8.8 + specifier: ^20.9.0 + version: 20.9.0 '@vercel/style-guide': - specifier: ^5.0.1 - version: 5.0.1(eslint@8.52.0)(prettier@3.0.3)(typescript@5.2.2) + specifier: ^5.1.0 + version: 5.1.0(eslint@8.53.0)(prettier@3.1.0)(typescript@5.2.2) '@vitest/coverage-v8': specifier: ^0.34.6 version: 0.34.6(vitest@0.34.6) eslint: - specifier: ^8.51.0 - version: 8.52.0 + specifier: ^8.53.0 + version: 8.53.0 prettier: - specifier: ^3.0.3 - version: 3.0.3 + specifier: ^3.1.0 + version: 3.1.0 ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@20.8.8)(typescript@5.2.2) + version: 10.9.1(@types/node@20.9.0)(typescript@5.2.2) tsup: specifier: ^7.2.0 version: 7.2.0(ts-node@10.9.1)(typescript@5.2.2) typedoc: - specifier: ^0.25.2 - version: 0.25.2(typescript@5.2.2) + specifier: ^0.25.3 + version: 0.25.3(typescript@5.2.2) typedoc-plugin-missing-exports: specifier: ^2.1.0 - version: 2.1.0(typedoc@0.25.2) + version: 2.1.0(typedoc@0.25.3) typescript: specifier: ^5.2.2 version: 5.2.2 viem: - specifier: ^1.16.5 - version: 1.16.6(typescript@5.2.2) + specifier: ^1.19.1 + version: 1.19.1(typescript@5.2.2) vitest: specifier: ^0.34.6 version: 0.34.6 @@ -122,7 +122,7 @@ packages: - supports-color dev: true - /@babel/eslint-parser@7.22.15(@babel/core@7.23.2)(eslint@8.52.0): + /@babel/eslint-parser@7.22.15(@babel/core@7.23.2)(eslint@8.53.0): resolution: {integrity: sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: @@ -131,7 +131,7 @@ packages: dependencies: '@babel/core': 7.23.2 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.52.0 + eslint: 8.53.0 eslint-visitor-keys: 2.1.0 semver: 6.3.1 dev: true @@ -301,8 +301,8 @@ packages: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true - /@bufbuild/buf-darwin-arm64@1.27.1: - resolution: {integrity: sha512-TpaRqvhcR0AgwoG93L3jv8oZtV0YHZx8j2Oj/CqHwqK910VZ2hF6JBy9FSIYqrzOj4JbHnBb6CENlDHUR5WJPw==} + /@bufbuild/buf-darwin-arm64@1.28.1: + resolution: {integrity: sha512-nAyvwKkcd8qQTExCZo5MtSRhXLK7e3vzKFKHjXfkveRakSUST2HFlFZAHfErZimN4wBrPTN0V0hNRU8PPjkMpQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -310,8 +310,8 @@ packages: dev: false optional: true - /@bufbuild/buf-darwin-x64@1.27.1: - resolution: {integrity: sha512-aQAVHm53B2PlzMO4sAlXspsGvCl0IGGSG9xRdDa2uEvvvYlSwZeYCJZSy9l5T1W35rz1AN6Y/u9sV+ylHcmi2A==} + /@bufbuild/buf-darwin-x64@1.28.1: + resolution: {integrity: sha512-b0eT3xd3vX5a5lWAbo5h7FPuf9MsOJI4I39qs4TZnrlZ8BOuPfqzwzijiFf9UCwaX2vR1NQXexIoQ80Ci+fCHw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -319,8 +319,8 @@ packages: dev: false optional: true - /@bufbuild/buf-linux-aarch64@1.27.1: - resolution: {integrity: sha512-p4hX0VasF8Yd4+yAkiV5uUTaleEMWdnzDFWmBxwSjpORAXqp/By1JPH8flr2tPRGN+uIGbtXl3T2sOEsqS2gfA==} + /@bufbuild/buf-linux-aarch64@1.28.1: + resolution: {integrity: sha512-p5h9bZCVLMh8No9/7k7ulXzsFx5P7Lu6DiUMjSJ6aBXPMYo6Xl7r/6L2cQkpsZ53HMtIxCgMYS9a7zoS4K8wIw==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -328,8 +328,8 @@ packages: dev: false optional: true - /@bufbuild/buf-linux-x64@1.27.1: - resolution: {integrity: sha512-NizPSsd/Q9pfOnR9yEDKIwyYCpG1uRWixJSdraAuO6NfyiPwjZ8+F0shIWfLNptANqM7GPBC7HNc5wX380OHCA==} + /@bufbuild/buf-linux-x64@1.28.1: + resolution: {integrity: sha512-fVJ3DiRigIso06jgEl+JNp59Y5t2pxDHd10d3SA4r+14sXbZ2J7Gy/wBqVXPry4x/jW567KKlvmhg7M5ZBgCQQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -337,8 +337,8 @@ packages: dev: false optional: true - /@bufbuild/buf-win32-arm64@1.27.1: - resolution: {integrity: sha512-WoH2cF8cQ7e2qeeoQDuvmfzW13n3blo0LdX59BFU+zUehKYBfEy7fcmuF8NmAOKhgzOXCh7mimukXpRE7kfyYw==} + /@bufbuild/buf-win32-arm64@1.28.1: + resolution: {integrity: sha512-KJiRJpugQRK/jXC46Xjlb68UydWhCZj2jHdWLIwNtgXd1WTJ3LngChZV7Y6pPK08pwBAVz0JYeVbD5IlTCD4TQ==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -346,8 +346,8 @@ packages: dev: false optional: true - /@bufbuild/buf-win32-x64@1.27.1: - resolution: {integrity: sha512-x3x7l+hfT71sf8bwxKME7NXPBNT+R8gObFpcEaTk6xTGPfOlbX8Y4M9C4kX2cH0oSFgkafIe+TUReCYrP3cGvA==} + /@bufbuild/buf-win32-x64@1.28.1: + resolution: {integrity: sha512-vMnc+7OVCkmlRWQsgYHgUqiBPRIjD8XeoRyApJ07YZzGs7DkRH4LhvmacJbLd3wORylbn6gLz3pQa8J/M61mzg==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -355,57 +355,57 @@ packages: dev: false optional: true - /@bufbuild/buf@1.27.1: - resolution: {integrity: sha512-PtMIFojz77V5BYmC4OR+y6IqsI3jc1b2qysPJ7vaR1jx5K94C9prGvtWEJeEI06xaffVD97VsTt0VR6gTNk+HA==} + /@bufbuild/buf@1.28.1: + resolution: {integrity: sha512-WRDagrf0uBjfV9s5eyrSPJDcdI4A5Q7JMCA4aMrHRR8fo/TTjniDBjJprszhaguqsDkn/LS4QIu92HVFZCrl9A==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@bufbuild/buf-darwin-arm64': 1.27.1 - '@bufbuild/buf-darwin-x64': 1.27.1 - '@bufbuild/buf-linux-aarch64': 1.27.1 - '@bufbuild/buf-linux-x64': 1.27.1 - '@bufbuild/buf-win32-arm64': 1.27.1 - '@bufbuild/buf-win32-x64': 1.27.1 + '@bufbuild/buf-darwin-arm64': 1.28.1 + '@bufbuild/buf-darwin-x64': 1.28.1 + '@bufbuild/buf-linux-aarch64': 1.28.1 + '@bufbuild/buf-linux-x64': 1.28.1 + '@bufbuild/buf-win32-arm64': 1.28.1 + '@bufbuild/buf-win32-x64': 1.28.1 dev: false - /@bufbuild/protobuf@1.3.3: - resolution: {integrity: sha512-AoHSiIpTFF97SQgmQni4c+Tyr0CDhkaRaR2qGEJTEbauqQwLRpLrd9yVv//wVHOSxr/b4FJcL54VchhY6710xA==} - dev: true - /@bufbuild/protobuf@1.4.0: resolution: {integrity: sha512-urGGNsMG8YIyuhsjLFkx41CkAILFnUz9vHaUWvzOnzeoS2DykhSkUEpqTbf9cxG0Vzjmk2rl5ttmLwE0rbQyow==} + dev: true - /@bufbuild/protoc-gen-es@1.4.0(@bufbuild/protobuf@1.4.0): - resolution: {integrity: sha512-U/nKkf6v39EjIp2I5i2D/MpMIyxvcpQV21C8DIuYCZJe5EMBgr5Tes3fHXWp8C72e8pEN+X9RhH/2NF+XqJivQ==} + /@bufbuild/protobuf@1.4.2: + resolution: {integrity: sha512-JyEH8Z+OD5Sc2opSg86qMHn1EM1Sa+zj/Tc0ovxdwk56ByVNONJSabuCUbLQp+eKN3rWNfrho0X+3SEqEPXIow==} + + /@bufbuild/protoc-gen-es@1.4.2(@bufbuild/protobuf@1.4.2): + resolution: {integrity: sha512-/It7M2s8H1zTDvUMJu6vhBmtnzeFL2VS6e78RYIY38602pNXDK/vbteKUo4KrG0O07lOPFu87hHZ0Y+w5Ib6iw==} engines: {node: '>=14'} hasBin: true peerDependencies: - '@bufbuild/protobuf': 1.4.0 + '@bufbuild/protobuf': 1.4.2 peerDependenciesMeta: '@bufbuild/protobuf': optional: true dependencies: - '@bufbuild/protobuf': 1.4.0 - '@bufbuild/protoplugin': 1.4.0 + '@bufbuild/protobuf': 1.4.2 + '@bufbuild/protoplugin': 1.4.2 transitivePeerDependencies: - supports-color dev: true - /@bufbuild/protoplugin@1.3.3: - resolution: {integrity: sha512-sxalYoj+fWxUakknePKfqRpcGlxz45Gcjpth2M274ZvQN+XKwMLVLevArsZWFzGcPoAkiDWMFHhfeQXfjsu+uA==} + /@bufbuild/protoplugin@1.4.0: + resolution: {integrity: sha512-TS+x4qNJOClBgnX2DTqv4miqDaXXWr1L97PX1ps6uRzNzbXzMBmlSBPmwHf45F8xfviZlXNXLEsSnYu/8rAI4w==} dependencies: - '@bufbuild/protobuf': 1.3.3 + '@bufbuild/protobuf': 1.4.0 '@typescript/vfs': 1.5.0 typescript: 4.5.2 transitivePeerDependencies: - supports-color dev: true - /@bufbuild/protoplugin@1.4.0: - resolution: {integrity: sha512-TS+x4qNJOClBgnX2DTqv4miqDaXXWr1L97PX1ps6uRzNzbXzMBmlSBPmwHf45F8xfviZlXNXLEsSnYu/8rAI4w==} + /@bufbuild/protoplugin@1.4.2: + resolution: {integrity: sha512-5IwGC1ZRD2A+KydGXeaSOErwfILLqVtvMH/RkN+cOoHcQd4EYXFStcF7g7aR+yICRDEEjQVi5tQF/qPGBSr9vg==} dependencies: - '@bufbuild/protobuf': 1.4.0 + '@bufbuild/protobuf': 1.4.2 '@typescript/vfs': 1.5.0 typescript: 4.5.2 transitivePeerDependencies: @@ -440,52 +440,52 @@ packages: - utf-8-validate dev: false - /@connectrpc/connect-node@1.1.2(@bufbuild/protobuf@1.4.0)(@connectrpc/connect@1.1.2): - resolution: {integrity: sha512-IAwQhh05Qm/T/+ZShEnQz+FFZsr2fbq/DCHhXbmwYjePxvo+kF9YIDkTpVy+vjrV+CwZPBfgOdSaRSJLHUykdg==} + /@connectrpc/connect-node@1.1.3(@bufbuild/protobuf@1.4.2)(@connectrpc/connect@1.1.3): + resolution: {integrity: sha512-oq7Uk8XlLzC2+eHaxZTX189dhujD0/tK9plizxofsFHUnLquMSmzQQ2GzvTv4u6U05eZYc/crySmf86Sqpi1bA==} engines: {node: '>=16.0.0'} peerDependencies: '@bufbuild/protobuf': ^1.3.3 - '@connectrpc/connect': 1.1.2 + '@connectrpc/connect': 1.1.3 dependencies: - '@bufbuild/protobuf': 1.4.0 - '@connectrpc/connect': 1.1.2(@bufbuild/protobuf@1.4.0) + '@bufbuild/protobuf': 1.4.2 + '@connectrpc/connect': 1.1.3(@bufbuild/protobuf@1.4.2) undici: 5.26.5 dev: true - /@connectrpc/connect-web@1.1.2(@bufbuild/protobuf@1.4.0)(@connectrpc/connect@1.1.2): - resolution: {integrity: sha512-6Osvp4d/5Qvf0dsbUmqgzCPFIong9KBm5G24g2gapPW2huAtyVj+KwdG6453EKCirPZ5qZHY0FywLef57op9YQ==} + /@connectrpc/connect-web@1.1.3(@bufbuild/protobuf@1.4.2)(@connectrpc/connect@1.1.3): + resolution: {integrity: sha512-WfShOZt91duJngqivYF4wJFRbeRa4bF/fPMfDVN0MAYSX3VuaTMn8o9qgKN7tsg2H2ZClyOVQwMkZx6IdcP7Zw==} peerDependencies: '@bufbuild/protobuf': ^1.3.3 - '@connectrpc/connect': 1.1.2 + '@connectrpc/connect': 1.1.3 dependencies: - '@bufbuild/protobuf': 1.4.0 - '@connectrpc/connect': 1.1.2(@bufbuild/protobuf@1.4.0) + '@bufbuild/protobuf': 1.4.2 + '@connectrpc/connect': 1.1.3(@bufbuild/protobuf@1.4.2) dev: true - /@connectrpc/connect@1.1.2(@bufbuild/protobuf@1.4.0): - resolution: {integrity: sha512-oDuKJFRORtzyH4IhZyNgIQ5DKjlDnbP72AH55Aabpc0fwApyus/h4cmYU1KDvahVbqsvUOpd5qUTyMH8IhMmLA==} + /@connectrpc/connect@1.1.3(@bufbuild/protobuf@1.4.2): + resolution: {integrity: sha512-AXkbsLQe2Nm7VuoN5nqp05GEb9mPa/f5oFzDqTbHME4i8TghTrlY03uefbhuAq4wjsnfDnmuxHZvn6ndlgXmbg==} peerDependencies: '@bufbuild/protobuf': ^1.3.3 dependencies: - '@bufbuild/protobuf': 1.4.0 + '@bufbuild/protobuf': 1.4.2 - /@connectrpc/protoc-gen-connect-es@1.1.2(@bufbuild/protoc-gen-es@1.4.0)(@connectrpc/connect@1.1.2): - resolution: {integrity: sha512-TvA6Z4EOtZRXi0QbPcRUgM8RHQueIy83TmWq80WdfxZ+Yy5NLT4HVYBRWo0/x+HmPCVoT0FJeLI0iHV6C9UiDQ==} + /@connectrpc/protoc-gen-connect-es@1.1.3(@bufbuild/protoc-gen-es@1.4.2)(@connectrpc/connect@1.1.3): + resolution: {integrity: sha512-Irt1WM1o45KL0DNz8D8nraNfRrOyZfn7rzRsOyfrwbNzeVO1JV3rELFpARqGAvtVveYBoO9uwYtQ8TKLXsnrng==} engines: {node: '>=16.0.0'} hasBin: true peerDependencies: '@bufbuild/protoc-gen-es': ^1.3.3 - '@connectrpc/connect': 1.1.2 + '@connectrpc/connect': 1.1.3 peerDependenciesMeta: '@bufbuild/protoc-gen-es': optional: true '@connectrpc/connect': optional: true dependencies: - '@bufbuild/protobuf': 1.4.0 - '@bufbuild/protoc-gen-es': 1.4.0(@bufbuild/protobuf@1.4.0) - '@bufbuild/protoplugin': 1.3.3 - '@connectrpc/connect': 1.1.2(@bufbuild/protobuf@1.4.0) + '@bufbuild/protobuf': 1.4.2 + '@bufbuild/protoc-gen-es': 1.4.2(@bufbuild/protobuf@1.4.2) + '@bufbuild/protoplugin': 1.4.0 + '@connectrpc/connect': 1.1.3(@bufbuild/protobuf@1.4.2) transitivePeerDependencies: - supports-color dev: true @@ -695,13 +695,13 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.52.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.53.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.52.0 + eslint: 8.53.0 eslint-visitor-keys: 3.4.3 dev: true @@ -710,8 +710,8 @@ packages: engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc@2.1.2: - resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} + /@eslint/eslintrc@2.1.3: + resolution: {integrity: sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 @@ -727,8 +727,8 @@ packages: - supports-color dev: true - /@eslint/js@8.52.0: - resolution: {integrity: sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==} + /@eslint/js@8.53.0: + resolution: {integrity: sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -978,7 +978,7 @@ packages: resolution: {integrity: sha512-gYw0ki/EAuV1oSyMxpqandHjnthZjYYy+YWpTAzf8BqfXM3ItcZLpjxfg+3+mXW8HIO+3jw6T9iiqEXsqHaMMw==} dependencies: '@safe-global/safe-gateway-typescript-sdk': 3.12.0 - viem: 1.16.6(typescript@5.2.2) + viem: 1.19.1(typescript@5.2.2) transitivePeerDependencies: - bufferutil - typescript @@ -990,7 +990,7 @@ packages: resolution: {integrity: sha512-XJbEPuaVc7b9n23MqlF6c+ToYIS3f7P2Sel8f3cSBQ9WORE4xrSuvhMpK9fDSFqJ7by/brc+rmJR/5HViRr0/w==} dependencies: '@safe-global/safe-gateway-typescript-sdk': 3.12.0 - viem: 1.16.6(typescript@5.2.2) + viem: 1.19.1(typescript@5.2.2) transitivePeerDependencies: - bufferutil - typescript @@ -1199,7 +1199,7 @@ packages: /@types/connect@3.4.37: resolution: {integrity: sha512-zBUSRqkfZ59OcwXon4HVxhx5oWCJmc0OtBTK05M+p0dYjgN6iTwIL2T/WbsQZrEsdnwaF9cWQ+azOnpPvIqY3Q==} dependencies: - '@types/node': 20.8.8 + '@types/node': 20.9.0 dev: false /@types/debug@4.1.10: @@ -1228,10 +1228,10 @@ packages: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: false - /@types/node@20.8.8: - resolution: {integrity: sha512-YRsdVxq6OaLfmR9Hy816IMp33xOBjfyOgUd77ehqg96CFywxAPbDbXvAsuN2KVg2HOT8Eh6uAfU+l4WffwPVrQ==} + /@types/node@20.9.0: + resolution: {integrity: sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==} dependencies: - undici-types: 5.25.3 + undici-types: 5.26.5 /@types/normalize-package-data@2.4.3: resolution: {integrity: sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg==} @@ -1248,10 +1248,10 @@ packages: /@types/ws@7.4.7: resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} dependencies: - '@types/node': 20.8.8 + '@types/node': 20.9.0 dev: false - /@typescript-eslint/eslint-plugin@6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.52.0)(typescript@5.2.2): + /@typescript-eslint/eslint-plugin@6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.53.0)(typescript@5.2.2): resolution: {integrity: sha512-lgX7F0azQwRPB7t7WAyeHWVfW1YJ9NIgd9mvGhfQpRY56X6AVf8mwM8Wol+0z4liE7XX3QOt8MN1rUKCfSjRIA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1263,13 +1263,13 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.9.1 - '@typescript-eslint/parser': 6.9.0(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.9.0(eslint@8.53.0)(typescript@5.2.2) '@typescript-eslint/scope-manager': 6.9.0 - '@typescript-eslint/type-utils': 6.9.0(eslint@8.52.0)(typescript@5.2.2) - '@typescript-eslint/utils': 6.9.0(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/type-utils': 6.9.0(eslint@8.53.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.9.0(eslint@8.53.0)(typescript@5.2.2) '@typescript-eslint/visitor-keys': 6.9.0 debug: 4.3.4 - eslint: 8.52.0 + eslint: 8.53.0 graphemer: 1.4.0 ignore: 5.2.4 natural-compare: 1.4.0 @@ -1280,7 +1280,7 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.9.0(eslint@8.52.0)(typescript@5.2.2): + /@typescript-eslint/parser@6.9.0(eslint@8.53.0)(typescript@5.2.2): resolution: {integrity: sha512-GZmjMh4AJ/5gaH4XF2eXA8tMnHWP+Pm1mjQR2QN4Iz+j/zO04b9TOvJYOX2sCNIQHtRStKTxRY1FX7LhpJT4Gw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1295,7 +1295,7 @@ packages: '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.2.2) '@typescript-eslint/visitor-keys': 6.9.0 debug: 4.3.4 - eslint: 8.52.0 + eslint: 8.53.0 typescript: 5.2.2 transitivePeerDependencies: - supports-color @@ -1317,7 +1317,7 @@ packages: '@typescript-eslint/visitor-keys': 6.9.0 dev: true - /@typescript-eslint/type-utils@6.9.0(eslint@8.52.0)(typescript@5.2.2): + /@typescript-eslint/type-utils@6.9.0(eslint@8.53.0)(typescript@5.2.2): resolution: {integrity: sha512-XXeahmfbpuhVbhSOROIzJ+b13krFmgtc4GlEuu1WBT+RpyGPIA4Y/eGnXzjbDj5gZLzpAXO/sj+IF/x2GtTMjQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1328,9 +1328,9 @@ packages: optional: true dependencies: '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.2.2) - '@typescript-eslint/utils': 6.9.0(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.9.0(eslint@8.53.0)(typescript@5.2.2) debug: 4.3.4 - eslint: 8.52.0 + eslint: 8.53.0 ts-api-utils: 1.0.3(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: @@ -1389,19 +1389,19 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.52.0)(typescript@5.2.2): + /@typescript-eslint/utils@5.62.0(eslint@8.53.0)(typescript@5.2.2): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) '@types/json-schema': 7.0.14 '@types/semver': 7.5.4 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) - eslint: 8.52.0 + eslint: 8.53.0 eslint-scope: 5.1.1 semver: 7.5.4 transitivePeerDependencies: @@ -1409,19 +1409,19 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.9.0(eslint@8.52.0)(typescript@5.2.2): + /@typescript-eslint/utils@6.9.0(eslint@8.53.0)(typescript@5.2.2): resolution: {integrity: sha512-5Wf+Jsqya7WcCO8me504FBigeQKVLAMPmUzYgDbWchINNh1KJbxCgVya3EQ2MjvJMVeXl3pofRmprqX6mfQkjQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) '@types/json-schema': 7.0.14 '@types/semver': 7.5.4 '@typescript-eslint/scope-manager': 6.9.0 '@typescript-eslint/types': 6.9.0 '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.2.2) - eslint: 8.52.0 + eslint: 8.53.0 semver: 7.5.4 transitivePeerDependencies: - supports-color @@ -1456,11 +1456,11 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vercel/style-guide@5.0.1(eslint@8.52.0)(prettier@3.0.3)(typescript@5.2.2): - resolution: {integrity: sha512-3J/5xpwJ2Wk+cKB3EGY2KCdVQycaThLKhjBmgXPfIKb+E74lPpXVIDfaQE0D2JoAyIzGsqdH7Lbmr+DojwofxQ==} + /@vercel/style-guide@5.1.0(eslint@8.53.0)(prettier@3.1.0)(typescript@5.2.2): + resolution: {integrity: sha512-L9lWYePIycm7vIOjDLj+mmMdmmPkW3/brHjgq+nJdvMOrL7Hdk/19w8X583HYSk0vWsq494o5Qkh6x5+uW7ljg==} engines: {node: '>=16'} peerDependencies: - '@next/eslint-plugin-next': '>=12.3.0 <14' + '@next/eslint-plugin-next': '>=12.3.0 <15' eslint: '>=8.48.0 <9' prettier: '>=3.0.0 <4' typescript: '>=4.8.0 <6' @@ -1475,26 +1475,26 @@ packages: optional: true dependencies: '@babel/core': 7.23.2 - '@babel/eslint-parser': 7.22.15(@babel/core@7.23.2)(eslint@8.52.0) + '@babel/eslint-parser': 7.22.15(@babel/core@7.23.2)(eslint@8.53.0) '@rushstack/eslint-patch': 1.5.1 - '@typescript-eslint/eslint-plugin': 6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.52.0)(typescript@5.2.2) - '@typescript-eslint/parser': 6.9.0(eslint@8.52.0)(typescript@5.2.2) - eslint: 8.52.0 - eslint-config-prettier: 9.0.0(eslint@8.52.0) + '@typescript-eslint/eslint-plugin': 6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.53.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.9.0(eslint@8.53.0)(typescript@5.2.2) + eslint: 8.53.0 + eslint-config-prettier: 9.0.0(eslint@8.53.0) eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.0) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.9.0)(eslint-plugin-import@2.29.0)(eslint@8.52.0) - eslint-plugin-eslint-comments: 3.2.0(eslint@8.52.0) - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.9.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.52.0) - eslint-plugin-jest: 27.4.3(@typescript-eslint/eslint-plugin@6.9.0)(eslint@8.52.0)(typescript@5.2.2) - eslint-plugin-jsx-a11y: 6.7.1(eslint@8.52.0) - eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.4.3)(eslint@8.52.0) - eslint-plugin-react: 7.33.2(eslint@8.52.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.52.0) - eslint-plugin-testing-library: 6.1.0(eslint@8.52.0)(typescript@5.2.2) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.9.0)(eslint-plugin-import@2.29.0)(eslint@8.53.0) + eslint-plugin-eslint-comments: 3.2.0(eslint@8.53.0) + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.9.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) + eslint-plugin-jest: 27.4.3(@typescript-eslint/eslint-plugin@6.9.0)(eslint@8.53.0)(typescript@5.2.2) + eslint-plugin-jsx-a11y: 6.7.1(eslint@8.53.0) + eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.4.3)(eslint@8.53.0) + eslint-plugin-react: 7.33.2(eslint@8.53.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.53.0) + eslint-plugin-testing-library: 6.1.0(eslint@8.53.0)(typescript@5.2.2) eslint-plugin-tsdoc: 0.2.17 - eslint-plugin-unicorn: 48.0.1(eslint@8.52.0) - prettier: 3.0.3 - prettier-plugin-packagejson: 2.4.6(prettier@3.0.3) + eslint-plugin-unicorn: 48.0.1(eslint@8.53.0) + prettier: 3.1.0 + prettier-plugin-packagejson: 2.4.6(prettier@3.1.0) typescript: 5.2.2 transitivePeerDependencies: - eslint-import-resolver-node @@ -1562,7 +1562,7 @@ packages: pretty-format: 29.7.0 dev: true - /@wagmi/connectors@3.1.3(react@18.2.0)(typescript@5.2.2)(viem@1.16.6): + /@wagmi/connectors@3.1.3(react@18.2.0)(typescript@5.2.2)(viem@1.19.1): resolution: {integrity: sha512-UgwsQKQDFObJVJMf9pDfFoXTv710o4zrTHyhIWKBTMMkLpCMsMxN5+ZaDhBYt/BgoRinfRYQo8uwuwLhxE6Log==} peerDependencies: typescript: '>=5.0.4' @@ -1582,7 +1582,7 @@ packages: abitype: 0.8.7(typescript@5.2.2) eventemitter3: 4.0.7 typescript: 5.2.2 - viem: 1.16.6(typescript@5.2.2) + viem: 1.19.1(typescript@5.2.2) transitivePeerDependencies: - '@react-native-async-storage/async-storage' - '@types/react' @@ -1595,7 +1595,7 @@ packages: - zod dev: false - /@wagmi/core@1.4.5(react@18.2.0)(typescript@5.2.2)(viem@1.16.6): + /@wagmi/core@1.4.5(react@18.2.0)(typescript@5.2.2)(viem@1.19.1): resolution: {integrity: sha512-N9luRb1Uk4tBN9kaYcQSWKE9AsRt/rvZaFt5IZech4JPzNN2sQlfhKd9GEjOXYRDqEPHdDvos7qyBKiDNTz4GA==} peerDependencies: typescript: '>=5.0.4' @@ -1604,11 +1604,11 @@ packages: typescript: optional: true dependencies: - '@wagmi/connectors': 3.1.3(react@18.2.0)(typescript@5.2.2)(viem@1.16.6) + '@wagmi/connectors': 3.1.3(react@18.2.0)(typescript@5.2.2)(viem@1.19.1) abitype: 0.8.7(typescript@5.2.2) eventemitter3: 4.0.7 typescript: 5.2.2 - viem: 1.16.6(typescript@5.2.2) + viem: 1.19.1(typescript@5.2.2) zustand: 4.4.4(react@18.2.0) transitivePeerDependencies: - '@react-native-async-storage/async-storage' @@ -2874,13 +2874,13 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-prettier@9.0.0(eslint@8.52.0): + /eslint-config-prettier@9.0.0(eslint@8.53.0): resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.52.0 + eslint: 8.53.0 dev: true /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.0): @@ -2889,7 +2889,7 @@ packages: peerDependencies: eslint-plugin-import: '>=1.4.0' dependencies: - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.9.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.52.0) + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.9.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) dev: true /eslint-import-resolver-node@0.3.9: @@ -2902,7 +2902,7 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.9.0)(eslint-plugin-import@2.29.0)(eslint@8.52.0): + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.9.0)(eslint-plugin-import@2.29.0)(eslint@8.53.0): resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -2911,9 +2911,9 @@ packages: dependencies: debug: 4.3.4 enhanced-resolve: 5.15.0 - eslint: 8.52.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.9.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.52.0) - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.9.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.52.0) + eslint: 8.53.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.9.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.9.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) fast-glob: 3.3.1 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -2925,7 +2925,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.9.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.52.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.9.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -2946,27 +2946,27 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.9.0(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.9.0(eslint@8.53.0)(typescript@5.2.2) debug: 3.2.7 - eslint: 8.52.0 + eslint: 8.53.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.9.0)(eslint-plugin-import@2.29.0)(eslint@8.52.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.9.0)(eslint-plugin-import@2.29.0)(eslint@8.53.0) transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-eslint-comments@3.2.0(eslint@8.52.0): + /eslint-plugin-eslint-comments@3.2.0(eslint@8.53.0): resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} engines: {node: '>=6.5.0'} peerDependencies: eslint: '>=4.19.1' dependencies: escape-string-regexp: 1.0.5 - eslint: 8.52.0 + eslint: 8.53.0 ignore: 5.2.4 dev: true - /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.9.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.52.0): + /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.9.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0): resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} engines: {node: '>=4'} peerDependencies: @@ -2976,16 +2976,16 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.9.0(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.9.0(eslint@8.53.0)(typescript@5.2.2) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.52.0 + eslint: 8.53.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.9.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.52.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.9.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -3001,7 +3001,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.4.3(@typescript-eslint/eslint-plugin@6.9.0)(eslint@8.52.0)(typescript@5.2.2): + /eslint-plugin-jest@27.4.3(@typescript-eslint/eslint-plugin@6.9.0)(eslint@8.53.0)(typescript@5.2.2): resolution: {integrity: sha512-7S6SmmsHsgIm06BAGCAxL+ABd9/IB3MWkz2pudj6Qqor2y1qQpWPfuFU4SG9pWj4xDjF0e+D7Llh5useuSzAZw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -3014,15 +3014,15 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.52.0)(typescript@5.2.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.52.0)(typescript@5.2.2) - eslint: 8.52.0 + '@typescript-eslint/eslint-plugin': 6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.53.0)(typescript@5.2.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.53.0)(typescript@5.2.2) + eslint: 8.53.0 transitivePeerDependencies: - supports-color - typescript dev: true - /eslint-plugin-jsx-a11y@6.7.1(eslint@8.52.0): + /eslint-plugin-jsx-a11y@6.7.1(eslint@8.53.0): resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} engines: {node: '>=4.0'} peerDependencies: @@ -3037,7 +3037,7 @@ packages: axobject-query: 3.2.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.52.0 + eslint: 8.53.0 has: 1.0.4 jsx-ast-utils: 3.3.5 language-tags: 1.0.5 @@ -3047,7 +3047,7 @@ packages: semver: 6.3.1 dev: true - /eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.4.3)(eslint@8.52.0): + /eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.4.3)(eslint@8.53.0): resolution: {integrity: sha512-DcHpF0SLbNeh9MT4pMzUGuUSnJ7q5MWbP8sSEFIMS6j7Ggnduq8ghNlfhURgty4c1YFny7Ge9xYTO1FSAoV2Vw==} peerDependencies: eslint: '>=7' @@ -3056,20 +3056,20 @@ packages: eslint-plugin-jest: optional: true dependencies: - eslint: 8.52.0 - eslint-plugin-jest: 27.4.3(@typescript-eslint/eslint-plugin@6.9.0)(eslint@8.52.0)(typescript@5.2.2) + eslint: 8.53.0 + eslint-plugin-jest: 27.4.3(@typescript-eslint/eslint-plugin@6.9.0)(eslint@8.53.0)(typescript@5.2.2) dev: true - /eslint-plugin-react-hooks@4.6.0(eslint@8.52.0): + /eslint-plugin-react-hooks@4.6.0(eslint@8.53.0): resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - eslint: 8.52.0 + eslint: 8.53.0 dev: true - /eslint-plugin-react@7.33.2(eslint@8.52.0): + /eslint-plugin-react@7.33.2(eslint@8.53.0): resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} engines: {node: '>=4'} peerDependencies: @@ -3080,7 +3080,7 @@ packages: array.prototype.tosorted: 1.1.2 doctrine: 2.1.0 es-iterator-helpers: 1.0.15 - eslint: 8.52.0 + eslint: 8.53.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 @@ -3094,14 +3094,14 @@ packages: string.prototype.matchall: 4.0.10 dev: true - /eslint-plugin-testing-library@6.1.0(eslint@8.52.0)(typescript@5.2.2): + /eslint-plugin-testing-library@6.1.0(eslint@8.53.0)(typescript@5.2.2): resolution: {integrity: sha512-r7kE+az3tbp8vyRwfyAGZ6V/xw+XvdWFPicIo6jbOPZoossOFDeHizARqPGV6gEkyF8hyCFhhH3mlQOGS3N5Sg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.52.0)(typescript@5.2.2) - eslint: 8.52.0 + '@typescript-eslint/utils': 5.62.0(eslint@8.53.0)(typescript@5.2.2) + eslint: 8.53.0 transitivePeerDependencies: - supports-color - typescript @@ -3114,17 +3114,17 @@ packages: '@microsoft/tsdoc-config': 0.16.2 dev: true - /eslint-plugin-unicorn@48.0.1(eslint@8.52.0): + /eslint-plugin-unicorn@48.0.1(eslint@8.53.0): resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} engines: {node: '>=16'} peerDependencies: eslint: '>=8.44.0' dependencies: '@babel/helper-validator-identifier': 7.22.20 - '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) ci-info: 3.9.0 clean-regexp: 1.0.0 - eslint: 8.52.0 + eslint: 8.53.0 esquery: 1.5.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 @@ -3164,15 +3164,15 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.52.0: - resolution: {integrity: sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==} + /eslint@8.53.0: + resolution: {integrity: sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) '@eslint-community/regexpp': 4.9.1 - '@eslint/eslintrc': 2.1.2 - '@eslint/js': 8.52.0 + '@eslint/eslintrc': 2.1.3 + '@eslint/js': 8.53.0 '@humanwhocodes/config-array': 0.11.13 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 @@ -4736,7 +4736,7 @@ packages: optional: true dependencies: lilconfig: 2.1.0 - ts-node: 10.9.1(@types/node@20.8.8)(typescript@5.2.2) + ts-node: 10.9.1(@types/node@20.9.0)(typescript@5.2.2) yaml: 2.3.3 dev: true @@ -4758,7 +4758,7 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier-plugin-packagejson@2.4.6(prettier@3.0.3): + /prettier-plugin-packagejson@2.4.6(prettier@3.1.0): resolution: {integrity: sha512-5JGfzkJRL0DLNyhwmiAV9mV0hZLHDwddFCs2lc9CNxOChpoWUQVe8K4qTMktmevmDlMpok2uT10nvHUyU59sNw==} peerDependencies: prettier: '>= 1.16.0' @@ -4766,13 +4766,13 @@ packages: prettier: optional: true dependencies: - prettier: 3.0.3 + prettier: 3.1.0 sort-package-json: 2.6.0 synckit: 0.8.5 dev: true - /prettier@3.0.3: - resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==} + /prettier@3.1.0: + resolution: {integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==} engines: {node: '>=14'} hasBin: true dev: true @@ -5521,7 +5521,7 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-node@10.9.1(@types/node@20.8.8)(typescript@5.2.2): + /ts-node@10.9.1(@types/node@20.9.0)(typescript@5.2.2): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -5540,7 +5540,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.8.8 + '@types/node': 20.9.0 acorn: 8.10.0 acorn-walk: 8.2.0 arg: 4.1.3 @@ -5684,16 +5684,16 @@ packages: is-typedarray: 1.0.0 dev: false - /typedoc-plugin-missing-exports@2.1.0(typedoc@0.25.2): + /typedoc-plugin-missing-exports@2.1.0(typedoc@0.25.3): resolution: {integrity: sha512-+1DhqZCEu7Vu5APnrqpPwl31D+hXpt1fV0Le9ycCRL1eLVdatdl6KVt4SEVwPxnEpKwgOn2dNX6I9+0F1aO2aA==} peerDependencies: typedoc: 0.24.x || 0.25.x dependencies: - typedoc: 0.25.2(typescript@5.2.2) + typedoc: 0.25.3(typescript@5.2.2) dev: true - /typedoc@0.25.2(typescript@5.2.2): - resolution: {integrity: sha512-286F7BeATBiWe/qC4PCOCKlSTwfnsLbC/4cZ68oGBbvAqb9vV33quEOXx7q176OXotD+JdEerdQ1OZGJ818lnA==} + /typedoc@0.25.3(typescript@5.2.2): + resolution: {integrity: sha512-Ow8Bo7uY1Lwy7GTmphRIMEo6IOZ+yYUyrc8n5KXIZg1svpqhZSWgni2ZrDhe+wLosFS8yswowUzljTAV/3jmWw==} engines: {node: '>= 16'} hasBin: true peerDependencies: @@ -5736,8 +5736,8 @@ packages: which-boxed-primitive: 1.0.2 dev: true - /undici-types@5.25.3: - resolution: {integrity: sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==} + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} /undici@5.26.5: resolution: {integrity: sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==} @@ -5840,8 +5840,8 @@ packages: use-sync-external-store: 1.2.0(react@18.2.0) dev: false - /viem@1.16.6(typescript@5.2.2): - resolution: {integrity: sha512-jcWcFQ+xzIfDwexwPJRvCuCRJKEkK9iHTStG7mpU5MmuSBpACs4nATBDyXNFtUiyYTFzLlVEwWkt68K0nCSImg==} + /viem@1.19.1(typescript@5.2.2): + resolution: {integrity: sha512-YkuBbtiy6yZHWFZuUxypdzBVUAsa1zHBtpVZDi0kILOW4bkykZ60b3zH8wIKVyfvlQ+SyB+2ZN9V5agLfsPm2w==} peerDependencies: typescript: '>=5.0.4' peerDependenciesMeta: @@ -5862,7 +5862,7 @@ packages: - utf-8-validate - zod - /vite-node@0.34.6(@types/node@20.8.8): + /vite-node@0.34.6(@types/node@20.9.0): resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==} engines: {node: '>=v14.18.0'} hasBin: true @@ -5872,7 +5872,7 @@ packages: mlly: 1.4.2 pathe: 1.1.1 picocolors: 1.0.0 - vite: 4.5.0(@types/node@20.8.8) + vite: 4.5.0(@types/node@20.9.0) transitivePeerDependencies: - '@types/node' - less @@ -5884,7 +5884,7 @@ packages: - terser dev: true - /vite@4.5.0(@types/node@20.8.8): + /vite@4.5.0(@types/node@20.9.0): resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -5912,7 +5912,7 @@ packages: terser: optional: true dependencies: - '@types/node': 20.8.8 + '@types/node': 20.9.0 esbuild: 0.18.20 postcss: 8.4.31 rollup: 3.29.4 @@ -5953,7 +5953,7 @@ packages: dependencies: '@types/chai': 4.3.9 '@types/chai-subset': 1.3.4 - '@types/node': 20.8.8 + '@types/node': 20.9.0 '@vitest/expect': 0.34.6 '@vitest/runner': 0.34.6 '@vitest/snapshot': 0.34.6 @@ -5972,8 +5972,8 @@ packages: strip-literal: 1.3.0 tinybench: 2.5.1 tinypool: 0.7.0 - vite: 4.5.0(@types/node@20.8.8) - vite-node: 0.34.6(@types/node@20.8.8) + vite: 4.5.0(@types/node@20.9.0) + vite-node: 0.34.6(@types/node@20.9.0) why-is-node-running: 2.2.2 transitivePeerDependencies: - less From 1974c3cfb8bc5deb7ce0780c2a301bb6e8c65bd5 Mon Sep 17 00:00:00 2001 From: Alberto Cevallos Date: Wed, 15 Nov 2023 16:11:41 -0600 Subject: [PATCH 5/6] first --- src/utils/timestamps.ts | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/src/utils/timestamps.ts b/src/utils/timestamps.ts index acd45011..e643c9d6 100644 --- a/src/utils/timestamps.ts +++ b/src/utils/timestamps.ts @@ -12,33 +12,23 @@ export const toUnix = (date: Date) => Math.floor(date.getTime() / 1000); * @param date - The date to adjust. * @returns The adjusted 8 AM UTC date. */ -export function get8AMUTCDate(date: Date) { - // Convert the date to its UTC equivalent. This is achieved by adjusting - // the local date with the timezone offset in milliseconds. - const tzOffsetMS = date.getTimezoneOffset() * 60000; - const utcDateMilliseconds = date.getTime() + tzOffsetMS; - - // Create a new Date object from the UTC milliseconds. - const utcDate = new Date(utcDateMilliseconds); - - // Set the UTC time to 8:00:00 AM. - utcDate.setUTCHours(8, 0, 0, 0); - - // If the original date is before the newly constructed 8AM UTC date, return - // the 8AM date. Otherwise, return 8AM of the following day. This ensures that - // we're always returning a future date relative to the original input. - if (date.getTime() >= utcDate.getTime()) { - utcDate.setDate(utcDate.getDate() + 1); // Add a day to the UTC date - } - - return toUnix(utcDate); +export function get8AMUTCDate(date?: Date) { + const today = date ?? new Date(); + const currentHour = today.getUTCHours(); + const currentMinutes = today.getUTCMinutes(); + const shiftDays = + currentHour > 7 || (currentHour === 7 && currentMinutes > 30) ? 1 : 0; + const nextDate = new Date(today); + nextDate.setUTCDate(today.getUTCDate() + shiftDays); + nextDate.setUTCHours(8, 0, 0, 0); // Set the time to 8am UTC + return nextDate.getTime(); } export function get24HrTimestamps(date?: Date): { exerciseTimestamp: number; expiryTimestamp: number; } { - const exerciseTimestamp = get8AMUTCDate(date ?? new Date()); + const exerciseTimestamp = get8AMUTCDate(date); const expiryTimestamp = exerciseTimestamp + ONE_DAY_UNIX; // expires in 1 day return { exerciseTimestamp, expiryTimestamp }; From c7091f98f2b201c9b4b3f6eedbc7021690678591 Mon Sep 17 00:00:00 2001 From: Alberto Cevallos Date: Wed, 15 Nov 2023 16:42:37 -0600 Subject: [PATCH 6/6] chore: wrapping in toUnix --- src/utils/timestamps.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/timestamps.ts b/src/utils/timestamps.ts index e643c9d6..0eacc273 100644 --- a/src/utils/timestamps.ts +++ b/src/utils/timestamps.ts @@ -21,7 +21,7 @@ export function get8AMUTCDate(date?: Date) { const nextDate = new Date(today); nextDate.setUTCDate(today.getUTCDate() + shiftDays); nextDate.setUTCHours(8, 0, 0, 0); // Set the time to 8am UTC - return nextDate.getTime(); + return toUnix(nextDate); } export function get24HrTimestamps(date?: Date): {