@saasicat/nest 0.8.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/dist/_entries.cjs +17678 -0
  2. package/dist/admin/index.cjs +4 -1274
  3. package/dist/admin/index.d.cts +10 -171
  4. package/dist/admin/index.d.ts +10 -171
  5. package/dist/admin/index.js +13 -4
  6. package/dist/admin-resources.module-BZN_yBFj.d.cts +40 -0
  7. package/dist/admin-resources.module-Cms8MY6h.d.ts +40 -0
  8. package/dist/admin-stats.module-15ac5KY3.d.ts +201 -0
  9. package/dist/admin-stats.module-v4SVvWzj.d.cts +201 -0
  10. package/dist/billing/index.cjs +4 -5128
  11. package/dist/billing/index.d.cts +8 -719
  12. package/dist/billing/index.d.ts +8 -719
  13. package/dist/billing/index.js +7 -10
  14. package/dist/catalog/index.cjs +4 -5624
  15. package/dist/catalog/index.d.cts +7 -427
  16. package/dist/catalog/index.d.ts +7 -427
  17. package/dist/catalog/index.js +14 -12
  18. package/dist/catalog.module-BKObceo0.d.ts +103 -0
  19. package/dist/catalog.module-Dw2Hrbyu.d.cts +103 -0
  20. package/dist/checkout-offer/index.cjs +4 -807
  21. package/dist/checkout-offer/index.d.cts +5 -84
  22. package/dist/checkout-offer/index.d.ts +5 -84
  23. package/dist/checkout-offer/index.js +3 -2
  24. package/dist/checkout-offer.module-Y0hDOVrq.d.ts +85 -0
  25. package/dist/checkout-offer.module-ZYF5IsDY.d.cts +85 -0
  26. package/dist/{chunk-5DDCSGZC.js → chunk-33TP26MR.js} +144 -356
  27. package/dist/{chunk-CK54YKVK.js → chunk-75JABGZK.js} +16 -16
  28. package/dist/{chunk-HRU3CP57.js → chunk-BOADBIGB.js} +1 -1
  29. package/dist/{chunk-ZLUGQE5D.js → chunk-E7AJ42AB.js} +8 -8
  30. package/dist/{chunk-6LP7CDS2.js → chunk-F3VV6EXG.js} +18 -13
  31. package/dist/{chunk-PLDHI6NA.js → chunk-FVT7KTUI.js} +258 -3
  32. package/dist/{chunk-RZU4HIAN.js → chunk-GBDUH6DO.js} +26 -23
  33. package/dist/{chunk-K3OPNVFR.js → chunk-HBFU5AN3.js} +5 -9
  34. package/dist/chunk-HWGIMNWR.js +0 -0
  35. package/dist/chunk-IRWZC3GC.js +755 -0
  36. package/dist/chunk-L4KTQ6CL.js +20 -0
  37. package/dist/{chunk-T5SXXAKG.js → chunk-LZHLGUQI.js} +1 -1
  38. package/dist/{chunk-YHHE4KDA.js → chunk-PUXLPUVH.js} +351 -21
  39. package/dist/chunk-TXDH4FUA.js +211 -0
  40. package/dist/chunk-UF53DWWR.js +0 -0
  41. package/dist/{chunk-AJ3EPELS.js → chunk-V34AA7C7.js} +1 -1
  42. package/dist/chunk-WJ6BMDL3.js +313 -0
  43. package/dist/{chunk-M6CZQYPY.js → chunk-Z3FWN3HJ.js} +2 -2
  44. package/dist/discovery/index.cjs +4 -588
  45. package/dist/discovery/index.js +3 -3
  46. package/dist/{enforce-quota.interceptor-cv7r80VM.d.cts → enforce-quota.interceptor-BhkX5nq2.d.cts} +127 -12
  47. package/dist/{enforce-quota.interceptor-Dj1Kusr5.d.ts → enforce-quota.interceptor-CcqZc0Yu.d.ts} +127 -12
  48. package/dist/entitlement/index.cjs +4 -780
  49. package/dist/entitlement/index.d.cts +3 -1
  50. package/dist/entitlement/index.d.ts +3 -1
  51. package/dist/entitlement/index.js +2 -3
  52. package/dist/index.cjs +4 -14975
  53. package/dist/index.d.cts +22 -54
  54. package/dist/index.d.ts +22 -54
  55. package/dist/index.js +88 -369
  56. package/dist/module-CSN8j8Tp.d.cts +39 -0
  57. package/dist/module-DgYJur6f.d.ts +39 -0
  58. package/dist/plan-versions.service-BB36Q1bg.d.ts +329 -0
  59. package/dist/plan-versions.service-CUR2Whyr.d.cts +329 -0
  60. package/dist/platform/index.cjs +4 -2779
  61. package/dist/platform/index.d.cts +50 -8
  62. package/dist/platform/index.d.ts +50 -8
  63. package/dist/platform/index.js +116 -12
  64. package/dist/promo/index.cjs +4 -995
  65. package/dist/promo/index.d.cts +48 -46
  66. package/dist/promo/index.d.ts +48 -46
  67. package/dist/promo/index.js +10 -2
  68. package/dist/rate-limit.guard-dntqAlfZ.d.cts +19 -0
  69. package/dist/rate-limit.guard-dntqAlfZ.d.ts +19 -0
  70. package/dist/registration/index.cjs +4 -1655
  71. package/dist/registration/index.js +1 -1
  72. package/dist/setup.service-BPwJ7My_.d.cts +45 -0
  73. package/dist/setup.service-D2mrdDDB.d.ts +45 -0
  74. package/dist/subscription-bundle-preview.service-BkJXHAeP.d.cts +438 -0
  75. package/dist/subscription-bundle-preview.service-DBbrE_cw.d.ts +438 -0
  76. package/dist/subscription-bundles.module-BQmoozm5.d.ts +291 -0
  77. package/dist/subscription-bundles.module-DCpV-Pb5.d.cts +291 -0
  78. package/dist/subscription-contract/index.cjs +4 -471
  79. package/dist/subscription-contract/index.d.cts +5 -13
  80. package/dist/subscription-contract/index.d.ts +5 -13
  81. package/dist/subscription-contract.module-CG9fPKAr.d.cts +14 -0
  82. package/dist/subscription-contract.module-CVebZzHR.d.ts +14 -0
  83. package/dist/testing/index.cjs +4 -3756
  84. package/dist/testing/index.d.cts +9 -4
  85. package/dist/testing/index.d.ts +9 -4
  86. package/dist/testing/index.js +13 -7
  87. package/package.json +5 -5
  88. package/dist/admin-manifest.config-DyrQNT7M.d.cts +0 -10
  89. package/dist/admin-manifest.config-DyrQNT7M.d.ts +0 -10
  90. package/dist/admin-manifest.service-Cp6uwvmt.d.cts +0 -33
  91. package/dist/admin-manifest.service-UGgzR1x-.d.ts +0 -33
  92. package/dist/chunk-52UTQRD3.js +0 -326
  93. package/dist/chunk-N3WANKSA.js +0 -20
  94. package/dist/chunk-Q53N43LQ.js +0 -13
  95. /package/dist/{chunk-2FR6ZL7R.js → chunk-DBZGV3HC.js} +0 -0
