payload 3.89.0 → 3.90.1
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 +118 -18
- 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 +87 -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 +102 -24
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -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/types/index.d.ts +2 -1
- package/dist/queues/config/types/index.d.ts.map +1 -1
- package/dist/queues/config/types/index.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/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/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/telemetry/featureInfo/getFeatureInfo.d.ts +4 -0
- package/dist/utilities/telemetry/featureInfo/getFeatureInfo.d.ts.map +1 -0
- package/dist/utilities/telemetry/featureInfo/getFeatureInfo.js +248 -0
- package/dist/utilities/telemetry/featureInfo/getFeatureInfo.js.map +1 -0
- package/dist/utilities/telemetry/featureInfo/types.d.ts +62 -0
- package/dist/utilities/telemetry/featureInfo/types.d.ts.map +1 -0
- package/dist/utilities/telemetry/featureInfo/types.js +3 -0
- package/dist/utilities/telemetry/featureInfo/types.js.map +1 -0
- package/dist/utilities/telemetry/getProjectContext.d.ts +14 -0
- package/dist/utilities/telemetry/getProjectContext.d.ts.map +1 -0
- package/dist/utilities/telemetry/getProjectContext.js +36 -0
- package/dist/utilities/telemetry/getProjectContext.js.map +1 -0
- package/dist/utilities/telemetry/index.d.ts +7 -1
- package/dist/utilities/telemetry/index.d.ts.map +1 -1
- package/dist/utilities/telemetry/index.js +22 -0
- package/dist/utilities/telemetry/index.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/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
- package/dist/auth/baseFields/apiKey.d.ts +0 -3
- package/dist/auth/baseFields/apiKey.d.ts.map +0 -1
- package/dist/auth/baseFields/apiKey.js +0 -59
- package/dist/auth/baseFields/apiKey.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/auth/baseFields/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAEzD,eAAO,MAAM,cAAc,EAAE,KAAK,EAqCjC,CAAA"}
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/auth/baseFields/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAEzD,eAAO,MAAM,cAAc,EAAE,KAAK,EAqCjC,CAAA;AAED,eAAO,MAAM,6BAA6B,EAAE,KAQ3C,CAAA"}
|
|
@@ -36,5 +36,14 @@ export const baseAuthFields = [
|
|
|
36
36
|
hidden: true
|
|
37
37
|
}
|
|
38
38
|
];
|
|
39
|
+
export const resetPasswordRequestedAtField = {
|
|
40
|
+
name: 'resetPasswordRequestedAt',
|
|
41
|
+
type: 'date',
|
|
42
|
+
access: {
|
|
43
|
+
create: ()=>false,
|
|
44
|
+
update: ()=>false
|
|
45
|
+
},
|
|
46
|
+
hidden: true
|
|
47
|
+
};
|
|
39
48
|
|
|
40
49
|
//# sourceMappingURL=auth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/auth/baseFields/auth.ts"],"sourcesContent":["import type { Field } from '../../fields/config/types.js'\n\nexport const baseAuthFields: Field[] = [\n {\n name: 'resetPasswordToken',\n type: 'text',\n access: {\n create: () => false,\n update: () => false,\n },\n hidden: true,\n },\n {\n name: 'resetPasswordExpiration',\n type: 'date',\n access: {\n create: () => false,\n update: () => false,\n },\n hidden: true,\n },\n {\n name: 'salt',\n type: 'text',\n access: {\n create: () => false,\n update: () => false,\n },\n hidden: true,\n },\n {\n name: 'hash',\n type: 'text',\n access: {\n create: () => false,\n update: () => false,\n },\n hidden: true,\n },\n]\n"],"names":["baseAuthFields","name","type","access","create","update","hidden"],"mappings":"AAEA,OAAO,MAAMA,iBAA0B;IACrC;QACEC,MAAM;QACNC,MAAM;QACNC,QAAQ;YACNC,QAAQ,IAAM;YACdC,QAAQ,IAAM;QAChB;QACAC,QAAQ;IACV;IACA;QACEL,MAAM;QACNC,MAAM;QACNC,QAAQ;YACNC,QAAQ,IAAM;YACdC,QAAQ,IAAM;QAChB;QACAC,QAAQ;IACV;IACA;QACEL,MAAM;QACNC,MAAM;QACNC,QAAQ;YACNC,QAAQ,IAAM;YACdC,QAAQ,IAAM;QAChB;QACAC,QAAQ;IACV;IACA;QACEL,MAAM;QACNC,MAAM;QACNC,QAAQ;YACNC,QAAQ,IAAM;YACdC,QAAQ,IAAM;QAChB;QACAC,QAAQ;IACV;CACD,CAAA"}
|
|
1
|
+
{"version":3,"sources":["../../../src/auth/baseFields/auth.ts"],"sourcesContent":["import type { Field } from '../../fields/config/types.js'\n\nexport const baseAuthFields: Field[] = [\n {\n name: 'resetPasswordToken',\n type: 'text',\n access: {\n create: () => false,\n update: () => false,\n },\n hidden: true,\n },\n {\n name: 'resetPasswordExpiration',\n type: 'date',\n access: {\n create: () => false,\n update: () => false,\n },\n hidden: true,\n },\n {\n name: 'salt',\n type: 'text',\n access: {\n create: () => false,\n update: () => false,\n },\n hidden: true,\n },\n {\n name: 'hash',\n type: 'text',\n access: {\n create: () => false,\n update: () => false,\n },\n hidden: true,\n },\n]\n\nexport const resetPasswordRequestedAtField: Field = {\n name: 'resetPasswordRequestedAt',\n type: 'date',\n access: {\n create: () => false,\n update: () => false,\n },\n hidden: true,\n}\n"],"names":["baseAuthFields","name","type","access","create","update","hidden","resetPasswordRequestedAtField"],"mappings":"AAEA,OAAO,MAAMA,iBAA0B;IACrC;QACEC,MAAM;QACNC,MAAM;QACNC,QAAQ;YACNC,QAAQ,IAAM;YACdC,QAAQ,IAAM;QAChB;QACAC,QAAQ;IACV;IACA;QACEL,MAAM;QACNC,MAAM;QACNC,QAAQ;YACNC,QAAQ,IAAM;YACdC,QAAQ,IAAM;QAChB;QACAC,QAAQ;IACV;IACA;QACEL,MAAM;QACNC,MAAM;QACNC,QAAQ;YACNC,QAAQ,IAAM;YACdC,QAAQ,IAAM;QAChB;QACAC,QAAQ;IACV;IACA;QACEL,MAAM;QACNC,MAAM;QACNC,QAAQ;YACNC,QAAQ,IAAM;YACdC,QAAQ,IAAM;QAChB;QACAC,QAAQ;IACV;CACD,CAAA;AAED,OAAO,MAAMC,gCAAuC;IAClDN,MAAM;IACNC,MAAM;IACNC,QAAQ;QACNC,QAAQ,IAAM;QACdC,QAAQ,IAAM;IAChB;IACAC,QAAQ;AACV,EAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultUnlockAccess.d.ts","sourceRoot":"","sources":["../../src/auth/defaultUnlockAccess.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEhD,eAAO,MAAM,mBAAmB,EAAE,MAMjC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/auth/defaultUnlockAccess.ts"],"sourcesContent":["import type { Access } from '../config/types.js'\n\nexport const defaultUnlockAccess: Access = ({ req: { payload, user } }) => {\n if (!user) {\n return false\n }\n\n return user.collection === payload.config.admin.user\n}\n"],"names":["defaultUnlockAccess","req","payload","user","collection","config","admin"],"mappings":"AAEA,OAAO,MAAMA,sBAA8B,CAAC,EAAEC,KAAK,EAAEC,OAAO,EAAEC,IAAI,EAAE,EAAE;IACpE,IAAI,CAACA,MAAM;QACT,OAAO;IACT;IAEA,OAAOA,KAAKC,UAAU,KAAKF,QAAQG,MAAM,CAACC,KAAK,CAACH,IAAI;AACtD,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/auth/endpoints/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/auth/endpoints/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAgBrD,eAAO,MAAM,iBAAiB,EAAE,QAAQ,EAMtC,CAAA;AAEF,eAAO,MAAM,oBAAoB,EAAE,QAM7B,CAAA;AAEN,eAAO,MAAM,uBAAuB,EAAE,QAAQ,EAmD5C,CAAA"}
|
|
@@ -8,6 +8,7 @@ import { meHandler } from './me.js';
|
|
|
8
8
|
import { refreshHandler } from './refresh.js';
|
|
9
9
|
import { registerFirstUserHandler } from './registerFirstUser.js';
|
|
10
10
|
import { resetPasswordHandler } from './resetPassword.js';
|
|
11
|
+
import { revealAPIKeyHandler } from './revealAPIKey.js';
|
|
11
12
|
import { unlockHandler } from './unlock.js';
|
|
12
13
|
import { verifyEmailHandler } from './verifyEmail.js';
|
|
13
14
|
export const authRootEndpoints = wrapInternalEndpoints([
|
|
@@ -17,6 +18,13 @@ export const authRootEndpoints = wrapInternalEndpoints([
|
|
|
17
18
|
path: '/access'
|
|
18
19
|
}
|
|
19
20
|
]);
|
|
21
|
+
export const apiKeyRevealEndpoint = wrapInternalEndpoints([
|
|
22
|
+
{
|
|
23
|
+
handler: revealAPIKeyHandler,
|
|
24
|
+
method: 'post',
|
|
25
|
+
path: '/:id/api-key/reveal'
|
|
26
|
+
}
|
|
27
|
+
])[0];
|
|
20
28
|
export const authCollectionEndpoints = wrapInternalEndpoints([
|
|
21
29
|
{
|
|
22
30
|
handler: forgotPasswordHandler,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/auth/endpoints/index.ts"],"sourcesContent":["import type { Endpoint } from '../../config/types.js'\n\nimport { wrapInternalEndpoints } from '../../utilities/wrapInternalEndpoints.js'\nimport { accessHandler } from './access.js'\nimport { forgotPasswordHandler } from './forgotPassword.js'\nimport { initHandler } from './init.js'\nimport { loginHandler } from './login.js'\nimport { logoutHandler } from './logout.js'\nimport { meHandler } from './me.js'\nimport { refreshHandler } from './refresh.js'\nimport { registerFirstUserHandler } from './registerFirstUser.js'\nimport { resetPasswordHandler } from './resetPassword.js'\nimport { unlockHandler } from './unlock.js'\nimport { verifyEmailHandler } from './verifyEmail.js'\n\nexport const authRootEndpoints: Endpoint[] = wrapInternalEndpoints([\n {\n handler: accessHandler,\n method: 'get',\n path: '/access',\n },\n])\n\nexport const authCollectionEndpoints: Endpoint[] = wrapInternalEndpoints([\n {\n handler: forgotPasswordHandler,\n method: 'post',\n path: '/forgot-password',\n },\n {\n handler: initHandler,\n method: 'get',\n path: '/init',\n },\n {\n handler: loginHandler,\n method: 'post',\n path: '/login',\n },\n {\n handler: logoutHandler,\n method: 'post',\n path: '/logout',\n },\n {\n handler: meHandler,\n method: 'get',\n path: '/me',\n },\n {\n handler: refreshHandler,\n method: 'post',\n path: '/refresh-token',\n },\n {\n handler: registerFirstUserHandler,\n method: 'post',\n path: '/first-register',\n },\n {\n handler: resetPasswordHandler,\n method: 'post',\n path: '/reset-password',\n },\n {\n handler: unlockHandler,\n method: 'post',\n path: '/unlock',\n },\n {\n handler: verifyEmailHandler,\n method: 'post',\n path: '/verify/:id',\n },\n])\n"],"names":["wrapInternalEndpoints","accessHandler","forgotPasswordHandler","initHandler","loginHandler","logoutHandler","meHandler","refreshHandler","registerFirstUserHandler","resetPasswordHandler","unlockHandler","verifyEmailHandler","authRootEndpoints","handler","method","path","authCollectionEndpoints"],"mappings":"AAEA,SAASA,qBAAqB,QAAQ,2CAA0C;AAChF,SAASC,aAAa,QAAQ,cAAa;AAC3C,SAASC,qBAAqB,QAAQ,sBAAqB;AAC3D,SAASC,WAAW,QAAQ,YAAW;AACvC,SAASC,YAAY,QAAQ,aAAY;AACzC,SAASC,aAAa,QAAQ,cAAa;AAC3C,SAASC,SAAS,QAAQ,UAAS;AACnC,SAASC,cAAc,QAAQ,eAAc;AAC7C,SAASC,wBAAwB,QAAQ,yBAAwB;AACjE,SAASC,oBAAoB,QAAQ,qBAAoB;AACzD,SAASC,aAAa,QAAQ,cAAa;AAC3C,SAASC,kBAAkB,QAAQ,mBAAkB;AAErD,OAAO,MAAMC,
|
|
1
|
+
{"version":3,"sources":["../../../src/auth/endpoints/index.ts"],"sourcesContent":["import type { Endpoint } from '../../config/types.js'\n\nimport { wrapInternalEndpoints } from '../../utilities/wrapInternalEndpoints.js'\nimport { accessHandler } from './access.js'\nimport { forgotPasswordHandler } from './forgotPassword.js'\nimport { initHandler } from './init.js'\nimport { loginHandler } from './login.js'\nimport { logoutHandler } from './logout.js'\nimport { meHandler } from './me.js'\nimport { refreshHandler } from './refresh.js'\nimport { registerFirstUserHandler } from './registerFirstUser.js'\nimport { resetPasswordHandler } from './resetPassword.js'\nimport { revealAPIKeyHandler } from './revealAPIKey.js'\nimport { unlockHandler } from './unlock.js'\nimport { verifyEmailHandler } from './verifyEmail.js'\n\nexport const authRootEndpoints: Endpoint[] = wrapInternalEndpoints([\n {\n handler: accessHandler,\n method: 'get',\n path: '/access',\n },\n])\n\nexport const apiKeyRevealEndpoint: Endpoint = wrapInternalEndpoints([\n {\n handler: revealAPIKeyHandler,\n method: 'post',\n path: '/:id/api-key/reveal',\n },\n])[0]!\n\nexport const authCollectionEndpoints: Endpoint[] = wrapInternalEndpoints([\n {\n handler: forgotPasswordHandler,\n method: 'post',\n path: '/forgot-password',\n },\n {\n handler: initHandler,\n method: 'get',\n path: '/init',\n },\n {\n handler: loginHandler,\n method: 'post',\n path: '/login',\n },\n {\n handler: logoutHandler,\n method: 'post',\n path: '/logout',\n },\n {\n handler: meHandler,\n method: 'get',\n path: '/me',\n },\n {\n handler: refreshHandler,\n method: 'post',\n path: '/refresh-token',\n },\n {\n handler: registerFirstUserHandler,\n method: 'post',\n path: '/first-register',\n },\n {\n handler: resetPasswordHandler,\n method: 'post',\n path: '/reset-password',\n },\n {\n handler: unlockHandler,\n method: 'post',\n path: '/unlock',\n },\n {\n handler: verifyEmailHandler,\n method: 'post',\n path: '/verify/:id',\n },\n])\n"],"names":["wrapInternalEndpoints","accessHandler","forgotPasswordHandler","initHandler","loginHandler","logoutHandler","meHandler","refreshHandler","registerFirstUserHandler","resetPasswordHandler","revealAPIKeyHandler","unlockHandler","verifyEmailHandler","authRootEndpoints","handler","method","path","apiKeyRevealEndpoint","authCollectionEndpoints"],"mappings":"AAEA,SAASA,qBAAqB,QAAQ,2CAA0C;AAChF,SAASC,aAAa,QAAQ,cAAa;AAC3C,SAASC,qBAAqB,QAAQ,sBAAqB;AAC3D,SAASC,WAAW,QAAQ,YAAW;AACvC,SAASC,YAAY,QAAQ,aAAY;AACzC,SAASC,aAAa,QAAQ,cAAa;AAC3C,SAASC,SAAS,QAAQ,UAAS;AACnC,SAASC,cAAc,QAAQ,eAAc;AAC7C,SAASC,wBAAwB,QAAQ,yBAAwB;AACjE,SAASC,oBAAoB,QAAQ,qBAAoB;AACzD,SAASC,mBAAmB,QAAQ,oBAAmB;AACvD,SAASC,aAAa,QAAQ,cAAa;AAC3C,SAASC,kBAAkB,QAAQ,mBAAkB;AAErD,OAAO,MAAMC,oBAAgCb,sBAAsB;IACjE;QACEc,SAASb;QACTc,QAAQ;QACRC,MAAM;IACR;CACD,EAAC;AAEF,OAAO,MAAMC,uBAAiCjB,sBAAsB;IAClE;QACEc,SAASJ;QACTK,QAAQ;QACRC,MAAM;IACR;CACD,CAAC,CAAC,EAAE,CAAC;AAEN,OAAO,MAAME,0BAAsClB,sBAAsB;IACvE;QACEc,SAASZ;QACTa,QAAQ;QACRC,MAAM;IACR;IACA;QACEF,SAASX;QACTY,QAAQ;QACRC,MAAM;IACR;IACA;QACEF,SAASV;QACTW,QAAQ;QACRC,MAAM;IACR;IACA;QACEF,SAAST;QACTU,QAAQ;QACRC,MAAM;IACR;IACA;QACEF,SAASR;QACTS,QAAQ;QACRC,MAAM;IACR;IACA;QACEF,SAASP;QACTQ,QAAQ;QACRC,MAAM;IACR;IACA;QACEF,SAASN;QACTO,QAAQ;QACRC,MAAM;IACR;IACA;QACEF,SAASL;QACTM,QAAQ;QACRC,MAAM;IACR;IACA;QACEF,SAASH;QACTI,QAAQ;QACRC,MAAM;IACR;IACA;QACEF,SAASF;QACTG,QAAQ;QACRC,MAAM;IACR;CACD,EAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { PayloadHandler } from '../../config/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Reveals an encrypted API key when the collection explicitly enables reveal support.
|
|
4
|
+
* This endpoint is only injected when `auth.useAPIKey.reveal` is `true`.
|
|
5
|
+
*/
|
|
6
|
+
export declare const revealAPIKeyHandler: PayloadHandler;
|
|
7
|
+
//# sourceMappingURL=revealAPIKey.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revealAPIKey.d.ts","sourceRoot":"","sources":["../../../src/auth/endpoints/revealAPIKey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAS3D;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,cAkFjC,CAAA"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { combineQueries } from '../../database/combineQueries.js';
|
|
2
|
+
import { UnauthorizedError } from '../../errors/UnauthorizedError.js';
|
|
3
|
+
import { fieldAffectsData } from '../../fields/config/types.js';
|
|
4
|
+
import { canAccessAdmin } from '../../utilities/canAccessAdmin.js';
|
|
5
|
+
import { getRequestCollectionWithID } from '../../utilities/getRequestEntity.js';
|
|
6
|
+
import { executeAccess } from '../executeAccess.js';
|
|
7
|
+
/**
|
|
8
|
+
* Reveals an encrypted API key when the collection explicitly enables reveal support.
|
|
9
|
+
* This endpoint is only injected when `auth.useAPIKey.reveal` is `true`.
|
|
10
|
+
*/ export const revealAPIKeyHandler = async (req)=>{
|
|
11
|
+
const { id, collection } = getRequestCollectionWithID(req);
|
|
12
|
+
const useAPIKey = collection.config.auth.useAPIKey;
|
|
13
|
+
if (typeof useAPIKey !== 'object' || useAPIKey.reveal !== true || !req.user) {
|
|
14
|
+
return Response.json({
|
|
15
|
+
error: 'Forbidden'
|
|
16
|
+
}, {
|
|
17
|
+
status: 403
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
await canAccessAdmin({
|
|
22
|
+
req
|
|
23
|
+
});
|
|
24
|
+
} catch (error) {
|
|
25
|
+
if (error instanceof UnauthorizedError) {
|
|
26
|
+
return Response.json({
|
|
27
|
+
error: 'Forbidden'
|
|
28
|
+
}, {
|
|
29
|
+
status: 403
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
throw error;
|
|
33
|
+
}
|
|
34
|
+
const userWithReadAccess = await req.payload.findByID({
|
|
35
|
+
id,
|
|
36
|
+
collection: collection.config.slug,
|
|
37
|
+
depth: 0,
|
|
38
|
+
disableErrors: true,
|
|
39
|
+
overrideAccess: false,
|
|
40
|
+
req
|
|
41
|
+
});
|
|
42
|
+
if (!userWithReadAccess) {
|
|
43
|
+
return Response.json({
|
|
44
|
+
error: 'Not found'
|
|
45
|
+
}, {
|
|
46
|
+
status: 404
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
// Reveal is treated as a no-op update, so `data` reflects the current document.
|
|
50
|
+
const updateAccess = await executeAccess({
|
|
51
|
+
id,
|
|
52
|
+
data: userWithReadAccess,
|
|
53
|
+
disableErrors: true,
|
|
54
|
+
req
|
|
55
|
+
}, collection.config.access.update);
|
|
56
|
+
if (!updateAccess) {
|
|
57
|
+
return Response.json({
|
|
58
|
+
error: 'Forbidden'
|
|
59
|
+
}, {
|
|
60
|
+
status: 403
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
const user = await req.payload.db.findOne({
|
|
64
|
+
collection: collection.config.slug,
|
|
65
|
+
req,
|
|
66
|
+
select: {
|
|
67
|
+
apiKey: true
|
|
68
|
+
},
|
|
69
|
+
where: combineQueries({
|
|
70
|
+
id: {
|
|
71
|
+
equals: id
|
|
72
|
+
}
|
|
73
|
+
}, updateAccess)
|
|
74
|
+
});
|
|
75
|
+
if (!user) {
|
|
76
|
+
return Response.json({
|
|
77
|
+
error: 'Forbidden'
|
|
78
|
+
}, {
|
|
79
|
+
status: 403
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
const apiKeyField = collection.config.fields.find((field)=>fieldAffectsData(field) && field.name === 'apiKey');
|
|
83
|
+
if (!apiKeyField || !fieldAffectsData(apiKeyField) || !apiKeyField.access?.update) {
|
|
84
|
+
return Response.json({
|
|
85
|
+
error: 'Forbidden'
|
|
86
|
+
}, {
|
|
87
|
+
status: 403
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
const canUpdateAPIKey = await apiKeyField.access.update({
|
|
91
|
+
id,
|
|
92
|
+
data: {},
|
|
93
|
+
doc: userWithReadAccess,
|
|
94
|
+
req,
|
|
95
|
+
siblingData: {}
|
|
96
|
+
});
|
|
97
|
+
if (!canUpdateAPIKey) {
|
|
98
|
+
return Response.json({
|
|
99
|
+
error: 'Forbidden'
|
|
100
|
+
}, {
|
|
101
|
+
status: 403
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
if (!('apiKey' in user) || typeof user.apiKey !== 'string') {
|
|
105
|
+
return Response.json({
|
|
106
|
+
error: 'Not found'
|
|
107
|
+
}, {
|
|
108
|
+
status: 404
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
return Response.json({
|
|
112
|
+
apiKey: req.payload.decrypt(user.apiKey)
|
|
113
|
+
}, {
|
|
114
|
+
headers: {
|
|
115
|
+
'Cache-Control': 'no-store'
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
//# sourceMappingURL=revealAPIKey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/auth/endpoints/revealAPIKey.ts"],"sourcesContent":["import type { PayloadHandler } from '../../config/types.js'\n\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { UnauthorizedError } from '../../errors/UnauthorizedError.js'\nimport { fieldAffectsData } from '../../fields/config/types.js'\nimport { canAccessAdmin } from '../../utilities/canAccessAdmin.js'\nimport { getRequestCollectionWithID } from '../../utilities/getRequestEntity.js'\nimport { executeAccess } from '../executeAccess.js'\n\n/**\n * Reveals an encrypted API key when the collection explicitly enables reveal support.\n * This endpoint is only injected when `auth.useAPIKey.reveal` is `true`.\n */\nexport const revealAPIKeyHandler: PayloadHandler = async (req) => {\n const { id, collection } = getRequestCollectionWithID(req)\n const useAPIKey = collection.config.auth.useAPIKey\n\n if (typeof useAPIKey !== 'object' || useAPIKey.reveal !== true || !req.user) {\n return Response.json({ error: 'Forbidden' }, { status: 403 })\n }\n\n try {\n await canAccessAdmin({ req })\n } catch (error) {\n if (error instanceof UnauthorizedError) {\n return Response.json({ error: 'Forbidden' }, { status: 403 })\n }\n\n throw error\n }\n\n const userWithReadAccess = await req.payload.findByID({\n id,\n collection: collection.config.slug,\n depth: 0,\n disableErrors: true,\n overrideAccess: false,\n req,\n })\n\n if (!userWithReadAccess) {\n return Response.json({ error: 'Not found' }, { status: 404 })\n }\n\n // Reveal is treated as a no-op update, so `data` reflects the current document.\n const updateAccess = await executeAccess(\n { id, data: userWithReadAccess, disableErrors: true, req },\n collection.config.access.update,\n )\n\n if (!updateAccess) {\n return Response.json({ error: 'Forbidden' }, { status: 403 })\n }\n\n const user = await req.payload.db.findOne({\n collection: collection.config.slug,\n req,\n select: {\n apiKey: true,\n },\n where: combineQueries({ id: { equals: id } }, updateAccess),\n })\n\n if (!user) {\n return Response.json({ error: 'Forbidden' }, { status: 403 })\n }\n\n const apiKeyField = collection.config.fields.find(\n (field) => fieldAffectsData(field) && field.name === 'apiKey',\n )\n\n if (!apiKeyField || !fieldAffectsData(apiKeyField) || !apiKeyField.access?.update) {\n return Response.json({ error: 'Forbidden' }, { status: 403 })\n }\n\n const canUpdateAPIKey = await apiKeyField.access.update({\n id,\n data: {},\n doc: userWithReadAccess,\n req,\n siblingData: {},\n })\n\n if (!canUpdateAPIKey) {\n return Response.json({ error: 'Forbidden' }, { status: 403 })\n }\n\n if (!('apiKey' in user) || typeof user.apiKey !== 'string') {\n return Response.json({ error: 'Not found' }, { status: 404 })\n }\n\n return Response.json(\n { apiKey: req.payload.decrypt(user.apiKey) },\n { headers: { 'Cache-Control': 'no-store' } },\n )\n}\n"],"names":["combineQueries","UnauthorizedError","fieldAffectsData","canAccessAdmin","getRequestCollectionWithID","executeAccess","revealAPIKeyHandler","req","id","collection","useAPIKey","config","auth","reveal","user","Response","json","error","status","userWithReadAccess","payload","findByID","slug","depth","disableErrors","overrideAccess","updateAccess","data","access","update","db","findOne","select","apiKey","where","equals","apiKeyField","fields","find","field","name","canUpdateAPIKey","doc","siblingData","decrypt","headers"],"mappings":"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"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
+
import type { SanitizedCollectionConfig } from '../collections/config/types.js';
|
|
1
2
|
import type { Access, AccessResult } from '../config/types.js';
|
|
2
3
|
import type { PayloadRequest } from '../types/index.js';
|
|
3
4
|
type OperationArgs = {
|
|
5
|
+
collectionConfig?: SanitizedCollectionConfig;
|
|
4
6
|
data?: any;
|
|
5
7
|
disableErrors?: boolean;
|
|
6
8
|
id?: number | string;
|
|
7
9
|
isReadingStaticFile?: boolean;
|
|
8
10
|
req: PayloadRequest;
|
|
9
11
|
};
|
|
10
|
-
export declare const executeAccess: ({ id, data, disableErrors, isReadingStaticFile, req }: OperationArgs, access: Access) => Promise<AccessResult>;
|
|
12
|
+
export declare const executeAccess: ({ id, collectionConfig, data, disableErrors, isReadingStaticFile, req }: OperationArgs, access: Access) => Promise<AccessResult>;
|
|
11
13
|
export {};
|
|
12
14
|
//# sourceMappingURL=executeAccess.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executeAccess.d.ts","sourceRoot":"","sources":["../../src/auth/executeAccess.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAIvD,KAAK,aAAa,GAAG;IACnB,IAAI,CAAC,EAAE,GAAG,CAAA;IACV,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AACD,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"executeAccess.d.ts","sourceRoot":"","sources":["../../src/auth/executeAccess.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAIvD,KAAK,aAAa,GAAG;IACnB,gBAAgB,CAAC,EAAE,yBAAyB,CAAA;IAC5C,IAAI,CAAC,EAAE,GAAG,CAAA;IACV,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AACD,eAAO,MAAM,aAAa,4EACyD,aAAa,UACtF,MAAM,KACb,OAAO,CAAC,YAAY,CA2BtB,CAAA"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Forbidden } from '../errors/index.js';
|
|
2
|
-
export const executeAccess = async ({ id, data, disableErrors, isReadingStaticFile = false, req }, access)=>{
|
|
2
|
+
export const executeAccess = async ({ id, collectionConfig, data, disableErrors, isReadingStaticFile = false, req }, access)=>{
|
|
3
3
|
if (access) {
|
|
4
4
|
const resolvedConstraint = await access({
|
|
5
5
|
id,
|
|
6
|
+
collectionConfig,
|
|
6
7
|
data,
|
|
7
8
|
isReadingStaticFile,
|
|
8
9
|
req
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/auth/executeAccess.ts"],"sourcesContent":["import type { Access, AccessResult } from '../config/types.js'\nimport type { PayloadRequest } from '../types/index.js'\n\nimport { Forbidden } from '../errors/index.js'\n\ntype OperationArgs = {\n data?: any\n disableErrors?: boolean\n id?: number | string\n isReadingStaticFile?: boolean\n req: PayloadRequest\n}\nexport const executeAccess = async (\n { id, data, disableErrors, isReadingStaticFile = false, req }: OperationArgs,\n access: Access,\n): Promise<AccessResult> => {\n if (access) {\n const resolvedConstraint = await access({\n id,\n data,\n isReadingStaticFile,\n req,\n })\n\n if (!resolvedConstraint) {\n if (!disableErrors) {\n throw new Forbidden(req.t)\n }\n }\n\n return resolvedConstraint\n }\n\n if (req.user) {\n return true\n }\n\n if (!disableErrors) {\n throw new Forbidden(req.t)\n }\n return false\n}\n"],"names":["Forbidden","executeAccess","id","data","disableErrors","isReadingStaticFile","req","access","resolvedConstraint","t","user"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/auth/executeAccess.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { Access, AccessResult } from '../config/types.js'\nimport type { PayloadRequest } from '../types/index.js'\n\nimport { Forbidden } from '../errors/index.js'\n\ntype OperationArgs = {\n collectionConfig?: SanitizedCollectionConfig\n data?: any\n disableErrors?: boolean\n id?: number | string\n isReadingStaticFile?: boolean\n req: PayloadRequest\n}\nexport const executeAccess = async (\n { id, collectionConfig, data, disableErrors, isReadingStaticFile = false, req }: OperationArgs,\n access: Access,\n): Promise<AccessResult> => {\n if (access) {\n const resolvedConstraint = await access({\n id,\n collectionConfig,\n data,\n isReadingStaticFile,\n req,\n })\n\n if (!resolvedConstraint) {\n if (!disableErrors) {\n throw new Forbidden(req.t)\n }\n }\n\n return resolvedConstraint\n }\n\n if (req.user) {\n return true\n }\n\n if (!disableErrors) {\n throw new Forbidden(req.t)\n }\n return false\n}\n"],"names":["Forbidden","executeAccess","id","collectionConfig","data","disableErrors","isReadingStaticFile","req","access","resolvedConstraint","t","user"],"mappings":"AAIA,SAASA,SAAS,QAAQ,qBAAoB;AAU9C,OAAO,MAAMC,gBAAgB,OAC3B,EAAEC,EAAE,EAAEC,gBAAgB,EAAEC,IAAI,EAAEC,aAAa,EAAEC,sBAAsB,KAAK,EAAEC,GAAG,EAAiB,EAC9FC;IAEA,IAAIA,QAAQ;QACV,MAAMC,qBAAqB,MAAMD,OAAO;YACtCN;YACAC;YACAC;YACAE;YACAC;QACF;QAEA,IAAI,CAACE,oBAAoB;YACvB,IAAI,CAACJ,eAAe;gBAClB,MAAM,IAAIL,UAAUO,IAAIG,CAAC;YAC3B;QACF;QAEA,OAAOD;IACT;IAEA,IAAIF,IAAII,IAAI,EAAE;QACZ,OAAO;IACT;IAEA,IAAI,CAACN,eAAe;QAClB,MAAM,IAAIL,UAAUO,IAAIG,CAAC;IAC3B;IACA,OAAO;AACT,EAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { Field } from '../fields/config/types.js';
|
|
2
2
|
import type { IncomingAuthType } from './types.js';
|
|
3
|
-
export declare const getBaseAuthFields: (authConfig: IncomingAuthType) => Field[];
|
|
3
|
+
export declare const getBaseAuthFields: (authConfig: IncomingAuthType, fields?: Field[]) => Field[];
|
|
4
4
|
//# sourceMappingURL=getAuthFields.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAuthFields.d.ts","sourceRoot":"","sources":["../../src/auth/getAuthFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAa,MAAM,2BAA2B,CAAA;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAUlD,eAAO,MAAM,iBAAiB,eAAgB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"getAuthFields.d.ts","sourceRoot":"","sources":["../../src/auth/getAuthFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAa,MAAM,2BAA2B,CAAA;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAUlD,eAAO,MAAM,iBAAiB,eAAgB,gBAAgB,WAAU,KAAK,EAAE,KAAQ,KAAK,EA0D3F,CAAA"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { accountLockFields } from './baseFields/accountLock.js';
|
|
2
|
-
import {
|
|
3
|
-
import { baseAuthFields } from './baseFields/auth.js';
|
|
2
|
+
import { getAPIKeyFields } from './baseFields/apiKey/index.js';
|
|
3
|
+
import { baseAuthFields, resetPasswordRequestedAtField } from './baseFields/auth.js';
|
|
4
4
|
import { emailFieldConfig } from './baseFields/email.js';
|
|
5
5
|
import { sessionsFieldConfig } from './baseFields/sessions.js';
|
|
6
6
|
import { usernameFieldConfig } from './baseFields/username.js';
|
|
7
7
|
import { verificationFields } from './baseFields/verification.js';
|
|
8
|
-
export const getBaseAuthFields = (authConfig)=>{
|
|
8
|
+
export const getBaseAuthFields = (authConfig, fields = [])=>{
|
|
9
9
|
const authFields = [];
|
|
10
10
|
if (authConfig.useAPIKey) {
|
|
11
|
-
authFields.push(...
|
|
11
|
+
authFields.push(...getAPIKeyFields(fields));
|
|
12
12
|
}
|
|
13
13
|
if (!authConfig.disableLocalStrategy || typeof authConfig.disableLocalStrategy === 'object' && authConfig.disableLocalStrategy.enableFields) {
|
|
14
14
|
const emailField = {
|
|
@@ -36,6 +36,9 @@ export const getBaseAuthFields = (authConfig)=>{
|
|
|
36
36
|
authFields.push(usernameField);
|
|
37
37
|
}
|
|
38
38
|
authFields.push(...baseAuthFields);
|
|
39
|
+
if (authConfig.forgotPassword?.minRequestInterval && authConfig.forgotPassword.minRequestInterval > 0) {
|
|
40
|
+
authFields.push(resetPasswordRequestedAtField);
|
|
41
|
+
}
|
|
39
42
|
if (authConfig.verify) {
|
|
40
43
|
authFields.push(...verificationFields);
|
|
41
44
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/auth/getAuthFields.ts"],"sourcesContent":["import type { Field, TextField } from '../fields/config/types.js'\nimport type { IncomingAuthType } from './types.js'\n\nimport { accountLockFields } from './baseFields/accountLock.js'\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/auth/getAuthFields.ts"],"sourcesContent":["import type { Field, TextField } from '../fields/config/types.js'\nimport type { IncomingAuthType } from './types.js'\n\nimport { accountLockFields } from './baseFields/accountLock.js'\nimport { getAPIKeyFields } from './baseFields/apiKey/index.js'\nimport { baseAuthFields, resetPasswordRequestedAtField } from './baseFields/auth.js'\nimport { emailFieldConfig } from './baseFields/email.js'\nimport { sessionsFieldConfig } from './baseFields/sessions.js'\nimport { usernameFieldConfig } from './baseFields/username.js'\nimport { verificationFields } from './baseFields/verification.js'\n\nexport const getBaseAuthFields = (authConfig: IncomingAuthType, fields: Field[] = []): Field[] => {\n const authFields: Field[] = []\n\n if (authConfig.useAPIKey) {\n authFields.push(...getAPIKeyFields(fields))\n }\n\n if (\n !authConfig.disableLocalStrategy ||\n (typeof authConfig.disableLocalStrategy === 'object' &&\n authConfig.disableLocalStrategy.enableFields)\n ) {\n const emailField = { ...emailFieldConfig }\n let usernameField: TextField | undefined\n\n if (authConfig.loginWithUsername) {\n usernameField = { ...usernameFieldConfig }\n if (typeof authConfig.loginWithUsername === 'object') {\n if (authConfig.loginWithUsername.requireEmail === false) {\n emailField.required = false\n }\n if (authConfig.loginWithUsername.requireUsername === false) {\n usernameField.required = false\n }\n if (authConfig.loginWithUsername.allowEmailLogin === false) {\n emailField.unique = false\n }\n }\n }\n\n authFields.push(emailField)\n if (usernameField) {\n authFields.push(usernameField)\n }\n\n authFields.push(...baseAuthFields)\n\n if (\n authConfig.forgotPassword?.minRequestInterval &&\n authConfig.forgotPassword.minRequestInterval > 0\n ) {\n authFields.push(resetPasswordRequestedAtField)\n }\n\n if (authConfig.verify) {\n authFields.push(...verificationFields)\n }\n\n if (authConfig?.maxLoginAttempts && authConfig.maxLoginAttempts > 0) {\n authFields.push(...accountLockFields)\n }\n\n if (authConfig.useSessions) {\n authFields.push(sessionsFieldConfig)\n }\n }\n\n return authFields\n}\n"],"names":["accountLockFields","getAPIKeyFields","baseAuthFields","resetPasswordRequestedAtField","emailFieldConfig","sessionsFieldConfig","usernameFieldConfig","verificationFields","getBaseAuthFields","authConfig","fields","authFields","useAPIKey","push","disableLocalStrategy","enableFields","emailField","usernameField","loginWithUsername","requireEmail","required","requireUsername","allowEmailLogin","unique","forgotPassword","minRequestInterval","verify","maxLoginAttempts","useSessions"],"mappings":"AAGA,SAASA,iBAAiB,QAAQ,8BAA6B;AAC/D,SAASC,eAAe,QAAQ,+BAA8B;AAC9D,SAASC,cAAc,EAAEC,6BAA6B,QAAQ,uBAAsB;AACpF,SAASC,gBAAgB,QAAQ,wBAAuB;AACxD,SAASC,mBAAmB,QAAQ,2BAA0B;AAC9D,SAASC,mBAAmB,QAAQ,2BAA0B;AAC9D,SAASC,kBAAkB,QAAQ,+BAA8B;AAEjE,OAAO,MAAMC,oBAAoB,CAACC,YAA8BC,SAAkB,EAAE;IAClF,MAAMC,aAAsB,EAAE;IAE9B,IAAIF,WAAWG,SAAS,EAAE;QACxBD,WAAWE,IAAI,IAAIZ,gBAAgBS;IACrC;IAEA,IACE,CAACD,WAAWK,oBAAoB,IAC/B,OAAOL,WAAWK,oBAAoB,KAAK,YAC1CL,WAAWK,oBAAoB,CAACC,YAAY,EAC9C;QACA,MAAMC,aAAa;YAAE,GAAGZ,gBAAgB;QAAC;QACzC,IAAIa;QAEJ,IAAIR,WAAWS,iBAAiB,EAAE;YAChCD,gBAAgB;gBAAE,GAAGX,mBAAmB;YAAC;YACzC,IAAI,OAAOG,WAAWS,iBAAiB,KAAK,UAAU;gBACpD,IAAIT,WAAWS,iBAAiB,CAACC,YAAY,KAAK,OAAO;oBACvDH,WAAWI,QAAQ,GAAG;gBACxB;gBACA,IAAIX,WAAWS,iBAAiB,CAACG,eAAe,KAAK,OAAO;oBAC1DJ,cAAcG,QAAQ,GAAG;gBAC3B;gBACA,IAAIX,WAAWS,iBAAiB,CAACI,eAAe,KAAK,OAAO;oBAC1DN,WAAWO,MAAM,GAAG;gBACtB;YACF;QACF;QAEAZ,WAAWE,IAAI,CAACG;QAChB,IAAIC,eAAe;YACjBN,WAAWE,IAAI,CAACI;QAClB;QAEAN,WAAWE,IAAI,IAAIX;QAEnB,IACEO,WAAWe,cAAc,EAAEC,sBAC3BhB,WAAWe,cAAc,CAACC,kBAAkB,GAAG,GAC/C;YACAd,WAAWE,IAAI,CAACV;QAClB;QAEA,IAAIM,WAAWiB,MAAM,EAAE;YACrBf,WAAWE,IAAI,IAAIN;QACrB;QAEA,IAAIE,YAAYkB,oBAAoBlB,WAAWkB,gBAAgB,GAAG,GAAG;YACnEhB,WAAWE,IAAI,IAAIb;QACrB;QAEA,IAAIS,WAAWmB,WAAW,EAAE;YAC1BjB,WAAWE,IAAI,CAACR;QAClB;IACF;IAEA,OAAOM;AACT,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getFieldsToSign.d.ts","sourceRoot":"","sources":["../../src/auth/getFieldsToSign.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAiHvD,eAAO,MAAM,eAAe,SAAU;IACpC,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;CAC7B,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"getFieldsToSign.d.ts","sourceRoot":"","sources":["../../src/auth/getFieldsToSign.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAiHvD,eAAO,MAAM,eAAe,SAAU;IACpC,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;CAC7B,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAyBzB,CAAA"}
|
|
@@ -99,20 +99,27 @@ fields, result })=>{
|
|
|
99
99
|
};
|
|
100
100
|
export const getFieldsToSign = (args)=>{
|
|
101
101
|
const { collectionConfig, email, sid, user } = args;
|
|
102
|
-
const
|
|
103
|
-
id: user?.id,
|
|
104
|
-
collection: collectionConfig.slug,
|
|
105
|
-
email
|
|
106
|
-
};
|
|
107
|
-
if (sid) {
|
|
108
|
-
result.sid = sid;
|
|
109
|
-
}
|
|
102
|
+
const fieldsToSign = Object.create(null);
|
|
110
103
|
traverseFields({
|
|
111
104
|
data: user,
|
|
112
105
|
fields: collectionConfig.fields,
|
|
113
|
-
result
|
|
106
|
+
result: fieldsToSign
|
|
114
107
|
});
|
|
115
|
-
|
|
108
|
+
delete fieldsToSign.collection;
|
|
109
|
+
delete fieldsToSign.email;
|
|
110
|
+
delete fieldsToSign.exp;
|
|
111
|
+
delete fieldsToSign.iat;
|
|
112
|
+
delete fieldsToSign.id;
|
|
113
|
+
delete fieldsToSign.sid;
|
|
114
|
+
return {
|
|
115
|
+
...fieldsToSign,
|
|
116
|
+
id: user?.id,
|
|
117
|
+
collection: collectionConfig.slug,
|
|
118
|
+
email,
|
|
119
|
+
...sid ? {
|
|
120
|
+
sid
|
|
121
|
+
} : {}
|
|
122
|
+
};
|
|
116
123
|
};
|
|
117
124
|
|
|
118
125
|
//# sourceMappingURL=getFieldsToSign.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/auth/getFieldsToSign.ts"],"sourcesContent":["import type { CollectionConfig } from '../collections/config/types.js'\nimport type { Field, TabAsField } from '../fields/config/types.js'\nimport type { PayloadRequest } from '../types/index.js'\n\nimport { fieldAffectsData, tabHasName } from '../fields/config/types.js'\n\ntype TraverseFieldsArgs = {\n data: Record<string, unknown>\n fields: (Field | TabAsField)[]\n result: Record<string, unknown>\n}\nconst traverseFields = ({\n data,\n // parent,\n fields,\n result,\n}: TraverseFieldsArgs) => {\n fields.forEach((field) => {\n switch (field.type) {\n case 'collapsible':\n case 'row': {\n traverseFields({\n data,\n fields: field.fields,\n result,\n })\n break\n }\n case 'group': {\n if (fieldAffectsData(field)) {\n const groupData: Record<string, unknown> =\n (data[field.name] as Record<string, unknown>) ?? {}\n let targetResult\n if (typeof field.saveToJWT === 'string') {\n targetResult = field.saveToJWT\n result[field.saveToJWT] = groupData\n } else if (field.saveToJWT) {\n targetResult = field.name\n result[field.name] = groupData\n }\n const groupResult = (targetResult ? result[targetResult] : result) as Record<\n string,\n unknown\n >\n traverseFields({\n data: groupData,\n fields: field.fields,\n result: groupResult,\n })\n break\n } else {\n traverseFields({\n data,\n fields: field.fields,\n result,\n })\n\n break\n }\n }\n case 'tab': {\n if (tabHasName(field)) {\n const tabData: Record<string, unknown> =\n (data[field.name] as Record<string, unknown>) ?? {}\n let targetResult\n if (typeof field.saveToJWT === 'string') {\n targetResult = field.saveToJWT\n result[field.saveToJWT] = tabData\n } else if (field.saveToJWT) {\n targetResult = field.name\n result[field.name] = tabData\n }\n const tabResult = (targetResult ? result[targetResult] : result) as Record<\n string,\n unknown\n >\n traverseFields({\n data: tabData,\n fields: field.fields,\n result: tabResult,\n })\n } else {\n traverseFields({\n data,\n fields: field.fields,\n result,\n })\n }\n break\n }\n case 'tabs': {\n traverseFields({\n data,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n result,\n })\n break\n }\n default:\n if (fieldAffectsData(field)) {\n if (field.saveToJWT) {\n if (typeof field.saveToJWT === 'string') {\n result[field.saveToJWT] = data[field.name]\n delete result[field.name]\n } else {\n result[field.name] = data[field.name] as Record<string, unknown>\n }\n } else if (field.saveToJWT === false) {\n delete result[field.name]\n }\n }\n }\n })\n return result\n}\nexport const getFieldsToSign = (args: {\n collectionConfig: CollectionConfig\n email: string\n sid?: string\n user: PayloadRequest['user']\n}): Record<string, unknown> => {\n const { collectionConfig, email, sid, user } = args\n\n const
|
|
1
|
+
{"version":3,"sources":["../../src/auth/getFieldsToSign.ts"],"sourcesContent":["import type { CollectionConfig } from '../collections/config/types.js'\nimport type { Field, TabAsField } from '../fields/config/types.js'\nimport type { PayloadRequest } from '../types/index.js'\n\nimport { fieldAffectsData, tabHasName } from '../fields/config/types.js'\n\ntype TraverseFieldsArgs = {\n data: Record<string, unknown>\n fields: (Field | TabAsField)[]\n result: Record<string, unknown>\n}\nconst traverseFields = ({\n data,\n // parent,\n fields,\n result,\n}: TraverseFieldsArgs) => {\n fields.forEach((field) => {\n switch (field.type) {\n case 'collapsible':\n case 'row': {\n traverseFields({\n data,\n fields: field.fields,\n result,\n })\n break\n }\n case 'group': {\n if (fieldAffectsData(field)) {\n const groupData: Record<string, unknown> =\n (data[field.name] as Record<string, unknown>) ?? {}\n let targetResult\n if (typeof field.saveToJWT === 'string') {\n targetResult = field.saveToJWT\n result[field.saveToJWT] = groupData\n } else if (field.saveToJWT) {\n targetResult = field.name\n result[field.name] = groupData\n }\n const groupResult = (targetResult ? result[targetResult] : result) as Record<\n string,\n unknown\n >\n traverseFields({\n data: groupData,\n fields: field.fields,\n result: groupResult,\n })\n break\n } else {\n traverseFields({\n data,\n fields: field.fields,\n result,\n })\n\n break\n }\n }\n case 'tab': {\n if (tabHasName(field)) {\n const tabData: Record<string, unknown> =\n (data[field.name] as Record<string, unknown>) ?? {}\n let targetResult\n if (typeof field.saveToJWT === 'string') {\n targetResult = field.saveToJWT\n result[field.saveToJWT] = tabData\n } else if (field.saveToJWT) {\n targetResult = field.name\n result[field.name] = tabData\n }\n const tabResult = (targetResult ? result[targetResult] : result) as Record<\n string,\n unknown\n >\n traverseFields({\n data: tabData,\n fields: field.fields,\n result: tabResult,\n })\n } else {\n traverseFields({\n data,\n fields: field.fields,\n result,\n })\n }\n break\n }\n case 'tabs': {\n traverseFields({\n data,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n result,\n })\n break\n }\n default:\n if (fieldAffectsData(field)) {\n if (field.saveToJWT) {\n if (typeof field.saveToJWT === 'string') {\n result[field.saveToJWT] = data[field.name]\n delete result[field.name]\n } else {\n result[field.name] = data[field.name] as Record<string, unknown>\n }\n } else if (field.saveToJWT === false) {\n delete result[field.name]\n }\n }\n }\n })\n return result\n}\nexport const getFieldsToSign = (args: {\n collectionConfig: CollectionConfig\n email: string\n sid?: string\n user: PayloadRequest['user']\n}): Record<string, unknown> => {\n const { collectionConfig, email, sid, user } = args\n\n const fieldsToSign = Object.create(null) as Record<string, unknown>\n\n traverseFields({\n data: user!,\n fields: collectionConfig.fields,\n result: fieldsToSign,\n })\n\n delete fieldsToSign.collection\n delete fieldsToSign.email\n delete fieldsToSign.exp\n delete fieldsToSign.iat\n delete fieldsToSign.id\n delete fieldsToSign.sid\n\n return {\n ...fieldsToSign,\n id: user?.id,\n collection: collectionConfig.slug,\n email,\n ...(sid ? { sid } : {}),\n }\n}\n"],"names":["fieldAffectsData","tabHasName","traverseFields","data","fields","result","forEach","field","type","groupData","name","targetResult","saveToJWT","groupResult","tabData","tabResult","tabs","map","tab","getFieldsToSign","args","collectionConfig","email","sid","user","fieldsToSign","Object","create","collection","exp","iat","id","slug"],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { getFieldsToSign } from './getFieldsToSign.js';
|
|
3
|
+
describe('getFieldsToSign', ()=>{
|
|
4
|
+
it('should prevent fields configured with saveToJWT from replacing Payload-owned JWT values', ()=>{
|
|
5
|
+
const collectionConfig = {
|
|
6
|
+
fields: [
|
|
7
|
+
{
|
|
8
|
+
name: 'impersonatedID',
|
|
9
|
+
saveToJWT: 'id',
|
|
10
|
+
type: 'text'
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
name: 'impersonatedCollection',
|
|
14
|
+
saveToJWT: 'collection',
|
|
15
|
+
type: 'text'
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
name: 'impersonatedEmail',
|
|
19
|
+
saveToJWT: 'email',
|
|
20
|
+
type: 'text'
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
name: 'impersonatedSession',
|
|
24
|
+
saveToJWT: 'sid',
|
|
25
|
+
type: 'text'
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: 'forgedIssuedAt',
|
|
29
|
+
saveToJWT: 'iat',
|
|
30
|
+
type: 'number'
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: 'forgedExpiration',
|
|
34
|
+
saveToJWT: 'exp',
|
|
35
|
+
type: 'number'
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'authVersionAlias',
|
|
39
|
+
saveToJWT: 'authVersion',
|
|
40
|
+
type: 'number'
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'role',
|
|
44
|
+
saveToJWT: true,
|
|
45
|
+
type: 'text'
|
|
46
|
+
}
|
|
47
|
+
],
|
|
48
|
+
slug: 'users'
|
|
49
|
+
};
|
|
50
|
+
const result = getFieldsToSign({
|
|
51
|
+
collectionConfig,
|
|
52
|
+
email: 'attacker@example.com',
|
|
53
|
+
sid: 'trusted-session',
|
|
54
|
+
user: {
|
|
55
|
+
forgedExpiration: 1,
|
|
56
|
+
forgedIssuedAt: 1,
|
|
57
|
+
id: 'attacker-id',
|
|
58
|
+
impersonatedCollection: 'posts',
|
|
59
|
+
impersonatedEmail: 'victim@example.com',
|
|
60
|
+
impersonatedID: 'victim-id',
|
|
61
|
+
impersonatedSession: 'victim-session',
|
|
62
|
+
authVersionAlias: 1,
|
|
63
|
+
role: 'admin'
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
expect(result).toEqual({
|
|
67
|
+
collection: 'users',
|
|
68
|
+
email: 'attacker@example.com',
|
|
69
|
+
id: 'attacker-id',
|
|
70
|
+
authVersion: 1,
|
|
71
|
+
role: 'admin',
|
|
72
|
+
sid: 'trusted-session'
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
it('should retain __proto__ and constructor aliases without mutating the result prototype', ()=>{
|
|
76
|
+
const collectionConfig = {
|
|
77
|
+
fields: [
|
|
78
|
+
{
|
|
79
|
+
name: 'prototypeAlias',
|
|
80
|
+
saveToJWT: '__proto__',
|
|
81
|
+
type: 'text'
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: 'constructorAlias',
|
|
85
|
+
saveToJWT: 'constructor',
|
|
86
|
+
type: 'text'
|
|
87
|
+
}
|
|
88
|
+
],
|
|
89
|
+
slug: 'users'
|
|
90
|
+
};
|
|
91
|
+
const result = getFieldsToSign({
|
|
92
|
+
collectionConfig,
|
|
93
|
+
email: 'user@example.com',
|
|
94
|
+
user: {
|
|
95
|
+
constructorAlias: 'custom-constructor',
|
|
96
|
+
id: 'user-id',
|
|
97
|
+
prototypeAlias: 'custom-prototype'
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
const roundTrippedResult = JSON.parse(JSON.stringify(result));
|
|
101
|
+
expect(Object.getPrototypeOf(result)).toBe(Object.prototype);
|
|
102
|
+
expect(Object.hasOwn(result, '__proto__')).toBe(true);
|
|
103
|
+
expect(Object.hasOwn(result, 'constructor')).toBe(true);
|
|
104
|
+
expect(result.__proto__).toBe('custom-prototype');
|
|
105
|
+
expect(result.constructor).toBe('custom-constructor');
|
|
106
|
+
expect(Object.getPrototypeOf(roundTrippedResult)).toBe(Object.prototype);
|
|
107
|
+
expect(Object.hasOwn(roundTrippedResult, '__proto__')).toBe(true);
|
|
108
|
+
expect(Object.hasOwn(roundTrippedResult, 'constructor')).toBe(true);
|
|
109
|
+
expect(roundTrippedResult.__proto__).toBe('custom-prototype');
|
|
110
|
+
expect(roundTrippedResult.constructor).toBe('custom-constructor');
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
//# sourceMappingURL=getFieldsToSign.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/auth/getFieldsToSign.spec.ts"],"sourcesContent":["import type { CollectionConfig } from '../collections/config/types.js'\nimport type { PayloadRequest } from '../types/index.js'\n\nimport { describe, expect, it } from 'vitest'\n\nimport { getFieldsToSign } from './getFieldsToSign.js'\n\ndescribe('getFieldsToSign', () => {\n it('should prevent fields configured with saveToJWT from replacing Payload-owned JWT values', () => {\n const collectionConfig = {\n fields: [\n {\n name: 'impersonatedID',\n saveToJWT: 'id',\n type: 'text',\n },\n {\n name: 'impersonatedCollection',\n saveToJWT: 'collection',\n type: 'text',\n },\n {\n name: 'impersonatedEmail',\n saveToJWT: 'email',\n type: 'text',\n },\n {\n name: 'impersonatedSession',\n saveToJWT: 'sid',\n type: 'text',\n },\n {\n name: 'forgedIssuedAt',\n saveToJWT: 'iat',\n type: 'number',\n },\n {\n name: 'forgedExpiration',\n saveToJWT: 'exp',\n type: 'number',\n },\n {\n name: 'authVersionAlias',\n saveToJWT: 'authVersion',\n type: 'number',\n },\n {\n name: 'role',\n saveToJWT: true,\n type: 'text',\n },\n ],\n slug: 'users',\n } as CollectionConfig\n\n const result = getFieldsToSign({\n collectionConfig,\n email: 'attacker@example.com',\n sid: 'trusted-session',\n user: {\n forgedExpiration: 1,\n forgedIssuedAt: 1,\n id: 'attacker-id',\n impersonatedCollection: 'posts',\n impersonatedEmail: 'victim@example.com',\n impersonatedID: 'victim-id',\n impersonatedSession: 'victim-session',\n authVersionAlias: 1,\n role: 'admin',\n } as PayloadRequest['user'],\n })\n\n expect(result).toEqual({\n collection: 'users',\n email: 'attacker@example.com',\n id: 'attacker-id',\n authVersion: 1,\n role: 'admin',\n sid: 'trusted-session',\n })\n })\n\n it('should retain __proto__ and constructor aliases without mutating the result prototype', () => {\n const collectionConfig = {\n fields: [\n {\n name: 'prototypeAlias',\n saveToJWT: '__proto__',\n type: 'text',\n },\n {\n name: 'constructorAlias',\n saveToJWT: 'constructor',\n type: 'text',\n },\n ],\n slug: 'users',\n } as CollectionConfig\n\n const result = getFieldsToSign({\n collectionConfig,\n email: 'user@example.com',\n user: {\n constructorAlias: 'custom-constructor',\n id: 'user-id',\n prototypeAlias: 'custom-prototype',\n } as PayloadRequest['user'],\n })\n const roundTrippedResult = JSON.parse(JSON.stringify(result)) as Record<string, unknown>\n\n expect(Object.getPrototypeOf(result)).toBe(Object.prototype)\n expect(Object.hasOwn(result, '__proto__')).toBe(true)\n expect(Object.hasOwn(result, 'constructor')).toBe(true)\n expect(result.__proto__).toBe('custom-prototype')\n expect(result.constructor).toBe('custom-constructor')\n expect(Object.getPrototypeOf(roundTrippedResult)).toBe(Object.prototype)\n expect(Object.hasOwn(roundTrippedResult, '__proto__')).toBe(true)\n expect(Object.hasOwn(roundTrippedResult, 'constructor')).toBe(true)\n expect(roundTrippedResult.__proto__).toBe('custom-prototype')\n expect(roundTrippedResult.constructor).toBe('custom-constructor')\n })\n})\n"],"names":["describe","expect","it","getFieldsToSign","collectionConfig","fields","name","saveToJWT","type","slug","result","email","sid","user","forgedExpiration","forgedIssuedAt","id","impersonatedCollection","impersonatedEmail","impersonatedID","impersonatedSession","authVersionAlias","role","toEqual","collection","authVersion","constructorAlias","prototypeAlias","roundTrippedResult","JSON","parse","stringify","Object","getPrototypeOf","toBe","prototype","hasOwn","__proto__"],"mappings":"AAGA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAQ;AAE7C,SAASC,eAAe,QAAQ,uBAAsB;AAEtDH,SAAS,mBAAmB;IAC1BE,GAAG,2FAA2F;QAC5F,MAAME,mBAAmB;YACvBC,QAAQ;gBACN;oBACEC,MAAM;oBACNC,WAAW;oBACXC,MAAM;gBACR;gBACA;oBACEF,MAAM;oBACNC,WAAW;oBACXC,MAAM;gBACR;gBACA;oBACEF,MAAM;oBACNC,WAAW;oBACXC,MAAM;gBACR;gBACA;oBACEF,MAAM;oBACNC,WAAW;oBACXC,MAAM;gBACR;gBACA;oBACEF,MAAM;oBACNC,WAAW;oBACXC,MAAM;gBACR;gBACA;oBACEF,MAAM;oBACNC,WAAW;oBACXC,MAAM;gBACR;gBACA;oBACEF,MAAM;oBACNC,WAAW;oBACXC,MAAM;gBACR;gBACA;oBACEF,MAAM;oBACNC,WAAW;oBACXC,MAAM;gBACR;aACD;YACDC,MAAM;QACR;QAEA,MAAMC,SAASP,gBAAgB;YAC7BC;YACAO,OAAO;YACPC,KAAK;YACLC,MAAM;gBACJC,kBAAkB;gBAClBC,gBAAgB;gBAChBC,IAAI;gBACJC,wBAAwB;gBACxBC,mBAAmB;gBACnBC,gBAAgB;gBAChBC,qBAAqB;gBACrBC,kBAAkB;gBAClBC,MAAM;YACR;QACF;QAEArB,OAAOS,QAAQa,OAAO,CAAC;YACrBC,YAAY;YACZb,OAAO;YACPK,IAAI;YACJS,aAAa;YACbH,MAAM;YACNV,KAAK;QACP;IACF;IAEAV,GAAG,yFAAyF;QAC1F,MAAME,mBAAmB;YACvBC,QAAQ;gBACN;oBACEC,MAAM;oBACNC,WAAW;oBACXC,MAAM;gBACR;gBACA;oBACEF,MAAM;oBACNC,WAAW;oBACXC,MAAM;gBACR;aACD;YACDC,MAAM;QACR;QAEA,MAAMC,SAASP,gBAAgB;YAC7BC;YACAO,OAAO;YACPE,MAAM;gBACJa,kBAAkB;gBAClBV,IAAI;gBACJW,gBAAgB;YAClB;QACF;QACA,MAAMC,qBAAqBC,KAAKC,KAAK,CAACD,KAAKE,SAAS,CAACrB;QAErDT,OAAO+B,OAAOC,cAAc,CAACvB,SAASwB,IAAI,CAACF,OAAOG,SAAS;QAC3DlC,OAAO+B,OAAOI,MAAM,CAAC1B,QAAQ,cAAcwB,IAAI,CAAC;QAChDjC,OAAO+B,OAAOI,MAAM,CAAC1B,QAAQ,gBAAgBwB,IAAI,CAAC;QAClDjC,OAAOS,OAAO2B,SAAS,EAAEH,IAAI,CAAC;QAC9BjC,OAAOS,OAAO,WAAW,EAAEwB,IAAI,CAAC;QAChCjC,OAAO+B,OAAOC,cAAc,CAACL,qBAAqBM,IAAI,CAACF,OAAOG,SAAS;QACvElC,OAAO+B,OAAOI,MAAM,CAACR,oBAAoB,cAAcM,IAAI,CAAC;QAC5DjC,OAAO+B,OAAOI,MAAM,CAACR,oBAAoB,gBAAgBM,IAAI,CAAC;QAC9DjC,OAAO2B,mBAAmBS,SAAS,EAAEH,IAAI,CAAC;QAC1CjC,OAAO2B,mBAAmB,WAAW,EAAEM,IAAI,CAAC;IAC9C;AACF"}
|
package/dist/auth/jwt.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/auth/jwt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/auth/jwt.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,OAAO,+CAIjB;IACD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,eAAe,EAAE,MAAM,CAAA;CACxB;;;EAUA,CAAA"}
|
package/dist/auth/jwt.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { SignJWT } from 'jose';
|
|
2
|
+
import { JWT_AUTH_VERSION } from './jwtAuth.js';
|
|
2
3
|
export const jwtSign = async ({ fieldsToSign, secret, tokenExpiration })=>{
|
|
3
4
|
const secretKey = new TextEncoder().encode(secret);
|
|
4
5
|
const issuedAt = Math.floor(Date.now() / 1000);
|
|
5
6
|
const exp = issuedAt + tokenExpiration;
|
|
6
7
|
const token = await new SignJWT(fieldsToSign).setProtectedHeader({
|
|
7
8
|
alg: 'HS256',
|
|
9
|
+
authVersion: JWT_AUTH_VERSION,
|
|
8
10
|
typ: 'JWT'
|
|
9
11
|
}).setIssuedAt(issuedAt).setExpirationTime(exp).sign(secretKey);
|
|
10
12
|
return {
|