hierarchical-approval 0.9.0 → 1.0.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 (49) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +34 -0
  3. package/dist/{ApprovalEngine-mD-qyxcZ.d.ts → ApprovalEngine-DB62pkEk.d.ts} +37 -6
  4. package/dist/{ApprovalEngine-pfQ2v-J9.d.cts → ApprovalEngine-DzHUWix1.d.cts} +37 -6
  5. package/dist/{IAuditAdapter-nlIK1em0.d.ts → IAuditAdapter-RKagmrfi.d.ts} +1 -1
  6. package/dist/{IAuditAdapter-0frLfzRq.d.cts → IAuditAdapter-zVO7XpWm.d.cts} +1 -1
  7. package/dist/{IAuthorizationPolicy-DG8vmD5j.d.ts → IAuthorizationPolicy-DEDQnNzq.d.ts} +1 -1
  8. package/dist/{IAuthorizationPolicy-DXEMaoxF.d.cts → IAuthorizationPolicy-Dx9NzWx8.d.cts} +1 -1
  9. package/dist/{INotificationAdapter-CFedkDQe.d.cts → INotificationAdapter-Dld84ihs.d.cts} +1 -1
  10. package/dist/{INotificationAdapter-COeQ5kEv.d.ts → INotificationAdapter-u5ZE7wS6.d.ts} +1 -1
  11. package/dist/{IOperationMiddleware-CYXTV_TI.d.cts → IOperationMiddleware-BSfjsnTe.d.cts} +1 -1
  12. package/dist/{IOperationMiddleware-Bx4_U0ca.d.ts → IOperationMiddleware-DndObWfg.d.ts} +1 -1
  13. package/dist/{IStorageAdapter-ecVYcA0z.d.ts → IStorageAdapter-BYlHnm7_.d.ts} +1 -1
  14. package/dist/{IStorageAdapter-qKgtuTY1.d.cts → IStorageAdapter-D-yIRiET.d.cts} +1 -1
  15. package/dist/adapters/MemoryAdapter.d.cts +2 -2
  16. package/dist/adapters/MemoryAdapter.d.ts +2 -2
  17. package/dist/adapters/PostgresAdapter.d.cts +2 -2
  18. package/dist/adapters/PostgresAdapter.d.ts +2 -2
  19. package/dist/index.cjs +198 -40
  20. package/dist/index.cjs.map +1 -1
  21. package/dist/index.d.cts +8 -8
  22. package/dist/index.d.ts +8 -8
  23. package/dist/index.js +198 -40
  24. package/dist/index.js.map +1 -1
  25. package/dist/{instance-BxUwmrEi.d.cts → instance-iaAIdMbs.d.cts} +13 -0
  26. package/dist/{instance-BxUwmrEi.d.ts → instance-iaAIdMbs.d.ts} +13 -0
  27. package/dist/nestjs.cjs +198 -40
  28. package/dist/nestjs.cjs.map +1 -1
  29. package/dist/nestjs.d.cts +7 -7
  30. package/dist/nestjs.d.ts +7 -7
  31. package/dist/nestjs.js +198 -40
  32. package/dist/nestjs.js.map +1 -1
  33. package/dist/plugins/audit.d.cts +2 -2
  34. package/dist/plugins/audit.d.ts +2 -2
  35. package/dist/plugins/notify.d.cts +2 -2
  36. package/dist/plugins/notify.d.ts +2 -2
  37. package/dist/plugins/resilience.d.cts +3 -3
  38. package/dist/plugins/resilience.d.ts +3 -3
  39. package/dist/plugins/tracing.d.cts +2 -2
  40. package/dist/plugins/tracing.d.ts +2 -2
  41. package/dist/plugins/webhook.d.cts +2 -2
  42. package/dist/plugins/webhook.d.ts +2 -2
  43. package/dist/testing.cjs +198 -40
  44. package/dist/testing.cjs.map +1 -1
  45. package/dist/testing.d.cts +7 -7
  46. package/dist/testing.d.ts +7 -7
  47. package/dist/testing.js +198 -40
  48. package/dist/testing.js.map +1 -1
  49. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -7,6 +7,48 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
8
  _Nothing yet._
9
9
 
