better-convex-nuxt 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/module.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "compatibility": {
5
5
  "nuxt": ">=3.0.0"
6
6
  },
7
- "version": "0.2.1",
7
+ "version": "0.2.2",
8
8
  "builder": {
9
9
  "@nuxt/module-builder": "1.0.2",
10
10
  "unbuild": "3.6.1"
@@ -45,9 +45,11 @@ const formattedJson = computed(() => {
45
45
  </script>
46
46
 
47
47
  <template>
48
+ <!-- eslint-disable vue/no-v-html -- Safe: all dynamic content is escaped via escapeHtml() -->
48
49
  <div
49
50
  class="json-viewer"
50
51
  :style="{ maxHeight: maxHeight || '200px' }"
51
52
  v-html="formattedJson"
52
53
  />
54
+ <!-- eslint-enable vue/no-v-html -->
53
55
  </template>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Convex DevTools</title><link rel="stylesheet" href="/__convex_devtools__/_nuxt/entry.CXPHzcHp.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__convex_devtools__/_nuxt/DRR5kXdS.js"><script type="module" src="/__convex_devtools__/_nuxt/DRR5kXdS.js" crossorigin></script><script id="unhead:payload" type="application/json">{"title":"Convex DevTools"}</script></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__convex_devtools__",buildId:"ed68c5ea-0511-4166-9328-de64627268f7",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1768309769044,false]</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Convex DevTools</title><link rel="stylesheet" href="/__convex_devtools__/_nuxt/entry.CXPHzcHp.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__convex_devtools__/_nuxt/DRR5kXdS.js"><script type="module" src="/__convex_devtools__/_nuxt/DRR5kXdS.js" crossorigin></script><script id="unhead:payload" type="application/json">{"title":"Convex DevTools"}</script></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__convex_devtools__",buildId:"316510bf-55a1-4608-8d7a-efe8da0abc11",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1768318322268,false]</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Convex DevTools</title><link rel="stylesheet" href="/__convex_devtools__/_nuxt/entry.CXPHzcHp.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__convex_devtools__/_nuxt/DRR5kXdS.js"><script type="module" src="/__convex_devtools__/_nuxt/DRR5kXdS.js" crossorigin></script><script id="unhead:payload" type="application/json">{"title":"Convex DevTools"}</script></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__convex_devtools__",buildId:"ed68c5ea-0511-4166-9328-de64627268f7",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1768309769045,false]</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Convex DevTools</title><link rel="stylesheet" href="/__convex_devtools__/_nuxt/entry.CXPHzcHp.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__convex_devtools__/_nuxt/DRR5kXdS.js"><script type="module" src="/__convex_devtools__/_nuxt/DRR5kXdS.js" crossorigin></script><script id="unhead:payload" type="application/json">{"title":"Convex DevTools"}</script></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__convex_devtools__",buildId:"316510bf-55a1-4608-8d7a-efe8da0abc11",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1768318322269,false]</script></body></html>
@@ -1 +1 @@
1
- {"id":"ed68c5ea-0511-4166-9328-de64627268f7","timestamp":1768309766642}
1
+ {"id":"316510bf-55a1-4608-8d7a-efe8da0abc11","timestamp":1768318319574}
@@ -0,0 +1 @@
1
+ {"id":"316510bf-55a1-4608-8d7a-efe8da0abc11","timestamp":1768318319574,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]}
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Convex DevTools</title><link rel="stylesheet" href="/__convex_devtools__/_nuxt/entry.CXPHzcHp.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__convex_devtools__/_nuxt/DRR5kXdS.js"><script type="module" src="/__convex_devtools__/_nuxt/DRR5kXdS.js" crossorigin></script><script id="unhead:payload" type="application/json">{"title":"Convex DevTools"}</script></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__convex_devtools__",buildId:"ed68c5ea-0511-4166-9328-de64627268f7",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1768309769045,false]</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Convex DevTools</title><link rel="stylesheet" href="/__convex_devtools__/_nuxt/entry.CXPHzcHp.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__convex_devtools__/_nuxt/DRR5kXdS.js"><script type="module" src="/__convex_devtools__/_nuxt/DRR5kXdS.js" crossorigin></script><script id="unhead:payload" type="application/json">{"title":"Convex DevTools"}</script></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__convex_devtools__",buildId:"316510bf-55a1-4608-8d7a-efe8da0abc11",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1768318322269,false]</script></body></html>
@@ -61,7 +61,9 @@ export default defineNuxtPlugin((nuxtApp) => {
61
61
  fetchOptions: { credentials: "include" }
62
62
  });
