@saasicat/nest 0.7.0 → 0.9.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 (59) hide show
  1. package/dist/admin/index.cjs +262 -7
  2. package/dist/admin/index.d.cts +6 -4
  3. package/dist/admin/index.d.ts +6 -4
  4. package/dist/admin/index.js +12 -4
  5. package/dist/{admin-manifest.service-Cp6uwvmt.d.cts → admin-manifest.service-BMeSLRW4.d.ts} +1 -1
  6. package/dist/{admin-manifest.service-UGgzR1x-.d.ts → admin-manifest.service-StAQe6QO.d.cts} +1 -1
  7. package/dist/admin-resources.module-BybEjZs-.d.cts +40 -0
  8. package/dist/admin-resources.module-CUCLlUAi.d.ts +40 -0
  9. package/dist/billing/index.cjs +3 -1
  10. package/dist/billing/index.d.cts +5 -287
  11. package/dist/billing/index.d.ts +5 -287
  12. package/dist/billing/index.js +5 -8
  13. package/dist/catalog/index.d.cts +4 -101
  14. package/dist/catalog/index.d.ts +4 -101
  15. package/dist/catalog/index.js +12 -10
  16. package/dist/catalog.module-BKObceo0.d.ts +103 -0
  17. package/dist/catalog.module-Dw2Hrbyu.d.cts +103 -0
  18. package/dist/{chunk-U6HT27J7.js → chunk-3M6VLT5N.js} +257 -6
  19. package/dist/chunk-7K5PT2LX.js +211 -0
  20. package/dist/{chunk-RZU4HIAN.js → chunk-GW2I3JZD.js} +25 -22
  21. package/dist/{chunk-6LP7CDS2.js → chunk-HXAWPPFW.js} +10 -5
  22. package/dist/chunk-OFBDEO45.js +755 -0
  23. package/dist/{chunk-5DDCSGZC.js → chunk-PBQRPDO2.js} +142 -354
  24. package/dist/{chunk-SD3TT2BR.js → chunk-WGVTXSYW.js} +1 -1
  25. package/dist/{chunk-A2QBXDJC.js → chunk-ZZMAHX22.js} +343 -16
  26. package/dist/{enforce-quota.interceptor-Dj1Kusr5.d.ts → enforce-quota.interceptor-B3CL5MSw.d.ts} +94 -12
  27. package/dist/{enforce-quota.interceptor-cv7r80VM.d.cts → enforce-quota.interceptor-SqrQVF91.d.cts} +94 -12
  28. package/dist/entitlement/index.cjs +1 -0
  29. package/dist/entitlement/index.d.cts +3 -1
  30. package/dist/entitlement/index.d.ts +3 -1
  31. package/dist/entitlement/index.js +1 -2
  32. package/dist/index.cjs +3503 -2811
  33. package/dist/index.d.cts +9 -6
  34. package/dist/index.d.ts +9 -6
  35. package/dist/index.js +75 -61
  36. package/dist/module-B5m080F0.d.ts +39 -0
  37. package/dist/module-DeH_Jkcq.d.cts +39 -0
  38. package/dist/platform/index.cjs +11113 -971
  39. package/dist/platform/index.d.cts +41 -7
  40. package/dist/platform/index.d.ts +41 -7
  41. package/dist/platform/index.js +26 -6
  42. package/dist/promo/index.cjs +530 -5
  43. package/dist/promo/index.d.cts +47 -30
  44. package/dist/promo/index.d.ts +47 -30
  45. package/dist/promo/index.js +9 -1
  46. package/dist/{service-DX8KbGXl.d.cts → service-DlhMnYjW.d.cts} +1 -1
  47. package/dist/{service-DX8KbGXl.d.ts → service-DlhMnYjW.d.ts} +1 -1
  48. package/dist/subscription-bundles.module-BQmoozm5.d.ts +291 -0
  49. package/dist/subscription-bundles.module-DCpV-Pb5.d.cts +291 -0
  50. package/dist/testing/index.cjs +11101 -973
  51. package/dist/testing/index.d.cts +9 -4
  52. package/dist/testing/index.d.ts +9 -4
  53. package/dist/testing/index.js +10 -4
  54. package/package.json +4 -4
  55. package/dist/admin-manifest.config-DyrQNT7M.d.cts +0 -10
  56. package/dist/admin-manifest.config-DyrQNT7M.d.ts +0 -10
  57. package/dist/chunk-52UTQRD3.js +0 -326
  58. package/dist/chunk-Q53N43LQ.js +0 -13
  59. /package/dist/{chunk-2FR6ZL7R.js → chunk-HWGIMNWR.js} +0 -0
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
9
  var __export = (target, all) => {
@@ -16,11 +18,20 @@ var __copyProps = (to, from, except, desc) => {
16
18
  }
17
19
  return to;
18
20
  };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