@@ -35,22 +35,22 @@ function slugify(name) {
35
35
  __name(slugify, "slugify");
36
36
 
37
37
  // src/registration/tokens.ts
38
- var PENDING_REGISTRATION_REPOSITORY_TOKEN = /* @__PURE__ */ Symbol("PENDING_REGISTRATION_REPOSITORY");
39
- var REGISTRATION_OTP_DELIVERY_TOKEN = /* @__PURE__ */ Symbol("REGISTRATION_OTP_DELIVERY");
40
- var USER_ACCOUNT_LOOKUP_TOKEN = /* @__PURE__ */ Symbol("USER_ACCOUNT_LOOKUP");
41
- var SLUG_AVAILABILITY_CHECK_TOKEN = /* @__PURE__ */ Symbol("SLUG_AVAILABILITY_CHECK");
42
- var PASSWORD_HASHER_TOKEN = /* @__PURE__ */ Symbol("PASSWORD_HASHER");
43
- var PLAN_CATALOG_LOOKUP_TOKEN = /* @__PURE__ */ Symbol("PLAN_CATALOG_LOOKUP");
44
- var PAYMENT_PROVIDER_TOKEN = /* @__PURE__ */ Symbol("PAYMENT_PROVIDER");
45
- var PAYMENT_EVENT_LOG_TOKEN = /* @__PURE__ */ Symbol("PAYMENT_EVENT_LOG");
46
- var ACTIVATION_ORCHESTRATOR_TOKEN = /* @__PURE__ */ Symbol("ACTIVATION_ORCHESTRATOR");
47
- var REGISTRATION_AUDIT_LOGGER_TOKEN = /* @__PURE__ */ Symbol("REGISTRATION_AUDIT_LOGGER");
48
- var REGISTRATION_RESUME_TOKEN_SIGNER_TOKEN = /* @__PURE__ */ Symbol("REGISTRATION_RESUME_TOKEN_SIGNER");
49
- var REGISTRATION_RESUME_DELIVERY_TOKEN = /* @__PURE__ */ Symbol("REGISTRATION_RESUME_DELIVERY");
50
- var REGISTRATION_RESUME_BASE_URL_TOKEN = /* @__PURE__ */ Symbol("REGISTRATION_RESUME_BASE_URL");
51
- var REGISTRATION_CONFIGURATOR_LOOKUP_TOKEN = /* @__PURE__ */ Symbol("REGISTRATION_CONFIGURATOR_LOOKUP");
52
- var REGISTRATION_PROMO_PREVIEW_TOKEN = /* @__PURE__ */ Symbol("REGISTRATION_PROMO_PREVIEW");
53
- var REGISTRATION_CONFIG_TOKEN = /* @__PURE__ */ Symbol("REGISTRATION_CONFIG");
38
+ var PENDING_REGISTRATION_REPOSITORY_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/PendingRegistrationRepository");
39
+ var REGISTRATION_OTP_DELIVERY_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/RegistrationOtpDelivery");
40
+ var USER_ACCOUNT_LOOKUP_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/UserAccountLookup");
41
+ var SLUG_AVAILABILITY_CHECK_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/SlugAvailabilityCheck");
42
+ var PASSWORD_HASHER_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/PasswordHasher");
43
+ var PLAN_CATALOG_LOOKUP_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/PlanCatalogLookup");
44
+ var PAYMENT_PROVIDER_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/PaymentProvider");
45
+ var PAYMENT_EVENT_LOG_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/PaymentEventLog");
46
+ var ACTIVATION_ORCHESTRATOR_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/ActivationOrchestrator");
47
+ var REGISTRATION_AUDIT_LOGGER_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/RegistrationAuditLogger");
48
+ var REGISTRATION_RESUME_TOKEN_SIGNER_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/RegistrationResumeTokenSigner");
49
+ var REGISTRATION_RESUME_DELIVERY_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/RegistrationResumeDelivery");
50
+ var REGISTRATION_RESUME_BASE_URL_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/RegistrationResumeBaseUrl");
51
+ var REGISTRATION_CONFIGURATOR_LOOKUP_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/RegistrationConfiguratorLookup");
52
+ var REGISTRATION_PROMO_PREVIEW_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/RegistrationPromoPreview");
53
+ var REGISTRATION_CONFIG_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/RegistrationConfig");
54
54
 
55
55
  // src/registration/pending-registration.service.ts
56
56
  import { BadRequestException, Inject, Injectable, Logger, NotFoundException, Optional } from "@nestjs/common";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  DiscoveryScanner
3
- } from "./chunk-M6CZQYPY.js";
3
+ } from "./chunk-Z3FWN3HJ.js";
4
4
  import {
5
5
  DEFINES_QUOTA_KEY,
6
6
  DISCOVERY_SNAPSHOT_TOKEN,
@@ -63,14 +63,14 @@ function buildLabel(code, cycle) {
63
63
  __name(buildLabel, "buildLabel");
64
64
 
65
65
  // src/promo/tokens.ts
66
- var PROMO_CODE_REPOSITORY_TOKEN = /* @__PURE__ */ Symbol("PROMO_CODE_REPOSITORY");
67
- var PROMO_CODE_REDEMPTION_REPOSITORY_TOKEN = /* @__PURE__ */ Symbol("PROMO_CODE_REDEMPTION_REPOSITORY");
68
- var PROMO_CODE_VALIDATION_LOG_REPOSITORY_TOKEN = /* @__PURE__ */ Symbol("PROMO_CODE_VALIDATION_LOG_REPOSITORY");
69
- var PROMO_FIRST_TIME_CUSTOMER_CHECK_TOKEN = /* @__PURE__ */ Symbol("PROMO_FIRST_TIME_CUSTOMER_CHECK");
70
- var PROMO_SUBSCRIPTION_LOOKUP_TOKEN = /* @__PURE__ */ Symbol("PROMO_SUBSCRIPTION_LOOKUP");
71
- var PROMO_REVENUE_DEDUCTION_AGGREGATOR_TOKEN = /* @__PURE__ */ Symbol("PROMO_REVENUE_DEDUCTION_AGGREGATOR");
72
- var PROMO_TRANSACTION_RUNNER_TOKEN = /* @__PURE__ */ Symbol("PROMO_TRANSACTION_RUNNER");
73
- var PROMO_SERVICE_CONFIG_TOKEN = /* @__PURE__ */ Symbol("PROMO_SERVICE_CONFIG");
66
+ var PROMO_CODE_REPOSITORY_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/PromoCodeRepository");
67
+ var PROMO_CODE_REDEMPTION_REPOSITORY_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/PromoCodeRedemptionRepository");
68
+ var PROMO_CODE_VALIDATION_LOG_REPOSITORY_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/PromoCodeValidationLogRepository");
69
+ var PROMO_FIRST_TIME_CUSTOMER_CHECK_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/PromoFirstTimeCustomerCheck");
70
+ var PROMO_SUBSCRIPTION_LOOKUP_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/PromoSubscriptionLookup");
71
+ var PROMO_REVENUE_DEDUCTION_AGGREGATOR_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/PromoRevenueDeductionAggregator");
72
+ var PROMO_TRANSACTION_RUNNER_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/PromoTransactionRunner");
73
+ var PROMO_SERVICE_CONFIG_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/PromoServiceConfig");
74
74
 
75
75
  // src/promo/service.ts
76
76
  import { BadRequestException, Inject, Injectable, NotFoundException } from "@nestjs/common";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  PromoCodesService
3
- } from "./chunk-ZLUGQE5D.js";
3
+ } from "./chunk-E7AJ42AB.js";
4
4
  import {
5
5
  SubscriptionContractService
6
6
  } from "./chunk-2PNX2QL2.js";
