@pipeline-builder/pipeline-data 3.4.113 → 3.4.115

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.
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Shared soft-delete retention purge.
3
+ *
4
+ * Every {@link CrudService} entity soft-deletes (sets `deletedAt` + a
5
+ * `purge_after` deadline). This orchestrator runs one purge pass across a set
6
+ * of such entities, hard-deleting tombstones whose deadline has passed. It is
7
+ * the `run` callback a service hands to `createScheduler` (leader-locked), so
8
+ * only one pod sweeps at a time.
9
+ *
10
+ * Runs in an explicit **sysadmin tenant scope** (`runWithTenantContext({
11
+ * isSuperAdmin: true })`) so the underlying `purgeExpired` spans every org and
12
+ * bypasses RLS on FORCE'd tables (plugins/pipelines/etc.). A bare no-tenant
13
+ * context would see zero rows on those tables — and in production (`strict`
14
+ * mode) `withTenantTx` throws outright — so the scope is established here rather
15
+ * than left to the caller. This is a cross-tenant housekeeping job, not a
16
+ * per-org operation.
17
+ */
18
+ import { type Scheduler } from '@pipeline-builder/api-core';
19
+ /** The slice of a CrudService the sweep needs, plus a label for logs/metrics. */
20
+ export interface PurgeableEntity {
21
+ /** Table/entity label (e.g. 'pipeline') for per-table logging. */
22
+ name: string;
23
+ /** Hard-delete up to `limit` expired tombstones; returns rows purged. */
24
+ purgeExpired(now: Date, limit?: number): Promise<number>;
25
+ }
26
+ export interface SoftDeletePurgeOptions {
27
+ /** Rows per batch per table (default 500). */
28
+ batchSize?: number;
29
+ /** Max batches per table per tick (default 20 → ≤ 10k/table/tick); the rest
30
+ * is deferred to the next tick so a huge backlog can't blow the lock TTL. */
31
+ maxBatchesPerEntity?: number;
32
+ }
33
+ /** Kill-switch: `SOFT_DELETE_PURGE_ENABLED=false` disables all hard-purging
34
+ * (tombstones still accumulate + stay restorable; nothing is destroyed). */
35
+ export declare function isSoftDeletePurgeEnabled(): boolean;
36
+ /**
37
+ * Run one purge sweep across `entities`. Loops each entity's `purgeExpired` in
38
+ * batches until a batch returns `< batchSize` (drained) or the per-tick cap is
39
+ * hit (logged; continued next tick). Never throws — a failing entity is logged
40
+ * and the sweep moves on. Returns per-entity purged counts (also logged).
41
+ */
42
+ export declare function runSoftDeletePurge(entities: PurgeableEntity[], opts?: SoftDeletePurgeOptions): Promise<Record<string, number>>;
43
+ export interface SoftDeletePurgeSchedulerOptions extends SoftDeletePurgeOptions {
44
+ /** Service label for logs + the leader-lock key (e.g. 'pipeline', 'plugin'). */
45
+ service: string;
46
+ /** Entities to sweep — usually the service's own CrudService singletons. */
47
+ entities: PurgeableEntity[];
48
+ }
49
+ /**
50
+ * Build (but do NOT start) a leader-locked scheduler that runs the soft-delete
51
+ * purge sweep for `entities` on a cadence. The caller `.start()`s it and wires
52
+ * `stop()` to SIGTERM. Returns null when purging is disabled.
53
+ *
54
+ * Env config:
55
+ * SOFT_DELETE_PURGE_ENABLED (default true; false ⇒ null, no sweep)
56
+ * SOFT_DELETE_PURGE_INTERVAL_HOURS (default 6)
57
+ * SOFT_DELETE_PURGE_STARTUP_DELAY_MS (default 120000 — 2 min settle)
58
+ * SOFT_DELETE_PURGE_LOCK_TTL_MS (default 900000 — 15 min; outlasts a
59
+ * sweep, stays under the interval)
60
+ *
61
+ * A cross-pod leader lock (when Redis is configured) means only one replica
62
+ * sweeps per window; without Redis it runs on every pod — still safe, since the
63
+ * purge is a batched idempotent DELETE, just redundant.
64
+ */
65
+ export declare function createSoftDeletePurgeScheduler(opts: SoftDeletePurgeSchedulerOptions): Scheduler | null;
@@ -0,0 +1,114 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * Shared soft-delete retention purge.
5
+ *
6
+ * Every {@link CrudService} entity soft-deletes (sets `deletedAt` + a
7
+ * `purge_after` deadline). This orchestrator runs one purge pass across a set
8
+ * of such entities, hard-deleting tombstones whose deadline has passed. It is
9
+ * the `run` callback a service hands to `createScheduler` (leader-locked), so
10
+ * only one pod sweeps at a time.
11
+ *
12
+ * Runs in an explicit **sysadmin tenant scope** (`runWithTenantContext({
13
+ * isSuperAdmin: true })`) so the underlying `purgeExpired` spans every org and
14
+ * bypasses RLS on FORCE'd tables (plugins/pipelines/etc.). A bare no-tenant
15
+ * context would see zero rows on those tables — and in production (`strict`
16
+ * mode) `withTenantTx` throws outright — so the scope is established here rather
17
+ * than left to the caller. This is a cross-tenant housekeeping job, not a
18
+ * per-org operation.
19
+ */
20
+ import { createLogger, createScheduler, createEnvRedisLock } from '@pipeline-builder/api-core';
21
+ import { runWithTenantContext } from '../database/tenancy.js';
22
+ const logger = createLogger('soft-delete-sweep');
23
+ /** Kill-switch: `SOFT_DELETE_PURGE_ENABLED=false` disables all hard-purging
24
+ * (tombstones still accumulate + stay restorable; nothing is destroyed). */
25
+ export function isSoftDeletePurgeEnabled() {
26
+ return (process.env.SOFT_DELETE_PURGE_ENABLED ?? 'true').toLowerCase() !== 'false';
27
+ }
28
+ /**
29
+ * Run one purge sweep across `entities`. Loops each entity's `purgeExpired` in
30
+ * batches until a batch returns `< batchSize` (drained) or the per-tick cap is
31
+ * hit (logged; continued next tick). Never throws — a failing entity is logged
32
+ * and the sweep moves on. Returns per-entity purged counts (also logged).
33
+ */
34
+ export async function runSoftDeletePurge(entities, opts = {}) {
35
+ const counts = {};
36
+ if (!isSoftDeletePurgeEnabled()) {
37
+ logger.debug('Soft-delete purge disabled (SOFT_DELETE_PURGE_ENABLED=false)');
38
+ return counts;
39
+ }
40
+ const batchSize = opts.batchSize ?? 500;
41
+ const maxBatches = opts.maxBatchesPerEntity ?? 20;
42
+ // One `now` for the whole tick — rows that expire mid-sweep wait for the next.
43
+ const now = new Date();
44
+ // Establish a sysadmin scope so every `purgeExpired` (which routes through
45
+ // `withTenantTx`) bypasses RLS and spans all orgs. Without this, FORCE'd
46
+ // tables return zero rows and production `strict` mode throws.
47
+ return runWithTenantContext({ isSuperAdmin: true }, async () => {
48
+ for (const entity of entities) {
49
+ let total = 0;
50
+ for (let i = 0; i < maxBatches; i++) {
51
+ let purged;
52
+ try {
53
+ purged = await entity.purgeExpired(now, batchSize);
54
+ }
55
+ catch (err) {
56
+ logger.error('Purge batch failed', { entity: entity.name, error: String(err) });
57
+ break;
58
+ }
59
+ total += purged;
60
+ if (purged < batchSize)
61
+ break; // drained
62
+ if (i === maxBatches - 1) {
63
+ logger.warn('Purge hit per-tick cap; remaining tombstones deferred to next tick', {
64
+ entity: entity.name, purgedThisTick: total,
65
+ });
66
+ }
67
+ }
68
+ if (total > 0)
69
+ logger.info('Purged expired soft-deleted rows', { entity: entity.name, count: total });
70
+ counts[entity.name] = total;
71
+ }
72
+ return counts;
73
+ });
74
+ }
75
+ /**
76
+ * Build (but do NOT start) a leader-locked scheduler that runs the soft-delete
77
+ * purge sweep for `entities` on a cadence. The caller `.start()`s it and wires
78
+ * `stop()` to SIGTERM. Returns null when purging is disabled.
79
+ *
80
+ * Env config:
81
+ * SOFT_DELETE_PURGE_ENABLED (default true; false ⇒ null, no sweep)
82
+ * SOFT_DELETE_PURGE_INTERVAL_HOURS (default 6)
83
+ * SOFT_DELETE_PURGE_STARTUP_DELAY_MS (default 120000 — 2 min settle)
84
+ * SOFT_DELETE_PURGE_LOCK_TTL_MS (default 900000 — 15 min; outlasts a
85
+ * sweep, stays under the interval)
86
+ *
87
+ * A cross-pod leader lock (when Redis is configured) means only one replica
88
+ * sweeps per window; without Redis it runs on every pod — still safe, since the
89
+ * purge is a batched idempotent DELETE, just redundant.
90
+ */
91
+ export function createSoftDeletePurgeScheduler(opts) {
92
+ if (!isSoftDeletePurgeEnabled()) {
93
+ logger.info('Soft-delete purge scheduler disabled (SOFT_DELETE_PURGE_ENABLED=false)', { service: opts.service });
94
+ return null;
95
+ }
96
+ const intervalMs = Math.max(1, Number.parseInt(process.env.SOFT_DELETE_PURGE_INTERVAL_HOURS ?? '6', 10) || 6) * 60 * 60 * 1000;
97
+ const startupDelayMs = Math.max(0, Number.parseInt(process.env.SOFT_DELETE_PURGE_STARTUP_DELAY_MS ?? '120000', 10) || 0);
98
+ const lockTtlMs = Math.max(1000, Number.parseInt(process.env.SOFT_DELETE_PURGE_LOCK_TTL_MS ?? '900000', 10) || 900000);
99
+ const lock = createEnvRedisLock();
100
+ logger.info('Soft-delete purge scheduler starting', {
101
+ service: opts.service,
102
+ entities: opts.entities.map((e) => e.name),
103
+ intervalHours: intervalMs / 3_600_000,
104
+ locked: !!lock,
105
+ });
106
+ return createScheduler({
107
+ name: `soft-delete-purge:${opts.service}`,
108
+ intervalMs,
109
+ startupDelayMs,
110
+ run: async () => { await runSoftDeletePurge(opts.entities, opts); },
111
+ ...(lock ? { lock: { redis: () => lock, key: `soft-delete-purge:${opts.service}:leader`, ttlMs: lockTtlMs } } : {}),
112
+ });
113
+ }
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29mdC1kZWxldGUtc3dlZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL3NvZnQtZGVsZXRlLXN3ZWVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBa0IsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU5RCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQWtCakQ7NkVBQzZFO0FBQzdFLE1BQU0sVUFBVSx3QkFBd0I7SUFDdEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLElBQUksTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxDQUFDO0FBQ3JGLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsa0JBQWtCLENBQ3RDLFFBQTJCLEVBQzNCLElBQUksR0FBMkIsRUFBRTtJQUVqQyxNQUFNLE1BQU0sR0FBMkIsRUFBRSxDQUFDO0lBQzFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUM7UUFDaEMsTUFBTSxDQUFDLEtBQUssQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO1FBQzdFLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQztJQUN4QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDO0lBQ2xELCtFQUErRTtJQUMvRSxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBRXZCLDJFQUEyRTtJQUMzRSx5RUFBeUU7SUFDekUsK0RBQStEO0lB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QUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUMxQyxhQUFhLEVBQUUsVUFBVSxHQUFHLFNBQVM7UUFDckMsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJO0tBQ2YsQ0FBQyxDQUFDO0lBRUgsT0FBTyxlQUFlLENBQUM7UUFDckIsSUFBSSxFQUFFLHFCQUFxQixJQUFJLENBQUMsT0FBTyxFQUFFO1FBQ3pDLFVBQVU7UUFDVixjQUFjO1FBQ2QsR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLHFCQUFxQixJQUFJLENBQUMsT0FBTyxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNwSCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogU2hhcmVkIHNvZnQtZGVsZXRlIHJldGVudGlvbiBwdXJnZS5cbiAqXG4gKiBFdmVyeSB7QGxpbmsgQ3J1ZFNlcnZpY2V9IGVudGl0eSBzb2Z0LWRlbGV0ZXMgKHNldHMgYGRlbGV0ZWRBdGAgKyBhXG4gKiBgcHVyZ2VfYWZ0ZXJgIGRlYWRsaW5lKS4gVGhpcyBvcmNoZXN0cmF0b3IgcnVucyBvbmUgcHVyZ2UgcGFzcyBhY3Jvc3MgYSBzZXRcbiAqIG9mIHN1Y2ggZW50aXRpZXMsIGhhcmQtZGVsZXRpbmcgdG9tYnN0b25lcyB3aG9zZSBkZWFkbGluZSBoYXMgcGFzc2VkLiBJdCBpc1xuICogdGhlIGBydW5gIGNhbGxiYWNrIGEgc2VydmljZSBoYW5kcyB0byBgY3JlYXRlU2NoZWR1bGVyYCAobGVhZGVyLWxvY2tlZCksIHNvXG4gKiBvbmx5IG9uZSBwb2Qgc3dlZXBzIGF0IGEgdGltZS5cbiAqXG4gKiBSdW5zIGluIGFuIGV4cGxpY2l0ICoqc3lzYWRtaW4gdGVuYW50IHNjb3BlKiogKGBydW5XaXRoVGVuYW50Q29udGV4dCh7XG4gKiBpc1N1cGVyQWRtaW46IHRydWUgfSlgKSBzbyB0aGUgdW5kZXJseWluZyBgcHVyZ2VFeHBpcmVkYCBzcGFucyBldmVyeSBvcmcgYW5kXG4gKiBieXBhc3NlcyBSTFMgb24gRk9SQ0UnZCB0YWJsZXMgKHBsdWdpbnMvcGlwZWxpbmVzL2V0Yy4pLiBBIGJhcmUgbm8tdGVuYW50XG4gKiBjb250ZXh0IHdvdWxkIHNlZSB6ZXJvIHJvd3Mgb24gdGhvc2UgdGFibGVzIOKAlCBhbmQgaW4gcHJvZHVjdGlvbiAoYHN0cmljdGBcbiAqIG1vZGUpIGB3aXRoVGVuYW50VHhgIHRocm93cyBvdXRyaWdodCDigJQgc28gdGhlIHNjb3BlIGlzIGVzdGFibGlzaGVkIGhlcmUgcmF0aGVyXG4gKiB0aGFuIGxlZnQgdG8gdGhlIGNhbGxlci4gVGhpcyBpcyBhIGNyb3NzLXRlbmFudCBob3VzZWtlZXBpbmcgam9iLCBub3QgYVxuICogcGVyLW9yZyBvcGVyYXRpb24uXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyLCBjcmVhdGVTY2hlZHVsZXIsIGNyZWF0ZUVudlJlZGlzTG9jaywgdHlwZSBTY2hlZHVsZXIgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBydW5XaXRoVGVuYW50Q29udGV4dCB9IGZyb20gJy4uL2RhdGFiYXNlL3RlbmFuY3kuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ3NvZnQtZGVsZXRlLXN3ZWVwJyk7XG5cbi8qKiBUaGUgc2xpY2Ugb2YgYSBDcnVkU2VydmljZSB0aGUgc3dlZXAgbmVlZHMsIHBsdXMgYSBsYWJlbCBmb3IgbG9ncy9tZXRyaWNzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdXJnZWFibGVFbnRpdHkge1xuICAvKiogVGFibGUvZW50aXR5IGxhYmVsIChlLmcuICdwaXBlbGluZScpIGZvciBwZXItdGFibGUgbG9nZ2luZy4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogSGFyZC1kZWxldGUgdXAgdG8gYGxpbWl0YCBleHBpcmVkIHRvbWJzdG9uZXM7IHJldHVybnMgcm93cyBwdXJnZWQuICovXG4gIHB1cmdlRXhwaXJlZChub3c6IERhdGUsIGxpbWl0PzogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNvZnREZWxldGVQdXJnZU9wdGlvbnMge1xuICAvKiogUm93cyBwZXIgYmF0Y2ggcGVyIHRhYmxlIChkZWZhdWx0IDUwMCkuICovXG4gIGJhdGNoU2l6ZT86IG51bWJlcjtcbiAgLyoqIE1heCBiYXRjaGVzIHBlciB0YWJsZSBwZXIgdGljayAoZGVmYXVsdCAyMCDihpIg4omkIDEway90YWJsZS90aWNrKTsgdGhlIHJlc3RcbiAgICogIGlzIGRlZmVycmVkIHRvIHRoZSBuZXh0IHRpY2sgc28gYSBodWdlIGJhY2tsb2cgY2FuJ3QgYmxvdyB0aGUgbG9jayBUVEwuICovXG4gIG1heEJhdGNoZXNQZXJFbnRpdHk/OiBudW1iZXI7XG59XG5cbi8qKiBLaWxsLXN3aXRjaDogYFNPRlRfREVMRVRFX1BVUkdFX0VOQUJMRUQ9ZmFsc2VgIGRpc2FibGVzIGFsbCBoYXJkLXB1cmdpbmdcbiAqICAodG9tYnN0b25lcyBzdGlsbCBhY2N1bXVsYXRlICsgc3RheSByZXN0b3JhYmxlOyBub3RoaW5nIGlzIGRlc3Ryb3llZCkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTb2Z0RGVsZXRlUHVyZ2VFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gKHByb2Nlc3MuZW52LlNPRlRfREVMRVRFX1BVUkdFX0VOQUJMRUQgPz8gJ3RydWUnKS50b0xvd2VyQ2FzZSgpICE9PSAnZmFsc2UnO1xufVxuXG4vKipcbiAqIFJ1biBvbmUgcHVyZ2Ugc3dlZXAgYWNyb3NzIGBlbnRpdGllc2AuIExvb3BzIGVhY2ggZW50aXR5J3MgYHB1cmdlRXhwaXJlZGAgaW5cbiAqIGJhdGNoZXMgdW50aWwgYSBiYXRjaCByZXR1cm5zIGA8IGJhdGNoU2l6ZWAgKGRyYWluZWQpIG9yIHRoZSBwZXItdGljayBjYXAgaXNcbiAqIGhpdCAobG9nZ2VkOyBjb250aW51ZWQgbmV4dCB0aWNrKS4gTmV2ZXIgdGhyb3dzIOKAlCBhIGZhaWxpbmcgZW50aXR5IGlzIGxvZ2dlZFxuICogYW5kIHRoZSBzd2VlcCBtb3ZlcyBvbi4gUmV0dXJucyBwZXItZW50aXR5IHB1cmdlZCBjb3VudHMgKGFsc28gbG9nZ2VkKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blNvZnREZWxldGVQdXJnZShcbiAgZW50aXRpZXM6IFB1cmdlYWJsZUVudGl0eVtdLFxuICBvcHRzOiBTb2Z0RGVsZXRlUHVyZ2VPcHRpb25zID0ge30sXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIG51bWJlcj4+IHtcbiAgY29uc3QgY291bnRzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG4gIGlmICghaXNTb2Z0RGVsZXRlUHVyZ2VFbmFibGVkKCkpIHtcbiAgICBsb2dnZXIuZGVidWcoJ1NvZnQtZGVsZXRlIHB1cmdlIGRpc2FibGVkIChTT0ZUX0RFTEVURV9QVVJHRV9FTkFCTEVEPWZhbHNlKScpO1xuICAgIHJldHVybiBjb3VudHM7XG4gIH1cblxuICBjb25zdCBiYXRjaFNpemUgPSBvcHRzLmJhdGNoU2l6ZSA/PyA1MDA7XG4gIGNvbnN0IG1heEJhdGNoZXMgPSBvcHRzLm1heEJhdGNoZXNQZXJFbnRpdHkgPz8gMjA7XG4gIC8vIE9uZSBgbm93YCBmb3IgdGhlIHdob2xlIHRpY2sg4oCUIHJvd3MgdGhhdCBleHBpcmUgbWlkLXN3ZWVwIHdhaXQgZm9yIHRoZSBuZXh0LlxuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuXG4gIC8vIEVzdGFibGlzaCBhIHN5c2FkbWluIHNjb3BlIHNvIGV2ZXJ5IGBwdXJnZUV4cGlyZWRgICh3aGljaCByb3V0ZXMgdGhyb3VnaFxuICAvLyBgd2l0aFRlbmFudFR4YCkgYnlwYXNzZXMgUkxTIGFuZCBzcGFucyBhbGwgb3Jncy4gV2l0aG91dCB0aGlzLCBGT1JDRSdkXG4gIC8vIHRhYmxlcyByZXR1cm4gemVybyByb3dzIGFuZCBwcm9kdWN0aW9uIGBzdHJpY3RgIG1vZGUgdGhyb3dzLlxuICByZXR1cm4gcnVuV2l0aFRlbmFudENvbnRleHQoeyBpc1N1cGVyQWRtaW46IHRydWUgfSwgYXN5bmMgKCkgPT4ge1xuICAgIGZvciAoY29uc3QgZW50aXR5IG9mIGVudGl0aWVzKSB7XG4gICAgICBsZXQgdG90YWwgPSAwO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhCYXRjaGVzOyBpKyspIHtcbiAgICAgICAgbGV0IHB1cmdlZDogbnVtYmVyO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHB1cmdlZCA9IGF3YWl0IGVudGl0eS5wdXJnZUV4cGlyZWQobm93LCBiYXRjaFNpemUpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ1B1cmdlIGJhdGNoIGZhaWxlZCcsIHsgZW50aXR5OiBlbnRpdHkubmFtZSwgZXJyb3I6IFN0cmluZyhlcnIpIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRvdGFsICs9IHB1cmdlZDtcbiAgICAgICAgaWYgKHB1cmdlZCA8IGJhdGNoU2l6ZSkgYnJlYWs7IC8vIGRyYWluZWRcbiAgICAgICAgaWYgKGkgPT09IG1heEJhdGNoZXMgLSAxKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oJ1B1cmdlIGhpdCBwZXItdGljayBjYXA7IHJlbWFpbmluZyB0b21ic3RvbmVzIGRlZmVycmVkIHRvIG5leHQgdGljaycsIHtcbiAgICAgICAgICAgIGVudGl0eTogZW50aXR5Lm5hbWUsIHB1cmdlZFRoaXNUaWNrOiB0b3RhbCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRvdGFsID4gMCkgbG9nZ2VyLmluZm8oJ1B1cmdlZCBleHBpcmVkIHNvZnQtZGVsZXRlZCByb3dzJywgeyBlbnRpdHk6IGVudGl0eS5uYW1lLCBjb3VudDogdG90YWwgfSk7XG4gICAgICBjb3VudHNbZW50aXR5Lm5hbWVdID0gdG90YWw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50cztcbiAgfSk7XG59XG5cbi8vIC0tIFNjaGVkdWxlciBmYWN0b3J5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgU29mdERlbGV0ZVB1cmdlU2NoZWR1bGVyT3B0aW9ucyBleHRlbmRzIFNvZnREZWxldGVQdXJnZU9wdGlvbnMge1xuICAvKiogU2VydmljZSBsYWJlbCBmb3IgbG9ncyArIHRoZSBsZWFkZXItbG9jayBrZXkgKGUuZy4gJ3BpcGVsaW5lJywgJ3BsdWdpbicpLiAqL1xuICBzZXJ2aWNlOiBzdHJpbmc7XG4gIC8qKiBFbnRpdGllcyB0byBzd2VlcCDigJQgdXN1YWxseSB0aGUgc2VydmljZSdzIG93biBDcnVkU2VydmljZSBzaW5nbGV0b25zLiAqL1xuICBlbnRpdGllczogUHVyZ2VhYmxlRW50aXR5W107XG59XG5cbi8qKlxuICogQnVpbGQgKGJ1dCBkbyBOT1Qgc3RhcnQpIGEgbGVhZGVyLWxvY2tlZCBzY2hlZHVsZXIgdGhhdCBydW5zIHRoZSBzb2Z0LWRlbGV0ZVxuICogcHVyZ2Ugc3dlZXAgZm9yIGBlbnRpdGllc2Agb24gYSBjYWRlbmNlLiBUaGUgY2FsbGVyIGAuc3RhcnQoKWBzIGl0IGFuZCB3aXJlc1xuICogYHN0b3AoKWAgdG8gU0lHVEVSTS4gUmV0dXJucyBudWxsIHdoZW4gcHVyZ2luZyBpcyBkaXNhYmxlZC5cbiAqXG4gKiBFbnYgY29uZmlnOlxuICogICBTT0ZUX0RFTEVURV9QVVJHRV9FTkFCTEVEICAgICAgICAgICAoZGVmYXVsdCB0cnVlOyBmYWxzZSDih5IgbnVsbCwgbm8gc3dlZXApXG4gKiAgIFNPRlRfREVMRVRFX1BVUkdFX0lOVEVSVkFMX0hPVVJTICAgIChkZWZhdWx0IDYpXG4gKiAgIFNPRlRfREVMRVRFX1BVUkdFX1NUQVJUVVBfREVMQVlfTVMgIChkZWZhdWx0IDEyMDAwMCDigJQgMiBtaW4gc2V0dGxlKVxuICogICBTT0ZUX0RFTEVURV9QVVJHRV9MT0NLX1RUTF9NUyAgICAgICAoZGVmYXVsdCA5MDAwMDAg4oCUIDE1IG1pbjsgb3V0bGFzdHMgYVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dlZXAsIHN0YXlzIHVuZGVyIHRoZSBpbnRlcnZhbClcbiAqXG4gKiBBIGNyb3NzLXBvZCBsZWFkZXIgbG9jayAod2hlbiBSZWRpcyBpcyBjb25maWd1cmVkKSBtZWFucyBvbmx5IG9uZSByZXBsaWNhXG4gKiBzd2VlcHMgcGVyIHdpbmRvdzsgd2l0aG91dCBSZWRpcyBpdCBydW5zIG9uIGV2ZXJ5IHBvZCDigJQgc3RpbGwgc2FmZSwgc2luY2UgdGhlXG4gKiBwdXJnZSBpcyBhIGJhdGNoZWQgaWRlbXBvdGVudCBERUxFVEUsIGp1c3QgcmVkdW5kYW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU29mdERlbGV0ZVB1cmdlU2NoZWR1bGVyKG9wdHM6IFNvZnREZWxldGVQdXJnZVNjaGVkdWxlck9wdGlvbnMpOiBTY2hlZHVsZXIgfCBudWxsIHtcbiAgaWYgKCFpc1NvZnREZWxldGVQdXJnZUVuYWJsZWQoKSkge1xuICAgIGxvZ2dlci5pbmZvKCdTb2Z0LWRlbGV0ZSBwdXJnZSBzY2hlZHVsZXIgZGlzYWJsZWQgKFNPRlRfREVMRVRFX1BVUkdFX0VOQUJMRUQ9ZmFsc2UpJywgeyBzZXJ2aWNlOiBvcHRzLnNlcnZpY2UgfSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBpbnRlcnZhbE1zID0gTWF0aC5tYXgoMSwgTnVtYmVyLnBhcnNlSW50KHByb2Nlc3MuZW52LlNPRlRfREVMRVRFX1BVUkdFX0lOVEVSVkFMX0hPVVJTID8/ICc2JywgMTApIHx8IDYpICogNjAgKiA2MCAqIDEwMDA7XG4gIGNvbnN0IHN0YXJ0dXBEZWxheU1zID0gTWF0aC5tYXgoMCwgTnVtYmVyLnBhcnNlSW50KHByb2Nlc3MuZW52LlNPRlRfREVMRVRFX1BVUkdFX1NUQVJUVVBfREVMQVlfTVMgPz8gJzEyMDAwMCcsIDEwKSB8fCAwKTtcbiAgY29uc3QgbG9ja1R0bE1zID0gTWF0aC5tYXgoMTAwMCwgTnVtYmVyLnBhcnNlSW50KHByb2Nlc3MuZW52LlNPRlRfREVMRVRFX1BVUkdFX0xPQ0tfVFRMX01TID8/ICc5MDAwMDAnLCAxMCkgfHwgOTAwMDAwKTtcbiAgY29uc3QgbG9jayA9IGNyZWF0ZUVudlJlZGlzTG9jaygpO1xuXG4gIGxvZ2dlci5pbmZvKCdTb2Z0LWRlbGV0ZSBwdXJnZSBzY2hlZHVsZXIgc3RhcnRpbmcnLCB7XG4gICAgc2VydmljZTogb3B0cy5zZXJ2aWNlLFxuICAgIGVudGl0aWVzOiBvcHRzLmVudGl0aWVzLm1hcCgoZSkgPT4gZS5uYW1lKSxcbiAgICBpbnRlcnZhbEhvdXJzOiBpbnRlcnZhbE1zIC8gM182MDBfMDAwLFxuICAgIGxvY2tlZDogISFsb2NrLFxuICB9KTtcblxuICByZXR1cm4gY3JlYXRlU2NoZWR1bGVyKHtcbiAgICBuYW1lOiBgc29mdC1kZWxldGUtcHVyZ2U6JHtvcHRzLnNlcnZpY2V9YCxcbiAgICBpbnRlcnZhbE1zLFxuICAgIHN0YXJ0dXBEZWxheU1zLFxuICAgIHJ1bjogYXN5bmMgKCkgPT4geyBhd2FpdCBydW5Tb2Z0RGVsZXRlUHVyZ2Uob3B0cy5lbnRpdGllcywgb3B0cyk7IH0sXG4gICAgLi4uKGxvY2sgPyB7IGxvY2s6IHsgcmVkaXM6ICgpID0+IGxvY2ssIGtleTogYHNvZnQtZGVsZXRlLXB1cmdlOiR7b3B0cy5zZXJ2aWNlfTpsZWFkZXJgLCB0dGxNczogbG9ja1R0bE1zIH0gfSA6IHt9KSxcbiAgfSk7XG59XG4iXX0=
@@ -707,6 +707,23 @@ export declare const schema: {
707
707
  identity: undefined;
708
708
  generated: undefined;
709
709
  }, {}, {}>;