19
29
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
30
 
21
31
  // src/promo/index.ts
22
32
  var promo_exports = {};
23
33
  __export(promo_exports, {
34
+ CreatePromoCodeDto: () => CreatePromoCodeDto,
24
35
  PROMO_CODE_REDEMPTION_REPOSITORY_TOKEN: () => PROMO_CODE_REDEMPTION_REPOSITORY_TOKEN,
25
36
  PROMO_CODE_REPOSITORY_TOKEN: () => PROMO_CODE_REPOSITORY_TOKEN,
26
37
  PROMO_CODE_VALIDATION_LOG_REPOSITORY_TOKEN: () => PROMO_CODE_VALIDATION_LOG_REPOSITORY_TOKEN,
@@ -35,8 +46,10 @@ __export(promo_exports, {
35
46
  PromoCodeRateLimitGuard: () => PromoCodeRateLimitGuard,
36
47
  PromoCodesModule: () => PromoCodesModule,
37
48
  PromoCodesService: () => PromoCodesService,
49
+ UpdatePromoCodeDto: () => UpdatePromoCodeDto,
38
50
  addCycles: () => addCycles,
39
51
  buildLabel: () => buildLabel,
52
+ buildPromoCodeAdminController: () => buildPromoCodeAdminController,
40
53
  computeDiscountGross: () => computeDiscountGross,
41
54
  computeDiscountedGross: () => computeDiscountedGross,
42
55
  computeIncludedVat: () => computeIncludedVat,
@@ -913,7 +926,19 @@ PromoCodePublicController = _ts_decorate6([
913
926
  ], PromoCodePublicController);
914
927
 
915
928
  // src/promo/module.ts
929
+ var import_common8 = require("@nestjs/common");
930
+
931
+ // src/promo/admin-controller.ts
932
+ var import_common7 = require("@nestjs/common");
933
+
934
+ // src/admin/admin-audit.service.ts
935
+ var os = __toESM(require("os"), 1);
916
936
  var import_common6 = require("@nestjs/common");
937
+
938
+ // src/admin/tokens.ts
939
+ var AUDIT_PORT_TOKEN = /* @__PURE__ */ Symbol.for("saas-platform/AuditPort");
940
+
941
+ // src/admin/admin-audit.service.ts
917
942
  function _ts_decorate7(decorators, target, key, desc) {
918
943
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
919
944
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -921,6 +946,498 @@ function _ts_decorate7(decorators, target, key, desc) {
921
946
  return c > 3 && r && Object.defineProperty(target, key, r), r;
922
947
  }
923
948
  __name(_ts_decorate7, "_ts_decorate");
949
+ function _ts_metadata5(k, v) {
950
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
951
+ }
952
+ __name(_ts_metadata5, "_ts_metadata");
953
+ function _ts_param4(paramIndex, decorator) {
954
+ return function(target, key) {
955
+ decorator(target, key, paramIndex);
956
+ };
957
+ }
958
+ __name(_ts_param4, "_ts_param");
959
+ var AdminAuditService = class {
960
+ static {
961
+ __name(this, "AdminAuditService");
962
+ }
963
+ audit;
964
+ constructor(audit) {
965
+ this.audit = audit;
966
+ }
967
+ async log(input) {
968
+ await this.audit.write({
969
+ actor: input.actor,
970
+ entity: input.entity,
971
+ entityId: input.entityId,
972
+ action: input.action,
973
+ changes: {
974
+ ...input.changes ?? {},
975
+ actor: this.actorTag(input.actor)
976
+ }
977
+ });
978
+ }
979
+ /**
980
+ * Standardized actor tag for the `changes.actor` column:
981
+ * `<source>:<email>:<context>`.
982
+ */
983
+ actorTag(actor) {
984
+ return `${actor.source}:${actor.email}:${actor.context}`;
985
+ }
986
+ /** Helper: build an AdminActor from an authenticated web request. */
987
+ fromWebRequest(user, sessionId) {
988
+ return {
989
+ userId: user.id,
990
+ email: user.email,
991
+ source: "web",
992
+ context: sessionId ?? "unknown"
993
+ };
994
+ }
995
+ /** Helper: build an AdminActor from a CLI identity (hostname as context). */
996
+ fromCli(user) {
997
+ return {
998
+ userId: user.id,
999
+ email: user.email,
1000
+ source: "cli",
1001
+ context: os.hostname()
1002
+ };
1003
+ }
1004
+ };
1005
+ AdminAuditService = _ts_decorate7([
1006
+ (0, import_common6.Injectable)(),
1007
+ _ts_param4(0, (0, import_common6.Inject)(AUDIT_PORT_TOKEN)),
1008
+ _ts_metadata5("design:type", Function),
1009
+ _ts_metadata5("design:paramtypes", [
1010
+ typeof AuditPort === "undefined" ? Object : AuditPort
1011
+ ])
1012
+ ], AdminAuditService);
1013
+
1014
+ // src/promo/dto/promo-admin.dto.ts
1015
+ var import_class_validator2 = require("class-validator");
1016
+ function _ts_decorate8(decorators, target, key, desc) {
1017
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1018
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1019
+ 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;
1020
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
1021
+ }
1022
+ __name(_ts_decorate8, "_ts_decorate");
1023
+ function _ts_metadata6(k, v) {
1024
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
1025
+ }
1026
+ __name(_ts_metadata6, "_ts_metadata");
1027
+ var VALUE_TYPES = [
1028
+ "PERCENT",
1029
+ "ABSOLUTE"
1030
+ ];
1031
+ var DURATION_TYPES = [
1032
+ "ONCE",
1033
+ "MONTHS",
1034
+ "BILLING_CYCLES"
1035
+ ];
1036
+ var STATUSES = [
1037
+ "ACTIVE",
1038
+ "PAUSED"
1039
+ ];
1040
+ var BILLING_CYCLES = [
1041
+ "MONTHLY",
1042
+ "YEARLY"
1043
+ ];
1044
+ var CreatePromoCodeDto = class {
1045
+ static {
1046
+ __name(this, "CreatePromoCodeDto");
1047
+ }
1048
+ code;
1049
+ valueType;
1050
+ value;
1051
+ durationType;
1052
+ durationValue;
1053
+ maxRedemptions;
1054
+ validFrom;
1055
+ validUntil;
1056
+ appliesToPlans;
1057
+ appliesToBilling;
1058
+ firstTimeCustomersOnly;
1059
+ minimumPlanAmountGross;
1060
+ allowZeroInvoice;
1061
+ revenueDeductionAccount;
1062
+ campaignTag;
1063
+ description;
1064
+ };
1065
+ _ts_decorate8([
1066
+ (0, import_class_validator2.IsString)(),
1067
+ (0, import_class_validator2.IsNotEmpty)(),
1068
+ (0, import_class_validator2.MaxLength)(64),
1069
+ _ts_metadata6("design:type", String)
1070
+ ], CreatePromoCodeDto.prototype, "code", void 0);
1071
+ _ts_decorate8([
1072
+ (0, import_class_validator2.IsIn)(VALUE_TYPES),
1073
+ _ts_metadata6("design:type", Object)
1074
+ ], CreatePromoCodeDto.prototype, "valueType", void 0);
1075
+ _ts_decorate8([
1076
+ (0, import_class_validator2.IsNumber)(),
1077
+ (0, import_class_validator2.Min)(0),
1078
+ _ts_metadata6("design:type", Number)
1079
+ ], CreatePromoCodeDto.prototype, "value", void 0);
1080
+ _ts_decorate8([
1081
+ (0, import_class_validator2.IsIn)(DURATION_TYPES),
1082
+ _ts_metadata6("design:type", Object)
1083
+ ], CreatePromoCodeDto.prototype, "durationType", void 0);
1084
+ _ts_decorate8([
1085
+ (0, import_class_validator2.IsOptional)(),
1086
+ (0, import_class_validator2.IsInt)(),
1087
+ (0, import_class_validator2.Min)(1),
1088
+ _ts_metadata6("design:type", Object)
1089
+ ], CreatePromoCodeDto.prototype, "durationValue", void 0);
1090
+ _ts_decorate8([
1091
+ (0, import_class_validator2.IsOptional)(),
1092
+ (0, import_class_validator2.IsInt)(),
1093
+ (0, import_class_validator2.Min)(1),
1094
+ _ts_metadata6("design:type", Object)
1095
+ ], CreatePromoCodeDto.prototype, "maxRedemptions", void 0);
1096
+ _ts_decorate8([
1097
+ (0, import_class_validator2.IsOptional)(),
1098
+ (0, import_class_validator2.IsString)(),
1099
+ _ts_metadata6("design:type", Object)
1100
+ ], CreatePromoCodeDto.prototype, "validFrom", void 0);
1101
+ _ts_decorate8([
1102
+ (0, import_class_validator2.IsOptional)(),
1103
+ (0, import_class_validator2.IsString)(),
1104
+ _ts_metadata6("design:type", Object)
1105
+ ], CreatePromoCodeDto.prototype, "validUntil", void 0);
1106
+ _ts_decorate8([
1107
+ (0, import_class_validator2.IsOptional)(),
1108
+ (0, import_class_validator2.IsArray)(),
1109
+ (0, import_class_validator2.IsString)({
1110
+ each: true
1111
+ }),
1112
+ (0, import_class_validator2.ArrayUnique)(),
1113
+ _ts_metadata6("design:type", Array)
1114
+ ], CreatePromoCodeDto.prototype, "appliesToPlans", void 0);
1115
+ _ts_decorate8([
1116
+ (0, import_class_validator2.IsOptional)(),
1117
+ (0, import_class_validator2.IsIn)(BILLING_CYCLES),
1118
+ _ts_metadata6("design:type", Object)
1119
+ ], CreatePromoCodeDto.prototype, "appliesToBilling", void 0);
1120
+ _ts_decorate8([
1121
+ (0, import_class_validator2.IsOptional)(),
1122
+ (0, import_class_validator2.IsBoolean)(),
1123
+ _ts_metadata6("design:type", Boolean)
1124
+ ], CreatePromoCodeDto.prototype, "firstTimeCustomersOnly", void 0);
1125
+ _ts_decorate8([
1126
+ (0, import_class_validator2.IsOptional)(),
1127
+ (0, import_class_validator2.IsNumber)(),
1128
+ (0, import_class_validator2.Min)(0),
1129
+ _ts_metadata6("design:type", Object)
1130
+ ], CreatePromoCodeDto.prototype, "minimumPlanAmountGross", void 0);
1131
+ _ts_decorate8([
1132
+ (0, import_class_validator2.IsOptional)(),
1133
+ (0, import_class_validator2.IsBoolean)(),
1134
+ _ts_metadata6("design:type", Boolean)
1135
+ ], CreatePromoCodeDto.prototype, "allowZeroInvoice", void 0);
1136
+ _ts_decorate8([
1137
+ (0, import_class_validator2.IsOptional)(),
1138
+ (0, import_class_validator2.IsString)(),
1139
+ (0, import_class_validator2.MaxLength)(32),
1140
+ _ts_metadata6("design:type", Object)
1141
+ ], CreatePromoCodeDto.prototype, "revenueDeductionAccount", void 0);
1142
+ _ts_decorate8([
1143
+ (0, import_class_validator2.IsOptional)(),
1144
+ (0, import_class_validator2.IsString)(),
1145
+ (0, import_class_validator2.MaxLength)(64),
1146
+ _ts_metadata6("design:type", Object)
1147
+ ], CreatePromoCodeDto.prototype, "campaignTag", void 0);
1148
+ _ts_decorate8([
1149
+ (0, import_class_validator2.IsOptional)(),
1150
+ (0, import_class_validator2.IsString)(),
1151
+ (0, import_class_validator2.MaxLength)(500),
1152
+ _ts_metadata6("design:type", Object)
1153
+ ], CreatePromoCodeDto.prototype, "description", void 0);
1154
+ var UpdatePromoCodeDto = class {
1155
+ static {
1156
+ __name(this, "UpdatePromoCodeDto");
1157
+ }
1158
+ status;
1159
+ valueType;
1160
+ value;
1161
+ durationType;
1162
+ durationValue;
1163
+ maxRedemptions;
1164
+ validFrom;
1165
+ validUntil;
1166
+ appliesToPlans;
1167
+ appliesToBilling;
1168
+ firstTimeCustomersOnly;
1169
+ minimumPlanAmountGross;
1170
+ allowZeroInvoice;
1171
+ description;
1172
+ campaignTag;
1173
+ revenueDeductionAccount;
1174
+ };
1175
+ _ts_decorate8([
1176
+ (0, import_class_validator2.IsOptional)(),
1177
+ (0, import_class_validator2.IsIn)(STATUSES),
1178
+ _ts_metadata6("design:type", Object)
1179
+ ], UpdatePromoCodeDto.prototype, "status", void 0);
1180
+ _ts_decorate8([
1181
+ (0, import_class_validator2.IsOptional)(),
1182
+ (0, import_class_validator2.IsIn)(VALUE_TYPES),
1183
+ _ts_metadata6("design:type", Object)
1184
+ ], UpdatePromoCodeDto.prototype, "valueType", void 0);
1185
+ _ts_decorate8([
1186
+ (0, import_class_validator2.IsOptional)(),
1187
+ (0, import_class_validator2.IsNumber)(),
1188
+ (0, import_class_validator2.Min)(0),
1189
+ _ts_metadata6("design:type", Number)
1190
+ ], UpdatePromoCodeDto.prototype, "value", void 0);
1191
+ _ts_decorate8([
1192
+ (0, import_class_validator2.IsOptional)(),
1193
+ (0, import_class_validator2.IsIn)(DURATION_TYPES),
1194
+ _ts_metadata6("design:type", Object)
1195
+ ], UpdatePromoCodeDto.prototype, "durationType", void 0);
1196
+ _ts_decorate8([
1197
+ (0, import_class_validator2.IsOptional)(),
1198
+ (0, import_class_validator2.IsInt)(),
1199
+ (0, import_class_validator2.Min)(1),
1200
+ _ts_metadata6("design:type", Object)
1201
+ ], UpdatePromoCodeDto.prototype, "durationValue", void 0);
1202
+ _ts_decorate8([
1203
+ (0, import_class_validator2.IsOptional)(),
1204
+ (0, import_class_validator2.IsInt)(),
1205
+ (0, import_class_validator2.Min)(1),
1206
+ _ts_metadata6("design:type", Object)
1207
+ ], UpdatePromoCodeDto.prototype, "maxRedemptions", void 0);
1208
+ _ts_decorate8([
1209
+ (0, import_class_validator2.IsOptional)(),
1210
+ (0, import_class_validator2.IsString)(),
1211
+ _ts_metadata6("design:type", Object)
1212
+ ], UpdatePromoCodeDto.prototype, "validFrom", void 0);
1213
+ _ts_decorate8([
1214
+ (0, import_class_validator2.IsOptional)(),
1215
+ (0, import_class_validator2.IsString)(),
1216
+ _ts_metadata6("design:type", Object)
1217
+ ], UpdatePromoCodeDto.prototype, "validUntil", void 0);
1218
+ _ts_decorate8([
1219
+ (0, import_class_validator2.IsOptional)(),
1220
+ (0, import_class_validator2.IsArray)(),
1221
+ (0, import_class_validator2.IsString)({
1222
+ each: true
1223
+ }),
1224
+ (0, import_class_validator2.ArrayUnique)(),
1225
+ _ts_metadata6("design:type", Array)
1226
+ ], UpdatePromoCodeDto.prototype, "appliesToPlans", void 0);
1227
+ _ts_decorate8([
1228
+ (0, import_class_validator2.IsOptional)(),
1229
+ (0, import_class_validator2.IsIn)(BILLING_CYCLES),
1230
+ _ts_metadata6("design:type", Object)
1231
+ ], UpdatePromoCodeDto.prototype, "appliesToBilling", void 0);
1232
+ _ts_decorate8([
1233
+ (0, import_class_validator2.IsOptional)(),
1234
+ (0, import_class_validator2.IsBoolean)(),
1235
+ _ts_metadata6("design:type", Boolean)
1236
+ ], UpdatePromoCodeDto.prototype, "firstTimeCustomersOnly", void 0);
1237
+ _ts_decorate8([
1238
+ (0, import_class_validator2.IsOptional)(),
1239
+ (0, import_class_validator2.IsNumber)(),
1240
+ (0, import_class_validator2.Min)(0),
1241
+ _ts_metadata6("design:type", Object)
1242
+ ], UpdatePromoCodeDto.prototype, "minimumPlanAmountGross", void 0);
1243
+ _ts_decorate8([
1244
+ (0, import_class_validator2.IsOptional)(),
1245
+ (0, import_class_validator2.IsBoolean)(),
1246
+ _ts_metadata6("design:type", Boolean)
1247
+ ], UpdatePromoCodeDto.prototype, "allowZeroInvoice", void 0);
1248
+ _ts_decorate8([
1249
+ (0, import_class_validator2.IsOptional)(),
1250
+ (0, import_class_validator2.IsString)(),
1251
+ (0, import_class_validator2.MaxLength)(500),
1252
+ _ts_metadata6("design:type", Object)
1253
+ ], UpdatePromoCodeDto.prototype, "description", void 0);
1254
+ _ts_decorate8([
1255
+ (0, import_class_validator2.IsOptional)(),
1256
+ (0, import_class_validator2.IsString)(),
1257
+ (0, import_class_validator2.MaxLength)(64),
1258
+ _ts_metadata6("design:type", Object)
1259
+ ], UpdatePromoCodeDto.prototype, "campaignTag", void 0);
1260
+ _ts_decorate8([
1261
+ (0, import_class_validator2.IsOptional)(),
1262
+ (0, import_class_validator2.IsString)(),
1263
+ (0, import_class_validator2.MaxLength)(32),
1264
+ _ts_metadata6("design:type", Object)
1265
+ ], UpdatePromoCodeDto.prototype, "revenueDeductionAccount", void 0);
1266
+
1267
+ // src/promo/admin-controller.ts
1268
+ function _ts_decorate9(decorators, target, key, desc) {
1269
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1270
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1271
+ 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;
1272
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
1273
+ }
1274
+ __name(_ts_decorate9, "_ts_decorate");
1275
+ function _ts_metadata7(k, v) {
1276
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
1277
+ }
1278
+ __name(_ts_metadata7, "_ts_metadata");
1279
+ function _ts_param5(paramIndex, decorator) {
1280
+ return function(target, key) {
1281
+ decorator(target, key, paramIndex);
1282
+ };
1283
+ }
1284
+ __name(_ts_param5, "_ts_param");
1285
+ function buildPromoCodeAdminController(guards) {
1286
+ let GeneratedPromoCodeAdminController = class GeneratedPromoCodeAdminController {
1287
+ static {
1288
+ __name(this, "GeneratedPromoCodeAdminController");
1289
+ }
1290
+ promos;
1291
+ audit;
1292
+ constructor(promos, audit) {
1293
+ this.promos = promos;
1294
+ this.audit = audit;
1295
+ }
1296
+ findAll(query) {
1297
+ return this.promos.findAll(query);
1298
+ }
1299
+ async create(request, dto) {
1300
+ const actor = actorFromRequest(request);
1301
+ const created = await this.promos.create(toCreateData(dto, actor.userId));
1302
+ await this.audit.log({
1303
+ actor,
1304
+ entity: "PromoCode",
1305
+ entityId: created.id,
1306
+ action: "PROMO_CODE_CREATE",
1307
+ changes: {
1308
+ code: created.code
1309
+ }
1310
+ });
1311
+ return created;
1312
+ }
1313
+ async update(request, id, dto) {
1314
+ const actor = actorFromRequest(request);
1315
+ const updated = await this.promos.update(id, toUpdateData(dto));
1316
+ await this.audit.log({
1317
+ actor,
1318
+ entity: "PromoCode",
1319
+ entityId: id,
1320
+ action: "PROMO_CODE_UPDATE",
1321
+ changes: {
1322
+ fields: Object.keys(dto)
1323
+ }
1324
+ });
1325
+ return updated;
1326
+ }
1327
+ async remove(request, id) {
1328
+ const actor = actorFromRequest(request);
1329
+ await this.promos.softDelete(id);
1330
+ await this.audit.log({
1331
+ actor,
1332
+ entity: "PromoCode",
1333
+ entityId: id,
1334
+ action: "PROMO_CODE_DELETE"
1335
+ });
1336
+ return {
1337
+ ok: true
1338
+ };
1339
+ }
1340
+ };
1341
+ _ts_decorate9([
1342
+ (0, import_common7.Get)(),
1343
+ _ts_param5(0, (0, import_common7.Query)()),
1344
+ _ts_metadata7("design:type", Function),
1345
+ _ts_metadata7("design:paramtypes", [
1346
+ Object
1347
+ ]),
1348
+ _ts_metadata7("design:returntype", typeof Promise === "undefined" ? Object : Promise)
1349
+ ], GeneratedPromoCodeAdminController.prototype, "findAll", null);
1350
+ _ts_decorate9([
1351
+ (0, import_common7.Post)(),
1352
+ _ts_param5(0, (0, import_common7.Req)()),
1353
+ _ts_param5(1, (0, import_common7.Body)()),
1354
+ _ts_metadata7("design:type", Function),
1355
+ _ts_metadata7("design:paramtypes", [
1356
+ typeof AdminRequest === "undefined" ? Object : AdminRequest,
1357
+ typeof CreatePromoCodeDto === "undefined" ? Object : CreatePromoCodeDto
1358
+ ]),
1359
+ _ts_metadata7("design:returntype", Promise)
1360
+ ], GeneratedPromoCodeAdminController.prototype, "create", null);
1361
+ _ts_decorate9([
1362
+ (0, import_common7.Patch)(":id"),
1363
+ _ts_param5(0, (0, import_common7.Req)()),
1364
+ _ts_param5(1, (0, import_common7.Param)("id")),
1365
+ _ts_param5(2, (0, import_common7.Body)()),
1366
+ _ts_metadata7("design:type", Function),
1367
+ _ts_metadata7("design:paramtypes", [
1368
+ typeof AdminRequest === "undefined" ? Object : AdminRequest,
1369
+ String,
1370
+ typeof UpdatePromoCodeDto === "undefined" ? Object : UpdatePromoCodeDto
1371
+ ]),
1372
+ _ts_metadata7("design:returntype", Promise)
1373
+ ], GeneratedPromoCodeAdminController.prototype, "update", null);
1374
+ _ts_decorate9([
1375
+ (0, import_common7.Delete)(":id"),
1376
+ _ts_param5(0, (0, import_common7.Req)()),
1377
+ _ts_param5(1, (0, import_common7.Param)("id")),
1378
+ _ts_metadata7("design:type", Function),
1379
+ _ts_metadata7("design:paramtypes", [
1380
+ typeof AdminRequest === "undefined" ? Object : AdminRequest,
1381
+ String
1382
+ ]),
1383
+ _ts_metadata7("design:returntype", Promise)
1384
+ ], GeneratedPromoCodeAdminController.prototype, "remove", null);
1385
+ GeneratedPromoCodeAdminController = _ts_decorate9([
1386
+ (0, import_common7.Controller)("admin/promo-codes"),
1387
+ (0, import_common7.UseGuards)(...guards),
1388
+ _ts_param5(0, (0, import_common7.Inject)(PromoCodesService)),
1389
+ _ts_param5(1, (0, import_common7.Inject)(AdminAuditService)),
1390
+ _ts_metadata7("design:type", Function),
1391
+ _ts_metadata7("design:paramtypes", [
1392
+ typeof PromoCodesService === "undefined" ? Object : PromoCodesService,
1393
+ typeof AdminAuditService === "undefined" ? Object : AdminAuditService
1394
+ ])
1395
+ ], GeneratedPromoCodeAdminController);
1396
+ return GeneratedPromoCodeAdminController;
1397
+ }
1398
+ __name(buildPromoCodeAdminController, "buildPromoCodeAdminController");
1399
+ function actorFromRequest(request) {
1400
+ const userId = request.user?.id ?? request.user?.userId ?? "unknown";
1401
+ return {
1402
+ userId,
1403
+ email: request.user?.email ?? `${userId}@unknown`,
1404
+ source: "web",
1405
+ context: request.user?.sessionId ?? "unknown"
1406
+ };
1407
+ }
1408
+ __name(actorFromRequest, "actorFromRequest");
1409
+ function toCreateData(dto, createdById) {
1410
+ return {
1411
+ ...dto,
1412
+ validFrom: parseDate(dto.validFrom),
1413
+ validUntil: parseDate(dto.validUntil),
1414
+ createdById
1415
+ };
1416
+ }
1417
+ __name(toCreateData, "toCreateData");
1418
+ function toUpdateData(dto) {
1419
+ const { validFrom, validUntil, ...fields } = dto;
1420
+ const data = fields;
1421
+ if (validFrom !== void 0) data.validFrom = parseDate(validFrom);
1422
+ if (validUntil !== void 0) data.validUntil = parseDate(validUntil);
1423
+ return data;
1424
+ }
1425
+ __name(toUpdateData, "toUpdateData");
1426
+ function parseDate(value) {
1427
+ if (!value) return null;
1428
+ const date = new Date(value);
1429
+ return Number.isNaN(date.getTime()) ? null : date;
1430
+ }
1431
+ __name(parseDate, "parseDate");
1432
+
1433
+ // src/promo/module.ts
1434
+ function _ts_decorate10(decorators, target, key, desc) {
1435
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1436
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1437
+ 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;
1438
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
1439
+ }
1440
+ __name(_ts_decorate10, "_ts_decorate");
924
1441
  var PromoCodesModule = class _PromoCodesModule {
925
1442
  static {
926
1443
  __name(this, "PromoCodesModule");
@@ -928,6 +1445,12 @@ var PromoCodesModule = class _PromoCodesModule {
928
1445
  static forRoot(options) {
929
1446
  const includeCron = options.includeExpirerCron ?? true;
930
1447
  const includePublic = options.includePublicController ?? true;
1448
+ const controllers = includePublic ? [
1449
+ PromoCodePublicController
1450
+ ] : [];
1451
+ if (options.adminController) {
1452
+ controllers.push(buildPromoCodeAdminController(options.adminController.guards));
1453
+ }
931
1454
  const providers = [
932
1455
  asProvider(PROMO_CODE_REPOSITORY_TOKEN, options.promoCodeRepository),
933
1456
  asProvider(PROMO_CODE_REDEMPTION_REPOSITORY_TOKEN, options.redemptionRepository),
@@ -949,9 +1472,8 @@ var PromoCodesModule = class _PromoCodesModule {
949
1472
  return {
950
1473
  module: _PromoCodesModule,
951
1474
  global: options.global ?? false,
952
- controllers: includePublic ? [
953
- PromoCodePublicController
954
- ] : [],
1475
+ imports: options.imports ?? [],
1476
+ controllers,
955
1477
  providers,
956
1478
  exports: [
957
1479
  PromoCodesService,
@@ -963,11 +1485,12 @@ var PromoCodesModule = class _PromoCodesModule {
963
1485
  };
964
1486
  }
965
1487
  };
966
- PromoCodesModule = _ts_decorate7([
967
- (0, import_common6.Module)({})
1488
+ PromoCodesModule = _ts_decorate10([
1489
+ (0, import_common8.Module)({})
968
1490
  ], PromoCodesModule);
969
1491
  // Annotate the CommonJS export names for ESM import in node:
970
1492
  0 && (module.exports = {
1493
+ CreatePromoCodeDto,
971
1494
  PROMO_CODE_REDEMPTION_REPOSITORY_TOKEN,
972
1495
  PROMO_CODE_REPOSITORY_TOKEN,
973
1496
  PROMO_CODE_VALIDATION_LOG_REPOSITORY_TOKEN,
@@ -982,8 +1505,10 @@ PromoCodesModule = _ts_decorate7([
982
1505
  PromoCodeRateLimitGuard,
983
1506
  PromoCodesModule,
984
1507
  PromoCodesService,
1508
+ UpdatePromoCodeDto,
985
1509
  addCycles,
986
1510
  buildLabel,
1511
+ buildPromoCodeAdminController,
987
1512
  computeDiscountGross,
988
1513
  computeDiscountedGross,
989
1514
  computeIncludedVat,