@saasicat/nest 1.0.0-rc.20 → 1.0.0-rc.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/dist/.build-stamp +1 -1
  2. package/dist/_entries.cjs +3570 -2574
  3. package/dist/admin/index.d.cts +5 -4
  4. package/dist/admin/index.d.ts +5 -4
  5. package/dist/admin/index.js +2 -1
  6. package/dist/{admin-resources.module-aOJ_0rur.d.cts → admin-resources.module-B4XNvdH-.d.cts} +0 -1
  7. package/dist/{admin-resources.module-BENMc0Wh.d.ts → admin-resources.module-CWqdI9BV.d.ts} +0 -1
  8. package/dist/{admin-stats.service-cwLMrkGl.d.ts → admin-stats.service-CsLNt19Z.d.ts} +10 -6
  9. package/dist/{admin-stats.service-BJdzHCtJ.d.cts → admin-stats.service-DrZrU8IJ.d.cts} +10 -6
  10. package/dist/{aggregation-CtIjlWHT.d.ts → aggregation-ChpZDh0g.d.ts} +20 -4
  11. package/dist/{aggregation-BHo7a_In.d.cts → aggregation-OpnhwzF5.d.cts} +20 -4
  12. package/dist/billing/index.d.cts +23 -16
  13. package/dist/billing/index.d.ts +23 -16
  14. package/dist/billing/index.js +20 -15
  15. package/dist/catalog/index.d.cts +17 -8
  16. package/dist/catalog/index.d.ts +17 -8
  17. package/dist/catalog/index.js +5 -3
  18. package/dist/{catalog.module-B5E8tsl7.d.ts → catalog.module-C9O7BxRq.d.ts} +80 -7
  19. package/dist/{catalog.module-DKVvsPsl.d.cts → catalog.module-T-I5Ricz.d.cts} +80 -7
  20. package/dist/checkout-offer/index.d.cts +5 -4
  21. package/dist/checkout-offer/index.d.ts +5 -4
  22. package/dist/checkout-offer/index.js +15 -14
  23. package/dist/{checkout-offer.service-BP4CoZle.d.ts → checkout-offer.service-BeHgYikI.d.ts} +51 -8
  24. package/dist/{checkout-offer.service-Bk5mHEoR.d.cts → checkout-offer.service-CCVxG9b2.d.cts} +51 -8
  25. package/dist/{chunk-AOQJEYOL.js → chunk-3QVGA6JX.js} +3 -1
  26. package/dist/chunk-3RLWML2S.js +896 -0
  27. package/dist/{chunk-DTIYUJH5.js → chunk-4SDSYV4A.js} +16 -6
  28. package/dist/{chunk-X4PDUYBX.js → chunk-55QEDAMX.js} +106 -302
  29. package/dist/chunk-6PJE7EWO.js +185 -0
  30. package/dist/{chunk-CRCNY3U6.js → chunk-7NJKVC5X.js} +54 -14
  31. package/dist/{chunk-RSAPMUGB.js → chunk-AOS2JPDD.js} +67 -64
  32. package/dist/{chunk-NCXGXNQK.js → chunk-CQ2ZZMTD.js} +174 -72
  33. package/dist/{chunk-NEICZJE4.js → chunk-F5X66HF5.js} +1 -1
  34. package/dist/{chunk-323FB6TD.js → chunk-FEQZCWUL.js} +67 -19
  35. package/dist/{chunk-FQS5FPH2.js → chunk-G6EZWECL.js} +42 -21
  36. package/dist/{chunk-XDRJ4FRG.js → chunk-JBCC6C3M.js} +84 -20
  37. package/dist/chunk-LF6J4YYN.js +301 -0
  38. package/dist/{chunk-OAUN2FPJ.js → chunk-LLYVYRGJ.js} +50 -21
  39. package/dist/{chunk-6ISJMNW7.js → chunk-M47BNEY2.js} +125 -108
  40. package/dist/{chunk-U465NU23.js → chunk-NDLC5GYK.js} +40 -33
  41. package/dist/{chunk-YFCTBLM5.js → chunk-QPVDCKYS.js} +237 -60
  42. package/dist/{chunk-IORLRWJZ.js → chunk-R5YCJBHY.js} +2 -2
  43. package/dist/{chunk-QBF7KLSA.js → chunk-TBBZWZQT.js} +8 -6
  44. package/dist/chunk-TOEFN7DN.js +295 -0
  45. package/dist/{chunk-ZUOCCEWB.js → chunk-WHJSYKNC.js} +2 -2
  46. package/dist/chunk-WOEJ6K7M.js +55 -0
  47. package/dist/{chunk-WYXLTSUZ.js → chunk-XSSWYPP5.js} +6 -4
  48. package/dist/contract-line-item-money-B0Z3Ogur.d.cts +43 -0
  49. package/dist/contract-line-item-money-B0Z3Ogur.d.ts +43 -0
  50. package/dist/{enforce-quota.interceptor-CLyCNVIm.d.cts → enforce-quota.interceptor-BFyVdWe8.d.cts} +6 -6
  51. package/dist/{enforce-quota.interceptor-DQ_BN_jV.d.ts → enforce-quota.interceptor-GaBXboGx.d.ts} +6 -6
  52. package/dist/entitlement/index.d.cts +2 -1
  53. package/dist/entitlement/index.d.ts +2 -1
  54. package/dist/entitlement/index.js +6 -7
  55. package/dist/index.d.cts +27 -26
  56. package/dist/index.d.ts +27 -26
  57. package/dist/index.js +47 -33
  58. package/dist/{issuer-identity.check-B8Wzugbf.d.cts → issuer-identity.check-CBO0vcsq.d.cts} +5 -5
  59. package/dist/{issuer-identity.check-q-Uha5XY.d.ts → issuer-identity.check-Cz9CEMkZ.d.ts} +5 -5
  60. package/dist/{module-options-C5EBOxzm.d.ts → module-options-DmQ3G4sZ.d.ts} +17 -7
  61. package/dist/{module-options-Cr5FkELF.d.cts → module-options-qAOwinHR.d.cts} +17 -7
  62. package/dist/{payment-callback.service-DPUfjp-F.d.cts → payment-callback.service-CR84Xw1Z.d.cts} +31 -3
  63. package/dist/{payment-callback.service-DPUfjp-F.d.ts → payment-callback.service-CR84Xw1Z.d.ts} +31 -3
  64. package/dist/payments/index.d.cts +59 -5
  65. package/dist/payments/index.d.ts +59 -5
  66. package/dist/payments/index.js +11 -5
  67. package/dist/{payments.module-Da26YttL.d.cts → payments.module-BdUq9ot_.d.cts} +5 -2
  68. package/dist/{payments.module-C6r6dJdn.d.ts → payments.module-CQGv_VG7.d.ts} +5 -2
  69. package/dist/plan-catalog-source-DWe-BGY1.d.cts +21 -0
  70. package/dist/plan-catalog-source-DWe-BGY1.d.ts +21 -0
  71. package/dist/{plan-versions.service-BTlw-aEX.d.ts → plan-versions.service-C0N-Em2W.d.ts} +2 -48
  72. package/dist/{plan-versions.service-BM7lKLr1.d.cts → plan-versions.service-DARLh-qI.d.cts} +2 -48
  73. package/dist/platform/index.d.cts +20 -19
  74. package/dist/platform/index.d.ts +20 -19
  75. package/dist/platform/index.js +22 -21
  76. package/dist/promo/index.d.cts +9 -6
  77. package/dist/promo/index.d.ts +9 -6
  78. package/dist/promo/index.js +7 -6
  79. package/dist/{promo.module-YfF6ADDf.d.cts → promo.module-CKkECmU8.d.cts} +8 -2
  80. package/dist/{promo.module-KmIpp1Gb.d.ts → promo.module-DuIJdK3U.d.ts} +8 -2
  81. package/dist/promo.service-BYBu6dy3.d.cts +215 -0
  82. package/dist/promo.service-CFjfF0Xm.d.ts +215 -0
  83. package/dist/registration/index.d.cts +29 -4
  84. package/dist/registration/index.d.ts +29 -4
  85. package/dist/registration/index.js +12 -5
  86. package/dist/subscriber/index.d.cts +2 -2
  87. package/dist/subscriber/index.d.ts +2 -2
  88. package/dist/subscriber/index.js +5 -4
  89. package/dist/{subscriber.service-BZsvHw1V.d.cts → subscriber.service-5W6Gi-1B.d.cts} +14 -3
  90. package/dist/{subscriber.service-BZsvHw1V.d.ts → subscriber.service-5W6Gi-1B.d.ts} +14 -3
  91. package/dist/subscription-contract/index.d.cts +3 -3
  92. package/dist/subscription-contract/index.d.ts +3 -3
  93. package/dist/subscription-contract/index.js +11 -9
  94. package/dist/{subscription-contract.service-Duv_Ns1W.d.ts → subscription-contract.service-CPZrTM9C.d.ts} +1 -1
  95. package/dist/{subscription-contract.service-D7Qb_Ns-.d.cts → subscription-contract.service-CfNApLuP.d.cts} +1 -1
  96. package/dist/{tenant-billing.controller-0HZ_2DQH.d.ts → tenant-billing.controller-BLqbsONe.d.ts} +7 -6
  97. package/dist/{tenant-billing.controller-CN9DgasV.d.cts → tenant-billing.controller-DKbAqTbM.d.cts} +7 -6
  98. package/dist/{tenant-billing.module-CPybDf7c.d.cts → tenant-billing.module-ClbjzocC.d.cts} +24 -16
  99. package/dist/{tenant-billing.module-C1sLBCW-.d.ts → tenant-billing.module-DohgJJ2m.d.ts} +24 -16
  100. package/dist/testing/index.d.cts +11 -10
  101. package/dist/testing/index.d.ts +11 -10
  102. package/dist/testing/index.js +20 -20
  103. package/package.json +3 -3
  104. package/dist/chunk-3HT3REXB.js +0 -110
  105. package/dist/chunk-5BCYJ3QY.js +0 -44
  106. package/dist/chunk-QSBMFY4I.js +0 -33
  107. package/dist/chunk-U4X2YRRO.js +0 -214
  108. package/dist/chunk-XWAZNKAB.js +0 -638
  109. package/dist/contract-line-item-money-BWWQhRul.d.cts +0 -11
  110. package/dist/contract-line-item-money-BWWQhRul.d.ts +0 -11
  111. package/dist/promo.service-CBMm9RU7.d.cts +0 -113
  112. package/dist/promo.service-CBMm9RU7.d.ts +0 -113
