abmp-npm 1.8.17 → 1.8.19
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/backend/consts.js +13 -0
- package/backend/index.js +1 -0
- package/backend/members-data-methods.js +83 -0
- package/backend/utils.js +43 -0
- package/package.json +3 -1
- package/pages/personalDetails.js +1 -2
package/backend/consts.js
CHANGED
|
@@ -12,9 +12,22 @@ const PRECISION = 3;
|
|
|
12
12
|
const MAX__MEMBERS_SEARCH_RESULTS = 120;
|
|
13
13
|
const WIX_QUERY_MAX_LIMIT = 1000;
|
|
14
14
|
|
|
15
|
+
/**
|
|
16
|
+
* Member action types
|
|
17
|
+
* @readonly
|
|
18
|
+
* @enum {string}
|
|
19
|
+
*/
|
|
20
|
+
const MEMBER_ACTIONS = {
|
|
21
|
+
UPDATE: 'update',
|
|
22
|
+
NEW: 'new',
|
|
23
|
+
DROP: 'drop',
|
|
24
|
+
NONE: 'none',
|
|
25
|
+
};
|
|
26
|
+
|
|
15
27
|
module.exports = {
|
|
16
28
|
CONFIG_KEYS,
|
|
17
29
|
PRECISION,
|
|
18
30
|
MAX__MEMBERS_SEARCH_RESULTS,
|
|
19
31
|
WIX_QUERY_MAX_LIMIT,
|
|
32
|
+
MEMBER_ACTIONS,
|
|
20
33
|
};
|
package/backend/index.js
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
|
+
const { auth } = require('@wix/essentials');
|
|
2
|
+
const { members } = require('@wix/members');
|
|
3
|
+
|
|
1
4
|
const { COLLECTIONS } = require('../public/consts');
|
|
2
5
|
|
|
6
|
+
const { MEMBER_ACTIONS } = require('./consts');
|
|
3
7
|
const { wixData } = require('./elevated-modules');
|
|
4
8
|
const { createSiteMember } = require('./members-area-methods');
|
|
9
|
+
const { formatDateToMonthYear, getAddressDisplayOptions, isStudent } = require('./utils');
|
|
10
|
+
|
|
11
|
+
// Elevate members.getCurrentMember to bypass permissions
|
|
12
|
+
const elevatedGetCurrentMember = auth.elevate(members.getCurrentMember);
|
|
5
13
|
|
|
6
14
|
/**
|
|
7
15
|
* Retrieves member data by member ID
|
|
@@ -49,7 +57,82 @@ async function createContactAndMemberIfNew(memberData) {
|
|
|
49
57
|
}
|
|
50
58
|
}
|
|
51
59
|
|
|
60
|
+
/**
|
|
61
|
+
* Validates member token and retrieves member data
|
|
62
|
+
* @param {string} memberIdInput - The member ID to validate
|
|
63
|
+
* @returns {Promise<{memberData: Object|null, isValid: boolean}>} Validation result with member data
|
|
64
|
+
*/
|
|
65
|
+
async function validateMemberToken(memberIdInput) {
|
|
66
|
+
const invalidTokenResponse = { memberData: null, isValid: false };
|
|
67
|
+
|
|
68
|
+
if (!memberIdInput) {
|
|
69
|
+
return invalidTokenResponse;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
try {
|
|
73
|
+
// Get current logged-in member using elevated permissions
|
|
74
|
+
const member = await elevatedGetCurrentMember();
|
|
75
|
+
if (!member || !member._id) {
|
|
76
|
+
console.log(
|
|
77
|
+
'member not found from members.getCurrentMember() for memberIdInput',
|
|
78
|
+
memberIdInput
|
|
79
|
+
);
|
|
80
|
+
return invalidTokenResponse;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Query member data using elevated permissions (suppressAuth equivalent)
|
|
84
|
+
const { items } = await wixData
|
|
85
|
+
.query(COLLECTIONS.MEMBERS_DATA)
|
|
86
|
+
.eq('contactId', member._id)
|
|
87
|
+
.find();
|
|
88
|
+
|
|
89
|
+
console.log('items', items[0]);
|
|
90
|
+
console.log('member._id', member._id);
|
|
91
|
+
|
|
92
|
+
if (!items[0]?._id) {
|
|
93
|
+
const errorMessage = `No record found in DB for logged in Member [Corrupted Data - Duplicate Members? ] - There is no match in DB for currentMember: ${JSON.stringify(
|
|
94
|
+
{ memberIdInput, currentMemberId: member._id }
|
|
95
|
+
)}`;
|
|
96
|
+
console.error(errorMessage);
|
|
97
|
+
throw new Error('CORRUPTED_MEMBER_DATA');
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
console.log(`Id found in DB for memberIdInput :${memberIdInput} is ${items[0]?._id}`);
|
|
101
|
+
|
|
102
|
+
const memberData = items[0];
|
|
103
|
+
|
|
104
|
+
// Format membership dates
|
|
105
|
+
memberData.memberships = memberData.memberships.map(membership => ({
|
|
106
|
+
...membership,
|
|
107
|
+
membersince: formatDateToMonthYear(membership.membersince),
|
|
108
|
+
}));
|
|
109
|
+
|
|
110
|
+
const savedMemberId = memberData?._id;
|
|
111
|
+
const isValid = savedMemberId === memberIdInput;
|
|
112
|
+
|
|
113
|
+
if (!savedMemberId || !isValid) {
|
|
114
|
+
return invalidTokenResponse;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Check if member is dropped
|
|
118
|
+
if (memberData.action === MEMBER_ACTIONS.DROP) {
|
|
119
|
+
return invalidTokenResponse;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Add computed properties
|
|
123
|
+
memberData.addressDisplayOption = getAddressDisplayOptions(memberData);
|
|
124
|
+
console.log('memberData', memberData);
|
|
125
|
+
memberData.isStudent = isStudent(memberData);
|
|
126
|
+
|
|
127
|
+
return { memberData, isValid };
|
|
128
|
+
} catch (error) {
|
|
129
|
+
console.error('Error in validateMemberToken:', error);
|
|
130
|
+
throw error;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
52
134
|
module.exports = {
|
|
53
135
|
findMemberByWixDataId,
|
|
54
136
|
createContactAndMemberIfNew,
|
|
137
|
+
validateMemberToken,
|
|
55
138
|
};
|
package/backend/utils.js
CHANGED
|
@@ -39,7 +39,50 @@ const retrieveAllItems = async collectionName => {
|
|
|
39
39
|
return allItems;
|
|
40
40
|
};
|
|
41
41
|
|
|
42
|
+
/**
|
|
43
|
+
* Format date to Month Year string
|
|
44
|
+
* @param {string} dateString - The date string to format
|
|
45
|
+
* @returns {string} Formatted date (e.g., "January 2024")
|
|
46
|
+
*/
|
|
47
|
+
function formatDateToMonthYear(dateString) {
|
|
48
|
+
if (!dateString) return '';
|
|
49
|
+
|
|
50
|
+
const date = new Date(dateString);
|
|
51
|
+
if (isNaN(date.getTime())) return '';
|
|
52
|
+
const options = { year: 'numeric', month: 'long' };
|
|
53
|
+
return date.toLocaleDateString('en-US', options);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Check if member is a student
|
|
58
|
+
* @param {Object} member - The member object
|
|
59
|
+
* @returns {boolean} True if member has student membership
|
|
60
|
+
*/
|
|
61
|
+
function isStudent(member) {
|
|
62
|
+
const memberships = member?.memberships;
|
|
63
|
+
if (!Array.isArray(memberships)) return false;
|
|
64
|
+
|
|
65
|
+
return memberships.some(membership => membership.membertype === 'student');
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Get address display options for member
|
|
70
|
+
* @param {Object} member - The member object
|
|
71
|
+
* @returns {Array} Address display options
|
|
72
|
+
*/
|
|
73
|
+
function getAddressDisplayOptions(member) {
|
|
74
|
+
const addresses = member.addresses || [];
|
|
75
|
+
const displayOptions = member.addressDisplayOption || [];
|
|
76
|
+
if (addresses.length === 1 && addresses[0].key) {
|
|
77
|
+
return [{ key: addresses[0].key, isMain: true }];
|
|
78
|
+
}
|
|
79
|
+
return displayOptions;
|
|
80
|
+
}
|
|
81
|
+
|
|
42
82
|
module.exports = {
|
|
43
83
|
getSiteConfigs,
|
|
44
84
|
retrieveAllItems,
|
|
85
|
+
formatDateToMonthYear,
|
|
86
|
+
isStudent,
|
|
87
|
+
getAddressDisplayOptions,
|
|
45
88
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "abmp-npm",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.19",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "echo \"Error: no test specified\" && exit 1",
|
|
@@ -32,7 +32,9 @@
|
|
|
32
32
|
"@wix/essentials": "^0.1.28",
|
|
33
33
|
"@wix/members": "^1.0.330",
|
|
34
34
|
"@wix/site-location": "^1.31.0",
|
|
35
|
+
"@wix/site-members": "^1.32.0",
|
|
35
36
|
"@wix/site-window": "^1.44.0",
|
|
37
|
+
"lodash": "^4.17.21",
|
|
36
38
|
"ngeohash": "^0.6.3",
|
|
37
39
|
"phone": "^3.1.67",
|
|
38
40
|
"psdev-utils": "1.1.1"
|
package/pages/personalDetails.js
CHANGED
|
@@ -99,13 +99,12 @@ async function personalDetailsOnReady({
|
|
|
99
99
|
|
|
100
100
|
let memberData, isValid, isStudent;
|
|
101
101
|
|
|
102
|
-
// Main initialization
|
|
102
|
+
// Main initialization
|
|
103
103
|
const queryParams = await wixLocation.query();
|
|
104
104
|
const memberTokenId = queryParams.token;
|
|
105
105
|
const baseUrl = await wixLocation.baseUrl();
|
|
106
106
|
|
|
107
107
|
console.log('memberTokenId', memberTokenId);
|
|
108
|
-
console.log('baseUrl', baseUrl);
|
|
109
108
|
|
|
110
109
|
if (!memberTokenId) {
|
|
111
110
|
showUnauthorizedState();
|