@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.
Files changed (612) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/LICENSE +21 -0
  3. package/README.md +143 -0
  4. package/package.json +3 -3
  5. package/src/index.js +18 -0
  6. package/src/index.js.map +1 -0
  7. package/src/lib/attachment/attachment-options.d.ts +44 -0
  8. package/src/lib/attachment/attachment-options.js +62 -0
  9. package/src/lib/attachment/attachment-options.js.map +1 -0
  10. package/src/lib/attachment/attachment-storage.provider.d.ts +4 -0
  11. package/src/lib/attachment/attachment-storage.provider.js +35 -0
  12. package/src/lib/attachment/attachment-storage.provider.js.map +1 -0
  13. package/src/lib/attachment/{attachment-storage.token.ts → attachment-storage.token.d.ts} +1 -3
  14. package/src/lib/attachment/attachment-storage.token.js +5 -0
  15. package/src/lib/attachment/attachment-storage.token.js.map +1 -0
  16. package/src/lib/attachment/attachment.controller.d.ts +8 -0
  17. package/src/lib/attachment/attachment.controller.js +38 -0
  18. package/src/lib/attachment/attachment.controller.js.map +1 -0
  19. package/src/lib/attachment/attachment.entity.d.ts +14 -0
  20. package/src/lib/attachment/attachment.entity.js +74 -0
  21. package/src/lib/attachment/attachment.entity.js.map +1 -0
  22. package/src/lib/attachment/attachment.module.d.ts +27 -0
  23. package/src/lib/attachment/attachment.module.js +103 -0
  24. package/src/lib/attachment/attachment.module.js.map +1 -0
  25. package/src/lib/attachment/attachment.mutations.d.ts +8 -0
  26. package/src/lib/attachment/attachment.mutations.js +35 -0
  27. package/src/lib/attachment/attachment.mutations.js.map +1 -0
  28. package/src/lib/attachment/attachment.queries.d.ts +9 -0
  29. package/src/lib/attachment/attachment.queries.js +78 -0
  30. package/src/lib/attachment/attachment.queries.js.map +1 -0
  31. package/src/lib/attachment/attachment.service.d.ts +49 -0
  32. package/src/lib/attachment/attachment.service.js +276 -0
  33. package/src/lib/attachment/attachment.service.js.map +1 -0
  34. package/src/lib/attachment/dto/upload-attachment.input.d.ts +11 -0
  35. package/src/lib/attachment/dto/upload-attachment.input.js +68 -0
  36. package/src/lib/attachment/dto/upload-attachment.input.js.map +1 -0
  37. package/src/lib/attachment/index.js +9 -0
  38. package/src/lib/attachment/index.js.map +1 -0
  39. package/src/lib/bpm/bpm-root.module.d.ts +155 -0
  40. package/src/lib/bpm/bpm-root.module.js +170 -0
  41. package/src/lib/bpm/bpm-root.module.js.map +1 -0
  42. package/src/lib/bpm/index.js +5 -0
  43. package/src/lib/bpm/index.js.map +1 -0
  44. package/src/lib/bpm-auth/bpm-auth-context.d.ts +24 -0
  45. package/src/lib/bpm-auth/bpm-auth-context.extractor.d.ts +4 -0
  46. package/src/lib/bpm-auth/bpm-auth-context.extractor.js +69 -0
  47. package/src/lib/bpm-auth/bpm-auth-context.extractor.js.map +1 -0
  48. package/src/lib/bpm-auth/bpm-auth-context.js +15 -0
  49. package/src/lib/bpm-auth/bpm-auth-context.js.map +1 -0
  50. package/src/lib/bpm-auth/bpm-auth.authorization.d.ts +12 -0
  51. package/src/lib/bpm-auth/bpm-auth.authorization.js +67 -0
  52. package/src/lib/bpm-auth/bpm-auth.authorization.js.map +1 -0
  53. package/src/lib/bpm-auth/bpm-auth.decorators.d.ts +3 -0
  54. package/src/lib/bpm-auth/bpm-auth.decorators.js +11 -0
  55. package/src/lib/bpm-auth/bpm-auth.decorators.js.map +1 -0
  56. package/src/lib/bpm-auth/bpm-auth.guard.d.ts +7 -0
  57. package/src/lib/bpm-auth/bpm-auth.guard.js +24 -0
  58. package/src/lib/bpm-auth/bpm-auth.guard.js.map +1 -0
  59. package/src/lib/bpm-auth/bpm-auth.module.d.ts +6 -0
  60. package/src/lib/bpm-auth/bpm-auth.module.js +69 -0
  61. package/src/lib/bpm-auth/bpm-auth.module.js.map +1 -0
  62. package/src/lib/bpm-auth/bpm-auth.options.d.ts +11 -0
  63. package/src/lib/bpm-auth/bpm-auth.options.js +3 -0
  64. package/src/lib/bpm-auth/bpm-auth.options.js.map +1 -0
  65. package/src/lib/bpm-auth/configurable-bpm-auth-context.accessor.d.ts +10 -0
  66. package/src/lib/bpm-auth/configurable-bpm-auth-context.accessor.js +40 -0
  67. package/src/lib/bpm-auth/configurable-bpm-auth-context.accessor.js.map +1 -0
  68. package/src/lib/bpm-auth/index.js +10 -0
  69. package/src/lib/bpm-auth/index.js.map +1 -0
  70. package/src/lib/common/filters/all-exceptions.filter.d.ts +25 -0
  71. package/src/lib/common/filters/all-exceptions.filter.js +93 -0
  72. package/src/lib/common/filters/all-exceptions.filter.js.map +1 -0
  73. package/src/lib/common/index.js +5 -0
  74. package/src/lib/common/index.js.map +1 -0
  75. package/src/lib/common/iso-duration.d.ts +1 -0
  76. package/src/lib/common/iso-duration.js +27 -0
  77. package/src/lib/common/iso-duration.js.map +1 -0
  78. package/src/lib/condition/condition.module.d.ts +2 -0
  79. package/src/lib/condition/condition.module.js +16 -0
  80. package/src/lib/condition/condition.module.js.map +1 -0
  81. package/src/lib/condition/condition.service.d.ts +16 -0
  82. package/src/lib/condition/condition.service.js +82 -0
  83. package/src/lib/condition/condition.service.js.map +1 -0
  84. package/src/lib/condition/index.js +6 -0
  85. package/src/lib/condition/index.js.map +1 -0
  86. package/src/lib/database/data-source.d.ts +4 -0
  87. package/src/lib/database/data-source.js +7 -0
  88. package/src/lib/database/data-source.js.map +1 -0
  89. package/src/lib/database/index.js +6 -0
  90. package/src/lib/database/index.js.map +1 -0
  91. package/src/lib/database/migration-runner.d.ts +1 -0
  92. package/src/lib/database/migration-runner.js +23 -0
  93. package/src/lib/database/migration-runner.js.map +1 -0
  94. package/src/lib/database/typeorm.config.d.ts +14 -0
  95. package/src/lib/database/typeorm.config.js +135 -0
  96. package/src/lib/database/typeorm.config.js.map +1 -0
  97. package/src/lib/delegation/delegation-rule.entity.d.ts +19 -0
  98. package/src/lib/delegation/delegation-rule.entity.js +99 -0
  99. package/src/lib/delegation/delegation-rule.entity.js.map +1 -0
  100. package/src/lib/delegation/delegation.enums.d.ts +10 -0
  101. package/src/lib/delegation/delegation.enums.js +23 -0
  102. package/src/lib/delegation/delegation.enums.js.map +1 -0
  103. package/src/lib/delegation/delegation.module.d.ts +2 -0
  104. package/src/lib/delegation/delegation.module.js +22 -0
  105. package/src/lib/delegation/delegation.module.js.map +1 -0
  106. package/src/lib/delegation/delegation.mutations.d.ts +11 -0
  107. package/src/lib/delegation/delegation.mutations.js +87 -0
  108. package/src/lib/delegation/delegation.mutations.js.map +1 -0
  109. package/src/lib/delegation/delegation.queries.d.ts +10 -0
  110. package/src/lib/delegation/delegation.queries.js +91 -0
  111. package/src/lib/delegation/delegation.queries.js.map +1 -0
  112. package/src/lib/delegation/delegation.service.d.ts +56 -0
  113. package/src/lib/delegation/delegation.service.js +268 -0
  114. package/src/lib/delegation/delegation.service.js.map +1 -0
  115. package/src/lib/delegation/dto/delegation-rule.input.d.ts +24 -0
  116. package/src/lib/delegation/dto/delegation-rule.input.js +143 -0
  117. package/src/lib/delegation/dto/delegation-rule.input.js.map +1 -0
  118. package/src/lib/delegation/index.js +9 -0
  119. package/src/lib/delegation/index.js.map +1 -0
  120. package/src/lib/form/dto/form-definition.input.d.ts +21 -0
  121. package/src/lib/form/dto/form-definition.input.js +103 -0
  122. package/src/lib/form/dto/form-definition.input.js.map +1 -0
  123. package/src/lib/form/form-definition-version.entity.d.ts +17 -0
  124. package/src/lib/form/form-definition-version.entity.js +84 -0
  125. package/src/lib/form/form-definition-version.entity.js.map +1 -0
  126. package/src/lib/form/form-definition.entity.d.ts +13 -0
  127. package/src/lib/form/form-definition.entity.js +66 -0
  128. package/src/lib/form/form-definition.entity.js.map +1 -0
  129. package/src/lib/form/form-schema-lint.object.d.ts +4 -0
  130. package/src/lib/form/form-schema-lint.object.js +20 -0
  131. package/src/lib/form/form-schema-lint.object.js.map +1 -0
  132. package/src/lib/form/form-schema.validator.d.ts +13 -0
  133. package/src/lib/form/form-schema.validator.js +354 -0
  134. package/src/lib/form/form-schema.validator.js.map +1 -0
  135. package/src/lib/form/form.enums.d.ts +9 -0
  136. package/src/lib/form/form.enums.js +22 -0
  137. package/src/lib/form/form.enums.js.map +1 -0
  138. package/src/lib/form/form.module.d.ts +2 -0
  139. package/src/lib/form/form.module.js +27 -0
  140. package/src/lib/form/form.module.js.map +1 -0
  141. package/src/lib/form/form.mutations.d.ts +14 -0
  142. package/src/lib/form/form.mutations.js +88 -0
  143. package/src/lib/form/form.mutations.js.map +1 -0
  144. package/src/lib/form/form.queries.d.ts +16 -0
  145. package/src/lib/form/form.queries.js +96 -0
  146. package/src/lib/form/form.queries.js.map +1 -0
  147. package/src/lib/form/form.service.d.ts +35 -0
  148. package/src/lib/form/form.service.js +297 -0
  149. package/src/lib/form/form.service.js.map +1 -0
  150. package/src/lib/form/index.js +12 -0
  151. package/src/lib/form/index.js.map +1 -0
  152. package/src/lib/identity/identity-options.d.ts +13 -0
  153. package/src/lib/identity/identity-options.js +20 -0
  154. package/src/lib/identity/identity-options.js.map +1 -0
  155. package/src/lib/identity/identity.module.d.ts +17 -0
  156. package/src/lib/identity/identity.module.js +65 -0
  157. package/src/lib/identity/identity.module.js.map +1 -0
  158. package/src/lib/identity/identity.queries.d.ts +12 -0
  159. package/src/lib/identity/identity.queries.js +79 -0
  160. package/src/lib/identity/identity.queries.js.map +1 -0
  161. package/src/lib/identity/identity.service.d.ts +22 -0
  162. package/src/lib/identity/identity.service.js +141 -0
  163. package/src/lib/identity/identity.service.js.map +1 -0
  164. package/src/lib/identity/index.js +7 -0
  165. package/src/lib/identity/index.js.map +1 -0
  166. package/src/lib/identity/member-base.adapter.d.ts +95 -0
  167. package/src/lib/identity/member-base.adapter.js +137 -0
  168. package/src/lib/identity/member-base.adapter.js.map +1 -0
  169. package/src/lib/identity/member-metadata-cache.entity.d.ts +8 -0
  170. package/src/lib/identity/member-metadata-cache.entity.js +39 -0
  171. package/src/lib/identity/member-metadata-cache.entity.js.map +1 -0
  172. package/src/lib/identity/member-profile.object.d.ts +8 -0
  173. package/src/lib/identity/member-profile.object.js +37 -0
  174. package/src/lib/identity/member-profile.object.js.map +1 -0
  175. package/src/lib/identity/member-resolver.interface.d.ts +79 -0
  176. package/src/lib/identity/member-resolver.interface.js +19 -0
  177. package/src/lib/identity/member-resolver.interface.js.map +1 -0
  178. package/src/lib/migrations/0000000000001-enable-postgres-extensions.d.ts +6 -0
  179. package/src/lib/migrations/0000000000001-enable-postgres-extensions.js +17 -0
  180. package/src/lib/migrations/0000000000001-enable-postgres-extensions.js.map +1 -0
  181. package/src/lib/migrations/0000000001000-identity-organization-foundation.d.ts +6 -0
  182. package/src/lib/migrations/{0000000001000-identity-organization-foundation.ts → 0000000001000-identity-organization-foundation.js} +29 -38
  183. package/src/lib/migrations/0000000001000-identity-organization-foundation.js.map +1 -0
  184. package/src/lib/migrations/0000000002000-form-builder-foundation.d.ts +6 -0
  185. package/src/lib/migrations/{0000000002000-form-builder-foundation.ts → 0000000002000-form-builder-foundation.js} +21 -22
  186. package/src/lib/migrations/0000000002000-form-builder-foundation.js.map +1 -0
  187. package/src/lib/migrations/0000000003000-approval-template-foundation.d.ts +6 -0
  188. package/src/lib/migrations/{0000000003000-approval-template-foundation.ts → 0000000003000-approval-template-foundation.js} +21 -24
  189. package/src/lib/migrations/0000000003000-approval-template-foundation.js.map +1 -0
  190. package/src/lib/migrations/0000000004000-workflow-engine-foundation.d.ts +6 -0
  191. package/src/lib/migrations/{0000000004000-workflow-engine-foundation.ts → 0000000004000-workflow-engine-foundation.js} +34 -46
  192. package/src/lib/migrations/0000000004000-workflow-engine-foundation.js.map +1 -0
  193. package/src/lib/migrations/0000000005000-delegation-rules.d.ts +6 -0
  194. package/src/lib/migrations/{0000000005000-delegation-rules.ts → 0000000005000-delegation-rules.js} +19 -20
  195. package/src/lib/migrations/0000000005000-delegation-rules.js.map +1 -0
  196. package/src/lib/migrations/0000000006000-notifications-sla.d.ts +6 -0
  197. package/src/lib/migrations/{0000000006000-notifications-sla.ts → 0000000006000-notifications-sla.js} +23 -26
  198. package/src/lib/migrations/0000000006000-notifications-sla.js.map +1 -0
  199. package/src/lib/migrations/0000000007000-signatures-attachments.d.ts +6 -0
  200. package/src/lib/migrations/{0000000007000-signatures-attachments.ts → 0000000007000-signatures-attachments.js} +27 -28
  201. package/src/lib/migrations/0000000007000-signatures-attachments.js.map +1 -0
  202. package/src/lib/migrations/0000000008000-approval-template-categories.d.ts +6 -0
  203. package/src/lib/migrations/{0000000008000-approval-template-categories.ts → 0000000008000-approval-template-categories.js} +25 -28
  204. package/src/lib/migrations/0000000008000-approval-template-categories.js.map +1 -0
  205. package/src/lib/migrations/0000000009000-task-candidates.d.ts +6 -0
  206. package/src/lib/migrations/{0000000009000-task-candidates.ts → 0000000009000-task-candidates.js} +23 -26
  207. package/src/lib/migrations/0000000009000-task-candidates.js.map +1 -0
  208. package/src/lib/migrations/0000000010000-notification-delivery-state.d.ts +6 -0
  209. package/src/lib/migrations/{0000000010000-notification-delivery-state.ts → 0000000010000-notification-delivery-state.js} +17 -16
  210. package/src/lib/migrations/0000000010000-notification-delivery-state.js.map +1 -0
  211. package/src/lib/migrations/0000000011000-remove-attachment-encryption-key.d.ts +6 -0
  212. package/src/lib/migrations/0000000011000-remove-attachment-encryption-key.js +22 -0
  213. package/src/lib/migrations/0000000011000-remove-attachment-encryption-key.js.map +1 -0
  214. package/src/lib/migrations/0000000012000-notification-sla-idempotency.d.ts +6 -0
  215. package/src/lib/migrations/0000000012000-notification-sla-idempotency.js +21 -0
  216. package/src/lib/migrations/0000000012000-notification-sla-idempotency.js.map +1 -0
  217. package/src/lib/migrations/0000000013000-workflow-query-indexes.d.ts +6 -0
  218. package/src/lib/migrations/0000000013000-workflow-query-indexes.js +80 -0
  219. package/src/lib/migrations/0000000013000-workflow-query-indexes.js.map +1 -0
  220. package/src/lib/migrations/index.d.ts +16 -0
  221. package/src/lib/migrations/index.js +49 -0
  222. package/src/lib/migrations/index.js.map +1 -0
  223. package/src/lib/notification/dto/notification-preference.input.d.ts +9 -0
  224. package/src/lib/notification/dto/notification-preference.input.js +53 -0
  225. package/src/lib/notification/dto/notification-preference.input.js.map +1 -0
  226. package/src/lib/notification/index.js +11 -0
  227. package/src/lib/notification/index.js.map +1 -0
  228. package/src/lib/notification/notification-delivery-scheduler.service.d.ts +13 -0
  229. package/src/lib/notification/notification-delivery-scheduler.service.js +53 -0
  230. package/src/lib/notification/notification-delivery-scheduler.service.js.map +1 -0
  231. package/src/lib/notification/notification-delivery.service.d.ts +23 -0
  232. package/src/lib/notification/notification-delivery.service.js +245 -0
  233. package/src/lib/notification/notification-delivery.service.js.map +1 -0
  234. package/src/lib/notification/notification-dispatcher.token.d.ts +7 -0
  235. package/src/lib/notification/notification-dispatcher.token.js +5 -0
  236. package/src/lib/notification/notification-dispatcher.token.js.map +1 -0
  237. package/src/lib/notification/notification-options.d.ts +215 -0
  238. package/src/lib/notification/notification-options.js +128 -0
  239. package/src/lib/notification/notification-options.js.map +1 -0
  240. package/src/lib/notification/notification-options.module.d.ts +23 -0
  241. package/src/lib/notification/notification-options.module.js +41 -0
  242. package/src/lib/notification/notification-options.module.js.map +1 -0
  243. package/src/lib/notification/notification-preference.entity.d.ts +10 -0
  244. package/src/lib/notification/notification-preference.entity.js +50 -0
  245. package/src/lib/notification/notification-preference.entity.js.map +1 -0
  246. package/src/lib/notification/notification-sla-scheduler.service.d.ts +13 -0
  247. package/src/lib/notification/notification-sla-scheduler.service.js +51 -0
  248. package/src/lib/notification/notification-sla-scheduler.service.js.map +1 -0
  249. package/src/lib/notification/notification-template.d.ts +13 -0
  250. package/src/lib/notification/notification-template.js +61 -0
  251. package/src/lib/notification/notification-template.js.map +1 -0
  252. package/src/lib/notification/notification.entity.d.ts +23 -0
  253. package/src/lib/notification/notification.entity.js +122 -0
  254. package/src/lib/notification/notification.entity.js.map +1 -0
  255. package/src/lib/notification/notification.enums.d.ts +24 -0
  256. package/src/lib/notification/notification.enums.js +45 -0
  257. package/src/lib/notification/notification.enums.js.map +1 -0
  258. package/src/lib/notification/notification.module.d.ts +2 -0
  259. package/src/lib/notification/notification.module.js +45 -0
  260. package/src/lib/notification/notification.module.js.map +1 -0
  261. package/src/lib/notification/notification.mutations.d.ts +11 -0
  262. package/src/lib/notification/notification.mutations.js +64 -0
  263. package/src/lib/notification/notification.mutations.js.map +1 -0
  264. package/src/lib/notification/notification.queries.d.ts +11 -0
  265. package/src/lib/notification/notification.queries.js +77 -0
  266. package/src/lib/notification/notification.queries.js.map +1 -0
  267. package/src/lib/notification/notification.service.d.ts +81 -0
  268. package/src/lib/notification/notification.service.js +621 -0
  269. package/src/lib/notification/notification.service.js.map +1 -0
  270. package/src/lib/organization/dto/manager-resolution.input.d.ts +18 -0
  271. package/src/lib/organization/dto/manager-resolution.input.js +107 -0
  272. package/src/lib/organization/dto/manager-resolution.input.js.map +1 -0
  273. package/src/lib/organization/dto/membership.input.d.ts +16 -0
  274. package/src/lib/organization/dto/membership.input.js +99 -0
  275. package/src/lib/organization/dto/membership.input.js.map +1 -0
  276. package/src/lib/organization/dto/org-unit.input.d.ts +24 -0
  277. package/src/lib/organization/dto/org-unit.input.js +119 -0
  278. package/src/lib/organization/dto/org-unit.input.js.map +1 -0
  279. package/src/lib/organization/dto/position.input.d.ts +13 -0
  280. package/src/lib/organization/dto/position.input.js +70 -0
  281. package/src/lib/organization/dto/position.input.js.map +1 -0
  282. package/src/lib/organization/index.js +16 -0
  283. package/src/lib/organization/index.js.map +1 -0
  284. package/src/lib/organization/json-metadata.d.ts +1 -0
  285. package/src/lib/organization/json-metadata.js +14 -0
  286. package/src/lib/organization/json-metadata.js.map +1 -0
  287. package/src/lib/organization/manager-resolution.entity.d.ts +11 -0
  288. package/src/lib/organization/manager-resolution.entity.js +55 -0
  289. package/src/lib/organization/manager-resolution.entity.js.map +1 -0
  290. package/src/lib/organization/membership.entity.d.ts +11 -0
  291. package/src/lib/organization/membership.entity.js +60 -0
  292. package/src/lib/organization/membership.entity.js.map +1 -0
  293. package/src/lib/organization/org-unit-tree-commit-result.object.d.ts +4 -0
  294. package/src/lib/organization/org-unit-tree-commit-result.object.js +17 -0
  295. package/src/lib/organization/org-unit-tree-commit-result.object.js.map +1 -0
  296. package/src/lib/organization/org-unit.entity.d.ts +13 -0
  297. package/src/lib/organization/org-unit.entity.js +64 -0
  298. package/src/lib/organization/org-unit.entity.js.map +1 -0
  299. package/src/lib/organization/organization-summary.object.d.ts +6 -0
  300. package/src/lib/organization/organization-summary.object.js +28 -0
  301. package/src/lib/organization/organization-summary.object.js.map +1 -0
  302. package/src/lib/organization/organization.enums.d.ts +11 -0
  303. package/src/lib/organization/organization.enums.js +22 -0
  304. package/src/lib/organization/organization.enums.js.map +1 -0
  305. package/src/lib/organization/organization.module.d.ts +2 -0
  306. package/src/lib/organization/organization.module.js +35 -0
  307. package/src/lib/organization/organization.module.js.map +1 -0
  308. package/src/lib/organization/organization.mutations.d.ts +26 -0
  309. package/src/lib/organization/organization.mutations.js +148 -0
  310. package/src/lib/organization/organization.mutations.js.map +1 -0
  311. package/src/lib/organization/organization.queries.d.ts +23 -0
  312. package/src/lib/organization/organization.queries.js +202 -0
  313. package/src/lib/organization/organization.queries.js.map +1 -0
  314. package/src/lib/organization/organization.service.d.ts +102 -0
  315. package/src/lib/organization/organization.service.js +751 -0
  316. package/src/lib/organization/organization.service.js.map +1 -0
  317. package/src/lib/organization/position.entity.d.ts +9 -0
  318. package/src/lib/organization/position.entity.js +48 -0
  319. package/src/lib/organization/position.entity.js.map +1 -0
  320. package/src/lib/organization/resolved-manager.object.d.ts +4 -0
  321. package/src/lib/organization/resolved-manager.object.js +20 -0
  322. package/src/lib/organization/resolved-manager.object.js.map +1 -0
  323. package/src/lib/signature/index.js +8 -0
  324. package/src/lib/signature/index.js.map +1 -0
  325. package/src/lib/signature/signature-options.d.ts +33 -0
  326. package/src/lib/signature/signature-options.js +51 -0
  327. package/src/lib/signature/signature-options.js.map +1 -0
  328. package/src/lib/signature/signature-verification.object.d.ts +6 -0
  329. package/src/lib/signature/signature-verification.object.js +28 -0
  330. package/src/lib/signature/signature-verification.object.js.map +1 -0
  331. package/src/lib/signature/signature.entity.d.ts +16 -0
  332. package/src/lib/signature/signature.entity.js +88 -0
  333. package/src/lib/signature/signature.entity.js.map +1 -0
  334. package/src/lib/signature/signature.module.d.ts +11 -0
  335. package/src/lib/signature/signature.module.js +60 -0
  336. package/src/lib/signature/signature.module.js.map +1 -0
  337. package/src/lib/signature/signature.queries.d.ts +11 -0
  338. package/src/lib/signature/signature.queries.js +46 -0
  339. package/src/lib/signature/signature.queries.js.map +1 -0
  340. package/src/lib/signature/signature.service.d.ts +25 -0
  341. package/src/lib/signature/signature.service.js +124 -0
  342. package/src/lib/signature/signature.service.js.map +1 -0
  343. package/src/lib/template/approval-template-category.entity.d.ts +9 -0
  344. package/src/lib/template/approval-template-category.entity.js +49 -0
  345. package/src/lib/template/approval-template-category.entity.js.map +1 -0
  346. package/src/lib/template/approval-template-version.entity.d.ts +21 -0
  347. package/src/lib/template/approval-template-version.entity.js +106 -0
  348. package/src/lib/template/approval-template-version.entity.js.map +1 -0
  349. package/src/lib/template/approval-template.entity.d.ts +14 -0
  350. package/src/lib/template/approval-template.entity.js +74 -0
  351. package/src/lib/template/approval-template.entity.js.map +1 -0
  352. package/src/lib/template/dto/approval-template.input.d.ts +36 -0
  353. package/src/lib/template/dto/approval-template.input.js +187 -0
  354. package/src/lib/template/dto/approval-template.input.js.map +1 -0
  355. package/src/lib/template/index.js +12 -0
  356. package/src/lib/template/index.js.map +1 -0
  357. package/src/lib/template/template.enums.d.ts +14 -0
  358. package/src/lib/template/template.enums.js +31 -0
  359. package/src/lib/template/template.enums.js.map +1 -0
  360. package/src/lib/template/template.module.d.ts +2 -0
  361. package/src/lib/template/template.module.js +33 -0
  362. package/src/lib/template/template.module.js.map +1 -0
  363. package/src/lib/template/template.mutations.d.ts +20 -0
  364. package/src/lib/template/template.mutations.js +139 -0
  365. package/src/lib/template/template.mutations.js.map +1 -0
  366. package/src/lib/template/template.queries.d.ts +16 -0
  367. package/src/lib/template/template.queries.js +133 -0
  368. package/src/lib/template/template.queries.js.map +1 -0
  369. package/src/lib/template/template.service.d.ts +64 -0
  370. package/src/lib/template/template.service.js +521 -0
  371. package/src/lib/template/template.service.js.map +1 -0
  372. package/src/lib/template/workflow-definition.validator.d.ts +9 -0
  373. package/src/lib/template/workflow-definition.validator.js +362 -0
  374. package/src/lib/template/workflow-definition.validator.js.map +1 -0
  375. package/src/lib/testing/cel-js.jest.d.ts +15 -0
  376. package/src/lib/testing/cel-js.jest.js +27 -0
  377. package/src/lib/testing/cel-js.jest.js.map +1 -0
  378. package/src/lib/workflow-engine/activity-log.entity.d.ts +12 -0
  379. package/src/lib/workflow-engine/activity-log.entity.js +62 -0
  380. package/src/lib/workflow-engine/activity-log.entity.js.map +1 -0
  381. package/src/lib/workflow-engine/approval-instance-page-info.object.d.ts +8 -0
  382. package/src/lib/workflow-engine/approval-instance-page-info.object.js +36 -0
  383. package/src/lib/workflow-engine/approval-instance-page-info.object.js.map +1 -0
  384. package/src/lib/workflow-engine/approval-instance.entity.d.ts +22 -0
  385. package/src/lib/workflow-engine/approval-instance.entity.js +113 -0
  386. package/src/lib/workflow-engine/approval-instance.entity.js.map +1 -0
  387. package/src/lib/workflow-engine/dto/cancel-approval-instance.input.d.ts +5 -0
  388. package/src/lib/workflow-engine/dto/cancel-approval-instance.input.js +29 -0
  389. package/src/lib/workflow-engine/dto/cancel-approval-instance.input.js.map +1 -0
  390. package/src/lib/workflow-engine/dto/decide-task.input.d.ts +9 -0
  391. package/src/lib/workflow-engine/dto/decide-task.input.js +47 -0
  392. package/src/lib/workflow-engine/dto/decide-task.input.js.map +1 -0
  393. package/src/lib/workflow-engine/dto/dry-run-approval-workflow.input.d.ts +6 -0
  394. package/src/lib/workflow-engine/dto/dry-run-approval-workflow.input.js +34 -0
  395. package/src/lib/workflow-engine/dto/dry-run-approval-workflow.input.js.map +1 -0
  396. package/src/lib/workflow-engine/dto/resubmit-approval-instance.input.d.ts +6 -0
  397. package/src/lib/workflow-engine/dto/resubmit-approval-instance.input.js +34 -0
  398. package/src/lib/workflow-engine/dto/resubmit-approval-instance.input.js.map +1 -0
  399. package/src/lib/workflow-engine/dto/submit-approval-instance.input.d.ts +7 -0
  400. package/src/lib/workflow-engine/dto/submit-approval-instance.input.js +40 -0
  401. package/src/lib/workflow-engine/dto/submit-approval-instance.input.js.map +1 -0
  402. package/src/lib/workflow-engine/index.js +24 -0
  403. package/src/lib/workflow-engine/index.js.map +1 -0
  404. package/src/lib/workflow-engine/task-candidate.entity.d.ts +14 -0
  405. package/src/lib/workflow-engine/task-candidate.entity.js +72 -0
  406. package/src/lib/workflow-engine/task-candidate.entity.js.map +1 -0
  407. package/src/lib/workflow-engine/task-decision.entity.d.ts +12 -0
  408. package/src/lib/workflow-engine/task-decision.entity.js +60 -0
  409. package/src/lib/workflow-engine/task-decision.entity.js.map +1 -0
  410. package/src/lib/workflow-engine/task.entity.d.ts +20 -0
  411. package/src/lib/workflow-engine/task.entity.js +109 -0
  412. package/src/lib/workflow-engine/task.entity.js.map +1 -0
  413. package/src/lib/workflow-engine/workflow-condition-evaluator.d.ts +5 -0
  414. package/src/lib/workflow-engine/workflow-condition-evaluator.js +107 -0
  415. package/src/lib/workflow-engine/workflow-condition-evaluator.js.map +1 -0
  416. package/src/lib/workflow-engine/workflow-dashboard-summary.object.d.ts +8 -0
  417. package/src/lib/workflow-engine/workflow-dashboard-summary.object.js +36 -0
  418. package/src/lib/workflow-engine/workflow-dashboard-summary.object.js.map +1 -0
  419. package/src/lib/workflow-engine/workflow-dry-run.object.d.ts +21 -0
  420. package/src/lib/workflow-engine/workflow-dry-run.object.js +86 -0
  421. package/src/lib/workflow-engine/workflow-dry-run.object.js.map +1 -0
  422. package/src/lib/workflow-engine/workflow-engine.enums.d.ts +58 -0
  423. package/src/lib/workflow-engine/workflow-engine.enums.js +95 -0
  424. package/src/lib/workflow-engine/workflow-engine.enums.js.map +1 -0
  425. package/src/lib/workflow-engine/workflow-engine.module.d.ts +9 -0
  426. package/src/lib/workflow-engine/workflow-engine.module.js +76 -0
  427. package/src/lib/workflow-engine/workflow-engine.module.js.map +1 -0
  428. package/src/lib/workflow-engine/workflow-engine.mutations.d.ts +19 -0
  429. package/src/lib/workflow-engine/workflow-engine.mutations.js +106 -0
  430. package/src/lib/workflow-engine/workflow-engine.mutations.js.map +1 -0
  431. package/src/lib/workflow-engine/workflow-engine.queries.d.ts +29 -0
  432. package/src/lib/workflow-engine/workflow-engine.queries.js +225 -0
  433. package/src/lib/workflow-engine/workflow-engine.queries.js.map +1 -0
  434. package/src/lib/workflow-engine/workflow-engine.service.d.ts +145 -0
  435. package/src/lib/workflow-engine/workflow-engine.service.js +2785 -0
  436. package/src/lib/workflow-engine/workflow-engine.service.js.map +1 -0
  437. package/src/lib/workflow-engine/{workflow-engine.tokens.ts → workflow-engine.tokens.d.ts} +3 -9
  438. package/src/lib/workflow-engine/workflow-engine.tokens.js +5 -0
  439. package/src/lib/workflow-engine/workflow-engine.tokens.js.map +1 -0
  440. package/src/lib/workflow-engine/workflow-service-task-dispatcher.token.d.ts +18 -0
  441. package/src/lib/workflow-engine/workflow-service-task-dispatcher.token.js +39 -0
  442. package/src/lib/workflow-engine/workflow-service-task-dispatcher.token.js.map +1 -0
  443. package/src/lib/workflow-engine/workflow-token.entity.d.ts +10 -0
  444. package/src/lib/workflow-engine/workflow-token.entity.js +50 -0
  445. package/src/lib/workflow-engine/workflow-token.entity.js.map +1 -0
  446. package/eslint.config.mjs +0 -20
  447. package/jest.config.cts +0 -15
  448. package/project.json +0 -58
  449. package/src/lib/attachment/attachment-options.spec.ts +0 -45
  450. package/src/lib/attachment/attachment-options.ts +0 -130
  451. package/src/lib/attachment/attachment-storage.provider.spec.ts +0 -79
  452. package/src/lib/attachment/attachment-storage.provider.ts +0 -60
  453. package/src/lib/attachment/attachment.controller.ts +0 -39
  454. package/src/lib/attachment/attachment.entity.ts +0 -59
  455. package/src/lib/attachment/attachment.module.ts +0 -149
  456. package/src/lib/attachment/attachment.mutations.ts +0 -22
  457. package/src/lib/attachment/attachment.queries.ts +0 -65
  458. package/src/lib/attachment/attachment.service.spec.ts +0 -319
  459. package/src/lib/attachment/attachment.service.ts +0 -477
  460. package/src/lib/attachment/dto/upload-attachment.input.ts +0 -60
  461. package/src/lib/bpm/bpm-root.module.spec.ts +0 -138
  462. package/src/lib/bpm/bpm-root.module.ts +0 -320
  463. package/src/lib/bpm-auth/bpm-auth-context.extractor.ts +0 -106
  464. package/src/lib/bpm-auth/bpm-auth-context.ts +0 -40
  465. package/src/lib/bpm-auth/bpm-auth.authorization.ts +0 -80
  466. package/src/lib/bpm-auth/bpm-auth.decorators.ts +0 -19
  467. package/src/lib/bpm-auth/bpm-auth.guard.ts +0 -31
  468. package/src/lib/bpm-auth/bpm-auth.module.spec.ts +0 -106
  469. package/src/lib/bpm-auth/bpm-auth.module.ts +0 -69
  470. package/src/lib/bpm-auth/bpm-auth.options.ts +0 -21
  471. package/src/lib/bpm-auth/configurable-bpm-auth-context.accessor.ts +0 -55
  472. package/src/lib/common/filters/all-exceptions.filter.ts +0 -138
  473. package/src/lib/common/iso-duration.ts +0 -31
  474. package/src/lib/condition/condition.module.ts +0 -8
  475. package/src/lib/condition/condition.service.spec.ts +0 -50
  476. package/src/lib/condition/condition.service.ts +0 -141
  477. package/src/lib/database/data-source.ts +0 -7
  478. package/src/lib/database/migration-runner.ts +0 -24
  479. package/src/lib/database/typeorm.config.ts +0 -217
  480. package/src/lib/delegation/delegation-rule.entity.ts +0 -84
  481. package/src/lib/delegation/delegation.enums.ts +0 -21
  482. package/src/lib/delegation/delegation.module.ts +0 -14
  483. package/src/lib/delegation/delegation.mutations.ts +0 -92
  484. package/src/lib/delegation/delegation.queries.ts +0 -111
  485. package/src/lib/delegation/delegation.service.spec.ts +0 -295
  486. package/src/lib/delegation/delegation.service.ts +0 -482
  487. package/src/lib/delegation/dto/delegation-rule.input.ts +0 -125
  488. package/src/lib/form/dto/form-definition.input.ts +0 -73
  489. package/src/lib/form/form-definition-version.entity.ts +0 -66
  490. package/src/lib/form/form-definition.entity.ts +0 -54
  491. package/src/lib/form/form-schema-lint.object.ts +0 -10
  492. package/src/lib/form/form-schema.validator.spec.ts +0 -180
  493. package/src/lib/form/form-schema.validator.ts +0 -538
  494. package/src/lib/form/form.enums.ts +0 -20
  495. package/src/lib/form/form.module.ts +0 -19
  496. package/src/lib/form/form.mutations.ts +0 -68
  497. package/src/lib/form/form.queries.ts +0 -72
  498. package/src/lib/form/form.service.spec.ts +0 -144
  499. package/src/lib/form/form.service.ts +0 -490
  500. package/src/lib/identity/identity-options.ts +0 -41
  501. package/src/lib/identity/identity.module.ts +0 -96
  502. package/src/lib/identity/identity.queries.ts +0 -61
  503. package/src/lib/identity/identity.service.spec.ts +0 -105
  504. package/src/lib/identity/identity.service.ts +0 -200
  505. package/src/lib/identity/member-base.adapter.spec.ts +0 -77
  506. package/src/lib/identity/member-base.adapter.ts +0 -244
  507. package/src/lib/identity/member-metadata-cache.entity.ts +0 -27
  508. package/src/lib/identity/member-profile.object.ts +0 -28
  509. package/src/lib/identity/member-resolver.interface.ts +0 -47
  510. package/src/lib/migrations/0000000000001-enable-postgres-extensions.ts +0 -14
  511. package/src/lib/migrations/0000000011000-remove-attachment-encryption-key.ts +0 -19
  512. package/src/lib/migrations/0000000012000-notification-sla-idempotency.ts +0 -22
  513. package/src/lib/migrations/0000000013000-workflow-query-indexes.ts +0 -113
  514. package/src/lib/migrations/index.ts +0 -47
  515. package/src/lib/notification/dto/notification-preference.input.ts +0 -46
  516. package/src/lib/notification/notification-delivery-scheduler.service.ts +0 -69
  517. package/src/lib/notification/notification-delivery.service.spec.ts +0 -315
  518. package/src/lib/notification/notification-delivery.service.ts +0 -339
  519. package/src/lib/notification/notification-dispatcher.token.ts +0 -13
  520. package/src/lib/notification/notification-options.module.ts +0 -67
  521. package/src/lib/notification/notification-options.spec.ts +0 -93
  522. package/src/lib/notification/notification-options.ts +0 -452
  523. package/src/lib/notification/notification-preference.entity.ts +0 -35
  524. package/src/lib/notification/notification-sla-scheduler.service.ts +0 -66
  525. package/src/lib/notification/notification-template.spec.ts +0 -33
  526. package/src/lib/notification/notification-template.ts +0 -97
  527. package/src/lib/notification/notification.entity.ts +0 -102
  528. package/src/lib/notification/notification.enums.ts +0 -45
  529. package/src/lib/notification/notification.module.ts +0 -37
  530. package/src/lib/notification/notification.mutations.ts +0 -47
  531. package/src/lib/notification/notification.queries.ts +0 -64
  532. package/src/lib/notification/notification.service.spec.ts +0 -412
  533. package/src/lib/notification/notification.service.ts +0 -974
  534. package/src/lib/organization/dto/manager-resolution.input.ts +0 -91
  535. package/src/lib/organization/dto/membership.input.ts +0 -77
  536. package/src/lib/organization/dto/org-unit.input.ts +0 -96
  537. package/src/lib/organization/dto/position.input.ts +0 -50
  538. package/src/lib/organization/json-metadata.ts +0 -15
  539. package/src/lib/organization/manager-resolution.entity.ts +0 -44
  540. package/src/lib/organization/membership.entity.ts +0 -50
  541. package/src/lib/organization/org-unit-tree-commit-result.object.ts +0 -8
  542. package/src/lib/organization/org-unit.entity.ts +0 -53
  543. package/src/lib/organization/organization-summary.object.ts +0 -16
  544. package/src/lib/organization/organization.enums.ts +0 -19
  545. package/src/lib/organization/organization.module.ts +0 -27
  546. package/src/lib/organization/organization.mutations.ts +0 -115
  547. package/src/lib/organization/organization.queries.ts +0 -188
  548. package/src/lib/organization/organization.service.spec.ts +0 -760
  549. package/src/lib/organization/organization.service.ts +0 -1216
  550. package/src/lib/organization/position.entity.ts +0 -39
  551. package/src/lib/organization/resolved-manager.object.ts +0 -10
  552. package/src/lib/signature/signature-options.spec.ts +0 -60
  553. package/src/lib/signature/signature-options.ts +0 -120
  554. package/src/lib/signature/signature-verification.object.ts +0 -16
  555. package/src/lib/signature/signature.entity.ts +0 -62
  556. package/src/lib/signature/signature.module.ts +0 -80
  557. package/src/lib/signature/signature.queries.ts +0 -37
  558. package/src/lib/signature/signature.service.spec.ts +0 -134
  559. package/src/lib/signature/signature.service.ts +0 -205
  560. package/src/lib/template/approval-template-category.entity.ts +0 -40
  561. package/src/lib/template/approval-template-version.entity.ts +0 -82
  562. package/src/lib/template/approval-template.entity.ts +0 -64
  563. package/src/lib/template/dto/approval-template.input.ts +0 -147
  564. package/src/lib/template/template.enums.ts +0 -30
  565. package/src/lib/template/template.module.ts +0 -25
  566. package/src/lib/template/template.mutations.ts +0 -106
  567. package/src/lib/template/template.queries.ts +0 -119
  568. package/src/lib/template/template.service.spec.ts +0 -476
  569. package/src/lib/template/template.service.ts +0 -820
  570. package/src/lib/template/workflow-definition.validator.spec.ts +0 -595
  571. package/src/lib/template/workflow-definition.validator.ts +0 -539
  572. package/src/lib/testing/cel-js.jest.ts +0 -46
  573. package/src/lib/workflow-engine/activity-log.entity.ts +0 -48
  574. package/src/lib/workflow-engine/approval-instance-page-info.object.ts +0 -22
  575. package/src/lib/workflow-engine/approval-instance.entity.ts +0 -86
  576. package/src/lib/workflow-engine/dto/cancel-approval-instance.input.ts +0 -18
  577. package/src/lib/workflow-engine/dto/decide-task.input.ts +0 -33
  578. package/src/lib/workflow-engine/dto/dry-run-approval-workflow.input.ts +0 -22
  579. package/src/lib/workflow-engine/dto/resubmit-approval-instance.input.ts +0 -22
  580. package/src/lib/workflow-engine/dto/submit-approval-instance.input.ts +0 -27
  581. package/src/lib/workflow-engine/task-candidate.entity.ts +0 -56
  582. package/src/lib/workflow-engine/task-decision.entity.ts +0 -43
  583. package/src/lib/workflow-engine/task.entity.ts +0 -85
  584. package/src/lib/workflow-engine/workflow-condition-evaluator.ts +0 -168
  585. package/src/lib/workflow-engine/workflow-dashboard-summary.object.ts +0 -22
  586. package/src/lib/workflow-engine/workflow-dry-run.object.ts +0 -58
  587. package/src/lib/workflow-engine/workflow-engine.enums.ts +0 -99
  588. package/src/lib/workflow-engine/workflow-engine.module.ts +0 -75
  589. package/src/lib/workflow-engine/workflow-engine.mutations.ts +0 -85
  590. package/src/lib/workflow-engine/workflow-engine.queries.ts +0 -229
  591. package/src/lib/workflow-engine/workflow-engine.service.spec.ts +0 -2689
  592. package/src/lib/workflow-engine/workflow-engine.service.ts +0 -4707
  593. package/src/lib/workflow-engine/workflow-service-task-dispatcher.token.ts +0 -69
  594. package/src/lib/workflow-engine/workflow-token.entity.ts +0 -40
  595. package/tsconfig.json +0 -24
  596. package/tsconfig.lib.json +0 -16
  597. package/tsconfig.spec.json +0 -16
  598. /package/src/{index.ts → index.d.ts} +0 -0
  599. /package/src/lib/attachment/{index.ts → index.d.ts} +0 -0
  600. /package/src/lib/bpm/{index.ts → index.d.ts} +0 -0
  601. /package/src/lib/bpm-auth/{index.ts → index.d.ts} +0 -0
  602. /package/src/lib/common/{index.ts → index.d.ts} +0 -0
  603. /package/src/lib/condition/{index.ts → index.d.ts} +0 -0
  604. /package/src/lib/database/{index.ts → index.d.ts} +0 -0
  605. /package/src/lib/delegation/{index.ts → index.d.ts} +0 -0
  606. /package/src/lib/form/{index.ts → index.d.ts} +0 -0
  607. /package/src/lib/identity/{index.ts → index.d.ts} +0 -0
  608. /package/src/lib/notification/{index.ts → index.d.ts} +0 -0
  609. /package/src/lib/organization/{index.ts → index.d.ts} +0 -0
  610. /package/src/lib/signature/{index.ts → index.d.ts} +0 -0
  611. /package/src/lib/template/{index.ts → index.d.ts} +0 -0
  612. /package/src/lib/workflow-engine/{index.ts → index.d.ts} +0 -0