@@ -1,13 +1,14 @@
1
- import { f as AdminStatsService, g as AdminStatsSnapshot } from '../admin-stats.service-BJdzHCtJ.cjs';
2
- export { A as AdminBypassRlsInterceptor, a as AdminManifestModule, b as AdminManifestModuleOptions, c as AdminManifestService, d as AdminModule, e as AdminModuleOptions, h as MfaGuard, M as MfaService, P as PLATFORM_CORE_CONTRIBUTION_TOKEN, R as REQUIRE_MFA_KEY, i as RequireMfa, S as SuperAdminGuard, T as TotpSetupResult, V as VerifyTotpInput } from '../admin-stats.service-BJdzHCtJ.cjs';
1
+ import { f as AdminStatsService, g as AdminStatsSnapshot } from '../admin-stats.service-DrZrU8IJ.cjs';
2
+ export { A as AdminBypassRlsInterceptor, a as AdminManifestModule, b as AdminManifestModuleOptions, c as AdminManifestService, d as AdminModule, e as AdminModuleOptions, h as MfaGuard, M as MfaService, P as PLATFORM_CORE_CONTRIBUTION_TOKEN, R as REQUIRE_MFA_KEY, i as RequireMfa, S as SuperAdminGuard, T as TotpSetupResult, V as VerifyTotpInput } from '../admin-stats.service-DrZrU8IJ.cjs';
3
3
  export { A as AdminAuditService } from '../admin-audit.service-4P3Djdxk.cjs';
4
- import { b as AdminManifestConfig } from '../admin-resources.module-aOJ_0rur.cjs';
5
- export { c as ADMIN_MANIFEST_CONFIG, d as ADMIN_RESOURCES_PORT_TOKEN, e as AdminResourcesModule, A as AdminResourcesModuleOptions, f as AdminResourcesService, g as AdminStatsModule, a as AdminStatsModuleOptions, S as SuspendTenantDto } from '../admin-resources.module-aOJ_0rur.cjs';
4
+ import { b as AdminManifestConfig } from '../admin-resources.module-B4XNvdH-.cjs';
5
+ export { c as ADMIN_MANIFEST_CONFIG, d as ADMIN_RESOURCES_PORT_TOKEN, e as AdminResourcesModule, A as AdminResourcesModuleOptions, f as AdminResourcesService, g as AdminStatsModule, a as AdminStatsModuleOptions, S as SuspendTenantDto } from '../admin-resources.module-B4XNvdH-.cjs';
6
6
  import { PublicBootResponse, ManifestContribution } from '@saasicat/core';
7
7
  import { Type, CanActivate } from '@nestjs/common';
8
8
  import '@nestjs/core';
9
9
  import 'rxjs';
10
10
  import '../di-CcNeq9v-.cjs';
11
+ import '../plan-catalog-source-DWe-BGY1.cjs';
11
12
 
12
13
  declare const MFA_PORT_TOKEN: unique symbol;
13
14
  declare const AUDIT_PORT_TOKEN: unique symbol;
@@ -1,13 +1,14 @@
1
- import { f as AdminStatsService, g as AdminStatsSnapshot } from '../admin-stats.service-cwLMrkGl.js';
2
- export { A as AdminBypassRlsInterceptor, a as AdminManifestModule, b as AdminManifestModuleOptions, c as AdminManifestService, d as AdminModule, e as AdminModuleOptions, h as MfaGuard, M as MfaService, P as PLATFORM_CORE_CONTRIBUTION_TOKEN, R as REQUIRE_MFA_KEY, i as RequireMfa, S as SuperAdminGuard, T as TotpSetupResult, V as VerifyTotpInput } from '../admin-stats.service-cwLMrkGl.js';
1
+ import { f as AdminStatsService, g as AdminStatsSnapshot } from '../admin-stats.service-CsLNt19Z.js';
2
+ export { A as AdminBypassRlsInterceptor, a as AdminManifestModule, b as AdminManifestModuleOptions, c as AdminManifestService, d as AdminModule, e as AdminModuleOptions, h as MfaGuard, M as MfaService, P as PLATFORM_CORE_CONTRIBUTION_TOKEN, R as REQUIRE_MFA_KEY, i as RequireMfa, S as SuperAdminGuard, T as TotpSetupResult, V as VerifyTotpInput } from '../admin-stats.service-CsLNt19Z.js';
3
3
  export { A as AdminAuditService } from '../admin-audit.service-4P3Djdxk.js';
4
- import { b as AdminManifestConfig } from '../admin-resources.module-BENMc0Wh.js';
5
- export { c as ADMIN_MANIFEST_CONFIG, d as ADMIN_RESOURCES_PORT_TOKEN, e as AdminResourcesModule, A as AdminResourcesModuleOptions, f as AdminResourcesService, g as AdminStatsModule, a as AdminStatsModuleOptions, S as SuspendTenantDto } from '../admin-resources.module-BENMc0Wh.js';
4
+ import { b as AdminManifestConfig } from '../admin-resources.module-CWqdI9BV.js';
5
+ export { c as ADMIN_MANIFEST_CONFIG, d as ADMIN_RESOURCES_PORT_TOKEN, e as AdminResourcesModule, A as AdminResourcesModuleOptions, f as AdminResourcesService, g as AdminStatsModule, a as AdminStatsModuleOptions, S as SuspendTenantDto } from '../admin-resources.module-CWqdI9BV.js';
6
6
  import { PublicBootResponse, ManifestContribution } from '@saasicat/core';
7
7
  import { Type, CanActivate } from '@nestjs/common';
8
8
  import '@nestjs/core';
9
9
  import 'rxjs';
10
10
  import '../di-CcNeq9v-.js';
11
+ import '../plan-catalog-source-DWe-BGY1.js';
11
12
 
12
13
  declare const MFA_PORT_TOKEN: unique symbol;
13
14
  declare const AUDIT_PORT_TOKEN: unique symbol;