@@ -16,9 +16,6 @@ import {
16
16
  USER_EMAIL_RESOLVER_TOKEN,
17
17
  USER_ID_RESOLVER_TOKEN
18
18
  } from "./chunk-WPUVJRIN.js";
19
- import {
20
- REQUIRE_FEATURE_KEY
21
- } from "./chunk-Q53N43LQ.js";
22
19
  import {
23
20
  AdminAuditService
24
21
  } from "./chunk-E56W4U2P.js";
@@ -28,7 +25,7 @@ import {
28
25
  SUBSCRIPTION_BUNDLE_REPOSITORY_TOKEN,
29
26
  isLimitExceededError,
30
27
  toEffectiveLimitsSnapshot
31
- } from "./chunk-RZU4HIAN.js";
28
+ } from "./chunk-GBDUH6DO.js";
32
29
  import {
33
30
  PLAN_CATALOG_TOKEN,
34
31
  findPlan,
@@ -45,7 +42,7 @@ import {
45
42
  BUNDLE_REPOSITORY_TOKEN,
46
43
  CATALOG_ENTRY_REPOSITORY_TOKEN,
47
44
  PLAN_REPOSITORY_TOKEN
48
- } from "./chunk-N3WANKSA.js";
45
+ } from "./chunk-L4KTQ6CL.js";
49
46
  import {
50
47
  asProvider
51
48
  } from "./chunk-SABTXESR.js";
