@neutralauth/internal-auth 0.10.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.
Files changed (147) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +39 -0
  3. package/dist/auth-config.d.ts +43 -0
  4. package/dist/auth-config.d.ts.map +1 -0
  5. package/dist/auth-config.js +43 -0
  6. package/dist/auth-config.js.map +1 -0
  7. package/dist/auth-options.d.ts +3 -0
  8. package/dist/auth-options.d.ts.map +1 -0
  9. package/dist/auth-options.js +40 -0
  10. package/dist/auth-options.js.map +1 -0
  11. package/dist/auth.d.ts +2 -0
  12. package/dist/auth.d.ts.map +1 -0
  13. package/dist/auth.js +4 -0
  14. package/dist/auth.js.map +1 -0
  15. package/dist/client/adapter-utils.d.ts +66 -0
  16. package/dist/client/adapter-utils.d.ts.map +1 -0
  17. package/dist/client/adapter-utils.js +437 -0
  18. package/dist/client/adapter-utils.js.map +1 -0
  19. package/dist/client/adapter.d.ts +14 -0
  20. package/dist/client/adapter.d.ts.map +1 -0
  21. package/dist/client/adapter.js +274 -0
  22. package/dist/client/adapter.js.map +1 -0
  23. package/dist/client/create-api.d.ts +141 -0
  24. package/dist/client/create-api.d.ts.map +1 -0
  25. package/dist/client/create-api.js +205 -0
  26. package/dist/client/create-api.js.map +1 -0
  27. package/dist/client/create-client.d.ts +183 -0
  28. package/dist/client/create-client.d.ts.map +1 -0
  29. package/dist/client/create-client.js +311 -0
  30. package/dist/client/create-client.js.map +1 -0
  31. package/dist/client/create-schema.d.ts +19 -0
  32. package/dist/client/create-schema.d.ts.map +1 -0
  33. package/dist/client/create-schema.js +114 -0
  34. package/dist/client/create-schema.js.map +1 -0
  35. package/dist/client/index.d.ts +7 -0
  36. package/dist/client/index.d.ts.map +1 -0
  37. package/dist/client/index.js +10 -0
  38. package/dist/client/index.js.map +1 -0
  39. package/dist/client/plugins/index.d.ts +3 -0
  40. package/dist/client/plugins/index.d.ts.map +1 -0
  41. package/dist/client/plugins/index.js +3 -0
  42. package/dist/client/plugins/index.js.map +1 -0
  43. package/dist/component/_generated/api.d.ts +36 -0
  44. package/dist/component/_generated/api.d.ts.map +1 -0
  45. package/dist/component/_generated/api.js +31 -0
  46. package/dist/component/_generated/api.js.map +1 -0
  47. package/dist/component/_generated/component.d.ts +787 -0
  48. package/dist/component/_generated/component.d.ts.map +1 -0
  49. package/dist/component/_generated/component.js +11 -0
  50. package/dist/component/_generated/component.js.map +1 -0
  51. package/dist/component/_generated/dataModel.d.ts +46 -0
  52. package/dist/component/_generated/dataModel.d.ts.map +1 -0
  53. package/dist/component/_generated/dataModel.js +11 -0
  54. package/dist/component/_generated/dataModel.js.map +1 -0
  55. package/dist/component/_generated/server.d.ts +121 -0
  56. package/dist/component/_generated/server.d.ts.map +1 -0
  57. package/dist/component/_generated/server.js +78 -0
  58. package/dist/component/_generated/server.js.map +1 -0
  59. package/dist/component/adapter.d.ts +130 -0
  60. package/dist/component/adapter.d.ts.map +1 -0
  61. package/dist/component/adapter.js +5 -0
  62. package/dist/component/adapter.js.map +1 -0
  63. package/dist/component/adapterTest.d.ts +10 -0
  64. package/dist/component/adapterTest.d.ts.map +1 -0
  65. package/dist/component/adapterTest.js +409 -0
  66. package/dist/component/adapterTest.js.map +1 -0
  67. package/dist/component/convex.config.d.ts +3 -0
  68. package/dist/component/convex.config.d.ts.map +1 -0
  69. package/dist/component/convex.config.js +4 -0
  70. package/dist/component/convex.config.js.map +1 -0
  71. package/dist/component/schema.d.ts +474 -0
  72. package/dist/component/schema.d.ts.map +1 -0
  73. package/dist/component/schema.js +139 -0
  74. package/dist/component/schema.js.map +1 -0
  75. package/dist/nextjs/client.d.ts +4 -0
  76. package/dist/nextjs/client.d.ts.map +1 -0
  77. package/dist/nextjs/client.js +37 -0
  78. package/dist/nextjs/client.js.map +1 -0
  79. package/dist/nextjs/index.d.ts +22 -0
  80. package/dist/nextjs/index.d.ts.map +1 -0
  81. package/dist/nextjs/index.js +98 -0
  82. package/dist/nextjs/index.js.map +1 -0
  83. package/dist/plugins/convex/client.d.ts +6 -0
  84. package/dist/plugins/convex/client.d.ts.map +1 -0
  85. package/dist/plugins/convex/client.js +7 -0
  86. package/dist/plugins/convex/client.js.map +1 -0
  87. package/dist/plugins/convex/index.d.ts +322 -0
  88. package/dist/plugins/convex/index.d.ts.map +1 -0
  89. package/dist/plugins/convex/index.js +422 -0
  90. package/dist/plugins/convex/index.js.map +1 -0
  91. package/dist/plugins/cross-domain/client.d.ts +132 -0
  92. package/dist/plugins/cross-domain/client.d.ts.map +1 -0
  93. package/dist/plugins/cross-domain/client.js +192 -0
  94. package/dist/plugins/cross-domain/client.js.map +1 -0
  95. package/dist/plugins/cross-domain/index.d.ts +51 -0
  96. package/dist/plugins/cross-domain/index.d.ts.map +1 -0
  97. package/dist/plugins/cross-domain/index.js +173 -0
  98. package/dist/plugins/cross-domain/index.js.map +1 -0
  99. package/dist/plugins/index.d.ts +3 -0
  100. package/dist/plugins/index.d.ts.map +1 -0
  101. package/dist/plugins/index.js +3 -0
  102. package/dist/plugins/index.js.map +1 -0
  103. package/dist/react/index.d.ts +80 -0
  104. package/dist/react/index.d.ts.map +1 -0
  105. package/dist/react/index.js +190 -0
  106. package/dist/react/index.js.map +1 -0
  107. package/dist/react-start/index.d.ts +13 -0
  108. package/dist/react-start/index.d.ts.map +1 -0
  109. package/dist/react-start/index.js +101 -0
  110. package/dist/react-start/index.js.map +1 -0
  111. package/dist/utils/index.d.ts +33 -0
  112. package/dist/utils/index.d.ts.map +1 -0
  113. package/dist/utils/index.js +91 -0
  114. package/dist/utils/index.js.map +1 -0
  115. package/package.json +208 -0
  116. package/src/auth-config.ts +80 -0
  117. package/src/auth-options.ts +54 -0
  118. package/src/auth.ts +4 -0
  119. package/src/client/adapter-utils.ts +639 -0
  120. package/src/client/adapter.test.ts +83 -0
  121. package/src/client/adapter.ts +363 -0
  122. package/src/client/create-api.ts +339 -0
  123. package/src/client/create-client.ts +452 -0
  124. package/src/client/create-schema.ts +166 -0
  125. package/src/client/index.ts +22 -0
  126. package/src/client/plugins/index.ts +2 -0
  127. package/src/component/_generated/api.ts +52 -0
  128. package/src/component/_generated/component.ts +2008 -0
  129. package/src/component/_generated/dataModel.ts +60 -0
  130. package/src/component/_generated/server.ts +161 -0
  131. package/src/component/adapter.ts +13 -0
  132. package/src/component/adapterTest.ts +505 -0
  133. package/src/component/convex.config.ts +5 -0
  134. package/src/component/schema.ts +142 -0
  135. package/src/nextjs/client.tsx +54 -0
  136. package/src/nextjs/index.ts +152 -0
  137. package/src/plugins/convex/client.ts +9 -0
  138. package/src/plugins/convex/index.ts +596 -0
  139. package/src/plugins/cross-domain/client.test.ts +217 -0
  140. package/src/plugins/cross-domain/client.ts +234 -0
  141. package/src/plugins/cross-domain/index.ts +199 -0
  142. package/src/plugins/index.ts +2 -0
  143. package/src/react/index.tsx +304 -0
  144. package/src/react-start/index.ts +153 -0
  145. package/src/react-start/vite-env.d.ts +2 -0
  146. package/src/test.ts +18 -0
  147. package/src/utils/index.ts +171 -0
