@rytass/bpm-core-nestjs-module 0.3.0 → 0.5.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.
Files changed (658) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/eslint.config.mjs +20 -0
  3. package/jest.config.cts +15 -0
  4. package/package.json +2 -2
  5. package/project.json +58 -0
  6. package/src/lib/attachment/attachment-options.spec.ts +45 -0
  7. package/src/lib/attachment/attachment-options.ts +130 -0
  8. package/src/lib/attachment/attachment-storage.provider.spec.ts +79 -0
  9. package/src/lib/attachment/attachment-storage.provider.ts +60 -0
  10. package/src/lib/attachment/{attachment-storage.token.d.ts → attachment-storage.token.ts} +3 -1
  11. package/src/lib/attachment/attachment.controller.ts +39 -0
  12. package/src/lib/attachment/attachment.entity.ts +59 -0
  13. package/src/lib/attachment/attachment.module.ts +149 -0
  14. package/src/lib/attachment/attachment.mutations.ts +22 -0
  15. package/src/lib/attachment/attachment.queries.ts +65 -0
  16. package/src/lib/attachment/attachment.service.spec.ts +319 -0
  17. package/src/lib/attachment/attachment.service.ts +477 -0
  18. package/src/lib/attachment/dto/upload-attachment.input.ts +60 -0
  19. package/src/lib/bpm/bpm-root.module.spec.ts +138 -0
  20. package/src/lib/bpm/bpm-root.module.ts +320 -0
  21. package/src/lib/bpm-auth/bpm-auth-context.extractor.ts +106 -0
  22. package/src/lib/bpm-auth/bpm-auth-context.ts +40 -0
  23. package/src/lib/bpm-auth/bpm-auth.authorization.ts +80 -0
  24. package/src/lib/bpm-auth/bpm-auth.decorators.ts +19 -0
  25. package/src/lib/bpm-auth/bpm-auth.guard.ts +31 -0
  26. package/src/lib/bpm-auth/bpm-auth.module.spec.ts +106 -0
  27. package/src/lib/bpm-auth/bpm-auth.module.ts +69 -0
  28. package/src/lib/bpm-auth/bpm-auth.options.ts +21 -0
  29. package/src/lib/bpm-auth/configurable-bpm-auth-context.accessor.ts +55 -0
  30. package/src/lib/common/filters/all-exceptions.filter.ts +138 -0
  31. package/src/lib/common/iso-duration.ts +31 -0
  32. package/src/lib/condition/condition.module.ts +8 -0
  33. package/src/lib/condition/condition.service.spec.ts +50 -0
  34. package/src/lib/condition/condition.service.ts +141 -0
  35. package/src/lib/database/data-source.ts +7 -0
  36. package/src/lib/database/migration-runner.ts +26 -0
  37. package/src/lib/database/reconcile-legacy-migrations.ts +87 -0
  38. package/src/lib/database/typeorm.config.ts +217 -0
  39. package/src/lib/delegation/delegation-rule.entity.ts +84 -0
  40. package/src/lib/delegation/delegation.enums.ts +21 -0
  41. package/src/lib/delegation/delegation.module.ts +14 -0
  42. package/src/lib/delegation/delegation.mutations.ts +92 -0
  43. package/src/lib/delegation/delegation.queries.ts +111 -0
  44. package/src/lib/delegation/delegation.service.spec.ts +295 -0
  45. package/src/lib/delegation/delegation.service.ts +482 -0
  46. package/src/lib/delegation/dto/delegation-rule.input.ts +125 -0
  47. package/src/lib/form/dto/form-definition.input.ts +90 -0
  48. package/src/lib/form/form-definition-version.entity.ts +66 -0
  49. package/src/lib/form/form-definition.entity.ts +54 -0
  50. package/src/lib/form/form-schema-lint.object.ts +10 -0
  51. package/src/lib/form/form-schema.validator.spec.ts +180 -0
  52. package/src/lib/form/form-schema.validator.ts +538 -0
  53. package/src/lib/form/form.enums.ts +20 -0
  54. package/src/lib/form/form.module.ts +19 -0
  55. package/src/lib/form/form.mutations.ts +73 -0
  56. package/src/lib/form/form.queries.ts +72 -0
  57. package/src/lib/form/form.service.spec.ts +371 -0
  58. package/src/lib/form/form.service.ts +607 -0
  59. package/src/lib/identity/identity-options.ts +41 -0
  60. package/src/lib/identity/identity.module.ts +96 -0
  61. package/src/lib/identity/identity.queries.ts +61 -0
  62. package/src/lib/identity/identity.service.spec.ts +328 -0
  63. package/src/lib/identity/identity.service.ts +277 -0
  64. package/src/lib/identity/member-base.adapter.spec.ts +122 -0
  65. package/src/lib/identity/member-base.adapter.ts +302 -0
  66. package/src/lib/identity/member-metadata-cache.entity.ts +27 -0
  67. package/src/lib/identity/{member-not-found.exception.d.ts → member-not-found.exception.ts} +8 -3
  68. package/src/lib/identity/member-profile.object.ts +28 -0
  69. package/src/lib/identity/member-resolver.interface.ts +140 -0
  70. package/src/lib/migrations/0000000000001-enable-postgres-extensions.ts +14 -0
  71. package/src/lib/migrations/{0000000001000-identity-organization-foundation.js → 0000000001000-identity-organization-foundation.ts} +38 -29
  72. package/src/lib/migrations/{0000000002000-form-builder-foundation.js → 0000000002000-form-builder-foundation.ts} +22 -21
  73. package/src/lib/migrations/{0000000003000-approval-template-foundation.js → 0000000003000-approval-template-foundation.ts} +24 -21
  74. package/src/lib/migrations/{0000000004000-workflow-engine-foundation.js → 0000000004000-workflow-engine-foundation.ts} +46 -34
  75. package/src/lib/migrations/{0000000005000-delegation-rules.js → 0000000005000-delegation-rules.ts} +20 -19
  76. package/src/lib/migrations/{0000000006000-notifications-sla.js → 0000000006000-notifications-sla.ts} +26 -23
  77. package/src/lib/migrations/{0000000007000-signatures-attachments.js → 0000000007000-signatures-attachments.ts} +28 -27
  78. package/src/lib/migrations/{0000000008000-approval-template-categories.js → 0000000008000-approval-template-categories.ts} +28 -25
  79. package/src/lib/migrations/{0000000009000-task-candidates.js → 0000000009000-task-candidates.ts} +26 -23
  80. package/src/lib/migrations/{0000000010000-notification-delivery-state.js → 0000000010000-notification-delivery-state.ts} +16 -17
  81. package/src/lib/migrations/0000000011000-remove-attachment-encryption-key.ts +19 -0
  82. package/src/lib/migrations/0000000012000-notification-sla-idempotency.ts +22 -0
  83. package/src/lib/migrations/0000000013000-workflow-query-indexes.ts +113 -0
  84. package/src/lib/migrations/0000000014000-notification-resolution.ts +29 -0
  85. package/src/lib/migrations/{0000000015000-backfill-stale-notification-resolution.js → 0000000015000-backfill-stale-notification-resolution.ts} +15 -16
  86. package/src/lib/migrations/{0000000016000-archive-parallel-form-drafts.js → 0000000016000-archive-parallel-form-drafts.ts} +15 -16
  87. package/src/lib/migrations/{0000000017000-adhoc-directives.js → 0000000017000-adhoc-directives.ts} +18 -19
  88. package/src/lib/migrations/index.ts +59 -0
  89. package/src/lib/notification/dto/notification-preference.input.ts +46 -0
  90. package/src/lib/notification/notification-delivery-scheduler.service.ts +69 -0
  91. package/src/lib/notification/notification-delivery.service.spec.ts +315 -0
  92. package/src/lib/notification/notification-delivery.service.ts +339 -0
  93. package/src/lib/notification/notification-dispatcher.token.ts +13 -0
  94. package/src/lib/notification/notification-options.module.ts +67 -0
  95. package/src/lib/notification/notification-options.spec.ts +93 -0
  96. package/src/lib/notification/notification-options.ts +452 -0
  97. package/src/lib/notification/notification-preference.entity.ts +35 -0
  98. package/src/lib/notification/notification-sla-scheduler.service.ts +66 -0
  99. package/src/lib/notification/notification-template.spec.ts +33 -0
  100. package/src/lib/notification/notification-template.ts +97 -0
  101. package/src/lib/notification/notification.entity.ts +129 -0
  102. package/src/lib/notification/notification.enums.ts +64 -0
  103. package/src/lib/notification/notification.module.ts +37 -0
  104. package/src/lib/notification/notification.mutations.ts +47 -0
  105. package/src/lib/notification/notification.queries.ts +64 -0
  106. package/src/lib/notification/notification.service.spec.ts +412 -0
  107. package/src/lib/notification/notification.service.ts +1129 -0
  108. package/src/lib/organization/dto/manager-resolution.input.ts +91 -0
  109. package/src/lib/organization/dto/membership.input.ts +77 -0
  110. package/src/lib/organization/dto/org-unit.input.ts +96 -0
  111. package/src/lib/organization/dto/position.input.ts +50 -0
  112. package/src/lib/organization/json-metadata.ts +15 -0
  113. package/src/lib/organization/manager-resolution.entity.ts +44 -0
  114. package/src/lib/organization/membership.entity.ts +50 -0
  115. package/src/lib/organization/org-unit-tree-commit-result.object.ts +8 -0
  116. package/src/lib/organization/org-unit.entity.ts +53 -0
  117. package/src/lib/organization/organization-summary.object.ts +16 -0
  118. package/src/lib/organization/organization.enums.ts +19 -0
  119. package/src/lib/organization/organization.module.ts +27 -0
  120. package/src/lib/organization/organization.mutations.ts +115 -0
  121. package/src/lib/organization/organization.queries.ts +191 -0
  122. package/src/lib/organization/organization.service.spec.ts +835 -0
  123. package/src/lib/organization/organization.service.ts +1245 -0
  124. package/src/lib/organization/position.entity.ts +39 -0
  125. package/src/lib/organization/resolved-manager.object.ts +10 -0
  126. package/src/lib/signature/signature-options.spec.ts +60 -0
  127. package/src/lib/signature/signature-options.ts +120 -0
  128. package/src/lib/signature/signature-verification.object.ts +16 -0
  129. package/src/lib/signature/signature.entity.ts +62 -0
  130. package/src/lib/signature/signature.module.ts +80 -0
  131. package/src/lib/signature/signature.queries.ts +37 -0
  132. package/src/lib/signature/signature.service.spec.ts +134 -0
  133. package/src/lib/signature/signature.service.ts +205 -0
  134. package/src/lib/template/approval-template-category.entity.ts +40 -0
  135. package/src/lib/template/approval-template-version.entity.ts +82 -0
  136. package/src/lib/template/approval-template.entity.ts +64 -0
  137. package/src/lib/template/compose-approval-template.object.ts +23 -0
  138. package/src/lib/template/compose-template.mutations.ts +22 -0
  139. package/src/lib/template/dto/approval-template.input.ts +147 -0
  140. package/src/lib/template/dto/compose-approval-template.input.ts +80 -0
  141. package/src/lib/template/template.enums.ts +30 -0
  142. package/src/lib/template/template.module.ts +33 -0
  143. package/src/lib/template/template.mutations.ts +106 -0
  144. package/src/lib/template/template.queries.ts +119 -0
  145. package/src/lib/template/template.service.spec.ts +822 -0
  146. package/src/lib/template/template.service.ts +1082 -0
  147. package/src/lib/template/workflow-definition.validator.spec.ts +595 -0
  148. package/src/lib/template/workflow-definition.validator.ts +539 -0
  149. package/src/lib/testing/cel-js.jest.ts +46 -0
  150. package/src/lib/workflow-engine/activity-log.entity.ts +48 -0
  151. package/src/lib/workflow-engine/adhoc-directive.entity.ts +90 -0
  152. package/src/lib/workflow-engine/adhoc.enums.ts +42 -0
  153. package/src/lib/workflow-engine/approval-instance-page-info.object.ts +22 -0
  154. package/src/lib/workflow-engine/approval-instance.entity.ts +86 -0
  155. package/src/lib/workflow-engine/dto/adhoc-notification.input.ts +18 -0
  156. package/src/lib/workflow-engine/dto/adhoc-target.input.ts +52 -0
  157. package/src/lib/workflow-engine/dto/cancel-approval-instance.input.ts +18 -0
  158. package/src/lib/workflow-engine/dto/decide-task.input.ts +33 -0
  159. package/src/lib/workflow-engine/dto/dry-run-approval-workflow.input.ts +22 -0
  160. package/src/lib/workflow-engine/dto/resubmit-approval-instance.input.ts +22 -0
  161. package/src/lib/workflow-engine/dto/submit-approval-instance.input.ts +27 -0
  162. package/src/lib/workflow-engine/task-candidate.entity.ts +56 -0
  163. package/src/lib/workflow-engine/task-decision.entity.ts +43 -0
  164. package/src/lib/workflow-engine/task.entity.ts +102 -0
  165. package/src/lib/workflow-engine/workflow-condition-evaluator.ts +168 -0
  166. package/src/lib/workflow-engine/workflow-dashboard-summary.object.ts +22 -0
  167. package/src/lib/workflow-engine/workflow-dry-run.object.ts +58 -0
  168. package/src/lib/workflow-engine/workflow-engine.enums.ts +102 -0
  169. package/src/lib/workflow-engine/workflow-engine.module.ts +77 -0
  170. package/src/lib/workflow-engine/workflow-engine.mutations.ts +193 -0
  171. package/src/lib/workflow-engine/workflow-engine.queries.ts +241 -0
  172. package/src/lib/workflow-engine/workflow-engine.service.spec.ts +3345 -0
  173. package/src/lib/workflow-engine/workflow-engine.service.ts +6022 -0
  174. package/src/lib/workflow-engine/{workflow-engine.tokens.d.ts → workflow-engine.tokens.ts} +9 -3
  175. package/src/lib/workflow-engine/workflow-service-task-dispatcher.token.ts +69 -0
  176. package/src/lib/workflow-engine/workflow-token.entity.ts +40 -0
  177. package/tsconfig.json +24 -0
  178. package/tsconfig.lib.json +16 -0
  179. package/tsconfig.spec.json +16 -0
  180. package/src/index.js +0 -18
  181. package/src/index.js.map +0 -1
  182. package/src/lib/attachment/attachment-options.d.ts +0 -44
  183. package/src/lib/attachment/attachment-options.js +0 -62
  184. package/src/lib/attachment/attachment-options.js.map +0 -1
  185. package/src/lib/attachment/attachment-storage.provider.d.ts +0 -4
  186. package/src/lib/attachment/attachment-storage.provider.js +0 -35
  187. package/src/lib/attachment/attachment-storage.provider.js.map +0 -1
  188. package/src/lib/attachment/attachment-storage.token.js +0 -5
  189. package/src/lib/attachment/attachment-storage.token.js.map +0 -1
  190. package/src/lib/attachment/attachment.controller.d.ts +0 -8
  191. package/src/lib/attachment/attachment.controller.js +0 -38
  192. package/src/lib/attachment/attachment.controller.js.map +0 -1
  193. package/src/lib/attachment/attachment.entity.d.ts +0 -14
  194. package/src/lib/attachment/attachment.entity.js +0 -74
  195. package/src/lib/attachment/attachment.entity.js.map +0 -1
  196. package/src/lib/attachment/attachment.module.d.ts +0 -27
  197. package/src/lib/attachment/attachment.module.js +0 -103
  198. package/src/lib/attachment/attachment.module.js.map +0 -1
  199. package/src/lib/attachment/attachment.mutations.d.ts +0 -8
  200. package/src/lib/attachment/attachment.mutations.js +0 -35
  201. package/src/lib/attachment/attachment.mutations.js.map +0 -1
  202. package/src/lib/attachment/attachment.queries.d.ts +0 -9
  203. package/src/lib/attachment/attachment.queries.js +0 -78
  204. package/src/lib/attachment/attachment.queries.js.map +0 -1
  205. package/src/lib/attachment/attachment.service.d.ts +0 -49
  206. package/src/lib/attachment/attachment.service.js +0 -276
  207. package/src/lib/attachment/attachment.service.js.map +0 -1
  208. package/src/lib/attachment/dto/upload-attachment.input.d.ts +0 -11
  209. package/src/lib/attachment/dto/upload-attachment.input.js +0 -68
  210. package/src/lib/attachment/dto/upload-attachment.input.js.map +0 -1
  211. package/src/lib/attachment/index.js +0 -9
  212. package/src/lib/attachment/index.js.map +0 -1
  213. package/src/lib/bpm/bpm-root.module.d.ts +0 -155
  214. package/src/lib/bpm/bpm-root.module.js +0 -170
  215. package/src/lib/bpm/bpm-root.module.js.map +0 -1
  216. package/src/lib/bpm/index.js +0 -5
  217. package/src/lib/bpm/index.js.map +0 -1
  218. package/src/lib/bpm-auth/bpm-auth-context.d.ts +0 -24
  219. package/src/lib/bpm-auth/bpm-auth-context.extractor.d.ts +0 -4
  220. package/src/lib/bpm-auth/bpm-auth-context.extractor.js +0 -69
  221. package/src/lib/bpm-auth/bpm-auth-context.extractor.js.map +0 -1
  222. package/src/lib/bpm-auth/bpm-auth-context.js +0 -15
  223. package/src/lib/bpm-auth/bpm-auth-context.js.map +0 -1
  224. package/src/lib/bpm-auth/bpm-auth.authorization.d.ts +0 -12
  225. package/src/lib/bpm-auth/bpm-auth.authorization.js +0 -67
  226. package/src/lib/bpm-auth/bpm-auth.authorization.js.map +0 -1
  227. package/src/lib/bpm-auth/bpm-auth.decorators.d.ts +0 -3
  228. package/src/lib/bpm-auth/bpm-auth.decorators.js +0 -11
  229. package/src/lib/bpm-auth/bpm-auth.decorators.js.map +0 -1
  230. package/src/lib/bpm-auth/bpm-auth.guard.d.ts +0 -7
  231. package/src/lib/bpm-auth/bpm-auth.guard.js +0 -24
  232. package/src/lib/bpm-auth/bpm-auth.guard.js.map +0 -1
  233. package/src/lib/bpm-auth/bpm-auth.module.d.ts +0 -6
  234. package/src/lib/bpm-auth/bpm-auth.module.js +0 -69
  235. package/src/lib/bpm-auth/bpm-auth.module.js.map +0 -1
  236. package/src/lib/bpm-auth/bpm-auth.options.d.ts +0 -11
  237. package/src/lib/bpm-auth/bpm-auth.options.js +0 -3
  238. package/src/lib/bpm-auth/bpm-auth.options.js.map +0 -1
  239. package/src/lib/bpm-auth/configurable-bpm-auth-context.accessor.d.ts +0 -10
  240. package/src/lib/bpm-auth/configurable-bpm-auth-context.accessor.js +0 -40
  241. package/src/lib/bpm-auth/configurable-bpm-auth-context.accessor.js.map +0 -1
  242. package/src/lib/bpm-auth/index.js +0 -10
  243. package/src/lib/bpm-auth/index.js.map +0 -1
  244. package/src/lib/common/filters/all-exceptions.filter.d.ts +0 -25
  245. package/src/lib/common/filters/all-exceptions.filter.js +0 -93
  246. package/src/lib/common/filters/all-exceptions.filter.js.map +0 -1
  247. package/src/lib/common/index.js +0 -5
  248. package/src/lib/common/index.js.map +0 -1
  249. package/src/lib/common/iso-duration.d.ts +0 -1
  250. package/src/lib/common/iso-duration.js +0 -27
  251. package/src/lib/common/iso-duration.js.map +0 -1
  252. package/src/lib/condition/condition.module.d.ts +0 -2
  253. package/src/lib/condition/condition.module.js +0 -16
  254. package/src/lib/condition/condition.module.js.map +0 -1
  255. package/src/lib/condition/condition.service.d.ts +0 -16
  256. package/src/lib/condition/condition.service.js +0 -82
  257. package/src/lib/condition/condition.service.js.map +0 -1
  258. package/src/lib/condition/index.js +0 -6
  259. package/src/lib/condition/index.js.map +0 -1
  260. package/src/lib/database/data-source.d.ts +0 -4
  261. package/src/lib/database/data-source.js +0 -7
  262. package/src/lib/database/data-source.js.map +0 -1
  263. package/src/lib/database/index.js +0 -6
  264. package/src/lib/database/index.js.map +0 -1
  265. package/src/lib/database/migration-runner.d.ts +0 -1
  266. package/src/lib/database/migration-runner.js +0 -25
  267. package/src/lib/database/migration-runner.js.map +0 -1
  268. package/src/lib/database/reconcile-legacy-migrations.d.ts +0 -13
  269. package/src/lib/database/reconcile-legacy-migrations.js +0 -70
  270. package/src/lib/database/reconcile-legacy-migrations.js.map +0 -1
  271. package/src/lib/database/typeorm.config.d.ts +0 -14
  272. package/src/lib/database/typeorm.config.js +0 -135
  273. package/src/lib/database/typeorm.config.js.map +0 -1
  274. package/src/lib/delegation/delegation-rule.entity.d.ts +0 -19
  275. package/src/lib/delegation/delegation-rule.entity.js +0 -99
  276. package/src/lib/delegation/delegation-rule.entity.js.map +0 -1
  277. package/src/lib/delegation/delegation.enums.d.ts +0 -10
  278. package/src/lib/delegation/delegation.enums.js +0 -23
  279. package/src/lib/delegation/delegation.enums.js.map +0 -1
  280. package/src/lib/delegation/delegation.module.d.ts +0 -2
  281. package/src/lib/delegation/delegation.module.js +0 -22
  282. package/src/lib/delegation/delegation.module.js.map +0 -1
  283. package/src/lib/delegation/delegation.mutations.d.ts +0 -11
  284. package/src/lib/delegation/delegation.mutations.js +0 -87
  285. package/src/lib/delegation/delegation.mutations.js.map +0 -1
  286. package/src/lib/delegation/delegation.queries.d.ts +0 -10
  287. package/src/lib/delegation/delegation.queries.js +0 -91
  288. package/src/lib/delegation/delegation.queries.js.map +0 -1
  289. package/src/lib/delegation/delegation.service.d.ts +0 -56
  290. package/src/lib/delegation/delegation.service.js +0 -268
  291. package/src/lib/delegation/delegation.service.js.map +0 -1
  292. package/src/lib/delegation/dto/delegation-rule.input.d.ts +0 -24
  293. package/src/lib/delegation/dto/delegation-rule.input.js +0 -143
  294. package/src/lib/delegation/dto/delegation-rule.input.js.map +0 -1
  295. package/src/lib/delegation/index.js +0 -9
  296. package/src/lib/delegation/index.js.map +0 -1
  297. package/src/lib/form/dto/form-definition.input.d.ts +0 -26
  298. package/src/lib/form/dto/form-definition.input.js +0 -126
  299. package/src/lib/form/dto/form-definition.input.js.map +0 -1
  300. package/src/lib/form/form-definition-version.entity.d.ts +0 -17
  301. package/src/lib/form/form-definition-version.entity.js +0 -84
  302. package/src/lib/form/form-definition-version.entity.js.map +0 -1
  303. package/src/lib/form/form-definition.entity.d.ts +0 -13
  304. package/src/lib/form/form-definition.entity.js +0 -66
  305. package/src/lib/form/form-definition.entity.js.map +0 -1
  306. package/src/lib/form/form-schema-lint.object.d.ts +0 -4
  307. package/src/lib/form/form-schema-lint.object.js +0 -20
  308. package/src/lib/form/form-schema-lint.object.js.map +0 -1
  309. package/src/lib/form/form-schema.validator.d.ts +0 -13
  310. package/src/lib/form/form-schema.validator.js +0 -354
  311. package/src/lib/form/form-schema.validator.js.map +0 -1
  312. package/src/lib/form/form.enums.d.ts +0 -9
  313. package/src/lib/form/form.enums.js +0 -22
  314. package/src/lib/form/form.enums.js.map +0 -1
  315. package/src/lib/form/form.module.d.ts +0 -2
  316. package/src/lib/form/form.module.js +0 -27
  317. package/src/lib/form/form.module.js.map +0 -1
  318. package/src/lib/form/form.mutations.d.ts +0 -14
  319. package/src/lib/form/form.mutations.js +0 -89
  320. package/src/lib/form/form.mutations.js.map +0 -1
  321. package/src/lib/form/form.queries.d.ts +0 -16
  322. package/src/lib/form/form.queries.js +0 -96
  323. package/src/lib/form/form.queries.js.map +0 -1
  324. package/src/lib/form/form.service.d.ts +0 -49
  325. package/src/lib/form/form.service.js +0 -346
  326. package/src/lib/form/form.service.js.map +0 -1
  327. package/src/lib/form/index.js +0 -12
  328. package/src/lib/form/index.js.map +0 -1
  329. package/src/lib/identity/identity-options.d.ts +0 -13
  330. package/src/lib/identity/identity-options.js +0 -20
  331. package/src/lib/identity/identity-options.js.map +0 -1
  332. package/src/lib/identity/identity.module.d.ts +0 -17
  333. package/src/lib/identity/identity.module.js +0 -65
  334. package/src/lib/identity/identity.module.js.map +0 -1
  335. package/src/lib/identity/identity.queries.d.ts +0 -12
  336. package/src/lib/identity/identity.queries.js +0 -79
  337. package/src/lib/identity/identity.queries.js.map +0 -1
  338. package/src/lib/identity/identity.service.d.ts +0 -22
  339. package/src/lib/identity/identity.service.js +0 -141
  340. package/src/lib/identity/identity.service.js.map +0 -1
  341. package/src/lib/identity/index.js +0 -8
  342. package/src/lib/identity/index.js.map +0 -1
  343. package/src/lib/identity/member-base.adapter.d.ts +0 -95
  344. package/src/lib/identity/member-base.adapter.js +0 -137
  345. package/src/lib/identity/member-base.adapter.js.map +0 -1
  346. package/src/lib/identity/member-metadata-cache.entity.d.ts +0 -8
  347. package/src/lib/identity/member-metadata-cache.entity.js +0 -39
  348. package/src/lib/identity/member-metadata-cache.entity.js.map +0 -1
  349. package/src/lib/identity/member-not-found.exception.js +0 -26
  350. package/src/lib/identity/member-not-found.exception.js.map +0 -1
  351. package/src/lib/identity/member-profile.object.d.ts +0 -8
  352. package/src/lib/identity/member-profile.object.js +0 -37
  353. package/src/lib/identity/member-profile.object.js.map +0 -1
  354. package/src/lib/identity/member-resolver.interface.d.ts +0 -79
  355. package/src/lib/identity/member-resolver.interface.js +0 -19
  356. package/src/lib/identity/member-resolver.interface.js.map +0 -1
  357. package/src/lib/migrations/0000000000001-enable-postgres-extensions.d.ts +0 -6
  358. package/src/lib/migrations/0000000000001-enable-postgres-extensions.js +0 -17
  359. package/src/lib/migrations/0000000000001-enable-postgres-extensions.js.map +0 -1
  360. package/src/lib/migrations/0000000001000-identity-organization-foundation.d.ts +0 -6
  361. package/src/lib/migrations/0000000001000-identity-organization-foundation.js.map +0 -1
  362. package/src/lib/migrations/0000000002000-form-builder-foundation.d.ts +0 -6
  363. package/src/lib/migrations/0000000002000-form-builder-foundation.js.map +0 -1
  364. package/src/lib/migrations/0000000003000-approval-template-foundation.d.ts +0 -6
  365. package/src/lib/migrations/0000000003000-approval-template-foundation.js.map +0 -1
  366. package/src/lib/migrations/0000000004000-workflow-engine-foundation.d.ts +0 -6
  367. package/src/lib/migrations/0000000004000-workflow-engine-foundation.js.map +0 -1
  368. package/src/lib/migrations/0000000005000-delegation-rules.d.ts +0 -6
  369. package/src/lib/migrations/0000000005000-delegation-rules.js.map +0 -1
  370. package/src/lib/migrations/0000000006000-notifications-sla.d.ts +0 -6
  371. package/src/lib/migrations/0000000006000-notifications-sla.js.map +0 -1
  372. package/src/lib/migrations/0000000007000-signatures-attachments.d.ts +0 -6
  373. package/src/lib/migrations/0000000007000-signatures-attachments.js.map +0 -1
  374. package/src/lib/migrations/0000000008000-approval-template-categories.d.ts +0 -6
  375. package/src/lib/migrations/0000000008000-approval-template-categories.js.map +0 -1
  376. package/src/lib/migrations/0000000009000-task-candidates.d.ts +0 -6
  377. package/src/lib/migrations/0000000009000-task-candidates.js.map +0 -1
  378. package/src/lib/migrations/0000000010000-notification-delivery-state.d.ts +0 -6
  379. package/src/lib/migrations/0000000010000-notification-delivery-state.js.map +0 -1
  380. package/src/lib/migrations/0000000011000-remove-attachment-encryption-key.d.ts +0 -6
  381. package/src/lib/migrations/0000000011000-remove-attachment-encryption-key.js +0 -22
  382. package/src/lib/migrations/0000000011000-remove-attachment-encryption-key.js.map +0 -1
  383. package/src/lib/migrations/0000000012000-notification-sla-idempotency.d.ts +0 -6
  384. package/src/lib/migrations/0000000012000-notification-sla-idempotency.js +0 -21
  385. package/src/lib/migrations/0000000012000-notification-sla-idempotency.js.map +0 -1
  386. package/src/lib/migrations/0000000013000-workflow-query-indexes.d.ts +0 -6
  387. package/src/lib/migrations/0000000013000-workflow-query-indexes.js +0 -80
  388. package/src/lib/migrations/0000000013000-workflow-query-indexes.js.map +0 -1
  389. package/src/lib/migrations/0000000014000-notification-resolution.d.ts +0 -6
  390. package/src/lib/migrations/0000000014000-notification-resolution.js +0 -30
  391. package/src/lib/migrations/0000000014000-notification-resolution.js.map +0 -1
  392. package/src/lib/migrations/0000000015000-backfill-stale-notification-resolution.d.ts +0 -15
  393. package/src/lib/migrations/0000000015000-backfill-stale-notification-resolution.js.map +0 -1
  394. package/src/lib/migrations/0000000016000-archive-parallel-form-drafts.d.ts +0 -15
  395. package/src/lib/migrations/0000000016000-archive-parallel-form-drafts.js.map +0 -1
  396. package/src/lib/migrations/0000000017000-adhoc-directives.d.ts +0 -6
  397. package/src/lib/migrations/0000000017000-adhoc-directives.js.map +0 -1
  398. package/src/lib/migrations/index.d.ts +0 -20
  399. package/src/lib/migrations/index.js +0 -61
  400. package/src/lib/migrations/index.js.map +0 -1
  401. package/src/lib/notification/dto/notification-preference.input.d.ts +0 -9
  402. package/src/lib/notification/dto/notification-preference.input.js +0 -53
  403. package/src/lib/notification/dto/notification-preference.input.js.map +0 -1
  404. package/src/lib/notification/index.js +0 -11
  405. package/src/lib/notification/index.js.map +0 -1
  406. package/src/lib/notification/notification-delivery-scheduler.service.d.ts +0 -13
  407. package/src/lib/notification/notification-delivery-scheduler.service.js +0 -53
  408. package/src/lib/notification/notification-delivery-scheduler.service.js.map +0 -1
  409. package/src/lib/notification/notification-delivery.service.d.ts +0 -23
  410. package/src/lib/notification/notification-delivery.service.js +0 -245
  411. package/src/lib/notification/notification-delivery.service.js.map +0 -1
  412. package/src/lib/notification/notification-dispatcher.token.d.ts +0 -7
  413. package/src/lib/notification/notification-dispatcher.token.js +0 -5
  414. package/src/lib/notification/notification-dispatcher.token.js.map +0 -1
  415. package/src/lib/notification/notification-options.d.ts +0 -215
  416. package/src/lib/notification/notification-options.js +0 -128
  417. package/src/lib/notification/notification-options.js.map +0 -1
  418. package/src/lib/notification/notification-options.module.d.ts +0 -23
  419. package/src/lib/notification/notification-options.module.js +0 -41
  420. package/src/lib/notification/notification-options.module.js.map +0 -1
  421. package/src/lib/notification/notification-preference.entity.d.ts +0 -10
  422. package/src/lib/notification/notification-preference.entity.js +0 -50
  423. package/src/lib/notification/notification-preference.entity.js.map +0 -1
  424. package/src/lib/notification/notification-sla-scheduler.service.d.ts +0 -13
  425. package/src/lib/notification/notification-sla-scheduler.service.js +0 -51
  426. package/src/lib/notification/notification-sla-scheduler.service.js.map +0 -1
  427. package/src/lib/notification/notification-template.d.ts +0 -13
  428. package/src/lib/notification/notification-template.js +0 -61
  429. package/src/lib/notification/notification-template.js.map +0 -1
  430. package/src/lib/notification/notification.entity.d.ts +0 -31
  431. package/src/lib/notification/notification.entity.js +0 -149
  432. package/src/lib/notification/notification.entity.js.map +0 -1
  433. package/src/lib/notification/notification.enums.d.ts +0 -38
  434. package/src/lib/notification/notification.enums.js +0 -63
  435. package/src/lib/notification/notification.enums.js.map +0 -1
  436. package/src/lib/notification/notification.module.d.ts +0 -2
  437. package/src/lib/notification/notification.module.js +0 -45
  438. package/src/lib/notification/notification.module.js.map +0 -1
  439. package/src/lib/notification/notification.mutations.d.ts +0 -11
  440. package/src/lib/notification/notification.mutations.js +0 -64
  441. package/src/lib/notification/notification.mutations.js.map +0 -1
  442. package/src/lib/notification/notification.queries.d.ts +0 -11
  443. package/src/lib/notification/notification.queries.js +0 -77
  444. package/src/lib/notification/notification.queries.js.map +0 -1
  445. package/src/lib/notification/notification.service.d.ts +0 -121
  446. package/src/lib/notification/notification.service.js +0 -713
  447. package/src/lib/notification/notification.service.js.map +0 -1
  448. package/src/lib/organization/dto/manager-resolution.input.d.ts +0 -18
  449. package/src/lib/organization/dto/manager-resolution.input.js +0 -107
  450. package/src/lib/organization/dto/manager-resolution.input.js.map +0 -1
  451. package/src/lib/organization/dto/membership.input.d.ts +0 -16
  452. package/src/lib/organization/dto/membership.input.js +0 -99
  453. package/src/lib/organization/dto/membership.input.js.map +0 -1
  454. package/src/lib/organization/dto/org-unit.input.d.ts +0 -24
  455. package/src/lib/organization/dto/org-unit.input.js +0 -119
  456. package/src/lib/organization/dto/org-unit.input.js.map +0 -1
  457. package/src/lib/organization/dto/position.input.d.ts +0 -13
  458. package/src/lib/organization/dto/position.input.js +0 -70
  459. package/src/lib/organization/dto/position.input.js.map +0 -1
  460. package/src/lib/organization/index.js +0 -16
  461. package/src/lib/organization/index.js.map +0 -1
  462. package/src/lib/organization/json-metadata.d.ts +0 -1
  463. package/src/lib/organization/json-metadata.js +0 -14
  464. package/src/lib/organization/json-metadata.js.map +0 -1
  465. package/src/lib/organization/manager-resolution.entity.d.ts +0 -11
  466. package/src/lib/organization/manager-resolution.entity.js +0 -55
  467. package/src/lib/organization/manager-resolution.entity.js.map +0 -1
  468. package/src/lib/organization/membership.entity.d.ts +0 -11
  469. package/src/lib/organization/membership.entity.js +0 -60
  470. package/src/lib/organization/membership.entity.js.map +0 -1
  471. package/src/lib/organization/org-unit-tree-commit-result.object.d.ts +0 -4
  472. package/src/lib/organization/org-unit-tree-commit-result.object.js +0 -17
  473. package/src/lib/organization/org-unit-tree-commit-result.object.js.map +0 -1
  474. package/src/lib/organization/org-unit.entity.d.ts +0 -13
  475. package/src/lib/organization/org-unit.entity.js +0 -64
  476. package/src/lib/organization/org-unit.entity.js.map +0 -1
  477. package/src/lib/organization/organization-summary.object.d.ts +0 -6
  478. package/src/lib/organization/organization-summary.object.js +0 -28
  479. package/src/lib/organization/organization-summary.object.js.map +0 -1
  480. package/src/lib/organization/organization.enums.d.ts +0 -11
  481. package/src/lib/organization/organization.enums.js +0 -22
  482. package/src/lib/organization/organization.enums.js.map +0 -1
  483. package/src/lib/organization/organization.module.d.ts +0 -2
  484. package/src/lib/organization/organization.module.js +0 -35
  485. package/src/lib/organization/organization.module.js.map +0 -1
  486. package/src/lib/organization/organization.mutations.d.ts +0 -26
  487. package/src/lib/organization/organization.mutations.js +0 -148
  488. package/src/lib/organization/organization.mutations.js.map +0 -1
  489. package/src/lib/organization/organization.queries.d.ts +0 -23
  490. package/src/lib/organization/organization.queries.js +0 -202
  491. package/src/lib/organization/organization.queries.js.map +0 -1
  492. package/src/lib/organization/organization.service.d.ts +0 -102
  493. package/src/lib/organization/organization.service.js +0 -751
  494. package/src/lib/organization/organization.service.js.map +0 -1
  495. package/src/lib/organization/position.entity.d.ts +0 -9
  496. package/src/lib/organization/position.entity.js +0 -48
  497. package/src/lib/organization/position.entity.js.map +0 -1
  498. package/src/lib/organization/resolved-manager.object.d.ts +0 -4
  499. package/src/lib/organization/resolved-manager.object.js +0 -20
  500. package/src/lib/organization/resolved-manager.object.js.map +0 -1
  501. package/src/lib/signature/index.js +0 -8
  502. package/src/lib/signature/index.js.map +0 -1
  503. package/src/lib/signature/signature-options.d.ts +0 -33
  504. package/src/lib/signature/signature-options.js +0 -51
  505. package/src/lib/signature/signature-options.js.map +0 -1
  506. package/src/lib/signature/signature-verification.object.d.ts +0 -6
  507. package/src/lib/signature/signature-verification.object.js +0 -28
  508. package/src/lib/signature/signature-verification.object.js.map +0 -1
  509. package/src/lib/signature/signature.entity.d.ts +0 -16
  510. package/src/lib/signature/signature.entity.js +0 -88
  511. package/src/lib/signature/signature.entity.js.map +0 -1
  512. package/src/lib/signature/signature.module.d.ts +0 -11
  513. package/src/lib/signature/signature.module.js +0 -60
  514. package/src/lib/signature/signature.module.js.map +0 -1
  515. package/src/lib/signature/signature.queries.d.ts +0 -11
  516. package/src/lib/signature/signature.queries.js +0 -46
  517. package/src/lib/signature/signature.queries.js.map +0 -1
  518. package/src/lib/signature/signature.service.d.ts +0 -25
  519. package/src/lib/signature/signature.service.js +0 -124
  520. package/src/lib/signature/signature.service.js.map +0 -1
  521. package/src/lib/template/approval-template-category.entity.d.ts +0 -9
  522. package/src/lib/template/approval-template-category.entity.js +0 -49
  523. package/src/lib/template/approval-template-category.entity.js.map +0 -1
  524. package/src/lib/template/approval-template-version.entity.d.ts +0 -21
  525. package/src/lib/template/approval-template-version.entity.js +0 -106
  526. package/src/lib/template/approval-template-version.entity.js.map +0 -1
  527. package/src/lib/template/approval-template.entity.d.ts +0 -14
  528. package/src/lib/template/approval-template.entity.js +0 -74
  529. package/src/lib/template/approval-template.entity.js.map +0 -1
  530. package/src/lib/template/compose-approval-template.object.d.ts +0 -11
  531. package/src/lib/template/compose-approval-template.object.js +0 -36
  532. package/src/lib/template/compose-approval-template.object.js.map +0 -1
  533. package/src/lib/template/compose-template.mutations.d.ts +0 -8
  534. package/src/lib/template/compose-template.mutations.js +0 -32
  535. package/src/lib/template/compose-template.mutations.js.map +0 -1
  536. package/src/lib/template/dto/approval-template.input.d.ts +0 -36
  537. package/src/lib/template/dto/approval-template.input.js +0 -187
  538. package/src/lib/template/dto/approval-template.input.js.map +0 -1
  539. package/src/lib/template/dto/compose-approval-template.input.d.ts +0 -17
  540. package/src/lib/template/dto/compose-approval-template.input.js +0 -99
  541. package/src/lib/template/dto/compose-approval-template.input.js.map +0 -1
  542. package/src/lib/template/index.js +0 -14
  543. package/src/lib/template/index.js.map +0 -1
  544. package/src/lib/template/template.enums.d.ts +0 -14
  545. package/src/lib/template/template.enums.js +0 -31
  546. package/src/lib/template/template.enums.js.map +0 -1
  547. package/src/lib/template/template.module.d.ts +0 -2
  548. package/src/lib/template/template.module.js +0 -41
  549. package/src/lib/template/template.module.js.map +0 -1
  550. package/src/lib/template/template.mutations.d.ts +0 -20
  551. package/src/lib/template/template.mutations.js +0 -139
  552. package/src/lib/template/template.mutations.js.map +0 -1
  553. package/src/lib/template/template.queries.d.ts +0 -16
  554. package/src/lib/template/template.queries.js +0 -133
  555. package/src/lib/template/template.queries.js.map +0 -1
  556. package/src/lib/template/template.service.d.ts +0 -83
  557. package/src/lib/template/template.service.js +0 -654
  558. package/src/lib/template/template.service.js.map +0 -1
  559. package/src/lib/template/workflow-definition.validator.d.ts +0 -9
  560. package/src/lib/template/workflow-definition.validator.js +0 -362
  561. package/src/lib/template/workflow-definition.validator.js.map +0 -1
  562. package/src/lib/testing/cel-js.jest.d.ts +0 -15
  563. package/src/lib/testing/cel-js.jest.js +0 -27
  564. package/src/lib/testing/cel-js.jest.js.map +0 -1
  565. package/src/lib/workflow-engine/activity-log.entity.d.ts +0 -12
  566. package/src/lib/workflow-engine/activity-log.entity.js +0 -62
  567. package/src/lib/workflow-engine/activity-log.entity.js.map +0 -1
  568. package/src/lib/workflow-engine/adhoc-directive.entity.d.ts +0 -31
  569. package/src/lib/workflow-engine/adhoc-directive.entity.js +0 -105
  570. package/src/lib/workflow-engine/adhoc-directive.entity.js.map +0 -1
  571. package/src/lib/workflow-engine/adhoc.enums.d.ts +0 -21
  572. package/src/lib/workflow-engine/adhoc.enums.js +0 -42
  573. package/src/lib/workflow-engine/adhoc.enums.js.map +0 -1
  574. package/src/lib/workflow-engine/approval-instance-page-info.object.d.ts +0 -8
  575. package/src/lib/workflow-engine/approval-instance-page-info.object.js +0 -36
  576. package/src/lib/workflow-engine/approval-instance-page-info.object.js.map +0 -1
  577. package/src/lib/workflow-engine/approval-instance.entity.d.ts +0 -22
  578. package/src/lib/workflow-engine/approval-instance.entity.js +0 -113
  579. package/src/lib/workflow-engine/approval-instance.entity.js.map +0 -1
  580. package/src/lib/workflow-engine/dto/adhoc-notification.input.d.ts +0 -6
  581. package/src/lib/workflow-engine/dto/adhoc-notification.input.js +0 -28
  582. package/src/lib/workflow-engine/dto/adhoc-notification.input.js.map +0 -1
  583. package/src/lib/workflow-engine/dto/adhoc-target.input.d.ts +0 -16
  584. package/src/lib/workflow-engine/dto/adhoc-target.input.js +0 -61
  585. package/src/lib/workflow-engine/dto/adhoc-target.input.js.map +0 -1
  586. package/src/lib/workflow-engine/dto/cancel-approval-instance.input.d.ts +0 -5
  587. package/src/lib/workflow-engine/dto/cancel-approval-instance.input.js +0 -29
  588. package/src/lib/workflow-engine/dto/cancel-approval-instance.input.js.map +0 -1
  589. package/src/lib/workflow-engine/dto/decide-task.input.d.ts +0 -9
  590. package/src/lib/workflow-engine/dto/decide-task.input.js +0 -47
  591. package/src/lib/workflow-engine/dto/decide-task.input.js.map +0 -1
  592. package/src/lib/workflow-engine/dto/dry-run-approval-workflow.input.d.ts +0 -6
  593. package/src/lib/workflow-engine/dto/dry-run-approval-workflow.input.js +0 -34
  594. package/src/lib/workflow-engine/dto/dry-run-approval-workflow.input.js.map +0 -1
  595. package/src/lib/workflow-engine/dto/resubmit-approval-instance.input.d.ts +0 -6
  596. package/src/lib/workflow-engine/dto/resubmit-approval-instance.input.js +0 -34
  597. package/src/lib/workflow-engine/dto/resubmit-approval-instance.input.js.map +0 -1
  598. package/src/lib/workflow-engine/dto/submit-approval-instance.input.d.ts +0 -7
  599. package/src/lib/workflow-engine/dto/submit-approval-instance.input.js +0 -40
  600. package/src/lib/workflow-engine/dto/submit-approval-instance.input.js.map +0 -1
  601. package/src/lib/workflow-engine/index.js +0 -28
  602. package/src/lib/workflow-engine/index.js.map +0 -1
  603. package/src/lib/workflow-engine/task-candidate.entity.d.ts +0 -14
  604. package/src/lib/workflow-engine/task-candidate.entity.js +0 -72
  605. package/src/lib/workflow-engine/task-candidate.entity.js.map +0 -1
  606. package/src/lib/workflow-engine/task-decision.entity.d.ts +0 -12
  607. package/src/lib/workflow-engine/task-decision.entity.js +0 -60
  608. package/src/lib/workflow-engine/task-decision.entity.js.map +0 -1
  609. package/src/lib/workflow-engine/task.entity.d.ts +0 -25
  610. package/src/lib/workflow-engine/task.entity.js +0 -130
  611. package/src/lib/workflow-engine/task.entity.js.map +0 -1
  612. package/src/lib/workflow-engine/workflow-condition-evaluator.d.ts +0 -5
  613. package/src/lib/workflow-engine/workflow-condition-evaluator.js +0 -107
  614. package/src/lib/workflow-engine/workflow-condition-evaluator.js.map +0 -1
  615. package/src/lib/workflow-engine/workflow-dashboard-summary.object.d.ts +0 -8
  616. package/src/lib/workflow-engine/workflow-dashboard-summary.object.js +0 -36
  617. package/src/lib/workflow-engine/workflow-dashboard-summary.object.js.map +0 -1
  618. package/src/lib/workflow-engine/workflow-dry-run.object.d.ts +0 -21
  619. package/src/lib/workflow-engine/workflow-dry-run.object.js +0 -86
  620. package/src/lib/workflow-engine/workflow-dry-run.object.js.map +0 -1
  621. package/src/lib/workflow-engine/workflow-engine.enums.d.ts +0 -61
  622. package/src/lib/workflow-engine/workflow-engine.enums.js +0 -98
  623. package/src/lib/workflow-engine/workflow-engine.enums.js.map +0 -1
  624. package/src/lib/workflow-engine/workflow-engine.module.d.ts +0 -9
  625. package/src/lib/workflow-engine/workflow-engine.module.js +0 -78
  626. package/src/lib/workflow-engine/workflow-engine.module.js.map +0 -1
  627. package/src/lib/workflow-engine/workflow-engine.mutations.d.ts +0 -29
  628. package/src/lib/workflow-engine/workflow-engine.mutations.js +0 -218
  629. package/src/lib/workflow-engine/workflow-engine.mutations.js.map +0 -1
  630. package/src/lib/workflow-engine/workflow-engine.queries.d.ts +0 -31
  631. package/src/lib/workflow-engine/workflow-engine.queries.js +0 -237
  632. package/src/lib/workflow-engine/workflow-engine.queries.js.map +0 -1
  633. package/src/lib/workflow-engine/workflow-engine.service.d.ts +0 -188
  634. package/src/lib/workflow-engine/workflow-engine.service.js +0 -3561
  635. package/src/lib/workflow-engine/workflow-engine.service.js.map +0 -1
  636. package/src/lib/workflow-engine/workflow-engine.tokens.js +0 -5
  637. package/src/lib/workflow-engine/workflow-engine.tokens.js.map +0 -1
  638. package/src/lib/workflow-engine/workflow-service-task-dispatcher.token.d.ts +0 -18
  639. package/src/lib/workflow-engine/workflow-service-task-dispatcher.token.js +0 -39
  640. package/src/lib/workflow-engine/workflow-service-task-dispatcher.token.js.map +0 -1
  641. package/src/lib/workflow-engine/workflow-token.entity.d.ts +0 -10
  642. package/src/lib/workflow-engine/workflow-token.entity.js +0 -50
  643. package/src/lib/workflow-engine/workflow-token.entity.js.map +0 -1
  644. /package/src/{index.d.ts → index.ts} +0 -0
  645. /package/src/lib/attachment/{index.d.ts → index.ts} +0 -0
  646. /package/src/lib/bpm/{index.d.ts → index.ts} +0 -0
  647. /package/src/lib/bpm-auth/{index.d.ts → index.ts} +0 -0
  648. /package/src/lib/common/{index.d.ts → index.ts} +0 -0
  649. /package/src/lib/condition/{index.d.ts → index.ts} +0 -0
  650. /package/src/lib/database/{index.d.ts → index.ts} +0 -0
  651. /package/src/lib/delegation/{index.d.ts → index.ts} +0 -0
  652. /package/src/lib/form/{index.d.ts → index.ts} +0 -0
  653. /package/src/lib/identity/{index.d.ts → index.ts} +0 -0
  654. /package/src/lib/notification/{index.d.ts → index.ts} +0 -0
  655. /package/src/lib/organization/{index.d.ts → index.ts} +0 -0
  656. /package/src/lib/signature/{index.d.ts → index.ts} +0 -0
  657. /package/src/lib/template/{index.d.ts → index.ts} +0 -0
  658. /package/src/lib/workflow-engine/{index.d.ts → index.ts} +0 -0
@@ -0,0 +1,320 @@
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 the
168
+ * package README sections "Embedding & auth", "Organization data
169
+ * ownership", and "Consumer quickstart" for 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
+ }
@@ -0,0 +1,106 @@
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
+ }
@@ -0,0 +1,40 @@
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
+ }
@@ -0,0 +1,80 @@
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
+ }
@@ -0,0 +1,19 @@
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
+ );
@@ -0,0 +1,31 @@
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
+ }
@@ -0,0 +1,106 @@
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
+ }