710
+ purgeAfter: import("drizzle-orm/pg-core").PgColumn<{
711
+ name: "purge_after";
712
+ tableName: "plugins";
713
+ dataType: "date";
714
+ columnType: "PgTimestamp";
715
+ data: Date;
716
+ driverParam: string;
717
+ notNull: false;
718
+ hasDefault: false;
719
+ isPrimaryKey: false;
720
+ isAutoincrement: false;
721
+ hasRuntimeDefault: false;
722
+ enumValues: undefined;
723
+ baseColumn: never;
724
+ identity: undefined;
725
+ generated: undefined;
726
+ }, {}, {}>;
710
727
  };
711
728
  dialect: 'pg';
712
729
  }>;
@@ -1133,6 +1150,23 @@ export declare const schema: {
1133
1150
  identity: undefined;
1134
1151
  generated: undefined;
1135
1152
  }, {}, {}>;
1153
+ purgeAfter: import("drizzle-orm/pg-core").PgColumn<{
1154
+ name: "purge_after";
1155
+ tableName: "pipelines";
1156
+ dataType: "date";
1157
+ columnType: "PgTimestamp";
1158
+ data: Date;
1159
+ driverParam: string;
1160
+ notNull: false;
1161
+ hasDefault: false;
1162
+ isPrimaryKey: false;
1163
+ isAutoincrement: false;
1164
+ hasRuntimeDefault: false;
1165
+ enumValues: undefined;
1166
+ baseColumn: never;
1167
+ identity: undefined;
1168
+ generated: undefined;
1169
+ }, {}, {}>;
1136
1170
  };
