import { TokensPersistence } from '../modules/tokens'; import rootSaga from '../services/sagas'; import type { PetrusCustomConfig } from '../types'; /** * @category Configure * @example * ```ts * interface Credentials { * email: string; * password: string; * } * interface UserInfo { * id: string; * name: string; * } * * type RootState = ReturnType; * * declare module '@ackee/petrus' { * interface ConfigurePetrusCredentials { * value: Credentials; * } * * interface ConfigurePetrusUser { * value: UserInfo; * } * * interface ConfigurePetrusAppRootState { * value: BackgroundRootState; * } * } * * export const { reducer, saga } = configure({ * selector: state => state.auth, * handlers: { * authenticate(credentials: PetrusCredentials) { * const user: PetrusUser | undefined = { * id: '1', * name: 'Bob', * }; * * const tokens: PetrusTokens = { * accessToken: { * token: '...', * expiration: '...', * }, * refreshToken: { * token: '...', * }, * }; * * return { * user, * tokens, * }; * }, * refreshTokens(tokens: Required) { * const freshTokens: PetrusTokens = { * accessToken: { * token: '...', * expiration: '...', * }, * refreshToken: { * token: '...', * }, * }; * * return freshTokens; * }, * getAuthUser(tokens: PetrusTokens) { * const user: PetrusUser = { * id: '1', * name: 'Bob', * }; * * return user; * }, * }, * }); * ``` */ export declare function configure(customConfig: PetrusCustomConfig): { readonly reducer: import("redux").Reducer; entities: import("redux").CombinedState<{ user: any; flowType: import("..").FlowType; sessionState: import("..").AuthSession | null; tokens: import("../types").Tokens | null; tokensPersistence: TokensPersistence; }>; }>, import("redux").AnyAction>; readonly saga: typeof rootSaga; };