@brightchain/brightchain-lib 0.29.8 → 0.29.10
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/package.json +1 -1
- package/src/lib/interfaces/member/memberData.d.ts +4 -0
- package/src/lib/interfaces/member/memberData.d.ts.map +1 -1
- package/src/lib/interfaces/messaging/index.d.ts +1 -0
- package/src/lib/interfaces/messaging/index.d.ts.map +1 -1
- package/src/lib/interfaces/messaging/index.js +1 -0
- package/src/lib/interfaces/messaging/index.js.map +1 -1
- package/src/lib/interfaces/messaging/recipientVerification.d.ts +25 -0
- package/src/lib/interfaces/messaging/recipientVerification.d.ts.map +1 -0
- package/src/lib/interfaces/messaging/recipientVerification.js +18 -0
- package/src/lib/interfaces/messaging/recipientVerification.js.map +1 -0
- package/src/lib/utils/attachmentValidation.d.ts +65 -0
- package/src/lib/utils/attachmentValidation.d.ts.map +1 -0
- package/src/lib/utils/attachmentValidation.js +96 -0
- package/src/lib/utils/attachmentValidation.js.map +1 -0
- package/src/lib/utils/index.d.ts +14 -0
- package/src/lib/utils/index.d.ts.map +1 -1
- package/src/lib/utils/index.js +17 -0
- package/src/lib/utils/index.js.map +1 -1
package/package.json
CHANGED
|
@@ -43,6 +43,10 @@ export interface IPrivateMemberData<TID extends PlatformID = Uint8Array> {
|
|
|
43
43
|
autoReplication: boolean;
|
|
44
44
|
minRedundancy: number;
|
|
45
45
|
preferredRegions: string[];
|
|
46
|
+
/** PEM-encoded X.509 certificate for S/MIME encryption and signing */
|
|
47
|
+
smimeCertificate?: string;
|
|
48
|
+
/** ASCII-armored GPG public key */
|
|
49
|
+
gpgPublicKey?: string;
|
|
46
50
|
};
|
|
47
51
|
activityLog: Array<{
|
|
48
52
|
timestamp: Date;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memberData.d.ts","sourceRoot":"","sources":["../../../../../../brightchain-lib/src/lib/interfaces/member/memberData.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,MAAM,EACN,UAAU,EACV,UAAU,EACV,YAAY,EACb,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,GAAG,SAAS,UAAU,GAAG,UAAU;IAEpE,EAAE,EAAE,GAAG,CAAC;IACR,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,IAAI,CAAC;IAClB,WAAW,EAAE,IAAI,CAAC;IAGlB,SAAS,EAAE,UAAU,CAAC;IACtB,eAAe,EAAE,UAAU,CAAC;IAG5B,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,IAAI,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IAGnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IAGpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,GAAG,SAAS,UAAU,GAAG,UAAU;IAErE,EAAE,EAAE,GAAG,CAAC;IACR,YAAY,EAAE,WAAW,CAAC;IAG1B,YAAY,CAAC,EAAE,UAAU,CAAC;IAG1B,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,0GAA0G;IAC1G,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAElC,gEAAgE;IAChE,yBAAyB,CAAC,EAAE,0BAA0B,CAAC;IAEvD,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAG1B,YAAY,EAAE,GAAG,EAAE,CAAC;IACpB,YAAY,EAAE,GAAG,EAAE,CAAC;IAGpB,QAAQ,EAAE;QACR,eAAe,EAAE,OAAO,CAAC;QACzB,aAAa,EAAE,MAAM,CAAC;QACtB,gBAAgB,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"memberData.d.ts","sourceRoot":"","sources":["../../../../../../brightchain-lib/src/lib/interfaces/member/memberData.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../brightchain-lib/src/lib/interfaces/messaging/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../brightchain-lib/src/lib/interfaces/messaging/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC"}
|
|
@@ -10,4 +10,5 @@ tslib_1.__exportStar(require("./messageMetadata"), exports);
|
|
|
10
10
|
tslib_1.__exportStar(require("./messageMetadataStore"), exports);
|
|
11
11
|
tslib_1.__exportStar(require("./messageSystemConfig"), exports);
|
|
12
12
|
tslib_1.__exportStar(require("./mimePart"), exports);
|
|
13
|
+
tslib_1.__exportStar(require("./recipientVerification"), exports);
|
|
13
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../brightchain-lib/src/lib/interfaces/messaging/index.ts"],"names":[],"mappings":";;;AAAA,+DAAqC;AACrC,yDAA+B;AAC/B,0DAAgC;AAChC,yDAA+B;AAC/B,0DAAgC;AAChC,4DAAkC;AAClC,iEAAuC;AACvC,gEAAsC;AACtC,qDAA2B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../brightchain-lib/src/lib/interfaces/messaging/index.ts"],"names":[],"mappings":";;;AAAA,+DAAqC;AACrC,yDAA+B;AAC/B,0DAAgC;AAChC,yDAA+B;AAC/B,0DAAgC;AAChC,4DAAkC;AAClC,iEAAuC;AACvC,gEAAsC;AACtC,qDAA2B;AAC3B,kEAAwC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local recipient verification types.
|
|
3
|
+
*
|
|
4
|
+
* Defines the IRecipientVerificationResult interface returned by the
|
|
5
|
+
* verify-recipient endpoint, plus rate-limit constants. Shared between
|
|
6
|
+
* frontend and backend via brightchain-lib.
|
|
7
|
+
*
|
|
8
|
+
* @see Requirements 8.7, 8.8
|
|
9
|
+
* @module recipientVerification
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Response shape for the local recipient verification endpoint.
|
|
13
|
+
* Defined in brightchain-lib so both frontend and backend share the type.
|
|
14
|
+
*/
|
|
15
|
+
export interface IRecipientVerificationResult {
|
|
16
|
+
/** The username (local part) that was checked. */
|
|
17
|
+
username: string;
|
|
18
|
+
/** Whether a member with this username exists on the local domain. */
|
|
19
|
+
exists: boolean;
|
|
20
|
+
}
|
|
21
|
+
/** Max verification requests per authenticated user per minute. */
|
|
22
|
+
export declare const RECIPIENT_VERIFY_RATE_LIMIT = 10;
|
|
23
|
+
/** Sliding window duration for the per-user rate limit (1 minute). */
|
|
24
|
+
export declare const RECIPIENT_VERIFY_WINDOW_MS = 60000;
|
|
25
|
+
//# sourceMappingURL=recipientVerification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipientVerification.d.ts","sourceRoot":"","sources":["../../../../../../brightchain-lib/src/lib/interfaces/messaging/recipientVerification.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;GAGG;AACH,MAAM,WAAW,4BAA4B;IAC3C,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,mEAAmE;AACnE,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAE9C,sEAAsE;AACtE,eAAO,MAAM,0BAA0B,QAAS,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Local recipient verification types.
|
|
4
|
+
*
|
|
5
|
+
* Defines the IRecipientVerificationResult interface returned by the
|
|
6
|
+
* verify-recipient endpoint, plus rate-limit constants. Shared between
|
|
7
|
+
* frontend and backend via brightchain-lib.
|
|
8
|
+
*
|
|
9
|
+
* @see Requirements 8.7, 8.8
|
|
10
|
+
* @module recipientVerification
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.RECIPIENT_VERIFY_WINDOW_MS = exports.RECIPIENT_VERIFY_RATE_LIMIT = void 0;
|
|
14
|
+
/** Max verification requests per authenticated user per minute. */
|
|
15
|
+
exports.RECIPIENT_VERIFY_RATE_LIMIT = 10;
|
|
16
|
+
/** Sliding window duration for the per-user rate limit (1 minute). */
|
|
17
|
+
exports.RECIPIENT_VERIFY_WINDOW_MS = 60_000;
|
|
18
|
+
//# sourceMappingURL=recipientVerification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipientVerification.js","sourceRoot":"","sources":["../../../../../../brightchain-lib/src/lib/interfaces/messaging/recipientVerification.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAaH,mEAAmE;AACtD,QAAA,2BAA2B,GAAG,EAAE,CAAC;AAE9C,sEAAsE;AACzD,QAAA,0BAA0B,GAAG,MAAM,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attachment Validation Utilities
|
|
3
|
+
*
|
|
4
|
+
* Pure functions for validating email attachment sizes and formatting file sizes
|
|
5
|
+
* into human-readable strings. Shared between frontend (instant feedback) and
|
|
6
|
+
* backend (authoritative validation).
|
|
7
|
+
*
|
|
8
|
+
* @module attachmentValidation
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Maximum allowed attachment size in bytes (25 MB).
|
|
12
|
+
* Matches the IEmailGatewayConfig.maxMessageSizeBytes default.
|
|
13
|
+
*/
|
|
14
|
+
export declare const MAX_ATTACHMENT_SIZE_BYTES: number;
|
|
15
|
+
/**
|
|
16
|
+
* Validate that a single attachment's size does not exceed the maximum.
|
|
17
|
+
*
|
|
18
|
+
* @param sizeBytes - The size of the attachment in bytes
|
|
19
|
+
* @param maxBytes - The maximum allowed size in bytes
|
|
20
|
+
* @returns true if sizeBytes ≤ maxBytes
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* validateAttachmentSize(1024, MAX_ATTACHMENT_SIZE_BYTES); // true
|
|
25
|
+
* validateAttachmentSize(30 * 1024 * 1024, MAX_ATTACHMENT_SIZE_BYTES); // false
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare function validateAttachmentSize(sizeBytes: number, maxBytes: number): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Validate that all attachments individually and cumulatively fit within the limit.
|
|
31
|
+
*
|
|
32
|
+
* Returns true if and only if every individual size ≤ maxBytes AND the sum of
|
|
33
|
+
* all sizes ≤ maxBytes.
|
|
34
|
+
*
|
|
35
|
+
* @param sizes - Array of attachment sizes in bytes
|
|
36
|
+
* @param maxBytes - The maximum allowed size in bytes (applies per-file and total)
|
|
37
|
+
* @returns true if all individual sizes and the total are within the limit
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* validateTotalAttachmentSize([1024, 2048], MAX_ATTACHMENT_SIZE_BYTES); // true
|
|
42
|
+
* validateTotalAttachmentSize([20 * 1024 * 1024, 10 * 1024 * 1024], MAX_ATTACHMENT_SIZE_BYTES); // false (total > 25MB)
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare function validateTotalAttachmentSize(sizes: number[], maxBytes: number): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Format a byte count into a human-readable string with appropriate units.
|
|
48
|
+
*
|
|
49
|
+
* Uses units B, KB, MB, GB. The numeric value is always < 1024 for B, KB, and MB
|
|
50
|
+
* units. GB has no upper bound. Values are rounded to two decimal places for
|
|
51
|
+
* KB, MB, and GB.
|
|
52
|
+
*
|
|
53
|
+
* @param bytes - Non-negative byte count to format
|
|
54
|
+
* @returns Human-readable string (e.g., "1.50 KB", "25.00 MB")
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```typescript
|
|
58
|
+
* formatFileSize(0); // "0 B"
|
|
59
|
+
* formatFileSize(512); // "512 B"
|
|
60
|
+
* formatFileSize(1536); // "1.50 KB"
|
|
61
|
+
* formatFileSize(26214400); // "25.00 MB"
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export declare function formatFileSize(bytes: number): string;
|
|
65
|
+
//# sourceMappingURL=attachmentValidation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachmentValidation.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/utils/attachmentValidation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;GAGG;AACH,eAAO,MAAM,yBAAyB,QAAmB,CAAC;AAE1D;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAET;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,MAAM,EAAE,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAST;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAiBpD"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Attachment Validation Utilities
|
|
4
|
+
*
|
|
5
|
+
* Pure functions for validating email attachment sizes and formatting file sizes
|
|
6
|
+
* into human-readable strings. Shared between frontend (instant feedback) and
|
|
7
|
+
* backend (authoritative validation).
|
|
8
|
+
*
|
|
9
|
+
* @module attachmentValidation
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.MAX_ATTACHMENT_SIZE_BYTES = void 0;
|
|
13
|
+
exports.validateAttachmentSize = validateAttachmentSize;
|
|
14
|
+
exports.validateTotalAttachmentSize = validateTotalAttachmentSize;
|
|
15
|
+
exports.formatFileSize = formatFileSize;
|
|
16
|
+
/**
|
|
17
|
+
* Maximum allowed attachment size in bytes (25 MB).
|
|
18
|
+
* Matches the IEmailGatewayConfig.maxMessageSizeBytes default.
|
|
19
|
+
*/
|
|
20
|
+
exports.MAX_ATTACHMENT_SIZE_BYTES = 25 * 1024 * 1024;
|
|
21
|
+
/**
|
|
22
|
+
* Validate that a single attachment's size does not exceed the maximum.
|
|
23
|
+
*
|
|
24
|
+
* @param sizeBytes - The size of the attachment in bytes
|
|
25
|
+
* @param maxBytes - The maximum allowed size in bytes
|
|
26
|
+
* @returns true if sizeBytes ≤ maxBytes
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* validateAttachmentSize(1024, MAX_ATTACHMENT_SIZE_BYTES); // true
|
|
31
|
+
* validateAttachmentSize(30 * 1024 * 1024, MAX_ATTACHMENT_SIZE_BYTES); // false
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
function validateAttachmentSize(sizeBytes, maxBytes) {
|
|
35
|
+
return sizeBytes <= maxBytes;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Validate that all attachments individually and cumulatively fit within the limit.
|
|
39
|
+
*
|
|
40
|
+
* Returns true if and only if every individual size ≤ maxBytes AND the sum of
|
|
41
|
+
* all sizes ≤ maxBytes.
|
|
42
|
+
*
|
|
43
|
+
* @param sizes - Array of attachment sizes in bytes
|
|
44
|
+
* @param maxBytes - The maximum allowed size in bytes (applies per-file and total)
|
|
45
|
+
* @returns true if all individual sizes and the total are within the limit
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```typescript
|
|
49
|
+
* validateTotalAttachmentSize([1024, 2048], MAX_ATTACHMENT_SIZE_BYTES); // true
|
|
50
|
+
* validateTotalAttachmentSize([20 * 1024 * 1024, 10 * 1024 * 1024], MAX_ATTACHMENT_SIZE_BYTES); // false (total > 25MB)
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
function validateTotalAttachmentSize(sizes, maxBytes) {
|
|
54
|
+
let total = 0;
|
|
55
|
+
for (const size of sizes) {
|
|
56
|
+
if (size > maxBytes) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
total += size;
|
|
60
|
+
}
|
|
61
|
+
return total <= maxBytes;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Format a byte count into a human-readable string with appropriate units.
|
|
65
|
+
*
|
|
66
|
+
* Uses units B, KB, MB, GB. The numeric value is always < 1024 for B, KB, and MB
|
|
67
|
+
* units. GB has no upper bound. Values are rounded to two decimal places for
|
|
68
|
+
* KB, MB, and GB.
|
|
69
|
+
*
|
|
70
|
+
* @param bytes - Non-negative byte count to format
|
|
71
|
+
* @returns Human-readable string (e.g., "1.50 KB", "25.00 MB")
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* formatFileSize(0); // "0 B"
|
|
76
|
+
* formatFileSize(512); // "512 B"
|
|
77
|
+
* formatFileSize(1536); // "1.50 KB"
|
|
78
|
+
* formatFileSize(26214400); // "25.00 MB"
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
function formatFileSize(bytes) {
|
|
82
|
+
if (bytes < 1024) {
|
|
83
|
+
return `${bytes} B`;
|
|
84
|
+
}
|
|
85
|
+
const kb = bytes / 1024;
|
|
86
|
+
if (kb < 1024) {
|
|
87
|
+
return `${kb.toFixed(2)} KB`;
|
|
88
|
+
}
|
|
89
|
+
const mb = kb / 1024;
|
|
90
|
+
if (mb < 1024) {
|
|
91
|
+
return `${mb.toFixed(2)} MB`;
|
|
92
|
+
}
|
|
93
|
+
const gb = mb / 1024;
|
|
94
|
+
return `${gb.toFixed(2)} GB`;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=attachmentValidation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachmentValidation.js","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/utils/attachmentValidation.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAqBH,wDAKC;AAkBD,kEAYC;AAoBD,wCAiBC;AA3FD;;;GAGG;AACU,QAAA,yBAAyB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAE1D;;;;;;;;;;;;GAYG;AACH,SAAgB,sBAAsB,CACpC,SAAiB,EACjB,QAAgB;IAEhB,OAAO,SAAS,IAAI,QAAQ,CAAC;AAC/B,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,2BAA2B,CACzC,KAAe,EACf,QAAgB;IAEhB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,IAAI,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,IAAI,QAAQ,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAgB,cAAc,CAAC,KAAa;IAC1C,IAAI,KAAK,GAAG,IAAI,EAAE,CAAC;QACjB,OAAO,GAAG,KAAK,IAAI,CAAC;IACtB,CAAC;IAED,MAAM,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;QACd,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/B,CAAC;IAED,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;QACd,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/B,CAAC;IAED,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACrB,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/B,CAAC"}
|
package/src/lib/utils/index.d.ts
CHANGED
|
@@ -121,4 +121,18 @@ export * from './dateUtils';
|
|
|
121
121
|
* @see {@link paginateItems}
|
|
122
122
|
*/
|
|
123
123
|
export * from './pagination';
|
|
124
|
+
/**
|
|
125
|
+
* Email attachment validation and file size formatting utilities.
|
|
126
|
+
*
|
|
127
|
+
* Provides pure functions shared between frontend and backend for:
|
|
128
|
+
* - Validating individual attachment sizes against a maximum
|
|
129
|
+
* - Validating cumulative attachment sizes
|
|
130
|
+
* - Formatting byte counts into human-readable strings (B, KB, MB, GB)
|
|
131
|
+
*
|
|
132
|
+
* @see {@link validateAttachmentSize}
|
|
133
|
+
* @see {@link validateTotalAttachmentSize}
|
|
134
|
+
* @see {@link formatFileSize}
|
|
135
|
+
* @see {@link MAX_ATTACHMENT_SIZE_BYTES}
|
|
136
|
+
*/
|
|
137
|
+
export * from './attachmentValidation';
|
|
124
138
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAKH;;;;;;;;;;;;GAYG;AACH,cAAc,aAAa,CAAC;AAK5B;;;;;;;;;GASG;AACH,cAAc,iBAAiB,CAAC;AAKhC;;;;;;;;;GASG;AACH,cAAc,YAAY,CAAC;AAK3B;;;;;;;;;;;;GAYG;AACH,cAAc,gBAAgB,CAAC;AAK/B;;;;;;;;;;;;GAYG;AACH,cAAc,mBAAmB,CAAC;AAKlC;;;;;;;;;;;;;GAaG;AACH,cAAc,cAAc,CAAC;AAK7B;;;;;;;;;;;;GAYG;AACH,cAAc,aAAa,CAAC;AAK5B;;;;;;;GAOG;AACH,cAAc,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAKH;;;;;;;;;;;;GAYG;AACH,cAAc,aAAa,CAAC;AAK5B;;;;;;;;;GASG;AACH,cAAc,iBAAiB,CAAC;AAKhC;;;;;;;;;GASG;AACH,cAAc,YAAY,CAAC;AAK3B;;;;;;;;;;;;GAYG;AACH,cAAc,gBAAgB,CAAC;AAK/B;;;;;;;;;;;;GAYG;AACH,cAAc,mBAAmB,CAAC;AAKlC;;;;;;;;;;;;;GAaG;AACH,cAAc,cAAc,CAAC;AAK7B;;;;;;;;;;;;GAYG;AACH,cAAc,aAAa,CAAC;AAK5B;;;;;;;GAOG;AACH,cAAc,cAAc,CAAC;AAK7B;;;;;;;;;;;;GAYG;AACH,cAAc,wBAAwB,CAAC"}
|
package/src/lib/utils/index.js
CHANGED
|
@@ -148,4 +148,21 @@ tslib_1.__exportStar(require("./dateUtils"), exports);
|
|
|
148
148
|
* @see {@link paginateItems}
|
|
149
149
|
*/
|
|
150
150
|
tslib_1.__exportStar(require("./pagination"), exports);
|
|
151
|
+
// ============================================================================
|
|
152
|
+
// Attachment Validation Utilities
|
|
153
|
+
// ============================================================================
|
|
154
|
+
/**
|
|
155
|
+
* Email attachment validation and file size formatting utilities.
|
|
156
|
+
*
|
|
157
|
+
* Provides pure functions shared between frontend and backend for:
|
|
158
|
+
* - Validating individual attachment sizes against a maximum
|
|
159
|
+
* - Validating cumulative attachment sizes
|
|
160
|
+
* - Formatting byte counts into human-readable strings (B, KB, MB, GB)
|
|
161
|
+
*
|
|
162
|
+
* @see {@link validateAttachmentSize}
|
|
163
|
+
* @see {@link validateTotalAttachmentSize}
|
|
164
|
+
* @see {@link formatFileSize}
|
|
165
|
+
* @see {@link MAX_ATTACHMENT_SIZE_BYTES}
|
|
166
|
+
*/
|
|
167
|
+
tslib_1.__exportStar(require("./attachmentValidation"), exports);
|
|
151
168
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/utils/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;AAEH,+EAA+E;AAC/E,uBAAuB;AACvB,+EAA+E;AAC/E;;;;;;;;;;;;GAYG;AACH,sDAA4B;AAE5B,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAC/E;;;;;;;;;GASG;AACH,0DAAgC;AAEhC,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAC/E;;;;;;;;;GASG;AACH,qDAA2B;AAE3B,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAC/E;;;;;;;;;;;;GAYG;AACH,yDAA+B;AAE/B,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAC/E;;;;;;;;;;;;GAYG;AACH,4DAAkC;AAElC,+EAA+E;AAC/E,uBAAuB;AACvB,+EAA+E;AAC/E;;;;;;;;;;;;;GAaG;AACH,uDAA6B;AAE7B,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAC/E;;;;;;;;;;;;GAYG;AACH,sDAA4B;AAE5B,+EAA+E;AAC/E,uBAAuB;AACvB,+EAA+E;AAC/E;;;;;;;GAOG;AACH,uDAA6B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/utils/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;AAEH,+EAA+E;AAC/E,uBAAuB;AACvB,+EAA+E;AAC/E;;;;;;;;;;;;GAYG;AACH,sDAA4B;AAE5B,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAC/E;;;;;;;;;GASG;AACH,0DAAgC;AAEhC,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAC/E;;;;;;;;;GASG;AACH,qDAA2B;AAE3B,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAC/E;;;;;;;;;;;;GAYG;AACH,yDAA+B;AAE/B,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAC/E;;;;;;;;;;;;GAYG;AACH,4DAAkC;AAElC,+EAA+E;AAC/E,uBAAuB;AACvB,+EAA+E;AAC/E;;;;;;;;;;;;;GAaG;AACH,uDAA6B;AAE7B,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAC/E;;;;;;;;;;;;GAYG;AACH,sDAA4B;AAE5B,+EAA+E;AAC/E,uBAAuB;AACvB,+EAA+E;AAC/E;;;;;;;GAOG;AACH,uDAA6B;AAE7B,+EAA+E;AAC/E,kCAAkC;AAClC,+EAA+E;AAC/E;;;;;;;;;;;;GAYG;AACH,iEAAuC"}
|