1137
1171
  dialect: 'pg';
1138
1172
  }>;
@@ -1559,6 +1593,23 @@ export declare const schema: {
1559
1593
  identity: undefined;
1560
1594
  generated: undefined;
1561
1595
  }, {}, {}>;
1596
+ purgeAfter: import("drizzle-orm/pg-core").PgColumn<{
1597
+ name: "purge_after";
1598
+ tableName: "pipeline_templates";
1599
+ dataType: "date";
1600
+ columnType: "PgTimestamp";
1601
+ data: Date;
1602
+ driverParam: string;
1603
+ notNull: false;
1604
+ hasDefault: false;
1605
+ isPrimaryKey: false;
1606
+ isAutoincrement: false;
1607
+ hasRuntimeDefault: false;
1608
+ enumValues: undefined;
1609
+ baseColumn: never;
1610
+ identity: undefined;
1611
+ generated: undefined;
1612
+ }, {}, {}>;
1562
1613
  };
1563
1614
  dialect: 'pg';
1564
1615
  }>;
@@ -1908,6 +1959,23 @@ export declare const schema: {
1908
1959
  identity: undefined;
1909
1960
  generated: undefined;
1910
1961
  }, {}, {}>;
1962
+ purgeAfter: import("drizzle-orm/pg-core").PgColumn<{
1963
+ name: "purge_after";
1964
+ tableName: "messages";
1965
+ dataType: "date";
1966
+ columnType: "PgTimestamp";
1967
+ data: Date;
1968
+ driverParam: string;
1969
+ notNull: false;
1970
+ hasDefault: false;
1971
+ isPrimaryKey: false;
1972
+ isAutoincrement: false;
1973
+ hasRuntimeDefault: false;
1974
+ enumValues: undefined;
1975
+ baseColumn: never;
1976
+ identity: undefined;
1977
+ generated: undefined;
1978
+ }, {}, {}>;
1911
1979
  };