10
+ ## [1.0.0] - 2026-09-04
11
+
12
+ First stable release. The public API is now considered settled: breaking changes
13
+ from here get a major version.
14
+
15
+ ### Added — parallel branch groups
16
+
17
+ - **Levels sharing a `group` name activate together and join before the chain
18
+ advances.** Approvals were strictly sequential, so "Finance and Legal review
19
+ concurrently, then it goes to the CEO" could only be modelled by picking an
20
+ arbitrary order and making one wait on the other — inflating cycle time for no
21
+ business reason. This was the last item on the roadmap in `IMPROVEMENTS.md`.
22
+
23
+ ```ts
24
+ levels: [
25
+ { level: 1, name: 'Manager', ... },
26
+ { level: 2, name: 'Finance', group: 'review', ... },
27
+ { level: 3, name: 'Legal', group: 'review', ... },
28
+ { level: 4, name: 'CEO', ... },
29
+ ]
30
+ ```
31
+
32
+ Both branches open at once, decisions arrive in any order, and level 4 stays
33
+ `waiting` until every branch is approved. Rejecting any branch rejects the
34
+ instance, as a rejection always has. A group may also lead the chain, in which
35
+ case it opens at submit.
36
+
37
+ - **`approve()` and `reject()` take an optional `level`.** Inside a parallel
38
+ group one person can sit on several open branches; recording their decision
39
+ against a guessed branch would be silently wrong, so the engine throws and
40
+ asks which branch is meant. Sequential templates never see this.
41
+
42
+ - **`getCurrentApprovers()` returns the union across every open branch.**
43
+ `canApprove()` likewise considers any open branch the user is assigned to.
44
+
45
+ - **`validateTemplate()` rejects a non-contiguous group** — a group's levels must
46
+ occupy consecutive level numbers, so that "advance past the group" and
47
+ "advance past a level" cannot disagree about what comes next.
48
+
49
+ **Backward compatible.** A level without a `group` is its own group of one, and
50
+ all 673 pre-existing tests pass unchanged against the new engine.
51
+
10
52
  ## [0.9.0] - 2026-09-04
11
53
 
12
54
  ### Added — `updateData()`: edit a pending document and recompute its chain
package/README.md CHANGED
@@ -399,6 +399,40 @@ engine.registerConditionOperator('between', (actual, expected) => {
399
399
  });
