@cranberry-money/shared-utils 8.23.412 → 8.23.414
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/dist/address.d.ts +4 -6
- package/dist/address.d.ts.map +1 -1
- package/dist/address.js +6 -100
- package/dist/address.js.map +1 -1
- package/dist/formatting-labels.d.ts +3 -0
- package/dist/formatting-labels.d.ts.map +1 -0
- package/dist/formatting-labels.js +26 -0
- package/dist/formatting-labels.js.map +1 -0
- package/dist/formatting.d.ts +0 -130
- package/dist/formatting.d.ts.map +1 -1
- package/dist/formatting.js +4 -203
- package/dist/formatting.js.map +1 -1
- package/dist/index.d.ts +9 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -33
- package/dist/index.js.map +1 -1
- package/dist/phoneFormatting.d.ts +2 -20
- package/dist/phoneFormatting.d.ts.map +1 -1
- package/dist/phoneFormatting.js +11 -143
- package/dist/phoneFormatting.js.map +1 -1
- package/dist/user-validation.d.ts +1 -2
- package/dist/user-validation.d.ts.map +1 -1
- package/dist/user-validation.js +10 -59
- package/dist/user-validation.js.map +1 -1
- package/dist/user-verification.d.ts +2 -39
- package/dist/user-verification.d.ts.map +1 -1
- package/dist/user-verification.js +11 -58
- package/dist/user-verification.js.map +1 -1
- package/dist/validation.d.ts +1 -3
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +10 -47
- package/dist/validation.js.map +1 -1
- package/package.json +3 -3
- package/dist/badges.d.ts +0 -2
- package/dist/badges.d.ts.map +0 -1
- package/dist/badges.js +0 -2
- package/dist/badges.js.map +0 -1
- package/dist/portfolio.d.ts +0 -12
- package/dist/portfolio.d.ts.map +0 -1
- package/dist/portfolio.js +0 -37
- package/dist/portfolio.js.map +0 -1
- package/dist/user-preferences.d.ts +0 -28
- package/dist/user-preferences.d.ts.map +0 -1
- package/dist/user-preferences.js +0 -88
- package/dist/user-preferences.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,36 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
export {
|
|
3
|
-
|
|
1
|
+
export { formatFullDate, formatShortDate, formatTime, formatFullDateTime, getDateRange } from './date';
|
|
2
|
+
export { formatCurrency, formatCryptoBalance, formatPercentage, getBlockchainShortName } from './formatting';
|
|
3
|
+
export { isNumericOnly, validatePassword, formatVerificationToken, validateEmailConfirmation, isValidFullName, isValidPhoneFormat, formatPhoneNumber } from './validation';
|
|
4
|
+
export { validateWalletAddress, detectChainFromAddress, formatWalletAddressShort, formatWalletAddressMedium } from './validation/wallets';
|
|
5
|
+
export { hasActiveFilters, countActiveFilters } from './filters';
|
|
6
|
+
export { getAssetType, getAssetTypeVariant } from './assets';
|
|
4
7
|
export { parseAddress, getAddressDisplayLines } from './address';
|
|
5
|
-
|
|
6
|
-
export {
|
|
7
|
-
// Currency and number formatting utilities
|
|
8
|
-
export { NUMBER_FORMAT_OPTIONS_CURRENCY, NUMBER_FORMAT_OPTIONS_CURRENCY_SIGNED, parseCurrencyInput, formatCurrency, formatQuantityWithSuffix, formatTransactionAmount, formatBSB, formatAccountNumber, formatCryptoBalance, getBlockchainShortName,
|
|
9
|
-
// Label formatting
|
|
10
|
-
formatSourceOfFunds, formatIntendedUse,
|
|
11
|
-
// Percentage formatting
|
|
12
|
-
formatPercentage, formatAllocationPercentage, } from './formatting';
|
|
13
|
-
// Portfolio utilities
|
|
14
|
-
export { formatPortfolioValue, calculateReturnPercentage, parseNumericValue, validateAllocations } from './portfolio';
|
|
15
|
-
// Validation utilities
|
|
16
|
-
export { isNumericOnly, validatePassword, formatVerificationToken, validateEmailConfirmation, isValidPhoneFormat, isValidFullName, formatPhoneNumber, isValidSourceOfFunds, isValidOccupation, } from './validation';
|
|
17
|
-
// Wallet validation utilities
|
|
18
|
-
export { isValidEthereumAddress, isValidBitcoinAddress, validateWalletAddress, detectChainFromAddress, formatWalletAddress, formatWalletAddressShort, formatWalletAddressMedium, formatWalletAddressLong, getBlockchainExplorerUrl, getTransactionExplorerUrl, isEVMCompatible, isBitcoinBased, } from './validation/wallets';
|
|
19
|
-
// User profile validation utilities
|
|
8
|
+
export { formatPhoneForDisplay, cleanPhoneNumber } from './phoneFormatting';
|
|
9
|
+
export { formatSourceOfFunds, formatIntendedUse } from './formatting-labels';
|
|
20
10
|
export { validateUserProfileField } from './user-validation';
|
|
21
|
-
|
|
22
|
-
export { hasActiveFilters, countActiveFilters, hasActiveTransactionFilters, countActiveTransactionFilters, } from './filters';
|
|
23
|
-
// User preferences utilities
|
|
24
|
-
export { validateUserPreferences, hasUserPreferences, getUserPreferencesSummary, formatUserPreferencesForDisplay, getAvailablePortfoliosForAccount, isValidUserPreferencesUpdate, getUserPreferencesCacheKey, sanitizeUserPreferencesInput, } from './user-preferences';
|
|
25
|
-
// Phone formatting utilities
|
|
26
|
-
export { formatPhoneForDisplay, cleanPhoneNumber, getExpectedPhoneLength } from './phoneFormatting';
|
|
27
|
-
// Asset utilities (Phase 7)
|
|
28
|
-
export {
|
|
29
|
-
// Asset functions
|
|
30
|
-
getAssetType, getAssetTypeVariant,
|
|
31
|
-
// Phase 7 Constants
|
|
32
|
-
ASSET_TYPE_NATIVE_CRYPTO, ASSET_TYPE_STABLECOIN, ASSET_TYPE_TOKENIZED_SECURITY, ASSET_TYPE_TOKENIZED_RWA, ASSET_TYPE_SYNTHETIC, } from './assets';
|
|
33
|
-
// User verification utilities
|
|
34
|
-
export { getUserVerificationStatus, isUserVerified, isVerificationPending, isVerificationRejected, } from './user-verification';
|
|
35
|
-
// No re-exports - consumers should import directly from @cranberry-money/shared-types
|
|
11
|
+
export { getUserVerificationStatus } from './user-verification';
|
|
36
12
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,kBAAkB,EAAE,YAAY,EAAkB,MAAM,QAAQ,CAAC;AACvH,OAAO,EAAE,cAAc,EAA8B,mBAAmB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACzI,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC3K,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAC1I,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAA+B,MAAM,qBAAqB,CAAC"}
|
|
@@ -1,21 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* Format a phone number for display based on country
|
|
4
|
-
* @param phoneNumber - Raw phone number string
|
|
5
|
-
* @param country - Country data object
|
|
6
|
-
* @returns Formatted phone number string
|
|
7
|
-
*/
|
|
8
|
-
export declare const formatPhoneForDisplay: (phoneNumber: string, country: CountryData) => string;
|
|
9
|
-
/**
|
|
10
|
-
* Remove formatting from phone number to get clean digits
|
|
11
|
-
* @param formattedNumber - Formatted phone number string
|
|
12
|
-
* @returns Clean digit-only string
|
|
13
|
-
*/
|
|
14
|
-
export declare const cleanPhoneNumber: (formattedNumber: string) => string;
|
|
15
|
-
/**
|
|
16
|
-
* Get the expected phone number length for a country
|
|
17
|
-
* @param country - Country data object
|
|
18
|
-
* @returns Expected number of digits (without country code)
|
|
19
|
-
*/
|
|
20
|
-
export declare const getExpectedPhoneLength: (country: CountryData) => number;
|
|
1
|
+
export declare function formatPhoneForDisplay(phoneNumber: string): string;
|
|
2
|
+
export declare function cleanPhoneNumber(phoneNumber: string): string;
|
|
21
3
|
//# sourceMappingURL=phoneFormatting.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phoneFormatting.d.ts","sourceRoot":"","sources":["../src/phoneFormatting.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"phoneFormatting.d.ts","sourceRoot":"","sources":["../src/phoneFormatting.ts"],"names":[],"mappings":"AAAA,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAQjE;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE5D"}
|
package/dist/phoneFormatting.js
CHANGED
|
@@ -1,146 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* Provides country-specific formatting patterns and input helpers
|
|
4
|
-
*/
|
|
5
|
-
// Phone number formatting patterns for different countries
|
|
6
|
-
const PHONE_PATTERNS = {
|
|
7
|
-
// Australia: 04XX XXX XXX or 03 XXXX XXXX
|
|
8
|
-
AU: {
|
|
9
|
-
pattern: /^(\d{3})(\d{3})(\d{3})$/,
|
|
10
|
-
format: '$1 $2 $3',
|
|
11
|
-
},
|
|
12
|
-
// US/Canada: (XXX) XXX-XXXX
|
|
13
|
-
US: {
|
|
14
|
-
pattern: /^(\d{3})(\d{3})(\d{4})$/,
|
|
15
|
-
format: '($1) $2-$3',
|
|
16
|
-
},
|
|
17
|
-
CA: {
|
|
18
|
-
pattern: /^(\d{3})(\d{3})(\d{4})$/,
|
|
19
|
-
format: '($1) $2-$3',
|
|
20
|
-
},
|
|
21
|
-
// UK: 07XXX XXXXXX
|
|
22
|
-
GB: {
|
|
23
|
-
pattern: /^(\d{4})(\d{6})$/,
|
|
24
|
-
format: '$1 $2',
|
|
25
|
-
},
|
|
26
|
-
// Germany: 01XX XXXXXXX
|
|
27
|
-
DE: {
|
|
28
|
-
pattern: /^(\d{4})(\d{7})$/,
|
|
29
|
-
format: '$1 $2',
|
|
30
|
-
},
|
|
31
|
-
// France: 06 XX XX XX XX
|
|
32
|
-
FR: {
|
|
33
|
-
pattern: /^(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/,
|
|
34
|
-
format: '$1 $2 $3 $4 $5',
|
|
35
|
-
},
|
|
36
|
-
// Japan: 090-XXXX-XXXX
|
|
37
|
-
JP: {
|
|
38
|
-
pattern: /^(\d{3})(\d{4})(\d{4})$/,
|
|
39
|
-
format: '$1-$2-$3',
|
|
40
|
-
},
|
|
41
|
-
// Singapore: 9XXX XXXX
|
|
42
|
-
SG: {
|
|
43
|
-
pattern: /^(\d{4})(\d{4})$/,
|
|
44
|
-
format: '$1 $2',
|
|
45
|
-
},
|
|
46
|
-
// New Zealand: 02X XXX XXXX
|
|
47
|
-
NZ: {
|
|
48
|
-
pattern: /^(\d{3})(\d{3})(\d{4})$/,
|
|
49
|
-
format: '$1 $2 $3',
|
|
50
|
-
},
|
|
51
|
-
// India: 9XXXX XXXXX
|
|
52
|
-
IN: {
|
|
53
|
-
pattern: /^(\d{5})(\d{5})$/,
|
|
54
|
-
format: '$1 $2',
|
|
55
|
-
},
|
|
56
|
-
};
|
|
57
|
-
// Default pattern for unknown countries
|
|
58
|
-
const DEFAULT_PATTERN = {
|
|
59
|
-
pattern: /^(\d{3})(\d{3})(\d+)$/,
|
|
60
|
-
format: '$1 $2 $3',
|
|
61
|
-
};
|
|
62
|
-
/**
|
|
63
|
-
* Format a phone number for display based on country
|
|
64
|
-
* @param phoneNumber - Raw phone number string
|
|
65
|
-
* @param country - Country data object
|
|
66
|
-
* @returns Formatted phone number string
|
|
67
|
-
*/
|
|
68
|
-
export const formatPhoneForDisplay = (phoneNumber, country) => {
|
|
69
|
-
// Remove all non-digit characters
|
|
70
|
-
const digits = phoneNumber.replace(/\D/g, '');
|
|
71
|
-
if (!digits)
|
|
1
|
+
export function formatPhoneForDisplay(phoneNumber) {
|
|
2
|
+
if (!phoneNumber)
|
|
72
3
|
return '';
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
if (match) {
|
|
78
|
-
return digits.replace(pattern.pattern, pattern.format);
|
|
4
|
+
const cleaned = phoneNumber.replace(/\D/g, '');
|
|
5
|
+
if (cleaned.startsWith('61') && cleaned.length === 11) {
|
|
6
|
+
const mobile = cleaned.slice(2);
|
|
7
|
+
return `+61 ${mobile.slice(0, 3)} ${mobile.slice(3, 6)} ${mobile.slice(6)}`;
|
|
79
8
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
* @param digits - Clean digit string
|
|
86
|
-
* @param country - Country data object
|
|
87
|
-
* @returns Partially formatted phone number
|
|
88
|
-
*/
|
|
89
|
-
const applyBasicSpacing = (digits, country) => {
|
|
90
|
-
if (digits.length <= 3)
|
|
91
|
-
return digits;
|
|
92
|
-
// Different spacing patterns based on country
|
|
93
|
-
switch (country.code) {
|
|
94
|
-
case 'US':
|
|
95
|
-
case 'CA':
|
|
96
|
-
// (XXX) XXX-XXXX pattern
|
|
97
|
-
if (digits.length <= 6) {
|
|
98
|
-
return `(${digits.slice(0, 3)}) ${digits.slice(3)}`;
|
|
99
|
-
}
|
|
100
|
-
return `(${digits.slice(0, 3)}) ${digits.slice(3, 6)}-${digits.slice(6, 10)}`;
|
|
101
|
-
case 'FR':
|
|
102
|
-
// 06 XX XX XX XX pattern
|
|
103
|
-
return digits.replace(/(\d{2})(?=\d)/g, '$1 ').trim();
|
|
104
|
-
case 'JP':
|
|
105
|
-
// 090-XXXX-XXXX pattern
|
|
106
|
-
if (digits.length <= 7) {
|
|
107
|
-
return `${digits.slice(0, 3)}-${digits.slice(3)}`;
|
|
108
|
-
}
|
|
109
|
-
return `${digits.slice(0, 3)}-${digits.slice(3, 7)}-${digits.slice(7, 11)}`;
|
|
110
|
-
default:
|
|
111
|
-
// Default: XXX XXX XXX pattern (good for AU, GB, etc.)
|
|
112
|
-
if (digits.length <= 6) {
|
|
113
|
-
return `${digits.slice(0, 3)} ${digits.slice(3)}`;
|
|
114
|
-
}
|
|
115
|
-
return `${digits.slice(0, 3)} ${digits.slice(3, 6)} ${digits.slice(6)}`;
|
|
116
|
-
}
|
|
117
|
-
};
|
|
118
|
-
/**
|
|
119
|
-
* Remove formatting from phone number to get clean digits
|
|
120
|
-
* @param formattedNumber - Formatted phone number string
|
|
121
|
-
* @returns Clean digit-only string
|
|
122
|
-
*/
|
|
123
|
-
export const cleanPhoneNumber = (formattedNumber) => {
|
|
124
|
-
return formattedNumber.replace(/\D/g, '');
|
|
125
|
-
};
|
|
126
|
-
/**
|
|
127
|
-
* Get the expected phone number length for a country
|
|
128
|
-
* @param country - Country data object
|
|
129
|
-
* @returns Expected number of digits (without country code)
|
|
130
|
-
*/
|
|
131
|
-
export const getExpectedPhoneLength = (country) => {
|
|
132
|
-
const lengthMap = {
|
|
133
|
-
AU: 9, // 04X XXX XXX
|
|
134
|
-
US: 10, // XXX XXX XXXX
|
|
135
|
-
CA: 10, // XXX XXX XXXX
|
|
136
|
-
GB: 10, // 07XXX XXXXXX
|
|
137
|
-
DE: 11, // 01XX XXXXXXX
|
|
138
|
-
FR: 10, // 06 XX XX XX XX
|
|
139
|
-
JP: 11, // 090 XXXX XXXX
|
|
140
|
-
SG: 8, // 9XXX XXXX
|
|
141
|
-
NZ: 10, // 02X XXX XXXX
|
|
142
|
-
IN: 10, // 9XXXX XXXXX
|
|
143
|
-
};
|
|
144
|
-
return lengthMap[country.code] || 10; // Default to 10 digits
|
|
145
|
-
};
|
|
9
|
+
return phoneNumber.trim();
|
|
10
|
+
}
|
|
11
|
+
export function cleanPhoneNumber(phoneNumber) {
|
|
12
|
+
return phoneNumber.replace(/\D/g, '');
|
|
13
|
+
}
|
|
146
14
|
//# sourceMappingURL=phoneFormatting.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phoneFormatting.js","sourceRoot":"","sources":["../src/phoneFormatting.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"phoneFormatting.js","sourceRoot":"","sources":["../src/phoneFormatting.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,qBAAqB,CAAC,WAAmB;IACvD,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACtD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAChC,OAAO,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,CAAC;IACD,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,OAAO,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const validateUserProfileField: UserProfileFieldValidation;
|
|
1
|
+
export declare function validateUserProfileField(field: string, value: string): boolean;
|
|
3
2
|
//# sourceMappingURL=user-validation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-validation.d.ts","sourceRoot":"","sources":["../src/user-validation.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"user-validation.d.ts","sourceRoot":"","sources":["../src/user-validation.ts"],"names":[],"mappings":"AAAA,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAQ9E"}
|
package/dist/user-validation.js
CHANGED
|
@@ -1,60 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
if (!isValidFullName(trimmed)) {
|
|
13
|
-
return {
|
|
14
|
-
isValid: false,
|
|
15
|
-
message: `Please enter at least ${USER_PROFILE_VALIDATION.MIN_NAME_PARTS} names`,
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
return {
|
|
19
|
-
isValid: true,
|
|
20
|
-
};
|
|
21
|
-
},
|
|
22
|
-
phoneNumber: (value) => {
|
|
23
|
-
const trimmed = value.trim();
|
|
24
|
-
if (trimmed.length === 0) {
|
|
25
|
-
return {
|
|
26
|
-
isValid: false,
|
|
27
|
-
message: 'Phone number is required',
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
if (!isValidPhoneFormat(trimmed)) {
|
|
31
|
-
return {
|
|
32
|
-
isValid: false,
|
|
33
|
-
message: 'Please enter a valid phone number',
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
return {
|
|
37
|
-
isValid: true,
|
|
38
|
-
};
|
|
39
|
-
},
|
|
40
|
-
residentialAddress: (value) => {
|
|
41
|
-
const trimmed = value.trim();
|
|
42
|
-
const minLength = USER_PROFILE_VALIDATION.MIN_ADDRESS_LENGTH || 10;
|
|
43
|
-
if (trimmed.length === 0) {
|
|
44
|
-
return {
|
|
45
|
-
isValid: false,
|
|
46
|
-
message: 'Residential address is required',
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
if (trimmed.length < minLength) {
|
|
50
|
-
return {
|
|
51
|
-
isValid: false,
|
|
52
|
-
message: `Address must be at least ${minLength} characters`,
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
return {
|
|
56
|
-
isValid: true,
|
|
57
|
-
};
|
|
58
|
-
},
|
|
59
|
-
};
|
|
1
|
+
export function validateUserProfileField(field, value) {
|
|
2
|
+
if (!value)
|
|
3
|
+
return false;
|
|
4
|
+
const trimmed = value.trim();
|
|
5
|
+
switch (field) {
|
|
6
|
+
case 'fullName': return trimmed.split(/\s+/).length >= 2;
|
|
7
|
+
case 'phone': return trimmed.length >= 8 && /^[+\-\s\d()]+$/.test(trimmed);
|
|
8
|
+
default: return trimmed.length > 0;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
60
11
|
//# sourceMappingURL=user-validation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-validation.js","sourceRoot":"","sources":["../src/user-validation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"user-validation.js","sourceRoot":"","sources":["../src/user-validation.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,wBAAwB,CAAC,KAAa,EAAE,KAAa;IACnE,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,UAAU,CAAC,CAAC,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;QACzD,KAAK,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3E,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IACrC,CAAC;AACH,CAAC"}
|
|
@@ -1,40 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*/
|
|
4
|
-
import type { UserProfile } from '@cranberry-money/shared-types';
|
|
5
|
-
/**
|
|
6
|
-
* Verification status types
|
|
7
|
-
*/
|
|
8
|
-
export type VerificationStatusType = 'verified' | 'pending' | 'rejected' | 'not_verified' | 'unknown';
|
|
9
|
-
/**
|
|
10
|
-
* Verification status with type and display label
|
|
11
|
-
*/
|
|
12
|
-
export interface VerificationStatus {
|
|
13
|
-
type: VerificationStatusType;
|
|
14
|
-
label: string;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Gets the verification status for a user profile
|
|
18
|
-
* @param userProfile - User profile object or null
|
|
19
|
-
* @returns Verification status with type and label
|
|
20
|
-
*/
|
|
21
|
-
export declare function getUserVerificationStatus(userProfile: UserProfile | null | undefined): VerificationStatus;
|
|
22
|
-
/**
|
|
23
|
-
* Checks if a user profile is verified
|
|
24
|
-
* @param userProfile - User profile object or null
|
|
25
|
-
* @returns True if user is verified
|
|
26
|
-
*/
|
|
27
|
-
export declare function isUserVerified(userProfile: UserProfile | null | undefined): boolean;
|
|
28
|
-
/**
|
|
29
|
-
* Checks if a user profile has pending verification
|
|
30
|
-
* @param userProfile - User profile object or null
|
|
31
|
-
* @returns True if verification is pending
|
|
32
|
-
*/
|
|
33
|
-
export declare function isVerificationPending(userProfile: UserProfile | null | undefined): boolean;
|
|
34
|
-
/**
|
|
35
|
-
* Checks if a user profile verification was rejected
|
|
36
|
-
* @param userProfile - User profile object or null
|
|
37
|
-
* @returns True if verification was rejected
|
|
38
|
-
*/
|
|
39
|
-
export declare function isVerificationRejected(userProfile: UserProfile | null | undefined): boolean;
|
|
1
|
+
export type VerificationStatusType = 'verified' | 'pending' | 'rejected' | 'not_started';
|
|
2
|
+
export declare function getUserVerificationStatus(status?: string): VerificationStatusType;
|
|
40
3
|
//# sourceMappingURL=user-verification.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-verification.d.ts","sourceRoot":"","sources":["../src/user-verification.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"user-verification.d.ts","sourceRoot":"","sources":["../src/user-verification.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,aAAa,CAAC;AAEzF,wBAAgB,yBAAyB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,CAOjF"}
|
|
@@ -1,60 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
// User is verified through SumSub
|
|
14
|
-
if (userProfile.isIdVerified) {
|
|
15
|
-
return { type: 'verified', label: 'Verified ✓' };
|
|
16
|
-
}
|
|
17
|
-
// Verification is in progress
|
|
18
|
-
if (userProfile.sumsubVerificationStatus === 'pending' ||
|
|
19
|
-
userProfile.sumsubVerificationStatus === 'queued' ||
|
|
20
|
-
userProfile.sumsubVerificationStatus === 'init') {
|
|
21
|
-
return { type: 'pending', label: 'Pending' };
|
|
22
|
-
}
|
|
23
|
-
// Verification was rejected
|
|
24
|
-
if (userProfile.sumsubVerificationStatus === 'completed' && userProfile.sumsubReviewAnswer === 'RED') {
|
|
25
|
-
return { type: 'rejected', label: 'Rejected' };
|
|
26
|
-
}
|
|
27
|
-
// Not yet verified
|
|
28
|
-
return { type: 'not_verified', label: 'Not Verified' };
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Checks if a user profile is verified
|
|
32
|
-
* @param userProfile - User profile object or null
|
|
33
|
-
* @returns True if user is verified
|
|
34
|
-
*/
|
|
35
|
-
export function isUserVerified(userProfile) {
|
|
36
|
-
return userProfile?.isIdVerified === true;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Checks if a user profile has pending verification
|
|
40
|
-
* @param userProfile - User profile object or null
|
|
41
|
-
* @returns True if verification is pending
|
|
42
|
-
*/
|
|
43
|
-
export function isVerificationPending(userProfile) {
|
|
44
|
-
if (!userProfile)
|
|
45
|
-
return false;
|
|
46
|
-
return (userProfile.sumsubVerificationStatus === 'pending' ||
|
|
47
|
-
userProfile.sumsubVerificationStatus === 'queued' ||
|
|
48
|
-
userProfile.sumsubVerificationStatus === 'init');
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Checks if a user profile verification was rejected
|
|
52
|
-
* @param userProfile - User profile object or null
|
|
53
|
-
* @returns True if verification was rejected
|
|
54
|
-
*/
|
|
55
|
-
export function isVerificationRejected(userProfile) {
|
|
56
|
-
if (!userProfile)
|
|
57
|
-
return false;
|
|
58
|
-
return userProfile.sumsubVerificationStatus === 'completed' && userProfile.sumsubReviewAnswer === 'RED';
|
|
1
|
+
export function getUserVerificationStatus(status) {
|
|
2
|
+
if (!status)
|
|
3
|
+
return 'not_started';
|
|
4
|
+
const normalized = status.toLowerCase();
|
|
5
|
+
if (normalized === 'verified' || normalized === 'approved')
|
|
6
|
+
return 'verified';
|
|
7
|
+
if (normalized === 'pending' || normalized === 'in_progress')
|
|
8
|
+
return 'pending';
|
|
9
|
+
if (normalized === 'rejected' || normalized === 'failed')
|
|
10
|
+
return 'rejected';
|
|
11
|
+
return 'not_started';
|
|
59
12
|
}
|
|
60
13
|
//# sourceMappingURL=user-verification.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-verification.js","sourceRoot":"","sources":["../src/user-verification.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"user-verification.js","sourceRoot":"","sources":["../src/user-verification.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,yBAAyB,CAAC,MAAe;IACvD,IAAI,CAAC,MAAM;QAAE,OAAO,aAAa,CAAC;IAClC,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACxC,IAAI,UAAU,KAAK,UAAU,IAAI,UAAU,KAAK,UAAU;QAAE,OAAO,UAAU,CAAC;IAC9E,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,aAAa;QAAE,OAAO,SAAS,CAAC;IAC/E,IAAI,UAAU,KAAK,UAAU,IAAI,UAAU,KAAK,QAAQ;QAAE,OAAO,UAAU,CAAC;IAC5E,OAAO,aAAa,CAAC;AACvB,CAAC"}
|
package/dist/validation.d.ts
CHANGED
|
@@ -3,9 +3,7 @@ export declare function isNumericOnly(str: string): boolean;
|
|
|
3
3
|
export declare function validatePassword(password: string, minLength?: number): PasswordValidation;
|
|
4
4
|
export declare function formatVerificationToken(token: string): string;
|
|
5
5
|
export declare function validateEmailConfirmation(token: string, exactLength?: number): EmailConfirmationValidation;
|
|
6
|
+
export declare function isValidFullName(fullName: string, minParts?: number): boolean;
|
|
6
7
|
export declare function isValidPhoneFormat(phoneNumber: string, minLength?: number): boolean;
|
|
7
|
-
export declare function isValidFullName(fullName: string, minParts?: 2): boolean;
|
|
8
8
|
export declare function formatPhoneNumber(phoneNumber: string): string;
|
|
9
|
-
export declare function isValidSourceOfFunds(sources: string[], minSources?: 1): boolean;
|
|
10
|
-
export declare function isValidOccupation(occupation: string, minLength?: 2, maxLength?: 200): boolean;
|
|
11
9
|
//# sourceMappingURL=validation.d.ts.map
|
package/dist/validation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAErG,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,SAAI,GAAG,kBAAkB,CAIpF;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,SAAI,GAAG,2BAA2B,CAIrG;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,OAAO,CAIvE;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,SAAI,GAAG,OAAO,CAG9E;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAW7D"}
|
package/dist/validation.js
CHANGED
|
@@ -1,76 +1,39 @@
|
|
|
1
|
-
import { USER_PROFILE_VALIDATION, FINANCIAL_PROFILE_VALIDATION } from '@cranberry-money/shared-constants';
|
|
2
1
|
export function isNumericOnly(str) {
|
|
3
2
|
return /^\d+$/.test(str);
|
|
4
3
|
}
|
|
5
4
|
export function validatePassword(password, minLength = 8) {
|
|
6
5
|
const lengthValid = password.length >= minLength;
|
|
7
6
|
const notNumeric = !isNumericOnly(password);
|
|
8
|
-
|
|
9
|
-
return {
|
|
10
|
-
isValid,
|
|
11
|
-
lengthValid,
|
|
12
|
-
notNumeric,
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
function isValidTokenFormat(token, exactLength = 6) {
|
|
16
|
-
const trimmedToken = token.trim();
|
|
17
|
-
// Validate for exactly N digits (default 6)
|
|
18
|
-
const pattern = new RegExp(`^[0-9]{${exactLength}}$`);
|
|
19
|
-
return pattern.test(trimmedToken);
|
|
7
|
+
return { isValid: lengthValid && notNumeric, lengthValid, notNumeric };
|
|
20
8
|
}
|
|
21
9
|
export function formatVerificationToken(token) {
|
|
22
|
-
// Only keep digits for numeric tokens
|
|
23
10
|
return token.trim().replace(/[^0-9]/g, '');
|
|
24
11
|
}
|
|
25
12
|
export function validateEmailConfirmation(token, exactLength = 6) {
|
|
26
13
|
const formattedToken = formatVerificationToken(token);
|
|
27
|
-
const isValidFormat =
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
};
|
|
14
|
+
const isValidFormat = new RegExp(`^[0-9]{${exactLength}}$`).test(formattedToken);
|
|
15
|
+
return { isValid: formattedToken.length === exactLength && isValidFormat, isEmpty: formattedToken.length === 0, isValidFormat };
|
|
16
|
+
}
|
|
17
|
+
export function isValidFullName(fullName, minParts = 2) {
|
|
18
|
+
const trimmedName = fullName.trim();
|
|
19
|
+
const nameParts = trimmedName.split(/\s+/);
|
|
20
|
+
return nameParts.length >= minParts && nameParts.every(part => part.length > 0);
|
|
35
21
|
}
|
|
36
22
|
export function isValidPhoneFormat(phoneNumber, minLength = 8) {
|
|
37
23
|
const trimmedPhone = phoneNumber.trim();
|
|
38
24
|
return trimmedPhone.length >= minLength && /^[+\-\s\d()]+$/.test(trimmedPhone);
|
|
39
25
|
}
|
|
40
|
-
export function isValidFullName(fullName, minParts = USER_PROFILE_VALIDATION.MIN_NAME_PARTS) {
|
|
41
|
-
const trimmedName = fullName.trim();
|
|
42
|
-
const nameParts = trimmedName.split(/\s+/);
|
|
43
|
-
return nameParts.length >= minParts && nameParts.every((part) => part.length > 0);
|
|
44
|
-
}
|
|
45
26
|
export function formatPhoneNumber(phoneNumber) {
|
|
46
27
|
if (!phoneNumber)
|
|
47
28
|
return '';
|
|
48
29
|
const cleaned = phoneNumber.replace(/\D/g, '');
|
|
49
|
-
if (cleaned.startsWith('1') && cleaned.length === 11) {
|
|
50
|
-
return `+1 (${cleaned.slice(1, 4)}) ${cleaned.slice(4, 7)}-${cleaned.slice(7)}`;
|
|
51
|
-
}
|
|
52
|
-
if (cleaned.length === 10) {
|
|
53
|
-
return `(${cleaned.slice(0, 3)}) ${cleaned.slice(3, 6)}-${cleaned.slice(6)}`;
|
|
54
|
-
}
|
|
55
30
|
if (cleaned.startsWith('61') && cleaned.length === 11) {
|
|
56
31
|
const mobile = cleaned.slice(2);
|
|
57
32
|
return `+61 ${mobile.slice(0, 3)} ${mobile.slice(3, 6)} ${mobile.slice(6)}`;
|
|
58
33
|
}
|
|
59
|
-
if (cleaned.length
|
|
60
|
-
|
|
61
|
-
const number = cleaned.slice(-10);
|
|
62
|
-
if (countryCode === '61') {
|
|
63
|
-
return `+61 ${number.slice(0, 3)} ${number.slice(3, 6)} ${number.slice(6)}`;
|
|
64
|
-
}
|
|
65
|
-
return `+${countryCode} (${number.slice(0, 3)}) ${number.slice(3, 6)}-${number.slice(6)}`;
|
|
34
|
+
if (cleaned.length === 10) {
|
|
35
|
+
return `(${cleaned.slice(0, 3)}) ${cleaned.slice(3, 6)}-${cleaned.slice(6)}`;
|
|
66
36
|
}
|
|
67
37
|
return phoneNumber.trim();
|
|
68
38
|
}
|
|
69
|
-
export function isValidSourceOfFunds(sources, minSources = FINANCIAL_PROFILE_VALIDATION.MIN_SOURCE_OF_FUNDS) {
|
|
70
|
-
return sources && sources.length >= minSources;
|
|
71
|
-
}
|
|
72
|
-
export function isValidOccupation(occupation, minLength = FINANCIAL_PROFILE_VALIDATION.MIN_OCCUPATION_LENGTH, maxLength = FINANCIAL_PROFILE_VALIDATION.MAX_OCCUPATION_LENGTH) {
|
|
73
|
-
const trimmed = occupation.trim();
|
|
74
|
-
return trimmed.length >= minLength && trimmed.length <= maxLength;
|
|
75
|
-
}
|
|
76
39
|
//# sourceMappingURL=validation.js.map
|
package/dist/validation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,SAAS,GAAG,CAAC;IAC9D,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,SAAS,CAAC;IACjD,MAAM,UAAU,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,EAAE,OAAO,EAAE,WAAW,IAAI,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACnD,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAa,EAAE,WAAW,GAAG,CAAC;IACtE,MAAM,cAAc,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,UAAU,WAAW,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACjF,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,MAAM,KAAK,WAAW,IAAI,aAAa,EAAE,OAAO,EAAE,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;AAClI,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,QAAQ,GAAG,CAAC;IAC5D,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IACpC,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3C,OAAO,SAAS,CAAC,MAAM,IAAI,QAAQ,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,WAAmB,EAAE,SAAS,GAAG,CAAC;IACnE,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IACxC,OAAO,YAAY,CAAC,MAAM,IAAI,SAAS,IAAI,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACtD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAChC,OAAO,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC1B,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/E,CAAC;IACD,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC;AAC5B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cranberry-money/shared-utils",
|
|
3
|
-
"version": "8.23.
|
|
3
|
+
"version": "8.23.414",
|
|
4
4
|
"description": "Shared utility functions for Blueberry platform",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
"prepublishOnly": "npm run clean && npm run typecheck && npm test && npm run build"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@cranberry-money/shared-constants": "^8.15.
|
|
33
|
-
"@cranberry-money/shared-types": "^8.22.
|
|
32
|
+
"@cranberry-money/shared-constants": "^8.15.439",
|
|
33
|
+
"@cranberry-money/shared-types": "^8.22.414"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@types/jest": "^30.0.0",
|
package/dist/badges.d.ts
DELETED