@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.
- package/dist/address.d.ts +12 -0
- package/dist/address.d.ts.map +1 -0
- package/dist/address.js +13 -0
- package/dist/address.js.map +1 -0
- 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/index.d.ts +9 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -4
- package/dist/index.js.map +1 -1
- package/dist/phoneFormatting.d.ts +3 -0
- package/dist/phoneFormatting.d.ts.map +1 -0
- package/dist/phoneFormatting.js +14 -0
- package/dist/phoneFormatting.js.map +1 -0
- package/dist/user-validation.d.ts +13 -0
- package/dist/user-validation.d.ts.map +1 -0
- package/dist/user-validation.js +23 -0
- package/dist/user-validation.js.map +1 -0
- package/dist/user-verification.d.ts +9 -0
- package/dist/user-verification.d.ts.map +1 -0
- package/dist/user-verification.js +24 -0
- package/dist/user-verification.js.map +1 -0
- package/dist/validation.d.ts +3 -0
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +22 -0
- package/dist/validation.js.map +1 -1
- package/package.json +3 -3
|
@@ -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"}
|
package/dist/address.js
ADDED
|
@@ -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 @@
|
|
|
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
|
|
2
|
-
export { formatCurrency, type FormatCurrencyOptions, formatCryptoBalance, formatPercentage, } from './formatting';
|
|
3
|
-
export { isNumericOnly, validatePassword, formatVerificationToken, validateEmailConfirmation, } from './validation';
|
|
4
|
-
export { validateWalletAddress, detectChainFromAddress, formatWalletAddressShort, formatWalletAddressMedium
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
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,
|
|
2
|
-
export { formatCurrency, formatCryptoBalance, formatPercentage, } from './formatting';
|
|
3
|
-
export { isNumericOnly, validatePassword, formatVerificationToken, validateEmailConfirmation, } from './validation';
|
|
4
|
-
export { validateWalletAddress, detectChainFromAddress, formatWalletAddressShort, formatWalletAddressMedium
|
|
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,
|
|
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 @@
|
|
|
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"}
|
package/dist/validation.d.ts
CHANGED
|
@@ -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
|
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;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"}
|
package/dist/validation.js
CHANGED
|
@@ -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
|
package/dist/validation.js.map
CHANGED
|
@@ -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.
|
|
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.
|
|
33
|
-
"@cranberry-money/shared-types": "^8.22.
|
|
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",
|