diff --git a/.changeset/olive-toys-pump.md b/.changeset/olive-toys-pump.md new file mode 100644 index 0000000000..11494166e6 --- /dev/null +++ b/.changeset/olive-toys-pump.md @@ -0,0 +1,5 @@ +--- +"@better-auth/expo": patch +--- + +fix(expo): improve cookie expiration handling diff --git a/packages/expo/src/client.ts b/packages/expo/src/client.ts index 0525a9f0b5..ad6dafaa17 100644 --- a/packages/expo/src/client.ts +++ b/packages/expo/src/client.ts @@ -50,7 +50,7 @@ interface ExpoClientOptions { interface StoredCookie { value: string; - expires: Date | null; + expires: string | null; } export function getSetCookie(header: string, prevCookie?: string) { @@ -59,14 +59,14 @@ export function getSetCookie(header: string, prevCookie?: string) { parsed.forEach((cookie, key) => { const expiresAt = cookie["expires"]; const maxAge = cookie["max-age"]; - const expires = expiresAt - ? new Date(String(expiresAt)) - : maxAge - ? new Date(Date.now() + Number(maxAge)) + const expires = maxAge + ? new Date(Date.now() + Number(maxAge) * 1000) + : expiresAt + ? new Date(String(expiresAt)) : null; toSetCookie[key] = { value: cookie["value"], - expires, + expires: expires ? expires.toISOString() : null, }; }); if (prevCookie) { @@ -89,7 +89,7 @@ export function getCookie(cookie: string) { parsed = JSON.parse(cookie) as Record; } catch (e) {} const toSend = Object.entries(parsed).reduce((acc, [key, value]) => { - if (value.expires && value.expires < new Date()) { + if (value.expires && new Date(value.expires) < new Date()) { return acc; } return `${acc}; ${key}=${value.value}`; diff --git a/packages/expo/src/expo.test.ts b/packages/expo/src/expo.test.ts index eae54d5849..b06b6f5116 100644 --- a/packages/expo/src/expo.test.ts +++ b/packages/expo/src/expo.test.ts @@ -199,11 +199,11 @@ describe("expo with cookieCache", async () => { expect(storedCookie).toBeDefined(); const parsedCookie = JSON.parse(storedCookie || ""); expect(parsedCookie["better-auth.session_token"]).toMatchObject({ - value: expect.stringMatching(/.+/), + value: expect.any(String), expires: expect.any(String), }); expect(parsedCookie["better-auth.session_data"]).toMatchObject({ - value: expect.stringMatching(/.+/), + value: expect.any(String), expires: expect.any(String), }); }); @@ -216,11 +216,11 @@ describe("expo with cookieCache", async () => { expect(storedCookie).toBeDefined(); const parsedCookie = JSON.parse(storedCookie || ""); expect(parsedCookie["better-auth.session_token"]).toMatchObject({ - value: expect.stringMatching(/^$/), + value: expect.any(String), expires: expect.any(String), }); expect(parsedCookie["better-auth.session_data"]).toMatchObject({ - value: expect.stringMatching(/^$/), + value: expect.any(String), expires: expect.any(String), }); });