@rytass/bpm-core-nestjs-module 0.22.0 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/CHANGELOG.md +95 -0
  2. package/README.md +68 -1
  3. package/package.json +2 -2
  4. package/src/index.d.ts +1 -0
  5. package/src/index.js +1 -0
  6. package/src/index.js.map +1 -1
  7. package/src/lib/bpm/bpm-root-options.d.ts +57 -0
  8. package/src/lib/bpm/bpm-root-options.js.map +1 -1
  9. package/src/lib/bpm/bpm-root.module.d.ts +21 -0
  10. package/src/lib/bpm/bpm-root.module.js +6 -0
  11. package/src/lib/bpm/bpm-root.module.js.map +1 -1
  12. package/src/lib/form/dto/form-definition.input.d.ts +5 -0
  13. package/src/lib/form/dto/form-definition.input.js.map +1 -1
  14. package/src/lib/form/form-definition.entity.d.ts +5 -0
  15. package/src/lib/form/form-definition.entity.js +7 -0
  16. package/src/lib/form/form-definition.entity.js.map +1 -1
  17. package/src/lib/form/form-schema.validator.js +17 -5
  18. package/src/lib/form/form-schema.validator.js.map +1 -1
  19. package/src/lib/form/form.queries.d.ts +2 -2
  20. package/src/lib/form/form.queries.js +17 -5
  21. package/src/lib/form/form.queries.js.map +1 -1
  22. package/src/lib/form/form.service.d.ts +2 -1
  23. package/src/lib/form/form.service.js +10 -5
  24. package/src/lib/form/form.service.js.map +1 -1
  25. package/src/lib/form-data-source/form-data-source-value-resolver.service.js +22 -2
  26. package/src/lib/form-data-source/form-data-source-value-resolver.service.js.map +1 -1
  27. package/src/lib/form-data-source/form-data-source.errors.d.ts +11 -0
  28. package/src/lib/form-data-source/form-data-source.errors.js +14 -1
  29. package/src/lib/form-data-source/form-data-source.errors.js.map +1 -1
  30. package/src/lib/form-data-source/form-data-source.service.d.ts +6 -0
  31. package/src/lib/form-data-source/form-data-source.service.js +37 -3
  32. package/src/lib/form-data-source/form-data-source.service.js.map +1 -1
  33. package/src/lib/instance-event/approval-instance-event.entity.d.ts +27 -0
  34. package/src/lib/instance-event/approval-instance-event.entity.js +93 -0
  35. package/src/lib/instance-event/approval-instance-event.entity.js.map +1 -0
  36. package/src/lib/instance-event/index.d.ts +13 -0
  37. package/src/lib/instance-event/index.js +17 -0
  38. package/src/lib/instance-event/index.js.map +1 -0
  39. package/src/lib/instance-event/instance-event.delivery-scheduler.service.d.ts +21 -0
  40. package/src/lib/instance-event/instance-event.delivery-scheduler.service.js +81 -0
  41. package/src/lib/instance-event/instance-event.delivery-scheduler.service.js.map +1 -0
  42. package/src/lib/instance-event/instance-event.delivery.service.d.ts +69 -0
  43. package/src/lib/instance-event/instance-event.delivery.service.js +259 -0
  44. package/src/lib/instance-event/instance-event.delivery.service.js.map +1 -0
  45. package/src/lib/instance-event/instance-event.delivery.subscriber.d.ts +24 -0
  46. package/src/lib/instance-event/instance-event.delivery.subscriber.js +85 -0
  47. package/src/lib/instance-event/instance-event.delivery.subscriber.js.map +1 -0
  48. package/src/lib/instance-event/instance-event.enums.d.ts +12 -0
  49. package/src/lib/instance-event/instance-event.enums.js +28 -0
  50. package/src/lib/instance-event/instance-event.enums.js.map +1 -0
  51. package/src/lib/instance-event/instance-event.module.d.ts +13 -0
  52. package/src/lib/instance-event/instance-event.module.js +52 -0
  53. package/src/lib/instance-event/instance-event.module.js.map +1 -0
  54. package/src/lib/instance-event/instance-event.object.d.ts +24 -0
  55. package/src/lib/instance-event/instance-event.object.js +73 -0
  56. package/src/lib/instance-event/instance-event.object.js.map +1 -0
  57. package/src/lib/instance-event/instance-event.options.d.ts +26 -0
  58. package/src/lib/instance-event/instance-event.options.js +35 -0
  59. package/src/lib/instance-event/instance-event.options.js.map +1 -0
  60. package/src/lib/instance-event/instance-event.resolver.d.ts +10 -0
  61. package/src/lib/instance-event/instance-event.resolver.js +75 -0
  62. package/src/lib/instance-event/instance-event.resolver.js.map +1 -0
  63. package/src/lib/instance-event/instance-event.service.d.ts +18 -0
  64. package/src/lib/instance-event/instance-event.service.js +37 -0
  65. package/src/lib/instance-event/instance-event.service.js.map +1 -0
  66. package/src/lib/instance-event/instance-event.token.d.ts +19 -0
  67. package/src/lib/instance-event/instance-event.token.js +9 -0
  68. package/src/lib/instance-event/instance-event.token.js.map +1 -0
  69. package/src/lib/instance-event/instance-event.types.d.ts +67 -0
  70. package/src/lib/instance-event/instance-event.types.js +9 -0
  71. package/src/lib/instance-event/instance-event.types.js.map +1 -0
  72. package/src/lib/instance-event/instance-event.writer.d.ts +21 -0
  73. package/src/lib/instance-event/instance-event.writer.js +45 -0
  74. package/src/lib/instance-event/instance-event.writer.js.map +1 -0
  75. package/src/lib/migrations/0000000032000-host-integration-round.d.ts +25 -0
  76. package/src/lib/migrations/0000000032000-host-integration-round.js +104 -0
  77. package/src/lib/migrations/0000000032000-host-integration-round.js.map +1 -0
  78. package/src/lib/migrations/0000000033000-activity-log-advance-failed-index.d.ts +35 -0
  79. package/src/lib/migrations/0000000033000-activity-log-advance-failed-index.js +51 -0
  80. package/src/lib/migrations/0000000033000-activity-log-advance-failed-index.js.map +1 -0
  81. package/src/lib/migrations/index.d.ts +2 -0
  82. package/src/lib/migrations/index.js +6 -0
  83. package/src/lib/migrations/index.js.map +1 -1
  84. package/src/lib/notification/notification.service.d.ts +3 -2
  85. package/src/lib/notification/notification.service.js +52 -10
  86. package/src/lib/notification/notification.service.js.map +1 -1
  87. package/src/lib/template/approval-template-version.entity.d.ts +9 -1
  88. package/src/lib/template/approval-template-version.entity.js +11 -1
  89. package/src/lib/template/approval-template-version.entity.js.map +1 -1
  90. package/src/lib/template/approval-template.entity.d.ts +18 -0
  91. package/src/lib/template/approval-template.entity.js +23 -0
  92. package/src/lib/template/approval-template.entity.js.map +1 -1
  93. package/src/lib/template/dto/approval-template.input.d.ts +21 -0
  94. package/src/lib/template/dto/approval-template.input.js +38 -0
  95. package/src/lib/template/dto/approval-template.input.js.map +1 -1
  96. package/src/lib/template/dto/compose-approval-template.input.d.ts +23 -0
  97. package/src/lib/template/dto/compose-approval-template.input.js +37 -0
  98. package/src/lib/template/dto/compose-approval-template.input.js.map +1 -1
  99. package/src/lib/template/template-key.d.ts +26 -0
  100. package/src/lib/template/template-key.js +67 -0
  101. package/src/lib/template/template-key.js.map +1 -0
  102. package/src/lib/template/template.enums.d.ts +11 -0
  103. package/src/lib/template/template.enums.js +17 -1
  104. package/src/lib/template/template.enums.js.map +1 -1
  105. package/src/lib/template/template.queries.d.ts +3 -2
  106. package/src/lib/template/template.queries.js +29 -4
  107. package/src/lib/template/template.queries.js.map +1 -1
  108. package/src/lib/template/template.service.d.ts +8 -1
  109. package/src/lib/template/template.service.js +111 -17
  110. package/src/lib/template/template.service.js.map +1 -1
  111. package/src/lib/template/workflow-definition.validator.js +12 -6
  112. package/src/lib/template/workflow-definition.validator.js.map +1 -1
  113. package/src/lib/workflow-engine/approver-filled-table-columns.d.ts +91 -0
  114. package/src/lib/workflow-engine/approver-filled-table-columns.js +301 -0
  115. package/src/lib/workflow-engine/approver-filled-table-columns.js.map +1 -0
  116. package/src/lib/workflow-engine/dto/admin-cancel-approval-instance.input.d.ts +9 -0
  117. package/src/lib/workflow-engine/dto/admin-cancel-approval-instance.input.js +24 -0
  118. package/src/lib/workflow-engine/dto/admin-cancel-approval-instance.input.js.map +1 -0
  119. package/src/lib/workflow-engine/dto/dry-run-approval-workflow.input.d.ts +7 -0
  120. package/src/lib/workflow-engine/dto/dry-run-approval-workflow.input.js +9 -0
  121. package/src/lib/workflow-engine/dto/dry-run-approval-workflow.input.js.map +1 -1
  122. package/src/lib/workflow-engine/dto/reassign-member-tasks.input.d.ts +2 -0
  123. package/src/lib/workflow-engine/dto/reassign-member-tasks.input.js +8 -0
  124. package/src/lib/workflow-engine/dto/reassign-member-tasks.input.js.map +1 -1
  125. package/src/lib/workflow-engine/index.d.ts +3 -0
  126. package/src/lib/workflow-engine/index.js +3 -0
  127. package/src/lib/workflow-engine/index.js.map +1 -1
  128. package/src/lib/workflow-engine/instance-advance-failure.d.ts +28 -0
  129. package/src/lib/workflow-engine/instance-advance-failure.js +20 -0
  130. package/src/lib/workflow-engine/instance-advance-failure.js.map +1 -0
  131. package/src/lib/workflow-engine/instance-guard.runner.d.ts +19 -0
  132. package/src/lib/workflow-engine/instance-guard.runner.js +102 -0
  133. package/src/lib/workflow-engine/instance-guard.runner.js.map +1 -0
  134. package/src/lib/workflow-engine/instance-guard.token.d.ts +101 -0
  135. package/src/lib/workflow-engine/instance-guard.token.js +9 -0
  136. package/src/lib/workflow-engine/instance-guard.token.js.map +1 -0
  137. package/src/lib/workflow-engine/missing-form-fields.d.ts +12 -0
  138. package/src/lib/workflow-engine/missing-form-fields.js +27 -0
  139. package/src/lib/workflow-engine/missing-form-fields.js.map +1 -0
  140. package/src/lib/workflow-engine/stuck-approval-instance.object.d.ts +22 -0
  141. package/src/lib/workflow-engine/stuck-approval-instance.object.js +107 -0
  142. package/src/lib/workflow-engine/stuck-approval-instance.object.js.map +1 -0
  143. package/src/lib/workflow-engine/stuck-approval-instance.query.d.ts +22 -0
  144. package/src/lib/workflow-engine/stuck-approval-instance.query.js +139 -0
  145. package/src/lib/workflow-engine/stuck-approval-instance.query.js.map +1 -0
  146. package/src/lib/workflow-engine/workflow-engine.enums.d.ts +11 -0
  147. package/src/lib/workflow-engine/workflow-engine.enums.js +16 -1
  148. package/src/lib/workflow-engine/workflow-engine.enums.js.map +1 -1
  149. package/src/lib/workflow-engine/workflow-engine.module.d.ts +2 -0
  150. package/src/lib/workflow-engine/workflow-engine.module.js +3 -0
  151. package/src/lib/workflow-engine/workflow-engine.module.js.map +1 -1
  152. package/src/lib/workflow-engine/workflow-engine.mutations.d.ts +3 -1
  153. package/src/lib/workflow-engine/workflow-engine.mutations.js +39 -6
  154. package/src/lib/workflow-engine/workflow-engine.mutations.js.map +1 -1
  155. package/src/lib/workflow-engine/workflow-engine.queries.d.ts +10 -8
  156. package/src/lib/workflow-engine/workflow-engine.queries.js +131 -28
  157. package/src/lib/workflow-engine/workflow-engine.queries.js.map +1 -1
  158. package/src/lib/workflow-engine/workflow-engine.service.d.ts +348 -10
  159. package/src/lib/workflow-engine/workflow-engine.service.js +1396 -118
  160. package/src/lib/workflow-engine/workflow-engine.service.js.map +1 -1
  161. package/src/lib/workflow-engine/workflow-engine.tokens.d.ts +5 -0