@@ -1,244 +0,0 @@
1
- import { InjectionToken, Provider } from '@nestjs/common';
2
- import { MemberMetadata } from '@rytass/bpm-core-shared';
3
- import { BPMAuthContext } from '../bpm-auth';
4
- import { BPMMemberResolver } from './member-resolver.interface';
5
-
6
- /**
7
- * Structural contract a host identity backend should implement (or a thin
8
- * adapter wrap) so BPM can be plugged into any `member-base`-style
9
- * directory without coupling `@rytass/bpm-core-nestjs-module` to a
10
- * specific identity package.
11
- *
12
- * `TMember` is the host's own member shape; the adapter walks it through
13
- * {@link BPMMemberBaseAdapterOptions} field readers.
14
- */
15
- export interface BPMMemberBaseDirectory<TMember> {
16
- readonly resolveMember: (memberId: string) => Promise<TMember | null>;
17
- readonly resolveMembers?: (
18
- memberIds: readonly string[],
19
- ) => Promise<readonly TMember[]>;
20
- readonly searchMembers?: (searchText: string) => Promise<readonly TMember[]>;
21
- }
22
-
23
- /**
24
- * Per-host field readers that tell the adapter how to extract canonical
25
- * BPM fields out of the host's `TMember`. Each reader is optional;
26
- * sensible defaults are inferred when the host uses common conventions
27
- * (`memberId` / `id` / `sub` for the member id, `email` for the email,
28
- * `name` / `displayName` for the name, etc.).
29
- *
30
- * Provide `readPermissions` and `readRoles` if you want BPM's
31
- * `BPMAdminGuard` / `BPMDesignerGuard` to receive the host's RBAC
32
- * strings; otherwise the resolved `BPMAuthContext` will carry empty
33
- * arrays.
34
- */
35
- export interface BPMMemberBaseAdapterOptions<TMember> {
36
- readonly readCustomFields?: (
37
- member: TMember,
38
- ) => Readonly<Record<string, unknown>>;
39
- readonly readEmail?: (member: TMember) => string | null;
40
- readonly readMemberId?: (member: TMember) => string | null;
41
- readonly readName?: (member: TMember) => string | null;
42
- readonly readPermissions?: (member: TMember) => readonly string[];
43
- readonly readRoles?: (member: TMember) => readonly string[];
44
- }
45
-
46
- export interface BPMMemberBaseResolverProviderOptions<TMember> {
47
- readonly adapterOptions?: BPMMemberBaseAdapterOptions<TMember>;
48
- readonly directoryToken: InjectionToken<BPMMemberBaseDirectory<TMember>>;
49
- readonly provide: InjectionToken<BPMMemberResolver>;
50
- }
51
-
52
- export class BPMMemberBaseResolverAdapter<TMember>
53
- implements BPMMemberResolver
54
- {
55
- constructor(
56
- private readonly directory: BPMMemberBaseDirectory<TMember>,
57
- private readonly options: BPMMemberBaseAdapterOptions<TMember> = {},
58
- ) {}
59
-
60
- async resolve(memberId: string): Promise<MemberMetadata> {
61
- const member = await this.directory.resolveMember(memberId);
62
-
63
- if (!member) {
64
- throw new Error(`member-base member ${memberId} was not found`);
65
- }
66
-
67
- return readMemberMetadataFromMemberBaseMember(member, this.options);
68
- }
69
-
70
- async resolveMany(
71
- memberIds: readonly string[],
72
- ): Promise<ReadonlyMap<string, MemberMetadata>> {
73
- const members = this.directory.resolveMembers
74
- ? await this.directory.resolveMembers(memberIds)
75
- : await Promise.all(
76
- memberIds.map((memberId): Promise<TMember | null> =>
77
- this.directory.resolveMember(memberId),
78
- ),
79
- );
80
-
81
- return members
82
- .filter((member): member is TMember => Boolean(member))
83
- .map((member): MemberMetadata =>
84
- readMemberMetadataFromMemberBaseMember(member, this.options),
85
- )
86
- .reduce<ReadonlyMap<string, MemberMetadata>>(
87
- (metadataByMemberId, metadata): ReadonlyMap<string, MemberMetadata> =>
88
- new Map(metadataByMemberId).set(metadata.memberId, metadata),
89
- new Map(),
90
- );
91
- }
92
-
93
- async search(searchText: string): Promise<readonly MemberMetadata[]> {
94
- if (!this.directory.searchMembers) {
95
- return [];
96
- }
97
-
98
- return (await this.directory.searchMembers(searchText)).map(
99
- (member): MemberMetadata =>
100
- readMemberMetadataFromMemberBaseMember(member, this.options),
101
- );
102
- }
103
- }
104
-
105
- /**
106
- * Helper for hosts that already hold an authenticated `TMember` (for
107
- * example from `@rytass/member-base-nestjs-module`) and want to project it
108
- * into a {@link BPMAuthContext} without writing the boilerplate by hand.
109
- *
110
- * Returns `null` when the input is nullish or when the member is missing
111
- * an id — never throws. Pair this with `BPMRootModuleOptions.authContextFactory`
112
- * so BPM resolvers receive the projected context on every request.
113
- *
114
- * @example
115
- * ```ts
116
- * const bpmAuth = createBPMAuthContextFromMemberBaseMember(memberBaseUser, {
117
- * readRoles: (m) => m.roles,
118
- * readPermissions: (m) => m.permissions,
119
- * readCustomFields: (m) => ({ tenantId: m.tenantId }),
120
- * });
121
- * ```
122
- */
123
- export function createBPMAuthContextFromMemberBaseMember<TMember>(
124
- member: TMember | null | undefined,
125
- options: BPMMemberBaseAdapterOptions<TMember> = {},
126
- ): BPMAuthContext | null {
127
- if (!member) {
128
- return null;
129
- }
130
-
131
- const memberId = readMemberId(member, options);
132
-
133
- return memberId
134
- ? {
135
- memberId,
136
- metadata: options.readCustomFields?.(member) ?? {},
137
- permissions: options.readPermissions?.(member) ?? [],
138
- roles: options.readRoles?.(member) ?? [],
139
- }
140
- : null;
141
- }
142
-
143
- /**
144
- * Builds a Nest `Provider` that adapts a host-provided
145
- * {@link BPMMemberBaseDirectory} into a {@link BPMMemberResolver}, then
146
- * registers it under the host-chosen injection token (typically
147
- * {@link BPM_MEMBER_RESOLVER}).
148
- *
149
- * Pass the result inside `BPMRootModuleOptions.memberResolverProvider`.
150
- *
151
- * @example
152
- * ```ts
153
- * BPMRootModule.forRoot({
154
- * memberResolverProvider: createBPMMemberBaseResolverProvider({
155
- * provide: BPM_MEMBER_RESOLVER,
156
- * directoryToken: HOST_MEMBER_DIRECTORY,
157
- * adapterOptions: {
158
- * readEmail: (m) => m.email,
159
- * readName: (m) => m.name,
160
- * },
161
- * }),
162
- * // ...
163
- * });
164
- * ```
165
- */
166
- export function createBPMMemberBaseResolverProvider<TMember>({
167
- adapterOptions,
168
- directoryToken,
169
- provide,
170
- }: BPMMemberBaseResolverProviderOptions<TMember>): Provider<BPMMemberResolver> {
171
- return {
172
- inject: [directoryToken],
173
- provide,
174
- useFactory: (
175
- directory: BPMMemberBaseDirectory<TMember>,
176
- ): BPMMemberResolver =>
177
- new BPMMemberBaseResolverAdapter(directory, adapterOptions),
178
- };
179
- }
180
-
181
- export function readMemberMetadataFromMemberBaseMember<TMember>(
182
- member: TMember,
183
- options: BPMMemberBaseAdapterOptions<TMember> = {},
184
- ): MemberMetadata {
185
- const memberId = readMemberId(member, options);
186
-
187
- if (!memberId) {
188
- throw new Error('member-base member id is required for BPM integration');
189
- }
190
-
191
- return {
192
- customFields: options.readCustomFields?.(member) ?? {},
193
- email: readMemberEmail(member, options) ?? '',
194
- memberId,
195
- name: readMemberName(member, options) ?? memberId,
196
- };
197
- }
198
-
199
- function readMemberId<TMember>(
200
- member: TMember,
201
- options: BPMMemberBaseAdapterOptions<TMember>,
202
- ): string | null {
203
- return (
204
- normalizeText(options.readMemberId?.(member)) ??
205
- readStringProperty(member, 'memberId') ??
206
- readStringProperty(member, 'id') ??
207
- readStringProperty(member, 'sub')
208
- );
209
- }
210
-
211
- function readMemberEmail<TMember>(
212
- member: TMember,
213
- options: BPMMemberBaseAdapterOptions<TMember>,
214
- ): string | null {
215
- return normalizeText(options.readEmail?.(member)) ?? readStringProperty(member, 'email');
216
- }
217
-
218
- function readMemberName<TMember>(
219
- member: TMember,
220
- options: BPMMemberBaseAdapterOptions<TMember>,
221
- ): string | null {
222
- return (
223
- normalizeText(options.readName?.(member)) ??
224
- readStringProperty(member, 'name') ??
225
- readStringProperty(member, 'displayName') ??
226
- readMemberEmail(member, options)
227
- );
228
- }
229
-
230
- function readStringProperty(value: unknown, key: string): string | null {
231
- if (!isRecord(value)) {
232
- return null;
233
- }
234
-
235
- return normalizeText(value[key]);
236
- }
237
-
238
- function normalizeText(value: unknown): string | null {
239
- return typeof value === 'string' && value.trim() ? value.trim() : null;
240
- }
241
-
242
- function isRecord(value: unknown): value is Readonly<Record<string, unknown>> {
243
- return typeof value === 'object' && value !== null;
244
- }
@@ -1,27 +0,0 @@
1
- import { Field, ID, ObjectType } from '@nestjs/graphql';
2
- import { Column, Entity, PrimaryGeneratedColumn, Unique } from 'typeorm';
3
- import { MemberMetadata } from '@rytass/bpm-core-shared';
4
-
5
- @Entity('member_metadata_cache')
6
- @Unique(['memberId'])
7
- @ObjectType('MemberMetadataCache')
8
- export class MemberMetadataCacheEntity {
9
- @PrimaryGeneratedColumn('uuid')
10
- @Field(() => ID)
11
- id!: string;
12
-
13
- @Column('text', { name: 'member_id' })
14
- @Field()
15
- memberId!: string;
16
-
17
- @Column('jsonb')
18
- metadata!: MemberMetadata;
19
-
20
- @Column('timestamptz', { name: 'fetched_at' })
21
- @Field()
22
- fetchedAt!: Date;
23
-
24
- @Column('timestamptz', { name: 'expires_at' })
25
- @Field()
26
- expiresAt!: Date;
27
- }
@@ -1,28 +0,0 @@
1
- import { Field, ID, ObjectType } from '@nestjs/graphql';
2
- import { MemberMetadata } from '@rytass/bpm-core-shared';
3
-
4
- @ObjectType('MemberProfile')
5
- export class MemberProfileObject {
6
- @Field(() => ID)
7
- memberId!: string;
8
-
9
- @Field()
10
- name!: string;
11
-
12
- @Field()
13
- email!: string;
14
-
15
- @Field()
16
- customFieldsJson!: string;
17
- }
18
-
19
- export function toMemberProfileObject(
20
- metadata: MemberMetadata,
21
- ): MemberProfileObject {
22
- return {
23
- customFieldsJson: JSON.stringify(metadata.customFields),
24
- email: metadata.email,
25
- memberId: metadata.memberId,
26
- name: metadata.name,
27
- };
28
- }
@@ -1,47 +0,0 @@
1
- import { MemberMetadata } from '@rytass/bpm-core-shared';
2
-
3
- /**
4
- * Injection token for the host-provided `BPMMemberResolver`.
5
- *
6
- * Hosts must register a provider under this token through
7
- * `BPMRootModuleOptions.memberResolverProvider`. BPM resolvers and
8
- * services look up display names, emails, and approver candidates via
9
- * this token without coupling to any specific identity backend.
10
- */
11
- export const BPM_MEMBER_RESOLVER = Symbol('BPM_MEMBER_RESOLVER');
12
-
13
- /**
14
- * @deprecated Use {@link BPM_MEMBER_RESOLVER}. Kept as a backwards-compatible
15
- * alias for hosts that adopted the original name. To be removed in a future
16
- * major release.
17
- */
18
- export const MEMBER_RESOLVER = BPM_MEMBER_RESOLVER;
19
-
20
- /**
21
- * Contract host applications must implement so BPM can resolve member
22
- * profiles, approver candidates, and search results.
23
- *
24
- * BPM never reads the host's user table directly — it only knows
25
- * `memberId` strings and asks this resolver for any additional information.
26
- *
27
- * - `resolve` is called per missing id; throwing here surfaces as a BPM
28
- * GraphQL error.
29
- * - `resolveMany` is the batched form BPM prefers when many ids are needed.
30
- * Implementations may de-duplicate / cache as they see fit; missing ids
31
- * should be omitted from the result `Map`.
32
- * - `search` is optional. When omitted, BPM's `searchMembers` GraphQL
33
- * query simply returns an empty array.
34
- */
35
- export interface BPMMemberResolver {
36
- resolve(memberId: string): Promise<MemberMetadata>;
37
- resolveMany(
38
- memberIds: readonly string[],
39
- ): Promise<ReadonlyMap<string, MemberMetadata>>;
40
- search?(searchText: string): Promise<readonly MemberMetadata[]>;
41
- }
42
-
43
- /**
44
- * @deprecated Use {@link BPMMemberResolver}. Kept as a backwards-compatible
45
- * alias.
46
- */
47
- export type MemberResolver = BPMMemberResolver;
@@ -1,14 +0,0 @@
1
- import { MigrationInterface, QueryRunner } from 'typeorm';
2
-
3
- export class EnablePostgresExtensions0000000000001 implements MigrationInterface {
4
- readonly name = 'EnablePostgresExtensions0000000000001';
5
-
6
- async up(queryRunner: QueryRunner): Promise<void> {
7
- await queryRunner.query('CREATE EXTENSION IF NOT EXISTS "uuid-ossp"');
8
- await queryRunner.query('CREATE EXTENSION IF NOT EXISTS "ltree"');
9
- }
10
-
11
- async down(queryRunner: QueryRunner): Promise<void> {
12
- await queryRunner.query('DROP EXTENSION IF EXISTS "ltree"');
13
- }
14
- }
@@ -1,19 +0,0 @@
1
- import { MigrationInterface, QueryRunner } from 'typeorm';
2
-
3
- export class RemoveAttachmentEncryptionKey0000000011000 implements MigrationInterface {
4
- name = 'RemoveAttachmentEncryptionKey0000000011000';
5
-
6
- async up(queryRunner: QueryRunner): Promise<void> {
7
- await queryRunner.query(`
8
- ALTER TABLE "attachments"
9
- DROP COLUMN IF EXISTS "encryption_key_id"
10
- `);
11
- }
12
-
13
- async down(queryRunner: QueryRunner): Promise<void> {
14
- await queryRunner.query(`
15
- ALTER TABLE "attachments"
16
- ADD COLUMN IF NOT EXISTS "encryption_key_id" text NULL
17
- `);
18
- }
19
- }
@@ -1,22 +0,0 @@
1
- import { MigrationInterface, QueryRunner } from 'typeorm';
2
-
3
- export class NotificationSlaIdempotency0000000012000
4
- implements MigrationInterface
5
- {
6
- name = 'NotificationSlaIdempotency0000000012000';
7
-
8
- async up(queryRunner: QueryRunner): Promise<void> {
9
- await queryRunner.query(`
10
- CREATE UNIQUE INDEX IF NOT EXISTS "UQ_notifications_sla_once"
11
- ON "notifications" ("task_id", "recipient_member_id", "type", "channel")
12
- WHERE "task_id" IS NOT NULL
13
- AND "type" IN ('SLA_WARNING', 'SLA_OVERDUE')
14
- `);
15
- }
16
-
17
- async down(queryRunner: QueryRunner): Promise<void> {
18
- await queryRunner.query(
19
- 'DROP INDEX IF EXISTS "UQ_notifications_sla_once"',
20
- );
21
- }
22
- }
@@ -1,113 +0,0 @@
1
- import { MigrationInterface, QueryRunner } from 'typeorm';
2
-
3
- export class WorkflowQueryIndexes0000000013000 implements MigrationInterface {
4
- readonly name = 'WorkflowQueryIndexes0000000013000';
5
-
6
- async up(queryRunner: QueryRunner): Promise<void> {
7
- await queryRunner.query('CREATE EXTENSION IF NOT EXISTS "pg_trgm"');
8
-
9
- await queryRunner.query(`
10
- CREATE INDEX IF NOT EXISTS "IDX_approval_instances_created_desc"
11
- ON "approval_instances" ("created_at" DESC)
12
- `);
13
-
14
- await queryRunner.query(`
15
- CREATE INDEX IF NOT EXISTS "IDX_approval_instances_state_created_desc"
16
- ON "approval_instances" ("state", "created_at" DESC)
17
- `);
18
-
19
- await queryRunner.query(`
20
- CREATE INDEX IF NOT EXISTS "IDX_approval_instances_template_created_desc"
21
- ON "approval_instances" ("template_id", "created_at" DESC)
22
- `);
23
-
24
- await queryRunner.query(`
25
- CREATE INDEX IF NOT EXISTS "IDX_approval_instances_initiator_created_desc"
26
- ON "approval_instances" ("initiator_member_id", "created_at" DESC)
27
- `);
28
-
29
- await queryRunner.query(`
30
- CREATE INDEX IF NOT EXISTS "IDX_approval_instances_title_trgm"
31
- ON "approval_instances"
32
- USING gin (lower("title") gin_trgm_ops)
33
- `);
34
-
35
- await queryRunner.query(`
36
- CREATE INDEX IF NOT EXISTS "IDX_approval_instances_initiator_trgm"
37
- ON "approval_instances"
38
- USING gin (lower("initiator_member_id") gin_trgm_ops)
39
- `);
40
-
41
- await queryRunner.query(`
42
- CREATE INDEX IF NOT EXISTS "IDX_tasks_instance_assignee_read"
43
- ON "tasks" ("instance_id", "assignee_member_id")
44
- WHERE "assignee_member_id" IS NOT NULL
45
- `);
46
-
47
- await queryRunner.query(`
48
- CREATE INDEX IF NOT EXISTS "IDX_tasks_instance_original_assignee_read"
49
- ON "tasks" ("instance_id", "original_assignee_member_id")
50
- WHERE "original_assignee_member_id" IS NOT NULL
51
- `);
52
-
53
- await queryRunner.query(`
54
- CREATE INDEX IF NOT EXISTS "IDX_task_candidates_member_task"
55
- ON "task_candidates" ("member_id", "task_id")
56
- `);
57
-
58
- await queryRunner.query(`
59
- CREATE INDEX IF NOT EXISTS "IDX_task_candidates_original_member_task"
60
- ON "task_candidates" ("original_member_id", "task_id")
61
- `);
62
-
63
- await queryRunner.query(`
64
- CREATE INDEX IF NOT EXISTS "IDX_task_decisions_decider_task"
65
- ON "task_decisions" ("decided_by_member_id", "task_id")
66
- `);
67
-
68
- await queryRunner.query(`
69
- CREATE INDEX IF NOT EXISTS "IDX_notifications_recipient_instance"
70
- ON "notifications" ("recipient_member_id", "instance_id")
71
- WHERE "instance_id" IS NOT NULL
72
- `);
73
- }
74
-
75
- async down(queryRunner: QueryRunner): Promise<void> {
76
- await queryRunner.query(
77
- 'DROP INDEX IF EXISTS "IDX_notifications_recipient_instance"',
78
- );
79
- await queryRunner.query(
80
- 'DROP INDEX IF EXISTS "IDX_task_decisions_decider_task"',
81
- );
82
- await queryRunner.query(
83
- 'DROP INDEX IF EXISTS "IDX_task_candidates_original_member_task"',
84
- );
85
- await queryRunner.query(
86
- 'DROP INDEX IF EXISTS "IDX_task_candidates_member_task"',
87
- );
88
- await queryRunner.query(
89
- 'DROP INDEX IF EXISTS "IDX_tasks_instance_original_assignee_read"',
90
- );
91
- await queryRunner.query(
92
- 'DROP INDEX IF EXISTS "IDX_tasks_instance_assignee_read"',
93
- );
94
- await queryRunner.query(
95
- 'DROP INDEX IF EXISTS "IDX_approval_instances_initiator_trgm"',
96
- );
97
- await queryRunner.query(
98
- 'DROP INDEX IF EXISTS "IDX_approval_instances_title_trgm"',
99
- );
100
- await queryRunner.query(
101
- 'DROP INDEX IF EXISTS "IDX_approval_instances_initiator_created_desc"',
102
- );
103
- await queryRunner.query(
104
- 'DROP INDEX IF EXISTS "IDX_approval_instances_template_created_desc"',
105
- );
106
- await queryRunner.query(
107
- 'DROP INDEX IF EXISTS "IDX_approval_instances_state_created_desc"',
108
- );
109
- await queryRunner.query(
110
- 'DROP INDEX IF EXISTS "IDX_approval_instances_created_desc"',
111
- );
112
- }
113
- }
@@ -1,47 +0,0 @@
1
- import { MigrationInterface } from 'typeorm';
2
- import { EnablePostgresExtensions0000000000001 } from './0000000000001-enable-postgres-extensions';
3
- import { IdentityOrganizationFoundation0000000001000 } from './0000000001000-identity-organization-foundation';
4
- import { FormBuilderFoundation0000000002000 } from './0000000002000-form-builder-foundation';
5
- import { ApprovalTemplateFoundation0000000003000 } from './0000000003000-approval-template-foundation';
6
- import { WorkflowEngineFoundation0000000004000 } from './0000000004000-workflow-engine-foundation';
7
- import { DelegationRules0000000005000 } from './0000000005000-delegation-rules';
8
- import { NotificationsSla0000000006000 } from './0000000006000-notifications-sla';
9
- import { SignaturesAttachments0000000007000 } from './0000000007000-signatures-attachments';
10
- import { ApprovalTemplateCategories0000000008000 } from './0000000008000-approval-template-categories';
11
- import { TaskCandidates0000000009000 } from './0000000009000-task-candidates';
12
- import { NotificationDeliveryState0000000010000 } from './0000000010000-notification-delivery-state';
13
- import { RemoveAttachmentEncryptionKey0000000011000 } from './0000000011000-remove-attachment-encryption-key';
14
- import { NotificationSlaIdempotency0000000012000 } from './0000000012000-notification-sla-idempotency';
15
- import { WorkflowQueryIndexes0000000013000 } from './0000000013000-workflow-query-indexes';
16
-
17
- export const BPM_CORE_MIGRATIONS: readonly (new () => MigrationInterface)[] = [
18
- EnablePostgresExtensions0000000000001,
19
- IdentityOrganizationFoundation0000000001000,
20
- FormBuilderFoundation0000000002000,
21
- ApprovalTemplateFoundation0000000003000,
22
- WorkflowEngineFoundation0000000004000,
23
- DelegationRules0000000005000,
24
- NotificationsSla0000000006000,
25
- SignaturesAttachments0000000007000,
26
- ApprovalTemplateCategories0000000008000,
27
- TaskCandidates0000000009000,
28
- NotificationDeliveryState0000000010000,
29
- RemoveAttachmentEncryptionKey0000000011000,
30
- NotificationSlaIdempotency0000000012000,
31
- WorkflowQueryIndexes0000000013000,
32
- ];
33
-
34
- export * from './0000000000001-enable-postgres-extensions';
35
- export * from './0000000001000-identity-organization-foundation';
36
- export * from './0000000002000-form-builder-foundation';
37
- export * from './0000000003000-approval-template-foundation';
38
- export * from './0000000004000-workflow-engine-foundation';
39
- export * from './0000000005000-delegation-rules';
40
- export * from './0000000006000-notifications-sla';
41
- export * from './0000000007000-signatures-attachments';
42
- export * from './0000000008000-approval-template-categories';
43
- export * from './0000000009000-task-candidates';
44
- export * from './0000000010000-notification-delivery-state';
45
- export * from './0000000011000-remove-attachment-encryption-key';
46
- export * from './0000000012000-notification-sla-idempotency';
47
- export * from './0000000013000-workflow-query-indexes';
@@ -1,46 +0,0 @@
1
- import { Field, InputType } from '@nestjs/graphql';
2
- import {
3
- IsBoolean,
4
- IsIn,
5
- IsOptional,
6
- IsString,
7
- Matches,
8
- } from 'class-validator';
9
- import { NotificationDigestModeEnum } from '../notification.enums';
10
-
11
- const TIME_ONLY_PATTERN = /^([01]\d|2[0-3]):[0-5]\d(?::[0-5]\d)?$/;
12
-
13
- @InputType()
14
- export class UpdateNotificationPreferenceInput {
15
- @Field()
16
- @IsString()
17
- memberId!: string;
18
-
19
- @Field()
20
- @IsBoolean()
21
- inAppEnabled!: boolean;
22
-
23
- @Field()
24
- @IsBoolean()
25
- emailEnabled!: boolean;
26
-
27
- @Field(() => NotificationDigestModeEnum)
28
- @IsIn(Object.values(NotificationDigestModeEnum))
29
- emailDigestMode!: NotificationDigestModeEnum;
30
-
31
- @Field(() => String, { nullable: true })
32
- @IsOptional()
33
- @IsString()
34
- @Matches(TIME_ONLY_PATTERN, {
35
- message: 'quietHoursStart must use HH:mm or HH:mm:ss format',
36
- })
37
- quietHoursStart!: string | null;
38
-
39
- @Field(() => String, { nullable: true })
40
- @IsOptional()
41
- @IsString()
42
- @Matches(TIME_ONLY_PATTERN, {
43
- message: 'quietHoursEnd must use HH:mm or HH:mm:ss format',
44
- })
45
- quietHoursEnd!: string | null;
46
- }
@@ -1,69 +0,0 @@
1
- import {
2
- Inject,
3
- Injectable,
4
- Logger,
5
- OnApplicationBootstrap,
6
- OnApplicationShutdown,
7
- Optional,
8
- } from '@nestjs/common';
9
- import { NotificationDeliveryService } from './notification-delivery.service';
10
- import {
11
- BPM_NOTIFICATION_OPTIONS,
12
- BPMResolvedNotificationOptions,
13
- DEFAULT_BPM_NOTIFICATION_OPTIONS,
14
- } from './notification-options';
15
-
16
- @Injectable()
17
- export class NotificationDeliverySchedulerService
18
- implements OnApplicationBootstrap, OnApplicationShutdown
19
- {
20
- private readonly logger = new Logger(
21
- NotificationDeliverySchedulerService.name,
22
- );
23
- private timer: NodeJS.Timeout | null = null;
24
-
25
- constructor(
26
- private readonly deliveryService: NotificationDeliveryService,
27
- @Optional()
28
- @Inject(BPM_NOTIFICATION_OPTIONS)
29
- private readonly notificationOptions: BPMResolvedNotificationOptions = DEFAULT_BPM_NOTIFICATION_OPTIONS,
30
- ) {}
31
-
32
- onApplicationBootstrap(): void {
33
- if (
34
- process.env.NODE_ENV === 'test' ||
35
- !this.notificationOptions.deliverySchedulerEnabled
36
- ) {
37
- return;
38
- }
39
-
40
- this.timer = setInterval((): void => {
41
- void this.scanPendingDeliveries();
42
- }, this.notificationOptions.deliveryScanIntervalMs);
43
- this.timer.unref();
44
- }
45
-
46
- onApplicationShutdown(): void {
47
- if (this.timer) {
48
- clearInterval(this.timer);
49
- this.timer = null;
50
- }
51
- }
52
-
53
- private async scanPendingDeliveries(): Promise<void> {
54
- try {
55
- const deliveredCount =
56
- await this.deliveryService.deliverPendingNotifications({
57
- options: this.notificationOptions,
58
- });
59
-
60
- if (deliveredCount) {
61
- this.logger.log(`Delivered ${deliveredCount} pending notifications`);
62
- }
63
- } catch (error: unknown) {
64
- this.logger.error(
65
- error instanceof Error ? error.message : 'Delivery scan failed',
66
- );
67
- }
68
- }
69
- }