@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.
Files changed (45) hide show
  1. package/dist/address.d.ts +4 -6
  2. package/dist/address.d.ts.map +1 -1
  3. package/dist/address.js +6 -100
  4. package/dist/address.js.map +1 -1
  5. package/dist/formatting-labels.d.ts +3 -0
  6. package/dist/formatting-labels.d.ts.map +1 -0
  7. package/dist/formatting-labels.js +26 -0
  8. package/dist/formatting-labels.js.map +1 -0
  9. package/dist/formatting.d.ts +0 -130
  10. package/dist/formatting.d.ts.map +1 -1
  11. package/dist/formatting.js +4 -203
  12. package/dist/formatting.js.map +1 -1
  13. package/dist/index.d.ts +9 -11
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +9 -33
  16. package/dist/index.js.map +1 -1
  17. package/dist/phoneFormatting.d.ts +2 -20
  18. package/dist/phoneFormatting.d.ts.map +1 -1
  19. package/dist/phoneFormatting.js +11 -143
  20. package/dist/phoneFormatting.js.map +1 -1
  21. package/dist/user-validation.d.ts +1 -2
  22. package/dist/user-validation.d.ts.map +1 -1
  23. package/dist/user-validation.js +10 -59
  24. package/dist/user-validation.js.map +1 -1
  25. package/dist/user-verification.d.ts +2 -39
  26. package/dist/user-verification.d.ts.map +1 -1
  27. package/dist/user-verification.js +11 -58
  28. package/dist/user-verification.js.map +1 -1
  29. package/dist/validation.d.ts +1 -3
  30. package/dist/validation.d.ts.map +1 -1
  31. package/dist/validation.js +10 -47
  32. package/dist/validation.js.map +1 -1
  33. package/package.json +3 -3
  34. package/dist/badges.d.ts +0 -2
  35. package/dist/badges.d.ts.map +0 -1
  36. package/dist/badges.js +0 -2
  37. package/dist/badges.js.map +0 -1
  38. package/dist/portfolio.d.ts +0 -12
  39. package/dist/portfolio.d.ts.map +0 -1
  40. package/dist/portfolio.js +0 -37
  41. package/dist/portfolio.js.map +0 -1
  42. package/dist/user-preferences.d.ts +0 -28
  43. package/dist/user-preferences.d.ts.map +0 -1
  44. package/dist/user-preferences.js +0 -88
  45. package/dist/user-preferences.js.map +0 -1
