@rttnd/gau 1.2.3 → 1.2.5
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-PL7MV7OC.js +1 -0
- package/dist/chunk-PL7MV7OC.js.map +1 -0
- package/dist/chunk-VCAW3RDM.js +1 -0
- package/dist/chunk-VCAW3RDM.js.map +1 -0
- package/dist/src/client/solid/Protected.d.ts +2 -2
- package/dist/src/client/solid/Protected.d.ts.map +1 -1
- package/dist/src/client/solid/index.d.ts +18 -4
- package/dist/src/client/solid/index.d.ts.map +1 -1
- package/dist/src/client/solid/index.jsx +73 -16
- package/dist/src/client/svelte/index.svelte.d.ts +1 -0
- package/dist/src/client/svelte/index.svelte.d.ts.map +1 -1
- 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/token.d.ts +3 -0
- package/dist/src/client/token.d.ts.map +1 -1
- package/dist/src/client/vanilla/index.d.ts +2 -1
- package/dist/src/client/vanilla/index.d.ts.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/createAuth.d.ts +27 -6
- package/dist/src/core/createAuth.d.ts.map +1 -1
- package/dist/src/core/handlers/index.js +1 -1
- package/dist/src/core/handlers/link.d.ts.map +1 -1
- package/dist/src/core/handlers/session.d.ts.map +1 -1
- package/dist/src/core/index.d.ts +2 -0
- package/dist/src/core/index.d.ts.map +1 -1
- package/dist/src/core/index.js +1 -1
- package/dist/src/core/utils.d.ts +10 -0
- package/dist/src/core/utils.d.ts.map +1 -0
- package/dist/src/index.js +1 -1
- package/dist/src/jwt/index.js +1 -1
- package/dist/src/runtimes/index.js +1 -1
- package/dist/src/runtimes/tauri/index.js +1 -1
- package/dist/src/solidstart/index.d.ts +23 -3
- 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 +21 -3
- 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 +20 -20
- package/dist/chunk-GVRQST3R.js +0 -1
- package/dist/chunk-GVRQST3R.js.map +0 -1
- package/dist/chunk-XUNWIMPF.js +0 -1
- package/dist/chunk-XUNWIMPF.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/client/vanilla/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAItE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,KAAK,eAAe,CAAC,KAAK,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAA;AAYzF,wBAAgB,gBAAgB,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,EAAE,EAAE,OAAO,EAAE,MAAc,EAAE,EAAE,iBAAiB
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/client/vanilla/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAItE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAEjJ,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,KAAK,eAAe,CAAC,KAAK,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAA;AAYzF,wBAAgB,gBAAgB,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,EAAE,EAAE,OAAO,EAAE,MAAc,EAAE,EAAE,iBAAiB;;;;;;;;aA0F9E,CAAC,6BAA6B,EAAE;;;;kBAW3B,CAAC,6BAA6B,EAAE;;;;oBAsB9B,CAAC;;;EAsE/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{REFRESHED_TOKEN_HEADER as n,SESSION_TOKEN_KEY as e,clearSessionToken as t,getSessionToken as r,handleRefreshedToken as i,isTauri as o,storeSessionToken as a}from"../../../chunk-PL7MV7OC.js";function c(n){const e=new URLSearchParams;for(const[t,r]of Object.entries(n))null!=r&&""!==r&&e.set(t,String(r));const t=e.toString();return t?`?${t}`:""}function s({baseUrl:n,scheme:e="gau"}){let s={user:null,session:null,accounts:null,providers:[]};const u=new Set;async function l(){const e=r(),t=e?{Authorization:`Bearer ${e}`}:void 0,i=await fetch(`${n}/session`,e?{headers:t}:{credentials:"include"}),o=i.headers.get("content-type");return o?.includes("application/json")?await i.json():{user:null,session:null,accounts:null,providers:[]}}async function d(){const n=await l();return s=n,(()=>{for(const n of u)n(s)})(),n}async function f(n){try{a(n)}finally{await d()}}function h(e,t){const r=c({redirectTo:t.redirectTo,profile:null!=t.profile?String(t.profile):void 0,redirect:t.redirect});return`${n}/link/${e}${r}`}return{get session(){return s},fetch:async function(n,e={}){const t=r(),o=new Headers(e.headers);t&&o.set("Authorization",`Bearer ${t}`);const a=await globalThis.fetch(n,{...e,headers:o,...!t&&{credentials:"include"}});return i(a),a},fetchSession:l,refreshSession:d,applySessionToken:f,handleRedirectCallback:async function(n){if("undefined"==typeof window)return!1;if("#_=_"===window.location.hash){const e=window.location.pathname+window.location.search;return n?n(e):window.history.replaceState(null,"",e),!1}const e=window.location.hash?.substring(1)??"";if(!e)return!1;const t=new URLSearchParams(e).get("token");if(!t)return!1;await f(t);const r=window.location.pathname+window.location.search;return n?n(r):window.history.replaceState(null,"",r),!0},onSessionChange:function(n){return u.add(n),()=>u.delete(n)},signIn:async function(t,r){const i=function(e,t){const r=c({redirectTo:t?.redirectTo,profile:null!=t?.profile?String(t.profile):void 0});return`${n}/${e}${r}`}(t,r);if(o()){const{signInWithTauri:i}=await import("../../runtimes/tauri/index.js");await i(t,n,e,r?.redirectTo,r?.profile)}return i},linkAccount:async function(t,i){if(o()){const{linkAccountWithTauri:r}=await import("../../runtimes/tauri/index.js");return await r(t,n,e,i?.redirectTo,i?.profile),h(t,{redirectTo:i?.redirectTo,profile:i?.profile,redirect:"false"})}const a=h(t,{redirectTo:i?.redirectTo,profile:i?.profile,redirect:"false"}),c=r(),s=c?{headers:{Authorization:`Bearer ${c}`}}:{credentials:"include"},u=await fetch(a,s);if(u.redirected)return u.url;try{const n=await u.json();if(n?.url)return n.url}catch{}return a},unlinkAccount:async function(e){const t=r(),i=t?{headers:{Authorization:`Bearer ${t}`}}:{credentials:"include"};return!!(await fetch(`${n}/unlink/${e}`,{method:"POST",...i})).ok&&(await d(),!0)},signOut:async function(){t();const e=r(),i=e?{Authorization:`Bearer ${e}`}:void 0;await fetch(`${n}/signout`,e?{method:"POST",headers:i}:{method:"POST",credentials:"include"}),await d()},startTauriBridge:async function(){if(!o())return;const{startAuthBridge:t}=await import("../../runtimes/tauri/index.js");return await t(n,e,async n=>{await f(n)})}}}export{n as REFRESHED_TOKEN_HEADER,e as SESSION_TOKEN_KEY,t as clearSessionToken,s as createAuthClient,r as getSessionToken,i as handleRefreshedToken,a as storeSessionToken};//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/client/vanilla/index.ts"],"sourcesContent":["import type { GauSession, ProfileName, ProviderIds } from '../../core'\nimport { isTauri } from '../../runtimes/tauri/index'\nimport { clearSessionToken, getSessionToken, storeSessionToken } from '../token'\n\nexport interface AuthClientOptions {\n baseUrl: string\n scheme?: string\n}\n\ntype SessionListener<TAuth = unknown> = (session: GauSession<ProviderIds<TAuth>>) => void\n\nfunction buildQuery(params: Record<string, string | undefined | null>): string {\n const q = new URLSearchParams()\n for (const [k, v] of Object.entries(params)) {\n if (v != null && v !== '')\n q.set(k, String(v))\n }\n const s = q.toString()\n return s ? `?${s}` : ''\n}\n\nexport function createAuthClient<const TAuth = unknown>({ baseUrl, scheme = 'gau' }: AuthClientOptions) {\n let currentSession: GauSession<ProviderIds<TAuth>> = { user: null, session: null, accounts: null, providers: [] }\n const listeners = new Set<SessionListener<TAuth>>()\n\n const notify = () => {\n for (const l of listeners)\n l(currentSession)\n }\n\n async function fetchSession(): Promise<GauSession<ProviderIds<TAuth>>> {\n const token = getSessionToken()\n const headers = token ? { Authorization: `Bearer ${token}` } : undefined\n const res = await fetch(`${baseUrl}/session`, token ? { headers } : { credentials: 'include' })\n const contentType = res.headers.get('content-type')\n if (contentType?.includes('application/json'))\n return await res.json()\n return { user: null, session: null, accounts: null, providers: [] }\n }\n\n async function refreshSession(): Promise<GauSession<ProviderIds<TAuth>>> {\n const next = await fetchSession()\n currentSession = next\n notify()\n return next\n }\n\n async function applySessionToken(token: string): Promise<void> {\n try {\n storeSessionToken(token)\n }\n finally {\n await refreshSession()\n }\n }\n\n function onSessionChange(listener: SessionListener<TAuth>): () => void {\n listeners.add(listener)\n return () => listeners.delete(listener)\n }\n\n async function handleRedirectCallback(replaceUrl?: (url: string) => void): Promise<boolean> {\n if (typeof window === 'undefined')\n return false\n\n if (window.location.hash === '#_=_') {\n const cleanUrl = window.location.pathname + window.location.search\n if (replaceUrl)\n replaceUrl(cleanUrl)\n else\n window.history.replaceState(null, '', cleanUrl)\n return false\n }\n\n const hash = window.location.hash?.substring(1) ?? ''\n if (!hash)\n return false\n\n const params = new URLSearchParams(hash)\n const token = params.get('token')\n if (!token)\n return false\n\n await applySessionToken(token)\n\n const cleanUrl = window.location.pathname + window.location.search\n if (replaceUrl)\n replaceUrl(cleanUrl)\n else\n window.history.replaceState(null, '', cleanUrl)\n\n return true\n }\n\n function makeProviderUrl<P extends ProviderIds<TAuth>, PR extends (ProfileName<TAuth, P> | string) | undefined>(provider: P, params?: { redirectTo?: string, profile?: PR }): string {\n const q = buildQuery({\n redirectTo: params?.redirectTo,\n profile: params?.profile != null ? String(params.profile) : undefined,\n })\n return `${baseUrl}/${provider}${q}`\n }\n\n function makeLinkUrl<P extends ProviderIds<TAuth>, PR extends (ProfileName<TAuth, P> | string) | undefined>(provider: P, params: { redirectTo?: string, profile?: PR, redirect?: 'false' | 'true' }): string {\n const q = buildQuery({\n redirectTo: params.redirectTo,\n profile: params.profile != null ? String(params.profile) : undefined,\n redirect: params.redirect,\n })\n return `${baseUrl}/link/${provider}${q}`\n }\n\n async function signIn<P extends ProviderIds<TAuth>, PR extends (ProfileName<TAuth, P> | string) | undefined>(provider: P, options?: { redirectTo?: string, profile?: PR }): Promise<string> {\n const url = makeProviderUrl<P, PR>(provider, options)\n\n if (isTauri()) {\n const { signInWithTauri } = await import('../../runtimes/tauri/index')\n await signInWithTauri<TAuth, P, PR>(provider, baseUrl, scheme, options?.redirectTo, options?.profile)\n }\n\n return url\n }\n\n async function linkAccount<P extends ProviderIds<TAuth>, PR extends (ProfileName<TAuth, P> | string) | undefined>(provider: P, options?: { redirectTo?: string, profile?: PR }): Promise<string> {\n if (isTauri()) {\n const { linkAccountWithTauri } = await import('../../runtimes/tauri/index')\n await linkAccountWithTauri<TAuth, P, PR>(provider, baseUrl, scheme, options?.redirectTo, options?.profile)\n return makeLinkUrl<P, PR>(provider, { redirectTo: options?.redirectTo, profile: options?.profile, redirect: 'false' })\n }\n\n const linkUrl = makeLinkUrl<P, PR>(provider, { redirectTo: options?.redirectTo, profile: options?.profile, redirect: 'false' })\n const token = getSessionToken()\n const fetchOptions: RequestInit = token ? { headers: { Authorization: `Bearer ${token}` } } : { credentials: 'include' }\n const res: Response = await fetch(linkUrl, fetchOptions)\n if (res.redirected)\n return res.url\n try {\n const data = await res.json()\n if (data?.url)\n return data.url\n }\n catch {}\n return linkUrl\n }\n\n async function unlinkAccount<P extends ProviderIds<TAuth>>(provider: P): Promise<boolean> {\n const token = getSessionToken()\n const fetchOptions: RequestInit = token ? { headers: { Authorization: `Bearer ${token}` } } : { credentials: 'include' }\n const res = await fetch(`${baseUrl}/unlink/${provider}`, { method: 'POST', ...fetchOptions })\n if (res.ok) {\n await refreshSession()\n return true\n }\n return false\n }\n\n async function signOut(): Promise<void> {\n clearSessionToken()\n const token = getSessionToken()\n const headers = token ? { Authorization: `Bearer ${token}` } : undefined\n await fetch(`${baseUrl}/signout`, token ? { method: 'POST', headers } : { method: 'POST', credentials: 'include' })\n await refreshSession()\n }\n\n async function startTauriBridge(): Promise<(() => void) | void> {\n if (!isTauri())\n return\n\n const { startAuthBridge } = await import('../../runtimes/tauri/index')\n const cleanup = await startAuthBridge(baseUrl, scheme, async (token) => {\n await applySessionToken(token)\n })\n return cleanup\n }\n\n return {\n get session() {\n return currentSession\n },\n fetchSession,\n refreshSession,\n applySessionToken,\n handleRedirectCallback,\n onSessionChange,\n signIn,\n linkAccount,\n unlinkAccount,\n signOut,\n startTauriBridge,\n }\n}\n"],"mappings":"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","names":["cleanUrl"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/client/vanilla/index.ts"],"sourcesContent":["import type { GauSession, ProfileName, ProviderIds } from '../../core'\nimport { isTauri } from '../../runtimes/tauri/index'\nimport { clearSessionToken, getSessionToken, handleRefreshedToken, storeSessionToken } from '../token'\n\nexport { clearSessionToken, getSessionToken, handleRefreshedToken, REFRESHED_TOKEN_HEADER, SESSION_TOKEN_KEY, storeSessionToken } from '../token'\n\nexport interface AuthClientOptions {\n baseUrl: string\n scheme?: string\n}\n\ntype SessionListener<TAuth = unknown> = (session: GauSession<ProviderIds<TAuth>>) => void\n\nfunction buildQuery(params: Record<string, string | undefined | null>): string {\n const q = new URLSearchParams()\n for (const [k, v] of Object.entries(params)) {\n if (v != null && v !== '')\n q.set(k, String(v))\n }\n const s = q.toString()\n return s ? `?${s}` : ''\n}\n\nexport function createAuthClient<const TAuth = unknown>({ baseUrl, scheme = 'gau' }: AuthClientOptions) {\n let currentSession: GauSession<ProviderIds<TAuth>> = { user: null, session: null, accounts: null, providers: [] }\n const listeners = new Set<SessionListener<TAuth>>()\n\n const notify = () => {\n for (const l of listeners)\n l(currentSession)\n }\n\n async function fetchSession(): Promise<GauSession<ProviderIds<TAuth>>> {\n const token = getSessionToken()\n const headers = token ? { Authorization: `Bearer ${token}` } : undefined\n const res = await fetch(`${baseUrl}/session`, token ? { headers } : { credentials: 'include' })\n const contentType = res.headers.get('content-type')\n if (contentType?.includes('application/json'))\n return await res.json()\n return { user: null, session: null, accounts: null, providers: [] }\n }\n\n async function refreshSession(): Promise<GauSession<ProviderIds<TAuth>>> {\n const next = await fetchSession()\n currentSession = next\n notify()\n return next\n }\n\n async function applySessionToken(token: string): Promise<void> {\n try {\n storeSessionToken(token)\n }\n finally {\n await refreshSession()\n }\n }\n\n function onSessionChange(listener: SessionListener<TAuth>): () => void {\n listeners.add(listener)\n return () => listeners.delete(listener)\n }\n\n async function handleRedirectCallback(replaceUrl?: (url: string) => void): Promise<boolean> {\n if (typeof window === 'undefined')\n return false\n\n if (window.location.hash === '#_=_') {\n const cleanUrl = window.location.pathname + window.location.search\n if (replaceUrl)\n replaceUrl(cleanUrl)\n else\n window.history.replaceState(null, '', cleanUrl)\n return false\n }\n\n const hash = window.location.hash?.substring(1) ?? ''\n if (!hash)\n return false\n\n const params = new URLSearchParams(hash)\n const token = params.get('token')\n if (!token)\n return false\n\n await applySessionToken(token)\n\n const cleanUrl = window.location.pathname + window.location.search\n if (replaceUrl)\n replaceUrl(cleanUrl)\n else\n window.history.replaceState(null, '', cleanUrl)\n\n return true\n }\n\n function makeProviderUrl<P extends ProviderIds<TAuth>, PR extends (ProfileName<TAuth, P> | string) | undefined>(provider: P, params?: { redirectTo?: string, profile?: PR }): string {\n const q = buildQuery({\n redirectTo: params?.redirectTo,\n profile: params?.profile != null ? String(params.profile) : undefined,\n })\n return `${baseUrl}/${provider}${q}`\n }\n\n function makeLinkUrl<P extends ProviderIds<TAuth>, PR extends (ProfileName<TAuth, P> | string) | undefined>(provider: P, params: { redirectTo?: string, profile?: PR, redirect?: 'false' | 'true' }): string {\n const q = buildQuery({\n redirectTo: params.redirectTo,\n profile: params.profile != null ? String(params.profile) : undefined,\n redirect: params.redirect,\n })\n return `${baseUrl}/link/${provider}${q}`\n }\n\n async function signIn<P extends ProviderIds<TAuth>, PR extends (ProfileName<TAuth, P> | string) | undefined>(provider: P, options?: { redirectTo?: string, profile?: PR }): Promise<string> {\n const url = makeProviderUrl<P, PR>(provider, options)\n\n if (isTauri()) {\n const { signInWithTauri } = await import('../../runtimes/tauri/index')\n await signInWithTauri<TAuth, P, PR>(provider, baseUrl, scheme, options?.redirectTo, options?.profile)\n }\n\n return url\n }\n\n async function linkAccount<P extends ProviderIds<TAuth>, PR extends (ProfileName<TAuth, P> | string) | undefined>(provider: P, options?: { redirectTo?: string, profile?: PR }): Promise<string> {\n if (isTauri()) {\n const { linkAccountWithTauri } = await import('../../runtimes/tauri/index')\n await linkAccountWithTauri<TAuth, P, PR>(provider, baseUrl, scheme, options?.redirectTo, options?.profile)\n return makeLinkUrl<P, PR>(provider, { redirectTo: options?.redirectTo, profile: options?.profile, redirect: 'false' })\n }\n\n const linkUrl = makeLinkUrl<P, PR>(provider, { redirectTo: options?.redirectTo, profile: options?.profile, redirect: 'false' })\n const token = getSessionToken()\n const fetchOptions: RequestInit = token ? { headers: { Authorization: `Bearer ${token}` } } : { credentials: 'include' }\n const res: Response = await fetch(linkUrl, fetchOptions)\n if (res.redirected)\n return res.url\n try {\n const data = await res.json()\n if (data?.url)\n return data.url\n }\n catch {}\n return linkUrl\n }\n\n async function unlinkAccount<P extends ProviderIds<TAuth>>(provider: P): Promise<boolean> {\n const token = getSessionToken()\n const fetchOptions: RequestInit = token ? { headers: { Authorization: `Bearer ${token}` } } : { credentials: 'include' }\n const res = await fetch(`${baseUrl}/unlink/${provider}`, { method: 'POST', ...fetchOptions })\n if (res.ok) {\n await refreshSession()\n return true\n }\n return false\n }\n\n async function signOut(): Promise<void> {\n clearSessionToken()\n const token = getSessionToken()\n const headers = token ? { Authorization: `Bearer ${token}` } : undefined\n await fetch(`${baseUrl}/signout`, token ? { method: 'POST', headers } : { method: 'POST', credentials: 'include' })\n await refreshSession()\n }\n\n async function startTauriBridge(): Promise<(() => void) | void> {\n if (!isTauri())\n return\n\n const { startAuthBridge } = await import('../../runtimes/tauri/index')\n const cleanup = await startAuthBridge(baseUrl, scheme, async (token) => {\n await applySessionToken(token)\n })\n return cleanup\n }\n\n /**\n * Fetch wrapper that automatically handles authentication:\n * - Adds Authorization header if a token is stored (Tauri/mobile)\n * - Falls back to credentials: 'include' for cookie-based auth (web)\n * - Automatically stores refreshed tokens from X-Refreshed-Token header\n */\n async function authFetch(input: RequestInfo | URL, init: RequestInit = {}): Promise<Response> {\n const token = getSessionToken()\n const headers = new Headers(init.headers)\n\n if (token)\n headers.set('Authorization', `Bearer ${token}`)\n\n const res = await globalThis.fetch(input, {\n ...init,\n headers,\n ...(!token && { credentials: 'include' as RequestCredentials }),\n })\n\n handleRefreshedToken(res)\n\n return res\n }\n\n return {\n get session() {\n return currentSession\n },\n fetch: authFetch,\n fetchSession,\n refreshSession,\n applySessionToken,\n handleRedirectCallback,\n onSessionChange,\n signIn,\n linkAccount,\n unlinkAccount,\n signOut,\n startTauriBridge,\n }\n}\n"],"mappings":"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","names":["cleanUrl"]}
|
|
@@ -169,6 +169,30 @@ export interface IssueSessionResult {
|
|
|
169
169
|
/** The maxAge in seconds. */
|
|
170
170
|
maxAge: number;
|
|
171
171
|
}
|
|
172
|
+
/**
|
|
173
|
+
* Options for refreshing a session.
|
|
174
|
+
*/
|
|
175
|
+
export interface RefreshSessionOptions {
|
|
176
|
+
/** Override the default TTL for the new token. */
|
|
177
|
+
ttl?: number;
|
|
178
|
+
/**
|
|
179
|
+
* Only refresh if past this fraction of TTL (0-1).
|
|
180
|
+
* Example: 0.5 means only refresh if session is past 50% of its lifetime.
|
|
181
|
+
*/
|
|
182
|
+
threshold?: number;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Result of refreshing a session. Extends IssueSessionResult with source information.
|
|
186
|
+
*/
|
|
187
|
+
export interface RefreshSessionResult extends IssueSessionResult {
|
|
188
|
+
/**
|
|
189
|
+
* How the original token was provided.
|
|
190
|
+
* - 'cookie': Token was extracted from the Cookie header
|
|
191
|
+
* - 'bearer': Token was extracted from Authorization: Bearer header
|
|
192
|
+
* - 'token': A raw token string was passed directly
|
|
193
|
+
*/
|
|
194
|
+
source: 'cookie' | 'bearer' | 'token';
|
|
195
|
+
}
|
|
172
196
|
export type Auth<TProviders extends OAuthProvider[] = any> = Adapter & {
|
|
173
197
|
providerMap: Map<ProviderId<TProviders[number]>, TProviders[number]>;
|
|
174
198
|
basePath: string;
|
|
@@ -193,17 +217,14 @@ export type Auth<TProviders extends OAuthProvider[] = any> = Adapter & {
|
|
|
193
217
|
* Refresh an existing session, issuing a new token with extended TTL.
|
|
194
218
|
* Preserves custom claims from the original token.
|
|
195
219
|
*
|
|
196
|
-
* @param
|
|
220
|
+
* @param tokenOrRequest - The existing session token, or a Request to extract the token from
|
|
197
221
|
* @param options.ttl - Override the default TTL for the new token
|
|
198
222
|
* @param options.threshold - Only refresh if past this fraction of TTL (0-1).
|
|
199
223
|
* When set, returns null if below threshold.
|
|
200
224
|
* Example: 0.5 means only refresh if session is past 50% of its lifetime.
|
|
201
|
-
* @returns The refreshed session, or null if invalid/expired/below threshold
|
|
225
|
+
* @returns The refreshed session with source info, or null if invalid/expired/below threshold
|
|
202
226
|
*/
|
|
203
|
-
refreshSession: (
|
|
204
|
-
ttl?: number;
|
|
205
|
-
threshold?: number;
|
|
206
|
-
}) => Promise<IssueSessionResult | null>;
|
|
227
|
+
refreshSession: (tokenOrRequest: string | Request, options?: RefreshSessionOptions) => Promise<RefreshSessionResult | null>;
|
|
207
228
|
/**
|
|
208
229
|
* Get a valid access token for a linked provider. If the stored token is expired and a refresh token exists,
|
|
209
230
|
* this will refresh it using the provider's refreshAccessToken and persist rotated tokens.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createAuth.d.ts","sourceRoot":"","sources":["../../../src/core/createAuth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAA;AACtG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"createAuth.d.ts","sourceRoot":"","sources":["../../../src/core/createAuth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{applyCors as o,handleCallback as r,handleLink as m,handlePreflight as p,handleSession as t,handleSignIn as c,handleSignOut as e,handleToken as f,handleUnlink as h,verifyRequestOrigin as i}from"../../../chunk-
|
|
1
|
+
import{applyCors as o,handleCallback as r,handleLink as m,handlePreflight as p,handleSession as t,handleSignIn as c,handleSignOut as e,handleToken as f,handleUnlink as h,verifyRequestOrigin as i}from"../../../chunk-VCAW3RDM.js";export{o as applyCors,r as handleCallback,m as handleLink,p as handlePreflight,t as handleSession,c as handleSignIn,e as handleSignOut,f as handleToken,h as handleUnlink,i as verifyRequestOrigin};//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../../../src/core/handlers/link.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAKzC,wBAAsB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../../../src/core/handlers/link.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAKzC,wBAAsB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAkBpG;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAuCtG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../src/core/handlers/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAIzC,wBAAsB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../src/core/handlers/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAIzC,wBAAsB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAoBnF"}
|
package/dist/src/core/index.d.ts
CHANGED
|
@@ -72,4 +72,6 @@ export declare function redirect(url: string, status?: 302 | 303): Response;
|
|
|
72
72
|
export * from './cookies';
|
|
73
73
|
export * from './createAuth';
|
|
74
74
|
export * from './handler';
|
|
75
|
+
export * from './utils';
|
|
76
|
+
export declare const REFRESHED_TOKEN_HEADER = "X-Refreshed-Token";
|
|
75
77
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/core/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 e,LINKING_TOKEN_COOKIE_NAME as f,NULL_SESSION as h,PKCE_COOKIE_NAME as i,PROVIDER_OPTIONS_COOKIE_NAME as j,
|
|
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 e,LINKING_TOKEN_COOKIE_NAME as f,NULL_SESSION as h,PKCE_COOKIE_NAME as i,PROVIDER_OPTIONS_COOKIE_NAME as j,REFRESHED_TOKEN_HEADER as k,SESSION_COOKIE_NAME as n,SESSION_STRATEGY_COOKIE_NAME as s,createAuth as u,createHandler as x,getSessionTokenFromRequest as A,json as C,parseCookies as D,redirect as M}from"../../chunk-VCAW3RDM.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,e as DEFAULT_COOKIE_SERIALIZE_OPTIONS,f as LINKING_TOKEN_COOKIE_NAME,h as NULL_SESSION,i as PKCE_COOKIE_NAME,j as PROVIDER_OPTIONS_COOKIE_NAME,k as REFRESHED_TOKEN_HEADER,n as SESSION_COOKIE_NAME,s as SESSION_STRATEGY_COOKIE_NAME,u as createAuth,x as createHandler,A as getSessionTokenFromRequest,C as json,D as parseCookies,M as redirect};//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type SessionTokenSource = 'cookie' | 'bearer';
|
|
2
|
+
/**
|
|
3
|
+
* Extract the session token from a Request.
|
|
4
|
+
* Prefers Cookie, then falls back to Authorization: Bearer.
|
|
5
|
+
*/
|
|
6
|
+
export declare function getSessionTokenFromRequest(request: Request): {
|
|
7
|
+
token?: string;
|
|
8
|
+
source?: SessionTokenSource;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/core/utils.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAEpD;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,kBAAkB,CAAA;CAAE,CAW5G"}
|
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 e,LINKING_TOKEN_COOKIE_NAME as f,NULL_SESSION as h,PKCE_COOKIE_NAME as i,PROVIDER_OPTIONS_COOKIE_NAME as j,
|
|
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 e,LINKING_TOKEN_COOKIE_NAME as f,NULL_SESSION as h,PKCE_COOKIE_NAME as i,PROVIDER_OPTIONS_COOKIE_NAME as j,REFRESHED_TOKEN_HEADER as k,SESSION_COOKIE_NAME as n,SESSION_STRATEGY_COOKIE_NAME as s,createAuth as u,createHandler as x,getSessionTokenFromRequest as A,json as C,parseCookies as D,redirect as M}from"../chunk-VCAW3RDM.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,e as DEFAULT_COOKIE_SERIALIZE_OPTIONS,f as LINKING_TOKEN_COOKIE_NAME,h as NULL_SESSION,i as PKCE_COOKIE_NAME,j as PROVIDER_OPTIONS_COOKIE_NAME,k as REFRESHED_TOKEN_HEADER,n as SESSION_COOKIE_NAME,s as SESSION_STRATEGY_COOKIE_NAME,u as createAuth,x as createHandler,A as getSessionTokenFromRequest,C as json,D as parseCookies,M as redirect};//# 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-VCAW3RDM.js";export{o as sign,r as verify};//# sourceMappingURL=index.js.map
|
|
@@ -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 c}from"../../chunk-PL7MV7OC.js";export{o as handleTauriDeepLink,r as isTauri,m as linkAccountWithTauri,p as setupTauriListener,t as signInWithTauri,c as startAuthBridge};//# sourceMappingURL=index.js.map
|
|
@@ -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 c}from"../../../chunk-PL7MV7OC.js";export{o as handleTauriDeepLink,r as isTauri,m as linkAccountWithTauri,p as setupTauriListener,t as signInWithTauri,c as startAuthBridge};//# sourceMappingURL=index.js.map
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type { CreateAuthOptions, GauSession } from '../core';
|
|
1
|
+
import type { CreateAuthOptions, GauSession, RefreshSessionOptions } from '../core';
|
|
2
2
|
import type { OAuthProvider } from '../oauth';
|
|
3
|
-
import { createAuth } from '../core';
|
|
3
|
+
import { createAuth, REFRESHED_TOKEN_HEADER } from '../core';
|
|
4
|
+
export { REFRESHED_TOKEN_HEADER };
|
|
4
5
|
type AuthInstance<TProviders extends OAuthProvider<any>[]> = ReturnType<typeof createAuth<TProviders>>;
|
|
5
6
|
/**
|
|
6
7
|
* Creates GET and POST handlers for SolidStart.
|
|
@@ -33,5 +34,24 @@ export declare function createSolidStartGetSession<const TProviders extends OAut
|
|
|
33
34
|
* onRequest: [authMiddleware(false, auth)]
|
|
34
35
|
*/
|
|
35
36
|
export declare function authMiddleware<const TProviders extends OAuthProvider<any>[]>(pathsToPreLoad: string[] | boolean, optionsOrAuth: CreateAuthOptions<TProviders> | AuthInstance<TProviders>): (event: any) => Promise<void>;
|
|
36
|
-
|
|
37
|
+
/**
|
|
38
|
+
* SolidStart middleware to automatically refresh sessions.
|
|
39
|
+
* Sets the appropriate header based on how the token was provided:
|
|
40
|
+
* - Cookie → Set-Cookie header
|
|
41
|
+
* - Bearer token → X-Refreshed-Token header (for Tauri/mobile clients)
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```ts
|
|
45
|
+
* // middleware.ts
|
|
46
|
+
* import { authMiddleware, refreshMiddleware } from '@rttnd/gau/solidstart'
|
|
47
|
+
*
|
|
48
|
+
* export default createMiddleware({
|
|
49
|
+
* onRequest: [
|
|
50
|
+
* authMiddleware(true, auth),
|
|
51
|
+
* refreshMiddleware(auth, { threshold: 0.5 }),
|
|
52
|
+
* ],
|
|
53
|
+
* })
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export declare function refreshMiddleware<const TProviders extends OAuthProvider<any>[]>(optionsOrAuth: CreateAuthOptions<TProviders> | AuthInstance<TProviders>, options?: RefreshSessionOptions): (event: any) => Promise<void>;
|
|
37
57
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/solidstart/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAe,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/solidstart/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAe,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAChG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAE7C,OAAO,EAAE,UAAU,EAA2D,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAErH,OAAO,EAAE,sBAAsB,EAAE,CAAA;AAEjC,KAAK,YAAY,CAAC,UAAU,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,IAAI,UAAU,CAAC,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC,CAAA;AAEtG;;;;;;;;;;;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;;;;EAY/I;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,CAAC,UAAU,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,CAAC,UAAU,CAAC,0OAsBvH;AAED;;;;;;;GAOG;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,iCAoBxE;AAWD;;;;;;;;;;;;;;;;;;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{NULL_SESSION as e,
|
|
1
|
+
import{NULL_SESSION as e,REFRESHED_TOKEN_HEADER as n,createAuth as r,createHandler as o,getSessionTokenFromRequest as t}from"../../chunk-VCAW3RDM.js";import s from"process";function i(e){const n=a(e);n.development="development"===s.env.NODE_ENV;const r=o(n),t=e=>r(e.request);return{GET:t,POST:t,OPTIONS:t}}function c(n){return async function(r){const{token:o}=t(r),s=Array.from(n.providerMap.keys());if(!o)return{...e,providers:s};try{const r=await n.validateSession(o);return r?{...r,providers:s}:{...e,providers:s}}catch{return{...e,providers:s}}}}function u(e,n){const r=c(a(n));return async n=>{const o=new URL(n.request.url);if("boolean"==typeof e?e:e.includes(o.pathname)){const e=await r(n.request);return void(n.locals.getSession=async()=>e)}n.locals.getSession=()=>r(n.request)}}function a(e){return"providerMap"in e&&"signJWT"in e?e:r(e)}function p(e,r={}){const o=a(e);return async e=>{const t=await o.refreshSession(e.request,r);t&&("cookie"===t.source?e.response.headers.set("Set-Cookie",t.cookie):e.response.headers.set(n,t.token))}}export{n as REFRESHED_TOKEN_HEADER,i as SolidAuth,u as authMiddleware,c as createSolidStartGetSession,p as refreshMiddleware};//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/solidstart/index.ts"],"sourcesContent":["import type { CreateAuthOptions, GauSession, ProviderIds } from '../core'\nimport type { OAuthProvider } from '../oauth'\nimport process from 'node:process'\nimport { createAuth, createHandler,
|
|
1
|
+
{"version":3,"sources":["../../../src/solidstart/index.ts"],"sourcesContent":["import type { CreateAuthOptions, GauSession, ProviderIds, RefreshSessionOptions } from '../core'\nimport type { OAuthProvider } from '../oauth'\nimport process from 'node:process'\nimport { createAuth, createHandler, getSessionTokenFromRequest, NULL_SESSION, REFRESHED_TOKEN_HEADER } from '../core'\n\nexport { REFRESHED_TOKEN_HEADER }\n\ntype AuthInstance<TProviders extends OAuthProvider<any>[]> = ReturnType<typeof createAuth<TProviders>>\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 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 getSession resolver to validate a session from a Request.\n * This mirrors the SvelteKit integration behaviour and supports both Cookie and Authorization headers.\n */\nexport function createSolidStartGetSession<const TProviders extends OAuthProvider<any>[]>(auth: AuthInstance<TProviders>) {\n return async function getSessionFromRequest(\n request: Request,\n ): Promise<GauSession<ProviderIds<AuthInstance<TProviders>>>> {\n const { token: sessionToken } = getSessionTokenFromRequest(request)\n\n const providers = Array.from(auth.providerMap.keys()) as ProviderIds<AuthInstance<TProviders>>[]\n\n if (!sessionToken)\n return { ...NULL_SESSION, providers }\n\n try {\n const validated = await auth.validateSession(sessionToken)\n if (!validated)\n return { ...NULL_SESSION, providers }\n\n return { ...validated, providers }\n }\n catch {\n return { ...NULL_SESSION, providers }\n }\n }\n}\n\n/**\n * SolidStart middleware factory to attach `locals.getSession` and optionally preload the session.\n *\n * Usage:\n * onRequest: [authMiddleware(true, auth)]\n * onRequest: [authMiddleware(['/protected', '/dashboard'], auth)]\n * onRequest: [authMiddleware(false, auth)]\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 getSessionFromRequest = createSolidStartGetSession(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 getSessionFromRequest(event.request)\n event.locals.getSession = async () => preloaded\n return\n }\n\n event.locals.getSession = () => getSessionFromRequest(event.request)\n }\n}\n\nfunction resolveAuth<const TProviders extends OAuthProvider<any>[]>(\n optionsOrAuth: CreateAuthOptions<TProviders> | AuthInstance<TProviders>,\n): AuthInstance<TProviders> {\n const isInstance = 'providerMap' in optionsOrAuth && 'signJWT' in optionsOrAuth\n return isInstance\n ? (optionsOrAuth as AuthInstance<TProviders>)\n : createAuth(optionsOrAuth as CreateAuthOptions<TProviders>)\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":";;;;;;;;;AAEA,OAAO,aAAa;AAmBb,SAAS,UAAyD,eAAyE;AAChJ,QAAM,OAAO,YAAY,aAAa;AAEtC,OAAK,cAAc,QAAQ,IAAI,aAAa;AAE5C,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;AAMO,SAAS,2BAA0E,MAAgC;AACxH,SAAO,eAAe,sBACpB,SAC4D;AAC5D,UAAM,EAAE,OAAO,aAAa,IAAI,2BAA2B,OAAO;AAElE,UAAM,YAAY,MAAM,KAAK,KAAK,YAAY,KAAK,CAAC;AAEpD,QAAI,CAAC;AACH,aAAO,EAAE,GAAG,cAAc,UAAU;AAEtC,QAAI;AACF,YAAM,YAAY,MAAM,KAAK,gBAAgB,YAAY;AACzD,UAAI,CAAC;AACH,eAAO,EAAE,GAAG,cAAc,UAAU;AAEtC,aAAO,EAAE,GAAG,WAAW,UAAU;AAAA,IACnC,QACM;AACJ,aAAO,EAAE,GAAG,cAAc,UAAU;AAAA,IACtC;AAAA,EACF;AACF;AAUO,SAAS,eACd,gBACA,eACA;AACA,QAAM,OAAO,YAAY,aAAa;AAEtC,QAAM,wBAAwB,2BAA2B,IAAI;AAE7D,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,sBAAsB,MAAM,OAAO;AAC3D,YAAM,OAAO,aAAa,YAAY;AACtC;AAAA,IACF;AAEA,UAAM,OAAO,aAAa,MAAM,sBAAsB,MAAM,OAAO;AAAA,EACrE;AACF;AAEA,SAAS,YACP,eAC0B;AAC1B,QAAM,aAAa,iBAAiB,iBAAiB,aAAa;AAClE,SAAO,aACF,gBACD,WAAW,aAA8C;AAC/D;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":[]}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { Handle, RequestEvent } from '@sveltejs/kit';
|
|
2
|
-
import type { CreateAuthOptions } from '../core';
|
|
2
|
+
import type { CreateAuthOptions, RefreshSessionOptions } from '../core';
|
|
3
3
|
import type { OAuthProvider } from '../oauth';
|
|
4
|
-
import { createAuth } from '../core';
|
|
4
|
+
import { createAuth, REFRESHED_TOKEN_HEADER } from '../core';
|
|
5
|
+
export { REFRESHED_TOKEN_HEADER };
|
|
5
6
|
type AuthInstance<TProviders extends OAuthProvider<any>[]> = ReturnType<typeof createAuth<TProviders>>;
|
|
6
7
|
/**
|
|
7
8
|
* Creates GET and POST handlers for SvelteKit.
|
|
@@ -21,5 +22,22 @@ export declare function SvelteKitAuth<const TProviders extends OAuthProvider<any
|
|
|
21
22
|
OPTIONS: (event: RequestEvent<Record<string, string>, string | null>) => Promise<Response>;
|
|
22
23
|
handle: Handle;
|
|
23
24
|
};
|
|
24
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Creates a SvelteKit handle that automatically refreshes sessions.
|
|
27
|
+
* Sets the appropriate header based on how the token was provided:
|
|
28
|
+
* - Cookie → Set-Cookie header
|
|
29
|
+
* - Bearer token → X-Refreshed-Token header (for Tauri/mobile clients)
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* // hooks.server.ts
|
|
34
|
+
* import { sequence } from '@sveltejs/kit/hooks'
|
|
35
|
+
* import { handle as authHandle } from './routes/api/auth/[...gau]/+server'
|
|
36
|
+
* import { createRefreshHandle } from '@rttnd/gau/sveltekit'
|
|
37
|
+
* import { auth } from '$lib/server/auth'
|
|
38
|
+
*
|
|
39
|
+
* export const handle = sequence(authHandle, createRefreshHandle(auth, { threshold: 0.5 }))
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare function createRefreshHandle<const TProviders extends OAuthProvider<any>[]>(optionsOrAuth: CreateAuthOptions<TProviders> | AuthInstance<TProviders>, options?: RefreshSessionOptions): Handle;
|
|
25
43
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -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,EAA2B,MAAM,SAAS,CAAA;
|
|
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,EAA2B,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAChG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,EAAE,UAAU,EAA2D,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAErH,OAAO,EAAE,sBAAsB,EAAE,CAAA;AAEjC,KAAK,YAAY,CAAC,UAAU,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,IAAI,UAAU,CAAC,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC,CAAA;AAEtG;;;;;;;;;;;GAWG;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;;;;;EAiDnJ;AAWD;;;;;;;;;;;;;;;;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{NULL_SESSION as e,
|
|
1
|
+
import{NULL_SESSION as e,REFRESHED_TOKEN_HEADER as r,createAuth as n,createHandler as t,getSessionTokenFromRequest as o}from"../../chunk-VCAW3RDM.js";function s(r){const s="providerMap"in r&&"signJWT"in r?r:n(r);(async()=>{try{s.development=(await import("$app/environment")).dev}catch{s.development=!1}})();const i=t(s),a=e=>i(e.request);return{GET:a,POST:a,OPTIONS:a,handle:async({event:r,resolve:n})=>(r.locals.getSession=async()=>{const{token:n}=o(r.request),t=Array.from(s.providerMap.keys());if(!n)return{...e,providers:t};try{const r=await s.validateSession(n);return r?{...r,providers:t}:{...e,providers:t}}catch{return{...e,providers:t}}},n(r))}}function i(e,t={}){const o=function(e){return"providerMap"in e&&"signJWT"in e?e:n(e)}(e);return async({event:e,resolve:n})=>{const s=await o.refreshSession(e.request,t),i=await n(e);return s&&("cookie"===s.source?i.headers.set("Set-Cookie",s.cookie):i.headers.set(r,s.token)),i}}export{r as REFRESHED_TOKEN_HEADER,s as SvelteKitAuth,i 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, GauSession, ProviderIds } from '../core'\nimport type { OAuthProvider } from '../oauth'\nimport { createAuth, createHandler,
|
|
1
|
+
{"version":3,"sources":["../../../src/sveltekit/index.ts"],"sourcesContent":["import type { Handle, RequestEvent } from '@sveltejs/kit'\nimport type { CreateAuthOptions, GauSession, ProviderIds, RefreshSessionOptions } from '../core'\nimport type { OAuthProvider } from '../oauth'\nimport { createAuth, createHandler, getSessionTokenFromRequest, NULL_SESSION, REFRESHED_TOKEN_HEADER } from '../core'\n\nexport { REFRESHED_TOKEN_HEADER }\n\ntype AuthInstance<TProviders extends OAuthProvider<any>[]> = ReturnType<typeof createAuth<TProviders>>\n\n/**\n * Creates GET and POST handlers for SvelteKit.\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 } = SvelteKitAuth(auth)\n * ```\n */\nexport function SvelteKitAuth<const TProviders extends OAuthProvider<any>[]>(optionsOrAuth: CreateAuthOptions<TProviders> | AuthInstance<TProviders>) {\n // TODO: Duck-type to check if we have an instance or raw options\n const isInstance = 'providerMap' in optionsOrAuth && 'signJWT' in optionsOrAuth\n\n const auth = isInstance\n ? (optionsOrAuth as AuthInstance<TProviders>)\n : createAuth(optionsOrAuth as CreateAuthOptions<TProviders>)\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 (event.locals as any).getSession = async (): Promise<GauSession<ProviderIds<AuthInstance<TProviders>>>> => {\n const { token: sessionToken } = getSessionTokenFromRequest(event.request)\n\n const providers = Array.from(auth.providerMap.keys()) as ProviderIds<AuthInstance<TProviders>>[]\n\n if (!sessionToken)\n return { ...NULL_SESSION, providers }\n\n try {\n const validated = await auth.validateSession(sessionToken)\n if (!validated)\n return { ...NULL_SESSION, providers }\n\n return { ...validated, providers }\n }\n catch {\n return { ...NULL_SESSION, providers }\n }\n }\n return resolve(event)\n }\n\n return {\n GET: sveltekitHandler,\n POST: sveltekitHandler,\n OPTIONS: sveltekitHandler,\n handle,\n }\n}\n\nfunction resolveAuth<const TProviders extends OAuthProvider<any>[]>(\n optionsOrAuth: CreateAuthOptions<TProviders> | AuthInstance<TProviders>,\n): AuthInstance<TProviders> {\n const isInstance = 'providerMap' in optionsOrAuth && 'signJWT' in optionsOrAuth\n return isInstance\n ? (optionsOrAuth as AuthInstance<TProviders>)\n : createAuth(optionsOrAuth as CreateAuthOptions<TProviders>)\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":";;;;;;;;;AAqBO,SAAS,cAA6D,eAAyE;AAEpJ,QAAM,aAAa,iBAAiB,iBAAiB,aAAa;AAElE,QAAM,OAAO,aACR,gBACD,WAAW,aAA8C;AAE7D,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,IAAC,MAAM,OAAe,aAAa,YAAwE;AACzG,YAAM,EAAE,OAAO,aAAa,IAAI,2BAA2B,MAAM,OAAO;AAExE,YAAM,YAAY,MAAM,KAAK,KAAK,YAAY,KAAK,CAAC;AAEpD,UAAI,CAAC;AACH,eAAO,EAAE,GAAG,cAAc,UAAU;AAEtC,UAAI;AACF,cAAM,YAAY,MAAM,KAAK,gBAAgB,YAAY;AACzD,YAAI,CAAC;AACH,iBAAO,EAAE,GAAG,cAAc,UAAU;AAEtC,eAAO,EAAE,GAAG,WAAW,UAAU;AAAA,MACnC,QACM;AACJ,eAAO,EAAE,GAAG,cAAc,UAAU;AAAA,MACtC;AAAA,IACF;AACA,WAAO,QAAQ,KAAK;AAAA,EACtB;AAEA,SAAO;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAS,YACP,eAC0B;AAC1B,QAAM,aAAa,iBAAiB,iBAAiB,aAAa;AAClE,SAAO,aACF,gBACD,WAAW,aAA8C;AAC/D;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":[]}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rttnd/gau",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.2.
|
|
5
|
-
"packageManager": "bun@1.3.
|
|
4
|
+
"version": "1.2.5",
|
|
5
|
+
"packageManager": "bun@1.3.5",
|
|
6
6
|
"description": "gau is a delightful auth library",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"homepage": "https://github.com/Rettend/gau#readme",
|
|
@@ -154,28 +154,28 @@
|
|
|
154
154
|
"dependencies": {
|
|
155
155
|
"@oslojs/jwt": "^0.3.0",
|
|
156
156
|
"arctic": "^3.7.0",
|
|
157
|
-
"cookie": "^1.
|
|
157
|
+
"cookie": "^1.1.1",
|
|
158
158
|
"esm-env": "^1.2.2"
|
|
159
159
|
},
|
|
160
160
|
"devDependencies": {
|
|
161
|
-
"@antfu/eslint-config": "^6.
|
|
162
|
-
"@electric-sql/pglite": "^0.3.
|
|
161
|
+
"@antfu/eslint-config": "^6.7.1",
|
|
162
|
+
"@electric-sql/pglite": "^0.3.14",
|
|
163
163
|
"@libsql/client": "^0.15.15",
|
|
164
|
-
"@solidjs/router": "^0.15.
|
|
165
|
-
"@sveltejs/kit": "^2.
|
|
166
|
-
"@tauri-apps/api": "^2.
|
|
167
|
-
"@tauri-apps/plugin-opener": "^2.
|
|
164
|
+
"@solidjs/router": "^0.15.4",
|
|
165
|
+
"@sveltejs/kit": "^2.49.2",
|
|
166
|
+
"@tauri-apps/api": "^2.9.1",
|
|
167
|
+
"@tauri-apps/plugin-opener": "^2.5.2",
|
|
168
168
|
"@types/better-sqlite3": "^7.6.13",
|
|
169
|
-
"@types/bun": "^1.3.
|
|
170
|
-
"@types/node": "^
|
|
171
|
-
"@vitest/coverage-v8": "^
|
|
172
|
-
"@vitest/ui": "^
|
|
173
|
-
"better-sqlite3": "^12.
|
|
174
|
-
"bumpp": "^10.3.
|
|
175
|
-
"drizzle-kit": "^0.31.
|
|
176
|
-
"drizzle-orm": "^0.
|
|
177
|
-
"eslint": "^9.
|
|
178
|
-
"solid-js": "^1.9.
|
|
179
|
-
"vitest": "^
|
|
169
|
+
"@types/bun": "^1.3.5",
|
|
170
|
+
"@types/node": "^25.0.3",
|
|
171
|
+
"@vitest/coverage-v8": "^4.0.16",
|
|
172
|
+
"@vitest/ui": "^4.0.16",
|
|
173
|
+
"better-sqlite3": "^12.5.0",
|
|
174
|
+
"bumpp": "^10.3.2",
|
|
175
|
+
"drizzle-kit": "^0.31.8",
|
|
176
|
+
"drizzle-orm": "^0.45.1",
|
|
177
|
+
"eslint": "^9.39.2",
|
|
178
|
+
"solid-js": "^1.9.10",
|
|
179
|
+
"vitest": "^4.0.16"
|
|
180
180
|
}
|
|
181
181
|
}
|
package/dist/chunk-GVRQST3R.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{BROWSER as e}from"esm-env";import{BROWSER as n}from"esm-env";function t(e){if(n)try{localStorage.setItem("gau-token",e),document.cookie=`__gau-session-token=${e}; path=/; max-age=31536000; samesite=lax; secure`}catch{}}function o(){return n?localStorage.getItem("gau-token"):null}function r(){if(n)try{localStorage.removeItem("gau-token"),document.cookie="__gau-session-token=; path=/; max-age=0"}catch{}}function i(){return e&&"__TAURI_INTERNALS__"in globalThis}async function a(t,o,r="gau",a,c){if(!i())return;const{openUrl:s}=await import("@tauri-apps/plugin-opener");let u;u=a||`${r}://oauth/callback`;const{codeVerifier:l,codeChallenge:f}=await async function(){if(!n||!window.crypto||!window.crypto.subtle)throw new Error("PKCE relies on window.crypto, which is not available in this environment.");function e(e){return btoa(String.fromCharCode(...e)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}const t=new Uint8Array(43);window.crypto.getRandomValues(t);const o=e(t),r=(new TextEncoder).encode(o),i=await window.crypto.subtle.digest("SHA-256",r);return{codeVerifier:o,codeChallenge:e(new Uint8Array(i))}}();localStorage.setItem("gau-pkce-verifier",l);const g=new URLSearchParams;g.set("redirectTo",u),c&&g.set("profile",String(c)),g.set("code_challenge",f);const w=`${function(n){try{return new URL(n).toString().replace(/\/$/,"")}catch{if(e&&"undefined"!=typeof window)try{return new URL(n,window.location.origin).toString().replace(/\/$/,"")}catch{return n}return n}}(o)}/${t}?${g.toString()}`;await s(w)}async function c(e){if(!i())return;const{listen:n}=await import("@tauri-apps/api/event");try{return await n("deep-link",async n=>{await e(n.payload)})}catch(e){console.error(e)}}async function s(n,t,o,r){const i=new URL(n),a=function(n){try{return new URL(n).origin}catch{if(e&&"undefined"!=typeof window)try{return new URL(n,window.location.origin).origin}catch{return null}return null}}(t);if(i.protocol!==`${o}:`&&(!a||i.origin!==a))return;const c=new URLSearchParams(i.search).get("code");if(c){const e=localStorage.getItem("gau-pkce-verifier");if(!e)return void console.error("No PKCE verifier found");localStorage.removeItem("gau-pkce-verifier");try{const n=await fetch(`${t}/token`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:c,codeVerifier:e})});if(n.ok){const e=await n.json();e.token&&r(e.token)}else console.error("Failed to exchange code for token")}catch(e){console.error("Error exchanging code for token:",e)}}}async function u(n,t,r="gau",a,c){if(!i())return;const{openUrl:s}=await import("@tauri-apps/plugin-opener");let u;u=a||`${r}://oauth/callback`;const l=o();if(!l)return void console.error("No session token found, cannot link account.");const f=new URLSearchParams;f.set("redirectTo",u),f.set("token",l),c&&f.set("profile",String(c));const g=`${(()=>{try{return new URL(t).toString().replace(/\/$/,"")}catch{if(e&&"undefined"!=typeof window)try{return new URL(t,window.location.origin).toString().replace(/\/$/,"")}catch{return t}return t}})()}/link/${n}?${f.toString()}`;await s(g)}async function l(e,n,t){if(!i())return;return await c(async o=>{s(o,e,n,t)})}export{t as storeSessionToken,o as getSessionToken,r as clearSessionToken,i as isTauri,a as signInWithTauri,c as setupTauriListener,s as handleTauriDeepLink,u as linkAccountWithTauri,l as startAuthBridge};//# sourceMappingURL=chunk-GVRQST3R.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/runtimes/tauri/index.ts","../src/client/token.ts"],"sourcesContent":["import type { ProfileName, ProviderIds } from '../../core'\nimport { BROWSER } from 'esm-env'\nimport { generatePKCE, getSessionToken } from '../../client/token'\n\nexport function isTauri(): boolean {\n return BROWSER && '__TAURI_INTERNALS__' in globalThis\n}\n\nfunction resolveOrigin(baseUrl: string): string | null {\n try {\n return new URL(baseUrl).origin\n }\n catch {\n if (BROWSER && typeof window !== 'undefined') {\n try {\n return new URL(baseUrl, window.location.origin).origin\n }\n catch {\n return null\n }\n }\n return null\n }\n}\n\nexport async function signInWithTauri<const TAuth = unknown, P extends ProviderIds<TAuth> = ProviderIds<TAuth>, PR extends (ProfileName<TAuth, P> | string) | undefined = undefined>(\n provider: P,\n baseUrl: string,\n scheme: string = 'gau',\n redirectOverride?: string,\n profile?: PR,\n) {\n if (!isTauri())\n return\n\n const { openUrl } = await import('@tauri-apps/plugin-opener')\n\n function resolveAbsoluteBase(base: string): string {\n try {\n const u = new URL(base)\n return u.toString().replace(/\\/$/, '')\n }\n catch {\n if (BROWSER && typeof window !== 'undefined') {\n try {\n const u = new URL(base, window.location.origin)\n return u.toString().replace(/\\/$/, '')\n }\n catch {\n return base\n }\n }\n return base\n }\n }\n\n let redirectTo: string\n\n if (redirectOverride)\n redirectTo = redirectOverride\n else\n redirectTo = `${scheme}://oauth/callback`\n\n const { codeVerifier, codeChallenge } = await generatePKCE()\n localStorage.setItem('gau-pkce-verifier', codeVerifier)\n\n const params = new URLSearchParams()\n params.set('redirectTo', redirectTo)\n if (profile)\n params.set('profile', String(profile))\n params.set('code_challenge', codeChallenge)\n const resolvedBase = resolveAbsoluteBase(baseUrl)\n const authUrl = `${resolvedBase}/${provider}?${params.toString()}`\n await openUrl(authUrl)\n}\n\nexport async function setupTauriListener(\n handler: (url: string) => Promise<void>,\n): Promise<(() => void) | void> {\n if (!isTauri())\n return\n\n const { listen } = await import('@tauri-apps/api/event')\n try {\n const unlisten = await listen<string>('deep-link', async (event) => {\n await handler(event.payload)\n })\n return unlisten\n }\n catch (err) {\n console.error(err)\n }\n}\n\nexport async function handleTauriDeepLink(url: string, baseUrl: string, scheme: string, onToken: (token: string) => void) {\n const parsed = new URL(url)\n const baseOrigin = resolveOrigin(baseUrl)\n if (parsed.protocol !== `${scheme}:` && (!baseOrigin || parsed.origin !== baseOrigin))\n return\n\n const queryParams = new URLSearchParams(parsed.search)\n const code = queryParams.get('code')\n if (code) {\n const verifier = localStorage.getItem('gau-pkce-verifier')\n if (!verifier) {\n console.error('No PKCE verifier found')\n return\n }\n localStorage.removeItem('gau-pkce-verifier')\n\n try {\n const res = await fetch(`${baseUrl}/token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ code, codeVerifier: verifier }),\n })\n if (res.ok) {\n const data = await res.json()\n if (data.token)\n onToken(data.token)\n }\n else {\n console.error('Failed to exchange code for token')\n }\n }\n catch (e) {\n console.error('Error exchanging code for token:', e)\n }\n }\n}\n\nexport async function linkAccountWithTauri<const TAuth = unknown, P extends ProviderIds<TAuth> = ProviderIds<TAuth>, PR extends (ProfileName<TAuth, P> | string) | undefined = undefined>(\n provider: P,\n baseUrl: string,\n scheme: string = 'gau',\n redirectOverride?: string,\n profile?: PR,\n) {\n if (!isTauri())\n return\n\n const { openUrl } = await import('@tauri-apps/plugin-opener')\n\n let redirectTo: string\n\n if (redirectOverride)\n redirectTo = redirectOverride\n else\n redirectTo = `${scheme}://oauth/callback`\n\n const token = getSessionToken()\n if (!token) {\n console.error('No session token found, cannot link account.')\n return\n }\n\n const params = new URLSearchParams()\n params.set('redirectTo', redirectTo)\n params.set('token', token)\n if (profile)\n params.set('profile', String(profile))\n const resolvedBase = (() => {\n try {\n const u = new URL(baseUrl)\n return u.toString().replace(/\\/$/, '')\n }\n catch {\n if (BROWSER && typeof window !== 'undefined') {\n try {\n const u = new URL(baseUrl, window.location.origin)\n return u.toString().replace(/\\/$/, '')\n }\n catch {\n return baseUrl\n }\n }\n return baseUrl\n }\n })()\n const linkUrl = `${resolvedBase}/link/${provider}?${params.toString()}`\n await openUrl(linkUrl)\n}\n\nexport async function startAuthBridge(\n baseUrl: string,\n scheme: string,\n onToken: (token: string) => Promise<void> | void,\n): Promise<(() => void) | void> {\n if (!isTauri())\n return\n\n const unlisten = await setupTauriListener(async (url) => {\n handleTauriDeepLink(url, baseUrl, scheme, onToken)\n })\n return unlisten\n}\n","import { BROWSER } from 'esm-env'\n\nexport function storeSessionToken(token: string) {\n if (!BROWSER)\n return\n try {\n localStorage.setItem('gau-token', token)\n document.cookie = `__gau-session-token=${token}; path=/; max-age=31536000; samesite=lax; secure`\n }\n catch {}\n}\n\nexport function getSessionToken(): string | null {\n if (!BROWSER)\n return null\n return localStorage.getItem('gau-token')\n}\n\nexport function clearSessionToken() {\n if (!BROWSER)\n return\n try {\n localStorage.removeItem('gau-token')\n document.cookie = `__gau-session-token=; path=/; max-age=0`\n }\n catch {}\n}\n\nexport async function generatePKCE() {\n if (!BROWSER || !window.crypto || !window.crypto.subtle)\n throw new Error('PKCE relies on window.crypto, which is not available in this environment.')\n\n function base64UrlEncode(array: Uint8Array): string {\n return btoa(String.fromCharCode(...array))\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '')\n }\n\n const verifierLength = 43\n const randomValues = new Uint8Array(verifierLength)\n window.crypto.getRandomValues(randomValues)\n const codeVerifier = base64UrlEncode(randomValues)\n\n const encoder = new TextEncoder()\n const data = encoder.encode(codeVerifier)\n const hash = await window.crypto.subtle.digest('SHA-256', data)\n const codeChallenge = base64UrlEncode(new Uint8Array(hash))\n\n return { codeVerifier, codeChallenge }\n}\n"],"mappings":"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","names":["BROWSER","BROWSER"]}
|