hierarchical-approval 3.0.0 → 3.2.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.
- package/CHANGELOG.md +45 -0
- package/dist/{ApprovalEngine-CCOwhMrs.d.ts → ApprovalEngine-Cslh4Goz.d.ts} +6 -6
- package/dist/{ApprovalEngine-Bfs5BnMm.d.cts → ApprovalEngine-zAgvH_aO.d.cts} +6 -6
- package/dist/{IAuditAdapter-DxdK4UVt.d.cts → IAuditAdapter-BkxGx6TI.d.cts} +1 -1
- package/dist/{IAuditAdapter-B33n15YP.d.ts → IAuditAdapter-udkAnnmu.d.ts} +1 -1
- package/dist/{IAuthorizationPolicy-BzGVzkLJ.d.cts → IAuthorizationPolicy-YQlSwj-8.d.cts} +1 -1
- package/dist/{IAuthorizationPolicy-DOm6KCwI.d.ts → IAuthorizationPolicy-Z4nkX-bu.d.ts} +1 -1
- package/dist/{INotificationAdapter-DMvA4R-c.d.ts → INotificationAdapter-C-PL3Pvp.d.ts} +1 -1
- package/dist/{INotificationAdapter-DFKvGpOp.d.cts → INotificationAdapter-D3PBQE1B.d.cts} +1 -1
- package/dist/{IOperationMiddleware-Nk8Q1Z8o.d.ts → IOperationMiddleware-Cbd05rje.d.ts} +1 -1
- package/dist/{IOperationMiddleware-C8i06wq4.d.cts → IOperationMiddleware-tgJcKzTP.d.cts} +1 -1
- package/dist/{IStorageAdapter-C2QxUwbX.d.ts → IStorageAdapter-CEKfu-U8.d.ts} +1 -1
- package/dist/{IStorageAdapter-C0qeZgs4.d.cts → IStorageAdapter-DUrmnJUs.d.cts} +1 -1
- package/dist/adapters/MemoryAdapter.cjs +3 -3
- package/dist/adapters/MemoryAdapter.cjs.map +1 -1
- package/dist/adapters/MemoryAdapter.d.cts +2 -2
- package/dist/adapters/MemoryAdapter.d.ts +2 -2
- package/dist/adapters/MemoryAdapter.js +3 -3
- package/dist/adapters/MemoryAdapter.js.map +1 -1
- package/dist/adapters/PostgresAdapter.cjs +18 -0
- package/dist/adapters/PostgresAdapter.cjs.map +1 -1
- package/dist/adapters/PostgresAdapter.d.cts +2 -2
- package/dist/adapters/PostgresAdapter.d.ts +2 -2
- package/dist/adapters/PostgresAdapter.js +18 -0
- package/dist/adapters/PostgresAdapter.js.map +1 -1
- package/dist/index.cjs +6 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -8
- package/dist/index.d.ts +8 -8
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/{instance-BvOyT00S.d.cts → instance-BXHxvTLE.d.cts} +10 -0
- package/dist/{instance-BvOyT00S.d.ts → instance-BXHxvTLE.d.ts} +10 -0
- package/dist/nestjs.cjs +6 -3
- package/dist/nestjs.cjs.map +1 -1
- package/dist/nestjs.d.cts +7 -7
- package/dist/nestjs.d.ts +7 -7
- package/dist/nestjs.js +6 -3
- package/dist/nestjs.js.map +1 -1
- package/dist/plugins/audit.d.cts +2 -2
- package/dist/plugins/audit.d.ts +2 -2
- package/dist/plugins/notify.d.cts +2 -2
- package/dist/plugins/notify.d.ts +2 -2
- package/dist/plugins/resilience.d.cts +3 -3
- package/dist/plugins/resilience.d.ts +3 -3
- package/dist/plugins/tracing.d.cts +2 -2
- package/dist/plugins/tracing.d.ts +2 -2
- package/dist/plugins/webhook.d.cts +2 -2
- package/dist/plugins/webhook.d.ts +2 -2
- package/dist/testing.cjs +6 -3
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +7 -7
- package/dist/testing.d.ts +7 -7
- package/dist/testing.js +6 -3
- package/dist/testing.js.map +1 -1
- package/package.json +1 -1
|
@@ -261,6 +261,16 @@ interface ApprovalLevelInstance {
|
|
|
261
261
|
escalationDueAt?: Date;
|
|
262
262
|
escalationAfterDays?: number;
|
|
263
263
|
escalationAfterHours?: number;
|
|
264
|
+
/**
|
|
265
|
+
* When this level started collecting decisions.
|
|
266
|
+
*
|
|
267
|
+
* Escalation rungs are measured from here. Recorded on the level rather than
|
|
268
|
+
* inferred from the audit trail, because a `level_advanced` entry carries only
|
|
269
|
+
* the group's lowest level number — so an upper branch of a parallel group had
|
|
270
|
+
* no entry to find, and its rungs were measured from the previous escalation
|
|
271
|
+
* instead.
|
|
272
|
+
*/
|
|
273
|
+
openedAt?: Date;
|
|
264
274
|
/** How many escalation rungs have fired on this level. */
|
|
265
275
|
escalationStep?: number;
|
|
266
276
|
/** When the next reminder for this level is due; cleared when the level closes. */
|
|
@@ -261,6 +261,16 @@ interface ApprovalLevelInstance {
|
|
|
261
261
|
escalationDueAt?: Date;
|
|
262
262
|
escalationAfterDays?: number;
|
|
263
263
|
escalationAfterHours?: number;
|
|
264
|
+
/**
|
|
265
|
+
* When this level started collecting decisions.
|
|
266
|
+
*
|
|
267
|
+
* Escalation rungs are measured from here. Recorded on the level rather than
|
|
268
|
+
* inferred from the audit trail, because a `level_advanced` entry carries only
|
|
269
|
+
* the group's lowest level number — so an upper branch of a parallel group had
|
|
270
|
+
* no entry to find, and its rungs were measured from the previous escalation
|
|
271
|
+
* instead.
|
|
272
|
+
*/
|
|
273
|
+
openedAt?: Date;
|
|
264
274
|
/** How many escalation rungs have fired on this level. */
|
|
265
275
|
escalationStep?: number;
|
|
266
276
|
/** When the next reminder for this level is due; cleared when the level closes. */
|
package/dist/nestjs.cjs
CHANGED
|
@@ -201,6 +201,7 @@ function reviveDates(instance) {
|
|
|
201
201
|
if (l.escalationDueAt) level.escalationDueAt = new Date(l.escalationDueAt);
|
|
202
202
|
if (l.delegatedUntil) level.delegatedUntil = new Date(l.delegatedUntil);
|
|
203
203
|
if (l.reminderDueAt) level.reminderDueAt = new Date(l.reminderDueAt);
|
|
204
|
+
if (l.openedAt) level.openedAt = new Date(l.openedAt);
|
|
204
205
|
return level;
|
|
205
206
|
})
|
|
206
207
|
};
|
|
@@ -303,9 +304,8 @@ var MemoryAdapter = class {
|
|
|
303
304
|
}
|
|
304
305
|
async getOverdueInstances(tenantId, asOf, filter = {}) {
|
|
305
306
|
return [...this.instances.values()].filter((i) => {
|
|
306
|
-
if (i.tenantId !== tenantId
|
|
307
|
-
if (filter
|
|
308
|
-
if (filter.submittedBy && i.submittedBy !== filter.submittedBy) return false;
|
|
307
|
+
if (i.tenantId !== tenantId) return false;
|
|
308
|
+
if (!applyFilter(i, { ...filter, status: "pending" })) return false;
|
|
309
309
|
const hasOverdueEscalation = i.levels.some(
|
|
310
310
|
(l) => l.escalationDueAt != null && new Date(l.escalationDueAt) <= asOf
|
|
311
311
|
);
|
|
@@ -4071,6 +4071,7 @@ var ApprovalEngine = class _ApprovalEngine {
|
|
|
4071
4071
|
remindersSent: 0
|
|
4072
4072
|
};
|
|
4073
4073
|
if (opts.open) {
|
|
4074
|
+
level.openedAt = opts.now;
|
|
4074
4075
|
level.escalationDueAt = this.levelEscalationDue(opts.now, cfg, opts.firstRung);
|
|
4075
4076
|
this.scheduleReminder(level, opts.now);
|
|
4076
4077
|
}
|
|
@@ -4113,6 +4114,7 @@ var ApprovalEngine = class _ApprovalEngine {
|
|
|
4113
4114
|
* the ladder no worse off than the single-step behaviour it replaces.
|
|
4114
4115
|
*/
|
|
4115
4116
|
levelOpenedAt(instance, level, fallback) {
|
|
4117
|
+
if (level.openedAt) return new Date(level.openedAt);
|
|
4116
4118
|
for (let i = instance.auditLog.length - 1; i >= 0; i--) {
|
|
4117
4119
|
const entry = instance.auditLog[i];
|
|
4118
4120
|
if (!entry) continue;
|
|
@@ -4233,6 +4235,7 @@ var ApprovalEngine = class _ApprovalEngine {
|
|
|
4233
4235
|
now
|
|
4234
4236
|
);
|
|
4235
4237
|
}
|
|
4238
|
+
lvl.openedAt = now;
|
|
4236
4239
|
lvl.escalationDueAt = this.levelEscalationDue(now, lvl, firstRung);
|
|
4237
4240
|
lvl.escalationStep = 0;
|
|
4238
4241
|
this.scheduleReminder(lvl, now);
|