payload 3.89.0-internal.95c9cba → 3.90.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/admin/forms/Field.d.ts +2 -0
- package/dist/admin/forms/Field.d.ts.map +1 -1
- package/dist/admin/forms/Field.js.map +1 -1
- package/dist/admin/forms/Form.d.ts +2 -0
- package/dist/admin/forms/Form.d.ts.map +1 -1
- package/dist/admin/forms/Form.js.map +1 -1
- package/dist/admin/functions/index.d.ts +3 -1
- package/dist/admin/functions/index.d.ts.map +1 -1
- package/dist/admin/functions/index.js.map +1 -1
- package/dist/admin/views/dashboard.d.ts +1 -1
- package/dist/admin/views/dashboard.d.ts.map +1 -1
- package/dist/admin/views/dashboard.js.map +1 -1
- package/dist/auth/applyUserReadAccess.d.ts +15 -0
- package/dist/auth/applyUserReadAccess.d.ts.map +1 -0
- package/dist/auth/applyUserReadAccess.js +41 -0
- package/dist/auth/applyUserReadAccess.js.map +1 -0
- package/dist/auth/baseFields/apiKey/canCreateOrUpdateAPIKey.d.ts +4 -0
- package/dist/auth/baseFields/apiKey/canCreateOrUpdateAPIKey.d.ts.map +1 -0
- package/dist/auth/baseFields/apiKey/canCreateOrUpdateAPIKey.js +20 -0
- package/dist/auth/baseFields/apiKey/canCreateOrUpdateAPIKey.js.map +1 -0
- package/dist/auth/baseFields/apiKey/encryptAPIKey.d.ts +4 -0
- package/dist/auth/baseFields/apiKey/encryptAPIKey.d.ts.map +1 -0
- package/dist/auth/baseFields/apiKey/encryptAPIKey.js +16 -0
- package/dist/auth/baseFields/apiKey/encryptAPIKey.js.map +1 -0
- package/dist/auth/baseFields/apiKey/index.d.ts +6 -0
- package/dist/auth/baseFields/apiKey/index.d.ts.map +1 -0
- package/dist/auth/baseFields/apiKey/index.js +112 -0
- package/dist/auth/baseFields/apiKey/index.js.map +1 -0
- package/dist/auth/baseFields/apiKey/omitAPIKey.d.ts +4 -0
- package/dist/auth/baseFields/apiKey/omitAPIKey.d.ts.map +1 -0
- package/dist/auth/baseFields/apiKey/omitAPIKey.js +8 -0
- package/dist/auth/baseFields/apiKey/omitAPIKey.js.map +1 -0
- package/dist/auth/baseFields/apiKey/omitAPIKeyIndex.d.ts +4 -0
- package/dist/auth/baseFields/apiKey/omitAPIKeyIndex.d.ts.map +1 -0
- package/dist/auth/baseFields/apiKey/omitAPIKeyIndex.js +5 -0
- package/dist/auth/baseFields/apiKey/omitAPIKeyIndex.js.map +1 -0
- package/dist/auth/baseFields/apiKey/omitEncryptedAPIKey.d.ts +4 -0
- package/dist/auth/baseFields/apiKey/omitEncryptedAPIKey.d.ts.map +1 -0
- package/dist/auth/baseFields/apiKey/omitEncryptedAPIKey.js +5 -0
- package/dist/auth/baseFields/apiKey/omitEncryptedAPIKey.js.map +1 -0
- package/dist/auth/baseFields/apiKey/setAPIKeyIndex.d.ts +4 -0
- package/dist/auth/baseFields/apiKey/setAPIKeyIndex.d.ts.map +1 -0
- package/dist/auth/baseFields/apiKey/setAPIKeyIndex.js +17 -0
- package/dist/auth/baseFields/apiKey/setAPIKeyIndex.js.map +1 -0
- package/dist/auth/baseFields/auth.d.ts +1 -0
- package/dist/auth/baseFields/auth.d.ts.map +1 -1
- package/dist/auth/baseFields/auth.js +9 -0
- package/dist/auth/baseFields/auth.js.map +1 -1
- package/dist/auth/defaultUnlockAccess.d.ts +3 -0
- package/dist/auth/defaultUnlockAccess.d.ts.map +1 -0
- package/dist/auth/defaultUnlockAccess.js +8 -0
- package/dist/auth/defaultUnlockAccess.js.map +1 -0
- package/dist/auth/endpoints/index.d.ts +1 -0
- package/dist/auth/endpoints/index.d.ts.map +1 -1
- package/dist/auth/endpoints/index.js +8 -0
- package/dist/auth/endpoints/index.js.map +1 -1
- package/dist/auth/endpoints/revealAPIKey.d.ts +7 -0
- package/dist/auth/endpoints/revealAPIKey.d.ts.map +1 -0
- package/dist/auth/endpoints/revealAPIKey.js +120 -0
- package/dist/auth/endpoints/revealAPIKey.js.map +1 -0
- package/dist/auth/executeAccess.d.ts +3 -1
- package/dist/auth/executeAccess.d.ts.map +1 -1
- package/dist/auth/executeAccess.js +2 -1
- package/dist/auth/executeAccess.js.map +1 -1
- package/dist/auth/getAuthFields.d.ts +1 -1
- package/dist/auth/getAuthFields.d.ts.map +1 -1
- package/dist/auth/getAuthFields.js +7 -4
- package/dist/auth/getAuthFields.js.map +1 -1
- package/dist/auth/getFieldsToSign.d.ts.map +1 -1
- package/dist/auth/getFieldsToSign.js +17 -10
- package/dist/auth/getFieldsToSign.js.map +1 -1
- package/dist/auth/getFieldsToSign.spec.js +114 -0
- package/dist/auth/getFieldsToSign.spec.js.map +1 -0
- package/dist/auth/jwt.d.ts.map +1 -1
- package/dist/auth/jwt.js +2 -0
- package/dist/auth/jwt.js.map +1 -1
- package/dist/auth/jwt.spec.js +24 -0
- package/dist/auth/jwt.spec.js.map +1 -0
- package/dist/auth/jwtAuth.d.ts +9 -0
- package/dist/auth/jwtAuth.d.ts.map +1 -0
- package/dist/auth/jwtAuth.js +8 -0
- package/dist/auth/jwtAuth.js.map +1 -0
- package/dist/auth/operations/auth.d.ts.map +1 -1
- package/dist/auth/operations/auth.js +2 -1
- package/dist/auth/operations/auth.js.map +1 -1
- package/dist/auth/operations/forgotPassword.d.ts.map +1 -1
- package/dist/auth/operations/forgotPassword.js +95 -7
- package/dist/auth/operations/forgotPassword.js.map +1 -1
- package/dist/auth/operations/local/auth.js +3 -1
- package/dist/auth/operations/local/auth.js.map +1 -1
- package/dist/auth/operations/login.d.ts.map +1 -1
- package/dist/auth/operations/login.js +48 -26
- package/dist/auth/operations/login.js.map +1 -1
- package/dist/auth/operations/refresh.d.ts.map +1 -1
- package/dist/auth/operations/refresh.js +32 -9
- package/dist/auth/operations/refresh.js.map +1 -1
- package/dist/auth/operations/registerFirstUser.d.ts.map +1 -1
- package/dist/auth/operations/registerFirstUser.js +3 -4
- package/dist/auth/operations/registerFirstUser.js.map +1 -1
- package/dist/auth/operations/resetPassword.d.ts.map +1 -1
- package/dist/auth/operations/resetPassword.js +31 -22
- package/dist/auth/operations/resetPassword.js.map +1 -1
- package/dist/auth/operations/unlock.d.ts.map +1 -1
- package/dist/auth/operations/unlock.js +1 -0
- package/dist/auth/operations/unlock.js.map +1 -1
- package/dist/auth/strategies/apiKey.d.ts.map +1 -1
- package/dist/auth/strategies/apiKey.js +15 -1
- package/dist/auth/strategies/apiKey.js.map +1 -1
- package/dist/auth/strategies/jwt.d.ts.map +1 -1
- package/dist/auth/strategies/jwt.js +61 -10
- package/dist/auth/strategies/jwt.js.map +1 -1
- package/dist/auth/strategies/jwt.spec.js +281 -0
- package/dist/auth/strategies/jwt.spec.js.map +1 -0
- package/dist/auth/strategies/local/authenticate.d.ts +5 -1
- package/dist/auth/strategies/local/authenticate.d.ts.map +1 -1
- package/dist/auth/strategies/local/authenticate.js +8 -3
- package/dist/auth/strategies/local/authenticate.js.map +1 -1
- package/dist/auth/strategies/local/authenticate.spec.js +37 -10
- package/dist/auth/strategies/local/authenticate.spec.js.map +1 -1
- package/dist/auth/strategies/local/generatePasswordSaltHash.d.ts +9 -1
- package/dist/auth/strategies/local/generatePasswordSaltHash.d.ts.map +1 -1
- package/dist/auth/strategies/local/generatePasswordSaltHash.js +61 -34
- package/dist/auth/strategies/local/generatePasswordSaltHash.js.map +1 -1
- package/dist/auth/types.d.ts +16 -1
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/auth/types.js.map +1 -1
- package/dist/collections/config/client.d.ts +1 -0
- package/dist/collections/config/client.d.ts.map +1 -1
- package/dist/collections/config/client.js +3 -0
- package/dist/collections/config/client.js.map +1 -1
- package/dist/collections/config/defaults.d.ts.map +1 -1
- package/dist/collections/config/defaults.js +4 -2
- package/dist/collections/config/defaults.js.map +1 -1
- package/dist/collections/config/sanitize.d.ts.map +1 -1
- package/dist/collections/config/sanitize.js +17 -6
- package/dist/collections/config/sanitize.js.map +1 -1
- package/dist/collections/endpoints/index.d.ts +1 -0
- package/dist/collections/endpoints/index.d.ts.map +1 -1
- package/dist/collections/endpoints/index.js +6 -5
- package/dist/collections/endpoints/index.js.map +1 -1
- package/dist/collections/operations/create.d.ts.map +1 -1
- package/dist/collections/operations/create.js +105 -8
- package/dist/collections/operations/create.js.map +1 -1
- package/dist/collections/operations/deleteByID.js +13 -13
- package/dist/collections/operations/deleteByID.js.map +1 -1
- package/dist/collections/operations/findDistinct.d.ts.map +1 -1
- package/dist/collections/operations/findDistinct.js +96 -18
- package/dist/collections/operations/findDistinct.js.map +1 -1
- package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
- package/dist/collections/operations/restoreVersion.js +47 -13
- package/dist/collections/operations/restoreVersion.js.map +1 -1
- package/dist/collections/operations/update.d.ts.map +1 -1
- package/dist/collections/operations/update.js +123 -23
- package/dist/collections/operations/update.js.map +1 -1
- package/dist/collections/operations/updateByID.d.ts.map +1 -1
- package/dist/collections/operations/updateByID.js +62 -2
- package/dist/collections/operations/updateByID.js.map +1 -1
- package/dist/collections/operations/utilities/update.d.ts.map +1 -1
- package/dist/collections/operations/utilities/update.js +71 -15
- package/dist/collections/operations/utilities/update.js.map +1 -1
- package/dist/config/orderable/index.d.ts.map +1 -1
- package/dist/config/orderable/index.js +67 -14
- package/dist/config/orderable/index.js.map +1 -1
- package/dist/config/sanitize.d.ts.map +1 -1
- package/dist/config/sanitize.js +1 -1
- package/dist/config/sanitize.js.map +1 -1
- package/dist/config/types.d.ts +13 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/database/getLocalizedPaths.d.ts +2 -1
- package/dist/database/getLocalizedPaths.d.ts.map +1 -1
- package/dist/database/getLocalizedPaths.js +12 -3
- package/dist/database/getLocalizedPaths.js.map +1 -1
- package/dist/database/isNestedRelationshipQuery.d.ts +9 -0
- package/dist/database/isNestedRelationshipQuery.d.ts.map +1 -0
- package/dist/database/isNestedRelationshipQuery.js +14 -0
- package/dist/database/isNestedRelationshipQuery.js.map +1 -0
- package/dist/database/prefixWherePaths.d.ts +6 -0
- package/dist/database/prefixWherePaths.d.ts.map +1 -0
- package/dist/database/prefixWherePaths.js +19 -0
- package/dist/database/prefixWherePaths.js.map +1 -0
- package/dist/database/prefixWherePaths.spec.js +46 -0
- package/dist/database/prefixWherePaths.spec.js.map +1 -0
- package/dist/database/queryValidation/validateQueryPaths.d.ts +2 -1
- package/dist/database/queryValidation/validateQueryPaths.d.ts.map +1 -1
- package/dist/database/queryValidation/validateQueryPaths.js +4 -1
- package/dist/database/queryValidation/validateQueryPaths.js.map +1 -1
- package/dist/database/queryValidation/validateSearchParams.d.ts +2 -1
- package/dist/database/queryValidation/validateSearchParams.d.ts.map +1 -1
- package/dist/database/queryValidation/validateSearchParams.js +82 -4
- package/dist/database/queryValidation/validateSearchParams.js.map +1 -1
- package/dist/database/types.d.ts +5 -0
- package/dist/database/types.d.ts.map +1 -1
- package/dist/database/types.js.map +1 -1
- package/dist/email/normalizeSendEmailOptions.js.map +1 -1
- package/dist/email/types.d.ts +4 -1
- package/dist/email/types.d.ts.map +1 -1
- package/dist/email/types.js.map +1 -1
- package/dist/exports/internal.d.ts +7 -0
- package/dist/exports/internal.d.ts.map +1 -1
- package/dist/exports/internal.js +7 -1
- package/dist/exports/internal.js.map +1 -1
- package/dist/exports/shared.d.ts +3 -0
- package/dist/exports/shared.d.ts.map +1 -1
- package/dist/exports/shared.js +3 -0
- package/dist/exports/shared.js.map +1 -1
- package/dist/fields/config/types.d.ts +7 -5
- package/dist/fields/config/types.d.ts.map +1 -1
- package/dist/fields/config/types.js.map +1 -1
- package/dist/fields/hooks/beforeChange/index.d.ts +7 -1
- package/dist/fields/hooks/beforeChange/index.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/index.js +4 -2
- package/dist/fields/hooks/beforeChange/index.js.map +1 -1
- package/dist/fields/hooks/beforeChange/index.spec.js +206 -0
- package/dist/fields/hooks/beforeChange/index.spec.js.map +1 -0
- package/dist/fields/hooks/beforeChange/promise.d.ts +2 -1
- package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/promise.js +51 -9
- package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
- package/dist/fields/hooks/beforeChange/traverseFields.d.ts +2 -1
- package/dist/fields/hooks/beforeChange/traverseFields.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/traverseFields.js +3 -2
- package/dist/fields/hooks/beforeChange/traverseFields.js.map +1 -1
- package/dist/fields/hooks/beforeDuplicate/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeDuplicate/promise.js +4 -0
- package/dist/fields/hooks/beforeDuplicate/promise.js.map +1 -1
- package/dist/fields/hooks/beforeValidate/getFallbackValue.d.ts +2 -1
- package/dist/fields/hooks/beforeValidate/getFallbackValue.d.ts.map +1 -1
- package/dist/fields/hooks/beforeValidate/getFallbackValue.js +2 -2
- package/dist/fields/hooks/beforeValidate/getFallbackValue.js.map +1 -1
- package/dist/fields/hooks/beforeValidate/index.d.ts +6 -1
- package/dist/fields/hooks/beforeValidate/index.d.ts.map +1 -1
- package/dist/fields/hooks/beforeValidate/index.js +3 -1
- package/dist/fields/hooks/beforeValidate/index.js.map +1 -1
- package/dist/fields/hooks/beforeValidate/index.spec.js +90 -0
- package/dist/fields/hooks/beforeValidate/index.spec.js.map +1 -0
- package/dist/fields/hooks/beforeValidate/promise.d.ts +6 -1
- package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeValidate/promise.js +23 -8
- package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
- package/dist/fields/hooks/beforeValidate/traverseFields.d.ts +6 -1
- package/dist/fields/hooks/beforeValidate/traverseFields.d.ts.map +1 -1
- package/dist/fields/hooks/beforeValidate/traverseFields.js +3 -1
- package/dist/fields/hooks/beforeValidate/traverseFields.js.map +1 -1
- package/dist/fields/validations.d.ts.map +1 -1
- package/dist/fields/validations.js +3 -1
- package/dist/fields/validations.js.map +1 -1
- package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
- package/dist/globals/operations/restoreVersion.js +45 -11
- package/dist/globals/operations/restoreVersion.js.map +1 -1
- package/dist/globals/operations/update.d.ts.map +1 -1
- package/dist/globals/operations/update.js +95 -16
- package/dist/globals/operations/update.js.map +1 -1
- package/dist/index.bundled.d.ts +146 -48
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/preferences/config.d.ts.map +1 -1
- package/dist/preferences/config.js +2 -1
- package/dist/preferences/config.js.map +1 -1
- package/dist/query-presets/access.d.ts.map +1 -1
- package/dist/query-presets/access.js +2 -1
- package/dist/query-presets/access.js.map +1 -1
- package/dist/queues/config/collection.d.ts.map +1 -1
- package/dist/queues/config/collection.js +6 -0
- package/dist/queues/config/collection.js.map +1 -1
- package/dist/queues/config/types/index.d.ts +4 -1
- package/dist/queues/config/types/index.d.ts.map +1 -1
- package/dist/queues/config/types/index.js.map +1 -1
- package/dist/queues/endpoints/handleSchedules.d.ts.map +1 -1
- package/dist/queues/endpoints/handleSchedules.js +2 -1
- package/dist/queues/endpoints/handleSchedules.js.map +1 -1
- package/dist/queues/endpoints/run.d.ts.map +1 -1
- package/dist/queues/endpoints/run.js +2 -1
- package/dist/queues/endpoints/run.js.map +1 -1
- package/dist/uploads/assertClientUploadAccess.d.ts +7 -0
- package/dist/uploads/assertClientUploadAccess.d.ts.map +1 -0
- package/dist/uploads/assertClientUploadAccess.js +27 -0
- package/dist/uploads/assertClientUploadAccess.js.map +1 -0
- package/dist/uploads/assertClientUploadAllowed.d.ts +11 -0
- package/dist/uploads/assertClientUploadAllowed.d.ts.map +1 -0
- package/dist/uploads/assertClientUploadAllowed.js +46 -0
- package/dist/uploads/assertClientUploadAllowed.js.map +1 -0
- package/dist/uploads/assertClientUploadAllowed.spec.js +91 -0
- package/dist/uploads/assertClientUploadAllowed.spec.js.map +1 -0
- package/dist/uploads/checkFileRestrictions.d.ts +4 -1
- package/dist/uploads/checkFileRestrictions.d.ts.map +1 -1
- package/dist/uploads/checkFileRestrictions.js +66 -26
- package/dist/uploads/checkFileRestrictions.js.map +1 -1
- package/dist/uploads/clientUploadReceipt.d.ts +23 -0
- package/dist/uploads/clientUploadReceipt.d.ts.map +1 -0
- package/dist/uploads/clientUploadReceipt.js +55 -0
- package/dist/uploads/clientUploadReceipt.js.map +1 -0
- package/dist/uploads/deleteAssociatedFiles.d.ts.map +1 -1
- package/dist/uploads/deleteAssociatedFiles.js +33 -8
- package/dist/uploads/deleteAssociatedFiles.js.map +1 -1
- package/dist/uploads/deleteAssociatedFiles.spec.js +124 -0
- package/dist/uploads/deleteAssociatedFiles.spec.js.map +1 -0
- package/dist/uploads/detectSvgFromXml.d.ts +1 -3
- package/dist/uploads/detectSvgFromXml.d.ts.map +1 -1
- package/dist/uploads/detectSvgFromXml.js +3 -40
- package/dist/uploads/detectSvgFromXml.js.map +1 -1
- package/dist/uploads/endpoints/getFile.d.ts.map +1 -1
- package/dist/uploads/endpoints/getFile.js +5 -3
- package/dist/uploads/endpoints/getFile.js.map +1 -1
- package/dist/uploads/fetchAPI-multipart/handlers.d.ts +2 -2
- package/dist/uploads/fetchAPI-multipart/handlers.d.ts.map +1 -1
- package/dist/uploads/fetchAPI-multipart/handlers.js +18 -5
- package/dist/uploads/fetchAPI-multipart/handlers.js.map +1 -1
- package/dist/uploads/fetchAPI-multipart/index.d.ts.map +1 -1
- package/dist/uploads/fetchAPI-multipart/index.js +24 -2
- package/dist/uploads/fetchAPI-multipart/index.js.map +1 -1
- package/dist/uploads/fetchAPI-multipart/processMultipart.d.ts +0 -6
- package/dist/uploads/fetchAPI-multipart/processMultipart.d.ts.map +1 -1
- package/dist/uploads/fetchAPI-multipart/processMultipart.js +146 -126
- package/dist/uploads/fetchAPI-multipart/processMultipart.js.map +1 -1
- package/dist/uploads/fetchAPI-multipart/processMultipart.spec.js +663 -0
- package/dist/uploads/fetchAPI-multipart/processMultipart.spec.js.map +1 -0
- package/dist/uploads/generateFileData.d.ts +3 -1
- package/dist/uploads/generateFileData.d.ts.map +1 -1
- package/dist/uploads/generateFileData.js +29 -16
- package/dist/uploads/generateFileData.js.map +1 -1
- package/dist/uploads/getBaseFields.d.ts.map +1 -1
- package/dist/uploads/getBaseFields.js +3 -1
- package/dist/uploads/getBaseFields.js.map +1 -1
- package/dist/uploads/getExternalFile.d.ts +1 -1
- package/dist/uploads/getExternalFile.d.ts.map +1 -1
- package/dist/uploads/getExternalFile.js +60 -15
- package/dist/uploads/getExternalFile.js.map +1 -1
- package/dist/uploads/getFileFromClientUpload.d.ts +2 -2
- package/dist/uploads/getFileFromClientUpload.d.ts.map +1 -1
- package/dist/uploads/getFileFromClientUpload.js +4 -4
- package/dist/uploads/getFileFromClientUpload.js.map +1 -1
- package/dist/uploads/getFileFromClientUpload.spec.js +62 -0
- package/dist/uploads/getFileFromClientUpload.spec.js.map +1 -1
- package/dist/uploads/getFileTypeFallback.d.ts.map +1 -1
- package/dist/uploads/getFileTypeFallback.js +3 -1
- package/dist/uploads/getFileTypeFallback.js.map +1 -1
- package/dist/uploads/getFileTypeIdentity.d.ts +19 -0
- package/dist/uploads/getFileTypeIdentity.d.ts.map +1 -0
- package/dist/uploads/getFileTypeIdentity.js +34 -0
- package/dist/uploads/getFileTypeIdentity.js.map +1 -0
- package/dist/uploads/getFileTypeIdentity.spec.js +43 -0
- package/dist/uploads/getFileTypeIdentity.spec.js.map +1 -0
- package/dist/uploads/isProcessableImage.d.ts +2 -0
- package/dist/uploads/isProcessableImage.d.ts.map +1 -0
- package/dist/uploads/isProcessableImage.js +7 -0
- package/dist/uploads/isProcessableImage.js.map +1 -0
- package/dist/uploads/safeFetch.d.ts.map +1 -1
- package/dist/uploads/safeFetch.js +3 -2
- package/dist/uploads/safeFetch.js.map +1 -1
- package/dist/uploads/sanitizeUploadData.d.ts +26 -0
- package/dist/uploads/sanitizeUploadData.d.ts.map +1 -0
- package/dist/uploads/sanitizeUploadData.js +159 -0
- package/dist/uploads/sanitizeUploadData.js.map +1 -0
- package/dist/uploads/sanitizeUploadData.spec.js +255 -0
- package/dist/uploads/sanitizeUploadData.spec.js.map +1 -0
- package/dist/uploads/types.d.ts +11 -3
- package/dist/uploads/types.d.ts.map +1 -1
- package/dist/uploads/types.js.map +1 -1
- package/dist/uploads/unlinkClientUploadTempFile.d.ts +20 -0
- package/dist/uploads/unlinkClientUploadTempFile.d.ts.map +1 -0
- package/dist/uploads/unlinkClientUploadTempFile.js +30 -0
- package/dist/uploads/unlinkClientUploadTempFile.js.map +1 -0
- package/dist/uploads/unlinkTempFiles.d.ts.map +1 -1
- package/dist/uploads/unlinkTempFiles.js +7 -9
- package/dist/uploads/unlinkTempFiles.js.map +1 -1
- package/dist/uploads/unlinkTempFiles.spec.js +61 -1
- package/dist/uploads/unlinkTempFiles.spec.js.map +1 -1
- package/dist/uploads/uploadContentSecurityPolicy.d.ts +2 -0
- package/dist/uploads/uploadContentSecurityPolicy.d.ts.map +1 -0
- package/dist/uploads/uploadContentSecurityPolicy.js +3 -0
- package/dist/uploads/uploadContentSecurityPolicy.js.map +1 -0
- package/dist/uploads/validateISOBaseMediaFile.d.ts +4 -0
- package/dist/uploads/validateISOBaseMediaFile.d.ts.map +1 -0
- package/dist/uploads/validateISOBaseMediaFile.js +91 -0
- package/dist/uploads/validateISOBaseMediaFile.js.map +1 -0
- package/dist/uploads/validateISOBaseMediaFile.spec.js +130 -0
- package/dist/uploads/validateISOBaseMediaFile.spec.js.map +1 -0
- package/dist/uploads/validateSvg.d.ts +10 -4
- package/dist/uploads/validateSvg.d.ts.map +1 -1
- package/dist/uploads/validateSvg.js +280 -40
- package/dist/uploads/validateSvg.js.map +1 -1
- package/dist/uploads/validateSvg.spec.js +123 -0
- package/dist/uploads/validateSvg.spec.js.map +1 -0
- package/dist/uploads/validateUploadFilename.d.ts +3 -0
- package/dist/uploads/validateUploadFilename.d.ts.map +1 -0
- package/dist/uploads/validateUploadFilename.js +13 -0
- package/dist/uploads/validateUploadFilename.js.map +1 -0
- package/dist/uploads/validateUploadFilename.spec.js +24 -0
- package/dist/uploads/validateUploadFilename.spec.js.map +1 -0
- package/dist/utilities/addDataAndFileToRequest.d.ts.map +1 -1
- package/dist/utilities/addDataAndFileToRequest.js +28 -1
- package/dist/utilities/addDataAndFileToRequest.js.map +1 -1
- package/dist/utilities/addDataAndFileToRequest.spec.js +158 -0
- package/dist/utilities/addDataAndFileToRequest.spec.js.map +1 -1
- package/dist/utilities/createPayloadRequest.d.ts.map +1 -1
- package/dist/utilities/createPayloadRequest.js +2 -1
- package/dist/utilities/createPayloadRequest.js.map +1 -1
- package/dist/utilities/deepCopyObject.d.ts.map +1 -1
- package/dist/utilities/deepCopyObject.js +110 -19
- package/dist/utilities/deepCopyObject.js.map +1 -1
- package/dist/utilities/deepCopyObject.spec.js +216 -0
- package/dist/utilities/deepCopyObject.spec.js.map +1 -0
- package/dist/utilities/fieldPath.d.ts +13 -0
- package/dist/utilities/fieldPath.d.ts.map +1 -0
- package/dist/utilities/fieldPath.js +51 -0
- package/dist/utilities/fieldPath.js.map +1 -0
- package/dist/utilities/fieldPath.spec.js +155 -0
- package/dist/utilities/fieldPath.spec.js.map +1 -0
- package/dist/utilities/getEntityPermissions/getEntityPermissions.d.ts.map +1 -1
- package/dist/utilities/getEntityPermissions/getEntityPermissions.js +2 -0
- package/dist/utilities/getEntityPermissions/getEntityPermissions.js.map +1 -1
- package/dist/utilities/getObjectDotNotation.d.ts.map +1 -1
- package/dist/utilities/getObjectDotNotation.js +7 -1
- package/dist/utilities/getObjectDotNotation.js.map +1 -1
- package/dist/utilities/getObjectDotNotation.spec.js +33 -0
- package/dist/utilities/getObjectDotNotation.spec.js.map +1 -0
- package/dist/utilities/getSafeRedirect.spec.js +14 -0
- package/dist/utilities/getSafeRedirect.spec.js.map +1 -1
- package/dist/utilities/getTopLevelFieldNames.d.ts +2 -0
- package/dist/utilities/getTopLevelFieldNames.d.ts.map +1 -0
- package/dist/utilities/getTopLevelFieldNames.js +3 -0
- package/dist/utilities/getTopLevelFieldNames.js.map +1 -0
- package/dist/utilities/getTopLevelFieldNames.spec.js +18 -0
- package/dist/utilities/getTopLevelFieldNames.spec.js.map +1 -0
- package/dist/utilities/handleEndpoints.js +1 -1
- package/dist/utilities/handleEndpoints.js.map +1 -1
- package/dist/utilities/parseParams/index.d.ts.map +1 -1
- package/dist/utilities/parseParams/index.js +3 -1
- package/dist/utilities/parseParams/index.js.map +1 -1
- package/dist/utilities/parseParams/index.spec.js +8 -0
- package/dist/utilities/parseParams/index.spec.js.map +1 -1
- package/dist/utilities/traverseFields.d.ts.map +1 -1
- package/dist/utilities/traverseFields.js +5 -14
- package/dist/utilities/traverseFields.js.map +1 -1
- package/dist/utilities/unflatten.d.ts.map +1 -1
- package/dist/utilities/unflatten.js +21 -9
- package/dist/utilities/unflatten.js.map +1 -1
- package/dist/utilities/unflatten.spec.js +38 -0
- package/dist/utilities/unflatten.spec.js.map +1 -0
- package/dist/utilities/wrapInternalEndpoints.d.ts.map +1 -1
- package/dist/utilities/wrapInternalEndpoints.js +10 -3
- package/dist/utilities/wrapInternalEndpoints.js.map +1 -1
- package/dist/utilities/wrapInternalEndpoints.spec.js +124 -0
- package/dist/utilities/wrapInternalEndpoints.spec.js.map +1 -0
- package/dist/versions/allLocalesPublicationStatus.d.ts +38 -0
- package/dist/versions/allLocalesPublicationStatus.d.ts.map +1 -0
- package/dist/versions/allLocalesPublicationStatus.js +57 -0
- package/dist/versions/allLocalesPublicationStatus.js.map +1 -0
- package/dist/versions/getLatestGlobalVersion.d.ts.map +1 -1
- package/dist/versions/getLatestGlobalVersion.js +10 -2
- package/dist/versions/getLatestGlobalVersion.js.map +1 -1
- package/dist/versions/getRestoredStatusesToAuthorize.d.ts +9 -0
- package/dist/versions/getRestoredStatusesToAuthorize.d.ts.map +1 -0
- package/dist/versions/getRestoredStatusesToAuthorize.js +22 -0
- package/dist/versions/getRestoredStatusesToAuthorize.js.map +1 -0
- package/dist/versions/getRestoredStatusesToAuthorize.spec.js +50 -0
- package/dist/versions/getRestoredStatusesToAuthorize.spec.js.map +1 -0
- package/dist/versions/schedule/job.d.ts +2 -2
- package/dist/versions/schedule/job.d.ts.map +1 -1
- package/dist/versions/schedule/job.js +11 -7
- package/dist/versions/schedule/job.js.map +1 -1
- package/dist/versions/schedule/types.d.ts +5 -1
- package/dist/versions/schedule/types.d.ts.map +1 -1
- package/dist/versions/schedule/types.js.map +1 -1
- package/package.json +4 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../../../src/queues/config/collection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAE5D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAMzC,eAAO,MAAM,kBAAkB,iBAAiB,CAAA;AAEhD,eAAO,MAAM,wBAAwB,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../../../src/queues/config/collection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAE5D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAMzC,eAAO,MAAM,kBAAkB,iBAAiB,CAAA;AAEhD,eAAO,MAAM,wBAAwB,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,KAAK,gBA6R/E,CAAA;AAGD,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,GAAG,EAAE,GAAG,CAAA;CAAE,GAAG,GAAG,CAMxF"}
|
|
@@ -101,6 +101,12 @@ export const getDefaultJobsCollection = (jobsConfig)=>{
|
|
|
101
101
|
}
|
|
102
102
|
const jobsCollection = {
|
|
103
103
|
slug: jobsCollectionSlug,
|
|
104
|
+
access: {
|
|
105
|
+
create: ()=>false,
|
|
106
|
+
delete: ()=>false,
|
|
107
|
+
read: ()=>false,
|
|
108
|
+
update: ()=>false
|
|
109
|
+
},
|
|
104
110
|
admin: {
|
|
105
111
|
group: 'System',
|
|
106
112
|
hidden: true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/queues/config/collection.ts"],"sourcesContent":["import type { CollectionConfig } from '../../collections/config/types.js'\nimport type { SanitizedConfig } from '../../config/types.js'\nimport type { Field } from '../../fields/config/types.js'\nimport type { Job } from '../../index.js'\n\nimport { handleSchedulesJobsEndpoint } from '../endpoints/handleSchedules.js'\nimport { runJobsEndpoint } from '../endpoints/run.js'\nimport { getJobTaskStatus } from '../utilities/getJobTaskStatus.js'\n\nexport const jobsCollectionSlug = 'payload-jobs'\n\nexport const getDefaultJobsCollection: (jobsConfig: SanitizedConfig['jobs']) => CollectionConfig = (\n jobsConfig,\n) => {\n const workflowSlugs: Set<string> = new Set()\n const taskSlugs: Set<string> = new Set(['inline'])\n\n if (jobsConfig.workflows?.length) {\n jobsConfig.workflows.forEach((workflow) => {\n workflowSlugs.add(workflow.slug)\n\n // Validate concurrency config requires enableConcurrencyControl flag\n if (workflow.concurrency && !jobsConfig.enableConcurrencyControl) {\n throw new Error(\n `Workflow \"${workflow.slug}\" uses concurrency controls but \"jobs.enableConcurrencyControl\" is not enabled. ` +\n `Set \"jobs.enableConcurrencyControl: true\" in your Payload config to use concurrency controls. ` +\n `Note: This adds a new indexed field to the jobs collection schema and may require a database migration.`,\n )\n }\n })\n }\n\n if (jobsConfig.tasks?.length) {\n jobsConfig.tasks.forEach((task) => {\n if (workflowSlugs.has(task.slug)) {\n throw new Error(\n `Task slug \"${task.slug}\" is already used by a workflow. No tasks are allowed to have the same slug as a workflow.`,\n )\n }\n\n // Validate concurrency config requires enableConcurrencyControl flag\n if (task.concurrency && !jobsConfig.enableConcurrencyControl) {\n throw new Error(\n `Task \"${task.slug}\" uses concurrency controls but \"jobs.enableConcurrencyControl\" is not enabled. ` +\n `Set \"jobs.enableConcurrencyControl: true\" in your Payload config to use concurrency controls. ` +\n `Note: This adds a new indexed field to the jobs collection schema and may require a database migration.`,\n )\n }\n\n taskSlugs.add(task.slug)\n })\n }\n\n const logFields: Field[] = [\n {\n name: 'executedAt',\n type: 'date',\n required: true,\n },\n {\n name: 'completedAt',\n type: 'date',\n required: true,\n },\n {\n name: 'taskSlug',\n type: 'select',\n options: [...taskSlugs],\n required: true,\n },\n {\n name: 'taskID',\n type: 'text',\n required: true,\n },\n /**\n * @todo make required in 4.0\n */\n {\n name: 'input',\n type: 'json',\n },\n {\n name: 'output',\n type: 'json',\n },\n {\n name: 'state',\n type: 'radio',\n options: ['failed', 'succeeded'],\n required: true,\n },\n {\n name: 'error',\n type: 'json',\n admin: {\n condition: (_, data) => data.state === 'failed',\n },\n required: true,\n },\n ]\n\n if (jobsConfig.addParentToTaskLog) {\n logFields.push({\n name: 'parent',\n type: 'group',\n fields: [\n {\n name: 'taskSlug',\n type: 'select',\n options: [...taskSlugs],\n },\n {\n name: 'taskID',\n type: 'text',\n },\n ],\n })\n }\n\n const jobsCollection: CollectionConfig = {\n slug: jobsCollectionSlug,\n admin: {\n group: 'System',\n hidden: true,\n },\n endpoints: [runJobsEndpoint, handleSchedulesJobsEndpoint],\n fields: [\n {\n name: 'input',\n type: 'json',\n admin: {\n description: 'Input data provided to the job',\n },\n },\n {\n name: 'taskStatus',\n type: 'json',\n virtual: true,\n },\n {\n type: 'tabs',\n tabs: [\n {\n fields: [\n {\n name: 'completedAt',\n type: 'date',\n index: true,\n },\n {\n name: 'totalTried',\n type: 'number',\n defaultValue: 0,\n index: true,\n },\n {\n name: 'hasError',\n type: 'checkbox',\n admin: {\n description: 'If hasError is true this job will not be retried',\n },\n defaultValue: false,\n index: true,\n },\n {\n name: 'error',\n type: 'json',\n admin: {\n condition: (data) => data.hasError,\n description: 'If hasError is true, this is the error that caused it',\n },\n },\n {\n name: 'log',\n type: 'array',\n admin: {\n description: 'Task execution log',\n },\n fields: logFields,\n },\n ],\n label: 'Status',\n },\n ],\n },\n // only include the workflowSlugs field if workflows exist\n ...((workflowSlugs.size > 0\n ? [\n {\n name: 'workflowSlug',\n type: 'select',\n admin: {\n position: 'sidebar',\n },\n index: true,\n options: [...workflowSlugs],\n },\n ]\n : []) as Field[]),\n {\n name: 'taskSlug',\n type: 'select',\n admin: {\n position: 'sidebar',\n },\n index: true,\n options: [...taskSlugs],\n required: false,\n },\n {\n name: 'queue',\n type: 'text',\n admin: {\n position: 'sidebar',\n },\n defaultValue: 'default',\n index: true,\n },\n {\n name: 'waitUntil',\n type: 'date',\n admin: {\n date: { pickerAppearance: 'dayAndTime' },\n },\n index: true,\n },\n {\n name: 'processing',\n type: 'checkbox',\n admin: {\n position: 'sidebar',\n },\n defaultValue: false,\n index: true,\n },\n // Only add concurrencyKey field if concurrency control is enabled\n ...(jobsConfig.enableConcurrencyControl\n ? [\n {\n name: 'concurrencyKey',\n type: 'text',\n admin: {\n description:\n 'Used for concurrency control. Jobs with the same key are subject to exclusive/supersedes rules.',\n position: 'sidebar',\n readOnly: true,\n },\n index: true,\n } as Field,\n ]\n : []),\n ],\n hooks: {\n afterRead: [\n ({ doc, req }) => {\n // This hook is used to add the virtual `tasks` field to the document, that is computed from the `log` field\n\n return jobAfterRead({ config: req.payload.config, doc })\n },\n ],\n /**\n * If another update comes in after a job as already been cancelled, we need to make sure that update doesn't\n * change the state of the job.\n */\n beforeChange: [\n ({ data, originalDoc }) => {\n if (originalDoc?.error?.cancelled) {\n data.processing = false\n data.hasError = true\n delete data.completedAt\n delete data.waitUntil\n }\n return data\n },\n ],\n },\n lockDocuments: false,\n }\n\n if (jobsConfig.stats) {\n // TODO: In 4.0, this should be added by default.\n // The meta field can be used to store arbitrary data about the job. The scheduling system uses this to store\n // `scheduled: true` to indicate that the job was queued by the scheduling system.\n jobsCollection.fields.push({\n name: 'meta',\n type: 'json',\n })\n }\n return jobsCollection\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function jobAfterRead({ config, doc }: { config: SanitizedConfig; doc: Job }): Job {\n doc.taskStatus = getJobTaskStatus({\n jobLog: doc.log || [],\n })\n doc.input = doc.input || {}\n return doc\n}\n"],"names":["handleSchedulesJobsEndpoint","runJobsEndpoint","getJobTaskStatus","jobsCollectionSlug","getDefaultJobsCollection","jobsConfig","workflowSlugs","Set","taskSlugs","workflows","length","forEach","workflow","add","slug","concurrency","enableConcurrencyControl","Error","tasks","task","has","logFields","name","type","required","options","admin","condition","_","data","state","addParentToTaskLog","push","fields","jobsCollection","group","hidden","endpoints","description","virtual","tabs","index","defaultValue","hasError","label","size","position","date","pickerAppearance","readOnly","hooks","afterRead","doc","req","jobAfterRead","config","payload","beforeChange","originalDoc","error","cancelled","processing","completedAt","waitUntil","lockDocuments","stats","taskStatus","jobLog","log","input"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/queues/config/collection.ts"],"sourcesContent":["import type { CollectionConfig } from '../../collections/config/types.js'\nimport type { SanitizedConfig } from '../../config/types.js'\nimport type { Field } from '../../fields/config/types.js'\nimport type { Job } from '../../index.js'\n\nimport { handleSchedulesJobsEndpoint } from '../endpoints/handleSchedules.js'\nimport { runJobsEndpoint } from '../endpoints/run.js'\nimport { getJobTaskStatus } from '../utilities/getJobTaskStatus.js'\n\nexport const jobsCollectionSlug = 'payload-jobs'\n\nexport const getDefaultJobsCollection: (jobsConfig: SanitizedConfig['jobs']) => CollectionConfig = (\n jobsConfig,\n) => {\n const workflowSlugs: Set<string> = new Set()\n const taskSlugs: Set<string> = new Set(['inline'])\n\n if (jobsConfig.workflows?.length) {\n jobsConfig.workflows.forEach((workflow) => {\n workflowSlugs.add(workflow.slug)\n\n // Validate concurrency config requires enableConcurrencyControl flag\n if (workflow.concurrency && !jobsConfig.enableConcurrencyControl) {\n throw new Error(\n `Workflow \"${workflow.slug}\" uses concurrency controls but \"jobs.enableConcurrencyControl\" is not enabled. ` +\n `Set \"jobs.enableConcurrencyControl: true\" in your Payload config to use concurrency controls. ` +\n `Note: This adds a new indexed field to the jobs collection schema and may require a database migration.`,\n )\n }\n })\n }\n\n if (jobsConfig.tasks?.length) {\n jobsConfig.tasks.forEach((task) => {\n if (workflowSlugs.has(task.slug)) {\n throw new Error(\n `Task slug \"${task.slug}\" is already used by a workflow. No tasks are allowed to have the same slug as a workflow.`,\n )\n }\n\n // Validate concurrency config requires enableConcurrencyControl flag\n if (task.concurrency && !jobsConfig.enableConcurrencyControl) {\n throw new Error(\n `Task \"${task.slug}\" uses concurrency controls but \"jobs.enableConcurrencyControl\" is not enabled. ` +\n `Set \"jobs.enableConcurrencyControl: true\" in your Payload config to use concurrency controls. ` +\n `Note: This adds a new indexed field to the jobs collection schema and may require a database migration.`,\n )\n }\n\n taskSlugs.add(task.slug)\n })\n }\n\n const logFields: Field[] = [\n {\n name: 'executedAt',\n type: 'date',\n required: true,\n },\n {\n name: 'completedAt',\n type: 'date',\n required: true,\n },\n {\n name: 'taskSlug',\n type: 'select',\n options: [...taskSlugs],\n required: true,\n },\n {\n name: 'taskID',\n type: 'text',\n required: true,\n },\n /**\n * @todo make required in 4.0\n */\n {\n name: 'input',\n type: 'json',\n },\n {\n name: 'output',\n type: 'json',\n },\n {\n name: 'state',\n type: 'radio',\n options: ['failed', 'succeeded'],\n required: true,\n },\n {\n name: 'error',\n type: 'json',\n admin: {\n condition: (_, data) => data.state === 'failed',\n },\n required: true,\n },\n ]\n\n if (jobsConfig.addParentToTaskLog) {\n logFields.push({\n name: 'parent',\n type: 'group',\n fields: [\n {\n name: 'taskSlug',\n type: 'select',\n options: [...taskSlugs],\n },\n {\n name: 'taskID',\n type: 'text',\n },\n ],\n })\n }\n\n const jobsCollection: CollectionConfig = {\n slug: jobsCollectionSlug,\n access: {\n create: () => false,\n delete: () => false,\n read: () => false,\n update: () => false,\n },\n admin: {\n group: 'System',\n hidden: true,\n },\n endpoints: [runJobsEndpoint, handleSchedulesJobsEndpoint],\n fields: [\n {\n name: 'input',\n type: 'json',\n admin: {\n description: 'Input data provided to the job',\n },\n },\n {\n name: 'taskStatus',\n type: 'json',\n virtual: true,\n },\n {\n type: 'tabs',\n tabs: [\n {\n fields: [\n {\n name: 'completedAt',\n type: 'date',\n index: true,\n },\n {\n name: 'totalTried',\n type: 'number',\n defaultValue: 0,\n index: true,\n },\n {\n name: 'hasError',\n type: 'checkbox',\n admin: {\n description: 'If hasError is true this job will not be retried',\n },\n defaultValue: false,\n index: true,\n },\n {\n name: 'error',\n type: 'json',\n admin: {\n condition: (data) => data.hasError,\n description: 'If hasError is true, this is the error that caused it',\n },\n },\n {\n name: 'log',\n type: 'array',\n admin: {\n description: 'Task execution log',\n },\n fields: logFields,\n },\n ],\n label: 'Status',\n },\n ],\n },\n // only include the workflowSlugs field if workflows exist\n ...((workflowSlugs.size > 0\n ? [\n {\n name: 'workflowSlug',\n type: 'select',\n admin: {\n position: 'sidebar',\n },\n index: true,\n options: [...workflowSlugs],\n },\n ]\n : []) as Field[]),\n {\n name: 'taskSlug',\n type: 'select',\n admin: {\n position: 'sidebar',\n },\n index: true,\n options: [...taskSlugs],\n required: false,\n },\n {\n name: 'queue',\n type: 'text',\n admin: {\n position: 'sidebar',\n },\n defaultValue: 'default',\n index: true,\n },\n {\n name: 'waitUntil',\n type: 'date',\n admin: {\n date: { pickerAppearance: 'dayAndTime' },\n },\n index: true,\n },\n {\n name: 'processing',\n type: 'checkbox',\n admin: {\n position: 'sidebar',\n },\n defaultValue: false,\n index: true,\n },\n // Only add concurrencyKey field if concurrency control is enabled\n ...(jobsConfig.enableConcurrencyControl\n ? [\n {\n name: 'concurrencyKey',\n type: 'text',\n admin: {\n description:\n 'Used for concurrency control. Jobs with the same key are subject to exclusive/supersedes rules.',\n position: 'sidebar',\n readOnly: true,\n },\n index: true,\n } as Field,\n ]\n : []),\n ],\n hooks: {\n afterRead: [\n ({ doc, req }) => {\n // This hook is used to add the virtual `tasks` field to the document, that is computed from the `log` field\n\n return jobAfterRead({ config: req.payload.config, doc })\n },\n ],\n /**\n * If another update comes in after a job as already been cancelled, we need to make sure that update doesn't\n * change the state of the job.\n */\n beforeChange: [\n ({ data, originalDoc }) => {\n if (originalDoc?.error?.cancelled) {\n data.processing = false\n data.hasError = true\n delete data.completedAt\n delete data.waitUntil\n }\n return data\n },\n ],\n },\n lockDocuments: false,\n }\n\n if (jobsConfig.stats) {\n // TODO: In 4.0, this should be added by default.\n // The meta field can be used to store arbitrary data about the job. The scheduling system uses this to store\n // `scheduled: true` to indicate that the job was queued by the scheduling system.\n jobsCollection.fields.push({\n name: 'meta',\n type: 'json',\n })\n }\n return jobsCollection\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function jobAfterRead({ config, doc }: { config: SanitizedConfig; doc: Job }): Job {\n doc.taskStatus = getJobTaskStatus({\n jobLog: doc.log || [],\n })\n doc.input = doc.input || {}\n return doc\n}\n"],"names":["handleSchedulesJobsEndpoint","runJobsEndpoint","getJobTaskStatus","jobsCollectionSlug","getDefaultJobsCollection","jobsConfig","workflowSlugs","Set","taskSlugs","workflows","length","forEach","workflow","add","slug","concurrency","enableConcurrencyControl","Error","tasks","task","has","logFields","name","type","required","options","admin","condition","_","data","state","addParentToTaskLog","push","fields","jobsCollection","access","create","delete","read","update","group","hidden","endpoints","description","virtual","tabs","index","defaultValue","hasError","label","size","position","date","pickerAppearance","readOnly","hooks","afterRead","doc","req","jobAfterRead","config","payload","beforeChange","originalDoc","error","cancelled","processing","completedAt","waitUntil","lockDocuments","stats","taskStatus","jobLog","log","input"],"mappings":"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"}
|
|
@@ -155,6 +155,8 @@ export type JobsConfig = {
|
|
|
155
155
|
/**
|
|
156
156
|
* Override any settings on the default Jobs collection. Accepts the default collection and allows you to return
|
|
157
157
|
* a new collection.
|
|
158
|
+
*
|
|
159
|
+
* @experimental
|
|
158
160
|
*/
|
|
159
161
|
jobsCollectionOverrides?: (args: {
|
|
160
162
|
defaultJobsCollection: CollectionConfig;
|
|
@@ -184,7 +186,8 @@ export type JobsConfig = {
|
|
|
184
186
|
runHooks?: boolean;
|
|
185
187
|
/**
|
|
186
188
|
* A function that will be executed before Payload picks up jobs which are configured by the `jobs.autorun` function.
|
|
187
|
-
* If this function returns true, jobs will be queried and picked up. If it returns false, jobs will not be run
|
|
189
|
+
* If this function returns true, jobs will be queried and picked up. If it returns false, jobs will not be run
|
|
190
|
+
* for that tick. The cron will check again on its next scheduled run.
|
|
188
191
|
* @default undefined - if this function is not defined, jobs will be run - as if () => true was passed.
|
|
189
192
|
* @param payload
|
|
190
193
|
* @returns boolean
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/queues/config/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAA;AAC1F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAExD,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,aAAa,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,gBAAgB,KAAK,YAAY,CAAC,OAAO,CAAC,CAAA;AAE5E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AACD,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,mBAAmB,KAAK,YAAY,CAAC,OAAO,CAAC,CAAA;AAClF,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,kBAAkB,KAAK,YAAY,CAAC,OAAO,CAAC,CAAA;AAEhF,MAAM,MAAM,mBAAmB,GAAG;IAChC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,GAAG,UAAU,CAAA;AACd,MAAM,MAAM,UAAU,GAAG;IACvB;;OAEG;IACH,MAAM,CAAC,EAAE;QACP;;WAEG;QACH,MAAM,CAAC,EAAE,eAAe,CAAA;QACxB;;WAEG;QACH,KAAK,CAAC,EAAE,cAAc,CAAA;QACtB;;WAEG;QACH,GAAG,CAAC,EAAE,YAAY,CAAA;KACnB,CAAA;IACD;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,YAAY,CAAC,iBAAiB,EAAE,CAAC,CAAC,GAAG,iBAAiB,EAAE,CAAA;IACzF;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;;;;;;;OAUG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/queues/config/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/queues/config/types/index.ts"],"sourcesContent":["import type { CollectionConfig, Job } from '../../../index.js'\nimport type { MaybePromise, Payload, PayloadRequest, Sort } from '../../../types/index.js'\nimport type { RunJobsSilent } from '../../localAPI.js'\nimport type { RunJobsArgs } from '../../operations/runJobs/index.js'\nimport type { JobStats } from '../global.js'\nimport type { TaskConfig } from './taskTypes.js'\nimport type { WorkflowConfig } from './workflowTypes.js'\n\nexport type AutorunCronConfig = {\n /**\n * If you want to autoRUn jobs from all queues, set this to true.\n * If you set this to true, the `queue` property will be ignored.\n *\n * @default false\n */\n allQueues?: boolean\n /**\n * The cron schedule for the job.\n * @default '* * * * *' (every minute).\n *\n * @example\n * ┌───────────── (optional) second (0 - 59)\n * │ ┌───────────── minute (0 - 59)\n * │ │ ┌───────────── hour (0 - 23)\n * │ │ │ ┌───────────── day of the month (1 - 31)\n * │ │ │ │ ┌───────────── month (1 - 12)\n * │ │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday)\n * │ │ │ │ │ │\n * │ │ │ │ │ │\n * - '* 0 * * * *' every hour at minute 0\n * - '* 0 0 * * *' daily at midnight\n * - '* 0 0 * * 0' weekly at midnight on Sundays\n * - '* 0 0 1 * *' monthly at midnight on the 1st day of the month\n * - '* 0/5 * * * *' every 5 minutes\n * - '* * * * * *' every second\n */\n cron?: string\n /**\n * By default, the autorun will attempt to schedule jobs for tasks and workflows that have a `schedule` property, given\n * the queue name is the same.\n *\n * Set this to `true` to disable the scheduling of jobs automatically.\n *\n * @default false\n */\n disableScheduling?: boolean\n /**\n * The limit for the job. This can be overridden by the user. Defaults to 10.\n */\n limit?: number\n /**\n * The queue name for the job.\n *\n * @default 'default'\n */\n queue?: string\n /**\n * If set to true, the job system will not log any output to the console (for both info and error logs).\n * Can be an option for more granular control over logging.\n *\n * This will not automatically affect user-configured logs (e.g. if you call `console.log` or `payload.logger.info` in your job code).\n *\n * @default false\n */\n silent?: RunJobsSilent\n}\n\nexport type RunJobAccessArgs = {\n req: PayloadRequest\n}\n\nexport type RunJobAccess = (args: RunJobAccessArgs) => MaybePromise<boolean>\n\nexport type QueueJobAccessArgs = {\n req: PayloadRequest\n}\n\nexport type CancelJobAccessArgs = {\n req: PayloadRequest\n}\nexport type CancelJobAccess = (args: CancelJobAccessArgs) => MaybePromise<boolean>\nexport type QueueJobAccess = (args: QueueJobAccessArgs) => MaybePromise<boolean>\n\nexport type SanitizedJobsConfig = {\n /**\n * If set to `true`, the job system is enabled and a payload-jobs collection exists.\n * This property is automatically set during sanitization.\n */\n enabled?: boolean\n /**\n * If set to `true`, at least one task or workflow has scheduling enabled.\n * This property is automatically set during sanitization.\n */\n scheduling?: boolean\n /**\n * If set to `true`, a payload-job-stats global exists.\n * This property is automatically set during sanitization.\n */\n stats?: boolean\n} & JobsConfig\nexport type JobsConfig = {\n /**\n * Specify access control to determine who can interact with jobs.\n */\n access?: {\n /**\n * By default, all logged-in users can cancel jobs.\n */\n cancel?: CancelJobAccess\n /**\n * By default, all logged-in users can queue jobs.\n */\n queue?: QueueJobAccess\n /**\n * By default, all logged-in users can run jobs.\n */\n run?: RunJobAccess\n }\n /** Adds information about the parent job to the task log. This is useful for debugging and tracking the flow of tasks.\n *\n * In 4.0, this will default to `true`.\n *\n * @default false\n */\n addParentToTaskLog?: boolean\n /**\n * Allows you to configure cron jobs that automatically run queued jobs\n * at specified intervals. Note that this does not _queue_ new jobs - only\n * _runs_ jobs that are already in the specified queue.\n *\n * @remark this property should not be used on serverless platforms like Vercel\n */\n autoRun?: ((payload: Payload) => MaybePromise<AutorunCronConfig[]>) | AutorunCronConfig[]\n /**\n * Determine whether or not to delete a job after it has successfully completed.\n */\n deleteJobOnComplete?: boolean\n /**\n * Specify depth for retrieving jobs from the queue.\n * This should be as low as possible in order for job retrieval\n * to be as efficient as possible. Setting it to anything higher than\n * 0 will drastically affect performance, as less efficient database\n * queries will be used.\n *\n * @default 0\n * @deprecated - this will be removed in 4.0\n */\n depth?: number\n /**\n * Enable concurrency controls for workflows and tasks.\n * When enabled, adds a `concurrencyKey` field to the jobs collection schema.\n * This allows workflows and tasks to use the `concurrency` option to prevent race conditions.\n *\n * **Important:** Enabling this may require a database migration depending on your database adapter,\n * as it adds a new indexed field to the jobs collection schema.\n *\n * @default false\n * @todo In 4.0, this will default to `true`.\n */\n enableConcurrencyControl?: boolean\n /**\n * Override any settings on the default Jobs collection. Accepts the default collection and allows you to return\n * a new collection.\n */\n jobsCollectionOverrides?: (args: { defaultJobsCollection: CollectionConfig }) => CollectionConfig\n /**\n * Adjust the job processing order using a Payload sort string. This can be set globally or per queue.\n *\n * FIFO would equal `createdAt` and LIFO would equal `-createdAt`.\n *\n * @default all jobs for all queues will be executed in FIFO order.\n */\n processingOrder?:\n | ((args: RunJobsArgs) => Promise<Sort> | Sort)\n | {\n default?: Sort\n queues: {\n [queue: string]: Sort\n }\n }\n | Sort\n /**\n * By default, the job system uses direct database calls for optimal performance.\n * If you added custom hooks to your jobs collection, you can set this to true to\n * use the standard Payload API for all job operations. This is discouraged, as it will\n * drastically affect performance.\n *\n * @default false\n * @deprecated - this will be removed in 4.0\n */\n runHooks?: boolean\n /**\n * A function that will be executed before Payload picks up jobs which are configured by the `jobs.autorun` function.\n * If this function returns true, jobs will be queried and picked up. If it returns false, jobs will not be run.\n * @default undefined - if this function is not defined, jobs will be run - as if () => true was passed.\n * @param payload\n * @returns boolean\n */\n shouldAutoRun?: (payload: Payload) => MaybePromise<boolean>\n /**\n * Define all possible tasks here\n */\n tasks?: TaskConfig<any>[]\n /**\n * Define all the workflows here. Workflows orchestrate the flow of multiple tasks.\n */\n workflows?: WorkflowConfig<any>[]\n}\n\nexport type Queueable = {\n scheduleConfig: ScheduleConfig\n taskConfig?: TaskConfig\n // If not set, queue it immediately\n waitUntil?: Date\n workflowConfig?: WorkflowConfig\n}\n\nexport type BeforeScheduleFn = (args: {\n defaultBeforeSchedule: BeforeScheduleFn\n /**\n * payload-job-stats global data\n */\n jobStats: JobStats\n queueable: Queueable\n req: PayloadRequest\n}) => MaybePromise<{\n input?: object\n shouldSchedule: boolean\n waitUntil?: Date\n}>\n\nexport type AfterScheduleFn = (\n args: {\n defaultAfterSchedule: AfterScheduleFn\n /**\n * payload-job-stats global data. If the global does not exist, it will be null.\n */\n jobStats: JobStats | null\n queueable: Queueable\n req: PayloadRequest\n } & (\n | {\n error: Error\n job?: never\n status: 'error'\n }\n | {\n error?: never\n job: Job\n status: 'success'\n }\n | {\n error?: never\n job?: never\n /**\n * If the beforeSchedule hook returned `shouldSchedule: false`, this will be called with status `skipped`.\n */\n status: 'skipped'\n }\n ),\n) => MaybePromise<void>\n\nexport type ScheduleConfig = {\n /**\n * The cron for scheduling the job.\n *\n * @example\n * ┌───────────── (optional) second (0 - 59)\n * │ ┌───────────── minute (0 - 59)\n * │ │ ┌───────────── hour (0 - 23)\n * │ │ │ ┌───────────── day of the month (1 - 31)\n * │ │ │ │ ┌───────────── month (1 - 12)\n * │ │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday)\n * │ │ │ │ │ │\n * │ │ │ │ │ │\n * - '* 0 * * * *' every hour at minute 0\n * - '* 0 0 * * *' daily at midnight\n * - '* 0 0 * * 0' weekly at midnight on Sundays\n * - '* 0 0 1 * *' monthly at midnight on the 1st day of the month\n * - '* 0/5 * * * *' every 5 minutes\n * - '* * * * * *' every second\n */\n cron: string\n hooks?: {\n /**\n * Functions that will be executed after the job has been successfully scheduled.\n *\n * @default By default, global update?? Unless global update should happen before\n */\n afterSchedule?: AfterScheduleFn\n /**\n * Functions that will be executed before the job is scheduled.\n * You can use this to control whether or not the job should be scheduled, or what input\n * data should be passed to the job.\n *\n * @default By default, this has one function that returns { shouldSchedule: true } if the following conditions are met:\n * - There currently is no job of the same type in the specified queue that is currently running\n * - There currently is no job of the same type in the specified queue that is scheduled to run in the future\n * - There currently is no job of the same type in the specified queue that failed previously but can be retried\n */\n beforeSchedule?: BeforeScheduleFn\n }\n /**\n * Queue to which the scheduled job will be added.\n */\n queue: string\n}\n"],"names":[],"mappings":"AAsQA,WA4CC"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/queues/config/types/index.ts"],"sourcesContent":["import type { CollectionConfig, Job } from '../../../index.js'\nimport type { MaybePromise, Payload, PayloadRequest, Sort } from '../../../types/index.js'\nimport type { RunJobsSilent } from '../../localAPI.js'\nimport type { RunJobsArgs } from '../../operations/runJobs/index.js'\nimport type { JobStats } from '../global.js'\nimport type { TaskConfig } from './taskTypes.js'\nimport type { WorkflowConfig } from './workflowTypes.js'\n\nexport type AutorunCronConfig = {\n /**\n * If you want to autoRUn jobs from all queues, set this to true.\n * If you set this to true, the `queue` property will be ignored.\n *\n * @default false\n */\n allQueues?: boolean\n /**\n * The cron schedule for the job.\n * @default '* * * * *' (every minute).\n *\n * @example\n * ┌───────────── (optional) second (0 - 59)\n * │ ┌───────────── minute (0 - 59)\n * │ │ ┌───────────── hour (0 - 23)\n * │ │ │ ┌───────────── day of the month (1 - 31)\n * │ │ │ │ ┌───────────── month (1 - 12)\n * │ │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday)\n * │ │ │ │ │ │\n * │ │ │ │ │ │\n * - '* 0 * * * *' every hour at minute 0\n * - '* 0 0 * * *' daily at midnight\n * - '* 0 0 * * 0' weekly at midnight on Sundays\n * - '* 0 0 1 * *' monthly at midnight on the 1st day of the month\n * - '* 0/5 * * * *' every 5 minutes\n * - '* * * * * *' every second\n */\n cron?: string\n /**\n * By default, the autorun will attempt to schedule jobs for tasks and workflows that have a `schedule` property, given\n * the queue name is the same.\n *\n * Set this to `true` to disable the scheduling of jobs automatically.\n *\n * @default false\n */\n disableScheduling?: boolean\n /**\n * The limit for the job. This can be overridden by the user. Defaults to 10.\n */\n limit?: number\n /**\n * The queue name for the job.\n *\n * @default 'default'\n */\n queue?: string\n /**\n * If set to true, the job system will not log any output to the console (for both info and error logs).\n * Can be an option for more granular control over logging.\n *\n * This will not automatically affect user-configured logs (e.g. if you call `console.log` or `payload.logger.info` in your job code).\n *\n * @default false\n */\n silent?: RunJobsSilent\n}\n\nexport type RunJobAccessArgs = {\n req: PayloadRequest\n}\n\nexport type RunJobAccess = (args: RunJobAccessArgs) => MaybePromise<boolean>\n\nexport type QueueJobAccessArgs = {\n req: PayloadRequest\n}\n\nexport type CancelJobAccessArgs = {\n req: PayloadRequest\n}\nexport type CancelJobAccess = (args: CancelJobAccessArgs) => MaybePromise<boolean>\nexport type QueueJobAccess = (args: QueueJobAccessArgs) => MaybePromise<boolean>\n\nexport type SanitizedJobsConfig = {\n /**\n * If set to `true`, the job system is enabled and a payload-jobs collection exists.\n * This property is automatically set during sanitization.\n */\n enabled?: boolean\n /**\n * If set to `true`, at least one task or workflow has scheduling enabled.\n * This property is automatically set during sanitization.\n */\n scheduling?: boolean\n /**\n * If set to `true`, a payload-job-stats global exists.\n * This property is automatically set during sanitization.\n */\n stats?: boolean\n} & JobsConfig\nexport type JobsConfig = {\n /**\n * Specify access control to determine who can interact with jobs.\n */\n access?: {\n /**\n * By default, all logged-in users can cancel jobs.\n */\n cancel?: CancelJobAccess\n /**\n * By default, all logged-in users can queue jobs.\n */\n queue?: QueueJobAccess\n /**\n * By default, all logged-in users can run jobs.\n */\n run?: RunJobAccess\n }\n /** Adds information about the parent job to the task log. This is useful for debugging and tracking the flow of tasks.\n *\n * In 4.0, this will default to `true`.\n *\n * @default false\n */\n addParentToTaskLog?: boolean\n /**\n * Allows you to configure cron jobs that automatically run queued jobs\n * at specified intervals. Note that this does not _queue_ new jobs - only\n * _runs_ jobs that are already in the specified queue.\n *\n * @remark this property should not be used on serverless platforms like Vercel\n */\n autoRun?: ((payload: Payload) => MaybePromise<AutorunCronConfig[]>) | AutorunCronConfig[]\n /**\n * Determine whether or not to delete a job after it has successfully completed.\n */\n deleteJobOnComplete?: boolean\n /**\n * Specify depth for retrieving jobs from the queue.\n * This should be as low as possible in order for job retrieval\n * to be as efficient as possible. Setting it to anything higher than\n * 0 will drastically affect performance, as less efficient database\n * queries will be used.\n *\n * @default 0\n * @deprecated - this will be removed in 4.0\n */\n depth?: number\n /**\n * Enable concurrency controls for workflows and tasks.\n * When enabled, adds a `concurrencyKey` field to the jobs collection schema.\n * This allows workflows and tasks to use the `concurrency` option to prevent race conditions.\n *\n * **Important:** Enabling this may require a database migration depending on your database adapter,\n * as it adds a new indexed field to the jobs collection schema.\n *\n * @default false\n * @todo In 4.0, this will default to `true`.\n */\n enableConcurrencyControl?: boolean\n /**\n * Override any settings on the default Jobs collection. Accepts the default collection and allows you to return\n * a new collection.\n *\n * @experimental\n */\n jobsCollectionOverrides?: (args: { defaultJobsCollection: CollectionConfig }) => CollectionConfig\n /**\n * Adjust the job processing order using a Payload sort string. This can be set globally or per queue.\n *\n * FIFO would equal `createdAt` and LIFO would equal `-createdAt`.\n *\n * @default all jobs for all queues will be executed in FIFO order.\n */\n processingOrder?:\n | ((args: RunJobsArgs) => Promise<Sort> | Sort)\n | {\n default?: Sort\n queues: {\n [queue: string]: Sort\n }\n }\n | Sort\n /**\n * By default, the job system uses direct database calls for optimal performance.\n * If you added custom hooks to your jobs collection, you can set this to true to\n * use the standard Payload API for all job operations. This is discouraged, as it will\n * drastically affect performance.\n *\n * @default false\n * @deprecated - this will be removed in 4.0\n */\n runHooks?: boolean\n /**\n * A function that will be executed before Payload picks up jobs which are configured by the `jobs.autorun` function.\n * If this function returns true, jobs will be queried and picked up. If it returns false, jobs will not be run\n * for that tick. The cron will check again on its next scheduled run.\n * @default undefined - if this function is not defined, jobs will be run - as if () => true was passed.\n * @param payload\n * @returns boolean\n */\n shouldAutoRun?: (payload: Payload) => MaybePromise<boolean>\n /**\n * Define all possible tasks here\n */\n tasks?: TaskConfig<any>[]\n /**\n * Define all the workflows here. Workflows orchestrate the flow of multiple tasks.\n */\n workflows?: WorkflowConfig<any>[]\n}\n\nexport type Queueable = {\n scheduleConfig: ScheduleConfig\n taskConfig?: TaskConfig\n // If not set, queue it immediately\n waitUntil?: Date\n workflowConfig?: WorkflowConfig\n}\n\nexport type BeforeScheduleFn = (args: {\n defaultBeforeSchedule: BeforeScheduleFn\n /**\n * payload-job-stats global data\n */\n jobStats: JobStats\n queueable: Queueable\n req: PayloadRequest\n}) => MaybePromise<{\n input?: object\n shouldSchedule: boolean\n waitUntil?: Date\n}>\n\nexport type AfterScheduleFn = (\n args: {\n defaultAfterSchedule: AfterScheduleFn\n /**\n * payload-job-stats global data. If the global does not exist, it will be null.\n */\n jobStats: JobStats | null\n queueable: Queueable\n req: PayloadRequest\n } & (\n | {\n error: Error\n job?: never\n status: 'error'\n }\n | {\n error?: never\n job: Job\n status: 'success'\n }\n | {\n error?: never\n job?: never\n /**\n * If the beforeSchedule hook returned `shouldSchedule: false`, this will be called with status `skipped`.\n */\n status: 'skipped'\n }\n ),\n) => MaybePromise<void>\n\nexport type ScheduleConfig = {\n /**\n * The cron for scheduling the job.\n *\n * @example\n * ┌───────────── (optional) second (0 - 59)\n * │ ┌───────────── minute (0 - 59)\n * │ │ ┌───────────── hour (0 - 23)\n * │ │ │ ┌───────────── day of the month (1 - 31)\n * │ │ │ │ ┌───────────── month (1 - 12)\n * │ │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday)\n * │ │ │ │ │ │\n * │ │ │ │ │ │\n * - '* 0 * * * *' every hour at minute 0\n * - '* 0 0 * * *' daily at midnight\n * - '* 0 0 * * 0' weekly at midnight on Sundays\n * - '* 0 0 1 * *' monthly at midnight on the 1st day of the month\n * - '* 0/5 * * * *' every 5 minutes\n * - '* * * * * *' every second\n */\n cron: string\n hooks?: {\n /**\n * Functions that will be executed after the job has been successfully scheduled.\n *\n * @default By default, global update?? Unless global update should happen before\n */\n afterSchedule?: AfterScheduleFn\n /**\n * Functions that will be executed before the job is scheduled.\n * You can use this to control whether or not the job should be scheduled, or what input\n * data should be passed to the job.\n *\n * @default By default, this has one function that returns { shouldSchedule: true } if the following conditions are met:\n * - There currently is no job of the same type in the specified queue that is currently running\n * - There currently is no job of the same type in the specified queue that is scheduled to run in the future\n * - There currently is no job of the same type in the specified queue that failed previously but can be retried\n */\n beforeSchedule?: BeforeScheduleFn\n }\n /**\n * Queue to which the scheduled job will be added.\n */\n queue: string\n}\n"],"names":[],"mappings":"AAyQA,WA4CC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleSchedules.d.ts","sourceRoot":"","sources":["../../../src/queues/endpoints/handleSchedules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"handleSchedules.d.ts","sourceRoot":"","sources":["../../../src/queues/endpoints/handleSchedules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAMrD;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,EAAE,QA8DzC,CAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { defaultAccess } from '../../auth/defaultAccess.js';
|
|
1
2
|
import { handleSchedules } from '../operations/handleSchedules/index.js';
|
|
2
3
|
import { configHasJobs } from './run.js';
|
|
3
4
|
/**
|
|
@@ -14,7 +15,7 @@ import { configHasJobs } from './run.js';
|
|
|
14
15
|
status: 200
|
|
15
16
|
});
|
|
16
17
|
}
|
|
17
|
-
const accessFn = jobsConfig.access?.run ??
|
|
18
|
+
const accessFn = jobsConfig.access?.run ?? defaultAccess;
|
|
18
19
|
const hasAccess = await accessFn({
|
|
19
20
|
req
|
|
20
21
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/queues/endpoints/handleSchedules.ts"],"sourcesContent":["import type { Endpoint } from '../../config/types.js'\n\nimport { handleSchedules } from '../operations/handleSchedules/index.js'\nimport { configHasJobs } from './run.js'\n\n/**\n * GET /api/payload-jobs/handle-schedules endpoint\n *\n * This endpoint is GET instead of POST to allow it to be used in a Vercel Cron.\n */\nexport const handleSchedulesJobsEndpoint: Endpoint = {\n handler: async (req) => {\n const jobsConfig = req.payload.config.jobs\n\n if (!configHasJobs(jobsConfig)) {\n return Response.json(\n {\n message: 'No jobs to schedule.',\n },\n { status: 200 },\n )\n }\n\n const accessFn = jobsConfig.access?.run ??
|
|
1
|
+
{"version":3,"sources":["../../../src/queues/endpoints/handleSchedules.ts"],"sourcesContent":["import type { Endpoint } from '../../config/types.js'\n\nimport { defaultAccess } from '../../auth/defaultAccess.js'\nimport { handleSchedules } from '../operations/handleSchedules/index.js'\nimport { configHasJobs } from './run.js'\n\n/**\n * GET /api/payload-jobs/handle-schedules endpoint\n *\n * This endpoint is GET instead of POST to allow it to be used in a Vercel Cron.\n */\nexport const handleSchedulesJobsEndpoint: Endpoint = {\n handler: async (req) => {\n const jobsConfig = req.payload.config.jobs\n\n if (!configHasJobs(jobsConfig)) {\n return Response.json(\n {\n message: 'No jobs to schedule.',\n },\n { status: 200 },\n )\n }\n\n const accessFn = jobsConfig.access?.run ?? defaultAccess\n\n const hasAccess = await accessFn({ req })\n\n if (!hasAccess) {\n return Response.json(\n {\n message: req.i18n.t('error:unauthorized'),\n },\n { status: 401 },\n )\n }\n\n if (!jobsConfig.scheduling) {\n // There is no reason to call the handleSchedules endpoint if the stats global is not enabled (= no schedules defined)\n return Response.json(\n {\n message:\n 'Cannot handle schedules because no tasks or workflows with schedules are defined.',\n },\n { status: 500 },\n )\n }\n\n const { allQueues, queue } = req.query as {\n allQueues?: 'false' | 'true'\n queue?: string\n }\n\n const runAllQueues = allQueues && !(typeof allQueues === 'string' && allQueues === 'false')\n\n const { errored, queued, skipped } = await handleSchedules({\n allQueues: runAllQueues,\n queue,\n req,\n })\n\n return Response.json(\n {\n errored,\n message: req.i18n.t('general:success'),\n queued,\n skipped,\n },\n { status: 200 },\n )\n },\n method: 'get',\n path: '/handle-schedules',\n}\n"],"names":["defaultAccess","handleSchedules","configHasJobs","handleSchedulesJobsEndpoint","handler","req","jobsConfig","payload","config","jobs","Response","json","message","status","accessFn","access","run","hasAccess","i18n","t","scheduling","allQueues","queue","query","runAllQueues","errored","queued","skipped","method","path"],"mappings":"AAEA,SAASA,aAAa,QAAQ,8BAA6B;AAC3D,SAASC,eAAe,QAAQ,yCAAwC;AACxE,SAASC,aAAa,QAAQ,WAAU;AAExC;;;;CAIC,GACD,OAAO,MAAMC,8BAAwC;IACnDC,SAAS,OAAOC;QACd,MAAMC,aAAaD,IAAIE,OAAO,CAACC,MAAM,CAACC,IAAI;QAE1C,IAAI,CAACP,cAAcI,aAAa;YAC9B,OAAOI,SAASC,IAAI,CAClB;gBACEC,SAAS;YACX,GACA;gBAAEC,QAAQ;YAAI;QAElB;QAEA,MAAMC,WAAWR,WAAWS,MAAM,EAAEC,OAAOhB;QAE3C,MAAMiB,YAAY,MAAMH,SAAS;YAAET;QAAI;QAEvC,IAAI,CAACY,WAAW;YACd,OAAOP,SAASC,IAAI,CAClB;gBACEC,SAASP,IAAIa,IAAI,CAACC,CAAC,CAAC;YACtB,GACA;gBAAEN,QAAQ;YAAI;QAElB;QAEA,IAAI,CAACP,WAAWc,UAAU,EAAE;YAC1B,sHAAsH;YACtH,OAAOV,SAASC,IAAI,CAClB;gBACEC,SACE;YACJ,GACA;gBAAEC,QAAQ;YAAI;QAElB;QAEA,MAAM,EAAEQ,SAAS,EAAEC,KAAK,EAAE,GAAGjB,IAAIkB,KAAK;QAKtC,MAAMC,eAAeH,aAAa,CAAE,CAAA,OAAOA,cAAc,YAAYA,cAAc,OAAM;QAEzF,MAAM,EAAEI,OAAO,EAAEC,MAAM,EAAEC,OAAO,EAAE,GAAG,MAAM1B,gBAAgB;YACzDoB,WAAWG;YACXF;YACAjB;QACF;QAEA,OAAOK,SAASC,IAAI,CAClB;YACEc;YACAb,SAASP,IAAIa,IAAI,CAACC,CAAC,CAAC;YACpBO;YACAC;QACF,GACA;YAAEd,QAAQ;QAAI;IAElB;IACAe,QAAQ;IACRC,MAAM;AACR,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/queues/endpoints/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/queues/endpoints/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAKnE;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,QAmG7B,CAAA;AAED,eAAO,MAAM,aAAa,eAAgB,mBAAmB,KAAG,OAE/D,CAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { defaultAccess } from '../../auth/defaultAccess.js';
|
|
1
2
|
import { runJobs } from '../operations/runJobs/index.js';
|
|
2
3
|
/**
|
|
3
4
|
* /api/payload-jobs/run endpoint
|
|
@@ -13,7 +14,7 @@ import { runJobs } from '../operations/runJobs/index.js';
|
|
|
13
14
|
status: 200
|
|
14
15
|
});
|
|
15
16
|
}
|
|
16
|
-
const accessFn = jobsConfig.access?.run ??
|
|
17
|
+
const accessFn = jobsConfig.access?.run ?? defaultAccess;
|
|
17
18
|
const hasAccess = await accessFn({
|
|
18
19
|
req
|
|
19
20
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/queues/endpoints/run.ts"],"sourcesContent":["import type { Endpoint } from '../../config/types.js'\nimport type { SanitizedJobsConfig } from '../config/types/index.js'\n\nimport { runJobs, type RunJobsArgs } from '../operations/runJobs/index.js'\n\n/**\n * /api/payload-jobs/run endpoint\n *\n * This endpoint is GET instead of POST to allow it to be used in a Vercel Cron.\n */\nexport const runJobsEndpoint: Endpoint = {\n handler: async (req) => {\n const jobsConfig = req.payload.config.jobs\n\n if (!configHasJobs(jobsConfig)) {\n return Response.json(\n {\n message: 'No jobs to run.',\n },\n { status: 200 },\n )\n }\n\n const accessFn = jobsConfig.access?.run ??
|
|
1
|
+
{"version":3,"sources":["../../../src/queues/endpoints/run.ts"],"sourcesContent":["import type { Endpoint } from '../../config/types.js'\nimport type { SanitizedJobsConfig } from '../config/types/index.js'\n\nimport { defaultAccess } from '../../auth/defaultAccess.js'\nimport { runJobs, type RunJobsArgs } from '../operations/runJobs/index.js'\n\n/**\n * /api/payload-jobs/run endpoint\n *\n * This endpoint is GET instead of POST to allow it to be used in a Vercel Cron.\n */\nexport const runJobsEndpoint: Endpoint = {\n handler: async (req) => {\n const jobsConfig = req.payload.config.jobs\n\n if (!configHasJobs(jobsConfig)) {\n return Response.json(\n {\n message: 'No jobs to run.',\n },\n { status: 200 },\n )\n }\n\n const accessFn = jobsConfig.access?.run ?? defaultAccess\n\n const hasAccess = await accessFn({ req })\n\n if (!hasAccess) {\n return Response.json(\n {\n message: req.i18n.t('error:unauthorized'),\n },\n { status: 401 },\n )\n }\n\n const {\n allQueues,\n disableScheduling: disableSchedulingParam,\n limit,\n queue,\n silent: silentParam,\n } = req.query as {\n allQueues?: 'false' | 'true'\n disableScheduling?: 'false' | 'true'\n limit?: number\n queue?: string\n silent?: string\n }\n\n const silent = silentParam === 'true'\n\n const shouldHandleSchedules = disableSchedulingParam !== 'true'\n\n const runAllQueues = allQueues && !(typeof allQueues === 'string' && allQueues === 'false')\n\n if (shouldHandleSchedules && jobsConfig.scheduling) {\n // If should handle schedules and schedules are defined\n await req.payload.jobs.handleSchedules({ allQueues: runAllQueues, queue, req })\n }\n\n const runJobsArgs: RunJobsArgs = {\n queue,\n req,\n // Access is validated above, so it's safe to override here\n allQueues: runAllQueues,\n overrideAccess: true,\n silent,\n }\n\n const parsedLimit = Number(limit)\n if (!isNaN(parsedLimit)) {\n runJobsArgs.limit = parsedLimit\n }\n\n let noJobsRemaining = false\n let remainingJobsFromQueried = 0\n try {\n const result = await runJobs(runJobsArgs)\n noJobsRemaining = !!result.noJobsRemaining\n remainingJobsFromQueried = result.remainingJobsFromQueried\n } catch (err) {\n req.payload.logger.error({\n err,\n msg: 'There was an error running jobs:',\n queue: runJobsArgs.queue,\n })\n\n return Response.json(\n {\n message: req.i18n.t('error:unknown'),\n noJobsRemaining: true,\n remainingJobsFromQueried,\n },\n { status: 500 },\n )\n }\n\n return Response.json(\n {\n message: req.i18n.t('general:success'),\n noJobsRemaining,\n remainingJobsFromQueried,\n },\n { status: 200 },\n )\n },\n method: 'get',\n path: '/run',\n}\n\nexport const configHasJobs = (jobsConfig: SanitizedJobsConfig): boolean => {\n return Boolean(jobsConfig.tasks?.length || jobsConfig.workflows?.length)\n}\n"],"names":["defaultAccess","runJobs","runJobsEndpoint","handler","req","jobsConfig","payload","config","jobs","configHasJobs","Response","json","message","status","accessFn","access","run","hasAccess","i18n","t","allQueues","disableScheduling","disableSchedulingParam","limit","queue","silent","silentParam","query","shouldHandleSchedules","runAllQueues","scheduling","handleSchedules","runJobsArgs","overrideAccess","parsedLimit","Number","isNaN","noJobsRemaining","remainingJobsFromQueried","result","err","logger","error","msg","method","path","Boolean","tasks","length","workflows"],"mappings":"AAGA,SAASA,aAAa,QAAQ,8BAA6B;AAC3D,SAASC,OAAO,QAA0B,iCAAgC;AAE1E;;;;CAIC,GACD,OAAO,MAAMC,kBAA4B;IACvCC,SAAS,OAAOC;QACd,MAAMC,aAAaD,IAAIE,OAAO,CAACC,MAAM,CAACC,IAAI;QAE1C,IAAI,CAACC,cAAcJ,aAAa;YAC9B,OAAOK,SAASC,IAAI,CAClB;gBACEC,SAAS;YACX,GACA;gBAAEC,QAAQ;YAAI;QAElB;QAEA,MAAMC,WAAWT,WAAWU,MAAM,EAAEC,OAAOhB;QAE3C,MAAMiB,YAAY,MAAMH,SAAS;YAAEV;QAAI;QAEvC,IAAI,CAACa,WAAW;YACd,OAAOP,SAASC,IAAI,CAClB;gBACEC,SAASR,IAAIc,IAAI,CAACC,CAAC,CAAC;YACtB,GACA;gBAAEN,QAAQ;YAAI;QAElB;QAEA,MAAM,EACJO,SAAS,EACTC,mBAAmBC,sBAAsB,EACzCC,KAAK,EACLC,KAAK,EACLC,QAAQC,WAAW,EACpB,GAAGtB,IAAIuB,KAAK;QAQb,MAAMF,SAASC,gBAAgB;QAE/B,MAAME,wBAAwBN,2BAA2B;QAEzD,MAAMO,eAAeT,aAAa,CAAE,CAAA,OAAOA,cAAc,YAAYA,cAAc,OAAM;QAEzF,IAAIQ,yBAAyBvB,WAAWyB,UAAU,EAAE;YAClD,uDAAuD;YACvD,MAAM1B,IAAIE,OAAO,CAACE,IAAI,CAACuB,eAAe,CAAC;gBAAEX,WAAWS;gBAAcL;gBAAOpB;YAAI;QAC/E;QAEA,MAAM4B,cAA2B;YAC/BR;YACApB;YACA,2DAA2D;YAC3DgB,WAAWS;YACXI,gBAAgB;YAChBR;QACF;QAEA,MAAMS,cAAcC,OAAOZ;QAC3B,IAAI,CAACa,MAAMF,cAAc;YACvBF,YAAYT,KAAK,GAAGW;QACtB;QAEA,IAAIG,kBAAkB;QACtB,IAAIC,2BAA2B;QAC/B,IAAI;YACF,MAAMC,SAAS,MAAMtC,QAAQ+B;YAC7BK,kBAAkB,CAAC,CAACE,OAAOF,eAAe;YAC1CC,2BAA2BC,OAAOD,wBAAwB;QAC5D,EAAE,OAAOE,KAAK;YACZpC,IAAIE,OAAO,CAACmC,MAAM,CAACC,KAAK,CAAC;gBACvBF;gBACAG,KAAK;gBACLnB,OAAOQ,YAAYR,KAAK;YAC1B;YAEA,OAAOd,SAASC,IAAI,CAClB;gBACEC,SAASR,IAAIc,IAAI,CAACC,CAAC,CAAC;gBACpBkB,iBAAiB;gBACjBC;YACF,GACA;gBAAEzB,QAAQ;YAAI;QAElB;QAEA,OAAOH,SAASC,IAAI,CAClB;YACEC,SAASR,IAAIc,IAAI,CAACC,CAAC,CAAC;YACpBkB;YACAC;QACF,GACA;YAAEzB,QAAQ;QAAI;IAElB;IACA+B,QAAQ;IACRC,MAAM;AACR,EAAC;AAED,OAAO,MAAMpC,gBAAgB,CAACJ;IAC5B,OAAOyC,QAAQzC,WAAW0C,KAAK,EAAEC,UAAU3C,WAAW4C,SAAS,EAAED;AACnE,EAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { PayloadRequest } from '../types/index.js';
|
|
2
|
+
/** Checks collection write permissions before an adapter grants access to upload file bytes. */
|
|
3
|
+
export declare const assertClientUploadAccess: ({ collectionSlug, req, }: {
|
|
4
|
+
collectionSlug: string;
|
|
5
|
+
req: PayloadRequest;
|
|
6
|
+
}) => Promise<void>;
|
|
7
|
+
//# sourceMappingURL=assertClientUploadAccess.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertClientUploadAccess.d.ts","sourceRoot":"","sources":["../../src/uploads/assertClientUploadAccess.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAKvD,gGAAgG;AAChG,eAAO,MAAM,wBAAwB,6BAGlC;IACD,cAAc,EAAE,MAAM,CAAA;IACtB,GAAG,EAAE,cAAc,CAAA;CACpB,KAAG,OAAO,CAAC,IAAI,CA4Bf,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { executeAccess } from '../auth/executeAccess.js';
|
|
2
|
+
import { Forbidden } from '../errors/Forbidden.js';
|
|
3
|
+
/** Checks collection write permissions before an adapter grants access to upload file bytes. */ export const assertClientUploadAccess = async ({ collectionSlug, req })=>{
|
|
4
|
+
if (!req.user) {
|
|
5
|
+
throw new Forbidden(req.t);
|
|
6
|
+
}
|
|
7
|
+
const collectionConfig = req.payload.collections[collectionSlug]?.config;
|
|
8
|
+
if (!collectionConfig) {
|
|
9
|
+
throw new Forbidden(req.t);
|
|
10
|
+
}
|
|
11
|
+
const canCreate = await executeAccess({
|
|
12
|
+
disableErrors: true,
|
|
13
|
+
req
|
|
14
|
+
}, collectionConfig.access.create);
|
|
15
|
+
if (canCreate) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const canUpdate = await executeAccess({
|
|
19
|
+
disableErrors: true,
|
|
20
|
+
req
|
|
21
|
+
}, collectionConfig.access.update);
|
|
22
|
+
if (!canUpdate) {
|
|
23
|
+
throw new Forbidden(req.t);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=assertClientUploadAccess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/uploads/assertClientUploadAccess.ts"],"sourcesContent":["import type { PayloadRequest } from '../types/index.js'\n\nimport { executeAccess } from '../auth/executeAccess.js'\nimport { Forbidden } from '../errors/Forbidden.js'\n\n/** Checks collection write permissions before an adapter grants access to upload file bytes. */\nexport const assertClientUploadAccess = async ({\n collectionSlug,\n req,\n}: {\n collectionSlug: string\n req: PayloadRequest\n}): Promise<void> => {\n if (!req.user) {\n throw new Forbidden(req.t)\n }\n\n const collectionConfig = req.payload.collections[collectionSlug]?.config\n\n if (!collectionConfig) {\n throw new Forbidden(req.t)\n }\n\n const canCreate = await executeAccess(\n { disableErrors: true, req },\n collectionConfig.access.create,\n )\n\n if (canCreate) {\n return\n }\n\n const canUpdate = await executeAccess(\n { disableErrors: true, req },\n collectionConfig.access.update,\n )\n\n if (!canUpdate) {\n throw new Forbidden(req.t)\n }\n}\n"],"names":["executeAccess","Forbidden","assertClientUploadAccess","collectionSlug","req","user","t","collectionConfig","payload","collections","config","canCreate","disableErrors","access","create","canUpdate","update"],"mappings":"AAEA,SAASA,aAAa,QAAQ,2BAA0B;AACxD,SAASC,SAAS,QAAQ,yBAAwB;AAElD,8FAA8F,GAC9F,OAAO,MAAMC,2BAA2B,OAAO,EAC7CC,cAAc,EACdC,GAAG,EAIJ;IACC,IAAI,CAACA,IAAIC,IAAI,EAAE;QACb,MAAM,IAAIJ,UAAUG,IAAIE,CAAC;IAC3B;IAEA,MAAMC,mBAAmBH,IAAII,OAAO,CAACC,WAAW,CAACN,eAAe,EAAEO;IAElE,IAAI,CAACH,kBAAkB;QACrB,MAAM,IAAIN,UAAUG,IAAIE,CAAC;IAC3B;IAEA,MAAMK,YAAY,MAAMX,cACtB;QAAEY,eAAe;QAAMR;IAAI,GAC3BG,iBAAiBM,MAAM,CAACC,MAAM;IAGhC,IAAIH,WAAW;QACb;IACF;IAEA,MAAMI,YAAY,MAAMf,cACtB;QAAEY,eAAe;QAAMR;IAAI,GAC3BG,iBAAiBM,MAAM,CAACG,MAAM;IAGhC,IAAI,CAACD,WAAW;QACd,MAAM,IAAId,UAAUG,IAAIE,CAAC;IAC3B;AACF,EAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const assertClientUploadFileSize: (filesize: unknown) => void;
|
|
2
|
+
export declare const assertClientUploadAllowed: ({ collection, filename, mimeType, }: {
|
|
3
|
+
collection?: {
|
|
4
|
+
upload?: {
|
|
5
|
+
allowRestrictedFileTypes?: boolean;
|
|
6
|
+
} | boolean;
|
|
7
|
+
};
|
|
8
|
+
filename: unknown;
|
|
9
|
+
mimeType?: unknown;
|
|
10
|
+
}) => void;
|
|
11
|
+
//# sourceMappingURL=assertClientUploadAllowed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertClientUploadAllowed.d.ts","sourceRoot":"","sources":["../../src/uploads/assertClientUploadAllowed.ts"],"names":[],"mappings":"AA4BA,eAAO,MAAM,0BAA0B,aAAc,OAAO,SAI3D,CAAA;AAED,eAAO,MAAM,yBAAyB,wCAInC;IACD,UAAU,CAAC,EAAE;QACX,MAAM,CAAC,EAAE;YAAE,wBAAwB,CAAC,EAAE,OAAO,CAAA;SAAE,GAAG,OAAO,CAAA;KAC1D,CAAA;IACD,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,KAAG,IA+BH,CAAA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { APIError } from '../errors/APIError.js';
|
|
2
|
+
import { getSanitizedUploadFilename, uploadRequiresServerValidation } from './getFileTypeIdentity.js';
|
|
3
|
+
const MIME_TYPE_PATTERN = /^[!#$%&'*+.^`|~\w-]+\/[!#$%&'*+.^`|~\w-]+$/;
|
|
4
|
+
const isValidMimeType = (mimeType)=>{
|
|
5
|
+
if (typeof mimeType !== 'string' || mimeType.length === 0 || mimeType !== mimeType.trim() || [
|
|
6
|
+
...mimeType
|
|
7
|
+
].some((character)=>{
|
|
8
|
+
const codePoint = character.codePointAt(0);
|
|
9
|
+
return codePoint !== undefined && (codePoint <= 0x1f || codePoint === 0x7f);
|
|
10
|
+
})) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
const [essence, ...parameters] = mimeType.split(';');
|
|
14
|
+
return MIME_TYPE_PATTERN.test(essence ?? '') && parameters.every((parameter)=>parameter.trim().length > 0);
|
|
15
|
+
};
|
|
16
|
+
export const assertClientUploadFileSize = (filesize)=>{
|
|
17
|
+
if (typeof filesize !== 'number' || !Number.isSafeInteger(filesize) || filesize < 0) {
|
|
18
|
+
throw new APIError('A valid file size is required for client uploads.', 400);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
export const assertClientUploadAllowed = ({ collection, filename, mimeType })=>{
|
|
22
|
+
if (typeof filename !== 'string' || filename.length === 0 || filename.trim().length === 0 || !getSanitizedUploadFilename(filename)) {
|
|
23
|
+
throw new APIError('A valid filename is required for client uploads.', 400);
|
|
24
|
+
}
|
|
25
|
+
const allowRestrictedFileTypes = collection && typeof collection.upload === 'object' ? collection.upload.allowRestrictedFileTypes : false;
|
|
26
|
+
// The explicit restricted-file opt-out also preserves legacy provider clients that did not
|
|
27
|
+
// send MIME metadata. Secure-default collections always require a bindable MIME identity.
|
|
28
|
+
if (mimeType === undefined || mimeType === null || mimeType === '') {
|
|
29
|
+
if (allowRestrictedFileTypes) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
throw new APIError('A valid MIME type is required for client uploads.', 400);
|
|
33
|
+
}
|
|
34
|
+
if (!isValidMimeType(mimeType)) {
|
|
35
|
+
throw new APIError('A valid MIME type is required for client uploads.', 400);
|
|
36
|
+
}
|
|
37
|
+
if (uploadRequiresServerValidation({
|
|
38
|
+
allowRestrictedFileTypes,
|
|
39
|
+
filename,
|
|
40
|
+
mimeType
|
|
41
|
+
})) {
|
|
42
|
+
throw new APIError('SVG and XML files must be uploaded through Payload.', 400);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
//# sourceMappingURL=assertClientUploadAllowed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/uploads/assertClientUploadAllowed.ts"],"sourcesContent":["import { APIError } from '../errors/APIError.js'\nimport {\n getSanitizedUploadFilename,\n uploadRequiresServerValidation,\n} from './getFileTypeIdentity.js'\n\nconst MIME_TYPE_PATTERN = /^[!#$%&'*+.^`|~\\w-]+\\/[!#$%&'*+.^`|~\\w-]+$/\n\nconst isValidMimeType = (mimeType: unknown): mimeType is string => {\n if (\n typeof mimeType !== 'string' ||\n mimeType.length === 0 ||\n mimeType !== mimeType.trim() ||\n [...mimeType].some((character) => {\n const codePoint = character.codePointAt(0)\n return codePoint !== undefined && (codePoint <= 0x1f || codePoint === 0x7f)\n })\n ) {\n return false\n }\n\n const [essence, ...parameters] = mimeType.split(';')\n return (\n MIME_TYPE_PATTERN.test(essence ?? '') &&\n parameters.every((parameter) => parameter.trim().length > 0)\n )\n}\n\nexport const assertClientUploadFileSize = (filesize: unknown) => {\n if (typeof filesize !== 'number' || !Number.isSafeInteger(filesize) || filesize < 0) {\n throw new APIError('A valid file size is required for client uploads.', 400)\n }\n}\n\nexport const assertClientUploadAllowed = ({\n collection,\n filename,\n mimeType,\n}: {\n collection?: {\n upload?: { allowRestrictedFileTypes?: boolean } | boolean\n }\n filename: unknown\n mimeType?: unknown\n}): void => {\n if (\n typeof filename !== 'string' ||\n filename.length === 0 ||\n filename.trim().length === 0 ||\n !getSanitizedUploadFilename(filename)\n ) {\n throw new APIError('A valid filename is required for client uploads.', 400)\n }\n\n const allowRestrictedFileTypes =\n collection && typeof collection.upload === 'object'\n ? collection.upload.allowRestrictedFileTypes\n : false\n\n // The explicit restricted-file opt-out also preserves legacy provider clients that did not\n // send MIME metadata. Secure-default collections always require a bindable MIME identity.\n if (mimeType === undefined || mimeType === null || mimeType === '') {\n if (allowRestrictedFileTypes) {\n return\n }\n throw new APIError('A valid MIME type is required for client uploads.', 400)\n }\n\n if (!isValidMimeType(mimeType)) {\n throw new APIError('A valid MIME type is required for client uploads.', 400)\n }\n\n if (uploadRequiresServerValidation({ allowRestrictedFileTypes, filename, mimeType })) {\n throw new APIError('SVG and XML files must be uploaded through Payload.', 400)\n }\n}\n"],"names":["APIError","getSanitizedUploadFilename","uploadRequiresServerValidation","MIME_TYPE_PATTERN","isValidMimeType","mimeType","length","trim","some","character","codePoint","codePointAt","undefined","essence","parameters","split","test","every","parameter","assertClientUploadFileSize","filesize","Number","isSafeInteger","assertClientUploadAllowed","collection","filename","allowRestrictedFileTypes","upload"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,wBAAuB;AAChD,SACEC,0BAA0B,EAC1BC,8BAA8B,QACzB,2BAA0B;AAEjC,MAAMC,oBAAoB;AAE1B,MAAMC,kBAAkB,CAACC;IACvB,IACE,OAAOA,aAAa,YACpBA,SAASC,MAAM,KAAK,KACpBD,aAAaA,SAASE,IAAI,MAC1B;WAAIF;KAAS,CAACG,IAAI,CAAC,CAACC;QAClB,MAAMC,YAAYD,UAAUE,WAAW,CAAC;QACxC,OAAOD,cAAcE,aAAcF,CAAAA,aAAa,QAAQA,cAAc,IAAG;IAC3E,IACA;QACA,OAAO;IACT;IAEA,MAAM,CAACG,SAAS,GAAGC,WAAW,GAAGT,SAASU,KAAK,CAAC;IAChD,OACEZ,kBAAkBa,IAAI,CAACH,WAAW,OAClCC,WAAWG,KAAK,CAAC,CAACC,YAAcA,UAAUX,IAAI,GAAGD,MAAM,GAAG;AAE9D;AAEA,OAAO,MAAMa,6BAA6B,CAACC;IACzC,IAAI,OAAOA,aAAa,YAAY,CAACC,OAAOC,aAAa,CAACF,aAAaA,WAAW,GAAG;QACnF,MAAM,IAAIpB,SAAS,qDAAqD;IAC1E;AACF,EAAC;AAED,OAAO,MAAMuB,4BAA4B,CAAC,EACxCC,UAAU,EACVC,QAAQ,EACRpB,QAAQ,EAOT;IACC,IACE,OAAOoB,aAAa,YACpBA,SAASnB,MAAM,KAAK,KACpBmB,SAASlB,IAAI,GAAGD,MAAM,KAAK,KAC3B,CAACL,2BAA2BwB,WAC5B;QACA,MAAM,IAAIzB,SAAS,oDAAoD;IACzE;IAEA,MAAM0B,2BACJF,cAAc,OAAOA,WAAWG,MAAM,KAAK,WACvCH,WAAWG,MAAM,CAACD,wBAAwB,GAC1C;IAEN,2FAA2F;IAC3F,0FAA0F;IAC1F,IAAIrB,aAAaO,aAAaP,aAAa,QAAQA,aAAa,IAAI;QAClE,IAAIqB,0BAA0B;YAC5B;QACF;QACA,MAAM,IAAI1B,SAAS,qDAAqD;IAC1E;IAEA,IAAI,CAACI,gBAAgBC,WAAW;QAC9B,MAAM,IAAIL,SAAS,qDAAqD;IAC1E;IAEA,IAAIE,+BAA+B;QAAEwB;QAA0BD;QAAUpB;IAAS,IAAI;QACpF,MAAM,IAAIL,SAAS,uDAAuD;IAC5E;AACF,EAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { assertClientUploadAllowed } from './assertClientUploadAllowed.js';
|
|
3
|
+
describe('assertClientUploadAllowed', ()=>{
|
|
4
|
+
it.each([
|
|
5
|
+
[
|
|
6
|
+
'missing',
|
|
7
|
+
undefined
|
|
8
|
+
],
|
|
9
|
+
[
|
|
10
|
+
'whitespace',
|
|
11
|
+
' '
|
|
12
|
+
]
|
|
13
|
+
])('should validate %s filename metadata', (_, filename)=>{
|
|
14
|
+
expect(()=>assertClientUploadAllowed({
|
|
15
|
+
filename: filename,
|
|
16
|
+
mimeType: 'image/png'
|
|
17
|
+
})).toThrow('A valid filename is required for client uploads.');
|
|
18
|
+
});
|
|
19
|
+
it.each([
|
|
20
|
+
[
|
|
21
|
+
'missing',
|
|
22
|
+
undefined
|
|
23
|
+
],
|
|
24
|
+
[
|
|
25
|
+
'invalid',
|
|
26
|
+
'image'
|
|
27
|
+
]
|
|
28
|
+
])('should validate %s MIME metadata', (_, mimeType)=>{
|
|
29
|
+
expect(()=>assertClientUploadAllowed({
|
|
30
|
+
filename: 'image.png',
|
|
31
|
+
mimeType: mimeType
|
|
32
|
+
})).toThrow('A valid MIME type is required for client uploads.');
|
|
33
|
+
});
|
|
34
|
+
it.each([
|
|
35
|
+
[
|
|
36
|
+
'filename extension',
|
|
37
|
+
'image.SVG',
|
|
38
|
+
'application/octet-stream'
|
|
39
|
+
],
|
|
40
|
+
[
|
|
41
|
+
'declared MIME parameters',
|
|
42
|
+
'image.txt',
|
|
43
|
+
'image/svg+xml; charset=utf-8'
|
|
44
|
+
],
|
|
45
|
+
[
|
|
46
|
+
'XML extension',
|
|
47
|
+
'image.xml',
|
|
48
|
+
'application/octet-stream'
|
|
49
|
+
],
|
|
50
|
+
[
|
|
51
|
+
'XML structured-suffix MIME',
|
|
52
|
+
'image.txt',
|
|
53
|
+
'application/xhtml+xml; charset=utf-8'
|
|
54
|
+
],
|
|
55
|
+
[
|
|
56
|
+
'sanitized trailing period',
|
|
57
|
+
'image.svg.',
|
|
58
|
+
'application/octet-stream'
|
|
59
|
+
]
|
|
60
|
+
])('should require a server upload for content identified by %s', (_, filename, mimeType)=>{
|
|
61
|
+
expect(()=>assertClientUploadAllowed({
|
|
62
|
+
filename,
|
|
63
|
+
mimeType
|
|
64
|
+
})).toThrow('SVG and XML files must be uploaded through Payload.');
|
|
65
|
+
});
|
|
66
|
+
it('should preserve configured client upload paths', ()=>{
|
|
67
|
+
expect(()=>assertClientUploadAllowed({
|
|
68
|
+
filename: 'image.png',
|
|
69
|
+
mimeType: 'image/png'
|
|
70
|
+
})).not.toThrow();
|
|
71
|
+
expect(()=>assertClientUploadAllowed({
|
|
72
|
+
collection: {
|
|
73
|
+
upload: {
|
|
74
|
+
allowRestrictedFileTypes: true
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
filename: 'image.svg',
|
|
78
|
+
mimeType: 'image/svg+xml'
|
|
79
|
+
})).not.toThrow();
|
|
80
|
+
expect(()=>assertClientUploadAllowed({
|
|
81
|
+
collection: {
|
|
82
|
+
upload: {
|
|
83
|
+
allowRestrictedFileTypes: true
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
filename: 'image.png'
|
|
87
|
+
})).not.toThrow();
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
//# sourceMappingURL=assertClientUploadAllowed.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/uploads/assertClientUploadAllowed.spec.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { assertClientUploadAllowed } from './assertClientUploadAllowed.js'\n\ndescribe('assertClientUploadAllowed', () => {\n it.each([\n ['missing', undefined],\n ['whitespace', ' '],\n ])('should validate %s filename metadata', (_, filename) => {\n expect(() =>\n assertClientUploadAllowed({\n filename: filename as unknown as string,\n mimeType: 'image/png',\n }),\n ).toThrow('A valid filename is required for client uploads.')\n })\n\n it.each([\n ['missing', undefined],\n ['invalid', 'image'],\n ])('should validate %s MIME metadata', (_, mimeType) => {\n expect(() =>\n assertClientUploadAllowed({\n filename: 'image.png',\n mimeType: mimeType as unknown as string,\n }),\n ).toThrow('A valid MIME type is required for client uploads.')\n })\n\n it.each([\n ['filename extension', 'image.SVG', 'application/octet-stream'],\n ['declared MIME parameters', 'image.txt', 'image/svg+xml; charset=utf-8'],\n ['XML extension', 'image.xml', 'application/octet-stream'],\n ['XML structured-suffix MIME', 'image.txt', 'application/xhtml+xml; charset=utf-8'],\n ['sanitized trailing period', 'image.svg.', 'application/octet-stream'],\n ])('should require a server upload for content identified by %s', (_, filename, mimeType) => {\n expect(() => assertClientUploadAllowed({ filename, mimeType })).toThrow(\n 'SVG and XML files must be uploaded through Payload.',\n )\n })\n\n it('should preserve configured client upload paths', () => {\n expect(() =>\n assertClientUploadAllowed({ filename: 'image.png', mimeType: 'image/png' }),\n ).not.toThrow()\n expect(() =>\n assertClientUploadAllowed({\n collection: { upload: { allowRestrictedFileTypes: true } },\n filename: 'image.svg',\n mimeType: 'image/svg+xml',\n }),\n ).not.toThrow()\n expect(() =>\n assertClientUploadAllowed({\n collection: { upload: { allowRestrictedFileTypes: true } },\n filename: 'image.png',\n }),\n ).not.toThrow()\n })\n})\n"],"names":["describe","expect","it","assertClientUploadAllowed","each","undefined","_","filename","mimeType","toThrow","not","collection","upload","allowRestrictedFileTypes"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAQ;AAE7C,SAASC,yBAAyB,QAAQ,iCAAgC;AAE1EH,SAAS,6BAA6B;IACpCE,GAAGE,IAAI,CAAC;QACN;YAAC;YAAWC;SAAU;QACtB;YAAC;YAAc;SAAM;KACtB,EAAE,wCAAwC,CAACC,GAAGC;QAC7CN,OAAO,IACLE,0BAA0B;gBACxBI,UAAUA;gBACVC,UAAU;YACZ,IACAC,OAAO,CAAC;IACZ;IAEAP,GAAGE,IAAI,CAAC;QACN;YAAC;YAAWC;SAAU;QACtB;YAAC;YAAW;SAAQ;KACrB,EAAE,oCAAoC,CAACC,GAAGE;QACzCP,OAAO,IACLE,0BAA0B;gBACxBI,UAAU;gBACVC,UAAUA;YACZ,IACAC,OAAO,CAAC;IACZ;IAEAP,GAAGE,IAAI,CAAC;QACN;YAAC;YAAsB;YAAa;SAA2B;QAC/D;YAAC;YAA4B;YAAa;SAA+B;QACzE;YAAC;YAAiB;YAAa;SAA2B;QAC1D;YAAC;YAA8B;YAAa;SAAuC;QACnF;YAAC;YAA6B;YAAc;SAA2B;KACxE,EAAE,+DAA+D,CAACE,GAAGC,UAAUC;QAC9EP,OAAO,IAAME,0BAA0B;gBAAEI;gBAAUC;YAAS,IAAIC,OAAO,CACrE;IAEJ;IAEAP,GAAG,kDAAkD;QACnDD,OAAO,IACLE,0BAA0B;gBAAEI,UAAU;gBAAaC,UAAU;YAAY,IACzEE,GAAG,CAACD,OAAO;QACbR,OAAO,IACLE,0BAA0B;gBACxBQ,YAAY;oBAAEC,QAAQ;wBAAEC,0BAA0B;oBAAK;gBAAE;gBACzDN,UAAU;gBACVC,UAAU;YACZ,IACAE,GAAG,CAACD,OAAO;QACbR,OAAO,IACLE,0BAA0B;gBACxBQ,YAAY;oBAAEC,QAAQ;wBAAEC,0BAA0B;oBAAK;gBAAE;gBACzDN,UAAU;YACZ,IACAG,GAAG,CAACD,OAAO;IACf;AACF"}
|
|
@@ -3,5 +3,8 @@ import type { checkFileRestrictionsParams, FileAllowList } from './types.js';
|
|
|
3
3
|
* Restricted file types and their extensions.
|
|
4
4
|
*/
|
|
5
5
|
export declare const RESTRICTED_FILE_EXT_AND_TYPES: FileAllowList;
|
|
6
|
-
export declare const checkFileRestrictions: ({ collection, file, req, }: checkFileRestrictionsParams) => Promise<
|
|
6
|
+
export declare const checkFileRestrictions: ({ collection, file, req, }: checkFileRestrictionsParams) => Promise<{
|
|
7
|
+
ext: string;
|
|
8
|
+
mime: string;
|
|
9
|
+
} | undefined>;
|
|
7
10
|
//# sourceMappingURL=checkFileRestrictions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkFileRestrictions.d.ts","sourceRoot":"","sources":["../../src/uploads/checkFileRestrictions.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,2BAA2B,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"checkFileRestrictions.d.ts","sourceRoot":"","sources":["../../src/uploads/checkFileRestrictions.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,2BAA2B,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAqB5E;;GAEG;AACH,eAAO,MAAM,6BAA6B,EAAE,aAiC3C,CAAA;AAED,eAAO,MAAM,qBAAqB,+BAI/B,2BAA2B,KAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CA8LjF,CAAA"}
|