@@ -21,7 +21,7 @@ import {
21
21
  SuperAdminGuard,
22
22
  SuspendTenantDto,
23
23
  buildAdminStatsController
24
- } from "../chunk-OAUN2FPJ.js";
24
+ } from "../chunk-LLYVYRGJ.js";
25
25
  import {
26
26
  MfaGuard,
27
27
  MfaService,
@@ -37,6 +37,7 @@ import {
37
37
  RLS_BYPASS_PORT_TOKEN
38
38
  } from "../chunk-SZ7RFPXA.js";
39
39
  import "../chunk-YSC46BGM.js";
40
+ import "../chunk-FEQZCWUL.js";
40
41
  import "../chunk-J7NJRK3K.js";
41
42
  import "../chunk-SHUYVCID.js";
42
43
  export {
@@ -7,7 +7,6 @@ declare const ADMIN_MANIFEST_CONFIG: unique symbol;
7
7
  interface AdminManifestConfig {
8
8
  project: AdminManifest['project'];
9
9
  build: Omit<AdminManifest['build'], 'manifestHash'>;
10
- planCatalogSnapshot: AdminManifest['planCatalogSnapshot'];
11
10
  }
12
11
 
13
12
  interface AdminStatsModuleOptions {
@@ -7,7 +7,6 @@ declare const ADMIN_MANIFEST_CONFIG: unique symbol;
7
7
  interface AdminManifestConfig {
8
8
  project: AdminManifest['project'];
9
9
  build: Omit<AdminManifest['build'], 'manifestHash'>;
10
- planCatalogSnapshot: AdminManifest['planCatalogSnapshot'];
11
10
  }
12
11
 
13
12
  interface AdminStatsModuleOptions {
@@ -3,7 +3,8 @@ import { Reflector } from '@nestjs/core';
3
3
  import { MfaPort, RlsBypassPort, AuditPort, ManifestContribution, AdminManifest, SubscriptionStatsPort, PromoCodeStatsPort, AuditStatsPort, SubscriptionStatsSnapshot, PromoCodeStatsSnapshot, AuditStatsSnapshot } from '@saasicat/core';
4
4
  import { Observable } from 'rxjs';
5
5
  import { P as ProviderSpec } from './di-CcNeq9v-.js';
6
- import { b as AdminManifestConfig } from './admin-resources.module-BENMc0Wh.js';
6
+ import { P as PlanCatalogSource } from './plan-catalog-source-DWe-BGY1.js';
7
+ import { b as AdminManifestConfig } from './admin-resources.module-CWqdI9BV.js';
7
8
 
8
9
  declare class SuperAdminGuard implements CanActivate {
9
10
  canActivate(context: ExecutionContext): boolean;
@@ -87,13 +88,16 @@ declare class AdminModule {
87
88
  declare const PLATFORM_CORE_CONTRIBUTION_TOKEN: unique symbol;
88
89
  declare class AdminManifestService {
89
90
  private readonly config;
91
+ private readonly planCatalogs;
90
92
  private readonly logger;
91
93
  private readonly contributions;
92
- private cached;
93
- constructor(config: AdminManifestConfig, platformCore?: ManifestContribution | null);
94
+ private merged;
95
+ private lastHash;
96
+ constructor(config: AdminManifestConfig, planCatalogs: PlanCatalogSource, platformCore?: ManifestContribution | null);
94
97
  register(contribution: ManifestContribution): void;
95
- getManifest(): AdminManifest;
96
- rebuild(): AdminManifest;
98
+ getManifest(): Promise<AdminManifest>;
99
+ /** Merges the contributions again, then serves the manifest as `getManifest` does. */
100
+ rebuild(): Promise<AdminManifest>;
97
101
  private build;
98
102
  private mergeContributions;
99
103
  /**
@@ -108,7 +112,7 @@ declare class AdminManifestService {
108
112
 
109
113
  type ConfigSpec = AdminManifestConfig | Pick<FactoryProvider<AdminManifestConfig>, 'useFactory' | 'inject'>;
110
114
  interface AdminManifestModuleOptions {
111
- /** AdminManifestConfig as a value or via a factory (e.g. with a PLAN_CATALOG_TOKEN inject). */
115
+ /** AdminManifestConfig as a value or via a factory (e.g. with a PLAN_CATALOG_SETTINGS_TOKEN inject). */
112
116
  config: ConfigSpec;
113
117
  /**
114
118
  * Default `true`. Set to `false` when the consumer registers its own
@@ -3,7 +3,8 @@ import { Reflector } from '@nestjs/core';
3
3
  import { MfaPort, RlsBypassPort, AuditPort, ManifestContribution, AdminManifest, SubscriptionStatsPort, PromoCodeStatsPort, AuditStatsPort, SubscriptionStatsSnapshot, PromoCodeStatsSnapshot, AuditStatsSnapshot } from '@saasicat/core';
4
4
  import { Observable } from 'rxjs';
5
5
  import { P as ProviderSpec } from './di-CcNeq9v-.cjs';
6
- import { b as AdminManifestConfig } from './admin-resources.module-aOJ_0rur.cjs';
6
+ import { P as PlanCatalogSource } from './plan-catalog-source-DWe-BGY1.cjs';
7
+ import { b as AdminManifestConfig } from './admin-resources.module-B4XNvdH-.cjs';
7
8
 
8
9
  declare class SuperAdminGuard implements CanActivate {
9
10
  canActivate(context: ExecutionContext): boolean;
@@ -87,13 +88,16 @@ declare class AdminModule {
87
88
  declare const PLATFORM_CORE_CONTRIBUTION_TOKEN: unique symbol;
88
89
  declare class AdminManifestService {
89
90
  private readonly config;
91
+ private readonly planCatalogs;
90
92
  private readonly logger;
91
93
  private readonly contributions;
92
- private cached;
93
- constructor(config: AdminManifestConfig, platformCore?: ManifestContribution | null);
94
+ private merged;
95
+ private lastHash;
96
+ constructor(config: AdminManifestConfig, planCatalogs: PlanCatalogSource, platformCore?: ManifestContribution | null);
94
97
  register(contribution: ManifestContribution): void;
95
- getManifest(): AdminManifest;
96
- rebuild(): AdminManifest;
98
+ getManifest(): Promise<AdminManifest>;
99
+ /** Merges the contributions again, then serves the manifest as `getManifest` does. */
100
+ rebuild(): Promise<AdminManifest>;
97
101
  private build;
98
102
  private mergeContributions;
99
103
  /**
@@ -108,7 +112,7 @@ declare class AdminManifestService {
108
112
 
109
113
  type ConfigSpec = AdminManifestConfig | Pick<FactoryProvider<AdminManifestConfig>, 'useFactory' | 'inject'>;
110
114
  interface AdminManifestModuleOptions {
111
- /** AdminManifestConfig as a value or via a factory (e.g. with a PLAN_CATALOG_TOKEN inject). */
115
+ /** AdminManifestConfig as a value or via a factory (e.g. with a PLAN_CATALOG_SETTINGS_TOKEN inject). */
112
116
  config: ConfigSpec;
113
117
  /**
114
118
  * Default `true`. Set to `false` when the consumer registers its own
@@ -1,4 +1,5 @@
1
- import { PlanId, QuotaKey, FeatureKey, PlanCatalog, SubscriptionRepository, PlanVersionRepository, TransactionRunner, SubscriptionBundleRepository, BundleRepository, SubscriptionContractRepository, DiscoverySnapshot, SubscriptionRecord, TransactionContext, ContractLineItemRecord, SubscriptionContractRecord } from '@saasicat/core';
1
+ import { PlanId, QuotaKey, FeatureKey, SubscriptionRepository, PlanVersionRepository, TransactionRunner, SubscriptionBundleRepository, BundleRepository, SubscriptionContractRepository, DiscoverySnapshot, PlanCatalog, SubscriptionRecord, TransactionContext, ContractLineItemRecord, SubscriptionContractRecord } from '@saasicat/core';
2
+ import { P as PlanCatalogSource } from './plan-catalog-source-DWe-BGY1.js';
2
3
  import { E as EntitlementResolutionConfig } from './plan-resolution-CwUy_OqC.js';
3
4
 
4
5
  /**
@@ -113,7 +114,7 @@ interface EnforceLimitInput<T> {
113
114
  now?: Date;
114
115
  }
115
116
  declare class EntitlementService {
116
- private readonly catalog;
117
+ private readonly catalogs;
117
118
  private readonly subscriptions;
118
119
  private readonly planVersions;
119
120
  private readonly tx;
@@ -124,8 +125,16 @@ declare class EntitlementService {
124
125
  private readonly discoverySnapshot;
125
126
  private readonly cache;
126
127
  private replacedByIndex;
127
- constructor(catalog: PlanCatalog, subscriptions: SubscriptionRepository, planVersions: PlanVersionRepository, tx: TransactionRunner, resolutionConfig?: EntitlementResolutionConfig | null, subscriptionBundles?: SubscriptionBundleRepository | null, bundles?: BundleRepository | null, subscriptionContracts?: SubscriptionContractRepository | null, discoverySnapshot?: DiscoverySnapshot | null);
128
- computeLimits(tenantId: string, now?: Date): Promise<EffectiveLimits>;
128
+ constructor(catalogs: PlanCatalogSource, subscriptions: SubscriptionRepository, planVersions: PlanVersionRepository, tx: TransactionRunner, resolutionConfig?: EntitlementResolutionConfig | null, subscriptionBundles?: SubscriptionBundleRepository | null, bundles?: BundleRepository | null, subscriptionContracts?: SubscriptionContractRepository | null, discoverySnapshot?: DiscoverySnapshot | null);
129
+ /**
130
+ * The tenant's effective limits, answered from the cache for up to
131
+ * `CACHE_TTL_MS`. A caller that has already read the catalogue for its own
132
+ * operation passes it as `catalog`: the answer is then computed against
133
+ * that reading and kept out of the cache in both directions — not taken
134
+ * from it, and not written to it, since a reading the caller holds may be
135
+ * older than the one everybody else should be answered from.
136
+ */
137
+ computeLimits(tenantId: string, now?: Date, catalog?: PlanCatalog): Promise<EffectiveLimits>;
129
138
  /**
130
139
  * Clears a tenant's cache entry. MUST be called as soon as a mutation
131
140
  * changes the subscription, a bundle booking, or a PlanVersion binding —
@@ -140,6 +149,13 @@ declare class EntitlementService {
140
149
  * have a `SubscriptionRecord` (e.g. within a transaction).
141
150
  */
142
151
  deriveLimits(sub: SubscriptionRecord, now: Date, tx?: TransactionContext): Promise<EffectiveLimits>;
152
+ /**
153
+ * `deriveLimits` against a catalogue already read. The catalogue decides
154
+ * which features are `plannedOnly`, and it is read outside any transaction
155
+ * a caller holds, so that checking a limit does not wait for a second
156
+ * connection while the subscription row is locked.
157
+ */
158
+ private limitsFor;
143
159
  /**
144
160
  * The last thing every path does, so that no path can skip it.
145
161
  *
@@ -1,4 +1,5 @@
1
- import { PlanId, QuotaKey, FeatureKey, PlanCatalog, SubscriptionRepository, PlanVersionRepository, TransactionRunner, SubscriptionBundleRepository, BundleRepository, SubscriptionContractRepository, DiscoverySnapshot, SubscriptionRecord, TransactionContext, ContractLineItemRecord, SubscriptionContractRecord } from '@saasicat/core';
1
+ import { PlanId, QuotaKey, FeatureKey, SubscriptionRepository, PlanVersionRepository, TransactionRunner, SubscriptionBundleRepository, BundleRepository, SubscriptionContractRepository, DiscoverySnapshot, PlanCatalog, SubscriptionRecord, TransactionContext, ContractLineItemRecord, SubscriptionContractRecord } from '@saasicat/core';
2
+ import { P as PlanCatalogSource } from './plan-catalog-source-DWe-BGY1.cjs';
2
3
  import { E as EntitlementResolutionConfig } from './plan-resolution-CwUy_OqC.cjs';
3
4
 
4
5
  /**
@@ -113,7 +114,7 @@ interface EnforceLimitInput<T> {
113
114
  now?: Date;
114
115
  }
115
116
  declare class EntitlementService {
116
- private readonly catalog;
117
+ private readonly catalogs;
117
118
  private readonly subscriptions;
118
119
  private readonly planVersions;
119
120
  private readonly tx;
@@ -124,8 +125,16 @@ declare class EntitlementService {
124
125
  private readonly discoverySnapshot;
125
126
  private readonly cache;
126
127
  private replacedByIndex;
127
- constructor(catalog: PlanCatalog, subscriptions: SubscriptionRepository, planVersions: PlanVersionRepository, tx: TransactionRunner, resolutionConfig?: EntitlementResolutionConfig | null, subscriptionBundles?: SubscriptionBundleRepository | null, bundles?: BundleRepository | null, subscriptionContracts?: SubscriptionContractRepository | null, discoverySnapshot?: DiscoverySnapshot | null);
128
- computeLimits(tenantId: string, now?: Date): Promise<EffectiveLimits>;
128
+ constructor(catalogs: PlanCatalogSource, subscriptions: SubscriptionRepository, planVersions: PlanVersionRepository, tx: TransactionRunner, resolutionConfig?: EntitlementResolutionConfig | null, subscriptionBundles?: SubscriptionBundleRepository | null, bundles?: BundleRepository | null, subscriptionContracts?: SubscriptionContractRepository | null, discoverySnapshot?: DiscoverySnapshot | null);
129
+ /**
130
+ * The tenant's effective limits, answered from the cache for up to
131
+ * `CACHE_TTL_MS`. A caller that has already read the catalogue for its own
132
+ * operation passes it as `catalog`: the answer is then computed against
133
+ * that reading and kept out of the cache in both directions — not taken
134
+ * from it, and not written to it, since a reading the caller holds may be
135
+ * older than the one everybody else should be answered from.
136
+ */
137
+ computeLimits(tenantId: string, now?: Date, catalog?: PlanCatalog): Promise<EffectiveLimits>;
129
138
  /**
130
139
  * Clears a tenant's cache entry. MUST be called as soon as a mutation
131
140
  * changes the subscription, a bundle booking, or a PlanVersion binding —
@@ -140,6 +149,13 @@ declare class EntitlementService {
140
149
  * have a `SubscriptionRecord` (e.g. within a transaction).
141
150
  */
142
151
  deriveLimits(sub: SubscriptionRecord, now: Date, tx?: TransactionContext): Promise<EffectiveLimits>;
152
+ /**
153
+ * `deriveLimits` against a catalogue already read. The catalogue decides
154
+ * which features are `plannedOnly`, and it is read outside any transaction
155
+ * a caller holds, so that checking a limit does not wait for a second
156
+ * connection while the subscription row is locked.
157
+ */
158
+ private limitsFor;
143
159
  /**
144
160
  * The last thing every path does, so that no path can skip it.
145
161
  *
@@ -1,22 +1,24 @@
1
- import { BillingCycle, BundleVersionRow, FeatureKey, UpsellOfferResolver, BundleRepository, CatalogEntryRepository, UpsellOffer, PlanCatalogSettings, PlanCatalogReadSink, PlanCatalog, PlanCatalogReadSnapshot, PlanCatalogImportSink, PlanCatalogImportReport, PlanId, PlanDef, QuotaKey, MarketingTopFeature, FeatureUiRegistry, MarketingProjectionRepository, ConfiguratorSourcesLookup, ConfiguratorMarketingProvider, ConfiguratorCatalog } from '@saasicat/core';
1
+ import { BillingCycle, BundleVersionRow, FeatureKey, UpsellOfferResolver, BundleRepository, CatalogEntryRepository, UpsellOffer, PlanCatalogSettings, PlanCatalogReadSink, PlanCatalog, PlanCatalogReadSnapshot, PlanCatalogImportSink, PlanCatalogImportReport, PlanId, PlanDef, QuotaKey, MarketingTopFeature, FeatureUiRegistry, MarketingProjectionRepository, TenantSubscriptionWritePort, ConfiguratorSourcesLookup, ConfiguratorMarketingProvider, ConfiguratorCatalog } from '@saasicat/core';
2
2
  export { BundleVersionFields, CancellationNoticePeriods, ChangeDirection, DiffResult, PlanVersionFields, SelfServiceBlockedPlans, VersionChange, VersionChangeDirection, classifyBundleVersionDiff, classifyPlanDiff } from '@saasicat/core';
3
- export { A as AddBundleToSubscriptionInput, B as BundlePreviewSnapshot, C as CancelBundleFromSubscriptionInput, a as CancelSubscriptionDto, b as CancellableSubscription, c as CancellationDecision, d as CancellationInput, e as ChangePlanDto, f as CompleteOnboardingSubscriptionDto, g as ComposedTenantAuthGuard, h as CycleDirection, L as LimitsCheckRow, N as NO_NOTICE_PERIOD, P as PendingPlanMaterializationService, i as PlanChangeContext, j as PlanChangePreviewDto, k as PlanChangePreviewIssue, l as PlanChangePreviewService, m as PlanChangeType, n as PlanDirection, o as PlanSnapshotDto, p as PreviewPlanChangeDto, q as ProrationDto, r as ProrationInput, R as RedundantFeatureHint, S as SubscriptionBundleAddPreviewDto, s as SubscriptionBundleCancelPreviewDto, t as SubscriptionBundleConfig, u as SubscriptionBundlePreviewContext, v as SubscriptionBundlePreviewIssue, w as SubscriptionBundlePreviewService, x as SubscriptionBundlesService, T as TenantAdminGuard, y as TenantBillingController, U as UsageResponse, z as addMonths, D as clampToParent, E as computeProration, F as decideCancellation, G as decideCancellationFor, H as noticeDaysFor, I as resolveBundleCancelEffectiveAt } from '../tenant-billing.controller-CN9DgasV.cjs';
4
- import { F as FEATURE_GUARD_MARKER, d as ContractFreezePort, e as ContractFreezeSourcePort } from '../tenant-billing.module-CPybDf7c.cjs';
5
- export { A as AjvErrorLike, C as CONTRACT_FREEZE_PORT_TOKEN, b as CONTRACT_FREEZE_SOURCE_PORT_TOKEN, c as ContractFreezeBundleSnapshot, E as EnvironmentVariables, f as LoadPlanCatalogFromStringOptions, L as LoadPlanCatalogOptions, M as MarkedFeatureGuard, P as PLAN_CATALOG_UNREADABLE_ERROR, g as PlanCatalogValidationError, h as SELF_SERVICE_BLOCKED_BUNDLES_TOKEN, i as SELF_SERVICE_BLOCKED_PLANS_TOKEN, j as SelfServiceBlockedBundles, a as SubscriptionBundleControllerOptions, k as SubscriptionBundleModule, S as SubscriptionBundleModuleOptions, l as TenantBillingModule, T as TenantBillingModuleOptions, m as catalogSource, n as isPlatformFeatureGuard, o as loadPlanCatalogFromFile, p as loadPlanCatalogFromString } from '../tenant-billing.module-CPybDf7c.cjs';
3
+ export { A as AddBundleToSubscriptionInput, B as BundlePreviewSnapshot, C as CancelBundleFromSubscriptionInput, a as CancelSubscriptionDto, b as CancellableSubscription, c as CancellationDecision, d as CancellationInput, e as ChangePlanDto, f as CompleteOnboardingSubscriptionDto, g as ComposedTenantAuthGuard, h as CycleDirection, L as LimitsCheckRow, N as NO_NOTICE_PERIOD, P as PendingPlanMaterializationService, i as PlanChangeContext, j as PlanChangePreviewDto, k as PlanChangePreviewIssue, l as PlanChangePreviewService, m as PlanChangeType, n as PlanDirection, o as PlanSnapshotDto, p as PreviewPlanChangeDto, q as ProrationDto, r as ProrationInput, R as RedundantFeatureHint, S as SubscriptionBundleAddPreviewDto, s as SubscriptionBundleCancelPreviewDto, t as SubscriptionBundleConfig, u as SubscriptionBundlePreviewContext, v as SubscriptionBundlePreviewIssue, w as SubscriptionBundlePreviewService, x as SubscriptionBundlesService, T as TenantAdminGuard, y as TenantBillingController, U as UsageResponse, z as addMonths, D as clampToParent, E as computeProration, F as decideCancellation, G as decideCancellationFor, H as noticeDaysFor, I as resolveBundleCancelEffectiveAt } from '../tenant-billing.controller-DKbAqTbM.cjs';
4
+ import { F as FEATURE_GUARD_MARKER, d as ContractFreezePort, e as ContractFreezeSourcePort } from '../tenant-billing.module-ClbjzocC.cjs';
5
+ export { A as AjvErrorLike, C as CONTRACT_FREEZE_PORT_TOKEN, b as CONTRACT_FREEZE_SOURCE_PORT_TOKEN, c as ContractFreezeBundleSnapshot, E as EnvironmentVariables, f as LoadPlanCatalogFromStringOptions, L as LoadPlanCatalogOptions, M as MarkedFeatureGuard, P as PLAN_CATALOG_UNREADABLE_ERROR, g as PlanCatalogValidationError, h as SELF_SERVICE_BLOCKED_BUNDLES_TOKEN, i as SELF_SERVICE_BLOCKED_PLANS_TOKEN, j as SelfServiceBlockedBundles, a as SubscriptionBundleControllerOptions, k as SubscriptionBundleModule, S as SubscriptionBundleModuleOptions, l as TenantBillingModule, T as TenantBillingModuleOptions, m as catalogSource, n as isPlatformFeatureGuard, o as loadPlanCatalogFromFile, p as loadPlanCatalogFromString } from '../tenant-billing.module-ClbjzocC.cjs';
6
6
  import * as _nestjs_common from '@nestjs/common';
7
7
  import { CanActivate, ExecutionContext, ArgumentsHost, Type, DynamicModule, ForwardReference, Provider } from '@nestjs/common';
8
8
  export { Type as NestType } from '@nestjs/common';
9
9
  import { Reflector, BaseExceptionFilter } from '@nestjs/core';
10
- import { c as EntitlementService } from '../aggregation-BHo7a_In.cjs';
10
+ import { c as EntitlementService } from '../aggregation-OpnhwzF5.cjs';
11
11
  import { P as ProviderSpec } from '../di-CcNeq9v-.cjs';
12
+ import { P as PlanCatalogSource } from '../plan-catalog-source-DWe-BGY1.cjs';
13
+ export { a as PlanCatalogOrigin, g as givenPlanCatalogSource } from '../plan-catalog-source-DWe-BGY1.cjs';
12
14
  import { d as AuthGuardList } from '../tenant-billing.tokens-G-1xOlMr.cjs';
13
15
  export { c as AUDIT_CONTEXT_RESOLVER_TOKEN, A as AuditContextResolver, B as BILLING_PERMISSION_GUARDS_TOKEN, C as CANCELLATION_NOTICE_DAYS_TOKEN, D as DuePendingPlanChange, e as PENDING_PLAN_QUERY_PORT_TOKEN, P as PendingPlanQueryPort, S as SUBSCRIPTION_USAGE_PORT_TOKEN, f as SUBSCRIPTION_WRITE_PORT_TOKEN, g as TENANT_AUTH_GUARDS_TOKEN, h as TENANT_ID_RESOLVER_TOKEN, i as TRIAL_PROJECTION_PORT_TOKEN, T as TenantIdResolver, j as TrialProjectionInput, a as TrialProjectionPort, k as USAGE_SNAPSHOT_PORT_TOKEN, l as USER_EMAIL_RESOLVER_TOKEN, m as USER_ID_RESOLVER_TOKEN, U as UserEmailResolver, b as UserIdResolver } from '../tenant-billing.tokens-G-1xOlMr.cjs';
14
- import { S as SubscriptionContractService } from '../subscription-contract.service-D7Qb_Ns-.cjs';
15
- import '../promo.service-CBMm9RU7.cjs';
16
+ import { S as SubscriptionContractService } from '../subscription-contract.service-CfNApLuP.cjs';
17
+ import '../promo.service-BYBu6dy3.cjs';
16
18
  import '../admin-audit.service-4P3Djdxk.cjs';
17
- import '../contract-line-item-money-BWWQhRul.cjs';
19
+ import '../contract-line-item-money-B0Z3Ogur.cjs';
18
20
  import '../plan-resolution-CwUy_OqC.cjs';
19
- import '../subscriber.service-BZsvHw1V.cjs';
21
+ import '../subscriber.service-5W6Gi-1B.cjs';
20
22
 
21
23
  /**
22
24
  * One period onwards, on `anchorDay` where the month has one.
@@ -546,13 +548,16 @@ declare class LimitExceededFilter extends BaseExceptionFilter {
546
548
  catch(exception: unknown, host: ArgumentsHost): void;
547
549
  }
548
550
 
549
- declare const PLAN_CATALOG_TOKEN: unique symbol;
551
+ /** The settings of `config/saas.yaml` — a `PlanCatalogSettings`, fixed while the process runs. */
552
+ declare const PLAN_CATALOG_SETTINGS_TOKEN: unique symbol;
553
+ /** A `PlanCatalogSource`: the plans and features as they stand when an operation asks. */
554
+ declare const PLAN_CATALOG_SOURCE_TOKEN: unique symbol;
550
555
  declare const PLAN_CATALOG_READ_SINK_TOKEN: unique symbol;
551
556
  /**
552
557
  * Every settings block of `config/saas.yaml` — app identity, currency, VAT rate,
553
558
  * tenant billing and the rest — beside the read sink the plans and features
554
559
  * come from. The settings are handed on whole, so a block the schema gains
555
- * reaches `PLAN_CATALOG_TOKEN` without this module learning its name.
560
+ * reaches `PLAN_CATALOG_SETTINGS_TOKEN` without this module learning its name.
556
561
  */
557
562
  interface PlanCatalogModuleOptions extends PlanCatalogSettings {
558
563
  /** App-specific adapter for DB reads. */
@@ -652,6 +657,8 @@ declare function getMarketedPlans(catalog: PlanCatalog): PlanDef[];
652
657
  * - the plan has no price for the cycle (`monthlyNet`/`yearlyNet === null`)
653
658
  */
654
659
  declare function getPlanPriceNet(catalog: PlanCatalog, planId: PlanId, cycle: BillingCycle): number | null;
660
+ /** The same rule for a plan already in hand, whichever version it describes. */
661
+ declare function listPriceNet(plan: PlanDef, cycle: BillingCycle): number | null;
655
662
  /**
656
663
  * Whether a plan on the list carries no price for a cycle, and so is not sold
657
664
  * in it: a plan without a yearly price is a monthly plan, one without either is
@@ -754,12 +761,12 @@ interface PublicBundleEntry {
754
761
  marketing?: MarketingFields;
755
762
  }
756
763
  declare class PublicCatalogController {
757
- private readonly planCatalog;
764
+ private readonly planCatalogs;
758
765
  private readonly featureRegistry;
759
766
  private readonly marketingRepo;
760
767
  private readonly bundleRepo;
761
768
  private readonly catalogEntryRepo;
762
- constructor(planCatalog: PlanCatalog, featureRegistry: FeatureUiRegistry, marketingRepo?: MarketingProjectionRepository | null, bundleRepo?: BundleRepository | null, catalogEntryRepo?: CatalogEntryRepository | null);
769
+ constructor(planCatalogs: PlanCatalogSource, featureRegistry: FeatureUiRegistry, marketingRepo?: MarketingProjectionRepository | null, bundleRepo?: BundleRepository | null, catalogEntryRepo?: CatalogEntryRepository | null);
763
770
  listPlans(lang?: string, localeParam?: string): Promise<PlanResponseEntry[]>;
764
771
  listFeatureRegistry(): Promise<FeatureUiRegistry>;
765
772
  /**
@@ -830,11 +837,11 @@ declare class BillingPermissionGuard implements CanActivate {
830
837
  }
831
838
 
832
839
  declare class SubscriptionContractFreezeService implements ContractFreezePort {
833
- private readonly catalog;
840
+ private readonly catalogs;
834
841
  private readonly entitlements;
835
842
  private readonly contracts;
836
843
  private readonly source;
837
- constructor(catalog: PlanCatalog, entitlements: EntitlementService, contracts: SubscriptionContractService, source: ContractFreezeSourcePort);
844
+ constructor(catalogs: PlanCatalogSource, entitlements: EntitlementService, contracts: SubscriptionContractService, source: ContractFreezeSourcePort, writes?: TenantSubscriptionWritePort | null);
838
845
  assertPartyFor(tenantId: string): Promise<void>;
839
846
  endOnCancellation(tenantId: string, effectiveAt: Date): Promise<void>;
840
847
  freezeOnPlanChange(tenantId: string, newPlan: string, billingCycle: BillingCycle, effectiveFrom: Date, endsAt?: Date | null): Promise<void>;
@@ -929,4 +936,4 @@ declare const SUBSCRIPTION_BUNDLE_CONFIG_TOKEN: unique symbol;
929
936
  */
930
937
  declare function buildTenantSubscriptionBundlesController(extraGuards?: Array<Type<CanActivate>>): Type;
931
938
 
932
- export { AddSubscriptionBundleDto, AuthGuardList, BILLING_FEATURE_UI_REGISTRY_TOKEN, BillingPermissionGuard, type BundleFirstPeriodInput, type BundlePeriodRollInput, type BundlePeriodWindow, type BundlePlanContext, BundlePriceLookupDto, CancelSubscriptionBundleDto, CatalogBundleUpsellResolver, ConfiguratorCatalogBuilder, ContractFreezePort, ContractFreezeSourcePort, DEFAULT_BUNDLE_MINIMUM_TERM_MONTHS, FEATURE_GUARD_CONFIG_TOKEN, FEATURE_GUARD_MARKER, FeatureGuard, type FeatureGuardConfig, LimitExceededFilter, type MarketingFields, type NextPeriodWindow, PLAN_CATALOG_IMPORT_SINK_TOKEN, PLAN_CATALOG_READ_SINK_TOKEN, PLAN_CATALOG_TOKEN, PUBLIC_CATALOG_BUNDLE_REPOSITORY_TOKEN, PUBLIC_CATALOG_MARKETING_REPOSITORY_TOKEN, type PeriodRollInput, type PlanAnchorSource, type PlanCatalogBuildSettings, PlanCatalogImportDto, type PlanCatalogImporterControllerConfig, PlanCatalogImporterModule, type PlanCatalogImporterModuleOptions, PlanCatalogImporterService, PlanCatalogModule, type PlanCatalogModuleOptions, type PlanResponseEntry, PreviewSubscriptionBundleDto, type PublicBundleEntry, PublicCatalogController, PublicCatalogModule, type PublicCatalogModuleOptions, PublishValidationError, type PublishablePlanVersion, REQUIRE_FEATURE_KEY, type RenewalDecision, type RenewalSubInput, RequireFeature, SUBSCRIPTION_BUNDLE_CONFIG_TOKEN, SUBSCRIPTION_BUNDLE_REPOSITORY_TOKEN, SubscriptionContractFreezeService, UPSELL_OFFER_CURRENCY_TOKEN, UPSELL_OFFER_RESOLVER_TOKEN, advanceOneCycle, assertBaseVersionFresh, assertChangeNote, assertDraftPublishable, assertOptimisticLockHeld, billingAnchorDay, buildPlanCatalogFromSnapshot, buildPlanCatalogImporterController, buildTenantSubscriptionBundlesController, bundleCycleFitsPlan, bundleFirstPeriodEnd, bundleFirstPeriodStart, bundleNextPeriodEnd, clearPendingPlanVersionFields, computeCarriedTrialEndsAt, computeNextBundlePeriod, computeNextPeriod, cyclesSoldFor, decideRenewal, findPlan, getActiveFeatureKeys, getMarketedPlans, getPlanOrThrow, getPlanPriceGross, getPlanPriceNet, getPlanQuota, initialPeriodWindow, isFeatureInPlan, isFeaturePlannedOnly, isPlanNotSoldInCycle, periodEndAfter, periodEndWithMinLead, planNotSoldInCycle, resolveBundlePriceNet, resolvePlanAnchorDay, retreatOneCycle };
939
+ export { AddSubscriptionBundleDto, AuthGuardList, BILLING_FEATURE_UI_REGISTRY_TOKEN, BillingPermissionGuard, type BundleFirstPeriodInput, type BundlePeriodRollInput, type BundlePeriodWindow, type BundlePlanContext, BundlePriceLookupDto, CancelSubscriptionBundleDto, CatalogBundleUpsellResolver, ConfiguratorCatalogBuilder, ContractFreezePort, ContractFreezeSourcePort, DEFAULT_BUNDLE_MINIMUM_TERM_MONTHS, FEATURE_GUARD_CONFIG_TOKEN, FEATURE_GUARD_MARKER, FeatureGuard, type FeatureGuardConfig, LimitExceededFilter, type MarketingFields, type NextPeriodWindow, PLAN_CATALOG_IMPORT_SINK_TOKEN, PLAN_CATALOG_READ_SINK_TOKEN, PLAN_CATALOG_SETTINGS_TOKEN, PLAN_CATALOG_SOURCE_TOKEN, PUBLIC_CATALOG_BUNDLE_REPOSITORY_TOKEN, PUBLIC_CATALOG_MARKETING_REPOSITORY_TOKEN, type PeriodRollInput, type PlanAnchorSource, type PlanCatalogBuildSettings, PlanCatalogImportDto, type PlanCatalogImporterControllerConfig, PlanCatalogImporterModule, type PlanCatalogImporterModuleOptions, PlanCatalogImporterService, PlanCatalogModule, type PlanCatalogModuleOptions, PlanCatalogSource, type PlanResponseEntry, PreviewSubscriptionBundleDto, type PublicBundleEntry, PublicCatalogController, PublicCatalogModule, type PublicCatalogModuleOptions, PublishValidationError, type PublishablePlanVersion, REQUIRE_FEATURE_KEY, type RenewalDecision, type RenewalSubInput, RequireFeature, SUBSCRIPTION_BUNDLE_CONFIG_TOKEN, SUBSCRIPTION_BUNDLE_REPOSITORY_TOKEN, SubscriptionContractFreezeService, UPSELL_OFFER_CURRENCY_TOKEN, UPSELL_OFFER_RESOLVER_TOKEN, advanceOneCycle, assertBaseVersionFresh, assertChangeNote, assertDraftPublishable, assertOptimisticLockHeld, billingAnchorDay, buildPlanCatalogFromSnapshot, buildPlanCatalogImporterController, buildTenantSubscriptionBundlesController, bundleCycleFitsPlan, bundleFirstPeriodEnd, bundleFirstPeriodStart, bundleNextPeriodEnd, clearPendingPlanVersionFields, computeCarriedTrialEndsAt, computeNextBundlePeriod, computeNextPeriod, cyclesSoldFor, decideRenewal, findPlan, getActiveFeatureKeys, getMarketedPlans, getPlanOrThrow, getPlanPriceGross, getPlanPriceNet, getPlanQuota, initialPeriodWindow, isFeatureInPlan, isFeaturePlannedOnly, isPlanNotSoldInCycle, listPriceNet, periodEndAfter, periodEndWithMinLead, planNotSoldInCycle, resolveBundlePriceNet, resolvePlanAnchorDay, retreatOneCycle };
@@ -1,22 +1,24 @@
1
- import { BillingCycle, BundleVersionRow, FeatureKey, UpsellOfferResolver, BundleRepository, CatalogEntryRepository, UpsellOffer, PlanCatalogSettings, PlanCatalogReadSink, PlanCatalog, PlanCatalogReadSnapshot, PlanCatalogImportSink, PlanCatalogImportReport, PlanId, PlanDef, QuotaKey, MarketingTopFeature, FeatureUiRegistry, MarketingProjectionRepository, ConfiguratorSourcesLookup, ConfiguratorMarketingProvider, ConfiguratorCatalog } from '@saasicat/core';
1
+ import { BillingCycle, BundleVersionRow, FeatureKey, UpsellOfferResolver, BundleRepository, CatalogEntryRepository, UpsellOffer, PlanCatalogSettings, PlanCatalogReadSink, PlanCatalog, PlanCatalogReadSnapshot, PlanCatalogImportSink, PlanCatalogImportReport, PlanId, PlanDef, QuotaKey, MarketingTopFeature, FeatureUiRegistry, MarketingProjectionRepository, TenantSubscriptionWritePort, ConfiguratorSourcesLookup, ConfiguratorMarketingProvider, ConfiguratorCatalog } from '@saasicat/core';
2
2
  export { BundleVersionFields, CancellationNoticePeriods, ChangeDirection, DiffResult, PlanVersionFields, SelfServiceBlockedPlans, VersionChange, VersionChangeDirection, classifyBundleVersionDiff, classifyPlanDiff } from '@saasicat/core';
3
- export { A as AddBundleToSubscriptionInput, B as BundlePreviewSnapshot, C as CancelBundleFromSubscriptionInput, a as CancelSubscriptionDto, b as CancellableSubscription, c as CancellationDecision, d as CancellationInput, e as ChangePlanDto, f as CompleteOnboardingSubscriptionDto, g as ComposedTenantAuthGuard, h as CycleDirection, L as LimitsCheckRow, N as NO_NOTICE_PERIOD, P as PendingPlanMaterializationService, i as PlanChangeContext, j as PlanChangePreviewDto, k as PlanChangePreviewIssue, l as PlanChangePreviewService, m as PlanChangeType, n as PlanDirection, o as PlanSnapshotDto, p as PreviewPlanChangeDto, q as ProrationDto, r as ProrationInput, R as RedundantFeatureHint, S as SubscriptionBundleAddPreviewDto, s as SubscriptionBundleCancelPreviewDto, t as SubscriptionBundleConfig, u as SubscriptionBundlePreviewContext, v as SubscriptionBundlePreviewIssue, w as SubscriptionBundlePreviewService, x as SubscriptionBundlesService, T as TenantAdminGuard, y as TenantBillingController, U as UsageResponse, z as addMonths, D as clampToParent, E as computeProration, F as decideCancellation, G as decideCancellationFor, H as noticeDaysFor, I as resolveBundleCancelEffectiveAt } from '../tenant-billing.controller-0HZ_2DQH.js';
4
- import { F as FEATURE_GUARD_MARKER, d as ContractFreezePort, e as ContractFreezeSourcePort } from '../tenant-billing.module-C1sLBCW-.js';
5
- export { A as AjvErrorLike, C as CONTRACT_FREEZE_PORT_TOKEN, b as CONTRACT_FREEZE_SOURCE_PORT_TOKEN, c as ContractFreezeBundleSnapshot, E as EnvironmentVariables, f as LoadPlanCatalogFromStringOptions, L as LoadPlanCatalogOptions, M as MarkedFeatureGuard, P as PLAN_CATALOG_UNREADABLE_ERROR, g as PlanCatalogValidationError, h as SELF_SERVICE_BLOCKED_BUNDLES_TOKEN, i as SELF_SERVICE_BLOCKED_PLANS_TOKEN, j as SelfServiceBlockedBundles, a as SubscriptionBundleControllerOptions, k as SubscriptionBundleModule, S as SubscriptionBundleModuleOptions, l as TenantBillingModule, T as TenantBillingModuleOptions, m as catalogSource, n as isPlatformFeatureGuard, o as loadPlanCatalogFromFile, p as loadPlanCatalogFromString } from '../tenant-billing.module-C1sLBCW-.js';
3
+ export { A as AddBundleToSubscriptionInput, B as BundlePreviewSnapshot, C as CancelBundleFromSubscriptionInput, a as CancelSubscriptionDto, b as CancellableSubscription, c as CancellationDecision, d as CancellationInput, e as ChangePlanDto, f as CompleteOnboardingSubscriptionDto, g as ComposedTenantAuthGuard, h as CycleDirection, L as LimitsCheckRow, N as NO_NOTICE_PERIOD, P as PendingPlanMaterializationService, i as PlanChangeContext, j as PlanChangePreviewDto, k as PlanChangePreviewIssue, l as PlanChangePreviewService, m as PlanChangeType, n as PlanDirection, o as PlanSnapshotDto, p as PreviewPlanChangeDto, q as ProrationDto, r as ProrationInput, R as RedundantFeatureHint, S as SubscriptionBundleAddPreviewDto, s as SubscriptionBundleCancelPreviewDto, t as SubscriptionBundleConfig, u as SubscriptionBundlePreviewContext, v as SubscriptionBundlePreviewIssue, w as SubscriptionBundlePreviewService, x as SubscriptionBundlesService, T as TenantAdminGuard, y as TenantBillingController, U as UsageResponse, z as addMonths, D as clampToParent, E as computeProration, F as decideCancellation, G as decideCancellationFor, H as noticeDaysFor, I as resolveBundleCancelEffectiveAt } from '../tenant-billing.controller-BLqbsONe.js';
4
+ import { F as FEATURE_GUARD_MARKER, d as ContractFreezePort, e as ContractFreezeSourcePort } from '../tenant-billing.module-DohgJJ2m.js';
5
+ export { A as AjvErrorLike, C as CONTRACT_FREEZE_PORT_TOKEN, b as CONTRACT_FREEZE_SOURCE_PORT_TOKEN, c as ContractFreezeBundleSnapshot, E as EnvironmentVariables, f as LoadPlanCatalogFromStringOptions, L as LoadPlanCatalogOptions, M as MarkedFeatureGuard, P as PLAN_CATALOG_UNREADABLE_ERROR, g as PlanCatalogValidationError, h as SELF_SERVICE_BLOCKED_BUNDLES_TOKEN, i as SELF_SERVICE_BLOCKED_PLANS_TOKEN, j as SelfServiceBlockedBundles, a as SubscriptionBundleControllerOptions, k as SubscriptionBundleModule, S as SubscriptionBundleModuleOptions, l as TenantBillingModule, T as TenantBillingModuleOptions, m as catalogSource, n as isPlatformFeatureGuard, o as loadPlanCatalogFromFile, p as loadPlanCatalogFromString } from '../tenant-billing.module-DohgJJ2m.js';
6
6
  import * as _nestjs_common from '@nestjs/common';
7
7
  import { CanActivate, ExecutionContext, ArgumentsHost, Type, DynamicModule, ForwardReference, Provider } from '@nestjs/common';
8
8
  export { Type as NestType } from '@nestjs/common';
9
9
  import { Reflector, BaseExceptionFilter } from '@nestjs/core';
10
- import { c as EntitlementService } from '../aggregation-CtIjlWHT.js';
10
+ import { c as EntitlementService } from '../aggregation-ChpZDh0g.js';
11
11
  import { P as ProviderSpec } from '../di-CcNeq9v-.js';
12
+ import { P as PlanCatalogSource } from '../plan-catalog-source-DWe-BGY1.js';
13
+ export { a as PlanCatalogOrigin, g as givenPlanCatalogSource } from '../plan-catalog-source-DWe-BGY1.js';
12
14
  import { d as AuthGuardList } from '../tenant-billing.tokens-G-1xOlMr.js';
13
15
  export { c as AUDIT_CONTEXT_RESOLVER_TOKEN, A as AuditContextResolver, B as BILLING_PERMISSION_GUARDS_TOKEN, C as CANCELLATION_NOTICE_DAYS_TOKEN, D as DuePendingPlanChange, e as PENDING_PLAN_QUERY_PORT_TOKEN, P as PendingPlanQueryPort, S as SUBSCRIPTION_USAGE_PORT_TOKEN, f as SUBSCRIPTION_WRITE_PORT_TOKEN, g as TENANT_AUTH_GUARDS_TOKEN, h as TENANT_ID_RESOLVER_TOKEN, i as TRIAL_PROJECTION_PORT_TOKEN, T as TenantIdResolver, j as TrialProjectionInput, a as TrialProjectionPort, k as USAGE_SNAPSHOT_PORT_TOKEN, l as USER_EMAIL_RESOLVER_TOKEN, m as USER_ID_RESOLVER_TOKEN, U as UserEmailResolver, b as UserIdResolver } from '../tenant-billing.tokens-G-1xOlMr.js';
14
- import { S as SubscriptionContractService } from '../subscription-contract.service-Duv_Ns1W.js';
15
- import '../promo.service-CBMm9RU7.js';
16
+ import { S as SubscriptionContractService } from '../subscription-contract.service-CPZrTM9C.js';
17
+ import '../promo.service-CFjfF0Xm.js';
16
18
  import '../admin-audit.service-4P3Djdxk.js';
17
- import '../contract-line-item-money-BWWQhRul.js';
19
+ import '../contract-line-item-money-B0Z3Ogur.js';
18
20
  import '../plan-resolution-CwUy_OqC.js';
19
- import '../subscriber.service-BZsvHw1V.js';
21
+ import '../subscriber.service-5W6Gi-1B.js';
20
22
 
21
23
  /**
22
24
  * One period onwards, on `anchorDay` where the month has one.
@@ -546,13 +548,16 @@ declare class LimitExceededFilter extends BaseExceptionFilter {
546
548
  catch(exception: unknown, host: ArgumentsHost): void;
547
549
  }
548
550
 
549
- declare const PLAN_CATALOG_TOKEN: unique symbol;
551
+ /** The settings of `config/saas.yaml` — a `PlanCatalogSettings`, fixed while the process runs. */
552
+ declare const PLAN_CATALOG_SETTINGS_TOKEN: unique symbol;
553
+ /** A `PlanCatalogSource`: the plans and features as they stand when an operation asks. */
554
+ declare const PLAN_CATALOG_SOURCE_TOKEN: unique symbol;
550
555
  declare const PLAN_CATALOG_READ_SINK_TOKEN: unique symbol;
551
556
  /**
552
557
  * Every settings block of `config/saas.yaml` — app identity, currency, VAT rate,
553
558
  * tenant billing and the rest — beside the read sink the plans and features
554
559
  * come from. The settings are handed on whole, so a block the schema gains
555
- * reaches `PLAN_CATALOG_TOKEN` without this module learning its name.
560
+ * reaches `PLAN_CATALOG_SETTINGS_TOKEN` without this module learning its name.
556
561
  */
557
562
  interface PlanCatalogModuleOptions extends PlanCatalogSettings {
558
563
  /** App-specific adapter for DB reads. */
@@ -652,6 +657,8 @@ declare function getMarketedPlans(catalog: PlanCatalog): PlanDef[];
652
657
  * - the plan has no price for the cycle (`monthlyNet`/`yearlyNet === null`)
653
658
  */
654
659
  declare function getPlanPriceNet(catalog: PlanCatalog, planId: PlanId, cycle: BillingCycle): number | null;
660
+ /** The same rule for a plan already in hand, whichever version it describes. */
661
+ declare function listPriceNet(plan: PlanDef, cycle: BillingCycle): number | null;
655
662
  /**
656
663
  * Whether a plan on the list carries no price for a cycle, and so is not sold
657
664
  * in it: a plan without a yearly price is a monthly plan, one without either is
@@ -754,12 +761,12 @@ interface PublicBundleEntry {
754
761
  marketing?: MarketingFields;
755
762
  }
756
763
  declare class PublicCatalogController {
757
- private readonly planCatalog;
764
+ private readonly planCatalogs;
758
765
  private readonly featureRegistry;
759
766
  private readonly marketingRepo;
760
767
  private readonly bundleRepo;
761
768
  private readonly catalogEntryRepo;
762
- constructor(planCatalog: PlanCatalog, featureRegistry: FeatureUiRegistry, marketingRepo?: MarketingProjectionRepository | null, bundleRepo?: BundleRepository | null, catalogEntryRepo?: CatalogEntryRepository | null);
769
+ constructor(planCatalogs: PlanCatalogSource, featureRegistry: FeatureUiRegistry, marketingRepo?: MarketingProjectionRepository | null, bundleRepo?: BundleRepository | null, catalogEntryRepo?: CatalogEntryRepository | null);
763
770
  listPlans(lang?: string, localeParam?: string): Promise<PlanResponseEntry[]>;
764
771
  listFeatureRegistry(): Promise<FeatureUiRegistry>;
765
772
  /**
@@ -830,11 +837,11 @@ declare class BillingPermissionGuard implements CanActivate {
830
837
  }
831
838
 
832
839
  declare class SubscriptionContractFreezeService implements ContractFreezePort {
833
- private readonly catalog;
840
+ private readonly catalogs;
834
841
  private readonly entitlements;
835
842
  private readonly contracts;
836
843
  private readonly source;
837
- constructor(catalog: PlanCatalog, entitlements: EntitlementService, contracts: SubscriptionContractService, source: ContractFreezeSourcePort);
844
+ constructor(catalogs: PlanCatalogSource, entitlements: EntitlementService, contracts: SubscriptionContractService, source: ContractFreezeSourcePort, writes?: TenantSubscriptionWritePort | null);
838
845
  assertPartyFor(tenantId: string): Promise<void>;
839
846
  endOnCancellation(tenantId: string, effectiveAt: Date): Promise<void>;
840
847
  freezeOnPlanChange(tenantId: string, newPlan: string, billingCycle: BillingCycle, effectiveFrom: Date, endsAt?: Date | null): Promise<void>;
@@ -929,4 +936,4 @@ declare const SUBSCRIPTION_BUNDLE_CONFIG_TOKEN: unique symbol;
929
936
  */
930
937
  declare function buildTenantSubscriptionBundlesController(extraGuards?: Array<Type<CanActivate>>): Type;
931
938
 
932
- export { AddSubscriptionBundleDto, AuthGuardList, BILLING_FEATURE_UI_REGISTRY_TOKEN, BillingPermissionGuard, type BundleFirstPeriodInput, type BundlePeriodRollInput, type BundlePeriodWindow, type BundlePlanContext, BundlePriceLookupDto, CancelSubscriptionBundleDto, CatalogBundleUpsellResolver, ConfiguratorCatalogBuilder, ContractFreezePort, ContractFreezeSourcePort, DEFAULT_BUNDLE_MINIMUM_TERM_MONTHS, FEATURE_GUARD_CONFIG_TOKEN, FEATURE_GUARD_MARKER, FeatureGuard, type FeatureGuardConfig, LimitExceededFilter, type MarketingFields, type NextPeriodWindow, PLAN_CATALOG_IMPORT_SINK_TOKEN, PLAN_CATALOG_READ_SINK_TOKEN, PLAN_CATALOG_TOKEN, PUBLIC_CATALOG_BUNDLE_REPOSITORY_TOKEN, PUBLIC_CATALOG_MARKETING_REPOSITORY_TOKEN, type PeriodRollInput, type PlanAnchorSource, type PlanCatalogBuildSettings, PlanCatalogImportDto, type PlanCatalogImporterControllerConfig, PlanCatalogImporterModule, type PlanCatalogImporterModuleOptions, PlanCatalogImporterService, PlanCatalogModule, type PlanCatalogModuleOptions, type PlanResponseEntry, PreviewSubscriptionBundleDto, type PublicBundleEntry, PublicCatalogController, PublicCatalogModule, type PublicCatalogModuleOptions, PublishValidationError, type PublishablePlanVersion, REQUIRE_FEATURE_KEY, type RenewalDecision, type RenewalSubInput, RequireFeature, SUBSCRIPTION_BUNDLE_CONFIG_TOKEN, SUBSCRIPTION_BUNDLE_REPOSITORY_TOKEN, SubscriptionContractFreezeService, UPSELL_OFFER_CURRENCY_TOKEN, UPSELL_OFFER_RESOLVER_TOKEN, advanceOneCycle, assertBaseVersionFresh, assertChangeNote, assertDraftPublishable, assertOptimisticLockHeld, billingAnchorDay, buildPlanCatalogFromSnapshot, buildPlanCatalogImporterController, buildTenantSubscriptionBundlesController, bundleCycleFitsPlan, bundleFirstPeriodEnd, bundleFirstPeriodStart, bundleNextPeriodEnd, clearPendingPlanVersionFields, computeCarriedTrialEndsAt, computeNextBundlePeriod, computeNextPeriod, cyclesSoldFor, decideRenewal, findPlan, getActiveFeatureKeys, getMarketedPlans, getPlanOrThrow, getPlanPriceGross, getPlanPriceNet, getPlanQuota, initialPeriodWindow, isFeatureInPlan, isFeaturePlannedOnly, isPlanNotSoldInCycle, periodEndAfter, periodEndWithMinLead, planNotSoldInCycle, resolveBundlePriceNet, resolvePlanAnchorDay, retreatOneCycle };
939
+ export { AddSubscriptionBundleDto, AuthGuardList, BILLING_FEATURE_UI_REGISTRY_TOKEN, BillingPermissionGuard, type BundleFirstPeriodInput, type BundlePeriodRollInput, type BundlePeriodWindow, type BundlePlanContext, BundlePriceLookupDto, CancelSubscriptionBundleDto, CatalogBundleUpsellResolver, ConfiguratorCatalogBuilder, ContractFreezePort, ContractFreezeSourcePort, DEFAULT_BUNDLE_MINIMUM_TERM_MONTHS, FEATURE_GUARD_CONFIG_TOKEN, FEATURE_GUARD_MARKER, FeatureGuard, type FeatureGuardConfig, LimitExceededFilter, type MarketingFields, type NextPeriodWindow, PLAN_CATALOG_IMPORT_SINK_TOKEN, PLAN_CATALOG_READ_SINK_TOKEN, PLAN_CATALOG_SETTINGS_TOKEN, PLAN_CATALOG_SOURCE_TOKEN, PUBLIC_CATALOG_BUNDLE_REPOSITORY_TOKEN, PUBLIC_CATALOG_MARKETING_REPOSITORY_TOKEN, type PeriodRollInput, type PlanAnchorSource, type PlanCatalogBuildSettings, PlanCatalogImportDto, type PlanCatalogImporterControllerConfig, PlanCatalogImporterModule, type PlanCatalogImporterModuleOptions, PlanCatalogImporterService, PlanCatalogModule, type PlanCatalogModuleOptions, PlanCatalogSource, type PlanResponseEntry, PreviewSubscriptionBundleDto, type PublicBundleEntry, PublicCatalogController, PublicCatalogModule, type PublicCatalogModuleOptions, PublishValidationError, type PublishablePlanVersion, REQUIRE_FEATURE_KEY, type RenewalDecision, type RenewalSubInput, RequireFeature, SUBSCRIPTION_BUNDLE_CONFIG_TOKEN, SUBSCRIPTION_BUNDLE_REPOSITORY_TOKEN, SubscriptionContractFreezeService, UPSELL_OFFER_CURRENCY_TOKEN, UPSELL_OFFER_RESOLVER_TOKEN, advanceOneCycle, assertBaseVersionFresh, assertChangeNote, assertDraftPublishable, assertOptimisticLockHeld, billingAnchorDay, buildPlanCatalogFromSnapshot, buildPlanCatalogImporterController, buildTenantSubscriptionBundlesController, bundleCycleFitsPlan, bundleFirstPeriodEnd, bundleFirstPeriodStart, bundleNextPeriodEnd, clearPendingPlanVersionFields, computeCarriedTrialEndsAt, computeNextBundlePeriod, computeNextPeriod, cyclesSoldFor, decideRenewal, findPlan, getActiveFeatureKeys, getMarketedPlans, getPlanOrThrow, getPlanPriceGross, getPlanPriceNet, getPlanQuota, initialPeriodWindow, isFeatureInPlan, isFeaturePlannedOnly, isPlanNotSoldInCycle, listPriceNet, periodEndAfter, periodEndWithMinLead, planNotSoldInCycle, resolveBundlePriceNet, resolvePlanAnchorDay, retreatOneCycle };
@@ -20,7 +20,7 @@ import {
20
20
  computeCarriedTrialEndsAt,
21
21
  computeNextPeriod,
22
22
  decideRenewal
23
- } from "../chunk-IORLRWJZ.js";
23
+ } from "../chunk-R5YCJBHY.js";
24
24
  import {
25
25
  AddSubscriptionBundleDto,
26
26
  BILLING_FEATURE_UI_REGISTRY_TOKEN,
@@ -79,15 +79,15 @@ import {
79
79
  resolveBundleCancelEffectiveAt,
80
80
  resolvePlanAnchorDay,
81
81
  retreatOneCycle
82
- } from "../chunk-6ISJMNW7.js";
82
+ } from "../chunk-M47BNEY2.js";
83
83
  import {
84
84
  classifyBundleVersionDiff,
85
85
  classifyPlanDiff
86
86
  } from "../chunk-GZTL64QK.js";
87
87
  import "../chunk-34XVPR6P.js";
88
88
  import "../chunk-OOTEXP47.js";
89
- import "../chunk-XWAZNKAB.js";
90
- import "../chunk-U465NU23.js";
89
+ import "../chunk-3RLWML2S.js";
90
+ import "../chunk-NDLC5GYK.js";
91
91
  import {
92
92
  cyclesSoldFor,
93
93
  resolveBundlePriceNet
@@ -95,7 +95,7 @@ import {
95
95
  import {
96
96
  SUBSCRIPTION_BUNDLE_CONFIG_TOKEN,
97
97
  SUBSCRIPTION_BUNDLE_REPOSITORY_TOKEN
98
- } from "../chunk-FQS5FPH2.js";
98
+ } from "../chunk-G6EZWECL.js";
99
99
  import "../chunk-OUDSQ3PU.js";
100
100
  import {
101
101
  findPlan,
@@ -108,12 +108,12 @@ import {
108
108
  isFeatureInPlan,
109
109
  isFeaturePlannedOnly,
110
110
  isPlanNotSoldInCycle,
111
+ listPriceNet,
111
112
  planNotSoldInCycle
112
- } from "../chunk-QBF7KLSA.js";
113
+ } from "../chunk-TBBZWZQT.js";
113
114
  import "../chunk-VBRYPU7V.js";
114
- import "../chunk-5BCYJ3QY.js";
115
- import "../chunk-QSBMFY4I.js";
116
- import "../chunk-AOQJEYOL.js";
115
+ import "../chunk-6PJE7EWO.js";
116
+ import "../chunk-3QVGA6JX.js";
117
117
  import "../chunk-QUZU2M33.js";
118
118
  import {
119
119
  BillingPermissionGuard,
@@ -134,15 +134,17 @@ import {
134
134
  USER_ID_RESOLVER_TOKEN
135
135
  } from "../chunk-GPQWGA6B.js";
136
136
  import "../chunk-SZ7RFPXA.js";
137
- import "../chunk-U4X2YRRO.js";
138
- import "../chunk-3HT3REXB.js";
137
+ import "../chunk-WOEJ6K7M.js";
138
+ import "../chunk-LF6J4YYN.js";
139
139
  import "../chunk-YSC46BGM.js";
140
140
  import {
141
141
  PLAN_CATALOG_READ_SINK_TOKEN,
142
- PLAN_CATALOG_TOKEN,
142
+ PLAN_CATALOG_SETTINGS_TOKEN,
143
+ PLAN_CATALOG_SOURCE_TOKEN,
143
144
  PlanCatalogModule,
144
- buildPlanCatalogFromSnapshot
145
- } from "../chunk-323FB6TD.js";
145
+ buildPlanCatalogFromSnapshot,
146
+ givenPlanCatalogSource
147
+ } from "../chunk-FEQZCWUL.js";
146
148
  import "../chunk-J7NJRK3K.js";
147
149
  import "../chunk-SHUYVCID.js";
148
150
  export {
@@ -171,7 +173,8 @@ export {
171
173
  PENDING_PLAN_QUERY_PORT_TOKEN,
172
174
  PLAN_CATALOG_IMPORT_SINK_TOKEN,
173
175
  PLAN_CATALOG_READ_SINK_TOKEN,
174
- PLAN_CATALOG_TOKEN,
176
+ PLAN_CATALOG_SETTINGS_TOKEN,
177
+ PLAN_CATALOG_SOURCE_TOKEN,
175
178
  PLAN_CATALOG_UNREADABLE_ERROR,
176
179
  PUBLIC_CATALOG_BUNDLE_REPOSITORY_TOKEN,
177
180
  PUBLIC_CATALOG_MARKETING_REPOSITORY_TOKEN,
@@ -244,11 +247,13 @@ export {
244
247
  getPlanPriceGross,
245
248
  getPlanPriceNet,
246
249
  getPlanQuota,
250
+ givenPlanCatalogSource,
247
251
  initialPeriodWindow,
248
252
  isFeatureInPlan,
249
253
  isFeaturePlannedOnly,
250
254
  isPlanNotSoldInCycle,
251
255
  isPlatformFeatureGuard,
256
+ listPriceNet,
252
257
  loadPlanCatalogFromFile,
253
258
  loadPlanCatalogFromString,
254
259
  noticeDaysFor,