@niledatabase/client 5.0.0-alpha.9 → 5.0.0

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/index.d.mts CHANGED
@@ -167,6 +167,15 @@ declare class Authorizer {
167
167
  callbackUrl?: string;
168
168
  redirect?: boolean;
169
169
  }): Promise<any>;
170
+ forgotPassword(options: {
171
+ baseUrl?: string;
172
+ init?: ResponseInit;
173
+ fetchUrl?: string;
174
+ password: string;
175
+ auth?: Authorizer | PartialAuthorizer;
176
+ callbackUrl?: string;
177
+ redirect?: boolean;
178
+ }): Promise<Response>;
170
179
  resetPassword(options: {
171
180
  baseUrl?: string;
172
181
  init?: ResponseInit;
@@ -187,6 +196,7 @@ declare const signOut: typeof authorizer.signOut;
187
196
  declare const signIn: typeof authorizer.signIn;
188
197
  declare const signUp: typeof authorizer.signUp;
189
198
  declare const resetPassword: typeof authorizer.resetPassword;
199
+ declare const forgotPassword: typeof authorizer.forgotPassword;
190
200
 
191
201
  declare function getStatus(load: boolean, sess: NonErrorSession | null | undefined): "loading" | "authenticated" | "unauthenticated";
192
202
 
@@ -205,4 +215,4 @@ declare const broadcast: {
205
215
  post(message: Record<string, unknown>): void;
206
216
  };
207
217
 
208
- export { type ActiveSession, type AuthConfig, type AuthState, Authorizer, type BuiltInProviderType, type ClientSafeProvider, type Config, type CtxOrReq, type JWT, type Listener, type ListenerKeys, type ListenerParams, type LiteralUnion, type NileSession, type NonErrorSession, type PartialAuthorizer, type ProviderType, type RedirectableProviderType, type SignInAuthorizationParams, type SignInOptions, type SignInResponse, type SignOutParams, type SignOutResponse, auth, broadcast, getCsrfToken, getProviders, getSession, getStatus, resetPassword, signIn, signOut, signUp };
218
+ export { type ActiveSession, type AuthConfig, type AuthState, Authorizer, type BuiltInProviderType, type ClientSafeProvider, type Config, type CtxOrReq, type JWT, type Listener, type ListenerKeys, type ListenerParams, type LiteralUnion, type NileSession, type NonErrorSession, type PartialAuthorizer, type ProviderType, type RedirectableProviderType, type SignInAuthorizationParams, type SignInOptions, type SignInResponse, type SignOutParams, type SignOutResponse, auth, broadcast, forgotPassword, getCsrfToken, getProviders, getSession, getStatus, resetPassword, signIn, signOut, signUp };
package/dist/index.d.ts CHANGED
@@ -167,6 +167,15 @@ declare class Authorizer {
167
167
  callbackUrl?: string;
168
168
  redirect?: boolean;
169
169
  }): Promise<any>;
170
+ forgotPassword(options: {
171
+ baseUrl?: string;
172
+ init?: ResponseInit;
173
+ fetchUrl?: string;
174
+ password: string;
175
+ auth?: Authorizer | PartialAuthorizer;
176
+ callbackUrl?: string;
177
+ redirect?: boolean;
178
+ }): Promise<Response>;
170
179
  resetPassword(options: {
171
180
  baseUrl?: string;
172
181
  init?: ResponseInit;
@@ -187,6 +196,7 @@ declare const signOut: typeof authorizer.signOut;
187
196
  declare const signIn: typeof authorizer.signIn;
188
197
  declare const signUp: typeof authorizer.signUp;
189
198
  declare const resetPassword: typeof authorizer.resetPassword;
199
+ declare const forgotPassword: typeof authorizer.forgotPassword;
190
200
 
191
201
  declare function getStatus(load: boolean, sess: NonErrorSession | null | undefined): "loading" | "authenticated" | "unauthenticated";
192
202
 
@@ -205,4 +215,4 @@ declare const broadcast: {
205
215
  post(message: Record<string, unknown>): void;
206
216
  };
207
217
 
208
- export { type ActiveSession, type AuthConfig, type AuthState, Authorizer, type BuiltInProviderType, type ClientSafeProvider, type Config, type CtxOrReq, type JWT, type Listener, type ListenerKeys, type ListenerParams, type LiteralUnion, type NileSession, type NonErrorSession, type PartialAuthorizer, type ProviderType, type RedirectableProviderType, type SignInAuthorizationParams, type SignInOptions, type SignInResponse, type SignOutParams, type SignOutResponse, auth, broadcast, getCsrfToken, getProviders, getSession, getStatus, resetPassword, signIn, signOut, signUp };
218
+ export { type ActiveSession, type AuthConfig, type AuthState, Authorizer, type BuiltInProviderType, type ClientSafeProvider, type Config, type CtxOrReq, type JWT, type Listener, type ListenerKeys, type ListenerParams, type LiteralUnion, type NileSession, type NonErrorSession, type PartialAuthorizer, type ProviderType, type RedirectableProviderType, type SignInAuthorizationParams, type SignInOptions, type SignInResponse, type SignOutParams, type SignOutResponse, auth, broadcast, forgotPassword, getCsrfToken, getProviders, getSession, getStatus, resetPassword, signIn, signOut, signUp };
package/dist/index.js CHANGED
@@ -23,6 +23,7 @@ __export(index_exports, {
23
23
  Authorizer: () => Authorizer,
24
24
  auth: () => auth,
25
25
  broadcast: () => broadcast,
26
+ forgotPassword: () => forgotPassword,
26
27
  getCsrfToken: () => getCsrfToken,
27
28
  getProviders: () => getProviders,
28
29
  getSession: () => getSession,
@@ -225,7 +226,7 @@ var Authorizer = class {
225
226
  try {
226
227
  const storageEvent = event === "storage";
227
228
  if (storageEvent || !this.state.session) {
228
- this.state.getSession = await this.getSession;
229
+ this.state.getSession = this.getSession.bind(this);
229
230
  this.state.lastSync = now();
230
231
  }
231
232
  if (!event || this.state.session == null || now() < this.state.lastSync) {
@@ -608,8 +609,32 @@ var Authorizer = class {
608
609
  error
609
610
  };
610
611
  }
612
+ async forgotPassword(options) {
613
+ const { password, fetchUrl, redirect, callbackUrl = "/" } = options;
614
+ this.#configureFetch(options);
615
+ const resetPasswordUrl = fetchUrl ?? `${this.apiBaseUrl}/auth/reset-password`;
616
+ let resetPasswordWithParams = resetPasswordUrl;
617
+ const searchParams = new URLSearchParams();
618
+ if (redirect === false) {
619
+ searchParams.set("json", "true");
620
+ }
621
+ if (searchParams.size > 0) {
622
+ resetPasswordWithParams += `?${searchParams}`;
623
+ }
624
+ const data = await this.#sendData(resetPasswordWithParams, {
625
+ method: "put",
626
+ body: JSON.stringify({
627
+ password,
628
+ callbackUrl
629
+ })
630
+ });
631
+ if (!data?.ok) {
632
+ throw new Error(await data?.clone().text());
633
+ }
634
+ return data;
635
+ }
611
636
  async resetPassword(options) {
612
- const { password, fetchUrl, email, redirect, callbackUrl } = options;
637
+ const { password, fetchUrl, email, redirect, callbackUrl = "/" } = options;
613
638
  this.#configureFetch(options);
614
639
  const resetPasswordUrl = fetchUrl ?? `${this.apiBaseUrl}/auth/reset-password`;
615
640
  let resetPasswordWithParams = resetPasswordUrl;
@@ -697,7 +722,7 @@ var getProviders = async function getProviders2() {
697
722
  var signOut = async function signOut2(options) {
698
723
  return auth.signOut(options);
699
724
  };
700
- var signIn = async function signOut3(provider, options, authParams) {
725
+ var signIn = async function signIn2(provider, options, authParams) {
701
726
  return auth.signIn(provider, options, authParams);
702
727
  };
703
728
  var signUp = async function signUp2(options) {
@@ -706,6 +731,9 @@ var signUp = async function signUp2(options) {
706
731
  var resetPassword = async function resetPassword2(options) {
707
732
  return auth.resetPassword(options);
708
733
  };
734
+ var forgotPassword = async function forgotPassword2(options) {
735
+ return auth.forgotPassword(options);
736
+ };
709
737
 
710
738
  // src/status.ts
711
739
  function getStatus(load, sess) {
@@ -722,6 +750,7 @@ function getStatus(load, sess) {
722
750
  Authorizer,
723
751
  auth,
724
752
  broadcast,
753
+ forgotPassword,
725
754
  getCsrfToken,
726
755
  getProviders,
727
756
  getSession,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/logger.ts","../src/broadcast.ts","../src/observable.ts","../src/Authorizer.ts","../src/status.ts"],"sourcesContent":["export {\n auth,\n getSession,\n getCsrfToken,\n signOut,\n signIn,\n signUp,\n resetPassword,\n getProviders,\n default as Authorizer,\n} from './Authorizer';\nexport { getStatus } from './status';\nexport { broadcast } from './broadcast';\nexport * from './types';\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport Authorizer from './Authorizer';\n\n/* eslint-disable no-console */\nexport class UnknownError extends Error {\n code: string;\n constructor(error: Error | string) {\n // Support passing error or string\n super((error as Error)?.message ?? error);\n this.name = 'UnknownError';\n this.code = (error as any).code;\n if (error instanceof Error) {\n this.stack = error.stack;\n }\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n stack: this.stack,\n };\n }\n}\n\n// TODO: better typing\n/** Makes sure that error is always serializable */\nfunction formatError(o: unknown): unknown {\n if (o instanceof Error && !(o instanceof UnknownError)) {\n return JSON.stringify({ message: o.message, stack: o.stack, name: o.name });\n }\n if (hasErrorProperty(o)) {\n o.error = formatError(o.error) as Error;\n o.message = o.message ?? o.error.message;\n }\n return o;\n}\n\nfunction hasErrorProperty(\n x: unknown\n): x is { error: Error; [key: string]: unknown } {\n return !!(x as any)?.error;\n}\n\nexport type WarningCode =\n | 'NEXTAUTH_URL'\n | 'NO_SECRET'\n | 'TWITTER_OAUTH_2_BETA'\n | 'DEBUG_ENABLED';\n\n/**\n * Override any of the methods, and the rest will use the default logger.\n *\n * [Documentation](https://next-auth.js.org/configuration/options#logger)\n */\nexport interface LoggerInstance extends Record<string, (...args: any) => any> {\n warn: (code: WarningCode) => void;\n error: (\n code: string,\n /**\n * Either an instance of (JSON serializable) Error\n * or an object that contains some debug information.\n * (Error is still available through `metadata.error`)\n */\n metadata: Error | { error: Error; [key: string]: unknown }\n ) => void;\n debug: (code: string, metadata: unknown) => void;\n}\n\nconst _logger: LoggerInstance = {\n error(code, metadata) {\n metadata = formatError(metadata) as Error;\n console.error(`[nile-auth][error][${code}]`, metadata.message, metadata);\n },\n warn(code) {\n console.warn(`[nile-auth][warn][${code}]`);\n },\n debug(code, metadata) {\n console.log(`[next-auth][debug][${code}]`, metadata);\n },\n};\n\n/**\n * Override the built-in logger with user's implementation.\n * Any `undefined` level will use the default logger.\n */\nexport function setLogger(\n newLogger: Partial<LoggerInstance> = {},\n debug?: boolean\n) {\n // Turn off debug logging if `debug` isn't set to `true`\n if (!debug) _logger.debug = () => undefined;\n\n if (newLogger.error) _logger.error = newLogger.error;\n if (newLogger.warn) _logger.warn = newLogger.warn;\n if (newLogger.debug) _logger.debug = newLogger.debug;\n}\n\nexport default _logger;\n\n/** Serializes client-side log messages and sends them to the server */\nexport function proxyLogger(\n logger: LoggerInstance = _logger,\n authorizer: Authorizer\n): LoggerInstance {\n try {\n if (typeof window === 'undefined') {\n return logger;\n }\n\n const clientLogger: Record<string, unknown> = {};\n for (const level in logger) {\n clientLogger[level] = (code: string, metadata: Error) => {\n _logger[level](code, metadata); // Logs to console\n\n if (level === 'error') {\n metadata = formatError(metadata) as Error;\n }\n (metadata as any).client = true;\n const url = `${authorizer.state.basePath}/_log`;\n const body = new URLSearchParams({ level, code, ...(metadata as any) });\n if (navigator.sendBeacon) {\n return navigator.sendBeacon(url, body);\n }\n return fetch(url, { method: 'POST', body, keepalive: true });\n };\n }\n return clientLogger as unknown as LoggerInstance;\n } catch {\n return _logger;\n }\n}\n\nexport const logger = (authorizer: Authorizer) =>\n proxyLogger(_logger, authorizer);\n","/** Returns the number of seconds elapsed since January 1, 1970 00:00:00 UTC. */\nexport function now() {\n return Math.floor(Date.now() / 1000);\n}\n\nexport interface BroadcastMessage {\n event?: 'session';\n data?: { trigger?: 'signout' | 'getSession' };\n clientId: string;\n timestamp: number;\n}\n\n/**\n * Inspired by [Broadcast Channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API)\n * Only not using it directly, because Safari does not support it.\n *\n * https://caniuse.com/?search=broadcastchannel\n */\nexport function BroadcastChannel(name = 'nextauth.message') {\n return {\n /** Get notified by other tabs/windows. */\n receive(onReceive: (message: BroadcastMessage) => void) {\n const handler = (event: StorageEvent) => {\n if (event.key !== name) return;\n const message: BroadcastMessage = JSON.parse(event.newValue ?? '{}');\n if (message?.event !== 'session' || !message?.data) return;\n\n onReceive(message);\n };\n window.addEventListener('storage', handler);\n return () => window.removeEventListener('storage', handler);\n },\n /** Notify other tabs/windows. */\n post(message: Record<string, unknown>) {\n if (typeof window === 'undefined') return;\n try {\n localStorage.setItem(\n name,\n JSON.stringify({ ...message, timestamp: now() })\n );\n } catch {\n /**\n * The localStorage API isn't always available.\n * It won't work in private mode prior to Safari 11 for example.\n * Notifications are simply dropped if an error is encountered.\n */\n }\n },\n };\n}\n\nexport const broadcast = BroadcastChannel();\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nfunction isEqual(a: any, b: any): boolean {\n if (a === b) return true; // Same reference or primitive value\n\n if (\n typeof a !== 'object' ||\n typeof b !== 'object' ||\n a === null ||\n b === null\n ) {\n return false; // If one of them is not an object (or is null), return false\n }\n\n if (Array.isArray(a) !== Array.isArray(b)) return false; // One is an array, the other isn't\n\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n\n if (keysA.length !== keysB.length) return false; // Different number of keys\n\n for (const key of keysA) {\n if (!keysB.includes(key) || !isEqual(a[key], b[key])) {\n return false; // Key missing or values are not deeply equal\n }\n }\n\n return true;\n}\n\nimport { Listener } from './types';\n\nexport function createObservableObject<T = Record<string, unknown>>(\n obj: T,\n listenerKeys = ['loading', 'session'],\n eventName = 'objectChange'\n) {\n const eventTarget = new EventTarget();\n const listeners = new Map();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handler: ProxyHandler<any> = {\n set(target, key, value) {\n const prev = target[key];\n target[key] = value;\n if (isEqual(prev, value)) return true;\n\n // only fire on these two for now\n if (listenerKeys.includes(String(key))) {\n eventTarget.dispatchEvent(\n new CustomEvent(eventName, {\n detail: { key, prev, next: value },\n })\n );\n }\n return true;\n },\n };\n\n return {\n proxy: new Proxy(obj, handler),\n eventTarget,\n addListener(callback: Listener) {\n if (listeners.has(callback)) {\n return;\n }\n const wrappedCallback = (e: Event) => callback((e as CustomEvent).detail);\n listeners.set(callback, wrappedCallback);\n\n eventTarget.addEventListener(eventName, wrappedCallback);\n },\n removeListener(callback: Listener) {\n const wrappedCallback = listeners.get(callback);\n if (wrappedCallback) {\n eventTarget.removeEventListener(eventName, wrappedCallback);\n listeners.delete(callback);\n }\n },\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport {\n ActiveSession,\n AuthConfig,\n AuthState,\n Config,\n CtxOrReq,\n BuiltInProviderType,\n RedirectableProviderType,\n ClientSafeProvider,\n SignInAuthorizationParams,\n SignInOptions,\n LiteralUnion,\n SignInResponse,\n Listener,\n NonErrorSession,\n PartialAuthorizer,\n SignOutParams,\n SignOutResponse,\n} from './types';\nimport { logger, LoggerInstance } from './logger';\nimport { broadcast, now } from './broadcast';\nimport { createObservableObject } from './observable';\n\nexport type GetSessionParams = CtxOrReq & {\n event?: 'storage' | 'timer' | 'hidden' | string;\n triggerEvent?: boolean;\n broadcast?: boolean;\n baseUrl?: string;\n init?: RequestInit;\n};\n\nenum State {\n SESSION = 'getSession',\n}\n\nexport default class Authorizer {\n state: AuthState;\n #logger: LoggerInstance;\n requestInit?: RequestInit;\n addListener: (cb: Listener) => void;\n removeListener: (cb: Listener) => void;\n status: null | State;\n constructor(config?: AuthConfig) {\n const { proxy, addListener, removeListener } =\n createObservableObject<AuthState>(\n {\n basePath: parseUrl(config?.basePath).path,\n baseUrl: parseUrl(config?.baseUrl).origin,\n lastSync: 0,\n getSession: () => undefined,\n session: undefined,\n loading: true,\n },\n config?.listenerKeys,\n 'auth'\n );\n this.state = proxy;\n this.addListener = addListener;\n this.removeListener = removeListener;\n this.#logger = logger(this);\n this.status = null;\n }\n\n async sync(\n event?: 'storage' | 'timer' | 'hidden' | 'poll' | 'visibilitychange'\n ) {\n try {\n const storageEvent = event === 'storage';\n if (storageEvent || !this.state.session) {\n this.state.getSession = await this.getSession;\n this.state.lastSync = now();\n }\n if (!event || this.state.session == null || now() < this.state.lastSync) {\n return;\n }\n this.state.lastSync = Date.now();\n this.state.session = await this.getSession();\n } catch (error) {\n this.#logger.error('CLIENT_SESSION_ERROR', error as Error);\n }\n }\n\n set baseUrl(val: string) {\n this.state.baseUrl = val;\n this.#logger = logger(this);\n }\n\n get baseUrl() {\n this.#logger = logger(this);\n return this.state.baseUrl;\n }\n\n configure(config?: Config) {\n if (config?.basePath) this.state.basePath = parseUrl(config?.basePath).path;\n if (config?.baseUrl) this.baseUrl = config.baseUrl;\n if (config?.init) this.requestInit = config.init;\n\n return this;\n }\n sanitize(): PartialAuthorizer {\n return {\n state: {\n baseUrl: this.baseUrl,\n session: {\n user: {\n email: (this.state.session as ActiveSession)?.user?.email,\n },\n },\n },\n requestInit: this.requestInit,\n };\n }\n\n async initialize(params?: {\n baseUrl?: string;\n session?: NonErrorSession | null | undefined;\n event?: 'storage' | 'timer' | 'hidden' | 'poll' | 'visibilitychange';\n }) {\n const { baseUrl, session, event } = params ?? {};\n\n if (baseUrl) this.baseUrl = baseUrl;\n\n const hasInitialSession = session !== undefined;\n\n this.state.loading = !hasInitialSession;\n this.state.lastSync = hasInitialSession ? now() : 0;\n this.state.session = session;\n\n await this.sync(event);\n }\n\n get apiBaseUrl() {\n return `${this.baseUrl}${this.state.basePath}`;\n }\n\n async #sendData(\n url: string,\n init?: RequestInit\n ): Promise<Response | undefined> {\n try {\n const options: RequestInit = {\n headers: {\n 'Content-Type': 'application/json',\n },\n ...(this.requestInit ? this.requestInit : {}),\n ...init,\n };\n\n const filledUrl = !url.startsWith('http')\n ? `${window.location.origin}${url}`\n : url;\n\n const res = await fetch(filledUrl, options);\n this.state.loading = false;\n return res;\n } catch (error) {\n this.#logger.error('CLIENT_FETCH_ERROR', { error: error as Error, url });\n return undefined;\n }\n }\n async #fetchData<T = any>(\n url: string,\n init?: RequestInit\n ): Promise<T | undefined> {\n const options: RequestInit = {\n ...(this.requestInit ? this.requestInit : {}),\n ...init,\n };\n const res = await this.#sendData(url, options);\n\n const errorHandler = res?.clone();\n try {\n if (res?.ok) {\n const data = await res.json();\n this.state.loading = false;\n return Object.keys(data).length > 0 ? data : undefined;\n } else {\n const error = await errorHandler?.text();\n if (error) {\n const updatedUrl = new URL(url);\n updatedUrl.searchParams.set('error', error);\n return { url: updatedUrl.toString() } as T;\n }\n }\n } catch (error) {\n if (error instanceof Error) {\n // this is fine\n if (!error.message.includes('is not valid JSON')) {\n this.#logger.error('CLIENT_FETCH_ERROR', {\n error: error as Error,\n url,\n });\n } else {\n const error = await errorHandler?.text();\n if (error) {\n const updatedUrl = new URL(url);\n updatedUrl.searchParams.set('error', error);\n return { url: updatedUrl.toString() } as T;\n }\n }\n }\n return undefined;\n }\n }\n async #fetchFormData<T = { url: string }>(\n url: string,\n init: RequestInit\n ): Promise<\n | {\n data: T;\n status: number;\n ok: boolean;\n url: string;\n }\n | undefined\n > {\n try {\n const res = await fetch(url, {\n ...this.requestInit,\n ...init,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n });\n if (res) {\n if (res.ok) {\n return {\n data: (await res.json()) as T,\n status: res.status,\n ok: res.ok,\n url: res.url,\n };\n }\n const { url: responseUrl } = await res.json();\n return {\n data: {} as T,\n status: res.status,\n ok: res?.ok,\n url: responseUrl,\n };\n }\n throw new Error(`Unable to fetch ${url}`);\n } catch (error) {\n if (error instanceof Error) {\n // this is fine\n if (!error.message.includes('is not valid JSON')) {\n this.#logger.error('CLIENT_FETCH_ERROR', {\n error: error as Error,\n url,\n });\n }\n }\n return undefined;\n }\n }\n\n async getProviders(url?: string) {\n return await this.#fetchData<\n Record<LiteralUnion<BuiltInProviderType>, ClientSafeProvider>\n >(url ?? `${this.apiBaseUrl}/auth/providers`);\n }\n\n async getCsrfToken(url?: string) {\n const response = await this.#fetchData<{ csrfToken: string }>(\n url ?? `${this.apiBaseUrl}/auth/csrf`\n );\n return response?.csrfToken;\n }\n\n async getSession(params?: GetSessionParams): Promise<NonErrorSession> {\n if (this.status === State.SESSION) {\n return;\n }\n this.status = State.SESSION;\n if (params?.init) {\n this.requestInit = params.init;\n }\n\n if (params?.baseUrl) {\n this.baseUrl = params.baseUrl;\n }\n\n if (this.state.session && now() < this.state.lastSync) {\n this.status = null;\n return this.state.session;\n }\n this.state.loading = true;\n\n const session = await this.#fetchData<NonErrorSession | undefined>(\n `${this.apiBaseUrl}/auth/session`\n );\n\n broadcast.post({ event: 'session', data: { trigger: 'getSession' } });\n this.status = null;\n if (session) {\n this.state.session = session;\n await this.sync('storage');\n return { ...session, loading: this.state.loading };\n }\n return { loading: this.state.loading } as NonErrorSession;\n }\n\n async refreshSession() {\n this.state.loading = true;\n const session = await this.#fetchData<NonErrorSession | undefined>(\n `${this.apiBaseUrl}/auth/session`\n );\n\n broadcast.post({ event: 'session', data: { trigger: 'getSession' } });\n this.state.session = session;\n await this.sync('storage');\n return session;\n }\n async signOut<R extends boolean = true>(\n options?: SignOutParams<R> & {\n baseUrl?: string;\n auth?: Authorizer | PartialAuthorizer;\n fetchUrl?: string;\n basePath?: string;\n }\n ): Promise<R extends true ? undefined : SignOutResponse> {\n const {\n callbackUrl = window.location.href,\n baseUrl,\n auth,\n fetchUrl,\n basePath,\n } = options ?? {};\n\n if (basePath) {\n this.state.basePath = basePath;\n }\n\n if (baseUrl) {\n this.baseUrl = baseUrl;\n }\n\n if (auth) {\n this.requestInit = auth.requestInit;\n if (auth.state?.baseUrl) {\n this.baseUrl = auth.state.baseUrl;\n }\n }\n const baseFetch = fetchUrl ?? `${this.apiBaseUrl}/auth/signout`;\n const fetchOptions: RequestInit = {\n method: 'post',\n body: new URLSearchParams({\n csrfToken: String(await this.getCsrfToken()),\n callbackUrl,\n json: String(true),\n }),\n };\n const res = await this.#fetchFormData<SignOutResponse>(\n baseFetch,\n fetchOptions\n );\n\n broadcast.post({ event: 'session', data: { trigger: 'signout' } });\n\n // in the case you are going x-origin, we don't want to trust the nile.callback-url, so we will not redirect and just refresh the page\n if (this.requestInit?.credentials) {\n window.location.href = callbackUrl;\n if (callbackUrl.includes('#')) window.location.reload();\n return undefined as R extends true ? undefined : SignOutResponse;\n }\n if (options?.redirect ?? true) {\n const url = res?.data?.url ?? callbackUrl;\n window.location.href = url;\n // If url contains a hash, the browser does not reload the page. We reload manually\n if (url.includes('#')) window.location.reload();\n return undefined as R extends true ? undefined : SignOutResponse;\n }\n\n await this.state.getSession({ event: 'storage' });\n\n return res?.data as R extends true ? undefined : SignOutResponse;\n }\n async signIn<P extends RedirectableProviderType | undefined = undefined>(\n provider?: LiteralUnion<\n P extends RedirectableProviderType\n ? P | BuiltInProviderType\n : BuiltInProviderType\n >,\n options?: SignInOptions & {\n baseUrl?: string;\n providersUrl?: string;\n csrfUrl?: string;\n init?: ResponseInit;\n fetchUrl?: string;\n resetUrl?: string;\n auth?: Authorizer | PartialAuthorizer;\n },\n authorizationParams?: SignInAuthorizationParams\n ): Promise<\n P extends RedirectableProviderType ? SignInResponse | undefined : undefined\n > {\n const {\n callbackUrl = window.location.href,\n resetUrl = window.location.href,\n providersUrl,\n csrfUrl,\n baseUrl,\n fetchUrl,\n init,\n auth,\n redirect = true,\n ...remaining\n } = options ?? {};\n\n if (baseUrl) {\n this.baseUrl = baseUrl;\n }\n if (auth) {\n if (auth.requestInit) {\n this.requestInit = auth.requestInit;\n }\n if (auth.state?.baseUrl) {\n this.baseUrl = auth.state.baseUrl;\n }\n }\n if (init) {\n this.requestInit = init;\n }\n\n const providers = await this.getProviders(providersUrl);\n\n if (!providers) {\n return { error: 'No providers enabled' } as any;\n }\n if (!provider || !(provider in providers)) {\n return { error: `Provider ${provider} not enabled` } as any;\n }\n\n const isCredentials = providers[provider].type === 'credentials';\n const isEmail = providers[provider].type === 'email';\n const isSupportingReturn = isCredentials || isEmail;\n\n const baseFetch = `${this.apiBaseUrl}/auth`;\n const signInUrl =\n fetchUrl ??\n `${baseFetch}/${isCredentials ? 'callback' : 'signin'}/${provider}`;\n\n const _signInUrl = `${signInUrl}${\n authorizationParams ? `?${new URLSearchParams(authorizationParams)}` : ''\n }`;\n\n const data = await this.#fetchFormData(_signInUrl, {\n method: 'post',\n body: new URLSearchParams({\n ...remaining,\n csrfToken: String(await this.getCsrfToken(csrfUrl)),\n callbackUrl,\n json: String(true),\n resetUrl,\n }),\n });\n\n if (data?.ok && this.requestInit?.credentials && isSupportingReturn) {\n window.location.reload();\n return;\n }\n\n if (data?.ok && (redirect || !isSupportingReturn)) {\n const url = data?.data.url ?? callbackUrl;\n window.location.href = url;\n if (url.includes('#')) window.location.reload();\n return;\n }\n\n const error = data?.data?.url\n ? new URL(String(data?.data?.url)).searchParams.get('error')\n : null;\n\n if (data?.ok) {\n await this.initialize();\n await this.getSession({ event: 'storage' });\n }\n return {\n error,\n status: data?.status,\n ok: data?.ok,\n url: error ? null : data?.url,\n } as any;\n }\n async signUp(options: {\n baseUrl?: string;\n init?: ResponseInit;\n fetchUrl?: string;\n newTenantName?: string;\n createTenant?: string | boolean;\n email: string;\n password: string;\n auth?: Authorizer | PartialAuthorizer;\n tenantId?: string;\n callbackUrl?: string;\n redirect?: boolean;\n }) {\n const {\n password,\n tenantId,\n fetchUrl,\n newTenantName,\n createTenant,\n baseUrl,\n init,\n email,\n auth,\n callbackUrl = window.location.href,\n } = options;\n\n if (baseUrl) {\n this.baseUrl = baseUrl;\n }\n\n if (auth) {\n if (auth.requestInit) {\n this.requestInit = auth.requestInit;\n }\n if (auth.state?.baseUrl) {\n this.baseUrl = auth.state.baseUrl;\n }\n }\n\n if (init) {\n this.requestInit = init;\n }\n\n const searchParams = new URLSearchParams();\n\n if (newTenantName) {\n searchParams.set('newTenantName', newTenantName);\n } else if (createTenant) {\n if (typeof createTenant === 'boolean') {\n searchParams.set('newTenantName', email);\n } else if (typeof createTenant === 'string') {\n searchParams.set('newTenantName', createTenant);\n }\n }\n if (tenantId) {\n searchParams.set('tenantId', tenantId);\n }\n\n let signUpUrl = fetchUrl ?? `${this.apiBaseUrl}/signup`;\n if (searchParams.size > 0) {\n signUpUrl += `?${searchParams}`;\n }\n const data = await this.#fetchData(signUpUrl, {\n method: 'post',\n body: JSON.stringify({ email, password }),\n });\n\n const error = data?.url\n ? new URL(data.url).searchParams.get('error')\n : null;\n\n if (!error) {\n if (data) {\n await this.initialize({ event: 'storage' });\n await this.getSession({ event: 'storage' });\n }\n if (this.requestInit?.credentials) {\n window.location.reload();\n return;\n }\n\n if (options?.redirect ?? true) {\n const url = callbackUrl;\n window.location.href = url;\n // If url contains a hash, the browser does not reload the page. We reload manually\n if (url.includes('#')) window.location.reload();\n }\n }\n\n return {\n data,\n error,\n } as any;\n }\n async resetPassword(options: {\n baseUrl?: string;\n init?: ResponseInit;\n fetchUrl?: string;\n email: string;\n password: string;\n auth?: Authorizer | PartialAuthorizer;\n callbackUrl?: string;\n redirect?: boolean;\n }) {\n const { password, fetchUrl, email, redirect, callbackUrl } = options;\n\n this.#configureFetch(options);\n\n const resetPasswordUrl =\n fetchUrl ?? `${this.apiBaseUrl}/auth/reset-password`;\n\n let resetPasswordWithParams = resetPasswordUrl;\n\n const searchParams = new URLSearchParams();\n\n if (redirect === false) {\n searchParams.set('json', 'true');\n }\n if (searchParams.size > 0) {\n resetPasswordWithParams += `?${searchParams}`;\n }\n\n const data = await this.#sendData(resetPasswordWithParams, {\n method: 'post',\n body: JSON.stringify({\n email,\n password,\n redirectUrl: resetPasswordUrl,\n callbackUrl,\n }),\n });\n if (!data?.ok) {\n throw new Error(await data?.clone().text());\n }\n if (redirect === false) {\n const json = await data?.json();\n const { url: urlWithParams } = json;\n resetPasswordWithParams = `${urlWithParams}&redirect=false`;\n await this.#sendData(resetPasswordWithParams);\n\n return await this.#sendData(resetPasswordWithParams, {\n method: password ? 'put' : 'post',\n body: JSON.stringify({ email, password }),\n });\n }\n }\n\n #configureFetch(params: {\n baseUrl?: string;\n auth?: Authorizer | PartialAuthorizer;\n init?: RequestInit;\n }) {\n const { baseUrl, init, auth } = params;\n if (baseUrl) {\n this.baseUrl = baseUrl;\n }\n\n if (auth) {\n if (auth.requestInit) {\n this.requestInit = auth.requestInit;\n }\n if (auth.state?.baseUrl) {\n this.baseUrl = auth.state.baseUrl;\n }\n }\n\n if (init) {\n this.requestInit = init;\n }\n }\n}\nexport interface InternalUrl {\n /** @default \"http://localhost:3000\" */\n origin: string;\n /** @default \"localhost:3000\" */\n host: string;\n /** @default \"/api/auth\" */\n path: string;\n /** @default \"http://localhost:3000/api/auth\" */\n base: string;\n /** @default \"http://localhost:3000/api/auth\" */\n toString: () => string;\n}\n\nfunction parseUrl(url?: string): InternalUrl {\n let defaultUrl = new URL('http://localhost:3000');\n if (typeof window !== 'undefined') {\n defaultUrl = new URL(`${window.location.origin}/api`);\n }\n\n if (url && !url.startsWith('http')) {\n url = `https://${url}`;\n }\n\n const _url = new URL(url ?? defaultUrl);\n const path = (_url.pathname === '/' ? defaultUrl.pathname : _url.pathname)\n // Remove trailing slash\n .replace(/\\/$/, '');\n\n const base = `${_url.origin}${path}`;\n\n return {\n origin: _url.origin,\n host: _url.host,\n path,\n base,\n toString: () => base,\n };\n}\n\nexport const authorizer = new Authorizer();\n\nconst _auth = () => {\n return authorizer;\n};\n\nexport const auth: Authorizer = _auth();\n\nexport const getSession = async function getSession(params?: GetSessionParams) {\n return await auth.getSession(params);\n};\n\nexport const getCsrfToken = async function getCsrfToken(url?: string) {\n return auth.getCsrfToken(url);\n};\n\nexport const getProviders = async function getProviders() {\n return auth.getProviders();\n};\n\nexport const signOut: typeof authorizer.signOut = async function signOut(\n options\n) {\n return auth.signOut(options);\n};\nexport const signIn: typeof authorizer.signIn = async function signOut(\n provider,\n options,\n authParams\n) {\n return auth.signIn(provider, options, authParams);\n};\n\nexport const signUp: typeof authorizer.signUp = async function signUp(options) {\n return auth.signUp(options);\n};\nexport const resetPassword: typeof authorizer.resetPassword =\n async function resetPassword(options) {\n return auth.resetPassword(options);\n };\n","import { NonErrorSession } from './types';\n\nexport function getStatus(\n load: boolean,\n sess: NonErrorSession | null | undefined\n) {\n if (load) {\n return 'loading';\n }\n if (sess) {\n return 'authenticated';\n }\n return 'unauthenticated';\n}\n"],"mappings":"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","names":["logger","authorizer","error","auth","getSession","getCsrfToken","getProviders","signOut","signUp","resetPassword"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/logger.ts","../src/broadcast.ts","../src/observable.ts","../src/Authorizer.ts","../src/status.ts"],"sourcesContent":["export {\n auth,\n getSession,\n getCsrfToken,\n signOut,\n signIn,\n signUp,\n resetPassword,\n forgotPassword,\n getProviders,\n default as Authorizer,\n} from './Authorizer';\nexport { getStatus } from './status';\nexport { broadcast } from './broadcast';\nexport * from './types';\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport Authorizer from './Authorizer';\n\n/* eslint-disable no-console */\nexport class UnknownError extends Error {\n code: string;\n constructor(error: Error | string) {\n // Support passing error or string\n super((error as Error)?.message ?? error);\n this.name = 'UnknownError';\n this.code = (error as any).code;\n if (error instanceof Error) {\n this.stack = error.stack;\n }\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n stack: this.stack,\n };\n }\n}\n\n// TODO: better typing\n/** Makes sure that error is always serializable */\nfunction formatError(o: unknown): unknown {\n if (o instanceof Error && !(o instanceof UnknownError)) {\n return JSON.stringify({ message: o.message, stack: o.stack, name: o.name });\n }\n if (hasErrorProperty(o)) {\n o.error = formatError(o.error) as Error;\n o.message = o.message ?? o.error.message;\n }\n return o;\n}\n\nfunction hasErrorProperty(\n x: unknown\n): x is { error: Error; [key: string]: unknown } {\n return !!(x as any)?.error;\n}\n\nexport type WarningCode =\n | 'NEXTAUTH_URL'\n | 'NO_SECRET'\n | 'TWITTER_OAUTH_2_BETA'\n | 'DEBUG_ENABLED';\n\n/**\n * Override any of the methods, and the rest will use the default logger.\n *\n * [Documentation](https://next-auth.js.org/configuration/options#logger)\n */\nexport interface LoggerInstance extends Record<string, (...args: any) => any> {\n warn: (code: WarningCode) => void;\n error: (\n code: string,\n /**\n * Either an instance of (JSON serializable) Error\n * or an object that contains some debug information.\n * (Error is still available through `metadata.error`)\n */\n metadata: Error | { error: Error; [key: string]: unknown }\n ) => void;\n debug: (code: string, metadata: unknown) => void;\n}\n\nconst _logger: LoggerInstance = {\n error(code, metadata) {\n metadata = formatError(metadata) as Error;\n console.error(`[nile-auth][error][${code}]`, metadata.message, metadata);\n },\n warn(code) {\n console.warn(`[nile-auth][warn][${code}]`);\n },\n debug(code, metadata) {\n console.log(`[next-auth][debug][${code}]`, metadata);\n },\n};\n\n/**\n * Override the built-in logger with user's implementation.\n * Any `undefined` level will use the default logger.\n */\nexport function setLogger(\n newLogger: Partial<LoggerInstance> = {},\n debug?: boolean\n) {\n // Turn off debug logging if `debug` isn't set to `true`\n if (!debug) _logger.debug = () => undefined;\n\n if (newLogger.error) _logger.error = newLogger.error;\n if (newLogger.warn) _logger.warn = newLogger.warn;\n if (newLogger.debug) _logger.debug = newLogger.debug;\n}\n\nexport default _logger;\n\n/** Serializes client-side log messages and sends them to the server */\nexport function proxyLogger(\n logger: LoggerInstance = _logger,\n authorizer: Authorizer\n): LoggerInstance {\n try {\n if (typeof window === 'undefined') {\n return logger;\n }\n\n const clientLogger: Record<string, unknown> = {};\n for (const level in logger) {\n clientLogger[level] = (code: string, metadata: Error) => {\n _logger[level](code, metadata); // Logs to console\n\n if (level === 'error') {\n metadata = formatError(metadata) as Error;\n }\n (metadata as any).client = true;\n const url = `${authorizer.state.basePath}/_log`;\n const body = new URLSearchParams({ level, code, ...(metadata as any) });\n if (navigator.sendBeacon) {\n return navigator.sendBeacon(url, body);\n }\n return fetch(url, { method: 'POST', body, keepalive: true });\n };\n }\n return clientLogger as unknown as LoggerInstance;\n } catch {\n return _logger;\n }\n}\n\nexport const logger = (authorizer: Authorizer) =>\n proxyLogger(_logger, authorizer);\n","/** Returns the number of seconds elapsed since January 1, 1970 00:00:00 UTC. */\nexport function now() {\n return Math.floor(Date.now() / 1000);\n}\n\nexport interface BroadcastMessage {\n event?: 'session';\n data?: { trigger?: 'signout' | 'getSession' };\n clientId: string;\n timestamp: number;\n}\n\n/**\n * Inspired by [Broadcast Channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API)\n * Only not using it directly, because Safari does not support it.\n *\n * https://caniuse.com/?search=broadcastchannel\n */\nexport function BroadcastChannel(name = 'nextauth.message') {\n return {\n /** Get notified by other tabs/windows. */\n receive(onReceive: (message: BroadcastMessage) => void) {\n const handler = (event: StorageEvent) => {\n if (event.key !== name) return;\n const message: BroadcastMessage = JSON.parse(event.newValue ?? '{}');\n if (message?.event !== 'session' || !message?.data) return;\n\n onReceive(message);\n };\n window.addEventListener('storage', handler);\n return () => window.removeEventListener('storage', handler);\n },\n /** Notify other tabs/windows. */\n post(message: Record<string, unknown>) {\n if (typeof window === 'undefined') return;\n try {\n localStorage.setItem(\n name,\n JSON.stringify({ ...message, timestamp: now() })\n );\n } catch {\n /**\n * The localStorage API isn't always available.\n * It won't work in private mode prior to Safari 11 for example.\n * Notifications are simply dropped if an error is encountered.\n */\n }\n },\n };\n}\n\nexport const broadcast = BroadcastChannel();\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nfunction isEqual(a: any, b: any): boolean {\n if (a === b) return true; // Same reference or primitive value\n\n if (\n typeof a !== 'object' ||\n typeof b !== 'object' ||\n a === null ||\n b === null\n ) {\n return false; // If one of them is not an object (or is null), return false\n }\n\n if (Array.isArray(a) !== Array.isArray(b)) return false; // One is an array, the other isn't\n\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n\n if (keysA.length !== keysB.length) return false; // Different number of keys\n\n for (const key of keysA) {\n if (!keysB.includes(key) || !isEqual(a[key], b[key])) {\n return false; // Key missing or values are not deeply equal\n }\n }\n\n return true;\n}\n\nimport { Listener } from './types';\n\nexport function createObservableObject<T = Record<string, unknown>>(\n obj: T,\n listenerKeys = ['loading', 'session'],\n eventName = 'objectChange'\n) {\n const eventTarget = new EventTarget();\n const listeners = new Map();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handler: ProxyHandler<any> = {\n set(target, key, value) {\n const prev = target[key];\n target[key] = value;\n if (isEqual(prev, value)) return true;\n\n // only fire on these two for now\n if (listenerKeys.includes(String(key))) {\n eventTarget.dispatchEvent(\n new CustomEvent(eventName, {\n detail: { key, prev, next: value },\n })\n );\n }\n return true;\n },\n };\n\n return {\n proxy: new Proxy(obj, handler),\n eventTarget,\n addListener(callback: Listener) {\n if (listeners.has(callback)) {\n return;\n }\n const wrappedCallback = (e: Event) => callback((e as CustomEvent).detail);\n listeners.set(callback, wrappedCallback);\n\n eventTarget.addEventListener(eventName, wrappedCallback);\n },\n removeListener(callback: Listener) {\n const wrappedCallback = listeners.get(callback);\n if (wrappedCallback) {\n eventTarget.removeEventListener(eventName, wrappedCallback);\n listeners.delete(callback);\n }\n },\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport {\n ActiveSession,\n AuthConfig,\n AuthState,\n Config,\n CtxOrReq,\n BuiltInProviderType,\n RedirectableProviderType,\n ClientSafeProvider,\n SignInAuthorizationParams,\n SignInOptions,\n LiteralUnion,\n SignInResponse,\n Listener,\n NonErrorSession,\n PartialAuthorizer,\n SignOutParams,\n SignOutResponse,\n} from './types';\nimport { logger, LoggerInstance } from './logger';\nimport { broadcast, now } from './broadcast';\nimport { createObservableObject } from './observable';\n\nexport type GetSessionParams = CtxOrReq & {\n event?: 'storage' | 'timer' | 'hidden' | string;\n triggerEvent?: boolean;\n broadcast?: boolean;\n baseUrl?: string;\n init?: RequestInit;\n};\n\nenum State {\n SESSION = 'getSession',\n}\n\nexport default class Authorizer {\n state: AuthState;\n #logger: LoggerInstance;\n requestInit?: RequestInit;\n addListener: (cb: Listener) => void;\n removeListener: (cb: Listener) => void;\n status: null | State;\n constructor(config?: AuthConfig) {\n const { proxy, addListener, removeListener } =\n createObservableObject<AuthState>(\n {\n basePath: parseUrl(config?.basePath).path,\n baseUrl: parseUrl(config?.baseUrl).origin,\n lastSync: 0,\n getSession: () => undefined,\n session: undefined,\n loading: true,\n },\n config?.listenerKeys,\n 'auth'\n );\n this.state = proxy;\n this.addListener = addListener;\n this.removeListener = removeListener;\n this.#logger = logger(this);\n this.status = null;\n }\n\n async sync(\n event?: 'storage' | 'timer' | 'hidden' | 'poll' | 'visibilitychange'\n ) {\n try {\n const storageEvent = event === 'storage';\n if (storageEvent || !this.state.session) {\n this.state.getSession = this.getSession.bind(this);\n this.state.lastSync = now();\n }\n if (!event || this.state.session == null || now() < this.state.lastSync) {\n return;\n }\n this.state.lastSync = Date.now();\n this.state.session = await this.getSession();\n } catch (error) {\n this.#logger.error('CLIENT_SESSION_ERROR', error as Error);\n }\n }\n\n set baseUrl(val: string) {\n this.state.baseUrl = val;\n this.#logger = logger(this);\n }\n\n get baseUrl() {\n this.#logger = logger(this);\n return this.state.baseUrl;\n }\n\n configure(config?: Config) {\n if (config?.basePath) this.state.basePath = parseUrl(config?.basePath).path;\n if (config?.baseUrl) this.baseUrl = config.baseUrl;\n if (config?.init) this.requestInit = config.init;\n\n return this;\n }\n sanitize(): PartialAuthorizer {\n return {\n state: {\n baseUrl: this.baseUrl,\n session: {\n user: {\n email: (this.state.session as ActiveSession)?.user?.email,\n },\n },\n },\n requestInit: this.requestInit,\n };\n }\n\n async initialize(params?: {\n baseUrl?: string;\n session?: NonErrorSession | null | undefined;\n event?: 'storage' | 'timer' | 'hidden' | 'poll' | 'visibilitychange';\n }) {\n const { baseUrl, session, event } = params ?? {};\n\n if (baseUrl) this.baseUrl = baseUrl;\n\n const hasInitialSession = session !== undefined;\n\n this.state.loading = !hasInitialSession;\n this.state.lastSync = hasInitialSession ? now() : 0;\n this.state.session = session;\n\n await this.sync(event);\n }\n\n get apiBaseUrl() {\n return `${this.baseUrl}${this.state.basePath}`;\n }\n\n async #sendData(\n url: string,\n init?: RequestInit\n ): Promise<Response | undefined> {\n try {\n const options: RequestInit = {\n headers: {\n 'Content-Type': 'application/json',\n },\n ...(this.requestInit ? this.requestInit : {}),\n ...init,\n };\n\n const filledUrl = !url.startsWith('http')\n ? `${window.location.origin}${url}`\n : url;\n\n const res = await fetch(filledUrl, options);\n this.state.loading = false;\n return res;\n } catch (error) {\n this.#logger.error('CLIENT_FETCH_ERROR', { error: error as Error, url });\n return undefined;\n }\n }\n async #fetchData<T = any>(\n url: string,\n init?: RequestInit\n ): Promise<T | undefined> {\n const options: RequestInit = {\n ...(this.requestInit ? this.requestInit : {}),\n ...init,\n };\n const res = await this.#sendData(url, options);\n\n const errorHandler = res?.clone();\n try {\n if (res?.ok) {\n const data = await res.json();\n this.state.loading = false;\n return Object.keys(data).length > 0 ? data : undefined;\n } else {\n const error = await errorHandler?.text();\n if (error) {\n const updatedUrl = new URL(url);\n updatedUrl.searchParams.set('error', error);\n return { url: updatedUrl.toString() } as T;\n }\n }\n } catch (error) {\n if (error instanceof Error) {\n // this is fine\n if (!error.message.includes('is not valid JSON')) {\n this.#logger.error('CLIENT_FETCH_ERROR', {\n error: error as Error,\n url,\n });\n } else {\n const error = await errorHandler?.text();\n if (error) {\n const updatedUrl = new URL(url);\n updatedUrl.searchParams.set('error', error);\n return { url: updatedUrl.toString() } as T;\n }\n }\n }\n return undefined;\n }\n }\n async #fetchFormData<T = { url: string }>(\n url: string,\n init: RequestInit\n ): Promise<\n | {\n data: T;\n status: number;\n ok: boolean;\n url: string;\n }\n | undefined\n > {\n try {\n const res = await fetch(url, {\n ...this.requestInit,\n ...init,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n });\n if (res) {\n if (res.ok) {\n return {\n data: (await res.json()) as T,\n status: res.status,\n ok: res.ok,\n url: res.url,\n };\n }\n const { url: responseUrl } = await res.json();\n return {\n data: {} as T,\n status: res.status,\n ok: res?.ok,\n url: responseUrl,\n };\n }\n throw new Error(`Unable to fetch ${url}`);\n } catch (error) {\n if (error instanceof Error) {\n // this is fine\n if (!error.message.includes('is not valid JSON')) {\n this.#logger.error('CLIENT_FETCH_ERROR', {\n error: error as Error,\n url,\n });\n }\n }\n return undefined;\n }\n }\n\n async getProviders(url?: string) {\n return await this.#fetchData<\n Record<LiteralUnion<BuiltInProviderType>, ClientSafeProvider>\n >(url ?? `${this.apiBaseUrl}/auth/providers`);\n }\n\n async getCsrfToken(url?: string) {\n const response = await this.#fetchData<{ csrfToken: string }>(\n url ?? `${this.apiBaseUrl}/auth/csrf`\n );\n return response?.csrfToken;\n }\n\n async getSession(params?: GetSessionParams): Promise<NonErrorSession> {\n if (this.status === State.SESSION) {\n return;\n }\n this.status = State.SESSION;\n if (params?.init) {\n this.requestInit = params.init;\n }\n\n if (params?.baseUrl) {\n this.baseUrl = params.baseUrl;\n }\n\n if (this.state.session && now() < this.state.lastSync) {\n this.status = null;\n return this.state.session;\n }\n this.state.loading = true;\n\n const session = await this.#fetchData<NonErrorSession | undefined>(\n `${this.apiBaseUrl}/auth/session`\n );\n\n broadcast.post({ event: 'session', data: { trigger: 'getSession' } });\n this.status = null;\n if (session) {\n this.state.session = session;\n await this.sync('storage');\n return { ...session, loading: this.state.loading };\n }\n return { loading: this.state.loading } as NonErrorSession;\n }\n\n async refreshSession() {\n this.state.loading = true;\n const session = await this.#fetchData<NonErrorSession | undefined>(\n `${this.apiBaseUrl}/auth/session`\n );\n\n broadcast.post({ event: 'session', data: { trigger: 'getSession' } });\n this.state.session = session;\n await this.sync('storage');\n return session;\n }\n async signOut<R extends boolean = true>(\n options?: SignOutParams<R> & {\n baseUrl?: string;\n auth?: Authorizer | PartialAuthorizer;\n fetchUrl?: string;\n basePath?: string;\n }\n ): Promise<R extends true ? undefined : SignOutResponse> {\n const {\n callbackUrl = window.location.href,\n baseUrl,\n auth,\n fetchUrl,\n basePath,\n } = options ?? {};\n\n if (basePath) {\n this.state.basePath = basePath;\n }\n\n if (baseUrl) {\n this.baseUrl = baseUrl;\n }\n\n if (auth) {\n this.requestInit = auth.requestInit;\n if (auth.state?.baseUrl) {\n this.baseUrl = auth.state.baseUrl;\n }\n }\n const baseFetch = fetchUrl ?? `${this.apiBaseUrl}/auth/signout`;\n const fetchOptions: RequestInit = {\n method: 'post',\n body: new URLSearchParams({\n csrfToken: String(await this.getCsrfToken()),\n callbackUrl,\n json: String(true),\n }),\n };\n const res = await this.#fetchFormData<SignOutResponse>(\n baseFetch,\n fetchOptions\n );\n\n broadcast.post({ event: 'session', data: { trigger: 'signout' } });\n\n // in the case you are going x-origin, we don't want to trust the nile.callback-url, so we will not redirect and just refresh the page\n if (this.requestInit?.credentials) {\n window.location.href = callbackUrl;\n if (callbackUrl.includes('#')) window.location.reload();\n return undefined as R extends true ? undefined : SignOutResponse;\n }\n if (options?.redirect ?? true) {\n const url = res?.data?.url ?? callbackUrl;\n window.location.href = url;\n // If url contains a hash, the browser does not reload the page. We reload manually\n if (url.includes('#')) window.location.reload();\n return undefined as R extends true ? undefined : SignOutResponse;\n }\n\n await this.state.getSession({ event: 'storage' });\n\n return res?.data as R extends true ? undefined : SignOutResponse;\n }\n async signIn<P extends RedirectableProviderType | undefined = undefined>(\n provider?: LiteralUnion<\n P extends RedirectableProviderType\n ? P | BuiltInProviderType\n : BuiltInProviderType\n >,\n options?: SignInOptions & {\n baseUrl?: string;\n providersUrl?: string;\n csrfUrl?: string;\n init?: ResponseInit;\n fetchUrl?: string;\n resetUrl?: string;\n auth?: Authorizer | PartialAuthorizer;\n },\n authorizationParams?: SignInAuthorizationParams\n ): Promise<\n P extends RedirectableProviderType ? SignInResponse | undefined : undefined\n > {\n const {\n callbackUrl = window.location.href,\n resetUrl = window.location.href,\n providersUrl,\n csrfUrl,\n baseUrl,\n fetchUrl,\n init,\n auth,\n redirect = true,\n ...remaining\n } = options ?? {};\n\n if (baseUrl) {\n this.baseUrl = baseUrl;\n }\n if (auth) {\n if (auth.requestInit) {\n this.requestInit = auth.requestInit;\n }\n if (auth.state?.baseUrl) {\n this.baseUrl = auth.state.baseUrl;\n }\n }\n if (init) {\n this.requestInit = init;\n }\n\n const providers = await this.getProviders(providersUrl);\n\n if (!providers) {\n return { error: 'No providers enabled' } as any;\n }\n if (!provider || !(provider in providers)) {\n return { error: `Provider ${provider} not enabled` } as any;\n }\n\n const isCredentials = providers[provider].type === 'credentials';\n const isEmail = providers[provider].type === 'email';\n const isSupportingReturn = isCredentials || isEmail;\n\n const baseFetch = `${this.apiBaseUrl}/auth`;\n const signInUrl =\n fetchUrl ??\n `${baseFetch}/${isCredentials ? 'callback' : 'signin'}/${provider}`;\n\n const _signInUrl = `${signInUrl}${\n authorizationParams ? `?${new URLSearchParams(authorizationParams)}` : ''\n }`;\n\n const data = await this.#fetchFormData(_signInUrl, {\n method: 'post',\n body: new URLSearchParams({\n ...remaining,\n csrfToken: String(await this.getCsrfToken(csrfUrl)),\n callbackUrl,\n json: String(true),\n resetUrl,\n }),\n });\n\n if (data?.ok && this.requestInit?.credentials && isSupportingReturn) {\n window.location.reload();\n return;\n }\n\n if (data?.ok && (redirect || !isSupportingReturn)) {\n const url = data?.data.url ?? callbackUrl;\n window.location.href = url;\n if (url.includes('#')) window.location.reload();\n return;\n }\n\n const error = data?.data?.url\n ? new URL(String(data?.data?.url)).searchParams.get('error')\n : null;\n\n if (data?.ok) {\n await this.initialize();\n await this.getSession({ event: 'storage' });\n }\n return {\n error,\n status: data?.status,\n ok: data?.ok,\n url: error ? null : data?.url,\n } as any;\n }\n async signUp(options: {\n baseUrl?: string;\n init?: ResponseInit;\n fetchUrl?: string;\n newTenantName?: string;\n createTenant?: string | boolean;\n email: string;\n password: string;\n auth?: Authorizer | PartialAuthorizer;\n tenantId?: string;\n callbackUrl?: string;\n redirect?: boolean;\n }) {\n const {\n password,\n tenantId,\n fetchUrl,\n newTenantName,\n createTenant,\n baseUrl,\n init,\n email,\n auth,\n callbackUrl = window.location.href,\n } = options;\n\n if (baseUrl) {\n this.baseUrl = baseUrl;\n }\n\n if (auth) {\n if (auth.requestInit) {\n this.requestInit = auth.requestInit;\n }\n if (auth.state?.baseUrl) {\n this.baseUrl = auth.state.baseUrl;\n }\n }\n\n if (init) {\n this.requestInit = init;\n }\n\n const searchParams = new URLSearchParams();\n\n if (newTenantName) {\n searchParams.set('newTenantName', newTenantName);\n } else if (createTenant) {\n if (typeof createTenant === 'boolean') {\n searchParams.set('newTenantName', email);\n } else if (typeof createTenant === 'string') {\n searchParams.set('newTenantName', createTenant);\n }\n }\n if (tenantId) {\n searchParams.set('tenantId', tenantId);\n }\n\n let signUpUrl = fetchUrl ?? `${this.apiBaseUrl}/signup`;\n if (searchParams.size > 0) {\n signUpUrl += `?${searchParams}`;\n }\n const data = await this.#fetchData(signUpUrl, {\n method: 'post',\n body: JSON.stringify({ email, password }),\n });\n\n const error = data?.url\n ? new URL(data.url).searchParams.get('error')\n : null;\n\n if (!error) {\n if (data) {\n await this.initialize({ event: 'storage' });\n await this.getSession({ event: 'storage' });\n }\n if (this.requestInit?.credentials) {\n window.location.reload();\n return;\n }\n\n if (options?.redirect ?? true) {\n const url = callbackUrl;\n window.location.href = url;\n // If url contains a hash, the browser does not reload the page. We reload manually\n if (url.includes('#')) window.location.reload();\n }\n }\n\n return {\n data,\n error,\n } as any;\n }\n\n async forgotPassword(options: {\n baseUrl?: string;\n init?: ResponseInit;\n fetchUrl?: string;\n password: string;\n auth?: Authorizer | PartialAuthorizer;\n callbackUrl?: string;\n redirect?: boolean;\n }) {\n const { password, fetchUrl, redirect, callbackUrl = '/' } = options;\n\n this.#configureFetch(options);\n\n const resetPasswordUrl =\n fetchUrl ?? `${this.apiBaseUrl}/auth/reset-password`;\n\n let resetPasswordWithParams = resetPasswordUrl;\n\n const searchParams = new URLSearchParams();\n\n if (redirect === false) {\n searchParams.set('json', 'true');\n }\n if (searchParams.size > 0) {\n resetPasswordWithParams += `?${searchParams}`;\n }\n\n const data = await this.#sendData(resetPasswordWithParams, {\n method: 'put',\n body: JSON.stringify({\n password,\n callbackUrl,\n }),\n });\n if (!data?.ok) {\n throw new Error(await data?.clone().text());\n }\n return data;\n }\n\n async resetPassword(options: {\n baseUrl?: string;\n init?: ResponseInit;\n fetchUrl?: string;\n email: string;\n password: string;\n auth?: Authorizer | PartialAuthorizer;\n callbackUrl?: string;\n redirect?: boolean;\n }) {\n const { password, fetchUrl, email, redirect, callbackUrl = '/' } = options;\n\n this.#configureFetch(options);\n\n const resetPasswordUrl =\n fetchUrl ?? `${this.apiBaseUrl}/auth/reset-password`;\n\n let resetPasswordWithParams = resetPasswordUrl;\n\n const searchParams = new URLSearchParams();\n\n if (redirect === false) {\n searchParams.set('json', 'true');\n }\n if (searchParams.size > 0) {\n resetPasswordWithParams += `?${searchParams}`;\n }\n\n const data = await this.#sendData(resetPasswordWithParams, {\n method: 'post',\n body: JSON.stringify({\n email,\n password,\n redirectUrl: resetPasswordUrl,\n callbackUrl,\n }),\n });\n if (!data?.ok) {\n throw new Error(await data?.clone().text());\n }\n if (redirect === false) {\n const json = await data?.json();\n const { url: urlWithParams } = json;\n resetPasswordWithParams = `${urlWithParams}&redirect=false`;\n await this.#sendData(resetPasswordWithParams);\n\n return await this.#sendData(resetPasswordWithParams, {\n method: password ? 'put' : 'post',\n body: JSON.stringify({ email, password }),\n });\n }\n }\n\n #configureFetch(params: {\n baseUrl?: string;\n auth?: Authorizer | PartialAuthorizer;\n init?: RequestInit;\n }) {\n const { baseUrl, init, auth } = params;\n if (baseUrl) {\n this.baseUrl = baseUrl;\n }\n\n if (auth) {\n if (auth.requestInit) {\n this.requestInit = auth.requestInit;\n }\n if (auth.state?.baseUrl) {\n this.baseUrl = auth.state.baseUrl;\n }\n }\n\n if (init) {\n this.requestInit = init;\n }\n }\n}\nexport interface InternalUrl {\n /** @default \"http://localhost:3000\" */\n origin: string;\n /** @default \"localhost:3000\" */\n host: string;\n /** @default \"/api/auth\" */\n path: string;\n /** @default \"http://localhost:3000/api/auth\" */\n base: string;\n /** @default \"http://localhost:3000/api/auth\" */\n toString: () => string;\n}\n\nfunction parseUrl(url?: string): InternalUrl {\n let defaultUrl = new URL('http://localhost:3000');\n if (typeof window !== 'undefined') {\n defaultUrl = new URL(`${window.location.origin}/api`);\n }\n\n if (url && !url.startsWith('http')) {\n url = `https://${url}`;\n }\n\n const _url = new URL(url ?? defaultUrl);\n const path = (_url.pathname === '/' ? defaultUrl.pathname : _url.pathname)\n // Remove trailing slash\n .replace(/\\/$/, '');\n\n const base = `${_url.origin}${path}`;\n\n return {\n origin: _url.origin,\n host: _url.host,\n path,\n base,\n toString: () => base,\n };\n}\n\nexport const authorizer = new Authorizer();\n\nconst _auth = () => {\n return authorizer;\n};\n\nexport const auth: Authorizer = _auth();\n\nexport const getSession = async function getSession(params?: GetSessionParams) {\n return await auth.getSession(params);\n};\n\nexport const getCsrfToken = async function getCsrfToken(url?: string) {\n return auth.getCsrfToken(url);\n};\n\nexport const getProviders = async function getProviders() {\n return auth.getProviders();\n};\n\nexport const signOut: typeof authorizer.signOut = async function signOut(\n options\n) {\n return auth.signOut(options);\n};\n\nexport const signIn: typeof authorizer.signIn = async function signIn(\n provider,\n options,\n authParams\n) {\n return auth.signIn(provider, options, authParams);\n};\n\nexport const signUp: typeof authorizer.signUp = async function signUp(options) {\n return auth.signUp(options);\n};\n\nexport const resetPassword: typeof authorizer.resetPassword =\n async function resetPassword(options) {\n return auth.resetPassword(options);\n };\n\nexport const forgotPassword: typeof authorizer.forgotPassword =\n async function forgotPassword(options) {\n return auth.forgotPassword(options);\n };\n","import { NonErrorSession } from './types';\n\nexport function getStatus(\n load: boolean,\n sess: NonErrorSession | null | undefined\n) {\n if (load) {\n return 'loading';\n }\n if (sess) {\n return 'authenticated';\n }\n return 'unauthenticated';\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACKO,IAAM,eAAN,cAA2B,MAAM;AAAA,EACtC;AAAA,EACA,YAAY,OAAuB;AAEjC,UAAO,OAAiB,WAAW,KAAK;AACxC,SAAK,OAAO;AACZ,SAAK,OAAQ,MAAc;AAC3B,QAAI,iBAAiB,OAAO;AAC1B,WAAK,QAAQ,MAAM;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,SAAS;AACP,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,OAAO,KAAK;AAAA,IACd;AAAA,EACF;AACF;AAIA,SAAS,YAAY,GAAqB;AACxC,MAAI,aAAa,SAAS,EAAE,aAAa,eAAe;AACtD,WAAO,KAAK,UAAU,EAAE,SAAS,EAAE,SAAS,OAAO,EAAE,OAAO,MAAM,EAAE,KAAK,CAAC;AAAA,EAC5E;AACA,MAAI,iBAAiB,CAAC,GAAG;AACvB,MAAE,QAAQ,YAAY,EAAE,KAAK;AAC7B,MAAE,UAAU,EAAE,WAAW,EAAE,MAAM;AAAA,EACnC;AACA,SAAO;AACT;AAEA,SAAS,iBACP,GAC+C;AAC/C,SAAO,CAAC,CAAE,GAAW;AACvB;AA2BA,IAAM,UAA0B;AAAA,EAC9B,MAAM,MAAM,UAAU;AACpB,eAAW,YAAY,QAAQ;AAC/B,YAAQ,MAAM,sBAAsB,IAAI,KAAK,SAAS,SAAS,QAAQ;AAAA,EACzE;AAAA,EACA,KAAK,MAAM;AACT,YAAQ,KAAK,qBAAqB,IAAI,GAAG;AAAA,EAC3C;AAAA,EACA,MAAM,MAAM,UAAU;AACpB,YAAQ,IAAI,sBAAsB,IAAI,KAAK,QAAQ;AAAA,EACrD;AACF;AAqBO,SAAS,YACdA,UAAyB,SACzBC,aACgB;AAChB,MAAI;AACF,QAAI,OAAO,WAAW,aAAa;AACjC,aAAOD;AAAA,IACT;AAEA,UAAM,eAAwC,CAAC;AAC/C,eAAW,SAASA,SAAQ;AAC1B,mBAAa,KAAK,IAAI,CAAC,MAAc,aAAoB;AACvD,gBAAQ,KAAK,EAAE,MAAM,QAAQ;AAE7B,YAAI,UAAU,SAAS;AACrB,qBAAW,YAAY,QAAQ;AAAA,QACjC;AACA,QAAC,SAAiB,SAAS;AAC3B,cAAM,MAAM,GAAGC,YAAW,MAAM,QAAQ;AACxC,cAAM,OAAO,IAAI,gBAAgB,EAAE,OAAO,MAAM,GAAI,SAAiB,CAAC;AACtE,YAAI,UAAU,YAAY;AACxB,iBAAO,UAAU,WAAW,KAAK,IAAI;AAAA,QACvC;AACA,eAAO,MAAM,KAAK,EAAE,QAAQ,QAAQ,MAAM,WAAW,KAAK,CAAC;AAAA,MAC7D;AAAA,IACF;AACA,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,IAAM,SAAS,CAACA,gBACrB,YAAY,SAASA,WAAU;;;ACtI1B,SAAS,MAAM;AACpB,SAAO,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI;AACrC;AAeO,SAAS,iBAAiB,OAAO,oBAAoB;AAC1D,SAAO;AAAA;AAAA,IAEL,QAAQ,WAAgD;AACtD,YAAM,UAAU,CAAC,UAAwB;AACvC,YAAI,MAAM,QAAQ,KAAM;AACxB,cAAM,UAA4B,KAAK,MAAM,MAAM,YAAY,IAAI;AACnE,YAAI,SAAS,UAAU,aAAa,CAAC,SAAS,KAAM;AAEpD,kBAAU,OAAO;AAAA,MACnB;AACA,aAAO,iBAAiB,WAAW,OAAO;AAC1C,aAAO,MAAM,OAAO,oBAAoB,WAAW,OAAO;AAAA,IAC5D;AAAA;AAAA,IAEA,KAAK,SAAkC;AACrC,UAAI,OAAO,WAAW,YAAa;AACnC,UAAI;AACF,qBAAa;AAAA,UACX;AAAA,UACA,KAAK,UAAU,EAAE,GAAG,SAAS,WAAW,IAAI,EAAE,CAAC;AAAA,QACjD;AAAA,MACF,QAAQ;AAAA,MAMR;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,YAAY,iBAAiB;;;AClD1C,SAAS,QAAQ,GAAQ,GAAiB;AACxC,MAAI,MAAM,EAAG,QAAO;AAEpB,MACE,OAAO,MAAM,YACb,OAAO,MAAM,YACb,MAAM,QACN,MAAM,MACN;AACA,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,QAAQ,CAAC,MAAM,MAAM,QAAQ,CAAC,EAAG,QAAO;AAElD,QAAM,QAAQ,OAAO,KAAK,CAAC;AAC3B,QAAM,QAAQ,OAAO,KAAK,CAAC;AAE3B,MAAI,MAAM,WAAW,MAAM,OAAQ,QAAO;AAE1C,aAAW,OAAO,OAAO;AACvB,QAAI,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG;AACpD,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAIO,SAAS,uBACd,KACA,eAAe,CAAC,WAAW,SAAS,GACpC,YAAY,gBACZ;AACA,QAAM,cAAc,IAAI,YAAY;AACpC,QAAM,YAAY,oBAAI,IAAI;AAG1B,QAAM,UAA6B;AAAA,IACjC,IAAI,QAAQ,KAAK,OAAO;AACtB,YAAM,OAAO,OAAO,GAAG;AACvB,aAAO,GAAG,IAAI;AACd,UAAI,QAAQ,MAAM,KAAK,EAAG,QAAO;AAGjC,UAAI,aAAa,SAAS,OAAO,GAAG,CAAC,GAAG;AACtC,oBAAY;AAAA,UACV,IAAI,YAAY,WAAW;AAAA,YACzB,QAAQ,EAAE,KAAK,MAAM,MAAM,MAAM;AAAA,UACnC,CAAC;AAAA,QACH;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAO,IAAI,MAAM,KAAK,OAAO;AAAA,IAC7B;AAAA,IACA,YAAY,UAAoB;AAC9B,UAAI,UAAU,IAAI,QAAQ,GAAG;AAC3B;AAAA,MACF;AACA,YAAM,kBAAkB,CAAC,MAAa,SAAU,EAAkB,MAAM;AACxE,gBAAU,IAAI,UAAU,eAAe;AAEvC,kBAAY,iBAAiB,WAAW,eAAe;AAAA,IACzD;AAAA,IACA,eAAe,UAAoB;AACjC,YAAM,kBAAkB,UAAU,IAAI,QAAQ;AAC9C,UAAI,iBAAiB;AACnB,oBAAY,oBAAoB,WAAW,eAAe;AAC1D,kBAAU,OAAO,QAAQ;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AACF;;;ACzCA,IAAqB,aAArB,MAAgC;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY,QAAqB;AAC/B,UAAM,EAAE,OAAO,aAAa,eAAe,IACzC;AAAA,MACE;AAAA,QACE,UAAU,SAAS,QAAQ,QAAQ,EAAE;AAAA,QACrC,SAAS,SAAS,QAAQ,OAAO,EAAE;AAAA,QACnC,UAAU;AAAA,QACV,YAAY,MAAM;AAAA,QAClB,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,IACF;AACF,SAAK,QAAQ;AACb,SAAK,cAAc;AACnB,SAAK,iBAAiB;AACtB,SAAK,UAAU,OAAO,IAAI;AAC1B,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,MAAM,KACJ,OACA;AACA,QAAI;AACF,YAAM,eAAe,UAAU;AAC/B,UAAI,gBAAgB,CAAC,KAAK,MAAM,SAAS;AACvC,aAAK,MAAM,aAAa,KAAK,WAAW,KAAK,IAAI;AACjD,aAAK,MAAM,WAAW,IAAI;AAAA,MAC5B;AACA,UAAI,CAAC,SAAS,KAAK,MAAM,WAAW,QAAQ,IAAI,IAAI,KAAK,MAAM,UAAU;AACvE;AAAA,MACF;AACA,WAAK,MAAM,WAAW,KAAK,IAAI;AAC/B,WAAK,MAAM,UAAU,MAAM,KAAK,WAAW;AAAA,IAC7C,SAAS,OAAO;AACd,WAAK,QAAQ,MAAM,wBAAwB,KAAc;AAAA,IAC3D;AAAA,EACF;AAAA,EAEA,IAAI,QAAQ,KAAa;AACvB,SAAK,MAAM,UAAU;AACrB,SAAK,UAAU,OAAO,IAAI;AAAA,EAC5B;AAAA,EAEA,IAAI,UAAU;AACZ,SAAK,UAAU,OAAO,IAAI;AAC1B,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,UAAU,QAAiB;AACzB,QAAI,QAAQ,SAAU,MAAK,MAAM,WAAW,SAAS,QAAQ,QAAQ,EAAE;AACvE,QAAI,QAAQ,QAAS,MAAK,UAAU,OAAO;AAC3C,QAAI,QAAQ,KAAM,MAAK,cAAc,OAAO;AAE5C,WAAO;AAAA,EACT;AAAA,EACA,WAA8B;AAC5B,WAAO;AAAA,MACL,OAAO;AAAA,QACL,SAAS,KAAK;AAAA,QACd,SAAS;AAAA,UACP,MAAM;AAAA,YACJ,OAAQ,KAAK,MAAM,SAA2B,MAAM;AAAA,UACtD;AAAA,QACF;AAAA,MACF;AAAA,MACA,aAAa,KAAK;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,QAId;AACD,UAAM,EAAE,SAAS,SAAS,MAAM,IAAI,UAAU,CAAC;AAE/C,QAAI,QAAS,MAAK,UAAU;AAE5B,UAAM,oBAAoB,YAAY;AAEtC,SAAK,MAAM,UAAU,CAAC;AACtB,SAAK,MAAM,WAAW,oBAAoB,IAAI,IAAI;AAClD,SAAK,MAAM,UAAU;AAErB,UAAM,KAAK,KAAK,KAAK;AAAA,EACvB;AAAA,EAEA,IAAI,aAAa;AACf,WAAO,GAAG,KAAK,OAAO,GAAG,KAAK,MAAM,QAAQ;AAAA,EAC9C;AAAA,EAEA,MAAM,UACJ,KACA,MAC+B;AAC/B,QAAI;AACF,YAAM,UAAuB;AAAA,QAC3B,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,QACA,GAAI,KAAK,cAAc,KAAK,cAAc,CAAC;AAAA,QAC3C,GAAG;AAAA,MACL;AAEA,YAAM,YAAY,CAAC,IAAI,WAAW,MAAM,IACpC,GAAG,OAAO,SAAS,MAAM,GAAG,GAAG,KAC/B;AAEJ,YAAM,MAAM,MAAM,MAAM,WAAW,OAAO;AAC1C,WAAK,MAAM,UAAU;AACrB,aAAO;AAAA,IACT,SAAS,OAAO;AACd,WAAK,QAAQ,MAAM,sBAAsB,EAAE,OAAuB,IAAI,CAAC;AACvE,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,MAAM,WACJ,KACA,MACwB;AACxB,UAAM,UAAuB;AAAA,MAC3B,GAAI,KAAK,cAAc,KAAK,cAAc,CAAC;AAAA,MAC3C,GAAG;AAAA,IACL;AACA,UAAM,MAAM,MAAM,KAAK,UAAU,KAAK,OAAO;AAE7C,UAAM,eAAe,KAAK,MAAM;AAChC,QAAI;AACF,UAAI,KAAK,IAAI;AACX,cAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,aAAK,MAAM,UAAU;AACrB,eAAO,OAAO,KAAK,IAAI,EAAE,SAAS,IAAI,OAAO;AAAA,MAC/C,OAAO;AACL,cAAM,QAAQ,MAAM,cAAc,KAAK;AACvC,YAAI,OAAO;AACT,gBAAM,aAAa,IAAI,IAAI,GAAG;AAC9B,qBAAW,aAAa,IAAI,SAAS,KAAK;AAC1C,iBAAO,EAAE,KAAK,WAAW,SAAS,EAAE;AAAA,QACtC;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,UAAI,iBAAiB,OAAO;AAE1B,YAAI,CAAC,MAAM,QAAQ,SAAS,mBAAmB,GAAG;AAChD,eAAK,QAAQ,MAAM,sBAAsB;AAAA,YACvC;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH,OAAO;AACL,gBAAMC,SAAQ,MAAM,cAAc,KAAK;AACvC,cAAIA,QAAO;AACT,kBAAM,aAAa,IAAI,IAAI,GAAG;AAC9B,uBAAW,aAAa,IAAI,SAASA,MAAK;AAC1C,mBAAO,EAAE,KAAK,WAAW,SAAS,EAAE;AAAA,UACtC;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,MAAM,eACJ,KACA,MASA;AACA,QAAI;AACF,YAAM,MAAM,MAAM,MAAM,KAAK;AAAA,QAC3B,GAAG,KAAK;AAAA,QACR,GAAG;AAAA,QACH,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,MACF,CAAC;AACD,UAAI,KAAK;AACP,YAAI,IAAI,IAAI;AACV,iBAAO;AAAA,YACL,MAAO,MAAM,IAAI,KAAK;AAAA,YACtB,QAAQ,IAAI;AAAA,YACZ,IAAI,IAAI;AAAA,YACR,KAAK,IAAI;AAAA,UACX;AAAA,QACF;AACA,cAAM,EAAE,KAAK,YAAY,IAAI,MAAM,IAAI,KAAK;AAC5C,eAAO;AAAA,UACL,MAAM,CAAC;AAAA,UACP,QAAQ,IAAI;AAAA,UACZ,IAAI,KAAK;AAAA,UACT,KAAK;AAAA,QACP;AAAA,MACF;AACA,YAAM,IAAI,MAAM,mBAAmB,GAAG,EAAE;AAAA,IAC1C,SAAS,OAAO;AACd,UAAI,iBAAiB,OAAO;AAE1B,YAAI,CAAC,MAAM,QAAQ,SAAS,mBAAmB,GAAG;AAChD,eAAK,QAAQ,MAAM,sBAAsB;AAAA,YACvC;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,KAAc;AAC/B,WAAO,MAAM,KAAK,WAEhB,OAAO,GAAG,KAAK,UAAU,iBAAiB;AAAA,EAC9C;AAAA,EAEA,MAAM,aAAa,KAAc;AAC/B,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B,OAAO,GAAG,KAAK,UAAU;AAAA,IAC3B;AACA,WAAO,UAAU;AAAA,EACnB;AAAA,EAEA,MAAM,WAAW,QAAqD;AACpE,QAAI,KAAK,WAAW,4BAAe;AACjC;AAAA,IACF;AACA,SAAK,SAAS;AACd,QAAI,QAAQ,MAAM;AAChB,WAAK,cAAc,OAAO;AAAA,IAC5B;AAEA,QAAI,QAAQ,SAAS;AACnB,WAAK,UAAU,OAAO;AAAA,IACxB;AAEA,QAAI,KAAK,MAAM,WAAW,IAAI,IAAI,KAAK,MAAM,UAAU;AACrD,WAAK,SAAS;AACd,aAAO,KAAK,MAAM;AAAA,IACpB;AACA,SAAK,MAAM,UAAU;AAErB,UAAM,UAAU,MAAM,KAAK;AAAA,MACzB,GAAG,KAAK,UAAU;AAAA,IACpB;AAEA,cAAU,KAAK,EAAE,OAAO,WAAW,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;AACpE,SAAK,SAAS;AACd,QAAI,SAAS;AACX,WAAK,MAAM,UAAU;AACrB,YAAM,KAAK,KAAK,SAAS;AACzB,aAAO,EAAE,GAAG,SAAS,SAAS,KAAK,MAAM,QAAQ;AAAA,IACnD;AACA,WAAO,EAAE,SAAS,KAAK,MAAM,QAAQ;AAAA,EACvC;AAAA,EAEA,MAAM,iBAAiB;AACrB,SAAK,MAAM,UAAU;AACrB,UAAM,UAAU,MAAM,KAAK;AAAA,MACzB,GAAG,KAAK,UAAU;AAAA,IACpB;AAEA,cAAU,KAAK,EAAE,OAAO,WAAW,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;AACpE,SAAK,MAAM,UAAU;AACrB,UAAM,KAAK,KAAK,SAAS;AACzB,WAAO;AAAA,EACT;AAAA,EACA,MAAM,QACJ,SAMuD;AACvD,UAAM;AAAA,MACJ,cAAc,OAAO,SAAS;AAAA,MAC9B;AAAA,MACA,MAAAC;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI,WAAW,CAAC;AAEhB,QAAI,UAAU;AACZ,WAAK,MAAM,WAAW;AAAA,IACxB;AAEA,QAAI,SAAS;AACX,WAAK,UAAU;AAAA,IACjB;AAEA,QAAIA,OAAM;AACR,WAAK,cAAcA,MAAK;AACxB,UAAIA,MAAK,OAAO,SAAS;AACvB,aAAK,UAAUA,MAAK,MAAM;AAAA,MAC5B;AAAA,IACF;AACA,UAAM,YAAY,YAAY,GAAG,KAAK,UAAU;AAChD,UAAM,eAA4B;AAAA,MAChC,QAAQ;AAAA,MACR,MAAM,IAAI,gBAAgB;AAAA,QACxB,WAAW,OAAO,MAAM,KAAK,aAAa,CAAC;AAAA,QAC3C;AAAA,QACA,MAAM,OAAO,IAAI;AAAA,MACnB,CAAC;AAAA,IACH;AACA,UAAM,MAAM,MAAM,KAAK;AAAA,MACrB;AAAA,MACA;AAAA,IACF;AAEA,cAAU,KAAK,EAAE,OAAO,WAAW,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;AAGjE,QAAI,KAAK,aAAa,aAAa;AACjC,aAAO,SAAS,OAAO;AACvB,UAAI,YAAY,SAAS,GAAG,EAAG,QAAO,SAAS,OAAO;AACtD,aAAO;AAAA,IACT;AACA,QAAI,SAAS,YAAY,MAAM;AAC7B,YAAM,MAAM,KAAK,MAAM,OAAO;AAC9B,aAAO,SAAS,OAAO;AAEvB,UAAI,IAAI,SAAS,GAAG,EAAG,QAAO,SAAS,OAAO;AAC9C,aAAO;AAAA,IACT;AAEA,UAAM,KAAK,MAAM,WAAW,EAAE,OAAO,UAAU,CAAC;AAEhD,WAAO,KAAK;AAAA,EACd;AAAA,EACA,MAAM,OACJ,UAKA,SASA,qBAGA;AACA,UAAM;AAAA,MACJ,cAAc,OAAO,SAAS;AAAA,MAC9B,WAAW,OAAO,SAAS;AAAA,MAC3B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAAA;AAAA,MACA,WAAW;AAAA,MACX,GAAG;AAAA,IACL,IAAI,WAAW,CAAC;AAEhB,QAAI,SAAS;AACX,WAAK,UAAU;AAAA,IACjB;AACA,QAAIA,OAAM;AACR,UAAIA,MAAK,aAAa;AACpB,aAAK,cAAcA,MAAK;AAAA,MAC1B;AACA,UAAIA,MAAK,OAAO,SAAS;AACvB,aAAK,UAAUA,MAAK,MAAM;AAAA,MAC5B;AAAA,IACF;AACA,QAAI,MAAM;AACR,WAAK,cAAc;AAAA,IACrB;AAEA,UAAM,YAAY,MAAM,KAAK,aAAa,YAAY;AAEtD,QAAI,CAAC,WAAW;AACd,aAAO,EAAE,OAAO,uBAAuB;AAAA,IACzC;AACA,QAAI,CAAC,YAAY,EAAE,YAAY,YAAY;AACzC,aAAO,EAAE,OAAO,YAAY,QAAQ,eAAe;AAAA,IACrD;AAEA,UAAM,gBAAgB,UAAU,QAAQ,EAAE,SAAS;AACnD,UAAM,UAAU,UAAU,QAAQ,EAAE,SAAS;AAC7C,UAAM,qBAAqB,iBAAiB;AAE5C,UAAM,YAAY,GAAG,KAAK,UAAU;AACpC,UAAM,YACJ,YACA,GAAG,SAAS,IAAI,gBAAgB,aAAa,QAAQ,IAAI,QAAQ;AAEnE,UAAM,aAAa,GAAG,SAAS,GAC7B,sBAAsB,IAAI,IAAI,gBAAgB,mBAAmB,CAAC,KAAK,EACzE;AAEA,UAAM,OAAO,MAAM,KAAK,eAAe,YAAY;AAAA,MACjD,QAAQ;AAAA,MACR,MAAM,IAAI,gBAAgB;AAAA,QACxB,GAAG;AAAA,QACH,WAAW,OAAO,MAAM,KAAK,aAAa,OAAO,CAAC;AAAA,QAClD;AAAA,QACA,MAAM,OAAO,IAAI;AAAA,QACjB;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAED,QAAI,MAAM,MAAM,KAAK,aAAa,eAAe,oBAAoB;AACnE,aAAO,SAAS,OAAO;AACvB;AAAA,IACF;AAEA,QAAI,MAAM,OAAO,YAAY,CAAC,qBAAqB;AACjD,YAAM,MAAM,MAAM,KAAK,OAAO;AAC9B,aAAO,SAAS,OAAO;AACvB,UAAI,IAAI,SAAS,GAAG,EAAG,QAAO,SAAS,OAAO;AAC9C;AAAA,IACF;AAEA,UAAM,QAAQ,MAAM,MAAM,MACtB,IAAI,IAAI,OAAO,MAAM,MAAM,GAAG,CAAC,EAAE,aAAa,IAAI,OAAO,IACzD;AAEJ,QAAI,MAAM,IAAI;AACZ,YAAM,KAAK,WAAW;AACtB,YAAM,KAAK,WAAW,EAAE,OAAO,UAAU,CAAC;AAAA,IAC5C;AACA,WAAO;AAAA,MACL;AAAA,MACA,QAAQ,MAAM;AAAA,MACd,IAAI,MAAM;AAAA,MACV,KAAK,QAAQ,OAAO,MAAM;AAAA,IAC5B;AAAA,EACF;AAAA,EACA,MAAM,OAAO,SAYV;AACD,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAAA;AAAA,MACA,cAAc,OAAO,SAAS;AAAA,IAChC,IAAI;AAEJ,QAAI,SAAS;AACX,WAAK,UAAU;AAAA,IACjB;AAEA,QAAIA,OAAM;AACR,UAAIA,MAAK,aAAa;AACpB,aAAK,cAAcA,MAAK;AAAA,MAC1B;AACA,UAAIA,MAAK,OAAO,SAAS;AACvB,aAAK,UAAUA,MAAK,MAAM;AAAA,MAC5B;AAAA,IACF;AAEA,QAAI,MAAM;AACR,WAAK,cAAc;AAAA,IACrB;AAEA,UAAM,eAAe,IAAI,gBAAgB;AAEzC,QAAI,eAAe;AACjB,mBAAa,IAAI,iBAAiB,aAAa;AAAA,IACjD,WAAW,cAAc;AACvB,UAAI,OAAO,iBAAiB,WAAW;AACrC,qBAAa,IAAI,iBAAiB,KAAK;AAAA,MACzC,WAAW,OAAO,iBAAiB,UAAU;AAC3C,qBAAa,IAAI,iBAAiB,YAAY;AAAA,MAChD;AAAA,IACF;AACA,QAAI,UAAU;AACZ,mBAAa,IAAI,YAAY,QAAQ;AAAA,IACvC;AAEA,QAAI,YAAY,YAAY,GAAG,KAAK,UAAU;AAC9C,QAAI,aAAa,OAAO,GAAG;AACzB,mBAAa,IAAI,YAAY;AAAA,IAC/B;AACA,UAAM,OAAO,MAAM,KAAK,WAAW,WAAW;AAAA,MAC5C,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU,EAAE,OAAO,SAAS,CAAC;AAAA,IAC1C,CAAC;AAED,UAAM,QAAQ,MAAM,MAChB,IAAI,IAAI,KAAK,GAAG,EAAE,aAAa,IAAI,OAAO,IAC1C;AAEJ,QAAI,CAAC,OAAO;AACV,UAAI,MAAM;AACR,cAAM,KAAK,WAAW,EAAE,OAAO,UAAU,CAAC;AAC1C,cAAM,KAAK,WAAW,EAAE,OAAO,UAAU,CAAC;AAAA,MAC5C;AACA,UAAI,KAAK,aAAa,aAAa;AACjC,eAAO,SAAS,OAAO;AACvB;AAAA,MACF;AAEA,UAAI,SAAS,YAAY,MAAM;AAC7B,cAAM,MAAM;AACZ,eAAO,SAAS,OAAO;AAEvB,YAAI,IAAI,SAAS,GAAG,EAAG,QAAO,SAAS,OAAO;AAAA,MAChD;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,eAAe,SAQlB;AACD,UAAM,EAAE,UAAU,UAAU,UAAU,cAAc,IAAI,IAAI;AAE5D,SAAK,gBAAgB,OAAO;AAE5B,UAAM,mBACJ,YAAY,GAAG,KAAK,UAAU;AAEhC,QAAI,0BAA0B;AAE9B,UAAM,eAAe,IAAI,gBAAgB;AAEzC,QAAI,aAAa,OAAO;AACtB,mBAAa,IAAI,QAAQ,MAAM;AAAA,IACjC;AACA,QAAI,aAAa,OAAO,GAAG;AACzB,iCAA2B,IAAI,YAAY;AAAA,IAC7C;AAEA,UAAM,OAAO,MAAM,KAAK,UAAU,yBAAyB;AAAA,MACzD,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU;AAAA,QACnB;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AACD,QAAI,CAAC,MAAM,IAAI;AACb,YAAM,IAAI,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,CAAC;AAAA,IAC5C;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,cAAc,SASjB;AACD,UAAM,EAAE,UAAU,UAAU,OAAO,UAAU,cAAc,IAAI,IAAI;AAEnE,SAAK,gBAAgB,OAAO;AAE5B,UAAM,mBACJ,YAAY,GAAG,KAAK,UAAU;AAEhC,QAAI,0BAA0B;AAE9B,UAAM,eAAe,IAAI,gBAAgB;AAEzC,QAAI,aAAa,OAAO;AACtB,mBAAa,IAAI,QAAQ,MAAM;AAAA,IACjC;AACA,QAAI,aAAa,OAAO,GAAG;AACzB,iCAA2B,IAAI,YAAY;AAAA,IAC7C;AAEA,UAAM,OAAO,MAAM,KAAK,UAAU,yBAAyB;AAAA,MACzD,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU;AAAA,QACnB;AAAA,QACA;AAAA,QACA,aAAa;AAAA,QACb;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AACD,QAAI,CAAC,MAAM,IAAI;AACb,YAAM,IAAI,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,CAAC;AAAA,IAC5C;AACA,QAAI,aAAa,OAAO;AACtB,YAAM,OAAO,MAAM,MAAM,KAAK;AAC9B,YAAM,EAAE,KAAK,cAAc,IAAI;AAC/B,gCAA0B,GAAG,aAAa;AAC1C,YAAM,KAAK,UAAU,uBAAuB;AAE5C,aAAO,MAAM,KAAK,UAAU,yBAAyB;AAAA,QACnD,QAAQ,WAAW,QAAQ;AAAA,QAC3B,MAAM,KAAK,UAAU,EAAE,OAAO,SAAS,CAAC;AAAA,MAC1C,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,gBAAgB,QAIb;AACD,UAAM,EAAE,SAAS,MAAM,MAAAA,MAAK,IAAI;AAChC,QAAI,SAAS;AACX,WAAK,UAAU;AAAA,IACjB;AAEA,QAAIA,OAAM;AACR,UAAIA,MAAK,aAAa;AACpB,aAAK,cAAcA,MAAK;AAAA,MAC1B;AACA,UAAIA,MAAK,OAAO,SAAS;AACvB,aAAK,UAAUA,MAAK,MAAM;AAAA,MAC5B;AAAA,IACF;AAEA,QAAI,MAAM;AACR,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AACF;AAcA,SAAS,SAAS,KAA2B;AAC3C,MAAI,aAAa,IAAI,IAAI,uBAAuB;AAChD,MAAI,OAAO,WAAW,aAAa;AACjC,iBAAa,IAAI,IAAI,GAAG,OAAO,SAAS,MAAM,MAAM;AAAA,EACtD;AAEA,MAAI,OAAO,CAAC,IAAI,WAAW,MAAM,GAAG;AAClC,UAAM,WAAW,GAAG;AAAA,EACtB;AAEA,QAAM,OAAO,IAAI,IAAI,OAAO,UAAU;AACtC,QAAM,QAAQ,KAAK,aAAa,MAAM,WAAW,WAAW,KAAK,UAE9D,QAAQ,OAAO,EAAE;AAEpB,QAAM,OAAO,GAAG,KAAK,MAAM,GAAG,IAAI;AAElC,SAAO;AAAA,IACL,QAAQ,KAAK;AAAA,IACb,MAAM,KAAK;AAAA,IACX;AAAA,IACA;AAAA,IACA,UAAU,MAAM;AAAA,EAClB;AACF;AAEO,IAAM,aAAa,IAAI,WAAW;AAEzC,IAAM,QAAQ,MAAM;AAClB,SAAO;AACT;AAEO,IAAM,OAAmB,MAAM;AAE/B,IAAM,aAAa,eAAeC,YAAW,QAA2B;AAC7E,SAAO,MAAM,KAAK,WAAW,MAAM;AACrC;AAEO,IAAM,eAAe,eAAeC,cAAa,KAAc;AACpE,SAAO,KAAK,aAAa,GAAG;AAC9B;AAEO,IAAM,eAAe,eAAeC,gBAAe;AACxD,SAAO,KAAK,aAAa;AAC3B;AAEO,IAAM,UAAqC,eAAeC,SAC/D,SACA;AACA,SAAO,KAAK,QAAQ,OAAO;AAC7B;AAEO,IAAM,SAAmC,eAAeC,QAC7D,UACA,SACA,YACA;AACA,SAAO,KAAK,OAAO,UAAU,SAAS,UAAU;AAClD;AAEO,IAAM,SAAmC,eAAeC,QAAO,SAAS;AAC7E,SAAO,KAAK,OAAO,OAAO;AAC5B;AAEO,IAAM,gBACX,eAAeC,eAAc,SAAS;AACpC,SAAO,KAAK,cAAc,OAAO;AACnC;AAEK,IAAM,iBACX,eAAeC,gBAAe,SAAS;AACrC,SAAO,KAAK,eAAe,OAAO;AACpC;;;AC7wBK,SAAS,UACd,MACA,MACA;AACA,MAAI,MAAM;AACR,WAAO;AAAA,EACT;AACA,MAAI,MAAM;AACR,WAAO;AAAA,EACT;AACA,SAAO;AACT;","names":["logger","authorizer","error","auth","getSession","getCsrfToken","getProviders","signOut","signIn","signUp","resetPassword","forgotPassword"]}
package/dist/index.mjs CHANGED
@@ -189,7 +189,7 @@ var Authorizer = class {
189
189
  try {
190
190
  const storageEvent = event === "storage";
191
191
  if (storageEvent || !this.state.session) {
192
- this.state.getSession = await this.getSession;
192
+ this.state.getSession = this.getSession.bind(this);
193
193
  this.state.lastSync = now();
194
194
  }
195
195
  if (!event || this.state.session == null || now() < this.state.lastSync) {
@@ -572,8 +572,32 @@ var Authorizer = class {
572
572
  error
573
573
  };
574
574
  }
575
+ async forgotPassword(options) {
576
+ const { password, fetchUrl, redirect, callbackUrl = "/" } = options;
577
+ this.#configureFetch(options);
578
+ const resetPasswordUrl = fetchUrl ?? `${this.apiBaseUrl}/auth/reset-password`;
579
+ let resetPasswordWithParams = resetPasswordUrl;
580
+ const searchParams = new URLSearchParams();
581
+ if (redirect === false) {
582
+ searchParams.set("json", "true");
583
+ }
584
+ if (searchParams.size > 0) {
585
+ resetPasswordWithParams += `?${searchParams}`;
586
+ }
587
+ const data = await this.#sendData(resetPasswordWithParams, {
588
+ method: "put",
589
+ body: JSON.stringify({
590
+ password,
591
+ callbackUrl
592
+ })
593
+ });
594
+ if (!data?.ok) {
595
+ throw new Error(await data?.clone().text());
596
+ }
597
+ return data;
598
+ }
575
599
  async resetPassword(options) {
576
- const { password, fetchUrl, email, redirect, callbackUrl } = options;
600
+ const { password, fetchUrl, email, redirect, callbackUrl = "/" } = options;
577
601
  this.#configureFetch(options);
578
602
  const resetPasswordUrl = fetchUrl ?? `${this.apiBaseUrl}/auth/reset-password`;
579
603
  let resetPasswordWithParams = resetPasswordUrl;
@@ -661,7 +685,7 @@ var getProviders = async function getProviders2() {
661
685
  var signOut = async function signOut2(options) {
662
686
  return auth.signOut(options);
663
687
  };
664
- var signIn = async function signOut3(provider, options, authParams) {
688
+ var signIn = async function signIn2(provider, options, authParams) {
665
689
  return auth.signIn(provider, options, authParams);
666
690
  };
667
691
  var signUp = async function signUp2(options) {
@@ -670,6 +694,9 @@ var signUp = async function signUp2(options) {
670
694
  var resetPassword = async function resetPassword2(options) {
671
695
  return auth.resetPassword(options);
672
696
  };
697
+ var forgotPassword = async function forgotPassword2(options) {
698
+ return auth.forgotPassword(options);
699
+ };
673
700
 
674
701
  // src/status.ts
675
702
  function getStatus(load, sess) {
@@ -685,6 +712,7 @@ export {
685
712
  Authorizer,
686
713
  auth,
687
714
  broadcast,
715
+ forgotPassword,
688
716
  getCsrfToken,
689
717
  getProviders,
690
718
  getSession,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/logger.ts","../src/broadcast.ts","../src/observable.ts","../src/Authorizer.ts","../src/status.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport Authorizer from './Authorizer';\n\n/* eslint-disable no-console */\nexport class UnknownError extends Error {\n code: string;\n constructor(error: Error | string) {\n // Support passing error or string\n super((error as Error)?.message ?? error);\n this.name = 'UnknownError';\n this.code = (error as any).code;\n if (error instanceof Error) {\n this.stack = error.stack;\n }\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n stack: this.stack,\n };\n }\n}\n\n// TODO: better typing\n/** Makes sure that error is always serializable */\nfunction formatError(o: unknown): unknown {\n if (o instanceof Error && !(o instanceof UnknownError)) {\n return JSON.stringify({ message: o.message, stack: o.stack, name: o.name });\n }\n if (hasErrorProperty(o)) {\n o.error = formatError(o.error) as Error;\n o.message = o.message ?? o.error.message;\n }\n return o;\n}\n\nfunction hasErrorProperty(\n x: unknown\n): x is { error: Error; [key: string]: unknown } {\n return !!(x as any)?.error;\n}\n\nexport type WarningCode =\n | 'NEXTAUTH_URL'\n | 'NO_SECRET'\n | 'TWITTER_OAUTH_2_BETA'\n | 'DEBUG_ENABLED';\n\n/**\n * Override any of the methods, and the rest will use the default logger.\n *\n * [Documentation](https://next-auth.js.org/configuration/options#logger)\n */\nexport interface LoggerInstance extends Record<string, (...args: any) => any> {\n warn: (code: WarningCode) => void;\n error: (\n code: string,\n /**\n * Either an instance of (JSON serializable) Error\n * or an object that contains some debug information.\n * (Error is still available through `metadata.error`)\n */\n metadata: Error | { error: Error; [key: string]: unknown }\n ) => void;\n debug: (code: string, metadata: unknown) => void;\n}\n\nconst _logger: LoggerInstance = {\n error(code, metadata) {\n metadata = formatError(metadata) as Error;\n console.error(`[nile-auth][error][${code}]`, metadata.message, metadata);\n },\n warn(code) {\n console.warn(`[nile-auth][warn][${code}]`);\n },\n debug(code, metadata) {\n console.log(`[next-auth][debug][${code}]`, metadata);\n },\n};\n\n/**\n * Override the built-in logger with user's implementation.\n * Any `undefined` level will use the default logger.\n */\nexport function setLogger(\n newLogger: Partial<LoggerInstance> = {},\n debug?: boolean\n) {\n // Turn off debug logging if `debug` isn't set to `true`\n if (!debug) _logger.debug = () => undefined;\n\n if (newLogger.error) _logger.error = newLogger.error;\n if (newLogger.warn) _logger.warn = newLogger.warn;\n if (newLogger.debug) _logger.debug = newLogger.debug;\n}\n\nexport default _logger;\n\n/** Serializes client-side log messages and sends them to the server */\nexport function proxyLogger(\n logger: LoggerInstance = _logger,\n authorizer: Authorizer\n): LoggerInstance {\n try {\n if (typeof window === 'undefined') {\n return logger;\n }\n\n const clientLogger: Record<string, unknown> = {};\n for (const level in logger) {\n clientLogger[level] = (code: string, metadata: Error) => {\n _logger[level](code, metadata); // Logs to console\n\n if (level === 'error') {\n metadata = formatError(metadata) as Error;\n }\n (metadata as any).client = true;\n const url = `${authorizer.state.basePath}/_log`;\n const body = new URLSearchParams({ level, code, ...(metadata as any) });\n if (navigator.sendBeacon) {\n return navigator.sendBeacon(url, body);\n }\n return fetch(url, { method: 'POST', body, keepalive: true });\n };\n }\n return clientLogger as unknown as LoggerInstance;\n } catch {\n return _logger;\n }\n}\n\nexport const logger = (authorizer: Authorizer) =>\n proxyLogger(_logger, authorizer);\n","/** Returns the number of seconds elapsed since January 1, 1970 00:00:00 UTC. */\nexport function now() {\n return Math.floor(Date.now() / 1000);\n}\n\nexport interface BroadcastMessage {\n event?: 'session';\n data?: { trigger?: 'signout' | 'getSession' };\n clientId: string;\n timestamp: number;\n}\n\n/**\n * Inspired by [Broadcast Channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API)\n * Only not using it directly, because Safari does not support it.\n *\n * https://caniuse.com/?search=broadcastchannel\n */\nexport function BroadcastChannel(name = 'nextauth.message') {\n return {\n /** Get notified by other tabs/windows. */\n receive(onReceive: (message: BroadcastMessage) => void) {\n const handler = (event: StorageEvent) => {\n if (event.key !== name) return;\n const message: BroadcastMessage = JSON.parse(event.newValue ?? '{}');\n if (message?.event !== 'session' || !message?.data) return;\n\n onReceive(message);\n };\n window.addEventListener('storage', handler);\n return () => window.removeEventListener('storage', handler);\n },\n /** Notify other tabs/windows. */\n post(message: Record<string, unknown>) {\n if (typeof window === 'undefined') return;\n try {\n localStorage.setItem(\n name,\n JSON.stringify({ ...message, timestamp: now() })\n );\n } catch {\n /**\n * The localStorage API isn't always available.\n * It won't work in private mode prior to Safari 11 for example.\n * Notifications are simply dropped if an error is encountered.\n */\n }\n },\n };\n}\n\nexport const broadcast = BroadcastChannel();\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nfunction isEqual(a: any, b: any): boolean {\n if (a === b) return true; // Same reference or primitive value\n\n if (\n typeof a !== 'object' ||\n typeof b !== 'object' ||\n a === null ||\n b === null\n ) {\n return false; // If one of them is not an object (or is null), return false\n }\n\n if (Array.isArray(a) !== Array.isArray(b)) return false; // One is an array, the other isn't\n\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n\n if (keysA.length !== keysB.length) return false; // Different number of keys\n\n for (const key of keysA) {\n if (!keysB.includes(key) || !isEqual(a[key], b[key])) {\n return false; // Key missing or values are not deeply equal\n }\n }\n\n return true;\n}\n\nimport { Listener } from './types';\n\nexport function createObservableObject<T = Record<string, unknown>>(\n obj: T,\n listenerKeys = ['loading', 'session'],\n eventName = 'objectChange'\n) {\n const eventTarget = new EventTarget();\n const listeners = new Map();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handler: ProxyHandler<any> = {\n set(target, key, value) {\n const prev = target[key];\n target[key] = value;\n if (isEqual(prev, value)) return true;\n\n // only fire on these two for now\n if (listenerKeys.includes(String(key))) {\n eventTarget.dispatchEvent(\n new CustomEvent(eventName, {\n detail: { key, prev, next: value },\n })\n );\n }\n return true;\n },\n };\n\n return {\n proxy: new Proxy(obj, handler),\n eventTarget,\n addListener(callback: Listener) {\n if (listeners.has(callback)) {\n return;\n }\n const wrappedCallback = (e: Event) => callback((e as CustomEvent).detail);\n listeners.set(callback, wrappedCallback);\n\n eventTarget.addEventListener(eventName, wrappedCallback);\n },\n removeListener(callback: Listener) {\n const wrappedCallback = listeners.get(callback);\n if (wrappedCallback) {\n eventTarget.removeEventListener(eventName, wrappedCallback);\n listeners.delete(callback);\n }\n },\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport {\n ActiveSession,\n AuthConfig,\n AuthState,\n Config,\n CtxOrReq,\n BuiltInProviderType,\n RedirectableProviderType,\n ClientSafeProvider,\n SignInAuthorizationParams,\n SignInOptions,\n LiteralUnion,\n SignInResponse,\n Listener,\n NonErrorSession,\n PartialAuthorizer,\n SignOutParams,\n SignOutResponse,\n} from './types';\nimport { logger, LoggerInstance } from './logger';\nimport { broadcast, now } from './broadcast';\nimport { createObservableObject } from './observable';\n\nexport type GetSessionParams = CtxOrReq & {\n event?: 'storage' | 'timer' | 'hidden' | string;\n triggerEvent?: boolean;\n broadcast?: boolean;\n baseUrl?: string;\n init?: RequestInit;\n};\n\nenum State {\n SESSION = 'getSession',\n}\n\nexport default class Authorizer {\n state: AuthState;\n #logger: LoggerInstance;\n requestInit?: RequestInit;\n addListener: (cb: Listener) => void;\n removeListener: (cb: Listener) => void;\n status: null | State;\n constructor(config?: AuthConfig) {\n const { proxy, addListener, removeListener } =\n createObservableObject<AuthState>(\n {\n basePath: parseUrl(config?.basePath).path,\n baseUrl: parseUrl(config?.baseUrl).origin,\n lastSync: 0,\n getSession: () => undefined,\n session: undefined,\n loading: true,\n },\n config?.listenerKeys,\n 'auth'\n );\n this.state = proxy;\n this.addListener = addListener;\n this.removeListener = removeListener;\n this.#logger = logger(this);\n this.status = null;\n }\n\n async sync(\n event?: 'storage' | 'timer' | 'hidden' | 'poll' | 'visibilitychange'\n ) {\n try {\n const storageEvent = event === 'storage';\n if (storageEvent || !this.state.session) {\n this.state.getSession = await this.getSession;\n this.state.lastSync = now();\n }\n if (!event || this.state.session == null || now() < this.state.lastSync) {\n return;\n }\n this.state.lastSync = Date.now();\n this.state.session = await this.getSession();\n } catch (error) {\n this.#logger.error('CLIENT_SESSION_ERROR', error as Error);\n }\n }\n\n set baseUrl(val: string) {\n this.state.baseUrl = val;\n this.#logger = logger(this);\n }\n\n get baseUrl() {\n this.#logger = logger(this);\n return this.state.baseUrl;\n }\n\n configure(config?: Config) {\n if (config?.basePath) this.state.basePath = parseUrl(config?.basePath).path;\n if (config?.baseUrl) this.baseUrl = config.baseUrl;\n if (config?.init) this.requestInit = config.init;\n\n return this;\n }\n sanitize(): PartialAuthorizer {\n return {\n state: {\n baseUrl: this.baseUrl,\n session: {\n user: {\n email: (this.state.session as ActiveSession)?.user?.email,\n },\n },\n },\n requestInit: this.requestInit,\n };\n }\n\n async initialize(params?: {\n baseUrl?: string;\n session?: NonErrorSession | null | undefined;\n event?: 'storage' | 'timer' | 'hidden' | 'poll' | 'visibilitychange';\n }) {\n const { baseUrl, session, event } = params ?? {};\n\n if (baseUrl) this.baseUrl = baseUrl;\n\n const hasInitialSession = session !== undefined;\n\n this.state.loading = !hasInitialSession;\n this.state.lastSync = hasInitialSession ? now() : 0;\n this.state.session = session;\n\n await this.sync(event);\n }\n\n get apiBaseUrl() {\n return `${this.baseUrl}${this.state.basePath}`;\n }\n\n async #sendData(\n url: string,\n init?: RequestInit\n ): Promise<Response | undefined> {\n try {\n const options: RequestInit = {\n headers: {\n 'Content-Type': 'application/json',\n },\n ...(this.requestInit ? this.requestInit : {}),\n ...init,\n };\n\n const filledUrl = !url.startsWith('http')\n ? `${window.location.origin}${url}`\n : url;\n\n const res = await fetch(filledUrl, options);\n this.state.loading = false;\n return res;\n } catch (error) {\n this.#logger.error('CLIENT_FETCH_ERROR', { error: error as Error, url });\n return undefined;\n }\n }\n async #fetchData<T = any>(\n url: string,\n init?: RequestInit\n ): Promise<T | undefined> {\n const options: RequestInit = {\n ...(this.requestInit ? this.requestInit : {}),\n ...init,\n };\n const res = await this.#sendData(url, options);\n\n const errorHandler = res?.clone();\n try {\n if (res?.ok) {\n const data = await res.json();\n this.state.loading = false;\n return Object.keys(data).length > 0 ? data : undefined;\n } else {\n const error = await errorHandler?.text();\n if (error) {\n const updatedUrl = new URL(url);\n updatedUrl.searchParams.set('error', error);\n return { url: updatedUrl.toString() } as T;\n }\n }\n } catch (error) {\n if (error instanceof Error) {\n // this is fine\n if (!error.message.includes('is not valid JSON')) {\n this.#logger.error('CLIENT_FETCH_ERROR', {\n error: error as Error,\n url,\n });\n } else {\n const error = await errorHandler?.text();\n if (error) {\n const updatedUrl = new URL(url);\n updatedUrl.searchParams.set('error', error);\n return { url: updatedUrl.toString() } as T;\n }\n }\n }\n return undefined;\n }\n }\n async #fetchFormData<T = { url: string }>(\n url: string,\n init: RequestInit\n ): Promise<\n | {\n data: T;\n status: number;\n ok: boolean;\n url: string;\n }\n | undefined\n > {\n try {\n const res = await fetch(url, {\n ...this.requestInit,\n ...init,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n });\n if (res) {\n if (res.ok) {\n return {\n data: (await res.json()) as T,\n status: res.status,\n ok: res.ok,\n url: res.url,\n };\n }\n const { url: responseUrl } = await res.json();\n return {\n data: {} as T,\n status: res.status,\n ok: res?.ok,\n url: responseUrl,\n };\n }\n throw new Error(`Unable to fetch ${url}`);\n } catch (error) {\n if (error instanceof Error) {\n // this is fine\n if (!error.message.includes('is not valid JSON')) {\n this.#logger.error('CLIENT_FETCH_ERROR', {\n error: error as Error,\n url,\n });\n }\n }\n return undefined;\n }\n }\n\n async getProviders(url?: string) {\n return await this.#fetchData<\n Record<LiteralUnion<BuiltInProviderType>, ClientSafeProvider>\n >(url ?? `${this.apiBaseUrl}/auth/providers`);\n }\n\n async getCsrfToken(url?: string) {\n const response = await this.#fetchData<{ csrfToken: string }>(\n url ?? `${this.apiBaseUrl}/auth/csrf`\n );\n return response?.csrfToken;\n }\n\n async getSession(params?: GetSessionParams): Promise<NonErrorSession> {\n if (this.status === State.SESSION) {\n return;\n }\n this.status = State.SESSION;\n if (params?.init) {\n this.requestInit = params.init;\n }\n\n if (params?.baseUrl) {\n this.baseUrl = params.baseUrl;\n }\n\n if (this.state.session && now() < this.state.lastSync) {\n this.status = null;\n return this.state.session;\n }\n this.state.loading = true;\n\n const session = await this.#fetchData<NonErrorSession | undefined>(\n `${this.apiBaseUrl}/auth/session`\n );\n\n broadcast.post({ event: 'session', data: { trigger: 'getSession' } });\n this.status = null;\n if (session) {\n this.state.session = session;\n await this.sync('storage');\n return { ...session, loading: this.state.loading };\n }\n return { loading: this.state.loading } as NonErrorSession;\n }\n\n async refreshSession() {\n this.state.loading = true;\n const session = await this.#fetchData<NonErrorSession | undefined>(\n `${this.apiBaseUrl}/auth/session`\n );\n\n broadcast.post({ event: 'session', data: { trigger: 'getSession' } });\n this.state.session = session;\n await this.sync('storage');\n return session;\n }\n async signOut<R extends boolean = true>(\n options?: SignOutParams<R> & {\n baseUrl?: string;\n auth?: Authorizer | PartialAuthorizer;\n fetchUrl?: string;\n basePath?: string;\n }\n ): Promise<R extends true ? undefined : SignOutResponse> {\n const {\n callbackUrl = window.location.href,\n baseUrl,\n auth,\n fetchUrl,\n basePath,\n } = options ?? {};\n\n if (basePath) {\n this.state.basePath = basePath;\n }\n\n if (baseUrl) {\n this.baseUrl = baseUrl;\n }\n\n if (auth) {\n this.requestInit = auth.requestInit;\n if (auth.state?.baseUrl) {\n this.baseUrl = auth.state.baseUrl;\n }\n }\n const baseFetch = fetchUrl ?? `${this.apiBaseUrl}/auth/signout`;\n const fetchOptions: RequestInit = {\n method: 'post',\n body: new URLSearchParams({\n csrfToken: String(await this.getCsrfToken()),\n callbackUrl,\n json: String(true),\n }),\n };\n const res = await this.#fetchFormData<SignOutResponse>(\n baseFetch,\n fetchOptions\n );\n\n broadcast.post({ event: 'session', data: { trigger: 'signout' } });\n\n // in the case you are going x-origin, we don't want to trust the nile.callback-url, so we will not redirect and just refresh the page\n if (this.requestInit?.credentials) {\n window.location.href = callbackUrl;\n if (callbackUrl.includes('#')) window.location.reload();\n return undefined as R extends true ? undefined : SignOutResponse;\n }\n if (options?.redirect ?? true) {\n const url = res?.data?.url ?? callbackUrl;\n window.location.href = url;\n // If url contains a hash, the browser does not reload the page. We reload manually\n if (url.includes('#')) window.location.reload();\n return undefined as R extends true ? undefined : SignOutResponse;\n }\n\n await this.state.getSession({ event: 'storage' });\n\n return res?.data as R extends true ? undefined : SignOutResponse;\n }\n async signIn<P extends RedirectableProviderType | undefined = undefined>(\n provider?: LiteralUnion<\n P extends RedirectableProviderType\n ? P | BuiltInProviderType\n : BuiltInProviderType\n >,\n options?: SignInOptions & {\n baseUrl?: string;\n providersUrl?: string;\n csrfUrl?: string;\n init?: ResponseInit;\n fetchUrl?: string;\n resetUrl?: string;\n auth?: Authorizer | PartialAuthorizer;\n },\n authorizationParams?: SignInAuthorizationParams\n ): Promise<\n P extends RedirectableProviderType ? SignInResponse | undefined : undefined\n > {\n const {\n callbackUrl = window.location.href,\n resetUrl = window.location.href,\n providersUrl,\n csrfUrl,\n baseUrl,\n fetchUrl,\n init,\n auth,\n redirect = true,\n ...remaining\n } = options ?? {};\n\n if (baseUrl) {\n this.baseUrl = baseUrl;\n }\n if (auth) {\n if (auth.requestInit) {\n this.requestInit = auth.requestInit;\n }\n if (auth.state?.baseUrl) {\n this.baseUrl = auth.state.baseUrl;\n }\n }\n if (init) {\n this.requestInit = init;\n }\n\n const providers = await this.getProviders(providersUrl);\n\n if (!providers) {\n return { error: 'No providers enabled' } as any;\n }\n if (!provider || !(provider in providers)) {\n return { error: `Provider ${provider} not enabled` } as any;\n }\n\n const isCredentials = providers[provider].type === 'credentials';\n const isEmail = providers[provider].type === 'email';\n const isSupportingReturn = isCredentials || isEmail;\n\n const baseFetch = `${this.apiBaseUrl}/auth`;\n const signInUrl =\n fetchUrl ??\n `${baseFetch}/${isCredentials ? 'callback' : 'signin'}/${provider}`;\n\n const _signInUrl = `${signInUrl}${\n authorizationParams ? `?${new URLSearchParams(authorizationParams)}` : ''\n }`;\n\n const data = await this.#fetchFormData(_signInUrl, {\n method: 'post',\n body: new URLSearchParams({\n ...remaining,\n csrfToken: String(await this.getCsrfToken(csrfUrl)),\n callbackUrl,\n json: String(true),\n resetUrl,\n }),\n });\n\n if (data?.ok && this.requestInit?.credentials && isSupportingReturn) {\n window.location.reload();\n return;\n }\n\n if (data?.ok && (redirect || !isSupportingReturn)) {\n const url = data?.data.url ?? callbackUrl;\n window.location.href = url;\n if (url.includes('#')) window.location.reload();\n return;\n }\n\n const error = data?.data?.url\n ? new URL(String(data?.data?.url)).searchParams.get('error')\n : null;\n\n if (data?.ok) {\n await this.initialize();\n await this.getSession({ event: 'storage' });\n }\n return {\n error,\n status: data?.status,\n ok: data?.ok,\n url: error ? null : data?.url,\n } as any;\n }\n async signUp(options: {\n baseUrl?: string;\n init?: ResponseInit;\n fetchUrl?: string;\n newTenantName?: string;\n createTenant?: string | boolean;\n email: string;\n password: string;\n auth?: Authorizer | PartialAuthorizer;\n tenantId?: string;\n callbackUrl?: string;\n redirect?: boolean;\n }) {\n const {\n password,\n tenantId,\n fetchUrl,\n newTenantName,\n createTenant,\n baseUrl,\n init,\n email,\n auth,\n callbackUrl = window.location.href,\n } = options;\n\n if (baseUrl) {\n this.baseUrl = baseUrl;\n }\n\n if (auth) {\n if (auth.requestInit) {\n this.requestInit = auth.requestInit;\n }\n if (auth.state?.baseUrl) {\n this.baseUrl = auth.state.baseUrl;\n }\n }\n\n if (init) {\n this.requestInit = init;\n }\n\n const searchParams = new URLSearchParams();\n\n if (newTenantName) {\n searchParams.set('newTenantName', newTenantName);\n } else if (createTenant) {\n if (typeof createTenant === 'boolean') {\n searchParams.set('newTenantName', email);\n } else if (typeof createTenant === 'string') {\n searchParams.set('newTenantName', createTenant);\n }\n }\n if (tenantId) {\n searchParams.set('tenantId', tenantId);\n }\n\n let signUpUrl = fetchUrl ?? `${this.apiBaseUrl}/signup`;\n if (searchParams.size > 0) {\n signUpUrl += `?${searchParams}`;\n }\n const data = await this.#fetchData(signUpUrl, {\n method: 'post',\n body: JSON.stringify({ email, password }),\n });\n\n const error = data?.url\n ? new URL(data.url).searchParams.get('error')\n : null;\n\n if (!error) {\n if (data) {\n await this.initialize({ event: 'storage' });\n await this.getSession({ event: 'storage' });\n }\n if (this.requestInit?.credentials) {\n window.location.reload();\n return;\n }\n\n if (options?.redirect ?? true) {\n const url = callbackUrl;\n window.location.href = url;\n // If url contains a hash, the browser does not reload the page. We reload manually\n if (url.includes('#')) window.location.reload();\n }\n }\n\n return {\n data,\n error,\n } as any;\n }\n async resetPassword(options: {\n baseUrl?: string;\n init?: ResponseInit;\n fetchUrl?: string;\n email: string;\n password: string;\n auth?: Authorizer | PartialAuthorizer;\n callbackUrl?: string;\n redirect?: boolean;\n }) {\n const { password, fetchUrl, email, redirect, callbackUrl } = options;\n\n this.#configureFetch(options);\n\n const resetPasswordUrl =\n fetchUrl ?? `${this.apiBaseUrl}/auth/reset-password`;\n\n let resetPasswordWithParams = resetPasswordUrl;\n\n const searchParams = new URLSearchParams();\n\n if (redirect === false) {\n searchParams.set('json', 'true');\n }\n if (searchParams.size > 0) {\n resetPasswordWithParams += `?${searchParams}`;\n }\n\n const data = await this.#sendData(resetPasswordWithParams, {\n method: 'post',\n body: JSON.stringify({\n email,\n password,\n redirectUrl: resetPasswordUrl,\n callbackUrl,\n }),\n });\n if (!data?.ok) {\n throw new Error(await data?.clone().text());\n }\n if (redirect === false) {\n const json = await data?.json();\n const { url: urlWithParams } = json;\n resetPasswordWithParams = `${urlWithParams}&redirect=false`;\n await this.#sendData(resetPasswordWithParams);\n\n return await this.#sendData(resetPasswordWithParams, {\n method: password ? 'put' : 'post',\n body: JSON.stringify({ email, password }),\n });\n }\n }\n\n #configureFetch(params: {\n baseUrl?: string;\n auth?: Authorizer | PartialAuthorizer;\n init?: RequestInit;\n }) {\n const { baseUrl, init, auth } = params;\n if (baseUrl) {\n this.baseUrl = baseUrl;\n }\n\n if (auth) {\n if (auth.requestInit) {\n this.requestInit = auth.requestInit;\n }\n if (auth.state?.baseUrl) {\n this.baseUrl = auth.state.baseUrl;\n }\n }\n\n if (init) {\n this.requestInit = init;\n }\n }\n}\nexport interface InternalUrl {\n /** @default \"http://localhost:3000\" */\n origin: string;\n /** @default \"localhost:3000\" */\n host: string;\n /** @default \"/api/auth\" */\n path: string;\n /** @default \"http://localhost:3000/api/auth\" */\n base: string;\n /** @default \"http://localhost:3000/api/auth\" */\n toString: () => string;\n}\n\nfunction parseUrl(url?: string): InternalUrl {\n let defaultUrl = new URL('http://localhost:3000');\n if (typeof window !== 'undefined') {\n defaultUrl = new URL(`${window.location.origin}/api`);\n }\n\n if (url && !url.startsWith('http')) {\n url = `https://${url}`;\n }\n\n const _url = new URL(url ?? defaultUrl);\n const path = (_url.pathname === '/' ? defaultUrl.pathname : _url.pathname)\n // Remove trailing slash\n .replace(/\\/$/, '');\n\n const base = `${_url.origin}${path}`;\n\n return {\n origin: _url.origin,\n host: _url.host,\n path,\n base,\n toString: () => base,\n };\n}\n\nexport const authorizer = new Authorizer();\n\nconst _auth = () => {\n return authorizer;\n};\n\nexport const auth: Authorizer = _auth();\n\nexport const getSession = async function getSession(params?: GetSessionParams) {\n return await auth.getSession(params);\n};\n\nexport const getCsrfToken = async function getCsrfToken(url?: string) {\n return auth.getCsrfToken(url);\n};\n\nexport const getProviders = async function getProviders() {\n return auth.getProviders();\n};\n\nexport const signOut: typeof authorizer.signOut = async function signOut(\n options\n) {\n return auth.signOut(options);\n};\nexport const signIn: typeof authorizer.signIn = async function signOut(\n provider,\n options,\n authParams\n) {\n return auth.signIn(provider, options, authParams);\n};\n\nexport const signUp: typeof authorizer.signUp = async function signUp(options) {\n return auth.signUp(options);\n};\nexport const resetPassword: typeof authorizer.resetPassword =\n async function resetPassword(options) {\n return auth.resetPassword(options);\n };\n","import { NonErrorSession } from './types';\n\nexport function getStatus(\n load: boolean,\n sess: NonErrorSession | null | undefined\n) {\n if (load) {\n return 'loading';\n }\n if (sess) {\n return 'authenticated';\n }\n return 'unauthenticated';\n}\n"],"mappings":"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","names":["logger","authorizer","error","auth","getSession","getCsrfToken","getProviders","signOut","signUp","resetPassword"]}
1
+ {"version":3,"sources":["../src/logger.ts","../src/broadcast.ts","../src/observable.ts","../src/Authorizer.ts","../src/status.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport Authorizer from './Authorizer';\n\n/* eslint-disable no-console */\nexport class UnknownError extends Error {\n code: string;\n constructor(error: Error | string) {\n // Support passing error or string\n super((error as Error)?.message ?? error);\n this.name = 'UnknownError';\n this.code = (error as any).code;\n if (error instanceof Error) {\n this.stack = error.stack;\n }\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n stack: this.stack,\n };\n }\n}\n\n// TODO: better typing\n/** Makes sure that error is always serializable */\nfunction formatError(o: unknown): unknown {\n if (o instanceof Error && !(o instanceof UnknownError)) {\n return JSON.stringify({ message: o.message, stack: o.stack, name: o.name });\n }\n if (hasErrorProperty(o)) {\n o.error = formatError(o.error) as Error;\n o.message = o.message ?? o.error.message;\n }\n return o;\n}\n\nfunction hasErrorProperty(\n x: unknown\n): x is { error: Error; [key: string]: unknown } {\n return !!(x as any)?.error;\n}\n\nexport type WarningCode =\n | 'NEXTAUTH_URL'\n | 'NO_SECRET'\n | 'TWITTER_OAUTH_2_BETA'\n | 'DEBUG_ENABLED';\n\n/**\n * Override any of the methods, and the rest will use the default logger.\n *\n * [Documentation](https://next-auth.js.org/configuration/options#logger)\n */\nexport interface LoggerInstance extends Record<string, (...args: any) => any> {\n warn: (code: WarningCode) => void;\n error: (\n code: string,\n /**\n * Either an instance of (JSON serializable) Error\n * or an object that contains some debug information.\n * (Error is still available through `metadata.error`)\n */\n metadata: Error | { error: Error; [key: string]: unknown }\n ) => void;\n debug: (code: string, metadata: unknown) => void;\n}\n\nconst _logger: LoggerInstance = {\n error(code, metadata) {\n metadata = formatError(metadata) as Error;\n console.error(`[nile-auth][error][${code}]`, metadata.message, metadata);\n },\n warn(code) {\n console.warn(`[nile-auth][warn][${code}]`);\n },\n debug(code, metadata) {\n console.log(`[next-auth][debug][${code}]`, metadata);\n },\n};\n\n/**\n * Override the built-in logger with user's implementation.\n * Any `undefined` level will use the default logger.\n */\nexport function setLogger(\n newLogger: Partial<LoggerInstance> = {},\n debug?: boolean\n) {\n // Turn off debug logging if `debug` isn't set to `true`\n if (!debug) _logger.debug = () => undefined;\n\n if (newLogger.error) _logger.error = newLogger.error;\n if (newLogger.warn) _logger.warn = newLogger.warn;\n if (newLogger.debug) _logger.debug = newLogger.debug;\n}\n\nexport default _logger;\n\n/** Serializes client-side log messages and sends them to the server */\nexport function proxyLogger(\n logger: LoggerInstance = _logger,\n authorizer: Authorizer\n): LoggerInstance {\n try {\n if (typeof window === 'undefined') {\n return logger;\n }\n\n const clientLogger: Record<string, unknown> = {};\n for (const level in logger) {\n clientLogger[level] = (code: string, metadata: Error) => {\n _logger[level](code, metadata); // Logs to console\n\n if (level === 'error') {\n metadata = formatError(metadata) as Error;\n }\n (metadata as any).client = true;\n const url = `${authorizer.state.basePath}/_log`;\n const body = new URLSearchParams({ level, code, ...(metadata as any) });\n if (navigator.sendBeacon) {\n return navigator.sendBeacon(url, body);\n }\n return fetch(url, { method: 'POST', body, keepalive: true });\n };\n }\n return clientLogger as unknown as LoggerInstance;\n } catch {\n return _logger;\n }\n}\n\nexport const logger = (authorizer: Authorizer) =>\n proxyLogger(_logger, authorizer);\n","/** Returns the number of seconds elapsed since January 1, 1970 00:00:00 UTC. */\nexport function now() {\n return Math.floor(Date.now() / 1000);\n}\n\nexport interface BroadcastMessage {\n event?: 'session';\n data?: { trigger?: 'signout' | 'getSession' };\n clientId: string;\n timestamp: number;\n}\n\n/**\n * Inspired by [Broadcast Channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API)\n * Only not using it directly, because Safari does not support it.\n *\n * https://caniuse.com/?search=broadcastchannel\n */\nexport function BroadcastChannel(name = 'nextauth.message') {\n return {\n /** Get notified by other tabs/windows. */\n receive(onReceive: (message: BroadcastMessage) => void) {\n const handler = (event: StorageEvent) => {\n if (event.key !== name) return;\n const message: BroadcastMessage = JSON.parse(event.newValue ?? '{}');\n if (message?.event !== 'session' || !message?.data) return;\n\n onReceive(message);\n };\n window.addEventListener('storage', handler);\n return () => window.removeEventListener('storage', handler);\n },\n /** Notify other tabs/windows. */\n post(message: Record<string, unknown>) {\n if (typeof window === 'undefined') return;\n try {\n localStorage.setItem(\n name,\n JSON.stringify({ ...message, timestamp: now() })\n );\n } catch {\n /**\n * The localStorage API isn't always available.\n * It won't work in private mode prior to Safari 11 for example.\n * Notifications are simply dropped if an error is encountered.\n */\n }\n },\n };\n}\n\nexport const broadcast = BroadcastChannel();\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nfunction isEqual(a: any, b: any): boolean {\n if (a === b) return true; // Same reference or primitive value\n\n if (\n typeof a !== 'object' ||\n typeof b !== 'object' ||\n a === null ||\n b === null\n ) {\n return false; // If one of them is not an object (or is null), return false\n }\n\n if (Array.isArray(a) !== Array.isArray(b)) return false; // One is an array, the other isn't\n\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n\n if (keysA.length !== keysB.length) return false; // Different number of keys\n\n for (const key of keysA) {\n if (!keysB.includes(key) || !isEqual(a[key], b[key])) {\n return false; // Key missing or values are not deeply equal\n }\n }\n\n return true;\n}\n\nimport { Listener } from './types';\n\nexport function createObservableObject<T = Record<string, unknown>>(\n obj: T,\n listenerKeys = ['loading', 'session'],\n eventName = 'objectChange'\n) {\n const eventTarget = new EventTarget();\n const listeners = new Map();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handler: ProxyHandler<any> = {\n set(target, key, value) {\n const prev = target[key];\n target[key] = value;\n if (isEqual(prev, value)) return true;\n\n // only fire on these two for now\n if (listenerKeys.includes(String(key))) {\n eventTarget.dispatchEvent(\n new CustomEvent(eventName, {\n detail: { key, prev, next: value },\n })\n );\n }\n return true;\n },\n };\n\n return {\n proxy: new Proxy(obj, handler),\n eventTarget,\n addListener(callback: Listener) {\n if (listeners.has(callback)) {\n return;\n }\n const wrappedCallback = (e: Event) => callback((e as CustomEvent).detail);\n listeners.set(callback, wrappedCallback);\n\n eventTarget.addEventListener(eventName, wrappedCallback);\n },\n removeListener(callback: Listener) {\n const wrappedCallback = listeners.get(callback);\n if (wrappedCallback) {\n eventTarget.removeEventListener(eventName, wrappedCallback);\n listeners.delete(callback);\n }\n },\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport {\n ActiveSession,\n AuthConfig,\n AuthState,\n Config,\n CtxOrReq,\n BuiltInProviderType,\n RedirectableProviderType,\n ClientSafeProvider,\n SignInAuthorizationParams,\n SignInOptions,\n LiteralUnion,\n SignInResponse,\n Listener,\n NonErrorSession,\n PartialAuthorizer,\n SignOutParams,\n SignOutResponse,\n} from './types';\nimport { logger, LoggerInstance } from './logger';\nimport { broadcast, now } from './broadcast';\nimport { createObservableObject } from './observable';\n\nexport type GetSessionParams = CtxOrReq & {\n event?: 'storage' | 'timer' | 'hidden' | string;\n triggerEvent?: boolean;\n broadcast?: boolean;\n baseUrl?: string;\n init?: RequestInit;\n};\n\nenum State {\n SESSION = 'getSession',\n}\n\nexport default class Authorizer {\n state: AuthState;\n #logger: LoggerInstance;\n requestInit?: RequestInit;\n addListener: (cb: Listener) => void;\n removeListener: (cb: Listener) => void;\n status: null | State;\n constructor(config?: AuthConfig) {\n const { proxy, addListener, removeListener } =\n createObservableObject<AuthState>(\n {\n basePath: parseUrl(config?.basePath).path,\n baseUrl: parseUrl(config?.baseUrl).origin,\n lastSync: 0,\n getSession: () => undefined,\n session: undefined,\n loading: true,\n },\n config?.listenerKeys,\n 'auth'\n );\n this.state = proxy;\n this.addListener = addListener;\n this.removeListener = removeListener;\n this.#logger = logger(this);\n this.status = null;\n }\n\n async sync(\n event?: 'storage' | 'timer' | 'hidden' | 'poll' | 'visibilitychange'\n ) {\n try {\n const storageEvent = event === 'storage';\n if (storageEvent || !this.state.session) {\n this.state.getSession = this.getSession.bind(this);\n this.state.lastSync = now();\n }\n if (!event || this.state.session == null || now() < this.state.lastSync) {\n return;\n }\n this.state.lastSync = Date.now();\n this.state.session = await this.getSession();\n } catch (error) {\n this.#logger.error('CLIENT_SESSION_ERROR', error as Error);\n }\n }\n\n set baseUrl(val: string) {\n this.state.baseUrl = val;\n this.#logger = logger(this);\n }\n\n get baseUrl() {\n this.#logger = logger(this);\n return this.state.baseUrl;\n }\n\n configure(config?: Config) {\n if (config?.basePath) this.state.basePath = parseUrl(config?.basePath).path;\n if (config?.baseUrl) this.baseUrl = config.baseUrl;\n if (config?.init) this.requestInit = config.init;\n\n return this;\n }\n sanitize(): PartialAuthorizer {\n return {\n state: {\n baseUrl: this.baseUrl,\n session: {\n user: {\n email: (this.state.session as ActiveSession)?.user?.email,\n },\n },\n },\n requestInit: this.requestInit,\n };\n }\n\n async initialize(params?: {\n baseUrl?: string;\n session?: NonErrorSession | null | undefined;\n event?: 'storage' | 'timer' | 'hidden' | 'poll' | 'visibilitychange';\n }) {\n const { baseUrl, session, event } = params ?? {};\n\n if (baseUrl) this.baseUrl = baseUrl;\n\n const hasInitialSession = session !== undefined;\n\n this.state.loading = !hasInitialSession;\n this.state.lastSync = hasInitialSession ? now() : 0;\n this.state.session = session;\n\n await this.sync(event);\n }\n\n get apiBaseUrl() {\n return `${this.baseUrl}${this.state.basePath}`;\n }\n\n async #sendData(\n url: string,\n init?: RequestInit\n ): Promise<Response | undefined> {\n try {\n const options: RequestInit = {\n headers: {\n 'Content-Type': 'application/json',\n },\n ...(this.requestInit ? this.requestInit : {}),\n ...init,\n };\n\n const filledUrl = !url.startsWith('http')\n ? `${window.location.origin}${url}`\n : url;\n\n const res = await fetch(filledUrl, options);\n this.state.loading = false;\n return res;\n } catch (error) {\n this.#logger.error('CLIENT_FETCH_ERROR', { error: error as Error, url });\n return undefined;\n }\n }\n async #fetchData<T = any>(\n url: string,\n init?: RequestInit\n ): Promise<T | undefined> {\n const options: RequestInit = {\n ...(this.requestInit ? this.requestInit : {}),\n ...init,\n };\n const res = await this.#sendData(url, options);\n\n const errorHandler = res?.clone();\n try {\n if (res?.ok) {\n const data = await res.json();\n this.state.loading = false;\n return Object.keys(data).length > 0 ? data : undefined;\n } else {\n const error = await errorHandler?.text();\n if (error) {\n const updatedUrl = new URL(url);\n updatedUrl.searchParams.set('error', error);\n return { url: updatedUrl.toString() } as T;\n }\n }\n } catch (error) {\n if (error instanceof Error) {\n // this is fine\n if (!error.message.includes('is not valid JSON')) {\n this.#logger.error('CLIENT_FETCH_ERROR', {\n error: error as Error,\n url,\n });\n } else {\n const error = await errorHandler?.text();\n if (error) {\n const updatedUrl = new URL(url);\n updatedUrl.searchParams.set('error', error);\n return { url: updatedUrl.toString() } as T;\n }\n }\n }\n return undefined;\n }\n }\n async #fetchFormData<T = { url: string }>(\n url: string,\n init: RequestInit\n ): Promise<\n | {\n data: T;\n status: number;\n ok: boolean;\n url: string;\n }\n | undefined\n > {\n try {\n const res = await fetch(url, {\n ...this.requestInit,\n ...init,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n });\n if (res) {\n if (res.ok) {\n return {\n data: (await res.json()) as T,\n status: res.status,\n ok: res.ok,\n url: res.url,\n };\n }\n const { url: responseUrl } = await res.json();\n return {\n data: {} as T,\n status: res.status,\n ok: res?.ok,\n url: responseUrl,\n };\n }\n throw new Error(`Unable to fetch ${url}`);\n } catch (error) {\n if (error instanceof Error) {\n // this is fine\n if (!error.message.includes('is not valid JSON')) {\n this.#logger.error('CLIENT_FETCH_ERROR', {\n error: error as Error,\n url,\n });\n }\n }\n return undefined;\n }\n }\n\n async getProviders(url?: string) {\n return await this.#fetchData<\n Record<LiteralUnion<BuiltInProviderType>, ClientSafeProvider>\n >(url ?? `${this.apiBaseUrl}/auth/providers`);\n }\n\n async getCsrfToken(url?: string) {\n const response = await this.#fetchData<{ csrfToken: string }>(\n url ?? `${this.apiBaseUrl}/auth/csrf`\n );\n return response?.csrfToken;\n }\n\n async getSession(params?: GetSessionParams): Promise<NonErrorSession> {\n if (this.status === State.SESSION) {\n return;\n }\n this.status = State.SESSION;\n if (params?.init) {\n this.requestInit = params.init;\n }\n\n if (params?.baseUrl) {\n this.baseUrl = params.baseUrl;\n }\n\n if (this.state.session && now() < this.state.lastSync) {\n this.status = null;\n return this.state.session;\n }\n this.state.loading = true;\n\n const session = await this.#fetchData<NonErrorSession | undefined>(\n `${this.apiBaseUrl}/auth/session`\n );\n\n broadcast.post({ event: 'session', data: { trigger: 'getSession' } });\n this.status = null;\n if (session) {\n this.state.session = session;\n await this.sync('storage');\n return { ...session, loading: this.state.loading };\n }\n return { loading: this.state.loading } as NonErrorSession;\n }\n\n async refreshSession() {\n this.state.loading = true;\n const session = await this.#fetchData<NonErrorSession | undefined>(\n `${this.apiBaseUrl}/auth/session`\n );\n\n broadcast.post({ event: 'session', data: { trigger: 'getSession' } });\n this.state.session = session;\n await this.sync('storage');\n return session;\n }\n async signOut<R extends boolean = true>(\n options?: SignOutParams<R> & {\n baseUrl?: string;\n auth?: Authorizer | PartialAuthorizer;\n fetchUrl?: string;\n basePath?: string;\n }\n ): Promise<R extends true ? undefined : SignOutResponse> {\n const {\n callbackUrl = window.location.href,\n baseUrl,\n auth,\n fetchUrl,\n basePath,\n } = options ?? {};\n\n if (basePath) {\n this.state.basePath = basePath;\n }\n\n if (baseUrl) {\n this.baseUrl = baseUrl;\n }\n\n if (auth) {\n this.requestInit = auth.requestInit;\n if (auth.state?.baseUrl) {\n this.baseUrl = auth.state.baseUrl;\n }\n }\n const baseFetch = fetchUrl ?? `${this.apiBaseUrl}/auth/signout`;\n const fetchOptions: RequestInit = {\n method: 'post',\n body: new URLSearchParams({\n csrfToken: String(await this.getCsrfToken()),\n callbackUrl,\n json: String(true),\n }),\n };\n const res = await this.#fetchFormData<SignOutResponse>(\n baseFetch,\n fetchOptions\n );\n\n broadcast.post({ event: 'session', data: { trigger: 'signout' } });\n\n // in the case you are going x-origin, we don't want to trust the nile.callback-url, so we will not redirect and just refresh the page\n if (this.requestInit?.credentials) {\n window.location.href = callbackUrl;\n if (callbackUrl.includes('#')) window.location.reload();\n return undefined as R extends true ? undefined : SignOutResponse;\n }\n if (options?.redirect ?? true) {\n const url = res?.data?.url ?? callbackUrl;\n window.location.href = url;\n // If url contains a hash, the browser does not reload the page. We reload manually\n if (url.includes('#')) window.location.reload();\n return undefined as R extends true ? undefined : SignOutResponse;\n }\n\n await this.state.getSession({ event: 'storage' });\n\n return res?.data as R extends true ? undefined : SignOutResponse;\n }\n async signIn<P extends RedirectableProviderType | undefined = undefined>(\n provider?: LiteralUnion<\n P extends RedirectableProviderType\n ? P | BuiltInProviderType\n : BuiltInProviderType\n >,\n options?: SignInOptions & {\n baseUrl?: string;\n providersUrl?: string;\n csrfUrl?: string;\n init?: ResponseInit;\n fetchUrl?: string;\n resetUrl?: string;\n auth?: Authorizer | PartialAuthorizer;\n },\n authorizationParams?: SignInAuthorizationParams\n ): Promise<\n P extends RedirectableProviderType ? SignInResponse | undefined : undefined\n > {\n const {\n callbackUrl = window.location.href,\n resetUrl = window.location.href,\n providersUrl,\n csrfUrl,\n baseUrl,\n fetchUrl,\n init,\n auth,\n redirect = true,\n ...remaining\n } = options ?? {};\n\n if (baseUrl) {\n this.baseUrl = baseUrl;\n }\n if (auth) {\n if (auth.requestInit) {\n this.requestInit = auth.requestInit;\n }\n if (auth.state?.baseUrl) {\n this.baseUrl = auth.state.baseUrl;\n }\n }\n if (init) {\n this.requestInit = init;\n }\n\n const providers = await this.getProviders(providersUrl);\n\n if (!providers) {\n return { error: 'No providers enabled' } as any;\n }\n if (!provider || !(provider in providers)) {\n return { error: `Provider ${provider} not enabled` } as any;\n }\n\n const isCredentials = providers[provider].type === 'credentials';\n const isEmail = providers[provider].type === 'email';\n const isSupportingReturn = isCredentials || isEmail;\n\n const baseFetch = `${this.apiBaseUrl}/auth`;\n const signInUrl =\n fetchUrl ??\n `${baseFetch}/${isCredentials ? 'callback' : 'signin'}/${provider}`;\n\n const _signInUrl = `${signInUrl}${\n authorizationParams ? `?${new URLSearchParams(authorizationParams)}` : ''\n }`;\n\n const data = await this.#fetchFormData(_signInUrl, {\n method: 'post',\n body: new URLSearchParams({\n ...remaining,\n csrfToken: String(await this.getCsrfToken(csrfUrl)),\n callbackUrl,\n json: String(true),\n resetUrl,\n }),\n });\n\n if (data?.ok && this.requestInit?.credentials && isSupportingReturn) {\n window.location.reload();\n return;\n }\n\n if (data?.ok && (redirect || !isSupportingReturn)) {\n const url = data?.data.url ?? callbackUrl;\n window.location.href = url;\n if (url.includes('#')) window.location.reload();\n return;\n }\n\n const error = data?.data?.url\n ? new URL(String(data?.data?.url)).searchParams.get('error')\n : null;\n\n if (data?.ok) {\n await this.initialize();\n await this.getSession({ event: 'storage' });\n }\n return {\n error,\n status: data?.status,\n ok: data?.ok,\n url: error ? null : data?.url,\n } as any;\n }\n async signUp(options: {\n baseUrl?: string;\n init?: ResponseInit;\n fetchUrl?: string;\n newTenantName?: string;\n createTenant?: string | boolean;\n email: string;\n password: string;\n auth?: Authorizer | PartialAuthorizer;\n tenantId?: string;\n callbackUrl?: string;\n redirect?: boolean;\n }) {\n const {\n password,\n tenantId,\n fetchUrl,\n newTenantName,\n createTenant,\n baseUrl,\n init,\n email,\n auth,\n callbackUrl = window.location.href,\n } = options;\n\n if (baseUrl) {\n this.baseUrl = baseUrl;\n }\n\n if (auth) {\n if (auth.requestInit) {\n this.requestInit = auth.requestInit;\n }\n if (auth.state?.baseUrl) {\n this.baseUrl = auth.state.baseUrl;\n }\n }\n\n if (init) {\n this.requestInit = init;\n }\n\n const searchParams = new URLSearchParams();\n\n if (newTenantName) {\n searchParams.set('newTenantName', newTenantName);\n } else if (createTenant) {\n if (typeof createTenant === 'boolean') {\n searchParams.set('newTenantName', email);\n } else if (typeof createTenant === 'string') {\n searchParams.set('newTenantName', createTenant);\n }\n }\n if (tenantId) {\n searchParams.set('tenantId', tenantId);\n }\n\n let signUpUrl = fetchUrl ?? `${this.apiBaseUrl}/signup`;\n if (searchParams.size > 0) {\n signUpUrl += `?${searchParams}`;\n }\n const data = await this.#fetchData(signUpUrl, {\n method: 'post',\n body: JSON.stringify({ email, password }),\n });\n\n const error = data?.url\n ? new URL(data.url).searchParams.get('error')\n : null;\n\n if (!error) {\n if (data) {\n await this.initialize({ event: 'storage' });\n await this.getSession({ event: 'storage' });\n }\n if (this.requestInit?.credentials) {\n window.location.reload();\n return;\n }\n\n if (options?.redirect ?? true) {\n const url = callbackUrl;\n window.location.href = url;\n // If url contains a hash, the browser does not reload the page. We reload manually\n if (url.includes('#')) window.location.reload();\n }\n }\n\n return {\n data,\n error,\n } as any;\n }\n\n async forgotPassword(options: {\n baseUrl?: string;\n init?: ResponseInit;\n fetchUrl?: string;\n password: string;\n auth?: Authorizer | PartialAuthorizer;\n callbackUrl?: string;\n redirect?: boolean;\n }) {\n const { password, fetchUrl, redirect, callbackUrl = '/' } = options;\n\n this.#configureFetch(options);\n\n const resetPasswordUrl =\n fetchUrl ?? `${this.apiBaseUrl}/auth/reset-password`;\n\n let resetPasswordWithParams = resetPasswordUrl;\n\n const searchParams = new URLSearchParams();\n\n if (redirect === false) {\n searchParams.set('json', 'true');\n }\n if (searchParams.size > 0) {\n resetPasswordWithParams += `?${searchParams}`;\n }\n\n const data = await this.#sendData(resetPasswordWithParams, {\n method: 'put',\n body: JSON.stringify({\n password,\n callbackUrl,\n }),\n });\n if (!data?.ok) {\n throw new Error(await data?.clone().text());\n }\n return data;\n }\n\n async resetPassword(options: {\n baseUrl?: string;\n init?: ResponseInit;\n fetchUrl?: string;\n email: string;\n password: string;\n auth?: Authorizer | PartialAuthorizer;\n callbackUrl?: string;\n redirect?: boolean;\n }) {\n const { password, fetchUrl, email, redirect, callbackUrl = '/' } = options;\n\n this.#configureFetch(options);\n\n const resetPasswordUrl =\n fetchUrl ?? `${this.apiBaseUrl}/auth/reset-password`;\n\n let resetPasswordWithParams = resetPasswordUrl;\n\n const searchParams = new URLSearchParams();\n\n if (redirect === false) {\n searchParams.set('json', 'true');\n }\n if (searchParams.size > 0) {\n resetPasswordWithParams += `?${searchParams}`;\n }\n\n const data = await this.#sendData(resetPasswordWithParams, {\n method: 'post',\n body: JSON.stringify({\n email,\n password,\n redirectUrl: resetPasswordUrl,\n callbackUrl,\n }),\n });\n if (!data?.ok) {\n throw new Error(await data?.clone().text());\n }\n if (redirect === false) {\n const json = await data?.json();\n const { url: urlWithParams } = json;\n resetPasswordWithParams = `${urlWithParams}&redirect=false`;\n await this.#sendData(resetPasswordWithParams);\n\n return await this.#sendData(resetPasswordWithParams, {\n method: password ? 'put' : 'post',\n body: JSON.stringify({ email, password }),\n });\n }\n }\n\n #configureFetch(params: {\n baseUrl?: string;\n auth?: Authorizer | PartialAuthorizer;\n init?: RequestInit;\n }) {\n const { baseUrl, init, auth } = params;\n if (baseUrl) {\n this.baseUrl = baseUrl;\n }\n\n if (auth) {\n if (auth.requestInit) {\n this.requestInit = auth.requestInit;\n }\n if (auth.state?.baseUrl) {\n this.baseUrl = auth.state.baseUrl;\n }\n }\n\n if (init) {\n this.requestInit = init;\n }\n }\n}\nexport interface InternalUrl {\n /** @default \"http://localhost:3000\" */\n origin: string;\n /** @default \"localhost:3000\" */\n host: string;\n /** @default \"/api/auth\" */\n path: string;\n /** @default \"http://localhost:3000/api/auth\" */\n base: string;\n /** @default \"http://localhost:3000/api/auth\" */\n toString: () => string;\n}\n\nfunction parseUrl(url?: string): InternalUrl {\n let defaultUrl = new URL('http://localhost:3000');\n if (typeof window !== 'undefined') {\n defaultUrl = new URL(`${window.location.origin}/api`);\n }\n\n if (url && !url.startsWith('http')) {\n url = `https://${url}`;\n }\n\n const _url = new URL(url ?? defaultUrl);\n const path = (_url.pathname === '/' ? defaultUrl.pathname : _url.pathname)\n // Remove trailing slash\n .replace(/\\/$/, '');\n\n const base = `${_url.origin}${path}`;\n\n return {\n origin: _url.origin,\n host: _url.host,\n path,\n base,\n toString: () => base,\n };\n}\n\nexport const authorizer = new Authorizer();\n\nconst _auth = () => {\n return authorizer;\n};\n\nexport const auth: Authorizer = _auth();\n\nexport const getSession = async function getSession(params?: GetSessionParams) {\n return await auth.getSession(params);\n};\n\nexport const getCsrfToken = async function getCsrfToken(url?: string) {\n return auth.getCsrfToken(url);\n};\n\nexport const getProviders = async function getProviders() {\n return auth.getProviders();\n};\n\nexport const signOut: typeof authorizer.signOut = async function signOut(\n options\n) {\n return auth.signOut(options);\n};\n\nexport const signIn: typeof authorizer.signIn = async function signIn(\n provider,\n options,\n authParams\n) {\n return auth.signIn(provider, options, authParams);\n};\n\nexport const signUp: typeof authorizer.signUp = async function signUp(options) {\n return auth.signUp(options);\n};\n\nexport const resetPassword: typeof authorizer.resetPassword =\n async function resetPassword(options) {\n return auth.resetPassword(options);\n };\n\nexport const forgotPassword: typeof authorizer.forgotPassword =\n async function forgotPassword(options) {\n return auth.forgotPassword(options);\n };\n","import { NonErrorSession } from './types';\n\nexport function getStatus(\n load: boolean,\n sess: NonErrorSession | null | undefined\n) {\n if (load) {\n return 'loading';\n }\n if (sess) {\n return 'authenticated';\n }\n return 'unauthenticated';\n}\n"],"mappings":"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","names":["logger","authorizer","error","auth","getSession","getCsrfToken","getProviders","signOut","signIn","signUp","resetPassword","forgotPassword"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@niledatabase/client",
3
- "version": "5.0.0-alpha.9",
3
+ "version": "5.0.0",
4
4
  "license": "MIT",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -58,5 +58,5 @@
58
58
  "tsup": "^8.3.0",
59
59
  "typescript": "^5.3.2"
60
60
  },
61
- "gitHead": "0a9e4f3a9099ec5c76f55535b17c9dd32c5cc030"
61
+ "gitHead": "bc6ee6499ed130cb605ea2a373e0054072ea8fb0"
62
62
  }