@rakun-kit/core 1.4.11 → 1.5.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/README.md +1101 -750
- package/dist/cjs/api/context.js +1 -0
- package/dist/cjs/api/context.js.map +1 -1
- package/dist/cjs/api/operations/apiEventLog.js +128 -0
- package/dist/cjs/api/operations/apiEventLog.js.map +1 -0
- package/dist/cjs/api/operations/index.js +4 -1
- package/dist/cjs/api/operations/index.js.map +1 -1
- package/dist/cjs/api/operations/manager-contract.js +269 -7
- package/dist/cjs/api/operations/manager-contract.js.map +1 -1
- package/dist/cjs/api/operations/manager-manifest.js +167 -2
- package/dist/cjs/api/operations/manager-manifest.js.map +1 -1
- package/dist/cjs/api/operations/manager.js +134 -7
- package/dist/cjs/api/operations/manager.js.map +1 -1
- package/dist/cjs/api/operations/tracing.js +36 -5
- package/dist/cjs/api/operations/tracing.js.map +1 -1
- package/dist/cjs/api/routes/manager/auth/externalLogin.js +126 -0
- package/dist/cjs/api/routes/manager/auth/externalLogin.js.map +1 -0
- package/dist/cjs/api/routes/manager/auth/login.js +51 -54
- package/dist/cjs/api/routes/manager/auth/login.js.map +1 -1
- package/dist/cjs/api/routes/manager/auth/mfa/regenerateRecoveryCodes.js +46 -0
- package/dist/cjs/api/routes/manager/auth/mfa/regenerateRecoveryCodes.js.map +1 -0
- package/dist/cjs/api/routes/manager/auth/mfa/verifyRecoveryCode.js +80 -0
- package/dist/cjs/api/routes/manager/auth/mfa/verifyRecoveryCode.js.map +1 -0
- package/dist/cjs/api/routes/manager/auth/passwordIpBlocks.js +90 -0
- package/dist/cjs/api/routes/manager/auth/passwordIpBlocks.js.map +1 -0
- package/dist/cjs/api/routes/manager/auth/passwordRecovery.js +147 -0
- package/dist/cjs/api/routes/manager/auth/passwordRecovery.js.map +1 -0
- package/dist/cjs/api/routes/manager/auth/totp/confirmTotp.js +19 -2
- package/dist/cjs/api/routes/manager/auth/totp/confirmTotp.js.map +1 -1
- package/dist/cjs/api/routes/manager/auth/totp/enrollTotp.js +2 -2
- package/dist/cjs/api/routes/manager/auth/totp/enrollTotp.js.map +1 -1
- package/dist/cjs/api/routes/manager/auth/webauthn/webauthnRegisterVerify.js +32 -3
- package/dist/cjs/api/routes/manager/auth/webauthn/webauthnRegisterVerify.js.map +1 -1
- package/dist/cjs/api/routes/manager/comments.js +120 -8
- package/dist/cjs/api/routes/manager/comments.js.map +1 -1
- package/dist/cjs/api/routes/manager/contentVersions.js +224 -0
- package/dist/cjs/api/routes/manager/contentVersions.js.map +1 -0
- package/dist/cjs/api/routes/manager/create.js +3 -78
- package/dist/cjs/api/routes/manager/create.js.map +1 -1
- package/dist/cjs/api/routes/manager/delete.js +71 -7
- package/dist/cjs/api/routes/manager/delete.js.map +1 -1
- package/dist/cjs/api/routes/manager/duplicate.js +2 -2
- package/dist/cjs/api/routes/manager/duplicate.js.map +1 -1
- package/dist/cjs/api/routes/manager/get.js +3 -4
- package/dist/cjs/api/routes/manager/get.js.map +1 -1
- package/dist/cjs/api/routes/manager/list.js +93 -4
- package/dist/cjs/api/routes/manager/list.js.map +1 -1
- package/dist/cjs/api/routes/manager/localeVariants.js +234 -18
- package/dist/cjs/api/routes/manager/localeVariants.js.map +1 -1
- package/dist/cjs/api/routes/manager/logs/cleanup.js +20 -0
- package/dist/cjs/api/routes/manager/logs/cleanup.js.map +1 -0
- package/dist/cjs/api/routes/manager/logs/list.js +22 -0
- package/dist/cjs/api/routes/manager/logs/list.js.map +1 -0
- package/dist/cjs/api/routes/manager/notifications.js +140 -0
- package/dist/cjs/api/routes/manager/notifications.js.map +1 -0
- package/dist/cjs/api/routes/manager/preview/create.js +21 -0
- package/dist/cjs/api/routes/manager/preview/create.js.map +1 -1
- package/dist/cjs/api/routes/manager/previewSlugRedirects.js +25 -0
- package/dist/cjs/api/routes/manager/previewSlugRedirects.js.map +1 -0
- package/dist/cjs/api/routes/manager/reviewPolicies.js +109 -0
- package/dist/cjs/api/routes/manager/reviewPolicies.js.map +1 -0
- package/dist/cjs/api/routes/manager/reviews.js +272 -0
- package/dist/cjs/api/routes/manager/reviews.js.map +1 -0
- package/dist/cjs/api/routes/manager/routeLayout.js +138 -0
- package/dist/cjs/api/routes/manager/routeLayout.js.map +1 -0
- package/dist/cjs/api/routes/manager/template.js +111 -0
- package/dist/cjs/api/routes/manager/template.js.map +1 -0
- package/dist/cjs/api/routes/manager/translateDocument.js +17 -45
- package/dist/cjs/api/routes/manager/translateDocument.js.map +1 -1
- package/dist/cjs/api/routes/manager/trash.js +74 -41
- package/dist/cjs/api/routes/manager/trash.js.map +1 -1
- package/dist/cjs/api/routes/manager/uiLocales.js +30 -0
- package/dist/cjs/api/routes/manager/uiLocales.js.map +1 -0
- package/dist/cjs/api/routes/manager/update.js +89 -72
- package/dist/cjs/api/routes/manager/update.js.map +1 -1
- package/dist/cjs/api/routes/manager/versions/restore.js +20 -0
- package/dist/cjs/api/routes/manager/versions/restore.js.map +1 -1
- package/dist/cjs/api/routes/web/page.js +80 -29
- package/dist/cjs/api/routes/web/page.js.map +1 -1
- package/dist/cjs/api/routes/web/previewPage.js +3 -1
- package/dist/cjs/api/routes/web/previewPage.js.map +1 -1
- package/dist/cjs/api/utils/authEvents.js +31 -0
- package/dist/cjs/api/utils/authEvents.js.map +1 -0
- package/dist/cjs/api/utils/authRateLimit.js +4 -3
- package/dist/cjs/api/utils/authRateLimit.js.map +1 -1
- package/dist/cjs/api/utils/contentTemplate.js +205 -0
- package/dist/cjs/api/utils/contentTemplate.js.map +1 -0
- package/dist/cjs/api/utils/managerNotifications.js +27 -0
- package/dist/cjs/api/utils/managerNotifications.js.map +1 -0
- package/dist/cjs/api/utils/recoveryCodes.js +29 -0
- package/dist/cjs/api/utils/recoveryCodes.js.map +1 -0
- package/dist/cjs/api/utils/redirects/createSlugChangeRedirects.js +145 -0
- package/dist/cjs/api/utils/redirects/createSlugChangeRedirects.js.map +1 -0
- package/dist/cjs/api/utils/redirects/slugPathChanges.js +137 -0
- package/dist/cjs/api/utils/redirects/slugPathChanges.js.map +1 -0
- package/dist/cjs/api/utils/requireContentType.js +13 -0
- package/dist/cjs/api/utils/requireContentType.js.map +1 -1
- package/dist/cjs/api/utils/reviews.js +273 -0
- package/dist/cjs/api/utils/reviews.js.map +1 -0
- package/dist/cjs/api/utils/routes/routeMapHelpers.js +46 -22
- package/dist/cjs/api/utils/routes/routeMapHelpers.js.map +1 -1
- package/dist/cjs/api/utils/routes/updateRoutesMap.js +2 -1
- package/dist/cjs/api/utils/routes/updateRoutesMap.js.map +1 -1
- package/dist/cjs/api/utils/safeManagerQuery.js +1 -0
- package/dist/cjs/api/utils/safeManagerQuery.js.map +1 -1
- package/dist/cjs/auth/accountRecovery.js +5 -0
- package/dist/cjs/auth/accountRecovery.js.map +1 -0
- package/dist/cjs/auth/completePrimaryAuthentication.js +50 -0
- package/dist/cjs/auth/completePrimaryAuthentication.js.map +1 -0
- package/dist/cjs/auth/loginAdapters.js +183 -0
- package/dist/cjs/auth/loginAdapters.js.map +1 -0
- package/dist/cjs/auth/passwordFail2ban.js +119 -0
- package/dist/cjs/auth/passwordFail2ban.js.map +1 -0
- package/dist/cjs/auth/passwordResetMailTemplate.js +90 -0
- package/dist/cjs/auth/passwordResetMailTemplate.js.map +1 -0
- package/dist/cjs/bootstrapState.js.map +1 -1
- package/dist/cjs/client.js +6 -2
- package/dist/cjs/client.js.map +1 -1
- package/dist/cjs/contracts.js +13 -0
- package/dist/cjs/contracts.js.map +1 -1
- package/dist/cjs/eventLog/index.js +52 -0
- package/dist/cjs/eventLog/index.js.map +1 -0
- package/dist/cjs/eventLog/mongo.js +115 -0
- package/dist/cjs/eventLog/mongo.js.map +1 -0
- package/dist/cjs/eventLog/service.js +189 -0
- package/dist/cjs/eventLog/service.js.map +1 -0
- package/dist/cjs/eventLog/types.js +6 -0
- package/dist/cjs/eventLog/types.js.map +1 -0
- package/dist/cjs/index.js +67 -4
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internal-content-types/ContentCommentReadState.js +21 -0
- package/dist/cjs/internal-content-types/ContentCommentReadState.js.map +1 -0
- package/dist/cjs/internal-content-types/ContentReview.js +34 -0
- package/dist/cjs/internal-content-types/ContentReview.js.map +1 -0
- package/dist/cjs/internal-content-types/ContentReviewDecision.js +21 -0
- package/dist/cjs/internal-content-types/ContentReviewDecision.js.map +1 -0
- package/dist/cjs/internal-content-types/ContentReviewPolicy.js +21 -0
- package/dist/cjs/internal-content-types/ContentReviewPolicy.js.map +1 -0
- package/dist/cjs/internal-content-types/{LinkedIteratorTemplate.js → ContentTemplate.js} +5 -5
- package/dist/cjs/internal-content-types/ContentTemplate.js.map +1 -0
- package/dist/cjs/internal-content-types/LoginIpBlock.js +20 -0
- package/dist/cjs/internal-content-types/LoginIpBlock.js.map +1 -0
- package/dist/cjs/internal-content-types/ManagerNotification.js +33 -0
- package/dist/cjs/internal-content-types/ManagerNotification.js.map +1 -0
- package/dist/cjs/internal-content-types/ManagerUserHooks.js +8 -1
- package/dist/cjs/internal-content-types/ManagerUserHooks.js.map +1 -1
- package/dist/cjs/internal-content-types/PasswordResetToken.js +50 -0
- package/dist/cjs/internal-content-types/PasswordResetToken.js.map +1 -0
- package/dist/cjs/internal-content-types/PreviewSnapshot.js +1 -0
- package/dist/cjs/internal-content-types/PreviewSnapshot.js.map +1 -1
- package/dist/cjs/internal-content-types/TemplateContent.js +18 -0
- package/dist/cjs/internal-content-types/TemplateContent.js.map +1 -0
- package/dist/cjs/internal-content-types/UserMfa.js +35 -1
- package/dist/cjs/internal-content-types/UserMfa.js.map +1 -1
- package/dist/cjs/internal-content-types/index.js +9 -1
- package/dist/cjs/internal-content-types/index.js.map +1 -1
- package/dist/cjs/lib/ContentType.js +16 -32
- package/dist/cjs/lib/ContentType.js.map +1 -1
- package/dist/cjs/lib/Permissions.js +13 -1
- package/dist/cjs/lib/Permissions.js.map +1 -1
- package/dist/cjs/lib/Registry.js +34 -13
- package/dist/cjs/lib/Registry.js.map +1 -1
- package/dist/cjs/lib/errors/AppError.js +7 -1
- package/dist/cjs/lib/errors/AppError.js.map +1 -1
- package/dist/cjs/lib/fields/Fields.js +2 -1
- package/dist/cjs/lib/fields/Fields.js.map +1 -1
- package/dist/cjs/lib/fields/Link.js +2 -1
- package/dist/cjs/lib/fields/Link.js.map +1 -1
- package/dist/cjs/lib/localeVariants.js +9 -1
- package/dist/cjs/lib/localeVariants.js.map +1 -1
- package/dist/cjs/lib/systemFields.js +2 -2
- package/dist/cjs/lib/systemFields.js.map +1 -1
- package/dist/cjs/literals/index.js +0 -1
- package/dist/cjs/literals/index.js.map +1 -1
- package/dist/cjs/mail/adapters.js +3 -0
- package/dist/cjs/mail/adapters.js.map +1 -0
- package/dist/cjs/mail/index.js +53 -0
- package/dist/cjs/mail/index.js.map +1 -0
- package/dist/cjs/mail/mailService.js +209 -0
- package/dist/cjs/mail/mailService.js.map +1 -0
- package/dist/cjs/mail/templates.js +32 -0
- package/dist/cjs/mail/templates.js.map +1 -0
- package/dist/cjs/orm/createIndexes.js +37 -0
- package/dist/cjs/orm/createIndexes.js.map +1 -1
- package/dist/cjs/orm/dbService.js +3 -3
- package/dist/cjs/orm/dbService.js.map +1 -1
- package/dist/cjs/orm/operations/update.js +28 -26
- package/dist/cjs/orm/operations/update.js.map +1 -1
- package/dist/cjs/plugins.js.map +1 -1
- package/dist/cjs/schemas/manager/auth/externalLogin.js +27 -0
- package/dist/cjs/schemas/manager/auth/externalLogin.js.map +1 -0
- package/dist/cjs/schemas/manager/auth/mfa/recoveryCode.js +27 -0
- package/dist/cjs/schemas/manager/auth/mfa/recoveryCode.js.map +1 -0
- package/dist/cjs/schemas/manager/auth/passwordIpBlocks.js +32 -0
- package/dist/cjs/schemas/manager/auth/passwordIpBlocks.js.map +1 -0
- package/dist/cjs/schemas/manager/auth/passwordRecovery.js +21 -0
- package/dist/cjs/schemas/manager/auth/passwordRecovery.js.map +1 -0
- package/dist/cjs/schemas/manager/auth/totp/confirmTotp.js +4 -7
- package/dist/cjs/schemas/manager/auth/totp/confirmTotp.js.map +1 -1
- package/dist/cjs/schemas/manager/comments.js +11 -1
- package/dist/cjs/schemas/manager/comments.js.map +1 -1
- package/dist/cjs/schemas/manager/contentVersions.js +51 -0
- package/dist/cjs/schemas/manager/contentVersions.js.map +1 -0
- package/dist/cjs/schemas/manager/create.js +0 -2
- package/dist/cjs/schemas/manager/create.js.map +1 -1
- package/dist/cjs/schemas/manager/eventLogs.js +54 -0
- package/dist/cjs/schemas/manager/eventLogs.js.map +1 -0
- package/dist/cjs/schemas/manager/list.js +1 -0
- package/dist/cjs/schemas/manager/list.js.map +1 -1
- package/dist/cjs/schemas/manager/localeVariants.js +10 -1
- package/dist/cjs/schemas/manager/localeVariants.js.map +1 -1
- package/dist/cjs/schemas/manager/notifications.js +51 -0
- package/dist/cjs/schemas/manager/notifications.js.map +1 -0
- package/dist/cjs/schemas/manager/preview.js +1 -0
- package/dist/cjs/schemas/manager/preview.js.map +1 -1
- package/dist/cjs/schemas/manager/reviewPolicies.js +33 -0
- package/dist/cjs/schemas/manager/reviewPolicies.js.map +1 -0
- package/dist/cjs/schemas/manager/reviews.js +93 -0
- package/dist/cjs/schemas/manager/reviews.js.map +1 -0
- package/dist/cjs/schemas/manager/routeLayout.js +50 -0
- package/dist/cjs/schemas/manager/routeLayout.js.map +1 -0
- package/dist/cjs/schemas/manager/slugRedirects.js +24 -0
- package/dist/cjs/schemas/manager/slugRedirects.js.map +1 -0
- package/dist/cjs/schemas/manager/template.js +24 -0
- package/dist/cjs/schemas/manager/template.js.map +1 -0
- package/dist/cjs/schemas/manager/uiLocales.js +29 -0
- package/dist/cjs/schemas/manager/uiLocales.js.map +1 -0
- package/dist/cjs/schemas/manager/update.js +1 -2
- package/dist/cjs/schemas/manager/update.js.map +1 -1
- package/dist/cjs/schemas/web/page.js +1 -0
- package/dist/cjs/schemas/web/page.js.map +1 -1
- package/dist/docs/index.md +251 -0
- package/dist/esm/api/context.d.ts +2 -0
- package/dist/esm/api/context.d.ts.map +1 -1
- package/dist/esm/api/context.js +1 -0
- package/dist/esm/api/context.js.map +1 -1
- package/dist/esm/api/operations/apiEventLog.d.ts +25 -0
- package/dist/esm/api/operations/apiEventLog.d.ts.map +1 -0
- package/dist/esm/api/operations/apiEventLog.js +121 -0
- package/dist/esm/api/operations/apiEventLog.js.map +1 -0
- package/dist/esm/api/operations/index.d.ts +756 -20
- package/dist/esm/api/operations/index.d.ts.map +1 -1
- package/dist/esm/api/operations/index.js +1 -0
- package/dist/esm/api/operations/index.js.map +1 -1
- package/dist/esm/api/operations/manager-contract.d.ts +748 -20
- package/dist/esm/api/operations/manager-contract.d.ts.map +1 -1
- package/dist/esm/api/operations/manager-contract.js +270 -8
- package/dist/esm/api/operations/manager-contract.js.map +1 -1
- package/dist/esm/api/operations/manager-manifest.d.ts +166 -1
- package/dist/esm/api/operations/manager-manifest.d.ts.map +1 -1
- package/dist/esm/api/operations/manager-manifest.js +167 -2
- package/dist/esm/api/operations/manager-manifest.js.map +1 -1
- package/dist/esm/api/operations/manager.d.ts +748 -20
- package/dist/esm/api/operations/manager.d.ts.map +1 -1
- package/dist/esm/api/operations/manager.js +132 -5
- package/dist/esm/api/operations/manager.js.map +1 -1
- package/dist/esm/api/operations/tracing.d.ts.map +1 -1
- package/dist/esm/api/operations/tracing.js +36 -5
- package/dist/esm/api/operations/tracing.js.map +1 -1
- package/dist/esm/api/operations/web-contract.d.ts +7 -0
- package/dist/esm/api/operations/web-contract.d.ts.map +1 -1
- package/dist/esm/api/operations/web.d.ts +7 -0
- package/dist/esm/api/operations/web.d.ts.map +1 -1
- package/dist/esm/api/routes/manager/auth/externalLogin.d.ts +11 -0
- package/dist/esm/api/routes/manager/auth/externalLogin.d.ts.map +1 -0
- package/dist/esm/api/routes/manager/auth/externalLogin.js +121 -0
- package/dist/esm/api/routes/manager/auth/externalLogin.js.map +1 -0
- package/dist/esm/api/routes/manager/auth/getSession.d.ts +2 -0
- package/dist/esm/api/routes/manager/auth/getSession.d.ts.map +1 -1
- package/dist/esm/api/routes/manager/auth/login.d.ts.map +1 -1
- package/dist/esm/api/routes/manager/auth/login.js +52 -55
- package/dist/esm/api/routes/manager/auth/login.js.map +1 -1
- package/dist/esm/api/routes/manager/auth/markTourSeen.d.ts +2 -2
- package/dist/esm/api/routes/manager/auth/mfa/regenerateRecoveryCodes.d.ts +10 -0
- package/dist/esm/api/routes/manager/auth/mfa/regenerateRecoveryCodes.d.ts.map +1 -0
- package/dist/esm/api/routes/manager/auth/mfa/regenerateRecoveryCodes.js +42 -0
- package/dist/esm/api/routes/manager/auth/mfa/regenerateRecoveryCodes.js.map +1 -0
- package/dist/esm/api/routes/manager/auth/mfa/verifyRecoveryCode.d.ts +15 -0
- package/dist/esm/api/routes/manager/auth/mfa/verifyRecoveryCode.d.ts.map +1 -0
- package/dist/esm/api/routes/manager/auth/mfa/verifyRecoveryCode.js +76 -0
- package/dist/esm/api/routes/manager/auth/mfa/verifyRecoveryCode.js.map +1 -0
- package/dist/esm/api/routes/manager/auth/passwordIpBlocks.d.ts +10 -0
- package/dist/esm/api/routes/manager/auth/passwordIpBlocks.d.ts.map +1 -0
- package/dist/esm/api/routes/manager/auth/passwordIpBlocks.js +85 -0
- package/dist/esm/api/routes/manager/auth/passwordIpBlocks.js.map +1 -0
- package/dist/esm/api/routes/manager/auth/passwordRecovery.d.ts +15 -0
- package/dist/esm/api/routes/manager/auth/passwordRecovery.d.ts.map +1 -0
- package/dist/esm/api/routes/manager/auth/passwordRecovery.js +142 -0
- package/dist/esm/api/routes/manager/auth/passwordRecovery.js.map +1 -0
- package/dist/esm/api/routes/manager/auth/totp/confirmTotp.d.ts +2 -1
- package/dist/esm/api/routes/manager/auth/totp/confirmTotp.d.ts.map +1 -1
- package/dist/esm/api/routes/manager/auth/totp/confirmTotp.js +19 -2
- package/dist/esm/api/routes/manager/auth/totp/confirmTotp.js.map +1 -1
- package/dist/esm/api/routes/manager/auth/totp/enrollTotp.js +2 -2
- package/dist/esm/api/routes/manager/auth/totp/enrollTotp.js.map +1 -1
- package/dist/esm/api/routes/manager/auth/updateAccount.d.ts +2 -2
- package/dist/esm/api/routes/manager/auth/updateTutorialPreferences.d.ts +2 -2
- package/dist/esm/api/routes/manager/auth/webauthn/webauthnRegisterVerify.d.ts +2 -1
- package/dist/esm/api/routes/manager/auth/webauthn/webauthnRegisterVerify.d.ts.map +1 -1
- package/dist/esm/api/routes/manager/auth/webauthn/webauthnRegisterVerify.js +32 -3
- package/dist/esm/api/routes/manager/auth/webauthn/webauthnRegisterVerify.js.map +1 -1
- package/dist/esm/api/routes/manager/comments.d.ts +9 -1
- package/dist/esm/api/routes/manager/comments.d.ts.map +1 -1
- package/dist/esm/api/routes/manager/comments.js +118 -8
- package/dist/esm/api/routes/manager/comments.js.map +1 -1
- package/dist/esm/api/routes/manager/contentType.d.ts +10 -2
- package/dist/esm/api/routes/manager/contentType.d.ts.map +1 -1
- package/dist/esm/api/routes/manager/contentTypes.d.ts +10 -2
- package/dist/esm/api/routes/manager/contentTypes.d.ts.map +1 -1
- package/dist/esm/api/routes/manager/contentVersions.d.ts +15 -0
- package/dist/esm/api/routes/manager/contentVersions.d.ts.map +1 -0
- package/dist/esm/api/routes/manager/contentVersions.js +218 -0
- package/dist/esm/api/routes/manager/contentVersions.js.map +1 -0
- package/dist/esm/api/routes/manager/create.d.ts +1 -1
- package/dist/esm/api/routes/manager/create.d.ts.map +1 -1
- package/dist/esm/api/routes/manager/create.js +3 -78
- package/dist/esm/api/routes/manager/create.js.map +1 -1
- package/dist/esm/api/routes/manager/delete.d.ts.map +1 -1
- package/dist/esm/api/routes/manager/delete.js +72 -8
- package/dist/esm/api/routes/manager/delete.js.map +1 -1
- package/dist/esm/api/routes/manager/duplicate.d.ts +1 -1
- package/dist/esm/api/routes/manager/duplicate.js +2 -2
- package/dist/esm/api/routes/manager/duplicate.js.map +1 -1
- package/dist/esm/api/routes/manager/get.d.ts.map +1 -1
- package/dist/esm/api/routes/manager/get.js +3 -4
- package/dist/esm/api/routes/manager/get.js.map +1 -1
- package/dist/esm/api/routes/manager/languages.d.ts +1 -1
- package/dist/esm/api/routes/manager/list.d.ts +3 -0
- package/dist/esm/api/routes/manager/list.d.ts.map +1 -1
- package/dist/esm/api/routes/manager/list.js +95 -6
- package/dist/esm/api/routes/manager/list.js.map +1 -1
- package/dist/esm/api/routes/manager/localeVariants.d.ts +210 -1
- package/dist/esm/api/routes/manager/localeVariants.d.ts.map +1 -1
- package/dist/esm/api/routes/manager/localeVariants.js +218 -11
- package/dist/esm/api/routes/manager/localeVariants.js.map +1 -1
- package/dist/esm/api/routes/manager/logs/cleanup.d.ts +7 -0
- package/dist/esm/api/routes/manager/logs/cleanup.d.ts.map +1 -0
- package/dist/esm/api/routes/manager/logs/cleanup.js +16 -0
- package/dist/esm/api/routes/manager/logs/cleanup.js.map +1 -0
- package/dist/esm/api/routes/manager/logs/list.d.ts +7 -0
- package/dist/esm/api/routes/manager/logs/list.d.ts.map +1 -0
- package/dist/esm/api/routes/manager/logs/list.js +18 -0
- package/dist/esm/api/routes/manager/logs/list.js.map +1 -0
- package/dist/esm/api/routes/manager/notifications.d.ts +11 -0
- package/dist/esm/api/routes/manager/notifications.d.ts.map +1 -0
- package/dist/esm/api/routes/manager/notifications.js +135 -0
- package/dist/esm/api/routes/manager/notifications.js.map +1 -0
- package/dist/esm/api/routes/manager/preview/create.d.ts.map +1 -1
- package/dist/esm/api/routes/manager/preview/create.js +21 -0
- package/dist/esm/api/routes/manager/preview/create.js.map +1 -1
- package/dist/esm/api/routes/manager/previewSlugRedirects.d.ts +7 -0
- package/dist/esm/api/routes/manager/previewSlugRedirects.d.ts.map +1 -0
- package/dist/esm/api/routes/manager/previewSlugRedirects.js +21 -0
- package/dist/esm/api/routes/manager/previewSlugRedirects.js.map +1 -0
- package/dist/esm/api/routes/manager/reviewPolicies.d.ts +14 -0
- package/dist/esm/api/routes/manager/reviewPolicies.d.ts.map +1 -0
- package/dist/esm/api/routes/manager/reviewPolicies.js +103 -0
- package/dist/esm/api/routes/manager/reviewPolicies.js.map +1 -0
- package/dist/esm/api/routes/manager/reviews.d.ts +23 -0
- package/dist/esm/api/routes/manager/reviews.d.ts.map +1 -0
- package/dist/esm/api/routes/manager/reviews.js +264 -0
- package/dist/esm/api/routes/manager/reviews.js.map +1 -0
- package/dist/esm/api/routes/manager/routeLayout.d.ts +11 -0
- package/dist/esm/api/routes/manager/routeLayout.d.ts.map +1 -0
- package/dist/esm/api/routes/manager/routeLayout.js +133 -0
- package/dist/esm/api/routes/manager/routeLayout.js.map +1 -0
- package/dist/esm/api/routes/manager/template.d.ts +13 -0
- package/dist/esm/api/routes/manager/template.d.ts.map +1 -0
- package/dist/esm/api/routes/manager/template.js +105 -0
- package/dist/esm/api/routes/manager/template.js.map +1 -0
- package/dist/esm/api/routes/manager/translateDocument.d.ts.map +1 -1
- package/dist/esm/api/routes/manager/translateDocument.js +17 -45
- package/dist/esm/api/routes/manager/translateDocument.js.map +1 -1
- package/dist/esm/api/routes/manager/trash.d.ts +19 -0
- package/dist/esm/api/routes/manager/trash.d.ts.map +1 -1
- package/dist/esm/api/routes/manager/trash.js +72 -40
- package/dist/esm/api/routes/manager/trash.js.map +1 -1
- package/dist/esm/api/routes/manager/uiLocales.d.ts +17 -0
- package/dist/esm/api/routes/manager/uiLocales.d.ts.map +1 -0
- package/dist/esm/api/routes/manager/uiLocales.js +25 -0
- package/dist/esm/api/routes/manager/uiLocales.js.map +1 -0
- package/dist/esm/api/routes/manager/update.d.ts +1 -1
- package/dist/esm/api/routes/manager/update.d.ts.map +1 -1
- package/dist/esm/api/routes/manager/update.js +89 -72
- package/dist/esm/api/routes/manager/update.js.map +1 -1
- package/dist/esm/api/routes/manager/versions/restore.d.ts.map +1 -1
- package/dist/esm/api/routes/manager/versions/restore.js +20 -0
- package/dist/esm/api/routes/manager/versions/restore.js.map +1 -1
- package/dist/esm/api/routes/web/page.d.ts +2 -2
- package/dist/esm/api/routes/web/page.d.ts.map +1 -1
- package/dist/esm/api/routes/web/page.js +80 -29
- package/dist/esm/api/routes/web/page.js.map +1 -1
- package/dist/esm/api/routes/web/previewPage.d.ts +3 -0
- package/dist/esm/api/routes/web/previewPage.d.ts.map +1 -1
- package/dist/esm/api/routes/web/previewPage.js +3 -1
- package/dist/esm/api/routes/web/previewPage.js.map +1 -1
- package/dist/esm/api/utils/authEvents.d.ts +7 -0
- package/dist/esm/api/utils/authEvents.d.ts.map +1 -0
- package/dist/esm/api/utils/authEvents.js +27 -0
- package/dist/esm/api/utils/authEvents.js.map +1 -0
- package/dist/esm/api/utils/authRateLimit.d.ts.map +1 -1
- package/dist/esm/api/utils/authRateLimit.js +4 -3
- package/dist/esm/api/utils/authRateLimit.js.map +1 -1
- package/dist/esm/api/utils/contentTemplate.d.ts +31 -0
- package/dist/esm/api/utils/contentTemplate.d.ts.map +1 -0
- package/dist/esm/api/utils/contentTemplate.js +194 -0
- package/dist/esm/api/utils/contentTemplate.js.map +1 -0
- package/dist/esm/api/utils/getUser.d.ts +2 -2
- package/dist/esm/api/utils/managerNotifications.d.ts +38 -0
- package/dist/esm/api/utils/managerNotifications.d.ts.map +1 -0
- package/dist/esm/api/utils/managerNotifications.js +23 -0
- package/dist/esm/api/utils/managerNotifications.js.map +1 -0
- package/dist/esm/api/utils/recoveryCodes.d.ts +9 -0
- package/dist/esm/api/utils/recoveryCodes.d.ts.map +1 -0
- package/dist/esm/api/utils/recoveryCodes.js +22 -0
- package/dist/esm/api/utils/recoveryCodes.js.map +1 -0
- package/dist/esm/api/utils/redirects/createSlugChangeRedirects.d.ts +14 -0
- package/dist/esm/api/utils/redirects/createSlugChangeRedirects.d.ts.map +1 -0
- package/dist/esm/api/utils/redirects/createSlugChangeRedirects.js +141 -0
- package/dist/esm/api/utils/redirects/createSlugChangeRedirects.js.map +1 -0
- package/dist/esm/api/utils/redirects/slugPathChanges.d.ts +9 -0
- package/dist/esm/api/utils/redirects/slugPathChanges.d.ts.map +1 -0
- package/dist/esm/api/utils/redirects/slugPathChanges.js +133 -0
- package/dist/esm/api/utils/redirects/slugPathChanges.js.map +1 -0
- package/dist/esm/api/utils/requireContentType.d.ts.map +1 -1
- package/dist/esm/api/utils/requireContentType.js +13 -0
- package/dist/esm/api/utils/requireContentType.js.map +1 -1
- package/dist/esm/api/utils/reviews.d.ts +143 -0
- package/dist/esm/api/utils/reviews.d.ts.map +1 -0
- package/dist/esm/api/utils/reviews.js +253 -0
- package/dist/esm/api/utils/reviews.js.map +1 -0
- package/dist/esm/api/utils/routes/routeMapHelpers.d.ts +2 -1
- package/dist/esm/api/utils/routes/routeMapHelpers.d.ts.map +1 -1
- package/dist/esm/api/utils/routes/routeMapHelpers.js +45 -22
- package/dist/esm/api/utils/routes/routeMapHelpers.js.map +1 -1
- package/dist/esm/api/utils/routes/updateRoutesMap.d.ts +2 -1
- package/dist/esm/api/utils/routes/updateRoutesMap.d.ts.map +1 -1
- package/dist/esm/api/utils/routes/updateRoutesMap.js +2 -1
- package/dist/esm/api/utils/routes/updateRoutesMap.js.map +1 -1
- package/dist/esm/api/utils/safeManagerQuery.d.ts.map +1 -1
- package/dist/esm/api/utils/safeManagerQuery.js +1 -0
- package/dist/esm/api/utils/safeManagerQuery.js.map +1 -1
- package/dist/esm/auth/accountRecovery.d.ts +18 -0
- package/dist/esm/auth/accountRecovery.d.ts.map +1 -0
- package/dist/esm/auth/accountRecovery.js +2 -0
- package/dist/esm/auth/accountRecovery.js.map +1 -0
- package/dist/esm/auth/completePrimaryAuthentication.d.ts +3 -0
- package/dist/esm/auth/completePrimaryAuthentication.d.ts.map +1 -0
- package/dist/esm/auth/completePrimaryAuthentication.js +46 -0
- package/dist/esm/auth/completePrimaryAuthentication.js.map +1 -0
- package/dist/esm/auth/loginAdapters.d.ts +57 -0
- package/dist/esm/auth/loginAdapters.d.ts.map +1 -0
- package/dist/esm/auth/loginAdapters.js +176 -0
- package/dist/esm/auth/loginAdapters.js.map +1 -0
- package/dist/esm/auth/passwordFail2ban.d.ts +20 -0
- package/dist/esm/auth/passwordFail2ban.d.ts.map +1 -0
- package/dist/esm/auth/passwordFail2ban.js +110 -0
- package/dist/esm/auth/passwordFail2ban.js.map +1 -0
- package/dist/esm/auth/passwordResetMailTemplate.d.ts +3 -0
- package/dist/esm/auth/passwordResetMailTemplate.d.ts.map +1 -0
- package/dist/esm/auth/passwordResetMailTemplate.js +87 -0
- package/dist/esm/auth/passwordResetMailTemplate.js.map +1 -0
- package/dist/esm/bootstrapState.d.ts +24 -2
- package/dist/esm/bootstrapState.d.ts.map +1 -1
- package/dist/esm/bootstrapState.js.map +1 -1
- package/dist/esm/client.d.ts +14 -8
- package/dist/esm/client.d.ts.map +1 -1
- package/dist/esm/client.js +5 -5
- package/dist/esm/client.js.map +1 -1
- package/dist/esm/contracts.d.ts +13 -0
- package/dist/esm/contracts.d.ts.map +1 -1
- package/dist/esm/contracts.js +13 -0
- package/dist/esm/contracts.js.map +1 -1
- package/dist/esm/eventLog/index.d.ts +12 -0
- package/dist/esm/eventLog/index.d.ts.map +1 -0
- package/dist/esm/eventLog/index.js +28 -0
- package/dist/esm/eventLog/index.js.map +1 -0
- package/dist/esm/eventLog/mongo.d.ts +5 -0
- package/dist/esm/eventLog/mongo.d.ts.map +1 -0
- package/dist/esm/eventLog/mongo.js +111 -0
- package/dist/esm/eventLog/mongo.js.map +1 -0
- package/dist/esm/eventLog/service.d.ts +19 -0
- package/dist/esm/eventLog/service.d.ts.map +1 -0
- package/dist/esm/eventLog/service.js +180 -0
- package/dist/esm/eventLog/service.js.map +1 -0
- package/dist/esm/eventLog/types.d.ts +73 -0
- package/dist/esm/eventLog/types.d.ts.map +1 -0
- package/dist/esm/eventLog/types.js +3 -0
- package/dist/esm/eventLog/types.js.map +1 -0
- package/dist/esm/index.d.ts +10 -5
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +61 -8
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal-content-types/Backup.d.ts.map +1 -1
- package/dist/esm/internal-content-types/ContentComment.d.ts +35 -5
- package/dist/esm/internal-content-types/ContentComment.d.ts.map +1 -1
- package/dist/esm/internal-content-types/ContentCommentReadState.d.ts +3495 -0
- package/dist/esm/internal-content-types/ContentCommentReadState.d.ts.map +1 -0
- package/dist/esm/internal-content-types/ContentCommentReadState.js +15 -0
- package/dist/esm/internal-content-types/ContentCommentReadState.js.map +1 -0
- package/dist/esm/internal-content-types/ContentReview.d.ts +10032 -0
- package/dist/esm/internal-content-types/ContentReview.d.ts.map +1 -0
- package/dist/esm/internal-content-types/ContentReview.js +28 -0
- package/dist/esm/internal-content-types/ContentReview.js.map +1 -0
- package/dist/esm/internal-content-types/ContentReviewDecision.d.ts +3177 -0
- package/dist/esm/internal-content-types/ContentReviewDecision.d.ts.map +1 -0
- package/dist/esm/internal-content-types/ContentReviewDecision.js +15 -0
- package/dist/esm/internal-content-types/ContentReviewDecision.js.map +1 -0
- package/dist/esm/internal-content-types/ContentReviewPolicy.d.ts +1209 -0
- package/dist/esm/internal-content-types/ContentReviewPolicy.d.ts.map +1 -0
- package/dist/esm/internal-content-types/ContentReviewPolicy.js +15 -0
- package/dist/esm/internal-content-types/ContentReviewPolicy.js.map +1 -0
- package/dist/esm/internal-content-types/{LinkedIteratorTemplate.d.ts → ContentTemplate.d.ts} +5 -5
- package/dist/esm/internal-content-types/ContentTemplate.d.ts.map +1 -0
- package/dist/esm/internal-content-types/{LinkedIteratorTemplate.js → ContentTemplate.js} +4 -4
- package/dist/esm/internal-content-types/ContentTemplate.js.map +1 -0
- package/dist/esm/internal-content-types/ContentVersion.d.ts.map +1 -1
- package/dist/esm/internal-content-types/LoginIpBlock.d.ts +434 -0
- package/dist/esm/internal-content-types/LoginIpBlock.d.ts.map +1 -0
- package/dist/esm/internal-content-types/LoginIpBlock.js +14 -0
- package/dist/esm/internal-content-types/LoginIpBlock.js.map +1 -0
- package/dist/esm/internal-content-types/ManagerFavorite.d.ts +28 -4
- package/dist/esm/internal-content-types/ManagerFavorite.d.ts.map +1 -1
- package/dist/esm/internal-content-types/ManagerNotification.d.ts +6606 -0
- package/dist/esm/internal-content-types/ManagerNotification.d.ts.map +1 -0
- package/dist/esm/internal-content-types/ManagerNotification.js +27 -0
- package/dist/esm/internal-content-types/ManagerNotification.js.map +1 -0
- package/dist/esm/internal-content-types/ManagerUser.d.ts +7 -1
- package/dist/esm/internal-content-types/ManagerUser.d.ts.map +1 -1
- package/dist/esm/internal-content-types/ManagerUserHooks.d.ts.map +1 -1
- package/dist/esm/internal-content-types/ManagerUserHooks.js +8 -1
- package/dist/esm/internal-content-types/ManagerUserHooks.js.map +1 -1
- package/dist/esm/internal-content-types/MfaChallenge.d.ts +28 -4
- package/dist/esm/internal-content-types/MfaChallenge.d.ts.map +1 -1
- package/dist/esm/internal-content-types/Migration.d.ts.map +1 -1
- package/dist/esm/internal-content-types/PasswordResetToken.d.ts +3177 -0
- package/dist/esm/internal-content-types/PasswordResetToken.d.ts.map +1 -0
- package/dist/esm/internal-content-types/PasswordResetToken.js +44 -0
- package/dist/esm/internal-content-types/PasswordResetToken.js.map +1 -0
- package/dist/esm/internal-content-types/PreviewSnapshot.d.ts +1 -0
- package/dist/esm/internal-content-types/PreviewSnapshot.d.ts.map +1 -1
- package/dist/esm/internal-content-types/PreviewSnapshot.js +1 -0
- package/dist/esm/internal-content-types/PreviewSnapshot.js.map +1 -1
- package/dist/esm/internal-content-types/RobotsRule.d.ts.map +1 -1
- package/dist/esm/internal-content-types/Route.d.ts.map +1 -1
- package/dist/esm/internal-content-types/RouteLayoutModule.d.ts.map +1 -1
- package/dist/esm/internal-content-types/SchemaState.d.ts.map +1 -1
- package/dist/esm/internal-content-types/Session.d.ts +28 -4
- package/dist/esm/internal-content-types/Session.d.ts.map +1 -1
- package/dist/esm/internal-content-types/TemplateContent.d.ts +5 -0
- package/dist/esm/internal-content-types/TemplateContent.d.ts.map +1 -0
- package/dist/esm/internal-content-types/TemplateContent.js +12 -0
- package/dist/esm/internal-content-types/TemplateContent.js.map +1 -0
- package/dist/esm/internal-content-types/UserMfa.d.ts +30 -4
- package/dist/esm/internal-content-types/UserMfa.d.ts.map +1 -1
- package/dist/esm/internal-content-types/UserMfa.js +35 -1
- package/dist/esm/internal-content-types/UserMfa.js.map +1 -1
- package/dist/esm/internal-content-types/WebAuthnCredential.d.ts +28 -4
- package/dist/esm/internal-content-types/WebAuthnCredential.d.ts.map +1 -1
- package/dist/esm/internal-content-types/WebAuthnRegChallenge.d.ts +28 -4
- package/dist/esm/internal-content-types/WebAuthnRegChallenge.d.ts.map +1 -1
- package/dist/esm/internal-content-types/index.d.ts +9 -1
- package/dist/esm/internal-content-types/index.d.ts.map +1 -1
- package/dist/esm/internal-content-types/index.js +9 -1
- package/dist/esm/internal-content-types/index.js.map +1 -1
- package/dist/esm/internal-content-types/syncAdminRole.d.ts +1 -1
- package/dist/esm/lib/ContentType.d.ts +15 -28
- package/dist/esm/lib/ContentType.d.ts.map +1 -1
- package/dist/esm/lib/ContentType.js +18 -34
- package/dist/esm/lib/ContentType.js.map +1 -1
- package/dist/esm/lib/Permissions.d.ts +3 -0
- package/dist/esm/lib/Permissions.d.ts.map +1 -1
- package/dist/esm/lib/Permissions.js +13 -1
- package/dist/esm/lib/Permissions.js.map +1 -1
- package/dist/esm/lib/Registry.d.ts +9 -6
- package/dist/esm/lib/Registry.d.ts.map +1 -1
- package/dist/esm/lib/Registry.js +33 -13
- package/dist/esm/lib/Registry.js.map +1 -1
- package/dist/esm/lib/errors/AppError.d.ts.map +1 -1
- package/dist/esm/lib/errors/AppError.js +7 -1
- package/dist/esm/lib/errors/AppError.js.map +1 -1
- package/dist/esm/lib/fields/Fields.d.ts +15 -0
- package/dist/esm/lib/fields/Fields.d.ts.map +1 -1
- package/dist/esm/lib/fields/Fields.js +1 -0
- package/dist/esm/lib/fields/Fields.js.map +1 -1
- package/dist/esm/lib/fields/Link.d.ts +2 -2
- package/dist/esm/lib/fields/Link.d.ts.map +1 -1
- package/dist/esm/lib/fields/Link.js +2 -1
- package/dist/esm/lib/fields/Link.js.map +1 -1
- package/dist/esm/lib/localeVariants.d.ts +3 -0
- package/dist/esm/lib/localeVariants.d.ts.map +1 -1
- package/dist/esm/lib/localeVariants.js +7 -0
- package/dist/esm/lib/localeVariants.js.map +1 -1
- package/dist/esm/lib/systemFields.d.ts +1 -1
- package/dist/esm/lib/systemFields.d.ts.map +1 -1
- package/dist/esm/lib/systemFields.js +1 -1
- package/dist/esm/lib/systemFields.js.map +1 -1
- package/dist/esm/lib/types/index.d.ts +1 -0
- package/dist/esm/lib/types/index.d.ts.map +1 -1
- package/dist/esm/literals/index.d.ts +0 -1
- package/dist/esm/literals/index.d.ts.map +1 -1
- package/dist/esm/literals/index.js +0 -1
- package/dist/esm/literals/index.js.map +1 -1
- package/dist/esm/mail/adapters.d.ts +34 -0
- package/dist/esm/mail/adapters.d.ts.map +1 -0
- package/dist/esm/mail/adapters.js +2 -0
- package/dist/esm/mail/adapters.js.map +1 -0
- package/dist/esm/mail/index.d.ts +11 -0
- package/dist/esm/mail/index.d.ts.map +1 -0
- package/dist/esm/mail/index.js +31 -0
- package/dist/esm/mail/index.js.map +1 -0
- package/dist/esm/mail/mailService.d.ts +58 -0
- package/dist/esm/mail/mailService.d.ts.map +1 -0
- package/dist/esm/mail/mailService.js +202 -0
- package/dist/esm/mail/mailService.js.map +1 -0
- package/dist/esm/mail/templates.d.ts +26 -0
- package/dist/esm/mail/templates.d.ts.map +1 -0
- package/dist/esm/mail/templates.js +27 -0
- package/dist/esm/mail/templates.js.map +1 -0
- package/dist/esm/manager.d.ts +166 -1
- package/dist/esm/manager.d.ts.map +1 -1
- package/dist/esm/orm/createIndexes.d.ts.map +1 -1
- package/dist/esm/orm/createIndexes.js +38 -1
- package/dist/esm/orm/createIndexes.js.map +1 -1
- package/dist/esm/orm/dbService.js +3 -3
- package/dist/esm/orm/dbService.js.map +1 -1
- package/dist/esm/orm/operations/update.d.ts.map +1 -1
- package/dist/esm/orm/operations/update.js +28 -26
- package/dist/esm/orm/operations/update.js.map +1 -1
- package/dist/esm/plugins.d.ts +4 -0
- package/dist/esm/plugins.d.ts.map +1 -1
- package/dist/esm/plugins.js.map +1 -1
- package/dist/esm/schemas/manager/auth/externalLogin.d.ts +42 -0
- package/dist/esm/schemas/manager/auth/externalLogin.d.ts.map +1 -0
- package/dist/esm/schemas/manager/auth/externalLogin.js +21 -0
- package/dist/esm/schemas/manager/auth/externalLogin.js.map +1 -0
- package/dist/esm/schemas/manager/auth/mfa/recoveryCode.d.ts +22 -0
- package/dist/esm/schemas/manager/auth/mfa/recoveryCode.d.ts.map +1 -0
- package/dist/esm/schemas/manager/auth/mfa/recoveryCode.js +21 -0
- package/dist/esm/schemas/manager/auth/mfa/recoveryCode.js.map +1 -0
- package/dist/esm/schemas/manager/auth/passwordIpBlocks.d.ts +36 -0
- package/dist/esm/schemas/manager/auth/passwordIpBlocks.d.ts.map +1 -0
- package/dist/esm/schemas/manager/auth/passwordIpBlocks.js +26 -0
- package/dist/esm/schemas/manager/auth/passwordIpBlocks.js.map +1 -0
- package/dist/esm/schemas/manager/auth/passwordRecovery.d.ts +17 -0
- package/dist/esm/schemas/manager/auth/passwordRecovery.d.ts.map +1 -0
- package/dist/esm/schemas/manager/auth/passwordRecovery.js +15 -0
- package/dist/esm/schemas/manager/auth/passwordRecovery.js.map +1 -0
- package/dist/esm/schemas/manager/auth/totp/confirmTotp.d.ts +4 -5
- package/dist/esm/schemas/manager/auth/totp/confirmTotp.d.ts.map +1 -1
- package/dist/esm/schemas/manager/auth/totp/confirmTotp.js +4 -7
- package/dist/esm/schemas/manager/auth/totp/confirmTotp.js.map +1 -1
- package/dist/esm/schemas/manager/comments.d.ts +15 -0
- package/dist/esm/schemas/manager/comments.d.ts.map +1 -1
- package/dist/esm/schemas/manager/comments.js +10 -0
- package/dist/esm/schemas/manager/comments.js.map +1 -1
- package/dist/esm/schemas/manager/contentVersions.d.ts +442 -0
- package/dist/esm/schemas/manager/contentVersions.d.ts.map +1 -0
- package/dist/esm/schemas/manager/contentVersions.js +45 -0
- package/dist/esm/schemas/manager/contentVersions.js.map +1 -0
- package/dist/esm/schemas/manager/create.d.ts +0 -11
- package/dist/esm/schemas/manager/create.d.ts.map +1 -1
- package/dist/esm/schemas/manager/create.js +0 -2
- package/dist/esm/schemas/manager/create.js.map +1 -1
- package/dist/esm/schemas/manager/eventLogs.d.ts +127 -0
- package/dist/esm/schemas/manager/eventLogs.d.ts.map +1 -0
- package/dist/esm/schemas/manager/eventLogs.js +48 -0
- package/dist/esm/schemas/manager/eventLogs.js.map +1 -0
- package/dist/esm/schemas/manager/list.d.ts +1 -0
- package/dist/esm/schemas/manager/list.d.ts.map +1 -1
- package/dist/esm/schemas/manager/list.js +1 -0
- package/dist/esm/schemas/manager/list.js.map +1 -1
- package/dist/esm/schemas/manager/localeVariants.d.ts +51 -0
- package/dist/esm/schemas/manager/localeVariants.d.ts.map +1 -1
- package/dist/esm/schemas/manager/localeVariants.js +9 -0
- package/dist/esm/schemas/manager/localeVariants.js.map +1 -1
- package/dist/esm/schemas/manager/notifications.d.ts +79 -0
- package/dist/esm/schemas/manager/notifications.d.ts.map +1 -0
- package/dist/esm/schemas/manager/notifications.js +45 -0
- package/dist/esm/schemas/manager/notifications.js.map +1 -0
- package/dist/esm/schemas/manager/preview.d.ts +1 -0
- package/dist/esm/schemas/manager/preview.d.ts.map +1 -1
- package/dist/esm/schemas/manager/preview.js +1 -0
- package/dist/esm/schemas/manager/preview.js.map +1 -1
- package/dist/esm/schemas/manager/reviewPolicies.d.ts +43 -0
- package/dist/esm/schemas/manager/reviewPolicies.d.ts.map +1 -0
- package/dist/esm/schemas/manager/reviewPolicies.js +27 -0
- package/dist/esm/schemas/manager/reviewPolicies.js.map +1 -0
- package/dist/esm/schemas/manager/reviews.d.ts +442 -0
- package/dist/esm/schemas/manager/reviews.d.ts.map +1 -0
- package/dist/esm/schemas/manager/reviews.js +87 -0
- package/dist/esm/schemas/manager/reviews.js.map +1 -0
- package/dist/esm/schemas/manager/routeLayout.d.ts +75 -0
- package/dist/esm/schemas/manager/routeLayout.d.ts.map +1 -0
- package/dist/esm/schemas/manager/routeLayout.js +44 -0
- package/dist/esm/schemas/manager/routeLayout.js.map +1 -0
- package/dist/esm/schemas/manager/slugRedirects.d.ts +26 -0
- package/dist/esm/schemas/manager/slugRedirects.d.ts.map +1 -0
- package/dist/esm/schemas/manager/slugRedirects.js +18 -0
- package/dist/esm/schemas/manager/slugRedirects.js.map +1 -0
- package/dist/esm/schemas/manager/template.d.ts +21 -0
- package/dist/esm/schemas/manager/template.d.ts.map +1 -0
- package/dist/esm/schemas/manager/template.js +18 -0
- package/dist/esm/schemas/manager/template.js.map +1 -0
- package/dist/esm/schemas/manager/uiLocales.d.ts +33 -0
- package/dist/esm/schemas/manager/uiLocales.d.ts.map +1 -0
- package/dist/esm/schemas/manager/uiLocales.js +25 -0
- package/dist/esm/schemas/manager/uiLocales.js.map +1 -0
- package/dist/esm/schemas/manager/update.d.ts +1 -11
- package/dist/esm/schemas/manager/update.d.ts.map +1 -1
- package/dist/esm/schemas/manager/update.js +1 -2
- package/dist/esm/schemas/manager/update.js.map +1 -1
- package/dist/esm/schemas/web/page.d.ts +13 -0
- package/dist/esm/schemas/web/page.d.ts.map +1 -1
- package/dist/esm/schemas/web/page.js +1 -0
- package/dist/esm/schemas/web/page.js.map +1 -1
- package/dist/esm/schemas/web/previewPage.d.ts +9 -0
- package/dist/esm/schemas/web/previewPage.d.ts.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +11 -4
- package/dist/cjs/api/routes/manager/linkedIterator.js +0 -69
- package/dist/cjs/api/routes/manager/linkedIterator.js.map +0 -1
- package/dist/cjs/api/utils/linkedIterator.js +0 -167
- package/dist/cjs/api/utils/linkedIterator.js.map +0 -1
- package/dist/cjs/internal-content-types/LinkedIteratorTemplate.js.map +0 -1
- package/dist/cjs/literals/manager.js +0 -43
- package/dist/cjs/literals/manager.js.map +0 -1
- package/dist/cjs/literals/managerLiterals.js +0 -15
- package/dist/cjs/literals/managerLiterals.js.map +0 -1
- package/dist/cjs/schemas/manager/linkedIterator.js +0 -27
- package/dist/cjs/schemas/manager/linkedIterator.js.map +0 -1
- package/dist/esm/api/routes/manager/linkedIterator.d.ts +0 -11
- package/dist/esm/api/routes/manager/linkedIterator.d.ts.map +0 -1
- package/dist/esm/api/routes/manager/linkedIterator.js +0 -62
- package/dist/esm/api/routes/manager/linkedIterator.js.map +0 -1
- package/dist/esm/api/utils/linkedIterator.d.ts +0 -41
- package/dist/esm/api/utils/linkedIterator.d.ts.map +0 -1
- package/dist/esm/api/utils/linkedIterator.js +0 -157
- package/dist/esm/api/utils/linkedIterator.js.map +0 -1
- package/dist/esm/internal-content-types/LinkedIteratorTemplate.d.ts.map +0 -1
- package/dist/esm/internal-content-types/LinkedIteratorTemplate.js.map +0 -1
- package/dist/esm/literals/manager.d.ts +0 -22
- package/dist/esm/literals/manager.d.ts.map +0 -1
- package/dist/esm/literals/manager.js +0 -38
- package/dist/esm/literals/manager.js.map +0 -1
- package/dist/esm/literals/managerLiterals.d.ts +0 -12
- package/dist/esm/literals/managerLiterals.d.ts.map +0 -1
- package/dist/esm/literals/managerLiterals.js +0 -12
- package/dist/esm/literals/managerLiterals.js.map +0 -1
- package/dist/esm/schemas/manager/linkedIterator.d.ts +0 -41
- package/dist/esm/schemas/manager/linkedIterator.d.ts.map +0 -1
- package/dist/esm/schemas/manager/linkedIterator.js +0 -21
- package/dist/esm/schemas/manager/linkedIterator.js.map +0 -1
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { createHash, randomBytes } from 'crypto';
|
|
2
|
+
import { ManagerUser, PasswordResetToken, Session, } from '../../../../internal-content-types/index.js';
|
|
3
|
+
import { getRakunBootstrapOptions } from '../../../../bootstrapState.js';
|
|
4
|
+
import { Logger } from '../../../../lib/Logger.js';
|
|
5
|
+
import { throwAppError } from '../../../../lib/errors/index.js';
|
|
6
|
+
import { getMailService, hasMailService } from '../../../../mail/index.js';
|
|
7
|
+
import { getMongoService } from '../../../../orm/index.js';
|
|
8
|
+
import { assertAuthRateLimit, getRequestRateLimitIdentifier, } from '../../../utils/authRateLimit.js';
|
|
9
|
+
import { PASSWORD_RESET_DEFAULT_EXPIRES_IN_MS } from '../../../../auth/accountRecovery.js';
|
|
10
|
+
import { passwordResetMailTemplate } from '../../../../auth/passwordResetMailTemplate.js';
|
|
11
|
+
import { recordAuthEvent } from '../../../utils/authEvents.js';
|
|
12
|
+
const hashToken = (token) => createHash('sha256').update(token).digest('hex');
|
|
13
|
+
const requirePasswordResetConfig = () => {
|
|
14
|
+
const config = getRakunBootstrapOptions()?.accountRecovery?.passwordReset;
|
|
15
|
+
if (!config || !hasMailService()) {
|
|
16
|
+
throwAppError('FEATURE_UNSUPPORTED', {
|
|
17
|
+
feature: 'accountRecovery',
|
|
18
|
+
message: 'Account recovery requires mail and accountRecovery.passwordReset configuration',
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
return config;
|
|
22
|
+
};
|
|
23
|
+
export const requestPasswordResetHandler = async ({ input, ctx, }) => {
|
|
24
|
+
const config = requirePasswordResetConfig();
|
|
25
|
+
const db = await getMongoService();
|
|
26
|
+
const email = input.email.trim().toLowerCase();
|
|
27
|
+
assertAuthRateLimit({
|
|
28
|
+
key: `password-reset:request:${getRequestRateLimitIdentifier(ctx)}:${email}`,
|
|
29
|
+
limit: 5,
|
|
30
|
+
windowMs: 60 * 60 * 1000,
|
|
31
|
+
});
|
|
32
|
+
const user = await db.find(ManagerUser, { email });
|
|
33
|
+
if (!user)
|
|
34
|
+
return { ok: true };
|
|
35
|
+
await db.updateMany(PasswordResetToken, {
|
|
36
|
+
'user._id': user._id,
|
|
37
|
+
consumedAt: null,
|
|
38
|
+
}, { consumedAt: new Date() }, { reason: 'password reset token superseded' });
|
|
39
|
+
const token = randomBytes(32).toString('base64url');
|
|
40
|
+
const expiresAt = new Date(Date.now() +
|
|
41
|
+
(config.expiresInMs ?? PASSWORD_RESET_DEFAULT_EXPIRES_IN_MS));
|
|
42
|
+
await db.create(PasswordResetToken, {
|
|
43
|
+
tokenHash: hashToken(token),
|
|
44
|
+
user: {
|
|
45
|
+
_id: user._id,
|
|
46
|
+
contentType: ManagerUser.name,
|
|
47
|
+
type: 'existing',
|
|
48
|
+
},
|
|
49
|
+
expiresAt,
|
|
50
|
+
_type: 'PasswordResetToken',
|
|
51
|
+
}, { reason: 'password reset requested' });
|
|
52
|
+
await recordAuthEvent({
|
|
53
|
+
type: 'auth.password-reset.requested',
|
|
54
|
+
outcome: 'success',
|
|
55
|
+
ctx,
|
|
56
|
+
actor: { type: 'anonymous' },
|
|
57
|
+
resource: { type: 'ManagerUser', id: String(user._id) },
|
|
58
|
+
tags: ['password-reset'],
|
|
59
|
+
data: { expiresAt: expiresAt.toISOString() },
|
|
60
|
+
});
|
|
61
|
+
try {
|
|
62
|
+
const props = {
|
|
63
|
+
expiresAt,
|
|
64
|
+
resetUrl: config.createUrl(token),
|
|
65
|
+
user: {
|
|
66
|
+
email: user.email,
|
|
67
|
+
...(user.name ? { name: user.name } : {}),
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
const template = config.template ?? passwordResetMailTemplate;
|
|
71
|
+
const subject = typeof template.subject === 'function'
|
|
72
|
+
? await template.subject(props)
|
|
73
|
+
: template.subject;
|
|
74
|
+
const content = await template.render(props);
|
|
75
|
+
await getMailService().send({
|
|
76
|
+
to: user.email,
|
|
77
|
+
subject,
|
|
78
|
+
...content,
|
|
79
|
+
event: {
|
|
80
|
+
template: 'password-reset',
|
|
81
|
+
source: '@rakun-kit/core/account-recovery',
|
|
82
|
+
tags: ['auth', 'account-recovery'],
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
Logger?.error?.('Password reset mail could not be sent', {
|
|
88
|
+
errorName: error instanceof Error ? error.name : 'UnknownError',
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
return { ok: true };
|
|
92
|
+
};
|
|
93
|
+
export const resetPasswordHandler = async ({ input, ctx, }) => {
|
|
94
|
+
requirePasswordResetConfig();
|
|
95
|
+
const db = await getMongoService();
|
|
96
|
+
const tokenHash = hashToken(input.token);
|
|
97
|
+
assertAuthRateLimit({
|
|
98
|
+
key: `password-reset:consume:${getRequestRateLimitIdentifier(ctx)}:${tokenHash}`,
|
|
99
|
+
limit: 8,
|
|
100
|
+
windowMs: 15 * 60 * 1000,
|
|
101
|
+
});
|
|
102
|
+
const record = await db.find(PasswordResetToken, { tokenHash });
|
|
103
|
+
if (!record ||
|
|
104
|
+
record.consumedAt ||
|
|
105
|
+
new Date(record.expiresAt).getTime() <= Date.now()) {
|
|
106
|
+
throwAppError('CONFLICT', {
|
|
107
|
+
key: 'INVALID_PASSWORD_RESET_TOKEN',
|
|
108
|
+
message: 'Password reset token is invalid or expired',
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
const claimed = await db.updateMany(PasswordResetToken, {
|
|
112
|
+
tokenHash,
|
|
113
|
+
consumedAt: null,
|
|
114
|
+
}, { consumedAt: new Date() }, { reason: 'password reset token consumed' });
|
|
115
|
+
if (claimed.updatedCount !== 1) {
|
|
116
|
+
throwAppError('CONFLICT', {
|
|
117
|
+
key: 'INVALID_PASSWORD_RESET_TOKEN',
|
|
118
|
+
message: 'Password reset token is invalid or expired',
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
const userId = record.user._id;
|
|
122
|
+
await db.update(ManagerUser, userId, { password: input.password }, { reason: 'password reset' });
|
|
123
|
+
await db.delete(Session, { 'user._id': userId }, { reason: 'password reset invalidated sessions' });
|
|
124
|
+
await db.updateMany(PasswordResetToken, {
|
|
125
|
+
'user._id': userId,
|
|
126
|
+
consumedAt: null,
|
|
127
|
+
}, { consumedAt: new Date() }, { reason: 'password reset completed' });
|
|
128
|
+
await recordAuthEvent({
|
|
129
|
+
type: 'auth.password-reset.completed',
|
|
130
|
+
outcome: 'success',
|
|
131
|
+
ctx,
|
|
132
|
+
actor: { type: 'anonymous' },
|
|
133
|
+
resource: { type: 'ManagerUser', id: String(userId) },
|
|
134
|
+
tags: ['password-reset'],
|
|
135
|
+
data: {
|
|
136
|
+
sessionsInvalidated: true,
|
|
137
|
+
mfaPreserved: true,
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
return { ok: true };
|
|
141
|
+
};
|
|
142
|
+
//# sourceMappingURL=passwordRecovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"passwordRecovery.js","sourceRoot":"","sources":["../../../../../../src/api/routes/manager/auth/passwordRecovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confirmTotp.d.ts","sourceRoot":"","sources":["../../../../../../../src/api/routes/manager/auth/totp/confirmTotp.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sDAAsD,CAAC;
|
|
1
|
+
{"version":3,"file":"confirmTotp.d.ts","sourceRoot":"","sources":["../../../../../../../src/api/routes/manager/auth/totp/confirmTotp.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sDAAsD,CAAC;AAKxF,eAAO,MAAM,kBAAkB,GAAU,iBAGtC;IACD,KAAK,EAAE,gBAAgB,CAAC;IACxB,GAAG,EAAE,mBAAmB,CAAC;CAC1B;;;EAsDA,CAAC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { UserMfa, ManagerUser } from "../../../../../internal-content-types/index.js";
|
|
2
2
|
import { getMongoService } from "../../../../../orm/index.js";
|
|
3
3
|
import * as OTPAuth from "otpauth";
|
|
4
|
+
import { generateRecoveryCodes } from '../../../../utils/recoveryCodes.js';
|
|
5
|
+
import { recordAuthEvent } from '../../../../utils/authEvents.js';
|
|
4
6
|
export const confirmTotpHandler = async ({ input, ctx, }) => {
|
|
5
7
|
const db = await getMongoService();
|
|
6
8
|
const user = ctx.getUser();
|
|
@@ -21,16 +23,31 @@ export const confirmTotpHandler = async ({ input, ctx, }) => {
|
|
|
21
23
|
if (delta === null) {
|
|
22
24
|
throw new Error("INVALID_TOTP_CODE");
|
|
23
25
|
}
|
|
26
|
+
const recovery = generateRecoveryCodes();
|
|
24
27
|
await db.update(UserMfa, mfa._id, {
|
|
25
28
|
enabled: true,
|
|
26
29
|
preferredMethod: "totp",
|
|
27
30
|
totpSecret: mfa.totpSecretPending,
|
|
28
31
|
totpSecretPending: null,
|
|
29
32
|
totpVerifiedAt: new Date(),
|
|
30
|
-
|
|
33
|
+
recoveryCodeHashes: recovery.hashes,
|
|
34
|
+
recoveryCodesGeneratedAt: new Date(),
|
|
35
|
+
}, { reason: 'mfa totp enabled' });
|
|
31
36
|
await db.update(ManagerUser, user._id, {
|
|
32
37
|
twoFactorEnabled: true,
|
|
38
|
+
}, { reason: 'mfa-state-sync' });
|
|
39
|
+
await recordAuthEvent({
|
|
40
|
+
type: 'auth.mfa.enabled',
|
|
41
|
+
outcome: 'success',
|
|
42
|
+
ctx,
|
|
43
|
+
actor: { type: 'manager-user', id: String(user._id) },
|
|
44
|
+
resource: { type: 'ManagerUser', id: String(user._id) },
|
|
45
|
+
tags: ['mfa', 'totp'],
|
|
46
|
+
data: {
|
|
47
|
+
method: 'totp',
|
|
48
|
+
recoveryCodeCount: recovery.codes.length,
|
|
49
|
+
},
|
|
33
50
|
});
|
|
34
|
-
return { ok: true };
|
|
51
|
+
return { ok: true, recoveryCodes: recovery.codes };
|
|
35
52
|
};
|
|
36
53
|
//# sourceMappingURL=confirmTotp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confirmTotp.js","sourceRoot":"","sources":["../../../../../../../src/api/routes/manager/auth/totp/confirmTotp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"confirmTotp.js","sourceRoot":"","sources":["../../../../../../../src/api/routes/manager/auth/totp/confirmTotp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAE9D,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,EACvC,KAAK,EACL,GAAG,GAIJ,EAAE,EAAE;IACH,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;IAC3B,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAEvB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7D,IAAI,CAAC,GAAG,EAAE,iBAAiB,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;QAC5B,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,SAAS,EAAE,MAAM;QACjB,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,iBAAiB,CAAC;KACzD,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IACxD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAA;IAExC,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE;QAChC,OAAO,EAAE,IAAI;QACb,eAAe,EAAE,MAAM;QACvB,UAAU,EAAE,GAAG,CAAC,iBAAiB;QACjC,iBAAiB,EAAE,IAAI;QACvB,cAAc,EAAE,IAAI,IAAI,EAAE;QAC1B,kBAAkB,EAAE,QAAQ,CAAC,MAAM;QACnC,wBAAwB,EAAE,IAAI,IAAI,EAAE;KACrC,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAEnC,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;QACrC,gBAAgB,EAAE,IAAI;KACvB,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAEjC,MAAM,eAAe,CAAC;QACpB,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,SAAS;QAClB,GAAG;QACH,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QACrD,QAAQ,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QACvD,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;QACrB,IAAI,EAAE;YACJ,MAAM,EAAE,MAAM;YACd,iBAAiB,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM;SACzC;KACF,CAAC,CAAA;IAEF,OAAO,EAAE,EAAE,EAAE,IAAa,EAAE,aAAa,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;AAC9D,CAAC,CAAC"}
|
|
@@ -23,7 +23,7 @@ export const enrollTotpHandler = async ({ ctx, }) => {
|
|
|
23
23
|
enabled: false,
|
|
24
24
|
preferredMethod: "totp",
|
|
25
25
|
_type: "UserMfa",
|
|
26
|
-
});
|
|
26
|
+
}, { reason: 'mfa enrollment started' });
|
|
27
27
|
const bytes = randomBytes(20);
|
|
28
28
|
const secret = new OTPAuth.Secret({
|
|
29
29
|
buffer: bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength),
|
|
@@ -44,7 +44,7 @@ export const enrollTotpHandler = async ({ ctx, }) => {
|
|
|
44
44
|
});
|
|
45
45
|
await db.update(UserMfa, mfa._id, {
|
|
46
46
|
totpSecretPending: secret.base32,
|
|
47
|
-
});
|
|
47
|
+
}, { reason: 'mfa totp enrollment refreshed' });
|
|
48
48
|
return {
|
|
49
49
|
otpauthURL,
|
|
50
50
|
qrDataURL,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enrollTotp.js","sourceRoot":"","sources":["../../../../../../../src/api/routes/manager/auth/totp/enrollTotp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,EACtC,GAAG,GAGJ,EAAE,EAAE;IACH,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;IAE3B,IAAI,GAAG,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAE3D,IAAI,GAAG,EAAE,OAAO,EAAE,CAAC;QACjB,aAAa,CAAC,UAAU,EAAE;YACxB,OAAO,EAAE,oCAAoC;SAC9C,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,GAAG;QACN,GAAG,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE;YAC7B,IAAI,EAAE;gBACJ,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,WAAW,EAAE,WAAW,CAAC,IAAI;gBAC7B,IAAI,EAAE,UAAU;aACjB;YACD,OAAO,EAAE,KAAK;YACd,eAAe,EAAE,MAAM;YACvB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"enrollTotp.js","sourceRoot":"","sources":["../../../../../../../src/api/routes/manager/auth/totp/enrollTotp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,EACtC,GAAG,GAGJ,EAAE,EAAE;IACH,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;IAE3B,IAAI,GAAG,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAE3D,IAAI,GAAG,EAAE,OAAO,EAAE,CAAC;QACjB,aAAa,CAAC,UAAU,EAAE;YACxB,OAAO,EAAE,oCAAoC;SAC9C,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,GAAG;QACN,GAAG,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE;YAC7B,IAAI,EAAE;gBACJ,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,WAAW,EAAE,WAAW,CAAC,IAAI;gBAC7B,IAAI,EAAE,UAAU;aACjB;YACD,OAAO,EAAE,KAAK;YACd,eAAe,EAAE,MAAM;YACvB,KAAK,EAAE,SAAS;SACjB,EAAE,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAC,CAAC;IAE3C,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;QAChC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CACxB,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CACpC;KACF,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;QAC5B,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,SAAS,EAAE,MAAM;QACjB,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,EAAE;QACV,MAAM;KACP,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IACnC,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE;QACnD,oBAAoB,EAAE,GAAG;QACzB,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,CAAC;KACT,CAAC,CAAC;IAEH,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE;QAChC,iBAAiB,EAAE,MAAM,CAAC,MAAM;KACjC,EAAE,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC,CAAC;IAEhD,OAAO;QACL,UAAU;QACV,SAAS;KACV,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -18,6 +18,7 @@ export declare const updateAccountHandler: ({ input, ctx, }: {
|
|
|
18
18
|
_trashed?: boolean | undefined;
|
|
19
19
|
_revision?: number | undefined;
|
|
20
20
|
_localeVariantGroupId?: string | undefined;
|
|
21
|
+
_localeVariantName?: string | undefined;
|
|
21
22
|
_localeVariantRole?: import("zod").infer<typeof import("../../../../index.js").LocaleVariantRole> | undefined;
|
|
22
23
|
trashedAt?: Date | undefined;
|
|
23
24
|
trashedBy?: string | undefined;
|
|
@@ -25,7 +26,6 @@ export declare const updateAccountHandler: ({ input, ctx, }: {
|
|
|
25
26
|
updatedAt?: Date | undefined;
|
|
26
27
|
createdBy?: string | undefined;
|
|
27
28
|
updatedBy?: string | undefined;
|
|
28
|
-
_iteratorUnlinked?: boolean | undefined;
|
|
29
29
|
};
|
|
30
30
|
twoFactorEnabled: boolean;
|
|
31
31
|
_type: "ManagerUser";
|
|
@@ -45,6 +45,7 @@ export declare const updateAccountHandler: ({ input, ctx, }: {
|
|
|
45
45
|
_trashed?: boolean | undefined;
|
|
46
46
|
_revision?: number | undefined;
|
|
47
47
|
_localeVariantGroupId?: string | undefined;
|
|
48
|
+
_localeVariantName?: string | undefined;
|
|
48
49
|
_localeVariantRole?: import("zod").infer<typeof import("../../../../index.js").LocaleVariantRole> | undefined;
|
|
49
50
|
trashedAt?: Date | undefined;
|
|
50
51
|
trashedBy?: string | undefined;
|
|
@@ -52,6 +53,5 @@ export declare const updateAccountHandler: ({ input, ctx, }: {
|
|
|
52
53
|
updatedAt?: Date | undefined;
|
|
53
54
|
createdBy?: string | undefined;
|
|
54
55
|
updatedBy?: string | undefined;
|
|
55
|
-
_iteratorUnlinked?: boolean | undefined;
|
|
56
56
|
}>;
|
|
57
57
|
//# sourceMappingURL=updateAccount.d.ts.map
|
|
@@ -18,6 +18,7 @@ export declare const updateTutorialPreferencesHandler: ({ input, ctx, }: {
|
|
|
18
18
|
_trashed?: boolean | undefined;
|
|
19
19
|
_revision?: number | undefined;
|
|
20
20
|
_localeVariantGroupId?: string | undefined;
|
|
21
|
+
_localeVariantName?: string | undefined;
|
|
21
22
|
_localeVariantRole?: import("zod").infer<typeof import("../../../../index.js").LocaleVariantRole> | undefined;
|
|
22
23
|
trashedAt?: Date | undefined;
|
|
23
24
|
trashedBy?: string | undefined;
|
|
@@ -25,7 +26,6 @@ export declare const updateTutorialPreferencesHandler: ({ input, ctx, }: {
|
|
|
25
26
|
updatedAt?: Date | undefined;
|
|
26
27
|
createdBy?: string | undefined;
|
|
27
28
|
updatedBy?: string | undefined;
|
|
28
|
-
_iteratorUnlinked?: boolean | undefined;
|
|
29
29
|
};
|
|
30
30
|
twoFactorEnabled: boolean;
|
|
31
31
|
_type: "ManagerUser";
|
|
@@ -45,6 +45,7 @@ export declare const updateTutorialPreferencesHandler: ({ input, ctx, }: {
|
|
|
45
45
|
_trashed?: boolean | undefined;
|
|
46
46
|
_revision?: number | undefined;
|
|
47
47
|
_localeVariantGroupId?: string | undefined;
|
|
48
|
+
_localeVariantName?: string | undefined;
|
|
48
49
|
_localeVariantRole?: import("zod").infer<typeof import("../../../../index.js").LocaleVariantRole> | undefined;
|
|
49
50
|
trashedAt?: Date | undefined;
|
|
50
51
|
trashedBy?: string | undefined;
|
|
@@ -52,7 +53,6 @@ export declare const updateTutorialPreferencesHandler: ({ input, ctx, }: {
|
|
|
52
53
|
updatedAt?: Date | undefined;
|
|
53
54
|
createdBy?: string | undefined;
|
|
54
55
|
updatedBy?: string | undefined;
|
|
55
|
-
_iteratorUnlinked?: boolean | undefined;
|
|
56
56
|
}>;
|
|
57
57
|
export declare const createTutorialPreferencesUpdate: (input: UpdateTutorialPreferencesInput, now?: Date) => {
|
|
58
58
|
tutorialsEnabled: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webauthnRegisterVerify.d.ts","sourceRoot":"","sources":["../../../../../../../src/api/routes/manager/auth/webauthn/webauthnRegisterVerify.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EAEzB,MAAM,wBAAwB,CAAC;AAWhC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"webauthnRegisterVerify.d.ts","sourceRoot":"","sources":["../../../../../../../src/api/routes/manager/auth/webauthn/webauthnRegisterVerify.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EAEzB,MAAM,wBAAwB,CAAC;AAWhC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAM1D,eAAO,MAAM,6BAA6B,GAAU,iBAGjD;IACD,GAAG,EAAE,mBAAmB,CAAC;IACzB,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,wBAAwB,CAAC;KACpC,CAAC;CACH;;;EA4GA,CAAC"}
|
|
@@ -3,6 +3,8 @@ import { ORIGIN, RP_ID, toB64 } from "./share.js";
|
|
|
3
3
|
import { WebAuthnRegChallenge, WebAuthnCredential, ManagerUser, UserMfa, } from "../../../../../internal-content-types/index.js";
|
|
4
4
|
import { throwAppError } from "../../../../../lib/errors/index.js";
|
|
5
5
|
import { getMongoService } from "../../../../../orm/index.js";
|
|
6
|
+
import { generateRecoveryCodes } from '../../../../utils/recoveryCodes.js';
|
|
7
|
+
import { recordAuthEvent } from '../../../../utils/authEvents.js';
|
|
6
8
|
const toBase64URL = (buf) => buf.toString("base64url");
|
|
7
9
|
export const webauthnRegisterVerifyHandler = async ({ ctx, input, }) => {
|
|
8
10
|
const db = await getMongoService();
|
|
@@ -53,24 +55,51 @@ export const webauthnRegisterVerifyHandler = async ({ ctx, input, }) => {
|
|
|
53
55
|
});
|
|
54
56
|
await db.update(WebAuthnRegChallenge, reg._id, { consumedAt: new Date() });
|
|
55
57
|
let mfa = await db.find(UserMfa, { "user._id": user._id });
|
|
58
|
+
const wasMfaEnabled = Boolean(mfa?.enabled);
|
|
59
|
+
const recovery = mfa?.recoveryCodeHashes?.length ? null : generateRecoveryCodes();
|
|
56
60
|
if (!mfa) {
|
|
57
61
|
mfa = await db.create(UserMfa, {
|
|
58
62
|
user: { _id: user._id, contentType: ManagerUser.name, type: "existing" },
|
|
59
63
|
enabled: true,
|
|
60
64
|
preferredMethod: "webauthn",
|
|
65
|
+
recoveryCodeHashes: recovery?.hashes ?? [],
|
|
66
|
+
recoveryCodesGeneratedAt: new Date(),
|
|
61
67
|
_type: "UserMfa",
|
|
62
|
-
});
|
|
68
|
+
}, { reason: 'mfa webauthn enabled' });
|
|
63
69
|
}
|
|
64
70
|
else {
|
|
65
71
|
await db.update(UserMfa, mfa._id, {
|
|
66
72
|
enabled: true,
|
|
67
73
|
preferredMethod: "webauthn",
|
|
68
74
|
totpSecretPending: null,
|
|
69
|
-
|
|
75
|
+
...(recovery
|
|
76
|
+
? {
|
|
77
|
+
recoveryCodeHashes: recovery.hashes,
|
|
78
|
+
recoveryCodesGeneratedAt: new Date(),
|
|
79
|
+
}
|
|
80
|
+
: {}),
|
|
81
|
+
}, { reason: 'mfa webauthn enabled' });
|
|
70
82
|
}
|
|
71
83
|
await db.update(ManagerUser, user._id, {
|
|
72
84
|
twoFactorEnabled: true,
|
|
85
|
+
}, { reason: 'mfa-state-sync' });
|
|
86
|
+
await recordAuthEvent({
|
|
87
|
+
type: wasMfaEnabled
|
|
88
|
+
? 'auth.mfa.method-registered'
|
|
89
|
+
: 'auth.mfa.enabled',
|
|
90
|
+
outcome: 'success',
|
|
91
|
+
ctx,
|
|
92
|
+
actor: { type: 'manager-user', id: String(user._id) },
|
|
93
|
+
resource: { type: 'ManagerUser', id: String(user._id) },
|
|
94
|
+
tags: ['mfa', 'webauthn'],
|
|
95
|
+
data: {
|
|
96
|
+
method: 'webauthn',
|
|
97
|
+
recoveryCodesGenerated: Boolean(recovery),
|
|
98
|
+
},
|
|
73
99
|
});
|
|
74
|
-
return {
|
|
100
|
+
return {
|
|
101
|
+
ok: true,
|
|
102
|
+
recoveryCodes: recovery?.codes ?? [],
|
|
103
|
+
};
|
|
75
104
|
};
|
|
76
105
|
//# sourceMappingURL=webauthnRegisterVerify.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webauthnRegisterVerify.js","sourceRoot":"","sources":["../../../../../../../src/api/routes/manager/auth/webauthn/webauthnRegisterVerify.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,WAAW,EACX,OAAO,GACR,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"webauthnRegisterVerify.js","sourceRoot":"","sources":["../../../../../../../src/api/routes/manager/auth/webauthn/webauthnRegisterVerify.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CreateCommentInput, CreateCommentOutput, ListCommentsInput, ListCommentsOutput, ToggleCommentReactionInput, ToggleCommentReactionOutput } from "../../../schemas/manager/comments.js";
|
|
1
|
+
import type { CommentReferenceInput, CreateCommentInput, CreateCommentOutput, ListCommentsInput, ListCommentsOutput, MarkCommentsReadInput, MarkCommentsReadOutput, ToggleCommentReactionInput, ToggleCommentReactionOutput, UnreadCommentsCountOutput } from "../../../schemas/manager/comments.js";
|
|
2
2
|
import type { RakunRequestContext } from "../../context.js";
|
|
3
3
|
export declare const listCommentsHandler: ({ input, ctx, }: {
|
|
4
4
|
input: ListCommentsInput;
|
|
@@ -12,4 +12,12 @@ export declare const toggleCommentReactionHandler: ({ input, ctx, }: {
|
|
|
12
12
|
input: ToggleCommentReactionInput;
|
|
13
13
|
ctx: RakunRequestContext;
|
|
14
14
|
}) => Promise<ToggleCommentReactionOutput>;
|
|
15
|
+
export declare const markCommentsReadHandler: ({ input, ctx, }: {
|
|
16
|
+
input: MarkCommentsReadInput;
|
|
17
|
+
ctx: RakunRequestContext;
|
|
18
|
+
}) => Promise<MarkCommentsReadOutput>;
|
|
19
|
+
export declare const unreadCommentsCountHandler: ({ input, ctx, }: {
|
|
20
|
+
input: CommentReferenceInput;
|
|
21
|
+
ctx: RakunRequestContext;
|
|
22
|
+
}) => Promise<UnreadCommentsCountOutput>;
|
|
15
23
|
//# sourceMappingURL=comments.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comments.d.ts","sourceRoot":"","sources":["../../../../../src/api/routes/manager/comments.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"comments.d.ts","sourceRoot":"","sources":["../../../../../src/api/routes/manager/comments.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAGV,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,2BAA2B,EAC3B,yBAAyB,EAC1B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAuLzD,eAAO,MAAM,mBAAmB,GAAU,iBAGvC;IACD,KAAK,EAAE,iBAAiB,CAAC;IACzB,GAAG,EAAE,mBAAmB,CAAC;CAC1B,KAAG,OAAO,CAAC,kBAAkB,CA+B7B,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAU,iBAGxC;IACD,KAAK,EAAE,kBAAkB,CAAC;IAC1B,GAAG,EAAE,mBAAmB,CAAC;CAC1B,KAAG,OAAO,CAAC,mBAAmB,CAiF9B,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAU,iBAGhD;IACD,KAAK,EAAE,0BAA0B,CAAC;IAClC,GAAG,EAAE,mBAAmB,CAAC;CAC1B,KAAG,OAAO,CAAC,2BAA2B,CA8CtC,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAU,iBAG3C;IACD,KAAK,EAAE,qBAAqB,CAAC;IAC7B,GAAG,EAAE,mBAAmB,CAAC;CAC1B,KAAG,OAAO,CAAC,sBAAsB,CAgDjC,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAU,iBAG9C;IACD,KAAK,EAAE,qBAAqB,CAAC;IAC7B,GAAG,EAAE,mBAAmB,CAAC;CAC1B,KAAG,OAAO,CAAC,yBAAyB,CAyCpC,CAAC"}
|
|
@@ -1,21 +1,17 @@
|
|
|
1
|
-
import { ContentComment, ManagerUser } from "../../../internal-content-types/index.js";
|
|
1
|
+
import { ContentComment, ContentCommentReadState, ManagerUser, } from "../../../internal-content-types/index.js";
|
|
2
2
|
import { throwAppError } from "../../../lib/errors/index.js";
|
|
3
3
|
import { getMongoService } from "../../../orm/index.js";
|
|
4
4
|
import { checkOwnership } from "../../utils/checkOwnership.js";
|
|
5
5
|
import { requireContentType } from "../../utils/requireContentType.js";
|
|
6
6
|
import { fallbackMentionUser, toMentionUser, } from "./users.js";
|
|
7
|
+
import { createManagerNotification } from "../../utils/managerNotifications.js";
|
|
8
|
+
import { findLatestReview, getDocumentRevisionToken, getRelationId as getReviewRelationId, } from "../../utils/reviews.js";
|
|
7
9
|
const DEFAULT_COMMENT_LIMIT = 100;
|
|
8
10
|
const MAX_COMMENT_LIMIT = 200;
|
|
9
11
|
const REACTION_KEY_SEPARATOR = ":";
|
|
10
12
|
const normalizeReactionEmoji = (emoji) => emoji.trim();
|
|
11
13
|
const requireCommentableDocument = async ({ ctx, contentTypeName, documentId, }) => {
|
|
12
14
|
const contentType = requireContentType(contentTypeName);
|
|
13
|
-
if (!contentType.comments) {
|
|
14
|
-
throwAppError("FEATURE_UNSUPPORTED", {
|
|
15
|
-
feature: "comments",
|
|
16
|
-
message: `Comments are not enabled for content type ${contentType.name}`,
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
15
|
await checkOwnership({
|
|
20
16
|
ctx,
|
|
21
17
|
contentType,
|
|
@@ -115,6 +111,7 @@ export const listCommentsHandler = async ({ input, ctx, }) => {
|
|
|
115
111
|
});
|
|
116
112
|
const limit = Math.min(input.limit ?? DEFAULT_COMMENT_LIMIT, MAX_COMMENT_LIMIT);
|
|
117
113
|
const db = await getMongoService();
|
|
114
|
+
const user = ctx.getUser();
|
|
118
115
|
const result = await db.list(ContentComment, {
|
|
119
116
|
filter: {
|
|
120
117
|
contentType: input.contentType,
|
|
@@ -125,13 +122,19 @@ export const listCommentsHandler = async ({ input, ctx, }) => {
|
|
|
125
122
|
sort: { createdAt: "asc" },
|
|
126
123
|
},
|
|
127
124
|
});
|
|
125
|
+
const readState = await db.find(ContentCommentReadState, {
|
|
126
|
+
"user._id": user._id,
|
|
127
|
+
contentType: input.contentType,
|
|
128
|
+
documentId: input.documentId,
|
|
129
|
+
});
|
|
128
130
|
return {
|
|
129
131
|
totalItems: result.totalItems,
|
|
130
132
|
comments: await resolveComments(result.items),
|
|
133
|
+
lastReadCommentId: readState?.lastReadCommentId,
|
|
131
134
|
};
|
|
132
135
|
};
|
|
133
136
|
export const createCommentHandler = async ({ input, ctx, }) => {
|
|
134
|
-
await requireCommentableDocument({
|
|
137
|
+
const contentType = await requireCommentableDocument({
|
|
135
138
|
ctx,
|
|
136
139
|
contentTypeName: input.contentType,
|
|
137
140
|
documentId: input.documentId,
|
|
@@ -159,6 +162,38 @@ export const createCommentHandler = async ({ input, ctx, }) => {
|
|
|
159
162
|
createdBy: user._id,
|
|
160
163
|
updatedBy: user._id,
|
|
161
164
|
}, { actorId: user._id });
|
|
165
|
+
const canLoadDocument = typeof db.get === "function";
|
|
166
|
+
const document = canLoadDocument
|
|
167
|
+
? (await db.get(contentType, input.documentId))
|
|
168
|
+
: undefined;
|
|
169
|
+
const revisionToken = document
|
|
170
|
+
? getDocumentRevisionToken(document)
|
|
171
|
+
: undefined;
|
|
172
|
+
const activeReview = revisionToken
|
|
173
|
+
? (await findLatestReview({
|
|
174
|
+
contentType: input.contentType,
|
|
175
|
+
documentId: input.documentId,
|
|
176
|
+
revisionToken,
|
|
177
|
+
}))
|
|
178
|
+
: null;
|
|
179
|
+
const notificationKinds = new Map(mentionIds.map((id) => [id, "comment_mention"]));
|
|
180
|
+
if (activeReview &&
|
|
181
|
+
activeReview.revisionToken === revisionToken &&
|
|
182
|
+
activeReview.status === "pending") {
|
|
183
|
+
const reviewAuthorId = getReviewRelationId(activeReview.author);
|
|
184
|
+
if (reviewAuthorId)
|
|
185
|
+
notificationKinds.set(reviewAuthorId, "review_feedback");
|
|
186
|
+
}
|
|
187
|
+
await Promise.all(Array.from(notificationKinds.entries()).map(([id, kind]) => createManagerNotification({
|
|
188
|
+
userId: id,
|
|
189
|
+
authorId: user._id,
|
|
190
|
+
eventId: comment._id,
|
|
191
|
+
kind,
|
|
192
|
+
reviewId: kind === "review_feedback" ? activeReview?._id : undefined,
|
|
193
|
+
contentType: input.contentType,
|
|
194
|
+
documentId: input.documentId,
|
|
195
|
+
text: input.text.trim(),
|
|
196
|
+
})));
|
|
162
197
|
const [resolved] = await resolveComments([comment]);
|
|
163
198
|
return {
|
|
164
199
|
comment: resolved,
|
|
@@ -200,4 +235,79 @@ export const toggleCommentReactionHandler = async ({ input, ctx, }) => {
|
|
|
200
235
|
comment: resolved,
|
|
201
236
|
};
|
|
202
237
|
};
|
|
238
|
+
export const markCommentsReadHandler = async ({ input, ctx, }) => {
|
|
239
|
+
await requireCommentableDocument({
|
|
240
|
+
ctx,
|
|
241
|
+
contentTypeName: input.contentType,
|
|
242
|
+
documentId: input.documentId,
|
|
243
|
+
});
|
|
244
|
+
const db = await getMongoService();
|
|
245
|
+
const user = ctx.getUser();
|
|
246
|
+
const comment = await db.find(ContentComment, {
|
|
247
|
+
_id: input.commentId,
|
|
248
|
+
contentType: input.contentType,
|
|
249
|
+
documentId: input.documentId,
|
|
250
|
+
});
|
|
251
|
+
if (!comment) {
|
|
252
|
+
throwAppError("NOT_FOUND", {
|
|
253
|
+
resource: "ContentComment",
|
|
254
|
+
id: input.commentId,
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
await db.upsert(ContentCommentReadState, {
|
|
258
|
+
"user._id": user._id,
|
|
259
|
+
contentType: input.contentType,
|
|
260
|
+
documentId: input.documentId,
|
|
261
|
+
}, {
|
|
262
|
+
_type: ContentCommentReadState.name,
|
|
263
|
+
user: {
|
|
264
|
+
type: "existing",
|
|
265
|
+
_id: user._id,
|
|
266
|
+
contentType: ManagerUser.name,
|
|
267
|
+
},
|
|
268
|
+
contentType: input.contentType,
|
|
269
|
+
documentId: input.documentId,
|
|
270
|
+
lastReadCommentId: input.commentId,
|
|
271
|
+
createdBy: user._id,
|
|
272
|
+
updatedBy: user._id,
|
|
273
|
+
}, { actorId: user._id });
|
|
274
|
+
return {
|
|
275
|
+
lastReadCommentId: input.commentId,
|
|
276
|
+
};
|
|
277
|
+
};
|
|
278
|
+
export const unreadCommentsCountHandler = async ({ input, ctx, }) => {
|
|
279
|
+
await requireCommentableDocument({
|
|
280
|
+
ctx,
|
|
281
|
+
contentTypeName: input.contentType,
|
|
282
|
+
documentId: input.documentId,
|
|
283
|
+
});
|
|
284
|
+
const db = await getMongoService();
|
|
285
|
+
const user = ctx.getUser();
|
|
286
|
+
const [commentsResult, readState] = await Promise.all([
|
|
287
|
+
db.list(ContentComment, {
|
|
288
|
+
filter: {
|
|
289
|
+
contentType: input.contentType,
|
|
290
|
+
documentId: input.documentId,
|
|
291
|
+
},
|
|
292
|
+
options: {
|
|
293
|
+
fields: ["author"],
|
|
294
|
+
limit: "all",
|
|
295
|
+
sort: { createdAt: "asc" },
|
|
296
|
+
},
|
|
297
|
+
}),
|
|
298
|
+
db.find(ContentCommentReadState, {
|
|
299
|
+
"user._id": user._id,
|
|
300
|
+
contentType: input.contentType,
|
|
301
|
+
documentId: input.documentId,
|
|
302
|
+
}),
|
|
303
|
+
]);
|
|
304
|
+
const comments = commentsResult.items;
|
|
305
|
+
const lastReadIndex = readState?.lastReadCommentId
|
|
306
|
+
? comments.findIndex((comment) => comment._id === readState.lastReadCommentId)
|
|
307
|
+
: -1;
|
|
308
|
+
const unreadComments = lastReadIndex >= 0 ? comments.slice(lastReadIndex + 1) : comments;
|
|
309
|
+
return {
|
|
310
|
+
count: unreadComments.filter((comment) => getRelationId(comment.author) !== user._id).length,
|
|
311
|
+
};
|
|
312
|
+
};
|
|
203
313
|
//# sourceMappingURL=comments.js.map
|