@saasicat/core 1.0.0-rc.21 → 1.0.0-rc.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -643,12 +643,19 @@ interface PaymentGateway {
643
643
  /**
644
644
  * Opens the gateway's form for a payment method. Nothing is confirmed until
645
645
  * the gateway says so through `readCallback`.
646
+ *
647
+ * A failure is thrown as the provider reported it: the platform answers the
648
+ * person with `PAYMENT_GATEWAY_FAILED` and keeps what the error carries —
649
+ * its kind, code, status and request id — in the server log.
646
650
  */
647
651
  startPaymentMethodSetup(input: StartPaymentMethodSetupInput): Promise<PaymentMethodSetupSession>;
648
652
  /**
649
653
  * Verifies a callback with the account's secret and translates it.
650
654
  * Throws `PaymentCallbackRejectedError` for anything the gateway did not
651
- * send, before a single field of it is trusted.
655
+ * send, before a single field of it is trusted. Any other failure is
656
+ * answered with `PAYMENT_GATEWAY_FAILED` and 502, like one of
657
+ * `startPaymentMethodSetup` — to the gateway's webhook, or to the person
658
+ * an `immediateCallback` is read for.
652
659
  */
653
660
  readCallback(callback: PaymentGatewayCallback): Promise<PaymentGatewayEvent>;
654
661
  }
@@ -1103,7 +1110,7 @@ interface SubscriptionBundleRecord {
1103
1110
  * or on one whose plan has no period; readers fall back to the plan's
1104
1111
  * cycle, which is what every booking used before.
1105
1112
  */
1106
- billingCycle: string | null;
1113
+ billingCycle: BillingCycle | null;
1107
1114
  currentPeriodStart: Date | null;
1108
1115
  currentPeriodEnd: Date | null;
1109
1116
  createdAt: Date;
@@ -1137,7 +1144,7 @@ interface CreateSubscriptionBundleData {
1137
1144
  /** Null unless a commitment was configured or asked for. */
1138
1145
  minimumTermEndsAt?: Date | null;
1139
1146
  /** The rhythm and window worked out above this port. */
1140
- billingCycle?: string | null;
1147
+ billingCycle?: BillingCycle | null;
1141
1148
  currentPeriodStart?: Date | null;
1142
1149
  currentPeriodEnd?: Date | null;
1143
1150
  }
@@ -1507,7 +1514,7 @@ interface AdminManifest {
1507
1514
  actions?: AuditActionDef[];
1508
1515
  };
1509
1516
  }
