@better-auth/expo 1.3.18 → 1.3.22
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/client.cjs +2 -1
- package/dist/client.mjs +2 -1
- package/dist/index.cjs +36 -0
- package/dist/index.d.cts +69 -0
- package/dist/index.d.mts +69 -0
- package/dist/index.d.ts +69 -0
- package/dist/index.mjs +37 -1
- package/package.json +5 -4
package/dist/client.cjs
CHANGED
|
@@ -187,7 +187,8 @@ const expoClient = (opts) => {
|
|
|
187
187
|
}
|
|
188
188
|
);
|
|
189
189
|
}
|
|
190
|
-
const
|
|
190
|
+
const proxyURL = `${context.request.baseURL}/expo-authorization-proxy?authorizationURL=${encodeURIComponent(signInURL)}`;
|
|
191
|
+
const result = await Browser.openAuthSessionAsync(proxyURL, to);
|
|
191
192
|
if (result.type !== "success") return;
|
|
192
193
|
const url = new URL(result.url);
|
|
193
194
|
const cookie = String(url.searchParams.get("cookie"));
|
package/dist/client.mjs
CHANGED
|
@@ -168,7 +168,8 @@ const expoClient = (opts) => {
|
|
|
168
168
|
}
|
|
169
169
|
);
|
|
170
170
|
}
|
|
171
|
-
const
|
|
171
|
+
const proxyURL = `${context.request.baseURL}/expo-authorization-proxy?authorizationURL=${encodeURIComponent(signInURL)}`;
|
|
172
|
+
const result = await Browser.openAuthSessionAsync(proxyURL, to);
|
|
172
173
|
if (result.type !== "success") return;
|
|
173
174
|
const url = new URL(result.url);
|
|
174
175
|
const cookie = String(url.searchParams.get("cookie"));
|
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const api = require('better-auth/api');
|
|
4
|
+
const zod = require('zod');
|
|
4
5
|
|
|
5
6
|
const expo = (options) => {
|
|
6
7
|
return {
|
|
@@ -62,6 +63,41 @@ const expo = (options) => {
|
|
|
62
63
|
})
|
|
63
64
|
}
|
|
64
65
|
]
|
|
66
|
+
},
|
|
67
|
+
endpoints: {
|
|
68
|
+
expoAuthorizationProxy: api.createAuthEndpoint(
|
|
69
|
+
"/expo-authorization-proxy",
|
|
70
|
+
{
|
|
71
|
+
method: "GET",
|
|
72
|
+
query: zod.z.object({
|
|
73
|
+
authorizationURL: zod.z.string()
|
|
74
|
+
}),
|
|
75
|
+
metadata: {
|
|
76
|
+
isAction: false
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
async (ctx) => {
|
|
80
|
+
const { authorizationURL } = ctx.query;
|
|
81
|
+
const url = new URL(authorizationURL);
|
|
82
|
+
const state = url.searchParams.get("state");
|
|
83
|
+
if (!state) {
|
|
84
|
+
throw new api.APIError("BAD_REQUEST", {
|
|
85
|
+
message: "Unexpected error"
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
const stateCookie = ctx.context.createAuthCookie("state", {
|
|
89
|
+
maxAge: 5 * 60 * 1e3
|
|
90
|
+
// 5 minutes
|
|
91
|
+
});
|
|
92
|
+
await ctx.setSignedCookie(
|
|
93
|
+
stateCookie.name,
|
|
94
|
+
state,
|
|
95
|
+
ctx.context.secret,
|
|
96
|
+
stateCookie.attributes
|
|
97
|
+
);
|
|
98
|
+
return ctx.redirect(ctx.query.authorizationURL);
|
|
99
|
+
}
|
|
100
|
+
)
|
|
65
101
|
}
|
|
66
102
|
};
|
|
67
103
|
};
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as better_call from 'better-call';
|
|
2
2
|
import * as better_auth_types from 'better-auth/types';
|
|
3
|
+
import { z } from 'zod';
|
|
3
4
|
|
|
4
5
|
interface ExpoOptions {
|
|
5
6
|
/**
|
|
@@ -23,6 +24,74 @@ declare const expo: (options?: ExpoOptions) => {
|
|
|
23
24
|
handler: (inputContext: better_call.MiddlewareInputContext<better_call.MiddlewareOptions>) => Promise<void>;
|
|
24
25
|
}[];
|
|
25
26
|
};
|
|
27
|
+
endpoints: {
|
|
28
|
+
expoAuthorizationProxy: {
|
|
29
|
+
<AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0: {
|
|
30
|
+
body?: undefined;
|
|
31
|
+
} & {
|
|
32
|
+
method?: "GET" | undefined;
|
|
33
|
+
} & {
|
|
34
|
+
query: {
|
|
35
|
+
authorizationURL: string;
|
|
36
|
+
};
|
|
37
|
+
} & {
|
|
38
|
+
params?: Record<string, any>;
|
|
39
|
+
} & {
|
|
40
|
+
request?: Request;
|
|
41
|
+
} & {
|
|
42
|
+
headers?: HeadersInit;
|
|
43
|
+
} & {
|
|
44
|
+
asResponse?: boolean;
|
|
45
|
+
returnHeaders?: boolean;
|
|
46
|
+
use?: better_call.Middleware[];
|
|
47
|
+
path?: string;
|
|
48
|
+
} & {
|
|
49
|
+
asResponse?: AsResponse | undefined;
|
|
50
|
+
returnHeaders?: ReturnHeaders | undefined;
|
|
51
|
+
}): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? {
|
|
52
|
+
headers: Headers;
|
|
53
|
+
response: {
|
|
54
|
+
status: ("OK" | "CREATED" | "ACCEPTED" | "NO_CONTENT" | "MULTIPLE_CHOICES" | "MOVED_PERMANENTLY" | "FOUND" | "SEE_OTHER" | "NOT_MODIFIED" | "TEMPORARY_REDIRECT" | "BAD_REQUEST" | "UNAUTHORIZED" | "PAYMENT_REQUIRED" | "FORBIDDEN" | "NOT_FOUND" | "METHOD_NOT_ALLOWED" | "NOT_ACCEPTABLE" | "PROXY_AUTHENTICATION_REQUIRED" | "REQUEST_TIMEOUT" | "CONFLICT" | "GONE" | "LENGTH_REQUIRED" | "PRECONDITION_FAILED" | "PAYLOAD_TOO_LARGE" | "URI_TOO_LONG" | "UNSUPPORTED_MEDIA_TYPE" | "RANGE_NOT_SATISFIABLE" | "EXPECTATION_FAILED" | "I'M_A_TEAPOT" | "MISDIRECTED_REQUEST" | "UNPROCESSABLE_ENTITY" | "LOCKED" | "FAILED_DEPENDENCY" | "TOO_EARLY" | "UPGRADE_REQUIRED" | "PRECONDITION_REQUIRED" | "TOO_MANY_REQUESTS" | "REQUEST_HEADER_FIELDS_TOO_LARGE" | "UNAVAILABLE_FOR_LEGAL_REASONS" | "INTERNAL_SERVER_ERROR" | "NOT_IMPLEMENTED" | "BAD_GATEWAY" | "SERVICE_UNAVAILABLE" | "GATEWAY_TIMEOUT" | "HTTP_VERSION_NOT_SUPPORTED" | "VARIANT_ALSO_NEGOTIATES" | "INSUFFICIENT_STORAGE" | "LOOP_DETECTED" | "NOT_EXTENDED" | "NETWORK_AUTHENTICATION_REQUIRED") | better_call.Status;
|
|
55
|
+
body: ({
|
|
56
|
+
message?: string;
|
|
57
|
+
code?: string;
|
|
58
|
+
cause?: unknown;
|
|
59
|
+
} & Record<string, any>) | undefined;
|
|
60
|
+
headers: HeadersInit;
|
|
61
|
+
statusCode: number;
|
|
62
|
+
name: string;
|
|
63
|
+
message: string;
|
|
64
|
+
stack?: string;
|
|
65
|
+
cause?: unknown;
|
|
66
|
+
};
|
|
67
|
+
} : {
|
|
68
|
+
status: ("OK" | "CREATED" | "ACCEPTED" | "NO_CONTENT" | "MULTIPLE_CHOICES" | "MOVED_PERMANENTLY" | "FOUND" | "SEE_OTHER" | "NOT_MODIFIED" | "TEMPORARY_REDIRECT" | "BAD_REQUEST" | "UNAUTHORIZED" | "PAYMENT_REQUIRED" | "FORBIDDEN" | "NOT_FOUND" | "METHOD_NOT_ALLOWED" | "NOT_ACCEPTABLE" | "PROXY_AUTHENTICATION_REQUIRED" | "REQUEST_TIMEOUT" | "CONFLICT" | "GONE" | "LENGTH_REQUIRED" | "PRECONDITION_FAILED" | "PAYLOAD_TOO_LARGE" | "URI_TOO_LONG" | "UNSUPPORTED_MEDIA_TYPE" | "RANGE_NOT_SATISFIABLE" | "EXPECTATION_FAILED" | "I'M_A_TEAPOT" | "MISDIRECTED_REQUEST" | "UNPROCESSABLE_ENTITY" | "LOCKED" | "FAILED_DEPENDENCY" | "TOO_EARLY" | "UPGRADE_REQUIRED" | "PRECONDITION_REQUIRED" | "TOO_MANY_REQUESTS" | "REQUEST_HEADER_FIELDS_TOO_LARGE" | "UNAVAILABLE_FOR_LEGAL_REASONS" | "INTERNAL_SERVER_ERROR" | "NOT_IMPLEMENTED" | "BAD_GATEWAY" | "SERVICE_UNAVAILABLE" | "GATEWAY_TIMEOUT" | "HTTP_VERSION_NOT_SUPPORTED" | "VARIANT_ALSO_NEGOTIATES" | "INSUFFICIENT_STORAGE" | "LOOP_DETECTED" | "NOT_EXTENDED" | "NETWORK_AUTHENTICATION_REQUIRED") | better_call.Status;
|
|
69
|
+
body: ({
|
|
70
|
+
message?: string;
|
|
71
|
+
code?: string;
|
|
72
|
+
cause?: unknown;
|
|
73
|
+
} & Record<string, any>) | undefined;
|
|
74
|
+
headers: HeadersInit;
|
|
75
|
+
statusCode: number;
|
|
76
|
+
name: string;
|
|
77
|
+
message: string;
|
|
78
|
+
stack?: string;
|
|
79
|
+
cause?: unknown;
|
|
80
|
+
}>;
|
|
81
|
+
options: {
|
|
82
|
+
method: "GET";
|
|
83
|
+
query: z.ZodObject<{
|
|
84
|
+
authorizationURL: z.ZodString;
|
|
85
|
+
}, z.core.$strip>;
|
|
86
|
+
metadata: {
|
|
87
|
+
isAction: boolean;
|
|
88
|
+
};
|
|
89
|
+
} & {
|
|
90
|
+
use: any[];
|
|
91
|
+
};
|
|
92
|
+
path: "/expo-authorization-proxy";
|
|
93
|
+
};
|
|
94
|
+
};
|
|
26
95
|
};
|
|
27
96
|
|
|
28
97
|
export { expo };
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as better_call from 'better-call';
|
|
2
2
|
import * as better_auth_types from 'better-auth/types';
|
|
3
|
+
import { z } from 'zod';
|
|
3
4
|
|
|
4
5
|
interface ExpoOptions {
|
|
5
6
|
/**
|
|
@@ -23,6 +24,74 @@ declare const expo: (options?: ExpoOptions) => {
|
|
|
23
24
|
handler: (inputContext: better_call.MiddlewareInputContext<better_call.MiddlewareOptions>) => Promise<void>;
|
|
24
25
|
}[];
|
|
25
26
|
};
|
|
27
|
+
endpoints: {
|
|
28
|
+
expoAuthorizationProxy: {
|
|
29
|
+
<AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0: {
|
|
30
|
+
body?: undefined;
|
|
31
|
+
} & {
|
|
32
|
+
method?: "GET" | undefined;
|
|
33
|
+
} & {
|
|
34
|
+
query: {
|
|
35
|
+
authorizationURL: string;
|
|
36
|
+
};
|
|
37
|
+
} & {
|
|
38
|
+
params?: Record<string, any>;
|
|
39
|
+
} & {
|
|
40
|
+
request?: Request;
|
|
41
|
+
} & {
|
|
42
|
+
headers?: HeadersInit;
|
|
43
|
+
} & {
|
|
44
|
+
asResponse?: boolean;
|
|
45
|
+
returnHeaders?: boolean;
|
|
46
|
+
use?: better_call.Middleware[];
|
|
47
|
+
path?: string;
|
|
48
|
+
} & {
|
|
49
|
+
asResponse?: AsResponse | undefined;
|
|
50
|
+
returnHeaders?: ReturnHeaders | undefined;
|
|
51
|
+
}): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? {
|
|
52
|
+
headers: Headers;
|
|
53
|
+
response: {
|
|
54
|
+
status: ("OK" | "CREATED" | "ACCEPTED" | "NO_CONTENT" | "MULTIPLE_CHOICES" | "MOVED_PERMANENTLY" | "FOUND" | "SEE_OTHER" | "NOT_MODIFIED" | "TEMPORARY_REDIRECT" | "BAD_REQUEST" | "UNAUTHORIZED" | "PAYMENT_REQUIRED" | "FORBIDDEN" | "NOT_FOUND" | "METHOD_NOT_ALLOWED" | "NOT_ACCEPTABLE" | "PROXY_AUTHENTICATION_REQUIRED" | "REQUEST_TIMEOUT" | "CONFLICT" | "GONE" | "LENGTH_REQUIRED" | "PRECONDITION_FAILED" | "PAYLOAD_TOO_LARGE" | "URI_TOO_LONG" | "UNSUPPORTED_MEDIA_TYPE" | "RANGE_NOT_SATISFIABLE" | "EXPECTATION_FAILED" | "I'M_A_TEAPOT" | "MISDIRECTED_REQUEST" | "UNPROCESSABLE_ENTITY" | "LOCKED" | "FAILED_DEPENDENCY" | "TOO_EARLY" | "UPGRADE_REQUIRED" | "PRECONDITION_REQUIRED" | "TOO_MANY_REQUESTS" | "REQUEST_HEADER_FIELDS_TOO_LARGE" | "UNAVAILABLE_FOR_LEGAL_REASONS" | "INTERNAL_SERVER_ERROR" | "NOT_IMPLEMENTED" | "BAD_GATEWAY" | "SERVICE_UNAVAILABLE" | "GATEWAY_TIMEOUT" | "HTTP_VERSION_NOT_SUPPORTED" | "VARIANT_ALSO_NEGOTIATES" | "INSUFFICIENT_STORAGE" | "LOOP_DETECTED" | "NOT_EXTENDED" | "NETWORK_AUTHENTICATION_REQUIRED") | better_call.Status;
|
|
55
|
+
body: ({
|
|
56
|
+
message?: string;
|
|
57
|
+
code?: string;
|
|
58
|
+
cause?: unknown;
|
|
59
|
+
} & Record<string, any>) | undefined;
|
|
60
|
+
headers: HeadersInit;
|
|
61
|
+
statusCode: number;
|
|
62
|
+
name: string;
|
|
63
|
+
message: string;
|
|
64
|
+
stack?: string;
|
|
65
|
+
cause?: unknown;
|
|
66
|
+
};
|
|
67
|
+
} : {
|
|
68
|
+
status: ("OK" | "CREATED" | "ACCEPTED" | "NO_CONTENT" | "MULTIPLE_CHOICES" | "MOVED_PERMANENTLY" | "FOUND" | "SEE_OTHER" | "NOT_MODIFIED" | "TEMPORARY_REDIRECT" | "BAD_REQUEST" | "UNAUTHORIZED" | "PAYMENT_REQUIRED" | "FORBIDDEN" | "NOT_FOUND" | "METHOD_NOT_ALLOWED" | "NOT_ACCEPTABLE" | "PROXY_AUTHENTICATION_REQUIRED" | "REQUEST_TIMEOUT" | "CONFLICT" | "GONE" | "LENGTH_REQUIRED" | "PRECONDITION_FAILED" | "PAYLOAD_TOO_LARGE" | "URI_TOO_LONG" | "UNSUPPORTED_MEDIA_TYPE" | "RANGE_NOT_SATISFIABLE" | "EXPECTATION_FAILED" | "I'M_A_TEAPOT" | "MISDIRECTED_REQUEST" | "UNPROCESSABLE_ENTITY" | "LOCKED" | "FAILED_DEPENDENCY" | "TOO_EARLY" | "UPGRADE_REQUIRED" | "PRECONDITION_REQUIRED" | "TOO_MANY_REQUESTS" | "REQUEST_HEADER_FIELDS_TOO_LARGE" | "UNAVAILABLE_FOR_LEGAL_REASONS" | "INTERNAL_SERVER_ERROR" | "NOT_IMPLEMENTED" | "BAD_GATEWAY" | "SERVICE_UNAVAILABLE" | "GATEWAY_TIMEOUT" | "HTTP_VERSION_NOT_SUPPORTED" | "VARIANT_ALSO_NEGOTIATES" | "INSUFFICIENT_STORAGE" | "LOOP_DETECTED" | "NOT_EXTENDED" | "NETWORK_AUTHENTICATION_REQUIRED") | better_call.Status;
|
|
69
|
+
body: ({
|
|
70
|
+
message?: string;
|
|
71
|
+
code?: string;
|
|
72
|
+
cause?: unknown;
|
|
73
|
+
} & Record<string, any>) | undefined;
|
|
74
|
+
headers: HeadersInit;
|
|
75
|
+
statusCode: number;
|
|
76
|
+
name: string;
|
|
77
|
+
message: string;
|
|
78
|
+
stack?: string;
|
|
79
|
+
cause?: unknown;
|
|
80
|
+
}>;
|
|
81
|
+
options: {
|
|
82
|
+
method: "GET";
|
|
83
|
+
query: z.ZodObject<{
|
|
84
|
+
authorizationURL: z.ZodString;
|
|
85
|
+
}, z.core.$strip>;
|
|
86
|
+
metadata: {
|
|
87
|
+
isAction: boolean;
|
|
88
|
+
};
|
|
89
|
+
} & {
|
|
90
|
+
use: any[];
|
|
91
|
+
};
|
|
92
|
+
path: "/expo-authorization-proxy";
|
|
93
|
+
};
|
|
94
|
+
};
|
|
26
95
|
};
|
|
27
96
|
|
|
28
97
|
export { expo };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as better_call from 'better-call';
|
|
2
2
|
import * as better_auth_types from 'better-auth/types';
|
|
3
|
+
import { z } from 'zod';
|
|
3
4
|
|
|
4
5
|
interface ExpoOptions {
|
|
5
6
|
/**
|
|
@@ -23,6 +24,74 @@ declare const expo: (options?: ExpoOptions) => {
|
|
|
23
24
|
handler: (inputContext: better_call.MiddlewareInputContext<better_call.MiddlewareOptions>) => Promise<void>;
|
|
24
25
|
}[];
|
|
25
26
|
};
|
|
27
|
+
endpoints: {
|
|
28
|
+
expoAuthorizationProxy: {
|
|
29
|
+
<AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0: {
|
|
30
|
+
body?: undefined;
|
|
31
|
+
} & {
|
|
32
|
+
method?: "GET" | undefined;
|
|
33
|
+
} & {
|
|
34
|
+
query: {
|
|
35
|
+
authorizationURL: string;
|
|
36
|
+
};
|
|
37
|
+
} & {
|
|
38
|
+
params?: Record<string, any>;
|
|
39
|
+
} & {
|
|
40
|
+
request?: Request;
|
|
41
|
+
} & {
|
|
42
|
+
headers?: HeadersInit;
|
|
43
|
+
} & {
|
|
44
|
+
asResponse?: boolean;
|
|
45
|
+
returnHeaders?: boolean;
|
|
46
|
+
use?: better_call.Middleware[];
|
|
47
|
+
path?: string;
|
|
48
|
+
} & {
|
|
49
|
+
asResponse?: AsResponse | undefined;
|
|
50
|
+
returnHeaders?: ReturnHeaders | undefined;
|
|
51
|
+
}): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? {
|
|
52
|
+
headers: Headers;
|
|
53
|
+
response: {
|
|
54
|
+
status: ("OK" | "CREATED" | "ACCEPTED" | "NO_CONTENT" | "MULTIPLE_CHOICES" | "MOVED_PERMANENTLY" | "FOUND" | "SEE_OTHER" | "NOT_MODIFIED" | "TEMPORARY_REDIRECT" | "BAD_REQUEST" | "UNAUTHORIZED" | "PAYMENT_REQUIRED" | "FORBIDDEN" | "NOT_FOUND" | "METHOD_NOT_ALLOWED" | "NOT_ACCEPTABLE" | "PROXY_AUTHENTICATION_REQUIRED" | "REQUEST_TIMEOUT" | "CONFLICT" | "GONE" | "LENGTH_REQUIRED" | "PRECONDITION_FAILED" | "PAYLOAD_TOO_LARGE" | "URI_TOO_LONG" | "UNSUPPORTED_MEDIA_TYPE" | "RANGE_NOT_SATISFIABLE" | "EXPECTATION_FAILED" | "I'M_A_TEAPOT" | "MISDIRECTED_REQUEST" | "UNPROCESSABLE_ENTITY" | "LOCKED" | "FAILED_DEPENDENCY" | "TOO_EARLY" | "UPGRADE_REQUIRED" | "PRECONDITION_REQUIRED" | "TOO_MANY_REQUESTS" | "REQUEST_HEADER_FIELDS_TOO_LARGE" | "UNAVAILABLE_FOR_LEGAL_REASONS" | "INTERNAL_SERVER_ERROR" | "NOT_IMPLEMENTED" | "BAD_GATEWAY" | "SERVICE_UNAVAILABLE" | "GATEWAY_TIMEOUT" | "HTTP_VERSION_NOT_SUPPORTED" | "VARIANT_ALSO_NEGOTIATES" | "INSUFFICIENT_STORAGE" | "LOOP_DETECTED" | "NOT_EXTENDED" | "NETWORK_AUTHENTICATION_REQUIRED") | better_call.Status;
|
|
55
|
+
body: ({
|
|
56
|
+
message?: string;
|
|
57
|
+
code?: string;
|
|
58
|
+
cause?: unknown;
|
|
59
|
+
} & Record<string, any>) | undefined;
|
|
60
|
+
headers: HeadersInit;
|
|
61
|
+
statusCode: number;
|
|
62
|
+
name: string;
|
|
63
|
+
message: string;
|
|
64
|
+
stack?: string;
|
|
65
|
+
cause?: unknown;
|
|
66
|
+
};
|
|
67
|
+
} : {
|
|
68
|
+
status: ("OK" | "CREATED" | "ACCEPTED" | "NO_CONTENT" | "MULTIPLE_CHOICES" | "MOVED_PERMANENTLY" | "FOUND" | "SEE_OTHER" | "NOT_MODIFIED" | "TEMPORARY_REDIRECT" | "BAD_REQUEST" | "UNAUTHORIZED" | "PAYMENT_REQUIRED" | "FORBIDDEN" | "NOT_FOUND" | "METHOD_NOT_ALLOWED" | "NOT_ACCEPTABLE" | "PROXY_AUTHENTICATION_REQUIRED" | "REQUEST_TIMEOUT" | "CONFLICT" | "GONE" | "LENGTH_REQUIRED" | "PRECONDITION_FAILED" | "PAYLOAD_TOO_LARGE" | "URI_TOO_LONG" | "UNSUPPORTED_MEDIA_TYPE" | "RANGE_NOT_SATISFIABLE" | "EXPECTATION_FAILED" | "I'M_A_TEAPOT" | "MISDIRECTED_REQUEST" | "UNPROCESSABLE_ENTITY" | "LOCKED" | "FAILED_DEPENDENCY" | "TOO_EARLY" | "UPGRADE_REQUIRED" | "PRECONDITION_REQUIRED" | "TOO_MANY_REQUESTS" | "REQUEST_HEADER_FIELDS_TOO_LARGE" | "UNAVAILABLE_FOR_LEGAL_REASONS" | "INTERNAL_SERVER_ERROR" | "NOT_IMPLEMENTED" | "BAD_GATEWAY" | "SERVICE_UNAVAILABLE" | "GATEWAY_TIMEOUT" | "HTTP_VERSION_NOT_SUPPORTED" | "VARIANT_ALSO_NEGOTIATES" | "INSUFFICIENT_STORAGE" | "LOOP_DETECTED" | "NOT_EXTENDED" | "NETWORK_AUTHENTICATION_REQUIRED") | better_call.Status;
|
|
69
|
+
body: ({
|
|
70
|
+
message?: string;
|
|
71
|
+
code?: string;
|
|
72
|
+
cause?: unknown;
|
|
73
|
+
} & Record<string, any>) | undefined;
|
|
74
|
+
headers: HeadersInit;
|
|
75
|
+
statusCode: number;
|
|
76
|
+
name: string;
|
|
77
|
+
message: string;
|
|
78
|
+
stack?: string;
|
|
79
|
+
cause?: unknown;
|
|
80
|
+
}>;
|
|
81
|
+
options: {
|
|
82
|
+
method: "GET";
|
|
83
|
+
query: z.ZodObject<{
|
|
84
|
+
authorizationURL: z.ZodString;
|
|
85
|
+
}, z.core.$strip>;
|
|
86
|
+
metadata: {
|
|
87
|
+
isAction: boolean;
|
|
88
|
+
};
|
|
89
|
+
} & {
|
|
90
|
+
use: any[];
|
|
91
|
+
};
|
|
92
|
+
path: "/expo-authorization-proxy";
|
|
93
|
+
};
|
|
94
|
+
};
|
|
26
95
|
};
|
|
27
96
|
|
|
28
97
|
export { expo };
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { createAuthMiddleware } from 'better-auth/api';
|
|
1
|
+
import { createAuthEndpoint, createAuthMiddleware, APIError } from 'better-auth/api';
|
|
2
|
+
import { z } from 'zod';
|
|
2
3
|
|
|
3
4
|
const expo = (options) => {
|
|
4
5
|
return {
|
|
@@ -60,6 +61,41 @@ const expo = (options) => {
|
|
|
60
61
|
})
|
|
61
62
|
}
|
|
62
63
|
]
|
|
64
|
+
},
|
|
65
|
+
endpoints: {
|
|
66
|
+
expoAuthorizationProxy: createAuthEndpoint(
|
|
67
|
+
"/expo-authorization-proxy",
|
|
68
|
+
{
|
|
69
|
+
method: "GET",
|
|
70
|
+
query: z.object({
|
|
71
|
+
authorizationURL: z.string()
|
|
72
|
+
}),
|
|
73
|
+
metadata: {
|
|
74
|
+
isAction: false
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
async (ctx) => {
|
|
78
|
+
const { authorizationURL } = ctx.query;
|
|
79
|
+
const url = new URL(authorizationURL);
|
|
80
|
+
const state = url.searchParams.get("state");
|
|
81
|
+
if (!state) {
|
|
82
|
+
throw new APIError("BAD_REQUEST", {
|
|
83
|
+
message: "Unexpected error"
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
const stateCookie = ctx.context.createAuthCookie("state", {
|
|
87
|
+
maxAge: 5 * 60 * 1e3
|
|
88
|
+
// 5 minutes
|
|
89
|
+
});
|
|
90
|
+
await ctx.setSignedCookie(
|
|
91
|
+
stateCookie.name,
|
|
92
|
+
state,
|
|
93
|
+
ctx.context.secret,
|
|
94
|
+
stateCookie.attributes
|
|
95
|
+
);
|
|
96
|
+
return ctx.redirect(ctx.query.authorizationURL);
|
|
97
|
+
}
|
|
98
|
+
)
|
|
63
99
|
}
|
|
64
100
|
};
|
|
65
101
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@better-auth/expo",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.22",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.cjs",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"expo-web-browser": "~14.2.0",
|
|
55
55
|
"react-native": "~0.80.2",
|
|
56
56
|
"unbuild": "^3.6.1",
|
|
57
|
-
"better-auth": "1.3.
|
|
57
|
+
"better-auth": "1.3.22"
|
|
58
58
|
},
|
|
59
59
|
"peerDependencies": {
|
|
60
60
|
"expo-constants": ">=17.0.0",
|
|
@@ -62,10 +62,11 @@
|
|
|
62
62
|
"expo-linking": ">=7.0.0",
|
|
63
63
|
"expo-secure-store": ">=14.0.0",
|
|
64
64
|
"expo-web-browser": ">=14.0.0",
|
|
65
|
-
"better-auth": "1.3.
|
|
65
|
+
"better-auth": "1.3.22"
|
|
66
66
|
},
|
|
67
67
|
"dependencies": {
|
|
68
|
-
"@better-fetch/fetch": "^1.1.18"
|
|
68
|
+
"@better-fetch/fetch": "^1.1.18",
|
|
69
|
+
"zod": "^4.1.5"
|
|
69
70
|
},
|
|
70
71
|
"files": [
|
|
71
72
|
"dist"
|