@@ -0,0 +1,192 @@
1
+ export function parseSetCookieHeader(header) {
2
+ const cookieMap = new Map();
3
+ const cookies = header.split(", ");
4
+ cookies.forEach((cookie) => {
5
+ const [nameValue, ...attributes] = cookie.split("; ");
6
+ const [name, value] = nameValue.split("=");
7
+ const cookieObj = { value };
8
+ attributes.forEach((attr) => {
9
+ const [attrName, attrValue] = attr.split("=");
10
+ cookieObj[attrName.toLowerCase()] = attrValue;
11
+ });
12
+ cookieMap.set(name, cookieObj);
13
+ });
14
+ return cookieMap;
15
+ }
16
+ export function getSetCookie(header, prevCookie) {
17
+ const parsed = parseSetCookieHeader(header);
18
+ let toSetCookie = {};
19
+ parsed.forEach((cookie, key) => {
20
+ const expiresAt = cookie["expires"];
21
+ const maxAge = cookie["max-age"];
22
+ const expires = expiresAt
23
+ ? new Date(String(expiresAt))
24
+ : maxAge
25
+ ? new Date(Date.now() + Number(maxAge) * 1000)
26
+ : null;
27
+ toSetCookie[key] = {
28
+ value: cookie["value"],
29
+ expires: expires ? expires.toISOString() : null,
30
+ };
31
+ });
32
+ if (prevCookie) {
33
+ try {
34
+ const prevCookieParsed = JSON.parse(prevCookie);
35
+ toSetCookie = {
36
+ ...prevCookieParsed,
37
+ ...toSetCookie,
38
+ };
39
+ }
40
+ catch {
41
+ //
42
+ }
43
+ }
44
+ return JSON.stringify(toSetCookie);
45
+ }
46
+ export function getCookie(cookie) {
47
+ let parsed = {};
48
+ try {
49
+ parsed = JSON.parse(cookie);
50
+ }
51
+ catch {
52
+ // noop
53
+ }
54
+ const toSend = Object.entries(parsed).reduce((acc, [key, value]) => {
55
+ if (value.expires && new Date(value.expires) < new Date()) {
56
+ return acc;
57
+ }
58
+ return `${acc}; ${key}=${value.value}`;
59
+ }, "");
60
+ return toSend;
61
+ }
62
+ export const crossDomainClient = (opts = {}) => {
63
+ let store = null;
64
+ const cookieName = `${opts?.storagePrefix || "better-auth"}_cookie`;
65
+ const localCacheName = `${opts?.storagePrefix || "better-auth"}_session_data`;
66
+ const storage = opts?.storage || (typeof localStorage !== "undefined" ? localStorage : undefined);
67
+ return {
68
+ id: "cross-domain",
69
+ $InferServerPlugin: {},
70
+ getActions(_, $store) {
71
+ store = $store;
72
+ return {
73
+ /**
74
+ * Get the stored cookie.
75
+ *
76
+ * You can use this to get the cookie stored in the device and use it in your fetch
77
+ * requests.
78
+ *
79
+ * @example
80
+ * ```ts
81
+ * const cookie = client.getCookie();
82
+ * fetch("https://api.example.com", {
83
+ * headers: {
84
+ * cookie,
85
+ * },
86
+ * });
87
+ */
88
+ getCookie: () => {
89
+ const cookie = storage?.getItem(cookieName);
90
+ return getCookie(cookie || "{}");
91
+ },
92
+ /**
93
+ * Notify the session signal.
94
+ *
95
+ * This is used to trigger an update in useSession, generally when a new session
96
+ * token is set.
97
+ *
98
+ * @example
99
+ * ```ts
100
+ * client.notifySessionSignal();
101
+ * ```
102
+ */
103
+ updateSession: () => {
104
+ $store.notify("$sessionSignal");
105
+ },
106
+ /**
107
+ * Get the stored session data.
108
+ *
109
+ * @example
110
+ * ```ts
111
+ * const sessionData = client.getSessionData();
112
+ * ```
113
+ */
114
+ getSessionData: () => {
115
+ const sessionData = storage?.getItem(localCacheName);
116
+ if (!sessionData)
117
+ return null;
118
+ try {
119
+ const parsed = JSON.parse(sessionData);
120
+ if (parsed && typeof parsed === "object" && Object.keys(parsed).length === 0)
121
+ return null;
122
+ return parsed;
123
+ }
124
+ catch {
125
+ return null;
126
+ }
127
+ },
128
+ };
129
+ },
130
+ fetchPlugins: [
131
+ {
132
+ id: "convex",
133
+ name: "Convex",
134
+ hooks: {
135
+ async onSuccess(context) {
136
+ if (!storage) {
137
+ return;
138
+ }
139
+ const setCookie = context.response.headers.get("set-better-auth-cookie");
140
+ if (setCookie) {
141
+ const prevCookie = storage.getItem(cookieName);
142
+ const toSetCookie = getSetCookie(setCookie || "", prevCookie ?? undefined);
143
+ await storage.setItem(cookieName, toSetCookie);
144
+ // Only notify on session cookie set
145
+ if (setCookie.includes(".session_token=")) {
146
+ store?.notify("$sessionSignal");
147
+ }
148
+ }
149
+ if (context.request.url.toString().includes("/get-session") &&
150
+ !opts?.disableCache) {
151
+ const data = context.data;
152
+ storage.setItem(localCacheName, JSON.stringify(data));
153
+ if (data === null) {
154
+ storage.setItem(cookieName, "{}");
155
+ }
156
+ }
157
+ },
158
+ },
159
+ async init(url, options) {
160
+ if (!storage) {
161
+ return {
162
+ url,
163
+ options: options,
164
+ };
165
+ }
166
+ options = options || {};
167
+ const storedCookie = storage.getItem(cookieName);
168
+ const cookie = getCookie(storedCookie || "{}");
169
+ options.credentials = "omit";
170
+ options.headers = {
171
+ ...options.headers,
172
+ "Better-Auth-Cookie": cookie,
173
+ };
174
+ if (url.includes("/sign-out")) {
175
+ await storage.setItem(cookieName, "{}");
176
+ store?.atoms.session?.set({
177
+ data: null,
178
+ error: null,
179
+ isPending: false,
180
+ });
181
+ storage.setItem(localCacheName, "{}");
182
+ }
183
+ return {
184
+ url,
185
+ options: options,
186
+ };
187
+ },
188
+ },
189
+ ],
190
+ };
191
+ };
192
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/plugins/cross-domain/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { z } from "zod";
2
+ export declare const crossDomain: ({ siteUrl }: {
3
+ siteUrl: string;
4
+ }) => {
5
+ id: "cross-domain";
6
+ init(): {
7
+ options: {
8
+ trustedOrigins: string[];
9
+ };
10
+ context: {
11
+ oauthConfig: {
12
+ storeStateStrategy: "database";
13
+ skipStateCookieCheck: true;
14
+ };
15
+ };
16
+ };
17
+ hooks: {
18
+ before: ({
19
+ matcher(ctx: import("better-auth").HookEndpointContext): boolean;
20
+ handler: (inputContext: import("better-call").MiddlewareInputContext<import("better-call").MiddlewareOptions>) => Promise<{
21
+ context: {
22
+ headers: Headers;
23
+ };
24
+ } | undefined>;
25
+ } | {
26
+ matcher: (ctx: import("better-auth").HookEndpointContext) => boolean;
27
+ handler: (inputContext: import("better-call").MiddlewareInputContext<import("better-call").MiddlewareOptions>) => Promise<{
28
+ context: import("better-call").MiddlewareContext<import("better-call").MiddlewareOptions, import("better-auth").AuthContext<import("better-auth").BetterAuthOptions> & {
29
+ returned?: unknown | undefined;
30
+ responseHeaders?: Headers | undefined;
31
+ }>;
32
+ }>;
33
+ })[];
34
+ after: {
35
+ matcher(ctx: import("better-auth").HookEndpointContext): boolean;
36
+ handler: (inputContext: import("better-call").MiddlewareInputContext<import("better-call").MiddlewareOptions>) => Promise<void>;
37
+ }[];
38
+ };
39
+ endpoints: {
40
+ verifyOneTimeToken: import("better-call").StrictEndpoint<"/cross-domain/one-time-token/verify", {
41
+ method: "POST";
42
+ body: z.ZodObject<{
43
+ token: z.ZodString;
44
+ }, z.core.$strip>;
45
+ }, {
46
+ session: import("better-auth").Session & Record<string, any>;
47
+ user: import("better-auth").User & Record<string, any>;
48
+ }>;
49
+ };
50
+ };
51
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/cross-domain/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,WAAW,GAAI,aAAa;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4L3D,CAAC"}
@@ -0,0 +1,173 @@
1
+ import { setSessionCookie } from "better-auth/cookies";
2
+ import { generateRandomString } from "better-auth/crypto";
3
+ import { createAuthEndpoint, createAuthMiddleware, oneTimeToken as oneTimeTokenPlugin, } from "better-auth/plugins";
4
+ import { z } from "zod";
5
+ export const crossDomain = ({ siteUrl }) => {
6
+ const oneTimeToken = oneTimeTokenPlugin();
7
+ const rewriteCallbackURL = (callbackURL) => {
8
+ if (callbackURL && !callbackURL.startsWith("/")) {
9
+ return callbackURL;
10
+ }
11
+ const relativeCallbackURL = callbackURL || "/";
12
+ return new URL(relativeCallbackURL, siteUrl).toString();
13
+ };
14
+ const isExpoNative = (ctx) => {
15
+ return ctx.headers?.has("expo-origin");
16
+ };
17
+ return {
18
+ id: "cross-domain",
19
+ // TODO: remove this in the next minor release, it doesn't
20
+ // actually affect ctx.trustedOrigins. cors allowedOrigins
21
+ // is using it, via options.trustedOrigins, though, so it's
22
+ // a breaking change.
23
+ init() {
24
+ return {
25
+ options: {
26
+ trustedOrigins: [siteUrl],
27
+ },
28
+ context: {
29
+ oauthConfig: {
30
+ storeStateStrategy: "database",
31
+ // We could fake the cookie by sending a header, but it would need
32
+ // to be set on a 302 redirect from the identity provider, and we
33
+ // don't have a way to do that. This only means we can't stop an
34
+ // oauth flow that started in one browser from continuing in
35
+ // another. We still verify the state token from the query string
36
+ // against the database.
37
+ skipStateCookieCheck: true,
38
+ },
39
+ },
40
+ };
41
+ },
42
+ hooks: {
43
+ before: [
44
+ {
45
+ matcher(ctx) {
46
+ return (Boolean(ctx.request?.headers.get("better-auth-cookie") ||
47
+ ctx.headers?.get("better-auth-cookie")) && !isExpoNative(ctx));
48
+ },
49
+ handler: createAuthMiddleware(async (ctx) => {
50
+ const existingHeaders = (ctx.request?.headers ||
51
+ ctx.headers);
52
+ const headers = new Headers({
53
+ ...Object.fromEntries(existingHeaders?.entries()),
54
+ });
55
+ // Skip if the request has an authorization header
56
+ if (headers.get("authorization")) {
57
+ return;
58
+ }
59
+ const cookie = headers.get("better-auth-cookie");
60
+ if (!cookie) {
61
+ return;
62
+ }
63
+ headers.append("cookie", cookie);
64
+ return {
65
+ context: {
66
+ headers,
67
+ },
68
+ };
69
+ }),
70
+ },
71
+ {
72
+ matcher: (ctx) => {
73
+ return (ctx.method === "GET" &&
74
+ ctx.path.startsWith("/verify-email") &&
75
+ !isExpoNative(ctx));
76
+ },
77
+ handler: createAuthMiddleware(async (ctx) => {
78
+ if (ctx.query?.callbackURL) {
79
+ ctx.query.callbackURL = rewriteCallbackURL(ctx.query.callbackURL);
80
+ }
81
+ return { context: ctx };
82
+ }),
83
+ },
84
+ {
85
+ matcher: (ctx) => {
86
+ return (((ctx.method === "POST" && ctx.path.startsWith("/link-social")) ||
87
+ ctx.path.startsWith("/send-verification-email") ||
88
+ ctx.path.startsWith("/sign-in/email") ||
89
+ ctx.path.startsWith("/sign-in/social") ||
90
+ ctx.path.startsWith("/sign-in/magic-link") ||
91
+ ctx.path.startsWith("/delete-user") ||
92
+ ctx.path.startsWith("/change-email")) &&
93
+ !isExpoNative(ctx));
94
+ },
95
+ handler: createAuthMiddleware(async (ctx) => {
96
+ const isSignIn = ctx.path.startsWith("/sign-in");
97
+ ctx.body.callbackURL = rewriteCallbackURL(ctx.body.callbackURL);
98
+ if (isSignIn && ctx.body.newUserCallbackURL) {
99
+ ctx.body.newUserCallbackURL = rewriteCallbackURL(ctx.body.newUserCallbackURL);
100
+ }
101
+ if (isSignIn && ctx.body.errorCallbackURL) {
102
+ ctx.body.errorCallbackURL = rewriteCallbackURL(ctx.body.errorCallbackURL);
103
+ }
104
+ return { context: ctx };
105
+ }),
106
+ },
107
+ ],
108
+ after: [
109
+ {
110
+ matcher(ctx) {
111
+ return !isExpoNative(ctx);
112
+ },
113
+ handler: createAuthMiddleware(async (ctx) => {
114
+ const setCookie = ctx.context.responseHeaders?.get("set-cookie");
115
+ if (!setCookie) {
116
+ return;
117
+ }
118
+ ctx.context.responseHeaders?.delete("set-cookie");
119
+ ctx.setHeader("Set-Better-Auth-Cookie", setCookie);
120
+ }),
121
+ },
122
+ {
123
+ matcher: (ctx) => {
124
+ return ((ctx.path?.startsWith("/callback") ||
125
+ ctx.path?.startsWith("/oauth2/callback") ||
126
+ ctx.path?.startsWith("/magic-link/verify")) &&
127
+ !isExpoNative(ctx));
128
+ },
129
+ handler: createAuthMiddleware(async (ctx) => {
130
+ // Mostly copied from the one-time-token plugin
131
+ const session = ctx.context.newSession;
132
+ if (!session) {
133
+ ctx.context.logger.error("No session found");
134
+ return;
135
+ }
136
+ const token = generateRandomString(32);
137
+ const expiresAt = new Date(Date.now() + 3 * 60 * 1000);
138
+ await ctx.context.internalAdapter.createVerificationValue({
139
+ value: session.session.token,
140
+ identifier: `one-time-token:${token}`,
141
+ expiresAt,
142
+ });
143
+ const redirectTo = ctx.context.responseHeaders?.get("location");
144
+ if (!redirectTo) {
145
+ ctx.context.logger.error("No redirect to found");
146
+ return;
147
+ }
148
+ const url = new URL(redirectTo);
149
+ url.searchParams.set("ott", token);
150
+ throw ctx.redirect(url.toString());
151
+ }),
152
+ },
153
+ ],
154
+ },
155
+ endpoints: {
156
+ verifyOneTimeToken: createAuthEndpoint("/cross-domain/one-time-token/verify", {
157
+ method: "POST",
158
+ body: z.object({
159
+ token: z.string(),
160
+ }),
161
+ }, async (ctx) => {
162
+ const response = await oneTimeToken.endpoints.verifyOneTimeToken({
163
+ ...ctx,
164
+ returnHeaders: false,
165
+ returnStatus: false,
166
+ });
167
+ await setSessionCookie(ctx, response);
168
+ return response;
169
+ }),
170
+ },
171
+ };
172
+ };
173
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/cross-domain/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from "./convex/index.js";
2
+ export * from "./cross-domain/index.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./convex/index.js";
2
+ export * from "./cross-domain/index.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,80 @@
1
+ import type { PropsWithChildren, ReactNode } from "react";
2
+ import type { AuthTokenFetcher } from "convex/browser";
3
+ import type { FunctionReference } from "convex/server";
4
+ import type { BetterAuthClientPlugin } from "better-auth";
5
+ import type { createAuthClient } from "better-auth/react";
6
+ import type { convexClient, crossDomainClient } from "../client/plugins/index.js";
7
+ import type { EmptyObject } from "convex-helpers";
8
+ type CrossDomainClient = ReturnType<typeof crossDomainClient>;
9
+ type ConvexClient = ReturnType<typeof convexClient>;
10
+ type PluginsWithCrossDomain = (CrossDomainClient | ConvexClient | BetterAuthClientPlugin)[];
11
+ type PluginsWithoutCrossDomain = (ConvexClient | BetterAuthClientPlugin)[];
12
+ type AuthClientWithPlugins<Plugins extends PluginsWithCrossDomain | PluginsWithoutCrossDomain> = ReturnType<typeof createAuthClient<BetterAuthClientPlugin & {
13
+ plugins: Plugins;
14
+ }>>;
15
+ export type AuthClient = AuthClientWithPlugins<PluginsWithCrossDomain> | AuthClientWithPlugins<PluginsWithoutCrossDomain>;
16
+ type IConvexReactClient = {
17
+ setAuth(fetchToken: AuthTokenFetcher): void;
18
+ clearAuth(): void;
19
+ };
20
+ /**
21
+ * A wrapper React component which provides a {@link react.ConvexReactClient}
22
+ * authenticated with Better Auth.
23
+ *
24
+ * @public
25
+ */
26
+ export declare function ConvexBetterAuthProvider({ children, client, authClient, initialToken, }: {
27
+ children: ReactNode;
28
+ client: IConvexReactClient;
29
+ authClient: AuthClient;
30
+ initialToken?: string | null;
31
+ }): import("react/jsx-runtime").JSX.Element;
32
+ /**
33
+ * _Experimental_
34
+ *
35
+ * A wrapper React component which provides error handling for auth related errors.
36
+ * This is typically used to redirect the user to the login page when they are
37
+ * unauthenticated, and does so reactively based on the getAuthUserFn query.
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * // convex/auth.ts
42
+ * export const { getAuthUser } = authComponent.clientApi();
43
+ *
44
+ * // auth-client.tsx
45
+ * import { AuthBoundary } from "@convex-dev/react";
46
+ * import { api } from '../../convex/_generated/api'
47
+ * import { isAuthError } from '../lib/utils'
48
+ *
49
+ * export const ClientAuthBoundary = ({ children }: PropsWithChildren) => {
50
+ * return (
51
+ * <AuthBoundary
52
+ * onUnauth={() => redirect("/sign-in")}
53
+ * authClient={authClient}
54
+ * getAuthUserFn={api.auth.getAuthUser}
55
+ * isAuthError={isAuthError}
56
+ * >
57
+ * <>{children}</>
58
+ * </AuthBoundary>
59
+ * )
60
+ * ```
61
+ * @param props.children - Children to render.
62
+ * @param props.onUnauth - Function to call when the user is
63
+ * unauthenticated. Typically a redirect to the login page.
64
+ * @param props.authClient - Better Auth authClient to use.
65
+ * @param props.renderFallback - Fallback component to render when the user is
66
+ * unauthenticated. Defaults to null. Generally not rendered as error handling
67
+ * is typically a redirect.
68
+ * @param props.getAuthUserFn - Reference to a Convex query that returns user.
69
+ * The component provides a query for this via `export const { getAuthUser } = authComponent.clientApi()`.
70
+ * @param props.isAuthError - Function to check if the error is auth related.
71
+ */
72
+ export declare const AuthBoundary: ({ children, onUnauth, authClient, renderFallback, getAuthUserFn, isAuthError, }: PropsWithChildren<{
73
+ onUnauth: () => void | Promise<void>;
74
+ authClient: AuthClient;
75
+ renderFallback?: () => React.ReactNode;
76
+ getAuthUserFn: FunctionReference<"query", "public", EmptyObject>;
77
+ isAuthError: (error: unknown) => boolean;
78
+ }>) => import("react/jsx-runtime").JSX.Element;
79
+ export {};
80
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAOvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,KAAK,iBAAiB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC9D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,KAAK,sBAAsB,GAAG,CAC1B,iBAAiB,GACjB,YAAY,GACZ,sBAAsB,CACzB,EAAE,CAAC;AACJ,KAAK,yBAAyB,GAAG,CAAC,YAAY,GAAG,sBAAsB,CAAC,EAAE,CAAC;AAC3E,KAAK,qBAAqB,CACxB,OAAO,SAAS,sBAAsB,GAAG,yBAAyB,IAChE,UAAU,CACZ,OAAO,gBAAgB,CACrB,sBAAsB,GAAG;IACvB,OAAO,EAAE,OAAO,CAAC;CAClB,CACF,CACF,CAAC;AACF,MAAM,MAAM,UAAU,GAClB,qBAAqB,CAAC,sBAAsB,CAAC,GAC7C,qBAAqB,CAAC,yBAAyB,CAAC,CAAC;AAIrD,KAAK,kBAAkB,GAAG;IACxB,OAAO,CAAC,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC5C,SAAS,IAAI,IAAI,CAAC;CACnB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,QAAQ,EACR,MAAM,EACN,UAAU,EACV,YAAY,GACb,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,2CAkCA;AA6GD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,eAAO,MAAM,YAAY,GAAI,iFAwB1B,iBAAiB,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,UAAU,EAAE,UAAU,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC;IACvC,aAAa,EAAE,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IACjE,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;CAC1C,CAAC,4CA4BD,CAAC"}