@@ -0,0 +1,259 @@
1
+ "use strict";
2
+ var InstanceEventDeliveryService_1;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.InstanceEventDeliveryService = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const common_1 = require("@nestjs/common");
7
+ const typeorm_1 = require("@nestjs/typeorm");
8
+ const typeorm_2 = require("typeorm");
9
+ const outbox_1 = require("../common/outbox");
10
+ const approval_instance_event_entity_1 = require("./approval-instance-event.entity");
11
+ const instance_event_service_1 = require("./instance-event.service");
12
+ /** Dispatches in flight per claim, so one scan cannot saturate the host observer. */
13
+ const MAX_CONCURRENT_DISPATCHES = 5;
14
+ /** Admin list page size bounds; a larger request is clamped, not rejected. */
15
+ const MAX_PAGE_SIZE = 200;
16
+ /** Stored error text is capped; host error messages are not trusted to be short. */
17
+ const MAX_ERROR_LENGTH = 500;
18
+ /** A claim older than this is treated as abandoned and may be taken over. */
19
+ const MIN_STALE_CLAIM_MS = 60_000;
20
+ const DAY_MS = 86_400_000;
21
+ /**
22
+ * Delivers outbox rows to the host observer (ADR 27 §1.3).
23
+ *
24
+ * Guarantees, and how they are kept:
25
+ * - At least once. A row is `DELIVERED` only after the observer resolved; a
26
+ * crash between dispatch and write-back redelivers. Hosts dedupe on `id`.
27
+ * - Per-instance order by `seq`. The claim skips a row while an earlier `PENDING`
28
+ * row of the same instance exists. `FAILED` rows do not block.
29
+ * - Claims never change `status`. A claim is a `claimed_at` stamp, taken with
30
+ * `FOR UPDATE SKIP LOCKED`, so several replicas can scan at once.
31
+ * - Write-back is conditional on `claimed_at`. A worker that lost its claim
32
+ * records nothing.
33
+ */
34
+ let InstanceEventDeliveryService = InstanceEventDeliveryService_1 = class InstanceEventDeliveryService {
35
+ constructor(repository, events) {
36
+ this.repository = repository;
37
+ this.events = events;
38
+ this.logger = new common_1.Logger(InstanceEventDeliveryService_1.name);
39
+ }
40
+ /**
41
+ * Claims and delivers due rows across all instances, up to `batchSize`.
42
+ * Returns the number of rows attempted. No-op without a bound observer.
43
+ */
44
+ async deliverDue(now = new Date()) {
45
+ if (!this.events.enabled) {
46
+ return 0;
47
+ }
48
+ const { batchSize } = this.events.delivery;
49
+ let attempted = 0;
50
+ while (attempted < batchSize) {
51
+ const rows = await this.claim({
52
+ ids: null,
53
+ limit: Math.min(MAX_CONCURRENT_DISPATCHES, batchSize - attempted),
54
+ now,
55
+ });
56
+ if (rows.length === 0) {
57
+ break;
58
+ }
59
+ attempted += rows.length;
60
+ await Promise.all(rows.map((row) => this.attemptSafely(row, now)));
61
+ }
62
+ return attempted;
63
+ }
64
+ /**
65
+ * Delivers the named rows. Used by the commit subscriber. A row whose earlier
66
+ * sibling is still pending is skipped here and picked up by the scheduler.
67
+ */
68
+ async deliverByIds(ids, now = new Date()) {
69
+ if (!this.events.enabled || ids.length === 0) {
70
+ return 0;
71
+ }
72
+ const rows = await this.claim({
73
+ ids: [...new Set(ids)],
74
+ limit: ids.length,
75
+ now,
76
+ });
77
+ await Promise.all(rows.map((row) => this.attemptSafely(row, now)));
78
+ return rows.length;
79
+ }
80
+ /**
81
+ * Deletes `DELIVERED` rows older than `retentionDays`. `FAILED` rows are kept
82
+ * until an operator retries or removes them. Returns the number deleted.
83
+ */
84
+ async purgeDelivered(now = new Date()) {
85
+ const cutoff = new Date(now.getTime() - this.events.delivery.retentionDays * DAY_MS);
86
+ const result = await this.repository.delete({
87
+ deliveredAt: (0, typeorm_2.LessThan)(cutoff),
88
+ status: 'DELIVERED',
89
+ });
90
+ return result.affected ?? 0;
91
+ }
92
+ /**
93
+ * Admin read: newest first, optionally filtered. Not gated by `enabled`, so
94
+ * rows left behind by an earlier deployment stay visible.
95
+ */
96
+ async listEvents(input) {
97
+ const pageSize = clampPageSize(input.pageSize);
98
+ const page = Math.max(1, Math.floor(input.page));
99
+ const [items, total] = await this.repository.findAndCount({
100
+ order: { seq: 'DESC' },
101
+ skip: (page - 1) * pageSize,
102
+ take: pageSize,
103
+ where: {
104
+ ...(input.instanceId ? { instanceId: input.instanceId } : {}),
105
+ ...(input.status ? { status: input.status } : {}),
106
+ },
107
+ });
108
+ return { items, total };
109
+ }
110
+ /**
111
+ * Admin retry of a `FAILED` row. Resets the attempt budget and makes the row
112
+ * due now; the next scan or commit kick delivers it. Only `FAILED` rows match,
113
+ * so a row that is already pending or delivered is rejected, not reset.
114
+ */
115
+ async retryFailedEvent(id, now = new Date()) {
116
+ const existing = await this.repository.findOne({ where: { id } });
117
+ if (!existing) {
118
+ throw new common_1.NotFoundException(`Instance event ${id} not found`);
119
+ }
120
+ const result = await this.repository.update({ id, status: 'FAILED' }, {
121
+ attemptCount: 0,
122
+ lastError: null,
123
+ nextAttemptAt: now,
124
+ status: 'PENDING',
125
+ });
126
+ if (!result.affected) {
127
+ throw new common_1.BadRequestException(`Instance event ${id} is not FAILED and cannot be retried`);
128
+ }
129
+ const refreshed = await this.repository.findOne({ where: { id } });
130
+ if (!refreshed) {
131
+ throw new common_1.NotFoundException(`Instance event ${id} not found`);
132
+ }
133
+ return refreshed;
134
+ }
135
+ /**
136
+ * `base * 2^(attempt - 1)` with ±20 % jitter, capped at `maxRetryDelayMs`.
137
+ * Same policy as the webhook outbox.
138
+ */
139
+ readRetryDelay(attempt) {
140
+ const { maxRetryDelayMs, retryBaseDelayMs } = this.events.delivery;
141
+ const exponential = retryBaseDelayMs * 2 ** Math.min(Math.max(attempt - 1, 0), 30);
142
+ return Math.min(Math.round(exponential * (0.8 + Math.random() * 0.4)), maxRetryDelayMs);
143
+ }
144
+ async claim({ ids, limit, now, }) {
145
+ const staleBefore = new Date(now.getTime() - this.readStaleClaimMs());
146
+ return this.repository.manager.transaction(async (manager) => {
147
+ const claimedRows = (await manager.query(`
148
+ UPDATE approval_instance_events
149
+ SET claimed_at = $1
150
+ WHERE id IN (
151
+ SELECT e.id
152
+ FROM approval_instance_events e
153
+ WHERE e.status = $2
154
+ AND e.next_attempt_at <= $1
155
+ AND (e.claimed_at IS NULL OR e.claimed_at <= $3)
156
+ AND ($5::uuid[] IS NULL OR e.id = ANY($5::uuid[]))
157
+ AND NOT EXISTS (
158
+ SELECT 1
159
+ FROM approval_instance_events earlier
160
+ WHERE earlier.instance_id = e.instance_id
161
+ AND earlier.seq < e.seq
162
+ AND earlier.status = $2
163
+ )
164
+ ORDER BY e.seq ASC
165
+ FOR UPDATE SKIP LOCKED
166
+ LIMIT $4
167
+ )
168
+ RETURNING id
169
+ `, [now, 'PENDING', staleBefore, limit, ids ? [...ids] : null]));
170
+ const claimedIds = (0, outbox_1.readClaimedIds)(claimedRows);
171
+ if (claimedIds.length === 0) {
172
+ return [];
173
+ }
174
+ const found = await manager
175
+ .getRepository(approval_instance_event_entity_1.ApprovalInstanceEventEntity)
176
+ .find({ where: { id: (0, typeorm_2.In)([...claimedIds]) } });
177
+ return [...found].sort((left, right) => Number(left.seq) - Number(right.seq));
178
+ });
179
+ }
180
+ async attemptSafely(row, claimedAt) {
181
+ try {
182
+ await this.attempt(row, claimedAt);
183
+ }
184
+ catch (error) {
185
+ this.logger.warn(`Instance event ${row.id} could not record its outcome (${readErrorName(error)})`);
186
+ }
187
+ }
188
+ async attempt(row, claimedAt) {
189
+ const observer = this.events.observer;
190
+ if (observer === null) {
191
+ return;
192
+ }
193
+ const { dispatchTimeoutMs, maxAttempts } = this.events.delivery;
194
+ const attemptCount = row.attemptCount + 1;
195
+ const outcome = await (0, outbox_1.withDispatchTimeout)(this.dispatch(observer, row), dispatchTimeoutMs).then(() => ({ kind: 'DELIVERED' }), (error) => ({ error, kind: 'FAILED' }));
196
+ if (outcome.kind === 'DELIVERED') {
197
+ await this.writeOutcome(row, claimedAt, {
198
+ attemptCount,
199
+ claimedAt: null,
200
+ deliveredAt: new Date(),
201
+ lastError: null,
202
+ status: 'DELIVERED',
203
+ });
204
+ return;
205
+ }
206
+ const terminal = attemptCount >= maxAttempts;
207
+ await this.writeOutcome(row, claimedAt, {
208
+ attemptCount,
209
+ claimedAt: null,
210
+ lastError: readErrorText(outcome.error),
211
+ nextAttemptAt: terminal
212
+ ? row.nextAttemptAt
213
+ : new Date(Date.now() + this.readRetryDelay(attemptCount)),
214
+ status: terminal ? 'FAILED' : 'PENDING',
215
+ });
216
+ }
217
+ async dispatch(observer, row) {
218
+ await observer.onInstanceEvent(toObserverEvent(row));
219
+ }
220
+ async writeOutcome(row, claimedAt, changes) {
221
+ const result = await this.repository.update({ claimedAt, id: row.id }, changes);
222
+ if (!result.affected) {
223
+ this.logger.warn(`Instance event ${row.id} lost its claim before the outcome was recorded`);
224
+ }
225
+ }
226
+ readStaleClaimMs() {
227
+ return Math.max(this.events.delivery.dispatchTimeoutMs * 3, MIN_STALE_CLAIM_MS);
228
+ }
229
+ };
230
+ exports.InstanceEventDeliveryService = InstanceEventDeliveryService;
231
+ exports.InstanceEventDeliveryService = InstanceEventDeliveryService = InstanceEventDeliveryService_1 = tslib_1.__decorate([
232
+ (0, common_1.Injectable)(),
233
+ tslib_1.__param(0, (0, typeorm_1.InjectRepository)(approval_instance_event_entity_1.ApprovalInstanceEventEntity)),
234
+ tslib_1.__metadata("design:paramtypes", [typeorm_2.Repository,
235
+ instance_event_service_1.InstanceEventService])
236
+ ], InstanceEventDeliveryService);
237
+ /** Reads a stored row as the observer sees it. Payloads never hold `formData`. */
238
+ function toObserverEvent(row) {
239
+ return {
240
+ ...row.payload,
241
+ id: row.id,
242
+ instanceId: row.instanceId,
243
+ occurredAt: row.occurredAt.toISOString(),
244
+ seq: row.seq,
245
+ type: row.type,
246
+ };
247
+ }
248
+ function clampPageSize(pageSize) {
249
+ return Math.min(Math.max(Math.floor(pageSize), 1), MAX_PAGE_SIZE);
250
+ }
251
+ function readErrorName(error) {
252
+ return error instanceof Error ? error.name : 'UnknownError';
253
+ }
254
+ function readErrorText(error) {
255
+ const name = readErrorName(error);
256
+ const message = error instanceof Error ? error.message : '';
257
+ return `${name}: ${message}`.slice(0, MAX_ERROR_LENGTH);
258
+ }
259
+ //# sourceMappingURL=instance-event.delivery.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance-event.delivery.service.js","sourceRoot":"","sources":["../../../../../../libs/bpm-core/src/lib/instance-event/instance-event.delivery.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { DataSource, EntitySubscriberInterface, InsertEvent, TransactionCommitEvent, TransactionRollbackEvent } from 'typeorm';
2
+ import { ApprovalInstanceEventEntity } from './approval-instance-event.entity';
3
+ import { InstanceEventDeliveryService } from './instance-event.delivery.service';
4
+ /**
5
+ * Starts delivery of a lifecycle event the moment the transaction that wrote
6
+ * it commits (ADR 27 §1.3), without every engine entry point having to
7
+ * remember to.
8
+ *
9
+ * Inserted ids are held per query runner and released on commit; a rollback
10
+ * drops them, so an event whose state change was rolled back is never
11
+ * delivered. The kick is best effort and never awaited: the scheduler
12
+ * releases anything it misses.
13
+ */
14
+ export declare class InstanceEventDeliverySubscriber implements EntitySubscriberInterface<ApprovalInstanceEventEntity> {
15
+ private readonly deliveryService;
16
+ private readonly logger;
17
+ private readonly pending;
18
+ constructor(dataSource: DataSource, deliveryService: InstanceEventDeliveryService);
19
+ listenTo(): typeof ApprovalInstanceEventEntity;
20
+ afterInsert(event: InsertEvent<ApprovalInstanceEventEntity>): void;
21
+ afterTransactionCommit(event: TransactionCommitEvent): void;
22
+ afterTransactionRollback(event: TransactionRollbackEvent): void;
23
+ private kick;
24
+ }
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ var InstanceEventDeliverySubscriber_1;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.InstanceEventDeliverySubscriber = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const common_1 = require("@nestjs/common");
7
+ const typeorm_1 = require("@nestjs/typeorm");
8
+ const typeorm_2 = require("typeorm");
9
+ const approval_instance_event_entity_1 = require("./approval-instance-event.entity");
10
+ const instance_event_delivery_service_1 = require("./instance-event.delivery.service");
11
+ /**
12
+ * Starts delivery of a lifecycle event the moment the transaction that wrote
13
+ * it commits (ADR 27 §1.3), without every engine entry point having to
14
+ * remember to.
15
+ *
16
+ * Inserted ids are held per query runner and released on commit; a rollback
17
+ * drops them, so an event whose state change was rolled back is never
18
+ * delivered. The kick is best effort and never awaited: the scheduler
19
+ * releases anything it misses.
20
+ */
21
+ let InstanceEventDeliverySubscriber = InstanceEventDeliverySubscriber_1 = class InstanceEventDeliverySubscriber {
22
+ constructor(dataSource, deliveryService) {
23
+ this.deliveryService = deliveryService;
24
+ this.logger = new common_1.Logger(InstanceEventDeliverySubscriber_1.name);
25
+ this.pending = new WeakMap();
26
+ // The documented way to register a Nest-managed subscriber; guarded so a
27
+ // stand-in data source in tests does not break the module graph.
28
+ if (Array.isArray(dataSource?.subscribers)) {
29
+ dataSource.subscribers.push(this);
30
+ }
31
+ }
32
+ listenTo() {
33
+ return approval_instance_event_entity_1.ApprovalInstanceEventEntity;
34
+ }
35
+ afterInsert(event) {
36
+ const row = event.entity;
37
+ if (!row?.id || row.status !== 'PENDING') {
38
+ return;
39
+ }
40
+ if (!event.queryRunner?.isTransactionActive) {
41
+ this.kick([row.id]);
42
+ return;
43
+ }
44
+ const queued = this.pending.get(event.queryRunner) ?? [];
45
+ this.pending.set(event.queryRunner, [...queued, row.id]);
46
+ }
47
+ afterTransactionCommit(event) {
48
+ // Releasing a savepoint broadcasts the same event while the outer
49
+ // transaction is still open and its rows still invisible. Wait for the
50
+ // real COMMIT, after which TypeORM has cleared `isTransactionActive`.
51
+ if (event.queryRunner.isTransactionActive) {
52
+ return;
53
+ }
54
+ const ids = this.pending.get(event.queryRunner) ?? [];
55
+ this.pending.delete(event.queryRunner);
56
+ if (ids.length > 0) {
57
+ this.kick(ids);
58
+ }
59
+ }
60
+ afterTransactionRollback(event) {
61
+ // Rolling back to a savepoint leaves the outer transaction, and the rows
62
+ // it queued outside that savepoint, intact.
63
+ if (event.queryRunner.isTransactionActive) {
64
+ return;
65
+ }
66
+ this.pending.delete(event.queryRunner);
67
+ }
68
+ kick(ids) {
69
+ setImmediate(() => {
70
+ this.deliveryService
71
+ .deliverByIds([...new Set(ids)])
72
+ .catch((error) => {
73
+ this.logger.warn(`Immediate instance event delivery failed; the scheduler will retry: ${error instanceof Error ? error.message : String(error)}`);
74
+ });
75
+ });
76
+ }
77
+ };
78
+ exports.InstanceEventDeliverySubscriber = InstanceEventDeliverySubscriber;
79
+ exports.InstanceEventDeliverySubscriber = InstanceEventDeliverySubscriber = InstanceEventDeliverySubscriber_1 = tslib_1.__decorate([
80
+ (0, common_1.Injectable)(),
81
+ tslib_1.__param(0, (0, typeorm_1.InjectDataSource)()),
82
+ tslib_1.__metadata("design:paramtypes", [typeorm_2.DataSource,
83
+ instance_event_delivery_service_1.InstanceEventDeliveryService])
84
+ ], InstanceEventDeliverySubscriber);
85
+ //# sourceMappingURL=instance-event.delivery.subscriber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance-event.delivery.subscriber.js","sourceRoot":"","sources":["../../../../../../libs/bpm-core/src/lib/instance-event/instance-event.delivery.subscriber.ts"],"names":[],"mappings":";;;;;AAAA,2CAAoD;AACpD,6CAAmD;AACnD,qCAOiB;AACjB,qFAA+E;AAC/E,uFAAiF;AAEjF;;;;;;;;;GASG;AAEI,IAAM,+BAA+B,uCAArC,MAAM,+BAA+B;IAI1C,YACsB,UAAsB,EACzB,eAA6C;QAA7C,oBAAe,GAAf,eAAe,CAA8B;QAL/C,WAAM,GAAG,IAAI,eAAM,CAAC,iCAA+B,CAAC,IAAI,CAAC,CAAC;QAC1D,YAAO,GAAG,IAAI,OAAO,EAAkC,CAAC;QAMvE,yEAAyE;QACzE,iEAAiE;QACjE,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,CAAC;YAC3C,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,QAAQ;QACN,OAAO,4DAA2B,CAAC;IACrC,CAAC;IAED,WAAW,CAAC,KAA+C;QACzD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;QAEzB,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACzC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,mBAAmB,EAAE,CAAC;YAC5C,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAEpB,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QAEzD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,sBAAsB,CAAC,KAA6B;QAClD,kEAAkE;QAClE,uEAAuE;QACvE,sEAAsE;QACtE,IAAI,KAAK,CAAC,WAAW,CAAC,mBAAmB,EAAE,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QAEtD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAEvC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,wBAAwB,CAAC,KAA+B;QACtD,yEAAyE;QACzE,4CAA4C;QAC5C,IAAI,KAAK,CAAC,WAAW,CAAC,mBAAmB,EAAE,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC;IAEO,IAAI,CAAC,GAAsB;QACjC,YAAY,CAAC,GAAS,EAAE;YACtB,IAAI,CAAC,eAAe;iBACjB,YAAY,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;iBAC/B,KAAK,CAAC,CAAC,KAAc,EAAQ,EAAE;gBAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,uEACE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,EAAE,CACH,CAAC;YACJ,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AA7EY,0EAA+B;0CAA/B,+BAA+B;IAD3C,IAAA,mBAAU,GAAE;IAMR,mBAAA,IAAA,0BAAgB,GAAE,CAAA;6CAAa,oBAAU;QACR,8DAA4B;GANrD,+BAA+B,CA6E3C"}
@@ -0,0 +1,12 @@
1
+ import type { BPMInstanceEventStatus } from './instance-event.types';
2
+ /**
3
+ * GraphQL view of the outbox status. Values match `BPMInstanceEventStatus`
4
+ * one to one; the two maps below keep that pairing checked by the compiler.
5
+ */
6
+ export declare enum ApprovalInstanceEventStatusEnum {
7
+ DELIVERED = "DELIVERED",
8
+ FAILED = "FAILED",
9
+ PENDING = "PENDING"
10
+ }
11
+ export declare const APPROVAL_INSTANCE_EVENT_STATUS_TO_ENUM: Readonly<Record<BPMInstanceEventStatus, ApprovalInstanceEventStatusEnum>>;
12
+ export declare const APPROVAL_INSTANCE_EVENT_ENUM_TO_STATUS: Readonly<Record<ApprovalInstanceEventStatusEnum, BPMInstanceEventStatus>>;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.APPROVAL_INSTANCE_EVENT_ENUM_TO_STATUS = exports.APPROVAL_INSTANCE_EVENT_STATUS_TO_ENUM = exports.ApprovalInstanceEventStatusEnum = void 0;
4
+ const graphql_1 = require("@nestjs/graphql");
5
+ /**
6
+ * GraphQL view of the outbox status. Values match `BPMInstanceEventStatus`
7
+ * one to one; the two maps below keep that pairing checked by the compiler.
8
+ */
9
+ var ApprovalInstanceEventStatusEnum;
10
+ (function (ApprovalInstanceEventStatusEnum) {
11
+ ApprovalInstanceEventStatusEnum["DELIVERED"] = "DELIVERED";
12
+ ApprovalInstanceEventStatusEnum["FAILED"] = "FAILED";
13
+ ApprovalInstanceEventStatusEnum["PENDING"] = "PENDING";
14
+ })(ApprovalInstanceEventStatusEnum || (exports.ApprovalInstanceEventStatusEnum = ApprovalInstanceEventStatusEnum = {}));
15
+ (0, graphql_1.registerEnumType)(ApprovalInstanceEventStatusEnum, {
16
+ name: 'BPMApprovalInstanceEventStatus',
17
+ });
18
+ exports.APPROVAL_INSTANCE_EVENT_STATUS_TO_ENUM = {
19
+ DELIVERED: ApprovalInstanceEventStatusEnum.DELIVERED,
20
+ FAILED: ApprovalInstanceEventStatusEnum.FAILED,
21
+ PENDING: ApprovalInstanceEventStatusEnum.PENDING,
22
+ };
23
+ exports.APPROVAL_INSTANCE_EVENT_ENUM_TO_STATUS = {
24
+ [ApprovalInstanceEventStatusEnum.DELIVERED]: 'DELIVERED',
25
+ [ApprovalInstanceEventStatusEnum.FAILED]: 'FAILED',
26
+ [ApprovalInstanceEventStatusEnum.PENDING]: 'PENDING',
27
+ };
28
+ //# sourceMappingURL=instance-event.enums.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance-event.enums.js","sourceRoot":"","sources":["../../../../../../libs/bpm-core/src/lib/instance-event/instance-event.enums.ts"],"names":[],"mappings":";;;AAAA,6CAAmD;AAGnD;;;GAGG;AACH,IAAY,+BAIX;AAJD,WAAY,+BAA+B;IACzC,0DAAuB,CAAA;IACvB,oDAAiB,CAAA;IACjB,sDAAmB,CAAA;AACrB,CAAC,EAJW,+BAA+B,+CAA/B,+BAA+B,QAI1C;AAED,IAAA,0BAAgB,EAAC,+BAA+B,EAAE;IAChD,IAAI,EAAE,gCAAgC;CACvC,CAAC,CAAC;AAEU,QAAA,sCAAsC,GAE/C;IACF,SAAS,EAAE,+BAA+B,CAAC,SAAS;IACpD,MAAM,EAAE,+BAA+B,CAAC,MAAM;IAC9C,OAAO,EAAE,+BAA+B,CAAC,OAAO;CACjD,CAAC;AAEW,QAAA,sCAAsC,GAE/C;IACF,CAAC,+BAA+B,CAAC,SAAS,CAAC,EAAE,WAAW;IACxD,CAAC,+BAA+B,CAAC,MAAM,CAAC,EAAE,QAAQ;IAClD,CAAC,+BAA+B,CAAC,OAAO,CAAC,EAAE,SAAS;CACrD,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { DynamicModule, ModuleMetadata, Provider } from '@nestjs/common';
2
+ import { BPMInstanceEventObserver } from './instance-event.token';
3
+ export interface InstanceEventModuleOptions extends Pick<ModuleMetadata, 'imports'> {
4
+ readonly observerProvider?: Provider<BPMInstanceEventObserver>;
5
+ }
6
+ export declare class InstanceEventModule {
7
+ /**
8
+ * `BPM_INSTANCE_EVENT_OBSERVER` is exported only when `observerProvider` is
9
+ * given. Exporting an unprovided token makes Nest fail with
10
+ * `UnknownExportException`.
11
+ */
12
+ static forRoot(options?: InstanceEventModuleOptions): DynamicModule;
13
+ }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var InstanceEventModule_1;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.InstanceEventModule = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const common_1 = require("@nestjs/common");
7
+ const typeorm_1 = require("@nestjs/typeorm");
8
+ const approval_instance_event_entity_1 = require("./approval-instance-event.entity");
9
+ const instance_event_delivery_service_1 = require("./instance-event.delivery.service");
10
+ const instance_event_delivery_scheduler_service_1 = require("./instance-event.delivery-scheduler.service");
11
+ const instance_event_delivery_subscriber_1 = require("./instance-event.delivery.subscriber");
12
+ const instance_event_resolver_1 = require("./instance-event.resolver");
13
+ const instance_event_token_1 = require("./instance-event.token");
14
+ const instance_event_service_1 = require("./instance-event.service");
15
+ const instance_event_writer_1 = require("./instance-event.writer");
16
+ let InstanceEventModule = InstanceEventModule_1 = class InstanceEventModule {
17
+ /**
18
+ * `BPM_INSTANCE_EVENT_OBSERVER` is exported only when `observerProvider` is
19
+ * given. Exporting an unprovided token makes Nest fail with
20
+ * `UnknownExportException`.
21
+ */
22
+ static forRoot(options = {}) {
23
+ const observerProviders = options.observerProvider
24
+ ? [options.observerProvider]
25
+ : [];
26
+ const observerExports = options.observerProvider ? [instance_event_token_1.BPM_INSTANCE_EVENT_OBSERVER] : [];
27
+ return {
28
+ exports: [instance_event_service_1.InstanceEventService, instance_event_writer_1.InstanceEventWriter, ...observerExports],
29
+ global: true,
30
+ imports: [
31
+ ...(options.imports ?? []),
32
+ typeorm_1.TypeOrmModule.forFeature([approval_instance_event_entity_1.ApprovalInstanceEventEntity]),
33
+ ],
34
+ module: InstanceEventModule_1,
35
+ providers: [
36
+ ...observerProviders,
37
+ instance_event_service_1.InstanceEventService,
38
+ instance_event_writer_1.InstanceEventWriter,
39
+ instance_event_delivery_service_1.InstanceEventDeliveryService,
40
+ instance_event_delivery_subscriber_1.InstanceEventDeliverySubscriber,
41
+ instance_event_delivery_scheduler_service_1.InstanceEventDeliverySchedulerService,
42
+ instance_event_resolver_1.InstanceEventResolver,
43
+ ],
44
+ };
45
+ }
46
+ };
47
+ exports.InstanceEventModule = InstanceEventModule;
48
+ exports.InstanceEventModule = InstanceEventModule = InstanceEventModule_1 = tslib_1.__decorate([
49
+ (0, common_1.Global)(),
50
+ (0, common_1.Module)({})
51
+ ], InstanceEventModule);
52
+ //# sourceMappingURL=instance-event.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance-event.module.js","sourceRoot":"","sources":["../../../../../../libs/bpm-core/src/lib/instance-event/instance-event.module.ts"],"names":[],"mappings":";;;;;AAAA,2CAMwB;AACxB,6CAAgD;AAChD,qFAA+E;AAC/E,uFAAiF;AACjF,2GAAoG;AACpG,6FAAuF;AACvF,uEAAkE;AAClE,iEAGgC;AAChC,qEAAgE;AAChE,mEAA8D;AAWvD,IAAM,mBAAmB,2BAAzB,MAAM,mBAAmB;IAC9B;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,UAAsC,EAAE;QACrD,MAAM,iBAAiB,GAAwB,OAAO,CAAC,gBAAgB;YACrE,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAC5B,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,eAAe,GACnB,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,kDAA2B,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEhE,OAAO;YACL,OAAO,EAAE,CAAC,6CAAoB,EAAE,2CAAmB,EAAE,GAAG,eAAe,CAAC;YACxE,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE;gBACP,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;gBAC1B,uBAAa,CAAC,UAAU,CAAC,CAAC,4DAA2B,CAAC,CAAC;aACxD;YACD,MAAM,EAAE,qBAAmB;YAC3B,SAAS,EAAE;gBACT,GAAG,iBAAiB;gBACpB,6CAAoB;gBACpB,2CAAmB;gBACnB,8DAA4B;gBAC5B,oEAA+B;gBAC/B,iFAAqC;gBACrC,+CAAqB;aACtB;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AAhCY,kDAAmB;8BAAnB,mBAAmB;IAF/B,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,mBAAmB,CAgC/B"}
@@ -0,0 +1,24 @@
1
+ import { ApprovalInstanceEventStatusEnum } from './instance-event.enums';
2
+ /**
3
+ * An administrator's view of one outbox row (ADR 27 §1). `payload` is left
4
+ * out on purpose: it is the observer's input and is not needed to triage a
5
+ * failed delivery. `claimedAt` is an internal lock stamp and is left out too.
6
+ */
7
+ export declare class ApprovalInstanceEventObject {
8
+ attemptCount: number;
9
+ deliveredAt: Date | null;
10
+ id: string;
11
+ instanceId: string;
12
+ lastError: string | null;
13
+ nextAttemptAt: Date;
14
+ occurredAt: Date;
15
+ /** Write order. A string, because the database column is `bigint`. */
16
+ seq: string;
17
+ status: ApprovalInstanceEventStatusEnum;
18
+ type: string;
19
+ }
20
+ /** One page of outbox rows, newest first. */
21
+ export declare class ApprovalInstanceEventPageObject {
22
+ items: readonly ApprovalInstanceEventObject[];
23
+ total: number;
24
+ }
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ApprovalInstanceEventPageObject = exports.ApprovalInstanceEventObject = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const graphql_1 = require("@nestjs/graphql");
6
+ const instance_event_enums_1 = require("./instance-event.enums");
7
+ /**
8
+ * An administrator's view of one outbox row (ADR 27 §1). `payload` is left
9
+ * out on purpose: it is the observer's input and is not needed to triage a
10
+ * failed delivery. `claimedAt` is an internal lock stamp and is left out too.
11
+ */
12
+ let ApprovalInstanceEventObject = class ApprovalInstanceEventObject {
13
+ };
14
+ exports.ApprovalInstanceEventObject = ApprovalInstanceEventObject;
15
+ tslib_1.__decorate([
16
+ (0, graphql_1.Field)(() => graphql_1.Int),
17
+ tslib_1.__metadata("design:type", Number)
18
+ ], ApprovalInstanceEventObject.prototype, "attemptCount", void 0);
19
+ tslib_1.__decorate([
20
+ (0, graphql_1.Field)(() => Date, { nullable: true }),
21
+ tslib_1.__metadata("design:type", Object)
22
+ ], ApprovalInstanceEventObject.prototype, "deliveredAt", void 0);
23
+ tslib_1.__decorate([
24
+ (0, graphql_1.Field)(() => graphql_1.ID),
25
+ tslib_1.__metadata("design:type", String)
26
+ ], ApprovalInstanceEventObject.prototype, "id", void 0);
27
+ tslib_1.__decorate([
28
+ (0, graphql_1.Field)(() => graphql_1.ID),
29
+ tslib_1.__metadata("design:type", String)
30
+ ], ApprovalInstanceEventObject.prototype, "instanceId", void 0);
31
+ tslib_1.__decorate([
32
+ (0, graphql_1.Field)(() => String, { nullable: true }),
33
+ tslib_1.__metadata("design:type", Object)
34
+ ], ApprovalInstanceEventObject.prototype, "lastError", void 0);
35
+ tslib_1.__decorate([
36
+ (0, graphql_1.Field)(() => Date),
37
+ tslib_1.__metadata("design:type", Date)
38
+ ], ApprovalInstanceEventObject.prototype, "nextAttemptAt", void 0);
39
+ tslib_1.__decorate([
40
+ (0, graphql_1.Field)(() => Date),
41
+ tslib_1.__metadata("design:type", Date)
42
+ ], ApprovalInstanceEventObject.prototype, "occurredAt", void 0);
43
+ tslib_1.__decorate([
44
+ (0, graphql_1.Field)(() => String),
45
+ tslib_1.__metadata("design:type", String)
46
+ ], ApprovalInstanceEventObject.prototype, "seq", void 0);
47
+ tslib_1.__decorate([
48
+ (0, graphql_1.Field)(() => instance_event_enums_1.ApprovalInstanceEventStatusEnum),
49
+ tslib_1.__metadata("design:type", String)
50
+ ], ApprovalInstanceEventObject.prototype, "status", void 0);
51
+ tslib_1.__decorate([
52
+ (0, graphql_1.Field)(() => String),
53
+ tslib_1.__metadata("design:type", String)
54
+ ], ApprovalInstanceEventObject.prototype, "type", void 0);
55
+ exports.ApprovalInstanceEventObject = ApprovalInstanceEventObject = tslib_1.__decorate([
56
+ (0, graphql_1.ObjectType)('BPMApprovalInstanceEvent')
57
+ ], ApprovalInstanceEventObject);
58
+ /** One page of outbox rows, newest first. */
59
+ let ApprovalInstanceEventPageObject = class ApprovalInstanceEventPageObject {
60
+ };
61
+ exports.ApprovalInstanceEventPageObject = ApprovalInstanceEventPageObject;
62
+ tslib_1.__decorate([
63
+ (0, graphql_1.Field)(() => [ApprovalInstanceEventObject]),
64
+ tslib_1.__metadata("design:type", Array)
65
+ ], ApprovalInstanceEventPageObject.prototype, "items", void 0);
66
+ tslib_1.__decorate([
67
+ (0, graphql_1.Field)(() => graphql_1.Int),
68
+ tslib_1.__metadata("design:type", Number)
69
+ ], ApprovalInstanceEventPageObject.prototype, "total", void 0);
70
+ exports.ApprovalInstanceEventPageObject = ApprovalInstanceEventPageObject = tslib_1.__decorate([
71
+ (0, graphql_1.ObjectType)('BPMApprovalInstanceEventPage')
72
+ ], ApprovalInstanceEventPageObject);
73
+ //# sourceMappingURL=instance-event.object.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance-event.object.js","sourceRoot":"","sources":["../../../../../../libs/bpm-core/src/lib/instance-event/instance-event.object.ts"],"names":[],"mappings":";;;;AAAA,6CAA6D;AAC7D,iEAAyE;AAEzE;;;;GAIG;AAEI,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;CA+BvC,CAAA;AA/BY,kEAA2B;AAEtC;IADC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,aAAG,CAAC;;iEACK;AAGtB;IADC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;gEACZ;AAG1B;IADC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,YAAE,CAAC;;uDACJ;AAGZ;IADC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,YAAE,CAAC;;+DACI;AAGpB;IADC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;8DACd;AAG1B;IADC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC;sCACF,IAAI;kEAAC;AAGrB;IADC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC;sCACL,IAAI;+DAAC;AAIlB;IADC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC;;wDACP;AAGb;IADC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,sDAA+B,CAAC;;2DACJ;AAGzC;IADC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC;;yDACN;sCA9BH,2BAA2B;IADvC,IAAA,oBAAU,EAAC,0BAA0B,CAAC;GAC1B,2BAA2B,CA+BvC;AAED,6CAA6C;AAEtC,IAAM,+BAA+B,GAArC,MAAM,+BAA+B;CAM3C,CAAA;AANY,0EAA+B;AAE1C;IADC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,CAAC,2BAA2B,CAAC,CAAC;;8DACI;AAG/C;IADC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,aAAG,CAAC;;8DACF;0CALJ,+BAA+B;IAD3C,IAAA,oBAAU,EAAC,8BAA8B,CAAC;GAC9B,+BAA+B,CAM3C"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Tuning for the instance event outbox (ADR 27 §1.4). Defaults match the
3
+ * workflow webhook outbox so an operator reasons about one retry policy.
4
+ */
5
+ export interface BPMInstanceEventDeliveryOptions {
6
+ /** Rows claimed per scan. Default 25. */
7
+ readonly batchSize: number;
8
+ /** Time the observer gets to answer one event. Default 10000 ms. */
9
+ readonly dispatchTimeoutMs: number;
10
+ /** Attempts before a row is parked as `FAILED`. Default 6. */
11
+ readonly maxAttempts: number;
12
+ /** Upper bound on a single retry delay. Default 3600000 ms. */
13
+ readonly maxRetryDelayMs: number;
14
+ /** Days a `DELIVERED` row is kept. `FAILED` rows are never swept. Default 30. */
15
+ readonly retentionDays: number;
16
+ /** Base of the exponential retry delay. Default 30000 ms. */
17
+ readonly retryBaseDelayMs: number;
18
+ /** Interval of the fallback scan. Default 15000 ms. */
19
+ readonly scanIntervalMs: number;
20
+ }
21
+ export declare const DEFAULT_BPM_INSTANCE_EVENT_DELIVERY_OPTIONS: BPMInstanceEventDeliveryOptions;
22
+ /**
23
+ * Fills every unset or non-positive field from the defaults. A host that sets
24
+ * `batchSize: 0` gets 25, not an outbox that never delivers.
25
+ */
26
+ export declare function resolveInstanceEventDeliveryOptions(overrides: Partial<BPMInstanceEventDeliveryOptions> | undefined): BPMInstanceEventDeliveryOptions;