@cranberry-money/shared-utils 8.23.413 → 8.23.415

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.
@@ -0,0 +1,12 @@
1
+ interface AddressLine {
2
+ label: string;
3
+ value: string;
4
+ }
5
+ export declare function parseAddress(address: string): {
6
+ lines: AddressLine[];
7
+ };
8
+ export declare function getAddressDisplayLines(parsed: {
9
+ lines: AddressLine[];
10
+ }): AddressLine[];
11
+ export {};
12
+ //# sourceMappingURL=address.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../src/address.ts"],"names":[],"mappings":"AAAA,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,CAOtE;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,GAAG,WAAW,EAAE,CAEtF"}
@@ -0,0 +1,13 @@
1
+ export function parseAddress(address) {
2
+ if (!address)
3
+ return { lines: [] };
4
+ const parts = address.split(',').map(s => s.trim()).filter(Boolean);
5
+ const labels = ['Street', 'City', 'State', 'Postcode', 'Country'];
6
+ return {
7
+ lines: parts.map((part, i) => ({ label: labels[i] || `Line ${i + 1}`, value: part }))
8
+ };
9
+ }
10
+ export function getAddressDisplayLines(parsed) {
11
+ return parsed.lines;
12
+ }
13
+ //# sourceMappingURL=address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address.js","sourceRoot":"","sources":["../src/address.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAClE,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;KACtF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAgC;IACrE,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function formatSourceOfFunds(funds: string[]): string;
2
+ export declare function formatIntendedUse(use: string): string;
3
+ //# sourceMappingURL=formatting-labels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatting-labels.d.ts","sourceRoot":"","sources":["../src/formatting-labels.ts"],"names":[],"mappings":"AAiBA,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAG3D;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGrD"}
@@ -0,0 +1,26 @@
1
+ const SOURCE_OF_FUNDS_LABELS = {
2
+ employment_income: 'Employment income',
3
+ savings: 'Savings',
4
+ investment_income: 'Investment income',
5
+ sale_of_assets: 'Sale of assets',
6
+ inheritance: 'Inheritance',
7
+ gift: 'Gift',
8
+ other: 'Other',
9
+ };
10
+ const INTENDED_USE_LABELS = {
11
+ long_term_investment: 'Long-term investment',
12
+ trading_crypto: 'Trading crypto currencies',
13
+ savings: 'Savings',
14
+ other: 'Other',
15
+ };
16
+ export function formatSourceOfFunds(funds) {
17
+ if (!funds || funds.length === 0)
18
+ return '';
19
+ return funds.map(fund => SOURCE_OF_FUNDS_LABELS[fund] || fund).join(', ');
20
+ }
21
+ export function formatIntendedUse(use) {
22
+ if (!use)
23
+ return '';
24
+ return INTENDED_USE_LABELS[use] || use;
25
+ }
26
+ //# sourceMappingURL=formatting-labels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatting-labels.js","sourceRoot":"","sources":["../src/formatting-labels.ts"],"names":[],"mappings":"AAAA,MAAM,sBAAsB,GAA2B;IACrD,iBAAiB,EAAE,mBAAmB;IACtC,OAAO,EAAE,SAAS;IAClB,iBAAiB,EAAE,mBAAmB;IACtC,cAAc,EAAE,gBAAgB;IAChC,WAAW,EAAE,aAAa;IAC1B,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;CACf,CAAC;AAEF,MAAM,mBAAmB,GAA2B;IAClD,oBAAoB,EAAE,sBAAsB;IAC5C,cAAc,EAAE,2BAA2B;IAC3C,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;CACf,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,KAAe;IACjD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC5C,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,OAAO,mBAAmB,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;AACzC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,12 @@
1
- export { formatFullDate, formatShortDate, formatTime, getDateRange, type DateRange, } from './date';
2
- export { formatCurrency, type FormatCurrencyOptions, formatCryptoBalance, formatPercentage, } from './formatting';
3
- export { isNumericOnly, validatePassword, formatVerificationToken, validateEmailConfirmation, } from './validation';
4
- export { validateWalletAddress, detectChainFromAddress, formatWalletAddressShort, formatWalletAddressMedium, } from './validation/wallets';
1
+ export { formatFullDate, formatShortDate, formatTime, formatFullDateTime, getDateRange, type DateRange } from './date';
2
+ export { formatCurrency, type FormatCurrencyOptions, 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
5
  export { hasActiveFilters, countActiveFilters } from './filters';
6
6
  export { getAssetType, getAssetTypeVariant } from './assets';
7
+ export { parseAddress, getAddressDisplayLines } from './address';
8
+ export { formatPhoneForDisplay, cleanPhoneNumber } from './phoneFormatting';
9
+ export { formatSourceOfFunds, formatIntendedUse } from './formatting-labels';
10
+ export { validateUserProfileField } from './user-validation';
11
+ export { getUserVerificationStatus, type VerificationStatusType } from './user-verification';
7
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,eAAe,EACf,UAAU,EACV,YAAY,EACZ,KAAK,SAAS,GACf,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,cAAc,EACd,KAAK,qBAAqB,EAC1B,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,kBAAkB,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AACvH,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,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,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -1,7 +1,12 @@
1
- export { formatFullDate, formatShortDate, formatTime, getDateRange, } from './date';
2
- export { formatCurrency, formatCryptoBalance, formatPercentage, } from './formatting';
3
- export { isNumericOnly, validatePassword, formatVerificationToken, validateEmailConfirmation, } from './validation';
4
- export { validateWalletAddress, detectChainFromAddress, formatWalletAddressShort, formatWalletAddressMedium, } from './validation/wallets';
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
5
  export { hasActiveFilters, countActiveFilters } from './filters';
6
6
  export { getAssetType, getAssetTypeVariant } from './assets';
7
+ export { parseAddress, getAddressDisplayLines } from './address';
8
+ export { formatPhoneForDisplay, cleanPhoneNumber } from './phoneFormatting';
9
+ export { formatSourceOfFunds, formatIntendedUse } from './formatting-labels';
10
+ export { validateUserProfileField } from './user-validation';
11
+ export { getUserVerificationStatus } from './user-verification';
7
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,OAAO,EACL,cAAc,EACd,eAAe,EACf,UAAU,EACV,YAAY,GAEb,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,cAAc,EAEd,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC"}
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"}
@@ -0,0 +1,3 @@
1
+ export declare function formatPhoneForDisplay(phoneNumber: string): string;
2
+ export declare function cleanPhoneNumber(phoneNumber: string): string;
3
+ //# sourceMappingURL=phoneFormatting.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,14 @@
1
+ export function formatPhoneForDisplay(phoneNumber) {
2
+ if (!phoneNumber)
3
+ return '';
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)}`;
8
+ }
9
+ return phoneNumber.trim();
10
+ }
11
+ export function cleanPhoneNumber(phoneNumber) {
12
+ return phoneNumber.replace(/\D/g, '');
13
+ }
14
+ //# sourceMappingURL=phoneFormatting.js.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,13 @@
1
+ interface ValidationResult {
2
+ isValid: boolean;
3
+ }
4
+ declare function validateFullName(value: string): ValidationResult;
5
+ declare function validatePhoneNumber(value: string): ValidationResult;
6
+ declare function validateResidentialAddress(value: string): ValidationResult;
7
+ export declare const validateUserProfileField: {
8
+ fullName: typeof validateFullName;
9
+ phoneNumber: typeof validatePhoneNumber;
10
+ residentialAddress: typeof validateResidentialAddress;
11
+ };
12
+ export {};
13
+ //# sourceMappingURL=user-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-validation.d.ts","sourceRoot":"","sources":["../src/user-validation.ts"],"names":[],"mappings":"AAAA,UAAU,gBAAgB;IACxB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,iBAAS,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAIzD;AAED,iBAAS,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAI5D;AAED,iBAAS,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAGnE;AAED,eAAO,MAAM,wBAAwB;;;;CAIpC,CAAC"}
@@ -0,0 +1,23 @@
1
+ function validateFullName(value) {
2
+ if (!value)
3
+ return { isValid: false };
4
+ const trimmed = value.trim();
5
+ return { isValid: trimmed.split(/\s+/).length >= 2 };
6
+ }
7
+ function validatePhoneNumber(value) {
8
+ if (!value)
9
+ return { isValid: false };
10
+ const trimmed = value.trim();
11
+ return { isValid: trimmed.length >= 8 && /^[+\-\s\d()]+$/.test(trimmed) };
12
+ }
13
+ function validateResidentialAddress(value) {
14
+ if (!value)
15
+ return { isValid: false };
16
+ return { isValid: value.trim().length >= 10 };
17
+ }
18
+ export const validateUserProfileField = {
19
+ fullName: validateFullName,
20
+ phoneNumber: validatePhoneNumber,
21
+ residentialAddress: validateResidentialAddress,
22
+ };
23
+ //# sourceMappingURL=user-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-validation.js","sourceRoot":"","sources":["../src/user-validation.ts"],"names":[],"mappings":"AAIA,SAAS,gBAAgB,CAAC,KAAa;IACrC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;AACvD,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;AAC5E,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAa;IAC/C,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACtC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,QAAQ,EAAE,gBAAgB;IAC1B,WAAW,EAAE,mBAAmB;IAChC,kBAAkB,EAAE,0BAA0B;CAC/C,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { UserProfile } from '@cranberry-money/shared-types';
2
+ export type VerificationStatusType = 'verified' | 'pending' | 'rejected' | 'not_started' | 'not_verified' | 'unknown';
3
+ interface VerificationStatus {
4
+ type: VerificationStatusType;
5
+ label: string;
6
+ }
7
+ export declare function getUserVerificationStatus(profile?: UserProfile | string | null): VerificationStatus;
8
+ export {};
9
+ //# sourceMappingURL=user-verification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-verification.d.ts","sourceRoot":"","sources":["../src/user-verification.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,aAAa,GAAG,cAAc,GAAG,SAAS,CAAC;AAEtH,UAAU,kBAAkB;IAC1B,IAAI,EAAE,sBAAsB,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;CACf;AAWD,wBAAgB,yBAAyB,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,GAAG,kBAAkB,CASnG"}
@@ -0,0 +1,24 @@
1
+ const STATUS_LABELS = {
2
+ verified: 'Verified',
3
+ pending: 'Pending',
4
+ rejected: 'Rejected',
5
+ not_started: 'Not Started',
6
+ not_verified: 'Not Verified',
7
+ unknown: 'Unknown',
8
+ };
9
+ export function getUserVerificationStatus(profile) {
10
+ const status = typeof profile === 'string' ? profile : profile?.sumsubVerificationStatus;
11
+ if (!status)
12
+ return { type: 'not_started', label: STATUS_LABELS.not_started };
13
+ const normalized = status.toLowerCase();
14
+ if (normalized === 'verified' || normalized === 'approved')
15
+ return { type: 'verified', label: STATUS_LABELS.verified };
16
+ if (normalized === 'pending' || normalized === 'in_progress')
17
+ return { type: 'pending', label: STATUS_LABELS.pending };
18
+ if (normalized === 'rejected' || normalized === 'failed')
19
+ return { type: 'rejected', label: STATUS_LABELS.rejected };
20
+ if (normalized === 'not_verified')
21
+ return { type: 'not_verified', label: STATUS_LABELS.not_verified };
22
+ return { type: 'unknown', label: STATUS_LABELS.unknown };
23
+ }
24
+ //# sourceMappingURL=user-verification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-verification.js","sourceRoot":"","sources":["../src/user-verification.ts"],"names":[],"mappings":"AASA,MAAM,aAAa,GAA2C;IAC5D,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,aAAa;IAC1B,YAAY,EAAE,cAAc;IAC5B,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,MAAM,UAAU,yBAAyB,CAAC,OAAqC;IAC7E,MAAM,MAAM,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,wBAAwB,CAAC;IACzF,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,CAAC,WAAW,EAAE,CAAC;IAC9E,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACxC,IAAI,UAAU,KAAK,UAAU,IAAI,UAAU,KAAK,UAAU;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAC;IACvH,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,aAAa;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,CAAC,OAAO,EAAE,CAAC;IACvH,IAAI,UAAU,KAAK,UAAU,IAAI,UAAU,KAAK,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAC;IACrH,IAAI,UAAU,KAAK,cAAc;QAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,CAAC,YAAY,EAAE,CAAC;IACtG,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,CAAC,OAAO,EAAE,CAAC;AAC3D,CAAC"}
@@ -3,4 +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;
7
+ export declare function isValidPhoneFormat(phoneNumber: string, minLength?: number): boolean;
8
+ export declare function formatPhoneNumber(phoneNumber: string): string;
6
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;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"}
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"}
@@ -14,4 +14,26 @@ export function validateEmailConfirmation(token, exactLength = 6) {
14
14
  const isValidFormat = new RegExp(`^[0-9]{${exactLength}}$`).test(formattedToken);
15
15
  return { isValid: formattedToken.length === exactLength && isValidFormat, isEmpty: formattedToken.length === 0, isValidFormat };
16
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);
21
+ }
22
+ export function isValidPhoneFormat(phoneNumber, minLength = 8) {
23
+ const trimmedPhone = phoneNumber.trim();
24
+ return trimmedPhone.length >= minLength && /^[+\-\s\d()]+$/.test(trimmedPhone);
25
+ }
26
+ export function formatPhoneNumber(phoneNumber) {
27
+ if (!phoneNumber)
28
+ return '';
29
+ const cleaned = phoneNumber.replace(/\D/g, '');
30
+ if (cleaned.startsWith('61') && cleaned.length === 11) {
31
+ const mobile = cleaned.slice(2);
32
+ return `+61 ${mobile.slice(0, 3)} ${mobile.slice(3, 6)} ${mobile.slice(6)}`;
33
+ }
34
+ if (cleaned.length === 10) {
35
+ return `(${cleaned.slice(0, 3)}) ${cleaned.slice(3, 6)}-${cleaned.slice(6)}`;
36
+ }
37
+ return phoneNumber.trim();
38
+ }
17
39
  //# sourceMappingURL=validation.js.map
@@ -1 +1 @@
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"}
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.413",
3
+ "version": "8.23.415",
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.438",
33
- "@cranberry-money/shared-types": "^8.22.413"
32
+ "@cranberry-money/shared-constants": "^8.15.440",
33
+ "@cranberry-money/shared-types": "^8.22.415"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@types/jest": "^30.0.0",