@@ -171,8 +168,13 @@ function computeNextPeriod(sub, now) {
171
168
  }
172
169
  __name(computeNextPeriod, "computeNextPeriod");
173
170
 
171
+ // src/billing/require-feature.decorator.ts
172
+ import { SetMetadata } from "@nestjs/common";
173
+ var REQUIRE_FEATURE_KEY = "require-feature";
174
+ var RequireFeature = /* @__PURE__ */ __name((...features) => SetMetadata(REQUIRE_FEATURE_KEY, features), "RequireFeature");
175
+
174
176
  // src/billing/feature-guard.tokens.ts
175
- var FEATURE_GUARD_CONFIG_TOKEN = /* @__PURE__ */ Symbol("FEATURE_GUARD_CONFIG");
177
+ var FEATURE_GUARD_CONFIG_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/FeatureGuardConfig");
176
178
 
177
179
  // src/billing/feature.guard.ts
178
180
  import { ForbiddenException, Inject, Injectable, Logger, Optional } from "@nestjs/common";
@@ -295,10 +297,10 @@ import { Inject as Inject2, Injectable as Injectable2, Optional as Optional2 } f
295
297
  import { buildFeatureRequiresIndex, collectUnsatisfiedRequires } from "@saasicat/types";
296
298
 
297
299
  // src/billing/public-catalog.tokens.ts
298
- var PUBLIC_CATALOG_PROJECT_KEY_TOKEN = /* @__PURE__ */ Symbol("PUBLIC_CATALOG_PROJECT_KEY");
299
- var PUBLIC_CATALOG_BUNDLE_REPOSITORY_TOKEN = /* @__PURE__ */ Symbol("PUBLIC_CATALOG_BUNDLE_REPOSITORY");
300
- var PUBLIC_CATALOG_MARKETING_REPOSITORY_TOKEN = /* @__PURE__ */ Symbol("PUBLIC_CATALOG_MARKETING_REPOSITORY");
301
- var PUBLIC_CATALOG_CATALOG_ENTRY_REPOSITORY_TOKEN = /* @__PURE__ */ Symbol("PUBLIC_CATALOG_CATALOG_ENTRY_REPOSITORY");
300
+ var PUBLIC_CATALOG_PROJECT_KEY_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/PublicCatalogProjectKey");
301
+ var PUBLIC_CATALOG_BUNDLE_REPOSITORY_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/PublicCatalogBundleRepository");
302
+ var PUBLIC_CATALOG_MARKETING_REPOSITORY_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/PublicCatalogMarketingRepository");
303
+ var PUBLIC_CATALOG_CATALOG_ENTRY_REPOSITORY_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/PublicCatalogCatalogEntryRepository");
302
304
 
303
305
  // src/billing/catalog-bundle-upsell-resolver.ts
304
306
  function _ts_decorate2(decorators, target, key, desc) {
@@ -552,7 +554,7 @@ function _ts_param3(paramIndex, decorator) {
552
554
  };
553
555
  }
554
556
  __name(_ts_param3, "_ts_param");
555
- var PLAN_CATALOG_IMPORT_SINK_TOKEN = /* @__PURE__ */ Symbol("PLAN_CATALOG_IMPORT_SINK");
557
+ var PLAN_CATALOG_IMPORT_SINK_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/PlanCatalogImportSink");
556
558
  var IMPORT_CHANGE_NOTE = "Initial import from saas.yaml (SPEC_V2 \xA711.1 M6 Pack 2c)";
557
559
  var PlanCatalogImporterService = class {
558
560
  static {
@@ -2560,7 +2562,8 @@ var TenantBillingModule = class _TenantBillingModule {
2560
2562
  ] : [],
2561
2563
  ...hasContractFreeze ? [
2562
2564
  CONTRACT_FREEZE_PORT_TOKEN
2563
- ] : []
2565
+ ] : [],
2566
+ ...options.extraExports ?? []
2564
2567
  ]
2565
2568
  };
2566
2569
  }
