@rytass/bpm-core-nestjs-module 0.13.2 → 0.13.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +53 -0
- package/package.json +13 -6
- package/src/index.d.ts +1 -0
- package/src/index.js +1 -0
- package/src/index.js.map +1 -1
- package/src/lib/attachment/attachment-storage.provider.d.ts +11 -0
- package/src/lib/attachment/attachment-storage.provider.js +15 -1
- package/src/lib/attachment/attachment-storage.provider.js.map +1 -1
- package/src/lib/attachment/attachment.module.js +16 -1
- package/src/lib/attachment/attachment.module.js.map +1 -1
- package/src/lib/bpm/bpm-root-options.d.ts +134 -0
- package/src/lib/bpm/bpm-root-options.js +61 -0
- package/src/lib/bpm/bpm-root-options.js.map +1 -0
- package/src/lib/bpm/bpm-root.module.d.ts +101 -137
- package/src/lib/bpm/bpm-root.module.js +83 -118
- package/src/lib/bpm/bpm-root.module.js.map +1 -1
- package/src/lib/bpm/index.d.ts +1 -0
- package/src/lib/bpm/index.js +1 -0
- package/src/lib/bpm/index.js.map +1 -1
- package/src/lib/calendar/business-calendar.provider.d.ts +8 -4
- package/src/lib/calendar/business-calendar.provider.js +15 -6
- package/src/lib/calendar/business-calendar.provider.js.map +1 -1
- package/src/lib/common/outbox.d.ts +26 -0
- package/src/lib/common/outbox.js +64 -0
- package/src/lib/common/outbox.js.map +1 -0
- package/src/lib/delegation/delegation.service.js +7 -7
- package/src/lib/delegation/delegation.service.js.map +1 -1
- package/src/lib/form-data-source/form-data-source.module.js +2 -4
- package/src/lib/form-data-source/form-data-source.module.js.map +1 -1
- package/src/lib/form-data-source/form-data-source.provider.d.ts +14 -0
- package/src/lib/form-data-source/form-data-source.provider.js +23 -0
- package/src/lib/form-data-source/form-data-source.provider.js.map +1 -0
- package/src/lib/form-data-source/index.d.ts +1 -0
- package/src/lib/form-data-source/index.js +1 -0
- package/src/lib/form-data-source/index.js.map +1 -1
- package/src/lib/identity/default-member-resolver.d.ts +39 -0
- package/src/lib/identity/default-member-resolver.js +81 -0
- package/src/lib/identity/default-member-resolver.js.map +1 -0
- package/src/lib/identity/identity.module.d.ts +12 -2
- package/src/lib/identity/identity.module.js +2 -1
- package/src/lib/identity/identity.module.js.map +1 -1
- package/src/lib/identity/index.d.ts +1 -0
- package/src/lib/identity/index.js +1 -0
- package/src/lib/identity/index.js.map +1 -1
- package/src/lib/migrations/0000000023000-workflow-webhook-deliveries.d.ts +17 -0
- package/src/lib/migrations/0000000023000-workflow-webhook-deliveries.js +61 -0
- package/src/lib/migrations/0000000023000-workflow-webhook-deliveries.js.map +1 -0
- package/src/lib/migrations/0000000024000-workflow-webhook-endpoints.d.ts +16 -0
- package/src/lib/migrations/0000000024000-workflow-webhook-endpoints.js +71 -0
- package/src/lib/migrations/0000000024000-workflow-webhook-endpoints.js.map +1 -0
- package/src/lib/migrations/index.d.ts +2 -0
- package/src/lib/migrations/index.js +6 -0
- package/src/lib/migrations/index.js.map +1 -1
- package/src/lib/notification/notification-delivery.service.js +4 -57
- package/src/lib/notification/notification-delivery.service.js.map +1 -1
- package/src/lib/notification/notification.service.js +4 -3
- package/src/lib/notification/notification.service.js.map +1 -1
- package/src/lib/template/template.service.d.ts +9 -0
- package/src/lib/template/template.service.js +31 -0
- package/src/lib/template/template.service.js.map +1 -1
- package/src/lib/template/workflow-definition.validator.js +54 -1
- package/src/lib/template/workflow-definition.validator.js.map +1 -1
- package/src/lib/workflow-engine/workflow-engine.enums.d.ts +3 -1
- package/src/lib/workflow-engine/workflow-engine.enums.js +2 -0
- package/src/lib/workflow-engine/workflow-engine.enums.js.map +1 -1
- package/src/lib/workflow-engine/workflow-engine.module.js +3 -0
- package/src/lib/workflow-engine/workflow-engine.module.js.map +1 -1
- package/src/lib/workflow-engine/workflow-engine.service.d.ts +5 -2
- package/src/lib/workflow-engine/workflow-engine.service.js +142 -26
- package/src/lib/workflow-engine/workflow-engine.service.js.map +1 -1
- package/src/lib/workflow-webhook/index.d.ts +24 -0
- package/src/lib/workflow-webhook/index.js +28 -0
- package/src/lib/workflow-webhook/index.js.map +1 -0
- package/src/lib/workflow-webhook/workflow-webhook-allowlist.d.ts +38 -0
- package/src/lib/workflow-webhook/workflow-webhook-allowlist.js +296 -0
- package/src/lib/workflow-webhook/workflow-webhook-allowlist.js.map +1 -0
- package/src/lib/workflow-webhook/workflow-webhook-database-source.d.ts +33 -0
- package/src/lib/workflow-webhook/workflow-webhook-database-source.js +129 -0
- package/src/lib/workflow-webhook/workflow-webhook-database-source.js.map +1 -0
- package/src/lib/workflow-webhook/workflow-webhook-delivery-scheduler.service.d.ts +25 -0
- package/src/lib/workflow-webhook/workflow-webhook-delivery-scheduler.service.js +92 -0
- package/src/lib/workflow-webhook/workflow-webhook-delivery-scheduler.service.js.map +1 -0
- package/src/lib/workflow-webhook/workflow-webhook-delivery.entity.d.ts +53 -0
- package/src/lib/workflow-webhook/workflow-webhook-delivery.entity.js +97 -0
- package/src/lib/workflow-webhook/workflow-webhook-delivery.entity.js.map +1 -0
- package/src/lib/workflow-webhook/workflow-webhook-delivery.enums.d.ts +28 -0
- package/src/lib/workflow-webhook/workflow-webhook-delivery.enums.js +36 -0
- package/src/lib/workflow-webhook/workflow-webhook-delivery.enums.js.map +1 -0
- package/src/lib/workflow-webhook/workflow-webhook-delivery.object.d.ts +28 -0
- package/src/lib/workflow-webhook/workflow-webhook-delivery.object.js +88 -0
- package/src/lib/workflow-webhook/workflow-webhook-delivery.object.js.map +1 -0
- package/src/lib/workflow-webhook/workflow-webhook-delivery.resolver.d.ts +9 -0
- package/src/lib/workflow-webhook/workflow-webhook-delivery.resolver.js +66 -0
- package/src/lib/workflow-webhook/workflow-webhook-delivery.resolver.js.map +1 -0
- package/src/lib/workflow-webhook/workflow-webhook-delivery.service.d.ts +116 -0
- package/src/lib/workflow-webhook/workflow-webhook-delivery.service.js +705 -0
- package/src/lib/workflow-webhook/workflow-webhook-delivery.service.js.map +1 -0
- package/src/lib/workflow-webhook/workflow-webhook-delivery.subscriber.d.ts +23 -0
- package/src/lib/workflow-webhook/workflow-webhook-delivery.subscriber.js +85 -0
- package/src/lib/workflow-webhook/workflow-webhook-delivery.subscriber.js.map +1 -0
- package/src/lib/workflow-webhook/workflow-webhook-endpoint-admin.dto.d.ts +85 -0
- package/src/lib/workflow-webhook/workflow-webhook-endpoint-admin.dto.js +345 -0
- package/src/lib/workflow-webhook/workflow-webhook-endpoint-admin.dto.js.map +1 -0
- package/src/lib/workflow-webhook/workflow-webhook-endpoint-admin.resolver.d.ts +23 -0
- package/src/lib/workflow-webhook/workflow-webhook-endpoint-admin.resolver.js +159 -0
- package/src/lib/workflow-webhook/workflow-webhook-endpoint-admin.resolver.js.map +1 -0
- package/src/lib/workflow-webhook/workflow-webhook-endpoint-admin.service.d.ts +93 -0
- package/src/lib/workflow-webhook/workflow-webhook-endpoint-admin.service.js +464 -0
- package/src/lib/workflow-webhook/workflow-webhook-endpoint-admin.service.js.map +1 -0
- package/src/lib/workflow-webhook/workflow-webhook-endpoint.entity.d.ts +52 -0
- package/src/lib/workflow-webhook/workflow-webhook-endpoint.entity.js +135 -0
- package/src/lib/workflow-webhook/workflow-webhook-endpoint.entity.js.map +1 -0
- package/src/lib/workflow-webhook/workflow-webhook-enqueue.d.ts +46 -0
- package/src/lib/workflow-webhook/workflow-webhook-enqueue.js +134 -0
- package/src/lib/workflow-webhook/workflow-webhook-enqueue.js.map +1 -0
- package/src/lib/workflow-webhook/workflow-webhook-options.d.ts +86 -0
- package/src/lib/workflow-webhook/workflow-webhook-options.js +88 -0
- package/src/lib/workflow-webhook/workflow-webhook-options.js.map +1 -0
- package/src/lib/workflow-webhook/workflow-webhook-options.module.d.ts +18 -0
- package/src/lib/workflow-webhook/workflow-webhook-options.module.js +57 -0
- package/src/lib/workflow-webhook/workflow-webhook-options.module.js.map +1 -0
- package/src/lib/workflow-webhook/workflow-webhook-secret-cipher.d.ts +20 -0
- package/src/lib/workflow-webhook/workflow-webhook-secret-cipher.js +66 -0
- package/src/lib/workflow-webhook/workflow-webhook-secret-cipher.js.map +1 -0
- package/src/lib/workflow-webhook/workflow-webhook.errors.d.ts +35 -0
- package/src/lib/workflow-webhook/workflow-webhook.errors.js +41 -0
- package/src/lib/workflow-webhook/workflow-webhook.errors.js.map +1 -0
- package/src/lib/workflow-webhook/workflow-webhook.module.d.ts +9 -0
- package/src/lib/workflow-webhook/workflow-webhook.module.js +62 -0
- package/src/lib/workflow-webhook/workflow-webhook.module.js.map +1 -0
- package/src/lib/workflow-webhook/workflow-webhook.provider.d.ts +12 -0
- package/src/lib/workflow-webhook/workflow-webhook.provider.js +21 -0
- package/src/lib/workflow-webhook/workflow-webhook.provider.js.map +1 -0
- package/src/lib/workflow-webhook/workflow-webhook.queries.d.ts +38 -0
- package/src/lib/workflow-webhook/workflow-webhook.queries.js +142 -0
- package/src/lib/workflow-webhook/workflow-webhook.queries.js.map +1 -0
- package/src/lib/workflow-webhook/workflow-webhook.service.d.ts +50 -0
- package/src/lib/workflow-webhook/workflow-webhook.service.js +221 -0
- package/src/lib/workflow-webhook/workflow-webhook.service.js.map +1 -0
- package/src/lib/workflow-webhook/workflow-webhook.types.d.ts +127 -0
- package/src/lib/workflow-webhook/workflow-webhook.types.js +33 -0
- package/src/lib/workflow-webhook/workflow-webhook.types.js.map +1 -0
- package/src/lib/workflow-webhook/workflow-webhook.validator.d.ts +20 -0
- package/src/lib/workflow-webhook/workflow-webhook.validator.js +97 -0
- 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[];
|