@explorins/pers-shared 2.1.148 → 2.1.150
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/CHANGELOG.md +36 -0
- package/dist/cjs/shared-lib/constants/analytics.constants.d.ts +45 -0
- package/dist/cjs/shared-lib/constants/analytics.constants.d.ts.map +1 -0
- package/dist/cjs/shared-lib/constants/analytics.constants.js +52 -0
- package/dist/cjs/shared-lib/constants/analytics.constants.js.map +1 -0
- package/dist/cjs/shared-lib/constants/index.d.ts +1 -0
- package/dist/cjs/shared-lib/constants/index.d.ts.map +1 -1
- package/dist/cjs/shared-lib/constants/index.js +1 -0
- package/dist/cjs/shared-lib/constants/index.js.map +1 -1
- package/dist/cjs/shared-lib/decorators/validation.decorators.d.ts +40 -0
- package/dist/cjs/shared-lib/decorators/validation.decorators.d.ts.map +1 -1
- package/dist/cjs/shared-lib/decorators/validation.decorators.js +48 -0
- package/dist/cjs/shared-lib/decorators/validation.decorators.js.map +1 -1
- package/dist/cjs/shared-lib/dto/analytics/user-analytics.dto.d.ts +3 -0
- package/dist/cjs/shared-lib/dto/analytics/user-analytics.dto.d.ts.map +1 -1
- package/dist/cjs/shared-lib/dto/analytics/user-analytics.dto.js +24 -0
- package/dist/cjs/shared-lib/dto/analytics/user-analytics.dto.js.map +1 -1
- package/dist/cjs/shared-lib/dto/tenant/email-config.dto.d.ts +6 -0
- package/dist/cjs/shared-lib/dto/tenant/email-config.dto.d.ts.map +1 -1
- package/dist/cjs/shared-lib/dto/tenant/email-config.dto.js +18 -1
- package/dist/cjs/shared-lib/dto/tenant/email-config.dto.js.map +1 -1
- package/dist/cjs/shared-lib/dto/tenant/tenant.dto.d.ts +0 -7
- package/dist/cjs/shared-lib/dto/tenant/tenant.dto.d.ts.map +1 -1
- package/dist/cjs/shared-lib/dto/tenant/tenant.dto.js +10 -19
- package/dist/cjs/shared-lib/dto/tenant/tenant.dto.js.map +1 -1
- package/dist/esm/shared-lib/constants/analytics.constants.d.ts +45 -0
- package/dist/esm/shared-lib/constants/analytics.constants.d.ts.map +1 -0
- package/dist/esm/shared-lib/constants/analytics.constants.js +49 -0
- package/dist/esm/shared-lib/constants/analytics.constants.js.map +1 -0
- package/dist/esm/shared-lib/constants/index.d.ts +1 -0
- package/dist/esm/shared-lib/constants/index.d.ts.map +1 -1
- package/dist/esm/shared-lib/constants/index.js +1 -0
- package/dist/esm/shared-lib/constants/index.js.map +1 -1
- package/dist/esm/shared-lib/decorators/validation.decorators.d.ts +40 -0
- package/dist/esm/shared-lib/decorators/validation.decorators.d.ts.map +1 -1
- package/dist/esm/shared-lib/decorators/validation.decorators.js +46 -0
- package/dist/esm/shared-lib/decorators/validation.decorators.js.map +1 -1
- package/dist/esm/shared-lib/dto/analytics/user-analytics.dto.d.ts +3 -0
- package/dist/esm/shared-lib/dto/analytics/user-analytics.dto.d.ts.map +1 -1
- package/dist/esm/shared-lib/dto/analytics/user-analytics.dto.js +21 -0
- package/dist/esm/shared-lib/dto/analytics/user-analytics.dto.js.map +1 -1
- package/dist/esm/shared-lib/dto/tenant/email-config.dto.d.ts +6 -0
- package/dist/esm/shared-lib/dto/tenant/email-config.dto.d.ts.map +1 -1
- package/dist/esm/shared-lib/dto/tenant/email-config.dto.js +17 -1
- package/dist/esm/shared-lib/dto/tenant/email-config.dto.js.map +1 -1
- package/dist/esm/shared-lib/dto/tenant/tenant.dto.d.ts +0 -7
- package/dist/esm/shared-lib/dto/tenant/tenant.dto.d.ts.map +1 -1
- package/dist/esm/shared-lib/dto/tenant/tenant.dto.js +11 -13
- package/dist/esm/shared-lib/dto/tenant/tenant.dto.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,41 @@
|
|
|
1
1
|
# PERS Shared Library Changelog
|
|
2
2
|
|
|
3
|
+
## [2.1.59] - 2026-05-17
|
|
4
|
+
|
|
5
|
+
### 🖼️ **Image CDN Constants & SDK Helper**
|
|
6
|
+
|
|
7
|
+
#### Added
|
|
8
|
+
- **`image-cdn.constants.ts`** - Shared constants for CloudFront + Lambda@Edge Image CDN
|
|
9
|
+
- **Types**: `ImagePreset`, `ImageFit`, `ImageFormat`, `ImageCdnOptions`, `ImagePresetConfig`
|
|
10
|
+
- **Constants**:
|
|
11
|
+
- `IMAGE_CDN_PRESETS` - Preset dimensions (thumb, medium, large, hero, avatar, card)
|
|
12
|
+
- `IMAGE_CDN_MAX_DIMENSION` - Max output dimension (2048px)
|
|
13
|
+
- `IMAGE_CDN_DEFAULT_QUALITY` - Default quality (80)
|
|
14
|
+
- `IMAGE_CDN_CACHE_TTL` - Cache TTL (1 year)
|
|
15
|
+
- `IMAGE_CDN_MAX_INPUT_SIZE` - Max input file size (10MB)
|
|
16
|
+
- `IMAGE_CDN_SUPPORTED_FORMATS` - Supported image formats
|
|
17
|
+
- **Helpers**:
|
|
18
|
+
- `buildImageCdnUrl(baseUrl, options)` - Build CDN URL with presets/params
|
|
19
|
+
- `isValidPreset(preset)` - Type guard for preset validation
|
|
20
|
+
- `getPresetDimensions(preset)` - Get dimensions for a preset
|
|
21
|
+
- `isSupportedImageFormat(ext)` - Check if format is supported
|
|
22
|
+
|
|
23
|
+
#### Security
|
|
24
|
+
- **Presets-only resizing** - Arbitrary `w`/`h` params disabled to prevent cache pollution attacks
|
|
25
|
+
- Lambda@Edge handler imports shared constants for consistency
|
|
26
|
+
|
|
27
|
+
#### Usage
|
|
28
|
+
```typescript
|
|
29
|
+
import { buildImageCdnUrl, IMAGE_CDN_PRESETS } from '@explorins/pers-shared';
|
|
30
|
+
|
|
31
|
+
// Build CDN URLs
|
|
32
|
+
buildImageCdnUrl(imageUrl, { preset: 'thumb' }) // 150×150
|
|
33
|
+
buildImageCdnUrl(imageUrl, { preset: 'medium' }) // 600×600
|
|
34
|
+
buildImageCdnUrl(imageUrl, { preset: 'large', q: 95 }) // 1200×1200 high quality
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
3
39
|
## [2.1.58] - 2026-01-20
|
|
4
40
|
|
|
5
41
|
### ✨ **Domain Vocabulary for SDK Event System**
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analytics Constants
|
|
3
|
+
*
|
|
4
|
+
* Shared definitions for consistent analytics across frontend and backend.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Active User Definition
|
|
8
|
+
*
|
|
9
|
+
* A user qualifies as "active" in a given period if they performed
|
|
10
|
+
* any of the qualifying actions during that period.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* // Display in UI
|
|
14
|
+
* `${engagementRate}% engagement. ${ACTIVE_USER_DEFINITION.description}`
|
|
15
|
+
*
|
|
16
|
+
* // Result: "25.5% engagement. Active = sent transaction, claimed, or redeemed in period"
|
|
17
|
+
*/
|
|
18
|
+
export declare const ACTIVE_USER_DEFINITION: {
|
|
19
|
+
/** Actions that qualify a user as "active" */
|
|
20
|
+
readonly qualifyingActions: readonly ["TRANSACTION_SEND", "CLAIM_COMPLETED", "REDEMPTION_COMPLETED"];
|
|
21
|
+
/** Short description for UI display */
|
|
22
|
+
readonly description: "Active = sent transaction, claimed, or redeemed in period";
|
|
23
|
+
/** Detailed explanation for tooltips/documentation */
|
|
24
|
+
readonly details: {
|
|
25
|
+
readonly TRANSACTION_SEND: "User initiated a transaction (spending, transferring, or purchasing)";
|
|
26
|
+
readonly CLAIM_COMPLETED: "User successfully claimed a campaign reward";
|
|
27
|
+
readonly REDEMPTION_COMPLETED: "User successfully redeemed an offer";
|
|
28
|
+
};
|
|
29
|
+
/** What does NOT count as active */
|
|
30
|
+
readonly excluded: readonly ["Receiving tokens (passive)", "Failed or pending claims/redemptions", "System-generated transactions (REDEMPTION_RECEIVE)"];
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Engagement rate formula
|
|
34
|
+
* engagementRate = (activeUsers / totalUsers) × 100
|
|
35
|
+
*/
|
|
36
|
+
export declare const ENGAGEMENT_RATE_FORMULA = "activeUsers / totalUsers \u00D7 100";
|
|
37
|
+
/**
|
|
38
|
+
* Transaction statuses that count for analytics
|
|
39
|
+
*/
|
|
40
|
+
export declare const ANALYTICS_VALID_TRANSACTION_STATUSES: readonly ["SUCCEEDED", "BROADCASTED"];
|
|
41
|
+
/**
|
|
42
|
+
* Process statuses that count for analytics (claims, redemptions)
|
|
43
|
+
*/
|
|
44
|
+
export declare const ANALYTICS_VALID_PROCESS_STATUS: "COMPLETED";
|
|
45
|
+
//# sourceMappingURL=analytics.constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.constants.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/constants/analytics.constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,sBAAsB;IACjC,8CAA8C;;IAG9C,uCAAuC;;IAGvC,sDAAsD;;;;;;IAOtD,oCAAoC;;CAM5B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,uBAAuB,wCAAmC,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,oCAAoC,uCAAwC,CAAC;AAE1F;;GAEG;AACH,eAAO,MAAM,8BAA8B,EAAG,WAAoB,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Analytics Constants
|
|
4
|
+
*
|
|
5
|
+
* Shared definitions for consistent analytics across frontend and backend.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.ANALYTICS_VALID_PROCESS_STATUS = exports.ANALYTICS_VALID_TRANSACTION_STATUSES = exports.ENGAGEMENT_RATE_FORMULA = exports.ACTIVE_USER_DEFINITION = void 0;
|
|
9
|
+
/**
|
|
10
|
+
* Active User Definition
|
|
11
|
+
*
|
|
12
|
+
* A user qualifies as "active" in a given period if they performed
|
|
13
|
+
* any of the qualifying actions during that period.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* // Display in UI
|
|
17
|
+
* `${engagementRate}% engagement. ${ACTIVE_USER_DEFINITION.description}`
|
|
18
|
+
*
|
|
19
|
+
* // Result: "25.5% engagement. Active = sent transaction, claimed, or redeemed in period"
|
|
20
|
+
*/
|
|
21
|
+
exports.ACTIVE_USER_DEFINITION = {
|
|
22
|
+
/** Actions that qualify a user as "active" */
|
|
23
|
+
qualifyingActions: ['TRANSACTION_SEND', 'CLAIM_COMPLETED', 'REDEMPTION_COMPLETED'],
|
|
24
|
+
/** Short description for UI display */
|
|
25
|
+
description: 'Active = sent transaction, claimed, or redeemed in period',
|
|
26
|
+
/** Detailed explanation for tooltips/documentation */
|
|
27
|
+
details: {
|
|
28
|
+
TRANSACTION_SEND: 'User initiated a transaction (spending, transferring, or purchasing)',
|
|
29
|
+
CLAIM_COMPLETED: 'User successfully claimed a campaign reward',
|
|
30
|
+
REDEMPTION_COMPLETED: 'User successfully redeemed an offer',
|
|
31
|
+
},
|
|
32
|
+
/** What does NOT count as active */
|
|
33
|
+
excluded: [
|
|
34
|
+
'Receiving tokens (passive)',
|
|
35
|
+
'Failed or pending claims/redemptions',
|
|
36
|
+
'System-generated transactions (REDEMPTION_RECEIVE)',
|
|
37
|
+
],
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Engagement rate formula
|
|
41
|
+
* engagementRate = (activeUsers / totalUsers) × 100
|
|
42
|
+
*/
|
|
43
|
+
exports.ENGAGEMENT_RATE_FORMULA = 'activeUsers / totalUsers × 100';
|
|
44
|
+
/**
|
|
45
|
+
* Transaction statuses that count for analytics
|
|
46
|
+
*/
|
|
47
|
+
exports.ANALYTICS_VALID_TRANSACTION_STATUSES = ['SUCCEEDED', 'BROADCASTED'];
|
|
48
|
+
/**
|
|
49
|
+
* Process statuses that count for analytics (claims, redemptions)
|
|
50
|
+
*/
|
|
51
|
+
exports.ANALYTICS_VALID_PROCESS_STATUS = 'COMPLETED';
|
|
52
|
+
//# sourceMappingURL=analytics.constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.constants.js","sourceRoot":"","sources":["../../../../src/shared-lib/constants/analytics.constants.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH;;;;;;;;;;;GAWG;AACU,QAAA,sBAAsB,GAAG;IACpC,8CAA8C;IAC9C,iBAAiB,EAAE,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,sBAAsB,CAAC;IAElF,uCAAuC;IACvC,WAAW,EAAE,2DAA2D;IAExE,sDAAsD;IACtD,OAAO,EAAE;QACP,gBAAgB,EAAE,sEAAsE;QACxF,eAAe,EAAE,6CAA6C;QAC9D,oBAAoB,EAAE,qCAAqC;KAC5D;IAED,oCAAoC;IACpC,QAAQ,EAAE;QACR,4BAA4B;QAC5B,sCAAsC;QACtC,oDAAoD;KACrD;CACO,CAAC;AAEX;;;GAGG;AACU,QAAA,uBAAuB,GAAG,gCAAgC,CAAC;AAExE;;GAEG;AACU,QAAA,oCAAoC,GAAG,CAAC,WAAW,EAAE,aAAa,CAAU,CAAC;AAE1F;;GAEG;AACU,QAAA,8BAA8B,GAAG,WAAoB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/constants/index.ts"],"names":[],"mappings":"AACA,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/constants/index.ts"],"names":[],"mappings":"AACA,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC"}
|
|
@@ -15,5 +15,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
// Constants Barrel - Auto-exports all constants
|
|
18
|
+
__exportStar(require("./analytics.constants"), exports);
|
|
18
19
|
__exportStar(require("./image-cdn.constants"), exports);
|
|
19
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/shared-lib/constants/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAAgD;AAChD,wDAAsC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/shared-lib/constants/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAAgD;AAChD,wDAAsC;AACtC,wDAAsC"}
|
|
@@ -1,4 +1,44 @@
|
|
|
1
1
|
import { TransformFnParams } from 'class-transformer';
|
|
2
|
+
/**
|
|
3
|
+
* Mask options for @MaskSecret decorator
|
|
4
|
+
*/
|
|
5
|
+
export interface MaskSecretOptions {
|
|
6
|
+
/** Number of characters to show at the end (default: 4) */
|
|
7
|
+
showLast?: number;
|
|
8
|
+
/** Prefix to show before masked value (e.g., 'sk_' for Stripe keys) */
|
|
9
|
+
prefix?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Masks a secret value for safe display
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* maskSecretValue("sk_live_abc123xyz789", { prefix: 'sk_' }) → "sk_...9789"
|
|
16
|
+
* maskSecretValue("SG.abcdef123456") → "...3456"
|
|
17
|
+
* maskSecretValue("short") → "****"
|
|
18
|
+
*/
|
|
19
|
+
export declare function maskSecretValue(value: string | undefined | null, options?: MaskSecretOptions): string | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* @MaskSecret - Masks sensitive values during serialization
|
|
22
|
+
*
|
|
23
|
+
* The actual value remains in memory for internal service use.
|
|
24
|
+
* Only masks when serializing to JSON (API responses).
|
|
25
|
+
*
|
|
26
|
+
* @param options.prefix - Prefix to show (e.g., 'sk_' for Stripe)
|
|
27
|
+
* @param options.showLast - Number of chars to show at end (default: 4)
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* @MaskSecret({ prefix: 'sk_' })
|
|
32
|
+
* stripeApiKey?: string; // → "sk_...a1b2"
|
|
33
|
+
*
|
|
34
|
+
* @MaskSecret({ prefix: 'whsec_' })
|
|
35
|
+
* webhookSecret?: string; // → "whsec_...x9y0"
|
|
36
|
+
*
|
|
37
|
+
* @MaskSecret()
|
|
38
|
+
* emailApiKey?: string; // → "...a1b2"
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export declare function MaskSecret(options?: MaskSecretOptions): PropertyDecorator;
|
|
2
42
|
/**
|
|
3
43
|
* =============================================================================
|
|
4
44
|
* OPTIONAL FIELD VALIDATION DECORATORS
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.decorators.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/decorators/validation.decorators.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"validation.decorators.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/decorators/validation.decorators.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAMjE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAAE,OAAO,GAAE,iBAAsB,GAAG,MAAM,GAAG,SAAS,CAerH;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,iBAAiB,CAK7E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AAMH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,WAAW,GAAI,WAAW,iBAAiB,QAC3B,CAAC;AAE9B;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gBAAgB,GAAI,WAAW,iBAAiB,QAK5D,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,sBAAsB,GAAI,WAAW,iBAAiB,QASlE,CAAC;AAMF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,aAAa,IAAI,iBAAiB,CAKjD;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,mBAAmB,IAAI,iBAAiB,CAKvD;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,eAAe,IAAI,iBAAiB,CAMnD;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,iBAAiB,GAAI,WAAW,iBAAiB,QAS7D,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,qBAAqB,IAAI,iBAAiB,CAMzD"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.emptyToNullNumber = exports.emptyToUndefinedNumber = exports.emptyToUndefined = exports.emptyToNull = void 0;
|
|
4
|
+
exports.maskSecretValue = maskSecretValue;
|
|
5
|
+
exports.MaskSecret = MaskSecret;
|
|
4
6
|
exports.OptionalStrip = OptionalStrip;
|
|
5
7
|
exports.OptionalStripNumber = OptionalStripNumber;
|
|
6
8
|
exports.OptionalNullify = OptionalNullify;
|
|
@@ -8,6 +10,52 @@ exports.OptionalNullifyNumber = OptionalNullifyNumber;
|
|
|
8
10
|
const common_1 = require("@nestjs/common");
|
|
9
11
|
const class_validator_1 = require("class-validator");
|
|
10
12
|
const class_transformer_1 = require("class-transformer");
|
|
13
|
+
/**
|
|
14
|
+
* Masks a secret value for safe display
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* maskSecretValue("sk_live_abc123xyz789", { prefix: 'sk_' }) → "sk_...9789"
|
|
18
|
+
* maskSecretValue("SG.abcdef123456") → "...3456"
|
|
19
|
+
* maskSecretValue("short") → "****"
|
|
20
|
+
*/
|
|
21
|
+
function maskSecretValue(value, options = {}) {
|
|
22
|
+
if (!value || typeof value !== 'string') {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
const { showLast = 4, prefix = '' } = options;
|
|
26
|
+
// If value is too short, just show asterisks
|
|
27
|
+
if (value.length <= showLast) {
|
|
28
|
+
return prefix ? `${prefix}****` : '****';
|
|
29
|
+
}
|
|
30
|
+
// Show prefix + "..." + last N characters
|
|
31
|
+
const lastChars = value.slice(-showLast);
|
|
32
|
+
return `${prefix}...${lastChars}`;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* @MaskSecret - Masks sensitive values during serialization
|
|
36
|
+
*
|
|
37
|
+
* The actual value remains in memory for internal service use.
|
|
38
|
+
* Only masks when serializing to JSON (API responses).
|
|
39
|
+
*
|
|
40
|
+
* @param options.prefix - Prefix to show (e.g., 'sk_' for Stripe)
|
|
41
|
+
* @param options.showLast - Number of chars to show at end (default: 4)
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* @MaskSecret({ prefix: 'sk_' })
|
|
46
|
+
* stripeApiKey?: string; // → "sk_...a1b2"
|
|
47
|
+
*
|
|
48
|
+
* @MaskSecret({ prefix: 'whsec_' })
|
|
49
|
+
* webhookSecret?: string; // → "whsec_...x9y0"
|
|
50
|
+
*
|
|
51
|
+
* @MaskSecret()
|
|
52
|
+
* emailApiKey?: string; // → "...a1b2"
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
function MaskSecret(options = {}) {
|
|
56
|
+
return (0, class_transformer_1.Transform)(({ value }) => maskSecretValue(value, options), { toPlainOnly: true } // Only apply when serializing to JSON
|
|
57
|
+
);
|
|
58
|
+
}
|
|
11
59
|
/**
|
|
12
60
|
* =============================================================================
|
|
13
61
|
* OPTIONAL FIELD VALIDATION DECORATORS
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.decorators.js","sourceRoot":"","sources":["../../../../src/shared-lib/decorators/validation.decorators.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"validation.decorators.js","sourceRoot":"","sources":["../../../../src/shared-lib/decorators/validation.decorators.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,9 +38,12 @@ export declare class UserAnalyticsResponseDTO {
|
|
|
38
38
|
totalTransactionVolume: number;
|
|
39
39
|
averageClaimsPerUser: number;
|
|
40
40
|
averageRedemptionsPerUser: number;
|
|
41
|
+
totalBurns: number;
|
|
42
|
+
averageBurnsPerUser: number;
|
|
41
43
|
averageTransactionsPerActiveUser: number;
|
|
42
44
|
averageClaimsPerActiveUser: number;
|
|
43
45
|
averageRedemptionsPerActiveUser: number;
|
|
46
|
+
averageBurnsPerActiveUser: number;
|
|
44
47
|
engagementRate: number;
|
|
45
48
|
periodBreakdown?: {
|
|
46
49
|
date: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-analytics.dto.d.ts","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/analytics/user-analytics.dto.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAG7D;;;;;GAKG;AACH,qBAAa,uBAAuB;IAQlC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,qBAAa,uBAAuB;IAWlC,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAQlC,SAAS,CAAC,EAAE,IAAI,CAAC;IAQjB,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,qBAAa,wBAAwB;IAKnC,UAAU,EAAE,MAAM,CAAK;IAMvB,WAAW,EAAE,MAAM,CAAK;IAMxB,QAAQ,EAAE,MAAM,CAAK;IAMrB,0BAA0B,EAAE,MAAM,CAAK;IAMvC,wBAAwB,EAAE,MAAM,CAAK;IAMrC,sBAAsB,EAAE,MAAM,CAAK;IAMnC,oBAAoB,EAAE,MAAM,CAAK;IAMjC,yBAAyB,EAAE,MAAM,CAAK;IAMtC,gCAAgC,EAAE,MAAM,CAAK;IAM7C,0BAA0B,EAAE,MAAM,CAAK;IAMvC,+BAA+B,EAAE,MAAM,CAAK;
|
|
1
|
+
{"version":3,"file":"user-analytics.dto.d.ts","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/analytics/user-analytics.dto.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAG7D;;;;;GAKG;AACH,qBAAa,uBAAuB;IAQlC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,qBAAa,uBAAuB;IAWlC,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAQlC,SAAS,CAAC,EAAE,IAAI,CAAC;IAQjB,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,qBAAa,wBAAwB;IAKnC,UAAU,EAAE,MAAM,CAAK;IAMvB,WAAW,EAAE,MAAM,CAAK;IAMxB,QAAQ,EAAE,MAAM,CAAK;IAMrB,0BAA0B,EAAE,MAAM,CAAK;IAMvC,wBAAwB,EAAE,MAAM,CAAK;IAMrC,sBAAsB,EAAE,MAAM,CAAK;IAMnC,oBAAoB,EAAE,MAAM,CAAK;IAMjC,yBAAyB,EAAE,MAAM,CAAK;IAMtC,UAAU,EAAE,MAAM,CAAK;IAMvB,mBAAmB,EAAE,MAAM,CAAK;IAMhC,gCAAgC,EAAE,MAAM,CAAK;IAM7C,0BAA0B,EAAE,MAAM,CAAK;IAMvC,+BAA+B,EAAE,MAAM,CAAK;IAM5C,yBAAyB,EAAE,MAAM,CAAK;IAOtC,cAAc,EAAE,MAAM,CAAK;IAc3B,eAAe,CAAC,EAAE;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;KAClB,EAAE,CAAC;IAiBJ,QAAQ,EAAE,qBAAqB,CAE7B;CACH"}
|
|
@@ -96,9 +96,12 @@ class UserAnalyticsResponseDTO {
|
|
|
96
96
|
totalTransactionVolume = 0;
|
|
97
97
|
averageClaimsPerUser = 0;
|
|
98
98
|
averageRedemptionsPerUser = 0;
|
|
99
|
+
totalBurns = 0;
|
|
100
|
+
averageBurnsPerUser = 0;
|
|
99
101
|
averageTransactionsPerActiveUser = 0;
|
|
100
102
|
averageClaimsPerActiveUser = 0;
|
|
101
103
|
averageRedemptionsPerActiveUser = 0;
|
|
104
|
+
averageBurnsPerActiveUser = 0;
|
|
102
105
|
engagementRate = 0;
|
|
103
106
|
periodBreakdown;
|
|
104
107
|
metadata = {
|
|
@@ -162,6 +165,20 @@ __decorate([
|
|
|
162
165
|
}),
|
|
163
166
|
__metadata("design:type", Number)
|
|
164
167
|
], UserAnalyticsResponseDTO.prototype, "averageRedemptionsPerUser", void 0);
|
|
168
|
+
__decorate([
|
|
169
|
+
(0, swagger_1.ApiProperty)({
|
|
170
|
+
description: 'Total burn transactions in the date range. Only counts successful burn transactions (status=SUCCEEDED or BROADCASTED, type=BURN).',
|
|
171
|
+
example: 523
|
|
172
|
+
}),
|
|
173
|
+
__metadata("design:type", Number)
|
|
174
|
+
], UserAnalyticsResponseDTO.prototype, "totalBurns", void 0);
|
|
175
|
+
__decorate([
|
|
176
|
+
(0, swagger_1.ApiProperty)({
|
|
177
|
+
description: 'Average burns per user across entire user base (total burns in date range ÷ total users).',
|
|
178
|
+
example: 0.5
|
|
179
|
+
}),
|
|
180
|
+
__metadata("design:type", Number)
|
|
181
|
+
], UserAnalyticsResponseDTO.prototype, "averageBurnsPerUser", void 0);
|
|
165
182
|
__decorate([
|
|
166
183
|
(0, swagger_1.ApiProperty)({
|
|
167
184
|
description: 'Average transactions per active user (total successful transactions in date range ÷ active users in date range). Provides more accurate engagement metric than averageTransactionsPerUser by excluding inactive users.',
|
|
@@ -183,6 +200,13 @@ __decorate([
|
|
|
183
200
|
}),
|
|
184
201
|
__metadata("design:type", Number)
|
|
185
202
|
], UserAnalyticsResponseDTO.prototype, "averageRedemptionsPerActiveUser", void 0);
|
|
203
|
+
__decorate([
|
|
204
|
+
(0, swagger_1.ApiProperty)({
|
|
205
|
+
description: 'Average burns per active user (total burns in date range ÷ active users in date range).',
|
|
206
|
+
example: 0.8
|
|
207
|
+
}),
|
|
208
|
+
__metadata("design:type", Number)
|
|
209
|
+
], UserAnalyticsResponseDTO.prototype, "averageBurnsPerActiveUser", void 0);
|
|
186
210
|
__decorate([
|
|
187
211
|
(0, swagger_1.ApiProperty)({
|
|
188
212
|
description: 'User engagement rate as percentage (activeUsers ÷ totalUsers × 100). Indicates what percentage of all registered users had activity in the date range.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-analytics.dto.js","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/analytics/user-analytics.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAAmE;AACnE,qDAA+D;AAC/D,yDAAyC;AAEzC,iDAAiD;AAEjD;;;;;GAKG;AACH,MAAa,uBAAuB;IAQlC,UAAU,CAAU;CACrB;AATD,0DASC;AADC;IAPC,IAAA,6BAAmB,EAAC;QACnB,WAAW,EAAE,iGAAiG;QAC9G,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,cAAc;KACxB,CAAC;IACD,IAAA,0BAAa,GAAE;;2DACI;AAGtB;;;;;;;GAOG;AACH,MAAa,uBAAuB;IAWlC,OAAO,CAA2B;IAQlC,SAAS,CAAQ;IAQjB,OAAO,CAAQ;CAChB;AA5BD,0DA4BC;AAjBC;IAVC,IAAA,6BAAmB,EAAC;QACnB,WAAW,EAAE,+DAA+D;QAC5E,IAAI,EAAE,uBAAuB;QAC7B,OAAO,EAAE;YACP,UAAU,EAAE,cAAc;SAC3B;KACF,CAAC;IACD,IAAA,0BAAa,GAAE;IACf,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC;8BAC1B,uBAAuB;wDAAC;AAQlC;IANC,IAAA,6BAAmB,EAAC;QACnB,WAAW,EAAE,wIAAwI;QACrJ,OAAO,EAAE,sBAAsB;KAChC,CAAC;IACD,IAAA,0BAAa,GAAE;IACf,IAAA,8BAAY,GAAE;8BACH,IAAI;0DAAC;AAQjB;IANC,IAAA,6BAAmB,EAAC;QACnB,WAAW,EAAE,sIAAsI;QACnJ,OAAO,EAAE,sBAAsB;KAChC,CAAC;IACD,IAAA,0BAAa,GAAE;IACf,IAAA,8BAAY,GAAE;8BACL,IAAI;wDAAC;AAGjB;;;;;;;GAOG;AACH,MAAa,wBAAwB;IAKnC,UAAU,GAAW,CAAC,CAAC;IAMvB,WAAW,GAAW,CAAC,CAAC;IAMxB,QAAQ,GAAW,CAAC,CAAC;IAMrB,0BAA0B,GAAW,CAAC,CAAC;IAMvC,wBAAwB,GAAW,CAAC,CAAC;IAMrC,sBAAsB,GAAW,CAAC,CAAC;IAMnC,oBAAoB,GAAW,CAAC,CAAC;IAMjC,yBAAyB,GAAW,CAAC,CAAC;IAMtC,gCAAgC,GAAW,CAAC,CAAC;IAM7C,0BAA0B,GAAW,CAAC,CAAC;IAMvC,+BAA+B,GAAW,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"user-analytics.dto.js","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/analytics/user-analytics.dto.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,12 @@ export declare class EmailConfigDTO implements Omit<EmailConfig, 'apiKeyRef'> {
|
|
|
26
26
|
fromEmail?: string;
|
|
27
27
|
fromName?: string;
|
|
28
28
|
templates?: EmailTemplatesConfigDTO;
|
|
29
|
+
/**
|
|
30
|
+
* Decrypted API key for the email provider.
|
|
31
|
+
* Injected at runtime by TenantService from encrypted storage.
|
|
32
|
+
* Masked in API responses, real value available internally.
|
|
33
|
+
*/
|
|
34
|
+
apiKey?: string;
|
|
29
35
|
}
|
|
30
36
|
/**
|
|
31
37
|
* Request DTO for email configuration updates (includes API key)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-config.dto.d.ts","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/tenant/email-config.dto.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,oBAAoB,EAAwB,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"email-config.dto.d.ts","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/tenant/email-config.dto.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,oBAAoB,EAAwB,MAAM,yCAAyC,CAAC;AAGvI;;GAEG;AACH,qBAAa,sBAAuB,YAAW,mBAAmB;IAM9D,UAAU,EAAE,MAAM,CAAM;IAQxB,OAAO,CAAC,EAAE,MAAM,CAAC;IASjB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5C;AAED;;GAEG;AACH,qBAAa,uBAAwB,YAAW,oBAAoB;IAQhE,SAAS,CAAC,EAAE,sBAAsB,CAAC;IASnC,OAAO,CAAC,EAAE,sBAAsB,CAAC;IASjC,aAAa,CAAC,EAAE,sBAAsB,CAAC;IASvC,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;IAS3C,uBAAuB,CAAC,EAAE,sBAAsB,CAAC;IAGjD,CAAC,GAAG,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS,CAAC;CACrD;AAED;;GAEG;AACH,qBAAa,cAAe,YAAW,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC;IAQjE,QAAQ,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAQlC,SAAS,CAAC,EAAE,MAAM,CAAC;IAQnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IASlB,SAAS,CAAC,EAAE,uBAAuB,CAAC;IAEpC;;;;OAIG;IASH,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,cAAc;IAO7C,MAAM,CAAC,EAAE,MAAM,CAAC;CAC3B"}
|
|
@@ -14,6 +14,7 @@ const swagger_1 = require("@nestjs/swagger");
|
|
|
14
14
|
const class_validator_1 = require("class-validator");
|
|
15
15
|
const class_transformer_1 = require("class-transformer");
|
|
16
16
|
const email_config_interface_1 = require("../../interfaces/email-config.interface");
|
|
17
|
+
const validation_decorators_1 = require("../../decorators/validation.decorators");
|
|
17
18
|
/**
|
|
18
19
|
* DTO for email template configuration
|
|
19
20
|
*/
|
|
@@ -119,6 +120,12 @@ class EmailConfigDTO {
|
|
|
119
120
|
fromEmail;
|
|
120
121
|
fromName;
|
|
121
122
|
templates;
|
|
123
|
+
/**
|
|
124
|
+
* Decrypted API key for the email provider.
|
|
125
|
+
* Injected at runtime by TenantService from encrypted storage.
|
|
126
|
+
* Masked in API responses, real value available internally.
|
|
127
|
+
*/
|
|
128
|
+
apiKey;
|
|
122
129
|
}
|
|
123
130
|
exports.EmailConfigDTO = EmailConfigDTO;
|
|
124
131
|
__decorate([
|
|
@@ -159,11 +166,21 @@ __decorate([
|
|
|
159
166
|
(0, class_transformer_1.Type)(() => EmailTemplatesConfigDTO),
|
|
160
167
|
__metadata("design:type", EmailTemplatesConfigDTO)
|
|
161
168
|
], EmailConfigDTO.prototype, "templates", void 0);
|
|
169
|
+
__decorate([
|
|
170
|
+
(0, swagger_1.ApiPropertyOptional)({
|
|
171
|
+
description: 'Email provider API key (masked in responses)',
|
|
172
|
+
type: String,
|
|
173
|
+
example: '...a1b2'
|
|
174
|
+
}),
|
|
175
|
+
(0, class_validator_1.IsOptional)(),
|
|
176
|
+
(0, class_validator_1.IsString)(),
|
|
177
|
+
(0, validation_decorators_1.MaskSecret)(),
|
|
178
|
+
__metadata("design:type", String)
|
|
179
|
+
], EmailConfigDTO.prototype, "apiKey", void 0);
|
|
162
180
|
/**
|
|
163
181
|
* Request DTO for email configuration updates (includes API key)
|
|
164
182
|
*/
|
|
165
183
|
class EmailConfigRequestDTO extends EmailConfigDTO {
|
|
166
|
-
apiKey;
|
|
167
184
|
}
|
|
168
185
|
exports.EmailConfigRequestDTO = EmailConfigRequestDTO;
|
|
169
186
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-config.dto.js","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/tenant/email-config.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAAmE;AACnE,qDAAuF;AACvF,yDAAyC;AACzC,oFAAuI;
|
|
1
|
+
{"version":3,"file":"email-config.dto.js","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/tenant/email-config.dto.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,12 +25,5 @@ export declare class TenantDTO extends TenantPublicDTO {
|
|
|
25
25
|
googleApiKey?: string;
|
|
26
26
|
allowedTokenIssuers: ExternalTokenIssuerConfig[];
|
|
27
27
|
emailConfig?: EmailConfigDTO;
|
|
28
|
-
/**
|
|
29
|
-
* Decrypted email API key - injected at runtime by TenantService.
|
|
30
|
-
* Not stored in database (stored encrypted in emailConfig.apiKeyRef).
|
|
31
|
-
* Used internally by EmailModule and MagicLinkWorkflow.
|
|
32
|
-
* @internal
|
|
33
|
-
*/
|
|
34
|
-
emailApiKey?: string;
|
|
35
28
|
}
|
|
36
29
|
//# sourceMappingURL=tenant.dto.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenant.dto.d.ts","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/tenant/tenant.dto.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,kDAAkD,CAAC;AAE7F,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"tenant.dto.d.ts","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/tenant/tenant.dto.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,kDAAkD,CAAC;AAE7F,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpD,qBAAa,eAAe;IAK1B,WAAW,EAAE,MAAM,CAAM;IAMzB,OAAO,EAAE,MAAM,CAAM;IAMrB,EAAE,EAAE,MAAM,CAAM;IAMhB,SAAS,EAAE,IAAI,CAAa;IAM5B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAM3B,cAAc,CAAC,EAAE,MAAM,CAAA;IAMvB,YAAY,CAAC,EAAE,MAAM,CAAA;IAMrB,eAAe,CAAC,EAAE,MAAM,CAAA;IAMxB,cAAc,CAAC,EAAE,MAAM,CAAA;IAMrB,aAAa,EAAE,MAAM,CAAK;CAC7B;AAED,qBAAa,SAAU,SAAQ,eAAe;IAO5C,oBAAoB,EAAE,MAAM,CAAK;IAQjC,YAAY,CAAC,EAAE,MAAM,CAAA;IAQrB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAM5B,UAAU,CAAC,EAAE,MAAM,CAAA;IAMnB,+BAA+B,EAAE,OAAO,CAAQ;IAGhD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IA2BvB,2BAA2B,EAAE,oBAAoB,CAAiC;IAQlF,iBAAiB,EAAE,MAAM,CAAwB;IAMjD,YAAY,CAAC,EAAE,MAAM,CAAA;IAMrB,mBAAmB,EAAE,yBAAyB,EAAE,CAAK;IAMrD,WAAW,CAAC,EAAE,cAAc,CAAA;CAC7B"}
|
|
@@ -14,6 +14,7 @@ const swagger_1 = require("@nestjs/swagger");
|
|
|
14
14
|
const wallet_enum_1 = require("../../enum/wallet.enum");
|
|
15
15
|
const external_token_issuer_config_dto_1 = require("./external-token-issuer-config.dto");
|
|
16
16
|
const email_config_dto_1 = require("./email-config.dto");
|
|
17
|
+
const validation_decorators_1 = require("../../decorators/validation.decorators");
|
|
17
18
|
class TenantPublicDTO {
|
|
18
19
|
projectName = '';
|
|
19
20
|
acronym = '';
|
|
@@ -125,13 +126,6 @@ class TenantDTO extends TenantPublicDTO {
|
|
|
125
126
|
googleApiKey;
|
|
126
127
|
allowedTokenIssuers = [];
|
|
127
128
|
emailConfig;
|
|
128
|
-
/**
|
|
129
|
-
* Decrypted email API key - injected at runtime by TenantService.
|
|
130
|
-
* Not stored in database (stored encrypted in emailConfig.apiKeyRef).
|
|
131
|
-
* Used internally by EmailModule and MagicLinkWorkflow.
|
|
132
|
-
* @internal
|
|
133
|
-
*/
|
|
134
|
-
emailApiKey;
|
|
135
129
|
}
|
|
136
130
|
exports.TenantDTO = TenantDTO;
|
|
137
131
|
__decorate([
|
|
@@ -143,16 +137,20 @@ __decorate([
|
|
|
143
137
|
], TenantDTO.prototype, "testnetProjectApiKey", void 0);
|
|
144
138
|
__decorate([
|
|
145
139
|
(0, swagger_1.ApiPropertyOptional)({
|
|
146
|
-
description: 'Stripe API key for tenant. Used in case of stripe payment.',
|
|
147
|
-
type: String
|
|
140
|
+
description: 'Stripe API key for tenant (masked). Used in case of stripe payment.',
|
|
141
|
+
type: String,
|
|
142
|
+
example: 'sk_...a1b2'
|
|
148
143
|
}),
|
|
144
|
+
(0, validation_decorators_1.MaskSecret)({ prefix: 'sk_' }),
|
|
149
145
|
__metadata("design:type", String)
|
|
150
146
|
], TenantDTO.prototype, "stripeApiKey", void 0);
|
|
151
147
|
__decorate([
|
|
152
148
|
(0, swagger_1.ApiPropertyOptional)({
|
|
153
|
-
description: 'Stripe webhook secret for tenant. Used in case of stripe payment.',
|
|
154
|
-
type: String
|
|
149
|
+
description: 'Stripe webhook secret for tenant (masked). Used in case of stripe payment.',
|
|
150
|
+
type: String,
|
|
151
|
+
example: 'whsec_...x9y0'
|
|
155
152
|
}),
|
|
153
|
+
(0, validation_decorators_1.MaskSecret)({ prefix: 'whsec_' }),
|
|
156
154
|
__metadata("design:type", String)
|
|
157
155
|
], TenantDTO.prototype, "stripeWebhookSecret", void 0);
|
|
158
156
|
__decorate([
|
|
@@ -210,13 +208,6 @@ __decorate([
|
|
|
210
208
|
description: 'Unified email configuration - provider, credentials, sender info, and templates',
|
|
211
209
|
type: email_config_dto_1.EmailConfigDTO
|
|
212
210
|
}),
|
|
213
|
-
__metadata("design:type", email_config_dto_1.EmailConfigDTO
|
|
214
|
-
/**
|
|
215
|
-
* Decrypted email API key - injected at runtime by TenantService.
|
|
216
|
-
* Not stored in database (stored encrypted in emailConfig.apiKeyRef).
|
|
217
|
-
* Used internally by EmailModule and MagicLinkWorkflow.
|
|
218
|
-
* @internal
|
|
219
|
-
*/
|
|
220
|
-
)
|
|
211
|
+
__metadata("design:type", email_config_dto_1.EmailConfigDTO)
|
|
221
212
|
], TenantDTO.prototype, "emailConfig", void 0);
|
|
222
213
|
//# sourceMappingURL=tenant.dto.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenant.dto.js","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/tenant/tenant.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAAmE;AACnE,wDAA8D;AAE9D,yFAAkF;AAClF,yDAAoD;
|
|
1
|
+
{"version":3,"file":"tenant.dto.js","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/tenant/tenant.dto.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analytics Constants
|
|
3
|
+
*
|
|
4
|
+
* Shared definitions for consistent analytics across frontend and backend.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Active User Definition
|
|
8
|
+
*
|
|
9
|
+
* A user qualifies as "active" in a given period if they performed
|
|
10
|
+
* any of the qualifying actions during that period.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* // Display in UI
|
|
14
|
+
* `${engagementRate}% engagement. ${ACTIVE_USER_DEFINITION.description}`
|
|
15
|
+
*
|
|
16
|
+
* // Result: "25.5% engagement. Active = sent transaction, claimed, or redeemed in period"
|
|
17
|
+
*/
|
|
18
|
+
export declare const ACTIVE_USER_DEFINITION: {
|
|
19
|
+
/** Actions that qualify a user as "active" */
|
|
20
|
+
readonly qualifyingActions: readonly ["TRANSACTION_SEND", "CLAIM_COMPLETED", "REDEMPTION_COMPLETED"];
|
|
21
|
+
/** Short description for UI display */
|
|
22
|
+
readonly description: "Active = sent transaction, claimed, or redeemed in period";
|
|
23
|
+
/** Detailed explanation for tooltips/documentation */
|
|
24
|
+
readonly details: {
|
|
25
|
+
readonly TRANSACTION_SEND: "User initiated a transaction (spending, transferring, or purchasing)";
|
|
26
|
+
readonly CLAIM_COMPLETED: "User successfully claimed a campaign reward";
|
|
27
|
+
readonly REDEMPTION_COMPLETED: "User successfully redeemed an offer";
|
|
28
|
+
};
|
|
29
|
+
/** What does NOT count as active */
|
|
30
|
+
readonly excluded: readonly ["Receiving tokens (passive)", "Failed or pending claims/redemptions", "System-generated transactions (REDEMPTION_RECEIVE)"];
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Engagement rate formula
|
|
34
|
+
* engagementRate = (activeUsers / totalUsers) × 100
|
|
35
|
+
*/
|
|
36
|
+
export declare const ENGAGEMENT_RATE_FORMULA = "activeUsers / totalUsers \u00D7 100";
|
|
37
|
+
/**
|
|
38
|
+
* Transaction statuses that count for analytics
|
|
39
|
+
*/
|
|
40
|
+
export declare const ANALYTICS_VALID_TRANSACTION_STATUSES: readonly ["SUCCEEDED", "BROADCASTED"];
|
|
41
|
+
/**
|
|
42
|
+
* Process statuses that count for analytics (claims, redemptions)
|
|
43
|
+
*/
|
|
44
|
+
export declare const ANALYTICS_VALID_PROCESS_STATUS: "COMPLETED";
|
|
45
|
+
//# sourceMappingURL=analytics.constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.constants.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/constants/analytics.constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,sBAAsB;IACjC,8CAA8C;;IAG9C,uCAAuC;;IAGvC,sDAAsD;;;;;;IAOtD,oCAAoC;;CAM5B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,uBAAuB,wCAAmC,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,oCAAoC,uCAAwC,CAAC;AAE1F;;GAEG;AACH,eAAO,MAAM,8BAA8B,EAAG,WAAoB,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analytics Constants
|
|
3
|
+
*
|
|
4
|
+
* Shared definitions for consistent analytics across frontend and backend.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Active User Definition
|
|
8
|
+
*
|
|
9
|
+
* A user qualifies as "active" in a given period if they performed
|
|
10
|
+
* any of the qualifying actions during that period.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* // Display in UI
|
|
14
|
+
* `${engagementRate}% engagement. ${ACTIVE_USER_DEFINITION.description}`
|
|
15
|
+
*
|
|
16
|
+
* // Result: "25.5% engagement. Active = sent transaction, claimed, or redeemed in period"
|
|
17
|
+
*/
|
|
18
|
+
export const ACTIVE_USER_DEFINITION = {
|
|
19
|
+
/** Actions that qualify a user as "active" */
|
|
20
|
+
qualifyingActions: ['TRANSACTION_SEND', 'CLAIM_COMPLETED', 'REDEMPTION_COMPLETED'],
|
|
21
|
+
/** Short description for UI display */
|
|
22
|
+
description: 'Active = sent transaction, claimed, or redeemed in period',
|
|
23
|
+
/** Detailed explanation for tooltips/documentation */
|
|
24
|
+
details: {
|
|
25
|
+
TRANSACTION_SEND: 'User initiated a transaction (spending, transferring, or purchasing)',
|
|
26
|
+
CLAIM_COMPLETED: 'User successfully claimed a campaign reward',
|
|
27
|
+
REDEMPTION_COMPLETED: 'User successfully redeemed an offer',
|
|
28
|
+
},
|
|
29
|
+
/** What does NOT count as active */
|
|
30
|
+
excluded: [
|
|
31
|
+
'Receiving tokens (passive)',
|
|
32
|
+
'Failed or pending claims/redemptions',
|
|
33
|
+
'System-generated transactions (REDEMPTION_RECEIVE)',
|
|
34
|
+
],
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Engagement rate formula
|
|
38
|
+
* engagementRate = (activeUsers / totalUsers) × 100
|
|
39
|
+
*/
|
|
40
|
+
export const ENGAGEMENT_RATE_FORMULA = 'activeUsers / totalUsers × 100';
|
|
41
|
+
/**
|
|
42
|
+
* Transaction statuses that count for analytics
|
|
43
|
+
*/
|
|
44
|
+
export const ANALYTICS_VALID_TRANSACTION_STATUSES = ['SUCCEEDED', 'BROADCASTED'];
|
|
45
|
+
/**
|
|
46
|
+
* Process statuses that count for analytics (claims, redemptions)
|
|
47
|
+
*/
|
|
48
|
+
export const ANALYTICS_VALID_PROCESS_STATUS = 'COMPLETED';
|
|
49
|
+
//# sourceMappingURL=analytics.constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.constants.js","sourceRoot":"","sources":["../../../../src/shared-lib/constants/analytics.constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,8CAA8C;IAC9C,iBAAiB,EAAE,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,sBAAsB,CAAC;IAElF,uCAAuC;IACvC,WAAW,EAAE,2DAA2D;IAExE,sDAAsD;IACtD,OAAO,EAAE;QACP,gBAAgB,EAAE,sEAAsE;QACxF,eAAe,EAAE,6CAA6C;QAC9D,oBAAoB,EAAE,qCAAqC;KAC5D;IAED,oCAAoC;IACpC,QAAQ,EAAE;QACR,4BAA4B;QAC5B,sCAAsC;QACtC,oDAAoD;KACrD;CACO,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,gCAAgC,CAAC;AAExE;;GAEG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAAC,WAAW,EAAE,aAAa,CAAU,CAAC;AAE1F;;GAEG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,WAAoB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/constants/index.ts"],"names":[],"mappings":"AACA,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/constants/index.ts"],"names":[],"mappings":"AACA,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/shared-lib/constants/index.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/shared-lib/constants/index.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC"}
|
|
@@ -1,4 +1,44 @@
|
|
|
1
1
|
import { TransformFnParams } from 'class-transformer';
|
|
2
|
+
/**
|
|
3
|
+
* Mask options for @MaskSecret decorator
|
|
4
|
+
*/
|
|
5
|
+
export interface MaskSecretOptions {
|
|
6
|
+
/** Number of characters to show at the end (default: 4) */
|
|
7
|
+
showLast?: number;
|
|
8
|
+
/** Prefix to show before masked value (e.g., 'sk_' for Stripe keys) */
|
|
9
|
+
prefix?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Masks a secret value for safe display
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* maskSecretValue("sk_live_abc123xyz789", { prefix: 'sk_' }) → "sk_...9789"
|
|
16
|
+
* maskSecretValue("SG.abcdef123456") → "...3456"
|
|
17
|
+
* maskSecretValue("short") → "****"
|
|
18
|
+
*/
|
|
19
|
+
export declare function maskSecretValue(value: string | undefined | null, options?: MaskSecretOptions): string | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* @MaskSecret - Masks sensitive values during serialization
|
|
22
|
+
*
|
|
23
|
+
* The actual value remains in memory for internal service use.
|
|
24
|
+
* Only masks when serializing to JSON (API responses).
|
|
25
|
+
*
|
|
26
|
+
* @param options.prefix - Prefix to show (e.g., 'sk_' for Stripe)
|
|
27
|
+
* @param options.showLast - Number of chars to show at end (default: 4)
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* @MaskSecret({ prefix: 'sk_' })
|
|
32
|
+
* stripeApiKey?: string; // → "sk_...a1b2"
|
|
33
|
+
*
|
|
34
|
+
* @MaskSecret({ prefix: 'whsec_' })
|
|
35
|
+
* webhookSecret?: string; // → "whsec_...x9y0"
|
|
36
|
+
*
|
|
37
|
+
* @MaskSecret()
|
|
38
|
+
* emailApiKey?: string; // → "...a1b2"
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export declare function MaskSecret(options?: MaskSecretOptions): PropertyDecorator;
|
|
2
42
|
/**
|
|
3
43
|
* =============================================================================
|
|
4
44
|
* OPTIONAL FIELD VALIDATION DECORATORS
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.decorators.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/decorators/validation.decorators.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"validation.decorators.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/decorators/validation.decorators.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAMjE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAAE,OAAO,GAAE,iBAAsB,GAAG,MAAM,GAAG,SAAS,CAerH;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,iBAAiB,CAK7E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AAMH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,WAAW,GAAI,WAAW,iBAAiB,QAC3B,CAAC;AAE9B;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gBAAgB,GAAI,WAAW,iBAAiB,QAK5D,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,sBAAsB,GAAI,WAAW,iBAAiB,QASlE,CAAC;AAMF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,aAAa,IAAI,iBAAiB,CAKjD;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,mBAAmB,IAAI,iBAAiB,CAKvD;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,eAAe,IAAI,iBAAiB,CAMnD;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,iBAAiB,GAAI,WAAW,iBAAiB,QAS7D,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,qBAAqB,IAAI,iBAAiB,CAMzD"}
|
|
@@ -1,6 +1,52 @@
|
|
|
1
1
|
import { applyDecorators } from '@nestjs/common';
|
|
2
2
|
import { IsOptional, ValidateIf } from 'class-validator';
|
|
3
3
|
import { Transform } from 'class-transformer';
|
|
4
|
+
/**
|
|
5
|
+
* Masks a secret value for safe display
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* maskSecretValue("sk_live_abc123xyz789", { prefix: 'sk_' }) → "sk_...9789"
|
|
9
|
+
* maskSecretValue("SG.abcdef123456") → "...3456"
|
|
10
|
+
* maskSecretValue("short") → "****"
|
|
11
|
+
*/
|
|
12
|
+
export function maskSecretValue(value, options = {}) {
|
|
13
|
+
if (!value || typeof value !== 'string') {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
const { showLast = 4, prefix = '' } = options;
|
|
17
|
+
// If value is too short, just show asterisks
|
|
18
|
+
if (value.length <= showLast) {
|
|
19
|
+
return prefix ? `${prefix}****` : '****';
|
|
20
|
+
}
|
|
21
|
+
// Show prefix + "..." + last N characters
|
|
22
|
+
const lastChars = value.slice(-showLast);
|
|
23
|
+
return `${prefix}...${lastChars}`;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* @MaskSecret - Masks sensitive values during serialization
|
|
27
|
+
*
|
|
28
|
+
* The actual value remains in memory for internal service use.
|
|
29
|
+
* Only masks when serializing to JSON (API responses).
|
|
30
|
+
*
|
|
31
|
+
* @param options.prefix - Prefix to show (e.g., 'sk_' for Stripe)
|
|
32
|
+
* @param options.showLast - Number of chars to show at end (default: 4)
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* @MaskSecret({ prefix: 'sk_' })
|
|
37
|
+
* stripeApiKey?: string; // → "sk_...a1b2"
|
|
38
|
+
*
|
|
39
|
+
* @MaskSecret({ prefix: 'whsec_' })
|
|
40
|
+
* webhookSecret?: string; // → "whsec_...x9y0"
|
|
41
|
+
*
|
|
42
|
+
* @MaskSecret()
|
|
43
|
+
* emailApiKey?: string; // → "...a1b2"
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export function MaskSecret(options = {}) {
|
|
47
|
+
return Transform(({ value }) => maskSecretValue(value, options), { toPlainOnly: true } // Only apply when serializing to JSON
|
|
48
|
+
);
|
|
49
|
+
}
|
|
4
50
|
/**
|
|
5
51
|
* =============================================================================
|
|
6
52
|
* OPTIONAL FIELD VALIDATION DECORATORS
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.decorators.js","sourceRoot":"","sources":["../../../../src/shared-lib/decorators/validation.decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAqB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"validation.decorators.js","sourceRoot":"","sources":["../../../../src/shared-lib/decorators/validation.decorators.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,9 +38,12 @@ export declare class UserAnalyticsResponseDTO {
|
|
|
38
38
|
totalTransactionVolume: number;
|
|
39
39
|
averageClaimsPerUser: number;
|
|
40
40
|
averageRedemptionsPerUser: number;
|
|
41
|
+
totalBurns: number;
|
|
42
|
+
averageBurnsPerUser: number;
|
|
41
43
|
averageTransactionsPerActiveUser: number;
|
|
42
44
|
averageClaimsPerActiveUser: number;
|
|
43
45
|
averageRedemptionsPerActiveUser: number;
|
|
46
|
+
averageBurnsPerActiveUser: number;
|
|
44
47
|
engagementRate: number;
|
|
45
48
|
periodBreakdown?: {
|
|
46
49
|
date: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-analytics.dto.d.ts","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/analytics/user-analytics.dto.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAG7D;;;;;GAKG;AACH,qBAAa,uBAAuB;IAQlC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,qBAAa,uBAAuB;IAWlC,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAQlC,SAAS,CAAC,EAAE,IAAI,CAAC;IAQjB,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,qBAAa,wBAAwB;IAKnC,UAAU,EAAE,MAAM,CAAK;IAMvB,WAAW,EAAE,MAAM,CAAK;IAMxB,QAAQ,EAAE,MAAM,CAAK;IAMrB,0BAA0B,EAAE,MAAM,CAAK;IAMvC,wBAAwB,EAAE,MAAM,CAAK;IAMrC,sBAAsB,EAAE,MAAM,CAAK;IAMnC,oBAAoB,EAAE,MAAM,CAAK;IAMjC,yBAAyB,EAAE,MAAM,CAAK;IAMtC,gCAAgC,EAAE,MAAM,CAAK;IAM7C,0BAA0B,EAAE,MAAM,CAAK;IAMvC,+BAA+B,EAAE,MAAM,CAAK;
|
|
1
|
+
{"version":3,"file":"user-analytics.dto.d.ts","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/analytics/user-analytics.dto.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAG7D;;;;;GAKG;AACH,qBAAa,uBAAuB;IAQlC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,qBAAa,uBAAuB;IAWlC,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAQlC,SAAS,CAAC,EAAE,IAAI,CAAC;IAQjB,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,qBAAa,wBAAwB;IAKnC,UAAU,EAAE,MAAM,CAAK;IAMvB,WAAW,EAAE,MAAM,CAAK;IAMxB,QAAQ,EAAE,MAAM,CAAK;IAMrB,0BAA0B,EAAE,MAAM,CAAK;IAMvC,wBAAwB,EAAE,MAAM,CAAK;IAMrC,sBAAsB,EAAE,MAAM,CAAK;IAMnC,oBAAoB,EAAE,MAAM,CAAK;IAMjC,yBAAyB,EAAE,MAAM,CAAK;IAMtC,UAAU,EAAE,MAAM,CAAK;IAMvB,mBAAmB,EAAE,MAAM,CAAK;IAMhC,gCAAgC,EAAE,MAAM,CAAK;IAM7C,0BAA0B,EAAE,MAAM,CAAK;IAMvC,+BAA+B,EAAE,MAAM,CAAK;IAM5C,yBAAyB,EAAE,MAAM,CAAK;IAOtC,cAAc,EAAE,MAAM,CAAK;IAc3B,eAAe,CAAC,EAAE;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;KAClB,EAAE,CAAC;IAiBJ,QAAQ,EAAE,qBAAqB,CAE7B;CACH"}
|
|
@@ -84,9 +84,12 @@ export class UserAnalyticsResponseDTO {
|
|
|
84
84
|
totalTransactionVolume = 0;
|
|
85
85
|
averageClaimsPerUser = 0;
|
|
86
86
|
averageRedemptionsPerUser = 0;
|
|
87
|
+
totalBurns = 0;
|
|
88
|
+
averageBurnsPerUser = 0;
|
|
87
89
|
averageTransactionsPerActiveUser = 0;
|
|
88
90
|
averageClaimsPerActiveUser = 0;
|
|
89
91
|
averageRedemptionsPerActiveUser = 0;
|
|
92
|
+
averageBurnsPerActiveUser = 0;
|
|
90
93
|
engagementRate = 0;
|
|
91
94
|
periodBreakdown;
|
|
92
95
|
metadata = {
|
|
@@ -141,6 +144,18 @@ __decorate([
|
|
|
141
144
|
example: 1.8
|
|
142
145
|
})
|
|
143
146
|
], UserAnalyticsResponseDTO.prototype, "averageRedemptionsPerUser", void 0);
|
|
147
|
+
__decorate([
|
|
148
|
+
ApiProperty({
|
|
149
|
+
description: 'Total burn transactions in the date range. Only counts successful burn transactions (status=SUCCEEDED or BROADCASTED, type=BURN).',
|
|
150
|
+
example: 523
|
|
151
|
+
})
|
|
152
|
+
], UserAnalyticsResponseDTO.prototype, "totalBurns", void 0);
|
|
153
|
+
__decorate([
|
|
154
|
+
ApiProperty({
|
|
155
|
+
description: 'Average burns per user across entire user base (total burns in date range ÷ total users).',
|
|
156
|
+
example: 0.5
|
|
157
|
+
})
|
|
158
|
+
], UserAnalyticsResponseDTO.prototype, "averageBurnsPerUser", void 0);
|
|
144
159
|
__decorate([
|
|
145
160
|
ApiProperty({
|
|
146
161
|
description: 'Average transactions per active user (total successful transactions in date range ÷ active users in date range). Provides more accurate engagement metric than averageTransactionsPerUser by excluding inactive users.',
|
|
@@ -159,6 +174,12 @@ __decorate([
|
|
|
159
174
|
example: 2.1
|
|
160
175
|
})
|
|
161
176
|
], UserAnalyticsResponseDTO.prototype, "averageRedemptionsPerActiveUser", void 0);
|
|
177
|
+
__decorate([
|
|
178
|
+
ApiProperty({
|
|
179
|
+
description: 'Average burns per active user (total burns in date range ÷ active users in date range).',
|
|
180
|
+
example: 0.8
|
|
181
|
+
})
|
|
182
|
+
], UserAnalyticsResponseDTO.prototype, "averageBurnsPerActiveUser", void 0);
|
|
162
183
|
__decorate([
|
|
163
184
|
ApiProperty({
|
|
164
185
|
description: 'User engagement rate as percentage (activeUsers ÷ totalUsers × 100). Indicates what percentage of all registered users had activity in the date range.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-analytics.dto.js","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/analytics/user-analytics.dto.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,OAAO,uBAAuB;IAQlC,UAAU,CAAU;CACrB;AADC;IAPC,mBAAmB,CAAC;QACnB,WAAW,EAAE,iGAAiG;QAC9G,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,cAAc;KACxB,CAAC;IACD,aAAa,EAAE;2DACI;AAGtB;;;;;;;GAOG;AACH,MAAM,OAAO,uBAAuB;IAWlC,OAAO,CAA2B;IAQlC,SAAS,CAAQ;IAQjB,OAAO,CAAQ;CAChB;AAjBC;IAVC,mBAAmB,CAAC;QACnB,WAAW,EAAE,+DAA+D;QAC5E,IAAI,EAAE,uBAAuB;QAC7B,OAAO,EAAE;YACP,UAAU,EAAE,cAAc;SAC3B;KACF,CAAC;IACD,aAAa,EAAE;IACf,cAAc,EAAE;IAChB,IAAI,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC;wDACF;AAQlC;IANC,mBAAmB,CAAC;QACnB,WAAW,EAAE,wIAAwI;QACrJ,OAAO,EAAE,sBAAsB;KAChC,CAAC;IACD,aAAa,EAAE;IACf,YAAY,EAAE;0DACE;AAQjB;IANC,mBAAmB,CAAC;QACnB,WAAW,EAAE,sIAAsI;QACnJ,OAAO,EAAE,sBAAsB;KAChC,CAAC;IACD,aAAa,EAAE;IACf,YAAY,EAAE;wDACA;AAGjB;;;;;;;GAOG;AACH,MAAM,OAAO,wBAAwB;IAKnC,UAAU,GAAW,CAAC,CAAC;IAMvB,WAAW,GAAW,CAAC,CAAC;IAMxB,QAAQ,GAAW,CAAC,CAAC;IAMrB,0BAA0B,GAAW,CAAC,CAAC;IAMvC,wBAAwB,GAAW,CAAC,CAAC;IAMrC,sBAAsB,GAAW,CAAC,CAAC;IAMnC,oBAAoB,GAAW,CAAC,CAAC;IAMjC,yBAAyB,GAAW,CAAC,CAAC;IAMtC,gCAAgC,GAAW,CAAC,CAAC;IAM7C,0BAA0B,GAAW,CAAC,CAAC;IAMvC,+BAA+B,GAAW,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"user-analytics.dto.js","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/analytics/user-analytics.dto.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,12 @@ export declare class EmailConfigDTO implements Omit<EmailConfig, 'apiKeyRef'> {
|
|
|
26
26
|
fromEmail?: string;
|
|
27
27
|
fromName?: string;
|
|
28
28
|
templates?: EmailTemplatesConfigDTO;
|
|
29
|
+
/**
|
|
30
|
+
* Decrypted API key for the email provider.
|
|
31
|
+
* Injected at runtime by TenantService from encrypted storage.
|
|
32
|
+
* Masked in API responses, real value available internally.
|
|
33
|
+
*/
|
|
34
|
+
apiKey?: string;
|
|
29
35
|
}
|
|
30
36
|
/**
|
|
31
37
|
* Request DTO for email configuration updates (includes API key)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-config.dto.d.ts","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/tenant/email-config.dto.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,oBAAoB,EAAwB,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"email-config.dto.d.ts","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/tenant/email-config.dto.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,oBAAoB,EAAwB,MAAM,yCAAyC,CAAC;AAGvI;;GAEG;AACH,qBAAa,sBAAuB,YAAW,mBAAmB;IAM9D,UAAU,EAAE,MAAM,CAAM;IAQxB,OAAO,CAAC,EAAE,MAAM,CAAC;IASjB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5C;AAED;;GAEG;AACH,qBAAa,uBAAwB,YAAW,oBAAoB;IAQhE,SAAS,CAAC,EAAE,sBAAsB,CAAC;IASnC,OAAO,CAAC,EAAE,sBAAsB,CAAC;IASjC,aAAa,CAAC,EAAE,sBAAsB,CAAC;IASvC,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;IAS3C,uBAAuB,CAAC,EAAE,sBAAsB,CAAC;IAGjD,CAAC,GAAG,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS,CAAC;CACrD;AAED;;GAEG;AACH,qBAAa,cAAe,YAAW,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC;IAQjE,QAAQ,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAQlC,SAAS,CAAC,EAAE,MAAM,CAAC;IAQnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IASlB,SAAS,CAAC,EAAE,uBAAuB,CAAC;IAEpC;;;;OAIG;IASH,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,cAAc;IAO7C,MAAM,CAAC,EAAE,MAAM,CAAC;CAC3B"}
|
|
@@ -8,6 +8,7 @@ import { ApiProperty, ApiPropertyOptional } from "@nestjs/swagger";
|
|
|
8
8
|
import { IsOptional, IsString, IsIn, ValidateNested, IsObject } from 'class-validator';
|
|
9
9
|
import { Type } from 'class-transformer';
|
|
10
10
|
import { EMAIL_PROVIDER_TYPES } from "../../interfaces/email-config.interface.js";
|
|
11
|
+
import { MaskSecret } from "../../decorators/validation.decorators.js";
|
|
11
12
|
/**
|
|
12
13
|
* DTO for email template configuration
|
|
13
14
|
*/
|
|
@@ -103,6 +104,12 @@ export class EmailConfigDTO {
|
|
|
103
104
|
fromEmail;
|
|
104
105
|
fromName;
|
|
105
106
|
templates;
|
|
107
|
+
/**
|
|
108
|
+
* Decrypted API key for the email provider.
|
|
109
|
+
* Injected at runtime by TenantService from encrypted storage.
|
|
110
|
+
* Masked in API responses, real value available internally.
|
|
111
|
+
*/
|
|
112
|
+
apiKey;
|
|
106
113
|
}
|
|
107
114
|
__decorate([
|
|
108
115
|
ApiPropertyOptional({
|
|
@@ -138,11 +145,20 @@ __decorate([
|
|
|
138
145
|
ValidateNested(),
|
|
139
146
|
Type(() => EmailTemplatesConfigDTO)
|
|
140
147
|
], EmailConfigDTO.prototype, "templates", void 0);
|
|
148
|
+
__decorate([
|
|
149
|
+
ApiPropertyOptional({
|
|
150
|
+
description: 'Email provider API key (masked in responses)',
|
|
151
|
+
type: String,
|
|
152
|
+
example: '...a1b2'
|
|
153
|
+
}),
|
|
154
|
+
IsOptional(),
|
|
155
|
+
IsString(),
|
|
156
|
+
MaskSecret()
|
|
157
|
+
], EmailConfigDTO.prototype, "apiKey", void 0);
|
|
141
158
|
/**
|
|
142
159
|
* Request DTO for email configuration updates (includes API key)
|
|
143
160
|
*/
|
|
144
161
|
export class EmailConfigRequestDTO extends EmailConfigDTO {
|
|
145
|
-
apiKey;
|
|
146
162
|
}
|
|
147
163
|
__decorate([
|
|
148
164
|
ApiPropertyOptional({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-config.dto.js","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/tenant/email-config.dto.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAA0D,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"email-config.dto.js","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/tenant/email-config.dto.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAA0D,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AACvI,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAEpE;;GAEG;AACH,MAAM,OAAO,sBAAsB;IAM/B,UAAU,GAAW,EAAE,CAAC;IAQxB,OAAO,CAAU;IASjB,eAAe,CAA0B;CAC5C;AAlBG;IALC,WAAW,CAAC;QACT,WAAW,EAAE,oEAAoE;QACjF,OAAO,EAAE,gBAAgB;KAC5B,CAAC;IACD,QAAQ,EAAE;0DACa;AAQxB;IANC,mBAAmB,CAAC;QACjB,WAAW,EAAE,yEAAyE;QACtF,OAAO,EAAE,iBAAiB;KAC7B,CAAC;IACD,UAAU,EAAE;IACZ,QAAQ,EAAE;uDACM;AASjB;IAPC,mBAAmB,CAAC;QACjB,WAAW,EAAE,6KAA6K;QAC1L,OAAO,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE;QACtE,IAAI,EAAE,MAAM;KACf,CAAC;IACD,UAAU,EAAE;IACZ,QAAQ,EAAE;+DAC8B;AAG7C;;GAEG;AACH,MAAM,OAAO,uBAAuB;IAQhC,SAAS,CAA0B;IASnC,OAAO,CAA0B;IASjC,aAAa,CAA0B;IASvC,iBAAiB,CAA0B;IAS3C,uBAAuB,CAA0B;CAIpD;AAxCG;IAPC,mBAAmB,CAAC;QACjB,WAAW,EAAE,gDAAgD;QAC7D,IAAI,EAAE,sBAAsB;KAC/B,CAAC;IACD,UAAU,EAAE;IACZ,cAAc,EAAE;IAChB,IAAI,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC;0DACA;AASnC;IAPC,mBAAmB,CAAC;QACjB,WAAW,EAAE,sCAAsC;QACnD,IAAI,EAAE,sBAAsB;KAC/B,CAAC;IACD,UAAU,EAAE;IACZ,cAAc,EAAE;IAChB,IAAI,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC;wDACF;AASjC;IAPC,mBAAmB,CAAC;QACjB,WAAW,EAAE,+BAA+B;QAC5C,IAAI,EAAE,sBAAsB;KAC/B,CAAC;IACD,UAAU,EAAE;IACZ,cAAc,EAAE;IAChB,IAAI,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC;8DACI;AASvC;IAPC,mBAAmB,CAAC;QACjB,WAAW,EAAE,6BAA6B;QAC1C,IAAI,EAAE,sBAAsB;KAC/B,CAAC;IACD,UAAU,EAAE;IACZ,cAAc,EAAE;IAChB,IAAI,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC;kEACQ;AAS3C;IAPC,mBAAmB,CAAC;QACjB,WAAW,EAAE,mCAAmC;QAChD,IAAI,EAAE,sBAAsB;KAC/B,CAAC;IACD,UAAU,EAAE;IACZ,cAAc,EAAE;IAChB,IAAI,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC;wEACc;AAMrD;;GAEG;AACH,MAAM,OAAO,cAAc;IAQvB,QAAQ,CAA0B;IAQlC,SAAS,CAAU;IAQnB,QAAQ,CAAU;IASlB,SAAS,CAA2B;IAEpC;;;;OAIG;IASH,MAAM,CAAU;CACnB;AAzCG;IAPC,mBAAmB,CAAC;QACjB,WAAW,EAAE,oCAAoC;QACjD,IAAI,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;QAC7B,OAAO,EAAE,UAAU;KACtB,CAAC;IACD,UAAU,EAAE;IACZ,IAAI,CAAC,oBAAoB,CAAC;gDACO;AAQlC;IANC,mBAAmB,CAAC;QACjB,WAAW,EAAE,uDAAuD;QACpE,OAAO,EAAE,oBAAoB;KAChC,CAAC;IACD,UAAU,EAAE;IACZ,QAAQ,EAAE;iDACQ;AAQnB;IANC,mBAAmB,CAAC;QACjB,WAAW,EAAE,qBAAqB;QAClC,OAAO,EAAE,aAAa;KACzB,CAAC;IACD,UAAU,EAAE;IACZ,QAAQ,EAAE;gDACO;AASlB;IAPC,mBAAmB,CAAC;QACjB,WAAW,EAAE,6CAA6C;QAC1D,IAAI,EAAE,uBAAuB;KAChC,CAAC;IACD,UAAU,EAAE;IACZ,cAAc,EAAE;IAChB,IAAI,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC;iDACA;AAepC;IARC,mBAAmB,CAAC;QACjB,WAAW,EAAE,8CAA8C;QAC3D,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,SAAS;KACrB,CAAC;IACD,UAAU,EAAE;IACZ,QAAQ,EAAE;IACV,UAAU,EAAE;8CACG;AAGpB;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,cAAc;CAQxD;AADW;IANP,mBAAmB,CAAC;QACjB,WAAW,EAAE,oDAAoD;QACjE,OAAO,EAAE,UAAU;KACtB,CAAC;IACD,UAAU,EAAE;IACZ,QAAQ,EAAE;qDACa"}
|
|
@@ -25,12 +25,5 @@ export declare class TenantDTO extends TenantPublicDTO {
|
|
|
25
25
|
googleApiKey?: string;
|
|
26
26
|
allowedTokenIssuers: ExternalTokenIssuerConfig[];
|
|
27
27
|
emailConfig?: EmailConfigDTO;
|
|
28
|
-
/**
|
|
29
|
-
* Decrypted email API key - injected at runtime by TenantService.
|
|
30
|
-
* Not stored in database (stored encrypted in emailConfig.apiKeyRef).
|
|
31
|
-
* Used internally by EmailModule and MagicLinkWorkflow.
|
|
32
|
-
* @internal
|
|
33
|
-
*/
|
|
34
|
-
emailApiKey?: string;
|
|
35
28
|
}
|
|
36
29
|
//# sourceMappingURL=tenant.dto.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenant.dto.d.ts","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/tenant/tenant.dto.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,kDAAkD,CAAC;AAE7F,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"tenant.dto.d.ts","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/tenant/tenant.dto.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,kDAAkD,CAAC;AAE7F,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpD,qBAAa,eAAe;IAK1B,WAAW,EAAE,MAAM,CAAM;IAMzB,OAAO,EAAE,MAAM,CAAM;IAMrB,EAAE,EAAE,MAAM,CAAM;IAMhB,SAAS,EAAE,IAAI,CAAa;IAM5B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAM3B,cAAc,CAAC,EAAE,MAAM,CAAA;IAMvB,YAAY,CAAC,EAAE,MAAM,CAAA;IAMrB,eAAe,CAAC,EAAE,MAAM,CAAA;IAMxB,cAAc,CAAC,EAAE,MAAM,CAAA;IAMrB,aAAa,EAAE,MAAM,CAAK;CAC7B;AAED,qBAAa,SAAU,SAAQ,eAAe;IAO5C,oBAAoB,EAAE,MAAM,CAAK;IAQjC,YAAY,CAAC,EAAE,MAAM,CAAA;IAQrB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAM5B,UAAU,CAAC,EAAE,MAAM,CAAA;IAMnB,+BAA+B,EAAE,OAAO,CAAQ;IAGhD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IA2BvB,2BAA2B,EAAE,oBAAoB,CAAiC;IAQlF,iBAAiB,EAAE,MAAM,CAAwB;IAMjD,YAAY,CAAC,EAAE,MAAM,CAAA;IAMrB,mBAAmB,EAAE,yBAAyB,EAAE,CAAK;IAMrD,WAAW,CAAC,EAAE,cAAc,CAAA;CAC7B"}
|
|
@@ -8,6 +8,7 @@ import { ApiProperty, ApiPropertyOptional } from "@nestjs/swagger";
|
|
|
8
8
|
import { WalletManagementType } from "../../enum/wallet.enum.js";
|
|
9
9
|
import { ExternalTokenIssuerConfigDTO } from "./external-token-issuer-config.dto.js";
|
|
10
10
|
import { EmailConfigDTO } from "./email-config.dto.js";
|
|
11
|
+
import { MaskSecret } from "../../decorators/validation.decorators.js";
|
|
11
12
|
export class TenantPublicDTO {
|
|
12
13
|
projectName = '';
|
|
13
14
|
acronym = '';
|
|
@@ -108,13 +109,6 @@ export class TenantDTO extends TenantPublicDTO {
|
|
|
108
109
|
googleApiKey;
|
|
109
110
|
allowedTokenIssuers = [];
|
|
110
111
|
emailConfig;
|
|
111
|
-
/**
|
|
112
|
-
* Decrypted email API key - injected at runtime by TenantService.
|
|
113
|
-
* Not stored in database (stored encrypted in emailConfig.apiKeyRef).
|
|
114
|
-
* Used internally by EmailModule and MagicLinkWorkflow.
|
|
115
|
-
* @internal
|
|
116
|
-
*/
|
|
117
|
-
emailApiKey;
|
|
118
112
|
}
|
|
119
113
|
__decorate([
|
|
120
114
|
ApiProperty({
|
|
@@ -124,15 +118,19 @@ __decorate([
|
|
|
124
118
|
], TenantDTO.prototype, "testnetProjectApiKey", void 0);
|
|
125
119
|
__decorate([
|
|
126
120
|
ApiPropertyOptional({
|
|
127
|
-
description: 'Stripe API key for tenant. Used in case of stripe payment.',
|
|
128
|
-
type: String
|
|
129
|
-
|
|
121
|
+
description: 'Stripe API key for tenant (masked). Used in case of stripe payment.',
|
|
122
|
+
type: String,
|
|
123
|
+
example: 'sk_...a1b2'
|
|
124
|
+
}),
|
|
125
|
+
MaskSecret({ prefix: 'sk_' })
|
|
130
126
|
], TenantDTO.prototype, "stripeApiKey", void 0);
|
|
131
127
|
__decorate([
|
|
132
128
|
ApiPropertyOptional({
|
|
133
|
-
description: 'Stripe webhook secret for tenant. Used in case of stripe payment.',
|
|
134
|
-
type: String
|
|
135
|
-
|
|
129
|
+
description: 'Stripe webhook secret for tenant (masked). Used in case of stripe payment.',
|
|
130
|
+
type: String,
|
|
131
|
+
example: 'whsec_...x9y0'
|
|
132
|
+
}),
|
|
133
|
+
MaskSecret({ prefix: 'whsec_' })
|
|
136
134
|
], TenantDTO.prototype, "stripeWebhookSecret", void 0);
|
|
137
135
|
__decorate([
|
|
138
136
|
ApiPropertyOptional({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenant.dto.js","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/tenant/tenant.dto.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"tenant.dto.js","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/tenant/tenant.dto.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED