@rttnd/gau 1.4.2 → 1.4.4
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/chunk-6HKZAQHT.js +1 -0
- package/dist/chunk-6HKZAQHT.js.map +1 -0
- package/dist/chunk-MXZ363UZ.js +1 -0
- package/dist/chunk-MXZ363UZ.js.map +1 -0
- package/dist/chunk-NHENQLYI.js +1 -0
- package/dist/chunk-NHENQLYI.js.map +1 -0
- package/dist/chunk-V6AIGB33.js +1 -0
- package/dist/chunk-V6AIGB33.js.map +1 -0
- package/dist/chunk-VXWI4D7H.js +1 -0
- package/dist/chunk-VXWI4D7H.js.map +1 -0
- package/dist/src/adapters/drizzle/index.d.ts +1 -1
- package/dist/src/adapters/drizzle/index.js +1 -1
- package/dist/src/adapters/drizzle/pg.d.ts +3 -26
- package/dist/src/adapters/drizzle/pg.d.ts.map +1 -1
- package/dist/src/adapters/drizzle/shared.d.ts +49 -0
- package/dist/src/adapters/drizzle/shared.d.ts.map +1 -0
- package/dist/src/adapters/drizzle/sqlite.d.ts +3 -26
- package/dist/src/adapters/drizzle/sqlite.d.ts.map +1 -1
- package/dist/src/adapters/index.js +1 -1
- package/dist/src/client/shared/clientAuth.d.ts +57 -0
- package/dist/src/client/shared/clientAuth.d.ts.map +1 -0
- package/dist/src/client/solid/index.d.ts +3 -14
- package/dist/src/client/solid/index.d.ts.map +1 -1
- package/dist/src/client/solid/index.jsx +160 -216
- package/dist/src/client/solid2/Protected.d.ts +5 -0
- package/dist/src/client/solid2/Protected.d.ts.map +1 -0
- package/dist/src/client/solid2/index.d.ts +36 -0
- package/dist/src/client/solid2/index.d.ts.map +1 -0
- package/dist/src/client/solid2/index.jsx +708 -0
- package/dist/src/client/svelte/AuthProvider/index.svelte.d.ts +13 -0
- package/dist/src/client/svelte/AuthProvider/index.svelte.d.ts.map +1 -0
- package/dist/src/client/svelte/Protected/index.svelte.d.ts +10 -0
- package/dist/src/client/svelte/Protected/index.svelte.d.ts.map +1 -0
- package/dist/src/client/svelte/index.svelte.d.ts +15 -0
- package/dist/src/client/svelte/index.svelte.d.ts.map +1 -0
- package/dist/src/client/svelte/index.svelte.js +1 -1
- package/dist/src/client/svelte/index.svelte.js.map +1 -1
- package/dist/src/client/vanilla/index.js +1 -1
- package/dist/src/client/vanilla/index.js.map +1 -1
- package/dist/src/core/handlers/callback.d.ts.map +1 -1
- package/dist/src/core/handlers/index.js +1 -1
- package/dist/src/core/index.d.ts +3 -3
- package/dist/src/core/index.d.ts.map +1 -1
- package/dist/src/core/index.js +1 -1
- package/dist/src/core/serverSession.d.ts +13 -0
- package/dist/src/core/serverSession.d.ts.map +1 -0
- package/dist/src/index.js +1 -1
- package/dist/src/jwt/index.js +1 -1
- package/dist/src/oauth/index.d.ts +13 -11
- package/dist/src/oauth/index.d.ts.map +1 -1
- package/dist/src/oauth/index.js +1 -1
- package/dist/src/oauth/index.js.map +1 -1
- package/dist/src/oauth/providers/discord.d.ts.map +1 -1
- package/dist/src/oauth/providers/facebook.d.ts.map +1 -1
- package/dist/src/oauth/providers/github.d.ts.map +1 -1
- package/dist/src/oauth/providers/google.d.ts.map +1 -1
- package/dist/src/oauth/providers/microsoft.d.ts.map +1 -1
- package/dist/src/oauth/utils.d.ts +26 -0
- package/dist/src/oauth/utils.d.ts.map +1 -1
- package/dist/src/runtimes/index.js +1 -1
- package/dist/src/runtimes/tauri/index.d.ts.map +1 -1
- package/dist/src/runtimes/tauri/index.js +1 -1
- package/dist/src/solidstart/index.d.ts +4 -4
- package/dist/src/solidstart/index.d.ts.map +1 -1
- package/dist/src/solidstart/index.js +1 -1
- package/dist/src/solidstart/index.js.map +1 -1
- package/dist/src/sveltekit/index.d.ts +2 -2
- package/dist/src/sveltekit/index.d.ts.map +1 -1
- package/dist/src/sveltekit/index.js +1 -1
- package/dist/src/sveltekit/index.js.map +1 -1
- package/package.json +21 -8
- package/dist/chunk-DVVL3GFT.js +0 -1
- package/dist/chunk-DVVL3GFT.js.map +0 -1
- package/dist/chunk-PL7MV7OC.js +0 -1
- package/dist/chunk-PL7MV7OC.js.map +0 -1
- package/dist/chunk-RPFUKTQA.js +0 -1
- package/dist/chunk-RPFUKTQA.js.map +0 -1
- package/dist/client/svelte/index.svelte.d.ts +0 -26
- package/dist/client/svelte/index.svelte.d.ts.map +0 -1
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { OAuthProvider } from '../oauth';
|
|
2
|
+
import type { CreateAuthOptions, ProviderIds } from './createAuth';
|
|
3
|
+
import type { GauServerSession, GauSession } from './index';
|
|
4
|
+
import { createAuth } from './index';
|
|
5
|
+
export type AuthInstance<TProviders extends OAuthProvider<any>[]> = ReturnType<typeof createAuth<TProviders>>;
|
|
6
|
+
export declare function resolveAuth<const TProviders extends OAuthProvider<any>[]>(optionsOrAuth: CreateAuthOptions<TProviders> | AuthInstance<TProviders>): AuthInstance<TProviders>;
|
|
7
|
+
export declare function getAuthProviders<const TProviders extends OAuthProvider<any>[]>(auth: AuthInstance<TProviders>): ProviderIds<AuthInstance<TProviders>>[];
|
|
8
|
+
export declare function resolveServerSession<const TProviders extends OAuthProvider<any>[]>(auth: AuthInstance<TProviders>, request: Request): Promise<GauServerSession<ProviderIds<AuthInstance<TProviders>>>>;
|
|
9
|
+
export declare function createRequestSessionCache<const TProviders extends OAuthProvider<any>[]>(auth: AuthInstance<TProviders>, request: Request, preloadedServerSession?: GauServerSession<ProviderIds<AuthInstance<TProviders>>>): {
|
|
10
|
+
getServerSession: () => Promise<GauServerSession<TProviders[number] extends infer T ? T extends TProviders[number] ? T extends OAuthProvider<infer T_1 extends string, import("../oauth").OAuthProviderConfig> ? T_1 : never : never : never>>;
|
|
11
|
+
getSession: () => Promise<GauSession<TProviders[number] extends infer T ? T extends TProviders[number] ? T extends OAuthProvider<infer T_1 extends string, import("../oauth").OAuthProviderConfig> ? T_1 : never : never : never>>;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=serverSession.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serverSession.d.ts","sourceRoot":"","sources":["../../../src/core/serverSession.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAiC,MAAM,SAAS,CAAA;AAGnE,MAAM,MAAM,YAAY,CAAC,UAAU,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,IAAI,UAAU,CAAC,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC,CAAA;AAI7G,wBAAgB,WAAW,CAAC,KAAK,CAAC,UAAU,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,EACvE,aAAa,EAAE,iBAAiB,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,GACtE,YAAY,CAAC,UAAU,CAAC,CAK1B;AAED,wBAAgB,gBAAgB,CAAC,KAAK,CAAC,UAAU,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,EAC5E,IAAI,EAAE,YAAY,CAAC,UAAU,CAAC,GAC7B,WAAW,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,EAAE,CAOzC;AAED,wBAAsB,oBAAoB,CAAC,KAAK,CAAC,UAAU,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,EACtF,IAAI,EAAE,YAAY,CAAC,UAAU,CAAC,EAC9B,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,gBAAgB,CAAC,WAAW,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAiBlE;AAED,wBAAgB,yBAAyB,CAAC,KAAK,CAAC,UAAU,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,EACrF,IAAI,EAAE,YAAY,CAAC,UAAU,CAAC,EAC9B,OAAO,EAAE,OAAO,EAChB,sBAAsB,CAAC,EAAE,gBAAgB,CAAC,WAAW,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;;;EAmBjF"}
|
package/dist/src/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{AuthError as o,CALLBACK_URI_COOKIE_NAME as r,CLIENT_CHALLENGE_COOKIE_NAME as m,CSRF_COOKIE_NAME as p,CSRF_MAX_AGE as t,Cookies as c,DEFAULT_COOKIE_SERIALIZE_OPTIONS as
|
|
1
|
+
import{AuthError as o,CALLBACK_URI_COOKIE_NAME as r,CLIENT_CHALLENGE_COOKIE_NAME as m,CSRF_COOKIE_NAME as p,CSRF_MAX_AGE as t,Cookies as c,DEFAULT_COOKIE_SERIALIZE_OPTIONS as h,ErrorCodes as i,ErrorMessages as j,ErrorStatuses as k,GauError as n,LINKING_TOKEN_COOKIE_NAME as s,NULL_SESSION as u,PKCE_COOKIE_NAME as f,PROVIDER_OPTIONS_COOKIE_NAME as H,REFRESHED_TOKEN_HEADER as I,SESSION_COOKIE_NAME as L,SESSION_STASH_COOKIE_NAME as N,SESSION_STRATEGY_COOKIE_NAME as Q,createAuth as V,createErrorRedirectUrl as e,createHandler as x,getSessionTokenFromRequest as B,handleError as D,isImpersonating as E,isUserFacingRequest as M,json as W,parseCookies as X,redirect as Y,toClientSession as a}from"../chunk-NHENQLYI.js";import{htmlResponse as b,renderCancelledPage as d,renderErrorPage as g,renderSuccessPage as l}from"../chunk-VB2ML4Q5.js";import"../chunk-VXWI4D7H.js";export{o as AuthError,r as CALLBACK_URI_COOKIE_NAME,m as CLIENT_CHALLENGE_COOKIE_NAME,p as CSRF_COOKIE_NAME,t as CSRF_MAX_AGE,c as Cookies,h as DEFAULT_COOKIE_SERIALIZE_OPTIONS,i as ErrorCodes,j as ErrorMessages,k as ErrorStatuses,n as GauError,s as LINKING_TOKEN_COOKIE_NAME,u as NULL_SESSION,f as PKCE_COOKIE_NAME,H as PROVIDER_OPTIONS_COOKIE_NAME,I as REFRESHED_TOKEN_HEADER,L as SESSION_COOKIE_NAME,N as SESSION_STASH_COOKIE_NAME,Q as SESSION_STRATEGY_COOKIE_NAME,V as createAuth,e as createErrorRedirectUrl,x as createHandler,B as getSessionTokenFromRequest,D as handleError,b as htmlResponse,E as isImpersonating,M as isUserFacingRequest,W as json,X as parseCookies,Y as redirect,d as renderCancelledPage,g as renderErrorPage,l as renderSuccessPage,a as toClientSession};//# sourceMappingURL=index.js.map
|
package/dist/src/jwt/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{sign as o,verify as r}from"../../chunk-
|
|
1
|
+
import{sign as o,verify as r}from"../../chunk-NHENQLYI.js";import"../../chunk-VB2ML4Q5.js";import"../../chunk-VXWI4D7H.js";export{o as sign,r as verify};//# sourceMappingURL=index.js.map
|
|
@@ -12,6 +12,17 @@ export interface OAuthProviderConfig {
|
|
|
12
12
|
linkOnly?: boolean;
|
|
13
13
|
params?: Record<string, string>;
|
|
14
14
|
}
|
|
15
|
+
export interface OAuthAuthorizationOptions<C = OAuthProviderConfig> {
|
|
16
|
+
scopes?: string[];
|
|
17
|
+
redirectUri?: string;
|
|
18
|
+
params?: Record<string, string>;
|
|
19
|
+
overrides?: ProviderProfileOverrides<C>;
|
|
20
|
+
}
|
|
21
|
+
export interface OAuthRefreshOptions<C = OAuthProviderConfig> {
|
|
22
|
+
redirectUri?: string;
|
|
23
|
+
scopes?: string[];
|
|
24
|
+
overrides?: ProviderProfileOverrides<C>;
|
|
25
|
+
}
|
|
15
26
|
export interface RefreshedTokens {
|
|
16
27
|
accessToken: string;
|
|
17
28
|
refreshToken?: string | null;
|
|
@@ -33,20 +44,11 @@ export interface OAuthProvider<T extends string = string, C = OAuthProviderConfi
|
|
|
33
44
|
id: T;
|
|
34
45
|
requiresRedirectUri?: boolean;
|
|
35
46
|
linkOnly?: boolean;
|
|
36
|
-
getAuthorizationUrl: (state: string, codeVerifier: string, options?:
|
|
37
|
-
scopes?: string[];
|
|
38
|
-
redirectUri?: string;
|
|
39
|
-
params?: Record<string, string>;
|
|
40
|
-
overrides?: ProviderProfileOverrides<C>;
|
|
41
|
-
}) => Promise<URL>;
|
|
47
|
+
getAuthorizationUrl: (state: string, codeVerifier: string, options?: OAuthAuthorizationOptions<C>) => Promise<URL>;
|
|
42
48
|
validateCallback: (code: string, codeVerifier: string, redirectUri?: string, overrides?: ProviderProfileOverrides<C>) => Promise<{
|
|
43
49
|
tokens: OAuth2Tokens;
|
|
44
50
|
user: AuthUser;
|
|
45
51
|
}>;
|
|
46
|
-
refreshAccessToken?: (refreshToken: string, options?:
|
|
47
|
-
redirectUri?: string;
|
|
48
|
-
scopes?: string[];
|
|
49
|
-
overrides?: ProviderProfileOverrides<C>;
|
|
50
|
-
}) => Promise<RefreshedTokens>;
|
|
52
|
+
refreshAccessToken?: (refreshToken: string, options?: OAuthRefreshOptions<C>) => Promise<RefreshedTokens>;
|
|
51
53
|
}
|
|
52
54
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/oauth/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAE1C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAEjD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,aAAa,EAAE,OAAO,GAAG,IAAI,CAAA;IAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC7B;AAED,MAAM,MAAM,wBAAwB,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;AAEjG,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,mBAAmB;IAC/E,EAAE,EAAE,CAAC,CAAA;IACL,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,mBAAmB,EAAE,CACnB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/oauth/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/oauth/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{createOAuthAuthorizationUrl as e,createOAuthClientResolver as a,mergeOAuthParams as t,refreshOAuthAccessToken as i}from"../../chunk-VXWI4D7H.js";var r="https://discord.com/api/oauth2/token";function o(t){const o=a(t);return{id:"discord",linkOnly:t.linkOnly,requiresRedirectUri:!0,async getAuthorizationUrl(a,i,r){const n=r?.scopes??t.scope??["identify","email"];return e({client:o(r?.redirectUri),authorizationUrl:"https://discord.com/api/oauth2/authorize",state:a,codeVerifier:i,scopes:n,configParams:t.params,params:r?.params})},async validateCallback(e,a,t){const i=o(t),n=await i.validateAuthorizationCode(r,e,a),s=await async function(e){const a=await fetch("https://discord.com/api/users/@me",{headers:{Authorization:`Bearer ${e}`,"User-Agent":"gau"}}),t=await a.json();return{id:t.id,name:t.username,email:t.email,emailVerified:t.verified,avatar:t.avatar?`https://cdn.discordapp.com/avatars/${t.id}/${t.avatar}.png`:null,raw:t}}(n.accessToken());return{tokens:n,user:s}},refreshAccessToken:async e=>i({tokenUrl:r,clientId:t.clientId,clientSecret:t.clientSecret,refreshToken:e})}}function n(t){const i=a(t);return{id:"facebook",linkOnly:t.linkOnly,requiresRedirectUri:!0,async getAuthorizationUrl(a,r,o){const n=o?.scopes??t.scope??["email","public_profile"];return e({client:i(o?.redirectUri),authorizationUrl:"https://www.facebook.com/dialog/oauth",state:a,codeVerifier:r,scopes:n,configParams:t.params,params:o?.params})},async validateCallback(e,a,t){const r=i(t),o=await r.validateAuthorizationCode("https://graph.facebook.com/oauth/access_token",e,a),n=await async function(e){const a=new URLSearchParams;a.set("fields",["id","name","picture","email"].join(","));const t=await fetch(`https://graph.facebook.com/me?${a.toString()}`,{headers:{Authorization:`Bearer ${e}`}}),i=await t.json();let r=null;return"string"==typeof i.picture?r=i.picture:i.picture&&"object"==typeof i.picture&&"data"in i.picture&&(r=i.picture.data?.url??null),{id:String(i.id),name:i.name??"",email:i.email??null,emailVerified:!!i.email||null,avatar:r,raw:i}}(o.accessToken());return{tokens:o,user:n}}}}var s="https://api.github.com";function c(t){const i=a(t);return{id:"github",linkOnly:t.linkOnly,requiresRedirectUri:!0,async getAuthorizationUrl(a,r,o){const n=o?.scopes??t.scope??["read:user","user:email"];return e({client:i(o?.redirectUri),authorizationUrl:"https://github.com/login/oauth/authorize",state:a,codeVerifier:r,scopes:n,configParams:t.params,params:o?.params})},async validateCallback(e,a,t){const r=i(t),o=await r.validateAuthorizationCode("https://github.com/login/oauth/access_token",e,a),n=await async function(e){const a=await fetch(`${s}/user`,{headers:{Authorization:`Bearer ${e}`,"User-Agent":"gau",Accept:"application/vnd.github+json"}}),t=await a.json();let i=t.email,r=!1;const o=await fetch(`${s}/user/emails`,{headers:{Authorization:`Bearer ${e}`,"User-Agent":"gau",Accept:"application/vnd.github+json"}});if(o.ok){const e=await o.json(),a=e.find(e=>e.primary&&e.verified);if(a)i=a.email,r=!0;else{const a=e.find(e=>e.verified);a&&(i=a.email,r=!0)}}return{id:t.id.toString(),name:t.name??t.login,email:i,emailVerified:r,avatar:t.avatar_url,raw:t}}(o.accessToken());return{tokens:o,user:n}}}}var l="https://oauth2.googleapis.com/token";function u(t){const r=a(t);return{id:"google",linkOnly:t.linkOnly,requiresRedirectUri:!0,async getAuthorizationUrl(a,i,o){const n=o?.scopes??t.scope??["openid","email","profile"];return e({client:r(o?.redirectUri),authorizationUrl:"https://accounts.google.com/o/oauth2/v2/auth",state:a,codeVerifier:i,scopes:n,configParams:t.params,params:o?.params})},async validateCallback(e,a,t){const i=r(t),o=await i.validateAuthorizationCode(l,e,a),n=await async function(e){const a=await fetch("https://openidconnect.googleapis.com/v1/userinfo",{headers:{Authorization:`Bearer ${e}`,"User-Agent":"gau"}}),t=await a.json();return{id:t.sub,name:t.name,email:t.email,emailVerified:t.email_verified,avatar:t.picture,raw:t}}(o.accessToken());return{tokens:o,user:n}},refreshAccessToken:async e=>i({tokenUrl:l,clientId:t.clientId,clientSecret:t.clientSecret,refreshToken:e})}}async function d(e,a){const t=await fetch("https://graph.microsoft.com/v1.0/me",{headers:{Authorization:`Bearer ${e}`}}),i=await t.json();let r=i.mail??i.userPrincipalName,o=!1;if(a)try{const e=a.split("."),t=JSON.parse((new TextDecoder).decode(function(e){const a=e.replace(/-/g,"+").replace(/_/g,"/"),t=(4-a.length%4)%4,i=a.padEnd(a.length+t,"="),r=atob(i),o=r.length,n=new Uint8Array(o);for(let e=0;e<o;e++)n[e]=r.charCodeAt(e);return n}(e[1]))),i="9188040d-6c67-4c5b-b112-36a304b66dad";if(t.verified_primary_email){const e=Array.isArray(t.verified_primary_email)?t.verified_primary_email[0]:t.verified_primary_email;"string"==typeof e&&(r=e,o=!0)}else(t.tid===i||!0===t.xms_edov)&&(r=t.email??r,o=!0)}catch{}const n=await fetch("https://graph.microsoft.com/v1.0/me/photo/$value",{headers:{Authorization:`Bearer ${e}`}});let s=null;if(n.ok)try{const e=await n.blob(),a=new FileReader,t=new Promise((t,i)=>{a.onloadend=()=>t(a.result),a.onerror=i,a.readAsDataURL(e)});s=await t}catch{}return{id:i.id,name:i.displayName,email:r,emailVerified:o,avatar:s,raw:i}}function m(r){const o=e=>({authURL:`https://login.microsoftonline.com/${e}/oauth2/v2.0/authorize`,tokenURL:`https://login.microsoftonline.com/${e}/oauth2/v2.0/token`}),n=a(r);return{id:"microsoft",linkOnly:r.linkOnly,requiresRedirectUri:!0,async getAuthorizationUrl(a,i,s){const c=s?.scopes??r.scope??["openid","profile","email","User.Read"],l=s?.overrides?.tenant??r.tenant??"common",{authURL:u}=o(l),d=t(r.params,s?.params),m=s?.overrides?.prompt??d.prompt??r.prompt;return e({client:n(s?.redirectUri),authorizationUrl:u,state:a,codeVerifier:i,scopes:c,configParams:r.params,params:s?.params,omitParamKeys:["prompt"],extraParams:m?{prompt:m}:void 0})},async validateCallback(e,a,t,i){const s=n(t),c=i?.tenant??r.tenant??"common",{tokenURL:l}=o(c),u=await s.validateAuthorizationCode(l,e,a),m=await d(u.accessToken(),u.idToken());return{tokens:u,user:m}},async refreshAccessToken(e,a){const t=a?.overrides?.tenant??r.tenant??"common",{tokenURL:n}=o(t);return i({tokenUrl:n,clientId:r.clientId,clientSecret:r.clientSecret,refreshToken:e,scopes:a?.scopes??r.scope??["openid","profile","email","User.Read"]})}}}export{o as Discord,n as Facebook,c as GitHub,u as Google,m as Microsoft};//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/oauth/providers/discord.ts","../../../src/oauth/providers/facebook.ts","../../../src/oauth/providers/github.ts","../../../src/oauth/providers/google.ts","../../../src/oauth/providers/microsoft.ts"],"sourcesContent":["import type { AuthUser, OAuthProvider, OAuthProviderConfig, RefreshedTokens } from '../index'\nimport { CodeChallengeMethod, OAuth2Client } from 'arctic'\n\nconst DISCORD_AUTH_URL = 'https://discord.com/api/oauth2/authorize'\nconst DISCORD_TOKEN_URL = 'https://discord.com/api/oauth2/token'\nconst DISCORD_USER_URL = 'https://discord.com/api/users/@me'\n\ninterface DiscordUser {\n id: string\n username: string\n discriminator: string\n avatar: string | null\n email: string | null\n verified: boolean\n [key: string]: unknown\n}\n\nasync function getUser(accessToken: string): Promise<AuthUser> {\n const response = await fetch(DISCORD_USER_URL, {\n headers: {\n 'Authorization': `Bearer ${accessToken}`,\n 'User-Agent': 'gau',\n },\n })\n const data: DiscordUser = await response.json()\n return {\n id: data.id,\n name: data.username,\n email: data.email,\n emailVerified: data.verified,\n avatar: data.avatar ? `https://cdn.discordapp.com/avatars/${data.id}/${data.avatar}.png` : null,\n raw: data,\n }\n}\n\nexport function Discord(config: OAuthProviderConfig): OAuthProvider<'discord'> {\n const defaultClient = new OAuth2Client(config.clientId, config.clientSecret, config.redirectUri ?? null)\n function getClient(redirectUri?: string): OAuth2Client {\n if (!redirectUri || redirectUri === config.redirectUri)\n return defaultClient\n return new OAuth2Client(config.clientId, config.clientSecret, redirectUri)\n }\n return {\n id: 'discord',\n linkOnly: config.linkOnly,\n requiresRedirectUri: true,\n async getAuthorizationUrl(state: string, codeVerifier: string, options?: { scopes?: string[], redirectUri?: string, params?: Record<string, string>, overrides?: any }) {\n const client = getClient(options?.redirectUri)\n const scopes = options?.scopes ?? config.scope ?? ['identify', 'email']\n const url = await client.createAuthorizationURLWithPKCE(DISCORD_AUTH_URL, state, CodeChallengeMethod.S256, codeVerifier, scopes)\n if (options?.params) {\n for (const [k, v] of Object.entries(options.params)) {\n if (v != null)\n url.searchParams.set(k, String(v))\n }\n }\n return url\n },\n async validateCallback(code: string, codeVerifier: string, redirectUri?: string) {\n const client = getClient(redirectUri)\n const tokens = await client.validateAuthorizationCode(DISCORD_TOKEN_URL, code, codeVerifier)\n const user = await getUser(tokens.accessToken())\n return { tokens, user }\n },\n async refreshAccessToken(refreshToken: string): Promise<RefreshedTokens> {\n const body = new URLSearchParams({\n client_id: config.clientId,\n client_secret: config.clientSecret,\n grant_type: 'refresh_token',\n refresh_token: refreshToken,\n })\n const res = await fetch(DISCORD_TOKEN_URL, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body,\n })\n const json = await res.json()\n if (!res.ok)\n throw json\n const expiresIn: number | undefined = json.expires_in\n const expiresAt = typeof expiresIn === 'number' ? Math.floor(Date.now() / 1000) + Math.floor(expiresIn) : undefined\n return {\n accessToken: json.access_token,\n refreshToken: json.refresh_token ?? refreshToken,\n expiresAt: expiresAt ?? null,\n idToken: json.id_token ?? null,\n tokenType: json.token_type ?? null,\n scope: json.scope ?? null,\n }\n },\n }\n}\n","import type { AuthUser, OAuthProvider, OAuthProviderConfig } from '../index'\nimport { CodeChallengeMethod, OAuth2Client } from 'arctic'\n\nconst FB_GRAPH_ME_URL = 'https://graph.facebook.com/me'\nconst FB_AUTH_URL = 'https://www.facebook.com/dialog/oauth'\nconst FB_TOKEN_URL = 'https://graph.facebook.com/oauth/access_token'\n\ninterface FacebookUserResponse {\n id: string\n name?: string | null\n email?: string | null\n picture?: { data?: { url?: string | null } } | string | null\n [key: string]: unknown\n}\n\nasync function getUser(accessToken: string): Promise<AuthUser> {\n const searchParams = new URLSearchParams()\n searchParams.set('fields', ['id', 'name', 'picture', 'email'].join(','))\n\n const response = await fetch(`${FB_GRAPH_ME_URL}?${searchParams.toString()}`, {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n })\n const data: FacebookUserResponse = await response.json()\n\n let avatar: string | null = null\n if (typeof data.picture === 'string')\n avatar = data.picture\n else if (data.picture && typeof data.picture === 'object' && 'data' in data.picture)\n avatar = data.picture.data?.url ?? null\n\n return {\n id: String(data.id),\n name: data.name ?? '',\n email: data.email ?? null,\n emailVerified: data.email ? true : null,\n avatar,\n raw: data,\n }\n}\n\nexport function Facebook(config: OAuthProviderConfig): OAuthProvider<'facebook', OAuthProviderConfig> {\n const defaultClient = new OAuth2Client(config.clientId, config.clientSecret, config.redirectUri ?? null)\n\n function getClient(redirectUri?: string): OAuth2Client {\n if (!redirectUri || redirectUri === config.redirectUri)\n return defaultClient\n return new OAuth2Client(config.clientId, config.clientSecret, redirectUri)\n }\n\n return {\n id: 'facebook',\n linkOnly: config.linkOnly,\n requiresRedirectUri: true,\n\n async getAuthorizationUrl(state, codeVerifier, options) {\n const client = getClient(options?.redirectUri)\n const scopes = options?.scopes ?? config.scope ?? ['email', 'public_profile']\n const url = await client.createAuthorizationURLWithPKCE(\n FB_AUTH_URL,\n state,\n CodeChallengeMethod.S256,\n codeVerifier,\n scopes,\n )\n const mergedParams = { ...(config.params ?? {}), ...(options?.params ?? {}) }\n if (Object.keys(mergedParams).length) {\n for (const [k, v] of Object.entries(mergedParams)) {\n if (v != null)\n url.searchParams.set(k, String(v))\n }\n }\n return url\n },\n\n async validateCallback(code, codeVerifier, redirectUri) {\n const client = getClient(redirectUri)\n const tokens = await client.validateAuthorizationCode(FB_TOKEN_URL, code, codeVerifier)\n const user = await getUser(tokens.accessToken())\n return { tokens, user }\n },\n }\n}\n","import type { AuthUser, OAuthProvider, OAuthProviderConfig } from '../index'\nimport { CodeChallengeMethod, OAuth2Client } from 'arctic'\n\nconst GITHUB_AUTH_URL = 'https://github.com/login/oauth/authorize'\nconst GITHUB_TOKEN_URL = 'https://github.com/login/oauth/access_token'\nconst GITHUB_API_URL = 'https://api.github.com'\n\ninterface GitHubUser {\n id: number\n login: string\n avatar_url: string\n name: string\n email: string | null\n [key: string]: unknown\n}\n\ninterface GitHubEmail {\n email: string\n primary: boolean\n verified: boolean\n visibility: 'public' | 'private' | null\n}\n\nasync function getUser(accessToken: string): Promise<AuthUser> {\n const response = await fetch(`${GITHUB_API_URL}/user`, {\n headers: {\n 'Authorization': `Bearer ${accessToken}`,\n 'User-Agent': 'gau',\n 'Accept': 'application/vnd.github+json',\n },\n })\n const data: GitHubUser = await response.json()\n\n let email: string | null = data.email\n let emailVerified = false\n\n const emailsResponse = await fetch(`${GITHUB_API_URL}/user/emails`, {\n headers: {\n 'Authorization': `Bearer ${accessToken}`,\n 'User-Agent': 'gau',\n 'Accept': 'application/vnd.github+json',\n },\n })\n\n if (emailsResponse.ok) {\n const emails: GitHubEmail[] = await emailsResponse.json()\n const primaryEmail = emails.find(e => e.primary && e.verified)\n if (primaryEmail) {\n email = primaryEmail.email\n emailVerified = true\n }\n else {\n // Fallback to the first verified email if no primary is found\n const verifiedEmail = emails.find(e => e.verified)\n if (verifiedEmail) {\n email = verifiedEmail.email\n emailVerified = true\n }\n }\n }\n\n return {\n id: data.id.toString(),\n name: data.name ?? data.login,\n email,\n emailVerified,\n avatar: data.avatar_url,\n raw: data,\n }\n}\n\nexport function GitHub(config: OAuthProviderConfig): OAuthProvider<'github', OAuthProviderConfig> {\n const defaultClient = new OAuth2Client(config.clientId, config.clientSecret, config.redirectUri ?? null)\n\n function getClient(redirectUri?: string): OAuth2Client {\n if (!redirectUri || redirectUri === config.redirectUri)\n return defaultClient\n\n return new OAuth2Client(config.clientId, config.clientSecret, redirectUri)\n }\n\n return {\n id: 'github',\n linkOnly: config.linkOnly,\n requiresRedirectUri: true,\n\n async getAuthorizationUrl(state: string, codeVerifier: string, options?: { scopes?: string[], redirectUri?: string, params?: Record<string, string>, overrides?: any }) {\n const client = getClient(options?.redirectUri)\n const scopes = options?.scopes ?? config.scope ?? ['read:user', 'user:email']\n const url = await client.createAuthorizationURLWithPKCE(GITHUB_AUTH_URL, state, CodeChallengeMethod.S256, codeVerifier, scopes)\n if (options?.params) {\n for (const [k, v] of Object.entries(options.params)) {\n if (v != null)\n url.searchParams.set(k, String(v))\n }\n }\n return url\n },\n\n async validateCallback(code: string, codeVerifier: string, redirectUri?: string) {\n const client = getClient(redirectUri)\n const tokens = await client.validateAuthorizationCode(GITHUB_TOKEN_URL, code, codeVerifier)\n const user = await getUser(tokens.accessToken())\n return { tokens, user }\n },\n }\n}\n","import type { AuthUser, OAuthProvider, OAuthProviderConfig, RefreshedTokens } from '../index'\nimport { CodeChallengeMethod, OAuth2Client } from 'arctic'\n\nconst GOOGLE_AUTH_URL = 'https://accounts.google.com/o/oauth2/v2/auth'\nconst GOOGLE_TOKEN_URL = 'https://oauth2.googleapis.com/token'\nconst GOOGLE_USERINFO_URL = 'https://openidconnect.googleapis.com/v1/userinfo'\n\ninterface GoogleUser {\n sub: string\n name: string\n email: string | null\n email_verified: boolean\n picture: string | null\n [key: string]: unknown\n}\n\nasync function getUser(accessToken: string): Promise<AuthUser> {\n const response = await fetch(GOOGLE_USERINFO_URL, {\n headers: {\n 'Authorization': `Bearer ${accessToken}`,\n 'User-Agent': 'gau',\n },\n })\n const data: GoogleUser = await response.json()\n\n return {\n id: data.sub,\n name: data.name,\n email: data.email,\n emailVerified: data.email_verified,\n avatar: data.picture,\n raw: data,\n }\n}\n\nexport function Google(config: OAuthProviderConfig): OAuthProvider<'google'> {\n const defaultClient = new OAuth2Client(config.clientId, config.clientSecret, config.redirectUri ?? null)\n\n function getClient(redirectUri?: string): OAuth2Client {\n if (!redirectUri || redirectUri === config.redirectUri)\n return defaultClient\n\n return new OAuth2Client(config.clientId, config.clientSecret, redirectUri)\n }\n\n return {\n id: 'google',\n linkOnly: config.linkOnly,\n requiresRedirectUri: true,\n\n async getAuthorizationUrl(state: string, codeVerifier: string, options?: { scopes?: string[], redirectUri?: string, params?: Record<string, string>, overrides?: any }) {\n const client = getClient(options?.redirectUri)\n const scopes = options?.scopes ?? config.scope ?? ['openid', 'email', 'profile']\n const url = await client.createAuthorizationURLWithPKCE(GOOGLE_AUTH_URL, state, CodeChallengeMethod.S256, codeVerifier, scopes)\n if (options?.params) {\n for (const [k, v] of Object.entries(options.params)) {\n if (v != null)\n url.searchParams.set(k, String(v))\n }\n }\n return url\n },\n\n async validateCallback(code: string, codeVerifier: string, redirectUri?: string) {\n const client = getClient(redirectUri)\n const tokens = await client.validateAuthorizationCode(GOOGLE_TOKEN_URL, code, codeVerifier)\n const user = await getUser(tokens.accessToken())\n return { tokens, user }\n },\n\n async refreshAccessToken(refreshToken: string): Promise<RefreshedTokens> {\n const body = new URLSearchParams({\n client_id: config.clientId,\n client_secret: config.clientSecret,\n grant_type: 'refresh_token',\n refresh_token: refreshToken,\n })\n const res = await fetch(GOOGLE_TOKEN_URL, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body,\n })\n const json = await res.json() as any\n if (!res.ok)\n throw json\n\n const expiresIn: number | undefined = json.expires_in\n const expiresAt = typeof expiresIn === 'number' ? Math.floor(Date.now() / 1000) + Math.floor(expiresIn) : undefined\n\n return {\n accessToken: json.access_token,\n refreshToken: json.refresh_token ?? refreshToken,\n expiresAt: expiresAt ?? null,\n idToken: json.id_token ?? null,\n tokenType: json.token_type ?? null,\n scope: json.scope ?? null,\n }\n },\n }\n}\n","import type { AuthUser, OAuthProvider, OAuthProviderConfig, RefreshedTokens } from '../index'\nimport { CodeChallengeMethod, OAuth2Client } from 'arctic'\n\n// https://learn.microsoft.com/en-us/entra/identity-platform/v2-protocols-oidc\nconst MICROSOFT_USER_INFO_URL = 'https://graph.microsoft.com/v1.0/me'\n\n// https://learn.microsoft.com/en-us/graph/api/profilephoto-get?view=graph-rest-1.0\nconst MICROSOFT_USER_PHOTO_URL = 'https://graph.microsoft.com/v1.0/me/photo/$value'\n\n// https://learn.microsoft.com/en-us/entra/identity-platform/v2-oauth2-auth-code-flow#request-an-authorization-code\ninterface MicrosoftConfig extends OAuthProviderConfig {\n tenant?: 'common' | 'organizations' | 'consumers' | (string & {})\n prompt?: 'login' | 'none' | 'consent' | 'select_account' | (string & {})\n}\n\ninterface MicrosoftUser {\n id: string\n displayName: string\n mail: string | null\n userPrincipalName: string\n [key: string]: unknown\n}\n\nfunction base64url_decode(str: string): Uint8Array {\n const base64 = str.replace(/-/g, '+').replace(/_/g, '/')\n const padLength = (4 - (base64.length % 4)) % 4\n const padded = base64.padEnd(base64.length + padLength, '=')\n const binary_string = atob(padded)\n const len = binary_string.length\n const bytes = new Uint8Array(len)\n for (let i = 0; i < len; i++)\n bytes[i] = binary_string.charCodeAt(i)\n\n return bytes\n}\n\nasync function getUser(accessToken: string, idToken: string | null): Promise<AuthUser> {\n const userResponse = await fetch(MICROSOFT_USER_INFO_URL, {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n })\n const userData: MicrosoftUser = await userResponse.json()\n\n let email: string | null = userData.mail ?? userData.userPrincipalName\n let emailVerified = false\n if (idToken) {\n try {\n const parts = idToken.split('.')\n const payload = JSON.parse(new TextDecoder().decode(base64url_decode(parts[1]!))) as Record<string, any>\n const personalTenantId = '9188040d-6c67-4c5b-b112-36a304b66dad'\n\n // For work/school accounts, the `verified_primary_email` is the source of truth.\n if (payload.verified_primary_email) {\n const primaryEmail = Array.isArray(payload.verified_primary_email)\n ? payload.verified_primary_email[0]\n : payload.verified_primary_email\n\n if (typeof primaryEmail === 'string') {\n email = primaryEmail\n emailVerified = true\n }\n }\n // For personal accounts, the `email` claim is reliable and verified.\n else if (payload.tid === personalTenantId) {\n email = payload.email ?? email\n emailVerified = true\n }\n // Legacy fallback for `xms_edov`.\n else if (payload.xms_edov === true) {\n email = payload.email ?? email\n emailVerified = true\n }\n }\n catch {\n }\n }\n\n const photoResponse = await fetch(MICROSOFT_USER_PHOTO_URL, {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n })\n\n let avatar: string | null = null\n if (photoResponse.ok) {\n try {\n const blob = await photoResponse.blob()\n const reader = new FileReader()\n const dataUrlPromise = new Promise<string>((resolve, reject) => {\n reader.onloadend = () => resolve(reader.result as string)\n reader.onerror = reject\n reader.readAsDataURL(blob)\n })\n avatar = await dataUrlPromise\n }\n catch {\n }\n }\n\n return {\n id: userData.id,\n name: userData.displayName,\n email,\n emailVerified,\n avatar,\n raw: userData,\n }\n}\n\nexport function Microsoft(config: MicrosoftConfig): OAuthProvider<'microsoft', MicrosoftConfig> {\n const getEndpoints = (tenant: MicrosoftConfig['tenant']) => ({\n authURL: `https://login.microsoftonline.com/${tenant}/oauth2/v2.0/authorize`,\n tokenURL: `https://login.microsoftonline.com/${tenant}/oauth2/v2.0/token`,\n })\n\n const defaultClient = new OAuth2Client(config.clientId, config.clientSecret, config.redirectUri ?? null)\n\n function getClient(redirectUri?: string): OAuth2Client {\n if (!redirectUri || redirectUri === config.redirectUri)\n return defaultClient\n\n return new OAuth2Client(config.clientId, config.clientSecret, redirectUri)\n }\n\n return {\n id: 'microsoft',\n linkOnly: config.linkOnly,\n requiresRedirectUri: true,\n\n async getAuthorizationUrl(state: string, codeVerifier: string, options?: { scopes?: string[], redirectUri?: string, params?: Record<string, string>, overrides?: Partial<Pick<MicrosoftConfig, 'tenant' | 'prompt'>> }) {\n const client = getClient(options?.redirectUri)\n const scopes = options?.scopes ?? config.scope ?? ['openid', 'profile', 'email', 'User.Read']\n const effectiveTenant: MicrosoftConfig['tenant'] = options?.overrides?.tenant ?? config.tenant ?? 'common'\n const { authURL } = getEndpoints(effectiveTenant)\n const url = await client.createAuthorizationURLWithPKCE(authURL, state, CodeChallengeMethod.S256, codeVerifier, scopes)\n const prompt = options?.overrides?.prompt ?? options?.params?.prompt ?? config.prompt\n if (prompt)\n url.searchParams.set('prompt', prompt)\n const mergedParams = { ...(config.params ?? {}), ...(options?.params ?? {}) }\n if (Object.keys(mergedParams).length) {\n for (const [k, v] of Object.entries(mergedParams)) {\n if (k === 'prompt')\n continue\n if (v != null)\n url.searchParams.set(k, String(v))\n }\n }\n return url\n },\n\n async validateCallback(code: string, codeVerifier: string, redirectUri?: string, overrides?: Partial<Pick<MicrosoftConfig, 'tenant'>>) {\n const client = getClient(redirectUri)\n const effectiveTenant: MicrosoftConfig['tenant'] = overrides?.tenant ?? config.tenant ?? 'common'\n const { tokenURL } = getEndpoints(effectiveTenant)\n const tokens = await client.validateAuthorizationCode(tokenURL, code, codeVerifier)\n const user = await getUser(tokens.accessToken(), tokens.idToken())\n return { tokens, user }\n },\n\n async refreshAccessToken(refreshToken: string, options?: { overrides?: Partial<Pick<MicrosoftConfig, 'tenant'>> }): Promise<RefreshedTokens> {\n const effectiveTenant: MicrosoftConfig['tenant'] = options?.overrides?.tenant ?? config.tenant ?? 'common'\n const { tokenURL } = getEndpoints(effectiveTenant)\n const body = new URLSearchParams({\n client_id: config.clientId,\n client_secret: config.clientSecret,\n grant_type: 'refresh_token',\n refresh_token: refreshToken,\n scope: (config.scope ?? ['openid', 'profile', 'email', 'User.Read']).join(' '),\n })\n const res = await fetch(tokenURL, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body,\n })\n const json = await res.json() as any\n if (!res.ok)\n throw json\n\n const expiresIn: number | undefined = json.expires_in\n const expiresAt = typeof expiresIn === 'number' ? Math.floor(Date.now() / 1000) + Math.floor(expiresIn) : undefined\n\n return {\n accessToken: json.access_token,\n refreshToken: json.refresh_token ?? refreshToken,\n expiresAt: expiresAt ?? null,\n idToken: json.id_token ?? null,\n tokenType: json.token_type ?? null,\n scope: json.scope ?? null,\n }\n },\n }\n}\n"],"mappings":"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","names":["CodeChallengeMethod","OAuth2Client","getUser","CodeChallengeMethod","OAuth2Client","getUser","CodeChallengeMethod","OAuth2Client","getUser","CodeChallengeMethod","OAuth2Client","getUser"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/oauth/providers/discord.ts","../../../src/oauth/providers/facebook.ts","../../../src/oauth/providers/github.ts","../../../src/oauth/providers/google.ts","../../../src/oauth/providers/microsoft.ts"],"sourcesContent":["import type { AuthUser, OAuthProvider, OAuthProviderConfig } from '../index'\nimport { createOAuthAuthorizationUrl, createOAuthClientResolver, refreshOAuthAccessToken } from '../utils'\n\nconst DISCORD_AUTH_URL = 'https://discord.com/api/oauth2/authorize'\nconst DISCORD_TOKEN_URL = 'https://discord.com/api/oauth2/token'\nconst DISCORD_USER_URL = 'https://discord.com/api/users/@me'\n\ninterface DiscordUser {\n id: string\n username: string\n discriminator: string\n avatar: string | null\n email: string | null\n verified: boolean\n [key: string]: unknown\n}\n\nasync function getUser(accessToken: string): Promise<AuthUser> {\n const response = await fetch(DISCORD_USER_URL, {\n headers: {\n 'Authorization': `Bearer ${accessToken}`,\n 'User-Agent': 'gau',\n },\n })\n const data: DiscordUser = await response.json()\n return {\n id: data.id,\n name: data.username,\n email: data.email,\n emailVerified: data.verified,\n avatar: data.avatar ? `https://cdn.discordapp.com/avatars/${data.id}/${data.avatar}.png` : null,\n raw: data,\n }\n}\n\nexport function Discord(config: OAuthProviderConfig): OAuthProvider<'discord'> {\n const getClient = createOAuthClientResolver(config)\n return {\n id: 'discord',\n linkOnly: config.linkOnly,\n requiresRedirectUri: true,\n async getAuthorizationUrl(state, codeVerifier, options) {\n const scopes = options?.scopes ?? config.scope ?? ['identify', 'email']\n return createOAuthAuthorizationUrl({\n client: getClient(options?.redirectUri),\n authorizationUrl: DISCORD_AUTH_URL,\n state,\n codeVerifier,\n scopes,\n configParams: config.params,\n params: options?.params,\n })\n },\n async validateCallback(code: string, codeVerifier: string, redirectUri?: string) {\n const client = getClient(redirectUri)\n const tokens = await client.validateAuthorizationCode(DISCORD_TOKEN_URL, code, codeVerifier)\n const user = await getUser(tokens.accessToken())\n return { tokens, user }\n },\n async refreshAccessToken(refreshToken) {\n return refreshOAuthAccessToken({\n tokenUrl: DISCORD_TOKEN_URL,\n clientId: config.clientId,\n clientSecret: config.clientSecret,\n refreshToken,\n })\n },\n }\n}\n","import type { AuthUser, OAuthProvider, OAuthProviderConfig } from '../index'\nimport { createOAuthAuthorizationUrl, createOAuthClientResolver } from '../utils'\n\nconst FB_GRAPH_ME_URL = 'https://graph.facebook.com/me'\nconst FB_AUTH_URL = 'https://www.facebook.com/dialog/oauth'\nconst FB_TOKEN_URL = 'https://graph.facebook.com/oauth/access_token'\n\ninterface FacebookUserResponse {\n id: string\n name?: string | null\n email?: string | null\n picture?: { data?: { url?: string | null } } | string | null\n [key: string]: unknown\n}\n\nasync function getUser(accessToken: string): Promise<AuthUser> {\n const searchParams = new URLSearchParams()\n searchParams.set('fields', ['id', 'name', 'picture', 'email'].join(','))\n\n const response = await fetch(`${FB_GRAPH_ME_URL}?${searchParams.toString()}`, {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n })\n const data: FacebookUserResponse = await response.json()\n\n let avatar: string | null = null\n if (typeof data.picture === 'string')\n avatar = data.picture\n else if (data.picture && typeof data.picture === 'object' && 'data' in data.picture)\n avatar = data.picture.data?.url ?? null\n\n return {\n id: String(data.id),\n name: data.name ?? '',\n email: data.email ?? null,\n emailVerified: data.email ? true : null,\n avatar,\n raw: data,\n }\n}\n\nexport function Facebook(config: OAuthProviderConfig): OAuthProvider<'facebook', OAuthProviderConfig> {\n const getClient = createOAuthClientResolver(config)\n\n return {\n id: 'facebook',\n linkOnly: config.linkOnly,\n requiresRedirectUri: true,\n\n async getAuthorizationUrl(state, codeVerifier, options) {\n const scopes = options?.scopes ?? config.scope ?? ['email', 'public_profile']\n return createOAuthAuthorizationUrl({\n client: getClient(options?.redirectUri),\n authorizationUrl: FB_AUTH_URL,\n state,\n codeVerifier,\n scopes,\n configParams: config.params,\n params: options?.params,\n })\n },\n\n async validateCallback(code, codeVerifier, redirectUri) {\n const client = getClient(redirectUri)\n const tokens = await client.validateAuthorizationCode(FB_TOKEN_URL, code, codeVerifier)\n const user = await getUser(tokens.accessToken())\n return { tokens, user }\n },\n }\n}\n","import type { AuthUser, OAuthProvider, OAuthProviderConfig } from '../index'\nimport { createOAuthAuthorizationUrl, createOAuthClientResolver } from '../utils'\n\nconst GITHUB_AUTH_URL = 'https://github.com/login/oauth/authorize'\nconst GITHUB_TOKEN_URL = 'https://github.com/login/oauth/access_token'\nconst GITHUB_API_URL = 'https://api.github.com'\n\ninterface GitHubUser {\n id: number\n login: string\n avatar_url: string\n name: string\n email: string | null\n [key: string]: unknown\n}\n\ninterface GitHubEmail {\n email: string\n primary: boolean\n verified: boolean\n visibility: 'public' | 'private' | null\n}\n\nasync function getUser(accessToken: string): Promise<AuthUser> {\n const response = await fetch(`${GITHUB_API_URL}/user`, {\n headers: {\n 'Authorization': `Bearer ${accessToken}`,\n 'User-Agent': 'gau',\n 'Accept': 'application/vnd.github+json',\n },\n })\n const data: GitHubUser = await response.json()\n\n let email: string | null = data.email\n let emailVerified = false\n\n const emailsResponse = await fetch(`${GITHUB_API_URL}/user/emails`, {\n headers: {\n 'Authorization': `Bearer ${accessToken}`,\n 'User-Agent': 'gau',\n 'Accept': 'application/vnd.github+json',\n },\n })\n\n if (emailsResponse.ok) {\n const emails: GitHubEmail[] = await emailsResponse.json()\n const primaryEmail = emails.find(e => e.primary && e.verified)\n if (primaryEmail) {\n email = primaryEmail.email\n emailVerified = true\n }\n else {\n // Fallback to the first verified email if no primary is found\n const verifiedEmail = emails.find(e => e.verified)\n if (verifiedEmail) {\n email = verifiedEmail.email\n emailVerified = true\n }\n }\n }\n\n return {\n id: data.id.toString(),\n name: data.name ?? data.login,\n email,\n emailVerified,\n avatar: data.avatar_url,\n raw: data,\n }\n}\n\nexport function GitHub(config: OAuthProviderConfig): OAuthProvider<'github', OAuthProviderConfig> {\n const getClient = createOAuthClientResolver(config)\n\n return {\n id: 'github',\n linkOnly: config.linkOnly,\n requiresRedirectUri: true,\n\n async getAuthorizationUrl(state, codeVerifier, options) {\n const scopes = options?.scopes ?? config.scope ?? ['read:user', 'user:email']\n return createOAuthAuthorizationUrl({\n client: getClient(options?.redirectUri),\n authorizationUrl: GITHUB_AUTH_URL,\n state,\n codeVerifier,\n scopes,\n configParams: config.params,\n params: options?.params,\n })\n },\n\n async validateCallback(code: string, codeVerifier: string, redirectUri?: string) {\n const client = getClient(redirectUri)\n const tokens = await client.validateAuthorizationCode(GITHUB_TOKEN_URL, code, codeVerifier)\n const user = await getUser(tokens.accessToken())\n return { tokens, user }\n },\n }\n}\n","import type { AuthUser, OAuthProvider, OAuthProviderConfig } from '../index'\nimport { createOAuthAuthorizationUrl, createOAuthClientResolver, refreshOAuthAccessToken } from '../utils'\n\nconst GOOGLE_AUTH_URL = 'https://accounts.google.com/o/oauth2/v2/auth'\nconst GOOGLE_TOKEN_URL = 'https://oauth2.googleapis.com/token'\nconst GOOGLE_USERINFO_URL = 'https://openidconnect.googleapis.com/v1/userinfo'\n\ninterface GoogleUser {\n sub: string\n name: string\n email: string | null\n email_verified: boolean\n picture: string | null\n [key: string]: unknown\n}\n\nasync function getUser(accessToken: string): Promise<AuthUser> {\n const response = await fetch(GOOGLE_USERINFO_URL, {\n headers: {\n 'Authorization': `Bearer ${accessToken}`,\n 'User-Agent': 'gau',\n },\n })\n const data: GoogleUser = await response.json()\n\n return {\n id: data.sub,\n name: data.name,\n email: data.email,\n emailVerified: data.email_verified,\n avatar: data.picture,\n raw: data,\n }\n}\n\nexport function Google(config: OAuthProviderConfig): OAuthProvider<'google'> {\n const getClient = createOAuthClientResolver(config)\n\n return {\n id: 'google',\n linkOnly: config.linkOnly,\n requiresRedirectUri: true,\n\n async getAuthorizationUrl(state, codeVerifier, options) {\n const scopes = options?.scopes ?? config.scope ?? ['openid', 'email', 'profile']\n return createOAuthAuthorizationUrl({\n client: getClient(options?.redirectUri),\n authorizationUrl: GOOGLE_AUTH_URL,\n state,\n codeVerifier,\n scopes,\n configParams: config.params,\n params: options?.params,\n })\n },\n\n async validateCallback(code: string, codeVerifier: string, redirectUri?: string) {\n const client = getClient(redirectUri)\n const tokens = await client.validateAuthorizationCode(GOOGLE_TOKEN_URL, code, codeVerifier)\n const user = await getUser(tokens.accessToken())\n return { tokens, user }\n },\n\n async refreshAccessToken(refreshToken) {\n return refreshOAuthAccessToken({\n tokenUrl: GOOGLE_TOKEN_URL,\n clientId: config.clientId,\n clientSecret: config.clientSecret,\n refreshToken,\n })\n },\n }\n}\n","import type { AuthUser, OAuthProvider, OAuthProviderConfig } from '../index'\nimport { createOAuthAuthorizationUrl, createOAuthClientResolver, mergeOAuthParams, refreshOAuthAccessToken } from '../utils'\n\n// https://learn.microsoft.com/en-us/entra/identity-platform/v2-protocols-oidc\nconst MICROSOFT_USER_INFO_URL = 'https://graph.microsoft.com/v1.0/me'\n\n// https://learn.microsoft.com/en-us/graph/api/profilephoto-get?view=graph-rest-1.0\nconst MICROSOFT_USER_PHOTO_URL = 'https://graph.microsoft.com/v1.0/me/photo/$value'\n\n// https://learn.microsoft.com/en-us/entra/identity-platform/v2-oauth2-auth-code-flow#request-an-authorization-code\ninterface MicrosoftConfig extends OAuthProviderConfig {\n tenant?: 'common' | 'organizations' | 'consumers' | (string & {})\n prompt?: 'login' | 'none' | 'consent' | 'select_account' | (string & {})\n}\n\ninterface MicrosoftUser {\n id: string\n displayName: string\n mail: string | null\n userPrincipalName: string\n [key: string]: unknown\n}\n\nfunction base64url_decode(str: string): Uint8Array {\n const base64 = str.replace(/-/g, '+').replace(/_/g, '/')\n const padLength = (4 - (base64.length % 4)) % 4\n const padded = base64.padEnd(base64.length + padLength, '=')\n const binary_string = atob(padded)\n const len = binary_string.length\n const bytes = new Uint8Array(len)\n for (let i = 0; i < len; i++)\n bytes[i] = binary_string.charCodeAt(i)\n\n return bytes\n}\n\nasync function getUser(accessToken: string, idToken: string | null): Promise<AuthUser> {\n const userResponse = await fetch(MICROSOFT_USER_INFO_URL, {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n })\n const userData: MicrosoftUser = await userResponse.json()\n\n let email: string | null = userData.mail ?? userData.userPrincipalName\n let emailVerified = false\n if (idToken) {\n try {\n const parts = idToken.split('.')\n const payload = JSON.parse(new TextDecoder().decode(base64url_decode(parts[1]!))) as Record<string, any>\n const personalTenantId = '9188040d-6c67-4c5b-b112-36a304b66dad'\n\n // For work/school accounts, the `verified_primary_email` is the source of truth.\n if (payload.verified_primary_email) {\n const primaryEmail = Array.isArray(payload.verified_primary_email)\n ? payload.verified_primary_email[0]\n : payload.verified_primary_email\n\n if (typeof primaryEmail === 'string') {\n email = primaryEmail\n emailVerified = true\n }\n }\n // For personal accounts, the `email` claim is reliable and verified.\n else if (payload.tid === personalTenantId) {\n email = payload.email ?? email\n emailVerified = true\n }\n // Legacy fallback for `xms_edov`.\n else if (payload.xms_edov === true) {\n email = payload.email ?? email\n emailVerified = true\n }\n }\n catch {\n }\n }\n\n const photoResponse = await fetch(MICROSOFT_USER_PHOTO_URL, {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n })\n\n let avatar: string | null = null\n if (photoResponse.ok) {\n try {\n const blob = await photoResponse.blob()\n const reader = new FileReader()\n const dataUrlPromise = new Promise<string>((resolve, reject) => {\n reader.onloadend = () => resolve(reader.result as string)\n reader.onerror = reject\n reader.readAsDataURL(blob)\n })\n avatar = await dataUrlPromise\n }\n catch {\n }\n }\n\n return {\n id: userData.id,\n name: userData.displayName,\n email,\n emailVerified,\n avatar,\n raw: userData,\n }\n}\n\nexport function Microsoft(config: MicrosoftConfig): OAuthProvider<'microsoft', MicrosoftConfig> {\n const getEndpoints = (tenant: MicrosoftConfig['tenant']) => ({\n authURL: `https://login.microsoftonline.com/${tenant}/oauth2/v2.0/authorize`,\n tokenURL: `https://login.microsoftonline.com/${tenant}/oauth2/v2.0/token`,\n })\n\n const getClient = createOAuthClientResolver(config)\n\n return {\n id: 'microsoft',\n linkOnly: config.linkOnly,\n requiresRedirectUri: true,\n\n async getAuthorizationUrl(state, codeVerifier, options) {\n const scopes = options?.scopes ?? config.scope ?? ['openid', 'profile', 'email', 'User.Read']\n const effectiveTenant: MicrosoftConfig['tenant'] = options?.overrides?.tenant ?? config.tenant ?? 'common'\n const { authURL } = getEndpoints(effectiveTenant)\n const params = mergeOAuthParams(config.params, options?.params)\n const prompt = options?.overrides?.prompt ?? params.prompt ?? config.prompt\n\n return createOAuthAuthorizationUrl({\n client: getClient(options?.redirectUri),\n authorizationUrl: authURL,\n state,\n codeVerifier,\n scopes,\n configParams: config.params,\n params: options?.params,\n omitParamKeys: ['prompt'],\n extraParams: prompt ? { prompt } : undefined,\n })\n },\n\n async validateCallback(code: string, codeVerifier: string, redirectUri?: string, overrides?: Partial<Pick<MicrosoftConfig, 'tenant'>>) {\n const client = getClient(redirectUri)\n const effectiveTenant: MicrosoftConfig['tenant'] = overrides?.tenant ?? config.tenant ?? 'common'\n const { tokenURL } = getEndpoints(effectiveTenant)\n const tokens = await client.validateAuthorizationCode(tokenURL, code, codeVerifier)\n const user = await getUser(tokens.accessToken(), tokens.idToken())\n return { tokens, user }\n },\n\n async refreshAccessToken(refreshToken, options) {\n const effectiveTenant: MicrosoftConfig['tenant'] = options?.overrides?.tenant ?? config.tenant ?? 'common'\n const { tokenURL } = getEndpoints(effectiveTenant)\n return refreshOAuthAccessToken({\n tokenUrl: tokenURL,\n clientId: config.clientId,\n clientSecret: config.clientSecret,\n refreshToken,\n scopes: options?.scopes ?? config.scope ?? ['openid', 'profile', 'email', 'User.Read'],\n })\n },\n }\n}\n"],"mappings":"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","names":["getUser","getUser","getUser","getUser"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discord.d.ts","sourceRoot":"","sources":["../../../../src/oauth/providers/discord.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,aAAa,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"discord.d.ts","sourceRoot":"","sources":["../../../../src/oauth/providers/discord.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,aAAa,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAmC5E,wBAAgB,OAAO,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa,CAAC,SAAS,CAAC,CAiC7E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"facebook.d.ts","sourceRoot":"","sources":["../../../../src/oauth/providers/facebook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,aAAa,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AA0C5E,wBAAgB,QAAQ,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa,CAAC,UAAU,EAAE,mBAAmB,CAAC,
|
|
1
|
+
{"version":3,"file":"facebook.d.ts","sourceRoot":"","sources":["../../../../src/oauth/providers/facebook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,aAAa,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AA0C5E,wBAAgB,QAAQ,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa,CAAC,UAAU,EAAE,mBAAmB,CAAC,CA4BpG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../../src/oauth/providers/github.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,aAAa,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAuE5E,wBAAgB,MAAM,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa,CAAC,QAAQ,EAAE,mBAAmB,CAAC,
|
|
1
|
+
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../../src/oauth/providers/github.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,aAAa,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAuE5E,wBAAgB,MAAM,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CA4BhG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../../../src/oauth/providers/google.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,aAAa,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../../../src/oauth/providers/google.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,aAAa,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAmC5E,wBAAgB,MAAM,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa,CAAC,QAAQ,CAAC,CAqC3E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"microsoft.d.ts","sourceRoot":"","sources":["../../../../src/oauth/providers/microsoft.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,aAAa,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"microsoft.d.ts","sourceRoot":"","sources":["../../../../src/oauth/providers/microsoft.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,aAAa,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAU5E,UAAU,eAAgB,SAAQ,mBAAmB;IACnD,MAAM,CAAC,EAAE,QAAQ,GAAG,eAAe,GAAG,WAAW,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;IACjE,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,gBAAgB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;CACzE;AAiGD,wBAAgB,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,aAAa,CAAC,WAAW,EAAE,eAAe,CAAC,CAsD9F"}
|
|
@@ -1,5 +1,31 @@
|
|
|
1
|
+
import type { OAuthProviderConfig, RefreshedTokens } from './index';
|
|
2
|
+
import { OAuth2Client } from 'arctic';
|
|
1
3
|
export declare function createOAuthUris(): {
|
|
2
4
|
state: string;
|
|
3
5
|
codeVerifier: string;
|
|
4
6
|
};
|
|
7
|
+
export declare function createOAuthClientResolver(config: Pick<OAuthProviderConfig, 'clientId' | 'clientSecret' | 'redirectUri'>): (redirectUri?: string | undefined) => OAuth2Client;
|
|
8
|
+
export declare function mergeOAuthParams(configParams?: Record<string, string>, optionParams?: Record<string, string>): {
|
|
9
|
+
[x: string]: string;
|
|
10
|
+
};
|
|
11
|
+
export declare function applyOAuthParams(url: URL, params?: Record<string, string>, omitKeys?: string[]): URL;
|
|
12
|
+
export declare function createOAuthAuthorizationUrl(options: {
|
|
13
|
+
client: OAuth2Client;
|
|
14
|
+
authorizationUrl: string;
|
|
15
|
+
state: string;
|
|
16
|
+
codeVerifier: string;
|
|
17
|
+
scopes: string[];
|
|
18
|
+
configParams?: Record<string, string>;
|
|
19
|
+
params?: Record<string, string>;
|
|
20
|
+
extraParams?: Record<string, string>;
|
|
21
|
+
omitParamKeys?: string[];
|
|
22
|
+
}): Promise<URL>;
|
|
23
|
+
export declare function normalizeRefreshedTokens(tokens: Record<string, any>, refreshToken: string): RefreshedTokens;
|
|
24
|
+
export declare function refreshOAuthAccessToken(options: {
|
|
25
|
+
tokenUrl: string;
|
|
26
|
+
clientId: string;
|
|
27
|
+
clientSecret: string;
|
|
28
|
+
refreshToken: string;
|
|
29
|
+
scopes?: string[];
|
|
30
|
+
}): Promise<RefreshedTokens>;
|
|
5
31
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/oauth/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/oauth/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AACnE,OAAO,EAA4D,YAAY,EAAE,MAAM,QAAQ,CAAA;AAE/F,wBAAgB,eAAe;;;EAQ9B;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE,UAAU,GAAG,cAAc,GAAG,aAAa,CAAC,sDASvH;AAED,wBAAgB,gBAAgB,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;;EAE5G;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAE,MAAM,EAAO,OASlG;AAED,wBAAsB,2BAA2B,CAAC,OAAO,EAAE;IACzD,MAAM,EAAE,YAAY,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;CACzB,gBAaA;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,YAAY,EAAE,MAAM,GAAG,eAAe,CAkB3G;AAED,wBAAsB,uBAAuB,CAAC,OAAO,EAAE;IACrD,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB,4BAwBA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{handleTauriDeepLink as o,isTauri as r,linkAccountWithTauri as m,setupTauriListener as p,signInWithTauri as t,startAuthBridge as
|
|
1
|
+
import{handleTauriDeepLink as o,isTauri as r,linkAccountWithTauri as m,setupTauriListener as p,signInWithTauri as t,startAuthBridge as H}from"../../chunk-6HKZAQHT.js";export{o as handleTauriDeepLink,r as isTauri,m as linkAccountWithTauri,p as setupTauriListener,t as signInWithTauri,H as startAuthBridge};//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/tauri/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAI1D,wBAAgB,OAAO,IAAI,OAAO,CAEjC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/tauri/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAI1D,wBAAgB,OAAO,IAAI,OAAO,CAEjC;AAwCD,wBAAsB,eAAe,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,EAAE,CAAC,SAAS,WAAW,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,SAAS,GAAG,SAAS,EACjL,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,MAAc,EACtB,gBAAgB,CAAC,EAAE,MAAM,EACzB,OAAO,CAAC,EAAE,EAAE,iBAkBb;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GACtC,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,CAc9B;AAED,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,iBAmCvH;AAED,wBAAsB,oBAAoB,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,EAAE,CAAC,SAAS,WAAW,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,SAAS,GAAG,SAAS,EACtL,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,MAAc,EACtB,gBAAgB,CAAC,EAAE,MAAM,EACzB,OAAO,CAAC,EAAE,EAAE,iBAsBb;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAC/C,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,CAQ9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{handleTauriDeepLink as o,isTauri as r,linkAccountWithTauri as m,setupTauriListener as p,signInWithTauri as t,startAuthBridge as
|
|
1
|
+
import{handleTauriDeepLink as o,isTauri as r,linkAccountWithTauri as m,setupTauriListener as p,signInWithTauri as t,startAuthBridge as H}from"../../../chunk-6HKZAQHT.js";export{o as handleTauriDeepLink,r as isTauri,m as linkAccountWithTauri,p as setupTauriListener,t as signInWithTauri,H as startAuthBridge};//# sourceMappingURL=index.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { CreateAuthOptions,
|
|
1
|
+
import type { CreateAuthOptions, RefreshSessionOptions } from '../core';
|
|
2
|
+
import type { AuthInstance } from '../core/serverSession';
|
|
2
3
|
import type { OAuthProvider } from '../oauth';
|
|
3
|
-
import {
|
|
4
|
+
import { REFRESHED_TOKEN_HEADER } from '../core';
|
|
4
5
|
export { REFRESHED_TOKEN_HEADER };
|
|
5
|
-
type AuthInstance<TProviders extends OAuthProvider<any>[]> = ReturnType<typeof createAuth<TProviders>>;
|
|
6
6
|
/**
|
|
7
7
|
* Creates GET and POST handlers for SolidStart.
|
|
8
8
|
*
|
|
@@ -25,7 +25,7 @@ export declare function SolidAuth<const TProviders extends OAuthProvider<any>[]>
|
|
|
25
25
|
* Returns full session data including access tokens - for server-side use only.
|
|
26
26
|
* @internal
|
|
27
27
|
*/
|
|
28
|
-
export declare function createSolidStartGetServerSession<const TProviders extends OAuthProvider<any>[]>(auth: AuthInstance<TProviders>): (request: Request) => Promise<GauServerSession<TProviders[number] extends infer T ? T extends TProviders[number] ? T extends OAuthProvider<infer T_1 extends string, import("../oauth").OAuthProviderConfig> ? T_1 : never : never : never>>;
|
|
28
|
+
export declare function createSolidStartGetServerSession<const TProviders extends OAuthProvider<any>[]>(auth: AuthInstance<TProviders>): (request: Request) => Promise<import("..").GauServerSession<TProviders[number] extends infer T ? T extends TProviders[number] ? T extends OAuthProvider<infer T_1 extends string, import("../oauth").OAuthProviderConfig> ? T_1 : never : never : never>>;
|
|
29
29
|
/**
|
|
30
30
|
* SolidStart middleware factory to attach `locals.getSession` and `locals.getServerSession`.
|
|
31
31
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/solidstart/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/solidstart/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAE7C,OAAO,EAAiB,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAG/D,OAAO,EAAE,sBAAsB,EAAE,CAAA;AAEjC;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,KAAK,CAAC,UAAU,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,iBAAiB,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC;;;;EAe/I;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAAC,KAAK,CAAC,UAAU,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,CAAC,UAAU,CAAC,6PAE7H;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,KAAK,CAAC,UAAU,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,EAC1E,cAAc,EAAE,MAAM,EAAE,GAAG,OAAO,EAClC,aAAa,EAAE,iBAAiB,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,iCAwBxE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,CAAC,UAAU,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,EAC7E,aAAa,EAAE,iBAAiB,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,EACvE,OAAO,GAAE,qBAA0B,iCAcpC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{createRequestSessionCache as e,resolveAuth as s,resolveServerSession as o}from"../../chunk-MXZ363UZ.js";import{REFRESHED_TOKEN_HEADER as r,createHandler as t}from"../../chunk-NHENQLYI.js";import"../../chunk-VB2ML4Q5.js";import"../../chunk-VXWI4D7H.js";import n from"process";function c(e){const o=s(e);o.development="development"===n.env.NODE_ENV,o.errorRedirect||(o.errorRedirect="/auth/error");const r=t(o),c=e=>r(e.request);return{GET:c,POST:c,OPTIONS:c}}function i(e){return async s=>o(e,s)}function u(o,r){const t=s(r),n=i(t);return async s=>{const r=new URL(s.request.url);if("boolean"==typeof o?o:o.includes(r.pathname)){const o=await n(s.request),r=e(t,s.request,o);return s.locals.getSession=r.getSession,void(s.locals.getServerSession=r.getServerSession)}const c=e(t,s.request);s.locals.getServerSession=c.getServerSession,s.locals.getSession=c.getSession}}function a(e,o={}){const t=s(e);return async e=>{const s=await t.refreshSession(e.request,o);s&&("cookie"===s.source?e.response.headers.set("Set-Cookie",s.cookie):e.response.headers.set(r,s.token))}}export{r as REFRESHED_TOKEN_HEADER,c as SolidAuth,u as authMiddleware,i as createSolidStartGetServerSession,a as refreshMiddleware};//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/solidstart/index.ts"],"sourcesContent":["import type { CreateAuthOptions,
|
|
1
|
+
{"version":3,"sources":["../../../src/solidstart/index.ts"],"sourcesContent":["import type { CreateAuthOptions, RefreshSessionOptions } from '../core'\nimport type { AuthInstance } from '../core/serverSession'\nimport type { OAuthProvider } from '../oauth'\nimport process from 'node:process'\nimport { createHandler, REFRESHED_TOKEN_HEADER } from '../core'\nimport { createRequestSessionCache, resolveAuth, resolveServerSession } from '../core/serverSession'\n\nexport { REFRESHED_TOKEN_HEADER }\n\n/**\n * Creates GET and POST handlers for SolidStart.\n *\n * @example\n * ```ts\n * // src/routes/api/auth/[...auth].ts\n * import { SolidAuth } from '@rttnd/gau/solid-start'\n * import { authOptions } from '~/server/auth'\n *\n * export const { GET, POST } = SolidAuth(authOptions)\n * ```\n */\nexport function SolidAuth<const TProviders extends OAuthProvider<any>[]>(optionsOrAuth: CreateAuthOptions<TProviders> | AuthInstance<TProviders>) {\n const auth = resolveAuth(optionsOrAuth)\n\n auth.development = process.env.NODE_ENV === 'development'\n\n if (!auth.errorRedirect)\n auth.errorRedirect = '/auth/error'\n\n const handler = createHandler(auth)\n const solidHandler = (event: any) => handler(event.request)\n return {\n GET: solidHandler,\n POST: solidHandler,\n OPTIONS: solidHandler,\n }\n}\n\n/**\n * Creates a SolidStart-compatible getServerSession resolver to validate a session from a Request.\n * Returns full session data including access tokens - for server-side use only.\n * @internal\n */\nexport function createSolidStartGetServerSession<const TProviders extends OAuthProvider<any>[]>(auth: AuthInstance<TProviders>) {\n return async (request: Request) => resolveServerSession(auth, request)\n}\n\n/**\n * SolidStart middleware factory to attach `locals.getSession` and `locals.getServerSession`.\n *\n * - `getSession()` - Returns client-safe session (no tokens). Safe to serialize to browser.\n * - `getServerSession()` - Returns full session with access/refresh tokens. Server-only.\n *\n * @param pathsToPreLoad - Control eager vs lazy session loading:\n * - `true` - Preload session on all routes\n * - `false` - Lazy load (resolve on first `getSession()` call)\n * - `string[]` - Preload only on specific paths\n *\n * @example\n * ```ts\n * // middleware.ts\n * export default createMiddleware({\n * onRequest: [authMiddleware(true, auth)],\n * })\n */\nexport function authMiddleware<const TProviders extends OAuthProvider<any>[]>(\n pathsToPreLoad: string[] | boolean,\n optionsOrAuth: CreateAuthOptions<TProviders> | AuthInstance<TProviders>,\n) {\n const auth = resolveAuth(optionsOrAuth)\n\n const getServerSession = createSolidStartGetServerSession(auth)\n\n return async (event: any) => {\n const url = new URL(event.request.url)\n const shouldPreload = typeof pathsToPreLoad === 'boolean'\n ? pathsToPreLoad\n : pathsToPreLoad.includes(url.pathname)\n\n if (shouldPreload) {\n const preloaded = await getServerSession(event.request)\n const sessionCache = createRequestSessionCache(auth, event.request, preloaded)\n event.locals.getSession = sessionCache.getSession\n event.locals.getServerSession = sessionCache.getServerSession\n return\n }\n\n const sessionCache = createRequestSessionCache(auth, event.request)\n event.locals.getServerSession = sessionCache.getServerSession\n event.locals.getSession = sessionCache.getSession\n }\n}\n\n/**\n * SolidStart middleware to automatically refresh sessions.\n * Sets the appropriate header based on how the token was provided:\n * - Cookie → Set-Cookie header\n * - Bearer token → X-Refreshed-Token header (for Tauri/mobile clients)\n *\n * @example\n * ```ts\n * // middleware.ts\n * import { authMiddleware, refreshMiddleware } from '@rttnd/gau/solidstart'\n *\n * export default createMiddleware({\n * onRequest: [\n * authMiddleware(true, auth),\n * refreshMiddleware(auth, { threshold: 0.5 }),\n * ],\n * })\n * ```\n */\nexport function refreshMiddleware<const TProviders extends OAuthProvider<any>[]>(\n optionsOrAuth: CreateAuthOptions<TProviders> | AuthInstance<TProviders>,\n options: RefreshSessionOptions = {},\n) {\n const auth = resolveAuth(optionsOrAuth)\n\n return async (event: any) => {\n const refreshed = await auth.refreshSession(event.request, options)\n\n if (refreshed) {\n if (refreshed.source === 'cookie')\n event.response.headers.set('Set-Cookie', refreshed.cookie)\n else\n event.response.headers.set(REFRESHED_TOKEN_HEADER, refreshed.token)\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAGA,OAAO,aAAa;AAkBb,SAAS,UAAyD,eAAyE;AAChJ,QAAM,OAAO,YAAY,aAAa;AAEtC,OAAK,cAAc,QAAQ,IAAI,aAAa;AAE5C,MAAI,CAAC,KAAK;AACR,SAAK,gBAAgB;AAEvB,QAAM,UAAU,cAAc,IAAI;AAClC,QAAM,eAAe,CAAC,UAAe,QAAQ,MAAM,OAAO;AAC1D,SAAO;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF;AAOO,SAAS,iCAAgF,MAAgC;AAC9H,SAAO,OAAO,YAAqB,qBAAqB,MAAM,OAAO;AACvE;AAoBO,SAAS,eACd,gBACA,eACA;AACA,QAAM,OAAO,YAAY,aAAa;AAEtC,QAAM,mBAAmB,iCAAiC,IAAI;AAE9D,SAAO,OAAO,UAAe;AAC3B,UAAM,MAAM,IAAI,IAAI,MAAM,QAAQ,GAAG;AACrC,UAAM,gBAAgB,OAAO,mBAAmB,YAC5C,iBACA,eAAe,SAAS,IAAI,QAAQ;AAExC,QAAI,eAAe;AACjB,YAAM,YAAY,MAAM,iBAAiB,MAAM,OAAO;AACtD,YAAMA,gBAAe,0BAA0B,MAAM,MAAM,SAAS,SAAS;AAC7E,YAAM,OAAO,aAAaA,cAAa;AACvC,YAAM,OAAO,mBAAmBA,cAAa;AAC7C;AAAA,IACF;AAEA,UAAM,eAAe,0BAA0B,MAAM,MAAM,OAAO;AAClE,UAAM,OAAO,mBAAmB,aAAa;AAC7C,UAAM,OAAO,aAAa,aAAa;AAAA,EACzC;AACF;AAqBO,SAAS,kBACd,eACA,UAAiC,CAAC,GAClC;AACA,QAAM,OAAO,YAAY,aAAa;AAEtC,SAAO,OAAO,UAAe;AAC3B,UAAM,YAAY,MAAM,KAAK,eAAe,MAAM,SAAS,OAAO;AAElE,QAAI,WAAW;AACb,UAAI,UAAU,WAAW;AACvB,cAAM,SAAS,QAAQ,IAAI,cAAc,UAAU,MAAM;AAAA;AAEzD,cAAM,SAAS,QAAQ,IAAI,wBAAwB,UAAU,KAAK;AAAA,IACtE;AAAA,EACF;AACF;","names":["sessionCache"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Handle, RequestEvent } from '@sveltejs/kit';
|
|
2
2
|
import type { CreateAuthOptions, RefreshSessionOptions } from '../core';
|
|
3
|
+
import type { AuthInstance } from '../core/serverSession';
|
|
3
4
|
import type { OAuthProvider } from '../oauth';
|
|
4
|
-
import {
|
|
5
|
+
import { REFRESHED_TOKEN_HEADER } from '../core';
|
|
5
6
|
export { REFRESHED_TOKEN_HEADER };
|
|
6
|
-
type AuthInstance<TProviders extends OAuthProvider<any>[]> = ReturnType<typeof createAuth<TProviders>>;
|
|
7
7
|
/**
|
|
8
8
|
* Creates GET and POST handlers for SvelteKit.
|
|
9
9
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sveltekit/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,KAAK,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sveltekit/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,EAAiB,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAG/D,OAAO,EAAE,sBAAsB,EAAE,CAAA;AAEjC;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,KAAK,CAAC,UAAU,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,iBAAiB,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC;;;;;EAiCnJ;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,CAAC,UAAU,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,EAC/E,aAAa,EAAE,iBAAiB,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,EACvE,OAAO,GAAE,qBAA0B,GAClC,MAAM,CAiBR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{createRequestSessionCache as e,resolveAuth as r}from"../../chunk-MXZ363UZ.js";import{REFRESHED_TOKEN_HEADER as t,createHandler as o}from"../../chunk-NHENQLYI.js";import"../../chunk-VB2ML4Q5.js";import"../../chunk-VXWI4D7H.js";function s(t){const s=r(t);s.errorRedirect||(s.errorRedirect="/auth/error"),(async()=>{try{s.development=(await import("$app/environment")).dev}catch{s.development=!1}})();const n=o(s),c=e=>n(e.request);return{GET:c,POST:c,OPTIONS:c,handle:async({event:r,resolve:t})=>{const{getServerSession:o,getSession:n}=e(s,r.request);return r.locals.getServerSession=o,r.locals.getSession=n,t(r)}}}function n(e,o={}){const s=r(e);return async({event:e,resolve:r})=>{const n=await s.refreshSession(e.request,o),c=await r(e);return n&&("cookie"===n.source?c.headers.set("Set-Cookie",n.cookie):c.headers.set(t,n.token)),c}}export{t as REFRESHED_TOKEN_HEADER,s as SvelteKitAuth,n as createRefreshHandle};//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/sveltekit/index.ts"],"sourcesContent":["import type { Handle, RequestEvent } from '@sveltejs/kit'\nimport type { CreateAuthOptions,
|
|
1
|
+
{"version":3,"sources":["../../../src/sveltekit/index.ts"],"sourcesContent":["import type { Handle, RequestEvent } from '@sveltejs/kit'\nimport type { CreateAuthOptions, RefreshSessionOptions } from '../core'\nimport type { AuthInstance } from '../core/serverSession'\nimport type { OAuthProvider } from '../oauth'\nimport { createHandler, REFRESHED_TOKEN_HEADER } from '../core'\nimport { createRequestSessionCache, resolveAuth } from '../core/serverSession'\n\nexport { REFRESHED_TOKEN_HEADER }\n\n/**\n * Creates GET and POST handlers for SvelteKit.\n *\n * The returned `handle` hook attaches two methods to `event.locals`:\n * - `getSession()` - Returns client-safe session (no tokens). Safe to serialize to browser.\n * - `getServerSession()` - Returns full session with access/refresh tokens. Server-only.\n *\n * @example\n * ```ts\n * // src/routes/api/auth/[...gau]/+server.ts\n * import { SvelteKitAuth } from '@rttnd/gau/sveltekit'\n * import { auth } from '$lib/server/auth'\n *\n * export const { GET, POST, handle } = SvelteKitAuth(auth)\n * ```\n */\nexport function SvelteKitAuth<const TProviders extends OAuthProvider<any>[]>(optionsOrAuth: CreateAuthOptions<TProviders> | AuthInstance<TProviders>) {\n const auth = resolveAuth(optionsOrAuth)\n\n if (!auth.errorRedirect)\n auth.errorRedirect = '/auth/error'\n\n void (async () => {\n try {\n auth.development = (await import('$app/environment')).dev\n }\n catch {\n auth.development = false\n }\n })()\n\n const handler = createHandler(auth)\n const sveltekitHandler = (event: RequestEvent) => handler(event.request)\n\n const handle: Handle = async ({ event, resolve }) => {\n const { getServerSession, getSession } = createRequestSessionCache(auth, event.request)\n\n ;(event.locals as any).getServerSession = getServerSession\n ;(event.locals as any).getSession = getSession\n\n return resolve(event)\n }\n\n return {\n GET: sveltekitHandler,\n POST: sveltekitHandler,\n OPTIONS: sveltekitHandler,\n handle,\n }\n}\n\n/**\n * Creates a SvelteKit handle that automatically refreshes sessions.\n * Sets the appropriate header based on how the token was provided:\n * - Cookie → Set-Cookie header\n * - Bearer token → X-Refreshed-Token header (for Tauri/mobile clients)\n *\n * @example\n * ```ts\n * // hooks.server.ts\n * import { sequence } from '@sveltejs/kit/hooks'\n * import { handle as authHandle } from './routes/api/auth/[...gau]/+server'\n * import { createRefreshHandle } from '@rttnd/gau/sveltekit'\n * import { auth } from '$lib/server/auth'\n *\n * export const handle = sequence(authHandle, createRefreshHandle(auth, { threshold: 0.5 }))\n * ```\n */\nexport function createRefreshHandle<const TProviders extends OAuthProvider<any>[]>(\n optionsOrAuth: CreateAuthOptions<TProviders> | AuthInstance<TProviders>,\n options: RefreshSessionOptions = {},\n): Handle {\n const auth = resolveAuth(optionsOrAuth)\n\n return async ({ event, resolve }) => {\n const refreshed = await auth.refreshSession(event.request, options)\n\n const response = await resolve(event)\n\n if (refreshed) {\n if (refreshed.source === 'cookie')\n response.headers.set('Set-Cookie', refreshed.cookie)\n else\n response.headers.set(REFRESHED_TOKEN_HEADER, refreshed.token)\n }\n\n return response\n }\n}\n"],"mappings":";;;;;;;;;;;;AAyBO,SAAS,cAA6D,eAAyE;AACpJ,QAAM,OAAO,YAAY,aAAa;AAEtC,MAAI,CAAC,KAAK;AACR,SAAK,gBAAgB;AAEvB,QAAM,YAAY;AAChB,QAAI;AACF,WAAK,eAAe,MAAM,OAAO,kBAAkB,GAAG;AAAA,IACxD,QACM;AACJ,WAAK,cAAc;AAAA,IACrB;AAAA,EACF,GAAG;AAEH,QAAM,UAAU,cAAc,IAAI;AAClC,QAAM,mBAAmB,CAAC,UAAwB,QAAQ,MAAM,OAAO;AAEvE,QAAM,SAAiB,OAAO,EAAE,OAAO,QAAQ,MAAM;AACnD,UAAM,EAAE,kBAAkB,WAAW,IAAI,0BAA0B,MAAM,MAAM,OAAO;AAErF,IAAC,MAAM,OAAe,mBAAmB;AACzC,IAAC,MAAM,OAAe,aAAa;AAEpC,WAAO,QAAQ,KAAK;AAAA,EACtB;AAEA,SAAO;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT;AAAA,EACF;AACF;AAmBO,SAAS,oBACd,eACA,UAAiC,CAAC,GAC1B;AACR,QAAM,OAAO,YAAY,aAAa;AAEtC,SAAO,OAAO,EAAE,OAAO,QAAQ,MAAM;AACnC,UAAM,YAAY,MAAM,KAAK,eAAe,MAAM,SAAS,OAAO;AAElE,UAAM,WAAW,MAAM,QAAQ,KAAK;AAEpC,QAAI,WAAW;AACb,UAAI,UAAU,WAAW;AACvB,iBAAS,QAAQ,IAAI,cAAc,UAAU,MAAM;AAAA;AAEnD,iBAAS,QAAQ,IAAI,wBAAwB,UAAU,KAAK;AAAA,IAChE;AAEA,WAAO;AAAA,EACT;AACF;","names":[]}
|