@rytass/bpm-core-nestjs-module 0.1.3 → 0.1.5
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/CHANGELOG.md +49 -0
- package/LICENSE +21 -0
- package/README.md +143 -0
- package/package.json +3 -3
- package/src/index.js +18 -0
- package/src/index.js.map +1 -0
- package/src/lib/attachment/attachment-options.d.ts +44 -0
- package/src/lib/attachment/attachment-options.js +62 -0
- package/src/lib/attachment/attachment-options.js.map +1 -0
- package/src/lib/attachment/attachment-storage.provider.d.ts +4 -0
- package/src/lib/attachment/attachment-storage.provider.js +35 -0
- package/src/lib/attachment/attachment-storage.provider.js.map +1 -0
- package/src/lib/attachment/{attachment-storage.token.ts → attachment-storage.token.d.ts} +1 -3
- package/src/lib/attachment/attachment-storage.token.js +5 -0
- package/src/lib/attachment/attachment-storage.token.js.map +1 -0
- package/src/lib/attachment/attachment.controller.d.ts +8 -0
- package/src/lib/attachment/attachment.controller.js +38 -0
- package/src/lib/attachment/attachment.controller.js.map +1 -0
- package/src/lib/attachment/attachment.entity.d.ts +14 -0
- package/src/lib/attachment/attachment.entity.js +74 -0
- package/src/lib/attachment/attachment.entity.js.map +1 -0
- package/src/lib/attachment/attachment.module.d.ts +27 -0
- package/src/lib/attachment/attachment.module.js +103 -0
- package/src/lib/attachment/attachment.module.js.map +1 -0
- package/src/lib/attachment/attachment.mutations.d.ts +8 -0
- package/src/lib/attachment/attachment.mutations.js +35 -0
- package/src/lib/attachment/attachment.mutations.js.map +1 -0
- package/src/lib/attachment/attachment.queries.d.ts +9 -0
- package/src/lib/attachment/attachment.queries.js +78 -0
- package/src/lib/attachment/attachment.queries.js.map +1 -0
- package/src/lib/attachment/attachment.service.d.ts +49 -0
- package/src/lib/attachment/attachment.service.js +276 -0
- package/src/lib/attachment/attachment.service.js.map +1 -0
- package/src/lib/attachment/dto/upload-attachment.input.d.ts +11 -0
- package/src/lib/attachment/dto/upload-attachment.input.js +68 -0
- package/src/lib/attachment/dto/upload-attachment.input.js.map +1 -0
- package/src/lib/attachment/index.js +9 -0
- package/src/lib/attachment/index.js.map +1 -0
- package/src/lib/bpm/bpm-root.module.d.ts +155 -0
- package/src/lib/bpm/bpm-root.module.js +170 -0
- package/src/lib/bpm/bpm-root.module.js.map +1 -0
- package/src/lib/bpm/index.js +5 -0
- package/src/lib/bpm/index.js.map +1 -0
- package/src/lib/bpm-auth/bpm-auth-context.d.ts +24 -0
- package/src/lib/bpm-auth/bpm-auth-context.extractor.d.ts +4 -0
- package/src/lib/bpm-auth/bpm-auth-context.extractor.js +69 -0
- package/src/lib/bpm-auth/bpm-auth-context.extractor.js.map +1 -0
- package/src/lib/bpm-auth/bpm-auth-context.js +15 -0
- package/src/lib/bpm-auth/bpm-auth-context.js.map +1 -0
- package/src/lib/bpm-auth/bpm-auth.authorization.d.ts +12 -0
- package/src/lib/bpm-auth/bpm-auth.authorization.js +67 -0
- package/src/lib/bpm-auth/bpm-auth.authorization.js.map +1 -0
- package/src/lib/bpm-auth/bpm-auth.decorators.d.ts +3 -0
- package/src/lib/bpm-auth/bpm-auth.decorators.js +11 -0
- package/src/lib/bpm-auth/bpm-auth.decorators.js.map +1 -0
- package/src/lib/bpm-auth/bpm-auth.guard.d.ts +7 -0
- package/src/lib/bpm-auth/bpm-auth.guard.js +24 -0
- package/src/lib/bpm-auth/bpm-auth.guard.js.map +1 -0
- package/src/lib/bpm-auth/bpm-auth.module.d.ts +6 -0
- package/src/lib/bpm-auth/bpm-auth.module.js +69 -0
- package/src/lib/bpm-auth/bpm-auth.module.js.map +1 -0
- package/src/lib/bpm-auth/bpm-auth.options.d.ts +11 -0
- package/src/lib/bpm-auth/bpm-auth.options.js +3 -0
- package/src/lib/bpm-auth/bpm-auth.options.js.map +1 -0
- package/src/lib/bpm-auth/configurable-bpm-auth-context.accessor.d.ts +10 -0
- package/src/lib/bpm-auth/configurable-bpm-auth-context.accessor.js +40 -0
- package/src/lib/bpm-auth/configurable-bpm-auth-context.accessor.js.map +1 -0
- package/src/lib/bpm-auth/index.js +10 -0
- package/src/lib/bpm-auth/index.js.map +1 -0
- package/src/lib/common/filters/all-exceptions.filter.d.ts +25 -0
- package/src/lib/common/filters/all-exceptions.filter.js +93 -0
- package/src/lib/common/filters/all-exceptions.filter.js.map +1 -0
- package/src/lib/common/index.js +5 -0
- package/src/lib/common/index.js.map +1 -0
- package/src/lib/common/iso-duration.d.ts +1 -0
- package/src/lib/common/iso-duration.js +27 -0
- package/src/lib/common/iso-duration.js.map +1 -0
- package/src/lib/condition/condition.module.d.ts +2 -0
- package/src/lib/condition/condition.module.js +16 -0
- package/src/lib/condition/condition.module.js.map +1 -0
- package/src/lib/condition/condition.service.d.ts +16 -0
- package/src/lib/condition/condition.service.js +82 -0
- package/src/lib/condition/condition.service.js.map +1 -0
- package/src/lib/condition/index.js +6 -0
- package/src/lib/condition/index.js.map +1 -0
- package/src/lib/database/data-source.d.ts +4 -0
- package/src/lib/database/data-source.js +7 -0
- package/src/lib/database/data-source.js.map +1 -0
- package/src/lib/database/index.js +6 -0
- package/src/lib/database/index.js.map +1 -0
- package/src/lib/database/migration-runner.d.ts +1 -0
- package/src/lib/database/migration-runner.js +23 -0
- package/src/lib/database/migration-runner.js.map +1 -0
- package/src/lib/database/typeorm.config.d.ts +14 -0
- package/src/lib/database/typeorm.config.js +135 -0
- package/src/lib/database/typeorm.config.js.map +1 -0
- package/src/lib/delegation/delegation-rule.entity.d.ts +19 -0
- package/src/lib/delegation/delegation-rule.entity.js +99 -0
- package/src/lib/delegation/delegation-rule.entity.js.map +1 -0
- package/src/lib/delegation/delegation.enums.d.ts +10 -0
- package/src/lib/delegation/delegation.enums.js +23 -0
- package/src/lib/delegation/delegation.enums.js.map +1 -0
- package/src/lib/delegation/delegation.module.d.ts +2 -0
- package/src/lib/delegation/delegation.module.js +22 -0
- package/src/lib/delegation/delegation.module.js.map +1 -0
- package/src/lib/delegation/delegation.mutations.d.ts +11 -0
- package/src/lib/delegation/delegation.mutations.js +87 -0
- package/src/lib/delegation/delegation.mutations.js.map +1 -0
- package/src/lib/delegation/delegation.queries.d.ts +10 -0
- package/src/lib/delegation/delegation.queries.js +91 -0
- package/src/lib/delegation/delegation.queries.js.map +1 -0
- package/src/lib/delegation/delegation.service.d.ts +56 -0
- package/src/lib/delegation/delegation.service.js +268 -0
- package/src/lib/delegation/delegation.service.js.map +1 -0
- package/src/lib/delegation/dto/delegation-rule.input.d.ts +24 -0
- package/src/lib/delegation/dto/delegation-rule.input.js +143 -0
- package/src/lib/delegation/dto/delegation-rule.input.js.map +1 -0
- package/src/lib/delegation/index.js +9 -0
- package/src/lib/delegation/index.js.map +1 -0
- package/src/lib/form/dto/form-definition.input.d.ts +21 -0
- package/src/lib/form/dto/form-definition.input.js +103 -0
- package/src/lib/form/dto/form-definition.input.js.map +1 -0
- package/src/lib/form/form-definition-version.entity.d.ts +17 -0
- package/src/lib/form/form-definition-version.entity.js +84 -0
- package/src/lib/form/form-definition-version.entity.js.map +1 -0
- package/src/lib/form/form-definition.entity.d.ts +13 -0
- package/src/lib/form/form-definition.entity.js +66 -0
- package/src/lib/form/form-definition.entity.js.map +1 -0
- package/src/lib/form/form-schema-lint.object.d.ts +4 -0
- package/src/lib/form/form-schema-lint.object.js +20 -0
- package/src/lib/form/form-schema-lint.object.js.map +1 -0
- package/src/lib/form/form-schema.validator.d.ts +13 -0
- package/src/lib/form/form-schema.validator.js +354 -0
- package/src/lib/form/form-schema.validator.js.map +1 -0
- package/src/lib/form/form.enums.d.ts +9 -0
- package/src/lib/form/form.enums.js +22 -0
- package/src/lib/form/form.enums.js.map +1 -0
- package/src/lib/form/form.module.d.ts +2 -0
- package/src/lib/form/form.module.js +27 -0
- package/src/lib/form/form.module.js.map +1 -0
- package/src/lib/form/form.mutations.d.ts +14 -0
- package/src/lib/form/form.mutations.js +88 -0
- package/src/lib/form/form.mutations.js.map +1 -0
- package/src/lib/form/form.queries.d.ts +16 -0
- package/src/lib/form/form.queries.js +96 -0
- package/src/lib/form/form.queries.js.map +1 -0
- package/src/lib/form/form.service.d.ts +35 -0
- package/src/lib/form/form.service.js +297 -0
- package/src/lib/form/form.service.js.map +1 -0
- package/src/lib/form/index.js +12 -0
- package/src/lib/form/index.js.map +1 -0
- package/src/lib/identity/identity-options.d.ts +13 -0
- package/src/lib/identity/identity-options.js +20 -0
- package/src/lib/identity/identity-options.js.map +1 -0
- package/src/lib/identity/identity.module.d.ts +17 -0
- package/src/lib/identity/identity.module.js +65 -0
- package/src/lib/identity/identity.module.js.map +1 -0
- package/src/lib/identity/identity.queries.d.ts +12 -0
- package/src/lib/identity/identity.queries.js +79 -0
- package/src/lib/identity/identity.queries.js.map +1 -0
- package/src/lib/identity/identity.service.d.ts +22 -0
- package/src/lib/identity/identity.service.js +141 -0
- package/src/lib/identity/identity.service.js.map +1 -0
- package/src/lib/identity/index.js +7 -0
- package/src/lib/identity/index.js.map +1 -0
- package/src/lib/identity/member-base.adapter.d.ts +95 -0
- package/src/lib/identity/member-base.adapter.js +137 -0
- package/src/lib/identity/member-base.adapter.js.map +1 -0
- package/src/lib/identity/member-metadata-cache.entity.d.ts +8 -0
- package/src/lib/identity/member-metadata-cache.entity.js +39 -0
- package/src/lib/identity/member-metadata-cache.entity.js.map +1 -0
- package/src/lib/identity/member-profile.object.d.ts +8 -0
- package/src/lib/identity/member-profile.object.js +37 -0
- package/src/lib/identity/member-profile.object.js.map +1 -0
- package/src/lib/identity/member-resolver.interface.d.ts +79 -0
- package/src/lib/identity/member-resolver.interface.js +19 -0
- package/src/lib/identity/member-resolver.interface.js.map +1 -0
- package/src/lib/migrations/0000000000001-enable-postgres-extensions.d.ts +6 -0
- package/src/lib/migrations/0000000000001-enable-postgres-extensions.js +17 -0
- package/src/lib/migrations/0000000000001-enable-postgres-extensions.js.map +1 -0
- package/src/lib/migrations/0000000001000-identity-organization-foundation.d.ts +6 -0
- package/src/lib/migrations/{0000000001000-identity-organization-foundation.ts → 0000000001000-identity-organization-foundation.js} +29 -38
- package/src/lib/migrations/0000000001000-identity-organization-foundation.js.map +1 -0
- package/src/lib/migrations/0000000002000-form-builder-foundation.d.ts +6 -0
- package/src/lib/migrations/{0000000002000-form-builder-foundation.ts → 0000000002000-form-builder-foundation.js} +21 -22
- package/src/lib/migrations/0000000002000-form-builder-foundation.js.map +1 -0
- package/src/lib/migrations/0000000003000-approval-template-foundation.d.ts +6 -0
- package/src/lib/migrations/{0000000003000-approval-template-foundation.ts → 0000000003000-approval-template-foundation.js} +21 -24
- package/src/lib/migrations/0000000003000-approval-template-foundation.js.map +1 -0
- package/src/lib/migrations/0000000004000-workflow-engine-foundation.d.ts +6 -0
- package/src/lib/migrations/{0000000004000-workflow-engine-foundation.ts → 0000000004000-workflow-engine-foundation.js} +34 -46
- package/src/lib/migrations/0000000004000-workflow-engine-foundation.js.map +1 -0
- package/src/lib/migrations/0000000005000-delegation-rules.d.ts +6 -0
- package/src/lib/migrations/{0000000005000-delegation-rules.ts → 0000000005000-delegation-rules.js} +19 -20
- package/src/lib/migrations/0000000005000-delegation-rules.js.map +1 -0
- package/src/lib/migrations/0000000006000-notifications-sla.d.ts +6 -0
- package/src/lib/migrations/{0000000006000-notifications-sla.ts → 0000000006000-notifications-sla.js} +23 -26
- package/src/lib/migrations/0000000006000-notifications-sla.js.map +1 -0
- package/src/lib/migrations/0000000007000-signatures-attachments.d.ts +6 -0
- package/src/lib/migrations/{0000000007000-signatures-attachments.ts → 0000000007000-signatures-attachments.js} +27 -28
- package/src/lib/migrations/0000000007000-signatures-attachments.js.map +1 -0
- package/src/lib/migrations/0000000008000-approval-template-categories.d.ts +6 -0
- package/src/lib/migrations/{0000000008000-approval-template-categories.ts → 0000000008000-approval-template-categories.js} +25 -28
- package/src/lib/migrations/0000000008000-approval-template-categories.js.map +1 -0
- package/src/lib/migrations/0000000009000-task-candidates.d.ts +6 -0
- package/src/lib/migrations/{0000000009000-task-candidates.ts → 0000000009000-task-candidates.js} +23 -26
- package/src/lib/migrations/0000000009000-task-candidates.js.map +1 -0
- package/src/lib/migrations/0000000010000-notification-delivery-state.d.ts +6 -0
- package/src/lib/migrations/{0000000010000-notification-delivery-state.ts → 0000000010000-notification-delivery-state.js} +17 -16
- package/src/lib/migrations/0000000010000-notification-delivery-state.js.map +1 -0
- package/src/lib/migrations/0000000011000-remove-attachment-encryption-key.d.ts +6 -0
- package/src/lib/migrations/0000000011000-remove-attachment-encryption-key.js +22 -0
- package/src/lib/migrations/0000000011000-remove-attachment-encryption-key.js.map +1 -0
- package/src/lib/migrations/0000000012000-notification-sla-idempotency.d.ts +6 -0
- package/src/lib/migrations/0000000012000-notification-sla-idempotency.js +21 -0
- package/src/lib/migrations/0000000012000-notification-sla-idempotency.js.map +1 -0
- package/src/lib/migrations/0000000013000-workflow-query-indexes.d.ts +6 -0
- package/src/lib/migrations/0000000013000-workflow-query-indexes.js +80 -0
- package/src/lib/migrations/0000000013000-workflow-query-indexes.js.map +1 -0
- package/src/lib/migrations/index.d.ts +16 -0
- package/src/lib/migrations/index.js +49 -0
- package/src/lib/migrations/index.js.map +1 -0
- package/src/lib/notification/dto/notification-preference.input.d.ts +9 -0
- package/src/lib/notification/dto/notification-preference.input.js +53 -0
- package/src/lib/notification/dto/notification-preference.input.js.map +1 -0
- package/src/lib/notification/index.js +11 -0
- package/src/lib/notification/index.js.map +1 -0
- package/src/lib/notification/notification-delivery-scheduler.service.d.ts +13 -0
- package/src/lib/notification/notification-delivery-scheduler.service.js +53 -0
- package/src/lib/notification/notification-delivery-scheduler.service.js.map +1 -0
- package/src/lib/notification/notification-delivery.service.d.ts +23 -0
- package/src/lib/notification/notification-delivery.service.js +245 -0
- package/src/lib/notification/notification-delivery.service.js.map +1 -0
- package/src/lib/notification/notification-dispatcher.token.d.ts +7 -0
- package/src/lib/notification/notification-dispatcher.token.js +5 -0
- package/src/lib/notification/notification-dispatcher.token.js.map +1 -0
- package/src/lib/notification/notification-options.d.ts +215 -0
- package/src/lib/notification/notification-options.js +128 -0
- package/src/lib/notification/notification-options.js.map +1 -0
- package/src/lib/notification/notification-options.module.d.ts +23 -0
- package/src/lib/notification/notification-options.module.js +41 -0
- package/src/lib/notification/notification-options.module.js.map +1 -0
- package/src/lib/notification/notification-preference.entity.d.ts +10 -0
- package/src/lib/notification/notification-preference.entity.js +50 -0
- package/src/lib/notification/notification-preference.entity.js.map +1 -0
- package/src/lib/notification/notification-sla-scheduler.service.d.ts +13 -0
- package/src/lib/notification/notification-sla-scheduler.service.js +51 -0
- package/src/lib/notification/notification-sla-scheduler.service.js.map +1 -0
- package/src/lib/notification/notification-template.d.ts +13 -0
- package/src/lib/notification/notification-template.js +61 -0
- package/src/lib/notification/notification-template.js.map +1 -0
- package/src/lib/notification/notification.entity.d.ts +23 -0
- package/src/lib/notification/notification.entity.js +122 -0
- package/src/lib/notification/notification.entity.js.map +1 -0
- package/src/lib/notification/notification.enums.d.ts +24 -0
- package/src/lib/notification/notification.enums.js +45 -0
- package/src/lib/notification/notification.enums.js.map +1 -0
- package/src/lib/notification/notification.module.d.ts +2 -0
- package/src/lib/notification/notification.module.js +45 -0
- package/src/lib/notification/notification.module.js.map +1 -0
- package/src/lib/notification/notification.mutations.d.ts +11 -0
- package/src/lib/notification/notification.mutations.js +64 -0
- package/src/lib/notification/notification.mutations.js.map +1 -0
- package/src/lib/notification/notification.queries.d.ts +11 -0
- package/src/lib/notification/notification.queries.js +77 -0
- package/src/lib/notification/notification.queries.js.map +1 -0
- package/src/lib/notification/notification.service.d.ts +81 -0
- package/src/lib/notification/notification.service.js +621 -0
- package/src/lib/notification/notification.service.js.map +1 -0
- package/src/lib/organization/dto/manager-resolution.input.d.ts +18 -0
- package/src/lib/organization/dto/manager-resolution.input.js +107 -0
- package/src/lib/organization/dto/manager-resolution.input.js.map +1 -0
- package/src/lib/organization/dto/membership.input.d.ts +16 -0
- package/src/lib/organization/dto/membership.input.js +99 -0
- package/src/lib/organization/dto/membership.input.js.map +1 -0
- package/src/lib/organization/dto/org-unit.input.d.ts +24 -0
- package/src/lib/organization/dto/org-unit.input.js +119 -0
- package/src/lib/organization/dto/org-unit.input.js.map +1 -0
- package/src/lib/organization/dto/position.input.d.ts +13 -0
- package/src/lib/organization/dto/position.input.js +70 -0
- package/src/lib/organization/dto/position.input.js.map +1 -0
- package/src/lib/organization/index.js +16 -0
- package/src/lib/organization/index.js.map +1 -0
- package/src/lib/organization/json-metadata.d.ts +1 -0
- package/src/lib/organization/json-metadata.js +14 -0
- package/src/lib/organization/json-metadata.js.map +1 -0
- package/src/lib/organization/manager-resolution.entity.d.ts +11 -0
- package/src/lib/organization/manager-resolution.entity.js +55 -0
- package/src/lib/organization/manager-resolution.entity.js.map +1 -0
- package/src/lib/organization/membership.entity.d.ts +11 -0
- package/src/lib/organization/membership.entity.js +60 -0
- package/src/lib/organization/membership.entity.js.map +1 -0
- package/src/lib/organization/org-unit-tree-commit-result.object.d.ts +4 -0
- package/src/lib/organization/org-unit-tree-commit-result.object.js +17 -0
- package/src/lib/organization/org-unit-tree-commit-result.object.js.map +1 -0
- package/src/lib/organization/org-unit.entity.d.ts +13 -0
- package/src/lib/organization/org-unit.entity.js +64 -0
- package/src/lib/organization/org-unit.entity.js.map +1 -0
- package/src/lib/organization/organization-summary.object.d.ts +6 -0
- package/src/lib/organization/organization-summary.object.js +28 -0
- package/src/lib/organization/organization-summary.object.js.map +1 -0
- package/src/lib/organization/organization.enums.d.ts +11 -0
- package/src/lib/organization/organization.enums.js +22 -0
- package/src/lib/organization/organization.enums.js.map +1 -0
- package/src/lib/organization/organization.module.d.ts +2 -0
- package/src/lib/organization/organization.module.js +35 -0
- package/src/lib/organization/organization.module.js.map +1 -0
- package/src/lib/organization/organization.mutations.d.ts +26 -0
- package/src/lib/organization/organization.mutations.js +148 -0
- package/src/lib/organization/organization.mutations.js.map +1 -0
- package/src/lib/organization/organization.queries.d.ts +23 -0
- package/src/lib/organization/organization.queries.js +202 -0
- package/src/lib/organization/organization.queries.js.map +1 -0
- package/src/lib/organization/organization.service.d.ts +102 -0
- package/src/lib/organization/organization.service.js +751 -0
- package/src/lib/organization/organization.service.js.map +1 -0
- package/src/lib/organization/position.entity.d.ts +9 -0
- package/src/lib/organization/position.entity.js +48 -0
- package/src/lib/organization/position.entity.js.map +1 -0
- package/src/lib/organization/resolved-manager.object.d.ts +4 -0
- package/src/lib/organization/resolved-manager.object.js +20 -0
- package/src/lib/organization/resolved-manager.object.js.map +1 -0
- package/src/lib/signature/index.js +8 -0
- package/src/lib/signature/index.js.map +1 -0
- package/src/lib/signature/signature-options.d.ts +33 -0
- package/src/lib/signature/signature-options.js +51 -0
- package/src/lib/signature/signature-options.js.map +1 -0
- package/src/lib/signature/signature-verification.object.d.ts +6 -0
- package/src/lib/signature/signature-verification.object.js +28 -0
- package/src/lib/signature/signature-verification.object.js.map +1 -0
- package/src/lib/signature/signature.entity.d.ts +16 -0
- package/src/lib/signature/signature.entity.js +88 -0
- package/src/lib/signature/signature.entity.js.map +1 -0
- package/src/lib/signature/signature.module.d.ts +11 -0
- package/src/lib/signature/signature.module.js +60 -0
- package/src/lib/signature/signature.module.js.map +1 -0
- package/src/lib/signature/signature.queries.d.ts +11 -0
- package/src/lib/signature/signature.queries.js +46 -0
- package/src/lib/signature/signature.queries.js.map +1 -0
- package/src/lib/signature/signature.service.d.ts +25 -0
- package/src/lib/signature/signature.service.js +124 -0
- package/src/lib/signature/signature.service.js.map +1 -0
- package/src/lib/template/approval-template-category.entity.d.ts +9 -0
- package/src/lib/template/approval-template-category.entity.js +49 -0
- package/src/lib/template/approval-template-category.entity.js.map +1 -0
- package/src/lib/template/approval-template-version.entity.d.ts +21 -0
- package/src/lib/template/approval-template-version.entity.js +106 -0
- package/src/lib/template/approval-template-version.entity.js.map +1 -0
- package/src/lib/template/approval-template.entity.d.ts +14 -0
- package/src/lib/template/approval-template.entity.js +74 -0
- package/src/lib/template/approval-template.entity.js.map +1 -0
- package/src/lib/template/dto/approval-template.input.d.ts +36 -0
- package/src/lib/template/dto/approval-template.input.js +187 -0
- package/src/lib/template/dto/approval-template.input.js.map +1 -0
- package/src/lib/template/index.js +12 -0
- package/src/lib/template/index.js.map +1 -0
- package/src/lib/template/template.enums.d.ts +14 -0
- package/src/lib/template/template.enums.js +31 -0
- package/src/lib/template/template.enums.js.map +1 -0
- package/src/lib/template/template.module.d.ts +2 -0
- package/src/lib/template/template.module.js +33 -0
- package/src/lib/template/template.module.js.map +1 -0
- package/src/lib/template/template.mutations.d.ts +20 -0
- package/src/lib/template/template.mutations.js +139 -0
- package/src/lib/template/template.mutations.js.map +1 -0
- package/src/lib/template/template.queries.d.ts +16 -0
- package/src/lib/template/template.queries.js +133 -0
- package/src/lib/template/template.queries.js.map +1 -0
- package/src/lib/template/template.service.d.ts +64 -0
- package/src/lib/template/template.service.js +521 -0
- package/src/lib/template/template.service.js.map +1 -0
- package/src/lib/template/workflow-definition.validator.d.ts +9 -0
- package/src/lib/template/workflow-definition.validator.js +362 -0
- package/src/lib/template/workflow-definition.validator.js.map +1 -0
- package/src/lib/testing/cel-js.jest.d.ts +15 -0
- package/src/lib/testing/cel-js.jest.js +27 -0
- package/src/lib/testing/cel-js.jest.js.map +1 -0
- package/src/lib/workflow-engine/activity-log.entity.d.ts +12 -0
- package/src/lib/workflow-engine/activity-log.entity.js +62 -0
- package/src/lib/workflow-engine/activity-log.entity.js.map +1 -0
- package/src/lib/workflow-engine/approval-instance-page-info.object.d.ts +8 -0
- package/src/lib/workflow-engine/approval-instance-page-info.object.js +36 -0
- package/src/lib/workflow-engine/approval-instance-page-info.object.js.map +1 -0
- package/src/lib/workflow-engine/approval-instance.entity.d.ts +22 -0
- package/src/lib/workflow-engine/approval-instance.entity.js +113 -0
- package/src/lib/workflow-engine/approval-instance.entity.js.map +1 -0
- package/src/lib/workflow-engine/dto/cancel-approval-instance.input.d.ts +5 -0
- package/src/lib/workflow-engine/dto/cancel-approval-instance.input.js +29 -0
- package/src/lib/workflow-engine/dto/cancel-approval-instance.input.js.map +1 -0
- package/src/lib/workflow-engine/dto/decide-task.input.d.ts +9 -0
- package/src/lib/workflow-engine/dto/decide-task.input.js +47 -0
- package/src/lib/workflow-engine/dto/decide-task.input.js.map +1 -0
- package/src/lib/workflow-engine/dto/dry-run-approval-workflow.input.d.ts +6 -0
- package/src/lib/workflow-engine/dto/dry-run-approval-workflow.input.js +34 -0
- package/src/lib/workflow-engine/dto/dry-run-approval-workflow.input.js.map +1 -0
- package/src/lib/workflow-engine/dto/resubmit-approval-instance.input.d.ts +6 -0
- package/src/lib/workflow-engine/dto/resubmit-approval-instance.input.js +34 -0
- package/src/lib/workflow-engine/dto/resubmit-approval-instance.input.js.map +1 -0
- package/src/lib/workflow-engine/dto/submit-approval-instance.input.d.ts +7 -0
- package/src/lib/workflow-engine/dto/submit-approval-instance.input.js +40 -0
- package/src/lib/workflow-engine/dto/submit-approval-instance.input.js.map +1 -0
- package/src/lib/workflow-engine/index.js +24 -0
- package/src/lib/workflow-engine/index.js.map +1 -0
- package/src/lib/workflow-engine/task-candidate.entity.d.ts +14 -0
- package/src/lib/workflow-engine/task-candidate.entity.js +72 -0
- package/src/lib/workflow-engine/task-candidate.entity.js.map +1 -0
- package/src/lib/workflow-engine/task-decision.entity.d.ts +12 -0
- package/src/lib/workflow-engine/task-decision.entity.js +60 -0
- package/src/lib/workflow-engine/task-decision.entity.js.map +1 -0
- package/src/lib/workflow-engine/task.entity.d.ts +20 -0
- package/src/lib/workflow-engine/task.entity.js +109 -0
- package/src/lib/workflow-engine/task.entity.js.map +1 -0
- package/src/lib/workflow-engine/workflow-condition-evaluator.d.ts +5 -0
- package/src/lib/workflow-engine/workflow-condition-evaluator.js +107 -0
- package/src/lib/workflow-engine/workflow-condition-evaluator.js.map +1 -0
- package/src/lib/workflow-engine/workflow-dashboard-summary.object.d.ts +8 -0
- package/src/lib/workflow-engine/workflow-dashboard-summary.object.js +36 -0
- package/src/lib/workflow-engine/workflow-dashboard-summary.object.js.map +1 -0
- package/src/lib/workflow-engine/workflow-dry-run.object.d.ts +21 -0
- package/src/lib/workflow-engine/workflow-dry-run.object.js +86 -0
- package/src/lib/workflow-engine/workflow-dry-run.object.js.map +1 -0
- package/src/lib/workflow-engine/workflow-engine.enums.d.ts +58 -0
- package/src/lib/workflow-engine/workflow-engine.enums.js +95 -0
- package/src/lib/workflow-engine/workflow-engine.enums.js.map +1 -0
- package/src/lib/workflow-engine/workflow-engine.module.d.ts +9 -0
- package/src/lib/workflow-engine/workflow-engine.module.js +76 -0
- package/src/lib/workflow-engine/workflow-engine.module.js.map +1 -0
- package/src/lib/workflow-engine/workflow-engine.mutations.d.ts +19 -0
- package/src/lib/workflow-engine/workflow-engine.mutations.js +106 -0
- package/src/lib/workflow-engine/workflow-engine.mutations.js.map +1 -0
- package/src/lib/workflow-engine/workflow-engine.queries.d.ts +29 -0
- package/src/lib/workflow-engine/workflow-engine.queries.js +225 -0
- package/src/lib/workflow-engine/workflow-engine.queries.js.map +1 -0
- package/src/lib/workflow-engine/workflow-engine.service.d.ts +145 -0
- package/src/lib/workflow-engine/workflow-engine.service.js +2785 -0
- package/src/lib/workflow-engine/workflow-engine.service.js.map +1 -0
- package/src/lib/workflow-engine/{workflow-engine.tokens.ts → workflow-engine.tokens.d.ts} +3 -9
- package/src/lib/workflow-engine/workflow-engine.tokens.js +5 -0
- package/src/lib/workflow-engine/workflow-engine.tokens.js.map +1 -0
- package/src/lib/workflow-engine/workflow-service-task-dispatcher.token.d.ts +18 -0
- package/src/lib/workflow-engine/workflow-service-task-dispatcher.token.js +39 -0
- package/src/lib/workflow-engine/workflow-service-task-dispatcher.token.js.map +1 -0
- package/src/lib/workflow-engine/workflow-token.entity.d.ts +10 -0
- package/src/lib/workflow-engine/workflow-token.entity.js +50 -0
- package/src/lib/workflow-engine/workflow-token.entity.js.map +1 -0
- package/eslint.config.mjs +0 -20
- package/jest.config.cts +0 -15
- package/project.json +0 -58
- package/src/lib/attachment/attachment-options.spec.ts +0 -45
- package/src/lib/attachment/attachment-options.ts +0 -130
- package/src/lib/attachment/attachment-storage.provider.spec.ts +0 -79
- package/src/lib/attachment/attachment-storage.provider.ts +0 -60
- package/src/lib/attachment/attachment.controller.ts +0 -39
- package/src/lib/attachment/attachment.entity.ts +0 -59
- package/src/lib/attachment/attachment.module.ts +0 -149
- package/src/lib/attachment/attachment.mutations.ts +0 -22
- package/src/lib/attachment/attachment.queries.ts +0 -65
- package/src/lib/attachment/attachment.service.spec.ts +0 -319
- package/src/lib/attachment/attachment.service.ts +0 -477
- package/src/lib/attachment/dto/upload-attachment.input.ts +0 -60
- package/src/lib/bpm/bpm-root.module.spec.ts +0 -138
- package/src/lib/bpm/bpm-root.module.ts +0 -320
- package/src/lib/bpm-auth/bpm-auth-context.extractor.ts +0 -106
- package/src/lib/bpm-auth/bpm-auth-context.ts +0 -40
- package/src/lib/bpm-auth/bpm-auth.authorization.ts +0 -80
- package/src/lib/bpm-auth/bpm-auth.decorators.ts +0 -19
- package/src/lib/bpm-auth/bpm-auth.guard.ts +0 -31
- package/src/lib/bpm-auth/bpm-auth.module.spec.ts +0 -106
- package/src/lib/bpm-auth/bpm-auth.module.ts +0 -69
- package/src/lib/bpm-auth/bpm-auth.options.ts +0 -21
- package/src/lib/bpm-auth/configurable-bpm-auth-context.accessor.ts +0 -55
- package/src/lib/common/filters/all-exceptions.filter.ts +0 -138
- package/src/lib/common/iso-duration.ts +0 -31
- package/src/lib/condition/condition.module.ts +0 -8
- package/src/lib/condition/condition.service.spec.ts +0 -50
- package/src/lib/condition/condition.service.ts +0 -141
- package/src/lib/database/data-source.ts +0 -7
- package/src/lib/database/migration-runner.ts +0 -24
- package/src/lib/database/typeorm.config.ts +0 -217
- package/src/lib/delegation/delegation-rule.entity.ts +0 -84
- package/src/lib/delegation/delegation.enums.ts +0 -21
- package/src/lib/delegation/delegation.module.ts +0 -14
- package/src/lib/delegation/delegation.mutations.ts +0 -92
- package/src/lib/delegation/delegation.queries.ts +0 -111
- package/src/lib/delegation/delegation.service.spec.ts +0 -295
- package/src/lib/delegation/delegation.service.ts +0 -482
- package/src/lib/delegation/dto/delegation-rule.input.ts +0 -125
- package/src/lib/form/dto/form-definition.input.ts +0 -73
- package/src/lib/form/form-definition-version.entity.ts +0 -66
- package/src/lib/form/form-definition.entity.ts +0 -54
- package/src/lib/form/form-schema-lint.object.ts +0 -10
- package/src/lib/form/form-schema.validator.spec.ts +0 -180
- package/src/lib/form/form-schema.validator.ts +0 -538
- package/src/lib/form/form.enums.ts +0 -20
- package/src/lib/form/form.module.ts +0 -19
- package/src/lib/form/form.mutations.ts +0 -68
- package/src/lib/form/form.queries.ts +0 -72
- package/src/lib/form/form.service.spec.ts +0 -144
- package/src/lib/form/form.service.ts +0 -490
- package/src/lib/identity/identity-options.ts +0 -41
- package/src/lib/identity/identity.module.ts +0 -96
- package/src/lib/identity/identity.queries.ts +0 -61
- package/src/lib/identity/identity.service.spec.ts +0 -105
- package/src/lib/identity/identity.service.ts +0 -200
- package/src/lib/identity/member-base.adapter.spec.ts +0 -77
- package/src/lib/identity/member-base.adapter.ts +0 -244
- package/src/lib/identity/member-metadata-cache.entity.ts +0 -27
- package/src/lib/identity/member-profile.object.ts +0 -28
- package/src/lib/identity/member-resolver.interface.ts +0 -47
- package/src/lib/migrations/0000000000001-enable-postgres-extensions.ts +0 -14
- package/src/lib/migrations/0000000011000-remove-attachment-encryption-key.ts +0 -19
- package/src/lib/migrations/0000000012000-notification-sla-idempotency.ts +0 -22
- package/src/lib/migrations/0000000013000-workflow-query-indexes.ts +0 -113
- package/src/lib/migrations/index.ts +0 -47
- package/src/lib/notification/dto/notification-preference.input.ts +0 -46
- package/src/lib/notification/notification-delivery-scheduler.service.ts +0 -69
- package/src/lib/notification/notification-delivery.service.spec.ts +0 -315
- package/src/lib/notification/notification-delivery.service.ts +0 -339
- package/src/lib/notification/notification-dispatcher.token.ts +0 -13
- package/src/lib/notification/notification-options.module.ts +0 -67
- package/src/lib/notification/notification-options.spec.ts +0 -93
- package/src/lib/notification/notification-options.ts +0 -452
- package/src/lib/notification/notification-preference.entity.ts +0 -35
- package/src/lib/notification/notification-sla-scheduler.service.ts +0 -66
- package/src/lib/notification/notification-template.spec.ts +0 -33
- package/src/lib/notification/notification-template.ts +0 -97
- package/src/lib/notification/notification.entity.ts +0 -102
- package/src/lib/notification/notification.enums.ts +0 -45
- package/src/lib/notification/notification.module.ts +0 -37
- package/src/lib/notification/notification.mutations.ts +0 -47
- package/src/lib/notification/notification.queries.ts +0 -64
- package/src/lib/notification/notification.service.spec.ts +0 -412
- package/src/lib/notification/notification.service.ts +0 -974
- package/src/lib/organization/dto/manager-resolution.input.ts +0 -91
- package/src/lib/organization/dto/membership.input.ts +0 -77
- package/src/lib/organization/dto/org-unit.input.ts +0 -96
- package/src/lib/organization/dto/position.input.ts +0 -50
- package/src/lib/organization/json-metadata.ts +0 -15
- package/src/lib/organization/manager-resolution.entity.ts +0 -44
- package/src/lib/organization/membership.entity.ts +0 -50
- package/src/lib/organization/org-unit-tree-commit-result.object.ts +0 -8
- package/src/lib/organization/org-unit.entity.ts +0 -53
- package/src/lib/organization/organization-summary.object.ts +0 -16
- package/src/lib/organization/organization.enums.ts +0 -19
- package/src/lib/organization/organization.module.ts +0 -27
- package/src/lib/organization/organization.mutations.ts +0 -115
- package/src/lib/organization/organization.queries.ts +0 -188
- package/src/lib/organization/organization.service.spec.ts +0 -760
- package/src/lib/organization/organization.service.ts +0 -1216
- package/src/lib/organization/position.entity.ts +0 -39
- package/src/lib/organization/resolved-manager.object.ts +0 -10
- package/src/lib/signature/signature-options.spec.ts +0 -60
- package/src/lib/signature/signature-options.ts +0 -120
- package/src/lib/signature/signature-verification.object.ts +0 -16
- package/src/lib/signature/signature.entity.ts +0 -62
- package/src/lib/signature/signature.module.ts +0 -80
- package/src/lib/signature/signature.queries.ts +0 -37
- package/src/lib/signature/signature.service.spec.ts +0 -134
- package/src/lib/signature/signature.service.ts +0 -205
- package/src/lib/template/approval-template-category.entity.ts +0 -40
- package/src/lib/template/approval-template-version.entity.ts +0 -82
- package/src/lib/template/approval-template.entity.ts +0 -64
- package/src/lib/template/dto/approval-template.input.ts +0 -147
- package/src/lib/template/template.enums.ts +0 -30
- package/src/lib/template/template.module.ts +0 -25
- package/src/lib/template/template.mutations.ts +0 -106
- package/src/lib/template/template.queries.ts +0 -119
- package/src/lib/template/template.service.spec.ts +0 -476
- package/src/lib/template/template.service.ts +0 -820
- package/src/lib/template/workflow-definition.validator.spec.ts +0 -595
- package/src/lib/template/workflow-definition.validator.ts +0 -539
- package/src/lib/testing/cel-js.jest.ts +0 -46
- package/src/lib/workflow-engine/activity-log.entity.ts +0 -48
- package/src/lib/workflow-engine/approval-instance-page-info.object.ts +0 -22
- package/src/lib/workflow-engine/approval-instance.entity.ts +0 -86
- package/src/lib/workflow-engine/dto/cancel-approval-instance.input.ts +0 -18
- package/src/lib/workflow-engine/dto/decide-task.input.ts +0 -33
- package/src/lib/workflow-engine/dto/dry-run-approval-workflow.input.ts +0 -22
- package/src/lib/workflow-engine/dto/resubmit-approval-instance.input.ts +0 -22
- package/src/lib/workflow-engine/dto/submit-approval-instance.input.ts +0 -27
- package/src/lib/workflow-engine/task-candidate.entity.ts +0 -56
- package/src/lib/workflow-engine/task-decision.entity.ts +0 -43
- package/src/lib/workflow-engine/task.entity.ts +0 -85
- package/src/lib/workflow-engine/workflow-condition-evaluator.ts +0 -168
- package/src/lib/workflow-engine/workflow-dashboard-summary.object.ts +0 -22
- package/src/lib/workflow-engine/workflow-dry-run.object.ts +0 -58
- package/src/lib/workflow-engine/workflow-engine.enums.ts +0 -99
- package/src/lib/workflow-engine/workflow-engine.module.ts +0 -75
- package/src/lib/workflow-engine/workflow-engine.mutations.ts +0 -85
- package/src/lib/workflow-engine/workflow-engine.queries.ts +0 -229
- package/src/lib/workflow-engine/workflow-engine.service.spec.ts +0 -2689
- package/src/lib/workflow-engine/workflow-engine.service.ts +0 -4707
- package/src/lib/workflow-engine/workflow-service-task-dispatcher.token.ts +0 -69
- package/src/lib/workflow-engine/workflow-token.entity.ts +0 -40
- package/tsconfig.json +0 -24
- package/tsconfig.lib.json +0 -16
- package/tsconfig.spec.json +0 -16
- /package/src/{index.ts → index.d.ts} +0 -0
- /package/src/lib/attachment/{index.ts → index.d.ts} +0 -0
- /package/src/lib/bpm/{index.ts → index.d.ts} +0 -0
- /package/src/lib/bpm-auth/{index.ts → index.d.ts} +0 -0
- /package/src/lib/common/{index.ts → index.d.ts} +0 -0
- /package/src/lib/condition/{index.ts → index.d.ts} +0 -0
- /package/src/lib/database/{index.ts → index.d.ts} +0 -0
- /package/src/lib/delegation/{index.ts → index.d.ts} +0 -0
- /package/src/lib/form/{index.ts → index.d.ts} +0 -0
- /package/src/lib/identity/{index.ts → index.d.ts} +0 -0
- /package/src/lib/notification/{index.ts → index.d.ts} +0 -0
- /package/src/lib/organization/{index.ts → index.d.ts} +0 -0
- /package/src/lib/signature/{index.ts → index.d.ts} +0 -0
- /package/src/lib/template/{index.ts → index.d.ts} +0 -0
- /package/src/lib/workflow-engine/{index.ts → index.d.ts} +0 -0
|
@@ -1,320 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
DynamicModule,
|
|
3
|
-
InjectionToken,
|
|
4
|
-
Module,
|
|
5
|
-
Provider,
|
|
6
|
-
Type,
|
|
7
|
-
} from '@nestjs/common';
|
|
8
|
-
import { ModuleMetadata } from '@nestjs/common/interfaces';
|
|
9
|
-
import { BPMRootAttachmentOptions } from '../attachment/attachment-options';
|
|
10
|
-
import { AttachmentModule } from '../attachment/attachment.module';
|
|
11
|
-
import { AttachmentStorage } from '../attachment/attachment-storage.token';
|
|
12
|
-
import { BPMAuthModule } from '../bpm-auth/bpm-auth.module';
|
|
13
|
-
import {
|
|
14
|
-
BPMAuthModuleAsyncOptions,
|
|
15
|
-
BPMAuthModuleOptions,
|
|
16
|
-
} from '../bpm-auth/bpm-auth.options';
|
|
17
|
-
import { DelegationModule } from '../delegation/delegation.module';
|
|
18
|
-
import { FormModule } from '../form/form.module';
|
|
19
|
-
import { BPMRootIdentityOptions } from '../identity/identity-options';
|
|
20
|
-
import { IdentityModule } from '../identity/identity.module';
|
|
21
|
-
import { BPMMemberResolver } from '../identity/member-resolver.interface';
|
|
22
|
-
import { NotificationModule } from '../notification/notification.module';
|
|
23
|
-
import { NotificationOptionsModule } from '../notification/notification-options.module';
|
|
24
|
-
import { BPMRootNotificationOptions } from '../notification/notification-options';
|
|
25
|
-
import { OrganizationModule } from '../organization/organization.module';
|
|
26
|
-
import { BPMRootSignatureOptions } from '../signature/signature-options';
|
|
27
|
-
import { SignatureModule } from '../signature/signature.module';
|
|
28
|
-
import { TemplateModule } from '../template/template.module';
|
|
29
|
-
import { WorkflowEngineModule } from '../workflow-engine/workflow-engine.module';
|
|
30
|
-
import { BPMWorkflowServiceTaskDispatcher } from '../workflow-engine/workflow-service-task-dispatcher.token';
|
|
31
|
-
|
|
32
|
-
type BPMModuleImport = DynamicModule | Type<unknown>;
|
|
33
|
-
|
|
34
|
-
export interface BPMRootModuleOptions
|
|
35
|
-
extends
|
|
36
|
-
Pick<ModuleMetadata, 'imports'>,
|
|
37
|
-
BPMRootAttachmentOptions,
|
|
38
|
-
BPMRootIdentityOptions,
|
|
39
|
-
BPMRootNotificationOptions,
|
|
40
|
-
BPMRootSignatureOptions {
|
|
41
|
-
/**
|
|
42
|
-
* Host-provided storage adapter for BPM attachments.
|
|
43
|
-
*
|
|
44
|
-
* When omitted, BPM stores attachments through the local
|
|
45
|
-
* `@rytass/storages-adapter-local` adapter under `.storage/attachments`.
|
|
46
|
-
* Hosts can replace this provider with any `@rytass/storages` compatible
|
|
47
|
-
* adapter such as MinIO, S3, or GCS.
|
|
48
|
-
*/
|
|
49
|
-
readonly attachmentStorageProvider?: Provider<AttachmentStorage>;
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Factory that resolves the current BPM auth context from NestJS execution
|
|
53
|
-
* context.
|
|
54
|
-
*
|
|
55
|
-
* BPM guards, GraphQL decorators, and domain services use this callback to
|
|
56
|
-
* identify the current member and organization context. When omitted, BPM
|
|
57
|
-
* operations that require authentication will not receive a host session.
|
|
58
|
-
*/
|
|
59
|
-
readonly authContextFactory?: BPMAuthModuleOptions['contextFactory'];
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Host-provided member resolver provider.
|
|
63
|
-
*
|
|
64
|
-
* BPM uses this provider to resolve member metadata, organization identity,
|
|
65
|
-
* display names, and approver candidates without coupling
|
|
66
|
-
* `@rytass/bpm-core-nestjs-module` to a specific external identity system.
|
|
67
|
-
*/
|
|
68
|
-
readonly memberResolverProvider: Provider<BPMMemberResolver>;
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Host-provided dispatcher for executable workflow service tasks.
|
|
72
|
-
*
|
|
73
|
-
* When omitted, BPM sends WEBHOOK service tasks with the built-in `fetch`
|
|
74
|
-
* dispatcher. Wrapper apps can replace this provider to add auth headers,
|
|
75
|
-
* request signing, retry queues, or an outbound integration bus.
|
|
76
|
-
*/
|
|
77
|
-
readonly workflowServiceTaskDispatcherProvider?: Provider<BPMWorkflowServiceTaskDispatcher>;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
export interface BPMRootModuleAsyncFactoryOptions
|
|
81
|
-
extends
|
|
82
|
-
BPMRootAttachmentOptions,
|
|
83
|
-
BPMRootIdentityOptions,
|
|
84
|
-
BPMRootNotificationOptions,
|
|
85
|
-
BPMRootSignatureOptions {
|
|
86
|
-
/**
|
|
87
|
-
* Factory that resolves the current BPM auth context from NestJS execution
|
|
88
|
-
* context.
|
|
89
|
-
*
|
|
90
|
-
* BPM guards, GraphQL decorators, and domain services use this callback to
|
|
91
|
-
* identify the current member and organization context. When omitted, BPM
|
|
92
|
-
* operations that require authentication will not receive a host session.
|
|
93
|
-
*/
|
|
94
|
-
readonly authContextFactory?: BPMAuthModuleOptions['contextFactory'];
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
export interface BPMRootModuleAsyncOptions extends Pick<
|
|
98
|
-
ModuleMetadata,
|
|
99
|
-
'imports'
|
|
100
|
-
> {
|
|
101
|
-
/**
|
|
102
|
-
* Controller mount path used by the BPM attachment endpoints.
|
|
103
|
-
*
|
|
104
|
-
* Set at module wiring time because Nest reads controller path metadata
|
|
105
|
-
* synchronously when the application starts. Async factories cannot drive
|
|
106
|
-
* this value; only static URL routing decisions should set it. Defaults to
|
|
107
|
-
* `/attachments`.
|
|
108
|
-
*/
|
|
109
|
-
readonly attachmentRoutePrefix?: string | null;
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Host-provided storage adapter for BPM attachments.
|
|
113
|
-
*
|
|
114
|
-
* This provider is static at module wiring time. If secrets are required,
|
|
115
|
-
* use a Nest provider with `useFactory` / `inject` here.
|
|
116
|
-
*/
|
|
117
|
-
readonly attachmentStorageProvider?: Provider<AttachmentStorage>;
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* Providers injected into `useFactory`.
|
|
121
|
-
*
|
|
122
|
-
* This is typically used to read Vault-backed SMTP, webhook, and auth
|
|
123
|
-
* settings before constructing the flattened BPM root options.
|
|
124
|
-
*/
|
|
125
|
-
readonly inject?: readonly InjectionToken[];
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Host-provided member resolver provider.
|
|
129
|
-
*
|
|
130
|
-
* BPM uses this provider to resolve member metadata, organization identity,
|
|
131
|
-
* display names, and approver candidates without coupling
|
|
132
|
-
* `@rytass/bpm-core-nestjs-module` to a specific external identity system.
|
|
133
|
-
*/
|
|
134
|
-
readonly memberResolverProvider: Provider<BPMMemberResolver>;
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Host-provided dispatcher for executable workflow service tasks.
|
|
138
|
-
*
|
|
139
|
-
* This provider is static at module wiring time. If secrets are required,
|
|
140
|
-
* use a Nest provider with `useFactory` / `inject` here.
|
|
141
|
-
*/
|
|
142
|
-
readonly workflowServiceTaskDispatcherProvider?: Provider<BPMWorkflowServiceTaskDispatcher>;
|
|
143
|
-
|
|
144
|
-
/**
|
|
145
|
-
* Async factory returning BPM root options.
|
|
146
|
-
*
|
|
147
|
-
* The returned object intentionally keeps all BPM settings flat at the root
|
|
148
|
-
* level, for example `authContextFactory`, `notificationEmailSmtpHost`, and
|
|
149
|
-
* `notificationSlaSchedulerEnabled`.
|
|
150
|
-
*/
|
|
151
|
-
readonly useFactory: (
|
|
152
|
-
...args: readonly unknown[]
|
|
153
|
-
) =>
|
|
154
|
-
| BPMRootModuleAsyncFactoryOptions
|
|
155
|
-
| Promise<BPMRootModuleAsyncFactoryOptions>;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* Aggregate entry point that wires every BPM domain module
|
|
160
|
-
* (`BPMAuthModule`, `IdentityModule`, `OrganizationModule`, `FormModule`,
|
|
161
|
-
* `TemplateModule`, `WorkflowEngineModule`, `DelegationModule`,
|
|
162
|
-
* `NotificationModule`, `SignatureModule`, `AttachmentModule`) into a
|
|
163
|
-
* NestJS host application.
|
|
164
|
-
*
|
|
165
|
-
* Hosts call `forRoot` or `forRootAsync` once from their root `AppModule`.
|
|
166
|
-
* BPMCore does **not** own login, GraphQL setup, TypeORM bootstrap, or
|
|
167
|
-
* Vault loading — those remain the host's responsibility. See
|
|
168
|
-
* `docs/10-bpm-embedding-auth.md` and `docs/11-consumer-quickstart.md` for
|
|
169
|
-
* the full contract.
|
|
170
|
-
*
|
|
171
|
-
* The host must avoid Nest's `app.setGlobalPrefix(...)`; BPM controllers
|
|
172
|
-
* mount at relative paths driven by their respective options (notably
|
|
173
|
-
* `attachmentRoutePrefix`).
|
|
174
|
-
*
|
|
175
|
-
* @example
|
|
176
|
-
* ```ts
|
|
177
|
-
* BPMRootModule.forRoot({
|
|
178
|
-
* authContextFactory: readBPMAuthContextFromGqlContext,
|
|
179
|
-
* memberResolverProvider: {
|
|
180
|
-
* provide: BPM_MEMBER_RESOLVER,
|
|
181
|
-
* useClass: HostMemberResolver,
|
|
182
|
-
* },
|
|
183
|
-
* attachmentPublicBaseUrl: process.env.BPM_PUBLIC_BASE_URL,
|
|
184
|
-
* attachmentSignedUrlSecret: process.env.BPM_ATTACHMENT_SIGNING_SECRET,
|
|
185
|
-
* });
|
|
186
|
-
* ```
|
|
187
|
-
*/
|
|
188
|
-
@Module({})
|
|
189
|
-
export class BPMRootModule {
|
|
190
|
-
/**
|
|
191
|
-
* Static configuration. Use this when all BPM options are known at module
|
|
192
|
-
* wiring time (no async secret loading needed).
|
|
193
|
-
*/
|
|
194
|
-
static forRoot(options: BPMRootModuleOptions): DynamicModule {
|
|
195
|
-
const featureModules = createBPMFeatureModules(options);
|
|
196
|
-
|
|
197
|
-
return {
|
|
198
|
-
exports: [...featureModules],
|
|
199
|
-
imports: [...(options.imports ?? []), ...featureModules],
|
|
200
|
-
module: BPMRootModule,
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
/**
|
|
205
|
-
* Async configuration. Use this when BPM options must be resolved at
|
|
206
|
-
* runtime — typically when SMTP, webhook, or signature secrets are
|
|
207
|
-
* loaded from Vault / KMS / a host `ConfigService`.
|
|
208
|
-
*
|
|
209
|
-
* Routing-time decisions such as `attachmentRoutePrefix`,
|
|
210
|
-
* `memberResolverProvider`, `attachmentStorageProvider`, and
|
|
211
|
-
* `workflowServiceTaskDispatcherProvider` are read from the top-level
|
|
212
|
-
* options object (not from the `useFactory` return value), because
|
|
213
|
-
* Nest reads controller path metadata and provider tokens synchronously
|
|
214
|
-
* during application bootstrap.
|
|
215
|
-
*/
|
|
216
|
-
static forRootAsync(options: BPMRootModuleAsyncOptions): DynamicModule {
|
|
217
|
-
const authOptions: BPMAuthModuleAsyncOptions = {
|
|
218
|
-
imports: options.imports,
|
|
219
|
-
inject: options.inject,
|
|
220
|
-
useFactory: async (
|
|
221
|
-
...args: readonly unknown[]
|
|
222
|
-
): Promise<BPMAuthModuleOptions> => {
|
|
223
|
-
const rootOptions = await options.useFactory(...args);
|
|
224
|
-
|
|
225
|
-
return createBPMAuthModuleOptions(rootOptions);
|
|
226
|
-
},
|
|
227
|
-
};
|
|
228
|
-
|
|
229
|
-
return {
|
|
230
|
-
exports: [
|
|
231
|
-
NotificationOptionsModule,
|
|
232
|
-
BPMAuthModule,
|
|
233
|
-
IdentityModule,
|
|
234
|
-
OrganizationModule,
|
|
235
|
-
AttachmentModule,
|
|
236
|
-
FormModule,
|
|
237
|
-
TemplateModule,
|
|
238
|
-
DelegationModule,
|
|
239
|
-
NotificationModule,
|
|
240
|
-
SignatureModule,
|
|
241
|
-
WorkflowEngineModule,
|
|
242
|
-
],
|
|
243
|
-
imports: [
|
|
244
|
-
NotificationOptionsModule.forRootAsync({
|
|
245
|
-
imports: options.imports,
|
|
246
|
-
inject: options.inject,
|
|
247
|
-
useFactory: options.useFactory,
|
|
248
|
-
}),
|
|
249
|
-
BPMAuthModule.forRootAsync(authOptions),
|
|
250
|
-
IdentityModule.forRootAsync({
|
|
251
|
-
imports: options.imports,
|
|
252
|
-
inject: options.inject,
|
|
253
|
-
memberResolverProvider: options.memberResolverProvider,
|
|
254
|
-
useFactory: options.useFactory,
|
|
255
|
-
}),
|
|
256
|
-
OrganizationModule,
|
|
257
|
-
AttachmentModule.forRootAsync({
|
|
258
|
-
attachmentRoutePrefix: options.attachmentRoutePrefix,
|
|
259
|
-
imports: options.imports,
|
|
260
|
-
inject: options.inject,
|
|
261
|
-
storageProvider: options.attachmentStorageProvider,
|
|
262
|
-
useFactory: options.useFactory,
|
|
263
|
-
}),
|
|
264
|
-
FormModule,
|
|
265
|
-
TemplateModule,
|
|
266
|
-
DelegationModule,
|
|
267
|
-
NotificationModule,
|
|
268
|
-
SignatureModule.forRootAsync({
|
|
269
|
-
imports: options.imports,
|
|
270
|
-
inject: options.inject,
|
|
271
|
-
useFactory: options.useFactory,
|
|
272
|
-
}),
|
|
273
|
-
WorkflowEngineModule.forRoot({
|
|
274
|
-
imports: options.imports,
|
|
275
|
-
serviceTaskDispatcherProvider:
|
|
276
|
-
options.workflowServiceTaskDispatcherProvider,
|
|
277
|
-
}),
|
|
278
|
-
],
|
|
279
|
-
module: BPMRootModule,
|
|
280
|
-
};
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
function createBPMFeatureModules(
|
|
285
|
-
options: BPMRootModuleOptions,
|
|
286
|
-
): BPMModuleImport[] {
|
|
287
|
-
return [
|
|
288
|
-
NotificationOptionsModule.forRoot(options),
|
|
289
|
-
BPMAuthModule.forRoot(createBPMAuthModuleOptions(options)),
|
|
290
|
-
IdentityModule.forRoot({
|
|
291
|
-
...options,
|
|
292
|
-
imports: options.imports,
|
|
293
|
-
memberResolverProvider: options.memberResolverProvider,
|
|
294
|
-
}),
|
|
295
|
-
OrganizationModule,
|
|
296
|
-
AttachmentModule.forRoot({
|
|
297
|
-
...options,
|
|
298
|
-
imports: options.imports,
|
|
299
|
-
storageProvider: options.attachmentStorageProvider,
|
|
300
|
-
}),
|
|
301
|
-
FormModule,
|
|
302
|
-
TemplateModule,
|
|
303
|
-
DelegationModule,
|
|
304
|
-
NotificationModule,
|
|
305
|
-
SignatureModule.forRoot(options),
|
|
306
|
-
WorkflowEngineModule.forRoot({
|
|
307
|
-
imports: options.imports,
|
|
308
|
-
serviceTaskDispatcherProvider:
|
|
309
|
-
options.workflowServiceTaskDispatcherProvider,
|
|
310
|
-
}),
|
|
311
|
-
];
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
function createBPMAuthModuleOptions(
|
|
315
|
-
options: BPMRootModuleOptions | BPMRootModuleAsyncFactoryOptions,
|
|
316
|
-
): BPMAuthModuleOptions {
|
|
317
|
-
return {
|
|
318
|
-
contextFactory: options.authContextFactory,
|
|
319
|
-
};
|
|
320
|
-
}
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { ExecutionContext } from '@nestjs/common';
|
|
2
|
-
import { GqlExecutionContext } from '@nestjs/graphql';
|
|
3
|
-
import { BPMAuthContext } from './bpm-auth-context';
|
|
4
|
-
|
|
5
|
-
interface BPMContextCarrier {
|
|
6
|
-
bpmAuthContext?: unknown;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
interface BPMRequestCarrier extends BPMContextCarrier {
|
|
10
|
-
readonly req?: BPMContextCarrier;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export function attachBPMAuthContext(
|
|
14
|
-
context: ExecutionContext | undefined,
|
|
15
|
-
authContext: BPMAuthContext,
|
|
16
|
-
): void {
|
|
17
|
-
if (!context) {
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const graphqlContext = GqlExecutionContext.create(context).getContext<
|
|
22
|
-
BPMRequestCarrier | undefined
|
|
23
|
-
>();
|
|
24
|
-
|
|
25
|
-
if (graphqlContext) {
|
|
26
|
-
graphqlContext.bpmAuthContext = authContext;
|
|
27
|
-
|
|
28
|
-
if (graphqlContext.req) {
|
|
29
|
-
graphqlContext.req.bpmAuthContext = authContext;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const httpRequest = context
|
|
36
|
-
.switchToHttp()
|
|
37
|
-
.getRequest<BPMContextCarrier | undefined>();
|
|
38
|
-
|
|
39
|
-
if (httpRequest) {
|
|
40
|
-
httpRequest.bpmAuthContext = authContext;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export function extractBPMAuthContext(
|
|
45
|
-
context?: ExecutionContext,
|
|
46
|
-
): BPMAuthContext | null {
|
|
47
|
-
if (!context) {
|
|
48
|
-
return null;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const graphqlContext = GqlExecutionContext.create(context).getContext<
|
|
52
|
-
BPMRequestCarrier | undefined
|
|
53
|
-
>();
|
|
54
|
-
const graphqlAuthContext = readBPMAuthContext(graphqlContext?.bpmAuthContext);
|
|
55
|
-
|
|
56
|
-
if (graphqlAuthContext) {
|
|
57
|
-
return graphqlAuthContext;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
const requestAuthContext = readBPMAuthContext(
|
|
61
|
-
graphqlContext?.req?.bpmAuthContext,
|
|
62
|
-
);
|
|
63
|
-
|
|
64
|
-
if (requestAuthContext) {
|
|
65
|
-
return requestAuthContext;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
const httpRequest = context
|
|
69
|
-
.switchToHttp()
|
|
70
|
-
.getRequest<BPMContextCarrier | undefined>();
|
|
71
|
-
|
|
72
|
-
return readBPMAuthContext(httpRequest?.bpmAuthContext);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
function readBPMAuthContext(value: unknown): BPMAuthContext | null {
|
|
76
|
-
if (!isRecord(value)) {
|
|
77
|
-
return null;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
const memberId = value.memberId;
|
|
81
|
-
|
|
82
|
-
if (typeof memberId !== 'string') {
|
|
83
|
-
return null;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
return {
|
|
87
|
-
memberId,
|
|
88
|
-
metadata: readRecord(value.metadata),
|
|
89
|
-
permissions: readStringArray(value.permissions),
|
|
90
|
-
roles: readStringArray(value.roles),
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
function isRecord(value: unknown): value is Readonly<Record<string, unknown>> {
|
|
95
|
-
return typeof value === 'object' && value !== null;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
function readRecord(value: unknown): Readonly<Record<string, unknown>> {
|
|
99
|
-
return isRecord(value) ? value : {};
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
function readStringArray(value: unknown): readonly string[] {
|
|
103
|
-
return Array.isArray(value)
|
|
104
|
-
? value.filter((item): item is string => typeof item === 'string')
|
|
105
|
-
: [];
|
|
106
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { ExecutionContext, UnauthorizedException } from '@nestjs/common';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* The minimum authentication context BPM needs to make authorization
|
|
5
|
-
* decisions. Hosts construct this from their own session / JWT / RBAC
|
|
6
|
-
* source and surface it through `BPMRootModuleOptions.authContextFactory`.
|
|
7
|
-
*
|
|
8
|
-
* `roles` and `permissions` are matched against the string sets defined in
|
|
9
|
-
* `BPMAdminGuard` and `BPMDesignerGuard` — see the role / permission table
|
|
10
|
-
* in `libs/bpm-core/README.md` for the exact strings.
|
|
11
|
-
*/
|
|
12
|
-
export interface BPMAuthContext {
|
|
13
|
-
readonly memberId: string;
|
|
14
|
-
readonly metadata: Readonly<Record<string, unknown>>;
|
|
15
|
-
readonly permissions: readonly string[];
|
|
16
|
-
readonly roles: readonly string[];
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export interface BPMAuthContextAccessor {
|
|
20
|
-
assertAuthenticated(context?: ExecutionContext): Promise<BPMAuthContext>;
|
|
21
|
-
getCurrentContext(context?: ExecutionContext): Promise<BPMAuthContext | null>;
|
|
22
|
-
getCurrentMemberId(context?: ExecutionContext): Promise<string>;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export const BPM_AUTH_CONTEXT_ACCESSOR = Symbol('BPM_AUTH_CONTEXT_ACCESSOR');
|
|
26
|
-
|
|
27
|
-
export const BPM_AUTH_MODULE_OPTIONS = Symbol('BPM_AUTH_MODULE_OPTIONS');
|
|
28
|
-
|
|
29
|
-
export async function readAuthenticatedBPMContext(
|
|
30
|
-
accessor: BPMAuthContextAccessor,
|
|
31
|
-
context?: ExecutionContext,
|
|
32
|
-
): Promise<BPMAuthContext> {
|
|
33
|
-
const authContext = await accessor.assertAuthenticated(context);
|
|
34
|
-
|
|
35
|
-
if (!authContext.memberId.trim()) {
|
|
36
|
-
throw new UnauthorizedException('BPM member id is required');
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
return authContext;
|
|
40
|
-
}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
CanActivate,
|
|
3
|
-
ExecutionContext,
|
|
4
|
-
ForbiddenException,
|
|
5
|
-
Injectable,
|
|
6
|
-
UseGuards,
|
|
7
|
-
} from '@nestjs/common';
|
|
8
|
-
import { BPMAuthContext } from './bpm-auth-context';
|
|
9
|
-
import { extractBPMAuthContext } from './bpm-auth-context.extractor';
|
|
10
|
-
import { BPMAuthenticatedGuard } from './bpm-auth.guard';
|
|
11
|
-
|
|
12
|
-
const ADMIN_PERMISSIONS = new Set([
|
|
13
|
-
'bpm:*',
|
|
14
|
-
'bpm:admin',
|
|
15
|
-
'bpm.admin',
|
|
16
|
-
'bpm:admin:*',
|
|
17
|
-
]);
|
|
18
|
-
const DESIGNER_PERMISSIONS = new Set([
|
|
19
|
-
'bpm:*',
|
|
20
|
-
'bpm:admin',
|
|
21
|
-
'bpm.admin',
|
|
22
|
-
'bpm:admin:*',
|
|
23
|
-
'bpm:design',
|
|
24
|
-
'bpm.design',
|
|
25
|
-
'bpm.form.design',
|
|
26
|
-
'bpm.template.design',
|
|
27
|
-
'bpm:form:design',
|
|
28
|
-
'bpm:template:design',
|
|
29
|
-
]);
|
|
30
|
-
|
|
31
|
-
@Injectable()
|
|
32
|
-
export class BPMAdminGuard implements CanActivate {
|
|
33
|
-
canActivate(context: ExecutionContext): boolean {
|
|
34
|
-
const authContext = extractBPMAuthContext(context);
|
|
35
|
-
|
|
36
|
-
if (authContext && isBPMAdmin(authContext)) {
|
|
37
|
-
return true;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
throw new ForbiddenException('BPM admin permission is required');
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
@Injectable()
|
|
45
|
-
export class BPMDesignerGuard implements CanActivate {
|
|
46
|
-
canActivate(context: ExecutionContext): boolean {
|
|
47
|
-
const authContext = extractBPMAuthContext(context);
|
|
48
|
-
|
|
49
|
-
if (authContext && isBPMDesigner(authContext)) {
|
|
50
|
-
return true;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
throw new ForbiddenException('BPM designer permission is required');
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export const BPMAdminOnly = (): ClassDecorator & MethodDecorator =>
|
|
58
|
-
UseGuards(BPMAuthenticatedGuard, BPMAdminGuard);
|
|
59
|
-
|
|
60
|
-
export const BPMDesignerOnly = (): ClassDecorator & MethodDecorator =>
|
|
61
|
-
UseGuards(BPMAuthenticatedGuard, BPMDesignerGuard);
|
|
62
|
-
|
|
63
|
-
export function isBPMAdmin(authContext: BPMAuthContext): boolean {
|
|
64
|
-
return (
|
|
65
|
-
authContext.roles.includes('BPM_ADMIN') ||
|
|
66
|
-
authContext.permissions.some((permission) =>
|
|
67
|
-
ADMIN_PERMISSIONS.has(permission),
|
|
68
|
-
)
|
|
69
|
-
);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
export function isBPMDesigner(authContext: BPMAuthContext): boolean {
|
|
73
|
-
return (
|
|
74
|
-
isBPMAdmin(authContext) ||
|
|
75
|
-
authContext.roles.includes('BPM_DESIGNER') ||
|
|
76
|
-
authContext.permissions.some((permission) =>
|
|
77
|
-
DESIGNER_PERMISSIONS.has(permission),
|
|
78
|
-
)
|
|
79
|
-
);
|
|
80
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
createParamDecorator,
|
|
3
|
-
ExecutionContext,
|
|
4
|
-
UseGuards,
|
|
5
|
-
} from '@nestjs/common';
|
|
6
|
-
import { BPMAuthenticatedGuard } from './bpm-auth.guard';
|
|
7
|
-
import { extractBPMAuthContext } from './bpm-auth-context.extractor';
|
|
8
|
-
|
|
9
|
-
export const BPMAuthenticated = (): ClassDecorator & MethodDecorator =>
|
|
10
|
-
UseGuards(BPMAuthenticatedGuard);
|
|
11
|
-
|
|
12
|
-
export const BPMCurrentAuthContext = createParamDecorator(
|
|
13
|
-
(_data: unknown, context: ExecutionContext) => extractBPMAuthContext(context),
|
|
14
|
-
);
|
|
15
|
-
|
|
16
|
-
export const BPMCurrentMemberId = createParamDecorator(
|
|
17
|
-
(_data: unknown, context: ExecutionContext) =>
|
|
18
|
-
extractBPMAuthContext(context)?.memberId ?? null,
|
|
19
|
-
);
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
CanActivate,
|
|
3
|
-
ExecutionContext,
|
|
4
|
-
Inject,
|
|
5
|
-
Injectable,
|
|
6
|
-
} from '@nestjs/common';
|
|
7
|
-
import {
|
|
8
|
-
BPM_AUTH_CONTEXT_ACCESSOR,
|
|
9
|
-
BPMAuthContextAccessor,
|
|
10
|
-
readAuthenticatedBPMContext,
|
|
11
|
-
} from './bpm-auth-context';
|
|
12
|
-
import { attachBPMAuthContext } from './bpm-auth-context.extractor';
|
|
13
|
-
|
|
14
|
-
@Injectable()
|
|
15
|
-
export class BPMAuthenticatedGuard implements CanActivate {
|
|
16
|
-
constructor(
|
|
17
|
-
@Inject(BPM_AUTH_CONTEXT_ACCESSOR)
|
|
18
|
-
private readonly authContextAccessor: BPMAuthContextAccessor,
|
|
19
|
-
) {}
|
|
20
|
-
|
|
21
|
-
async canActivate(context: ExecutionContext): Promise<boolean> {
|
|
22
|
-
const authContext = await readAuthenticatedBPMContext(
|
|
23
|
-
this.authContextAccessor,
|
|
24
|
-
context,
|
|
25
|
-
);
|
|
26
|
-
|
|
27
|
-
attachBPMAuthContext(context, authContext);
|
|
28
|
-
|
|
29
|
-
return true;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { Injectable, Module, Type } from '@nestjs/common';
|
|
2
|
-
import type { ExecutionContext } from '@nestjs/common';
|
|
3
|
-
import { Test } from '@nestjs/testing';
|
|
4
|
-
import { BPM_AUTH_CONTEXT_ACCESSOR } from './bpm-auth-context';
|
|
5
|
-
import { BPMAuthenticatedGuard } from './bpm-auth.guard';
|
|
6
|
-
import { BPMAuthModule } from './bpm-auth.module';
|
|
7
|
-
import { extractBPMAuthContext } from './bpm-auth-context.extractor';
|
|
8
|
-
|
|
9
|
-
@Injectable()
|
|
10
|
-
class FeatureConsumer {
|
|
11
|
-
constructor(readonly guard: BPMAuthenticatedGuard) {}
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
@Module({
|
|
15
|
-
providers: [FeatureConsumer],
|
|
16
|
-
})
|
|
17
|
-
class FeatureModule {}
|
|
18
|
-
|
|
19
|
-
describe('BPMAuthModule', () => {
|
|
20
|
-
it('makes BPMAuthenticatedGuard injectable from feature module contexts', async (): Promise<void> => {
|
|
21
|
-
const moduleRef = await Test.createTestingModule({
|
|
22
|
-
imports: [BPMAuthModule.forRoot(), FeatureModule],
|
|
23
|
-
}).compile();
|
|
24
|
-
|
|
25
|
-
try {
|
|
26
|
-
const consumer = moduleRef.get(FeatureConsumer);
|
|
27
|
-
|
|
28
|
-
expect(consumer.guard).toBeInstanceOf(BPMAuthenticatedGuard);
|
|
29
|
-
} finally {
|
|
30
|
-
await moduleRef.close();
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
it('makes factory auth context visible to current member decorators after guard activation', async (): Promise<void> => {
|
|
35
|
-
const moduleRef = await Test.createTestingModule({
|
|
36
|
-
imports: [
|
|
37
|
-
BPMAuthModule.forRoot({
|
|
38
|
-
contextFactory: () => ({
|
|
39
|
-
memberId: 'member-from-factory',
|
|
40
|
-
metadata: {},
|
|
41
|
-
permissions: [],
|
|
42
|
-
roles: [],
|
|
43
|
-
}),
|
|
44
|
-
}),
|
|
45
|
-
],
|
|
46
|
-
}).compile();
|
|
47
|
-
|
|
48
|
-
try {
|
|
49
|
-
const guard = moduleRef.get(BPMAuthenticatedGuard);
|
|
50
|
-
const graphqlContext: Record<string, unknown> = {};
|
|
51
|
-
const executionContext = createGraphQLExecutionContext(graphqlContext);
|
|
52
|
-
|
|
53
|
-
await expect(guard.canActivate(executionContext)).resolves.toBe(true);
|
|
54
|
-
expect(extractBPMAuthContext(executionContext)?.memberId).toBe(
|
|
55
|
-
'member-from-factory',
|
|
56
|
-
);
|
|
57
|
-
expect(graphqlContext.bpmAuthContext).toMatchObject({
|
|
58
|
-
memberId: 'member-from-factory',
|
|
59
|
-
});
|
|
60
|
-
} finally {
|
|
61
|
-
await moduleRef.close();
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
it('keeps the auth context accessor injectable for direct host integrations', async (): Promise<void> => {
|
|
66
|
-
const moduleRef = await Test.createTestingModule({
|
|
67
|
-
imports: [BPMAuthModule.forRoot()],
|
|
68
|
-
}).compile();
|
|
69
|
-
|
|
70
|
-
try {
|
|
71
|
-
expect(moduleRef.get(BPM_AUTH_CONTEXT_ACCESSOR)).toBeDefined();
|
|
72
|
-
} finally {
|
|
73
|
-
await moduleRef.close();
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
function createGraphQLExecutionContext(
|
|
79
|
-
graphqlContext: Record<string, unknown>,
|
|
80
|
-
): ExecutionContext {
|
|
81
|
-
const args = [undefined, {}, graphqlContext, undefined];
|
|
82
|
-
const readUndefined = <T = unknown>(): T => undefined as T;
|
|
83
|
-
|
|
84
|
-
return {
|
|
85
|
-
getArgByIndex: <T = unknown>(index: number): T => args[index] as T,
|
|
86
|
-
getArgs: <T extends readonly unknown[] = readonly unknown[]>(): T =>
|
|
87
|
-
args as unknown as T,
|
|
88
|
-
getClass: <T = unknown>(): Type<T> => FeatureConsumer as Type<T>,
|
|
89
|
-
getHandler: () => FeatureConsumer.prototype.constructor,
|
|
90
|
-
getType: () => 'graphql' as never,
|
|
91
|
-
switchToHttp: () => ({
|
|
92
|
-
getNext: readUndefined,
|
|
93
|
-
getRequest: readUndefined,
|
|
94
|
-
getResponse: readUndefined,
|
|
95
|
-
}),
|
|
96
|
-
switchToRpc: () => ({
|
|
97
|
-
getContext: readUndefined,
|
|
98
|
-
getData: readUndefined,
|
|
99
|
-
}),
|
|
100
|
-
switchToWs: () => ({
|
|
101
|
-
getClient: readUndefined,
|
|
102
|
-
getData: readUndefined,
|
|
103
|
-
getPattern: () => '',
|
|
104
|
-
}),
|
|
105
|
-
};
|
|
106
|
-
}
|