feat: isolates local api to local-only functions, converts it to ts generic for stronger typing

This commit is contained in:
James
2023-01-11 17:03:10 -05:00
parent 8de92dc6b9
commit d3d367c635
59 changed files with 175 additions and 165 deletions

View File

@@ -1,6 +1,6 @@
import formatName from '../../../graphql/utilities/formatName';
import access from '../../operations/access';
import { Payload } from '../../..';
import { Payload } from '../../../payload';
const formatConfigNames = (results, configs) => {
const formattedResults = { ...results };

View File

@@ -1,6 +1,6 @@
import passport from 'passport';
import AnonymousStrategy from 'passport-anonymous';
import { Payload } from '../index';
import { Payload } from '../payload';
import jwtStrategy from './strategies/jwt';
function initAuth(ctx: Payload): void {

View File

@@ -1,6 +1,6 @@
import { PayloadRequest } from '../../../express/types';
import forgotPassword, { Result } from '../forgotPassword';
import { Payload } from '../../..';
import { Payload } from '../../../payload';
import { getDataLoader } from '../../../collections/dataloader';
import i18n from '../../../translations/init';

View File

@@ -2,7 +2,7 @@ import { Response } from 'express';
import login, { Result } from '../login';
import { PayloadRequest } from '../../../express/types';
import { TypeWithID } from '../../../collections/config/types';
import { Payload } from '../../..';
import { Payload } from '../../../payload';
import { getDataLoader } from '../../../collections/dataloader';
import i18n from '../../../translations/init';
@@ -21,7 +21,7 @@ export type Options = {
showHiddenFields?: boolean
}
async function localLogin<T extends TypeWithID = any>(payload: Payload, options: Options): Promise<Result & { user: T}> {
async function localLogin<T extends TypeWithID = any>(payload: Payload, options: Options): Promise<Result & { user: T }> {
const {
collection: collectionSlug,
req = {} as PayloadRequest,

View File

@@ -1,4 +1,4 @@
import { Payload } from '../../..';
import { Payload } from '../../../payload';
import resetPassword, { Result } from '../resetPassword';
import { PayloadRequest } from '../../../express/types';
import { getDataLoader } from '../../../collections/dataloader';

View File

@@ -1,5 +1,5 @@
import { PayloadRequest } from '../../../express/types';
import { Payload } from '../../..';
import { Payload } from '../../../payload';
import unlock from '../unlock';
import { getDataLoader } from '../../../collections/dataloader';
import i18n from '../../../translations/init';

View File

@@ -1,4 +1,4 @@
import { Payload } from '../../../index';
import { Payload } from '../../../payload';
import verifyEmail from '../verifyEmail';
export type Options = {

View File

@@ -1,4 +1,4 @@
import { Payload } from '..';
import { Payload } from '../payload';
import { PayloadRequest } from '../express/types';
import { SanitizedConfig, EmailOptions } from '../config/types';
import { Collection } from '../collections/config/types';

View File

@@ -1,7 +1,7 @@
import PassportAPIKey from 'passport-headerapikey';
import crypto from 'crypto';
import { PayloadRequest } from '../../express/types';
import { Payload } from '../..';
import { Payload } from '../../payload';
import find from '../../collections/operations/find';
export default (payload: Payload, { Model, config }): PassportAPIKey => {

View File

@@ -1,7 +1,7 @@
import url from 'url';
import passportJwt, { StrategyOptions } from 'passport-jwt';
import { Strategy as PassportStrategy } from 'passport-strategy';
import { Payload } from '../..';
import { Payload } from '../../payload';
import getExtractJWT from '../getExtractJWT';
const JwtStrategy = passportJwt.Strategy;

View File

@@ -2,7 +2,7 @@ import { Strategy } from 'passport';
import { DeepRequired } from 'ts-essentials';
import { PayloadRequest } from '../express/types';
import { Where, PayloadMongooseDocument } from '../types';
import { Payload } from '..';
import { Payload } from '../payload';
export type Permission = {
permission: boolean

View File

@@ -28,7 +28,7 @@ import resetPassword from '../../auth/graphql/resolvers/resetPassword';
import verifyEmail from '../../auth/graphql/resolvers/verifyEmail';
import unlock from '../../auth/graphql/resolvers/unlock';
import refresh from '../../auth/graphql/resolvers/refresh';
import { Payload } from '../..';
import { Payload } from '../../payload';
import { Field, fieldAffectsData } from '../../fields/config/types';
import buildObjectType, { ObjectTypeConfig } from '../../graphql/schema/buildObjectType';
import buildWhereInputType from '../../graphql/schema/buildWhereInputType';

View File

@@ -1,5 +1,5 @@
import { UploadedFile } from 'express-fileupload';
import { Payload } from '../../..';
import { Payload } from '../../../payload';
import { PayloadRequest } from '../../../express/types';
import { Document } from '../../../types';
import getFileByPath from '../../../uploads/getFileByPath';

View File

@@ -1,7 +1,7 @@
import { TypeWithID } from '../../config/types';
import { Document } from '../../../types';
import { PayloadRequest } from '../../../express/types';
import { Payload } from '../../../index';
import { Payload } from '../../../payload';
import deleteOperation from '../delete';
import { getDataLoader } from '../../dataloader';
import i18n from '../../../translations/init';

View File

@@ -1,7 +1,7 @@
import { TypeWithID } from '../../config/types';
import { PaginatedDocs } from '../../../mongoose/types';
import { Document, Where } from '../../../types';
import { Payload } from '../../..';
import { Payload } from '../../../payload';
import { PayloadRequest } from '../../../express/types';
import find from '../find';
import { getDataLoader } from '../../dataloader';

View File

@@ -2,7 +2,7 @@ import { TypeWithID } from '../../config/types';
import { PayloadRequest } from '../../../express/types';
import { Document } from '../../../types';
import findByID from '../findByID';
import { Payload } from '../../..';
import { Payload } from '../../../payload';
import { getDataLoader } from '../../dataloader';
import i18n from '../../../translations/init';

View File

@@ -1,4 +1,4 @@
import { Payload } from '../../..';
import { Payload } from '../../../payload';
import { Document } from '../../../types';
import { PayloadRequest } from '../../../express/types';
import { TypeWithVersion } from '../../../versions/types';

View File

@@ -1,4 +1,4 @@
import { Payload } from '../../..';
import { Payload } from '../../../payload';
import { Document, Where } from '../../../types';
import { PaginatedDocs } from '../../../mongoose/types';
import { TypeWithVersion } from '../../../versions/types';

View File

@@ -1,4 +1,4 @@
import { Payload } from '../../..';
import { Payload } from '../../../payload';
import { PayloadRequest } from '../../../express/types';
import { Document } from '../../../types';
import { TypeWithVersion } from '../../../versions/types';

View File

@@ -1,4 +1,4 @@
import { Payload } from '../../..';
import { Payload } from '../../../payload';
import { Document } from '../../../types';
import getFileByPath from '../../../uploads/getFileByPath';
import update from '../update';

View File

@@ -9,7 +9,7 @@ import { ConnectOptions } from 'mongoose';
import React from 'react';
import { LoggerOptions } from 'pino';
import type { InitOptions as i18nInitOptions } from 'i18next';
import { Payload } from '..';
import { Payload } from '../payload';
import {
AfterErrorHook,
CollectionConfig,

View File

@@ -3,7 +3,7 @@ import compression from 'compression';
import history from 'connect-history-api-fallback';
import path from 'path';
import initWebpack from '../webpack/init';
import { Payload } from '../index';
import { Payload } from '../payload';
const router = express.Router();

View File

@@ -9,7 +9,7 @@ import rateLimit from 'express-rate-limit';
import localizationMiddleware from '../../localization/middleware';
import authenticate from './authenticate';
import identifyAPI from './identifyAPI';
import { Payload } from '../..';
import { Payload } from '../../payload';
import { PayloadRequest } from '../types';
import corsHeaders from './corsHeaders';
import convertPayload from './convertPayload';

View File

@@ -3,7 +3,7 @@ import passport from 'passport';
import path from 'path';
import getExecuteStaticAccess from '../auth/getExecuteStaticAccess';
import authenticate from './middleware/authenticate';
import { Payload } from '../index';
import { Payload } from '../payload';
import corsHeaders from './middleware/corsHeaders';
function initStatic(ctx: Payload): void {

View File

@@ -2,7 +2,7 @@ import { Request } from 'express';
import type { i18n as Ii18n, TFunction } from 'i18next';
import DataLoader from 'dataloader';
import { UploadedFile } from 'express-fileupload';
import { Payload } from '../index';
import { Payload } from '../payload';
import { Collection } from '../collections/config/types';
import { User } from '../auth/types';
import { Document } from '../types';

View File

@@ -9,7 +9,7 @@ import { PayloadRequest } from '../../express/types';
import { ConditionalDateProps } from '../../admin/components/elements/DatePicker/types';
import { Description } from '../../admin/components/forms/FieldDescription/types';
import { User } from '../../auth';
import { Payload } from '../..';
import { Payload } from '../../payload';
import { RowLabel } from '../../admin/components/forms/RowLabel/types';
export type FieldHookArgs<T extends TypeWithID = any, P = any, S = any> = {

View File

@@ -9,7 +9,7 @@ import updateResolver from './resolvers/update';
import findVersionByIDResolver from './resolvers/findVersionByID';
import findVersionsResolver from './resolvers/findVersions';
import restoreVersionResolver from './resolvers/restoreVersion';
import { Payload } from '../..';
import { Payload } from '../../payload';
import buildObjectType from '../../graphql/schema/buildObjectType';
import buildMutationInputType from '../../graphql/schema/buildMutationInputType';
import buildWhereInputType from '../../graphql/schema/buildWhereInputType';

View File

@@ -1,4 +1,4 @@
import { Payload } from '../../..';
import { Payload } from '../../../payload';
import { getDataLoader } from '../../../collections/dataloader';
import { PayloadRequest } from '../../../express/types';
import { Document } from '../../../types';

View File

@@ -1,4 +1,4 @@
import { Payload } from '../../..';
import { Payload } from '../../../payload';
import { getDataLoader } from '../../../collections/dataloader';
import { PayloadRequest } from '../../../express/types';
import { Document } from '../../../types';

View File

@@ -1,7 +1,7 @@
import { Document, Where } from '../../../types';
import { PaginatedDocs } from '../../../mongoose/types';
import { TypeWithVersion } from '../../../versions/types';
import { Payload } from '../../..';
import { Payload } from '../../../payload';
import { PayloadRequest } from '../../../express/types';
import findVersions from '../findVersions';
import { getDataLoader } from '../../../collections/dataloader';

View File

@@ -1,4 +1,4 @@
import { Payload } from '../../..';
import { Payload } from '../../../payload';
import { getDataLoader } from '../../../collections/dataloader';
import { PayloadRequest } from '../../../express/types';
import { Document } from '../../../types';

View File

@@ -1,4 +1,4 @@
import { Payload } from '../../..';
import { Payload } from '../../../payload';
import { Document } from '../../../types';
import { PayloadRequest } from '../../../express/types';
import { TypeWithID } from '../../config/types';

View File

@@ -1,5 +1,5 @@
import graphQLPlayground from 'graphql-playground-middleware-express';
import { Payload } from '../index';
import { Payload } from '../payload';
function initPlayground(ctx: Payload): void {
if ((!ctx.config.graphQL.disable && !ctx.config.graphQL.disablePlaygroundInProduction && process.env.NODE_ENV === 'production') || process.env.NODE_ENV !== 'production') {

View File

@@ -2,7 +2,7 @@
import * as GraphQL from 'graphql';
import { GraphQLObjectType, GraphQLSchema } from 'graphql';
import queryComplexity, { fieldExtensionsEstimator, simpleEstimator } from 'graphql-query-complexity';
import { Payload } from '..';
import { Payload } from '../payload';
import buildLocaleInputType from './schema/buildLocaleInputType';
import buildFallbackLocaleInputType from './schema/buildFallbackLocaleInputType';
import initCollections from '../collections/graphql/init';

View File

@@ -1,5 +1,5 @@
/* eslint-disable no-param-reassign */
import { Payload } from '../..';
import { Payload } from '../../payload';
import { Block } from '../../fields/config/types';
import buildObjectType from './buildObjectType';
import { toWords } from '../../utilities/formatLabels';

View File

@@ -18,7 +18,7 @@ import formatName from '../utilities/formatName';
import combineParentName from '../utilities/combineParentName';
import { ArrayField, CodeField, JSONField, DateField, EmailField, Field, fieldAffectsData, GroupField, NumberField, PointField, RadioField, RelationshipField, RichTextField, RowField, SelectField, TextareaField, TextField, UploadField, CollapsibleField, TabsField, CheckboxField, BlockField, tabHasName } from '../../fields/config/types';
import { toWords } from '../../utilities/formatLabels';
import { Payload } from '../../index';
import { Payload } from '../../payload';
import { SanitizedCollectionConfig } from '../../collections/config/types';
import { groupOrTabHasRequiredSubfield } from '../../utilities/groupOrTabHasRequiredSubfield';

View File

@@ -46,7 +46,7 @@ import withNullableType from './withNullableType';
import { toWords } from '../../utilities/formatLabels';
import createRichTextRelationshipPromise from '../../fields/richText/richTextRelationshipPromise';
import formatOptions from '../utilities/formatOptions';
import { Payload } from '../..';
import { Payload } from '../../payload';
import buildWhereInputType from './buildWhereInputType';
import buildBlockType from './buildBlockType';
import isFieldNullable from './isFieldNullable';

View File

@@ -5,7 +5,7 @@ import formatName from '../utilities/formatName';
import { CollectionConfig, SanitizedCollectionConfig } from '../../collections/config/types';
import { GlobalConfig, SanitizedGlobalConfig } from '../../globals/config/types';
import { Field } from '../../fields/config/types';
import { Payload } from '../..';
import { Payload } from '../../payload';
import { toWords } from '../../utilities/formatLabels';
type OperationType = 'create' | 'read' | 'update' | 'delete' | 'unlock' | 'readVersions';

View File

@@ -2,12 +2,21 @@ import {
InitOptions,
} from './config/types';
import { initHTTP } from './initHTTP';
import { Payload, getPayload } from './payload';
import { Payload } from './payload';
export { getPayload } from './payload';
require('isomorphic-fetch');
export const init = async <T = any>(options: InitOptions): Promise<Payload<T>> => {
return initHTTP<T>(options);
};
export class PayloadHTTP extends Payload {
async init<T = any>(options: InitOptions): Promise<Payload<T>> {
const payload = await initHTTP<T>(options);
Object.assign(this, payload);
return payload;
}
}
export default getPayload;
const payload = new PayloadHTTP();
export default payload;
module.exports = payload;

View File

@@ -23,62 +23,64 @@ import { Payload, getPayload } from './payload';
export const initHTTP = async <T>(options: InitOptions): Promise<Payload<T>> => {
const payload = await getPayload<T>(options);
payload.router = express.Router();
payload.router.use(...expressMiddleware(payload));
initAuth(payload);
if (!options.local) {
payload.router = express.Router();
payload.router.use(...expressMiddleware(payload));
initAuth(payload);
initCollectionsHTTP(payload);
initGlobalsHTTP(payload);
initCollectionsHTTP(payload);
initGlobalsHTTP(payload);
options.express.use((req: PayloadRequest, res, next) => {
req.payload = payload;
next();
});
options.express.use((req: PayloadRequest, res, next) => {
req.payload = payload;
next();
});
options.express.use((req: PayloadRequest, res: Response, next: NextFunction): void => {
req.payloadDataLoader = getDataLoader(req);
return next();
});
options.express.use((req: PayloadRequest, res: Response, next: NextFunction): void => {
req.payloadDataLoader = getDataLoader(req);
return next();
});
payload.express = options.express;
payload.express = options.express;
if (payload.config.rateLimit.trustProxy) {
payload.express.set('trust proxy', 1);
if (payload.config.rateLimit.trustProxy) {
payload.express.set('trust proxy', 1);
}
initAdmin(payload);
initPreferences(payload);
payload.router.get('/access', access);
if (!payload.config.graphQL.disable) {
payload.router.use(
payload.config.routes.graphQL,
(req, res, next): void => {
if (req.method === 'OPTIONS') {
res.sendStatus(204);
} else {
next();
}
},
identifyAPI('GraphQL'),
(req: PayloadRequest, res: Response) => graphQLHandler(req, res)(req, res),
);
initGraphQLPlayground(payload);
}
mountEndpoints(options.express, payload.router, payload.config.endpoints);
// Bind router to API
payload.express.use(payload.config.routes.api, payload.router);
// Enable static routes for all collections permitting upload
initStatic(payload);
payload.errorHandler = errorHandler(payload.config, payload.logger);
payload.router.use(payload.errorHandler);
payload.authenticate = authenticate(payload.config);
}
initAdmin(payload);
initPreferences(payload);
payload.router.get('/access', access);
if (!payload.config.graphQL.disable) {
payload.router.use(
payload.config.routes.graphQL,
(req, res, next): void => {
if (req.method === 'OPTIONS') {
res.sendStatus(204);
} else {
next();
}
},
identifyAPI('GraphQL'),
(req: PayloadRequest, res: Response) => graphQLHandler(req, res)(req, res),
);
initGraphQLPlayground(payload);
}
mountEndpoints(options.express, payload.router, payload.config.endpoints);
// Bind router to API
payload.express.use(payload.config.routes.api, payload.router);
// Enable static routes for all collections permitting upload
initStatic(payload);
payload.errorHandler = errorHandler(payload.config, payload.logger);
payload.router.use(payload.errorHandler);
payload.authenticate = authenticate(payload.config);
return payload;
};

View File

@@ -9,7 +9,7 @@ import { DateTimeResolver } from 'graphql-scalars';
import findOne from '../operations/findOne';
import update from '../operations/update';
import deleteOperation from '../operations/delete';
import { Payload } from '../..';
import { Payload } from '../../payload';
function initCollectionsGraphQL(payload: Payload): void {
const valueType = GraphQLJSON;

View File

@@ -2,7 +2,7 @@ import type { TFunction } from 'i18next';
import { FileUploadError } from '../errors';
import saveBufferToFile from './saveBufferToFile';
import { FileToSave } from './types';
import { Payload } from '..';
import { Payload } from '../payload';
export const uploadFiles = async (payload: Payload, files: FileToSave[], t: TFunction): Promise<void> => {
try {

View File

@@ -1,5 +1,5 @@
import { sendEvent } from '..';
import { Payload } from '../../..';
import { Payload } from '../../../payload';
export type ServerInitEvent = {
type: 'server-init'

View File

@@ -3,7 +3,7 @@ import Conf from 'conf';
import { randomBytes } from 'crypto';
import findUp from 'find-up';
import fs from 'fs';
import { Payload } from '../../index';
import { Payload } from '../../payload';
import { ServerInitEvent } from './events/serverInit';
import { AdminInitEvent } from './events/adminInit';
import { oneWayHash } from './oneWayHash';
@@ -28,7 +28,7 @@ type Args = {
event: TelemetryEvent
}
export const sendEvent = async ({ payload, event } : Args): Promise<void> => {
export const sendEvent = async ({ payload, event }: Args): Promise<void> => {
if (payload.config.telemetry !== false) {
try {
const packageJSON = await getPackageJSON();
@@ -49,7 +49,7 @@ export const sendEvent = async ({ payload, event } : Args): Promise<void> => {
body: JSON.stringify({ ...baseEvent, ...event }),
});
} catch (_) {
// Eat any errors in sending telemetry event
// Eat any errors in sending telemetry event
}
}
};

View File

@@ -1,4 +1,4 @@
import { Payload } from '..';
import { Payload } from '../payload';
import { SanitizedCollectionConfig } from '../collections/config/types';
import { SanitizedGlobalConfig } from '../globals/config/types';
import { TypeWithVersion } from './types';

View File

@@ -1,6 +1,6 @@
import { AccessResult } from '../../config/types';
import { Where } from '../../types';
import { Payload } from '../..';
import { Payload } from '../../payload';
import { PaginatedDocs } from '../../mongoose/types';
import { Collection, CollectionModel, TypeWithID } from '../../collections/config/types';
import { hasWhereAccessResult } from '../../auth';

View File

@@ -1,4 +1,4 @@
import { Payload } from '../..';
import { Payload } from '../../payload';
import { docHasTimestamps, Where } from '../../types';
import { hasWhereAccessResult } from '../../auth';
import { AccessResult } from '../../config/types';

View File

@@ -1,4 +1,4 @@
import { Payload } from '../..';
import { Payload } from '../../payload';
import { SanitizedCollectionConfig } from '../../collections/config/types';
import { enforceMaxVersions } from '../enforceMaxVersions';
import { PayloadRequest } from '../../express/types';
@@ -46,7 +46,7 @@ export const saveCollectionDraft = async ({
},
{ new: true, lean: true },
);
// Otherwise, create a new one
// Otherwise, create a new one
} else {
result = await VersionsModel.create({
parent: id,

View File

@@ -1,4 +1,4 @@
import { Payload } from '../..';
import { Payload } from '../../payload';
import { enforceMaxVersions } from '../enforceMaxVersions';
import { SanitizedGlobalConfig } from '../../globals/config/types';
@@ -40,7 +40,7 @@ export const saveGlobalDraft = async ({
},
{ new: true, lean: true },
);
// Otherwise, create a new one
// Otherwise, create a new one
} else {
result = await VersionsModel.create({
version: dataAsDraft,

View File

@@ -1,4 +1,4 @@
import { Payload } from '..';
import { Payload } from '../payload';
import { CollectionModel } from '../collections/config/types';
type Args = {

View File

@@ -1,4 +1,4 @@
import { Payload } from '..';
import { Payload } from '../payload';
import { SanitizedCollectionConfig } from '../collections/config/types';
import { enforceMaxVersions } from './enforceMaxVersions';
import { PayloadRequest } from '../express/types';
@@ -34,14 +34,14 @@ export const ensurePublishedCollectionVersion = async ({
$gt: docWithLocales.updatedAt,
},
},
{},
{
lean: true,
leanWithId: true,
sort: {
updatedAt: 'desc',
},
});
{},
{
lean: true,
leanWithId: true,
sort: {
updatedAt: 'desc',
},
});
if (moreRecentDrafts?.length === 0) {
const version = await afterRead({

View File

@@ -1,4 +1,4 @@
import { Payload } from '..';
import { Payload } from '../payload';
import { enforceMaxVersions } from './enforceMaxVersions';
import { PayloadRequest } from '../express/types';
import { SanitizedGlobalConfig } from '../globals/config/types';
@@ -29,14 +29,14 @@ export const ensurePublishedGlobalVersion = async ({
$gt: docWithLocales.updatedAt,
},
},
{},
{
lean: true,
leanWithId: true,
sort: {
updatedAt: 'desc',
},
});
{},
{
lean: true,
leanWithId: true,
sort: {
updatedAt: 'desc',
},
});
if (moreRecentDrafts?.length === 0) {
const version = await afterRead({

View File

@@ -1,5 +1,5 @@
import { Document } from '../types';
import { Payload } from '..';
import { Payload } from '../payload';
import { Collection, TypeWithID } from '../collections/config/types';
type Args = {

View File

@@ -1,4 +1,4 @@
import { Payload } from '..';
import { Payload } from '../payload';
import { SanitizedCollectionConfig } from '../collections/config/types';
import { enforceMaxVersions } from './enforceMaxVersions';
import { PayloadRequest } from '../express/types';
@@ -33,14 +33,14 @@ export const saveCollectionVersion = async ({
$gt: docWithLocales.updatedAt,
},
},
{},
{
lean: true,
leanWithId: true,
sort: {
updatedAt: 'desc',
},
});
{},
{
lean: true,
leanWithId: true,
sort: {
updatedAt: 'desc',
},
});
if (latestVersion) {
// If the latest version is a draft, no need to re-save it

View File

@@ -1,4 +1,4 @@
import { Payload } from '..';
import { Payload } from '../payload';
import { enforceMaxVersions } from './enforceMaxVersions';
import { PayloadRequest } from '../express/types';
import { SanitizedGlobalConfig } from '../globals/config/types';
@@ -28,14 +28,14 @@ export const saveGlobalVersion = async ({
$gt: docWithLocales.updatedAt,
},
},
{},
{
lean: true,
leanWithId: true,
sort: {
updatedAt: 'desc',
},
});
{},
{
lean: true,
leanWithId: true,
sort: {
updatedAt: 'desc',
},
});
if (latestVersion) {
// If the latest version is a draft, no need to re-save it

View File

@@ -1,13 +1,12 @@
import { Request } from 'express';
import { Strategy } from 'passport-strategy';
import { Payload } from '../../../src';
import { Payload } from '../../../src/payload';
import { buildConfig } from '../../buildConfig';
export const slug = 'users';
export const strategyName = 'test-local'
export const strategyName = 'test-local';
export class CustomStrategy extends Strategy {
ctx: Payload;
constructor(ctx: Payload) {
@@ -16,29 +15,29 @@ export class CustomStrategy extends Strategy {
}
authenticate(req: Request, options?: any): void {
if(!req.headers.code && !req.headers.secret) {
if (!req.headers.code && !req.headers.secret) {
return this.success(null);
}
this.ctx.find({
collection: slug,
where: {
code: {
equals: req.headers.code
equals: req.headers.code,
},
secret: {
equals: req.headers.secret
}
}
equals: req.headers.secret,
},
},
}).then((users) => {
if(users.docs && users.docs.length) {
if (users.docs && users.docs.length) {
const user = users.docs[0];
user.collection = slug;
user._strategy = `${slug}-${strategyName}`;
this.success(user)
this.success(user);
} else {
this.error(null)
this.error(null);
}
})
});
}
}
@@ -54,12 +53,12 @@ export default buildConfig({
strategies: [
{
name: strategyName,
strategy: (ctx) => new CustomStrategy(ctx)
}
]
strategy: (ctx) => new CustomStrategy(ctx),
},
],
},
access: {
create: () => true
create: () => true,
},
fields: [
{

View File

@@ -1,12 +1,12 @@
import express from 'express';
import { v4 as uuid } from 'uuid';
import { init as initPayload } from '../src';
import payload from '../src';
const expressApp = express();
const startDev = async () => {
const payload = await initPayload({
await payload.init({
secret: uuid(),
mongoURL: process.env.MONGO_URL || 'mongodb://localhost/payload',
express: expressApp,

View File

@@ -40,7 +40,7 @@ export async function initPayloadTest(options: Options): Promise<{ serverURL: st
initOptions.express = express();
}
await payload.initAsync(initOptions);
await payload.init(initOptions);
if (initOptions.express) {
initOptions.express.listen(port);

View File

@@ -1,4 +1,4 @@
import { Payload } from '../../../../src';
import { Payload } from '../../../../src/payload';
import { BeforeLoginHook, CollectionConfig } from '../../../../src/collections/config/types';
import { AuthenticationError } from '../../../../src/errors';
import { devUser, regularUser } from '../../../credentials';