400
400
  ```
401
401
 
402
+ ### Parallel branch groups
403
+
404
+ Give levels the same `group` name and they activate together, joining before
405
+ the chain moves on — "Finance and Legal review concurrently, then it goes to the
406
+ CEO":
407
+
408
+ ```ts
409
+ levels: [
410
+ { level: 1, name: 'Manager', approvers: [{ type: 'user', userId: 'mgr' }], mode: 'any' },
411
+ { level: 2, name: 'Finance', group: 'review', approvers: [{ type: 'role', role: 'finance' }], mode: 'any' },
412
+ { level: 3, name: 'Legal', group: 'review', approvers: [{ type: 'role', role: 'legal' }], mode: 'any' },
413
+ { level: 4, name: 'CEO', approvers: [{ type: 'user', userId: 'ceo' }], mode: 'any' },
414
+ ]
415
+ ```
416
+
417
+ Both branches open at once when the group is reached, decisions can arrive in
418
+ either order, and level 4 stays `waiting` until every branch is approved.
419
+ Rejecting any branch rejects the instance. A group may also lead the chain, in
420
+ which case it opens at submit.
421
+
422
+ `getCurrentApprovers()` returns the union across every open branch. A level
423
+ without a `group` is its own group of one, so existing sequential templates
424
+ behave exactly as before.
425
+
426
+ **When one person sits on two open branches**, `approve()` refuses to guess and
427
+ throws — pass `level` to say which branch the decision is for:
428
+
429
+ ```ts
430
+ await engine.approve(id, { approverId: 'cfo', level: 2 });
431
+ ```
432
+
433
+ A group's levels must occupy a contiguous run of level numbers;
434
+ `validateTemplate()` rejects an interleaved group.
435
+
402
436
  ### Editing a document mid-flight
403
437
 
404
438
  Documents change after submission — a line item is corrected, a vendor
@@ -1,14 +1,14 @@
1
- import { I as IStorageAdapter, P as PaginationOpts, a as PaginatedResult, b as InstanceFilter, C as CursorPaginationOpts, c as CursorPaginatedResult } from './IStorageAdapter-ecVYcA0z.js';
2
- import { k as ConditionExpression, o as ResolverFn, g as ApprovalTemplateConfig, A as ApprovalTemplate, j as AuditContext, a as ApprovalInstance, e as ApprovalMode, b as AuditEntry } from './instance-BxUwmrEi.js';
3
- import { I as INotificationAdapter, b as ApprovalEventName, a as ApprovalEventMap } from './INotificationAdapter-COeQ5kEv.js';
1
+ import { I as IStorageAdapter, P as PaginationOpts, a as PaginatedResult, b as InstanceFilter, C as CursorPaginationOpts, c as CursorPaginatedResult } from './IStorageAdapter-BYlHnm7_.js';
2
+ import { k as ConditionExpression, o as ResolverFn, g as ApprovalTemplateConfig, A as ApprovalTemplate, j as AuditContext, a as ApprovalInstance, e as ApprovalMode, b as AuditEntry } from './instance-iaAIdMbs.js';
3
+ import { I as INotificationAdapter, b as ApprovalEventName, a as ApprovalEventMap } from './INotificationAdapter-u5ZE7wS6.js';
4
4
  import { z } from 'zod';
5
5
  import { L as Logger } from './Logger-BplhlU7l.js';
6
6
  import { C as Clock } from './Clock-3FnOczFJ.js';
7
- import { I as IOperationMiddleware, a as ApprovalError } from './IOperationMiddleware-Bx4_U0ca.js';
8
- import { I as IAuditAdapter } from './IAuditAdapter-nlIK1em0.js';
7
+ import { I as IOperationMiddleware, a as ApprovalError } from './IOperationMiddleware-DndObWfg.js';
8
+ import { I as IAuditAdapter } from './IAuditAdapter-RKagmrfi.js';
9
9
  import { I as IMetricsAdapter } from './IMetricsAdapter-t7QpfA1I.js';
10
10
  import { I as ISchedulerAdapter } from './ISchedulerAdapter-DKv_QjVN.js';
11
- import { I as IAuthorizationPolicy } from './IAuthorizationPolicy-DG8vmD5j.js';
11
+ import { I as IAuthorizationPolicy } from './IAuthorizationPolicy-DEDQnNzq.js';
12
12
 
13
13
  declare const SubmitOptionsSchema: z.ZodObject<{
14
14
  templateName: z.ZodString;
@@ -26,6 +26,7 @@ declare const SubmitOptionsSchema: z.ZodObject<{
26
26
  declare const ApproveOptionsSchema: z.ZodObject<{
27
27
  approverId: z.ZodString;
28
28
  comment: z.ZodOptional<z.ZodString>;
29
+ level: z.ZodOptional<z.ZodNumber>;
29
30
  }, z.core.$strip>;
30
31
  declare const RejectOptionsSchema: z.ZodObject<{
31
32
  approverId: z.ZodString;
@@ -34,6 +35,7 @@ declare const RejectOptionsSchema: z.ZodObject<{
34
35
  originator: "originator";
35
36
  previous: "previous";
36
37
  }>>;
38
+ level: z.ZodOptional<z.ZodNumber>;
37
39
  }, z.core.$strip>;
38
40
  declare const DelegateOptionsSchema: z.ZodObject<{
39
41
  fromApprover: z.ZodString;
@@ -489,7 +491,36 @@ declare class ApprovalEngine {
489
491
  /** Compute a deadline `days` from `from`, honouring the business calendar if one is configured. */
490
492
  private deadlineFrom;
491
493
  private requireInstance;
494
+ /**
495
+ * Identity of the parallel branch group a level belongs to.
496
+ *
497
+ * An ungrouped level is its own group of one, keyed by its level number, so
498
+ * sequential and parallel levels can be handled by the same code paths. The
499
+ * `#` prefix keeps a synthetic key from ever colliding with a real group
500
+ * name a template author chose.
501
+ */
502
+ private static groupKeyOf;
503
+ /** Every level currently collecting decisions — more than one inside a parallel group. */
504
+ private pendingLevels;
505
+ /** All levels sharing a group with the given level, including it. */
506
+ private groupMembers;
507
+ /**
508
+ * Pick which pending level an actor is operating on.
509
+ *
510
+ * With sequential levels there is only ever one candidate. Inside a parallel
511
+ * group an approver may sit on several branches at once, and guessing which
512
+ * one they meant would silently record the decision against the wrong branch —
513
+ * so that case demands an explicit `level`.
514
+ */
515
+ private resolveActorLevel;
492
516
  private currentLevelInstance;