package/dist/index.js CHANGED
@@ -1,36 +1,12 @@
1
- // Text and formatting utilities
2
- export { truncateText } from './formatting';
3
- // Address utilities
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
- // Date formatting utilities
6
- export { formatDate, formatFullDate, formatShortDate, formatNumericDate, formatTime, formatDateTime, formatFullDateTime, formatMemberSince, getDateRange, } from './date';
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
- // Filter utilities
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,gCAAgC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,oBAAoB;AACpB,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEjE,4BAA4B;AAC5B,OAAO,EACL,UAAU,EACV,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,GAEb,MAAM,QAAQ,CAAC;AAEhB,2CAA2C;AAC3C,OAAO,EACL,8BAA8B,EAC9B,qCAAqC,EACrC,kBAAkB,EAClB,cAAc,EAEd,wBAAwB,EACxB,uBAAuB,EACvB,SAAS,EACT,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB;AACtB,mBAAmB;AACnB,mBAAmB,EACnB,iBAAiB;AACjB,wBAAwB;AACxB,gBAAgB,EAChB,0BAA0B,GAC3B,MAAM,cAAc,CAAC;AAEtB,sBAAsB;AACtB,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEtH,uBAAuB;AACvB,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAEtB,8BAA8B;AAC9B,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,eAAe,EACf,cAAc,GACf,MAAM,sBAAsB,CAAC;AAE9B,oCAAoC;AACpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,mBAAmB;AACnB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,2BAA2B,EAC3B,6BAA6B,GAC9B,MAAM,WAAW,CAAC;AAEnB,6BAA6B;AAC7B,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,yBAAyB,EACzB,+BAA+B,EAC/B,gCAAgC,EAChC,4BAA4B,EAC5B,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,oBAAoB,CAAC;AAE5B,6BAA6B;AAC7B,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAEpG,4BAA4B;AAC5B,OAAO;AACL,kBAAkB;AAClB,YAAY,EACZ,mBAAmB;AACnB,oBAAoB;AACpB,wBAAwB,EACxB,qBAAqB,EACrB,6BAA6B,EAC7B,wBAAwB,EACxB,oBAAoB,GAGrB,MAAM,UAAU,CAAC;AAElB,8BAA8B;AAC9B,OAAO,EACL,yBAAyB,EACzB,cAAc,EACd,qBAAqB,EACrB,sBAAsB,GAGvB,MAAM,qBAAqB,CAAC;AAE7B,sFAAsF"}
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
- import type { CountryData } from '@cranberry-money/shared-constants';
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,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAkErE;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAAI,aAAa,MAAM,EAAE,SAAS,WAAW,KAAG,MAiBjF,CAAC;AAyCF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,iBAAiB,MAAM,KAAG,MAE1D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,SAAS,WAAW,KAAG,MAe7D,CAAC"}
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"}
@@ -1,146 +1,14 @@
1
- /**
2
- * Phone number formatting utilities for international phone numbers
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
- // Get formatting pattern for country
74
- const pattern = PHONE_PATTERNS[country.code] || DEFAULT_PATTERN;
75
- // Apply formatting if the number matches the expected length/pattern
76
- const match = digits.match(pattern.pattern);
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
- // For partial numbers, apply basic spacing
81
- return applyBasicSpacing(digits, country);
82
- };
83
- /**
84
- * Apply basic spacing for partial numbers during typing
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":"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"}
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
- import type { UserProfileFieldValidation } from '@cranberry-money/shared-types';
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,OAAO,KAAK,EAAoB,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAIlG,eAAO,MAAM,wBAAwB,EAAE,0BAmEtC,CAAC"}
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"}
@@ -1,60 +1,11 @@
1
- import { USER_PROFILE_VALIDATION } from '@cranberry-money/shared-constants';
2
- import { isValidPhoneFormat, isValidFullName } from './validation';
3
- export const validateUserProfileField = {
4
- fullName: (value) => {
5
- const trimmed = value.trim();
6
- if (trimmed.length === 0) {
7
- return {
8
- isValid: false,
9
- message: 'Full name is required',
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":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEnE,MAAM,CAAC,MAAM,wBAAwB,GAA+B;IAClE,QAAQ,EAAE,CAAC,KAAa,EAAoB,EAAE;QAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAE7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,uBAAuB;aACjC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,yBAAyB,uBAAuB,CAAC,cAAc,QAAQ;aACjF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,WAAW,EAAE,CAAC,KAAa,EAAoB,EAAE;QAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAE7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,0BAA0B;aACpC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,mCAAmC;aAC7C,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,kBAAkB,EAAE,CAAC,KAAa,EAAoB,EAAE;QACtD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,uBAAuB,CAAC,kBAAkB,IAAI,EAAE,CAAC;QAEnE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,iCAAiC;aAC3C,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;YAC/B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,4BAA4B,SAAS,aAAa;aAC5D,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;CACF,CAAC"}
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
- * User verification status utilities for consistent verification status display
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;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,cAAc,GAAG,SAAS,CAAC;AAEtG;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,kBAAkB,CA0BzG;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEnF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAQ1F;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAI3F"}
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
- * User verification status utilities for consistent verification status display
3
- */
4
- /**
5
- * Gets the verification status for a user profile
6
- * @param userProfile - User profile object or null
7
- * @returns Verification status with type and label
8
- */
9
- export function getUserVerificationStatus(userProfile) {
10
- if (!userProfile) {
11
- return { type: 'unknown', label: 'Unknown' };
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":"AAAA;;GAEG;AAiBH;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,WAA2C;IACnF,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAC/C,CAAC;IAED,kCAAkC;IAClC,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;QAC7B,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IACnD,CAAC;IAED,8BAA8B;IAC9B,IACE,WAAW,CAAC,wBAAwB,KAAK,SAAS;QAClD,WAAW,CAAC,wBAAwB,KAAK,QAAQ;QACjD,WAAW,CAAC,wBAAwB,KAAK,MAAM,EAC/C,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAC/C,CAAC;IAED,4BAA4B;IAC5B,IAAI,WAAW,CAAC,wBAAwB,KAAK,WAAW,IAAI,WAAW,CAAC,kBAAkB,KAAK,KAAK,EAAE,CAAC;QACrG,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IACjD,CAAC;IAED,mBAAmB;IACnB,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;AACzD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,WAA2C;IACxE,OAAO,WAAW,EAAE,YAAY,KAAK,IAAI,CAAC;AAC5C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,WAA2C;IAC/E,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IAE/B,OAAO,CACL,WAAW,CAAC,wBAAwB,KAAK,SAAS;QAClD,WAAW,CAAC,wBAAwB,KAAK,QAAQ;QACjD,WAAW,CAAC,wBAAwB,KAAK,MAAM,CAChD,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,WAA2C;IAChF,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IAE/B,OAAO,WAAW,CAAC,wBAAwB,KAAK,WAAW,IAAI,WAAW,CAAC,kBAAkB,KAAK,KAAK,CAAC;AAC1G,CAAC"}
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"}
@@ -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
@@ -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;AAGrG,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,SAAI,GAAG,kBAAkB,CASpF;AASD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG7D;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,SAAI,GAAG,2BAA2B,CAWrG;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,SAAI,GAAG,OAAO,CAG9E;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,IAAyC,GAAG,OAAO,CAI5G;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CA8B7D;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EAAE,EACjB,UAAU,IAAmD,GAC5D,OAAO,CAET;AAED,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,SAAS,IAAqD,EAC9D,SAAS,MAAqD,GAC7D,OAAO,CAGT"}
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"}
@@ -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
- const isValid = lengthValid && notNumeric;
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 = isValidTokenFormat(formattedToken, exactLength);
28
- const isEmpty = formattedToken.length === 0;
29
- const isValid = formattedToken.length === exactLength && isValidFormat;
30
- return {
31
- isValid,
32
- isEmpty,
33
- isValidFormat,
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 > 10) {
60
- const countryCode = cleaned.slice(0, -10);
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
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
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.412",
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.437",
33
- "@cranberry-money/shared-types": "^8.22.412"
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
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=badges.d.ts.map