1510
- type StandardPageKey = 'dashboard' | 'tenants' | 'subscriptions' | 'promoCodes' | 'plans' | 'audit' | 'users' | 'pilots' | 'discovery' | 'bundles' | 'marketingCatalog' | 'platformEmail' | 'platformEmailHistory' | 'settings';
1517
+ type StandardPageKey = 'dashboard' | 'tenants' | 'subscriptions' | 'promoCodes' | 'plans' | 'audit' | 'users' | 'pilots' | 'discovery' | 'bundles' | 'marketingCatalog' | 'platformEmail' | 'platformEmailHistory' | 'settings' | 'maintenance';
1511
1518
  interface StandardPageDef {
1512
1519
  enabled: boolean;
1513
1520
  requiredCapability?: CapabilityKey;
@@ -2206,6 +2213,16 @@ interface EffectiveLimitsSnapshot {
2206
2213
  plan: string;
2207
2214
  quotas: Record<string, number>;
2208
2215
  features: string[];
2216
+ /**
2217
+ * The add-ons a contract left out of these entitlements because their
2218
+ * cancellation was already declared when it was written. Each is granted by
2219
+ * its booking until its effective date, and by this snapshot never.
2220
+ *
2221
+ * Absent where nothing was left out — and on a snapshot written by an
2222
+ * application, or before the platform left anything out, which then counts
2223
+ * every add-on it names as its own.
2224
+ */
2225
+ leftOutBundleVersionIds?: string[];
2209
2226
  }
2210
2227
 
2211
2228
  interface FeatureUiMeta {
@@ -2426,6 +2443,177 @@ interface SettingsDifference {
2426
2443
  after: unknown;
2427
2444
  }
2428
2445
 
2446
+ /** One window, as a store reads it back. */
2447
+ interface MaintenanceWindowRecord {
2448
+ id: string;
2449
+ /** The announced start; null for a window locked without being announced first. */
2450
+ startsAt: Date | null;
2451
+ /** The announced, expected end; null where nobody said. */
2452
+ endsAt: Date | null;
2453
+ /** The operator's words to the tenants, shown as written; null for none. */
2454
+ message: string | null;
2455
+ /** When the window was recorded — announced, or locked at once. */
2456
+ createdAt: Date;
2457
+ /** Who recorded it, as the audit log tags an actor. */
2458
+ createdBy: string;
2459
+ /** When the lock began; null while the window is only announced. */
2460
+ lockedAt: Date | null;
2461
+ lockedBy: string | null;
2462
+ /** When the window was over — unlocked, or cancelled before it locked. */
2463
+ endedAt: Date | null;
2464
+ endedBy: string | null;
2465
+ }
2466
+ /** A window to record: it is open, so it has not ended. */
2467
+ type NewMaintenanceWindow = Omit<MaintenanceWindowRecord, 'id' | 'endedAt' | 'endedBy'>;
2468
+ /**
2469
+ * Where an open window stands. A write names the stage it expects, so that it
2470
+ * cannot move a window that moved on in the meantime — one that another
2471
+ * operator locked, unlocked or cancelled a moment earlier.
2472
+ */
2473
+ type MaintenanceWindowStage = 'announced' | 'locked';
2474
+ /** What a write may change about an open window. */
2475
+ type MaintenanceWindowChanges = Partial<Pick<MaintenanceWindowRecord, 'startsAt' | 'endsAt' | 'message' | 'lockedAt' | 'lockedBy' | 'endedAt' | 'endedBy'>>;
2476
+ /**
2477
+ * What became of a window, read off its record. `cancelled` is a window that
2478
+ * ended without ever locking anybody out.
2479
+ */
2480
+ type MaintenanceWindowStatus = 'announced' | 'locked' | 'ended' | 'cancelled';
2481
+ /**
2482
+ * What SaaSiCat tells the application about a window, so that it can write to
2483
+ * its own users — in its own words, from its own sender, in their language.
2484
+ * The lock itself is not among them: tenants see it in the application.
2485
+ */
2486
+ type MaintenanceWindowEvent = {
2487
+ kind: 'announced';
2488
+ window: MaintenanceWindowRecord;
2489
+ } | {
2490
+ kind: 'rescheduled';
2491
+ window: MaintenanceWindowRecord;
2492
+ /** The window as it was announced before this change. */
2493
+ previous: MaintenanceWindowRecord;
2494
+ } | {
2495
+ kind: 'cancelled';
2496
+ window: MaintenanceWindowRecord;
2497
+ };
2498
+ /** The longest message a window carries; the operator's words, not a document. */
2499
+ declare const MAINTENANCE_MESSAGE_MAX_LENGTH = 500;
2500
+ /**
2501
+ * How long a process may go on reading a lock state it read before. Every
2502
+ * request asks, so each process keeps the answer this long rather than asking
2503
+ * the database per request; the command that locks waits this long before it
2504
+ * returns, so that every process has seen the lock by then.
2505
+ *
2506
+ * Part of the contract between two versions of an application: the command
2507
+ * that locks comes from the release being deployed, while the processes it
2508
+ * waits for may still run the one before. It is safe only while the figure it
2509
+ * waits by is at least theirs, so a later release may raise it and never lower
2510
+ * it.
2511
+ */
2512
+ declare const MAINTENANCE_STATE_MAX_AGE_SECONDS = 5;
2513
+ /**
2514
+ * The manifest capability that announces the maintenance screen. The platform
2515
+ * sets it where it keeps maintenance windows, and the administration offers the
2516
+ * screen — and its lock banner — only where it is set.
2517
+ */
2518
+ declare const MAINTENANCE_CAPABILITY = "maintenance.manage";
2519
+ /**
2520
+ * What a tenant's page is told: nothing, a window ahead, or a lock. Dates are
2521
+ * ISO strings, and `overrun` is the server's answer rather than the browser's,
2522
+ * whose clock is not the one the window was announced by.
2523
+ */
2524
+ type MaintenanceStatusView = {
2525
+ state: 'none';
2526
+ } | {
2527
+ state: 'announced';
2528
+ startsAt: string;
2529
+ endsAt: string;
2530
+ message: string | null;
2531
+ } | {
2532
+ state: 'locked';
2533
+ lockedAt: string;
2534
+ /** The announced end; null where nobody said. */
2535
+ endsAt: string | null;
2536
+ message: string | null;
2537
+ /** The announced end has passed, and the lock still holds. */
2538
+ overrun: boolean;
2539
+ };
2540
+ /** A window as the administration shows it. */
2541
+ interface MaintenanceWindowView {
2542
+ id: string;
2543
+ status: MaintenanceWindowStatus;
2544
+ startsAt: string | null;
2545
+ endsAt: string | null;
2546
+ message: string | null;
2547
+ createdAt: string;
2548
+ createdBy: string;
2549
+ lockedAt: string | null;
2550
+ lockedBy: string | null;
2551
+ endedAt: string | null;
2552
+ endedBy: string | null;
2553
+ /** Locked, and past its announced end. */
2554
+ overrun: boolean;
2555
+ /** Announced, never locked, and past its announced end: tenants no longer see it. */
2556
+ lapsed: boolean;
2557
+ }
2558
+ /** `GET /admin/maintenance`: the open window, if any, and the ones before it. */
2559
+ interface MaintenanceOverview {
2560
+ open: MaintenanceWindowView | null;
2561
+ /** Newest first, the open one included. */
2562
+ recent: MaintenanceWindowView[];
2563
+ /** How long a lock takes to reach every process. */
2564
+ takesEffectWithinSeconds: number;
2565
+ }
2566
+ /** `POST /admin/maintenance/lock`: the locked window, and whether it was locked before. */
2567
+ interface MaintenanceLockView {
2568
+ window: MaintenanceWindowView;
2569
+ /** The lock already held; nothing was changed. */
2570
+ alreadyLocked: boolean;
2571
+ /** How long the lock takes to reach every process. */
2572
+ takesEffectWithinSeconds: number;
2573
+ }
2574
+ /** `POST /admin/maintenance/unlock`: the window it ended, or the open one it left alone. */
2575
+ interface MaintenanceUnlockView {
2576
+ window: MaintenanceWindowView | null;
2577
+ /** Whether a lock held and was ended by this call. */
2578
+ wasLocked: boolean;
2579
+ }
2580
+
2581
+ /** A `maintenance_windows` row as either adapter reads it back. */
2582
+ type CanonicalMaintenanceWindowRow = MaintenanceWindowRecord;
2583
+ /**
2584
+ * Reads a row back as a record, naming each column rather than spreading the
2585
+ * row: a column a later release adds is not handed to the platform by accident,
2586
+ * and a version reading the table a later release extended reads what it knows.
2587
+ */
2588
+ declare function toMaintenanceWindowRecord(row: CanonicalMaintenanceWindowRow): MaintenanceWindowRecord;
2589
+
2590
+ /** What became of a window. */
2591
+ declare function maintenanceWindowStatusOf(window: MaintenanceWindowRecord): MaintenanceWindowStatus;
2592
+ /** Whether the lock still holds after the end it announced. */
2593
+ declare function isMaintenanceOverrun(window: MaintenanceWindowRecord, now: Date): boolean;
2594
+ /**
2595
+ * Whether an announcement has lapsed: never locked, and its announced end has
2596
+ * passed. Tenants are no longer shown it — past information is noise — while
2597
+ * the operator is, because it still stands in the way of the next one.
2598
+ */
2599
+ declare function isMaintenanceAnnouncementLapsed(window: MaintenanceWindowRecord, now: Date): boolean;
2600
+ /** What a tenant's page is told, given the open window — or none. */
2601
+ declare function maintenanceStatusOf(open: MaintenanceWindowRecord | null, now: Date): MaintenanceStatusView;
2602
+ /** A window as the administration shows it. */
2603
+ declare function maintenanceWindowViewOf(window: MaintenanceWindowRecord, now: Date): MaintenanceWindowView;
2604
+ /**
2605
+ * Seconds until the announced end, for the `Retry-After` of a refused request.
2606
+ * Never less than one: a client told zero would retry at once, in a loop.
2607
+ */
2608
+ declare function maintenanceRetryAfterSeconds(window: MaintenanceWindowRecord, now: Date): number;
2609
+
2610
+ /**
2611
+ * The moment an ISO 8601 date and time names, provided it states its zone —
2612
+ * `2026-10-02T22:00+02:00` or `2026-10-02T20:00Z`. Null for anything else: a
2613
+ * date without a time, a time without a zone, or text that is not a date.
2614
+ */
2615
+ declare function parseZonedInstant(text: string): Date | null;
2616
+
2429
2617
  /**
2430
2618
  * The top-level blocks of `config/saas.yaml` that are the catalogue rather than
2431
2619
  * the configuration, and the format marker.
@@ -3339,6 +3527,13 @@ interface CreateSubscriptionContractData {
3339
3527
  /** What a repository writes: the contract as asked for, with the parties the platform copied. */
3340
3528
  interface NewSubscriptionContractData extends CreateSubscriptionContractData {
3341
3529
  parties: SubscriptionContractParties;
3530
+ /**
3531
+ * The parties are a copy the migration made rather than what was agreed —
3532
+ * set where a successor takes them over from a contract that says so, so
3533
+ * that the copy is not passed off as agreed one contract later. Absent
3534
+ * means `false`.
3535
+ */
3536
+ partiesMigrated?: boolean;
3342
3537
  }
3343
3538
  interface TerminateSubscriptionContractData {
3344
3539
  effectiveUntil: Date;
@@ -3357,6 +3552,19 @@ interface TerminateSubscriptionContractData {
3357
3552
  */
3358
3553
  status: Extract<SubscriptionContractStatus, 'terminated' | 'superseded'> | null;
3359
3554
  }
3555
+ /**
3556
+ * Ends a contract because a successor takes its place — on the condition that
3557
+ * it is still as the caller read it.
3558
+ */
3559
+ interface SupersedeSubscriptionContractData {
3560
+ /** When the successor takes over; written as the contract's `effectiveUntil`. */
3561
+ at: Date;
3562
+ /**
3563
+ * The `effectiveUntil` the caller read. A contract whose end moved since —
3564
+ * a cancellation capped it, or ended it — is not superseded.
3565
+ */
3566
+ readEffectiveUntil: Date | null;
3567
+ }
3360
3568
  interface SubscriptionContractFilter {
3361
3569
  tenantId?: string;
3362
3570
  status?: SubscriptionContractStatus;
@@ -3511,6 +3719,128 @@ interface SubscriberCorrectionResult {
3511
3719
  correction: SubscriberCorrectionRecord | null;
3512
3720
  }
3513
3721
 
3722
+ /**
3723
+ * What made the charge arise. activation: the first period of a subscription. renewal: a later period. planChange: what an immediate plan change adds. bundleBooking: the first, short period of an add-on. credit: a decision that reduces what is owed. correction: a counter-entry reversing an earlier charge, which is how the append-only journal answers a mistake.
3724
+ */
3725
+ type SubscriberChargeOrigin = 'activation' | 'renewal' | 'planChange' | 'bundleBooking' | 'credit' | 'correction';
3726
+ /**
3727
+ * Which kind of contract line the charge realises.
3728
+ */
3729
+ type SubscriberChargeSource = 'plan' | 'bundle' | 'discount';
3730
+ /**
3731
+ * One charge in a subscriber's account: an amount that became due for a period, derived from a line of the contract in force. The journal is append-only — a charge is never updated, and a mistake is answered with a counter-entry rather than an edit, so the account says what happened rather than what somebody thinks today. A charge is net: the tax is decided by the tax adapter when the charge is invoiced, from the subscriber's origin on that day, and computed once per rate on the invoice.
3732
+ */
3733
+ interface SubscriberCharge {
3734
+ /**
3735
+ * The charge's own identifier. Never shown to a customer as an invoice number: invoice numbering is sequential, gapless and legally constrained per country, and an identifier somebody has already seen on a screen cannot become one later without confusion.
3736
+ */
3737
+ id: string;
3738
+ /**
3739
+ * The party the contract is concluded with, whose account this is. It outlives the tenant.
3740
+ */
3741
+ subscriberId: string;
3742
+ /**
3743
+ * The tenant the subscription belonged to when the charge arose.
3744
+ */
3745
+ tenantId: string;
3746
+ /**
3747
+ * The subscription the charge arose on. Part of the natural key.
3748
+ */
3749
+ subscriptionId: string;
3750
+ /**
3751
+ * The contract whose line the charge realises.
3752
+ */
3753
+ contractId: string;
3754
+ /**
3755
+ * The contract line the charge came from, so that every invoice line can be traced back to what was agreed.
3756
+ */
3757
+ contractLineItemId: string;
3758
+ origin: SubscriberChargeOrigin;
3759
+ source: SubscriberChargeSource;
3760
+ /**
3761
+ * Which thing of its source the charge is for, stable across contracts: the subscription id for the plan, the booking id for an add-on, the discount's key for a discount. Part of the natural key (subscriptionId, source, sourceRef, periodStart, origin), which is unique — a charge derived twice is written once.
3762
+ */
3763
+ sourceRef: string;
3764
+ /**
3765
+ * The start of the period the charge belongs to — the grouping key for an invoice.
3766
+ */
3767
+ periodStart: string;
3768
+ periodEnd: string;
3769
+ /**
3770
+ * ISO 4217, as the contract line records it — recorded per charge so that a charge written in 2026 still means what it meant after the configured currency changes.
3771
+ */
3772
+ currency: string;
3773
+ /**
3774
+ * Net, rounded to the currency's decimal places once, when the charge is written; the written figure is the truth from then on. Negative for a discount.
3775
+ */
3776
+ amountNet: number;
3777
+ /**
3778
+ * When the amount became due. The account is ordered by this, not by when the row was written.
3779
+ */
3780
+ bookedAt: string;
3781
+ createdAt: string;
3782
+ }
3783
+
3784
+ /** A charge as a store reads it back: the wire format, with its dates as dates. */
3785
+ interface SubscriberChargeRecord {
3786
+ id: string;
3787
+ subscriberId: string;
3788
+ tenantId: string;
3789
+ subscriptionId: string;
3790
+ contractId: string;
3791
+ contractLineItemId: string;
3792
+ origin: SubscriberChargeOrigin;
3793
+ source: SubscriberChargeSource;
3794
+ /** The subscription id for the plan, the booking id for an add-on, the discount's key. */
3795
+ sourceRef: string;
3796
+ periodStart: Date;
3797
+ periodEnd: Date;
3798
+ currency: string;
3799
+ /** Net, rounded to the cent when written. Negative for a discount. */
3800
+ amountNet: number;
3801
+ /** When the amount became due. */
3802
+ bookedAt: Date;
3803
+ createdAt: Date;
3804
+ }
3805
+ /** A charge to write: everything but what the store assigns. */
3806
+ type NewSubscriberCharge = Omit<SubscriberChargeRecord, 'id' | 'createdAt'>;
3807
+ /**
3808
+ * The manifest capability that announces the operator's view of an account.
3809
+ * The platform sets it where it serves the view, and the admin UI shows the
3810
+ * view only where it is set.
3811
+ */
3812
+ declare const SUBSCRIBER_ACCOUNT_CAPABILITY = "charges.read";
3813
+ /** Whose account it is, as the operator is shown it. */
3814
+ interface AdminAccountHolder {
3815
+ id: string;
3816
+ /** What the customer quotes, and what an invoice will carry. */
3817
+ customerNumber: string;
3818
+ legalName: string;
3819
+ }
3820
+ /** One charge of an account, with the name its contract line gives it. */
3821
+ interface AdminAccountEntry {
3822
+ /** The charge as the journal holds it. */
3823
+ charge: SubscriberCharge;
3824
+ /**
3825
+ * The contract line's own title, as it was when the contract was
3826
+ * concluded, or `null` where that line cannot be read.
3827
+ */
3828
+ title: string | null;
3829
+ }
3830
+ /**
3831
+ * A tenant's account as the operator reads it: the charges of the subscription
3832
+ * it holds, newest first — by when each became due, then by its period, then
3833
+ * the plan before its add-ons before its discounts.
3834
+ *
3835
+ * No total: without invoices and payments, a sum would be what was charged so
3836
+ * far, and it would be read as what is owed.
3837
+ */
3838
+ interface AdminSubscriberAccount {
3839
+ /** `null` for a tenant that has no subscriber. */
3840
+ holder: AdminAccountHolder | null;
3841
+ entries: AdminAccountEntry[];
3842
+ }
3843
+
3514
3844
  /**
3515
3845
  * Snapshot form of a `Subscription` row for the EntitlementService
3516
3846
  * computation. The consumer maps its Prisma structure onto this form.
@@ -3687,6 +4017,22 @@ interface SubscriptionContractRepository {
3687
4017
  */
3688
4018
  findByOriginalOfferId(offerId: string, tx?: TransactionContext): Promise<SubscriptionContractRecord | null>;
3689
4019
  terminate(contractId: string, data: TerminateSubscriptionContractData): Promise<SubscriptionContractRecord>;
4020
+ /**
4021
+ * Ends a contract at `data.at` with the status `superseded`, where it is
4022
+ * still as the caller read it: `active` or `scheduled`, and ending when it
4023
+ * ended then. `null`, with nothing written, where it has moved since —
4024
+ * another successor took its place, or a cancellation capped or ended it.
4025
+ *
4026
+ * The condition belongs to the write rather than to a read before it. Two
4027
+ * callers superseding one contract at once — a plan change and an
4028
+ * operator's refresh, say — then end with one successor: the second write
4029
+ * finds the status the first one left and changes nothing, where a read
4030
+ * followed by a plain update would give the tenant two contracts in force.
4031
+ *
4032
+ * With `tx`, written on that transaction and undone with it, so that the
4033
+ * successor written beside it lands with it or not at all.
4034
+ */
4035
+ supersede(contractId: string, data: SupersedeSubscriptionContractData, tx?: TransactionContext): Promise<SubscriptionContractRecord | null>;
3690
4036
  /**
3691
4037
  * The contracts concluded and not yet over, with the issuer each was
3692
4038
  * concluded under: how many there are, and the first `limit` of them,
@@ -3758,6 +4104,27 @@ interface SubscriberRepository {
3758
4104
  /** Every correction of this subscriber, the latest first. */
3759
4105
  listCorrections(subscriberId: string): Promise<SubscriberCorrectionRecord[]>;
3760
4106
  }
4107
+ /**
4108
+ * The subscriber's account: the charges that became due, one per contract line
4109
+ * and period. Append-only — nothing here updates or deletes a charge, and a
4110
+ * mistake is answered with a counter-entry (`SC-PRIC-020`).
4111
+ *
4112
+ * Owned by the subscriber rather than the tenant, so that it outlives the
4113
+ * tenant it arose for (ADR 0012).
4114
+ */
4115
+ interface SubscriberLedgerRepository {
4116
+ /**
4117
+ * Writes the charges that are not there yet and returns them.
4118
+ *
4119
+ * A charge whose natural key — subscription, source, source reference,
4120
+ * period start and origin — is already written is left as it is and not
4121
+ * returned, however often it is derived and whoever derives it at the same
4122
+ * time: the unique index decides, not a read before the write.
4123
+ */
4124
+ recordCharges(charges: readonly NewSubscriberCharge[], tx?: TransactionContext): Promise<SubscriberChargeRecord[]>;
4125
+ /** Every charge of one subscription, oldest period first. */
4126
+ listBySubscription(subscriptionId: string, tx?: TransactionContext): Promise<SubscriberChargeRecord[]>;
4127
+ }
3761
4128
  /**
3762
4129
  * Display form of a subscription for the tenant self-service UI.
3763
4130
  * Richer than `SubscriptionRecord` (which is only the aggregation form); contains
@@ -5014,6 +5381,49 @@ interface AppliedSettingsPort {
5014
5381
  acknowledgeChange(id: string, acknowledgedBy: string, acknowledgedAt: Date): Promise<SettingsChangeRecord | null>;
5015
5382
  }
5016
5383
 
5384
+ /**
5385
+ * Keeps the maintenance windows, in the application's own database.
5386
+ *
5387
+ * Every running version of the application reads this table while the lock
5388
+ * holds — the one being replaced as well as the one replacing it — so its shape
5389
+ * is part of the contract between two releases: it gains columns, and never in
5390
+ * a deploy the lock protects.
5391
+ *
5392
+ * An adapter translates. It does not decide whether a window may be locked or
5393
+ * moved; it makes each write conditional on what the caller read, so that two
5394
+ * operators acting at once cannot both succeed.
5395
+ */
5396
+ interface MaintenanceWindowPort {
5397
+ /** The open window — announced or locked, not yet over — or null. There is at most one. */
5398
+ findOpen(): Promise<MaintenanceWindowRecord | null>;
5399
+ /** The most recently recorded windows first, open or over; at most `limit` of them. */
5400
+ listRecent(limit: number): Promise<MaintenanceWindowRecord[]>;
5401
+ /**
5402
+ * Records a new open window and returns it as stored — the id is the
5403
+ * adapter's to assign. Returns null where a window is already open: the
5404
+ * database holds an installation to one, so of two concurrent calls exactly
5405
+ * one lands.
5406
+ */
5407
+ open(window: NewMaintenanceWindow): Promise<MaintenanceWindowRecord | null>;
5408
+ /**
5409
+ * Applies `changes` to window `id`, provided it is still open and at
5410
+ * `stage`. Returns the window as stored, or null where it is not: it ended,
5411
+ * it was locked in the meantime, or no window has that id.
5412
+ */
5413
+ update(id: string, stage: MaintenanceWindowStage, changes: MaintenanceWindowChanges): Promise<MaintenanceWindowRecord | null>;
5414
+ }
5415
+ /**
5416
+ * Hears when a window is announced, moved or cancelled, so the application can
5417
+ * write to its users. Optional: without it tenants learn of a window from the
5418
+ * banner alone.
5419
+ *
5420
+ * Called after the change is recorded, and never waited on by the operator: a
5421
+ * notification that fails is logged, and the window stands as recorded.
5422
+ */
5423
+ interface MaintenanceNotificationPort {
5424
+ windowChanged(event: MaintenanceWindowEvent): Promise<void>;
5425
+ }
5426
+
5017
5427
  /** Class reference usable as a DI token (e.g. the consumer's `PrismaService`). */
5018
5428
  type PersistenceClassRef = abstract new (...args: never[]) => unknown;
5019
5429
  /** DI token forms a persistence bundle may reference in `inject`. */
@@ -5077,6 +5487,13 @@ interface SaaSiCatPersistenceCore {
5077
5487
  * platform says once at boot that it is not recording.
5078
5488
  */
5079
5489
  appliedSettings?: PersistenceProvider<AppliedSettingsPort>;
5490
+ /**
5491
+ * Where maintenance windows are kept (`maintenance` in
5492
+ * `SaaSiCatModule.forRoot`). Optional so an adapter written before it
5493
+ * existed keeps working; an installation that turns maintenance on without
5494
+ * one is refused at start-up.
5495
+ */
5496
+ maintenanceWindows?: PersistenceProvider<MaintenanceWindowPort>;
5080
5497
  }
5081
5498
  /** Repositories for the entitlement/contract loop (`EntitlementModule`). */
5082
5499
  interface SaaSiCatPersistenceEntitlement {
@@ -5085,6 +5502,8 @@ interface SaaSiCatPersistenceEntitlement {
5085
5502
  subscriptionContractRepository?: PersistenceProvider<SubscriptionContractRepository>;
5086
5503
  /** The parties contracts are concluded with; required wherever contracts are written. */
5087
5504
  subscriberRepository?: PersistenceProvider<SubscriberRepository>;
5505
+ /** The charges a subscriber's contracts give rise to (`tenantBilling.chargeJournal`). */
5506
+ subscriberLedgerRepository?: PersistenceProvider<SubscriberLedgerRepository>;
5088
5507
  subscriptionBundleRepository?: PersistenceProvider<SubscriptionBundleRepository>;
5089
5508
  bundleRepository?: PersistenceProvider<BundleRepository>;
5090
5509
  }
@@ -5422,6 +5841,14 @@ declare const CONTRACT_ERROR_CODES: {
5422
5841
  readonly SUBSCRIPTION_CONTRACT_NOT_FOUND: "SUBSCRIPTION_CONTRACT_NOT_FOUND";
5423
5842
  readonly NO_ACTIVE_SUBSCRIPTION_CONTRACT: "NO_ACTIVE_SUBSCRIPTION_CONTRACT";
5424
5843
  readonly SUBSCRIPTION_CONTRACT_ALREADY_CLOSED: "SUBSCRIPTION_CONTRACT_ALREADY_CLOSED";
5844
+ /**
5845
+ * A successor would run beside another contract of the tenant: the
5846
+ * contract in force moved while it was being written — another successor
5847
+ * took its place, or a cancellation capped it — and kept moving on a
5848
+ * second attempt, or a contract begins after the moment the successor
5849
+ * would take effect. Nothing was written.
5850
+ */
5851
+ readonly SUBSCRIPTION_CONTRACT_CHANGED: "SUBSCRIPTION_CONTRACT_CHANGED";
5425
5852
  };
5426
5853
  type ContractErrorCode = (typeof CONTRACT_ERROR_CODES)[keyof typeof CONTRACT_ERROR_CODES];
5427
5854
  /** The parties contracts are concluded with (`SubscriberService`), and their absence. */
@@ -5530,6 +5957,13 @@ declare const PAYMENT_ERROR_CODES: {
5530
5957
  * does not name. Carries `field`.
5531
5958
  */
5532
5959
  readonly PAYMENT_RETURN_URL_NOT_ALLOWED: "PAYMENT_RETURN_URL_NOT_ALLOWED";
5960
+ /**
5961
+ * The gateway failed — unreachable, refusing the account's keys, or
5962
+ * answering with an error — while opening its form or reading a callback
5963
+ * back. Answered with 502; what the gateway answered stays in the server
5964
+ * log.
5965
+ */
5966
+ readonly PAYMENT_GATEWAY_FAILED: "PAYMENT_GATEWAY_FAILED";
5533
5967
  };
5534
5968
  type PaymentErrorCode = (typeof PAYMENT_ERROR_CODES)[keyof typeof PAYMENT_ERROR_CODES];
5535
5969
  /** Codes of the settings record (`GET /admin/settings`, the acknowledgement). */
@@ -5538,6 +5972,26 @@ declare const SETTINGS_ERROR_CODES: {
5538
5972
  readonly SETTINGS_CHANGE_NOT_FOUND: "SETTINGS_CHANGE_NOT_FOUND";
5539
5973
  };
5540
5974
  type SettingsErrorCode = (typeof SETTINGS_ERROR_CODES)[keyof typeof SETTINGS_ERROR_CODES];
5975
+ /** Codes of maintenance windows: the lock's refusal, and the operator's routes. */
5976
+ declare const MAINTENANCE_ERROR_CODES: {
5977
+ /** The application is locked for maintenance; the body carries the window. */
5978
+ readonly MAINTENANCE: "MAINTENANCE";
5979
+ /** A window is already open: move or cancel it before announcing another. */
5980
+ readonly MAINTENANCE_WINDOW_ALREADY_OPEN: "MAINTENANCE_WINDOW_ALREADY_OPEN";
5981
+ /** No open window has this id — it ended, or it never existed. */
5982
+ readonly MAINTENANCE_WINDOW_NOT_OPEN: "MAINTENANCE_WINDOW_NOT_OPEN";
5983
+ /** The window is locked: its start is history, and unlocking is what ends it. */
5984
+ readonly MAINTENANCE_WINDOW_LOCKED: "MAINTENANCE_WINDOW_LOCKED";
5985
+ /** The announced end is not after the announced start. */
5986
+ readonly MAINTENANCE_WINDOW_END_NOT_AFTER_START: "MAINTENANCE_WINDOW_END_NOT_AFTER_START";
5987
+ /** The announced end has already passed. */
5988
+ readonly MAINTENANCE_WINDOW_END_IN_PAST: "MAINTENANCE_WINDOW_END_IN_PAST";
5989
+ /** A time without its zone, or not a date and time at all; `field` names which. */
5990
+ readonly MAINTENANCE_TIME_INVALID: "MAINTENANCE_TIME_INVALID";
5991
+ /** The message is longer than `MAINTENANCE_MESSAGE_MAX_LENGTH`. */
5992
+ readonly MAINTENANCE_MESSAGE_TOO_LONG: "MAINTENANCE_MESSAGE_TOO_LONG";
5993
+ };
5994
+ type MaintenanceErrorCode = (typeof MAINTENANCE_ERROR_CODES)[keyof typeof MAINTENANCE_ERROR_CODES];
5541
5995
  /**
5542
5996
  * Every exception code the platform emits, in one object.
5543
5997
  *
@@ -5546,6 +6000,22 @@ type SettingsErrorCode = (typeof SETTINGS_ERROR_CODES)[keyof typeof SETTINGS_ERR
5546
6000
  * removing one may not.
5547
6001
  */
5548
6002
  declare const PLATFORM_ERROR_CODES: {
6003
+ /** The application is locked for maintenance; the body carries the window. */
6004
+ readonly MAINTENANCE: "MAINTENANCE";
6005
+ /** A window is already open: move or cancel it before announcing another. */
6006
+ readonly MAINTENANCE_WINDOW_ALREADY_OPEN: "MAINTENANCE_WINDOW_ALREADY_OPEN";
6007
+ /** No open window has this id — it ended, or it never existed. */
6008
+ readonly MAINTENANCE_WINDOW_NOT_OPEN: "MAINTENANCE_WINDOW_NOT_OPEN";
6009
+ /** The window is locked: its start is history, and unlocking is what ends it. */
6010
+ readonly MAINTENANCE_WINDOW_LOCKED: "MAINTENANCE_WINDOW_LOCKED";
6011
+ /** The announced end is not after the announced start. */
6012
+ readonly MAINTENANCE_WINDOW_END_NOT_AFTER_START: "MAINTENANCE_WINDOW_END_NOT_AFTER_START";
6013
+ /** The announced end has already passed. */
6014
+ readonly MAINTENANCE_WINDOW_END_IN_PAST: "MAINTENANCE_WINDOW_END_IN_PAST";
6015
+ /** A time without its zone, or not a date and time at all; `field` names which. */
6016
+ readonly MAINTENANCE_TIME_INVALID: "MAINTENANCE_TIME_INVALID";
6017
+ /** The message is longer than `MAINTENANCE_MESSAGE_MAX_LENGTH`. */
6018
+ readonly MAINTENANCE_MESSAGE_TOO_LONG: "MAINTENANCE_MESSAGE_TOO_LONG";
5549
6019
  /** No recorded change has this id, or the installation keeps no record at all. */
5550
6020
  readonly SETTINGS_CHANGE_NOT_FOUND: "SETTINGS_CHANGE_NOT_FOUND";
5551
6021
  /**
@@ -5562,6 +6032,13 @@ declare const PLATFORM_ERROR_CODES: {
5562
6032
  * does not name. Carries `field`.
5563
6033
  */
5564
6034
  readonly PAYMENT_RETURN_URL_NOT_ALLOWED: "PAYMENT_RETURN_URL_NOT_ALLOWED";
6035
+ /**
6036
+ * The gateway failed — unreachable, refusing the account's keys, or
6037
+ * answering with an error — while opening its form or reading a callback
6038
+ * back. Answered with 502; what the gateway answered stays in the server
6039
+ * log.
6040
+ */
6041
+ readonly PAYMENT_GATEWAY_FAILED: "PAYMENT_GATEWAY_FAILED";
5565
6042
  readonly PENDING_REGISTRATION_NOT_FOUND: "PENDING_REGISTRATION_NOT_FOUND";
5566
6043
  readonly PENDING_REGISTRATION_EXPIRED: "PENDING_REGISTRATION_EXPIRED";
5567
6044
  readonly INVALID_REGISTRATION_STATE: "INVALID_REGISTRATION_STATE";
@@ -5636,6 +6113,14 @@ declare const PLATFORM_ERROR_CODES: {
5636
6113
  readonly SUBSCRIPTION_CONTRACT_NOT_FOUND: "SUBSCRIPTION_CONTRACT_NOT_FOUND";
5637
6114
  readonly NO_ACTIVE_SUBSCRIPTION_CONTRACT: "NO_ACTIVE_SUBSCRIPTION_CONTRACT";
5638
6115
  readonly SUBSCRIPTION_CONTRACT_ALREADY_CLOSED: "SUBSCRIPTION_CONTRACT_ALREADY_CLOSED";
6116
+ /**
6117
+ * A successor would run beside another contract of the tenant: the
6118
+ * contract in force moved while it was being written — another successor
6119
+ * took its place, or a cancellation capped it — and kept moving on a
6120
+ * second attempt, or a contract begins after the moment the successor
6121
+ * would take effect. Nothing was written.
6122
+ */
6123
+ readonly SUBSCRIPTION_CONTRACT_CHANGED: "SUBSCRIPTION_CONTRACT_CHANGED";
5639
6124
  /**
5640
6125
  * Feature not covered by the plan. Defined in `upsell.types.ts` because the
5641
6126
  * upsell body type is built around it; re-exported here so an exhaustive
@@ -5858,7 +6343,7 @@ declare const PLATFORM_ERROR_CODES: {
5858
6343
  /** Email already taken (mapped from `PlatformUserExistsError`). */
5859
6344
  readonly EMAIL_EXISTS: "EMAIL_EXISTS";
5860
6345
  };
5861
- type PlatformErrorCode = SetupErrorCode | AuthErrorCode | PromoErrorCode | CatalogErrorCode | BillingErrorCode | ContractErrorCode | SubscriberErrorCode | RegistrationErrorCode | PaymentErrorCode | SettingsErrorCode;
6346
+ type PlatformErrorCode = SetupErrorCode | AuthErrorCode | PromoErrorCode | CatalogErrorCode | BillingErrorCode | ContractErrorCode | SubscriberErrorCode | RegistrationErrorCode | PaymentErrorCode | SettingsErrorCode | MaintenanceErrorCode;
5862
6347
  /**
5863
6348
  * Shape of a coded error response.
5864
6349
  *
@@ -6779,6 +7264,47 @@ type IssuerIdentityChange =
6779
7264
  */
6780
7265
  declare function classifyIssuerChange(recorded: LegalIdentity | null, issuer: PlanCatalogIssuer | undefined): IssuerIdentityChange;
6781
7266
 
7267
+ /**
7268
+ * A `subscriber_ledger_entries` row as either adapter reads it back. The amount
7269
+ * is `unknown` because a Prisma row carries a `Decimal` where a Drizzle row
7270
+ * carries a numeric string.
7271
+ */
7272
+ interface CanonicalSubscriberChargeRow {
7273
+ id: string;
7274
+ subscriberId: string;
7275
+ tenantId: string;
7276
+ subscriptionId: string;
7277
+ contractId: string;
7278
+ contractLineItemId: string;
7279
+ origin: string;
7280
+ source: string;
7281
+ sourceRef: string;
7282
+ periodStart: Date;
7283
+ periodEnd: Date;
7284
+ currency: string;
7285
+ amountNet: unknown;
7286
+ bookedAt: Date;
7287
+ createdAt: Date;
7288
+ }
7289
+ /**
7290
+ * Reads a row back as a record. The origin and the source are checked rather
7291
+ * than cast: a value written by hand or by a later release would otherwise
7292
+ * reach an invoice as a charge nobody knows how to read.
7293
+ */
7294
+ declare function toSubscriberChargeRecord(row: CanonicalSubscriberChargeRow): SubscriberChargeRecord;
7295
+ /**
7296
+ * The columns a charge is written with. The amount goes as a decimal string of
7297
+ * two places, which both a Prisma `Decimal` and a PostgreSQL `numeric` take
7298
+ * exactly — a JavaScript number on its way to either is where a cent is lost.
7299
+ *
7300
+ * An amount that is not already a whole number of cents is refused rather than
7301
+ * rounded: a charge is rounded once, where it is derived, and a second rounding
7302
+ * here would make the written figure differ from the one that was computed.
7303
+ */
7304
+ declare function subscriberChargeColumns(charge: NewSubscriberCharge): Omit<CanonicalSubscriberChargeRow, 'id' | 'createdAt' | 'amountNet'> & {
7305
+ amountNet: string;
7306
+ };
7307
+
6782
7308
  /** A `subscribers` row as either adapter reads it back. */
6783
7309
  interface CanonicalSubscriberRow {
6784
7310
  id: string;
@@ -6907,6 +7433,37 @@ declare function isForeignPaymentMethodReferenceError(error: unknown): error is
6907
7433
  */
6908
7434
  declare function refuseForeignPaymentMethodReference(recorded: Pick<CanonicalSubscriberPaymentMethodRow, 'subscriberId' | 'gatewayAccount' | 'paymentMethodRef'>, subscriberId: string): void;
6909
7435
 
7436
+ /**
7437
+ * A `subscription_bundles` row as either adapter reads it back.
7438
+ *
7439
+ * The three billing columns are optional because a Prisma client generated from
7440
+ * a schema that predates them returns a row without them; an absent column
7441
+ * reads as null, the same as a booking made before they existed.
7442
+ */
7443
+ interface CanonicalSubscriptionBundleRow {
7444
+ id: string;
7445
+ subscriptionId: string;
7446
+ bundleVersionId: string;
7447
+ startedAt: Date;
7448
+ minimumTermEndsAt: Date | null;
7449
+ billingCycle?: string | null;
7450
+ currentPeriodStart?: Date | null;
7451
+ currentPeriodEnd?: Date | null;
7452
+ canceledAt: Date | null;
7453
+ canceledEffectiveAt: Date | null;
7454
+ createdAt: Date;
7455
+ updatedAt: Date;
7456
+ }
7457
+ /**
7458
+ * Reads a row back as a record.
7459
+ *
7460
+ * `billingCycle` is a text column the platform only ever writes as `MONTHLY` or
7461
+ * `YEARLY`, and a price is chosen by asking whether it is `YEARLY` — so any
7462
+ * other value would be billed monthly without a word. It is checked rather than
7463
+ * cast, and a value outside the two stops the read.
7464
+ */
7465
+ declare function toSubscriptionBundleRecord(row: CanonicalSubscriptionBundleRow): SubscriptionBundleRecord;
7466
+
6910
7467
  /** A `subscription_contracts` row as either adapter reads it back. */
6911
7468
  interface CanonicalContractRow {
6912
7469
  id: string;
@@ -7050,4 +7607,4 @@ declare function resolveErrorMessage(body: ResolvableErrorBody, overrides?: Part
7050
7607
 
7051
7608
  declare const ERROR_MESSAGES_DE: Record<PlatformErrorCode, string>;
7052
7609
 
7053
- export { ACTIVE_SUBSCRIPTION_CONTRACT_STATUSES, AUTH_ERROR_CODES, type ActionKey, type ActivationOrchestrator, type ActivePlanVersionWhere, type ActivePlanVersionWhereWithEndsAt, type ActiveVersionWhere, type ActiveVersionWhereWithEndsAt, type ActorTag, type AdminActor, type AdminAuditListFilter, type AdminManifest, type AdminResourcesPort, type AdminSubscriptionListRow, type AdminTenantDetail, type AdminTenantListFilter, type AdminTenantListRow, type AdminTenantStateResult, type AdminUserListFilter, type AdminUserListRow, type AppliedSettingsPort, type AppliedSettingsRecord, type AppliedSettingsValues, type ApplyOnboardingSelectionInput, type ApplyOnboardingSelectionResult, type ApprovedCatalogKeys, type AuditActionDef, type AuditEntry, type AuditPort, type AuditQuery, type AuditQueryPort, type AuditStatsPort, type AuditStatsSnapshot, type AuthErrorCode, BILLING_ERROR_CODES, BUNDLE_PRICE_LOOKUP_LIMIT, type BillingCycle, type BillingErrorCode, type BundleAvailabilityState, type BundleCompatibility, type BundleFeatureShape, type BundleListFilter, type BundlePricingOverride, type BundleRepository, type BundleRow, type BundleVersionFields, type BundleVersionMutationResult, type BundleVersionRow, CATALOGUE_KEYS, CATALOG_ERROR_CODES, CONTRACT_ERROR_CODES, type CancelSubscriptionBundleData, type CancelSubscriptionInput, type CancelSubscriptionResult, type CancellationNoticePeriods, type CanonicalContractLineItemRow, type CanonicalContractRow, type CanonicalPlanRow, type CanonicalPlanVersionRow, type CanonicalRunningContractRow, type CanonicalSubscriberCorrectionRow, type CanonicalSubscriberPaymentMethodRow, type CanonicalSubscriberRow, type CapabilityCatalogEntryRow, type CapabilityCodeStatus, type CapabilityKey, type CapabilityKind, type CatalogEntryFilter, type CatalogEntryI18n, type CatalogEntryI18nFields, type CatalogEntryRepository, type CatalogErrorCode, type ChangeDirection, type CheckoutOfferFilter, type CheckoutOfferLineItem, type CheckoutOfferLineItemKind, type CheckoutOfferPriceBreakdown, type CheckoutOfferPromoCodeSnapshot, type CheckoutOfferPromotionSnapshot, type CheckoutOfferRepository, type CheckoutOfferRow, type CheckoutOfferSelection, type CheckoutOfferSelectionUpdate, type CheckoutOfferStatus, type CleanupResult, type CliUserRow, type ComponentKey, type ConfiguratorCatalog, type ConfiguratorMarketingProvider, type ConfiguratorModel, type ConfiguratorPlanMarketing, type ConfiguratorPlanVersionRow, type ConfiguratorPriceBreakdown, type ConfiguratorSourcesLookup, type ConfirmedPaymentMethod, type ContractErrorCode, type ContractIssuerParty, type ContractLineItemKind, type ContractLineItemRecord, type ContractSubscriberParty, type CreateBundleData, type CreateBundleVersionDraftData, type CreateCheckoutOfferData, type CreateMarketingProjectionData, type CreatePlanData, type CreatePlanVersionDraftData, type CreatePromoCodeData, type CreatePromoCodeRequest, type CreatePromotionData, type CreateSubscriberData, type CreateSubscriptionBundleData, type CreateSubscriptionContractData, type CreateSuperAdminCliInput, type CreateTenantInput, type DiffResult, type DiscoveredCapability, type DiscoveredFeature, type DiscoveredQuota, type DiscoveredQuotaPolicy, type DiscoveryCodeStatus, type DiscoverySnapshot, type DiscoveryStatus, ERROR_MESSAGES_DE, ERROR_MESSAGES_EN, type EffectiveLimitsSnapshot, type EmailPort, type ErrorMessageParams, FEATURE_NOT_LICENSED, type FeatureCatalogEntryRow, type FeatureDef, type FeatureKey, type FeatureNotLicensedBody, type FeatureRequiresIndex, type FeatureTier, type FeatureUiMeta, type FeatureUiRegistry, type FinalActivationResult, type FirstTimeCustomerCheck, ForeignPaymentMethodReferenceError, type ImmediatePlanChangeInput, type InvoiceLineItemSnapshot, type IssuerCorrectionFault, type IssuerIdentityChange, type KpiCardDef, type KpiDisplayHint, LEGAL_IDENTITY_FIELDS, type LegalIdentity, type LegalIdentityField, MARKETING_PRIORITY_MAX, MARKETING_PRIORITY_MIN, type ManifestAccessPort, type ManifestContribution, type MarketingProjectionFilter, type MarketingProjectionRepository, type MarketingProjectionRow, type MarketingSettingsRepository, type MarketingSettingsRow, type MarketingTargetType, type MarketingTopFeature, type MaskedPaymentMethod, type MfaPort, type NewContractLineItemData, type NewSettingsChange, type NewSubscriberDetails, type NewSubscriptionContractData, OTP_RATE_LIMIT_MAX_SENDS, OTP_RATE_LIMIT_WINDOW_MINUTES, OTP_TTL_MINUTES, OTP_VERIFY_MAX_ATTEMPTS, type OnboardingPromoRedemption, type OnboardingSelectionRequest, type OnboardingSelectionResponse, PASSWORD_RESET_TTL_MINUTES, PAYMENT_ERROR_CODES, PAYMENT_METHOD_TYPES, PENDING_CHECKOUT_TTL_DAYS, PENDING_EMAIL_TTL_HOURS, PENDING_ONBOARDING_TTL_DAYS, PLATFORM_ERROR_CODES, PROMO_ERROR_CODES, type Paginated, type PartyAddress, type PasswordHasher, type PasswordResetCliResult, PaymentCallbackRejectedError, type PaymentErrorCode, type PaymentEventClaim, type PaymentEventLog, type PaymentGateway, type PaymentGatewayCallback, type PaymentGatewayEvent, type PaymentMethodHolder, type PaymentMethodSetupSession, type PaymentMethodSetupSubject, type PaymentMethodType, type PendingRegistration, type PendingRegistrationCreateInput, type PendingRegistrationRepository, type PendingRegistrationSnapshot, type PendingRegistrationUpdateInput, type PersistenceCapabilities, PersistenceCapabilityError, type PersistenceClassRef, type PersistenceInjectionToken, type PersistenceProvider, type PlanCatalog, type PlanCatalogApp, type PlanCatalogImportReport, type PlanCatalogImportSink, type PlanCatalogIssuer, type PlanCatalogIssuerCorrection, type PlanCatalogLookup, type PlanCatalogMarketing, type PlanCatalogNotifications, type PlanCatalogPaymentAccount, type PlanCatalogPayments, type PlanCatalogReadSink, type PlanCatalogReadSnapshot, type PlanCatalogSettings, type PlanCatalogSubscribers, type PlanCatalogTenantBilling, type PlanDef, type PlanId, type PlanListFilter, type PlanRepository, type PlanRow, type PlanVersion, type PlanVersionFields, type PlanVersionMappingFields, type PlanVersionMutationResult, type PlanVersionRecord, type PlanVersionRepository, type PlanVersionRow, type PlatformErrorBody, type PlatformErrorCode, type PlatformRole, type PlatformUserDto, PlatformUserExistsError, type ProjectPageDef, type PromoCode, type PromoCodeDurationType, type PromoCodeFilter, type PromoCodeHoldRecord, type PromoCodeHoldRepository, type PromoCodeHoldTaken, type PromoCodeRecord, type PromoCodeRedemption, type PromoCodeRedemptionListItem, type PromoCodeRedemptionRecord, type PromoCodeRedemptionRepository, type PromoCodeRedemptionStatus, type PromoCodeRepository, type PromoCodeStatsPort, type PromoCodeStatsSnapshot, type PromoCodeStatus, type PromoCodeValidationLog, type PromoCodeValidationLogRepository, type PromoCodeValidationResult, type PromoCodeValueType, type PromoErrorCode, type PromoPreviewInvalidReason, type PromoPreviewRequest, type PromoPreviewResponse, type PromoPreviewValidResponse, type PromoRevenueDeductionAggregator, type PromoSubscriptionLookup, type PromotionBillingCycle, type PromotionI18n, type PromotionI18nFields, type PromotionOnPrice, type PromotionRepository, type PromotionResult, type PromotionRow, type PromotionStatus, type PromotionTargetType, type PromotionType, type PromotionValue, type PublicBootResponse, type PublicComparisonRow, type PublicMarketingBundle, type PublicMarketingCatalogResponse, type PublicMarketingPlan, type PublicMarketingPromo, type PublicNewPaymentMethods, type PublicSignupPlan, type PublishBundleVersionData, type PublishBundleVersionMeta, type PublishPlanVersionData, type QuotaCatalogEntryRow, type QuotaEnforcementMode, type QuotaKey, type QuotaProvider, REGISTRATION_ERROR_CODES, REGISTRATION_RESUME_TTL_MINUTES, REGISTRATION_STEP_BY_STATUS, type ReassignTenantAdminCliResult, type RecommendablePlan, type RecordSubscriberPaymentMethodData, type RecordSubscriberPaymentMethodOutcome, type RecordSubscriberPaymentMethodResult, type RedeemPromoInTransactionCallback, type RegistrationActivation, type RegistrationAuditContext, type RegistrationAuditEvent, type RegistrationAuditEventType, type RegistrationAuditLogger, type RegistrationBillingDetails, type RegistrationConfigSelection, type RegistrationConfiguratorLookup, type RegistrationErrorCode, type RegistrationOtpDelivery, type RegistrationPromoPreview, type RegistrationResumeDelivery, type RegistrationResumeTokenSigner, type RegistrationStatus, type RegistrationStep, type RequiredCapabilities, type ResolvableErrorBody, type ResumeRegistrationInput, type ResumeRegistrationResult, type ReviewCatalogEntryData, type RlsBypassPort, type RunningContractIssuer, type RunningContractIssuers, SETTINGS_ERROR_CODES, SETUP_ERROR_CODES, SUBSCRIBER_ERROR_CODES, type SaaSiCatPersistenceAdapter, type SaaSiCatPersistenceAdminResources, type SaaSiCatPersistenceCatalog, type SaaSiCatPersistenceCore, type SaaSiCatPersistenceEntitlement, type SaaSiCatPersistencePayments, type SaaSiCatPersistencePromo, type SaaSiCatPersistenceTenantBilling, type SaveRegistrationConfigInput, type SaveRegistrationConfigResult, type ScheduledPlanChangeInput, type SelectPlanInput, type SelectPlanResult, type SelectableBundleShape, type SelfServiceBlockedPlans, type SetCatalogEntryReviewData, type SettingsChangeFilter, type SettingsChangeRecord, type SettingsDifference, type SettingsErrorCode, type SetupConfirmMfaRequest, type SetupConfirmMfaResponse, type SetupErrorCode, type SetupRequest, type SetupResult, type SetupStatusResponse, type SlugAvailabilityCheck, type StandardPageDef, type StandardPageKey, type StartCheckoutInput, type StartCheckoutResult, type StartPaymentMethodSetupInput, type StartRegistrationInput, type StartRegistrationResult, type StoredBundleStem, type StrictModeWarning, type StrictModeWarningCode, type SubscriberContact, type SubscriberContactChange, type SubscriberCorrectionData, type SubscriberCorrectionRecord, type SubscriberCorrectionResult, type SubscriberDetails, type SubscriberErrorCode, type SubscriberIdentityCorrection, type SubscriberIdentityDelta, type SubscriberIdentityValues, type SubscriberPaymentMethodRecord, type SubscriberPaymentMethodReference, type SubscriberPaymentMethodRepository, type SubscriberPaymentMethodSetupData, type SubscriberPaymentMethodSetupMatch, type SubscriberPaymentMethodStatus, type SubscriberRecord, type SubscriberRepository, type Subscription, type SubscriptionBundleRecord, type SubscriptionBundleRepository, type SubscriptionBundleView, type SubscriptionContractFilter, type SubscriptionContractInvoiceSnapshot, type SubscriptionContractParties, type SubscriptionContractPriceSnapshot, type SubscriptionContractRecord, type SubscriptionContractRepository, type SubscriptionContractStatus, type SubscriptionRecord, type SubscriptionRepository, type SubscriptionStatsPort, type SubscriptionStatsSnapshot, type SubscriptionStatus, type SubscriptionUsagePort, type SubscriptionUsageRecord, type SuperAdminProvisioningPort, type SyncDiscoveryResult, type TenantActionDef, type TenantColumnDef, type TenantDto, type TenantListFilter, type TenantPort, type TenantSubscriptionWritePort, type TerminateSubscriptionContractData, type TopPromoCode, type TransactionContext, type TransactionRunner, type UpdateBundleData, type UpdateBundleVersionDraftData, type UpdateCatalogEntryBaseData, type UpdateCatalogEntryI18nData, type UpdateCheckoutOfferData, type UpdateMarketingProjectionData, type UpdateMarketingSettingsData, type UpdatePlanData, type UpdatePlanVersionDraftData, type UpdatePromoCodeData, type UpdatePromoCodeRequest, type UpdatePromotionData, type UpsellOffer, type UpsellOfferResolver, type UpsertCapabilityEntryData, type UpsertFeatureCatalogEntryInput, type UpsertFeatureEntryData, type UpsertPlanInput, type UpsertPlanVersionInput, type UpsertQuotaEntryData, type UpsertResult, type UsageSnapshotPort, type UserAccountLookup, type UserListFilter, type UserManagementPort, type UserPort, type VerifyRegistrationOtpResult, type VersionChange, type VersionChangeDirection, type VersionEditability, type VersionEditableReason, type VersionedEntityBase, applyPromo, assertPersistenceCapabilities, buildActivePlanVersionWhere, buildActiveVersionWhere, buildFeatureRequiresIndex, bundleDraftDefaults, bundleStemDefaults, canonicalJson, classifyBundleVersionDiff, classifyIssuerChange, classifyPlanDiff, collectUnsatisfiedRequires, contractPartiesOf, coverageExcludingSelf, definedFields, diffSettings, formatCustomerNumber, formatErrorMessage, identityCorrectionDelta, isBundleRedundant, isForeignPaymentMethodReferenceError, isPaymentCallbackRejectedError, isPlatformUserExistsError, isVersionEditable, issuerIdentityOf, keepOneRecommended, missingRequiresFor, movedIdentityFields, pickActivePromo, planCatalogSettingsOf, previousUtcDay, promoStatus, promotionOnPrice, readQuotaRecord, readQuotaValue, recordedIssuerIdentity, refuseForeignPaymentMethodReference, resolveBundleAvailability, resolveErrorMessage, sameLegalIdentity, selectChargeableBundles, settingsSubtreeOf, startOfUtcDay, subscriberFromRegistration, subscriberPaymentMethodColumns, toBundleStemRow, toContractLineItemRecord, toPlanRow, toPlanVersionRow, toRunningContractIssuer, toSubscriberCorrectionRecord, toSubscriberPaymentMethodRecord, toSubscriberRecord, toSubscriptionContractRecord };
7610
+ export { ACTIVE_SUBSCRIPTION_CONTRACT_STATUSES, AUTH_ERROR_CODES, type ActionKey, type ActivationOrchestrator, type ActivePlanVersionWhere, type ActivePlanVersionWhereWithEndsAt, type ActiveVersionWhere, type ActiveVersionWhereWithEndsAt, type ActorTag, type AdminAccountEntry, type AdminAccountHolder, type AdminActor, type AdminAuditListFilter, type AdminManifest, type AdminResourcesPort, type AdminSubscriberAccount, type AdminSubscriptionListRow, type AdminTenantDetail, type AdminTenantListFilter, type AdminTenantListRow, type AdminTenantStateResult, type AdminUserListFilter, type AdminUserListRow, type AppliedSettingsPort, type AppliedSettingsRecord, type AppliedSettingsValues, type ApplyOnboardingSelectionInput, type ApplyOnboardingSelectionResult, type ApprovedCatalogKeys, type AuditActionDef, type AuditEntry, type AuditPort, type AuditQuery, type AuditQueryPort, type AuditStatsPort, type AuditStatsSnapshot, type AuthErrorCode, BILLING_ERROR_CODES, BUNDLE_PRICE_LOOKUP_LIMIT, type BillingCycle, type BillingErrorCode, type BundleAvailabilityState, type BundleCompatibility, type BundleFeatureShape, type BundleListFilter, type BundlePricingOverride, type BundleRepository, type BundleRow, type BundleVersionFields, type BundleVersionMutationResult, type BundleVersionRow, CATALOGUE_KEYS, CATALOG_ERROR_CODES, CONTRACT_ERROR_CODES, type CancelSubscriptionBundleData, type CancelSubscriptionInput, type CancelSubscriptionResult, type CancellationNoticePeriods, type CanonicalContractLineItemRow, type CanonicalContractRow, type CanonicalMaintenanceWindowRow, type CanonicalPlanRow, type CanonicalPlanVersionRow, type CanonicalRunningContractRow, type CanonicalSubscriberChargeRow, type CanonicalSubscriberCorrectionRow, type CanonicalSubscriberPaymentMethodRow, type CanonicalSubscriberRow, type CanonicalSubscriptionBundleRow, type CapabilityCatalogEntryRow, type CapabilityCodeStatus, type CapabilityKey, type CapabilityKind, type CatalogEntryFilter, type CatalogEntryI18n, type CatalogEntryI18nFields, type CatalogEntryRepository, type CatalogErrorCode, type ChangeDirection, type CheckoutOfferFilter, type CheckoutOfferLineItem, type CheckoutOfferLineItemKind, type CheckoutOfferPriceBreakdown, type CheckoutOfferPromoCodeSnapshot, type CheckoutOfferPromotionSnapshot, type CheckoutOfferRepository, type CheckoutOfferRow, type CheckoutOfferSelection, type CheckoutOfferSelectionUpdate, type CheckoutOfferStatus, type CleanupResult, type CliUserRow, type ComponentKey, type ConfiguratorCatalog, type ConfiguratorMarketingProvider, type ConfiguratorModel, type ConfiguratorPlanMarketing, type ConfiguratorPlanVersionRow, type ConfiguratorPriceBreakdown, type ConfiguratorSourcesLookup, type ConfirmedPaymentMethod, type ContractErrorCode, type ContractIssuerParty, type ContractLineItemKind, type ContractLineItemRecord, type ContractSubscriberParty, type CreateBundleData, type CreateBundleVersionDraftData, type CreateCheckoutOfferData, type CreateMarketingProjectionData, type CreatePlanData, type CreatePlanVersionDraftData, type CreatePromoCodeData, type CreatePromoCodeRequest, type CreatePromotionData, type CreateSubscriberData, type CreateSubscriptionBundleData, type CreateSubscriptionContractData, type CreateSuperAdminCliInput, type CreateTenantInput, type DiffResult, type DiscoveredCapability, type DiscoveredFeature, type DiscoveredQuota, type DiscoveredQuotaPolicy, type DiscoveryCodeStatus, type DiscoverySnapshot, type DiscoveryStatus, ERROR_MESSAGES_DE, ERROR_MESSAGES_EN, type EffectiveLimitsSnapshot, type EmailPort, type ErrorMessageParams, FEATURE_NOT_LICENSED, type FeatureCatalogEntryRow, type FeatureDef, type FeatureKey, type FeatureNotLicensedBody, type FeatureRequiresIndex, type FeatureTier, type FeatureUiMeta, type FeatureUiRegistry, type FinalActivationResult, type FirstTimeCustomerCheck, ForeignPaymentMethodReferenceError, type ImmediatePlanChangeInput, type InvoiceLineItemSnapshot, type IssuerCorrectionFault, type IssuerIdentityChange, type KpiCardDef, type KpiDisplayHint, LEGAL_IDENTITY_FIELDS, type LegalIdentity, type LegalIdentityField, MAINTENANCE_CAPABILITY, MAINTENANCE_ERROR_CODES, MAINTENANCE_MESSAGE_MAX_LENGTH, MAINTENANCE_STATE_MAX_AGE_SECONDS, MARKETING_PRIORITY_MAX, MARKETING_PRIORITY_MIN, type MaintenanceErrorCode, type MaintenanceLockView, type MaintenanceNotificationPort, type MaintenanceOverview, type MaintenanceStatusView, type MaintenanceUnlockView, type MaintenanceWindowChanges, type MaintenanceWindowEvent, type MaintenanceWindowPort, type MaintenanceWindowRecord, type MaintenanceWindowStage, type MaintenanceWindowStatus, type MaintenanceWindowView, type ManifestAccessPort, type ManifestContribution, type MarketingProjectionFilter, type MarketingProjectionRepository, type MarketingProjectionRow, type MarketingSettingsRepository, type MarketingSettingsRow, type MarketingTargetType, type MarketingTopFeature, type MaskedPaymentMethod, type MfaPort, type NewContractLineItemData, type NewMaintenanceWindow, type NewSettingsChange, type NewSubscriberCharge, type NewSubscriberDetails, type NewSubscriptionContractData, OTP_RATE_LIMIT_MAX_SENDS, OTP_RATE_LIMIT_WINDOW_MINUTES, OTP_TTL_MINUTES, OTP_VERIFY_MAX_ATTEMPTS, type OnboardingPromoRedemption, type OnboardingSelectionRequest, type OnboardingSelectionResponse, PASSWORD_RESET_TTL_MINUTES, PAYMENT_ERROR_CODES, PAYMENT_METHOD_TYPES, PENDING_CHECKOUT_TTL_DAYS, PENDING_EMAIL_TTL_HOURS, PENDING_ONBOARDING_TTL_DAYS, PLATFORM_ERROR_CODES, PROMO_ERROR_CODES, type Paginated, type PartyAddress, type PasswordHasher, type PasswordResetCliResult, PaymentCallbackRejectedError, type PaymentErrorCode, type PaymentEventClaim, type PaymentEventLog, type PaymentGateway, type PaymentGatewayCallback, type PaymentGatewayEvent, type PaymentMethodHolder, type PaymentMethodSetupSession, type PaymentMethodSetupSubject, type PaymentMethodType, type PendingRegistration, type PendingRegistrationCreateInput, type PendingRegistrationRepository, type PendingRegistrationSnapshot, type PendingRegistrationUpdateInput, type PersistenceCapabilities, PersistenceCapabilityError, type PersistenceClassRef, type PersistenceInjectionToken, type PersistenceProvider, type PlanCatalog, type PlanCatalogApp, type PlanCatalogImportReport, type PlanCatalogImportSink, type PlanCatalogIssuer, type PlanCatalogIssuerCorrection, type PlanCatalogLookup, type PlanCatalogMarketing, type PlanCatalogNotifications, type PlanCatalogPaymentAccount, type PlanCatalogPayments, type PlanCatalogReadSink, type PlanCatalogReadSnapshot, type PlanCatalogSettings, type PlanCatalogSubscribers, type PlanCatalogTenantBilling, type PlanDef, type PlanId, type PlanListFilter, type PlanRepository, type PlanRow, type PlanVersion, type PlanVersionFields, type PlanVersionMappingFields, type PlanVersionMutationResult, type PlanVersionRecord, type PlanVersionRepository, type PlanVersionRow, type PlatformErrorBody, type PlatformErrorCode, type PlatformRole, type PlatformUserDto, PlatformUserExistsError, type ProjectPageDef, type PromoCode, type PromoCodeDurationType, type PromoCodeFilter, type PromoCodeHoldRecord, type PromoCodeHoldRepository, type PromoCodeHoldTaken, type PromoCodeRecord, type PromoCodeRedemption, type PromoCodeRedemptionListItem, type PromoCodeRedemptionRecord, type PromoCodeRedemptionRepository, type PromoCodeRedemptionStatus, type PromoCodeRepository, type PromoCodeStatsPort, type PromoCodeStatsSnapshot, type PromoCodeStatus, type PromoCodeValidationLog, type PromoCodeValidationLogRepository, type PromoCodeValidationResult, type PromoCodeValueType, type PromoErrorCode, type PromoPreviewInvalidReason, type PromoPreviewRequest, type PromoPreviewResponse, type PromoPreviewValidResponse, type PromoRevenueDeductionAggregator, type PromoSubscriptionLookup, type PromotionBillingCycle, type PromotionI18n, type PromotionI18nFields, type PromotionOnPrice, type PromotionRepository, type PromotionResult, type PromotionRow, type PromotionStatus, type PromotionTargetType, type PromotionType, type PromotionValue, type PublicBootResponse, type PublicComparisonRow, type PublicMarketingBundle, type PublicMarketingCatalogResponse, type PublicMarketingPlan, type PublicMarketingPromo, type PublicNewPaymentMethods, type PublicSignupPlan, type PublishBundleVersionData, type PublishBundleVersionMeta, type PublishPlanVersionData, type QuotaCatalogEntryRow, type QuotaEnforcementMode, type QuotaKey, type QuotaProvider, REGISTRATION_ERROR_CODES, REGISTRATION_RESUME_TTL_MINUTES, REGISTRATION_STEP_BY_STATUS, type ReassignTenantAdminCliResult, type RecommendablePlan, type RecordSubscriberPaymentMethodData, type RecordSubscriberPaymentMethodOutcome, type RecordSubscriberPaymentMethodResult, type RedeemPromoInTransactionCallback, type RegistrationActivation, type RegistrationAuditContext, type RegistrationAuditEvent, type RegistrationAuditEventType, type RegistrationAuditLogger, type RegistrationBillingDetails, type RegistrationConfigSelection, type RegistrationConfiguratorLookup, type RegistrationErrorCode, type RegistrationOtpDelivery, type RegistrationPromoPreview, type RegistrationResumeDelivery, type RegistrationResumeTokenSigner, type RegistrationStatus, type RegistrationStep, type RequiredCapabilities, type ResolvableErrorBody, type ResumeRegistrationInput, type ResumeRegistrationResult, type ReviewCatalogEntryData, type RlsBypassPort, type RunningContractIssuer, type RunningContractIssuers, SETTINGS_ERROR_CODES, SETUP_ERROR_CODES, SUBSCRIBER_ACCOUNT_CAPABILITY, SUBSCRIBER_ERROR_CODES, type SaaSiCatPersistenceAdapter, type SaaSiCatPersistenceAdminResources, type SaaSiCatPersistenceCatalog, type SaaSiCatPersistenceCore, type SaaSiCatPersistenceEntitlement, type SaaSiCatPersistencePayments, type SaaSiCatPersistencePromo, type SaaSiCatPersistenceTenantBilling, type SaveRegistrationConfigInput, type SaveRegistrationConfigResult, type ScheduledPlanChangeInput, type SelectPlanInput, type SelectPlanResult, type SelectableBundleShape, type SelfServiceBlockedPlans, type SetCatalogEntryReviewData, type SettingsChangeFilter, type SettingsChangeRecord, type SettingsDifference, type SettingsErrorCode, type SetupConfirmMfaRequest, type SetupConfirmMfaResponse, type SetupErrorCode, type SetupRequest, type SetupResult, type SetupStatusResponse, type SlugAvailabilityCheck, type StandardPageDef, type StandardPageKey, type StartCheckoutInput, type StartCheckoutResult, type StartPaymentMethodSetupInput, type StartRegistrationInput, type StartRegistrationResult, type StoredBundleStem, type StrictModeWarning, type StrictModeWarningCode, type SubscriberCharge, type SubscriberChargeOrigin, type SubscriberChargeRecord, type SubscriberChargeSource, type SubscriberContact, type SubscriberContactChange, type SubscriberCorrectionData, type SubscriberCorrectionRecord, type SubscriberCorrectionResult, type SubscriberDetails, type SubscriberErrorCode, type SubscriberIdentityCorrection, type SubscriberIdentityDelta, type SubscriberIdentityValues, type SubscriberLedgerRepository, type SubscriberPaymentMethodRecord, type SubscriberPaymentMethodReference, type SubscriberPaymentMethodRepository, type SubscriberPaymentMethodSetupData, type SubscriberPaymentMethodSetupMatch, type SubscriberPaymentMethodStatus, type SubscriberRecord, type SubscriberRepository, type Subscription, type SubscriptionBundleRecord, type SubscriptionBundleRepository, type SubscriptionBundleView, type SubscriptionContractFilter, type SubscriptionContractInvoiceSnapshot, type SubscriptionContractParties, type SubscriptionContractPriceSnapshot, type SubscriptionContractRecord, type SubscriptionContractRepository, type SubscriptionContractStatus, type SubscriptionRecord, type SubscriptionRepository, type SubscriptionStatsPort, type SubscriptionStatsSnapshot, type SubscriptionStatus, type SubscriptionUsagePort, type SubscriptionUsageRecord, type SuperAdminProvisioningPort, type SupersedeSubscriptionContractData, type SyncDiscoveryResult, type TenantActionDef, type TenantColumnDef, type TenantDto, type TenantListFilter, type TenantPort, type TenantSubscriptionWritePort, type TerminateSubscriptionContractData, type TopPromoCode, type TransactionContext, type TransactionRunner, type UpdateBundleData, type UpdateBundleVersionDraftData, type UpdateCatalogEntryBaseData, type UpdateCatalogEntryI18nData, type UpdateCheckoutOfferData, type UpdateMarketingProjectionData, type UpdateMarketingSettingsData, type UpdatePlanData, type UpdatePlanVersionDraftData, type UpdatePromoCodeData, type UpdatePromoCodeRequest, type UpdatePromotionData, type UpsellOffer, type UpsellOfferResolver, type UpsertCapabilityEntryData, type UpsertFeatureCatalogEntryInput, type UpsertFeatureEntryData, type UpsertPlanInput, type UpsertPlanVersionInput, type UpsertQuotaEntryData, type UpsertResult, type UsageSnapshotPort, type UserAccountLookup, type UserListFilter, type UserManagementPort, type UserPort, type VerifyRegistrationOtpResult, type VersionChange, type VersionChangeDirection, type VersionEditability, type VersionEditableReason, type VersionedEntityBase, applyPromo, assertPersistenceCapabilities, buildActivePlanVersionWhere, buildActiveVersionWhere, buildFeatureRequiresIndex, bundleDraftDefaults, bundleStemDefaults, canonicalJson, classifyBundleVersionDiff, classifyIssuerChange, classifyPlanDiff, collectUnsatisfiedRequires, contractPartiesOf, coverageExcludingSelf, definedFields, diffSettings, formatCustomerNumber, formatErrorMessage, identityCorrectionDelta, isBundleRedundant, isForeignPaymentMethodReferenceError, isMaintenanceAnnouncementLapsed, isMaintenanceOverrun, isPaymentCallbackRejectedError, isPlatformUserExistsError, isVersionEditable, issuerIdentityOf, keepOneRecommended, maintenanceRetryAfterSeconds, maintenanceStatusOf, maintenanceWindowStatusOf, maintenanceWindowViewOf, missingRequiresFor, movedIdentityFields, parseZonedInstant, pickActivePromo, planCatalogSettingsOf, previousUtcDay, promoStatus, promotionOnPrice, readQuotaRecord, readQuotaValue, recordedIssuerIdentity, refuseForeignPaymentMethodReference, resolveBundleAvailability, resolveErrorMessage, sameLegalIdentity, selectChargeableBundles, settingsSubtreeOf, startOfUtcDay, subscriberChargeColumns, subscriberFromRegistration, subscriberPaymentMethodColumns, toBundleStemRow, toContractLineItemRecord, toMaintenanceWindowRecord, toPlanRow, toPlanVersionRow, toRunningContractIssuer, toSubscriberChargeRecord, toSubscriberCorrectionRecord, toSubscriberPaymentMethodRecord, toSubscriberRecord, toSubscriptionBundleRecord, toSubscriptionContractRecord };