517
+ /**
518
+ * The next group of levels to activate: every level sharing the group of the
519
+ * lowest-numbered waiting level.
520
+ */
521
+ private findNextGroup;
522
+ /** Resolve approvers for a group, set its deadlines, and mark it pending. */
523
+ private activateGroup;
493
524
  private findNextLevel;
494
525
  private findPreviousLevel;
495
526
  private guardBulkSize;
@@ -1,14 +1,14 @@
1
- import { I as IStorageAdapter, P as PaginationOpts, a as PaginatedResult, b as InstanceFilter, C as CursorPaginationOpts, c as CursorPaginatedResult } from './IStorageAdapter-qKgtuTY1.cjs';
2
- import { k as ConditionExpression, o as ResolverFn, g as ApprovalTemplateConfig, A as ApprovalTemplate, j as AuditContext, a as ApprovalInstance, e as ApprovalMode, b as AuditEntry } from './instance-BxUwmrEi.cjs';
3
- import { I as INotificationAdapter, b as ApprovalEventName, a as ApprovalEventMap } from './INotificationAdapter-CFedkDQe.cjs';
1
+ import { I as IStorageAdapter, P as PaginationOpts, a as PaginatedResult, b as InstanceFilter, C as CursorPaginationOpts, c as CursorPaginatedResult } from './IStorageAdapter-D-yIRiET.cjs';
2
+ import { k as ConditionExpression, o as ResolverFn, g as ApprovalTemplateConfig, A as ApprovalTemplate, j as AuditContext, a as ApprovalInstance, e as ApprovalMode, b as AuditEntry } from './instance-iaAIdMbs.cjs';
3
+ import { I as INotificationAdapter, b as ApprovalEventName, a as ApprovalEventMap } from './INotificationAdapter-Dld84ihs.cjs';
4
4
  import { z } from 'zod';
5
5
  import { L as Logger } from './Logger-BplhlU7l.cjs';
6
6
  import { C as Clock } from './Clock-3FnOczFJ.cjs';
7
- import { I as IOperationMiddleware, a as ApprovalError } from './IOperationMiddleware-CYXTV_TI.cjs';
8
- import { I as IAuditAdapter } from './IAuditAdapter-0frLfzRq.cjs';
7
+ import { I as IOperationMiddleware, a as ApprovalError } from './IOperationMiddleware-BSfjsnTe.cjs';
8
+ import { I as IAuditAdapter } from './IAuditAdapter-zVO7XpWm.cjs';
9
9
  import { I as IMetricsAdapter } from './IMetricsAdapter-t7QpfA1I.cjs';
10
10
  import { I as ISchedulerAdapter } from './ISchedulerAdapter-DKv_QjVN.cjs';
11
- import { I as IAuthorizationPolicy } from './IAuthorizationPolicy-DXEMaoxF.cjs';
11
+ import { I as IAuthorizationPolicy } from './IAuthorizationPolicy-Dx9NzWx8.cjs';
12
12
 
