@parsrun/payments 0.1.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.
@@ -0,0 +1,4191 @@
1
+ import { PaymentProviderType } from './types.js';
2
+ import * as drizzle_orm_pg_core from 'drizzle-orm/pg-core';
3
+
4
+ /**
5
+ * @parsrun/payments - Dunning Types
6
+ * Types for dunning automation and payment recovery
7
+ */
8
+
9
+ /**
10
+ * Payment failure reason categories
11
+ * Used for smart retry logic
12
+ */
13
+ type PaymentFailureCategory = "card_declined" | "insufficient_funds" | "card_expired" | "invalid_card" | "processing_error" | "authentication_required" | "fraud_suspected" | "velocity_exceeded" | "unknown";
14
+ /**
15
+ * Payment failure details
16
+ */
17
+ interface PaymentFailure {
18
+ /** Unique failure ID */
19
+ id: string;
20
+ /** Customer ID */
21
+ customerId: string;
22
+ /** Subscription ID */
23
+ subscriptionId: string;
24
+ /** Invoice ID (if applicable) */
25
+ invoiceId?: string;
26
+ /** Amount that failed (cents) */
27
+ amount: number;
28
+ /** Currency */
29
+ currency: string;
30
+ /** Failure category */
31
+ category: PaymentFailureCategory;
32
+ /** Raw error code from provider */
33
+ errorCode: string;
34
+ /** Human-readable error message */
35
+ errorMessage: string;
36
+ /** Provider type */
37
+ provider: PaymentProviderType;
38
+ /** When the failure occurred */
39
+ failedAt: Date;
40
+ /** Number of retry attempts so far */
41
+ retryCount: number;
42
+ /** Next scheduled retry (if any) */
43
+ nextRetryAt?: Date;
44
+ /** Whether this failure is recoverable */
45
+ isRecoverable: boolean;
46
+ /** Metadata */
47
+ metadata?: Record<string, unknown>;
48
+ }
49
+ /**
50
+ * Action to take in a dunning step
51
+ */
52
+ type DunningAction = "notify" | "retry_payment" | "limit_features" | "suspend" | "cancel" | "custom";
53
+ /**
54
+ * Notification channel
55
+ */
56
+ type NotificationChannel = "email" | "sms" | "in_app" | "webhook" | "push";
57
+ /**
58
+ * Dunning step definition
59
+ */
60
+ interface DunningStep {
61
+ /** Step ID (unique within sequence) */
62
+ id: string;
63
+ /** Step name for display */
64
+ name: string;
65
+ /** Days after initial failure (0 = immediately) */
66
+ daysAfterFailure: number;
67
+ /** Hours offset within the day (for precise timing) */
68
+ hoursOffset?: number;
69
+ /** Actions to take */
70
+ actions: DunningAction[];
71
+ /** Notification channels to use */
72
+ notificationChannels?: NotificationChannel[];
73
+ /** Notification template ID */
74
+ notificationTemplateId?: string;
75
+ /** Whether to retry payment in this step */
76
+ retryPayment?: boolean;
77
+ /** Access level to set (for limit_features action) */
78
+ accessLevel?: "full" | "limited" | "read_only" | "none";
79
+ /** Whether this step is final (ends the sequence) */
80
+ isFinal?: boolean;
81
+ /** Custom action handler */
82
+ customAction?: (context: DunningContext) => Promise<void>;
83
+ /** Condition to execute this step */
84
+ condition?: (context: DunningContext) => boolean | Promise<boolean>;
85
+ /** Metadata */
86
+ metadata?: Record<string, unknown>;
87
+ }
88
+ /**
89
+ * Dunning sequence definition
90
+ */
91
+ interface DunningSequence {
92
+ /** Sequence ID */
93
+ id: string;
94
+ /** Sequence name */
95
+ name: string;
96
+ /** Description */
97
+ description?: string;
98
+ /** Steps in order */
99
+ steps: DunningStep[];
100
+ /** Maximum days before auto-cancel (if not in steps) */
101
+ maxDurationDays: number;
102
+ /** Whether sequence is active */
103
+ isActive: boolean;
104
+ /** Metadata */
105
+ metadata?: Record<string, unknown>;
106
+ }
107
+ /**
108
+ * Dunning process status
109
+ */
110
+ type DunningStatus = "active" | "recovered" | "exhausted" | "canceled" | "paused";
111
+ /**
112
+ * Dunning process state for a customer
113
+ */
114
+ interface DunningState {
115
+ /** State ID */
116
+ id: string;
117
+ /** Customer ID */
118
+ customerId: string;
119
+ /** Subscription ID */
120
+ subscriptionId: string;
121
+ /** Sequence ID being executed */
122
+ sequenceId: string;
123
+ /** Current step index */
124
+ currentStepIndex: number;
125
+ /** Current step ID */
126
+ currentStepId: string;
127
+ /** Status */
128
+ status: DunningStatus;
129
+ /** Initial failure that started dunning */
130
+ initialFailure: PaymentFailure;
131
+ /** All failures during this dunning */
132
+ failures: PaymentFailure[];
133
+ /** Steps executed so far */
134
+ executedSteps: ExecutedStep[];
135
+ /** When dunning started */
136
+ startedAt: Date;
137
+ /** When last step was executed */
138
+ lastStepAt?: Date;
139
+ /** When next step is scheduled */
140
+ nextStepAt?: Date;
141
+ /** When dunning ended (if ended) */
142
+ endedAt?: Date;
143
+ /** End reason */
144
+ endReason?: "payment_recovered" | "max_retries" | "manually_canceled" | "subscription_canceled";
145
+ /** Total retry attempts */
146
+ totalRetryAttempts: number;
147
+ /** Metadata */
148
+ metadata?: Record<string, unknown>;
149
+ }
150
+ /**
151
+ * Executed step record
152
+ */
153
+ interface ExecutedStep {
154
+ /** Step ID */
155
+ stepId: string;
156
+ /** Step name */
157
+ stepName: string;
158
+ /** When executed */
159
+ executedAt: Date;
160
+ /** Actions taken */
161
+ actionsTaken: DunningAction[];
162
+ /** Whether payment was retried */
163
+ paymentRetried: boolean;
164
+ /** Whether payment succeeded (if retried) */
165
+ paymentSucceeded?: boolean;
166
+ /** Notifications sent */
167
+ notificationsSent: NotificationChannel[];
168
+ /** Any errors during execution */
169
+ error?: string;
170
+ }
171
+ /**
172
+ * Context passed to dunning step handlers
173
+ */
174
+ interface DunningContext {
175
+ /** Dunning state */
176
+ state: DunningState;
177
+ /** Current step being executed */
178
+ step: DunningStep;
179
+ /** Latest payment failure */
180
+ latestFailure: PaymentFailure;
181
+ /** Customer info */
182
+ customer: {
183
+ id: string;
184
+ email?: string;
185
+ name?: string;
186
+ metadata?: Record<string, unknown>;
187
+ };
188
+ /** Subscription info */
189
+ subscription: {
190
+ id: string;
191
+ planId?: string;
192
+ status: string;
193
+ currentPeriodEnd?: Date;
194
+ };
195
+ /** Days since initial failure */
196
+ daysSinceFailure: number;
197
+ /** Total amount owed */
198
+ amountOwed: number;
199
+ /** Currency */
200
+ currency: string;
201
+ }
202
+ /**
203
+ * Retry strategy based on failure category
204
+ */
205
+ interface RetryStrategy {
206
+ /** Failure category this applies to */
207
+ category: PaymentFailureCategory;
208
+ /** Whether to retry at all */
209
+ shouldRetry: boolean;
210
+ /** Delay before first retry (hours) */
211
+ initialDelayHours: number;
212
+ /** Maximum retry attempts for this category */
213
+ maxRetries: number;
214
+ /** Delay multiplier for subsequent retries */
215
+ backoffMultiplier: number;
216
+ /** Maximum delay (hours) */
217
+ maxDelayHours: number;
218
+ /** Optimal retry times (hour of day, 0-23) */
219
+ optimalRetryHours?: number[];
220
+ /** Optimal retry days (0=Sunday, 1=Monday, etc.) */
221
+ optimalRetryDays?: number[];
222
+ }
223
+ /**
224
+ * Payment retry result
225
+ */
226
+ interface RetryResult {
227
+ /** Whether retry was successful */
228
+ success: boolean;
229
+ /** New failure if retry failed */
230
+ failure?: PaymentFailure;
231
+ /** Transaction ID if successful */
232
+ transactionId?: string;
233
+ /** When retry was attempted */
234
+ attemptedAt: Date;
235
+ /** Provider response */
236
+ providerResponse?: Record<string, unknown>;
237
+ }
238
+ /**
239
+ * Dunning notification request
240
+ */
241
+ interface DunningNotification {
242
+ /** Channel to send on */
243
+ channel: NotificationChannel;
244
+ /** Template ID */
245
+ templateId: string;
246
+ /** Recipient */
247
+ recipient: {
248
+ customerId: string;
249
+ email?: string;
250
+ phone?: string;
251
+ userId?: string;
252
+ };
253
+ /** Template variables */
254
+ variables: {
255
+ customerName?: string;
256
+ amount: number;
257
+ currency: string;
258
+ daysSinceFailure: number;
259
+ daysUntilSuspension?: number;
260
+ daysUntilCancellation?: number;
261
+ updatePaymentUrl?: string;
262
+ invoiceUrl?: string;
263
+ supportUrl?: string;
264
+ [key: string]: unknown;
265
+ };
266
+ /** Dunning context for reference */
267
+ context: DunningContext;
268
+ }
269
+ /**
270
+ * Notification result
271
+ */
272
+ interface NotificationResult {
273
+ /** Whether notification was sent */
274
+ success: boolean;
275
+ /** Channel used */
276
+ channel: NotificationChannel;
277
+ /** External ID (email ID, SMS ID, etc.) */
278
+ externalId?: string;
279
+ /** Error if failed */
280
+ error?: string;
281
+ /** When sent */
282
+ sentAt: Date;
283
+ }
284
+ /**
285
+ * Dunning event types
286
+ */
287
+ type DunningEventType = "dunning.started" | "dunning.step_executed" | "dunning.payment_retried" | "dunning.payment_recovered" | "dunning.notification_sent" | "dunning.access_limited" | "dunning.suspended" | "dunning.canceled" | "dunning.exhausted" | "dunning.paused" | "dunning.resumed";
288
+ /**
289
+ * Dunning event
290
+ */
291
+ interface DunningEvent {
292
+ /** Event type */
293
+ type: DunningEventType;
294
+ /** Customer ID */
295
+ customerId: string;
296
+ /** Subscription ID */
297
+ subscriptionId: string;
298
+ /** Dunning state ID */
299
+ dunningStateId: string;
300
+ /** Event timestamp */
301
+ timestamp: Date;
302
+ /** Event-specific data */
303
+ data: Record<string, unknown>;
304
+ }
305
+ /**
306
+ * Dunning event handler
307
+ */
308
+ type DunningEventHandler = (event: DunningEvent) => void | Promise<void>;
309
+ /**
310
+ * Dunning manager configuration
311
+ */
312
+ interface DunningManagerConfig {
313
+ /** Default dunning sequence */
314
+ defaultSequence: DunningSequence;
315
+ /** Sequences by plan tier (optional) */
316
+ sequencesByPlanTier?: Record<number, DunningSequence>;
317
+ /** Payment retry strategies */
318
+ retryStrategies?: RetryStrategy[];
319
+ /** Notification handler */
320
+ onNotification?: (notification: DunningNotification) => Promise<NotificationResult>;
321
+ /** Payment retry handler (called to actually retry payment) */
322
+ onRetryPayment?: (context: DunningContext) => Promise<RetryResult>;
323
+ /** Access update handler */
324
+ onAccessUpdate?: (customerId: string, accessLevel: "full" | "limited" | "read_only" | "none") => Promise<void>;
325
+ /** Subscription cancel handler */
326
+ onCancelSubscription?: (subscriptionId: string, reason: string) => Promise<void>;
327
+ /** Event handlers */
328
+ onEvent?: DunningEventHandler;
329
+ /** Logger */
330
+ logger?: DunningLogger;
331
+ /** URLs for notification templates */
332
+ urls?: {
333
+ updatePayment?: string;
334
+ viewInvoice?: string;
335
+ support?: string;
336
+ };
337
+ /** Timezone for scheduling (default: UTC) */
338
+ timezone?: string;
339
+ }
340
+ /**
341
+ * Logger interface
342
+ */
343
+ interface DunningLogger {
344
+ debug(message: string, data?: Record<string, unknown>): void;
345
+ info(message: string, data?: Record<string, unknown>): void;
346
+ warn(message: string, data?: Record<string, unknown>): void;
347
+ error(message: string, data?: Record<string, unknown>): void;
348
+ }
349
+ /**
350
+ * Dunning storage interface
351
+ */
352
+ interface DunningStorage {
353
+ getDunningState(customerId: string): Promise<DunningState | null>;
354
+ getActiveDunningStates(): Promise<DunningState[]>;
355
+ getDunningStatesByStatus(status: DunningStatus): Promise<DunningState[]>;
356
+ saveDunningState(state: DunningState): Promise<void>;
357
+ updateDunningState(id: string, updates: Partial<DunningState>): Promise<void>;
358
+ recordPaymentFailure(failure: PaymentFailure): Promise<void>;
359
+ getPaymentFailures(customerId: string, limit?: number): Promise<PaymentFailure[]>;
360
+ getScheduledSteps(before: Date): Promise<Array<{
361
+ stateId: string;
362
+ stepId: string;
363
+ scheduledAt: Date;
364
+ }>>;
365
+ scheduleStep(stateId: string, stepId: string, scheduledAt: Date): Promise<void>;
366
+ removeScheduledStep(stateId: string, stepId: string): Promise<void>;
367
+ }
368
+
369
+ /**
370
+ * @parsrun/payments - Dunning Sequence
371
+ * Default sequences and step builders for dunning automation
372
+ */
373
+
374
+ /**
375
+ * Fluent builder for dunning steps
376
+ */
377
+ declare class DunningStepBuilder {
378
+ private step;
379
+ constructor(id: string, name: string);
380
+ /**
381
+ * Set days after initial failure
382
+ */
383
+ afterDays(days: number): this;
384
+ /**
385
+ * Set hours offset within the day
386
+ */
387
+ atHour(hour: number): this;
388
+ /**
389
+ * Add actions to take
390
+ */
391
+ withActions(...actions: DunningAction[]): this;
392
+ /**
393
+ * Add notification channels
394
+ */
395
+ notify(...channels: NotificationChannel[]): this;
396
+ /**
397
+ * Set notification template
398
+ */
399
+ withTemplate(templateId: string): this;
400
+ /**
401
+ * Enable payment retry in this step
402
+ */
403
+ retryPayment(retry?: boolean): this;
404
+ /**
405
+ * Set access level for this step
406
+ */
407
+ setAccessLevel(level: "full" | "limited" | "read_only" | "none"): this;
408
+ /**
409
+ * Mark this as the final step
410
+ */
411
+ final(isFinal?: boolean): this;
412
+ /**
413
+ * Add custom action handler
414
+ */
415
+ withCustomAction(handler: (context: DunningContext) => Promise<void>): this;
416
+ /**
417
+ * Add condition for this step
418
+ */
419
+ when(condition: (context: DunningContext) => boolean | Promise<boolean>): this;
420
+ /**
421
+ * Add metadata
422
+ */
423
+ withMetadata(metadata: Record<string, unknown>): this;
424
+ /**
425
+ * Build the step
426
+ */
427
+ build(): DunningStep;
428
+ }
429
+ /**
430
+ * Create a new dunning step builder
431
+ */
432
+ declare function step(id: string, name: string): DunningStepBuilder;
433
+ /**
434
+ * Fluent builder for dunning sequences
435
+ */
436
+ declare class DunningSequenceBuilder {
437
+ private sequence;
438
+ constructor(id: string, name: string);
439
+ /**
440
+ * Set description
441
+ */
442
+ describe(description: string): this;
443
+ /**
444
+ * Add steps
445
+ */
446
+ withSteps(...steps: DunningStep[]): this;
447
+ /**
448
+ * Set maximum duration before auto-cancel
449
+ */
450
+ maxDays(days: number): this;
451
+ /**
452
+ * Set active status
453
+ */
454
+ active(isActive?: boolean): this;
455
+ /**
456
+ * Add metadata
457
+ */
458
+ withMetadata(metadata: Record<string, unknown>): this;
459
+ /**
460
+ * Build the sequence
461
+ */
462
+ build(): DunningSequence;
463
+ }
464
+ /**
465
+ * Create a new dunning sequence builder
466
+ */
467
+ declare function sequence(id: string, name: string): DunningSequenceBuilder;
468
+ /**
469
+ * Standard SaaS dunning sequence (28 days)
470
+ *
471
+ * Day 0: Immediate retry + email notification
472
+ * Day 1: Retry + email reminder
473
+ * Day 3: Retry + email warning
474
+ * Day 7: Retry + email + in-app notification, limit features
475
+ * Day 14: Retry + email, suspend account
476
+ * Day 21: Final warning email
477
+ * Day 28: Cancel subscription
478
+ */
479
+ declare const standardSaasSequence: DunningSequence;
480
+ /**
481
+ * Aggressive dunning sequence (14 days)
482
+ * For lower-tier plans or high-risk customers
483
+ */
484
+ declare const aggressiveSequence: DunningSequence;
485
+ /**
486
+ * Lenient dunning sequence (45 days)
487
+ * For enterprise or high-value customers
488
+ */
489
+ declare const lenientSequence: DunningSequence;
490
+ /**
491
+ * Minimal dunning sequence (7 days)
492
+ * For free-to-paid conversions or trials
493
+ */
494
+ declare const minimalSequence: DunningSequence;
495
+ /**
496
+ * Default sequences by tier
497
+ */
498
+ declare const defaultSequences: Record<string, DunningSequence>;
499
+ /**
500
+ * Get sequence by tier level
501
+ *
502
+ * @param tier - Plan tier (0=free, 1=starter, 2=pro, 3=enterprise)
503
+ * @returns Appropriate dunning sequence
504
+ */
505
+ declare function getSequenceByTier(tier: number): DunningSequence;
506
+
507
+ /**
508
+ * @parsrun/payments - Payment Retry Strategy
509
+ * Smart retry logic based on payment failure codes
510
+ */
511
+
512
+ /**
513
+ * Map provider error codes to failure categories
514
+ */
515
+ interface ErrorCodeMapping {
516
+ provider: string;
517
+ codes: Record<string, PaymentFailureCategory>;
518
+ }
519
+ /**
520
+ * Stripe error code mappings
521
+ */
522
+ declare const stripeErrorCodes: ErrorCodeMapping;
523
+ /**
524
+ * Paddle error code mappings
525
+ */
526
+ declare const paddleErrorCodes: ErrorCodeMapping;
527
+ /**
528
+ * iyzico error code mappings
529
+ */
530
+ declare const iyzicoErrorCodes: ErrorCodeMapping;
531
+ /**
532
+ * All provider mappings
533
+ */
534
+ declare const allErrorCodeMappings: ErrorCodeMapping[];
535
+ /**
536
+ * Default retry strategies by failure category
537
+ */
538
+ declare const defaultRetryStrategies: RetryStrategy[];
539
+ /**
540
+ * Payment retry calculator
541
+ * Determines optimal retry timing based on failure category
542
+ */
543
+ declare class PaymentRetryCalculator {
544
+ private strategies;
545
+ private errorMappings;
546
+ private logger?;
547
+ constructor(strategies?: RetryStrategy[], errorMappings?: ErrorCodeMapping[], logger?: DunningLogger);
548
+ /**
549
+ * Map error code to failure category
550
+ */
551
+ categorizeError(provider: string, errorCode: string): PaymentFailureCategory;
552
+ /**
553
+ * Get retry strategy for failure category
554
+ */
555
+ getStrategy(category: PaymentFailureCategory): RetryStrategy;
556
+ /**
557
+ * Check if a failure should be retried
558
+ */
559
+ shouldRetry(failure: PaymentFailure): boolean;
560
+ /**
561
+ * Calculate next retry time
562
+ */
563
+ calculateNextRetry(failure: PaymentFailure): Date | null;
564
+ /**
565
+ * Optimize retry time based on strategy
566
+ */
567
+ private optimizeRetryTime;
568
+ /**
569
+ * Find nearest value in array
570
+ */
571
+ private findNearestValue;
572
+ /**
573
+ * Check if failure is recoverable (can be retried eventually)
574
+ */
575
+ isRecoverable(category: PaymentFailureCategory): boolean;
576
+ /**
577
+ * Get recommendation message for failure category
578
+ */
579
+ getRecommendation(category: PaymentFailureCategory): string;
580
+ }
581
+ /**
582
+ * Payment retry handler configuration
583
+ */
584
+ interface PaymentRetrierConfig {
585
+ /** Retry calculator */
586
+ calculator?: PaymentRetryCalculator;
587
+ /** Function to actually retry the payment */
588
+ retryPayment: (context: DunningContext) => Promise<RetryResult>;
589
+ /** Logger */
590
+ logger?: DunningLogger;
591
+ /** Maximum retries per dunning session */
592
+ maxSessionRetries?: number;
593
+ }
594
+ /**
595
+ * Payment retrier
596
+ * Handles intelligent payment retry logic
597
+ */
598
+ declare class PaymentRetrier {
599
+ private calculator;
600
+ private retryPayment;
601
+ private logger?;
602
+ private maxSessionRetries;
603
+ constructor(config: PaymentRetrierConfig);
604
+ /**
605
+ * Attempt to retry a payment
606
+ */
607
+ retry(context: DunningContext): Promise<RetryResult>;
608
+ /**
609
+ * Get next retry time for a failure
610
+ */
611
+ getNextRetryTime(failure: PaymentFailure): Date | null;
612
+ /**
613
+ * Check if failure is recoverable
614
+ */
615
+ isRecoverable(failure: PaymentFailure): boolean;
616
+ /**
617
+ * Categorize an error code
618
+ */
619
+ categorizeError(provider: string, errorCode: string): PaymentFailureCategory;
620
+ }
621
+ /**
622
+ * Create a payment retry calculator
623
+ */
624
+ declare function createPaymentRetryCalculator(strategies?: RetryStrategy[], errorMappings?: ErrorCodeMapping[], logger?: DunningLogger): PaymentRetryCalculator;
625
+ /**
626
+ * Create a payment retrier
627
+ */
628
+ declare function createPaymentRetrier(config: PaymentRetrierConfig): PaymentRetrier;
629
+
630
+ /**
631
+ * @parsrun/payments - Dunning Manager
632
+ * Main orchestrator for dunning state management and step execution
633
+ */
634
+
635
+ /**
636
+ * Dunning Manager
637
+ * Orchestrates the dunning process including state management and step execution
638
+ */
639
+ declare class DunningManager {
640
+ private config;
641
+ private storage;
642
+ private eventHandlers;
643
+ private logger?;
644
+ constructor(config: DunningManagerConfig, storage: DunningStorage);
645
+ /**
646
+ * Start dunning process for a payment failure
647
+ */
648
+ startDunning(failure: PaymentFailure): Promise<DunningState>;
649
+ /**
650
+ * Execute the next step in dunning sequence
651
+ */
652
+ executeStep(stateId: string): Promise<ExecutedStep | null>;
653
+ /**
654
+ * Recover from dunning (payment successful)
655
+ */
656
+ recoverDunning(stateOrId: DunningState | string, reason?: "payment_recovered"): Promise<void>;
657
+ /**
658
+ * Pause dunning process
659
+ */
660
+ pauseDunning(stateId: string): Promise<void>;
661
+ /**
662
+ * Resume paused dunning
663
+ */
664
+ resumeDunning(stateId: string): Promise<void>;
665
+ /**
666
+ * Cancel dunning manually
667
+ */
668
+ cancelDunning(stateId: string, reason?: string): Promise<void>;
669
+ /**
670
+ * Get dunning state by customer ID
671
+ */
672
+ getDunningState(customerId: string): Promise<DunningState | null>;
673
+ /**
674
+ * Get dunning state by ID
675
+ */
676
+ getDunningStateById(stateId: string): Promise<DunningState | null>;
677
+ /**
678
+ * Get all active dunning states
679
+ */
680
+ getActiveDunningStates(): Promise<DunningState[]>;
681
+ /**
682
+ * Get dunning states by status
683
+ */
684
+ getDunningStatesByStatus(status: DunningStatus): Promise<DunningState[]>;
685
+ /**
686
+ * Get scheduled steps due for execution
687
+ */
688
+ getScheduledSteps(before: Date): Promise<Array<{
689
+ stateId: string;
690
+ stepId: string;
691
+ scheduledAt: Date;
692
+ }>>;
693
+ /**
694
+ * Register event handler
695
+ */
696
+ onEvent(handler: DunningEventHandler): this;
697
+ /**
698
+ * Emit dunning event
699
+ */
700
+ private emitEvent;
701
+ /**
702
+ * Perform step actions
703
+ */
704
+ private performStepActions;
705
+ /**
706
+ * Send notifications for a step
707
+ */
708
+ private sendNotifications;
709
+ /**
710
+ * Advance to next step
711
+ */
712
+ private advanceToNextStep;
713
+ /**
714
+ * Mark dunning as exhausted (all steps completed without recovery)
715
+ */
716
+ private exhaustDunning;
717
+ /**
718
+ * Build dunning context for step execution
719
+ */
720
+ private buildContext;
721
+ /**
722
+ * Calculate when a step should execute
723
+ */
724
+ private calculateStepTime;
725
+ /**
726
+ * Get sequence for a customer (by tier if configured)
727
+ */
728
+ private getSequenceForCustomer;
729
+ /**
730
+ * Get sequence by ID
731
+ */
732
+ private getSequence;
733
+ /**
734
+ * Generate unique ID
735
+ */
736
+ private generateId;
737
+ }
738
+ /**
739
+ * Create a dunning manager
740
+ */
741
+ declare function createDunningManager(config: DunningManagerConfig, storage: DunningStorage): DunningManager;
742
+ /**
743
+ * Create default dunning config
744
+ */
745
+ declare function createDefaultDunningConfig(overrides?: Partial<DunningManagerConfig>): DunningManagerConfig;
746
+
747
+ /**
748
+ * @parsrun/payments - Dunning Scheduler
749
+ * Automated scheduling and execution of dunning steps
750
+ */
751
+
752
+ /**
753
+ * Dunning scheduler configuration
754
+ */
755
+ interface DunningSchedulerConfig {
756
+ /** Dunning manager instance */
757
+ manager: DunningManager;
758
+ /** Poll interval in milliseconds (default: 60000 = 1 minute) */
759
+ pollInterval?: number;
760
+ /** Batch size for processing (default: 50) */
761
+ batchSize?: number;
762
+ /** Maximum concurrent executions (default: 5) */
763
+ maxConcurrent?: number;
764
+ /** Timezone for scheduling (default: UTC) */
765
+ timezone?: string;
766
+ /** Logger */
767
+ logger?: DunningLogger;
768
+ /** Error handler */
769
+ onError?: (error: Error, stateId: string) => void | Promise<void>;
770
+ /** Before step execution hook */
771
+ beforeStep?: (stateId: string, stepId: string) => void | Promise<void>;
772
+ /** After step execution hook */
773
+ afterStep?: (stateId: string, stepId: string, success: boolean) => void | Promise<void>;
774
+ }
775
+ /**
776
+ * Dunning Scheduler
777
+ * Handles automated execution of scheduled dunning steps
778
+ */
779
+ declare class DunningScheduler {
780
+ private manager;
781
+ private pollInterval;
782
+ private batchSize;
783
+ private maxConcurrent;
784
+ private logger?;
785
+ private onError?;
786
+ private beforeStep?;
787
+ private afterStep?;
788
+ private isRunning;
789
+ private pollTimer?;
790
+ private processingStates;
791
+ /** Timezone for scheduling (reserved for future use) */
792
+ readonly timezone: string;
793
+ constructor(config: DunningSchedulerConfig);
794
+ /**
795
+ * Start the scheduler
796
+ */
797
+ start(): void;
798
+ /**
799
+ * Stop the scheduler
800
+ */
801
+ stop(): void;
802
+ /**
803
+ * Check if scheduler is running
804
+ */
805
+ get running(): boolean;
806
+ /**
807
+ * Get current processing count
808
+ */
809
+ get processingCount(): number;
810
+ /**
811
+ * Poll for scheduled steps
812
+ */
813
+ private poll;
814
+ /**
815
+ * Process all scheduled steps that are due
816
+ */
817
+ processScheduledSteps(): Promise<number>;
818
+ /**
819
+ * Execute a single scheduled step
820
+ */
821
+ private executeScheduledStep;
822
+ /**
823
+ * Manually trigger processing (for testing or cron jobs)
824
+ */
825
+ trigger(): Promise<number>;
826
+ /**
827
+ * Process a specific dunning state immediately
828
+ */
829
+ processNow(stateId: string): Promise<boolean>;
830
+ /**
831
+ * Split array into chunks
832
+ */
833
+ private chunk;
834
+ }
835
+ /**
836
+ * Create a dunning scheduler
837
+ */
838
+ declare function createDunningScheduler(config: DunningSchedulerConfig): DunningScheduler;
839
+ /**
840
+ * Create a cron-compatible handler for dunning processing
841
+ *
842
+ * @example
843
+ * ```typescript
844
+ * // In a cron job or serverless function
845
+ * export async function handler() {
846
+ * const processor = createDunningCronHandler(manager);
847
+ * const result = await processor();
848
+ * console.log(`Processed ${result.processed} dunning steps`);
849
+ * }
850
+ * ```
851
+ */
852
+ declare function createDunningCronHandler(manager: DunningManager, options?: {
853
+ batchSize?: number;
854
+ maxConcurrent?: number;
855
+ logger?: DunningLogger;
856
+ }): () => Promise<{
857
+ processed: number;
858
+ errors: number;
859
+ }>;
860
+ /**
861
+ * Create a handler for edge/serverless environments
862
+ * Processes dunning in a single invocation
863
+ *
864
+ * @example
865
+ * ```typescript
866
+ * // In a Cloudflare Worker or similar
867
+ * export default {
868
+ * async scheduled(event, env, ctx) {
869
+ * const handler = createDunningEdgeHandler(manager, { maxDurationMs: 25000 });
870
+ * const result = await handler();
871
+ * console.log(result);
872
+ * }
873
+ * }
874
+ * ```
875
+ */
876
+ declare function createDunningEdgeHandler(manager: DunningManager, options?: {
877
+ maxDurationMs?: number;
878
+ batchSize?: number;
879
+ logger?: DunningLogger;
880
+ }): () => Promise<{
881
+ processed: number;
882
+ errors: number;
883
+ duration: number;
884
+ timedOut: boolean;
885
+ }>;
886
+
887
+ /**
888
+ * @parsrun/payments - Dunning Memory Storage
889
+ * In-memory storage implementation for development and testing
890
+ */
891
+
892
+ /**
893
+ * In-memory dunning storage implementation
894
+ * Use only for development/testing - data is lost on restart
895
+ */
896
+ declare class MemoryDunningStorage implements DunningStorage {
897
+ private states;
898
+ private failures;
899
+ private scheduledSteps;
900
+ getDunningState(customerId: string): Promise<DunningState | null>;
901
+ getActiveDunningStates(): Promise<DunningState[]>;
902
+ getDunningStatesByStatus(status: DunningStatus): Promise<DunningState[]>;
903
+ saveDunningState(state: DunningState): Promise<void>;
904
+ updateDunningState(id: string, updates: Partial<DunningState>): Promise<void>;
905
+ recordPaymentFailure(failure: PaymentFailure): Promise<void>;
906
+ getPaymentFailures(customerId: string, limit?: number): Promise<PaymentFailure[]>;
907
+ getScheduledSteps(before: Date): Promise<Array<{
908
+ stateId: string;
909
+ stepId: string;
910
+ scheduledAt: Date;
911
+ }>>;
912
+ scheduleStep(stateId: string, stepId: string, scheduledAt: Date): Promise<void>;
913
+ removeScheduledStep(stateId: string, stepId: string): Promise<void>;
914
+ /**
915
+ * Clear all data (for testing)
916
+ */
917
+ clear(): void;
918
+ /**
919
+ * Get state by ID
920
+ */
921
+ getStateById(id: string): DunningState | undefined;
922
+ /**
923
+ * Get all states (for debugging)
924
+ */
925
+ getAllStates(): DunningState[];
926
+ /**
927
+ * Get all scheduled steps (for debugging)
928
+ */
929
+ getAllScheduledSteps(): Array<{
930
+ stateId: string;
931
+ stepId: string;
932
+ scheduledAt: Date;
933
+ }>;
934
+ }
935
+ /**
936
+ * Create an in-memory dunning storage instance
937
+ */
938
+ declare function createMemoryDunningStorage(): MemoryDunningStorage;
939
+
940
+ /**
941
+ * @parsrun/payments - Dunning Drizzle Storage
942
+ * Persistent storage implementation using Drizzle ORM
943
+ */
944
+
945
+ type QueryBuilder = Promise<unknown[]> & {
946
+ where: (condition: unknown) => QueryBuilder;
947
+ orderBy: (...order: unknown[]) => QueryBuilder;
948
+ limit: (n: number) => QueryBuilder;
949
+ };
950
+ /**
951
+ * Drizzle database type (compatible with various drivers)
952
+ */
953
+ type DrizzleDb = {
954
+ select: () => {
955
+ from: (table: unknown) => QueryBuilder;
956
+ };
957
+ insert: (table: unknown) => {
958
+ values: (values: unknown) => {
959
+ onConflictDoUpdate: (config: unknown) => Promise<unknown>;
960
+ returning: () => Promise<unknown[]>;
961
+ } & Promise<unknown>;
962
+ };
963
+ update: (table: unknown) => {
964
+ set: (values: unknown) => {
965
+ where: (condition: unknown) => Promise<unknown>;
966
+ };
967
+ };
968
+ delete: (table: unknown) => {
969
+ where: (condition: unknown) => Promise<unknown>;
970
+ };
971
+ };
972
+ /**
973
+ * Configuration for Drizzle dunning storage
974
+ */
975
+ interface DrizzleDunningStorageConfig {
976
+ /** Drizzle database instance */
977
+ db: DrizzleDb;
978
+ }
979
+ /**
980
+ * Drizzle-based dunning storage implementation
981
+ */
982
+ declare class DrizzleDunningStorage implements DunningStorage {
983
+ private db;
984
+ constructor(config: DrizzleDunningStorageConfig);
985
+ getDunningState(customerId: string): Promise<DunningState | null>;
986
+ getActiveDunningStates(): Promise<DunningState[]>;
987
+ getDunningStatesByStatus(status: DunningStatus): Promise<DunningState[]>;
988
+ saveDunningState(state: DunningState): Promise<void>;
989
+ updateDunningState(id: string, updates: Partial<DunningState>): Promise<void>;
990
+ recordPaymentFailure(failure: PaymentFailure): Promise<void>;
991
+ getPaymentFailures(customerId: string, limit?: number): Promise<PaymentFailure[]>;
992
+ getScheduledSteps(before: Date): Promise<Array<{
993
+ stateId: string;
994
+ stepId: string;
995
+ scheduledAt: Date;
996
+ }>>;
997
+ scheduleStep(stateId: string, stepId: string, scheduledAt: Date): Promise<void>;
998
+ removeScheduledStep(stateId: string, stepId: string): Promise<void>;
999
+ private saveExecutedStep;
1000
+ private mapRowToState;
1001
+ private mapRowToFailure;
1002
+ }
1003
+ /**
1004
+ * Create a Drizzle dunning storage instance
1005
+ */
1006
+ declare function createDrizzleDunningStorage(config: DrizzleDunningStorageConfig): DrizzleDunningStorage;
1007
+
1008
+ /**
1009
+ * @parsrun/payments - Dunning Database Schema
1010
+ * Drizzle ORM schema for dunning automation tables
1011
+ *
1012
+ * These tables store:
1013
+ * - Dunning sequences and steps
1014
+ * - Dunning states for active processes
1015
+ * - Payment failures
1016
+ * - Executed steps history
1017
+ * - Scheduled steps for automation
1018
+ */
1019
+ /**
1020
+ * Dunning sequences table - defines dunning workflows
1021
+ */
1022
+ declare const dunningSequences: drizzle_orm_pg_core.PgTableWithColumns<{
1023
+ name: "dunning_sequences";
1024
+ schema: undefined;
1025
+ columns: {
1026
+ id: drizzle_orm_pg_core.PgColumn<{
1027
+ name: "id";
1028
+ tableName: "dunning_sequences";
1029
+ dataType: "string";
1030
+ columnType: "PgText";
1031
+ data: string;
1032
+ driverParam: string;
1033
+ notNull: true;
1034
+ hasDefault: false;
1035
+ isPrimaryKey: true;
1036
+ isAutoincrement: false;
1037
+ hasRuntimeDefault: false;
1038
+ enumValues: [string, ...string[]];
1039
+ baseColumn: never;
1040
+ identity: undefined;
1041
+ generated: undefined;
1042
+ }, {}, {}>;
1043
+ name: drizzle_orm_pg_core.PgColumn<{
1044
+ name: "name";
1045
+ tableName: "dunning_sequences";
1046
+ dataType: "string";
1047
+ columnType: "PgText";
1048
+ data: string;
1049
+ driverParam: string;
1050
+ notNull: true;
1051
+ hasDefault: false;
1052
+ isPrimaryKey: false;
1053
+ isAutoincrement: false;
1054
+ hasRuntimeDefault: false;
1055
+ enumValues: [string, ...string[]];
1056
+ baseColumn: never;
1057
+ identity: undefined;
1058
+ generated: undefined;
1059
+ }, {}, {}>;
1060
+ description: drizzle_orm_pg_core.PgColumn<{
1061
+ name: "description";
1062
+ tableName: "dunning_sequences";
1063
+ dataType: "string";
1064
+ columnType: "PgText";
1065
+ data: string;
1066
+ driverParam: string;
1067
+ notNull: false;
1068
+ hasDefault: false;
1069
+ isPrimaryKey: false;
1070
+ isAutoincrement: false;
1071
+ hasRuntimeDefault: false;
1072
+ enumValues: [string, ...string[]];
1073
+ baseColumn: never;
1074
+ identity: undefined;
1075
+ generated: undefined;
1076
+ }, {}, {}>;
1077
+ maxDurationDays: drizzle_orm_pg_core.PgColumn<{
1078
+ name: "max_duration_days";
1079
+ tableName: "dunning_sequences";
1080
+ dataType: "number";
1081
+ columnType: "PgInteger";
1082
+ data: number;
1083
+ driverParam: string | number;
1084
+ notNull: true;
1085
+ hasDefault: true;
1086
+ isPrimaryKey: false;
1087
+ isAutoincrement: false;
1088
+ hasRuntimeDefault: false;
1089
+ enumValues: undefined;
1090
+ baseColumn: never;
1091
+ identity: undefined;
1092
+ generated: undefined;
1093
+ }, {}, {}>;
1094
+ isActive: drizzle_orm_pg_core.PgColumn<{
1095
+ name: "is_active";
1096
+ tableName: "dunning_sequences";
1097
+ dataType: "boolean";
1098
+ columnType: "PgBoolean";
1099
+ data: boolean;
1100
+ driverParam: boolean;
1101
+ notNull: true;
1102
+ hasDefault: true;
1103
+ isPrimaryKey: false;
1104
+ isAutoincrement: false;
1105
+ hasRuntimeDefault: false;
1106
+ enumValues: undefined;
1107
+ baseColumn: never;
1108
+ identity: undefined;
1109
+ generated: undefined;
1110
+ }, {}, {}>;
1111
+ isDefault: drizzle_orm_pg_core.PgColumn<{
1112
+ name: "is_default";
1113
+ tableName: "dunning_sequences";
1114
+ dataType: "boolean";
1115
+ columnType: "PgBoolean";
1116
+ data: boolean;
1117
+ driverParam: boolean;
1118
+ notNull: true;
1119
+ hasDefault: true;
1120
+ isPrimaryKey: false;
1121
+ isAutoincrement: false;
1122
+ hasRuntimeDefault: false;
1123
+ enumValues: undefined;
1124
+ baseColumn: never;
1125
+ identity: undefined;
1126
+ generated: undefined;
1127
+ }, {}, {}>;
1128
+ planTier: drizzle_orm_pg_core.PgColumn<{
1129
+ name: "plan_tier";
1130
+ tableName: "dunning_sequences";
1131
+ dataType: "number";
1132
+ columnType: "PgInteger";
1133
+ data: number;
1134
+ driverParam: string | number;
1135
+ notNull: false;
1136
+ hasDefault: false;
1137
+ isPrimaryKey: false;
1138
+ isAutoincrement: false;
1139
+ hasRuntimeDefault: false;
1140
+ enumValues: undefined;
1141
+ baseColumn: never;
1142
+ identity: undefined;
1143
+ generated: undefined;
1144
+ }, {}, {}>;
1145
+ metadata: drizzle_orm_pg_core.PgColumn<{
1146
+ name: "metadata";
1147
+ tableName: "dunning_sequences";
1148
+ dataType: "json";
1149
+ columnType: "PgJsonb";
1150
+ data: Record<string, unknown>;
1151
+ driverParam: unknown;
1152
+ notNull: false;
1153
+ hasDefault: false;
1154
+ isPrimaryKey: false;
1155
+ isAutoincrement: false;
1156
+ hasRuntimeDefault: false;
1157
+ enumValues: undefined;
1158
+ baseColumn: never;
1159
+ identity: undefined;
1160
+ generated: undefined;
1161
+ }, {}, {
1162
+ $type: Record<string, unknown>;
1163
+ }>;
1164
+ createdAt: drizzle_orm_pg_core.PgColumn<{
1165
+ name: "created_at";
1166
+ tableName: "dunning_sequences";
1167
+ dataType: "date";
1168
+ columnType: "PgTimestamp";
1169
+ data: Date;
1170
+ driverParam: string;
1171
+ notNull: true;
1172
+ hasDefault: true;
1173
+ isPrimaryKey: false;
1174
+ isAutoincrement: false;
1175
+ hasRuntimeDefault: false;
1176
+ enumValues: undefined;
1177
+ baseColumn: never;
1178
+ identity: undefined;
1179
+ generated: undefined;
1180
+ }, {}, {}>;
1181
+ updatedAt: drizzle_orm_pg_core.PgColumn<{
1182
+ name: "updated_at";
1183
+ tableName: "dunning_sequences";
1184
+ dataType: "date";
1185
+ columnType: "PgTimestamp";
1186
+ data: Date;
1187
+ driverParam: string;
1188
+ notNull: true;
1189
+ hasDefault: true;
1190
+ isPrimaryKey: false;
1191
+ isAutoincrement: false;
1192
+ hasRuntimeDefault: false;
1193
+ enumValues: undefined;
1194
+ baseColumn: never;
1195
+ identity: undefined;
1196
+ generated: undefined;
1197
+ }, {}, {}>;
1198
+ };
1199
+ dialect: "pg";
1200
+ }>;
1201
+ /**
1202
+ * Dunning steps table - defines steps within sequences
1203
+ */
1204
+ declare const dunningSteps: drizzle_orm_pg_core.PgTableWithColumns<{
1205
+ name: "dunning_steps";
1206
+ schema: undefined;
1207
+ columns: {
1208
+ id: drizzle_orm_pg_core.PgColumn<{
1209
+ name: "id";
1210
+ tableName: "dunning_steps";
1211
+ dataType: "string";
1212
+ columnType: "PgText";
1213
+ data: string;
1214
+ driverParam: string;
1215
+ notNull: true;
1216
+ hasDefault: false;
1217
+ isPrimaryKey: true;
1218
+ isAutoincrement: false;
1219
+ hasRuntimeDefault: false;
1220
+ enumValues: [string, ...string[]];
1221
+ baseColumn: never;
1222
+ identity: undefined;
1223
+ generated: undefined;
1224
+ }, {}, {}>;
1225
+ sequenceId: drizzle_orm_pg_core.PgColumn<{
1226
+ name: "sequence_id";
1227
+ tableName: "dunning_steps";
1228
+ dataType: "string";
1229
+ columnType: "PgText";
1230
+ data: string;
1231
+ driverParam: string;
1232
+ notNull: true;
1233
+ hasDefault: false;
1234
+ isPrimaryKey: false;
1235
+ isAutoincrement: false;
1236
+ hasRuntimeDefault: false;
1237
+ enumValues: [string, ...string[]];
1238
+ baseColumn: never;
1239
+ identity: undefined;
1240
+ generated: undefined;
1241
+ }, {}, {}>;
1242
+ name: drizzle_orm_pg_core.PgColumn<{
1243
+ name: "name";
1244
+ tableName: "dunning_steps";
1245
+ dataType: "string";
1246
+ columnType: "PgText";
1247
+ data: string;
1248
+ driverParam: string;
1249
+ notNull: true;
1250
+ hasDefault: false;
1251
+ isPrimaryKey: false;
1252
+ isAutoincrement: false;
1253
+ hasRuntimeDefault: false;
1254
+ enumValues: [string, ...string[]];
1255
+ baseColumn: never;
1256
+ identity: undefined;
1257
+ generated: undefined;
1258
+ }, {}, {}>;
1259
+ stepOrder: drizzle_orm_pg_core.PgColumn<{
1260
+ name: "step_order";
1261
+ tableName: "dunning_steps";
1262
+ dataType: "number";
1263
+ columnType: "PgInteger";
1264
+ data: number;
1265
+ driverParam: string | number;
1266
+ notNull: true;
1267
+ hasDefault: false;
1268
+ isPrimaryKey: false;
1269
+ isAutoincrement: false;
1270
+ hasRuntimeDefault: false;
1271
+ enumValues: undefined;
1272
+ baseColumn: never;
1273
+ identity: undefined;
1274
+ generated: undefined;
1275
+ }, {}, {}>;
1276
+ daysAfterFailure: drizzle_orm_pg_core.PgColumn<{
1277
+ name: "days_after_failure";
1278
+ tableName: "dunning_steps";
1279
+ dataType: "number";
1280
+ columnType: "PgInteger";
1281
+ data: number;
1282
+ driverParam: string | number;
1283
+ notNull: true;
1284
+ hasDefault: true;
1285
+ isPrimaryKey: false;
1286
+ isAutoincrement: false;
1287
+ hasRuntimeDefault: false;
1288
+ enumValues: undefined;
1289
+ baseColumn: never;
1290
+ identity: undefined;
1291
+ generated: undefined;
1292
+ }, {}, {}>;
1293
+ hoursOffset: drizzle_orm_pg_core.PgColumn<{
1294
+ name: "hours_offset";
1295
+ tableName: "dunning_steps";
1296
+ dataType: "number";
1297
+ columnType: "PgInteger";
1298
+ data: number;
1299
+ driverParam: string | number;
1300
+ notNull: false;
1301
+ hasDefault: false;
1302
+ isPrimaryKey: false;
1303
+ isAutoincrement: false;
1304
+ hasRuntimeDefault: false;
1305
+ enumValues: undefined;
1306
+ baseColumn: never;
1307
+ identity: undefined;
1308
+ generated: undefined;
1309
+ }, {}, {}>;
1310
+ actions: drizzle_orm_pg_core.PgColumn<{
1311
+ name: "actions";
1312
+ tableName: "dunning_steps";
1313
+ dataType: "json";
1314
+ columnType: "PgJsonb";
1315
+ data: string[];
1316
+ driverParam: unknown;
1317
+ notNull: true;
1318
+ hasDefault: true;
1319
+ isPrimaryKey: false;
1320
+ isAutoincrement: false;
1321
+ hasRuntimeDefault: false;
1322
+ enumValues: undefined;
1323
+ baseColumn: never;
1324
+ identity: undefined;
1325
+ generated: undefined;
1326
+ }, {}, {
1327
+ $type: string[];
1328
+ }>;
1329
+ notificationChannels: drizzle_orm_pg_core.PgColumn<{
1330
+ name: "notification_channels";
1331
+ tableName: "dunning_steps";
1332
+ dataType: "json";
1333
+ columnType: "PgJsonb";
1334
+ data: string[];
1335
+ driverParam: unknown;
1336
+ notNull: false;
1337
+ hasDefault: false;
1338
+ isPrimaryKey: false;
1339
+ isAutoincrement: false;
1340
+ hasRuntimeDefault: false;
1341
+ enumValues: undefined;
1342
+ baseColumn: never;
1343
+ identity: undefined;
1344
+ generated: undefined;
1345
+ }, {}, {
1346
+ $type: string[];
1347
+ }>;
1348
+ notificationTemplateId: drizzle_orm_pg_core.PgColumn<{
1349
+ name: "notification_template_id";
1350
+ tableName: "dunning_steps";
1351
+ dataType: "string";
1352
+ columnType: "PgText";
1353
+ data: string;
1354
+ driverParam: string;
1355
+ notNull: false;
1356
+ hasDefault: false;
1357
+ isPrimaryKey: false;
1358
+ isAutoincrement: false;
1359
+ hasRuntimeDefault: false;
1360
+ enumValues: [string, ...string[]];
1361
+ baseColumn: never;
1362
+ identity: undefined;
1363
+ generated: undefined;
1364
+ }, {}, {}>;
1365
+ accessLevel: drizzle_orm_pg_core.PgColumn<{
1366
+ name: "access_level";
1367
+ tableName: "dunning_steps";
1368
+ dataType: "string";
1369
+ columnType: "PgText";
1370
+ data: string;
1371
+ driverParam: string;
1372
+ notNull: false;
1373
+ hasDefault: false;
1374
+ isPrimaryKey: false;
1375
+ isAutoincrement: false;
1376
+ hasRuntimeDefault: false;
1377
+ enumValues: [string, ...string[]];
1378
+ baseColumn: never;
1379
+ identity: undefined;
1380
+ generated: undefined;
1381
+ }, {}, {}>;
1382
+ isFinal: drizzle_orm_pg_core.PgColumn<{
1383
+ name: "is_final";
1384
+ tableName: "dunning_steps";
1385
+ dataType: "boolean";
1386
+ columnType: "PgBoolean";
1387
+ data: boolean;
1388
+ driverParam: boolean;
1389
+ notNull: true;
1390
+ hasDefault: true;
1391
+ isPrimaryKey: false;
1392
+ isAutoincrement: false;
1393
+ hasRuntimeDefault: false;
1394
+ enumValues: undefined;
1395
+ baseColumn: never;
1396
+ identity: undefined;
1397
+ generated: undefined;
1398
+ }, {}, {}>;
1399
+ metadata: drizzle_orm_pg_core.PgColumn<{
1400
+ name: "metadata";
1401
+ tableName: "dunning_steps";
1402
+ dataType: "json";
1403
+ columnType: "PgJsonb";
1404
+ data: Record<string, unknown>;
1405
+ driverParam: unknown;
1406
+ notNull: false;
1407
+ hasDefault: false;
1408
+ isPrimaryKey: false;
1409
+ isAutoincrement: false;
1410
+ hasRuntimeDefault: false;
1411
+ enumValues: undefined;
1412
+ baseColumn: never;
1413
+ identity: undefined;
1414
+ generated: undefined;
1415
+ }, {}, {
1416
+ $type: Record<string, unknown>;
1417
+ }>;
1418
+ };
1419
+ dialect: "pg";
1420
+ }>;
1421
+ /**
1422
+ * Payment failures table - records all payment failures
1423
+ */
1424
+ declare const paymentFailures: drizzle_orm_pg_core.PgTableWithColumns<{
1425
+ name: "dunning_payment_failures";
1426
+ schema: undefined;
1427
+ columns: {
1428
+ id: drizzle_orm_pg_core.PgColumn<{
1429
+ name: "id";
1430
+ tableName: "dunning_payment_failures";
1431
+ dataType: "string";
1432
+ columnType: "PgText";
1433
+ data: string;
1434
+ driverParam: string;
1435
+ notNull: true;
1436
+ hasDefault: false;
1437
+ isPrimaryKey: true;
1438
+ isAutoincrement: false;
1439
+ hasRuntimeDefault: false;
1440
+ enumValues: [string, ...string[]];
1441
+ baseColumn: never;
1442
+ identity: undefined;
1443
+ generated: undefined;
1444
+ }, {}, {}>;
1445
+ customerId: drizzle_orm_pg_core.PgColumn<{
1446
+ name: "customer_id";
1447
+ tableName: "dunning_payment_failures";
1448
+ dataType: "string";
1449
+ columnType: "PgText";
1450
+ data: string;
1451
+ driverParam: string;
1452
+ notNull: true;
1453
+ hasDefault: false;
1454
+ isPrimaryKey: false;
1455
+ isAutoincrement: false;
1456
+ hasRuntimeDefault: false;
1457
+ enumValues: [string, ...string[]];
1458
+ baseColumn: never;
1459
+ identity: undefined;
1460
+ generated: undefined;
1461
+ }, {}, {}>;
1462
+ subscriptionId: drizzle_orm_pg_core.PgColumn<{
1463
+ name: "subscription_id";
1464
+ tableName: "dunning_payment_failures";
1465
+ dataType: "string";
1466
+ columnType: "PgText";
1467
+ data: string;
1468
+ driverParam: string;
1469
+ notNull: true;
1470
+ hasDefault: false;
1471
+ isPrimaryKey: false;
1472
+ isAutoincrement: false;
1473
+ hasRuntimeDefault: false;
1474
+ enumValues: [string, ...string[]];
1475
+ baseColumn: never;
1476
+ identity: undefined;
1477
+ generated: undefined;
1478
+ }, {}, {}>;
1479
+ invoiceId: drizzle_orm_pg_core.PgColumn<{
1480
+ name: "invoice_id";
1481
+ tableName: "dunning_payment_failures";
1482
+ dataType: "string";
1483
+ columnType: "PgText";
1484
+ data: string;
1485
+ driverParam: string;
1486
+ notNull: false;
1487
+ hasDefault: false;
1488
+ isPrimaryKey: false;
1489
+ isAutoincrement: false;
1490
+ hasRuntimeDefault: false;
1491
+ enumValues: [string, ...string[]];
1492
+ baseColumn: never;
1493
+ identity: undefined;
1494
+ generated: undefined;
1495
+ }, {}, {}>;
1496
+ amount: drizzle_orm_pg_core.PgColumn<{
1497
+ name: "amount";
1498
+ tableName: "dunning_payment_failures";
1499
+ dataType: "number";
1500
+ columnType: "PgInteger";
1501
+ data: number;
1502
+ driverParam: string | number;
1503
+ notNull: true;
1504
+ hasDefault: false;
1505
+ isPrimaryKey: false;
1506
+ isAutoincrement: false;
1507
+ hasRuntimeDefault: false;
1508
+ enumValues: undefined;
1509
+ baseColumn: never;
1510
+ identity: undefined;
1511
+ generated: undefined;
1512
+ }, {}, {}>;
1513
+ currency: drizzle_orm_pg_core.PgColumn<{
1514
+ name: "currency";
1515
+ tableName: "dunning_payment_failures";
1516
+ dataType: "string";
1517
+ columnType: "PgText";
1518
+ data: string;
1519
+ driverParam: string;
1520
+ notNull: true;
1521
+ hasDefault: true;
1522
+ isPrimaryKey: false;
1523
+ isAutoincrement: false;
1524
+ hasRuntimeDefault: false;
1525
+ enumValues: [string, ...string[]];
1526
+ baseColumn: never;
1527
+ identity: undefined;
1528
+ generated: undefined;
1529
+ }, {}, {}>;
1530
+ category: drizzle_orm_pg_core.PgColumn<{
1531
+ name: "category";
1532
+ tableName: "dunning_payment_failures";
1533
+ dataType: "string";
1534
+ columnType: "PgText";
1535
+ data: string;
1536
+ driverParam: string;
1537
+ notNull: true;
1538
+ hasDefault: false;
1539
+ isPrimaryKey: false;
1540
+ isAutoincrement: false;
1541
+ hasRuntimeDefault: false;
1542
+ enumValues: [string, ...string[]];
1543
+ baseColumn: never;
1544
+ identity: undefined;
1545
+ generated: undefined;
1546
+ }, {}, {}>;
1547
+ errorCode: drizzle_orm_pg_core.PgColumn<{
1548
+ name: "error_code";
1549
+ tableName: "dunning_payment_failures";
1550
+ dataType: "string";
1551
+ columnType: "PgText";
1552
+ data: string;
1553
+ driverParam: string;
1554
+ notNull: true;
1555
+ hasDefault: false;
1556
+ isPrimaryKey: false;
1557
+ isAutoincrement: false;
1558
+ hasRuntimeDefault: false;
1559
+ enumValues: [string, ...string[]];
1560
+ baseColumn: never;
1561
+ identity: undefined;
1562
+ generated: undefined;
1563
+ }, {}, {}>;
1564
+ errorMessage: drizzle_orm_pg_core.PgColumn<{
1565
+ name: "error_message";
1566
+ tableName: "dunning_payment_failures";
1567
+ dataType: "string";
1568
+ columnType: "PgText";
1569
+ data: string;
1570
+ driverParam: string;
1571
+ notNull: true;
1572
+ hasDefault: false;
1573
+ isPrimaryKey: false;
1574
+ isAutoincrement: false;
1575
+ hasRuntimeDefault: false;
1576
+ enumValues: [string, ...string[]];
1577
+ baseColumn: never;
1578
+ identity: undefined;
1579
+ generated: undefined;
1580
+ }, {}, {}>;
1581
+ provider: drizzle_orm_pg_core.PgColumn<{
1582
+ name: "provider";
1583
+ tableName: "dunning_payment_failures";
1584
+ dataType: "string";
1585
+ columnType: "PgText";
1586
+ data: string;
1587
+ driverParam: string;
1588
+ notNull: true;
1589
+ hasDefault: false;
1590
+ isPrimaryKey: false;
1591
+ isAutoincrement: false;
1592
+ hasRuntimeDefault: false;
1593
+ enumValues: [string, ...string[]];
1594
+ baseColumn: never;
1595
+ identity: undefined;
1596
+ generated: undefined;
1597
+ }, {}, {}>;
1598
+ failedAt: drizzle_orm_pg_core.PgColumn<{
1599
+ name: "failed_at";
1600
+ tableName: "dunning_payment_failures";
1601
+ dataType: "date";
1602
+ columnType: "PgTimestamp";
1603
+ data: Date;
1604
+ driverParam: string;
1605
+ notNull: true;
1606
+ hasDefault: false;
1607
+ isPrimaryKey: false;
1608
+ isAutoincrement: false;
1609
+ hasRuntimeDefault: false;
1610
+ enumValues: undefined;
1611
+ baseColumn: never;
1612
+ identity: undefined;
1613
+ generated: undefined;
1614
+ }, {}, {}>;
1615
+ retryCount: drizzle_orm_pg_core.PgColumn<{
1616
+ name: "retry_count";
1617
+ tableName: "dunning_payment_failures";
1618
+ dataType: "number";
1619
+ columnType: "PgInteger";
1620
+ data: number;
1621
+ driverParam: string | number;
1622
+ notNull: true;
1623
+ hasDefault: true;
1624
+ isPrimaryKey: false;
1625
+ isAutoincrement: false;
1626
+ hasRuntimeDefault: false;
1627
+ enumValues: undefined;
1628
+ baseColumn: never;
1629
+ identity: undefined;
1630
+ generated: undefined;
1631
+ }, {}, {}>;
1632
+ nextRetryAt: drizzle_orm_pg_core.PgColumn<{
1633
+ name: "next_retry_at";
1634
+ tableName: "dunning_payment_failures";
1635
+ dataType: "date";
1636
+ columnType: "PgTimestamp";
1637
+ data: Date;
1638
+ driverParam: string;
1639
+ notNull: false;
1640
+ hasDefault: false;
1641
+ isPrimaryKey: false;
1642
+ isAutoincrement: false;
1643
+ hasRuntimeDefault: false;
1644
+ enumValues: undefined;
1645
+ baseColumn: never;
1646
+ identity: undefined;
1647
+ generated: undefined;
1648
+ }, {}, {}>;
1649
+ isRecoverable: drizzle_orm_pg_core.PgColumn<{
1650
+ name: "is_recoverable";
1651
+ tableName: "dunning_payment_failures";
1652
+ dataType: "boolean";
1653
+ columnType: "PgBoolean";
1654
+ data: boolean;
1655
+ driverParam: boolean;
1656
+ notNull: true;
1657
+ hasDefault: true;
1658
+ isPrimaryKey: false;
1659
+ isAutoincrement: false;
1660
+ hasRuntimeDefault: false;
1661
+ enumValues: undefined;
1662
+ baseColumn: never;
1663
+ identity: undefined;
1664
+ generated: undefined;
1665
+ }, {}, {}>;
1666
+ metadata: drizzle_orm_pg_core.PgColumn<{
1667
+ name: "metadata";
1668
+ tableName: "dunning_payment_failures";
1669
+ dataType: "json";
1670
+ columnType: "PgJsonb";
1671
+ data: Record<string, unknown>;
1672
+ driverParam: unknown;
1673
+ notNull: false;
1674
+ hasDefault: false;
1675
+ isPrimaryKey: false;
1676
+ isAutoincrement: false;
1677
+ hasRuntimeDefault: false;
1678
+ enumValues: undefined;
1679
+ baseColumn: never;
1680
+ identity: undefined;
1681
+ generated: undefined;
1682
+ }, {}, {
1683
+ $type: Record<string, unknown>;
1684
+ }>;
1685
+ };
1686
+ dialect: "pg";
1687
+ }>;
1688
+ /**
1689
+ * Dunning states table - tracks active dunning processes
1690
+ */
1691
+ declare const dunningStates: drizzle_orm_pg_core.PgTableWithColumns<{
1692
+ name: "dunning_states";
1693
+ schema: undefined;
1694
+ columns: {
1695
+ id: drizzle_orm_pg_core.PgColumn<{
1696
+ name: "id";
1697
+ tableName: "dunning_states";
1698
+ dataType: "string";
1699
+ columnType: "PgText";
1700
+ data: string;
1701
+ driverParam: string;
1702
+ notNull: true;
1703
+ hasDefault: false;
1704
+ isPrimaryKey: true;
1705
+ isAutoincrement: false;
1706
+ hasRuntimeDefault: false;
1707
+ enumValues: [string, ...string[]];
1708
+ baseColumn: never;
1709
+ identity: undefined;
1710
+ generated: undefined;
1711
+ }, {}, {}>;
1712
+ customerId: drizzle_orm_pg_core.PgColumn<{
1713
+ name: "customer_id";
1714
+ tableName: "dunning_states";
1715
+ dataType: "string";
1716
+ columnType: "PgText";
1717
+ data: string;
1718
+ driverParam: string;
1719
+ notNull: true;
1720
+ hasDefault: false;
1721
+ isPrimaryKey: false;
1722
+ isAutoincrement: false;
1723
+ hasRuntimeDefault: false;
1724
+ enumValues: [string, ...string[]];
1725
+ baseColumn: never;
1726
+ identity: undefined;
1727
+ generated: undefined;
1728
+ }, {}, {}>;
1729
+ subscriptionId: drizzle_orm_pg_core.PgColumn<{
1730
+ name: "subscription_id";
1731
+ tableName: "dunning_states";
1732
+ dataType: "string";
1733
+ columnType: "PgText";
1734
+ data: string;
1735
+ driverParam: string;
1736
+ notNull: true;
1737
+ hasDefault: false;
1738
+ isPrimaryKey: false;
1739
+ isAutoincrement: false;
1740
+ hasRuntimeDefault: false;
1741
+ enumValues: [string, ...string[]];
1742
+ baseColumn: never;
1743
+ identity: undefined;
1744
+ generated: undefined;
1745
+ }, {}, {}>;
1746
+ sequenceId: drizzle_orm_pg_core.PgColumn<{
1747
+ name: "sequence_id";
1748
+ tableName: "dunning_states";
1749
+ dataType: "string";
1750
+ columnType: "PgText";
1751
+ data: string;
1752
+ driverParam: string;
1753
+ notNull: true;
1754
+ hasDefault: false;
1755
+ isPrimaryKey: false;
1756
+ isAutoincrement: false;
1757
+ hasRuntimeDefault: false;
1758
+ enumValues: [string, ...string[]];
1759
+ baseColumn: never;
1760
+ identity: undefined;
1761
+ generated: undefined;
1762
+ }, {}, {}>;
1763
+ currentStepIndex: drizzle_orm_pg_core.PgColumn<{
1764
+ name: "current_step_index";
1765
+ tableName: "dunning_states";
1766
+ dataType: "number";
1767
+ columnType: "PgInteger";
1768
+ data: number;
1769
+ driverParam: string | number;
1770
+ notNull: true;
1771
+ hasDefault: true;
1772
+ isPrimaryKey: false;
1773
+ isAutoincrement: false;
1774
+ hasRuntimeDefault: false;
1775
+ enumValues: undefined;
1776
+ baseColumn: never;
1777
+ identity: undefined;
1778
+ generated: undefined;
1779
+ }, {}, {}>;
1780
+ currentStepId: drizzle_orm_pg_core.PgColumn<{
1781
+ name: "current_step_id";
1782
+ tableName: "dunning_states";
1783
+ dataType: "string";
1784
+ columnType: "PgText";
1785
+ data: string;
1786
+ driverParam: string;
1787
+ notNull: true;
1788
+ hasDefault: false;
1789
+ isPrimaryKey: false;
1790
+ isAutoincrement: false;
1791
+ hasRuntimeDefault: false;
1792
+ enumValues: [string, ...string[]];
1793
+ baseColumn: never;
1794
+ identity: undefined;
1795
+ generated: undefined;
1796
+ }, {}, {}>;
1797
+ status: drizzle_orm_pg_core.PgColumn<{
1798
+ name: "status";
1799
+ tableName: "dunning_states";
1800
+ dataType: "string";
1801
+ columnType: "PgText";
1802
+ data: string;
1803
+ driverParam: string;
1804
+ notNull: true;
1805
+ hasDefault: true;
1806
+ isPrimaryKey: false;
1807
+ isAutoincrement: false;
1808
+ hasRuntimeDefault: false;
1809
+ enumValues: [string, ...string[]];
1810
+ baseColumn: never;
1811
+ identity: undefined;
1812
+ generated: undefined;
1813
+ }, {}, {}>;
1814
+ initialFailureId: drizzle_orm_pg_core.PgColumn<{
1815
+ name: "initial_failure_id";
1816
+ tableName: "dunning_states";
1817
+ dataType: "string";
1818
+ columnType: "PgText";
1819
+ data: string;
1820
+ driverParam: string;
1821
+ notNull: true;
1822
+ hasDefault: false;
1823
+ isPrimaryKey: false;
1824
+ isAutoincrement: false;
1825
+ hasRuntimeDefault: false;
1826
+ enumValues: [string, ...string[]];
1827
+ baseColumn: never;
1828
+ identity: undefined;
1829
+ generated: undefined;
1830
+ }, {}, {}>;
1831
+ failureIds: drizzle_orm_pg_core.PgColumn<{
1832
+ name: "failure_ids";
1833
+ tableName: "dunning_states";
1834
+ dataType: "json";
1835
+ columnType: "PgJsonb";
1836
+ data: string[];
1837
+ driverParam: unknown;
1838
+ notNull: true;
1839
+ hasDefault: true;
1840
+ isPrimaryKey: false;
1841
+ isAutoincrement: false;
1842
+ hasRuntimeDefault: false;
1843
+ enumValues: undefined;
1844
+ baseColumn: never;
1845
+ identity: undefined;
1846
+ generated: undefined;
1847
+ }, {}, {
1848
+ $type: string[];
1849
+ }>;
1850
+ startedAt: drizzle_orm_pg_core.PgColumn<{
1851
+ name: "started_at";
1852
+ tableName: "dunning_states";
1853
+ dataType: "date";
1854
+ columnType: "PgTimestamp";
1855
+ data: Date;
1856
+ driverParam: string;
1857
+ notNull: true;
1858
+ hasDefault: false;
1859
+ isPrimaryKey: false;
1860
+ isAutoincrement: false;
1861
+ hasRuntimeDefault: false;
1862
+ enumValues: undefined;
1863
+ baseColumn: never;
1864
+ identity: undefined;
1865
+ generated: undefined;
1866
+ }, {}, {}>;
1867
+ lastStepAt: drizzle_orm_pg_core.PgColumn<{
1868
+ name: "last_step_at";
1869
+ tableName: "dunning_states";
1870
+ dataType: "date";
1871
+ columnType: "PgTimestamp";
1872
+ data: Date;
1873
+ driverParam: string;
1874
+ notNull: false;
1875
+ hasDefault: false;
1876
+ isPrimaryKey: false;
1877
+ isAutoincrement: false;
1878
+ hasRuntimeDefault: false;
1879
+ enumValues: undefined;
1880
+ baseColumn: never;
1881
+ identity: undefined;
1882
+ generated: undefined;
1883
+ }, {}, {}>;
1884
+ nextStepAt: drizzle_orm_pg_core.PgColumn<{
1885
+ name: "next_step_at";
1886
+ tableName: "dunning_states";
1887
+ dataType: "date";
1888
+ columnType: "PgTimestamp";
1889
+ data: Date;
1890
+ driverParam: string;
1891
+ notNull: false;
1892
+ hasDefault: false;
1893
+ isPrimaryKey: false;
1894
+ isAutoincrement: false;
1895
+ hasRuntimeDefault: false;
1896
+ enumValues: undefined;
1897
+ baseColumn: never;
1898
+ identity: undefined;
1899
+ generated: undefined;
1900
+ }, {}, {}>;
1901
+ endedAt: drizzle_orm_pg_core.PgColumn<{
1902
+ name: "ended_at";
1903
+ tableName: "dunning_states";
1904
+ dataType: "date";
1905
+ columnType: "PgTimestamp";
1906
+ data: Date;
1907
+ driverParam: string;
1908
+ notNull: false;
1909
+ hasDefault: false;
1910
+ isPrimaryKey: false;
1911
+ isAutoincrement: false;
1912
+ hasRuntimeDefault: false;
1913
+ enumValues: undefined;
1914
+ baseColumn: never;
1915
+ identity: undefined;
1916
+ generated: undefined;
1917
+ }, {}, {}>;
1918
+ endReason: drizzle_orm_pg_core.PgColumn<{
1919
+ name: "end_reason";
1920
+ tableName: "dunning_states";
1921
+ dataType: "string";
1922
+ columnType: "PgText";
1923
+ data: string;
1924
+ driverParam: string;
1925
+ notNull: false;
1926
+ hasDefault: false;
1927
+ isPrimaryKey: false;
1928
+ isAutoincrement: false;
1929
+ hasRuntimeDefault: false;
1930
+ enumValues: [string, ...string[]];
1931
+ baseColumn: never;
1932
+ identity: undefined;
1933
+ generated: undefined;
1934
+ }, {}, {}>;
1935
+ totalRetryAttempts: drizzle_orm_pg_core.PgColumn<{
1936
+ name: "total_retry_attempts";
1937
+ tableName: "dunning_states";
1938
+ dataType: "number";
1939
+ columnType: "PgInteger";
1940
+ data: number;
1941
+ driverParam: string | number;
1942
+ notNull: true;
1943
+ hasDefault: true;
1944
+ isPrimaryKey: false;
1945
+ isAutoincrement: false;
1946
+ hasRuntimeDefault: false;
1947
+ enumValues: undefined;
1948
+ baseColumn: never;
1949
+ identity: undefined;
1950
+ generated: undefined;
1951
+ }, {}, {}>;
1952
+ metadata: drizzle_orm_pg_core.PgColumn<{
1953
+ name: "metadata";
1954
+ tableName: "dunning_states";
1955
+ dataType: "json";
1956
+ columnType: "PgJsonb";
1957
+ data: Record<string, unknown>;
1958
+ driverParam: unknown;
1959
+ notNull: false;
1960
+ hasDefault: false;
1961
+ isPrimaryKey: false;
1962
+ isAutoincrement: false;
1963
+ hasRuntimeDefault: false;
1964
+ enumValues: undefined;
1965
+ baseColumn: never;
1966
+ identity: undefined;
1967
+ generated: undefined;
1968
+ }, {}, {
1969
+ $type: Record<string, unknown>;
1970
+ }>;
1971
+ };
1972
+ dialect: "pg";
1973
+ }>;
1974
+ /**
1975
+ * Executed steps table - history of executed dunning steps
1976
+ */
1977
+ declare const executedSteps: drizzle_orm_pg_core.PgTableWithColumns<{
1978
+ name: "dunning_executed_steps";
1979
+ schema: undefined;
1980
+ columns: {
1981
+ id: drizzle_orm_pg_core.PgColumn<{
1982
+ name: "id";
1983
+ tableName: "dunning_executed_steps";
1984
+ dataType: "string";
1985
+ columnType: "PgText";
1986
+ data: string;
1987
+ driverParam: string;
1988
+ notNull: true;
1989
+ hasDefault: false;
1990
+ isPrimaryKey: true;
1991
+ isAutoincrement: false;
1992
+ hasRuntimeDefault: false;
1993
+ enumValues: [string, ...string[]];
1994
+ baseColumn: never;
1995
+ identity: undefined;
1996
+ generated: undefined;
1997
+ }, {}, {}>;
1998
+ dunningStateId: drizzle_orm_pg_core.PgColumn<{
1999
+ name: "dunning_state_id";
2000
+ tableName: "dunning_executed_steps";
2001
+ dataType: "string";
2002
+ columnType: "PgText";
2003
+ data: string;
2004
+ driverParam: string;
2005
+ notNull: true;
2006
+ hasDefault: false;
2007
+ isPrimaryKey: false;
2008
+ isAutoincrement: false;
2009
+ hasRuntimeDefault: false;
2010
+ enumValues: [string, ...string[]];
2011
+ baseColumn: never;
2012
+ identity: undefined;
2013
+ generated: undefined;
2014
+ }, {}, {}>;
2015
+ stepId: drizzle_orm_pg_core.PgColumn<{
2016
+ name: "step_id";
2017
+ tableName: "dunning_executed_steps";
2018
+ dataType: "string";
2019
+ columnType: "PgText";
2020
+ data: string;
2021
+ driverParam: string;
2022
+ notNull: true;
2023
+ hasDefault: false;
2024
+ isPrimaryKey: false;
2025
+ isAutoincrement: false;
2026
+ hasRuntimeDefault: false;
2027
+ enumValues: [string, ...string[]];
2028
+ baseColumn: never;
2029
+ identity: undefined;
2030
+ generated: undefined;
2031
+ }, {}, {}>;
2032
+ stepName: drizzle_orm_pg_core.PgColumn<{
2033
+ name: "step_name";
2034
+ tableName: "dunning_executed_steps";
2035
+ dataType: "string";
2036
+ columnType: "PgText";
2037
+ data: string;
2038
+ driverParam: string;
2039
+ notNull: true;
2040
+ hasDefault: false;
2041
+ isPrimaryKey: false;
2042
+ isAutoincrement: false;
2043
+ hasRuntimeDefault: false;
2044
+ enumValues: [string, ...string[]];
2045
+ baseColumn: never;
2046
+ identity: undefined;
2047
+ generated: undefined;
2048
+ }, {}, {}>;
2049
+ executedAt: drizzle_orm_pg_core.PgColumn<{
2050
+ name: "executed_at";
2051
+ tableName: "dunning_executed_steps";
2052
+ dataType: "date";
2053
+ columnType: "PgTimestamp";
2054
+ data: Date;
2055
+ driverParam: string;
2056
+ notNull: true;
2057
+ hasDefault: false;
2058
+ isPrimaryKey: false;
2059
+ isAutoincrement: false;
2060
+ hasRuntimeDefault: false;
2061
+ enumValues: undefined;
2062
+ baseColumn: never;
2063
+ identity: undefined;
2064
+ generated: undefined;
2065
+ }, {}, {}>;
2066
+ actionsTaken: drizzle_orm_pg_core.PgColumn<{
2067
+ name: "actions_taken";
2068
+ tableName: "dunning_executed_steps";
2069
+ dataType: "json";
2070
+ columnType: "PgJsonb";
2071
+ data: string[];
2072
+ driverParam: unknown;
2073
+ notNull: true;
2074
+ hasDefault: true;
2075
+ isPrimaryKey: false;
2076
+ isAutoincrement: false;
2077
+ hasRuntimeDefault: false;
2078
+ enumValues: undefined;
2079
+ baseColumn: never;
2080
+ identity: undefined;
2081
+ generated: undefined;
2082
+ }, {}, {
2083
+ $type: string[];
2084
+ }>;
2085
+ paymentRetried: drizzle_orm_pg_core.PgColumn<{
2086
+ name: "payment_retried";
2087
+ tableName: "dunning_executed_steps";
2088
+ dataType: "boolean";
2089
+ columnType: "PgBoolean";
2090
+ data: boolean;
2091
+ driverParam: boolean;
2092
+ notNull: true;
2093
+ hasDefault: true;
2094
+ isPrimaryKey: false;
2095
+ isAutoincrement: false;
2096
+ hasRuntimeDefault: false;
2097
+ enumValues: undefined;
2098
+ baseColumn: never;
2099
+ identity: undefined;
2100
+ generated: undefined;
2101
+ }, {}, {}>;
2102
+ paymentSucceeded: drizzle_orm_pg_core.PgColumn<{
2103
+ name: "payment_succeeded";
2104
+ tableName: "dunning_executed_steps";
2105
+ dataType: "boolean";
2106
+ columnType: "PgBoolean";
2107
+ data: boolean;
2108
+ driverParam: boolean;
2109
+ notNull: false;
2110
+ hasDefault: false;
2111
+ isPrimaryKey: false;
2112
+ isAutoincrement: false;
2113
+ hasRuntimeDefault: false;
2114
+ enumValues: undefined;
2115
+ baseColumn: never;
2116
+ identity: undefined;
2117
+ generated: undefined;
2118
+ }, {}, {}>;
2119
+ notificationsSent: drizzle_orm_pg_core.PgColumn<{
2120
+ name: "notifications_sent";
2121
+ tableName: "dunning_executed_steps";
2122
+ dataType: "json";
2123
+ columnType: "PgJsonb";
2124
+ data: string[];
2125
+ driverParam: unknown;
2126
+ notNull: true;
2127
+ hasDefault: true;
2128
+ isPrimaryKey: false;
2129
+ isAutoincrement: false;
2130
+ hasRuntimeDefault: false;
2131
+ enumValues: undefined;
2132
+ baseColumn: never;
2133
+ identity: undefined;
2134
+ generated: undefined;
2135
+ }, {}, {
2136
+ $type: string[];
2137
+ }>;
2138
+ error: drizzle_orm_pg_core.PgColumn<{
2139
+ name: "error";
2140
+ tableName: "dunning_executed_steps";
2141
+ dataType: "string";
2142
+ columnType: "PgText";
2143
+ data: string;
2144
+ driverParam: string;
2145
+ notNull: false;
2146
+ hasDefault: false;
2147
+ isPrimaryKey: false;
2148
+ isAutoincrement: false;
2149
+ hasRuntimeDefault: false;
2150
+ enumValues: [string, ...string[]];
2151
+ baseColumn: never;
2152
+ identity: undefined;
2153
+ generated: undefined;
2154
+ }, {}, {}>;
2155
+ metadata: drizzle_orm_pg_core.PgColumn<{
2156
+ name: "metadata";
2157
+ tableName: "dunning_executed_steps";
2158
+ dataType: "json";
2159
+ columnType: "PgJsonb";
2160
+ data: Record<string, unknown>;
2161
+ driverParam: unknown;
2162
+ notNull: false;
2163
+ hasDefault: false;
2164
+ isPrimaryKey: false;
2165
+ isAutoincrement: false;
2166
+ hasRuntimeDefault: false;
2167
+ enumValues: undefined;
2168
+ baseColumn: never;
2169
+ identity: undefined;
2170
+ generated: undefined;
2171
+ }, {}, {
2172
+ $type: Record<string, unknown>;
2173
+ }>;
2174
+ };
2175
+ dialect: "pg";
2176
+ }>;
2177
+ /**
2178
+ * Scheduled steps table - steps pending execution
2179
+ */
2180
+ declare const scheduledSteps: drizzle_orm_pg_core.PgTableWithColumns<{
2181
+ name: "dunning_scheduled_steps";
2182
+ schema: undefined;
2183
+ columns: {
2184
+ id: drizzle_orm_pg_core.PgColumn<{
2185
+ name: "id";
2186
+ tableName: "dunning_scheduled_steps";
2187
+ dataType: "string";
2188
+ columnType: "PgText";
2189
+ data: string;
2190
+ driverParam: string;
2191
+ notNull: true;
2192
+ hasDefault: false;
2193
+ isPrimaryKey: true;
2194
+ isAutoincrement: false;
2195
+ hasRuntimeDefault: false;
2196
+ enumValues: [string, ...string[]];
2197
+ baseColumn: never;
2198
+ identity: undefined;
2199
+ generated: undefined;
2200
+ }, {}, {}>;
2201
+ dunningStateId: drizzle_orm_pg_core.PgColumn<{
2202
+ name: "dunning_state_id";
2203
+ tableName: "dunning_scheduled_steps";
2204
+ dataType: "string";
2205
+ columnType: "PgText";
2206
+ data: string;
2207
+ driverParam: string;
2208
+ notNull: true;
2209
+ hasDefault: false;
2210
+ isPrimaryKey: false;
2211
+ isAutoincrement: false;
2212
+ hasRuntimeDefault: false;
2213
+ enumValues: [string, ...string[]];
2214
+ baseColumn: never;
2215
+ identity: undefined;
2216
+ generated: undefined;
2217
+ }, {}, {}>;
2218
+ stepId: drizzle_orm_pg_core.PgColumn<{
2219
+ name: "step_id";
2220
+ tableName: "dunning_scheduled_steps";
2221
+ dataType: "string";
2222
+ columnType: "PgText";
2223
+ data: string;
2224
+ driverParam: string;
2225
+ notNull: true;
2226
+ hasDefault: false;
2227
+ isPrimaryKey: false;
2228
+ isAutoincrement: false;
2229
+ hasRuntimeDefault: false;
2230
+ enumValues: [string, ...string[]];
2231
+ baseColumn: never;
2232
+ identity: undefined;
2233
+ generated: undefined;
2234
+ }, {}, {}>;
2235
+ scheduledAt: drizzle_orm_pg_core.PgColumn<{
2236
+ name: "scheduled_at";
2237
+ tableName: "dunning_scheduled_steps";
2238
+ dataType: "date";
2239
+ columnType: "PgTimestamp";
2240
+ data: Date;
2241
+ driverParam: string;
2242
+ notNull: true;
2243
+ hasDefault: false;
2244
+ isPrimaryKey: false;
2245
+ isAutoincrement: false;
2246
+ hasRuntimeDefault: false;
2247
+ enumValues: undefined;
2248
+ baseColumn: never;
2249
+ identity: undefined;
2250
+ generated: undefined;
2251
+ }, {}, {}>;
2252
+ createdAt: drizzle_orm_pg_core.PgColumn<{
2253
+ name: "created_at";
2254
+ tableName: "dunning_scheduled_steps";
2255
+ dataType: "date";
2256
+ columnType: "PgTimestamp";
2257
+ data: Date;
2258
+ driverParam: string;
2259
+ notNull: true;
2260
+ hasDefault: true;
2261
+ isPrimaryKey: false;
2262
+ isAutoincrement: false;
2263
+ hasRuntimeDefault: false;
2264
+ enumValues: undefined;
2265
+ baseColumn: never;
2266
+ identity: undefined;
2267
+ generated: undefined;
2268
+ }, {}, {}>;
2269
+ };
2270
+ dialect: "pg";
2271
+ }>;
2272
+ /**
2273
+ * Dunning events table - audit log for all dunning events
2274
+ */
2275
+ declare const dunningEvents: drizzle_orm_pg_core.PgTableWithColumns<{
2276
+ name: "dunning_events";
2277
+ schema: undefined;
2278
+ columns: {
2279
+ id: drizzle_orm_pg_core.PgColumn<{
2280
+ name: "id";
2281
+ tableName: "dunning_events";
2282
+ dataType: "string";
2283
+ columnType: "PgText";
2284
+ data: string;
2285
+ driverParam: string;
2286
+ notNull: true;
2287
+ hasDefault: false;
2288
+ isPrimaryKey: true;
2289
+ isAutoincrement: false;
2290
+ hasRuntimeDefault: false;
2291
+ enumValues: [string, ...string[]];
2292
+ baseColumn: never;
2293
+ identity: undefined;
2294
+ generated: undefined;
2295
+ }, {}, {}>;
2296
+ type: drizzle_orm_pg_core.PgColumn<{
2297
+ name: "type";
2298
+ tableName: "dunning_events";
2299
+ dataType: "string";
2300
+ columnType: "PgText";
2301
+ data: string;
2302
+ driverParam: string;
2303
+ notNull: true;
2304
+ hasDefault: false;
2305
+ isPrimaryKey: false;
2306
+ isAutoincrement: false;
2307
+ hasRuntimeDefault: false;
2308
+ enumValues: [string, ...string[]];
2309
+ baseColumn: never;
2310
+ identity: undefined;
2311
+ generated: undefined;
2312
+ }, {}, {}>;
2313
+ customerId: drizzle_orm_pg_core.PgColumn<{
2314
+ name: "customer_id";
2315
+ tableName: "dunning_events";
2316
+ dataType: "string";
2317
+ columnType: "PgText";
2318
+ data: string;
2319
+ driverParam: string;
2320
+ notNull: true;
2321
+ hasDefault: false;
2322
+ isPrimaryKey: false;
2323
+ isAutoincrement: false;
2324
+ hasRuntimeDefault: false;
2325
+ enumValues: [string, ...string[]];
2326
+ baseColumn: never;
2327
+ identity: undefined;
2328
+ generated: undefined;
2329
+ }, {}, {}>;
2330
+ subscriptionId: drizzle_orm_pg_core.PgColumn<{
2331
+ name: "subscription_id";
2332
+ tableName: "dunning_events";
2333
+ dataType: "string";
2334
+ columnType: "PgText";
2335
+ data: string;
2336
+ driverParam: string;
2337
+ notNull: true;
2338
+ hasDefault: false;
2339
+ isPrimaryKey: false;
2340
+ isAutoincrement: false;
2341
+ hasRuntimeDefault: false;
2342
+ enumValues: [string, ...string[]];
2343
+ baseColumn: never;
2344
+ identity: undefined;
2345
+ generated: undefined;
2346
+ }, {}, {}>;
2347
+ dunningStateId: drizzle_orm_pg_core.PgColumn<{
2348
+ name: "dunning_state_id";
2349
+ tableName: "dunning_events";
2350
+ dataType: "string";
2351
+ columnType: "PgText";
2352
+ data: string;
2353
+ driverParam: string;
2354
+ notNull: true;
2355
+ hasDefault: false;
2356
+ isPrimaryKey: false;
2357
+ isAutoincrement: false;
2358
+ hasRuntimeDefault: false;
2359
+ enumValues: [string, ...string[]];
2360
+ baseColumn: never;
2361
+ identity: undefined;
2362
+ generated: undefined;
2363
+ }, {}, {}>;
2364
+ timestamp: drizzle_orm_pg_core.PgColumn<{
2365
+ name: "timestamp";
2366
+ tableName: "dunning_events";
2367
+ dataType: "date";
2368
+ columnType: "PgTimestamp";
2369
+ data: Date;
2370
+ driverParam: string;
2371
+ notNull: true;
2372
+ hasDefault: false;
2373
+ isPrimaryKey: false;
2374
+ isAutoincrement: false;
2375
+ hasRuntimeDefault: false;
2376
+ enumValues: undefined;
2377
+ baseColumn: never;
2378
+ identity: undefined;
2379
+ generated: undefined;
2380
+ }, {}, {}>;
2381
+ data: drizzle_orm_pg_core.PgColumn<{
2382
+ name: "data";
2383
+ tableName: "dunning_events";
2384
+ dataType: "json";
2385
+ columnType: "PgJsonb";
2386
+ data: Record<string, unknown>;
2387
+ driverParam: unknown;
2388
+ notNull: true;
2389
+ hasDefault: true;
2390
+ isPrimaryKey: false;
2391
+ isAutoincrement: false;
2392
+ hasRuntimeDefault: false;
2393
+ enumValues: undefined;
2394
+ baseColumn: never;
2395
+ identity: undefined;
2396
+ generated: undefined;
2397
+ }, {}, {
2398
+ $type: Record<string, unknown>;
2399
+ }>;
2400
+ };
2401
+ dialect: "pg";
2402
+ }>;
2403
+ /**
2404
+ * Custom retry strategies table - overrides for default strategies
2405
+ */
2406
+ declare const retryStrategies: drizzle_orm_pg_core.PgTableWithColumns<{
2407
+ name: "dunning_retry_strategies";
2408
+ schema: undefined;
2409
+ columns: {
2410
+ id: drizzle_orm_pg_core.PgColumn<{
2411
+ name: "id";
2412
+ tableName: "dunning_retry_strategies";
2413
+ dataType: "string";
2414
+ columnType: "PgText";
2415
+ data: string;
2416
+ driverParam: string;
2417
+ notNull: true;
2418
+ hasDefault: false;
2419
+ isPrimaryKey: true;
2420
+ isAutoincrement: false;
2421
+ hasRuntimeDefault: false;
2422
+ enumValues: [string, ...string[]];
2423
+ baseColumn: never;
2424
+ identity: undefined;
2425
+ generated: undefined;
2426
+ }, {}, {}>;
2427
+ category: drizzle_orm_pg_core.PgColumn<{
2428
+ name: "category";
2429
+ tableName: "dunning_retry_strategies";
2430
+ dataType: "string";
2431
+ columnType: "PgText";
2432
+ data: string;
2433
+ driverParam: string;
2434
+ notNull: true;
2435
+ hasDefault: false;
2436
+ isPrimaryKey: false;
2437
+ isAutoincrement: false;
2438
+ hasRuntimeDefault: false;
2439
+ enumValues: [string, ...string[]];
2440
+ baseColumn: never;
2441
+ identity: undefined;
2442
+ generated: undefined;
2443
+ }, {}, {}>;
2444
+ shouldRetry: drizzle_orm_pg_core.PgColumn<{
2445
+ name: "should_retry";
2446
+ tableName: "dunning_retry_strategies";
2447
+ dataType: "boolean";
2448
+ columnType: "PgBoolean";
2449
+ data: boolean;
2450
+ driverParam: boolean;
2451
+ notNull: true;
2452
+ hasDefault: true;
2453
+ isPrimaryKey: false;
2454
+ isAutoincrement: false;
2455
+ hasRuntimeDefault: false;
2456
+ enumValues: undefined;
2457
+ baseColumn: never;
2458
+ identity: undefined;
2459
+ generated: undefined;
2460
+ }, {}, {}>;
2461
+ initialDelayHours: drizzle_orm_pg_core.PgColumn<{
2462
+ name: "initial_delay_hours";
2463
+ tableName: "dunning_retry_strategies";
2464
+ dataType: "number";
2465
+ columnType: "PgInteger";
2466
+ data: number;
2467
+ driverParam: string | number;
2468
+ notNull: true;
2469
+ hasDefault: true;
2470
+ isPrimaryKey: false;
2471
+ isAutoincrement: false;
2472
+ hasRuntimeDefault: false;
2473
+ enumValues: undefined;
2474
+ baseColumn: never;
2475
+ identity: undefined;
2476
+ generated: undefined;
2477
+ }, {}, {}>;
2478
+ maxRetries: drizzle_orm_pg_core.PgColumn<{
2479
+ name: "max_retries";
2480
+ tableName: "dunning_retry_strategies";
2481
+ dataType: "number";
2482
+ columnType: "PgInteger";
2483
+ data: number;
2484
+ driverParam: string | number;
2485
+ notNull: true;
2486
+ hasDefault: true;
2487
+ isPrimaryKey: false;
2488
+ isAutoincrement: false;
2489
+ hasRuntimeDefault: false;
2490
+ enumValues: undefined;
2491
+ baseColumn: never;
2492
+ identity: undefined;
2493
+ generated: undefined;
2494
+ }, {}, {}>;
2495
+ backoffMultiplier: drizzle_orm_pg_core.PgColumn<{
2496
+ name: "backoff_multiplier";
2497
+ tableName: "dunning_retry_strategies";
2498
+ dataType: "number";
2499
+ columnType: "PgInteger";
2500
+ data: number;
2501
+ driverParam: string | number;
2502
+ notNull: true;
2503
+ hasDefault: true;
2504
+ isPrimaryKey: false;
2505
+ isAutoincrement: false;
2506
+ hasRuntimeDefault: false;
2507
+ enumValues: undefined;
2508
+ baseColumn: never;
2509
+ identity: undefined;
2510
+ generated: undefined;
2511
+ }, {}, {}>;
2512
+ maxDelayHours: drizzle_orm_pg_core.PgColumn<{
2513
+ name: "max_delay_hours";
2514
+ tableName: "dunning_retry_strategies";
2515
+ dataType: "number";
2516
+ columnType: "PgInteger";
2517
+ data: number;
2518
+ driverParam: string | number;
2519
+ notNull: true;
2520
+ hasDefault: true;
2521
+ isPrimaryKey: false;
2522
+ isAutoincrement: false;
2523
+ hasRuntimeDefault: false;
2524
+ enumValues: undefined;
2525
+ baseColumn: never;
2526
+ identity: undefined;
2527
+ generated: undefined;
2528
+ }, {}, {}>;
2529
+ optimalRetryHours: drizzle_orm_pg_core.PgColumn<{
2530
+ name: "optimal_retry_hours";
2531
+ tableName: "dunning_retry_strategies";
2532
+ dataType: "json";
2533
+ columnType: "PgJsonb";
2534
+ data: number[];
2535
+ driverParam: unknown;
2536
+ notNull: false;
2537
+ hasDefault: false;
2538
+ isPrimaryKey: false;
2539
+ isAutoincrement: false;
2540
+ hasRuntimeDefault: false;
2541
+ enumValues: undefined;
2542
+ baseColumn: never;
2543
+ identity: undefined;
2544
+ generated: undefined;
2545
+ }, {}, {
2546
+ $type: number[];
2547
+ }>;
2548
+ optimalRetryDays: drizzle_orm_pg_core.PgColumn<{
2549
+ name: "optimal_retry_days";
2550
+ tableName: "dunning_retry_strategies";
2551
+ dataType: "json";
2552
+ columnType: "PgJsonb";
2553
+ data: number[];
2554
+ driverParam: unknown;
2555
+ notNull: false;
2556
+ hasDefault: false;
2557
+ isPrimaryKey: false;
2558
+ isAutoincrement: false;
2559
+ hasRuntimeDefault: false;
2560
+ enumValues: undefined;
2561
+ baseColumn: never;
2562
+ identity: undefined;
2563
+ generated: undefined;
2564
+ }, {}, {
2565
+ $type: number[];
2566
+ }>;
2567
+ metadata: drizzle_orm_pg_core.PgColumn<{
2568
+ name: "metadata";
2569
+ tableName: "dunning_retry_strategies";
2570
+ dataType: "json";
2571
+ columnType: "PgJsonb";
2572
+ data: Record<string, unknown>;
2573
+ driverParam: unknown;
2574
+ notNull: false;
2575
+ hasDefault: false;
2576
+ isPrimaryKey: false;
2577
+ isAutoincrement: false;
2578
+ hasRuntimeDefault: false;
2579
+ enumValues: undefined;
2580
+ baseColumn: never;
2581
+ identity: undefined;
2582
+ generated: undefined;
2583
+ }, {}, {
2584
+ $type: Record<string, unknown>;
2585
+ }>;
2586
+ updatedAt: drizzle_orm_pg_core.PgColumn<{
2587
+ name: "updated_at";
2588
+ tableName: "dunning_retry_strategies";
2589
+ dataType: "date";
2590
+ columnType: "PgTimestamp";
2591
+ data: Date;
2592
+ driverParam: string;
2593
+ notNull: true;
2594
+ hasDefault: true;
2595
+ isPrimaryKey: false;
2596
+ isAutoincrement: false;
2597
+ hasRuntimeDefault: false;
2598
+ enumValues: undefined;
2599
+ baseColumn: never;
2600
+ identity: undefined;
2601
+ generated: undefined;
2602
+ }, {}, {}>;
2603
+ };
2604
+ dialect: "pg";
2605
+ }>;
2606
+ type DunningSequenceRow = typeof dunningSequences.$inferSelect;
2607
+ type NewDunningSequence = typeof dunningSequences.$inferInsert;
2608
+ type DunningStepRow = typeof dunningSteps.$inferSelect;
2609
+ type NewDunningStep = typeof dunningSteps.$inferInsert;
2610
+ type PaymentFailureRow = typeof paymentFailures.$inferSelect;
2611
+ type NewPaymentFailure = typeof paymentFailures.$inferInsert;
2612
+ type DunningStateRow = typeof dunningStates.$inferSelect;
2613
+ type NewDunningState = typeof dunningStates.$inferInsert;
2614
+ type ExecutedStepRow = typeof executedSteps.$inferSelect;
2615
+ type NewExecutedStep = typeof executedSteps.$inferInsert;
2616
+ type ScheduledStepRow = typeof scheduledSteps.$inferSelect;
2617
+ type NewScheduledStep = typeof scheduledSteps.$inferInsert;
2618
+ type DunningEventRow = typeof dunningEvents.$inferSelect;
2619
+ type NewDunningEvent = typeof dunningEvents.$inferInsert;
2620
+ type RetryStrategyRow = typeof retryStrategies.$inferSelect;
2621
+ type NewRetryStrategy = typeof retryStrategies.$inferInsert;
2622
+ /**
2623
+ * All dunning schema tables
2624
+ */
2625
+ declare const dunningSchema: {
2626
+ dunningSequences: drizzle_orm_pg_core.PgTableWithColumns<{
2627
+ name: "dunning_sequences";
2628
+ schema: undefined;
2629
+ columns: {
2630
+ id: drizzle_orm_pg_core.PgColumn<{
2631
+ name: "id";
2632
+ tableName: "dunning_sequences";
2633
+ dataType: "string";
2634
+ columnType: "PgText";
2635
+ data: string;
2636
+ driverParam: string;
2637
+ notNull: true;
2638
+ hasDefault: false;
2639
+ isPrimaryKey: true;
2640
+ isAutoincrement: false;
2641
+ hasRuntimeDefault: false;
2642
+ enumValues: [string, ...string[]];
2643
+ baseColumn: never;
2644
+ identity: undefined;
2645
+ generated: undefined;
2646
+ }, {}, {}>;
2647
+ name: drizzle_orm_pg_core.PgColumn<{
2648
+ name: "name";
2649
+ tableName: "dunning_sequences";
2650
+ dataType: "string";
2651
+ columnType: "PgText";
2652
+ data: string;
2653
+ driverParam: string;
2654
+ notNull: true;
2655
+ hasDefault: false;
2656
+ isPrimaryKey: false;
2657
+ isAutoincrement: false;
2658
+ hasRuntimeDefault: false;
2659
+ enumValues: [string, ...string[]];
2660
+ baseColumn: never;
2661
+ identity: undefined;
2662
+ generated: undefined;
2663
+ }, {}, {}>;
2664
+ description: drizzle_orm_pg_core.PgColumn<{
2665
+ name: "description";
2666
+ tableName: "dunning_sequences";
2667
+ dataType: "string";
2668
+ columnType: "PgText";
2669
+ data: string;
2670
+ driverParam: string;
2671
+ notNull: false;
2672
+ hasDefault: false;
2673
+ isPrimaryKey: false;
2674
+ isAutoincrement: false;
2675
+ hasRuntimeDefault: false;
2676
+ enumValues: [string, ...string[]];
2677
+ baseColumn: never;
2678
+ identity: undefined;
2679
+ generated: undefined;
2680
+ }, {}, {}>;
2681
+ maxDurationDays: drizzle_orm_pg_core.PgColumn<{
2682
+ name: "max_duration_days";
2683
+ tableName: "dunning_sequences";
2684
+ dataType: "number";
2685
+ columnType: "PgInteger";
2686
+ data: number;
2687
+ driverParam: string | number;
2688
+ notNull: true;
2689
+ hasDefault: true;
2690
+ isPrimaryKey: false;
2691
+ isAutoincrement: false;
2692
+ hasRuntimeDefault: false;
2693
+ enumValues: undefined;
2694
+ baseColumn: never;
2695
+ identity: undefined;
2696
+ generated: undefined;
2697
+ }, {}, {}>;
2698
+ isActive: drizzle_orm_pg_core.PgColumn<{
2699
+ name: "is_active";
2700
+ tableName: "dunning_sequences";
2701
+ dataType: "boolean";
2702
+ columnType: "PgBoolean";
2703
+ data: boolean;
2704
+ driverParam: boolean;
2705
+ notNull: true;
2706
+ hasDefault: true;
2707
+ isPrimaryKey: false;
2708
+ isAutoincrement: false;
2709
+ hasRuntimeDefault: false;
2710
+ enumValues: undefined;
2711
+ baseColumn: never;
2712
+ identity: undefined;
2713
+ generated: undefined;
2714
+ }, {}, {}>;
2715
+ isDefault: drizzle_orm_pg_core.PgColumn<{
2716
+ name: "is_default";
2717
+ tableName: "dunning_sequences";
2718
+ dataType: "boolean";
2719
+ columnType: "PgBoolean";
2720
+ data: boolean;
2721
+ driverParam: boolean;
2722
+ notNull: true;
2723
+ hasDefault: true;
2724
+ isPrimaryKey: false;
2725
+ isAutoincrement: false;
2726
+ hasRuntimeDefault: false;
2727
+ enumValues: undefined;
2728
+ baseColumn: never;
2729
+ identity: undefined;
2730
+ generated: undefined;
2731
+ }, {}, {}>;
2732
+ planTier: drizzle_orm_pg_core.PgColumn<{
2733
+ name: "plan_tier";
2734
+ tableName: "dunning_sequences";
2735
+ dataType: "number";
2736
+ columnType: "PgInteger";
2737
+ data: number;
2738
+ driverParam: string | number;
2739
+ notNull: false;
2740
+ hasDefault: false;
2741
+ isPrimaryKey: false;
2742
+ isAutoincrement: false;
2743
+ hasRuntimeDefault: false;
2744
+ enumValues: undefined;
2745
+ baseColumn: never;
2746
+ identity: undefined;
2747
+ generated: undefined;
2748
+ }, {}, {}>;
2749
+ metadata: drizzle_orm_pg_core.PgColumn<{
2750
+ name: "metadata";
2751
+ tableName: "dunning_sequences";
2752
+ dataType: "json";
2753
+ columnType: "PgJsonb";
2754
+ data: Record<string, unknown>;
2755
+ driverParam: unknown;
2756
+ notNull: false;
2757
+ hasDefault: false;
2758
+ isPrimaryKey: false;
2759
+ isAutoincrement: false;
2760
+ hasRuntimeDefault: false;
2761
+ enumValues: undefined;
2762
+ baseColumn: never;
2763
+ identity: undefined;
2764
+ generated: undefined;
2765
+ }, {}, {
2766
+ $type: Record<string, unknown>;
2767
+ }>;
2768
+ createdAt: drizzle_orm_pg_core.PgColumn<{
2769
+ name: "created_at";
2770
+ tableName: "dunning_sequences";
2771
+ dataType: "date";
2772
+ columnType: "PgTimestamp";
2773
+ data: Date;
2774
+ driverParam: string;
2775
+ notNull: true;
2776
+ hasDefault: true;
2777
+ isPrimaryKey: false;
2778
+ isAutoincrement: false;
2779
+ hasRuntimeDefault: false;
2780
+ enumValues: undefined;
2781
+ baseColumn: never;
2782
+ identity: undefined;
2783
+ generated: undefined;
2784
+ }, {}, {}>;
2785
+ updatedAt: drizzle_orm_pg_core.PgColumn<{
2786
+ name: "updated_at";
2787
+ tableName: "dunning_sequences";
2788
+ dataType: "date";
2789
+ columnType: "PgTimestamp";
2790
+ data: Date;
2791
+ driverParam: string;
2792
+ notNull: true;
2793
+ hasDefault: true;
2794
+ isPrimaryKey: false;
2795
+ isAutoincrement: false;
2796
+ hasRuntimeDefault: false;
2797
+ enumValues: undefined;
2798
+ baseColumn: never;
2799
+ identity: undefined;
2800
+ generated: undefined;
2801
+ }, {}, {}>;
2802
+ };
2803
+ dialect: "pg";
2804
+ }>;
2805
+ dunningSteps: drizzle_orm_pg_core.PgTableWithColumns<{
2806
+ name: "dunning_steps";
2807
+ schema: undefined;
2808
+ columns: {
2809
+ id: drizzle_orm_pg_core.PgColumn<{
2810
+ name: "id";
2811
+ tableName: "dunning_steps";
2812
+ dataType: "string";
2813
+ columnType: "PgText";
2814
+ data: string;
2815
+ driverParam: string;
2816
+ notNull: true;
2817
+ hasDefault: false;
2818
+ isPrimaryKey: true;
2819
+ isAutoincrement: false;
2820
+ hasRuntimeDefault: false;
2821
+ enumValues: [string, ...string[]];
2822
+ baseColumn: never;
2823
+ identity: undefined;
2824
+ generated: undefined;
2825
+ }, {}, {}>;
2826
+ sequenceId: drizzle_orm_pg_core.PgColumn<{
2827
+ name: "sequence_id";
2828
+ tableName: "dunning_steps";
2829
+ dataType: "string";
2830
+ columnType: "PgText";
2831
+ data: string;
2832
+ driverParam: string;
2833
+ notNull: true;
2834
+ hasDefault: false;
2835
+ isPrimaryKey: false;
2836
+ isAutoincrement: false;
2837
+ hasRuntimeDefault: false;
2838
+ enumValues: [string, ...string[]];
2839
+ baseColumn: never;
2840
+ identity: undefined;
2841
+ generated: undefined;
2842
+ }, {}, {}>;
2843
+ name: drizzle_orm_pg_core.PgColumn<{
2844
+ name: "name";
2845
+ tableName: "dunning_steps";
2846
+ dataType: "string";
2847
+ columnType: "PgText";
2848
+ data: string;
2849
+ driverParam: string;
2850
+ notNull: true;
2851
+ hasDefault: false;
2852
+ isPrimaryKey: false;
2853
+ isAutoincrement: false;
2854
+ hasRuntimeDefault: false;
2855
+ enumValues: [string, ...string[]];
2856
+ baseColumn: never;
2857
+ identity: undefined;
2858
+ generated: undefined;
2859
+ }, {}, {}>;
2860
+ stepOrder: drizzle_orm_pg_core.PgColumn<{
2861
+ name: "step_order";
2862
+ tableName: "dunning_steps";
2863
+ dataType: "number";
2864
+ columnType: "PgInteger";
2865
+ data: number;
2866
+ driverParam: string | number;
2867
+ notNull: true;
2868
+ hasDefault: false;
2869
+ isPrimaryKey: false;
2870
+ isAutoincrement: false;
2871
+ hasRuntimeDefault: false;
2872
+ enumValues: undefined;
2873
+ baseColumn: never;
2874
+ identity: undefined;
2875
+ generated: undefined;
2876
+ }, {}, {}>;
2877
+ daysAfterFailure: drizzle_orm_pg_core.PgColumn<{
2878
+ name: "days_after_failure";
2879
+ tableName: "dunning_steps";
2880
+ dataType: "number";
2881
+ columnType: "PgInteger";
2882
+ data: number;
2883
+ driverParam: string | number;
2884
+ notNull: true;
2885
+ hasDefault: true;
2886
+ isPrimaryKey: false;
2887
+ isAutoincrement: false;
2888
+ hasRuntimeDefault: false;
2889
+ enumValues: undefined;
2890
+ baseColumn: never;
2891
+ identity: undefined;
2892
+ generated: undefined;
2893
+ }, {}, {}>;
2894
+ hoursOffset: drizzle_orm_pg_core.PgColumn<{
2895
+ name: "hours_offset";
2896
+ tableName: "dunning_steps";
2897
+ dataType: "number";
2898
+ columnType: "PgInteger";
2899
+ data: number;
2900
+ driverParam: string | number;
2901
+ notNull: false;
2902
+ hasDefault: false;
2903
+ isPrimaryKey: false;
2904
+ isAutoincrement: false;
2905
+ hasRuntimeDefault: false;
2906
+ enumValues: undefined;
2907
+ baseColumn: never;
2908
+ identity: undefined;
2909
+ generated: undefined;
2910
+ }, {}, {}>;
2911
+ actions: drizzle_orm_pg_core.PgColumn<{
2912
+ name: "actions";
2913
+ tableName: "dunning_steps";
2914
+ dataType: "json";
2915
+ columnType: "PgJsonb";
2916
+ data: string[];
2917
+ driverParam: unknown;
2918
+ notNull: true;
2919
+ hasDefault: true;
2920
+ isPrimaryKey: false;
2921
+ isAutoincrement: false;
2922
+ hasRuntimeDefault: false;
2923
+ enumValues: undefined;
2924
+ baseColumn: never;
2925
+ identity: undefined;
2926
+ generated: undefined;
2927
+ }, {}, {
2928
+ $type: string[];
2929
+ }>;
2930
+ notificationChannels: drizzle_orm_pg_core.PgColumn<{
2931
+ name: "notification_channels";
2932
+ tableName: "dunning_steps";
2933
+ dataType: "json";
2934
+ columnType: "PgJsonb";
2935
+ data: string[];
2936
+ driverParam: unknown;
2937
+ notNull: false;
2938
+ hasDefault: false;
2939
+ isPrimaryKey: false;
2940
+ isAutoincrement: false;
2941
+ hasRuntimeDefault: false;
2942
+ enumValues: undefined;
2943
+ baseColumn: never;
2944
+ identity: undefined;
2945
+ generated: undefined;
2946
+ }, {}, {
2947
+ $type: string[];
2948
+ }>;
2949
+ notificationTemplateId: drizzle_orm_pg_core.PgColumn<{
2950
+ name: "notification_template_id";
2951
+ tableName: "dunning_steps";
2952
+ dataType: "string";
2953
+ columnType: "PgText";
2954
+ data: string;
2955
+ driverParam: string;
2956
+ notNull: false;
2957
+ hasDefault: false;
2958
+ isPrimaryKey: false;
2959
+ isAutoincrement: false;
2960
+ hasRuntimeDefault: false;
2961
+ enumValues: [string, ...string[]];
2962
+ baseColumn: never;
2963
+ identity: undefined;
2964
+ generated: undefined;
2965
+ }, {}, {}>;
2966
+ accessLevel: drizzle_orm_pg_core.PgColumn<{
2967
+ name: "access_level";
2968
+ tableName: "dunning_steps";
2969
+ dataType: "string";
2970
+ columnType: "PgText";
2971
+ data: string;
2972
+ driverParam: string;
2973
+ notNull: false;
2974
+ hasDefault: false;
2975
+ isPrimaryKey: false;
2976
+ isAutoincrement: false;
2977
+ hasRuntimeDefault: false;
2978
+ enumValues: [string, ...string[]];
2979
+ baseColumn: never;
2980
+ identity: undefined;
2981
+ generated: undefined;
2982
+ }, {}, {}>;
2983
+ isFinal: drizzle_orm_pg_core.PgColumn<{
2984
+ name: "is_final";
2985
+ tableName: "dunning_steps";
2986
+ dataType: "boolean";
2987
+ columnType: "PgBoolean";
2988
+ data: boolean;
2989
+ driverParam: boolean;
2990
+ notNull: true;
2991
+ hasDefault: true;
2992
+ isPrimaryKey: false;
2993
+ isAutoincrement: false;
2994
+ hasRuntimeDefault: false;
2995
+ enumValues: undefined;
2996
+ baseColumn: never;
2997
+ identity: undefined;
2998
+ generated: undefined;
2999
+ }, {}, {}>;
3000
+ metadata: drizzle_orm_pg_core.PgColumn<{
3001
+ name: "metadata";
3002
+ tableName: "dunning_steps";
3003
+ dataType: "json";
3004
+ columnType: "PgJsonb";
3005
+ data: Record<string, unknown>;
3006
+ driverParam: unknown;
3007
+ notNull: false;
3008
+ hasDefault: false;
3009
+ isPrimaryKey: false;
3010
+ isAutoincrement: false;
3011
+ hasRuntimeDefault: false;
3012
+ enumValues: undefined;
3013
+ baseColumn: never;
3014
+ identity: undefined;
3015
+ generated: undefined;
3016
+ }, {}, {
3017
+ $type: Record<string, unknown>;
3018
+ }>;
3019
+ };
3020
+ dialect: "pg";
3021
+ }>;
3022
+ paymentFailures: drizzle_orm_pg_core.PgTableWithColumns<{
3023
+ name: "dunning_payment_failures";
3024
+ schema: undefined;
3025
+ columns: {
3026
+ id: drizzle_orm_pg_core.PgColumn<{
3027
+ name: "id";
3028
+ tableName: "dunning_payment_failures";
3029
+ dataType: "string";
3030
+ columnType: "PgText";
3031
+ data: string;
3032
+ driverParam: string;
3033
+ notNull: true;
3034
+ hasDefault: false;
3035
+ isPrimaryKey: true;
3036
+ isAutoincrement: false;
3037
+ hasRuntimeDefault: false;
3038
+ enumValues: [string, ...string[]];
3039
+ baseColumn: never;
3040
+ identity: undefined;
3041
+ generated: undefined;
3042
+ }, {}, {}>;
3043
+ customerId: drizzle_orm_pg_core.PgColumn<{
3044
+ name: "customer_id";
3045
+ tableName: "dunning_payment_failures";
3046
+ dataType: "string";
3047
+ columnType: "PgText";
3048
+ data: string;
3049
+ driverParam: string;
3050
+ notNull: true;
3051
+ hasDefault: false;
3052
+ isPrimaryKey: false;
3053
+ isAutoincrement: false;
3054
+ hasRuntimeDefault: false;
3055
+ enumValues: [string, ...string[]];
3056
+ baseColumn: never;
3057
+ identity: undefined;
3058
+ generated: undefined;
3059
+ }, {}, {}>;
3060
+ subscriptionId: drizzle_orm_pg_core.PgColumn<{
3061
+ name: "subscription_id";
3062
+ tableName: "dunning_payment_failures";
3063
+ dataType: "string";
3064
+ columnType: "PgText";
3065
+ data: string;
3066
+ driverParam: string;
3067
+ notNull: true;
3068
+ hasDefault: false;
3069
+ isPrimaryKey: false;
3070
+ isAutoincrement: false;
3071
+ hasRuntimeDefault: false;
3072
+ enumValues: [string, ...string[]];
3073
+ baseColumn: never;
3074
+ identity: undefined;
3075
+ generated: undefined;
3076
+ }, {}, {}>;
3077
+ invoiceId: drizzle_orm_pg_core.PgColumn<{
3078
+ name: "invoice_id";
3079
+ tableName: "dunning_payment_failures";
3080
+ dataType: "string";
3081
+ columnType: "PgText";
3082
+ data: string;
3083
+ driverParam: string;
3084
+ notNull: false;
3085
+ hasDefault: false;
3086
+ isPrimaryKey: false;
3087
+ isAutoincrement: false;
3088
+ hasRuntimeDefault: false;
3089
+ enumValues: [string, ...string[]];
3090
+ baseColumn: never;
3091
+ identity: undefined;
3092
+ generated: undefined;
3093
+ }, {}, {}>;
3094
+ amount: drizzle_orm_pg_core.PgColumn<{
3095
+ name: "amount";
3096
+ tableName: "dunning_payment_failures";
3097
+ dataType: "number";
3098
+ columnType: "PgInteger";
3099
+ data: number;
3100
+ driverParam: string | number;
3101
+ notNull: true;
3102
+ hasDefault: false;
3103
+ isPrimaryKey: false;
3104
+ isAutoincrement: false;
3105
+ hasRuntimeDefault: false;
3106
+ enumValues: undefined;
3107
+ baseColumn: never;
3108
+ identity: undefined;
3109
+ generated: undefined;
3110
+ }, {}, {}>;
3111
+ currency: drizzle_orm_pg_core.PgColumn<{
3112
+ name: "currency";
3113
+ tableName: "dunning_payment_failures";
3114
+ dataType: "string";
3115
+ columnType: "PgText";
3116
+ data: string;
3117
+ driverParam: string;
3118
+ notNull: true;
3119
+ hasDefault: true;
3120
+ isPrimaryKey: false;
3121
+ isAutoincrement: false;
3122
+ hasRuntimeDefault: false;
3123
+ enumValues: [string, ...string[]];
3124
+ baseColumn: never;
3125
+ identity: undefined;
3126
+ generated: undefined;
3127
+ }, {}, {}>;
3128
+ category: drizzle_orm_pg_core.PgColumn<{
3129
+ name: "category";
3130
+ tableName: "dunning_payment_failures";
3131
+ dataType: "string";
3132
+ columnType: "PgText";
3133
+ data: string;
3134
+ driverParam: string;
3135
+ notNull: true;
3136
+ hasDefault: false;
3137
+ isPrimaryKey: false;
3138
+ isAutoincrement: false;
3139
+ hasRuntimeDefault: false;
3140
+ enumValues: [string, ...string[]];
3141
+ baseColumn: never;
3142
+ identity: undefined;
3143
+ generated: undefined;
3144
+ }, {}, {}>;
3145
+ errorCode: drizzle_orm_pg_core.PgColumn<{
3146
+ name: "error_code";
3147
+ tableName: "dunning_payment_failures";
3148
+ dataType: "string";
3149
+ columnType: "PgText";
3150
+ data: string;
3151
+ driverParam: string;
3152
+ notNull: true;
3153
+ hasDefault: false;
3154
+ isPrimaryKey: false;
3155
+ isAutoincrement: false;
3156
+ hasRuntimeDefault: false;
3157
+ enumValues: [string, ...string[]];
3158
+ baseColumn: never;
3159
+ identity: undefined;
3160
+ generated: undefined;
3161
+ }, {}, {}>;
3162
+ errorMessage: drizzle_orm_pg_core.PgColumn<{
3163
+ name: "error_message";
3164
+ tableName: "dunning_payment_failures";
3165
+ dataType: "string";
3166
+ columnType: "PgText";
3167
+ data: string;
3168
+ driverParam: string;
3169
+ notNull: true;
3170
+ hasDefault: false;
3171
+ isPrimaryKey: false;
3172
+ isAutoincrement: false;
3173
+ hasRuntimeDefault: false;
3174
+ enumValues: [string, ...string[]];
3175
+ baseColumn: never;
3176
+ identity: undefined;
3177
+ generated: undefined;
3178
+ }, {}, {}>;
3179
+ provider: drizzle_orm_pg_core.PgColumn<{
3180
+ name: "provider";
3181
+ tableName: "dunning_payment_failures";
3182
+ dataType: "string";
3183
+ columnType: "PgText";
3184
+ data: string;
3185
+ driverParam: string;
3186
+ notNull: true;
3187
+ hasDefault: false;
3188
+ isPrimaryKey: false;
3189
+ isAutoincrement: false;
3190
+ hasRuntimeDefault: false;
3191
+ enumValues: [string, ...string[]];
3192
+ baseColumn: never;
3193
+ identity: undefined;
3194
+ generated: undefined;
3195
+ }, {}, {}>;
3196
+ failedAt: drizzle_orm_pg_core.PgColumn<{
3197
+ name: "failed_at";
3198
+ tableName: "dunning_payment_failures";
3199
+ dataType: "date";
3200
+ columnType: "PgTimestamp";
3201
+ data: Date;
3202
+ driverParam: string;
3203
+ notNull: true;
3204
+ hasDefault: false;
3205
+ isPrimaryKey: false;
3206
+ isAutoincrement: false;
3207
+ hasRuntimeDefault: false;
3208
+ enumValues: undefined;
3209
+ baseColumn: never;
3210
+ identity: undefined;
3211
+ generated: undefined;
3212
+ }, {}, {}>;
3213
+ retryCount: drizzle_orm_pg_core.PgColumn<{
3214
+ name: "retry_count";
3215
+ tableName: "dunning_payment_failures";
3216
+ dataType: "number";
3217
+ columnType: "PgInteger";
3218
+ data: number;
3219
+ driverParam: string | number;
3220
+ notNull: true;
3221
+ hasDefault: true;
3222
+ isPrimaryKey: false;
3223
+ isAutoincrement: false;
3224
+ hasRuntimeDefault: false;
3225
+ enumValues: undefined;
3226
+ baseColumn: never;
3227
+ identity: undefined;
3228
+ generated: undefined;
3229
+ }, {}, {}>;
3230
+ nextRetryAt: drizzle_orm_pg_core.PgColumn<{
3231
+ name: "next_retry_at";
3232
+ tableName: "dunning_payment_failures";
3233
+ dataType: "date";
3234
+ columnType: "PgTimestamp";
3235
+ data: Date;
3236
+ driverParam: string;
3237
+ notNull: false;
3238
+ hasDefault: false;
3239
+ isPrimaryKey: false;
3240
+ isAutoincrement: false;
3241
+ hasRuntimeDefault: false;
3242
+ enumValues: undefined;
3243
+ baseColumn: never;
3244
+ identity: undefined;
3245
+ generated: undefined;
3246
+ }, {}, {}>;
3247
+ isRecoverable: drizzle_orm_pg_core.PgColumn<{
3248
+ name: "is_recoverable";
3249
+ tableName: "dunning_payment_failures";
3250
+ dataType: "boolean";
3251
+ columnType: "PgBoolean";
3252
+ data: boolean;
3253
+ driverParam: boolean;
3254
+ notNull: true;
3255
+ hasDefault: true;
3256
+ isPrimaryKey: false;
3257
+ isAutoincrement: false;
3258
+ hasRuntimeDefault: false;
3259
+ enumValues: undefined;
3260
+ baseColumn: never;
3261
+ identity: undefined;
3262
+ generated: undefined;
3263
+ }, {}, {}>;
3264
+ metadata: drizzle_orm_pg_core.PgColumn<{
3265
+ name: "metadata";
3266
+ tableName: "dunning_payment_failures";
3267
+ dataType: "json";
3268
+ columnType: "PgJsonb";
3269
+ data: Record<string, unknown>;
3270
+ driverParam: unknown;
3271
+ notNull: false;
3272
+ hasDefault: false;
3273
+ isPrimaryKey: false;
3274
+ isAutoincrement: false;
3275
+ hasRuntimeDefault: false;
3276
+ enumValues: undefined;
3277
+ baseColumn: never;
3278
+ identity: undefined;
3279
+ generated: undefined;
3280
+ }, {}, {
3281
+ $type: Record<string, unknown>;
3282
+ }>;
3283
+ };
3284
+ dialect: "pg";
3285
+ }>;
3286
+ dunningStates: drizzle_orm_pg_core.PgTableWithColumns<{
3287
+ name: "dunning_states";
3288
+ schema: undefined;
3289
+ columns: {
3290
+ id: drizzle_orm_pg_core.PgColumn<{
3291
+ name: "id";
3292
+ tableName: "dunning_states";
3293
+ dataType: "string";
3294
+ columnType: "PgText";
3295
+ data: string;
3296
+ driverParam: string;
3297
+ notNull: true;
3298
+ hasDefault: false;
3299
+ isPrimaryKey: true;
3300
+ isAutoincrement: false;
3301
+ hasRuntimeDefault: false;
3302
+ enumValues: [string, ...string[]];
3303
+ baseColumn: never;
3304
+ identity: undefined;
3305
+ generated: undefined;
3306
+ }, {}, {}>;
3307
+ customerId: drizzle_orm_pg_core.PgColumn<{
3308
+ name: "customer_id";
3309
+ tableName: "dunning_states";
3310
+ dataType: "string";
3311
+ columnType: "PgText";
3312
+ data: string;
3313
+ driverParam: string;
3314
+ notNull: true;
3315
+ hasDefault: false;
3316
+ isPrimaryKey: false;
3317
+ isAutoincrement: false;
3318
+ hasRuntimeDefault: false;
3319
+ enumValues: [string, ...string[]];
3320
+ baseColumn: never;
3321
+ identity: undefined;
3322
+ generated: undefined;
3323
+ }, {}, {}>;
3324
+ subscriptionId: drizzle_orm_pg_core.PgColumn<{
3325
+ name: "subscription_id";
3326
+ tableName: "dunning_states";
3327
+ dataType: "string";
3328
+ columnType: "PgText";
3329
+ data: string;
3330
+ driverParam: string;
3331
+ notNull: true;
3332
+ hasDefault: false;
3333
+ isPrimaryKey: false;
3334
+ isAutoincrement: false;
3335
+ hasRuntimeDefault: false;
3336
+ enumValues: [string, ...string[]];
3337
+ baseColumn: never;
3338
+ identity: undefined;
3339
+ generated: undefined;
3340
+ }, {}, {}>;
3341
+ sequenceId: drizzle_orm_pg_core.PgColumn<{
3342
+ name: "sequence_id";
3343
+ tableName: "dunning_states";
3344
+ dataType: "string";
3345
+ columnType: "PgText";
3346
+ data: string;
3347
+ driverParam: string;
3348
+ notNull: true;
3349
+ hasDefault: false;
3350
+ isPrimaryKey: false;
3351
+ isAutoincrement: false;
3352
+ hasRuntimeDefault: false;
3353
+ enumValues: [string, ...string[]];
3354
+ baseColumn: never;
3355
+ identity: undefined;
3356
+ generated: undefined;
3357
+ }, {}, {}>;
3358
+ currentStepIndex: drizzle_orm_pg_core.PgColumn<{
3359
+ name: "current_step_index";
3360
+ tableName: "dunning_states";
3361
+ dataType: "number";
3362
+ columnType: "PgInteger";
3363
+ data: number;
3364
+ driverParam: string | number;
3365
+ notNull: true;
3366
+ hasDefault: true;
3367
+ isPrimaryKey: false;
3368
+ isAutoincrement: false;
3369
+ hasRuntimeDefault: false;
3370
+ enumValues: undefined;
3371
+ baseColumn: never;
3372
+ identity: undefined;
3373
+ generated: undefined;
3374
+ }, {}, {}>;
3375
+ currentStepId: drizzle_orm_pg_core.PgColumn<{
3376
+ name: "current_step_id";
3377
+ tableName: "dunning_states";
3378
+ dataType: "string";
3379
+ columnType: "PgText";
3380
+ data: string;
3381
+ driverParam: string;
3382
+ notNull: true;
3383
+ hasDefault: false;
3384
+ isPrimaryKey: false;
3385
+ isAutoincrement: false;
3386
+ hasRuntimeDefault: false;
3387
+ enumValues: [string, ...string[]];
3388
+ baseColumn: never;
3389
+ identity: undefined;
3390
+ generated: undefined;
3391
+ }, {}, {}>;
3392
+ status: drizzle_orm_pg_core.PgColumn<{
3393
+ name: "status";
3394
+ tableName: "dunning_states";
3395
+ dataType: "string";
3396
+ columnType: "PgText";
3397
+ data: string;
3398
+ driverParam: string;
3399
+ notNull: true;
3400
+ hasDefault: true;
3401
+ isPrimaryKey: false;
3402
+ isAutoincrement: false;
3403
+ hasRuntimeDefault: false;
3404
+ enumValues: [string, ...string[]];
3405
+ baseColumn: never;
3406
+ identity: undefined;
3407
+ generated: undefined;
3408
+ }, {}, {}>;
3409
+ initialFailureId: drizzle_orm_pg_core.PgColumn<{
3410
+ name: "initial_failure_id";
3411
+ tableName: "dunning_states";
3412
+ dataType: "string";
3413
+ columnType: "PgText";
3414
+ data: string;
3415
+ driverParam: string;
3416
+ notNull: true;
3417
+ hasDefault: false;
3418
+ isPrimaryKey: false;
3419
+ isAutoincrement: false;
3420
+ hasRuntimeDefault: false;
3421
+ enumValues: [string, ...string[]];
3422
+ baseColumn: never;
3423
+ identity: undefined;
3424
+ generated: undefined;
3425
+ }, {}, {}>;
3426
+ failureIds: drizzle_orm_pg_core.PgColumn<{
3427
+ name: "failure_ids";
3428
+ tableName: "dunning_states";
3429
+ dataType: "json";
3430
+ columnType: "PgJsonb";
3431
+ data: string[];
3432
+ driverParam: unknown;
3433
+ notNull: true;
3434
+ hasDefault: true;
3435
+ isPrimaryKey: false;
3436
+ isAutoincrement: false;
3437
+ hasRuntimeDefault: false;
3438
+ enumValues: undefined;
3439
+ baseColumn: never;
3440
+ identity: undefined;
3441
+ generated: undefined;
3442
+ }, {}, {
3443
+ $type: string[];
3444
+ }>;
3445
+ startedAt: drizzle_orm_pg_core.PgColumn<{
3446
+ name: "started_at";
3447
+ tableName: "dunning_states";
3448
+ dataType: "date";
3449
+ columnType: "PgTimestamp";
3450
+ data: Date;
3451
+ driverParam: string;
3452
+ notNull: true;
3453
+ hasDefault: false;
3454
+ isPrimaryKey: false;
3455
+ isAutoincrement: false;
3456
+ hasRuntimeDefault: false;
3457
+ enumValues: undefined;
3458
+ baseColumn: never;
3459
+ identity: undefined;
3460
+ generated: undefined;
3461
+ }, {}, {}>;
3462
+ lastStepAt: drizzle_orm_pg_core.PgColumn<{
3463
+ name: "last_step_at";
3464
+ tableName: "dunning_states";
3465
+ dataType: "date";
3466
+ columnType: "PgTimestamp";
3467
+ data: Date;
3468
+ driverParam: string;
3469
+ notNull: false;
3470
+ hasDefault: false;
3471
+ isPrimaryKey: false;
3472
+ isAutoincrement: false;
3473
+ hasRuntimeDefault: false;
3474
+ enumValues: undefined;
3475
+ baseColumn: never;
3476
+ identity: undefined;
3477
+ generated: undefined;
3478
+ }, {}, {}>;
3479
+ nextStepAt: drizzle_orm_pg_core.PgColumn<{
3480
+ name: "next_step_at";
3481
+ tableName: "dunning_states";
3482
+ dataType: "date";
3483
+ columnType: "PgTimestamp";
3484
+ data: Date;
3485
+ driverParam: string;
3486
+ notNull: false;
3487
+ hasDefault: false;
3488
+ isPrimaryKey: false;
3489
+ isAutoincrement: false;
3490
+ hasRuntimeDefault: false;
3491
+ enumValues: undefined;
3492
+ baseColumn: never;
3493
+ identity: undefined;
3494
+ generated: undefined;
3495
+ }, {}, {}>;
3496
+ endedAt: drizzle_orm_pg_core.PgColumn<{
3497
+ name: "ended_at";
3498
+ tableName: "dunning_states";
3499
+ dataType: "date";
3500
+ columnType: "PgTimestamp";
3501
+ data: Date;
3502
+ driverParam: string;
3503
+ notNull: false;
3504
+ hasDefault: false;
3505
+ isPrimaryKey: false;
3506
+ isAutoincrement: false;
3507
+ hasRuntimeDefault: false;
3508
+ enumValues: undefined;
3509
+ baseColumn: never;
3510
+ identity: undefined;
3511
+ generated: undefined;
3512
+ }, {}, {}>;
3513
+ endReason: drizzle_orm_pg_core.PgColumn<{
3514
+ name: "end_reason";
3515
+ tableName: "dunning_states";
3516
+ dataType: "string";
3517
+ columnType: "PgText";
3518
+ data: string;
3519
+ driverParam: string;
3520
+ notNull: false;
3521
+ hasDefault: false;
3522
+ isPrimaryKey: false;
3523
+ isAutoincrement: false;
3524
+ hasRuntimeDefault: false;
3525
+ enumValues: [string, ...string[]];
3526
+ baseColumn: never;
3527
+ identity: undefined;
3528
+ generated: undefined;
3529
+ }, {}, {}>;
3530
+ totalRetryAttempts: drizzle_orm_pg_core.PgColumn<{
3531
+ name: "total_retry_attempts";
3532
+ tableName: "dunning_states";
3533
+ dataType: "number";
3534
+ columnType: "PgInteger";
3535
+ data: number;
3536
+ driverParam: string | number;
3537
+ notNull: true;
3538
+ hasDefault: true;
3539
+ isPrimaryKey: false;
3540
+ isAutoincrement: false;
3541
+ hasRuntimeDefault: false;
3542
+ enumValues: undefined;
3543
+ baseColumn: never;
3544
+ identity: undefined;
3545
+ generated: undefined;
3546
+ }, {}, {}>;
3547
+ metadata: drizzle_orm_pg_core.PgColumn<{
3548
+ name: "metadata";
3549
+ tableName: "dunning_states";
3550
+ dataType: "json";
3551
+ columnType: "PgJsonb";
3552
+ data: Record<string, unknown>;
3553
+ driverParam: unknown;
3554
+ notNull: false;
3555
+ hasDefault: false;
3556
+ isPrimaryKey: false;
3557
+ isAutoincrement: false;
3558
+ hasRuntimeDefault: false;
3559
+ enumValues: undefined;
3560
+ baseColumn: never;
3561
+ identity: undefined;
3562
+ generated: undefined;
3563
+ }, {}, {
3564
+ $type: Record<string, unknown>;
3565
+ }>;
3566
+ };
3567
+ dialect: "pg";
3568
+ }>;
3569
+ executedSteps: drizzle_orm_pg_core.PgTableWithColumns<{
3570
+ name: "dunning_executed_steps";
3571
+ schema: undefined;
3572
+ columns: {
3573
+ id: drizzle_orm_pg_core.PgColumn<{
3574
+ name: "id";
3575
+ tableName: "dunning_executed_steps";
3576
+ dataType: "string";
3577
+ columnType: "PgText";
3578
+ data: string;
3579
+ driverParam: string;
3580
+ notNull: true;
3581
+ hasDefault: false;
3582
+ isPrimaryKey: true;
3583
+ isAutoincrement: false;
3584
+ hasRuntimeDefault: false;
3585
+ enumValues: [string, ...string[]];
3586
+ baseColumn: never;
3587
+ identity: undefined;
3588
+ generated: undefined;
3589
+ }, {}, {}>;
3590
+ dunningStateId: drizzle_orm_pg_core.PgColumn<{
3591
+ name: "dunning_state_id";
3592
+ tableName: "dunning_executed_steps";
3593
+ dataType: "string";
3594
+ columnType: "PgText";
3595
+ data: string;
3596
+ driverParam: string;
3597
+ notNull: true;
3598
+ hasDefault: false;
3599
+ isPrimaryKey: false;
3600
+ isAutoincrement: false;
3601
+ hasRuntimeDefault: false;
3602
+ enumValues: [string, ...string[]];
3603
+ baseColumn: never;
3604
+ identity: undefined;
3605
+ generated: undefined;
3606
+ }, {}, {}>;
3607
+ stepId: drizzle_orm_pg_core.PgColumn<{
3608
+ name: "step_id";
3609
+ tableName: "dunning_executed_steps";
3610
+ dataType: "string";
3611
+ columnType: "PgText";
3612
+ data: string;
3613
+ driverParam: string;
3614
+ notNull: true;
3615
+ hasDefault: false;
3616
+ isPrimaryKey: false;
3617
+ isAutoincrement: false;
3618
+ hasRuntimeDefault: false;
3619
+ enumValues: [string, ...string[]];
3620
+ baseColumn: never;
3621
+ identity: undefined;
3622
+ generated: undefined;
3623
+ }, {}, {}>;
3624
+ stepName: drizzle_orm_pg_core.PgColumn<{
3625
+ name: "step_name";
3626
+ tableName: "dunning_executed_steps";
3627
+ dataType: "string";
3628
+ columnType: "PgText";
3629
+ data: string;
3630
+ driverParam: string;
3631
+ notNull: true;
3632
+ hasDefault: false;
3633
+ isPrimaryKey: false;
3634
+ isAutoincrement: false;
3635
+ hasRuntimeDefault: false;
3636
+ enumValues: [string, ...string[]];
3637
+ baseColumn: never;
3638
+ identity: undefined;
3639
+ generated: undefined;
3640
+ }, {}, {}>;
3641
+ executedAt: drizzle_orm_pg_core.PgColumn<{
3642
+ name: "executed_at";
3643
+ tableName: "dunning_executed_steps";
3644
+ dataType: "date";
3645
+ columnType: "PgTimestamp";
3646
+ data: Date;
3647
+ driverParam: string;
3648
+ notNull: true;
3649
+ hasDefault: false;
3650
+ isPrimaryKey: false;
3651
+ isAutoincrement: false;
3652
+ hasRuntimeDefault: false;
3653
+ enumValues: undefined;
3654
+ baseColumn: never;
3655
+ identity: undefined;
3656
+ generated: undefined;
3657
+ }, {}, {}>;
3658
+ actionsTaken: drizzle_orm_pg_core.PgColumn<{
3659
+ name: "actions_taken";
3660
+ tableName: "dunning_executed_steps";
3661
+ dataType: "json";
3662
+ columnType: "PgJsonb";
3663
+ data: string[];
3664
+ driverParam: unknown;
3665
+ notNull: true;
3666
+ hasDefault: true;
3667
+ isPrimaryKey: false;
3668
+ isAutoincrement: false;
3669
+ hasRuntimeDefault: false;
3670
+ enumValues: undefined;
3671
+ baseColumn: never;
3672
+ identity: undefined;
3673
+ generated: undefined;
3674
+ }, {}, {
3675
+ $type: string[];
3676
+ }>;
3677
+ paymentRetried: drizzle_orm_pg_core.PgColumn<{
3678
+ name: "payment_retried";
3679
+ tableName: "dunning_executed_steps";
3680
+ dataType: "boolean";
3681
+ columnType: "PgBoolean";
3682
+ data: boolean;
3683
+ driverParam: boolean;
3684
+ notNull: true;
3685
+ hasDefault: true;
3686
+ isPrimaryKey: false;
3687
+ isAutoincrement: false;
3688
+ hasRuntimeDefault: false;
3689
+ enumValues: undefined;
3690
+ baseColumn: never;
3691
+ identity: undefined;
3692
+ generated: undefined;
3693
+ }, {}, {}>;
3694
+ paymentSucceeded: drizzle_orm_pg_core.PgColumn<{
3695
+ name: "payment_succeeded";
3696
+ tableName: "dunning_executed_steps";
3697
+ dataType: "boolean";
3698
+ columnType: "PgBoolean";
3699
+ data: boolean;
3700
+ driverParam: boolean;
3701
+ notNull: false;
3702
+ hasDefault: false;
3703
+ isPrimaryKey: false;
3704
+ isAutoincrement: false;
3705
+ hasRuntimeDefault: false;
3706
+ enumValues: undefined;
3707
+ baseColumn: never;
3708
+ identity: undefined;
3709
+ generated: undefined;
3710
+ }, {}, {}>;
3711
+ notificationsSent: drizzle_orm_pg_core.PgColumn<{
3712
+ name: "notifications_sent";
3713
+ tableName: "dunning_executed_steps";
3714
+ dataType: "json";
3715
+ columnType: "PgJsonb";
3716
+ data: string[];
3717
+ driverParam: unknown;
3718
+ notNull: true;
3719
+ hasDefault: true;
3720
+ isPrimaryKey: false;
3721
+ isAutoincrement: false;
3722
+ hasRuntimeDefault: false;
3723
+ enumValues: undefined;
3724
+ baseColumn: never;
3725
+ identity: undefined;
3726
+ generated: undefined;
3727
+ }, {}, {
3728
+ $type: string[];
3729
+ }>;
3730
+ error: drizzle_orm_pg_core.PgColumn<{
3731
+ name: "error";
3732
+ tableName: "dunning_executed_steps";
3733
+ dataType: "string";
3734
+ columnType: "PgText";
3735
+ data: string;
3736
+ driverParam: string;
3737
+ notNull: false;
3738
+ hasDefault: false;
3739
+ isPrimaryKey: false;
3740
+ isAutoincrement: false;
3741
+ hasRuntimeDefault: false;
3742
+ enumValues: [string, ...string[]];
3743
+ baseColumn: never;
3744
+ identity: undefined;
3745
+ generated: undefined;
3746
+ }, {}, {}>;
3747
+ metadata: drizzle_orm_pg_core.PgColumn<{
3748
+ name: "metadata";
3749
+ tableName: "dunning_executed_steps";
3750
+ dataType: "json";
3751
+ columnType: "PgJsonb";
3752
+ data: Record<string, unknown>;
3753
+ driverParam: unknown;
3754
+ notNull: false;
3755
+ hasDefault: false;
3756
+ isPrimaryKey: false;
3757
+ isAutoincrement: false;
3758
+ hasRuntimeDefault: false;
3759
+ enumValues: undefined;
3760
+ baseColumn: never;
3761
+ identity: undefined;
3762
+ generated: undefined;
3763
+ }, {}, {
3764
+ $type: Record<string, unknown>;
3765
+ }>;
3766
+ };
3767
+ dialect: "pg";
3768
+ }>;
3769
+ scheduledSteps: drizzle_orm_pg_core.PgTableWithColumns<{
3770
+ name: "dunning_scheduled_steps";
3771
+ schema: undefined;
3772
+ columns: {
3773
+ id: drizzle_orm_pg_core.PgColumn<{
3774
+ name: "id";
3775
+ tableName: "dunning_scheduled_steps";
3776
+ dataType: "string";
3777
+ columnType: "PgText";
3778
+ data: string;
3779
+ driverParam: string;
3780
+ notNull: true;
3781
+ hasDefault: false;
3782
+ isPrimaryKey: true;
3783
+ isAutoincrement: false;
3784
+ hasRuntimeDefault: false;
3785
+ enumValues: [string, ...string[]];
3786
+ baseColumn: never;
3787
+ identity: undefined;
3788
+ generated: undefined;
3789
+ }, {}, {}>;
3790
+ dunningStateId: drizzle_orm_pg_core.PgColumn<{
3791
+ name: "dunning_state_id";
3792
+ tableName: "dunning_scheduled_steps";
3793
+ dataType: "string";
3794
+ columnType: "PgText";
3795
+ data: string;
3796
+ driverParam: string;
3797
+ notNull: true;
3798
+ hasDefault: false;
3799
+ isPrimaryKey: false;
3800
+ isAutoincrement: false;
3801
+ hasRuntimeDefault: false;
3802
+ enumValues: [string, ...string[]];
3803
+ baseColumn: never;
3804
+ identity: undefined;
3805
+ generated: undefined;
3806
+ }, {}, {}>;
3807
+ stepId: drizzle_orm_pg_core.PgColumn<{
3808
+ name: "step_id";
3809
+ tableName: "dunning_scheduled_steps";
3810
+ dataType: "string";
3811
+ columnType: "PgText";
3812
+ data: string;
3813
+ driverParam: string;
3814
+ notNull: true;
3815
+ hasDefault: false;
3816
+ isPrimaryKey: false;
3817
+ isAutoincrement: false;
3818
+ hasRuntimeDefault: false;
3819
+ enumValues: [string, ...string[]];
3820
+ baseColumn: never;
3821
+ identity: undefined;
3822
+ generated: undefined;
3823
+ }, {}, {}>;
3824
+ scheduledAt: drizzle_orm_pg_core.PgColumn<{
3825
+ name: "scheduled_at";
3826
+ tableName: "dunning_scheduled_steps";
3827
+ dataType: "date";
3828
+ columnType: "PgTimestamp";
3829
+ data: Date;
3830
+ driverParam: string;
3831
+ notNull: true;
3832
+ hasDefault: false;
3833
+ isPrimaryKey: false;
3834
+ isAutoincrement: false;
3835
+ hasRuntimeDefault: false;
3836
+ enumValues: undefined;
3837
+ baseColumn: never;
3838
+ identity: undefined;
3839
+ generated: undefined;
3840
+ }, {}, {}>;
3841
+ createdAt: drizzle_orm_pg_core.PgColumn<{
3842
+ name: "created_at";
3843
+ tableName: "dunning_scheduled_steps";
3844
+ dataType: "date";
3845
+ columnType: "PgTimestamp";
3846
+ data: Date;
3847
+ driverParam: string;
3848
+ notNull: true;
3849
+ hasDefault: true;
3850
+ isPrimaryKey: false;
3851
+ isAutoincrement: false;
3852
+ hasRuntimeDefault: false;
3853
+ enumValues: undefined;
3854
+ baseColumn: never;
3855
+ identity: undefined;
3856
+ generated: undefined;
3857
+ }, {}, {}>;
3858
+ };
3859
+ dialect: "pg";
3860
+ }>;
3861
+ dunningEvents: drizzle_orm_pg_core.PgTableWithColumns<{
3862
+ name: "dunning_events";
3863
+ schema: undefined;
3864
+ columns: {
3865
+ id: drizzle_orm_pg_core.PgColumn<{
3866
+ name: "id";
3867
+ tableName: "dunning_events";
3868
+ dataType: "string";
3869
+ columnType: "PgText";
3870
+ data: string;
3871
+ driverParam: string;
3872
+ notNull: true;
3873
+ hasDefault: false;
3874
+ isPrimaryKey: true;
3875
+ isAutoincrement: false;
3876
+ hasRuntimeDefault: false;
3877
+ enumValues: [string, ...string[]];
3878
+ baseColumn: never;
3879
+ identity: undefined;
3880
+ generated: undefined;
3881
+ }, {}, {}>;
3882
+ type: drizzle_orm_pg_core.PgColumn<{
3883
+ name: "type";
3884
+ tableName: "dunning_events";
3885
+ dataType: "string";
3886
+ columnType: "PgText";
3887
+ data: string;
3888
+ driverParam: string;
3889
+ notNull: true;
3890
+ hasDefault: false;
3891
+ isPrimaryKey: false;
3892
+ isAutoincrement: false;
3893
+ hasRuntimeDefault: false;
3894
+ enumValues: [string, ...string[]];
3895
+ baseColumn: never;
3896
+ identity: undefined;
3897
+ generated: undefined;
3898
+ }, {}, {}>;
3899
+ customerId: drizzle_orm_pg_core.PgColumn<{
3900
+ name: "customer_id";
3901
+ tableName: "dunning_events";
3902
+ dataType: "string";
3903
+ columnType: "PgText";
3904
+ data: string;
3905
+ driverParam: string;
3906
+ notNull: true;
3907
+ hasDefault: false;
3908
+ isPrimaryKey: false;
3909
+ isAutoincrement: false;
3910
+ hasRuntimeDefault: false;
3911
+ enumValues: [string, ...string[]];
3912
+ baseColumn: never;
3913
+ identity: undefined;
3914
+ generated: undefined;
3915
+ }, {}, {}>;
3916
+ subscriptionId: drizzle_orm_pg_core.PgColumn<{
3917
+ name: "subscription_id";
3918
+ tableName: "dunning_events";
3919
+ dataType: "string";
3920
+ columnType: "PgText";
3921
+ data: string;
3922
+ driverParam: string;
3923
+ notNull: true;
3924
+ hasDefault: false;
3925
+ isPrimaryKey: false;
3926
+ isAutoincrement: false;
3927
+ hasRuntimeDefault: false;
3928
+ enumValues: [string, ...string[]];
3929
+ baseColumn: never;
3930
+ identity: undefined;
3931
+ generated: undefined;
3932
+ }, {}, {}>;
3933
+ dunningStateId: drizzle_orm_pg_core.PgColumn<{
3934
+ name: "dunning_state_id";
3935
+ tableName: "dunning_events";
3936
+ dataType: "string";
3937
+ columnType: "PgText";
3938
+ data: string;
3939
+ driverParam: string;
3940
+ notNull: true;
3941
+ hasDefault: false;
3942
+ isPrimaryKey: false;
3943
+ isAutoincrement: false;
3944
+ hasRuntimeDefault: false;
3945
+ enumValues: [string, ...string[]];
3946
+ baseColumn: never;
3947
+ identity: undefined;
3948
+ generated: undefined;
3949
+ }, {}, {}>;
3950
+ timestamp: drizzle_orm_pg_core.PgColumn<{
3951
+ name: "timestamp";
3952
+ tableName: "dunning_events";
3953
+ dataType: "date";
3954
+ columnType: "PgTimestamp";
3955
+ data: Date;
3956
+ driverParam: string;
3957
+ notNull: true;
3958
+ hasDefault: false;
3959
+ isPrimaryKey: false;
3960
+ isAutoincrement: false;
3961
+ hasRuntimeDefault: false;
3962
+ enumValues: undefined;
3963
+ baseColumn: never;
3964
+ identity: undefined;
3965
+ generated: undefined;
3966
+ }, {}, {}>;
3967
+ data: drizzle_orm_pg_core.PgColumn<{
3968
+ name: "data";
3969
+ tableName: "dunning_events";
3970
+ dataType: "json";
3971
+ columnType: "PgJsonb";
3972
+ data: Record<string, unknown>;
3973
+ driverParam: unknown;
3974
+ notNull: true;
3975
+ hasDefault: true;
3976
+ isPrimaryKey: false;
3977
+ isAutoincrement: false;
3978
+ hasRuntimeDefault: false;
3979
+ enumValues: undefined;
3980
+ baseColumn: never;
3981
+ identity: undefined;
3982
+ generated: undefined;
3983
+ }, {}, {
3984
+ $type: Record<string, unknown>;
3985
+ }>;
3986
+ };
3987
+ dialect: "pg";
3988
+ }>;
3989
+ retryStrategies: drizzle_orm_pg_core.PgTableWithColumns<{
3990
+ name: "dunning_retry_strategies";
3991
+ schema: undefined;
3992
+ columns: {
3993
+ id: drizzle_orm_pg_core.PgColumn<{
3994
+ name: "id";
3995
+ tableName: "dunning_retry_strategies";
3996
+ dataType: "string";
3997
+ columnType: "PgText";
3998
+ data: string;
3999
+ driverParam: string;
4000
+ notNull: true;
4001
+ hasDefault: false;
4002
+ isPrimaryKey: true;
4003
+ isAutoincrement: false;
4004
+ hasRuntimeDefault: false;
4005
+ enumValues: [string, ...string[]];
4006
+ baseColumn: never;
4007
+ identity: undefined;
4008
+ generated: undefined;
4009
+ }, {}, {}>;
4010
+ category: drizzle_orm_pg_core.PgColumn<{
4011
+ name: "category";
4012
+ tableName: "dunning_retry_strategies";
4013
+ dataType: "string";
4014
+ columnType: "PgText";
4015
+ data: string;
4016
+ driverParam: string;
4017
+ notNull: true;
4018
+ hasDefault: false;
4019
+ isPrimaryKey: false;
4020
+ isAutoincrement: false;
4021
+ hasRuntimeDefault: false;
4022
+ enumValues: [string, ...string[]];
4023
+ baseColumn: never;
4024
+ identity: undefined;
4025
+ generated: undefined;
4026
+ }, {}, {}>;
4027
+ shouldRetry: drizzle_orm_pg_core.PgColumn<{
4028
+ name: "should_retry";
4029
+ tableName: "dunning_retry_strategies";
4030
+ dataType: "boolean";
4031
+ columnType: "PgBoolean";
4032
+ data: boolean;
4033
+ driverParam: boolean;
4034
+ notNull: true;
4035
+ hasDefault: true;
4036
+ isPrimaryKey: false;
4037
+ isAutoincrement: false;
4038
+ hasRuntimeDefault: false;
4039
+ enumValues: undefined;
4040
+ baseColumn: never;
4041
+ identity: undefined;
4042
+ generated: undefined;
4043
+ }, {}, {}>;
4044
+ initialDelayHours: drizzle_orm_pg_core.PgColumn<{
4045
+ name: "initial_delay_hours";
4046
+ tableName: "dunning_retry_strategies";
4047
+ dataType: "number";
4048
+ columnType: "PgInteger";
4049
+ data: number;
4050
+ driverParam: string | number;
4051
+ notNull: true;
4052
+ hasDefault: true;
4053
+ isPrimaryKey: false;
4054
+ isAutoincrement: false;
4055
+ hasRuntimeDefault: false;
4056
+ enumValues: undefined;
4057
+ baseColumn: never;
4058
+ identity: undefined;
4059
+ generated: undefined;
4060
+ }, {}, {}>;
4061
+ maxRetries: drizzle_orm_pg_core.PgColumn<{
4062
+ name: "max_retries";
4063
+ tableName: "dunning_retry_strategies";
4064
+ dataType: "number";
4065
+ columnType: "PgInteger";
4066
+ data: number;
4067
+ driverParam: string | number;
4068
+ notNull: true;
4069
+ hasDefault: true;
4070
+ isPrimaryKey: false;
4071
+ isAutoincrement: false;
4072
+ hasRuntimeDefault: false;
4073
+ enumValues: undefined;
4074
+ baseColumn: never;
4075
+ identity: undefined;
4076
+ generated: undefined;
4077
+ }, {}, {}>;
4078
+ backoffMultiplier: drizzle_orm_pg_core.PgColumn<{
4079
+ name: "backoff_multiplier";
4080
+ tableName: "dunning_retry_strategies";
4081
+ dataType: "number";
4082
+ columnType: "PgInteger";
4083
+ data: number;
4084
+ driverParam: string | number;
4085
+ notNull: true;
4086
+ hasDefault: true;
4087
+ isPrimaryKey: false;
4088
+ isAutoincrement: false;
4089
+ hasRuntimeDefault: false;
4090
+ enumValues: undefined;
4091
+ baseColumn: never;
4092
+ identity: undefined;
4093
+ generated: undefined;
4094
+ }, {}, {}>;
4095
+ maxDelayHours: drizzle_orm_pg_core.PgColumn<{
4096
+ name: "max_delay_hours";
4097
+ tableName: "dunning_retry_strategies";
4098
+ dataType: "number";
4099
+ columnType: "PgInteger";
4100
+ data: number;
4101
+ driverParam: string | number;
4102
+ notNull: true;
4103
+ hasDefault: true;
4104
+ isPrimaryKey: false;
4105
+ isAutoincrement: false;
4106
+ hasRuntimeDefault: false;
4107
+ enumValues: undefined;
4108
+ baseColumn: never;
4109
+ identity: undefined;
4110
+ generated: undefined;
4111
+ }, {}, {}>;
4112
+ optimalRetryHours: drizzle_orm_pg_core.PgColumn<{
4113
+ name: "optimal_retry_hours";
4114
+ tableName: "dunning_retry_strategies";
4115
+ dataType: "json";
4116
+ columnType: "PgJsonb";
4117
+ data: number[];
4118
+ driverParam: unknown;
4119
+ notNull: false;
4120
+ hasDefault: false;
4121
+ isPrimaryKey: false;
4122
+ isAutoincrement: false;
4123
+ hasRuntimeDefault: false;
4124
+ enumValues: undefined;
4125
+ baseColumn: never;
4126
+ identity: undefined;
4127
+ generated: undefined;
4128
+ }, {}, {
4129
+ $type: number[];
4130
+ }>;
4131
+ optimalRetryDays: drizzle_orm_pg_core.PgColumn<{
4132
+ name: "optimal_retry_days";
4133
+ tableName: "dunning_retry_strategies";
4134
+ dataType: "json";
4135
+ columnType: "PgJsonb";
4136
+ data: number[];
4137
+ driverParam: unknown;
4138
+ notNull: false;
4139
+ hasDefault: false;
4140
+ isPrimaryKey: false;
4141
+ isAutoincrement: false;
4142
+ hasRuntimeDefault: false;
4143
+ enumValues: undefined;
4144
+ baseColumn: never;
4145
+ identity: undefined;
4146
+ generated: undefined;
4147
+ }, {}, {
4148
+ $type: number[];
4149
+ }>;
4150
+ metadata: drizzle_orm_pg_core.PgColumn<{
4151
+ name: "metadata";
4152
+ tableName: "dunning_retry_strategies";
4153
+ dataType: "json";
4154
+ columnType: "PgJsonb";
4155
+ data: Record<string, unknown>;
4156
+ driverParam: unknown;
4157
+ notNull: false;
4158
+ hasDefault: false;
4159
+ isPrimaryKey: false;
4160
+ isAutoincrement: false;
4161
+ hasRuntimeDefault: false;
4162
+ enumValues: undefined;
4163
+ baseColumn: never;
4164
+ identity: undefined;
4165
+ generated: undefined;
4166
+ }, {}, {
4167
+ $type: Record<string, unknown>;
4168
+ }>;
4169
+ updatedAt: drizzle_orm_pg_core.PgColumn<{
4170
+ name: "updated_at";
4171
+ tableName: "dunning_retry_strategies";
4172
+ dataType: "date";
4173
+ columnType: "PgTimestamp";
4174
+ data: Date;
4175
+ driverParam: string;
4176
+ notNull: true;
4177
+ hasDefault: true;
4178
+ isPrimaryKey: false;
4179
+ isAutoincrement: false;
4180
+ hasRuntimeDefault: false;
4181
+ enumValues: undefined;
4182
+ baseColumn: never;
4183
+ identity: undefined;
4184
+ generated: undefined;
4185
+ }, {}, {}>;
4186
+ };
4187
+ dialect: "pg";
4188
+ }>;
4189
+ };
4190
+
4191
+ export { type PaymentRetrierConfig as $, createDrizzleDunningStorage as A, dunningSchema as B, type PaymentFailureCategory as C, DunningManager as D, type PaymentFailure as E, type DunningAction as F, type DunningStep as G, type DunningSequence as H, type DunningStatus as I, type DunningState as J, type ExecutedStep as K, type DunningContext as L, MemoryDunningStorage as M, type NotificationChannel as N, type RetryResult as O, PaymentRetryCalculator as P, type DunningNotification as Q, type RetryStrategy as R, type NotificationResult as S, type DunningEventType as T, type DunningEvent as U, type DunningEventHandler as V, type DunningManagerConfig as W, type DunningLogger as X, type DunningStorage as Y, type DunningSchedulerConfig as Z, type ErrorCodeMapping as _, createDefaultDunningConfig as a, type DrizzleDunningStorageConfig as a0, type DunningSequenceRow as a1, type NewDunningSequence as a2, type DunningStepRow as a3, type NewDunningStep as a4, type PaymentFailureRow as a5, type NewPaymentFailure as a6, type DunningStateRow as a7, type NewDunningState as a8, type ExecutedStepRow as a9, type NewExecutedStep as aa, type ScheduledStepRow as ab, type NewScheduledStep as ac, type DunningEventRow as ad, type NewDunningEvent as ae, type RetryStrategyRow as af, type NewRetryStrategy as ag, type DrizzleDb as ah, dunningSequences as ai, dunningSteps as aj, paymentFailures as ak, dunningStates as al, executedSteps as am, scheduledSteps as an, dunningEvents as ao, retryStrategies as ap, DunningScheduler as b, createDunningManager as c, createDunningScheduler as d, createDunningCronHandler as e, createDunningEdgeHandler as f, DunningStepBuilder as g, DunningSequenceBuilder as h, sequence as i, standardSaasSequence as j, aggressiveSequence as k, lenientSequence as l, minimalSequence as m, defaultSequences as n, getSequenceByTier as o, PaymentRetrier as p, createPaymentRetryCalculator as q, createPaymentRetrier as r, step as s, defaultRetryStrategies as t, stripeErrorCodes as u, paddleErrorCodes as v, iyzicoErrorCodes as w, allErrorCodeMappings as x, createMemoryDunningStorage as y, DrizzleDunningStorage as z };