124 lines
3.1 KiB
TypeScript
124 lines
3.1 KiB
TypeScript
import { Strategy } from 'passport';
|
|
import { DeepRequired } from 'ts-essentials';
|
|
import { PayloadRequest } from '../express/types';
|
|
import { Where, PayloadMongooseDocument } from '../types';
|
|
import { Payload } from '../payload';
|
|
|
|
export type Permission = {
|
|
permission: boolean
|
|
where?: Record<string, unknown>
|
|
}
|
|
|
|
export type FieldPermissions = {
|
|
create: {
|
|
permission: boolean
|
|
}
|
|
read: {
|
|
permission: boolean
|
|
}
|
|
update: {
|
|
permission: boolean
|
|
}
|
|
fields?: {
|
|
[field: string]: FieldPermissions
|
|
}
|
|
}
|
|
|
|
export type CollectionPermission = {
|
|
create: Permission
|
|
read: Permission
|
|
update: Permission
|
|
delete: Permission
|
|
readVersions?: Permission
|
|
fields: {
|
|
[field: string]: FieldPermissions
|
|
}
|
|
}
|
|
|
|
export type GlobalPermission = {
|
|
read: Permission
|
|
update: Permission
|
|
readVersions?: Permission
|
|
fields: {
|
|
[field: string]: FieldPermissions
|
|
}
|
|
}
|
|
|
|
export type Permissions = {
|
|
canAccessAdmin: boolean
|
|
collections: {
|
|
[collectionSlug: string]: CollectionPermission
|
|
}
|
|
globals?: {
|
|
[globalSlug: string]: GlobalPermission
|
|
}
|
|
}
|
|
|
|
export type User = {
|
|
id: string
|
|
email: string
|
|
collection: string
|
|
[key: string]: unknown
|
|
}
|
|
|
|
export interface UserDocument extends PayloadMongooseDocument {
|
|
setPassword: (pass: string) => Promise<void>
|
|
authenticate: (pass: string) => Promise<void>
|
|
resetPasswordExpiration: number
|
|
email: string
|
|
_verified?: boolean
|
|
}
|
|
|
|
type GenerateVerifyEmailHTML = (args: { req: PayloadRequest, token: string, user: any }) => Promise<string> | string
|
|
type GenerateVerifyEmailSubject = (args: { req: PayloadRequest, token: string, user: any }) => Promise<string> | string
|
|
|
|
type GenerateForgotPasswordEmailHTML = (args?: { req?: PayloadRequest, token?: string, user?: unknown }) => Promise<string> | string
|
|
type GenerateForgotPasswordEmailSubject = (args?: { req?: PayloadRequest, token?: string, user?: any }) => Promise<string> | string
|
|
|
|
type AuthStrategy = ((ctx: Payload) => Strategy) | Strategy;
|
|
|
|
export interface IncomingAuthType {
|
|
tokenExpiration?: number;
|
|
verify?:
|
|
| boolean
|
|
| {
|
|
generateEmailHTML?: GenerateVerifyEmailHTML;
|
|
generateEmailSubject?: GenerateVerifyEmailSubject;
|
|
};
|
|
maxLoginAttempts?: number;
|
|
lockTime?: number;
|
|
useAPIKey?: boolean;
|
|
depth?: number
|
|
cookies?: {
|
|
secure?: boolean;
|
|
sameSite?: boolean | 'none' | 'strict' | 'lax';
|
|
domain?: string;
|
|
}
|
|
forgotPassword?: {
|
|
generateEmailHTML?: GenerateForgotPasswordEmailHTML,
|
|
generateEmailSubject?: GenerateForgotPasswordEmailSubject,
|
|
}
|
|
disableLocalStrategy?: true
|
|
strategies?: {
|
|
name?: string
|
|
strategy: AuthStrategy
|
|
}[]
|
|
}
|
|
|
|
export type VerifyConfig = {
|
|
generateEmailHTML?: GenerateVerifyEmailHTML
|
|
generateEmailSubject?: GenerateVerifyEmailSubject
|
|
};
|
|
|
|
export interface Auth extends Omit<DeepRequired<IncomingAuthType>, 'verify' | 'forgotPassword'> {
|
|
verify?: VerifyConfig | boolean
|
|
forgotPassword?: {
|
|
generateEmailHTML?: GenerateForgotPasswordEmailHTML
|
|
generateEmailSubject?: GenerateForgotPasswordEmailSubject
|
|
}
|
|
}
|
|
|
|
export function hasWhereAccessResult(result: boolean | Where): result is Where {
|
|
return result && typeof result === 'object';
|
|
}
|