@neohm/nestend 8.0.1 → 8.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +99 -1
- package/dist/admin/controllers/admin.api.key.controller.js +2 -2
- package/dist/admin/controllers/admin.api.key.controller.js.map +1 -1
- package/dist/admin/controllers/admin.constant.controller.d.ts +23 -0
- package/dist/admin/controllers/admin.constant.controller.d.ts.map +1 -0
- package/dist/admin/controllers/admin.constant.controller.js +138 -0
- package/dist/admin/controllers/admin.constant.controller.js.map +1 -0
- package/dist/admin/controllers/admin.payment.controller.js +1 -1
- package/dist/admin/controllers/admin.payment.controller.js.map +1 -1
- package/dist/admin/controllers/admin.system.user.controller.js +1 -1
- package/dist/admin/controllers/admin.system.user.controller.js.map +1 -1
- package/dist/admin/controllers/admin.tenant.controller.js +1 -1
- package/dist/admin/controllers/admin.tenant.controller.js.map +1 -1
- package/dist/admin/controllers/admin.tenant.user.controller.d.ts.map +1 -1
- package/dist/admin/controllers/admin.tenant.user.controller.js +1 -1
- package/dist/admin/controllers/admin.tenant.user.controller.js.map +1 -1
- package/dist/admin/dtos/add.constant.dto.d.ts +10 -0
- package/dist/admin/dtos/add.constant.dto.d.ts.map +1 -0
- package/dist/admin/dtos/add.constant.dto.js +70 -0
- package/dist/admin/dtos/add.constant.dto.js.map +1 -0
- package/dist/admin/dtos/add.constant.type.dto.d.ts +8 -0
- package/dist/admin/dtos/add.constant.type.dto.d.ts.map +1 -0
- package/dist/admin/dtos/add.constant.type.dto.js +56 -0
- package/dist/admin/dtos/add.constant.type.dto.js.map +1 -0
- package/dist/admin/dtos/add.plan.dto.d.ts +2 -2
- package/dist/admin/dtos/add.plan.dto.d.ts.map +1 -1
- package/dist/admin/dtos/add.plan.dto.js +2 -2
- package/dist/admin/dtos/add.plan.dto.js.map +1 -1
- package/dist/admin/dtos/add.scheduled.task.dto.d.ts +3 -3
- package/dist/admin/dtos/add.scheduled.task.dto.d.ts.map +1 -1
- package/dist/admin/dtos/add.scheduled.task.dto.js +8 -5
- package/dist/admin/dtos/add.scheduled.task.dto.js.map +1 -1
- package/dist/admin/dtos/add.tenant.dto.d.ts +2 -2
- package/dist/admin/dtos/add.tenant.dto.d.ts.map +1 -1
- package/dist/admin/dtos/add.tenant.dto.js +8 -2
- package/dist/admin/dtos/add.tenant.dto.js.map +1 -1
- package/dist/admin/dtos/assign.tenant.plan.dto.d.ts +2 -2
- package/dist/admin/dtos/assign.tenant.plan.dto.d.ts.map +1 -1
- package/dist/admin/dtos/assign.tenant.plan.dto.js +9 -3
- package/dist/admin/dtos/assign.tenant.plan.dto.js.map +1 -1
- package/dist/admin/dtos/constant.type.list.dto.d.ts +4 -0
- package/dist/admin/dtos/constant.type.list.dto.d.ts.map +1 -0
- package/dist/admin/dtos/constant.type.list.dto.js +8 -0
- package/dist/admin/dtos/constant.type.list.dto.js.map +1 -0
- package/dist/admin/enums/constant.enum.d.ts +18 -0
- package/dist/admin/enums/constant.enum.d.ts.map +1 -0
- package/dist/admin/enums/constant.enum.js +23 -0
- package/dist/admin/enums/constant.enum.js.map +1 -0
- package/dist/admin/libraries/bulk.user.data.processor.js +1 -1
- package/dist/admin/libraries/bulk.user.data.processor.js.map +1 -1
- package/dist/admin/libraries/client.membership.data.processor.js +1 -1
- package/dist/admin/libraries/client.membership.data.processor.js.map +1 -1
- package/dist/admin/libraries/client.user.data.processor.js +2 -2
- package/dist/admin/libraries/client.user.data.processor.js.map +1 -1
- package/dist/admin/libraries/client.user.delete.processor.js +1 -1
- package/dist/admin/libraries/client.user.delete.processor.js.map +1 -1
- package/dist/admin/libraries/client.user.filter.processor.js +1 -1
- package/dist/admin/libraries/client.user.filter.processor.js.map +1 -1
- package/dist/admin/libraries/constant.data.processor.d.ts +22 -0
- package/dist/admin/libraries/constant.data.processor.d.ts.map +1 -0
- package/dist/admin/libraries/constant.data.processor.js +102 -0
- package/dist/admin/libraries/constant.data.processor.js.map +1 -0
- package/dist/admin/libraries/constant.type.data.processor.d.ts +20 -0
- package/dist/admin/libraries/constant.type.data.processor.d.ts.map +1 -0
- package/dist/admin/libraries/constant.type.data.processor.js +75 -0
- package/dist/admin/libraries/constant.type.data.processor.js.map +1 -0
- package/dist/admin/libraries/constant.type.filter.processor.d.ts +11 -0
- package/dist/admin/libraries/constant.type.filter.processor.d.ts.map +1 -0
- package/dist/admin/libraries/constant.type.filter.processor.js +47 -0
- package/dist/admin/libraries/constant.type.filter.processor.js.map +1 -0
- package/dist/admin/libraries/payment.filter.processor.d.ts.map +1 -1
- package/dist/admin/libraries/payment.filter.processor.js +3 -2
- package/dist/admin/libraries/payment.filter.processor.js.map +1 -1
- package/dist/admin/libraries/plan.data.processor.d.ts +1 -0
- package/dist/admin/libraries/plan.data.processor.d.ts.map +1 -1
- package/dist/admin/libraries/plan.data.processor.js +12 -3
- package/dist/admin/libraries/plan.data.processor.js.map +1 -1
- package/dist/admin/libraries/plan.filter.processor.d.ts.map +1 -1
- package/dist/admin/libraries/plan.filter.processor.js +3 -2
- package/dist/admin/libraries/plan.filter.processor.js.map +1 -1
- package/dist/admin/libraries/scheduled.task.data.processor.d.ts.map +1 -1
- package/dist/admin/libraries/scheduled.task.data.processor.js +12 -9
- package/dist/admin/libraries/scheduled.task.data.processor.js.map +1 -1
- package/dist/admin/libraries/scheduled.task.delete.processor.d.ts.map +1 -1
- package/dist/admin/libraries/scheduled.task.delete.processor.js +3 -3
- package/dist/admin/libraries/scheduled.task.delete.processor.js.map +1 -1
- package/dist/admin/libraries/scheduled.task.filter.processor.d.ts.map +1 -1
- package/dist/admin/libraries/scheduled.task.filter.processor.js +5 -3
- package/dist/admin/libraries/scheduled.task.filter.processor.js.map +1 -1
- package/dist/admin/libraries/system.user.data.processor.js +2 -2
- package/dist/admin/libraries/system.user.data.processor.js.map +1 -1
- package/dist/admin/libraries/system.user.filter.processor.d.ts.map +1 -1
- package/dist/admin/libraries/system.user.filter.processor.js +4 -3
- package/dist/admin/libraries/system.user.filter.processor.js.map +1 -1
- package/dist/admin/libraries/tenant.plan.data.processor.d.ts.map +1 -1
- package/dist/admin/libraries/tenant.plan.data.processor.js +8 -5
- package/dist/admin/libraries/tenant.plan.data.processor.js.map +1 -1
- package/dist/admin/libraries/webhook.event.filter.processor.d.ts.map +1 -1
- package/dist/admin/libraries/webhook.event.filter.processor.js +3 -2
- package/dist/admin/libraries/webhook.event.filter.processor.js.map +1 -1
- package/dist/admin/module.registry.d.ts +10 -4
- package/dist/admin/module.registry.d.ts.map +1 -1
- package/dist/admin/module.registry.js +16 -0
- package/dist/admin/module.registry.js.map +1 -1
- package/dist/admin/services/admin.constant.service.d.ts +13 -0
- package/dist/admin/services/admin.constant.service.d.ts.map +1 -0
- package/dist/admin/services/admin.constant.service.js +116 -0
- package/dist/admin/services/admin.constant.service.js.map +1 -0
- package/dist/admin/services/system.user.service.js +1 -1
- package/dist/admin/services/system.user.service.js.map +1 -1
- package/dist/admin/types/admin.types.d.ts +1 -1
- package/dist/admin/types/admin.types.d.ts.map +1 -1
- package/dist/admin/utilities/admin.audit.d.ts.map +1 -1
- package/dist/admin/utilities/admin.audit.js +3 -1
- package/dist/admin/utilities/admin.audit.js.map +1 -1
- package/dist/admin/utilities/scheduled.event.discard.d.ts +4 -0
- package/dist/admin/utilities/scheduled.event.discard.d.ts.map +1 -0
- package/dist/admin/utilities/scheduled.event.discard.js +16 -0
- package/dist/admin/utilities/scheduled.event.discard.js.map +1 -0
- package/dist/auth/entities/payment.entity.d.ts +4 -2
- package/dist/auth/entities/payment.entity.d.ts.map +1 -1
- package/dist/auth/entities/payment.entity.js +7 -1
- package/dist/auth/entities/payment.entity.js.map +1 -1
- package/dist/auth/entities/plan.entity.d.ts +4 -2
- package/dist/auth/entities/plan.entity.d.ts.map +1 -1
- package/dist/auth/entities/plan.entity.js +7 -1
- package/dist/auth/entities/plan.entity.js.map +1 -1
- package/dist/auth/entities/tenant.invitation.entity.d.ts +4 -2
- package/dist/auth/entities/tenant.invitation.entity.d.ts.map +1 -1
- package/dist/auth/entities/tenant.invitation.entity.js +7 -1
- package/dist/auth/entities/tenant.invitation.entity.js.map +1 -1
- package/dist/auth/entities/tenant.plan.entity.d.ts +6 -3
- package/dist/auth/entities/tenant.plan.entity.d.ts.map +1 -1
- package/dist/auth/entities/tenant.plan.entity.js +15 -4
- package/dist/auth/entities/tenant.plan.entity.js.map +1 -1
- package/dist/auth/entities/user.entity.d.ts +2 -2
- package/dist/auth/entities/user.entity.d.ts.map +1 -1
- package/dist/auth/entities/user.entity.js +2 -2
- package/dist/auth/entities/user.entity.js.map +1 -1
- package/dist/auth/enums/payment.enum.d.ts +8 -1
- package/dist/auth/enums/payment.enum.d.ts.map +1 -1
- package/dist/auth/enums/payment.enum.js +17 -9
- package/dist/auth/enums/payment.enum.js.map +1 -1
- package/dist/auth/enums/tenant.invitation.status.enum.d.ts +7 -1
- package/dist/auth/enums/tenant.invitation.status.enum.d.ts.map +1 -1
- package/dist/auth/enums/tenant.invitation.status.enum.js +15 -8
- package/dist/auth/enums/tenant.invitation.status.enum.js.map +1 -1
- package/dist/auth/enums/tenant.plan.enum.d.ts +17 -3
- package/dist/auth/enums/tenant.plan.enum.d.ts.map +1 -1
- package/dist/auth/enums/tenant.plan.enum.js +35 -18
- package/dist/auth/enums/tenant.plan.enum.js.map +1 -1
- package/dist/auth/enums/user.type.enum.d.ts +5 -1
- package/dist/auth/enums/user.type.enum.d.ts.map +1 -1
- package/dist/auth/enums/user.type.enum.js +11 -6
- package/dist/auth/enums/user.type.enum.js.map +1 -1
- package/dist/auth/helpers/admin.auth.d.ts +1 -0
- package/dist/auth/helpers/admin.auth.d.ts.map +1 -1
- package/dist/auth/helpers/admin.auth.js +3 -0
- package/dist/auth/helpers/admin.auth.js.map +1 -1
- package/dist/auth/helpers/api.key.context.d.ts +1 -0
- package/dist/auth/helpers/api.key.context.d.ts.map +1 -1
- package/dist/auth/helpers/api.key.context.js +3 -0
- package/dist/auth/helpers/api.key.context.js.map +1 -1
- package/dist/auth/helpers/auth.d.ts +1 -0
- package/dist/auth/helpers/auth.d.ts.map +1 -1
- package/dist/auth/helpers/auth.js +6 -1
- package/dist/auth/helpers/auth.js.map +1 -1
- package/dist/auth/middlewares/admin.jwt.middleware.d.ts.map +1 -1
- package/dist/auth/middlewares/admin.jwt.middleware.js +5 -1
- package/dist/auth/middlewares/admin.jwt.middleware.js.map +1 -1
- package/dist/auth/middlewares/api.key.middleware.d.ts.map +1 -1
- package/dist/auth/middlewares/api.key.middleware.js +5 -1
- package/dist/auth/middlewares/api.key.middleware.js.map +1 -1
- package/dist/auth/middlewares/jwt.middleware.d.ts.map +1 -1
- package/dist/auth/middlewares/jwt.middleware.js +5 -1
- package/dist/auth/middlewares/jwt.middleware.js.map +1 -1
- package/dist/auth/processors/google.user.data.processor.d.ts.map +1 -1
- package/dist/auth/processors/google.user.data.processor.js +6 -3
- package/dist/auth/processors/google.user.data.processor.js.map +1 -1
- package/dist/auth/processors/register.user.data.processor.d.ts.map +1 -1
- package/dist/auth/processors/register.user.data.processor.js +1 -1
- package/dist/auth/processors/register.user.data.processor.js.map +1 -1
- package/dist/auth/processors/tenant.invitation.data.processor.js +6 -6
- package/dist/auth/processors/tenant.invitation.data.processor.js.map +1 -1
- package/dist/auth/processors/tenant.invitation.filter.processor.d.ts.map +1 -1
- package/dist/auth/processors/tenant.invitation.filter.processor.js +2 -1
- package/dist/auth/processors/tenant.invitation.filter.processor.js.map +1 -1
- package/dist/auth/services/auth.service.js +2 -2
- package/dist/auth/services/auth.service.js.map +1 -1
- package/dist/auth/services/impersonation.service.js +1 -1
- package/dist/auth/services/impersonation.service.js.map +1 -1
- package/dist/auth/services/payment.service.d.ts +5 -2
- package/dist/auth/services/payment.service.d.ts.map +1 -1
- package/dist/auth/services/payment.service.js +54 -35
- package/dist/auth/services/payment.service.js.map +1 -1
- package/dist/auth/services/tenant.invitation.service.d.ts +1 -1
- package/dist/auth/services/tenant.invitation.service.d.ts.map +1 -1
- package/dist/auth/services/tenant.invitation.service.js +20 -12
- package/dist/auth/services/tenant.invitation.service.js.map +1 -1
- package/dist/auth/services/tenant.membership.service.js +2 -2
- package/dist/auth/services/tenant.membership.service.js.map +1 -1
- package/dist/auth/services/tenant.plan.service.d.ts.map +1 -1
- package/dist/auth/services/tenant.plan.service.js +7 -3
- package/dist/auth/services/tenant.plan.service.js.map +1 -1
- package/dist/auth/services/tenant.provisioning.service.d.ts.map +1 -1
- package/dist/auth/services/tenant.provisioning.service.js +9 -5
- package/dist/auth/services/tenant.provisioning.service.js.map +1 -1
- package/dist/auth/types/api.key.types.d.ts +1 -0
- package/dist/auth/types/api.key.types.d.ts.map +1 -1
- package/dist/auth/types/auth.types.d.ts +2 -0
- package/dist/auth/types/auth.types.d.ts.map +1 -1
- package/dist/auth/types/google.auth.types.d.ts +1 -1
- package/dist/auth/types/google.auth.types.d.ts.map +1 -1
- package/dist/auth/types/payment.types.d.ts +4 -1
- package/dist/auth/types/payment.types.d.ts.map +1 -1
- package/dist/auth/types/tenant.plan.types.d.ts +6 -6
- package/dist/auth/types/tenant.plan.types.d.ts.map +1 -1
- package/dist/auth/types/tenant.provisioning.types.d.ts +2 -2
- package/dist/auth/types/tenant.provisioning.types.d.ts.map +1 -1
- package/dist/auth/utilities/tenant.access.js +2 -2
- package/dist/auth/utilities/tenant.access.js.map +1 -1
- package/dist/auth/utilities/tenant.limits.js +2 -2
- package/dist/auth/utilities/tenant.limits.js.map +1 -1
- package/dist/auth/utilities/tenant.plans.js +8 -8
- package/dist/auth/utilities/tenant.plans.js.map +1 -1
- package/dist/common/common.module.d.ts.map +1 -1
- package/dist/common/common.module.js +6 -0
- package/dist/common/common.module.js.map +1 -1
- package/dist/common/entities/activity.log.entity.d.ts +3 -1
- package/dist/common/entities/activity.log.entity.d.ts.map +1 -1
- package/dist/common/entities/activity.log.entity.js +7 -1
- package/dist/common/entities/activity.log.entity.js.map +1 -1
- package/dist/common/entities/idempotency.key.entity.d.ts +11 -0
- package/dist/common/entities/idempotency.key.entity.d.ts.map +1 -0
- package/dist/common/entities/idempotency.key.entity.js +49 -0
- package/dist/common/entities/idempotency.key.entity.js.map +1 -0
- package/dist/common/entities/scheduled.event.entity.d.ts +2 -2
- package/dist/common/entities/scheduled.event.entity.d.ts.map +1 -1
- package/dist/common/entities/scheduled.event.entity.js +2 -2
- package/dist/common/entities/scheduled.event.entity.js.map +1 -1
- package/dist/common/entities/system.audit.log.entity.d.ts +4 -1
- package/dist/common/entities/system.audit.log.entity.d.ts.map +1 -1
- package/dist/common/entities/system.audit.log.entity.js +8 -1
- package/dist/common/entities/system.audit.log.entity.js.map +1 -1
- package/dist/common/entities/system.constant.entity.d.ts +2 -0
- package/dist/common/entities/system.constant.entity.d.ts.map +1 -1
- package/dist/common/entities/system.constant.entity.js +11 -3
- package/dist/common/entities/system.constant.entity.js.map +1 -1
- package/dist/common/entities/system.constant.type.entity.d.ts +1 -0
- package/dist/common/entities/system.constant.type.entity.d.ts.map +1 -1
- package/dist/common/entities/system.constant.type.entity.js +6 -2
- package/dist/common/entities/system.constant.type.entity.js.map +1 -1
- package/dist/common/entities/system.notification.entity.d.ts +3 -1
- package/dist/common/entities/system.notification.entity.d.ts.map +1 -1
- package/dist/common/entities/system.notification.entity.js +7 -1
- package/dist/common/entities/system.notification.entity.js.map +1 -1
- package/dist/common/entities/system.scheduled.task.entity.d.ts +3 -3
- package/dist/common/entities/system.scheduled.task.entity.d.ts.map +1 -1
- package/dist/common/entities/system.scheduled.task.entity.js +4 -4
- package/dist/common/entities/system.scheduled.task.entity.js.map +1 -1
- package/dist/common/enums/audit.action.enum.d.ts +28 -11
- package/dist/common/enums/audit.action.enum.d.ts.map +1 -1
- package/dist/common/enums/audit.action.enum.js +30 -12
- package/dist/common/enums/audit.action.enum.js.map +1 -1
- package/dist/common/enums/idempotency.enum.d.ts +42 -0
- package/dist/common/enums/idempotency.enum.d.ts.map +1 -0
- package/dist/common/enums/idempotency.enum.js +50 -0
- package/dist/common/enums/idempotency.enum.js.map +1 -0
- package/dist/common/enums/notification.type.enum.d.ts +12 -5
- package/dist/common/enums/notification.type.enum.d.ts.map +1 -1
- package/dist/common/enums/notification.type.enum.js +14 -6
- package/dist/common/enums/notification.type.enum.js.map +1 -1
- package/dist/common/enums/otp.enum.d.ts +3 -5
- package/dist/common/enums/otp.enum.d.ts.map +1 -1
- package/dist/common/enums/otp.enum.js +8 -9
- package/dist/common/enums/otp.enum.js.map +1 -1
- package/dist/common/enums/record.history.enum.d.ts +2 -0
- package/dist/common/enums/record.history.enum.d.ts.map +1 -0
- package/dist/common/enums/record.history.enum.js +12 -0
- package/dist/common/enums/record.history.enum.js.map +1 -0
- package/dist/common/enums/schedule.enum.d.ts +20 -3
- package/dist/common/enums/schedule.enum.d.ts.map +1 -1
- package/dist/common/enums/schedule.enum.js +40 -20
- package/dist/common/enums/schedule.enum.js.map +1 -1
- package/dist/common/enums/storage.driver.enum.d.ts +8 -1
- package/dist/common/enums/storage.driver.enum.d.ts.map +1 -1
- package/dist/common/enums/storage.driver.enum.js +17 -9
- package/dist/common/enums/storage.driver.enum.js.map +1 -1
- package/dist/common/enums/system.constant.enum.d.ts +55 -0
- package/dist/common/enums/system.constant.enum.d.ts.map +1 -0
- package/dist/common/enums/system.constant.enum.js +63 -0
- package/dist/common/enums/system.constant.enum.js.map +1 -0
- package/dist/common/helpers/canonical.json.d.ts +2 -0
- package/dist/common/helpers/canonical.json.d.ts.map +1 -0
- package/dist/common/helpers/canonical.json.js +23 -0
- package/dist/common/helpers/canonical.json.js.map +1 -0
- package/dist/common/helpers/constant.pair.d.ts +5 -0
- package/dist/common/helpers/constant.pair.d.ts.map +1 -0
- package/dist/common/helpers/constant.pair.js +19 -0
- package/dist/common/helpers/constant.pair.js.map +1 -0
- package/dist/common/helpers/request.idempotency.d.ts +9 -0
- package/dist/common/helpers/request.idempotency.d.ts.map +1 -0
- package/dist/common/helpers/request.idempotency.js +40 -0
- package/dist/common/helpers/request.idempotency.js.map +1 -0
- package/dist/common/jobs/dispatch.scheduled.event.job.d.ts +1 -0
- package/dist/common/jobs/dispatch.scheduled.event.job.d.ts.map +1 -1
- package/dist/common/jobs/dispatch.scheduled.event.job.js +45 -19
- package/dist/common/jobs/dispatch.scheduled.event.job.js.map +1 -1
- package/dist/common/jobs/purge.idempotency.keys.job.d.ts +11 -0
- package/dist/common/jobs/purge.idempotency.keys.job.d.ts.map +1 -0
- package/dist/common/jobs/purge.idempotency.keys.job.js +37 -0
- package/dist/common/jobs/purge.idempotency.keys.job.js.map +1 -0
- package/dist/common/jobs/set.scheduled.event.job.d.ts.map +1 -1
- package/dist/common/jobs/set.scheduled.event.job.js +11 -10
- package/dist/common/jobs/set.scheduled.event.job.js.map +1 -1
- package/dist/common/libraries/base.data.processor.d.ts +9 -0
- package/dist/common/libraries/base.data.processor.d.ts.map +1 -1
- package/dist/common/libraries/base.data.processor.js +46 -1
- package/dist/common/libraries/base.data.processor.js.map +1 -1
- package/dist/common/module.registry.d.ts +6 -2
- package/dist/common/module.registry.d.ts.map +1 -1
- package/dist/common/module.registry.js +8 -0
- package/dist/common/module.registry.js.map +1 -1
- package/dist/common/queue.module.d.ts.map +1 -1
- package/dist/common/queue.module.js +4 -0
- package/dist/common/queue.module.js.map +1 -1
- package/dist/common/services/audit.service.d.ts.map +1 -1
- package/dist/common/services/audit.service.js +7 -2
- package/dist/common/services/audit.service.js.map +1 -1
- package/dist/common/services/idempotency.service.d.ts +25 -0
- package/dist/common/services/idempotency.service.d.ts.map +1 -0
- package/dist/common/services/idempotency.service.js +181 -0
- package/dist/common/services/idempotency.service.js.map +1 -0
- package/dist/common/services/record.history.service.d.ts +16 -0
- package/dist/common/services/record.history.service.d.ts.map +1 -0
- package/dist/common/services/record.history.service.js +153 -0
- package/dist/common/services/record.history.service.js.map +1 -0
- package/dist/common/services/system.constant.service.d.ts +24 -0
- package/dist/common/services/system.constant.service.d.ts.map +1 -0
- package/dist/common/services/system.constant.service.js +151 -0
- package/dist/common/services/system.constant.service.js.map +1 -0
- package/dist/common/system.property.module.d.ts.map +1 -1
- package/dist/common/system.property.module.js +11 -2
- package/dist/common/system.property.module.js.map +1 -1
- package/dist/common/types/audit.types.d.ts +3 -2
- package/dist/common/types/audit.types.d.ts.map +1 -1
- package/dist/common/types/idempotency.types.d.ts +29 -0
- package/dist/common/types/idempotency.types.d.ts.map +1 -0
- package/dist/common/types/idempotency.types.js +3 -0
- package/dist/common/types/idempotency.types.js.map +1 -0
- package/dist/common/types/record.history.types.d.ts +40 -0
- package/dist/common/types/record.history.types.d.ts.map +1 -0
- package/dist/common/types/record.history.types.js +3 -0
- package/dist/common/types/record.history.types.js.map +1 -0
- package/dist/common/types/system.constant.types.d.ts +16 -0
- package/dist/common/types/system.constant.types.d.ts.map +1 -0
- package/dist/common/types/system.constant.types.js +3 -0
- package/dist/common/types/system.constant.types.js.map +1 -0
- package/dist/common/validators/idempotency.patterns.d.ts +2 -0
- package/dist/common/validators/idempotency.patterns.d.ts.map +1 -0
- package/dist/common/validators/idempotency.patterns.js +5 -0
- package/dist/common/validators/idempotency.patterns.js.map +1 -0
- package/dist/constants/entity.constants.d.ts +1 -0
- package/dist/constants/entity.constants.d.ts.map +1 -1
- package/dist/constants/entity.constants.js +1 -0
- package/dist/constants/entity.constants.js.map +1 -1
- package/dist/constants/entity.maps.d.ts +2 -0
- package/dist/constants/entity.maps.d.ts.map +1 -1
- package/dist/constants/entity.maps.js +2 -0
- package/dist/constants/entity.maps.js.map +1 -1
- package/dist/constants/job.constants.d.ts +1 -0
- package/dist/constants/job.constants.d.ts.map +1 -1
- package/dist/constants/job.constants.js +1 -0
- package/dist/constants/job.constants.js.map +1 -1
- package/dist/constants/job.maps.d.ts +2 -0
- package/dist/constants/job.maps.d.ts.map +1 -1
- package/dist/constants/job.maps.js +2 -0
- package/dist/constants/job.maps.js.map +1 -1
- package/dist/document/entities/document.upload.entity.d.ts +2 -1
- package/dist/document/entities/document.upload.entity.d.ts.map +1 -1
- package/dist/document/entities/document.upload.entity.js +3 -2
- package/dist/document/entities/document.upload.entity.js.map +1 -1
- package/dist/document/services/document.service.d.ts +1 -0
- package/dist/document/services/document.service.d.ts.map +1 -1
- package/dist/document/services/document.service.js +14 -10
- package/dist/document/services/document.service.js.map +1 -1
- package/dist/document/services/minio.bucket.document.service.d.ts +2 -2
- package/dist/document/services/minio.bucket.document.service.d.ts.map +1 -1
- package/dist/document/services/minio.bucket.document.service.js +1 -1
- package/dist/document/services/minio.bucket.document.service.js.map +1 -1
- package/dist/document/services/s3.bucket.document.service.d.ts +2 -2
- package/dist/document/services/s3.bucket.document.service.d.ts.map +1 -1
- package/dist/document/services/s3.bucket.document.service.js +1 -1
- package/dist/document/services/s3.bucket.document.service.js.map +1 -1
- package/dist/global/exceptions/idempotency.exception.d.ts +8 -0
- package/dist/global/exceptions/idempotency.exception.d.ts.map +1 -0
- package/dist/global/exceptions/idempotency.exception.js +18 -0
- package/dist/global/exceptions/idempotency.exception.js.map +1 -0
- package/dist/global/utilities/seeder.utility.d.ts +1 -1
- package/dist/global/utilities/seeder.utility.d.ts.map +1 -1
- package/dist/global/utilities/seeder.utility.js +2 -2
- package/dist/global/utilities/seeder.utility.js.map +1 -1
- package/dist/global/utilities/table.builder.d.ts.map +1 -1
- package/dist/global/utilities/table.builder.js +1 -0
- package/dist/global/utilities/table.builder.js.map +1 -1
- package/dist/index.d.ts +21 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +51 -17
- package/dist/index.js.map +1 -1
- package/dist/migrations/1749600000003.CreateSysUsersTable.d.ts.map +1 -1
- package/dist/migrations/1749600000003.CreateSysUsersTable.js +3 -3
- package/dist/migrations/1749600000003.CreateSysUsersTable.js.map +1 -1
- package/dist/migrations/1749600000007.CreateSysConstantTypesTable.d.ts.map +1 -1
- package/dist/migrations/1749600000007.CreateSysConstantTypesTable.js +5 -4
- package/dist/migrations/1749600000007.CreateSysConstantTypesTable.js.map +1 -1
- package/dist/migrations/1749600000008.CreateSysConstantsTable.d.ts +3 -0
- package/dist/migrations/1749600000008.CreateSysConstantsTable.d.ts.map +1 -1
- package/dist/migrations/1749600000008.CreateSysConstantsTable.js +26 -4
- package/dist/migrations/1749600000008.CreateSysConstantsTable.js.map +1 -1
- package/dist/migrations/1749600000011.CreateSysNotificationsTable.d.ts.map +1 -1
- package/dist/migrations/1749600000011.CreateSysNotificationsTable.js +8 -2
- package/dist/migrations/1749600000011.CreateSysNotificationsTable.js.map +1 -1
- package/dist/migrations/1749600000012.CreateSysAuditLogsTable.d.ts.map +1 -1
- package/dist/migrations/1749600000012.CreateSysAuditLogsTable.js +5 -1
- package/dist/migrations/1749600000012.CreateSysAuditLogsTable.js.map +1 -1
- package/dist/migrations/1749600000013.CreateSysDocumentUploadsTable.d.ts.map +1 -1
- package/dist/migrations/1749600000013.CreateSysDocumentUploadsTable.js +5 -1
- package/dist/migrations/1749600000013.CreateSysDocumentUploadsTable.js.map +1 -1
- package/dist/migrations/1749600000015.CreateSysActivityLogsTable.d.ts.map +1 -1
- package/dist/migrations/1749600000015.CreateSysActivityLogsTable.js +5 -1
- package/dist/migrations/1749600000015.CreateSysActivityLogsTable.js.map +1 -1
- package/dist/migrations/1749600000018.CreateSysScheduledTasksTable.d.ts.map +1 -1
- package/dist/migrations/1749600000018.CreateSysScheduledTasksTable.js +12 -6
- package/dist/migrations/1749600000018.CreateSysScheduledTasksTable.js.map +1 -1
- package/dist/migrations/1749600000019.CreateSysScheduledEventsTable.d.ts.map +1 -1
- package/dist/migrations/1749600000019.CreateSysScheduledEventsTable.js +7 -4
- package/dist/migrations/1749600000019.CreateSysScheduledEventsTable.js.map +1 -1
- package/dist/migrations/1749600000031.CreateSysTenantInvitationsTable.d.ts.map +1 -1
- package/dist/migrations/1749600000031.CreateSysTenantInvitationsTable.js +12 -7
- package/dist/migrations/1749600000031.CreateSysTenantInvitationsTable.js.map +1 -1
- package/dist/migrations/1749600000036.SeedGlobalAdminRole.d.ts +1 -1
- package/dist/migrations/1749600000036.SeedGlobalAdminRole.d.ts.map +1 -1
- package/dist/migrations/1749600000036.SeedGlobalAdminRole.js +2 -2
- package/dist/migrations/1749600000036.SeedGlobalAdminRole.js.map +1 -1
- package/dist/migrations/1749600000040.SeedTenantLimits.d.ts +1 -1
- package/dist/migrations/1749600000040.SeedTenantLimits.d.ts.map +1 -1
- package/dist/migrations/1749600000040.SeedTenantLimits.js +2 -2
- package/dist/migrations/1749600000040.SeedTenantLimits.js.map +1 -1
- package/dist/migrations/1749600000041.CreateSysPlansTable.d.ts.map +1 -1
- package/dist/migrations/1749600000041.CreateSysPlansTable.js +6 -3
- package/dist/migrations/1749600000041.CreateSysPlansTable.js.map +1 -1
- package/dist/migrations/1749600000044.CreateSysTenantPlansTable.d.ts.map +1 -1
- package/dist/migrations/1749600000044.CreateSysTenantPlansTable.js +14 -7
- package/dist/migrations/1749600000044.CreateSysTenantPlansTable.js.map +1 -1
- package/dist/migrations/1749600000045.CreateSysPaymentsTable.d.ts.map +1 -1
- package/dist/migrations/1749600000045.CreateSysPaymentsTable.js +6 -5
- package/dist/migrations/1749600000045.CreateSysPaymentsTable.js.map +1 -1
- package/dist/migrations/1749600000046.CreateSysWebhookEventsTable.d.ts.map +1 -1
- package/dist/migrations/1749600000046.CreateSysWebhookEventsTable.js +5 -4
- package/dist/migrations/1749600000046.CreateSysWebhookEventsTable.js.map +1 -1
- package/dist/migrations/1749600000048.SeedOtpActivityConstants.d.ts +1 -1
- package/dist/migrations/1749600000048.SeedOtpActivityConstants.d.ts.map +1 -1
- package/dist/migrations/1749600000048.SeedOtpActivityConstants.js +6 -3
- package/dist/migrations/1749600000048.SeedOtpActivityConstants.js.map +1 -1
- package/dist/migrations/1749600000054.SeedCoreConstants.d.ts +101 -0
- package/dist/migrations/1749600000054.SeedCoreConstants.d.ts.map +1 -0
- package/dist/migrations/1749600000054.SeedCoreConstants.js +146 -0
- package/dist/migrations/1749600000054.SeedCoreConstants.js.map +1 -0
- package/dist/migrations/1749600000055.CreateSysIdempotencyKeysTable.d.ts +6 -0
- package/dist/migrations/1749600000055.CreateSysIdempotencyKeysTable.d.ts.map +1 -0
- package/dist/migrations/1749600000055.CreateSysIdempotencyKeysTable.js +38 -0
- package/dist/migrations/1749600000055.CreateSysIdempotencyKeysTable.js.map +1 -0
- package/dist/notification/notification.module.d.ts.map +1 -1
- package/dist/notification/notification.module.js +3 -1
- package/dist/notification/notification.module.js.map +1 -1
- package/dist/notification/services/notification.service.d.ts +4 -1
- package/dist/notification/services/notification.service.d.ts.map +1 -1
- package/dist/notification/services/notification.service.js +21 -3
- package/dist/notification/services/notification.service.js.map +1 -1
- package/dist/tenant/utilities/tenant.revocation.js +1 -1
- package/dist/tenant/utilities/tenant.revocation.js.map +1 -1
- package/dist/webhook/entities/webhook.event.entity.d.ts +4 -2
- package/dist/webhook/entities/webhook.event.entity.d.ts.map +1 -1
- package/dist/webhook/entities/webhook.event.entity.js +7 -1
- package/dist/webhook/entities/webhook.event.entity.js.map +1 -1
- package/dist/webhook/enums/webhook.enum.d.ts +8 -1
- package/dist/webhook/enums/webhook.enum.d.ts.map +1 -1
- package/dist/webhook/enums/webhook.enum.js +17 -9
- package/dist/webhook/enums/webhook.enum.js.map +1 -1
- package/dist/webhook/services/webhook.service.d.ts.map +1 -1
- package/dist/webhook/services/webhook.service.js +22 -15
- package/dist/webhook/services/webhook.service.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { DataSource, EntityManager } from 'typeorm';
|
|
2
|
+
import { IdempotencyKeyEntity } from '../entities/idempotency.key.entity';
|
|
3
|
+
import type { IdempotencyClaim, IdempotencyClaimInput } from '../types/idempotency.types';
|
|
4
|
+
import { SystemPropertyService } from './system.property.service';
|
|
5
|
+
export declare class IdempotencyService {
|
|
6
|
+
private readonly systemPropertyService;
|
|
7
|
+
private readonly dataSource?;
|
|
8
|
+
private readonly propertyCache;
|
|
9
|
+
constructor(systemPropertyService: SystemPropertyService, dataSource?: DataSource);
|
|
10
|
+
claim(manager: EntityManager, input: IdempotencyClaimInput): Promise<IdempotencyClaim>;
|
|
11
|
+
complete(manager: EntityManager, claim: string | IdempotencyKeyEntity, sourceId: string): Promise<void>;
|
|
12
|
+
hash(payload: unknown): string;
|
|
13
|
+
purgeExpired(): Promise<number>;
|
|
14
|
+
ttlMinutes(): Promise<number>;
|
|
15
|
+
lockTimeoutMs(): Promise<number>;
|
|
16
|
+
private attempt;
|
|
17
|
+
private insert;
|
|
18
|
+
private findExisting;
|
|
19
|
+
private setLockTimeout;
|
|
20
|
+
private isUniqueViolation;
|
|
21
|
+
private isLockTimeout;
|
|
22
|
+
private property;
|
|
23
|
+
private get connection();
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=idempotency.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idempotency.service.d.ts","sourceRoot":"","sources":["../../../src/common/services/idempotency.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,aAAa,EAA8B,MAAM,SAAS,CAAC;AAIhF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAO1E,OAAO,KAAK,EACV,gBAAgB,EAEhB,qBAAqB,EACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAOlE,qBACa,kBAAkB;IAI3B,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAJ1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqC;gBAGhD,qBAAqB,EAAE,qBAAqB,EAChC,UAAU,CAAC,EAAE,UAAU;IAIhD,KAAK,CACT,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,gBAAgB,CAAC;IAkBtB,QAAQ,CACZ,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,MAAM,GAAG,oBAAoB,EACpC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IAUhB,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;IAOxB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAsB/B,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAS7B,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;YASxB,OAAO;YAqCP,MAAM;IAyBpB,OAAO,CAAC,YAAY;YAkBN,cAAc;IAU5B,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,aAAa;YASP,QAAQ;IAiBtB,OAAO,KAAK,UAAU,GAMrB;CACF"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.IdempotencyService = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const crypto_1 = require("crypto");
|
|
18
|
+
const typeorm_1 = require("typeorm");
|
|
19
|
+
const idempotency_exception_1 = require("../../global/exceptions/idempotency.exception");
|
|
20
|
+
const operation_exception_1 = require("../../global/exceptions/operation.exception");
|
|
21
|
+
const environment_util_1 = require("../../global/utilities/environment.util");
|
|
22
|
+
const idempotency_key_entity_1 = require("../entities/idempotency.key.entity");
|
|
23
|
+
const idempotency_enum_1 = require("../enums/idempotency.enum");
|
|
24
|
+
const canonical_json_1 = require("../helpers/canonical.json");
|
|
25
|
+
const system_property_service_1 = require("./system.property.service");
|
|
26
|
+
let IdempotencyService = class IdempotencyService {
|
|
27
|
+
constructor(systemPropertyService, dataSource) {
|
|
28
|
+
this.systemPropertyService = systemPropertyService;
|
|
29
|
+
this.dataSource = dataSource;
|
|
30
|
+
this.propertyCache = new Map();
|
|
31
|
+
}
|
|
32
|
+
async claim(manager, input) {
|
|
33
|
+
const requestHash = this.hash(input.payload);
|
|
34
|
+
const [ttlMinutes, lockTimeoutMs] = await Promise.all([
|
|
35
|
+
this.ttlMinutes(),
|
|
36
|
+
this.lockTimeoutMs(),
|
|
37
|
+
]);
|
|
38
|
+
await this.setLockTimeout(manager, `${lockTimeoutMs}ms`);
|
|
39
|
+
try {
|
|
40
|
+
return await this.attempt(manager, input, requestHash, ttlMinutes);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
if (this.isLockTimeout(error))
|
|
44
|
+
throw idempotency_exception_1.IdempotencyException.inProgress();
|
|
45
|
+
throw error;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
async complete(manager, claim, sourceId) {
|
|
49
|
+
const row = typeof claim === 'string'
|
|
50
|
+
? await manager.findOneByOrFail(idempotency_key_entity_1.IdempotencyKeyEntity, { id: claim })
|
|
51
|
+
: claim;
|
|
52
|
+
row.source_id = sourceId;
|
|
53
|
+
await manager.save(row);
|
|
54
|
+
}
|
|
55
|
+
hash(payload) {
|
|
56
|
+
return (0, crypto_1.createHash)(idempotency_enum_1.IdempotencyDefault.HASH_ALGORITHM)
|
|
57
|
+
.update((0, canonical_json_1.canonicalJson)(payload))
|
|
58
|
+
.digest('hex');
|
|
59
|
+
}
|
|
60
|
+
async purgeExpired() {
|
|
61
|
+
let removed = 0;
|
|
62
|
+
for (let batch = 0; batch < Number(idempotency_enum_1.IdempotencyLimit.PURGE_MAX_BATCHES); batch++) {
|
|
63
|
+
const count = await this.connection.transaction(async (trx) => {
|
|
64
|
+
const expired = await trx.find(idempotency_key_entity_1.IdempotencyKeyEntity, {
|
|
65
|
+
where: { expires_at: (0, typeorm_1.LessThan)(new Date()) },
|
|
66
|
+
order: { expires_at: 'ASC' },
|
|
67
|
+
take: Number(idempotency_enum_1.IdempotencyLimit.PURGE_BATCH_SIZE),
|
|
68
|
+
});
|
|
69
|
+
if (expired.length)
|
|
70
|
+
await trx.remove(expired);
|
|
71
|
+
return expired.length;
|
|
72
|
+
});
|
|
73
|
+
removed += count;
|
|
74
|
+
if (count < Number(idempotency_enum_1.IdempotencyLimit.PURGE_BATCH_SIZE))
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
return removed;
|
|
78
|
+
}
|
|
79
|
+
async ttlMinutes() {
|
|
80
|
+
return this.property(idempotency_enum_1.IdempotencyDefault.TTL_PROPERTY, idempotency_enum_1.IdempotencyLimit.TTL_MINUTES, idempotency_enum_1.IdempotencyLimit.TTL_MIN_MINUTES, idempotency_enum_1.IdempotencyLimit.TTL_MAX_MINUTES);
|
|
81
|
+
}
|
|
82
|
+
async lockTimeoutMs() {
|
|
83
|
+
return this.property(idempotency_enum_1.IdempotencyDefault.LOCK_TIMEOUT_PROPERTY, idempotency_enum_1.IdempotencyLimit.LOCK_TIMEOUT_MS, idempotency_enum_1.IdempotencyLimit.LOCK_TIMEOUT_MIN_MS, idempotency_enum_1.IdempotencyLimit.LOCK_TIMEOUT_MAX_MS);
|
|
84
|
+
}
|
|
85
|
+
async attempt(manager, input, requestHash, ttlMinutes) {
|
|
86
|
+
for (let attempt = 1;; attempt++) {
|
|
87
|
+
const claim = await this.insert(manager, input, requestHash, ttlMinutes);
|
|
88
|
+
if (claim)
|
|
89
|
+
return {
|
|
90
|
+
status: idempotency_enum_1.IdempotencyClaimStatus.CLAIMED,
|
|
91
|
+
claimId: claim.id,
|
|
92
|
+
claim,
|
|
93
|
+
};
|
|
94
|
+
const retry = attempt < Number(idempotency_enum_1.IdempotencyLimit.CLAIM_ATTEMPTS);
|
|
95
|
+
const existing = await this.findExisting(manager, input);
|
|
96
|
+
if (!existing) {
|
|
97
|
+
if (retry)
|
|
98
|
+
continue;
|
|
99
|
+
throw idempotency_exception_1.IdempotencyException.inProgress();
|
|
100
|
+
}
|
|
101
|
+
if (retry && existing.expires_at.getTime() <= Date.now()) {
|
|
102
|
+
await manager.remove(existing);
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (existing.request_hash !== requestHash)
|
|
106
|
+
throw idempotency_exception_1.IdempotencyException.keyReused();
|
|
107
|
+
if (!existing.source_id)
|
|
108
|
+
throw idempotency_exception_1.IdempotencyException.inProgress();
|
|
109
|
+
return {
|
|
110
|
+
status: idempotency_enum_1.IdempotencyClaimStatus.REPLAY,
|
|
111
|
+
sourceId: existing.source_id,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
async insert(manager, input, requestHash, ttlMinutes) {
|
|
116
|
+
const claim = new idempotency_key_entity_1.IdempotencyKeyEntity();
|
|
117
|
+
claim.tenant_id = input.tenantId;
|
|
118
|
+
claim.user_id = input.userId;
|
|
119
|
+
claim.source_type = input.sourceType;
|
|
120
|
+
claim.key = input.key;
|
|
121
|
+
claim.request_hash = requestHash;
|
|
122
|
+
claim.expires_at = new Date(Date.now() + ttlMinutes * idempotency_enum_1.IdempotencyLimit.MS_PER_MINUTE);
|
|
123
|
+
try {
|
|
124
|
+
await manager.transaction((nested) => nested.save(claim));
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
if (this.isUniqueViolation(error))
|
|
128
|
+
return null;
|
|
129
|
+
throw error;
|
|
130
|
+
}
|
|
131
|
+
return claim;
|
|
132
|
+
}
|
|
133
|
+
findExisting(manager, input) {
|
|
134
|
+
return manager
|
|
135
|
+
.createQueryBuilder(idempotency_key_entity_1.IdempotencyKeyEntity, 'k')
|
|
136
|
+
.where(`coalesce(k.tenant_id, '${idempotency_enum_1.IdempotencyDefault.NO_TENANT}'::uuid) = CAST(:tenant AS uuid)`, { tenant: input.tenantId ?? idempotency_enum_1.IdempotencyDefault.NO_TENANT })
|
|
137
|
+
.andWhere('k.source_type = :sourceType', {
|
|
138
|
+
sourceType: input.sourceType,
|
|
139
|
+
})
|
|
140
|
+
.andWhere('k.key = :key', { key: input.key })
|
|
141
|
+
.getOne();
|
|
142
|
+
}
|
|
143
|
+
async setLockTimeout(manager, value) {
|
|
144
|
+
await manager.query(`SELECT set_config('${idempotency_enum_1.IdempotencyDefault.LOCK_TIMEOUT_SETTING}', $1, true)`, [value]);
|
|
145
|
+
}
|
|
146
|
+
isUniqueViolation(error) {
|
|
147
|
+
return (error instanceof typeorm_1.QueryFailedError &&
|
|
148
|
+
error.driverError?.code ===
|
|
149
|
+
String(idempotency_enum_1.IdempotencyDefault.UNIQUE_VIOLATION_CODE));
|
|
150
|
+
}
|
|
151
|
+
isLockTimeout(error) {
|
|
152
|
+
return (error instanceof typeorm_1.QueryFailedError &&
|
|
153
|
+
error.driverError?.code ===
|
|
154
|
+
String(idempotency_enum_1.IdempotencyDefault.LOCK_NOT_AVAILABLE_CODE));
|
|
155
|
+
}
|
|
156
|
+
async property(identifier, fallback, min, max) {
|
|
157
|
+
const hit = this.propertyCache.get(identifier);
|
|
158
|
+
if (hit && hit.expiresAt > Date.now())
|
|
159
|
+
return hit.value;
|
|
160
|
+
const raw = await this.systemPropertyService.get(identifier);
|
|
161
|
+
const value = (0, environment_util_1.envInt)(raw ?? undefined, fallback, { min, max });
|
|
162
|
+
this.propertyCache.set(identifier, {
|
|
163
|
+
value,
|
|
164
|
+
expiresAt: Date.now() + Number(idempotency_enum_1.IdempotencyLimit.PROPERTY_CACHE_MS),
|
|
165
|
+
});
|
|
166
|
+
return value;
|
|
167
|
+
}
|
|
168
|
+
get connection() {
|
|
169
|
+
if (!this.dataSource)
|
|
170
|
+
throw new operation_exception_1.OperationException('IdempotencyService requires TypeOrmModule to be configured with a data source');
|
|
171
|
+
return this.dataSource;
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
exports.IdempotencyService = IdempotencyService;
|
|
175
|
+
exports.IdempotencyService = IdempotencyService = __decorate([
|
|
176
|
+
(0, common_1.Injectable)(),
|
|
177
|
+
__param(1, (0, common_1.Optional)()),
|
|
178
|
+
__metadata("design:paramtypes", [system_property_service_1.SystemPropertyService,
|
|
179
|
+
typeorm_1.DataSource])
|
|
180
|
+
], IdempotencyService);
|
|
181
|
+
//# sourceMappingURL=idempotency.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idempotency.service.js","sourceRoot":"","sources":["../../../src/common/services/idempotency.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { DataSource } from 'typeorm';
|
|
2
|
+
import { PaginatedResult } from '../types/paginated.result.types';
|
|
3
|
+
import type { RecordHistoryChange, RecordHistoryEntry, RecordHistoryFilter, RecordHistoryOptions, RecordHistorySource } from '../types/record.history.types';
|
|
4
|
+
export declare class RecordHistoryService {
|
|
5
|
+
private readonly dataSource?;
|
|
6
|
+
constructor(dataSource?: DataSource);
|
|
7
|
+
log(source: RecordHistorySource, before: object | null, after: object | null, actorId: string | null, options?: RecordHistoryOptions): Promise<void>;
|
|
8
|
+
history(sourceType: string, sourceId: string, filter?: RecordHistoryFilter): Promise<PaginatedResult<RecordHistoryEntry>>;
|
|
9
|
+
diff(before: object | null, after: object | null, options?: RecordHistoryOptions): RecordHistoryChange[];
|
|
10
|
+
private skippedFields;
|
|
11
|
+
private metadataOf;
|
|
12
|
+
private isRelation;
|
|
13
|
+
private toEntry;
|
|
14
|
+
private get connection();
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=record.history.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record.history.service.d.ts","sourceRoot":"","sources":["../../../src/common/services/record.history.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAkB,MAAM,SAAS,CAAC;AAUrD,OAAO,EACL,eAAe,EAGhB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EAEpB,mBAAmB,EAEpB,MAAM,+BAA+B,CAAC;AAOvC,qBACa,oBAAoB;IACP,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAAX,UAAU,CAAC,EAAE,UAAU;IAG1D,GAAG,CACP,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC;IA0BV,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC;IA4C/C,IAAI,CACF,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,OAAO,GAAE,oBAAyB,GACjC,mBAAmB,EAAE;IAexB,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,OAAO;IAkBf,OAAO,KAAK,UAAU,GAMrB;CACF"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.RecordHistoryService = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const typeorm_1 = require("typeorm");
|
|
18
|
+
const admin_user_entity_1 = require("../../auth/entities/admin.user.entity");
|
|
19
|
+
const user_entity_1 = require("../../auth/entities/user.entity");
|
|
20
|
+
const operation_exception_1 = require("../../global/exceptions/operation.exception");
|
|
21
|
+
const root_entity_1 = require("../entities/root.entity");
|
|
22
|
+
const system_audit_log_entity_1 = require("../entities/system.audit.log.entity");
|
|
23
|
+
const audit_action_enum_1 = require("../enums/audit.action.enum");
|
|
24
|
+
const constant_pair_1 = require("../helpers/constant.pair");
|
|
25
|
+
const record_history_enum_1 = require("../enums/record.history.enum");
|
|
26
|
+
const canonical_json_1 = require("../helpers/canonical.json");
|
|
27
|
+
const paginated_result_types_1 = require("../types/paginated.result.types");
|
|
28
|
+
let RecordHistoryService = class RecordHistoryService {
|
|
29
|
+
constructor(dataSource) {
|
|
30
|
+
this.dataSource = dataSource;
|
|
31
|
+
}
|
|
32
|
+
async log(source, before, after, actorId, options = {}) {
|
|
33
|
+
const changes = this.diff(before, after, options);
|
|
34
|
+
if (!changes.length)
|
|
35
|
+
return;
|
|
36
|
+
const oldValue = {};
|
|
37
|
+
const newValue = {};
|
|
38
|
+
for (const change of changes) {
|
|
39
|
+
oldValue[change.field] = change.from;
|
|
40
|
+
newValue[change.field] = change.to;
|
|
41
|
+
}
|
|
42
|
+
const manager = options.manager ?? this.connection.manager;
|
|
43
|
+
await manager.insert(system_audit_log_entity_1.SystemAuditLogEntity, {
|
|
44
|
+
source_type: source.sourceType,
|
|
45
|
+
source_id: source.sourceId,
|
|
46
|
+
action_id: constant_pair_1.ConstantPair.id(audit_action_enum_1.AuditAction, audit_action_enum_1.AuditActionId, options.action ?? audit_action_enum_1.AuditAction.UPDATE),
|
|
47
|
+
user_id: actorId,
|
|
48
|
+
old_value: oldValue,
|
|
49
|
+
new_value: newValue,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
async history(sourceType, sourceId, filter) {
|
|
53
|
+
const { page, limit } = (0, paginated_result_types_1.clampPagination)(filter);
|
|
54
|
+
const filtered = this.connection
|
|
55
|
+
.createQueryBuilder(system_audit_log_entity_1.SystemAuditLogEntity, 'log')
|
|
56
|
+
.where('log.source_type = :sourceType', { sourceType })
|
|
57
|
+
.andWhere('log.source_id = :sourceId', { sourceId })
|
|
58
|
+
.andWhere('log.deleted_at IS NULL');
|
|
59
|
+
const [rows, total] = await Promise.all([
|
|
60
|
+
filtered
|
|
61
|
+
.clone()
|
|
62
|
+
.leftJoin(user_entity_1.UserEntity, 'actor_user', 'actor_user.id = log.user_id')
|
|
63
|
+
.leftJoin(admin_user_entity_1.AdminUserEntity, 'actor_admin', 'actor_admin.id = log.user_id')
|
|
64
|
+
.leftJoin('log.action', 'action')
|
|
65
|
+
.select('log.id', 'id')
|
|
66
|
+
.addSelect('action.identifier', 'action')
|
|
67
|
+
.addSelect('log.user_id', 'user_id')
|
|
68
|
+
.addSelect('coalesce(actor_user.full_name, actor_admin.name)', 'user_name')
|
|
69
|
+
.addSelect('log.old_value', 'old_value')
|
|
70
|
+
.addSelect('log.new_value', 'new_value')
|
|
71
|
+
.addSelect('log.created_at', 'created_at')
|
|
72
|
+
.orderBy('log.created_at', 'DESC')
|
|
73
|
+
.addOrderBy('log.sn', 'DESC')
|
|
74
|
+
.offset((page - 1) * limit)
|
|
75
|
+
.limit(limit)
|
|
76
|
+
.getRawMany(),
|
|
77
|
+
filtered.getCount(),
|
|
78
|
+
]);
|
|
79
|
+
return (0, paginated_result_types_1.buildPaginated)(rows.map((row) => this.toEntry(row)), total, page, limit);
|
|
80
|
+
}
|
|
81
|
+
diff(before, after, options = {}) {
|
|
82
|
+
const from = (before ?? {});
|
|
83
|
+
const to = (after ?? {});
|
|
84
|
+
const skipped = this.skippedFields(before, after, options);
|
|
85
|
+
const fields = new Set([...Object.keys(from), ...Object.keys(to)]);
|
|
86
|
+
const changes = [];
|
|
87
|
+
for (const field of fields) {
|
|
88
|
+
if (skipped.has(field))
|
|
89
|
+
continue;
|
|
90
|
+
if (this.isRelation(from[field]) || this.isRelation(to[field]))
|
|
91
|
+
continue;
|
|
92
|
+
if ((0, canonical_json_1.canonicalJson)(from[field]) === (0, canonical_json_1.canonicalJson)(to[field]))
|
|
93
|
+
continue;
|
|
94
|
+
changes.push({ field, from: from[field], to: to[field] });
|
|
95
|
+
}
|
|
96
|
+
return changes;
|
|
97
|
+
}
|
|
98
|
+
skippedFields(before, after, options) {
|
|
99
|
+
const skipped = new Set([
|
|
100
|
+
...record_history_enum_1.RECORD_HISTORY_SKIPPED_FIELDS,
|
|
101
|
+
...(options.skip ?? []),
|
|
102
|
+
]);
|
|
103
|
+
const metadata = this.metadataOf(options, options.entity ?? after?.constructor ?? before?.constructor);
|
|
104
|
+
if (metadata) {
|
|
105
|
+
for (const column of metadata.columns)
|
|
106
|
+
if (column.isSelect === false)
|
|
107
|
+
skipped.add(column.propertyName);
|
|
108
|
+
for (const relation of metadata.relations)
|
|
109
|
+
skipped.add(relation.propertyName);
|
|
110
|
+
}
|
|
111
|
+
return skipped;
|
|
112
|
+
}
|
|
113
|
+
metadataOf(options, target) {
|
|
114
|
+
const connection = options.manager?.connection ?? this.dataSource;
|
|
115
|
+
if (!target || !connection?.hasMetadata(target))
|
|
116
|
+
return null;
|
|
117
|
+
return connection.getMetadata(target);
|
|
118
|
+
}
|
|
119
|
+
isRelation(value) {
|
|
120
|
+
if (Array.isArray(value))
|
|
121
|
+
return value.length > 0 && value.every((item) => this.isRelation(item));
|
|
122
|
+
return value instanceof root_entity_1.RootEntity;
|
|
123
|
+
}
|
|
124
|
+
toEntry(row) {
|
|
125
|
+
const from = row.old_value ?? {};
|
|
126
|
+
const to = row.new_value ?? {};
|
|
127
|
+
const fields = new Set([...Object.keys(from), ...Object.keys(to)]);
|
|
128
|
+
return {
|
|
129
|
+
id: row.id,
|
|
130
|
+
action: row.action,
|
|
131
|
+
user_id: row.user_id,
|
|
132
|
+
user_name: row.user_name,
|
|
133
|
+
changes: [...fields].map((field) => ({
|
|
134
|
+
field,
|
|
135
|
+
from: from[field] ?? null,
|
|
136
|
+
to: to[field] ?? null,
|
|
137
|
+
})),
|
|
138
|
+
created_at: row.created_at,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
get connection() {
|
|
142
|
+
if (!this.dataSource)
|
|
143
|
+
throw new operation_exception_1.OperationException('RecordHistoryService requires TypeOrmModule to be configured with a data source');
|
|
144
|
+
return this.dataSource;
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
exports.RecordHistoryService = RecordHistoryService;
|
|
148
|
+
exports.RecordHistoryService = RecordHistoryService = __decorate([
|
|
149
|
+
(0, common_1.Injectable)(),
|
|
150
|
+
__param(0, (0, common_1.Optional)()),
|
|
151
|
+
__metadata("design:paramtypes", [typeorm_1.DataSource])
|
|
152
|
+
], RecordHistoryService);
|
|
153
|
+
//# sourceMappingURL=record.history.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record.history.service.js","sourceRoot":"","sources":["../../../src/common/services/record.history.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAsD;AACtD,qCAAqD;AACrD,6EAAwE;AACxE,iEAA6D;AAC7D,qFAAiF;AACjF,yDAAqD;AACrD,iFAA2E;AAC3E,kEAAwE;AACxE,4DAAwD;AACxD,sEAA6E;AAC7E,8DAA0D;AAC1D,4EAIyC;AAiBlC,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,YAAyC,UAAuB;QAAvB,eAAU,GAAV,UAAU,CAAa;IAAG,CAAC;IAGpE,KAAK,CAAC,GAAG,CACP,MAA2B,EAC3B,MAAqB,EACrB,KAAoB,EACpB,OAAsB,EACtB,UAAgC,EAAE;QAElC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO;QAE5B,MAAM,QAAQ,GAAsC,EAAE,CAAC;QACvD,MAAM,QAAQ,GAAsC,EAAE,CAAC;QACvD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;YACrC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;QACrC,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAC3D,MAAM,OAAO,CAAC,MAAM,CAAC,8CAAoB,EAAE;YACzC,WAAW,EAAE,MAAM,CAAC,UAAU;YAC9B,SAAS,EAAE,MAAM,CAAC,QAAQ;YAC1B,SAAS,EAAE,4BAAY,CAAC,EAAE,CACxB,+BAAW,EACX,iCAAa,EACb,OAAO,CAAC,MAAM,IAAI,+BAAW,CAAC,MAAM,CACrC;YACD,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE,QAAQ;YACnB,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAC;IACL,CAAC;IAGD,KAAK,CAAC,OAAO,CACX,UAAkB,EAClB,QAAgB,EAChB,MAA4B;QAE5B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAA,wCAAe,EAAC,MAAM,CAAC,CAAC;QAEhD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU;aAC7B,kBAAkB,CAAC,8CAAoB,EAAE,KAAK,CAAC;aAC/C,KAAK,CAAC,+BAA+B,EAAE,EAAE,UAAU,EAAE,CAAC;aACtD,QAAQ,CAAC,2BAA2B,EAAE,EAAE,QAAQ,EAAE,CAAC;aACnD,QAAQ,CAAC,wBAAwB,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACtC,QAAQ;iBACL,KAAK,EAAE;iBACP,QAAQ,CAAC,wBAAU,EAAE,YAAY,EAAE,6BAA6B,CAAC;iBACjE,QAAQ,CACP,mCAAe,EACf,aAAa,EACb,8BAA8B,CAC/B;iBACA,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC;iBAChC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC;iBACtB,SAAS,CAAC,mBAAmB,EAAE,QAAQ,CAAC;iBACxC,SAAS,CAAC,aAAa,EAAE,SAAS,CAAC;iBACnC,SAAS,CACR,kDAAkD,EAClD,WAAW,CACZ;iBACA,SAAS,CAAC,eAAe,EAAE,WAAW,CAAC;iBACvC,SAAS,CAAC,eAAe,EAAE,WAAW,CAAC;iBACvC,SAAS,CAAC,gBAAgB,EAAE,YAAY,CAAC;iBACzC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC;iBACjC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC;iBAC5B,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;iBAC1B,KAAK,CAAC,KAAK,CAAC;iBACZ,UAAU,EAAoB;YACjC,QAAQ,CAAC,QAAQ,EAAE;SACpB,CAAC,CAAC;QACH,OAAO,IAAA,uCAAc,EACnB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EACpC,KAAK,EACL,IAAI,EACJ,KAAK,CACN,CAAC;IACJ,CAAC;IAGD,IAAI,CACF,MAAqB,EACrB,KAAoB,EACpB,UAAgC,EAAE;QAElC,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE,CAAwB,CAAC;QACnD,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAwB,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACnE,MAAM,OAAO,GAA0B,EAAE,CAAC;QAC1C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,SAAS;YACjC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;gBAAE,SAAS;YACzE,IAAI,IAAA,8BAAa,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,IAAA,8BAAa,EAAC,EAAE,CAAC,KAAK,CAAC,CAAC;gBAAE,SAAS;YACtE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,aAAa,CACnB,MAAqB,EACrB,KAAoB,EACpB,OAA6B;QAE7B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC;YACtB,GAAG,mDAA6B;YAChC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;SACxB,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAC9B,OAAO,EACP,OAAO,CAAC,MAAM,IAAI,KAAK,EAAE,WAAW,IAAI,MAAM,EAAE,WAAW,CAC5D,CAAC;QACF,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO;gBACnC,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK;oBAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAClE,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,SAAS;gBACvC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,UAAU,CAChB,OAA6B,EAC7B,MAAsC;QAEtC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC;QAClE,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7D,OAAO,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAGO,UAAU,CAAC,KAAc;QAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACtB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1E,OAAO,KAAK,YAAY,wBAAU,CAAC;IACrC,CAAC;IAEO,OAAO,CAAC,GAAqB;QACnC,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;QACjC,MAAM,EAAE,GAAG,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACnE,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACnC,KAAK;gBACL,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI;gBACzB,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI;aACtB,CAAC,CAAC;YACH,UAAU,EAAE,GAAG,CAAC,UAAU;SAC3B,CAAC;IACJ,CAAC;IAED,IAAY,UAAU;QACpB,IAAI,CAAC,IAAI,CAAC,UAAU;YAClB,MAAM,IAAI,wCAAkB,CAC1B,iFAAiF,CAClF,CAAC;QACJ,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;CACF,CAAA;AAtKY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;IAEE,WAAA,IAAA,iBAAQ,GAAE,CAAA;qCAA+B,oBAAU;GADrD,oBAAoB,CAsKhC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ModuleRef } from '@nestjs/core';
|
|
2
|
+
import { DataSource } from 'typeorm';
|
|
3
|
+
import type { SystemConstantView } from '../types/system.constant.types';
|
|
4
|
+
export declare class SystemConstantService {
|
|
5
|
+
private readonly moduleRef;
|
|
6
|
+
private readonly dataSource?;
|
|
7
|
+
private catalogue;
|
|
8
|
+
private loading;
|
|
9
|
+
private generation;
|
|
10
|
+
constructor(moduleRef: ModuleRef, dataSource?: DataSource);
|
|
11
|
+
id(typeIdentifier: string, constantIdentifier: string): Promise<string>;
|
|
12
|
+
resolve(id: string): Promise<SystemConstantView | null>;
|
|
13
|
+
list(typeIdentifier: string): Promise<SystemConstantView[]>;
|
|
14
|
+
assertOfType(id: string, typeIdentifier: string): Promise<void>;
|
|
15
|
+
invalidate(): void;
|
|
16
|
+
private load;
|
|
17
|
+
private fetch;
|
|
18
|
+
private compare;
|
|
19
|
+
private ttlMs;
|
|
20
|
+
private properties;
|
|
21
|
+
private key;
|
|
22
|
+
private get connection();
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=system.constant.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system.constant.service.d.ts","sourceRoot":"","sources":["../../../src/common/services/system.constant.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AASrC,OAAO,KAAK,EAEV,kBAAkB,EACnB,MAAM,gCAAgC,CAAC;AAOxC,qBACa,qBAAqB;IAO9B,OAAO,CAAC,QAAQ,CAAC,SAAS;IACd,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAP1C,OAAO,CAAC,SAAS,CAAwC;IACzD,OAAO,CAAC,OAAO,CAAiD;IAEhE,OAAO,CAAC,UAAU,CAAK;gBAGJ,SAAS,EAAE,SAAS,EACR,UAAU,CAAC,EAAE,UAAU;IAIhD,EAAE,CACN,cAAc,EAAE,MAAM,EACtB,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAAC,MAAM,CAAC;IAYZ,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAKvD,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAS3D,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrE,UAAU,IAAI,IAAI;YAMJ,IAAI;YAkBJ,KAAK;IAmCnB,OAAO,CAAC,OAAO;YAaD,KAAK;IAgBnB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,GAAG;IAIX,OAAO,KAAK,UAAU,GAIrB;CACF"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.SystemConstantService = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const core_1 = require("@nestjs/core");
|
|
18
|
+
const typeorm_1 = require("typeorm");
|
|
19
|
+
const operation_exception_1 = require("../../global/exceptions/operation.exception");
|
|
20
|
+
const environment_util_1 = require("../../global/utilities/environment.util");
|
|
21
|
+
const system_constant_entity_1 = require("../entities/system.constant.entity");
|
|
22
|
+
const system_constant_enum_1 = require("../enums/system.constant.enum");
|
|
23
|
+
const system_property_service_1 = require("./system.property.service");
|
|
24
|
+
let SystemConstantService = class SystemConstantService {
|
|
25
|
+
constructor(moduleRef, dataSource) {
|
|
26
|
+
this.moduleRef = moduleRef;
|
|
27
|
+
this.dataSource = dataSource;
|
|
28
|
+
this.catalogue = null;
|
|
29
|
+
this.loading = null;
|
|
30
|
+
this.generation = 0;
|
|
31
|
+
}
|
|
32
|
+
async id(typeIdentifier, constantIdentifier) {
|
|
33
|
+
const catalogue = await this.load();
|
|
34
|
+
const id = catalogue.byKey.get(this.key(typeIdentifier, constantIdentifier));
|
|
35
|
+
if (!id)
|
|
36
|
+
throw new operation_exception_1.OperationException(`${system_constant_enum_1.SystemConstantMessage.NOT_SEEDED}: ${typeIdentifier} / ${constantIdentifier}`);
|
|
37
|
+
return id;
|
|
38
|
+
}
|
|
39
|
+
async resolve(id) {
|
|
40
|
+
return (await this.load()).byId.get(id) ?? null;
|
|
41
|
+
}
|
|
42
|
+
async list(typeIdentifier) {
|
|
43
|
+
const catalogue = await this.load();
|
|
44
|
+
return (catalogue.byType.get(typeIdentifier) ?? []).flatMap((id) => {
|
|
45
|
+
const view = catalogue.byId.get(id);
|
|
46
|
+
return view ? [view] : [];
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
async assertOfType(id, typeIdentifier) {
|
|
50
|
+
const constant = await this.resolve(id);
|
|
51
|
+
if (constant?.type_identifier !== typeIdentifier)
|
|
52
|
+
throw new common_1.BadRequestException(system_constant_enum_1.SystemConstantMessage.WRONG_TYPE);
|
|
53
|
+
}
|
|
54
|
+
invalidate() {
|
|
55
|
+
this.generation += 1;
|
|
56
|
+
this.catalogue = null;
|
|
57
|
+
this.loading = null;
|
|
58
|
+
}
|
|
59
|
+
async load() {
|
|
60
|
+
const current = this.catalogue;
|
|
61
|
+
if (current && Date.now() - current.loadedAt < current.ttlMs)
|
|
62
|
+
return current;
|
|
63
|
+
const generation = this.generation;
|
|
64
|
+
let loading = this.loading;
|
|
65
|
+
if (loading === null) {
|
|
66
|
+
const started = this.fetch().finally(() => {
|
|
67
|
+
if (this.loading === started)
|
|
68
|
+
this.loading = null;
|
|
69
|
+
});
|
|
70
|
+
this.loading = started;
|
|
71
|
+
loading = started;
|
|
72
|
+
}
|
|
73
|
+
const catalogue = await loading;
|
|
74
|
+
if (generation === this.generation)
|
|
75
|
+
this.catalogue = catalogue;
|
|
76
|
+
return catalogue;
|
|
77
|
+
}
|
|
78
|
+
async fetch() {
|
|
79
|
+
const [rows, ttlMs] = await Promise.all([
|
|
80
|
+
this.connection.getRepository(system_constant_entity_1.SystemConstantEntity).find({
|
|
81
|
+
relations: { type: true },
|
|
82
|
+
}),
|
|
83
|
+
this.ttlMs(),
|
|
84
|
+
]);
|
|
85
|
+
const live = rows
|
|
86
|
+
.filter((row) => row.type && !row.type.deleted_at)
|
|
87
|
+
.sort((left, right) => this.compare(left, right));
|
|
88
|
+
const catalogue = {
|
|
89
|
+
byId: new Map(),
|
|
90
|
+
byKey: new Map(),
|
|
91
|
+
byType: new Map(),
|
|
92
|
+
loadedAt: Date.now(),
|
|
93
|
+
ttlMs,
|
|
94
|
+
};
|
|
95
|
+
for (const row of live) {
|
|
96
|
+
const typeIdentifier = row.type.identifier;
|
|
97
|
+
catalogue.byId.set(row.id, {
|
|
98
|
+
id: row.id,
|
|
99
|
+
type_identifier: typeIdentifier,
|
|
100
|
+
identifier: row.identifier,
|
|
101
|
+
name: row.name,
|
|
102
|
+
value: row.value ?? null,
|
|
103
|
+
is_system: row.is_system,
|
|
104
|
+
});
|
|
105
|
+
catalogue.byKey.set(this.key(typeIdentifier, row.identifier), row.id);
|
|
106
|
+
const ids = catalogue.byType.get(typeIdentifier) ?? [];
|
|
107
|
+
ids.push(row.id);
|
|
108
|
+
catalogue.byType.set(typeIdentifier, ids);
|
|
109
|
+
}
|
|
110
|
+
return catalogue;
|
|
111
|
+
}
|
|
112
|
+
compare(left, right) {
|
|
113
|
+
const order = (row) => {
|
|
114
|
+
const value = Number(row.attributes?.[system_constant_enum_1.SystemConstantDefault.SORT_ORDER_ATTRIBUTE]);
|
|
115
|
+
return Number.isFinite(value) ? value : Number.MAX_SAFE_INTEGER;
|
|
116
|
+
};
|
|
117
|
+
return order(left) - order(right) || left.name.localeCompare(right.name);
|
|
118
|
+
}
|
|
119
|
+
async ttlMs() {
|
|
120
|
+
const value = await this.properties()?.get(system_constant_enum_1.SystemConstantDefault.CACHE_TTL_PROPERTY);
|
|
121
|
+
const seconds = (0, environment_util_1.envInt)(value ?? undefined, system_constant_enum_1.SystemConstantBound.CACHE_TTL_SECONDS, {
|
|
122
|
+
min: system_constant_enum_1.SystemConstantBound.CACHE_TTL_MIN_SECONDS,
|
|
123
|
+
max: system_constant_enum_1.SystemConstantBound.CACHE_TTL_MAX_SECONDS,
|
|
124
|
+
});
|
|
125
|
+
return seconds * system_constant_enum_1.SystemConstantBound.MS_PER_SECOND;
|
|
126
|
+
}
|
|
127
|
+
properties() {
|
|
128
|
+
try {
|
|
129
|
+
return this.moduleRef.get(system_property_service_1.SystemPropertyService, { strict: false });
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
key(typeIdentifier, constantIdentifier) {
|
|
136
|
+
return `${typeIdentifier}:${constantIdentifier}`;
|
|
137
|
+
}
|
|
138
|
+
get connection() {
|
|
139
|
+
if (!this.dataSource)
|
|
140
|
+
throw new operation_exception_1.OperationException(system_constant_enum_1.SystemConstantMessage.NO_DATA_SOURCE);
|
|
141
|
+
return this.dataSource;
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
exports.SystemConstantService = SystemConstantService;
|
|
145
|
+
exports.SystemConstantService = SystemConstantService = __decorate([
|
|
146
|
+
(0, common_1.Injectable)(),
|
|
147
|
+
__param(1, (0, common_1.Optional)()),
|
|
148
|
+
__metadata("design:paramtypes", [core_1.ModuleRef,
|
|
149
|
+
typeorm_1.DataSource])
|
|
150
|
+
], SystemConstantService);
|
|
151
|
+
//# sourceMappingURL=system.constant.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system.constant.service.js","sourceRoot":"","sources":["../../../src/common/services/system.constant.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system.property.module.d.ts","sourceRoot":"","sources":["../../src/common/system.property.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAoB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"system.property.module.d.ts","sourceRoot":"","sources":["../../src/common/system.property.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAoB,MAAM,gBAAgB,CAAC;AAQjE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AACjF,YAAY,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAuCjF,qBAKa,oBAAoB;IAC/B,MAAM,CAAC,QAAQ,CAAC,OAAO,GAAE,2BAAgC,GAAG,aAAa;CAQ1E"}
|
|
@@ -14,6 +14,7 @@ const common_module_1 = require("./common.module");
|
|
|
14
14
|
const cache_service_1 = require("./services/cache.service");
|
|
15
15
|
const encryption_service_1 = require("./services/encryption.service");
|
|
16
16
|
const system_property_service_1 = require("./services/system.property.service");
|
|
17
|
+
const idempotency_service_1 = require("./services/idempotency.service");
|
|
17
18
|
function createSystemPropertyProviders(options = {}) {
|
|
18
19
|
return [
|
|
19
20
|
{
|
|
@@ -25,6 +26,14 @@ function createSystemPropertyProviders(options = {}) {
|
|
|
25
26
|
cache_service_1.CacheService,
|
|
26
27
|
],
|
|
27
28
|
},
|
|
29
|
+
{
|
|
30
|
+
provide: idempotency_service_1.IdempotencyService,
|
|
31
|
+
useFactory: (systemPropertyService, dataSource) => new idempotency_service_1.IdempotencyService(systemPropertyService, dataSource),
|
|
32
|
+
inject: [
|
|
33
|
+
system_property_service_1.SystemPropertyService,
|
|
34
|
+
(0, typeorm_1.getDataSourceToken)(options.dataSourceName),
|
|
35
|
+
],
|
|
36
|
+
},
|
|
28
37
|
];
|
|
29
38
|
}
|
|
30
39
|
let SystemPropertyModule = SystemPropertyModule_1 = class SystemPropertyModule {
|
|
@@ -33,7 +42,7 @@ let SystemPropertyModule = SystemPropertyModule_1 = class SystemPropertyModule {
|
|
|
33
42
|
module: SystemPropertyModule_1,
|
|
34
43
|
imports: [common_module_1.CommonModule],
|
|
35
44
|
providers: createSystemPropertyProviders(options),
|
|
36
|
-
exports: [system_property_service_1.SystemPropertyService],
|
|
45
|
+
exports: [system_property_service_1.SystemPropertyService, idempotency_service_1.IdempotencyService],
|
|
37
46
|
};
|
|
38
47
|
}
|
|
39
48
|
};
|
|
@@ -42,7 +51,7 @@ exports.SystemPropertyModule = SystemPropertyModule = SystemPropertyModule_1 = _
|
|
|
42
51
|
(0, common_1.Module)({
|
|
43
52
|
imports: [common_module_1.CommonModule],
|
|
44
53
|
providers: createSystemPropertyProviders(),
|
|
45
|
-
exports: [system_property_service_1.SystemPropertyService],
|
|
54
|
+
exports: [system_property_service_1.SystemPropertyService, idempotency_service_1.IdempotencyService],
|
|
46
55
|
})
|
|
47
56
|
], SystemPropertyModule);
|
|
48
57
|
//# sourceMappingURL=system.property.module.js.map
|