@gonvex/react 0.1.9 → 0.1.11

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/README.md CHANGED
@@ -45,7 +45,67 @@ function Tasks() {
45
45
 
46
46
  `useQuery` automatically benefits from the browser query-result cache. On a
47
47
  warm load it may receive the last scoped snapshot first, followed by the
48
- authoritative server result. Its signature and return type do not change.
48
+ authoritative server result. Its signature remains `T | undefined`, but a
49
+ server `query.error` now **throws** during render (Convex-compatible) so error
50
+ boundaries can catch it instead of looking like an endless loading state.
51
+
52
+ ### `useQueryResult` (preferred for new UI)
53
+
54
+ Use when you need loading vs error vs timeout vs disconnected, last-good data,
55
+ or a retry button:
56
+
57
+ ```tsx
58
+ const { data, status, error, isStale, retry } = useQueryResult(api.tasks.list, { status: "open" });
59
+
60
+ if (status === "loading" && !data) return <Spinner />;
61
+ if (status === "error") {
62
+ return <button onClick={retry}>Retry: {error?.message}</button>;
63
+ }
64
+ // status success | timeout | disconnected — data may still be last-good (isStale)
65
+ ```
66
+
67
+ Statuses: `skip` | `loading` | `success` | `error` | `timeout` | `disconnected`.
68
+ Soft timeout default is 15s (subscription stays alive; does not reject).
69
+
70
+ ### Connection state
71
+
72
+ ```tsx
73
+ const { isWebSocketConnected, hasEverConnected, connectionRetries } = useConvexConnectionState();
74
+ ```
75
+
76
+ This reflects the real WebSocket lifecycle (not a stub). Mutations/actions
77
+ reject with `GonvexClientError` on timeout or disconnect and never hang forever.
78
+
79
+ ## Native Google auth
80
+
81
+ Enable Google for the project and generate a configured auth module:
82
+
83
+ ```bash
84
+ npx gonvex auth add google --origin http://localhost:5173
85
+ ```
86
+
87
+ ```tsx
88
+ import { GonvexAuthProvider, GoogleSignInButton, useGonvexAuth } from "./gonvex/auth";
89
+
90
+ function Root() {
91
+ return (
92
+ <GonvexAuthProvider client={client}>
93
+ <Account />
94
+ </GonvexAuthProvider>
95
+ );
96
+ }
97
+
98
+ function Account() {
99
+ const { activeTenant, user } = useGonvexAuth();
100
+ return <>{user?.email} · {activeTenant?.name}<GoogleSignInButton /></>;
101
+ }
102
+ ```
103
+
104
+ The provider performs Authorization Code + PKCE against the Gonvex runtime and
105
+ attaches the resulting project-scoped session to the realtime client. Access tokens
106
+ are short-lived and refresh tokens rotate across tabs. Multi-tenant memberships are
107
+ verified by the runtime and switched with `setActiveTenant`. The provider does not
108
+ load a Google browser SDK.
49
109
 
50
110
  ## Convex Compatibility
51
111
 
@@ -56,7 +116,9 @@ The package also exports Convex-style names for incremental migration:
56
116
  - `ConvexReactClient`
57
117
  - `useConvex`
58
118
  - `useConvexAuth`
119
+ - `useConvexConnectionState`
59
120
  - `usePaginatedQuery`
121
+ - `useQueryResult`
60
122
 
61
123
  ## Related Packages
62
124
 
package/dist/index.d.ts CHANGED
@@ -1,33 +1,122 @@
1
- import { type ReactNode } from "react";
2
- import { ConvexReactClient, type FunctionReference, type GonvexClient } from "@gonvex/client";
1
+ import { type ButtonHTMLAttributes, type ReactNode } from "react";
2
+ import { ConvexReactClient, type ConnectionState, type FunctionReference, type GonvexClient } from "@gonvex/client";
3
3
  import type { JsonValue } from "@gonvex/protocol";
4
+ export { GonvexClientError, type ConnectionState } from "@gonvex/client";
4
5
  export declare const ConvexProvider: typeof GonvexProvider;
5
6
  export declare function GonvexProvider(props: {
6
7
  client: GonvexClient;
7
8
  children: ReactNode;
8
9
  }): import("react/jsx-runtime").JSX.Element;
9
10
  export { ConvexReactClient };
10
- type AuthState = {
11
+ export type AuthState = {
11
12
  isLoading: boolean;
12
13
  isAuthenticated: boolean;
13
14
  fetchAccessToken?: (args: {
14
15
  forceRefreshToken: boolean;
15
16
  }) => Promise<string | null>;
16
17
  };
18
+ export type GonvexAuthUser = {
19
+ id: string;
20
+ email?: string;
21
+ emailVerified: boolean;
22
+ name?: string;
23
+ picture?: string;
24
+ provider: "google" | string;
25
+ };
26
+ export type GonvexAuthTenant = {
27
+ id: string;
28
+ name: string;
29
+ role: "owner" | "admin" | "member" | "viewer" | string;
30
+ permissions?: Record<string, unknown>;
31
+ };
32
+ export type GonvexAuthValue = AuthState & {
33
+ user: GonvexAuthUser | null;
34
+ tenants: GonvexAuthTenant[];
35
+ activeTenant: GonvexAuthTenant | null;
36
+ error: string | null;
37
+ signIn: () => Promise<void>;
38
+ signOut: (options?: {
39
+ allDevices?: boolean;
40
+ }) => Promise<void>;
41
+ setActiveTenant: (tenantId: string) => Promise<void>;
42
+ refreshMemberships: () => Promise<GonvexAuthTenant[]>;
43
+ createTenant: (name: string) => Promise<GonvexAuthTenant>;
44
+ inviteMember: (tenantId: string, email: string, options?: {
45
+ role?: GonvexAuthTenant["role"];
46
+ permissions?: Record<string, unknown>;
47
+ }) => Promise<void>;
48
+ revokeInvitation: (tenantId: string, email: string) => Promise<void>;
49
+ removeMember: (tenantId: string, userId: string) => Promise<void>;
50
+ };
51
+ export type GonvexAuthConfig = {
52
+ runtimeUrl: string;
53
+ projectId: string;
54
+ callbackPath?: string;
55
+ };
17
56
  export declare function ConvexProviderWithAuth(props: {
18
57
  client: ConvexReactClient;
19
58
  children: ReactNode;
20
59
  useAuth: () => AuthState;
21
60
  }): import("react/jsx-runtime").JSX.Element;
61
+ export declare function GonvexAuthProvider(props: GonvexAuthConfig & {
62
+ client: GonvexClient;
63
+ children: ReactNode;
64
+ }): import("react/jsx-runtime").JSX.Element;
65
+ export declare function useGonvexAuth(): GonvexAuthValue;
66
+ export declare function GonvexGoogleAuthButton(props: ButtonHTMLAttributes<HTMLButtonElement> & {
67
+ signOutLabel?: string;
68
+ }): import("react/jsx-runtime").JSX.Element;
69
+ export declare function createGonvexAuth(config: GonvexAuthConfig): {
70
+ GonvexAuthProvider: (props: {
71
+ client: GonvexClient;
72
+ children: ReactNode;
73
+ }) => import("react/jsx-runtime").JSX.Element;
74
+ GoogleSignInButton: typeof GonvexGoogleAuthButton;
75
+ useGonvexAuth: typeof useGonvexAuth;
76
+ };
77
+ export type QueryStatus = "skip" | "loading" | "success" | "error" | "timeout" | "disconnected";
78
+ export type UseQueryResultOptions = {
79
+ /**
80
+ * Soft "pending too long" signal for the live subscription. When no result
81
+ * or error has arrived within this window the status becomes `timeout`
82
+ * (the subscription stays alive; `retry()` re-requests). Default 15s.
83
+ * `0` disables.
84
+ */
85
+ timeoutMs?: number;
86
+ /**
87
+ * Keep showing the last successful data (with `isStale: true`) while the
88
+ * query is erroring, timing out, or disconnected. Default true.
89
+ */
90
+ keepPreviousData?: boolean;
91
+ };
92
+ export type UseQueryResult<T> = {
93
+ data: T | undefined;
94
+ status: QueryStatus;
95
+ error: Error | null;
96
+ isLoading: boolean;
97
+ isError: boolean;
98
+ isSuccess: boolean;
99
+ /** True while showing last good data during an error/timeout/reconnect. */
100
+ isStale: boolean;
101
+ /** Re-request the query from the server (drops error/timeout state). */
102
+ retry: () => void;
103
+ };
104
+ /**
105
+ * Live query hook with an explicit status surface. Unlike `useQuery`, this
106
+ * distinguishes loading / success / error / timeout / disconnected, keeps the
107
+ * last good result while reconnecting, and exposes `retry()`.
108
+ */
109
+ export declare function useQueryResult<T = JsonValue>(ref: FunctionReference, args?: JsonValue | "skip", options?: UseQueryResultOptions): UseQueryResult<T>;
22
110
  export declare function useQuery<T = JsonValue>(ref: FunctionReference, args?: JsonValue | "skip"): T | undefined;
23
- export declare function useMutation(ref: FunctionReference): (args?: JsonValue) => Promise<JsonValue>;
24
- export declare function useAction(ref: FunctionReference): (args?: JsonValue) => Promise<JsonValue>;
111
+ export type UseMutationOptions = {
112
+ /** Per-call timeout override forwarded to the client. `0` disables. */
113
+ timeoutMs?: number;
114
+ };
115
+ export declare function useMutation(ref: FunctionReference, options?: UseMutationOptions): (args?: JsonValue) => Promise<JsonValue>;
116
+ export declare function useAction(ref: FunctionReference, options?: UseMutationOptions): (args?: JsonValue) => Promise<JsonValue>;
25
117
  export declare function useConvex(): GonvexClient;
26
118
  export declare function useConvexAuth(): AuthState;
27
- export declare function useConvexConnectionState(): {
28
- hasInflightRequests: boolean;
29
- isWebSocketConnected: boolean;
30
- };
119
+ export declare function useConvexConnectionState(): ConnectionState;
31
120
  export declare function usePaginatedQuery<T = JsonValue>(ref: FunctionReference, args?: JsonValue | "skip", options?: {
32
121
  initialNumItems?: number;
33
122
  }): {
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { createContext, useContext, useEffect, useMemo, useState } from "react";
3
- import { ConvexReactClient } from "@gonvex/client";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
3
+ import { ConvexReactClient, GonvexClientError } from "@gonvex/client";
4
+ export { GonvexClientError } from "@gonvex/client";
4
5
  const GonvexContext = createContext(null);
5
6
  const GonvexAuthContext = createContext({ isLoading: false, isAuthenticated: true });
6
7
  export const ConvexProvider = GonvexProvider;
@@ -8,6 +9,15 @@ export function GonvexProvider(props) {
8
9
  return _jsx(GonvexContext.Provider, { value: props.client, children: props.children });
9
10
  }
10
11
  export { ConvexReactClient };
12
+ class GonvexAuthRequestError extends Error {
13
+ status;
14
+ constructor(message, status) {
15
+ super(message);
16
+ this.name = "GonvexAuthRequestError";
17
+ this.status = status;
18
+ }
19
+ }
20
+ const ManagedAuthContext = createContext(null);
11
21
  export function ConvexProviderWithAuth(props) {
12
22
  const auth = props.useAuth();
13
23
  const [tokenReady, setTokenReady] = useState(false);
@@ -34,25 +44,669 @@ export function ConvexProviderWithAuth(props) {
34
44
  const shouldHoldChildren = auth.isLoading || (auth.isAuthenticated && !tokenReady);
35
45
  return (_jsx(GonvexAuthContext.Provider, { value: authValue, children: _jsx(GonvexProvider, { client: props.client, children: shouldHoldChildren ? null : props.children }) }));
36
46
  }
47
+ /**
48
+ * Native Gonvex authentication. The runtime performs the one centrally
49
+ * configured Google OAuth flow, while each app uses PKCE and receives a
50
+ * project-scoped Gonvex session. No Firebase or Google SDK is loaded in the
51
+ * browser.
52
+ */
53
+ // Dedupe callback bootstrap across React StrictMode remounts so the OAuth
54
+ // code+PKCE exchange runs once. Without this, the first effect's finally
55
+ // clears sessionStorage PKCE before the remount can finish verification.
56
+ const authBootstrapPromises = new Map();
57
+ export function GonvexAuthProvider(props) {
58
+ const runtimeUrl = props.runtimeUrl.replace(/\/+$/, "");
59
+ const callbackPath = normalizeCallbackPath(props.callbackPath ?? "/");
60
+ const storageKey = `gonvex-auth:${encodeURIComponent(runtimeUrl)}:${props.projectId}`;
61
+ const pkceStorageKey = `${storageKey}:pkce`;
62
+ const [session, setSession] = useState(() => readAuthSession(storageKey));
63
+ const [isLoading, setIsLoading] = useState(true);
64
+ const [error, setError] = useState(null);
65
+ const [refreshRetryAt, setRefreshRetryAt] = useState(0);
66
+ const sessionRef = useRef(session);
67
+ const refreshRef = useRef(null);
68
+ const installSession = useCallback((next, persist = true) => {
69
+ sessionRef.current = next;
70
+ if (next) {
71
+ if (persist)
72
+ safeLocalStorageSet(storageKey, JSON.stringify(next));
73
+ props.client.setAuth({ project: props.projectId, tenant: next.activeTenantId, token: next.accessToken });
74
+ }
75
+ else {
76
+ if (persist)
77
+ safeLocalStorageRemove(storageKey);
78
+ props.client.setAuth({ project: props.projectId, tenant: undefined, token: undefined });
79
+ }
80
+ setSession(next);
81
+ }, [props.client, props.projectId, storageKey]);
82
+ useEffect(() => {
83
+ let cancelled = false;
84
+ let bootstrap = authBootstrapPromises.get(storageKey);
85
+ if (!bootstrap) {
86
+ bootstrap = bootstrapGonvexAuth({ callbackPath, pkceStorageKey, projectId: props.projectId, runtimeUrl, storageKey })
87
+ .finally(() => {
88
+ // Keep the resolved promise briefly so a StrictMode remount attaches
89
+ // to the same result instead of re-running a spent OAuth code.
90
+ window.setTimeout(() => {
91
+ if (authBootstrapPromises.get(storageKey) === bootstrap) {
92
+ authBootstrapPromises.delete(storageKey);
93
+ }
94
+ }, 0);
95
+ });
96
+ authBootstrapPromises.set(storageKey, bootstrap);
97
+ }
98
+ void bootstrap.then((next) => {
99
+ if (!cancelled)
100
+ installSession(next);
101
+ }).catch((cause) => {
102
+ if (!cancelled) {
103
+ installSession(null);
104
+ setError(cause instanceof Error ? cause.message : "Google sign-in failed.");
105
+ }
106
+ }).finally(() => {
107
+ if (!cancelled)
108
+ setIsLoading(false);
109
+ });
110
+ return () => { cancelled = true; };
111
+ }, [callbackPath, installSession, pkceStorageKey, props.projectId, runtimeUrl, storageKey]);
112
+ const refreshSession = useCallback(async (force = false) => {
113
+ if (refreshRef.current)
114
+ return refreshRef.current;
115
+ let attemptedRefreshToken = "";
116
+ const request = withBrowserAuthLock(`${storageKey}:refresh`, async () => {
117
+ const current = readAuthSession(storageKey) ?? sessionRef.current;
118
+ if (!current || current.refreshExpiresAt <= Date.now())
119
+ return null;
120
+ if (!force && current.expiresAt > Date.now() + 60_000)
121
+ return current;
122
+ attemptedRefreshToken = current.refreshToken;
123
+ const next = await requestGonvexAuthToken(runtimeUrl, {
124
+ grantType: "refresh_token",
125
+ project: props.projectId,
126
+ refreshToken: current.refreshToken,
127
+ tenant: current.activeTenantId,
128
+ });
129
+ // Persist the rotated token before releasing the cross-tab lock. The
130
+ // next waiter must never read and reuse the just-consumed refresh token.
131
+ safeLocalStorageSet(storageKey, JSON.stringify(next));
132
+ setRefreshRetryAt(0);
133
+ setError(null);
134
+ return next;
135
+ }).then((next) => {
136
+ if (next) {
137
+ setRefreshRetryAt(0);
138
+ setError(null);
139
+ }
140
+ installSession(next);
141
+ return next;
142
+ }).catch((cause) => {
143
+ const latest = readAuthSession(storageKey);
144
+ if (latest && attemptedRefreshToken && latest.refreshToken !== attemptedRefreshToken) {
145
+ // Another tab completed the one permitted rotation while this request
146
+ // was in flight. Adopt its winner instead of erasing shared auth state.
147
+ installSession(latest);
148
+ setRefreshRetryAt(0);
149
+ setError(null);
150
+ return latest;
151
+ }
152
+ if (isFatalRefreshError(cause)) {
153
+ installSession(null);
154
+ setRefreshRetryAt(0);
155
+ setError(cause instanceof Error ? cause.message : "Your session expired. Please sign in again.");
156
+ return null;
157
+ }
158
+ // Network failures, timeouts, rate limits, and server outages must not
159
+ // destroy a valid refresh credential. Keep it and retry shortly.
160
+ if (sessionRef.current)
161
+ setRefreshRetryAt(Date.now() + 5_000);
162
+ setError("Gonvex could not refresh your session. Retrying shortly…");
163
+ return null;
164
+ }).finally(() => {
165
+ refreshRef.current = null;
166
+ });
167
+ refreshRef.current = request;
168
+ return request;
169
+ }, [installSession, props.projectId, runtimeUrl, storageKey]);
170
+ useEffect(() => {
171
+ if (!session)
172
+ return;
173
+ const scheduledAt = Math.max(session.expiresAt - 60_000, refreshRetryAt);
174
+ const delay = Math.max(0, scheduledAt - Date.now());
175
+ const timeout = window.setTimeout(() => { void refreshSession(); }, delay);
176
+ return () => window.clearTimeout(timeout);
177
+ }, [refreshRetryAt, refreshSession, session]);
178
+ useEffect(() => {
179
+ const onStorage = (event) => {
180
+ if (event.key !== storageKey)
181
+ return;
182
+ installSession(readAuthSession(storageKey), false);
183
+ };
184
+ window.addEventListener("storage", onStorage);
185
+ return () => window.removeEventListener("storage", onStorage);
186
+ }, [installSession, storageKey]);
187
+ const signIn = useCallback(async () => {
188
+ setError(null);
189
+ const verifier = randomBase64Url(64);
190
+ const state = randomBase64Url(32);
191
+ const challengeBytes = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(verifier));
192
+ const challenge = bytesToBase64Url(new Uint8Array(challengeBytes));
193
+ const redirectUri = new URL(callbackPath, window.location.origin).toString();
194
+ const returnTo = `${window.location.pathname}${window.location.search}${window.location.hash}`;
195
+ safeSessionStorageSet(pkceStorageKey, JSON.stringify({ state, verifier, redirectUri, returnTo, createdAt: Date.now() }));
196
+ const authorizeUrl = new URL(`${runtimeUrl}/auth/google/authorize`);
197
+ authorizeUrl.searchParams.set("project", props.projectId);
198
+ authorizeUrl.searchParams.set("redirect_uri", redirectUri);
199
+ authorizeUrl.searchParams.set("state", state);
200
+ authorizeUrl.searchParams.set("code_challenge", challenge);
201
+ authorizeUrl.searchParams.set("code_challenge_method", "S256");
202
+ window.location.assign(authorizeUrl.toString());
203
+ }, [callbackPath, pkceStorageKey, props.projectId, runtimeUrl]);
204
+ const signOut = useCallback(async (options) => {
205
+ const current = sessionRef.current;
206
+ installSession(null);
207
+ setError(null);
208
+ if (!current)
209
+ return;
210
+ await fetch(`${runtimeUrl}/auth/logout`, {
211
+ method: "POST",
212
+ headers: { authorization: `Bearer ${current.accessToken}`, "content-type": "application/json" },
213
+ body: JSON.stringify({ refreshToken: current.refreshToken, all: options?.allDevices === true }),
214
+ }).catch(() => undefined);
215
+ }, [installSession, runtimeUrl]);
216
+ const fetchAccessToken = useCallback(async (args) => {
217
+ const current = sessionRef.current;
218
+ if (!current)
219
+ return null;
220
+ if (!args.forceRefreshToken && current.expiresAt > Date.now() + 60_000)
221
+ return current.accessToken;
222
+ return (await refreshSession(args.forceRefreshToken))?.accessToken ?? null;
223
+ }, [refreshSession]);
224
+ const setActiveTenant = useCallback(async (tenantId) => {
225
+ const current = sessionRef.current;
226
+ if (!current || !current.tenants.some((tenant) => tenant.id === tenantId)) {
227
+ throw new Error(`Your account does not have access to tenant ${tenantId}.`);
228
+ }
229
+ installSession({ ...current, activeTenantId: tenantId });
230
+ }, [installSession]);
231
+ const refreshMemberships = useCallback(async () => {
232
+ const token = await fetchAccessToken({ forceRefreshToken: false });
233
+ if (!token)
234
+ throw new Error("Sign in before loading tenant memberships.");
235
+ const current = sessionRef.current;
236
+ const response = await fetch(`${runtimeUrl}/auth/me`, {
237
+ headers: { authorization: `Bearer ${token}`, ...(current.activeTenantId ? { "x-gonvex-tenant-id": current.activeTenantId } : {}) },
238
+ });
239
+ const payload = await response.json().catch(() => ({}));
240
+ if (!response.ok || !payload.user || !payload.tenants)
241
+ throw new Error(payload.error ?? "Could not load tenant memberships.");
242
+ installSession({ ...current, user: payload.user, tenants: payload.tenants, activeTenantId: payload.activeTenantId });
243
+ return payload.tenants;
244
+ }, [fetchAccessToken, installSession, runtimeUrl]);
245
+ const createTenant = useCallback(async (name) => {
246
+ const token = await fetchAccessToken({ forceRefreshToken: false });
247
+ if (!token)
248
+ throw new Error("Sign in before creating a tenant.");
249
+ const response = await fetch(`${runtimeUrl}/auth/tenants`, {
250
+ method: "POST", headers: { authorization: `Bearer ${token}`, "content-type": "application/json" },
251
+ body: JSON.stringify({ name }),
252
+ });
253
+ const payload = await response.json().catch(() => ({}));
254
+ if (!response.ok || !payload.tenant)
255
+ throw new Error(payload.error ?? "Could not create the tenant.");
256
+ const current = sessionRef.current;
257
+ installSession({ ...current, tenants: [...current.tenants.filter((tenant) => tenant.id !== payload.tenant.id), payload.tenant], activeTenantId: payload.tenant.id });
258
+ return payload.tenant;
259
+ }, [fetchAccessToken, installSession, runtimeUrl]);
260
+ const inviteMember = useCallback(async (tenantId, email, options) => {
261
+ const token = await fetchAccessToken({ forceRefreshToken: false });
262
+ if (!token)
263
+ throw new Error("Sign in before inviting a member.");
264
+ const response = await fetch(`${runtimeUrl}/auth/tenants/${encodeURIComponent(tenantId)}/members`, {
265
+ method: "POST", headers: { authorization: `Bearer ${token}`, "content-type": "application/json" },
266
+ body: JSON.stringify({ email, role: options?.role ?? "member", permissions: options?.permissions ?? {} }),
267
+ });
268
+ const payload = await response.json().catch(() => ({}));
269
+ if (!response.ok)
270
+ throw new Error(payload.error ?? "Could not invite the member.");
271
+ }, [fetchAccessToken, runtimeUrl]);
272
+ const removeMember = useCallback(async (tenantId, userId) => {
273
+ const token = await fetchAccessToken({ forceRefreshToken: false });
274
+ if (!token)
275
+ throw new Error("Sign in before removing a member.");
276
+ const response = await fetch(`${runtimeUrl}/auth/tenants/${encodeURIComponent(tenantId)}/members/${encodeURIComponent(userId)}`, {
277
+ method: "DELETE", headers: { authorization: `Bearer ${token}` },
278
+ });
279
+ const payload = await response.json().catch(() => ({}));
280
+ if (!response.ok)
281
+ throw new Error(payload.error ?? "Could not remove the member.");
282
+ }, [fetchAccessToken, runtimeUrl]);
283
+ const revokeInvitation = useCallback(async (tenantId, email) => {
284
+ const token = await fetchAccessToken({ forceRefreshToken: false });
285
+ if (!token)
286
+ throw new Error("Sign in before revoking an invitation.");
287
+ const response = await fetch(`${runtimeUrl}/auth/tenants/${encodeURIComponent(tenantId)}/invitations/${encodeURIComponent(email)}`, {
288
+ method: "DELETE", headers: { authorization: `Bearer ${token}` },
289
+ });
290
+ const payload = await response.json().catch(() => ({}));
291
+ if (!response.ok)
292
+ throw new Error(payload.error ?? "Could not revoke the invitation.");
293
+ }, [fetchAccessToken, runtimeUrl]);
294
+ const activeTenant = session?.tenants.find((tenant) => tenant.id === session.activeTenantId) ?? null;
295
+ const authValue = useMemo(() => ({
296
+ isLoading,
297
+ isAuthenticated: Boolean(session && session.refreshExpiresAt > Date.now()),
298
+ fetchAccessToken,
299
+ user: session?.user ?? null,
300
+ tenants: session?.tenants ?? [],
301
+ activeTenant,
302
+ error,
303
+ signIn,
304
+ signOut,
305
+ setActiveTenant,
306
+ refreshMemberships,
307
+ createTenant,
308
+ inviteMember,
309
+ revokeInvitation,
310
+ removeMember,
311
+ }), [activeTenant, createTenant, error, fetchAccessToken, inviteMember, isLoading, refreshMemberships, removeMember, revokeInvitation, session, setActiveTenant, signIn, signOut]);
312
+ return (_jsx(ManagedAuthContext.Provider, { value: authValue, children: _jsx(GonvexAuthContext.Provider, { value: authValue, children: _jsx(GonvexProvider, { client: props.client, children: isLoading ? null : props.children }) }) }));
313
+ }
314
+ export function useGonvexAuth() {
315
+ const value = useContext(ManagedAuthContext);
316
+ if (!value)
317
+ throw new Error("GonvexAuthProvider is required");
318
+ return value;
319
+ }
320
+ export function GonvexGoogleAuthButton(props) {
321
+ const { signOutLabel = "Sign out", children, disabled, onClick, ...buttonProps } = props;
322
+ const auth = useGonvexAuth();
323
+ const label = auth.isLoading ? "Loading…" : auth.isAuthenticated ? signOutLabel : children ?? "Continue with Google";
324
+ return (_jsxs("button", { ...buttonProps, disabled: disabled || auth.isLoading, onClick: (event) => {
325
+ onClick?.(event);
326
+ if (event.defaultPrevented)
327
+ return;
328
+ void (auth.isAuthenticated ? auth.signOut() : auth.signIn());
329
+ }, type: buttonProps.type ?? "button", children: [!auth.isAuthenticated && !auth.isLoading ? _jsx(GoogleMark, {}) : null, _jsx("span", { children: label })] }));
330
+ }
331
+ export function createGonvexAuth(config) {
332
+ function ConfiguredGonvexAuthProvider(props) {
333
+ return _jsx(GonvexAuthProvider, { ...config, ...props });
334
+ }
335
+ return {
336
+ GonvexAuthProvider: ConfiguredGonvexAuthProvider,
337
+ GoogleSignInButton: GonvexGoogleAuthButton,
338
+ useGonvexAuth,
339
+ };
340
+ }
341
+ function GoogleMark() {
342
+ return (_jsxs("svg", { "aria-hidden": "true", height: "18", viewBox: "0 0 18 18", width: "18", children: [_jsx("path", { fill: "#4285F4", d: "M17.64 9.2c0-.64-.06-1.25-.16-1.84H9v3.48h4.84a4.14 4.14 0 0 1-1.8 2.72v2.26h2.9c1.7-1.56 2.7-3.86 2.7-6.62Z" }), _jsx("path", { fill: "#34A853", d: "M9 18c2.43 0 4.47-.8 5.96-2.18l-2.9-2.26c-.8.54-1.84.86-3.06.86-2.35 0-4.34-1.58-5.05-3.72H.96v2.34A9 9 0 0 0 9 18Z" }), _jsx("path", { fill: "#FBBC05", d: "M3.95 10.7a5.41 5.41 0 0 1 0-3.4V4.96H.96a9 9 0 0 0 0 8.08l2.99-2.34Z" }), _jsx("path", { fill: "#EA4335", d: "M9 3.58c1.32 0 2.5.45 3.44 1.35l2.58-2.58A8.62 8.62 0 0 0 9 0 9 9 0 0 0 .96 4.96L3.95 7.3C4.66 5.16 6.65 3.58 9 3.58Z" })] }));
343
+ }
344
+ async function bootstrapGonvexAuth(options) {
345
+ const current = readAuthSession(options.storageKey);
346
+ const url = new URL(window.location.href);
347
+ const onCallbackPath = url.pathname === options.callbackPath;
348
+ const code = onCallbackPath ? url.searchParams.get("code") : null;
349
+ const returnedState = onCallbackPath ? url.searchParams.get("state") : null;
350
+ const callbackError = onCallbackPath ? url.searchParams.get("error") : null;
351
+ if (!code && !callbackError) {
352
+ if (!current)
353
+ return null;
354
+ if (current.expiresAt > Date.now() + 30_000)
355
+ return current;
356
+ try {
357
+ return await withBrowserAuthLock(`${options.storageKey}:refresh`, async () => {
358
+ const latest = readAuthSession(options.storageKey) ?? current;
359
+ if (latest.expiresAt > Date.now() + 30_000)
360
+ return latest;
361
+ if (latest.refreshExpiresAt <= Date.now())
362
+ throw new GonvexAuthRequestError("Your session expired. Please sign in again.", 401);
363
+ const next = await requestGonvexAuthToken(options.runtimeUrl, {
364
+ grantType: "refresh_token", project: options.projectId,
365
+ refreshToken: latest.refreshToken, tenant: latest.activeTenantId,
366
+ });
367
+ safeLocalStorageSet(options.storageKey, JSON.stringify(next));
368
+ return next;
369
+ });
370
+ }
371
+ catch (cause) {
372
+ if (!isFatalRefreshError(cause))
373
+ return readAuthSession(options.storageKey) ?? current;
374
+ throw cause;
375
+ }
376
+ }
377
+ const pkce = readPKCE(options.pkceStorageKey);
378
+ // Prefer surfacing the runtime/Google error when PKCE is missing (e.g. after
379
+ // a StrictMode remount or a second tab), rather than always saying "verified".
380
+ if (callbackError) {
381
+ const messages = {
382
+ access_denied: "Google sign-in was cancelled.",
383
+ invitation_required: "This app is invite-only. Ask an administrator to invite your verified Google email.",
384
+ verified_google_email_required: "Google must provide a verified email address for this app.",
385
+ membership_setup_failed: "Your account was verified, but its workspace could not be prepared. Please try again.",
386
+ google_exchange_failed: "Google rejected the sign-in code exchange. Check GONVEX_GOOGLE_CLIENT_ID/SECRET and the broker callback URI.",
387
+ invalid_google_identity: "Google identity verification failed. Please try again.",
388
+ account_creation_failed: "Your Google account could not be linked. Please try again.",
389
+ code_creation_failed: "Gonvex could not finish creating a sign-in code. Please try again.",
390
+ };
391
+ safeSessionStorageRemove(options.pkceStorageKey);
392
+ clearAuthCallbackParams(url, pkce?.returnTo);
393
+ throw new Error(messages[callbackError] ?? `Google sign-in failed (${callbackError}). Please try again.`);
394
+ }
395
+ if (!pkce || !returnedState || returnedState !== pkce.state || Date.now() - pkce.createdAt > 10 * 60 * 1000) {
396
+ clearAuthCallbackParams(url, pkce?.returnTo);
397
+ throw new Error("The Google sign-in response could not be verified. Please try again.");
398
+ }
399
+ // Consume PKCE only after validation so a concurrent remount still sees it.
400
+ safeSessionStorageRemove(options.pkceStorageKey);
401
+ clearAuthCallbackParams(url, pkce.returnTo);
402
+ const session = await requestGonvexAuthToken(options.runtimeUrl, {
403
+ grantType: "authorization_code", project: options.projectId, code,
404
+ codeVerifier: pkce.verifier, redirectUri: pkce.redirectUri,
405
+ });
406
+ // Persist before returning so a StrictMode remount can recover the session
407
+ // even if the first effect was cancelled before installSession.
408
+ safeLocalStorageSet(options.storageKey, JSON.stringify(session));
409
+ return session;
410
+ }
411
+ async function requestGonvexAuthToken(runtimeUrl, body) {
412
+ const controller = new AbortController();
413
+ const timeout = window.setTimeout(() => controller.abort(), 15_000);
414
+ try {
415
+ const response = await fetch(`${runtimeUrl}/auth/token`, {
416
+ method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify(body), signal: controller.signal,
417
+ });
418
+ const payload = await response.json().catch(() => ({}));
419
+ if (!response.ok || !isGonvexAuthSession(payload)) {
420
+ throw new GonvexAuthRequestError(payload.error ?? "Gonvex could not finish sign-in.", response.ok ? 502 : response.status);
421
+ }
422
+ return payload;
423
+ }
424
+ catch (cause) {
425
+ if (controller.signal.aborted)
426
+ throw new Error("Gonvex did not finish sign-in in time. Please try again.");
427
+ throw cause;
428
+ }
429
+ finally {
430
+ window.clearTimeout(timeout);
431
+ }
432
+ }
433
+ function isFatalRefreshError(cause) {
434
+ return cause instanceof GonvexAuthRequestError && (cause.status === 400 || cause.status === 401 || cause.status === 403);
435
+ }
436
+ function isGonvexAuthSession(value) {
437
+ return Boolean(value.accessToken && value.expiresAt && value.refreshToken && value.refreshExpiresAt
438
+ && value.user?.id && Array.isArray(value.tenants));
439
+ }
440
+ async function withBrowserAuthLock(name, action) {
441
+ const locks = typeof navigator === "undefined"
442
+ ? undefined
443
+ : navigator.locks;
444
+ return locks ? locks.request(name, action) : withLocalStorageAuthLock(name, action);
445
+ }
446
+ async function withLocalStorageAuthLock(name, action) {
447
+ const key = `${name}:lease`;
448
+ const owner = randomBase64Url(16);
449
+ const deadline = Date.now() + 25_000;
450
+ while (Date.now() < deadline) {
451
+ try {
452
+ const current = JSON.parse(localStorage.getItem(key) ?? "null");
453
+ if (!current?.owner || Number(current.expiresAt) <= Date.now()) {
454
+ localStorage.setItem(key, JSON.stringify({ owner, expiresAt: Date.now() + 20_000 }));
455
+ const claimed = JSON.parse(localStorage.getItem(key) ?? "null");
456
+ if (claimed?.owner === owner) {
457
+ try {
458
+ return await action();
459
+ }
460
+ finally {
461
+ const latest = JSON.parse(localStorage.getItem(key) ?? "null");
462
+ if (latest?.owner === owner)
463
+ localStorage.removeItem(key);
464
+ }
465
+ }
466
+ }
467
+ }
468
+ catch {
469
+ return action();
470
+ }
471
+ await new Promise((resolve) => setTimeout(resolve, 30 + Math.floor(Math.random() * 40)));
472
+ }
473
+ throw new Error("Another tab is refreshing this session. Please try again.");
474
+ }
475
+ function safeLocalStorageSet(key, value) {
476
+ try {
477
+ localStorage.setItem(key, value);
478
+ }
479
+ catch { /* storage can be unavailable in hardened browsers */ }
480
+ }
481
+ function safeLocalStorageRemove(key) {
482
+ try {
483
+ localStorage.removeItem(key);
484
+ }
485
+ catch { /* storage can be unavailable in hardened browsers */ }
486
+ }
487
+ function safeSessionStorageSet(key, value) {
488
+ try {
489
+ sessionStorage.setItem(key, value);
490
+ }
491
+ catch { /* reported by the missing-state check after redirect */ }
492
+ }
493
+ function safeSessionStorageRemove(key) {
494
+ try {
495
+ sessionStorage.removeItem(key);
496
+ }
497
+ catch { /* nothing else to clean */ }
498
+ }
499
+ function normalizeCallbackPath(value) {
500
+ const path = value.trim();
501
+ if (!path.startsWith("/") || path.startsWith("//") || path.includes("?") || path.includes("#")) {
502
+ throw new Error("Gonvex auth callbackPath must be an absolute pathname");
503
+ }
504
+ return path;
505
+ }
506
+ function readAuthSession(key) {
507
+ if (typeof window === "undefined")
508
+ return null;
509
+ try {
510
+ const parsed = JSON.parse(localStorage.getItem(key) ?? "null");
511
+ if (!parsed?.accessToken || !parsed.refreshToken || !parsed.user?.id || !Array.isArray(parsed.tenants) || parsed.refreshExpiresAt <= Date.now()) {
512
+ safeLocalStorageRemove(key);
513
+ return null;
514
+ }
515
+ return parsed;
516
+ }
517
+ catch {
518
+ safeLocalStorageRemove(key);
519
+ return null;
520
+ }
521
+ }
522
+ function readPKCE(key) {
523
+ try {
524
+ const parsed = JSON.parse(sessionStorage.getItem(key) ?? "null");
525
+ if (!parsed?.state || !parsed.verifier || !parsed.redirectUri || !parsed.returnTo || !parsed.createdAt)
526
+ return null;
527
+ return parsed;
528
+ }
529
+ catch {
530
+ return null;
531
+ }
532
+ }
533
+ function clearAuthCallbackParams(url, returnTo) {
534
+ url.searchParams.delete("code");
535
+ url.searchParams.delete("state");
536
+ url.searchParams.delete("error");
537
+ const safeReturnTo = returnTo?.startsWith("/") && !returnTo.startsWith("//") ? returnTo : url.toString();
538
+ history.replaceState({}, "", safeReturnTo);
539
+ }
540
+ function randomBase64Url(byteLength) {
541
+ const bytes = new Uint8Array(byteLength);
542
+ crypto.getRandomValues(bytes);
543
+ return bytesToBase64Url(bytes);
544
+ }
545
+ function bytesToBase64Url(bytes) {
546
+ let binary = "";
547
+ for (const byte of bytes)
548
+ binary += String.fromCharCode(byte);
549
+ return btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
550
+ }
551
+ const DEFAULT_LIVE_QUERY_SLOW_MS = 15_000;
552
+ /**
553
+ * Live query hook with an explicit status surface. Unlike `useQuery`, this
554
+ * distinguishes loading / success / error / timeout / disconnected, keeps the
555
+ * last good result while reconnecting, and exposes `retry()`.
556
+ */
557
+ export function useQueryResult(ref, args = {}, options = {}) {
558
+ const client = useGonvexClient();
559
+ const path = ref.path;
560
+ const kind = ref.kind;
561
+ const argsKey = JSON.stringify(args);
562
+ const keepPreviousData = options.keepPreviousData !== false;
563
+ const timeoutMs = options.timeoutMs ?? DEFAULT_LIVE_QUERY_SLOW_MS;
564
+ const [state, setState] = useState({
565
+ data: undefined,
566
+ status: args === "skip" ? "skip" : "loading",
567
+ error: null,
568
+ isStale: false,
569
+ });
570
+ const slowTimerRef = useRef(null);
571
+ const clearSlowTimer = useCallback(() => {
572
+ if (slowTimerRef.current !== null) {
573
+ clearTimeout(slowTimerRef.current);
574
+ slowTimerRef.current = null;
575
+ }
576
+ }, []);
577
+ const startSlowTimer = useCallback(() => {
578
+ clearSlowTimer();
579
+ if (timeoutMs <= 0)
580
+ return;
581
+ slowTimerRef.current = setTimeout(() => {
582
+ slowTimerRef.current = null;
583
+ setState((previous) => {
584
+ if (previous.status !== "loading")
585
+ return previous;
586
+ return { ...previous, status: "timeout", isStale: previous.data !== undefined };
587
+ });
588
+ }, timeoutMs);
589
+ }, [clearSlowTimer, timeoutMs]);
590
+ useEffect(() => {
591
+ if (args === "skip") {
592
+ setState({ data: undefined, status: "skip", error: null, isStale: false });
593
+ return;
594
+ }
595
+ setState({ data: undefined, status: "loading", error: null, isStale: false });
596
+ startSlowTimer();
597
+ const unsubscribeScope = client.onSessionScopeChange(() => {
598
+ setState({ data: undefined, status: "loading", error: null, isStale: false });
599
+ startSlowTimer();
600
+ });
601
+ const unsubscribeQuery = client.subscribeQuery({ kind, path }, args, (message) => {
602
+ if (message.type === "query.result") {
603
+ clearSlowTimer();
604
+ setState({ data: message.result, status: "success", error: null, isStale: false });
605
+ }
606
+ if (message.type === "query.error") {
607
+ clearSlowTimer();
608
+ const error = new GonvexClientError(message.error, { code: "server", path, operation: "query" });
609
+ setState((previous) => ({
610
+ data: keepPreviousData ? previous.data : undefined,
611
+ status: "error",
612
+ error,
613
+ isStale: keepPreviousData && previous.data !== undefined,
614
+ }));
615
+ }
616
+ });
617
+ const applyConnection = (connection) => {
618
+ if (!connection.isWebSocketConnected) {
619
+ clearSlowTimer();
620
+ setState((previous) => {
621
+ if (previous.status === "skip")
622
+ return previous;
623
+ return {
624
+ data: keepPreviousData ? previous.data : undefined,
625
+ status: "disconnected",
626
+ error: previous.error,
627
+ isStale: keepPreviousData && previous.data !== undefined,
628
+ };
629
+ });
630
+ return;
631
+ }
632
+ // The client resubscribes live queries itself on reconnect; report
633
+ // loading until the fresh result lands.
634
+ setState((previous) => {
635
+ if (previous.status !== "disconnected")
636
+ return previous;
637
+ startSlowTimer();
638
+ return { ...previous, status: "loading" };
639
+ });
640
+ };
641
+ const unsubscribeConnection = typeof client.subscribeToConnectionState === "function"
642
+ ? (() => {
643
+ if (typeof client.connectionState === "function") {
644
+ applyConnection(client.connectionState());
645
+ }
646
+ return client.subscribeToConnectionState(applyConnection);
647
+ })()
648
+ : undefined;
649
+ return () => {
650
+ clearSlowTimer();
651
+ unsubscribeScope();
652
+ unsubscribeQuery();
653
+ unsubscribeConnection?.();
654
+ };
655
+ // eslint-disable-next-line react-hooks/exhaustive-deps
656
+ }, [client, kind, path, argsKey, keepPreviousData, startSlowTimer, clearSlowTimer]);
657
+ const retry = useCallback(() => {
658
+ if (args === "skip")
659
+ return;
660
+ setState((previous) => ({
661
+ data: previous.data,
662
+ status: "loading",
663
+ error: null,
664
+ isStale: previous.data !== undefined,
665
+ }));
666
+ startSlowTimer();
667
+ if (typeof client.retryQuery === "function") {
668
+ client.retryQuery({ kind, path }, JSON.parse(argsKey));
669
+ }
670
+ // eslint-disable-next-line react-hooks/exhaustive-deps
671
+ }, [client, kind, path, argsKey, startSlowTimer]);
672
+ return {
673
+ data: state.data,
674
+ status: state.status,
675
+ error: state.error,
676
+ isLoading: state.status === "loading",
677
+ isError: state.status === "error" || state.status === "timeout" || state.status === "disconnected",
678
+ isSuccess: state.status === "success",
679
+ isStale: state.isStale,
680
+ retry,
681
+ };
682
+ }
37
683
  export function useQuery(ref, args = {}) {
38
684
  const client = useGonvexClient();
39
685
  const [result, setResult] = useState();
686
+ const [error, setError] = useState(null);
40
687
  const path = ref.path;
41
688
  const kind = ref.kind;
42
689
  const argsKey = JSON.stringify(args);
43
690
  useEffect(() => {
44
691
  if (args === "skip") {
45
692
  setResult(undefined);
693
+ setError(null);
46
694
  return;
47
695
  }
48
696
  setResult(undefined);
49
- const unsubscribeScope = client.onSessionScopeChange(() => setResult(undefined));
697
+ setError(null);
698
+ const unsubscribeScope = client.onSessionScopeChange(() => {
699
+ setResult(undefined);
700
+ setError(null);
701
+ });
50
702
  const unsubscribeQuery = client.subscribeQuery({ kind, path }, args, (message) => {
51
703
  if (message.type === "query.result") {
52
704
  setResult(message.result);
705
+ setError(null);
53
706
  }
54
707
  if (message.type === "query.error") {
55
708
  setResult(undefined);
709
+ setError(new GonvexClientError(message.error, { code: "server", path, operation: "query" }));
56
710
  }
57
711
  });
58
712
  return () => {
@@ -60,15 +714,19 @@ export function useQuery(ref, args = {}) {
60
714
  unsubscribeQuery();
61
715
  };
62
716
  }, [client, kind, path, argsKey]);
717
+ // Convex-compatible: a failed query throws during render so error
718
+ // boundaries can catch it, instead of being indistinguishable from loading.
719
+ if (error)
720
+ throw error;
63
721
  return result;
64
722
  }
65
- export function useMutation(ref) {
723
+ export function useMutation(ref, options = {}) {
66
724
  const client = useGonvexClient();
67
- return (args = {}) => client.mutation(ref, args);
725
+ return (args = {}) => client.mutation(ref, args, options);
68
726
  }
69
- export function useAction(ref) {
727
+ export function useAction(ref, options = {}) {
70
728
  const client = useGonvexClient();
71
- return (args = {}) => client.action(ref, args);
729
+ return (args = {}) => client.action(ref, args, options);
72
730
  }
73
731
  export function useConvex() {
74
732
  return useGonvexClient();
@@ -76,8 +734,26 @@ export function useConvex() {
76
734
  export function useConvexAuth() {
77
735
  return useContext(GonvexAuthContext);
78
736
  }
737
+ const FALLBACK_CONNECTION_STATE = {
738
+ isWebSocketConnected: false,
739
+ hasEverConnected: false,
740
+ connectionCount: 0,
741
+ connectionRetries: 0,
742
+ hasInflightRequests: false,
743
+ inflightMutations: 0,
744
+ inflightActions: 0,
745
+ inflightOneShotQueries: 0,
746
+ };
79
747
  export function useConvexConnectionState() {
80
- return { hasInflightRequests: false, isWebSocketConnected: true };
748
+ const client = useGonvexClient();
749
+ const [state, setState] = useState(() => (typeof client.connectionState === "function" ? client.connectionState() : FALLBACK_CONNECTION_STATE));
750
+ useEffect(() => {
751
+ if (typeof client.subscribeToConnectionState !== "function")
752
+ return;
753
+ setState(client.connectionState());
754
+ return client.subscribeToConnectionState(setState);
755
+ }, [client]);
756
+ return state;
81
757
  }
82
758
  export function usePaginatedQuery(ref, args = {}, options = {}) {
83
759
  const pageArgs = args === "skip" ? "skip" : { ...(isRecord(args) ? args : { args }), paginationOpts: { numItems: options.initialNumItems ?? 25, cursor: null } };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gonvex/react",
3
- "version": "0.1.9",
3
+ "version": "0.1.11",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -13,15 +13,20 @@
13
13
  },
14
14
  "types": "./dist/index.d.ts",
15
15
  "dependencies": {
16
- "@gonvex/client": "0.1.9",
17
- "@gonvex/protocol": "0.1.9"
16
+ "@gonvex/client": "0.1.11",
17
+ "@gonvex/protocol": "0.1.11"
18
18
  },
19
19
  "peerDependencies": {
20
20
  "react": ">=19"
21
21
  },
22
22
  "devDependencies": {
23
+ "@testing-library/react": "^16.3.2",
23
24
  "@types/react": "^19.2.14",
24
- "typescript": "^6.0.3"
25
+ "jsdom": "^29.1.1",
26
+ "react": "^19.2.7",
27
+ "react-dom": "^19.2.7",
28
+ "typescript": "^6.0.3",
29
+ "vitest": "^4.1.6"
25
30
  },
26
31
  "main": "./dist/index.js",
27
32
  "files": [
@@ -31,6 +36,7 @@
31
36
  "scripts": {
32
37
  "build": "tsc -p tsconfig.json",
33
38
  "dev": "tsc -p tsconfig.json --watch --preserveWatchOutput",
39
+ "test": "vitest run",
34
40
  "typecheck": "tsc -p tsconfig.json --noEmit"
35
41
  }
36
42
  }