63
63
  let lastTokenValidation = Date.now();
64
+ let lastNullTokenCheck = 0;
64
65
  const TOKEN_CACHE_MS = 1e4;
66
+ const NULL_TOKEN_CACHE_MS = 5e3;
65
67
  const skipRoutes = config.public.convex?.skipAuthRoutes || [];
66
68
  const router = useRouter();
67
69
  const fetchToken = async ({ forceRefreshToken }) => {
@@ -84,11 +86,15 @@ export default defineNuxtPlugin((nuxtApp) => {
84
86
  if (wasServerRendered && !convexToken.value && !convexUser.value) {
85
87
  return null;
86
88
  }
89
+ if (!convexToken.value && Date.now() - lastNullTokenCheck < NULL_TOKEN_CACHE_MS) {
90
+ return null;
91
+ }
87
92
  try {
88
93
  const response = await authClient.convex.token();
89
94
  if (response.error || !response.data?.token) {
90
95
  convexToken.value = null;
91
96
  convexUser.value = null;
97
+ lastNullTokenCheck = Date.now();
92
98
  return null;
93
99
  }
94
100
  const token = response.data.token;
@@ -101,6 +107,7 @@ export default defineNuxtPlugin((nuxtApp) => {
101
107
  } catch {
102
108
  convexToken.value = null;
103
109
  convexUser.value = null;
110
+ lastNullTokenCheck = Date.now();
104
111
  return null;
105
112
  }
106
113
  };
@@ -3,6 +3,7 @@ import { createModuleLogger, getLoggingOptions, createTimer } from "./utils/logg
3
3
  import { getCachedAuthToken, setCachedAuthToken } from "./server/utils/auth-cache.js";
4
4
  import { getCookie } from "./utils/shared-helpers.js";
5
5
  const SESSION_COOKIE_NAME = "better-auth.session_token";
6
+ const SECURE_SESSION_COOKIE_NAME = "__Secure-better-auth.session_token";
6
7
  function buildPhase(name, startTime, waterfallStart, result, details) {
7
8
  const end = Date.now();
8
9
  return {
@@ -70,7 +71,7 @@ export default defineNuxtPlugin(async () => {
70
71
  let cacheHit = false;
71
72
  const sessionCheckStart = Date.now();
72
73
  const cookieHeader = event.headers.get("cookie");
73
- const sessionToken = getCookie(cookieHeader, SESSION_COOKIE_NAME);
74
+ const sessionToken = getCookie(cookieHeader, SECURE_SESSION_COOKIE_NAME) || getCookie(cookieHeader, SESSION_COOKIE_NAME);
74
75
  if (!cookieHeader || !sessionToken) {
75
76
  phases.push(buildPhase("session-check", sessionCheckStart, waterfallStart, "miss", "No session cookie"));
76
77
  convexAuthWaterfall.value = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "better-convex-nuxt",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "Full-featured Convex integration for Nuxt with SSR, real-time subscriptions, authentication, and permissions",
5
5
  "keywords": [
6
6
  "authentication",
@@ -1 +0,0 @@
1
- {"id":"ed68c5ea-0511-4166-9328-de64627268f7","timestamp":1768309766642,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]}