@rytass/bpm-core-nestjs-module 0.13.3 → 0.13.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 (143) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/package.json +14 -7
  3. package/src/index.d.ts +1 -0
  4. package/src/index.js +1 -0
  5. package/src/index.js.map +1 -1
  6. package/src/lib/attachment/attachment-storage.provider.d.ts +11 -0
  7. package/src/lib/attachment/attachment-storage.provider.js +15 -1
  8. package/src/lib/attachment/attachment-storage.provider.js.map +1 -1
  9. package/src/lib/bpm/bpm-root-options.d.ts +134 -0
  10. package/src/lib/bpm/bpm-root-options.js +61 -0
  11. package/src/lib/bpm/bpm-root-options.js.map +1 -0
  12. package/src/lib/bpm/bpm-root.module.d.ts +101 -137
  13. package/src/lib/bpm/bpm-root.module.js +83 -118
  14. package/src/lib/bpm/bpm-root.module.js.map +1 -1
  15. package/src/lib/bpm/index.d.ts +1 -0
  16. package/src/lib/bpm/index.js +1 -0
  17. package/src/lib/bpm/index.js.map +1 -1
  18. package/src/lib/calendar/business-calendar.provider.d.ts +8 -4
  19. package/src/lib/calendar/business-calendar.provider.js +15 -6
  20. package/src/lib/calendar/business-calendar.provider.js.map +1 -1
  21. package/src/lib/common/outbox.d.ts +26 -0
  22. package/src/lib/common/outbox.js +64 -0
  23. package/src/lib/common/outbox.js.map +1 -0
  24. package/src/lib/delegation/delegation.service.js +7 -7
  25. package/src/lib/delegation/delegation.service.js.map +1 -1
  26. package/src/lib/form-data-source/form-data-source.module.js +2 -4
  27. package/src/lib/form-data-source/form-data-source.module.js.map +1 -1
  28. package/src/lib/form-data-source/form-data-source.provider.d.ts +14 -0
  29. package/src/lib/form-data-source/form-data-source.provider.js +23 -0
  30. package/src/lib/form-data-source/form-data-source.provider.js.map +1 -0
  31. package/src/lib/form-data-source/index.d.ts +1 -0
  32. package/src/lib/form-data-source/index.js +1 -0
  33. package/src/lib/form-data-source/index.js.map +1 -1
  34. package/src/lib/identity/default-member-resolver.d.ts +39 -0
  35. package/src/lib/identity/default-member-resolver.js +81 -0
  36. package/src/lib/identity/default-member-resolver.js.map +1 -0
  37. package/src/lib/identity/identity.module.d.ts +12 -2
  38. package/src/lib/identity/identity.module.js +2 -1
  39. package/src/lib/identity/identity.module.js.map +1 -1
  40. package/src/lib/identity/index.d.ts +1 -0
  41. package/src/lib/identity/index.js +1 -0
  42. package/src/lib/identity/index.js.map +1 -1
  43. package/src/lib/migrations/0000000023000-workflow-webhook-deliveries.d.ts +17 -0
  44. package/src/lib/migrations/0000000023000-workflow-webhook-deliveries.js +61 -0
  45. package/src/lib/migrations/0000000023000-workflow-webhook-deliveries.js.map +1 -0
  46. package/src/lib/migrations/0000000024000-workflow-webhook-endpoints.d.ts +16 -0
  47. package/src/lib/migrations/0000000024000-workflow-webhook-endpoints.js +71 -0
  48. package/src/lib/migrations/0000000024000-workflow-webhook-endpoints.js.map +1 -0
  49. package/src/lib/migrations/index.d.ts +2 -0
  50. package/src/lib/migrations/index.js +6 -0
  51. package/src/lib/migrations/index.js.map +1 -1
  52. package/src/lib/notification/notification-delivery.service.js +4 -57
  53. package/src/lib/notification/notification-delivery.service.js.map +1 -1
  54. package/src/lib/notification/notification.service.js +4 -3
  55. package/src/lib/notification/notification.service.js.map +1 -1
  56. package/src/lib/template/template.service.d.ts +9 -0
  57. package/src/lib/template/template.service.js +31 -0
  58. package/src/lib/template/template.service.js.map +1 -1
  59. package/src/lib/template/workflow-definition.validator.js +54 -1
  60. package/src/lib/template/workflow-definition.validator.js.map +1 -1
  61. package/src/lib/workflow-engine/workflow-engine.enums.d.ts +3 -1
  62. package/src/lib/workflow-engine/workflow-engine.enums.js +2 -0
  63. package/src/lib/workflow-engine/workflow-engine.enums.js.map +1 -1
  64. package/src/lib/workflow-engine/workflow-engine.module.js +3 -0
  65. package/src/lib/workflow-engine/workflow-engine.module.js.map +1 -1
  66. package/src/lib/workflow-engine/workflow-engine.service.d.ts +5 -2
  67. package/src/lib/workflow-engine/workflow-engine.service.js +150 -26
  68. package/src/lib/workflow-engine/workflow-engine.service.js.map +1 -1
  69. package/src/lib/workflow-webhook/index.d.ts +24 -0
  70. package/src/lib/workflow-webhook/index.js +28 -0
  71. package/src/lib/workflow-webhook/index.js.map +1 -0
  72. package/src/lib/workflow-webhook/workflow-webhook-allowlist.d.ts +38 -0
  73. package/src/lib/workflow-webhook/workflow-webhook-allowlist.js +296 -0
  74. package/src/lib/workflow-webhook/workflow-webhook-allowlist.js.map +1 -0
  75. package/src/lib/workflow-webhook/workflow-webhook-database-source.d.ts +33 -0
  76. package/src/lib/workflow-webhook/workflow-webhook-database-source.js +129 -0
  77. package/src/lib/workflow-webhook/workflow-webhook-database-source.js.map +1 -0
  78. package/src/lib/workflow-webhook/workflow-webhook-delivery-scheduler.service.d.ts +25 -0
  79. package/src/lib/workflow-webhook/workflow-webhook-delivery-scheduler.service.js +92 -0
  80. package/src/lib/workflow-webhook/workflow-webhook-delivery-scheduler.service.js.map +1 -0
  81. package/src/lib/workflow-webhook/workflow-webhook-delivery.entity.d.ts +53 -0
  82. package/src/lib/workflow-webhook/workflow-webhook-delivery.entity.js +97 -0
  83. package/src/lib/workflow-webhook/workflow-webhook-delivery.entity.js.map +1 -0
  84. package/src/lib/workflow-webhook/workflow-webhook-delivery.enums.d.ts +28 -0
  85. package/src/lib/workflow-webhook/workflow-webhook-delivery.enums.js +36 -0
  86. package/src/lib/workflow-webhook/workflow-webhook-delivery.enums.js.map +1 -0
  87. package/src/lib/workflow-webhook/workflow-webhook-delivery.object.d.ts +28 -0
  88. package/src/lib/workflow-webhook/workflow-webhook-delivery.object.js +88 -0
  89. package/src/lib/workflow-webhook/workflow-webhook-delivery.object.js.map +1 -0
  90. package/src/lib/workflow-webhook/workflow-webhook-delivery.resolver.d.ts +9 -0
  91. package/src/lib/workflow-webhook/workflow-webhook-delivery.resolver.js +66 -0
  92. package/src/lib/workflow-webhook/workflow-webhook-delivery.resolver.js.map +1 -0
  93. package/src/lib/workflow-webhook/workflow-webhook-delivery.service.d.ts +116 -0
  94. package/src/lib/workflow-webhook/workflow-webhook-delivery.service.js +705 -0
  95. package/src/lib/workflow-webhook/workflow-webhook-delivery.service.js.map +1 -0
  96. package/src/lib/workflow-webhook/workflow-webhook-delivery.subscriber.d.ts +23 -0
  97. package/src/lib/workflow-webhook/workflow-webhook-delivery.subscriber.js +85 -0
  98. package/src/lib/workflow-webhook/workflow-webhook-delivery.subscriber.js.map +1 -0
  99. package/src/lib/workflow-webhook/workflow-webhook-endpoint-admin.dto.d.ts +85 -0
  100. package/src/lib/workflow-webhook/workflow-webhook-endpoint-admin.dto.js +345 -0
  101. package/src/lib/workflow-webhook/workflow-webhook-endpoint-admin.dto.js.map +1 -0
  102. package/src/lib/workflow-webhook/workflow-webhook-endpoint-admin.resolver.d.ts +23 -0
  103. package/src/lib/workflow-webhook/workflow-webhook-endpoint-admin.resolver.js +159 -0
  104. package/src/lib/workflow-webhook/workflow-webhook-endpoint-admin.resolver.js.map +1 -0
  105. package/src/lib/workflow-webhook/workflow-webhook-endpoint-admin.service.d.ts +93 -0
  106. package/src/lib/workflow-webhook/workflow-webhook-endpoint-admin.service.js +464 -0
  107. package/src/lib/workflow-webhook/workflow-webhook-endpoint-admin.service.js.map +1 -0
  108. package/src/lib/workflow-webhook/workflow-webhook-endpoint.entity.d.ts +52 -0
  109. package/src/lib/workflow-webhook/workflow-webhook-endpoint.entity.js +135 -0
  110. package/src/lib/workflow-webhook/workflow-webhook-endpoint.entity.js.map +1 -0
  111. package/src/lib/workflow-webhook/workflow-webhook-enqueue.d.ts +46 -0
  112. package/src/lib/workflow-webhook/workflow-webhook-enqueue.js +134 -0
  113. package/src/lib/workflow-webhook/workflow-webhook-enqueue.js.map +1 -0
  114. package/src/lib/workflow-webhook/workflow-webhook-options.d.ts +86 -0
  115. package/src/lib/workflow-webhook/workflow-webhook-options.js +88 -0
  116. package/src/lib/workflow-webhook/workflow-webhook-options.js.map +1 -0
  117. package/src/lib/workflow-webhook/workflow-webhook-options.module.d.ts +18 -0
  118. package/src/lib/workflow-webhook/workflow-webhook-options.module.js +57 -0
  119. package/src/lib/workflow-webhook/workflow-webhook-options.module.js.map +1 -0
  120. package/src/lib/workflow-webhook/workflow-webhook-secret-cipher.d.ts +20 -0
  121. package/src/lib/workflow-webhook/workflow-webhook-secret-cipher.js +66 -0
  122. package/src/lib/workflow-webhook/workflow-webhook-secret-cipher.js.map +1 -0
  123. package/src/lib/workflow-webhook/workflow-webhook.errors.d.ts +35 -0
  124. package/src/lib/workflow-webhook/workflow-webhook.errors.js +41 -0
  125. package/src/lib/workflow-webhook/workflow-webhook.errors.js.map +1 -0
  126. package/src/lib/workflow-webhook/workflow-webhook.module.d.ts +9 -0
  127. package/src/lib/workflow-webhook/workflow-webhook.module.js +62 -0
  128. package/src/lib/workflow-webhook/workflow-webhook.module.js.map +1 -0
  129. package/src/lib/workflow-webhook/workflow-webhook.provider.d.ts +12 -0
  130. package/src/lib/workflow-webhook/workflow-webhook.provider.js +21 -0
  131. package/src/lib/workflow-webhook/workflow-webhook.provider.js.map +1 -0
  132. package/src/lib/workflow-webhook/workflow-webhook.queries.d.ts +38 -0
  133. package/src/lib/workflow-webhook/workflow-webhook.queries.js +142 -0
  134. package/src/lib/workflow-webhook/workflow-webhook.queries.js.map +1 -0
  135. package/src/lib/workflow-webhook/workflow-webhook.service.d.ts +50 -0
  136. package/src/lib/workflow-webhook/workflow-webhook.service.js +221 -0
  137. package/src/lib/workflow-webhook/workflow-webhook.service.js.map +1 -0
  138. package/src/lib/workflow-webhook/workflow-webhook.types.d.ts +127 -0
  139. package/src/lib/workflow-webhook/workflow-webhook.types.js +33 -0
  140. package/src/lib/workflow-webhook/workflow-webhook.types.js.map +1 -0
  141. package/src/lib/workflow-webhook/workflow-webhook.validator.d.ts +20 -0
  142. package/src/lib/workflow-webhook/workflow-webhook.validator.js +97 -0
  143. package/src/lib/workflow-webhook/workflow-webhook.validator.js.map +1 -0
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WorkflowWebhookSecretCipher = void 0;
4
+ exports.parseWorkflowWebhookSecretKey = parseWorkflowWebhookSecretKey;
5
+ const node_crypto_1 = require("node:crypto");
6
+ const ALGORITHM = 'aes-256-gcm';
7
+ const IV_BYTES = 12;
8
+ const TAG_BYTES = 16;
9
+ const KEY_BYTES = 32;
10
+ const ENVELOPE_PREFIX = 'v1:';
11
+ /**
12
+ * Reads `workflowWebhookSecretEncryptionKey`: 32 bytes as 64 hex characters or
13
+ * base64. Anything else throws at boot, because a key that silently decodes
14
+ * to the wrong length would encrypt everything with a key nobody can
15
+ * reproduce. The message never echoes the key.
16
+ */
17
+ function parseWorkflowWebhookSecretKey(value) {
18
+ const trimmed = value.trim();
19
+ const decoded = /^[0-9a-fA-F]{64}$/u.test(trimmed)
20
+ ? Buffer.from(trimmed, 'hex')
21
+ : /^[A-Za-z0-9+/]+={0,2}$/u.test(trimmed)
22
+ ? Buffer.from(trimmed, 'base64')
23
+ : null;
24
+ if (!decoded || decoded.length !== KEY_BYTES) {
25
+ throw new Error('workflowWebhookSecretEncryptionKey must be 32 bytes, as 64 hex characters or base64');
26
+ }
27
+ return decoded;
28
+ }
29
+ /**
30
+ * AES-256-GCM for the header values and signing secrets of database-managed
31
+ * webhook endpoints (ADR 18 §3.13). The envelope is
32
+ * `v1:<base64(iv | tag | ciphertext)>`, so a future key or algorithm change
33
+ * can tell old values apart. Decryption fails loudly on a wrong key or a
34
+ * tampered value instead of returning garbage.
35
+ */
36
+ class WorkflowWebhookSecretCipher {
37
+ constructor(key) {
38
+ this.key = parseWorkflowWebhookSecretKey(key);
39
+ }
40
+ encrypt(plaintext) {
41
+ const iv = (0, node_crypto_1.randomBytes)(IV_BYTES);
42
+ const cipher = (0, node_crypto_1.createCipheriv)(ALGORITHM, this.key, iv);
43
+ const ciphertext = Buffer.concat([
44
+ cipher.update(plaintext, 'utf8'),
45
+ cipher.final(),
46
+ ]);
47
+ return `${ENVELOPE_PREFIX}${Buffer.concat([iv, cipher.getAuthTag(), ciphertext]).toString('base64')}`;
48
+ }
49
+ decrypt(envelope) {
50
+ if (!envelope.startsWith(ENVELOPE_PREFIX)) {
51
+ throw new Error('Unsupported webhook secret envelope');
52
+ }
53
+ const raw = Buffer.from(envelope.slice(ENVELOPE_PREFIX.length), 'base64');
54
+ if (raw.length < IV_BYTES + TAG_BYTES) {
55
+ throw new Error('Malformed webhook secret envelope');
56
+ }
57
+ const decipher = (0, node_crypto_1.createDecipheriv)(ALGORITHM, this.key, raw.subarray(0, IV_BYTES));
58
+ decipher.setAuthTag(raw.subarray(IV_BYTES, IV_BYTES + TAG_BYTES));
59
+ return Buffer.concat([
60
+ decipher.update(raw.subarray(IV_BYTES + TAG_BYTES)),
61
+ decipher.final(),
62
+ ]).toString('utf8');
63
+ }
64
+ }
65
+ exports.WorkflowWebhookSecretCipher = WorkflowWebhookSecretCipher;
66
+ //# sourceMappingURL=workflow-webhook-secret-cipher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-webhook-secret-cipher.js","sourceRoot":"","sources":["../../../../../../libs/bpm-core/src/lib/workflow-webhook/workflow-webhook-secret-cipher.ts"],"names":[],"mappings":";;;AAcA,sEAeC;AA7BD,6CAA4E;AAE5E,MAAM,SAAS,GAAG,aAAa,CAAC;AAChC,MAAM,QAAQ,GAAG,EAAE,CAAC;AACpB,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,eAAe,GAAG,KAAK,CAAC;AAE9B;;;;;GAKG;AACH,SAAgB,6BAA6B,CAAC,KAAa;IACzD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;QAChD,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;QAC7B,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC;YACvC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;YAChC,CAAC,CAAC,IAAI,CAAC;IAEX,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CACb,qFAAqF,CACtF,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,MAAa,2BAA2B;IAGtC,YAAY,GAAW;QACrB,IAAI,CAAC,GAAG,GAAG,6BAA6B,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,CAAC,SAAiB;QACvB,MAAM,EAAE,GAAG,IAAA,yBAAW,EAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,IAAA,4BAAc,EAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC;YAChC,MAAM,CAAC,KAAK,EAAE;SACf,CAAC,CAAC;QAEH,OAAO,GAAG,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IACxG,CAAC;IAED,OAAO,CAAC,QAAgB;QACtB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;QAE1E,IAAI,GAAG,CAAC,MAAM,GAAG,QAAQ,GAAG,SAAS,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,QAAQ,GAAG,IAAA,8BAAgB,EAC/B,SAAS,EACT,IAAI,CAAC,GAAG,EACR,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAC1B,CAAC;QAEF,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC;QAElE,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;YACnD,QAAQ,CAAC,KAAK,EAAE;SACjB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;CACF;AA1CD,kEA0CC"}
@@ -0,0 +1,35 @@
1
+ import { BadRequestException } from '@nestjs/common';
2
+ export declare const BPM_WORKFLOW_WEBHOOK_ERROR_CODES: {
3
+ readonly BINDING_INCOMPATIBLE: "WORKFLOW_WEBHOOK_BINDING_INCOMPATIBLE";
4
+ /** A database endpoint cannot be managed: the source is not enabled. */
5
+ readonly DATABASE_SOURCE_DISABLED: "WORKFLOW_WEBHOOK_DATABASE_SOURCE_DISABLED";
6
+ /** A database endpoint was saved with a key a registered endpoint uses. */
7
+ readonly ENDPOINT_KEY_CONFLICT: "WORKFLOW_WEBHOOK_ENDPOINT_KEY_CONFLICT";
8
+ /** The saved endpoint's shape is invalid (key, version, parameters, headers). */
9
+ readonly ENDPOINT_INVALID: "WORKFLOW_WEBHOOK_ENDPOINT_INVALID";
10
+ /**
11
+ * An existing endpoint version's parameters were changed; a new contract
12
+ * needs a new version so in-flight templates keep theirs.
13
+ */
14
+ readonly ENDPOINT_CONTRACT_CHANGED: "WORKFLOW_WEBHOOK_ENDPOINT_CONTRACT_CHANGED";
15
+ readonly ENDPOINT_DEPRECATED: "WORKFLOW_WEBHOOK_ENDPOINT_DEPRECATED";
16
+ /** A database endpoint an administrator disabled. */
17
+ readonly ENDPOINT_DISABLED: "WORKFLOW_WEBHOOK_ENDPOINT_DISABLED";
18
+ readonly ENDPOINT_MISSING: "WORKFLOW_WEBHOOK_ENDPOINT_MISSING";
19
+ readonly PARAMETER_REQUIRED: "WORKFLOW_WEBHOOK_PARAMETER_REQUIRED";
20
+ readonly PARAMETER_UNKNOWN: "WORKFLOW_WEBHOOK_PARAMETER_UNKNOWN";
21
+ readonly REGISTRY_MISSING: "WORKFLOW_WEBHOOK_REGISTRY_MISSING";
22
+ /** Test sends for one endpoint came too close together. */
23
+ readonly TEST_RATE_LIMITED: "WORKFLOW_WEBHOOK_TEST_RATE_LIMITED";
24
+ /**
25
+ * The endpoint's URL is outside `workflowWebhookAllowedUrlPatterns`.
26
+ * Raised when a database-managed endpoint is saved (P6) and again before
27
+ * every delivery attempt (P2), so tightening the list stops queued work.
28
+ */
29
+ readonly URL_NOT_ALLOWED: "WORKFLOW_WEBHOOK_URL_NOT_ALLOWED";
30
+ };
31
+ export type BPMWorkflowWebhookErrorCode = (typeof BPM_WORKFLOW_WEBHOOK_ERROR_CODES)[keyof typeof BPM_WORKFLOW_WEBHOOK_ERROR_CODES];
32
+ export declare class BPMWorkflowWebhookException extends BadRequestException {
33
+ readonly code: BPMWorkflowWebhookErrorCode;
34
+ constructor(code: BPMWorkflowWebhookErrorCode, detail?: string);
35
+ }
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BPMWorkflowWebhookException = exports.BPM_WORKFLOW_WEBHOOK_ERROR_CODES = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ exports.BPM_WORKFLOW_WEBHOOK_ERROR_CODES = {
6
+ BINDING_INCOMPATIBLE: 'WORKFLOW_WEBHOOK_BINDING_INCOMPATIBLE',
7
+ /** A database endpoint cannot be managed: the source is not enabled. */
8
+ DATABASE_SOURCE_DISABLED: 'WORKFLOW_WEBHOOK_DATABASE_SOURCE_DISABLED',
9
+ /** A database endpoint was saved with a key a registered endpoint uses. */
10
+ ENDPOINT_KEY_CONFLICT: 'WORKFLOW_WEBHOOK_ENDPOINT_KEY_CONFLICT',
11
+ /** The saved endpoint's shape is invalid (key, version, parameters, headers). */
12
+ ENDPOINT_INVALID: 'WORKFLOW_WEBHOOK_ENDPOINT_INVALID',
13
+ /**
14
+ * An existing endpoint version's parameters were changed; a new contract
15
+ * needs a new version so in-flight templates keep theirs.
16
+ */
17
+ ENDPOINT_CONTRACT_CHANGED: 'WORKFLOW_WEBHOOK_ENDPOINT_CONTRACT_CHANGED',
18
+ ENDPOINT_DEPRECATED: 'WORKFLOW_WEBHOOK_ENDPOINT_DEPRECATED',
19
+ /** A database endpoint an administrator disabled. */
20
+ ENDPOINT_DISABLED: 'WORKFLOW_WEBHOOK_ENDPOINT_DISABLED',
21
+ ENDPOINT_MISSING: 'WORKFLOW_WEBHOOK_ENDPOINT_MISSING',
22
+ PARAMETER_REQUIRED: 'WORKFLOW_WEBHOOK_PARAMETER_REQUIRED',
23
+ PARAMETER_UNKNOWN: 'WORKFLOW_WEBHOOK_PARAMETER_UNKNOWN',
24
+ REGISTRY_MISSING: 'WORKFLOW_WEBHOOK_REGISTRY_MISSING',
25
+ /** Test sends for one endpoint came too close together. */
26
+ TEST_RATE_LIMITED: 'WORKFLOW_WEBHOOK_TEST_RATE_LIMITED',
27
+ /**
28
+ * The endpoint's URL is outside `workflowWebhookAllowedUrlPatterns`.
29
+ * Raised when a database-managed endpoint is saved (P6) and again before
30
+ * every delivery attempt (P2), so tightening the list stops queued work.
31
+ */
32
+ URL_NOT_ALLOWED: 'WORKFLOW_WEBHOOK_URL_NOT_ALLOWED',
33
+ };
34
+ class BPMWorkflowWebhookException extends common_1.BadRequestException {
35
+ constructor(code, detail) {
36
+ super({ code, message: detail ? `${code}: ${detail}` : code });
37
+ this.code = code;
38
+ }
39
+ }
40
+ exports.BPMWorkflowWebhookException = BPMWorkflowWebhookException;
41
+ //# sourceMappingURL=workflow-webhook.errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-webhook.errors.js","sourceRoot":"","sources":["../../../../../../libs/bpm-core/src/lib/workflow-webhook/workflow-webhook.errors.ts"],"names":[],"mappings":";;;AAAA,2CAAqD;AAExC,QAAA,gCAAgC,GAAG;IAC9C,oBAAoB,EAAE,uCAAuC;IAC7D,wEAAwE;IACxE,wBAAwB,EAAE,2CAA2C;IACrE,2EAA2E;IAC3E,qBAAqB,EAAE,wCAAwC;IAC/D,iFAAiF;IACjF,gBAAgB,EAAE,mCAAmC;IACrD;;;OAGG;IACH,yBAAyB,EAAE,4CAA4C;IACvE,mBAAmB,EAAE,sCAAsC;IAC3D,qDAAqD;IACrD,iBAAiB,EAAE,oCAAoC;IACvD,gBAAgB,EAAE,mCAAmC;IACrD,kBAAkB,EAAE,qCAAqC;IACzD,iBAAiB,EAAE,oCAAoC;IACvD,gBAAgB,EAAE,mCAAmC;IACrD,2DAA2D;IAC3D,iBAAiB,EAAE,oCAAoC;IACvD;;;;OAIG;IACH,eAAe,EAAE,kCAAkC;CAC3C,CAAC;AAKX,MAAa,2BAA4B,SAAQ,4BAAmB;IAGlE,YAAY,IAAiC,EAAE,MAAe;QAC5D,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAPD,kEAOC"}
@@ -0,0 +1,9 @@
1
+ import { DynamicModule, Provider } from '@nestjs/common';
2
+ import { ModuleMetadata } from '@nestjs/common/interfaces';
3
+ import { BPMWorkflowWebhookRegistry } from './workflow-webhook.types';
4
+ export interface WorkflowWebhookModuleOptions extends Pick<ModuleMetadata, 'imports'> {
5
+ readonly registryProvider?: Provider<BPMWorkflowWebhookRegistry>;
6
+ }
7
+ export declare class WorkflowWebhookModule {
8
+ static forRoot(options?: WorkflowWebhookModuleOptions): DynamicModule;
9
+ }
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var WorkflowWebhookModule_1;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.WorkflowWebhookModule = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const common_1 = require("@nestjs/common");
7
+ const typeorm_1 = require("@nestjs/typeorm");
8
+ const activity_log_entity_1 = require("../workflow-engine/activity-log.entity");
9
+ const workflow_webhook_database_source_1 = require("./workflow-webhook-database-source");
10
+ const workflow_webhook_delivery_scheduler_service_1 = require("./workflow-webhook-delivery-scheduler.service");
11
+ const workflow_webhook_delivery_entity_1 = require("./workflow-webhook-delivery.entity");
12
+ const workflow_webhook_delivery_resolver_1 = require("./workflow-webhook-delivery.resolver");
13
+ const workflow_webhook_delivery_service_1 = require("./workflow-webhook-delivery.service");
14
+ const workflow_webhook_delivery_subscriber_1 = require("./workflow-webhook-delivery.subscriber");
15
+ const workflow_webhook_endpoint_admin_resolver_1 = require("./workflow-webhook-endpoint-admin.resolver");
16
+ const workflow_webhook_endpoint_admin_service_1 = require("./workflow-webhook-endpoint-admin.service");
17
+ const workflow_webhook_endpoint_entity_1 = require("./workflow-webhook-endpoint.entity");
18
+ const workflow_webhook_provider_1 = require("./workflow-webhook.provider");
19
+ const workflow_webhook_queries_1 = require("./workflow-webhook.queries");
20
+ const workflow_webhook_service_1 = require("./workflow-webhook.service");
21
+ const workflow_webhook_types_1 = require("./workflow-webhook.types");
22
+ let WorkflowWebhookModule = WorkflowWebhookModule_1 = class WorkflowWebhookModule {
23
+ static forRoot(options = {}) {
24
+ const registryProvider = options.registryProvider ?? workflow_webhook_provider_1.defaultWorkflowWebhookRegistryProvider;
25
+ return {
26
+ exports: [
27
+ workflow_webhook_types_1.BPM_WORKFLOW_WEBHOOK_REGISTRY,
28
+ workflow_webhook_delivery_service_1.WorkflowWebhookDeliveryService,
29
+ workflow_webhook_service_1.WorkflowWebhookService,
30
+ ],
31
+ global: true,
32
+ imports: [
33
+ ...(options.imports ?? []),
34
+ typeorm_1.TypeOrmModule.forFeature([
35
+ activity_log_entity_1.ActivityLogEntity,
36
+ workflow_webhook_delivery_entity_1.WorkflowWebhookDeliveryEntity,
37
+ workflow_webhook_endpoint_entity_1.WorkflowWebhookEndpointAuditEntity,
38
+ workflow_webhook_endpoint_entity_1.WorkflowWebhookEndpointEntity,
39
+ ]),
40
+ ],
41
+ module: WorkflowWebhookModule_1,
42
+ providers: [
43
+ registryProvider,
44
+ workflow_webhook_database_source_1.DatabaseWorkflowWebhookEndpointSource,
45
+ workflow_webhook_endpoint_admin_resolver_1.WorkflowWebhookEndpointAdminResolver,
46
+ workflow_webhook_endpoint_admin_service_1.WorkflowWebhookEndpointAdminService,
47
+ workflow_webhook_delivery_resolver_1.WorkflowWebhookDeliveryResolver,
48
+ workflow_webhook_delivery_scheduler_service_1.WorkflowWebhookDeliverySchedulerService,
49
+ workflow_webhook_delivery_service_1.WorkflowWebhookDeliveryService,
50
+ workflow_webhook_delivery_subscriber_1.WorkflowWebhookDeliverySubscriber,
51
+ workflow_webhook_queries_1.WorkflowWebhookQueries,
52
+ workflow_webhook_service_1.WorkflowWebhookService,
53
+ ],
54
+ };
55
+ }
56
+ };
57
+ exports.WorkflowWebhookModule = WorkflowWebhookModule;
58
+ exports.WorkflowWebhookModule = WorkflowWebhookModule = WorkflowWebhookModule_1 = tslib_1.__decorate([
59
+ (0, common_1.Global)(),
60
+ (0, common_1.Module)({})
61
+ ], WorkflowWebhookModule);
62
+ //# sourceMappingURL=workflow-webhook.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-webhook.module.js","sourceRoot":"","sources":["../../../../../../libs/bpm-core/src/lib/workflow-webhook/workflow-webhook.module.ts"],"names":[],"mappings":";;;;;AAAA,2CAAyE;AAEzE,6CAAgD;AAChD,gFAA2E;AAC3E,yFAA2F;AAC3F,+GAAwG;AACxG,yFAAmF;AACnF,6FAAuF;AACvF,2FAAqF;AACrF,iGAA2F;AAC3F,yGAAkG;AAClG,uGAAgG;AAChG,yFAG4C;AAC5C,2EAAqF;AACrF,yEAAoE;AACpE,yEAAoE;AACpE,qEAGkC;AAW3B,IAAM,qBAAqB,6BAA3B,MAAM,qBAAqB;IAChC,MAAM,CAAC,OAAO,CAAC,UAAwC,EAAE;QACvD,MAAM,gBAAgB,GACpB,OAAO,CAAC,gBAAgB,IAAI,kEAAsC,CAAC;QAErE,OAAO;YACL,OAAO,EAAE;gBACP,sDAA6B;gBAC7B,kEAA8B;gBAC9B,iDAAsB;aACvB;YACD,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE;gBACP,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;gBAC1B,uBAAa,CAAC,UAAU,CAAC;oBACvB,uCAAiB;oBACjB,gEAA6B;oBAC7B,qEAAkC;oBAClC,gEAA6B;iBAC9B,CAAC;aACH;YACD,MAAM,EAAE,uBAAqB;YAC7B,SAAS,EAAE;gBACT,gBAAgB;gBAChB,wEAAqC;gBACrC,+EAAoC;gBACpC,6EAAmC;gBACnC,oEAA+B;gBAC/B,qFAAuC;gBACvC,kEAA8B;gBAC9B,wEAAiC;gBACjC,iDAAsB;gBACtB,iDAAsB;aACvB;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AApCY,sDAAqB;gCAArB,qBAAqB;IAFjC,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,qBAAqB,CAoCjC"}
@@ -0,0 +1,12 @@
1
+ import { Provider } from '@nestjs/common';
2
+ import { BPMWorkflowWebhookRegistry } from './workflow-webhook.types';
3
+ /**
4
+ * Endpoint catalog used when the host registers none: empty, so a template
5
+ * cannot reference an endpoint and publish still refuses one that tries.
6
+ *
7
+ * Mirrors `defaultFormDataSourceRegistryProvider`: prefer a registry handed to
8
+ * `BPMRootModule` as a runtime value, which a `forRootAsync` factory can build
9
+ * once Vault is available. `BPM_ROOT_OPTIONS` is optional so this module also
10
+ * resolves when used on its own.
11
+ */
12
+ export declare const defaultWorkflowWebhookRegistryProvider: Provider<BPMWorkflowWebhookRegistry>;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defaultWorkflowWebhookRegistryProvider = void 0;
4
+ const bpm_root_options_1 = require("../bpm/bpm-root-options");
5
+ const workflow_webhook_types_1 = require("./workflow-webhook.types");
6
+ /**
7
+ * Endpoint catalog used when the host registers none: empty, so a template
8
+ * cannot reference an endpoint and publish still refuses one that tries.
9
+ *
10
+ * Mirrors `defaultFormDataSourceRegistryProvider`: prefer a registry handed to
11
+ * `BPMRootModule` as a runtime value, which a `forRootAsync` factory can build
12
+ * once Vault is available. `BPM_ROOT_OPTIONS` is optional so this module also
13
+ * resolves when used on its own.
14
+ */
15
+ exports.defaultWorkflowWebhookRegistryProvider = {
16
+ inject: [{ optional: true, token: bpm_root_options_1.BPM_ROOT_OPTIONS }],
17
+ provide: workflow_webhook_types_1.BPM_WORKFLOW_WEBHOOK_REGISTRY,
18
+ useFactory: (rootOptions) => rootOptions?.workflowWebhookRegistry ??
19
+ new workflow_webhook_types_1.EmptyBPMWorkflowWebhookRegistry(),
20
+ };
21
+ //# sourceMappingURL=workflow-webhook.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-webhook.provider.js","sourceRoot":"","sources":["../../../../../../libs/bpm-core/src/lib/workflow-webhook/workflow-webhook.provider.ts"],"names":[],"mappings":";;;AACA,8DAGiC;AACjC,qEAIkC;AAElC;;;;;;;;GAQG;AACU,QAAA,sCAAsC,GACjD;IACE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,mCAAgB,EAAE,CAAC;IACrD,OAAO,EAAE,sDAA6B;IACtC,UAAU,EAAE,CACV,WAA8C,EAClB,EAAE,CAC9B,WAAW,EAAE,uBAAuB;QACpC,IAAI,wDAA+B,EAAE;CACxC,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { NotifyWebhookParameterType } from '@rytass/bpm-core-shared/workflow';
2
+ import { WorkflowWebhookService } from './workflow-webhook.service';
3
+ import { BPMWorkflowWebhookEndpointSourceKind } from './workflow-webhook.types';
4
+ export declare const WorkflowWebhookEndpointSourceEnum: Readonly<Record<BPMWorkflowWebhookEndpointSourceKind, BPMWorkflowWebhookEndpointSourceKind>>;
5
+ export declare const WorkflowWebhookParameterTypeEnum: Readonly<Record<NotifyWebhookParameterType, NotifyWebhookParameterType>>;
6
+ export declare class WorkflowWebhookParameterObject {
7
+ description: string | null;
8
+ key: string;
9
+ label: string;
10
+ required: boolean;
11
+ type: NotifyWebhookParameterType;
12
+ }
13
+ /**
14
+ * The designer's view of an endpoint. Deliberately carries no URL, header or
15
+ * secret (ADR 18 §3.8): those never reach the browser, whichever source the
16
+ * endpoint came from.
17
+ */
18
+ export declare class WorkflowWebhookEndpointObject {
19
+ deprecated: boolean;
20
+ description: string | null;
21
+ /** Switched off by an administrator; also reported as `deprecated`. */
22
+ disabled: boolean;
23
+ key: string;
24
+ label: string;
25
+ parameters: readonly WorkflowWebhookParameterObject[];
26
+ source: BPMWorkflowWebhookEndpointSourceKind;
27
+ version: number;
28
+ }
29
+ export declare class WorkflowWebhookQueries {
30
+ private readonly webhookService;
31
+ constructor(webhookService: WorkflowWebhookService);
32
+ /**
33
+ * `includeDeprecated` exists for the designer's edit path: a draft that
34
+ * already references a deprecated endpoint must still render its name
35
+ * instead of silently losing the target.
36
+ */
37
+ workflowWebhookEndpoints(includeDeprecated?: boolean | null): Promise<readonly WorkflowWebhookEndpointObject[]>;
38
+ }
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WorkflowWebhookQueries = exports.WorkflowWebhookEndpointObject = exports.WorkflowWebhookParameterObject = exports.WorkflowWebhookParameterTypeEnum = exports.WorkflowWebhookEndpointSourceEnum = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const graphql_1 = require("@nestjs/graphql");
6
+ const bpm_auth_1 = require("../bpm-auth");
7
+ const workflow_webhook_service_1 = require("./workflow-webhook.service");
8
+ exports.WorkflowWebhookEndpointSourceEnum = {
9
+ DATABASE: 'DATABASE',
10
+ REGISTRY: 'REGISTRY',
11
+ };
12
+ (0, graphql_1.registerEnumType)(exports.WorkflowWebhookEndpointSourceEnum, {
13
+ name: 'BPMWorkflowWebhookEndpointSource',
14
+ });
15
+ exports.WorkflowWebhookParameterTypeEnum = {
16
+ boolean: 'boolean',
17
+ json: 'json',
18
+ number: 'number',
19
+ string: 'string',
20
+ stringArray: 'stringArray',
21
+ };
22
+ (0, graphql_1.registerEnumType)(exports.WorkflowWebhookParameterTypeEnum, {
23
+ name: 'BPMWorkflowWebhookParameterType',
24
+ });
25
+ let WorkflowWebhookParameterObject = class WorkflowWebhookParameterObject {
26
+ };
27
+ exports.WorkflowWebhookParameterObject = WorkflowWebhookParameterObject;
28
+ tslib_1.__decorate([
29
+ (0, graphql_1.Field)(() => String, { nullable: true }),
30
+ tslib_1.__metadata("design:type", Object)
31
+ ], WorkflowWebhookParameterObject.prototype, "description", void 0);
32
+ tslib_1.__decorate([
33
+ (0, graphql_1.Field)(),
34
+ tslib_1.__metadata("design:type", String)
35
+ ], WorkflowWebhookParameterObject.prototype, "key", void 0);
36
+ tslib_1.__decorate([
37
+ (0, graphql_1.Field)(),
38
+ tslib_1.__metadata("design:type", String)
39
+ ], WorkflowWebhookParameterObject.prototype, "label", void 0);
40
+ tslib_1.__decorate([
41
+ (0, graphql_1.Field)(),
42
+ tslib_1.__metadata("design:type", Boolean)
43
+ ], WorkflowWebhookParameterObject.prototype, "required", void 0);
44
+ tslib_1.__decorate([
45
+ (0, graphql_1.Field)(() => exports.WorkflowWebhookParameterTypeEnum),
46
+ tslib_1.__metadata("design:type", String)
47
+ ], WorkflowWebhookParameterObject.prototype, "type", void 0);
48
+ exports.WorkflowWebhookParameterObject = WorkflowWebhookParameterObject = tslib_1.__decorate([
49
+ (0, graphql_1.ObjectType)('BPMWorkflowWebhookParameter')
50
+ ], WorkflowWebhookParameterObject);
51
+ /**
52
+ * The designer's view of an endpoint. Deliberately carries no URL, header or
53
+ * secret (ADR 18 §3.8): those never reach the browser, whichever source the
54
+ * endpoint came from.
55
+ */
56
+ let WorkflowWebhookEndpointObject = class WorkflowWebhookEndpointObject {
57
+ };
58
+ exports.WorkflowWebhookEndpointObject = WorkflowWebhookEndpointObject;
59
+ tslib_1.__decorate([
60
+ (0, graphql_1.Field)(),
61
+ tslib_1.__metadata("design:type", Boolean)
62
+ ], WorkflowWebhookEndpointObject.prototype, "deprecated", void 0);
63
+ tslib_1.__decorate([
64
+ (0, graphql_1.Field)(() => String, { nullable: true }),
65
+ tslib_1.__metadata("design:type", Object)
66
+ ], WorkflowWebhookEndpointObject.prototype, "description", void 0);
67
+ tslib_1.__decorate([
68
+ (0, graphql_1.Field)(),
69
+ tslib_1.__metadata("design:type", Boolean)
70
+ ], WorkflowWebhookEndpointObject.prototype, "disabled", void 0);
71
+ tslib_1.__decorate([
72
+ (0, graphql_1.Field)(),
73
+ tslib_1.__metadata("design:type", String)
74
+ ], WorkflowWebhookEndpointObject.prototype, "key", void 0);
75
+ tslib_1.__decorate([
76
+ (0, graphql_1.Field)(),
77
+ tslib_1.__metadata("design:type", String)
78
+ ], WorkflowWebhookEndpointObject.prototype, "label", void 0);
79
+ tslib_1.__decorate([
80
+ (0, graphql_1.Field)(() => [WorkflowWebhookParameterObject]),
81
+ tslib_1.__metadata("design:type", Array)
82
+ ], WorkflowWebhookEndpointObject.prototype, "parameters", void 0);
83
+ tslib_1.__decorate([
84
+ (0, graphql_1.Field)(() => exports.WorkflowWebhookEndpointSourceEnum),
85
+ tslib_1.__metadata("design:type", String)
86
+ ], WorkflowWebhookEndpointObject.prototype, "source", void 0);
87
+ tslib_1.__decorate([
88
+ (0, graphql_1.Field)(() => graphql_1.Int),
89
+ tslib_1.__metadata("design:type", Number)
90
+ ], WorkflowWebhookEndpointObject.prototype, "version", void 0);
91
+ exports.WorkflowWebhookEndpointObject = WorkflowWebhookEndpointObject = tslib_1.__decorate([
92
+ (0, graphql_1.ObjectType)('BPMWorkflowWebhookEndpoint')
93
+ ], WorkflowWebhookEndpointObject);
94
+ let WorkflowWebhookQueries = class WorkflowWebhookQueries {
95
+ constructor(webhookService) {
96
+ this.webhookService = webhookService;
97
+ }
98
+ /**
99
+ * `includeDeprecated` exists for the designer's edit path: a draft that
100
+ * already references a deprecated endpoint must still render its name
101
+ * instead of silently losing the target.
102
+ */
103
+ async workflowWebhookEndpoints(includeDeprecated) {
104
+ const entries = await this.webhookService.listEndpoints({
105
+ includeDeprecated: Boolean(includeDeprecated),
106
+ });
107
+ return entries.map((entry) => toEndpointObject(entry));
108
+ }
109
+ };
110
+ exports.WorkflowWebhookQueries = WorkflowWebhookQueries;
111
+ tslib_1.__decorate([
112
+ (0, graphql_1.Query)(() => [WorkflowWebhookEndpointObject]),
113
+ tslib_1.__param(0, (0, graphql_1.Args)('includeDeprecated', { nullable: true, type: () => Boolean })),
114
+ tslib_1.__metadata("design:type", Function),
115
+ tslib_1.__metadata("design:paramtypes", [Object]),
116
+ tslib_1.__metadata("design:returntype", Promise)
117
+ ], WorkflowWebhookQueries.prototype, "workflowWebhookEndpoints", null);
118
+ exports.WorkflowWebhookQueries = WorkflowWebhookQueries = tslib_1.__decorate([
119
+ (0, graphql_1.Resolver)(),
120
+ (0, bpm_auth_1.BPMDesignerOnly)(),
121
+ tslib_1.__metadata("design:paramtypes", [workflow_webhook_service_1.WorkflowWebhookService])
122
+ ], WorkflowWebhookQueries);
123
+ function toEndpointObject(entry) {
124
+ const descriptor = entry.endpoint.descriptor;
125
+ return Object.assign(new WorkflowWebhookEndpointObject(), {
126
+ deprecated: Boolean(descriptor.deprecated),
127
+ description: descriptor.description ?? null,
128
+ disabled: Boolean(descriptor.disabled),
129
+ key: descriptor.key,
130
+ label: descriptor.label,
131
+ parameters: descriptor.parameters.map((parameter) => Object.assign(new WorkflowWebhookParameterObject(), {
132
+ description: parameter.description ?? null,
133
+ key: parameter.key,
134
+ label: parameter.label,
135
+ required: parameter.required,
136
+ type: parameter.type,
137
+ })),
138
+ source: entry.source,
139
+ version: descriptor.version,
140
+ });
141
+ }
142
+ //# sourceMappingURL=workflow-webhook.queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-webhook.queries.js","sourceRoot":"","sources":["../../../../../../libs/bpm-core/src/lib/workflow-webhook/workflow-webhook.queries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { OnModuleInit } from '@nestjs/common';
2
+ import { EntityManager } from 'typeorm';
3
+ import { DatabaseWorkflowWebhookEndpointSource } from './workflow-webhook-database-source';
4
+ import { BPMResolvedWorkflowWebhookOptions } from './workflow-webhook-options';
5
+ import { BPMWorkflowWebhookEndpoint, BPMWorkflowWebhookEndpointEntry, BPMWorkflowWebhookRegistry } from './workflow-webhook.types';
6
+ export interface ListWorkflowWebhookEndpointsOptions {
7
+ readonly includeDeprecated?: boolean;
8
+ }
9
+ export declare class WorkflowWebhookService implements OnModuleInit {
10
+ private readonly registry;
11
+ private readonly options;
12
+ private readonly databaseSource?;
13
+ private readonly sources;
14
+ constructor(registry: BPMWorkflowWebhookRegistry | undefined, options?: BPMResolvedWorkflowWebhookOptions, databaseSource?: DatabaseWorkflowWebhookEndpointSource | undefined);
15
+ /**
16
+ * Whether administrators can manage endpoints in the database: requested
17
+ * in `workflowWebhookTargetSources` and guarded by an allowlist and an
18
+ * encryption key (otherwise the options resolution dropped it).
19
+ */
20
+ hasDatabaseSource(): boolean;
21
+ /** Registered endpoints only; used to keep database keys from colliding. */
22
+ listRegistryEndpoints(): readonly BPMWorkflowWebhookEndpoint[];
23
+ /**
24
+ * A descriptor that contradicts itself would only surface as a confusing
25
+ * publish error much later, so the registry is checked once at boot and the
26
+ * application refuses to start instead.
27
+ */
28
+ onModuleInit(): void;
29
+ /**
30
+ * `false` when no source can ever answer, which is what a publish lint needs
31
+ * in order to refuse a template that references any endpoint at all.
32
+ */
33
+ hasEndpointSources(): boolean;
34
+ listEndpoints(options?: ListWorkflowWebhookEndpointsOptions): Promise<readonly BPMWorkflowWebhookEndpointEntry[]>;
35
+ /**
36
+ * `manager` lets a caller already inside a transaction (the engine's
37
+ * enqueue) look endpoints up on its own connection, instead of waiting on
38
+ * a second one from a pool its peers may have exhausted.
39
+ */
40
+ getEndpoint(key: string, version: number, manager?: EntityManager): Promise<BPMWorkflowWebhookEndpointEntry | null>;
41
+ readOptions(): BPMResolvedWorkflowWebhookOptions;
42
+ /**
43
+ * The publish-time allowlist check (ADR 18 §3.13 rule 3). Database
44
+ * endpoints only: calling host code while publishing would be a surprise,
45
+ * and registry URLs are checked before each delivery when enforcement is
46
+ * on. A URL that cannot be read here is left to the delivery path.
47
+ */
48
+ isEndpointUrlAllowedAtPublish(entry: BPMWorkflowWebhookEndpointEntry): Promise<boolean>;
49
+ }
50
+ export declare function readRegistryDescriptorErrors(registry: BPMWorkflowWebhookRegistry | undefined): readonly string[];