@saasicat/nest 1.0.0-rc.2 → 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.
- package/README.md +44 -8
- package/dist/.build-stamp +1 -1
- package/dist/_entries.cjs +10214 -4796
- package/dist/admin/index.d.cts +5 -4
- package/dist/admin/index.d.ts +5 -4
- package/dist/admin/index.js +13 -9
- package/dist/{admin-resources.module-CpvzcfCc.d.cts → admin-resources.module-B4XNvdH-.d.cts} +1 -2
- package/dist/{admin-resources.module-DF5_Q7RD.d.ts → admin-resources.module-CWqdI9BV.d.ts} +1 -2
- package/dist/{admin-stats.service-TYiSUwIR.d.ts → admin-stats.service-CsLNt19Z.d.ts} +11 -7
- package/dist/{admin-stats.service-DfKupywR.d.cts → admin-stats.service-DrZrU8IJ.d.cts} +11 -7
- package/dist/{aggregation-B3CD0v_d.d.cts → aggregation-ChpZDh0g.d.ts} +39 -6
- package/dist/{aggregation-BFzW07DE.d.ts → aggregation-OpnhwzF5.d.cts} +39 -6
- package/dist/billing/index.d.cts +448 -108
- package/dist/billing/index.d.ts +448 -108
- package/dist/billing/index.js +108 -41
- package/dist/catalog/index.d.cts +74 -45
- package/dist/catalog/index.d.ts +74 -45
- package/dist/catalog/index.js +21 -13
- package/dist/catalog.module-C9O7BxRq.d.ts +180 -0
- package/dist/catalog.module-T-I5Ricz.d.cts +180 -0
- package/dist/checkout-offer/index.d.cts +17 -22
- package/dist/checkout-offer/index.d.ts +17 -22
- package/dist/checkout-offer/index.js +21 -7
- package/dist/checkout-offer.module-DFhGy6JO.d.cts +58 -0
- package/dist/checkout-offer.module-x7SP_dX4.d.ts +58 -0
- package/dist/checkout-offer.service-BeHgYikI.d.ts +242 -0
- package/dist/checkout-offer.service-CCVxG9b2.d.cts +242 -0
- package/dist/chunk-34XVPR6P.js +222 -0
- package/dist/{chunk-AOQJEYOL.js → chunk-3QVGA6JX.js} +3 -1
- package/dist/chunk-3RLWML2S.js +896 -0
- package/dist/{chunk-TXC3LHHB.js → chunk-4SDSYV4A.js} +21 -13
- package/dist/chunk-55QEDAMX.js +946 -0
- package/dist/chunk-5CKC7O52.js +140 -0
- package/dist/chunk-6PJE7EWO.js +185 -0
- package/dist/chunk-7NJKVC5X.js +353 -0
- package/dist/{chunk-RUNZ3X4C.js → chunk-AOS2JPDD.js} +1263 -185
- package/dist/{chunk-WOVQPXV4.js → chunk-CQ2ZZMTD.js} +702 -725
- package/dist/{chunk-NA6O63B7.js → chunk-F5X66HF5.js} +5 -5
- package/dist/chunk-FEQZCWUL.js +174 -0
- package/dist/{chunk-VIJ5NJWC.js → chunk-G6EZWECL.js} +107 -31
- package/dist/chunk-G7RQO2XO.js +0 -0
- package/dist/{chunk-N3L3AICU.js → chunk-GPQWGA6B.js} +5 -6
- package/dist/chunk-GZTL64QK.js +7 -0
- package/dist/{chunk-SABTXESR.js → chunk-J7NJRK3K.js} +17 -1
- package/dist/{chunk-SEPN52AD.js → chunk-JBCC6C3M.js} +566 -307
- package/dist/{chunk-I7GTA3RX.js → chunk-JQRA724W.js} +1 -1
- package/dist/{chunk-WXYJHZCN.js → chunk-JVAEKTJ4.js} +2 -14
- package/dist/chunk-KPEMTBOP.js +26 -0
- package/dist/chunk-LF6J4YYN.js +301 -0
- package/dist/{chunk-LTT736P3.js → chunk-LLYVYRGJ.js} +228 -387
- package/dist/{chunk-6Z7JR4EW.js → chunk-M47BNEY2.js} +1897 -633
- package/dist/{chunk-KFT5AIIH.js → chunk-NDLC5GYK.js} +206 -24
- package/dist/{chunk-O2J2HDXA.js → chunk-OOTEXP47.js} +3 -8
- package/dist/chunk-QPVDCKYS.js +702 -0
- package/dist/{chunk-NHVDCYK5.js → chunk-R5YCJBHY.js} +71 -106
- package/dist/{chunk-XBYAFEOR.js → chunk-S33SO5XX.js} +1 -1
- package/dist/chunk-SZ7RFPXA.js +10 -0
- package/dist/chunk-TBBZWZQT.js +98 -0
- package/dist/chunk-TOEFN7DN.js +295 -0
- package/dist/{chunk-7ZEGFL42.js → chunk-WHJSYKNC.js} +6 -6
- package/dist/chunk-WOEJ6K7M.js +55 -0
- package/dist/{chunk-AU3OOREM.js → chunk-XSSWYPP5.js} +16 -3
- package/dist/contract-line-item-money-B0Z3Ogur.d.cts +43 -0
- package/dist/contract-line-item-money-B0Z3Ogur.d.ts +43 -0
- package/dist/discovery/index.d.cts +2 -2
- package/dist/discovery/index.d.ts +2 -2
- package/dist/discovery/index.js +6 -6
- package/dist/{discovery.scanner-9cMqF95o.d.cts → discovery.scanner-DXKc6JkV.d.cts} +1 -1
- package/dist/{discovery.scanner-9cMqF95o.d.ts → discovery.scanner-DXKc6JkV.d.ts} +1 -1
- package/dist/{enforce-quota.interceptor-Df0e3OWe.d.cts → enforce-quota.interceptor-BFyVdWe8.d.cts} +6 -6
- package/dist/{enforce-quota.interceptor-DW3etVyI.d.ts → enforce-quota.interceptor-GaBXboGx.d.ts} +6 -6
- package/dist/entitlement/index.d.cts +27 -4
- package/dist/entitlement/index.d.ts +27 -4
- package/dist/entitlement/index.js +13 -8
- package/dist/index.d.cts +209 -28
- package/dist/index.d.ts +209 -28
- package/dist/index.js +285 -163
- package/dist/issuer-identity.check-CBO0vcsq.d.cts +197 -0
- package/dist/issuer-identity.check-Cz9CEMkZ.d.ts +197 -0
- package/dist/{module-options-COSEb0VW.d.ts → module-options-DmQ3G4sZ.d.ts} +135 -41
- package/dist/{module-options-BG3MzQva.d.cts → module-options-qAOwinHR.d.cts} +135 -41
- package/dist/payment-callback.service-CR84Xw1Z.d.cts +125 -0
- package/dist/payment-callback.service-CR84Xw1Z.d.ts +125 -0
- package/dist/payments/index.cjs +4 -0
- package/dist/payments/index.d.cts +187 -0
- package/dist/payments/index.d.ts +187 -0
- package/dist/payments/index.js +141 -0
- package/dist/payments.module-BdUq9ot_.d.cts +57 -0
- package/dist/payments.module-CQGv_VG7.d.ts +57 -0
- package/dist/plan-catalog-source-DWe-BGY1.d.cts +21 -0
- package/dist/plan-catalog-source-DWe-BGY1.d.ts +21 -0
- package/dist/{plan-resolution-Cgo_TR1H.d.cts → plan-resolution-CwUy_OqC.d.cts} +14 -0
- package/dist/{plan-resolution-Cgo_TR1H.d.ts → plan-resolution-CwUy_OqC.d.ts} +14 -0
- package/dist/{plan-versions.service-DChhbK6h.d.ts → plan-versions.service-C0N-Em2W.d.ts} +38 -64
- package/dist/{plan-versions.service-TPEtbN0r.d.cts → plan-versions.service-DARLh-qI.d.cts} +38 -64
- package/dist/platform/index.d.cts +52 -23
- package/dist/platform/index.d.ts +52 -23
- package/dist/platform/index.js +57 -36
- package/dist/promo/index.d.cts +23 -8
- package/dist/promo/index.d.ts +23 -8
- package/dist/promo/index.js +15 -7
- package/dist/{promo.module-DtvIycpt.d.cts → promo.module-CKkECmU8.d.cts} +9 -3
- package/dist/{promo.module-Z8h1PNX-.d.ts → promo.module-DuIJdK3U.d.ts} +9 -3
- package/dist/promo.service-BYBu6dy3.d.cts +215 -0
- package/dist/promo.service-CFjfF0Xm.d.ts +215 -0
- package/dist/registration/index.d.cts +104 -47
- package/dist/registration/index.d.ts +104 -47
- package/dist/registration/index.js +15 -9
- package/dist/subscriber/index.cjs +4 -0
- package/dist/subscriber/index.d.cts +28 -0
- package/dist/subscriber/index.d.ts +28 -0
- package/dist/subscriber/index.js +16 -0
- package/dist/subscriber.service-5W6Gi-1B.d.cts +68 -0
- package/dist/subscriber.service-5W6Gi-1B.d.ts +68 -0
- package/dist/subscription-contract/index.d.cts +4 -2
- package/dist/subscription-contract/index.d.ts +4 -2
- package/dist/subscription-contract/index.js +13 -5
- package/dist/{subscription-contract.module-fDFdQ0jm.d.ts → subscription-contract.module-BfIRpc1o.d.ts} +8 -2
- package/dist/{subscription-contract.module-CEK8HS5-.d.cts → subscription-contract.module-DTMuUJYd.d.cts} +8 -2
- package/dist/{subscription-contract.service-hD87MKyg.d.cts → subscription-contract.service-CPZrTM9C.d.ts} +32 -3
- package/dist/{subscription-contract.service-hD87MKyg.d.ts → subscription-contract.service-CfNApLuP.d.cts} +32 -3
- package/dist/tenant-billing.controller-BLqbsONe.d.ts +812 -0
- package/dist/tenant-billing.controller-DKbAqTbM.d.cts +812 -0
- package/dist/tenant-billing.module-ClbjzocC.d.cts +364 -0
- package/dist/tenant-billing.module-DohgJJ2m.d.ts +364 -0
- package/dist/tenant-billing.tokens-G-1xOlMr.d.cts +129 -0
- package/dist/tenant-billing.tokens-G-1xOlMr.d.ts +129 -0
- package/dist/testing/index.d.cts +44 -17
- package/dist/testing/index.d.ts +44 -17
- package/dist/testing/index.js +189 -40
- package/package.json +24 -4
- package/dist/catalog.module-BDDO6iwq.d.cts +0 -103
- package/dist/catalog.module-BTnMsE6u.d.ts +0 -103
- package/dist/checkout-offer.module-CMtiQJTT.d.ts +0 -39
- package/dist/checkout-offer.module-CVpWrzbe.d.cts +0 -39
- package/dist/checkout-offer.service-BLOv2HOo.d.cts +0 -49
- package/dist/checkout-offer.service-BLOv2HOo.d.ts +0 -49
- package/dist/chunk-57V6ZTI6.js +0 -22
- package/dist/chunk-BSK6YBLI.js +0 -87
- package/dist/chunk-DQKCK7DX.js +0 -217
- package/dist/chunk-VXEYLNIB.js +0 -632
- package/dist/chunk-WUDYIPYH.js +0 -715
- package/dist/define-saasicat-DROBe-b1.d.ts +0 -69
- package/dist/define-saasicat-vGBCkFys.d.cts +0 -69
- package/dist/promo.service-BJbKAmw3.d.cts +0 -112
- package/dist/promo.service-BJbKAmw3.d.ts +0 -112
- package/dist/tenant-billing.controller-BQ67mlmI.d.ts +0 -438
- package/dist/tenant-billing.controller-DS8kB8a7.d.cts +0 -438
- package/dist/tenant-billing.module-BznC3XtW.d.cts +0 -299
- package/dist/tenant-billing.module-wUbsQSFG.d.ts +0 -299
- /package/dist/{chunk-2FR6ZL7R.js → chunk-BHZOH2DY.js} +0 -0
- /package/dist/{chunk-2SLTRKXC.js → chunk-DFOW3JVO.js} +0 -0
- /package/dist/{chunk-DBZGV3HC.js → chunk-DU56UKEH.js} +0 -0
- /package/dist/{chunk-OYNHOY45.js → chunk-GAUEVIAE.js} +0 -0
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { Type, CanActivate, DynamicModule, ForwardReference, Provider } from '@nestjs/common';
|
|
2
|
-
import { BundleRepository, MarketingProjectionRepository, CatalogEntryRepository, PromotionRepository, MarketingSettingsRepository, PlanRepository, FeatureUiRegistry } from '@saasicat/core';
|
|
3
|
-
import { P as ProviderSpec } from './di-CcNeq9v-.cjs';
|
|
4
|
-
|
|
5
|
-
interface CatalogControllerConfig {
|
|
6
|
-
/**
|
|
7
|
-
* Class-level guards for `BundlesController` and `BundleVersionsController`.
|
|
8
|
-
* REQUIRED — otherwise `forRoot()` throws at boot. Pass `[]` explicitly
|
|
9
|
-
* if the endpoints should intentionally be auth-free.
|
|
10
|
-
*/
|
|
11
|
-
guards: Array<Type<CanActivate>>;
|
|
12
|
-
}
|
|
13
|
-
interface CatalogModuleOptions {
|
|
14
|
-
/** Adapter for `bundles` + `bundle_versions` persistence. */
|
|
15
|
-
bundleRepository: ProviderSpec<BundleRepository>;
|
|
16
|
-
/**
|
|
17
|
-
* Adapter for `marketing_projections` persistence. Optional — if
|
|
18
|
-
* omitted, MarketingProjectionsService + controller are not
|
|
19
|
-
* registered.
|
|
20
|
-
*/
|
|
21
|
-
marketingProjectionRepository?: ProviderSpec<MarketingProjectionRepository>;
|
|
22
|
-
/**
|
|
23
|
-
* Adapter for `capability_/feature_/quota_catalog_entries` persistence
|
|
24
|
-
* (discovery review). Optional — if omitted,
|
|
25
|
-
* CatalogEntriesService + controller are not registered.
|
|
26
|
-
*/
|
|
27
|
-
catalogEntryRepository?: ProviderSpec<CatalogEntryRepository>;
|
|
28
|
-
/**
|
|
29
|
-
* Adapter for `promotions` persistence. Optional — if
|
|
30
|
-
* omitted, PromotionsService + controller are not registered.
|
|
31
|
-
*/
|
|
32
|
-
promotionRepository?: ProviderSpec<PromotionRepository>;
|
|
33
|
-
/**
|
|
34
|
-
* Adapter for `marketing_settings` persistence (
|
|
35
|
-
* `activeLocales`). Optional.
|
|
36
|
-
*/
|
|
37
|
-
marketingSettingsRepository?: ProviderSpec<MarketingSettingsRepository>;
|
|
38
|
-
/**
|
|
39
|
-
* Auth-free pricing-page endpoint `GET /public/marketing-catalog`
|
|
40
|
-
*. Registered only when plan-, marketingProjection-
|
|
41
|
-
* and promotionRepository are set. `guards` is usually `[]`.
|
|
42
|
-
*/
|
|
43
|
-
publicMarketingCatalog?: {
|
|
44
|
-
guards: Array<Type<CanActivate>>;
|
|
45
|
-
projectKey: string;
|
|
46
|
-
currency: string;
|
|
47
|
-
vatRate: number;
|
|
48
|
-
};
|
|
49
|
-
/**
|
|
50
|
-
* — adapter for `plans` master-record persistence.
|
|
51
|
-
* Optional; if omitted, PlansService + controller are not
|
|
52
|
-
* registered (apps without a need for the plan editor stay unchanged).
|
|
53
|
-
*/
|
|
54
|
-
planRepository?: ProviderSpec<PlanRepository>;
|
|
55
|
-
/**
|
|
56
|
-
* Controller mount for `/admin/catalog/bundles` + `/admin/catalog/bundle-versions`.
|
|
57
|
-
* If omitted, the endpoints are not registered — but the services remain usable via DI.
|
|
58
|
-
*/
|
|
59
|
-
controller?: CatalogControllerConfig;
|
|
60
|
-
/**
|
|
61
|
-
* Strict-mode mode. `blocking` (default, #12) throws HTTP 422 on
|
|
62
|
-
* violations and requires a DiscoverySnapshot; `warn-only` returns them
|
|
63
|
-
* only as a warning (transition until 100% discovery coverage).
|
|
64
|
-
*/
|
|
65
|
-
strictModeCheckMode?: 'warn-only' | 'blocking';
|
|
66
|
-
/**
|
|
67
|
-
* Discovery→catalog auto-sync at boot (#12). Default `true` — as soon as a
|
|
68
|
-
* `catalogEntryRepository` is wired and a DiscoverySnapshot is available,
|
|
69
|
-
* `CatalogEntriesService` mirrors the discovery into the DB at startup. `false`
|
|
70
|
-
* disables the boot sync; the manual sync endpoint remains usable.
|
|
71
|
-
*/
|
|
72
|
-
autoSyncDiscoveryAtBoot?: boolean;
|
|
73
|
-
/**
|
|
74
|
-
* Feature keys the catalog is deliberately allowed to carry without them
|
|
75
|
-
* existing in the discovery snapshot (marketed non-code features such as
|
|
76
|
-
* support SLAs, e.g. `['PRIORITY_SUPPORT']`). The strict-mode check excludes
|
|
77
|
-
* them from BUNDLE_/PLAN_FEATURE_UNKNOWN. Use sparingly.
|
|
78
|
-
*/
|
|
79
|
-
marketedOnlyFeatures?: string[];
|
|
80
|
-
/**
|
|
81
|
-
* Optional consumer-curated FeatureUiRegistry (label/description/icon
|
|
82
|
-
* per feature — the same one passed to `PublicCatalogModule.forRoot`). The
|
|
83
|
-
* discovery auto-sync seeds EMPTY `FeatureCatalogEntry` fields
|
|
84
|
-
* (label/description/icon) from it at boot; SuperAdmin edits stay untouched. This
|
|
85
|
-
* makes `FeatureCatalogEntry` the SSOT for UI metadata.
|
|
86
|
-
*/
|
|
87
|
-
featureUiRegistry?: FeatureUiRegistry;
|
|
88
|
-
/**
|
|
89
|
-
* Modules whose providers must be visible in the DI scope of this
|
|
90
|
-
* DynamicModule — typically: `AuthModule`/`PlatformAdminModule`, because the
|
|
91
|
-
* controller guards come from there.
|
|
92
|
-
*/
|
|
93
|
-
imports?: Array<Type<unknown> | DynamicModule | Promise<DynamicModule> | ForwardReference>;
|
|
94
|
-
/** Additional providers registered in the DynamicModule itself. */
|
|
95
|
-
extraProviders?: Provider[];
|
|
96
|
-
/** Register the module globally — default `false`. */
|
|
97
|
-
global?: boolean;
|
|
98
|
-
}
|
|
99
|
-
declare class CatalogModule {
|
|
100
|
-
static forRoot(options: CatalogModuleOptions): DynamicModule;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
export { type CatalogControllerConfig as C, CatalogModule as a, type CatalogModuleOptions as b };
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { Type, CanActivate, DynamicModule, ForwardReference, Provider } from '@nestjs/common';
|
|
2
|
-
import { BundleRepository, MarketingProjectionRepository, CatalogEntryRepository, PromotionRepository, MarketingSettingsRepository, PlanRepository, FeatureUiRegistry } from '@saasicat/core';
|
|
3
|
-
import { P as ProviderSpec } from './di-CcNeq9v-.js';
|
|
4
|
-
|
|
5
|
-
interface CatalogControllerConfig {
|
|
6
|
-
/**
|
|
7
|
-
* Class-level guards for `BundlesController` and `BundleVersionsController`.
|
|
8
|
-
* REQUIRED — otherwise `forRoot()` throws at boot. Pass `[]` explicitly
|
|
9
|
-
* if the endpoints should intentionally be auth-free.
|
|
10
|
-
*/
|
|
11
|
-
guards: Array<Type<CanActivate>>;
|
|
12
|
-
}
|
|
13
|
-
interface CatalogModuleOptions {
|
|
14
|
-
/** Adapter for `bundles` + `bundle_versions` persistence. */
|
|
15
|
-
bundleRepository: ProviderSpec<BundleRepository>;
|
|
16
|
-
/**
|
|
17
|
-
* Adapter for `marketing_projections` persistence. Optional — if
|
|
18
|
-
* omitted, MarketingProjectionsService + controller are not
|
|
19
|
-
* registered.
|
|
20
|
-
*/
|
|
21
|
-
marketingProjectionRepository?: ProviderSpec<MarketingProjectionRepository>;
|
|
22
|
-
/**
|
|
23
|
-
* Adapter for `capability_/feature_/quota_catalog_entries` persistence
|
|
24
|
-
* (discovery review). Optional — if omitted,
|
|
25
|
-
* CatalogEntriesService + controller are not registered.
|
|
26
|
-
*/
|
|
27
|
-
catalogEntryRepository?: ProviderSpec<CatalogEntryRepository>;
|
|
28
|
-
/**
|
|
29
|
-
* Adapter for `promotions` persistence. Optional — if
|
|
30
|
-
* omitted, PromotionsService + controller are not registered.
|
|
31
|
-
*/
|
|
32
|
-
promotionRepository?: ProviderSpec<PromotionRepository>;
|
|
33
|
-
/**
|
|
34
|
-
* Adapter for `marketing_settings` persistence (
|
|
35
|
-
* `activeLocales`). Optional.
|
|
36
|
-
*/
|
|
37
|
-
marketingSettingsRepository?: ProviderSpec<MarketingSettingsRepository>;
|
|
38
|
-
/**
|
|
39
|
-
* Auth-free pricing-page endpoint `GET /public/marketing-catalog`
|
|
40
|
-
*. Registered only when plan-, marketingProjection-
|
|
41
|
-
* and promotionRepository are set. `guards` is usually `[]`.
|
|
42
|
-
*/
|
|
43
|
-
publicMarketingCatalog?: {
|
|
44
|
-
guards: Array<Type<CanActivate>>;
|
|
45
|
-
projectKey: string;
|
|
46
|
-
currency: string;
|
|
47
|
-
vatRate: number;
|
|
48
|
-
};
|
|
49
|
-
/**
|
|
50
|
-
* — adapter for `plans` master-record persistence.
|
|
51
|
-
* Optional; if omitted, PlansService + controller are not
|
|
52
|
-
* registered (apps without a need for the plan editor stay unchanged).
|
|
53
|
-
*/
|
|
54
|
-
planRepository?: ProviderSpec<PlanRepository>;
|
|
55
|
-
/**
|
|
56
|
-
* Controller mount for `/admin/catalog/bundles` + `/admin/catalog/bundle-versions`.
|
|
57
|
-
* If omitted, the endpoints are not registered — but the services remain usable via DI.
|
|
58
|
-
*/
|
|
59
|
-
controller?: CatalogControllerConfig;
|
|
60
|
-
/**
|
|
61
|
-
* Strict-mode mode. `blocking` (default, #12) throws HTTP 422 on
|
|
62
|
-
* violations and requires a DiscoverySnapshot; `warn-only` returns them
|
|
63
|
-
* only as a warning (transition until 100% discovery coverage).
|
|
64
|
-
*/
|
|
65
|
-
strictModeCheckMode?: 'warn-only' | 'blocking';
|
|
66
|
-
/**
|
|
67
|
-
* Discovery→catalog auto-sync at boot (#12). Default `true` — as soon as a
|
|
68
|
-
* `catalogEntryRepository` is wired and a DiscoverySnapshot is available,
|
|
69
|
-
* `CatalogEntriesService` mirrors the discovery into the DB at startup. `false`
|
|
70
|
-
* disables the boot sync; the manual sync endpoint remains usable.
|
|
71
|
-
*/
|
|
72
|
-
autoSyncDiscoveryAtBoot?: boolean;
|
|
73
|
-
/**
|
|
74
|
-
* Feature keys the catalog is deliberately allowed to carry without them
|
|
75
|
-
* existing in the discovery snapshot (marketed non-code features such as
|
|
76
|
-
* support SLAs, e.g. `['PRIORITY_SUPPORT']`). The strict-mode check excludes
|
|
77
|
-
* them from BUNDLE_/PLAN_FEATURE_UNKNOWN. Use sparingly.
|
|
78
|
-
*/
|
|
79
|
-
marketedOnlyFeatures?: string[];
|
|
80
|
-
/**
|
|
81
|
-
* Optional consumer-curated FeatureUiRegistry (label/description/icon
|
|
82
|
-
* per feature — the same one passed to `PublicCatalogModule.forRoot`). The
|
|
83
|
-
* discovery auto-sync seeds EMPTY `FeatureCatalogEntry` fields
|
|
84
|
-
* (label/description/icon) from it at boot; SuperAdmin edits stay untouched. This
|
|
85
|
-
* makes `FeatureCatalogEntry` the SSOT for UI metadata.
|
|
86
|
-
*/
|
|
87
|
-
featureUiRegistry?: FeatureUiRegistry;
|
|
88
|
-
/**
|
|
89
|
-
* Modules whose providers must be visible in the DI scope of this
|
|
90
|
-
* DynamicModule — typically: `AuthModule`/`PlatformAdminModule`, because the
|
|
91
|
-
* controller guards come from there.
|
|
92
|
-
*/
|
|
93
|
-
imports?: Array<Type<unknown> | DynamicModule | Promise<DynamicModule> | ForwardReference>;
|
|
94
|
-
/** Additional providers registered in the DynamicModule itself. */
|
|
95
|
-
extraProviders?: Provider[];
|
|
96
|
-
/** Register the module globally — default `false`. */
|
|
97
|
-
global?: boolean;
|
|
98
|
-
}
|
|
99
|
-
declare class CatalogModule {
|
|
100
|
-
static forRoot(options: CatalogModuleOptions): DynamicModule;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
export { type CatalogControllerConfig as C, CatalogModule as a, type CatalogModuleOptions as b };
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { Type, CanActivate, DynamicModule, ForwardReference, Provider } from '@nestjs/common';
|
|
2
|
-
import { CheckoutOfferRepository, BundleRepository, PlanRepository, CatalogEntryRepository } from '@saasicat/core';
|
|
3
|
-
import { P as ProviderSpec } from './di-CcNeq9v-.js';
|
|
4
|
-
|
|
5
|
-
interface CheckoutOfferControllerConfig {
|
|
6
|
-
/** Class-level guards; `[]` for auth-free public endpoints. */
|
|
7
|
-
guards: Array<Type<CanActivate>>;
|
|
8
|
-
}
|
|
9
|
-
interface CheckoutOfferModuleOptions {
|
|
10
|
-
checkoutOfferRepository: ProviderSpec<CheckoutOfferRepository>;
|
|
11
|
-
/**
|
|
12
|
-
* Optional for V3 revalidation on consume: if set, the service checks
|
|
13
|
-
* whether referenced bundle versions are still bookable. Also provides
|
|
14
|
-
* the bundle features for the requires validation (#35 P6).
|
|
15
|
-
*/
|
|
16
|
-
bundleRepository?: ProviderSpec<BundleRepository>;
|
|
17
|
-
/**
|
|
18
|
-
* Optional for the requires validation (#35 P6): plan features of the
|
|
19
|
-
* chosen plan version. Without wiring, falls back to the featuresSnapshot
|
|
20
|
-
* of the plan line item.
|
|
21
|
-
*/
|
|
22
|
-
planRepository?: ProviderSpec<PlanRepository>;
|
|
23
|
-
/**
|
|
24
|
-
* Optional for the requires validation (#35 P6): requires source =
|
|
25
|
-
* curated FeatureCatalogEntries. Without wiring, the validation is
|
|
26
|
-
* skipped (graceful).
|
|
27
|
-
*/
|
|
28
|
-
catalogEntryRepository?: ProviderSpec<CatalogEntryRepository>;
|
|
29
|
-
/** Controller mount for `/public/checkout-offer`. Omitted = service only. */
|
|
30
|
-
controller?: CheckoutOfferControllerConfig;
|
|
31
|
-
imports?: Array<Type<unknown> | DynamicModule | Promise<DynamicModule> | ForwardReference>;
|
|
32
|
-
extraProviders?: Provider[];
|
|
33
|
-
global?: boolean;
|
|
34
|
-
}
|
|
35
|
-
declare class CheckoutOfferModule {
|
|
36
|
-
static forRoot(options: CheckoutOfferModuleOptions): DynamicModule;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export { type CheckoutOfferControllerConfig as C, CheckoutOfferModule as a, type CheckoutOfferModuleOptions as b };
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { Type, CanActivate, DynamicModule, ForwardReference, Provider } from '@nestjs/common';
|
|
2
|
-
import { CheckoutOfferRepository, BundleRepository, PlanRepository, CatalogEntryRepository } from '@saasicat/core';
|
|
3
|
-
import { P as ProviderSpec } from './di-CcNeq9v-.cjs';
|
|
4
|
-
|
|
5
|
-
interface CheckoutOfferControllerConfig {
|
|
6
|
-
/** Class-level guards; `[]` for auth-free public endpoints. */
|
|
7
|
-
guards: Array<Type<CanActivate>>;
|
|
8
|
-
}
|
|
9
|
-
interface CheckoutOfferModuleOptions {
|
|
10
|
-
checkoutOfferRepository: ProviderSpec<CheckoutOfferRepository>;
|
|
11
|
-
/**
|
|
12
|
-
* Optional for V3 revalidation on consume: if set, the service checks
|
|
13
|
-
* whether referenced bundle versions are still bookable. Also provides
|
|
14
|
-
* the bundle features for the requires validation (#35 P6).
|
|
15
|
-
*/
|
|
16
|
-
bundleRepository?: ProviderSpec<BundleRepository>;
|
|
17
|
-
/**
|
|
18
|
-
* Optional for the requires validation (#35 P6): plan features of the
|
|
19
|
-
* chosen plan version. Without wiring, falls back to the featuresSnapshot
|
|
20
|
-
* of the plan line item.
|
|
21
|
-
*/
|
|
22
|
-
planRepository?: ProviderSpec<PlanRepository>;
|
|
23
|
-
/**
|
|
24
|
-
* Optional for the requires validation (#35 P6): requires source =
|
|
25
|
-
* curated FeatureCatalogEntries. Without wiring, the validation is
|
|
26
|
-
* skipped (graceful).
|
|
27
|
-
*/
|
|
28
|
-
catalogEntryRepository?: ProviderSpec<CatalogEntryRepository>;
|
|
29
|
-
/** Controller mount for `/public/checkout-offer`. Omitted = service only. */
|
|
30
|
-
controller?: CheckoutOfferControllerConfig;
|
|
31
|
-
imports?: Array<Type<unknown> | DynamicModule | Promise<DynamicModule> | ForwardReference>;
|
|
32
|
-
extraProviders?: Provider[];
|
|
33
|
-
global?: boolean;
|
|
34
|
-
}
|
|
35
|
-
declare class CheckoutOfferModule {
|
|
36
|
-
static forRoot(options: CheckoutOfferModuleOptions): DynamicModule;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export { type CheckoutOfferControllerConfig as C, CheckoutOfferModule as a, type CheckoutOfferModuleOptions as b };
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { CheckoutOfferRepository, BundleRepository, PlanRepository, CatalogEntryRepository, CheckoutOfferFilter, CheckoutOfferRow, CreateCheckoutOfferData, UpdateCheckoutOfferData } from '@saasicat/core';
|
|
2
|
-
|
|
3
|
-
declare class CheckoutOfferService {
|
|
4
|
-
private readonly repo;
|
|
5
|
-
private readonly bundles;
|
|
6
|
-
private readonly plans;
|
|
7
|
-
private readonly catalogEntries;
|
|
8
|
-
constructor(repo: CheckoutOfferRepository, bundles?: BundleRepository | null, plans?: PlanRepository | null, catalogEntries?: CatalogEntryRepository | null);
|
|
9
|
-
list(filter: CheckoutOfferFilter): Promise<CheckoutOfferRow[]>;
|
|
10
|
-
getById(id: string): Promise<CheckoutOfferRow>;
|
|
11
|
-
create(data: CreateCheckoutOfferData): Promise<CheckoutOfferRow>;
|
|
12
|
-
/** Customization in onboarding — only while the offer is `open`. */
|
|
13
|
-
update(id: string, data: UpdateCheckoutOfferData): Promise<CheckoutOfferRow>;
|
|
14
|
-
/**
|
|
15
|
-
* Freezes the offer (`status = 'consumed'`). Returns the final
|
|
16
|
-
* snapshot — the caller (registration/billing) writes it
|
|
17
|
-
* as `Subscription.packageSnapshot`.
|
|
18
|
-
*/
|
|
19
|
-
consume(id: string): Promise<CheckoutOfferRow>;
|
|
20
|
-
/**
|
|
21
|
-
* #35 P6 — server-side requires validation: the dependencies of all
|
|
22
|
-
* features (plan ∪ selected bundles) must be covered within the
|
|
23
|
-
* selection, otherwise an offer would be created whose features cannot
|
|
24
|
-
* work at the tenant (an app-specific validateModuleDependencies check is
|
|
25
|
-
* thereby replaced on the platform side). The requires source are the
|
|
26
|
-
* curated FeatureCatalogEntries; without CatalogEntryRepository it is
|
|
27
|
-
* skipped (graceful — no requires data available).
|
|
28
|
-
*/
|
|
29
|
-
private assertFeatureRequiresSatisfied;
|
|
30
|
-
/**
|
|
31
|
-
* Plan features preferably from the server SSOT (PlanRepository); fallback
|
|
32
|
-
* is the frozen featuresSnapshot of the plan LineItem (adapter without
|
|
33
|
-
* PlanRepository wiring).
|
|
34
|
-
*/
|
|
35
|
-
private resolvePlanFeatures;
|
|
36
|
-
/** Bundle features from the BundleVersions; fallback featuresSnapshot. */
|
|
37
|
-
private resolveBundleFeatures;
|
|
38
|
-
private assertBundleVersionsStillBookable;
|
|
39
|
-
private normalizeCreateData;
|
|
40
|
-
private normalizeUpdateData;
|
|
41
|
-
private resolveLineItems;
|
|
42
|
-
private defaultPlanLineItem;
|
|
43
|
-
private assertOpen;
|
|
44
|
-
private isExpired;
|
|
45
|
-
private dateIsAfterNow;
|
|
46
|
-
private isValidUntilExpired;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export { CheckoutOfferService as C };
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { CheckoutOfferRepository, BundleRepository, PlanRepository, CatalogEntryRepository, CheckoutOfferFilter, CheckoutOfferRow, CreateCheckoutOfferData, UpdateCheckoutOfferData } from '@saasicat/core';
|
|
2
|
-
|
|
3
|
-
declare class CheckoutOfferService {
|
|
4
|
-
private readonly repo;
|
|
5
|
-
private readonly bundles;
|
|
6
|
-
private readonly plans;
|
|
7
|
-
private readonly catalogEntries;
|
|
8
|
-
constructor(repo: CheckoutOfferRepository, bundles?: BundleRepository | null, plans?: PlanRepository | null, catalogEntries?: CatalogEntryRepository | null);
|
|
9
|
-
list(filter: CheckoutOfferFilter): Promise<CheckoutOfferRow[]>;
|
|
10
|
-
getById(id: string): Promise<CheckoutOfferRow>;
|
|
11
|
-
create(data: CreateCheckoutOfferData): Promise<CheckoutOfferRow>;
|
|
12
|
-
/** Customization in onboarding — only while the offer is `open`. */
|
|
13
|
-
update(id: string, data: UpdateCheckoutOfferData): Promise<CheckoutOfferRow>;
|
|
14
|
-
/**
|
|
15
|
-
* Freezes the offer (`status = 'consumed'`). Returns the final
|
|
16
|
-
* snapshot — the caller (registration/billing) writes it
|
|
17
|
-
* as `Subscription.packageSnapshot`.
|
|
18
|
-
*/
|
|
19
|
-
consume(id: string): Promise<CheckoutOfferRow>;
|
|
20
|
-
/**
|
|
21
|
-
* #35 P6 — server-side requires validation: the dependencies of all
|
|
22
|
-
* features (plan ∪ selected bundles) must be covered within the
|
|
23
|
-
* selection, otherwise an offer would be created whose features cannot
|
|
24
|
-
* work at the tenant (an app-specific validateModuleDependencies check is
|
|
25
|
-
* thereby replaced on the platform side). The requires source are the
|
|
26
|
-
* curated FeatureCatalogEntries; without CatalogEntryRepository it is
|
|
27
|
-
* skipped (graceful — no requires data available).
|
|
28
|
-
*/
|
|
29
|
-
private assertFeatureRequiresSatisfied;
|
|
30
|
-
/**
|
|
31
|
-
* Plan features preferably from the server SSOT (PlanRepository); fallback
|
|
32
|
-
* is the frozen featuresSnapshot of the plan LineItem (adapter without
|
|
33
|
-
* PlanRepository wiring).
|
|
34
|
-
*/
|
|
35
|
-
private resolvePlanFeatures;
|
|
36
|
-
/** Bundle features from the BundleVersions; fallback featuresSnapshot. */
|
|
37
|
-
private resolveBundleFeatures;
|
|
38
|
-
private assertBundleVersionsStillBookable;
|
|
39
|
-
private normalizeCreateData;
|
|
40
|
-
private normalizeUpdateData;
|
|
41
|
-
private resolveLineItems;
|
|
42
|
-
private defaultPlanLineItem;
|
|
43
|
-
private assertOpen;
|
|
44
|
-
private isExpired;
|
|
45
|
-
private dateIsAfterNow;
|
|
46
|
-
private isValidUntilExpired;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export { CheckoutOfferService as C };
|
package/dist/chunk-57V6ZTI6.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
__name
|
|
3
|
-
} from "./chunk-SHUYVCID.js";
|
|
4
|
-
|
|
5
|
-
// src/errors/coded-error.ts
|
|
6
|
-
import { ERROR_MESSAGES_EN, formatErrorMessage } from "@saasicat/core";
|
|
7
|
-
function codedError(code, params) {
|
|
8
|
-
const message = formatErrorMessage(ERROR_MESSAGES_EN[code], params ?? {});
|
|
9
|
-
return params ? {
|
|
10
|
-
code,
|
|
11
|
-
message,
|
|
12
|
-
params
|
|
13
|
-
} : {
|
|
14
|
-
code,
|
|
15
|
-
message
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
__name(codedError, "codedError");
|
|
19
|
-
|
|
20
|
-
export {
|
|
21
|
-
codedError
|
|
22
|
-
};
|
package/dist/chunk-BSK6YBLI.js
DELETED
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
__name
|
|
3
|
-
} from "./chunk-SHUYVCID.js";
|
|
4
|
-
|
|
5
|
-
// src/checkout-offer/discount-line-items.ts
|
|
6
|
-
function appendImplicitDiscountLineItem(input) {
|
|
7
|
-
const lineItems = input.lineItems.map((item) => cloneCheckoutOfferLineItem(item));
|
|
8
|
-
const discountNet = roundMoney(input.priceBreakdown.regularNet - input.priceBreakdown.effectiveNet);
|
|
9
|
-
if (lineItems.some((item) => item.kind === "discount" && !isGeneratedDiscount(item))) {
|
|
10
|
-
return lineItems;
|
|
11
|
-
}
|
|
12
|
-
const lineItemsWithoutGeneratedDiscount = lineItems.filter((item) => !isGeneratedDiscount(item));
|
|
13
|
-
if (discountNet <= 0) {
|
|
14
|
-
return lineItemsWithoutGeneratedDiscount;
|
|
15
|
-
}
|
|
16
|
-
return [
|
|
17
|
-
...lineItemsWithoutGeneratedDiscount,
|
|
18
|
-
createDiscountLineItem(input, discountNet)
|
|
19
|
-
];
|
|
20
|
-
}
|
|
21
|
-
__name(appendImplicitDiscountLineItem, "appendImplicitDiscountLineItem");
|
|
22
|
-
function cloneCheckoutOfferLineItem(item) {
|
|
23
|
-
return {
|
|
24
|
-
...item,
|
|
25
|
-
featuresSnapshot: [
|
|
26
|
-
...item.featuresSnapshot ?? []
|
|
27
|
-
],
|
|
28
|
-
quotaEffectsSnapshot: {
|
|
29
|
-
...item.quotaEffectsSnapshot ?? {}
|
|
30
|
-
},
|
|
31
|
-
metadata: cloneRecord(item.metadata)
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
__name(cloneCheckoutOfferLineItem, "cloneCheckoutOfferLineItem");
|
|
35
|
-
function createDiscountLineItem(input, discountNet) {
|
|
36
|
-
const promoCode = input.promoCodeSnapshot ?? null;
|
|
37
|
-
const firstPromotion = input.promotionSnapshots?.[0] ?? null;
|
|
38
|
-
const discountGross = roundMoney(discountNet * (1 + input.priceBreakdown.vatRate));
|
|
39
|
-
return {
|
|
40
|
-
kind: "discount",
|
|
41
|
-
sourceKey: promoCode?.code ?? firstPromotion?.id ?? "price-discount",
|
|
42
|
-
sourceVersionId: null,
|
|
43
|
-
titleSnapshot: promoCode?.label ?? firstPromotion?.label ?? "Discount",
|
|
44
|
-
descriptionSnapshot: promoCode ? `Promo-Code ${promoCode.code}` : null,
|
|
45
|
-
quantity: 1,
|
|
46
|
-
unit: null,
|
|
47
|
-
priceNet: -discountNet,
|
|
48
|
-
priceGross: -discountGross,
|
|
49
|
-
billingCycle: input.billingCycle,
|
|
50
|
-
featuresSnapshot: [],
|
|
51
|
-
quotaEffectsSnapshot: {},
|
|
52
|
-
metadata: {
|
|
53
|
-
generated: true,
|
|
54
|
-
source: promoCode ? "promo_code" : firstPromotion ? "promotion" : "price_breakdown",
|
|
55
|
-
discountNet,
|
|
56
|
-
discountGross,
|
|
57
|
-
promotionSnapshots: cloneArray(input.promotionSnapshots ?? []),
|
|
58
|
-
promoCodeSnapshot: cloneJsonValue(promoCode)
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
__name(createDiscountLineItem, "createDiscountLineItem");
|
|
63
|
-
function roundMoney(value) {
|
|
64
|
-
return Math.round((value + Number.EPSILON) * 100) / 100;
|
|
65
|
-
}
|
|
66
|
-
__name(roundMoney, "roundMoney");
|
|
67
|
-
function isGeneratedDiscount(item) {
|
|
68
|
-
return item.kind === "discount" && item.metadata?.generated === true;
|
|
69
|
-
}
|
|
70
|
-
__name(isGeneratedDiscount, "isGeneratedDiscount");
|
|
71
|
-
function cloneRecord(value) {
|
|
72
|
-
if (!value) return null;
|
|
73
|
-
return cloneJsonValue(value);
|
|
74
|
-
}
|
|
75
|
-
__name(cloneRecord, "cloneRecord");
|
|
76
|
-
function cloneArray(value) {
|
|
77
|
-
return cloneJsonValue(value);
|
|
78
|
-
}
|
|
79
|
-
__name(cloneArray, "cloneArray");
|
|
80
|
-
function cloneJsonValue(value) {
|
|
81
|
-
return value == null ? value : JSON.parse(JSON.stringify(value));
|
|
82
|
-
}
|
|
83
|
-
__name(cloneJsonValue, "cloneJsonValue");
|
|
84
|
-
|
|
85
|
-
export {
|
|
86
|
-
appendImplicitDiscountLineItem
|
|
87
|
-
};
|