13
13
  declare const SubmitOptionsSchema: z.ZodObject<{
14
14
  templateName: z.ZodString;
@@ -26,6 +26,7 @@ declare const SubmitOptionsSchema: z.ZodObject<{
26
26
  declare const ApproveOptionsSchema: z.ZodObject<{
27
27
  approverId: z.ZodString;
28
28
  comment: z.ZodOptional<z.ZodString>;
29
+ level: z.ZodOptional<z.ZodNumber>;
29
30
  }, z.core.$strip>;
30
31
  declare const RejectOptionsSchema: z.ZodObject<{
31
32
  approverId: z.ZodString;
@@ -34,6 +35,7 @@ declare const RejectOptionsSchema: z.ZodObject<{
34
35
  originator: "originator";
35
36
  previous: "previous";
36
37
  }>>;
38
+ level: z.ZodOptional<z.ZodNumber>;
37
39
  }, z.core.$strip>;
38
40
  declare const DelegateOptionsSchema: z.ZodObject<{
39
41
  fromApprover: z.ZodString;
@@ -489,7 +491,36 @@ declare class ApprovalEngine {
489
491
  /** Compute a deadline `days` from `from`, honouring the business calendar if one is configured. */
490
492
  private deadlineFrom;
491
493
  private requireInstance;
494
+ /**
495
+ * Identity of the parallel branch group a level belongs to.
496
+ *
497
+ * An ungrouped level is its own group of one, keyed by its level number, so
498
+ * sequential and parallel levels can be handled by the same code paths. The
499
+ * `#` prefix keeps a synthetic key from ever colliding with a real group
500
+ * name a template author chose.
501
+ */
502
+ private static groupKeyOf;
503
+ /** Every level currently collecting decisions — more than one inside a parallel group. */
504
+ private pendingLevels;
505
+ /** All levels sharing a group with the given level, including it. */
506
+ private groupMembers;
507
+ /**
508
+ * Pick which pending level an actor is operating on.
509
+ *
510
+ * With sequential levels there is only ever one candidate. Inside a parallel
511
+ * group an approver may sit on several branches at once, and guessing which
512
+ * one they meant would silently record the decision against the wrong branch —
513
+ * so that case demands an explicit `level`.
514
+ */
515
+ private resolveActorLevel;
492
516
  private currentLevelInstance;
517
+ /**
518
+ * The next group of levels to activate: every level sharing the group of the
519
+ * lowest-numbered waiting level.
520
+ */
521
+ private findNextGroup;
522
+ /** Resolve approvers for a group, set its deadlines, and mark it pending. */
523
+ private activateGroup;
493
524
  private findNextLevel;
494
525
  private findPreviousLevel;
495
526
  private guardBulkSize;
@@ -1,4 +1,4 @@
1
- import { b as AuditEntry, a as ApprovalInstance } from './instance-BxUwmrEi.js';
1
+ import { b as AuditEntry, a as ApprovalInstance } from './instance-iaAIdMbs.js';
2
2
 
3
3
  interface IAuditAdapter {
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { b as AuditEntry, a as ApprovalInstance } from './instance-BxUwmrEi.cjs';
1
+ import { b as AuditEntry, a as ApprovalInstance } from './instance-iaAIdMbs.cjs';
2
2
 
3
3
  interface IAuditAdapter {
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { a as ApprovalInstance, d as ApprovalLevelInstance } from './instance-BxUwmrEi.js';
1
+ import { a as ApprovalInstance, d as ApprovalLevelInstance } from './instance-iaAIdMbs.js';
2
2
 
3
3
  interface AuthorizationContext {
4
4
  operation: 'submit' | 'approve' | 'reject' | 'delegate' | 'reassign' | 'cancel' | 'escalate' | 'override' | 'resubmit' | 'addComment' | 'updateData';
@@ -1,4 +1,4 @@
1
- import { a as ApprovalInstance, d as ApprovalLevelInstance } from './instance-BxUwmrEi.cjs';
1
+ import { a as ApprovalInstance, d as ApprovalLevelInstance } from './instance-iaAIdMbs.cjs';
2
2
 
3
3
  interface AuthorizationContext {
4
4
  operation: 'submit' | 'approve' | 'reject' | 'delegate' | 'reassign' | 'cancel' | 'escalate' | 'override' | 'resubmit' | 'addComment' | 'updateData';
@@ -1,4 +1,4 @@
1
- import { a as ApprovalInstance, b as AuditEntry } from './instance-BxUwmrEi.cjs';
1
+ import { a as ApprovalInstance, b as AuditEntry } from './instance-iaAIdMbs.cjs';
2
2
 
3
3
  interface ApprovalEvent {
4
4
  instanceId: string;
@@ -1,4 +1,4 @@
1
- import { a as ApprovalInstance, b as AuditEntry } from './instance-BxUwmrEi.js';
1
+ import { a as ApprovalInstance, b as AuditEntry } from './instance-iaAIdMbs.js';
2
2
 
3
3
  interface ApprovalEvent {
4
4
  instanceId: string;
@@ -1,4 +1,4 @@
1
- import { a as ApprovalInstance } from './instance-BxUwmrEi.cjs';
1
+ import { a as ApprovalInstance } from './instance-iaAIdMbs.cjs';
2
2
 
3
3
  declare class ApprovalError extends Error {
4
4
  readonly code: string;
@@ -1,4 +1,4 @@
1
- import { a as ApprovalInstance } from './instance-BxUwmrEi.js';
1
+ import { a as ApprovalInstance } from './instance-iaAIdMbs.js';
2
2
 
3
3
  declare class ApprovalError extends Error {
4
4
  readonly code: string;
@@ -1,4 +1,4 @@
1
- import { A as ApprovalTemplate, a as ApprovalInstance, f as ApprovalStatus, b as AuditEntry } from './instance-BxUwmrEi.js';
1
+ import { A as ApprovalTemplate, a as ApprovalInstance, f as ApprovalStatus, b as AuditEntry } from './instance-iaAIdMbs.js';
2
2
 
3
3
  interface PaginationOpts {
4
4
  limit: number;
@@ -1,4 +1,4 @@
1
- import { A as ApprovalTemplate, a as ApprovalInstance, f as ApprovalStatus, b as AuditEntry } from './instance-BxUwmrEi.cjs';
1
+ import { A as ApprovalTemplate, a as ApprovalInstance, f as ApprovalStatus, b as AuditEntry } from './instance-iaAIdMbs.cjs';
2
2
 
3
3
  interface PaginationOpts {
4
4
  limit: number;
@@ -1,5 +1,5 @@
1
- import { I as IStorageAdapter, P as PaginationOpts, a as PaginatedResult, b as InstanceFilter, C as CursorPaginationOpts, c as CursorPaginatedResult } from '../IStorageAdapter-qKgtuTY1.cjs';
2
- import { A as ApprovalTemplate, a as ApprovalInstance, b as AuditEntry } from '../instance-BxUwmrEi.cjs';
1
+ import { I as IStorageAdapter, P as PaginationOpts, a as PaginatedResult, b as InstanceFilter, C as CursorPaginationOpts, c as CursorPaginatedResult } from '../IStorageAdapter-D-yIRiET.cjs';
2
+ import { A as ApprovalTemplate, a as ApprovalInstance, b as AuditEntry } from '../instance-iaAIdMbs.cjs';
3
3
 
4
4
  declare class MemoryAdapter implements IStorageAdapter {
5
5
  private templates;
@@ -1,5 +1,5 @@
1
- import { I as IStorageAdapter, P as PaginationOpts, a as PaginatedResult, b as InstanceFilter, C as CursorPaginationOpts, c as CursorPaginatedResult } from '../IStorageAdapter-ecVYcA0z.js';
2
- import { A as ApprovalTemplate, a as ApprovalInstance, b as AuditEntry } from '../instance-BxUwmrEi.js';
1
+ import { I as IStorageAdapter, P as PaginationOpts, a as PaginatedResult, b as InstanceFilter, C as CursorPaginationOpts, c as CursorPaginatedResult } from '../IStorageAdapter-BYlHnm7_.js';
2
+ import { A as ApprovalTemplate, a as ApprovalInstance, b as AuditEntry } from '../instance-iaAIdMbs.js';
3
3
 
4
4
  declare class MemoryAdapter implements IStorageAdapter {
5
5
  private templates;
@@ -1,7 +1,7 @@
1
1
  import * as tls from 'tls';
2
2
  import * as pg from 'pg';
3
- import { I as IStorageAdapter, P as PaginationOpts, a as PaginatedResult, b as InstanceFilter, C as CursorPaginationOpts, c as CursorPaginatedResult } from '../IStorageAdapter-qKgtuTY1.cjs';
4
- import { A as ApprovalTemplate, a as ApprovalInstance, b as AuditEntry } from '../instance-BxUwmrEi.cjs';
3
+ import { I as IStorageAdapter, P as PaginationOpts, a as PaginatedResult, b as InstanceFilter, C as CursorPaginationOpts, c as CursorPaginatedResult } from '../IStorageAdapter-D-yIRiET.cjs';
4
+ import { A as ApprovalTemplate, a as ApprovalInstance, b as AuditEntry } from '../instance-iaAIdMbs.cjs';
5
5
 
6
6
  interface PostgresAdapterOptions {
7
7
  connectionString?: string;
@@ -1,7 +1,7 @@
1
1
  import * as tls from 'tls';
2
2
  import * as pg from 'pg';
3
- import { I as IStorageAdapter, P as PaginationOpts, a as PaginatedResult, b as InstanceFilter, C as CursorPaginationOpts, c as CursorPaginatedResult } from '../IStorageAdapter-ecVYcA0z.js';
4
- import { A as ApprovalTemplate, a as ApprovalInstance, b as AuditEntry } from '../instance-BxUwmrEi.js';
3
+ import { I as IStorageAdapter, P as PaginationOpts, a as PaginatedResult, b as InstanceFilter, C as CursorPaginationOpts, c as CursorPaginatedResult } from '../IStorageAdapter-BYlHnm7_.js';
4
+ import { A as ApprovalTemplate, a as ApprovalInstance, b as AuditEntry } from '../instance-iaAIdMbs.js';
5
5
 
6
6
  interface PostgresAdapterOptions {
7
7
  connectionString?: string;