@@ -3270,6 +3273,8 @@ export {
3270
3273
  decideRenewal,
3271
3274
  clearPendingPlanVersionFields,
3272
3275
  computeNextPeriod,
3276
+ REQUIRE_FEATURE_KEY,
3277
+ RequireFeature,
3273
3278
  FEATURE_GUARD_CONFIG_TOKEN,
3274
3279
  UPSELL_OFFER_RESOLVER_TOKEN,
3275
3280
  UPSELL_OFFER_CURRENCY_TOKEN,
@@ -296,6 +296,7 @@ var AdminModule = class _AdminModule {
296
296
  return {
297
297
  module: _AdminModule,
298
298
  global: options.global ?? false,
299
+ imports: options.imports ?? [],
299
300
  providers,
300
301
  exports: [
301
302
  MFA_PORT_TOKEN,
@@ -315,7 +316,7 @@ AdminModule = _ts_decorate5([
315
316
  ], AdminModule);
316
317
 
317
318
  // src/admin/admin-manifest.config.ts
318
- var ADMIN_MANIFEST_CONFIG = /* @__PURE__ */ Symbol("ADMIN_MANIFEST_CONFIG");
319
+ var ADMIN_MANIFEST_CONFIG = /* @__PURE__ */ Symbol.for("saas-platform/AdminManifestConfig");
319
320
 
320
321
  // src/admin/admin-manifest.service.ts
321
322
  import { Inject as Inject4, Injectable as Injectable5, Logger as Logger3, Optional } from "@nestjs/common";
@@ -337,7 +338,7 @@ function _ts_param4(paramIndex, decorator) {
337
338
  };
338
339
  }
339
340
  __name(_ts_param4, "_ts_param");
340
- var PLATFORM_CORE_CONTRIBUTION_TOKEN = /* @__PURE__ */ Symbol("PLATFORM_CORE_CONTRIBUTION");
341
+ var PLATFORM_CORE_CONTRIBUTION_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/PlatformCoreContribution");
341
342
  var AdminManifestService = class _AdminManifestService {
342
343
  static {
343
344
  __name(this, "AdminManifestService");
@@ -925,6 +926,256 @@ AdminManifestModule = _ts_decorate8([
925
926
  Module2({})
926
927
  ], AdminManifestModule);
927
928
 
929
+ // src/admin/admin-resources.module.ts
930
+ import { Body, Controller as Controller3, Get as Get3, Inject as Inject7, Injectable as Injectable6, Module as Module3, NotFoundException, Param, Post as Post2, Query, Req, UseGuards as UseGuards2 } from "@nestjs/common";
931
+ import { IsOptional, IsString, MaxLength } from "class-validator";
932
+ function _ts_decorate9(decorators, target, key, desc) {
933
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
934
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
935
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
936
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
937
+ }
938
+ __name(_ts_decorate9, "_ts_decorate");
939
+ function _ts_metadata7(k, v) {
940
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
941
+ }
942
+ __name(_ts_metadata7, "_ts_metadata");
943
+ function _ts_param7(paramIndex, decorator) {
944
+ return function(target, key) {
945
+ decorator(target, key, paramIndex);
946
+ };
947
+ }
948
+ __name(_ts_param7, "_ts_param");
949
+ var ADMIN_RESOURCES_PORT_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/AdminResourcesPort");
950
+ var SuspendTenantDto = class {
951
+ static {
952
+ __name(this, "SuspendTenantDto");
953
+ }
954
+ reason;
955
+ };
956
+ _ts_decorate9([
957
+ IsOptional(),
958
+ IsString(),
959
+ MaxLength(500),
960
+ _ts_metadata7("design:type", String)
961
+ ], SuspendTenantDto.prototype, "reason", void 0);
962
+ var AdminResourcesService = class {
963
+ static {
964
+ __name(this, "AdminResourcesService");
965
+ }
966
+ resources;
967
+ audit;
968
+ constructor(resources, audit) {
969
+ this.resources = resources;
970
+ this.audit = audit;
971
+ }
972
+ listTenants(filter) {
973
+ return this.resources.listTenants(filter);
974
+ }
975
+ async getTenantDetail(slug) {
976
+ const tenant = await this.resources.getTenantDetail(slug);
977
+ if (!tenant) throw new NotFoundException(`Tenant ${slug} not found`);
978
+ return tenant;
979
+ }
980
+ listUsers(filter) {
981
+ return this.resources.listUsers(filter);
982
+ }
983
+ listAudit(filter) {
984
+ return this.resources.listAudit(filter);
985
+ }
986
+ listSubscriptions() {
987
+ return this.resources.listSubscriptions();
988
+ }
989
+ suspendTenant(slug, reason, actor) {
990
+ return this.setTenantActive(slug, false, "PAST_DUE", actor, {
991
+ action: "TENANT_SUSPEND",
992
+ reason: reason ?? ""
993
+ });
994
+ }
995
+ reactivateTenant(slug, actor) {
996
+ return this.setTenantActive(slug, true, "ACTIVE", actor, {
997
+ action: "TENANT_REACTIVATE",
998
+ reason: ""
999
+ });
1000
+ }
1001
+ async setTenantActive(slug, active, subscriptionStatus, actor, audit) {
1002
+ const result = await this.resources.setTenantActive(slug, active, subscriptionStatus);
1003
+ if (!result) throw new NotFoundException(`Tenant ${slug} not found`);
1004
+ await this.audit.log({
1005
+ actor,
1006
+ entity: "Tenant",
1007
+ entityId: result.id,
1008
+ action: audit.action,
1009
+ changes: {
1010
+ slug,
1011
+ reason: audit.reason
1012
+ }
1013
+ });
1014
+ return result;
1015
+ }
1016
+ };
1017
+ AdminResourcesService = _ts_decorate9([
1018
+ Injectable6(),
1019
+ _ts_param7(0, Inject7(ADMIN_RESOURCES_PORT_TOKEN)),
1020
+ _ts_param7(1, Inject7(AdminAuditService)),
1021
+ _ts_metadata7("design:type", Function),
1022
+ _ts_metadata7("design:paramtypes", [
1023
+ typeof AdminResourcesPort === "undefined" ? Object : AdminResourcesPort,
1024
+ typeof AdminAuditService === "undefined" ? Object : AdminAuditService
1025
+ ])
1026
+ ], AdminResourcesService);
1027
+ function actorFromRequest(request) {
1028
+ const userId = request.user?.id ?? request.user?.userId ?? "unknown";
1029
+ return {
1030
+ userId,
1031
+ email: request.user?.email ?? `${userId}@unknown`,
1032
+ source: "web",
1033
+ context: request.user?.sessionId ?? "unknown"
1034
+ };
1035
+ }
1036
+ __name(actorFromRequest, "actorFromRequest");
1037
+ function buildAdminResourcesController(guards) {
1038
+ let GeneratedAdminResourcesController = class GeneratedAdminResourcesController {
1039
+ static {
1040
+ __name(this, "GeneratedAdminResourcesController");
1041
+ }
1042
+ resources;
1043
+ constructor(resources) {
1044
+ this.resources = resources;
1045
+ }
1046
+ listTenants(query) {
1047
+ return this.resources.listTenants(query);
1048
+ }
1049
+ getTenant(slug) {
1050
+ return this.resources.getTenantDetail(slug);
1051
+ }
1052
+ suspendTenant(request, slug, dto) {
1053
+ return this.resources.suspendTenant(slug, dto.reason, actorFromRequest(request));
1054
+ }
1055
+ reactivateTenant(request, slug) {
1056
+ return this.resources.reactivateTenant(slug, actorFromRequest(request));
1057
+ }
1058
+ listUsers(query) {
1059
+ return this.resources.listUsers(query);
1060
+ }
1061
+ listAudit(query) {
1062
+ return this.resources.listAudit({
1063
+ actor: query.actor,
1064
+ action: query.action,
1065
+ entity: query.entity,
1066
+ since: query.since,
1067
+ limit: query.limit ? Number.parseInt(query.limit, 10) : void 0
1068
+ });
1069
+ }
1070
+ listSubscriptions() {
1071
+ return this.resources.listSubscriptions();
1072
+ }
1073
+ };
1074
+ _ts_decorate9([
1075
+ Get3("tenants"),
1076
+ _ts_param7(0, Query()),
1077
+ _ts_metadata7("design:type", Function),
1078
+ _ts_metadata7("design:paramtypes", [
1079
+ Object
1080
+ ]),
1081
+ _ts_metadata7("design:returntype", typeof Promise === "undefined" ? Object : Promise)
1082
+ ], GeneratedAdminResourcesController.prototype, "listTenants", null);
1083
+ _ts_decorate9([
1084
+ Get3("tenants/:slug"),
1085
+ _ts_param7(0, Param("slug")),
1086
+ _ts_metadata7("design:type", Function),
1087
+ _ts_metadata7("design:paramtypes", [
1088
+ String
1089
+ ]),
1090
+ _ts_metadata7("design:returntype", typeof Promise === "undefined" ? Object : Promise)
1091
+ ], GeneratedAdminResourcesController.prototype, "getTenant", null);
1092
+ _ts_decorate9([
1093
+ Post2("tenants/:slug/suspend"),
1094
+ _ts_param7(0, Req()),
1095
+ _ts_param7(1, Param("slug")),
1096
+ _ts_param7(2, Body()),
1097
+ _ts_metadata7("design:type", Function),
1098
+ _ts_metadata7("design:paramtypes", [
1099
+ typeof AdminRequest === "undefined" ? Object : AdminRequest,
1100
+ String,
1101
+ typeof SuspendTenantDto === "undefined" ? Object : SuspendTenantDto
1102
+ ]),
1103
+ _ts_metadata7("design:returntype", typeof Promise === "undefined" ? Object : Promise)
1104
+ ], GeneratedAdminResourcesController.prototype, "suspendTenant", null);
1105
+ _ts_decorate9([
1106
+ Post2("tenants/:slug/reactivate"),
1107
+ _ts_param7(0, Req()),
1108
+ _ts_param7(1, Param("slug")),
1109
+ _ts_metadata7("design:type", Function),
1110
+ _ts_metadata7("design:paramtypes", [
1111
+ typeof AdminRequest === "undefined" ? Object : AdminRequest,
1112
+ String
1113
+ ]),
1114
+ _ts_metadata7("design:returntype", typeof Promise === "undefined" ? Object : Promise)
1115
+ ], GeneratedAdminResourcesController.prototype, "reactivateTenant", null);
1116
+ _ts_decorate9([
1117
+ Get3("users"),
1118
+ _ts_param7(0, Query()),
1119
+ _ts_metadata7("design:type", Function),
1120
+ _ts_metadata7("design:paramtypes", [
1121
+ Object
1122
+ ]),
1123
+ _ts_metadata7("design:returntype", typeof Promise === "undefined" ? Object : Promise)
1124
+ ], GeneratedAdminResourcesController.prototype, "listUsers", null);
1125
+ _ts_decorate9([
1126
+ Get3("audit"),
1127
+ _ts_param7(0, Query()),
1128
+ _ts_metadata7("design:type", Function),
1129
+ _ts_metadata7("design:paramtypes", [
1130
+ Object
1131
+ ]),
1132
+ _ts_metadata7("design:returntype", typeof Promise === "undefined" ? Object : Promise)
1133
+ ], GeneratedAdminResourcesController.prototype, "listAudit", null);
1134
+ _ts_decorate9([
1135
+ Get3("subscriptions"),
1136
+ _ts_metadata7("design:type", Function),
1137
+ _ts_metadata7("design:paramtypes", []),
1138
+ _ts_metadata7("design:returntype", typeof Promise === "undefined" ? Object : Promise)
1139
+ ], GeneratedAdminResourcesController.prototype, "listSubscriptions", null);
1140
+ GeneratedAdminResourcesController = _ts_decorate9([
1141
+ Controller3("admin"),
1142
+ UseGuards2(...guards),
1143
+ _ts_param7(0, Inject7(AdminResourcesService)),
1144
+ _ts_metadata7("design:type", Function),
1145
+ _ts_metadata7("design:paramtypes", [
1146
+ typeof AdminResourcesService === "undefined" ? Object : AdminResourcesService
1147
+ ])
1148
+ ], GeneratedAdminResourcesController);
1149
+ return GeneratedAdminResourcesController;
1150
+ }
1151
+ __name(buildAdminResourcesController, "buildAdminResourcesController");
1152
+ var AdminResourcesModule = class _AdminResourcesModule {
1153
+ static {
1154
+ __name(this, "AdminResourcesModule");
1155
+ }
1156
+ static forRoot(options) {
1157
+ return {
1158
+ module: _AdminResourcesModule,
1159
+ global: options.global ?? false,
1160
+ imports: options.imports ?? [],
1161
+ controllers: [
1162
+ buildAdminResourcesController(options.guards)
1163
+ ],
1164
+ providers: [
1165
+ asProvider(ADMIN_RESOURCES_PORT_TOKEN, options.resources),
1166
+ AdminResourcesService
1167
+ ],
1168
+ exports: [
1169
+ ADMIN_RESOURCES_PORT_TOKEN,
1170
+ AdminResourcesService
1171
+ ]
1172
+ };
1173
+ }
1174
+ };
1175
+ AdminResourcesModule = _ts_decorate9([
1176
+ Module3({})
1177
+ ], AdminResourcesModule);
1178
+
928
1179
  export {
929
1180
  SuperAdminGuard,
930
1181
  MfaService,
@@ -938,5 +1189,9 @@ export {
938
1189
  AdminManifestService,
939
1190
  AdminPublicBootController,
940
1191
  PLATFORM_CORE_MANIFEST_CONTRIBUTION,
941
- AdminManifestModule
1192
+ AdminManifestModule,
1193
+ ADMIN_RESOURCES_PORT_TOKEN,
1194
+ SuspendTenantDto,
1195
+ AdminResourcesService,
1196
+ AdminResourcesModule
942
1197
  };
@@ -14,7 +14,7 @@ import {
14
14
  } from "./chunk-WKVBNTYC.js";
15
15
  import {
16
16
  BUNDLE_REPOSITORY_TOKEN
17
- } from "./chunk-N3WANKSA.js";
17
+ } from "./chunk-L4KTQ6CL.js";
18
18
  import {
19
19
  asProvider
20
20
  } from "./chunk-SABTXESR.js";
@@ -25,10 +25,6 @@ import {
25
25
  __name
26
26
  } from "./chunk-SHUYVCID.js";
27
27
 
28
- // src/billing/subscription-bundles.tokens.ts
29
- var SUBSCRIPTION_BUNDLE_REPOSITORY_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/SubscriptionBundleRepository");
30
- var SUBSCRIPTION_BUNDLE_CONFIG_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/SubscriptionBundleConfig");
31
-
32
28
  // src/entitlement/aggregation.ts
33
29
  function filterActiveSubscriptionBundles(bundles, now) {
34
30
  return bundles.filter((b) => b.canceledEffectiveAt === null || b.canceledEffectiveAt > now);
@@ -222,6 +218,24 @@ function assertNoReplacesCycle(index) {
222
218
  }
223
219
  __name(assertNoReplacesCycle, "assertNoReplacesCycle");
224
220
 
221
+ // src/entitlement/plan-resolution.ts
222
+ function resolveEntitlementPlan(input, config, now) {
223
+ if (input.isPilot && config.pilotEntitlementPlan !== void 0) {
224
+ return config.pilotEntitlementPlan;
225
+ }
226
+ if (input.status === "TRIAL") {
227
+ return input.trialEntitlementPlan ?? config.defaultTrialEntitlementPlan ?? input.plan;
228
+ }
229
+ if (input.status === "PENDING_SALES" && config.pendingSalesEntitlementPlan !== void 0) {
230
+ return config.pendingSalesEntitlementPlan;
231
+ }
232
+ if (input.pendingPlan && input.pendingEffectiveAt && input.pendingEffectiveAt <= now) {
233
+ return input.pendingPlan;
234
+ }
235
+ return input.plan;
236
+ }
237
+ __name(resolveEntitlementPlan, "resolveEntitlementPlan");
238
+
225
239
  // src/entitlement/limit-exceeded-error.ts
226
240
  var LIMIT_EXCEEDED = "LIMIT_EXCEEDED";
227
241
  var LimitExceededError = class extends Error {
@@ -242,26 +256,14 @@ function isLimitExceededError(err) {
242
256
  }
243
257
  __name(isLimitExceededError, "isLimitExceededError");
244
258
 
245
- // src/entitlement/plan-resolution.ts
246
- function resolveEntitlementPlan(input, config, now) {
247
- if (input.isPilot && config.pilotEntitlementPlan !== void 0) {
248
- return config.pilotEntitlementPlan;
249
- }
250
- if (input.status === "TRIAL") {
251
- return input.trialEntitlementPlan ?? config.defaultTrialEntitlementPlan ?? input.plan;
252
- }
253
- if (input.status === "PENDING_SALES" && config.pendingSalesEntitlementPlan !== void 0) {
254
- return config.pendingSalesEntitlementPlan;
255
- }
256
- if (input.pendingPlan && input.pendingEffectiveAt && input.pendingEffectiveAt <= now) {
257
- return input.pendingPlan;
258
- }
259
- return input.plan;
260
- }
261
- __name(resolveEntitlementPlan, "resolveEntitlementPlan");
262
-
263
259
  // src/entitlement/service.ts
264
260
  import { Inject, Injectable, NotFoundException, Optional } from "@nestjs/common";
261
+
262
+ // src/billing/subscription-bundles.tokens.ts
263
+ var SUBSCRIPTION_BUNDLE_REPOSITORY_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/SubscriptionBundleRepository");
264
+ var SUBSCRIPTION_BUNDLE_CONFIG_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/SubscriptionBundleConfig");
265
+
266
+ // src/entitlement/service.ts
265
267
  function _ts_decorate(decorators, target, key, desc) {
266
268
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
267
269
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -552,6 +554,7 @@ var EntitlementModule = class _EntitlementModule {
552
554
  return {
553
555
  module: _EntitlementModule,
554
556
  global: options.global ?? false,
557
+ imports: options.imports ?? [],
555
558
  providers,
556
559
  exports: [
557
560
  EntitlementService,
@@ -5,7 +5,7 @@ import {
5
5
  BUNDLE_REPOSITORY_TOKEN,
6
6
  CATALOG_ENTRY_REPOSITORY_TOKEN,
7
7
  PLAN_REPOSITORY_TOKEN
8
- } from "./chunk-N3WANKSA.js";
8
+ } from "./chunk-L4KTQ6CL.js";
9
9
  import {
10
10
  asProvider
11
11
  } from "./chunk-SABTXESR.js";
@@ -13,14 +13,12 @@ import {
13
13
  __name
14
14
  } from "./chunk-SHUYVCID.js";
15
15
 
16
- // src/checkout-offer/checkout-offer.service.ts
17
- import { ConflictException, Inject, Injectable, NotFoundException, Optional, UnprocessableEntityException } from "@nestjs/common";
18
- import { buildFeatureRequiresIndex, collectUnsatisfiedRequires, startOfUtcDay } from "@saasicat/types";
19
-
20
16
  // src/checkout-offer/tokens.ts
21
- var CHECKOUT_OFFER_REPOSITORY_TOKEN = /* @__PURE__ */ Symbol("CHECKOUT_OFFER_REPOSITORY");
17
+ var CHECKOUT_OFFER_REPOSITORY_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/CheckoutOfferRepository");
22
18
 
23
19
  // src/checkout-offer/checkout-offer.service.ts
20
+ import { ConflictException, Inject, Injectable, NotFoundException, Optional, UnprocessableEntityException } from "@nestjs/common";
21
+ import { buildFeatureRequiresIndex, collectUnsatisfiedRequires, startOfUtcDay } from "@saasicat/types";
24
22
  function _ts_decorate(decorators, target, key, desc) {
25
23
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
26
24
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -344,9 +342,6 @@ CheckoutOfferService = _ts_decorate([
344
342
  ])
345
343
  ], CheckoutOfferService);
346
344
 
347
- // src/checkout-offer/checkout-offer.controller.ts
348
- import { Body, Controller, Get, Inject as Inject2, Param, ParseUUIDPipe, Patch, Post, UseGuards } from "@nestjs/common";
349
-
350
345
  // src/checkout-offer/dto/checkout-offer.dto.ts
351
346
  import { IsArray, IsDateString, IsDefined, IsIn, IsObject, IsOptional, IsString, Matches, MaxLength } from "class-validator";
352
347
  function _ts_decorate2(decorators, target, key, desc) {
@@ -547,6 +542,7 @@ _ts_decorate2([
547
542
  ], UpdateCheckoutOfferDto.prototype, "validUntil", void 0);
548
543
 
549
544
  // src/checkout-offer/checkout-offer.controller.ts
545
+ import { Body, Controller, Get, Inject as Inject2, Param, ParseUUIDPipe, Patch, Post, UseGuards } from "@nestjs/common";
550
546
  function _ts_decorate3(decorators, target, key, desc) {
551
547
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
552
548
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
File without changes