1912
1980
  dialect: 'pg';
1913
1981
  }>;
@@ -2685,6 +2753,23 @@ export declare const schema: {
2685
2753
  identity: undefined;
2686
2754
  generated: undefined;
2687
2755
  }, {}, {}>;
2756
+ purgeAfter: import("drizzle-orm/pg-core").PgColumn<{
2757
+ name: "purge_after";
2758
+ tableName: "dashboards";
2759
+ dataType: "date";
2760
+ columnType: "PgTimestamp";
2761
+ data: Date;
2762
+ driverParam: string;
2763
+ notNull: false;
2764
+ hasDefault: false;
2765
+ isPrimaryKey: false;
2766
+ isAutoincrement: false;
2767
+ hasRuntimeDefault: false;
2768
+ enumValues: undefined;
2769
+ baseColumn: never;
2770
+ identity: undefined;
2771
+ generated: undefined;
2772
+ }, {}, {}>;
2688
2773
  };
2689
2774
  dialect: 'pg';
2690
2775
  }>;
@@ -3112,6 +3197,23 @@ export declare const schema: {
3112
3197
  identity: undefined;
3113
3198
  generated: undefined;
3114
3199
  }, {}, {}>;
3200
+ purgeAfter: import("drizzle-orm/pg-core").PgColumn<{
3201
+ name: "purge_after";
3202
+ tableName: "org_alert_destinations";
3203
+ dataType: "date";
3204
+ columnType: "PgTimestamp";
3205
+ data: Date;
3206
+ driverParam: string;
3207
+ notNull: false;
3208
+ hasDefault: false;
3209
+ isPrimaryKey: false;
3210
+ isAutoincrement: false;
3211
+ hasRuntimeDefault: false;
3212
+ enumValues: undefined;
3213
+ baseColumn: never;
3214
+ identity: undefined;
3215
+ generated: undefined;
3216
+ }, {}, {}>;
3115
3217
  };
3116
3218
  dialect: 'pg';
3117
3219
  }>;
@@ -3383,6 +3485,23 @@ export declare const schema: {
3383
3485
  identity: undefined;
3384
3486
  generated: undefined;
3385
3487
  }, {}, {}>;
3488
+ purgeAfter: import("drizzle-orm/pg-core").PgColumn<{
3489
+ name: "purge_after";
3490
+ tableName: "org_alert_rules";
3491
+ dataType: "date";
3492
+ columnType: "PgTimestamp";
3493
+ data: Date;
3494
+ driverParam: string;
3495
+ notNull: false;
3496
+ hasDefault: false;
3497
+ isPrimaryKey: false;
3498
+ isAutoincrement: false;
3499
+ hasRuntimeDefault: false;
3500
+ enumValues: undefined;
3501
+ baseColumn: never;
3502
+ identity: undefined;
3503
+ generated: undefined;
3504
+ }, {}, {}>;
3386
3505
  };
3387
3506
  dialect: 'pg';
3388
3507
  }>;
@@ -3654,6 +3773,23 @@ export declare const schema: {
3654
3773
  identity: undefined;
3655
3774
  generated: undefined;
3656
3775
  }, {}, {}>;
3776
+ purgeAfter: import("drizzle-orm/pg-core").PgColumn<{
3777
+ name: "purge_after";
3778
+ tableName: "compliance_policies";
3779
+ dataType: "date";
3780
+ columnType: "PgTimestamp";
3781
+ data: Date;
3782
+ driverParam: string;
3783
+ notNull: false;
3784
+ hasDefault: false;
3785
+ isPrimaryKey: false;
3786
+ isAutoincrement: false;
3787
+ hasRuntimeDefault: false;
3788
+ enumValues: undefined;
3789
+ baseColumn: never;
3790
+ identity: undefined;
3791
+ generated: undefined;
3792
+ }, {}, {}>;
3657
3793
  };
3658
3794
  dialect: 'pg';
3659
3795
  }>;
@@ -4182,6 +4318,23 @@ export declare const schema: {
4182
4318
  identity: undefined;
4183
4319
  generated: undefined;
4184
4320
  }, {}, {}>;
4321
+ purgeAfter: import("drizzle-orm/pg-core").PgColumn<{
4322
+ name: "purge_after";
4323
+ tableName: "compliance_rules";
4324
+ dataType: "date";
4325
+ columnType: "PgTimestamp";
4326
+ data: Date;
4327
+ driverParam: string;
4328
+ notNull: false;
4329
+ hasDefault: false;
4330
+ isPrimaryKey: false;
4331
+ isAutoincrement: false;
4332
+ hasRuntimeDefault: false;
4333
+ enumValues: undefined;
4334
+ baseColumn: never;
4335
+ identity: undefined;
4336
+ generated: undefined;
4337
+ }, {}, {}>;
4185
4338
  };
4186
4339
  dialect: 'pg';
4187
4340
  }>;
@@ -254,6 +254,23 @@ export declare const orgAlertDestination: import("drizzle-orm/pg-core").PgTableW
254
254
  identity: undefined;
255
255
  generated: undefined;
256
256
  }, {}, {}>;
257
+ purgeAfter: import("drizzle-orm/pg-core").PgColumn<{
258
+ name: "purge_after";
259
+ tableName: "org_alert_destinations";
260
+ dataType: "date";
261
+ columnType: "PgTimestamp";
262
+ data: Date;
263
+ driverParam: string;
264
+ notNull: false;
265
+ hasDefault: false;
266
+ isPrimaryKey: false;
267
+ isAutoincrement: false;
268
+ hasRuntimeDefault: false;
269
+ enumValues: undefined;
270
+ baseColumn: never;
271
+ identity: undefined;
272
+ generated: undefined;
273
+ }, {}, {}>;
257
274
  };
258
275
  dialect: 'pg';
259
276
  }>;
@@ -546,6 +563,23 @@ export declare const orgAlertRule: import("drizzle-orm/pg-core").PgTableWithColu
546
563
  identity: undefined;
547
564
  generated: undefined;
548
565
  }, {}, {}>;
566
+ purgeAfter: import("drizzle-orm/pg-core").PgColumn<{
567
+ name: "purge_after";
568
+ tableName: "org_alert_rules";
569
+ dataType: "date";
570
+ columnType: "PgTimestamp";
571
+ data: Date;
572
+ driverParam: string;
573
+ notNull: false;
574
+ hasDefault: false;
575
+ isPrimaryKey: false;
576
+ isAutoincrement: false;
577
+ hasRuntimeDefault: false;
578
+ enumValues: undefined;
579
+ baseColumn: never;
580
+ identity: undefined;
581
+ generated: undefined;
582
+ }, {}, {}>;
549
583
  };
550
584
  dialect: 'pg';
551
585
  }>;
