payload 1.1.5 → 1.1.6
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/admin/components/elements/FileDetails/index.js +1 -1
- package/dist/admin/components/elements/RenderTitle/index.js +1 -4
- package/dist/admin/components/forms/field-types/Relationship/index.js +1 -1
- package/dist/admin/components/forms/field-types/RichText/RichText.js +25 -2
- package/dist/admin/components/forms/field-types/RichText/index.scss +24 -0
- package/dist/admin/components/forms/field-types/Select/index.js +2 -2
- package/dist/admin/components/forms/field-types/Textarea/index.scss +1 -0
- package/dist/admin/components/forms/field-types/Upload/index.scss +4 -4
- package/dist/admin/scss/app.scss +1 -0
- package/dist/auth/operations/access.js +3 -3
- package/dist/collections/config/types.d.ts +1 -1
- package/dist/collections/operations/create.js +12 -4
- package/dist/collections/operations/find.js +9 -2
- package/dist/collections/operations/findByID.js +2 -1
- package/dist/collections/operations/findVersions.js +9 -2
- package/dist/collections/operations/update.js +12 -4
- package/dist/fields/hooks/afterRead/promise.js +3 -3
- package/dist/globals/operations/findOne.js +2 -1
- package/dist/globals/operations/findVersions.js +9 -2
- package/dist/mongoose/buildSortParam.d.ts +11 -1
- package/dist/mongoose/buildSortParam.js +13 -3
- package/dist/mongoose/getLocalizedSortProperty.d.ts +11 -0
- package/dist/mongoose/getLocalizedSortProperty.js +69 -0
- package/dist/mongoose/getLocalizedSortProperty.spec.d.ts +1 -0
- package/dist/mongoose/getLocalizedSortProperty.spec.js +167 -0
- package/dist/uploads/{uploadFile.d.ts → generateFileData.d.ts} +7 -2
- package/dist/uploads/generateFileData.js +101 -0
- package/dist/uploads/imageResizer.d.ts +6 -2
- package/dist/uploads/imageResizer.js +25 -19
- package/dist/uploads/types.d.ts +4 -0
- package/dist/uploads/uploadFiles.d.ts +3 -0
- package/dist/uploads/uploadFiles.js +21 -0
- package/dist/utilities/flattenTopLevelFields.js +2 -2
- package/dist/versions/drafts/replaceWithDraftIfAvailable.d.ts +2 -1
- package/dist/versions/drafts/replaceWithDraftIfAvailable.js +51 -50
- package/docs/authentication/config.mdx +2 -0
- package/docs/rest-api/overview.mdx +15 -13
- package/package.json +1 -1
- package/CHANGELOG.md +0 -1957
- package/dist/uploads/uploadFile.js +0 -92
|
@@ -19,7 +19,8 @@ function getOutputImage(sourceImage, size) {
|
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
21
|
async function resizeAndSave({ req, file, dimensions, staticPath, config, savedFilename, }) {
|
|
22
|
-
const { imageSizes
|
|
22
|
+
const { imageSizes } = config.upload;
|
|
23
|
+
const sizesToSave = [];
|
|
23
24
|
const sizes = imageSizes
|
|
24
25
|
.filter((desiredSize) => needsResize(desiredSize, dimensions))
|
|
25
26
|
.map(async (desiredSize) => {
|
|
@@ -31,43 +32,48 @@ async function resizeAndSave({ req, file, dimensions, staticPath, config, savedF
|
|
|
31
32
|
resolveWithObject: true,
|
|
32
33
|
});
|
|
33
34
|
req.payloadUploadSizes[desiredSize.name] = bufferObject.data;
|
|
35
|
+
const mimeType = (await (0, file_type_1.fromBuffer)(bufferObject.data));
|
|
34
36
|
const outputImage = getOutputImage(savedFilename, desiredSize);
|
|
35
|
-
const imageNameWithDimensions = createImageName(outputImage, bufferObject);
|
|
37
|
+
const imageNameWithDimensions = createImageName(outputImage, bufferObject, mimeType.ext);
|
|
36
38
|
const imagePath = `${staticPath}/${imageNameWithDimensions}`;
|
|
37
39
|
const fileAlreadyExists = await (0, fileExists_1.default)(imagePath);
|
|
38
40
|
if (fileAlreadyExists) {
|
|
39
41
|
fs_1.default.unlinkSync(imagePath);
|
|
40
42
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
43
|
+
sizesToSave.push({
|
|
44
|
+
path: imagePath,
|
|
45
|
+
buffer: bufferObject.data,
|
|
46
|
+
});
|
|
44
47
|
return {
|
|
45
48
|
name: desiredSize.name,
|
|
46
49
|
width: bufferObject.info.width,
|
|
47
50
|
height: bufferObject.info.height,
|
|
48
51
|
filename: imageNameWithDimensions,
|
|
49
52
|
filesize: bufferObject.info.size,
|
|
50
|
-
mimeType:
|
|
53
|
+
mimeType: mimeType.mime,
|
|
51
54
|
};
|
|
52
55
|
});
|
|
53
56
|
const savedSizes = await Promise.all(sizes);
|
|
54
|
-
return
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
57
|
+
return {
|
|
58
|
+
sizeData: savedSizes.reduce((results, size) => ({
|
|
59
|
+
...results,
|
|
60
|
+
[size.name]: {
|
|
61
|
+
width: size.width,
|
|
62
|
+
height: size.height,
|
|
63
|
+
filename: size.filename,
|
|
64
|
+
mimeType: size.mimeType,
|
|
65
|
+
filesize: size.filesize,
|
|
66
|
+
},
|
|
67
|
+
}), {}),
|
|
68
|
+
sizesToSave,
|
|
69
|
+
};
|
|
64
70
|
}
|
|
65
71
|
exports.default = resizeAndSave;
|
|
66
|
-
function createImageName(outputImage, bufferObject) {
|
|
67
|
-
return `${outputImage.name}-${bufferObject.info.width}x${bufferObject.info.height}.${
|
|
72
|
+
function createImageName(outputImage, bufferObject, extension) {
|
|
73
|
+
return `${outputImage.name}-${bufferObject.info.width}x${bufferObject.info.height}.${extension}`;
|
|
68
74
|
}
|
|
69
75
|
function needsResize(desiredSize, dimensions) {
|
|
70
76
|
return (typeof desiredSize.width === 'number' && desiredSize.width <= dimensions.width)
|
|
71
77
|
|| (typeof desiredSize.height === 'number' && desiredSize.height <= dimensions.height);
|
|
72
78
|
}
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2VSZXNpemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3VwbG9hZHMvaW1hZ2VSZXNpemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEseUNBQXVDO0FBQ3ZDLDRDQUFvQjtBQUNwQiwwRUFBeUM7QUFDekMsa0RBQTBCO0FBRzFCLDhEQUFzQztBQTBCdEMsU0FBUyxjQUFjLENBQUMsV0FBbUIsRUFBRSxJQUFlO0lBQzFELE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDL0MsTUFBTSxJQUFJLEdBQUcsSUFBQSwyQkFBUSxFQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQztJQUU3RixPQUFPO1FBQ0wsSUFBSTtRQUNKLFNBQVM7UUFDVCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7UUFDakIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO0tBQ3BCLENBQUM7QUFDSixDQUFDO0FBRWMsS0FBSyxVQUFVLGFBQWEsQ0FBQyxFQUMxQyxHQUFHLEVBQ0gsSUFBSSxFQUNKLFVBQVUsRUFDVixVQUFVLEVBQ1YsTUFBTSxFQUNOLGFBQWEsR0FDUjtJQUNMLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3JDLE1BQU0sV0FBVyxHQUFpQixFQUFFLENBQUM7SUFFckMsTUFBTSxLQUFLLEdBQUcsVUFBVTtTQUNyQixNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDN0QsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRTtRQUN6QixJQUFJLE9BQU8sR0FBRyxJQUFBLGVBQUssRUFBQyxJQUFJLENBQUMs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
|
package/dist/uploads/types.d.ts
CHANGED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.uploadFiles = void 0;
|
|
7
|
+
const errors_1 = require("../errors");
|
|
8
|
+
const saveBufferToFile_1 = __importDefault(require("./saveBufferToFile"));
|
|
9
|
+
const uploadFiles = async (payload, files) => {
|
|
10
|
+
try {
|
|
11
|
+
await Promise.all(files.map(async ({ buffer, path }) => {
|
|
12
|
+
await (0, saveBufferToFile_1.default)(buffer, path);
|
|
13
|
+
}));
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
payload.logger.error(err);
|
|
17
|
+
throw new errors_1.FileUploadError();
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
exports.uploadFiles = uploadFiles;
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkRmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXBsb2Fkcy91cGxvYWRGaWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxzQ0FBNEM7QUFDNUMsMEVBQWtEO0FBSTNDLE1BQU0sV0FBVyxHQUFHLEtBQUssRUFBRSxPQUFnQixFQUFFLEtBQW1CLEVBQWlCLEVBQUU7SUFDeEYsSUFBSTtRQUNGLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQ3JELE1BQU0sSUFBQSwwQkFBZ0IsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNMO0lBQUMsT0FBTyxHQUFHLEVBQUU7UUFDWixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQixNQUFNLElBQUksd0JBQWUsRUFBRSxDQUFDO0tBQzdCO0FBQ0gsQ0FBQyxDQUFDO0FBVFcsUUFBQSxXQUFXLGVBU3RCIn0=
|
|
@@ -21,7 +21,7 @@ const flattenFields = (fields, keepPresentationalFields) => {
|
|
|
21
21
|
...field.tabs.reduce((tabFields, tab) => {
|
|
22
22
|
return [
|
|
23
23
|
...tabFields,
|
|
24
|
-
...((0, types_1.tabHasName)(tab) ? [tab] : flattenFields(tab.fields, keepPresentationalFields)),
|
|
24
|
+
...((0, types_1.tabHasName)(tab) ? [{ ...tab, type: 'tab' }] : flattenFields(tab.fields, keepPresentationalFields)),
|
|
25
25
|
];
|
|
26
26
|
}, []),
|
|
27
27
|
];
|
|
@@ -30,4 +30,4 @@ const flattenFields = (fields, keepPresentationalFields) => {
|
|
|
30
30
|
}, []);
|
|
31
31
|
};
|
|
32
32
|
exports.default = flattenFields;
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhdHRlblRvcExldmVsRmllbGRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxpdGllcy9mbGF0dGVuVG9wTGV2ZWxGaWVsZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrREFRZ0M7QUFFaEMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxNQUFlLEVBQUUsd0JBQWtDLEVBQW9ELEVBQUU7SUFDOUgsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzFDLElBQUksSUFBQSx3QkFBZ0IsRUFBQyxLQUFLLENBQUMsSUFBSSxDQUFDLHdCQUF3QixJQUFJLElBQUEsaUNBQXlCLEVBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUM3RixPQUFPO2dCQUNMLEdBQUcsV0FBVztnQkFDZCxLQUFLO2FBQ04sQ0FBQztTQUNIO1FBRUQsSUFBSSxJQUFBLHlCQUFpQixFQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzVCLE9BQU87Z0JBQ0wsR0FBRyxXQUFXO2dCQUNkLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsd0JBQXdCLENBQUM7YUFDekQsQ0FBQztTQUNIO1FBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUN6QixPQUFPO2dCQUNMLEdBQUcsV0FBVztnQkFDZCxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxFQUFFO29CQUN0QyxPQUFPO3dCQUNMLEdBQUcsU0FBUzt3QkFDWixHQUFHLENBQUMsSUFBQSxrQkFBVSxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLHdCQUF3QixDQUFDLENBQUM7cUJBQ3ZHLENBQUM7Z0JBQ0osQ0FBQyxFQUFFLEVBQUUsQ0FBQzthQUNQLENBQUM7U0FDSDtRQUVELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNULENBQUMsQ0FBQztBQUVGLGtCQUFlLGFBQWEsQ0FBQyJ9
|
|
@@ -5,9 +5,10 @@ import { SanitizedGlobalConfig } from '../../globals/config/types';
|
|
|
5
5
|
declare type Arguments<T> = {
|
|
6
6
|
payload: Payload;
|
|
7
7
|
entity: SanitizedCollectionConfig | SanitizedGlobalConfig;
|
|
8
|
+
entityType: 'collection' | 'global';
|
|
8
9
|
doc: T;
|
|
9
10
|
locale: string;
|
|
10
11
|
accessResult: AccessResult;
|
|
11
12
|
};
|
|
12
|
-
declare const replaceWithDraftIfAvailable: <T extends TypeWithID>({ payload, entity, doc, locale, accessResult, }: Arguments<T>) => Promise<T>;
|
|
13
|
+
declare const replaceWithDraftIfAvailable: <T extends TypeWithID>({ payload, entity, entityType, doc, locale, accessResult, }: Arguments<T>) => Promise<T>;
|
|
13
14
|
export default replaceWithDraftIfAvailable;
|
|
@@ -8,59 +8,60 @@ const auth_1 = require("../../auth");
|
|
|
8
8
|
const flattenWhereConstraints_1 = __importDefault(require("../../utilities/flattenWhereConstraints"));
|
|
9
9
|
const sanitizeInternalFields_1 = __importDefault(require("../../utilities/sanitizeInternalFields"));
|
|
10
10
|
const appendVersionToQueryKey_1 = require("./appendVersionToQueryKey");
|
|
11
|
-
const replaceWithDraftIfAvailable = async ({ payload, entity, doc, locale, accessResult, }) => {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
{
|
|
19
|
-
|
|
20
|
-
equals: doc.id,
|
|
21
|
-
},
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
'version._status': {
|
|
25
|
-
equals: 'draft',
|
|
26
|
-
},
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
updatedAt: {
|
|
30
|
-
greater_than: doc.updatedAt,
|
|
31
|
-
},
|
|
11
|
+
const replaceWithDraftIfAvailable = async ({ payload, entity, entityType, doc, locale, accessResult, }) => {
|
|
12
|
+
const VersionModel = payload.versions[entity.slug];
|
|
13
|
+
let useEstimatedCount = false;
|
|
14
|
+
const queryToBuild = {
|
|
15
|
+
where: {
|
|
16
|
+
and: [
|
|
17
|
+
{
|
|
18
|
+
'version._status': {
|
|
19
|
+
equals: 'draft',
|
|
32
20
|
},
|
|
33
|
-
|
|
21
|
+
},
|
|
22
|
+
],
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
if (entityType === 'collection') {
|
|
26
|
+
queryToBuild.where.and.push({
|
|
27
|
+
parent: {
|
|
28
|
+
equals: doc.id,
|
|
34
29
|
},
|
|
35
|
-
};
|
|
36
|
-
if ((0, auth_1.hasWhereAccessResult)(accessResult)) {
|
|
37
|
-
const versionAccessResult = (0, appendVersionToQueryKey_1.appendVersionToQueryKey)(accessResult);
|
|
38
|
-
queryToBuild.where.and.push(versionAccessResult);
|
|
39
|
-
}
|
|
40
|
-
const constraints = (0, flattenWhereConstraints_1.default)(queryToBuild);
|
|
41
|
-
useEstimatedCount = constraints.some((prop) => Object.keys(prop).some((key) => key === 'near'));
|
|
42
|
-
const query = await VersionModel.buildQuery(queryToBuild, locale);
|
|
43
|
-
let draft = await VersionModel.findOne(query, {}, {
|
|
44
|
-
lean: true,
|
|
45
|
-
useEstimatedCount,
|
|
46
|
-
sort: { updatedAt: 'desc' },
|
|
47
30
|
});
|
|
48
|
-
if (!draft) {
|
|
49
|
-
return doc;
|
|
50
|
-
}
|
|
51
|
-
draft = JSON.parse(JSON.stringify(draft));
|
|
52
|
-
draft = (0, sanitizeInternalFields_1.default)(draft);
|
|
53
|
-
// Disregard all other draft content at this point,
|
|
54
|
-
// Only interested in the version itself.
|
|
55
|
-
// Operations will handle firing hooks, etc.
|
|
56
|
-
return {
|
|
57
|
-
id: doc.id,
|
|
58
|
-
...draft.version,
|
|
59
|
-
createdAt: draft.createdAt,
|
|
60
|
-
updatedAt: draft.updatedAt,
|
|
61
|
-
};
|
|
62
31
|
}
|
|
63
|
-
|
|
32
|
+
if ((0, types_1.docHasTimestamps)(doc)) {
|
|
33
|
+
queryToBuild.where.and.push({
|
|
34
|
+
updatedAt: {
|
|
35
|
+
greater_than: doc.updatedAt,
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
if ((0, auth_1.hasWhereAccessResult)(accessResult)) {
|
|
40
|
+
const versionAccessResult = (0, appendVersionToQueryKey_1.appendVersionToQueryKey)(accessResult);
|
|
41
|
+
queryToBuild.where.and.push(versionAccessResult);
|
|
42
|
+
}
|
|
43
|
+
const constraints = (0, flattenWhereConstraints_1.default)(queryToBuild);
|
|
44
|
+
useEstimatedCount = constraints.some((prop) => Object.keys(prop).some((key) => key === 'near'));
|
|
45
|
+
const query = await VersionModel.buildQuery(queryToBuild, locale);
|
|
46
|
+
let draft = await VersionModel.findOne(query, {}, {
|
|
47
|
+
lean: true,
|
|
48
|
+
useEstimatedCount,
|
|
49
|
+
sort: { updatedAt: 'desc' },
|
|
50
|
+
});
|
|
51
|
+
if (!draft) {
|
|
52
|
+
return doc;
|
|
53
|
+
}
|
|
54
|
+
draft = JSON.parse(JSON.stringify(draft));
|
|
55
|
+
draft = (0, sanitizeInternalFields_1.default)(draft);
|
|
56
|
+
// Disregard all other draft content at this point,
|
|
57
|
+
// Only interested in the version itself.
|
|
58
|
+
// Operations will handle firing hooks, etc.
|
|
59
|
+
return {
|
|
60
|
+
id: doc.id,
|
|
61
|
+
...draft.version,
|
|
62
|
+
createdAt: draft.createdAt,
|
|
63
|
+
updatedAt: draft.updatedAt,
|
|
64
|
+
};
|
|
64
65
|
};
|
|
65
66
|
exports.default = replaceWithDraftIfAvailable;
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGFjZVdpdGhEcmFmdElmQXZhaWxhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3ZlcnNpb25zL2RyYWZ0cy9yZXBsYWNlV2l0aERyYWZ0SWZBdmFpbGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSx1Q0FBc0Q7QUFDdEQscUNBQWtEO0FBR2xELHNHQUE4RTtBQUM5RSxvR0FBNEU7QUFDNUUsdUVBQW9FO0FBWXBFLE1BQU0sMkJBQTJCLEdBQUcsS0FBSyxFQUF3QixFQUMvRCxPQUFPLEVBQ1AsTUFBTSxFQUNOLFVBQVUsRUFDVixHQUFHLEVBQ0gsTUFBTSxFQUNOLFlBQVksR0FDQyxFQUFjLEVBQUU7SUFDN0IsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFvQixDQUFDO0lBRXRFLElBQUksaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBRTlCLE1BQU0sWUFBWSxHQUFxQjtRQUNyQyxLQUFLLEVBQUU7WUFDTCxHQUFHLEVBQUU7Z0JBQ0g7b0JBQ0UsaUJBQWlCLEVBQUU7d0JBQ2pCLE1BQU0sRUFBRSxPQUFPO3FCQUNoQjtpQkFDRjthQUNGO1NBQ0Y7S0FDRixDQUFDO0lBRUYsSUFBSSxVQUFVLEtBQUssWUFBWSxFQUFFO1FBQy9CLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztZQUMxQixNQUFNLEVBQUU7Z0JBQ04sTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFO2FBQ2Y7U0FDRixDQUFDLENBQUM7S0FDSjtJQUVELElBQUksSUFBQSx3QkFBZ0IsRUFBQyxHQUFHLENBQUMsRUFBRTtRQUN6QixZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDMUIsU0FBUyxFQUFFO2dCQUNULFlBQVksRUFBRSxHQUFHLENBQUMsU0FBUzthQUM1QjtTQUNGLENBQUMsQ0FBQztLQUNKO0lBRUQsSUFBSSxJQUFBLDJCQUFvQixFQUFDLFlBQVksQ0FBQyxFQUFFO1FBQ3RDLE1BQU0sbUJBQW1CLEdBQUcsSUFBQSxpREFBdUIsRUFBQyxZQUFZLENBQUMsQ0FBQztRQUNsRSxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztLQUNsRDtJQUVELE1BQU0sV0FBVyxHQUFHLElBQUEsaUNBQXVCLEVBQUMsWUFBWSxDQUFDLENBQUM7SUFDMUQsaUJBQWlCLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2hHLE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBWSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFbEUsSUFBSSxLQUFLLEdBQUcsTUFBTSxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7UUFDaEQsSUFBSSxFQUFFLElBQUk7UUFDVixpQkFBaUI7UUFDakIsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRTtLQUM1QixDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1YsT0FBTyxHQUFHLENBQUM7S0FDWjtJQUVELEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxQyxLQUFLLEdBQUcsSUFBQSxnQ0FBc0IsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUV0QyxtREFBbUQ7SUFDbkQseUNBQXlDO0lBQ3pDLDRDQUE0QztJQUM1QyxPQUFPO1FBQ0wsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1FBQ1YsR0FBRyxLQUFLLENBQUMsT0FBTztRQUNoQixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7UUFDMUIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO0tBQzNCLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixrQkFBZSwyQkFBMkIsQ0FBQyJ9
|
|
@@ -57,6 +57,8 @@ const response = await fetch("http://localhost:3000/api/pages", {
|
|
|
57
57
|
});
|
|
58
58
|
```
|
|
59
59
|
|
|
60
|
+
Note: The label portion of the header is case-sensitive and will likely have a capitalized first character unless the label has been customized.
|
|
61
|
+
|
|
60
62
|
### Forgot Password
|
|
61
63
|
|
|
62
64
|
You can customize how the Forgot Password workflow operates with the following options on the `auth.forgotPassword` property:
|
|
@@ -22,15 +22,17 @@ All Payload API routes are mounted prefixed to your config's `routes.api` URL se
|
|
|
22
22
|
|
|
23
23
|
Each collection is mounted using its `slug` value. For example, if a collection's slug is `users`, all corresponding routes will be mounted on `/api/users`.
|
|
24
24
|
|
|
25
|
+
Note: Collection slugs must be formatted in kebab-case
|
|
26
|
+
|
|
25
27
|
**All CRUD operations are exposed as follows:**
|
|
26
28
|
|
|
27
29
|
| Method | Path | Description |
|
|
28
30
|
| -------- | --------------------------- | -------------------------------------- |
|
|
29
|
-
| `GET` | `/api/{
|
|
30
|
-
| `GET` | `/api/{
|
|
31
|
-
| `POST` | `/api/{
|
|
32
|
-
| `PATCH` | `/api/{
|
|
33
|
-
| `DELETE` | `/api/{
|
|
31
|
+
| `GET` | `/api/{collection-slug}` | Find paginated documents |
|
|
32
|
+
| `GET` | `/api/{collection-slug}/:id` | Find a specific document by ID |
|
|
33
|
+
| `POST` | `/api/{collection-slug}` | Create a new document |
|
|
34
|
+
| `PATCH` | `/api/{collection-slug}/:id` | Update a document by ID |
|
|
35
|
+
| `DELETE` | `/api/{collection-slug}/:id` | Delete an existing document by ID |
|
|
34
36
|
|
|
35
37
|
##### Additional `find` query parameters
|
|
36
38
|
|
|
@@ -47,14 +49,14 @@ Auth enabled collections are also given the following endpoints:
|
|
|
47
49
|
|
|
48
50
|
| Method | Path | Description |
|
|
49
51
|
| -------- | --------------------------- | ----------- |
|
|
50
|
-
| `POST` | `/api/{
|
|
51
|
-
| `POST` | `/api/{
|
|
52
|
-
| `POST` | `/api/{
|
|
53
|
-
| `POST` | `/api/{
|
|
54
|
-
| `POST` | `/api/{
|
|
55
|
-
| `GET` | `/api/{
|
|
56
|
-
| `POST` | `/api/{
|
|
57
|
-
| `POST` | `/api/{
|
|
52
|
+
| `POST` | `/api/{collection-slug}/verify/:token` | [Email verification](/docs/authentication/operations#verify-by-email), if enabled. |
|
|
53
|
+
| `POST` | `/api/{collection-slug}/unlock` | [Unlock a user's account](/docs/authentication/operations#unlock), if enabled. |
|
|
54
|
+
| `POST` | `/api/{collection-slug}/login` | [Logs in](/docs/authentication/operations#login) a user with email / password. |
|
|
55
|
+
| `POST` | `/api/{collection-slug}/logout` | [Logs out](/docs/authentication/operations#logout) a user. |
|
|
56
|
+
| `POST` | `/api/{collection-slug}/refresh-token` | [Refreshes a token](/docs/authentication/operations#refresh) that has not yet expired. |
|
|
57
|
+
| `GET` | `/api/{collection-slug}/me` | [Returns the currently logged in user with token](/docs/authentication/operations#me). |
|
|
58
|
+
| `POST` | `/api/{collection-slug}/forgot-password` | [Password reset workflow](/docs/authentication/operations#forgot-password) entry point. |
|
|
59
|
+
| `POST` | `/api/{collection-slug}/reset-password` | [To reset the user's password](/docs/authentication/operations#reset-password). |
|
|
58
60
|
|
|
59
61
|
## Globals
|
|
60
62
|
|