@@ -53,7 +53,12 @@ export const orgAlertDestination = pgTable('org_alert_destinations', {
53
53
  /** Soft delete so we keep audit history of who-deleted-what. */
54
54
  deletedAt: timestamp('deleted_at', { withTimezone: true }),
55
55
  deletedBy: text('deleted_by'),
56
+ // Soft-delete purge deadline: the retention sweep hard-deletes tombstoned
57
+ // rows once `purge_after` has passed (set on delete alongside deleted_at).
58
+ purgeAfter: timestamp('purge_after', { withTimezone: true }),
56
59
  }, (table) => ({
60
+ // Partial index over just the tombstones — drives the retention purge sweep.
61
+ purgeIdx: index('org_alert_destination_purge_idx').on(table.purgeAfter).where(sql `deleted_at IS NOT NULL`),
57
62
  // Per-org listing the only access path.
58
63
  orgIdx: index('org_alert_destination_org_idx')
59
64
  .on(table.orgId, table.enabled),
@@ -108,7 +113,12 @@ export const orgAlertRule = pgTable('org_alert_rules', {
108
113
  /** Soft delete so we keep audit of who-deleted-what. */
109
114
  deletedAt: timestamp('deleted_at', { withTimezone: true }),
110
115
  deletedBy: text('deleted_by'),
116
+ // Soft-delete purge deadline: the retention sweep hard-deletes tombstoned
117
+ // rows once `purge_after` has passed (set on delete alongside deleted_at).
118
+ purgeAfter: timestamp('purge_after', { withTimezone: true }),
111
119
  }, (table) => ({
120
+ // Partial index over just the tombstones — drives the retention purge sweep.
121
+ purgeIdx: index('org_alert_rule_purge_idx').on(table.purgeAfter).where(sql `deleted_at IS NOT NULL`),
112
122
  // Per-org listing + materializer's enabled-only scan.
113
123
  orgEnabledIdx: index('org_alert_rule_org_enabled_idx')
114
124
  .on(table.orgId, table.enabled),
@@ -117,4 +127,4 @@ export const orgAlertRule = pgTable('org_alert_rules', {
117
127
  .on(table.orgId, table.name)
118
128
  .where(sql `deleted_at IS NULL`),
119
129
  }));
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0YWJhc2Uvc2NoZW1hL2FsZXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTNHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRTtJQUNuRSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLGFBQWEsRUFBRTtJQUMzQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUVuRCxTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUN2QyxTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUN2RCxVQUFVLEVBQUU7U0FDWixPQUFPLEVBQUU7SUFDWixTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUN2QyxTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUN2RCxVQUFVLEVBQUU7U0FDWixPQUFPLEVBQUU7SUFFWjtpRUFDNkQ7SUFDN0QsT0FBTyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFF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QU8sRUFBRTtJQUV0RCxtRkFBbUY7SUFDbkYsT0FBTyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFO0lBRW5ELHdEQUF3RDtJQUN4RCxTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUMxRCxTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztDQUM5QixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2Isc0RBQXNEO0lBQ3RELGFBQWEsRUFBRSxLQUFLLENBQUMsZ0NBQWdDLENBQUM7U0FDbkQsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUNqQyxxRUFBcUU7SUFDckUsU0FBUyxFQUFFLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQztTQUNqRCxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDO1NBQzNCLEtBQUssQ0FBQyxHQUFHLENBQUEsb0JBQW9CLENBQUM7Q0FDbEMsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgc3FsIH0gZnJvbSAnZHJpenpsZS1vcm0nO1xuaW1wb3J0IHsgYm9vbGVhbiwgdmFyY2hhciwgcGdUYWJsZSwgdGV4dCwgdGltZXN0YW1wLCB1dWlkLCBpbmRleCwgdW5pcXVlSW5kZXggfSBmcm9tICdkcml6emxlLW9ybS9wZy1jb3JlJztcblxuLyoqXG4gKiBQZXItb3JnIGFsZXJ0IG5vdGlmaWNhdGlvbiBkZXN0aW5hdGlvbi4gTXVsdGktdGVuYW50IGFsZXJ0aW5nIHJvdXRlc1xuICogQWxlcnRtYW5hZ2VyIHdlYmhvb2tzIHRvIHRoZSBwbGF0Zm9ybTsgdGhlIHBsYXRmb3JtIGxvb2tzIHRoZSBmaXJpbmdcbiAqIGFsZXJ0J3MgYG9yZ19pZGAgbGFiZWwgdXAgaGVyZSBhbmQgZm9yd2FyZHMgdG8gZWFjaCBlbmFibGVkIGRlc3RpbmF0aW9uLlxuICpcbiAqIENoYW5uZWxzICogLSBgc2xhY2tgICBgdGFyZ2V0YCBpcyB0aGUgaW5jb21pbmctd2ViaG9vayBVUkxcbiAqIC0gYHdlYmhvb2tgICBgdGFyZ2V0YCBpcyBhbnkgSFRUUFMgVVJMOyB0aGUgcmVsYXkgcG9zdHMgdGhlXG4gKiBBbGVydG1hbmFnZXIgdjIgd2ViaG9vayBwYXlsb2FkIHZlcmJhdGltXG4gKiAtIGBpbi1hcHBgICBgdGFyZ2V0YCBpZ25vcmVkOyBzdXJmYWNlcyBhcyBhbiBpbi1hcHAgbWVzc2FnZSB2aWFcbiAqIHRoZSBleGlzdGluZyBgbWVzc2FnZXNgIHRhYmxlXG4gKlxuICogU2VjcmV0cyAqIC0gRm9yIGBzbGFja2AvYHdlYmhvb2tgIGNoYW5uZWxzLCB0aGUgVVJMIGl0c2VsZiBpcyB0aGUgc2VjcmV0LiBXZSBkb24ndFxuICogbG9nIGl0IG9uIGBkYXNoYm9hcmQudXBkYXRlYCBvciBzdXJmYWNlIHRoZSBmdWxsIFVSTCBvbiBHRVQgZW5kcG9pbnRzXG4gKiBhZnRlciB3cml0ZTsganVzdCBhIG1hc2tlZCBwcmV2aWV3IChsYXN0IDEyIGNoYXJzKS4gU3RvcmVkIGluIGNsZWFyXG4gKiB0ZXh0ICBzYW1lIHBvc3R1cmUgYXMgYGNvbXBsaWFuY2Vfbm90aWZpY2F0aW9uX3ByZWZlcmVuY2VzLndlYmhvb2tfdXJsYFxuICogYW5kIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgYXBwJ3Mgc2VjcmV0IGhhbmRsaW5nIGZvciBvcmctbGV2ZWxcbiAqIGludGVncmF0aW9ucy4gSWYgd2UgYWRkIGEgS01TLWVuY3J5cHRpb24gdGllciBmb3IgYW55IHNlY3JldCBjb2x1bW4sXG4gKiB0aGlzIGlzIG9uZSBvZiB0aGUgZmlyc3QgdG8gbWlncmF0ZS5cbiAqXG4gKiBAdGFibGUgb3JnX2FsZXJ0X2Rlc3RpbmF0aW9uc1xuICovXG5leHBvcnQgY29uc3Qgb3JnQWxlcnREZXN0aW5hdGlvbiA9IHBnVGFibGUoJ29yZ19hbGVydF9kZXN0aW5hdGlvbnMnLCB7XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcblxuICBjcmVhdGVkQnk6IHRleHQoJ2NyZWF0ZWRfYnknKS5ub3ROdWxsKCksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSlcbiAgICAuZGVmYXVsdE5vdygpXG4gICAgLm5vdE51bGwoKSxcbiAgdXBkYXRlZEJ5OiB0ZXh0KCd1cGRhdGVkX2J5Jykubm90TnVsbCgpLFxuICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pXG4gICAgLmRlZmF1bHROb3coKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLyoqICdzbGFjaycgfCAnd2ViaG9vaycgfCAnaW4tYXBwJyB8ICdlbWFpbCcgIGtlcHQgc3RyaW5nbHkgc28gZnV0dXJlIGNoYW5uZWxzXG4gICAqIChQYWdlckR1dHksIOKApikgY2FuIGJlIGFkZGVkIHdpdGhvdXQgYSBzY2hlbWEgbWlncmF0aW9uLiAqL1xuICBjaGFubmVsOiB2YXJjaGFyKCdjaGFubmVsJywgeyBsZW5ndGg6IDIwIH0pXG4gICAgLiR0eXBlPCdzbGFjaycgfCAnd2ViaG9vaycgfCAnaW4tYXBwJyB8ICdlbWFpbCc+KClcbiAgICAubm90TnVsbCgpLFxuICAvKiogQ2hhbm5lbC1zcGVjaWZpYyB0YXJnZXQuIFNsYWNrL3dlYmhvb2s6IFVSTC4gRW1haWw6IGFkZHJlc3MuIEluLWFwcDogaWdub3JlZC4gKi9cbiAgdGFyZ2V0OiB0ZXh0KCd0YXJnZXQnKS5kZWZhdWx0KCcnKS5ub3ROdWxsKCksXG4gIC8qKiBGcmllbmRseSBsYWJlbCBzaG93biBpbiB0aGUgc2V0dGluZ3MgVUkuICovXG4gIGxhYmVsOiB2YXJjaGFyKCdsYWJlbCcsIHsgbGVuZ3RoOiAxMDAgfSkubm90TnVsbCgpLFxuXG4gIC8qKiBMb3dlc3Qgc2V2ZXJpdHkgdGhhdCB0cmlnZ2VycyB0aGlzIGRlc3RpbmF0aW9uICgnd2FybmluZycgPSB3YXJuaW5nK2NyaXRpY2FsLFxuICAgKiAnY3JpdGljYWwnID0gY3JpdGljYWwgb25seSkuIE1pcnJvcnMgQWxlcnRtYW5hZ2VyIHNldmVyaXR5IG9yZGVyaW5nLiAqL1xuICBtaW5TZXZlcml0eTogdmFyY2hhcignbWluX3NldmVyaXR5JywgeyBsZW5ndGg6IDEwIH0pXG4gICAgLiR0eXBlPCd3YXJuaW5nJyB8ICdjcml0aWNhbCc+KClcbiAgICAuZGVmYXVsdCgnd2FybmluZycpXG4gICAgLm5vdE51bGwoKSxcbiAgZW5hYmxlZDogYm9vbGVhbignZW5hYmxlZCcpLmRlZmF1bHQodHJ1ZSkubm90TnVsbCgpLFxuXG4gIC8qKiBTb2Z0IGRlbGV0ZSBzbyB3ZSBrZWVwIGF1ZGl0IGhpc3Rvcnkgb2Ygd2hvLWRlbGV0ZWQtd2hhdC4gKi9cbiAgZGVsZXRlZEF0OiB0aW1lc3RhbXAoJ2RlbGV0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgZGVsZXRlZEJ5OiB0ZXh0KCdkZWxldGVkX2J5JyksXG59LCAodGFibGUpID0+ICh7XG4gIC8vIFBlci1vcmcgbGlzdGluZyAgdGhlIG9ubHkgYWNjZXNzIHBhdGguXG4gIG9yZ0lkeDogaW5kZXgoJ29yZ19hbGVydF9kZXN0aW5hdGlvbl9vcmdfaWR4JylcbiAgICAub24odGFibGUub3JnSWQsIHRhYmxlLmVuYWJsZWQpLFxufSkpO1xuXG4vKipcbiAqICBQZXItb3JnIGFsZXJ0IHJ1bGVzIGF1dGhvcmVkIGJ5IG9wZXJhdG9ycy5cbiAqXG4gKiBFYWNoIHJvdyBtYXRlcmlhbGl6ZXMgaW50byBhIGBncm91cHNbXS5ydWxlc1tdYCBlbnRyeSBpbiBhIFByb21ldGhldXNcbiAqIGBydWxlX2ZpbGVzYCBZQU1MLiBUaGUgbWF0ZXJpYWxpemVyIGVuZHBvaW50XG4gKiBgR0VUIC9hcGkvb2JzZXJ2YWJpbGl0eS9hbGVydC1ydWxlcy9tYXRlcmlhbGl6ZWQueW1sYCByZW5kZXJzIGFsbCBlbmFibGVkXG4gKiBydWxlcyBhY3Jvc3MgYWxsIG9yZ3MgKGRlbGV0ZWQ9bnVsbCkgaW50byBvbmUgZG9jdW1lbnQ7IFByb21ldGhldXMgcG9sbHNcbiAqIG9yIGEgc2lkZWNhciBjb3BpZXMgaXQgaW50byB0aGUgcnVsZXMgZGlyLlxuICpcbiAqIFRlbmFuY3kgKyBzYWZldHkgKiAtIGBleHByYCBpcyB1c2VyLWF1dGhvcmVkIFByb21RTC4gVGhlIENSVUQgcm91dGUgZW5mb3JjZXMgdGhhdCB0aGVcbiAqIGV4cHJlc3Npb24gc3Vic3RyaW5nLWNvbnRhaW5zIGBvcmdfaWQ9XCI8b3JnSWQ+XCJgIHNvIGFuIG9wZXJhdG9yIGNhbid0XG4gKiB3cml0ZSBydWxlcyB0aGF0IGZpcmUgb24gb3RoZXIgb3JncycgbWV0cmljcy4gVGhpcyBpcyBhIGNvYXJzZSBnYXRlXG4gKiAoYSBtYWxmb3JtZWQgZXhwcmVzc2lvbiBjYW4gc3RpbGwgYmUgc3ludGFjdGljYWxseSB3cm9uZykgYnV0IGl0XG4gKiBjbG9zZXMgdGhlIGNyb3NzLXRlbmFudCBkYXRhIGxlYWsuIFJlYWwgUHJvbVFMIHBhcnNpbmcgKyBhdXRvbWF0aWNcbiAqIG9yZ19pZCBpbmplY3Rpb24gaXMgYSBmb2xsb3ctb24uXG4gKiAtIFRoZSBtYXRlcmlhbGl6ZWQgcnVsZSBjYXJyaWVzIGBsYWJlbHMub3JnX2lkID0gPG9yZ0lkPmAgc28gdGhlXG4gKiBhbGVydG1hbmFnZXItcmVsYXkgcm91dGVzIGZpcmluZyBhbGVydHMgdG8gdGhlIHJpZ2h0IG9yZydzXG4gKiBkZXN0aW5hdGlvbnMgKG1hdGNoZXMgdGhlIGFsZXJ0LXJlbGF5IG1vZGVsKS5cbiAqXG4gKiBAdGFibGUgb3JnX2FsZXJ0X3J1bGVzXG4gKi9cbmV4cG9ydCBjb25zdCBvcmdBbGVydFJ1bGUgPSBwZ1RhYmxlKCdvcmdfYWxlcnRfcnVsZXMnLCB7XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcblxuICBjcmVhdGVkQnk6IHRleHQoJ2NyZWF0ZWRfYnknKS5ub3ROdWxsKCksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbiAgdXBkYXRlZEJ5OiB0ZXh0KCd1cGRhdGVkX2J5Jykubm90TnVsbCgpLFxuICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG5cbiAgLyoqIE9wZXJhdG9yLXN1cHBsaWVkIHJ1bGUgbmFtZS4gU2FuaXRpemVkIGludG8gYSB2YWxpZCBQcm9tIGFsZXJ0IG5hbWUgYXRcbiAgICogbWF0ZXJpYWxpemF0aW9uIHRpbWUgKGJlY29tZXMgYE9yZ1J1bGVfPG9yZ0lkPl88c2x1Zz5gIHRvIGF2b2lkIG5hbWVcbiAgICogY29sbGlzaW9ucyBhY3Jvc3Mgb3JncykuICovXG4gIG5hbWU6IHZhcmNoYXIoJ25hbWUnLCB7IGxlbmd0aDogMTAwIH0pLm5vdE51bGwoKSxcbiAgLyoqIFByb21RTCBleHByZXNzaW9uLiBNVVNUIHN1YnN0cmluZy1jb250YWluIGBvcmdfaWQ9XCI8b3JnSWQ+XCJgLiAqL1xuICBleHByOiB0ZXh0KCdleHByJykubm90TnVsbCgpLFxuICAvKiogYGZvcjogNW1gIHN0eWxlIGR1cmF0aW9uLiBWYWxpZGF0ZWQgYWdhaW5zdCBQcm9tJ3MgZHVyYXRpb24gcmVnZXguICovXG4gIGZvckR1cmF0aW9uOiB2YXJjaGFyKCdmb3JfZHVyYXRpb24nLCB7IGxlbmd0aDogMjAgfSkuZGVmYXVsdCgnNW0nKS5ub3ROdWxsKCksXG4gIC8qKiAnd2FybmluZycgfCAnY3JpdGljYWwnICBtYXRjaGVzIHRoZSBwbGF0Zm9ybS13aWRlIHNldmVyaXR5IGxhZGRlci4gKi9cbiAgc2V2ZXJpdHk6IHZhcmNoYXIoJ3NldmVyaXR5JywgeyBsZW5ndGg6IDIwIH0pXG4gICAgLiR0eXBlPCd3YXJuaW5nJyB8ICdjcml0aWNhbCc+KClcbiAgICAuZGVmYXVsdCgnd2FybmluZycpXG4gICAgLm5vdE51bGwoKSxcbiAgLyoqIEFsZXJ0bWFuYWdlciBgc3VtbWFyeWAgYW5ub3RhdGlvbi4gU3VwcG9ydHMgYHt7ICR2YWx1ZSB9fWAuICovXG4gIHN1bW1hcnk6IHRleHQoJ3N1bW1hcnknKS5ub3ROdWxsKCksXG4gIC8qKiBBbGVydG1hbmFnZXIgYGRlc2NyaXB0aW9uYCBhbm5vdGF0aW9uLiBPcHRpb25hbDsgJycgaXMgZmluZS4gKi9cbiAgZGVzY3JpcHRpb246IHRleHQoJ2Rlc2NyaXB0aW9uJykuZGVmYXVsdCgnJykubm90TnVsbCgpLFxuXG4gIC8qKiBEaXNhYmxlZCBydWxlcyBkb24ndCBtYXRlcmlhbGl6ZS4gTGV0cyBvcGVyYXRvcnMgc3RhZ2UgcnVsZXMgd2l0aG91dCBmaXJpbmcuICovXG4gIGVuYWJsZWQ6IGJvb2xlYW4oJ2VuYWJsZWQnKS5kZWZhdWx0KHRydWUpLm5vdE51bGwoKSxcblxuICAvKiogU29mdCBkZWxldGUgc28gd2Uga2VlcCBhdWRpdCBvZiB3aG8tZGVsZXRlZC13aGF0LiAqL1xuICBkZWxldGVkQXQ6IHRpbWVzdGFtcCgnZGVsZXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBkZWxldGVkQnk6IHRleHQoJ2RlbGV0ZWRfYnknKSxcbn0sICh0YWJsZSkgPT4gKHtcbiAgLy8gUGVyLW9yZyBsaXN0aW5nICsgbWF0ZXJpYWxpemVyJ3MgZW5hYmxlZC1vbmx5IHNjYW4uXG4gIG9yZ0VuYWJsZWRJZHg6IGluZGV4KCdvcmdfYWxlcnRfcnVsZV9vcmdfZW5hYmxlZF9pZHgnKVxuICAgIC5vbih0YWJsZS5vcmdJZCwgdGFibGUuZW5hYmxlZCksXG4gIC8vIFVuaXF1ZSB3aXRoaW4gYW4gb3JnIHNvIG9wZXJhdG9ycyBjYW4ndCBhY2NpZGVudGFsbHkgY2xvbmUgYSBydWxlLlxuICBvcmdOYW1lVXE6IHVuaXF1ZUluZGV4KCdvcmdfYWxlcnRfcnVsZV9vcmdfbmFtZV91cScpXG4gICAgLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5uYW1lKVxuICAgIC53aGVyZShzcWxgZGVsZXRlZF9hdCBJUyBOVUxMYCksXG59KSk7XG5cbmV4cG9ydCB0eXBlIE9yZ0FsZXJ0RGVzdGluYXRpb24gPSB0eXBlb2Ygb3JnQWxlcnREZXN0aW5hdGlvbi4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBPcmdBbGVydERlc3RpbmF0aW9uSW5zZXJ0ID0gdHlwZW9mIG9yZ0FsZXJ0RGVzdGluYXRpb24uJGluZmVySW5zZXJ0O1xuZXhwb3J0IHR5cGUgT3JnQWxlcnREZXN0aW5hdGlvblVwZGF0ZSA9IFBhcnRpYWw8T21pdDxPcmdBbGVydERlc3RpbmF0aW9uSW5zZXJ0LCAnaWQnIHwgJ2NyZWF0ZWRBdCcgfCAnY3JlYXRlZEJ5JyB8ICdvcmdJZCc+PjtcbiJdfQ==
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0YWJhc2Uvc2NoZW1hL2FsZXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTNHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRTtJQUNuRSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLGFBQWEsRUFBRTtJQUMzQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUVuRCxTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUN2QyxTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUN2RCxVQUFVLEVBQUU7U0FDWixPQUFPLEVBQUU7SUFDWixTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUN2QyxTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUN2RCxVQUFVLEVBQUU7U0FDWixPQUFPLEVBQUU7SUFFWjtpRUFDNkQ7SUFDN0QsT0FBTyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFF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QixLQUFLLENBQUMsR0FBRyxDQUFBLG9CQUFvQixDQUFDO0NBQ2xDLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHNxbCB9IGZyb20gJ2RyaXp6bGUtb3JtJztcbmltcG9ydCB7IGJvb2xlYW4sIHZhcmNoYXIsIHBnVGFibGUsIHRleHQsIHRpbWVzdGFtcCwgdXVpZCwgaW5kZXgsIHVuaXF1ZUluZGV4IH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSc7XG5cbi8qKlxuICogUGVyLW9yZyBhbGVydCBub3RpZmljYXRpb24gZGVzdGluYXRpb24uIE11bHRpLXRlbmFudCBhbGVydGluZyByb3V0ZXNcbiAqIEFsZXJ0bWFuYWdlciB3ZWJob29rcyB0byB0aGUgcGxhdGZvcm07IHRoZSBwbGF0Zm9ybSBsb29rcyB0aGUgZmlyaW5nXG4gKiBhbGVydCdzIGBvcmdfaWRgIGxhYmVsIHVwIGhlcmUgYW5kIGZvcndhcmRzIHRvIGVhY2ggZW5hYmxlZCBkZXN0aW5hdGlvbi5cbiAqXG4gKiBDaGFubmVscyAqIC0gYHNsYWNrYCAgYHRhcmdldGAgaXMgdGhlIGluY29taW5nLXdlYmhvb2sgVVJMXG4gKiAtIGB3ZWJob29rYCAgYHRhcmdldGAgaXMgYW55IEhUVFBTIFVSTDsgdGhlIHJlbGF5IHBvc3RzIHRoZVxuICogQWxlcnRtYW5hZ2VyIHYyIHdlYmhvb2sgcGF5bG9hZCB2ZXJiYXRpbVxuICogLSBgaW4tYXBwYCAgYHRhcmdldGAgaWdub3JlZDsgc3VyZmFjZXMgYXMgYW4gaW4tYXBwIG1lc3NhZ2UgdmlhXG4gKiB0aGUgZXhpc3RpbmcgYG1lc3NhZ2VzYCB0YWJsZVxuICpcbiAqIFNlY3JldHMgKiAtIEZvciBgc2xhY2tgL2B3ZWJob29rYCBjaGFubmVscywgdGhlIFVSTCBpdHNlbGYgaXMgdGhlIHNlY3JldC4gV2UgZG9uJ3RcbiAqIGxvZyBpdCBvbiBgZGFzaGJvYXJkLnVwZGF0ZWAgb3Igc3VyZmFjZSB0aGUgZnVsbCBVUkwgb24gR0VUIGVuZHBvaW50c1xuICogYWZ0ZXIgd3JpdGU7IGp1c3QgYSBtYXNrZWQgcHJldmlldyAobGFzdCAxMiBjaGFycykuIFN0b3JlZCBpbiBjbGVhclxuICogdGV4dCAgc2FtZSBwb3N0dXJlIGFzIGBjb21wbGlhbmNlX25vdGlmaWNhdGlvbl9wcmVmZXJlbmNlcy53ZWJob29rX3VybGBcbiAqIGFuZCBjb25zaXN0ZW50IHdpdGggdGhlIHJlc3Qgb2YgdGhlIGFwcCdzIHNlY3JldCBoYW5kbGluZyBmb3Igb3JnLWxldmVsXG4gKiBpbnRlZ3JhdGlvbnMuIElmIHdlIGFkZCBhIEtNUy1lbmNyeXB0aW9uIHRpZXIgZm9yIGFueSBzZWNyZXQgY29sdW1uLFxuICogdGhpcyBpcyBvbmUgb2YgdGhlIGZpcnN0IHRvIG1pZ3JhdGUuXG4gKlxuICogQHRhYmxlIG9yZ19hbGVydF9kZXN0aW5hdGlvbnNcbiAqL1xuZXhwb3J0IGNvbnN0IG9yZ0FsZXJ0RGVzdGluYXRpb24gPSBwZ1RhYmxlKCdvcmdfYWxlcnRfZGVzdGluYXRpb25zJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG5cbiAgY3JlYXRlZEJ5OiB0ZXh0KCdjcmVhdGVkX2J5Jykubm90TnVsbCgpLFxuICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCgnY3JlYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pXG4gICAgLmRlZmF1bHROb3coKVxuICAgIC5ub3ROdWxsKCksXG4gIHVwZGF0ZWRCeTogdGV4dCgndXBkYXRlZF9ieScpLm5vdE51bGwoKSxcbiAgdXBkYXRlZEF0OiB0aW1lc3RhbXAoJ3VwZGF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KVxuICAgIC5kZWZhdWx0Tm93KClcbiAgICAubm90TnVsbCgpLFxuXG4gIC8qKiAnc2xhY2snIHwgJ3dlYmhvb2snIHwgJ2luLWFwcCcgfCAnZW1haWwnICBrZXB0IHN0cmluZ2x5IHNvIGZ1dHVyZSBjaGFubmVsc1xuICAgKiAoUGFnZXJEdXR5LCDigKYpIGNhbiBiZSBhZGRlZCB3aXRob3V0IGEgc2NoZW1hIG1pZ3JhdGlvbi4gKi9cbiAgY2hhbm5lbDogdmFyY2hhcignY2hhbm5lbCcsIHsgbGVuZ3RoOiAyMCB9KVxuICAgIC4kdHlwZTwnc2xhY2snIHwgJ3dlYmhvb2snIHwgJ2luLWFwcCcgfCAnZW1haWwnPigpXG4gICAgLm5vdE51bGwoKSxcbiAgLyoqIENoYW5uZWwtc3BlY2lmaWMgdGFyZ2V0LiBTbGFjay93ZWJob29rOiBVUkwuIEVtYWlsOiBhZGRyZXNzLiBJbi1hcHA6IGlnbm9yZWQuICovXG4gIHRhcmdldDogdGV4dCgndGFyZ2V0JykuZGVmYXVsdCgnJykubm90TnVsbCgpLFxuICAvKiogRnJpZW5kbHkgbGFiZWwgc2hvd24gaW4gdGhlIHNldHRpbmdzIFVJLiAqL1xuICBsYWJlbDogdmFyY2hhcignbGFiZWwnLCB7IGxlbmd0aDogMTAwIH0pLm5vdE51bGwoKSxcblxuICAvKiogTG93ZXN0IHNldmVyaXR5IHRoYXQgdHJpZ2dlcnMgdGhpcyBkZXN0aW5hdGlvbiAoJ3dhcm5pbmcnID0gd2FybmluZytjcml0aWNhbCxcbiAgICogJ2NyaXRpY2FsJyA9IGNyaXRpY2FsIG9ubHkpLiBNaXJyb3JzIEFsZXJ0bWFuYWdlciBzZXZlcml0eSBvcmRlcmluZy4gKi9cbiAgbWluU2V2ZXJpdHk6IHZhcmNoYXIoJ21pbl9zZXZlcml0eScsIHsgbGVuZ3RoOiAxMCB9KVxuICAgIC4kdHlwZTwnd2FybmluZycgfCAnY3JpdGljYWwnPigpXG4gICAgLmRlZmF1bHQoJ3dhcm5pbmcnKVxuICAgIC5ub3ROdWxsKCksXG4gIGVuYWJsZWQ6IGJvb2xlYW4oJ2VuYWJsZWQnKS5kZWZhdWx0KHRydWUpLm5vdE51bGwoKSxcblxuICAvKiogU29mdCBkZWxldGUgc28gd2Uga2VlcCBhdWRpdCBoaXN0b3J5IG9mIHdoby1kZWxldGVkLXdoYXQuICovXG4gIGRlbGV0ZWRBdDogdGltZXN0YW1wKCdkZWxldGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGRlbGV0ZWRCeTogdGV4dCgnZGVsZXRlZF9ieScpLFxuICAvLyBTb2Z0LWRlbGV0ZSBwdXJnZSBkZWFkbGluZTogdGhlIHJldGVudGlvbiBzd2VlcCBoYXJkLWRlbGV0ZXMgdG9tYnN0b25lZFxuICAvLyByb3dzIG9uY2UgYHB1cmdlX2FmdGVyYCBoYXMgcGFzc2VkIChzZXQgb24gZGVsZXRlIGFsb25nc2lkZSBkZWxldGVkX2F0KS5cbiAgcHVyZ2VBZnRlcjogdGltZXN0YW1wKCdwdXJnZV9hZnRlcicsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxufSwgKHRhYmxlKSA9PiAoe1xuICAvLyBQYXJ0aWFsIGluZGV4IG92ZXIganVzdCB0aGUgdG9tYnN0b25lcyDigJQgZHJpdmVzIHRoZSByZXRlbnRpb24gcHVyZ2Ugc3dlZXAuXG4gIHB1cmdlSWR4OiBpbmRleCgnb3JnX2FsZXJ0X2Rlc3RpbmF0aW9uX3B1cmdlX2lkeCcpLm9uKHRhYmxlLnB1cmdlQWZ0ZXIpLndoZXJlKHNxbGBkZWxldGVkX2F0IElTIE5PVCBOVUxMYCksXG4gIC8vIFBlci1vcmcgbGlzdGluZyAgdGhlIG9ubHkgYWNjZXNzIHBhdGguXG4gIG9yZ0lkeDogaW5kZXgoJ29yZ19hbGVydF9kZXN0aW5hdGlvbl9vcmdfaWR4JylcbiAgICAub24odGFibGUub3JnSWQsIHRhYmxlLmVuYWJsZWQpLFxufSkpO1xuXG4vKipcbiAqICBQZXItb3JnIGFsZXJ0IHJ1bGVzIGF1dGhvcmVkIGJ5IG9wZXJhdG9ycy5cbiAqXG4gKiBFYWNoIHJvdyBtYXRlcmlhbGl6ZXMgaW50byBhIGBncm91cHNbXS5ydWxlc1tdYCBlbnRyeSBpbiBhIFByb21ldGhldXNcbiAqIGBydWxlX2ZpbGVzYCBZQU1MLiBUaGUgbWF0ZXJpYWxpemVyIGVuZHBvaW50XG4gKiBgR0VUIC9hcGkvb2JzZXJ2YWJpbGl0eS9hbGVydC1ydWxlcy9tYXRlcmlhbGl6ZWQueW1sYCByZW5kZXJzIGFsbCBlbmFibGVkXG4gKiBydWxlcyBhY3Jvc3MgYWxsIG9yZ3MgKGRlbGV0ZWQ9bnVsbCkgaW50byBvbmUgZG9jdW1lbnQ7IFByb21ldGhldXMgcG9sbHNcbiAqIG9yIGEgc2lkZWNhciBjb3BpZXMgaXQgaW50byB0aGUgcnVsZXMgZGlyLlxuICpcbiAqIFRlbmFuY3kgKyBzYWZldHkgKiAtIGBleHByYCBpcyB1c2VyLWF1dGhvcmVkIFByb21RTC4gVGhlIENSVUQgcm91dGUgZW5mb3JjZXMgdGhhdCB0aGVcbiAqIGV4cHJlc3Npb24gc3Vic3RyaW5nLWNvbnRhaW5zIGBvcmdfaWQ9XCI8b3JnSWQ+XCJgIHNvIGFuIG9wZXJhdG9yIGNhbid0XG4gKiB3cml0ZSBydWxlcyB0aGF0IGZpcmUgb24gb3RoZXIgb3JncycgbWV0cmljcy4gVGhpcyBpcyBhIGNvYXJzZSBnYXRlXG4gKiAoYSBtYWxmb3JtZWQgZXhwcmVzc2lvbiBjYW4gc3RpbGwgYmUgc3ludGFjdGljYWxseSB3cm9uZykgYnV0IGl0XG4gKiBjbG9zZXMgdGhlIGNyb3NzLXRlbmFudCBkYXRhIGxlYWsuIFJlYWwgUHJvbVFMIHBhcnNpbmcgKyBhdXRvbWF0aWNcbiAqIG9yZ19pZCBpbmplY3Rpb24gaXMgYSBmb2xsb3ctb24uXG4gKiAtIFRoZSBtYXRlcmlhbGl6ZWQgcnVsZSBjYXJyaWVzIGBsYWJlbHMub3JnX2lkID0gPG9yZ0lkPmAgc28gdGhlXG4gKiBhbGVydG1hbmFnZXItcmVsYXkgcm91dGVzIGZpcmluZyBhbGVydHMgdG8gdGhlIHJpZ2h0IG9yZydzXG4gKiBkZXN0aW5hdGlvbnMgKG1hdGNoZXMgdGhlIGFsZXJ0LXJlbGF5IG1vZGVsKS5cbiAqXG4gKiBAdGFibGUgb3JnX2FsZXJ0X3J1bGVzXG4gKi9cbmV4cG9ydCBjb25zdCBvcmdBbGVydFJ1bGUgPSBwZ1RhYmxlKCdvcmdfYWxlcnRfcnVsZXMnLCB7XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcblxuICBjcmVhdGVkQnk6IHRleHQoJ2NyZWF0ZWRfYnknKS5ub3ROdWxsKCksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbiAgdXBkYXRlZEJ5OiB0ZXh0KCd1cGRhdGVkX2J5Jykubm90TnVsbCgpLFxuICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG5cbiAgLyoqIE9wZXJhdG9yLXN1cHBsaWVkIHJ1bGUgbmFtZS4gU2FuaXRpemVkIGludG8gYSB2YWxpZCBQcm9tIGFsZXJ0IG5hbWUgYXRcbiAgICogbWF0ZXJpYWxpemF0aW9uIHRpbWUgKGJlY29tZXMgYE9yZ1J1bGVfPG9yZ0lkPl88c2x1Zz5gIHRvIGF2b2lkIG5hbWVcbiAgICogY29sbGlzaW9ucyBhY3Jvc3Mgb3JncykuICovXG4gIG5hbWU6IHZhcmNoYXIoJ25hbWUnLCB7IGxlbmd0aDogMTAwIH0pLm5vdE51bGwoKSxcbiAgLyoqIFByb21RTCBleHByZXNzaW9uLiBNVVNUIHN1YnN0cmluZy1jb250YWluIGBvcmdfaWQ9XCI8b3JnSWQ+XCJgLiAqL1xuICBleHByOiB0ZXh0KCdleHByJykubm90TnVsbCgpLFxuICAvKiogYGZvcjogNW1gIHN0eWxlIGR1cmF0aW9uLiBWYWxpZGF0ZWQgYWdhaW5zdCBQcm9tJ3MgZHVyYXRpb24gcmVnZXguICovXG4gIGZvckR1cmF0aW9uOiB2YXJjaGFyKCdmb3JfZHVyYXRpb24nLCB7IGxlbmd0aDogMjAgfSkuZGVmYXVsdCgnNW0nKS5ub3ROdWxsKCksXG4gIC8qKiAnd2FybmluZycgfCAnY3JpdGljYWwnICBtYXRjaGVzIHRoZSBwbGF0Zm9ybS13aWRlIHNldmVyaXR5IGxhZGRlci4gKi9cbiAgc2V2ZXJpdHk6IHZhcmNoYXIoJ3NldmVyaXR5JywgeyBsZW5ndGg6IDIwIH0pXG4gICAgLiR0eXBlPCd3YXJuaW5nJyB8ICdjcml0aWNhbCc+KClcbiAgICAuZGVmYXVsdCgnd2FybmluZycpXG4gICAgLm5vdE51bGwoKSxcbiAgLyoqIEFsZXJ0bWFuYWdlciBgc3VtbWFyeWAgYW5ub3RhdGlvbi4gU3VwcG9ydHMgYHt7ICR2YWx1ZSB9fWAuICovXG4gIHN1bW1hcnk6IHRleHQoJ3N1bW1hcnknKS5ub3ROdWxsKCksXG4gIC8qKiBBbGVydG1hbmFnZXIgYGRlc2NyaXB0aW9uYCBhbm5vdGF0aW9uLiBPcHRpb25hbDsgJycgaXMgZmluZS4gKi9cbiAgZGVzY3JpcHRpb246IHRleHQoJ2Rlc2NyaXB0aW9uJykuZGVmYXVsdCgnJykubm90TnVsbCgpLFxuXG4gIC8qKiBEaXNhYmxlZCBydWxlcyBkb24ndCBtYXRlcmlhbGl6ZS4gTGV0cyBvcGVyYXRvcnMgc3RhZ2UgcnVsZXMgd2l0aG91dCBmaXJpbmcuICovXG4gIGVuYWJsZWQ6IGJvb2xlYW4oJ2VuYWJsZWQnKS5kZWZhdWx0KHRydWUpLm5vdE51bGwoKSxcblxuICAvKiogU29mdCBkZWxldGUgc28gd2Uga2VlcCBhdWRpdCBvZiB3aG8tZGVsZXRlZC13aGF0LiAqL1xuICBkZWxldGVkQXQ6IHRpbWVzdGFtcCgnZGVsZXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBkZWxldGVkQnk6IHRleHQoJ2RlbGV0ZWRfYnknKSxcbiAgLy8gU29mdC1kZWxldGUgcHVyZ2UgZGVhZGxpbmU6IHRoZSByZXRlbnRpb24gc3dlZXAgaGFyZC1kZWxldGVzIHRvbWJzdG9uZWRcbiAgLy8gcm93cyBvbmNlIGBwdXJnZV9hZnRlcmAgaGFzIHBhc3NlZCAoc2V0IG9uIGRlbGV0ZSBhbG9uZ3NpZGUgZGVsZXRlZF9hdCkuXG4gIHB1cmdlQWZ0ZXI6IHRpbWVzdGFtcCgncHVyZ2VfYWZ0ZXInLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbn0sICh0YWJsZSkgPT4gKHtcbiAgLy8gUGFydGlhbCBpbmRleCBvdmVyIGp1c3QgdGhlIHRvbWJzdG9uZXMg4oCUIGRyaXZlcyB0aGUgcmV0ZW50aW9uIHB1cmdlIHN3ZWVwLlxuICBwdXJnZUlkeDogaW5kZXgoJ29yZ19hbGVydF9ydWxlX3B1cmdlX2lkeCcpLm9uKHRhYmxlLnB1cmdlQWZ0ZXIpLndoZXJlKHNxbGBkZWxldGVkX2F0IElTIE5PVCBOVUxMYCksXG4gIC8vIFBlci1vcmcgbGlzdGluZyArIG1hdGVyaWFsaXplcidzIGVuYWJsZWQtb25seSBzY2FuLlxuICBvcmdFbmFibGVkSWR4OiBpbmRleCgnb3JnX2FsZXJ0X3J1bGVfb3JnX2VuYWJsZWRfaWR4JylcbiAgICAub24odGFibGUub3JnSWQsIHRhYmxlLmVuYWJsZWQpLFxuICAvLyBVbmlxdWUgd2l0aGluIGFuIG9yZyBzbyBvcGVyYXRvcnMgY2FuJ3QgYWNjaWRlbnRhbGx5IGNsb25lIGEgcnVsZS5cbiAgb3JnTmFtZVVxOiB1bmlxdWVJbmRleCgnb3JnX2FsZXJ0X3J1bGVfb3JnX25hbWVfdXEnKVxuICAgIC5vbih0YWJsZS5vcmdJZCwgdGFibGUubmFtZSlcbiAgICAud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxufSkpO1xuXG5leHBvcnQgdHlwZSBPcmdBbGVydERlc3RpbmF0aW9uID0gdHlwZW9mIG9yZ0FsZXJ0RGVzdGluYXRpb24uJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgT3JnQWxlcnREZXN0aW5hdGlvbkluc2VydCA9IHR5cGVvZiBvcmdBbGVydERlc3RpbmF0aW9uLiRpbmZlckluc2VydDtcbmV4cG9ydCB0eXBlIE9yZ0FsZXJ0RGVzdGluYXRpb25VcGRhdGUgPSBQYXJ0aWFsPE9taXQ8T3JnQWxlcnREZXN0aW5hdGlvbkluc2VydCwgJ2lkJyB8ICdjcmVhdGVkQXQnIHwgJ2NyZWF0ZWRCeScgfCAnb3JnSWQnPj47XG4iXX0=
@@ -301,6 +301,23 @@ export declare const compliancePolicy: import("drizzle-orm/pg-core").PgTableWith
301
301
  identity: undefined;
302
302
  generated: undefined;
303
303
  }, {}, {}>;
304
+ purgeAfter: import("drizzle-orm/pg-core").PgColumn<{
305
+ name: "purge_after";
306
+ tableName: "compliance_policies";
307
+ dataType: "date";
308
+ columnType: "PgTimestamp";
309
+ data: Date;
310
+ driverParam: string;
311
+ notNull: false;
312
+ hasDefault: false;
313
+ isPrimaryKey: false;
314
+ isAutoincrement: false;
315
+ hasRuntimeDefault: false;
316
+ enumValues: undefined;
317
+ baseColumn: never;
318
+ identity: undefined;
319
+ generated: undefined;
320
+ }, {}, {}>;
304
321
  };
305
322
  dialect: 'pg';
306
323
  }>;
@@ -834,6 +851,23 @@ export declare const complianceRule: import("drizzle-orm/pg-core").PgTableWithCo
834
851
  identity: undefined;
835
852
  generated: undefined;
836
853
  }, {}, {}>;
854
+ purgeAfter: import("drizzle-orm/pg-core").PgColumn<{
855
+ name: "purge_after";
856
+ tableName: "compliance_rules";
857
+ dataType: "date";
858
+ columnType: "PgTimestamp";
859
+ data: Date;
860
+ driverParam: string;
861
+ notNull: false;
862
+ hasDefault: false;
863
+ isPrimaryKey: false;
864
+ isAutoincrement: false;
865
+ hasRuntimeDefault: false;
866
+ enumValues: undefined;
867
+ baseColumn: never;
868
+ identity: undefined;
869
+ generated: undefined;
870
+ }, {}, {}>;
837
871
  };
838
872
  dialect: 'pg';
839
873
  }>;