abmp-npm 1.8.44 → 1.9.1

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 CHANGED
@@ -1,3 +1,7 @@
1
+ const PAC_API_URL = 'https://members.abmp.com/eweb/api/Wix';
2
+ const SSO_TOKEN_AUTH_API_URL = 'https://members.professionalassistcorp.com/';
3
+ const SSO_TOKEN_AUTH_API_KEY = 'testkey';
4
+
1
5
  /**
2
6
  * Valid configuration keys for getSiteConfigs function
3
7
  * @readonly
@@ -6,23 +10,36 @@
6
10
  const CONFIG_KEYS = {
7
11
  AUTOMATION_EMAIL_TRIGGER_ID: 'AUTOMATION_EMAIL_TRIGGER_ID',
8
12
  SITE_ASSOCIATION: 'SITE_ASSOCIATION',
13
+ DEFAULT_PROFILE_SEO_DESCRIPTION: 'DEFAULT_PROFILE_SEO_DESCRIPTION',
14
+ INTERESTS_API_URL: 'INTERESTS_API_URL',
15
+ SITE_LOGO_URL: 'SITE_LOGO_URL',
16
+ MEMBERS_EXTERNAL_PORTAL_URL: 'MEMBERS_EXTERNAL_PORTAL_URL',
17
+ DEFAULT_PROFILE_IMAGE: 'DEFAULT_PROFILE_IMAGE',
9
18
  };
10
19
 
11
20
  const MAX__MEMBERS_SEARCH_RESULTS = 120;
12
21
  const WIX_QUERY_MAX_LIMIT = 1000;
13
22
 
14
- const TASKS_NAMES = {
15
- ScheduleDailyMembersDataSync: 'ScheduleDailyMembersDataSync',
16
- ScheduleMembersDataPerAction: 'ScheduleMembersDataPerAction',
17
- SyncMembers: 'SyncMembers',
18
- };
19
-
20
23
  const GEO_HASH_PRECISION = 3;
21
24
 
25
+ const COMPILED_FILTERS_FIELDS = {
26
+ COMPILED_STATE_LIST: 'COMPILED_STATE_LIST',
27
+ COMPILED_AREAS_OF_PRACTICES: 'COMPILED_AREAS_OF_PRACTICES',
28
+ COMPILED_STATE_CITY_MAP: 'COMPILED_STATE_CITY_MAP',
29
+ };
30
+ const MEMBERSHIPS_TYPES = {
31
+ STUDENT: 'Student',
32
+ PAC_STAFF: 'PAC STAFF',
33
+ };
34
+
22
35
  module.exports = {
23
36
  CONFIG_KEYS,
24
37
  MAX__MEMBERS_SEARCH_RESULTS,
25
38
  WIX_QUERY_MAX_LIMIT,
26
- TASKS_NAMES,
27
39
  GEO_HASH_PRECISION,
40
+ PAC_API_URL,
41
+ COMPILED_FILTERS_FIELDS,
42
+ MEMBERSHIPS_TYPES,
43
+ SSO_TOKEN_AUTH_API_URL,
44
+ SSO_TOKEN_AUTH_API_KEY,
28
45
  };
@@ -1,5 +1,3 @@
1
- const PAC_API_URL = 'https://members.abmp.com/eweb/api/Wix';
2
-
3
1
  const MEMBER_ACTIONS = {
4
2
  UPDATE: 'update',
5
3
  NEW: 'new',
@@ -30,5 +28,4 @@ module.exports = {
30
28
  MEMBER_ACTIONS,
31
29
  ADDRESS_VISIBILITY_OPTIONS,
32
30
  DEFAULT_MEMBER_DISPLAY_SETTINGS,
33
- PAC_API_URL,
34
31
  };
@@ -1,10 +1,12 @@
1
1
  const { taskManager } = require('psdev-task-manager');
2
2
 
3
- const { TASKS_NAMES } = require('../consts');
3
+ const { CONFIG_KEYS } = require('../consts');
4
4
  const { fetchPACMembers } = require('../pac-api-methods');
5
+ const { TASKS_NAMES } = require('../tasks/consts');
6
+ const { getSiteConfigs } = require('../utils');
5
7
 
6
8
  const { bulkProcessAndSaveMemberData } = require('./bulk-process-methods');
7
- const { isUpdatedMember, isABMPMember } = require('./utils');
9
+ const { isUpdatedMember, isSiteAssociatedMember } = require('./utils');
8
10
 
9
11
  async function syncMembersDataPerAction(action) {
10
12
  try {
@@ -73,8 +75,10 @@ async function syncMembersDataPerAction(action) {
73
75
  async function synchronizeSinglePage(taskObject) {
74
76
  const { pageNumber, action } = taskObject.data;
75
77
  try {
76
- const memberDataResponse = await fetchPACMembers(pageNumber, action);
77
-
78
+ const [siteAssociation, memberDataResponse] = await Promise.all([
79
+ getSiteConfigs(CONFIG_KEYS.SITE_ASSOCIATION),
80
+ fetchPACMembers(pageNumber, action),
81
+ ]);
78
82
  if (
79
83
  !memberDataResponse ||
80
84
  !memberDataResponse.results ||
@@ -83,7 +87,7 @@ async function synchronizeSinglePage(taskObject) {
83
87
  throw new Error(`No data found for page ${pageNumber}`);
84
88
  }
85
89
  const toSyncMembers = memberDataResponse.results.filter(
86
- member => isUpdatedMember(member) && isABMPMember(member)
90
+ member => isUpdatedMember(member) && isSiteAssociatedMember(member, siteAssociation)
87
91
  );
88
92
  if (toSyncMembers.length === 0) {
89
93
  return {
@@ -91,7 +95,7 @@ async function synchronizeSinglePage(taskObject) {
91
95
  pageNumber,
92
96
  totalPageSize: memberDataResponse.results.length,
93
97
  filteredPageSize: toSyncMembers.length,
94
- message: 'No to be updated, or ABMP members found',
98
+ message: `No to be updated, or members of association: '${siteAssociation}' found`,
95
99
  };
96
100
  }
97
101
  const result = await bulkProcessAndSaveMemberData(toSyncMembers, pageNumber);
@@ -3,8 +3,8 @@ const { updateWixMemberLoginEmail } = require('../members-area-methods');
3
3
  const { MEMBER_ACTIONS } = require('./consts');
4
4
 
5
5
  const isUpdatedMember = member => member.action !== MEMBER_ACTIONS.NONE;
6
- const isABMPMember = member =>
7
- member.memberships.some(membership => membership.association === 'ABMP');
6
+ const isSiteAssociatedMember = (member, siteAssociation) =>
7
+ member.memberships.some(membership => membership.association === siteAssociation);
8
8
 
9
9
  const changeWixMembersEmails = async toChangeWixMembersEmails => {
10
10
  console.log(
@@ -70,7 +70,7 @@ const createFullName = (firstName, lastName) => {
70
70
 
71
71
  module.exports = {
72
72
  isUpdatedMember,
73
- isABMPMember,
73
+ isSiteAssociatedMember,
74
74
  changeWixMembersEmails,
75
75
  validateCoreMemberData,
76
76
  containsNonEnglish,
@@ -0,0 +1,29 @@
1
+ const { taskManager, TASK_TYPE } = require('psdev-task-manager');
2
+
3
+ const { COMPILED_FILTERS_FIELDS } = require('./consts');
4
+ const { TASKS_NAMES } = require('./tasks');
5
+
6
+ const scheduleCompileFiltersTask = field =>
7
+ taskManager().schedule({
8
+ name: TASKS_NAMES.CompileFiltersOptions,
9
+ data: { field },
10
+ type: TASK_TYPE.SCHEDULED,
11
+ });
12
+
13
+ function scheduleCompileInterestsTask() {
14
+ return scheduleCompileFiltersTask(COMPILED_FILTERS_FIELDS.COMPILED_AREAS_OF_PRACTICES);
15
+ }
16
+
17
+ function scheduleCompileStatesTask() {
18
+ return scheduleCompileFiltersTask(COMPILED_FILTERS_FIELDS.COMPILED_STATE_LIST);
19
+ }
20
+
21
+ function scheduleCompileCitiesTask() {
22
+ return scheduleCompileFiltersTask(COMPILED_FILTERS_FIELDS.COMPILED_STATE_CITY_MAP);
23
+ }
24
+
25
+ module.exports = {
26
+ scheduleCompileInterestsTask,
27
+ scheduleCompileStatesTask,
28
+ scheduleCompileCitiesTask,
29
+ };
package/backend/index.js CHANGED
@@ -2,11 +2,13 @@ module.exports = {
2
2
  ...require('./forms-methods'),
3
3
  ...require('./search-filters-methods'),
4
4
  ...require('./jobs'),
5
+ ...require('./consts'), //TODO: remove it once we finish NPM movement
5
6
  ...require('./utils'), //TODO: remove it once we finish NPM movement
6
7
  ...require('./daily-pull'), //TODO: remove it once we finish NPM movement
7
8
  ...require('./pac-api-methods'), //TODO: remove it once we finish NPM movement
8
9
  ...require('./members-area-methods'), //TODO: remove it once we finish NPM movement
9
10
  ...require('./members-data-methods'), //TODO: remove it once we finish NPM movement
10
11
  ...require('./cms-data-methods'), //TODO: remove it once we finish NPM movement
11
- ...require('./routers-methods'), //TODO: remove it once we finish NPM movement
12
+ ...require('./sso-methods'),
13
+ ...require('./data-hooks'),
12
14
  };
package/backend/jobs.js CHANGED
@@ -1,7 +1,6 @@
1
1
  const { taskManager } = require('psdev-task-manager');
2
2
 
3
- const { TASKS_NAMES } = require('./consts');
4
- const { TASKS } = require('./tasks');
3
+ const { TASKS, TASKS_NAMES } = require('./tasks');
5
4
 
6
5
  async function runScheduledTasks() {
7
6
  try {
@@ -27,4 +26,16 @@ async function scheduleDailyPullTask() {
27
26
  }
28
27
  }
29
28
 
30
- module.exports = { runScheduledTasks, scheduleDailyPullTask };
29
+ async function updateSiteMapS3() {
30
+ try {
31
+ return await taskManager().schedule({
32
+ name: TASKS_NAMES.updateSiteMapS3,
33
+ data: {},
34
+ type: 'scheduled',
35
+ });
36
+ } catch (error) {
37
+ throw new Error(`Failed to updateSiteMapS3: ${error.message}`);
38
+ }
39
+ }
40
+
41
+ module.exports = { runScheduledTasks, scheduleDailyPullTask, updateSiteMapS3 };
@@ -1,16 +1,14 @@
1
1
  const { COLLECTIONS } = require('../public/consts');
2
2
 
3
+ const { MEMBERSHIPS_TYPES } = require('./consts');
3
4
  const { updateMemberContactInfo } = require('./contacts-methods');
4
- const { MEMBER_ACTIONS } = require('./daily-pull');
5
+ const { MEMBER_ACTIONS } = require('./daily-pull/consts');
5
6
  const { wixData } = require('./elevated-modules');
6
- const { createSiteMember, getCurrentMember } = require('./members-area-methods');
7
+ const { createSiteMember } = require('./members-area-methods');
7
8
  const {
8
- createBatches,
9
+ chunkArray,
9
10
  normalizeUrlForComparison,
10
11
  queryAllItems,
11
- formatDateToMonthYear,
12
- getAddressDisplayOptions,
13
- isStudent,
14
12
  generateGeoHash,
15
13
  } = require('./utils');
16
14
 
@@ -48,7 +46,7 @@ async function createContactAndMemberIfNew(memberData) {
48
46
  ...memberData,
49
47
  contactId,
50
48
  };
51
- const updatedResult = await wixData.update(COLLECTIONS.MEMBERS_DATA, memberDataWithContactId);
49
+ const updatedResult = await updateMember(memberDataWithContactId);
52
50
  memberDataWithContactId = {
53
51
  ...memberDataWithContactId,
54
52
  ...updatedResult,
@@ -60,79 +58,6 @@ async function createContactAndMemberIfNew(memberData) {
60
58
  }
61
59
  }
62
60
 
63
- /**
64
- * Validates member token and retrieves member data
65
- * @param {string} memberIdInput - The member ID to validate
66
- * @returns {Promise<{memberData: Object|null, isValid: boolean}>} Validation result with member data
67
- */
68
- async function validateMemberToken(memberIdInput) {
69
- const invalidTokenResponse = { memberData: null, isValid: false };
70
-
71
- if (!memberIdInput) {
72
- return invalidTokenResponse;
73
- }
74
-
75
- try {
76
- const member = await getCurrentMember();
77
- if (!member || !member._id) {
78
- console.log(
79
- 'member not found from members.getCurrentMember() for memberIdInput',
80
- memberIdInput
81
- );
82
- return invalidTokenResponse;
83
- }
84
-
85
- // Query member data using elevated permissions (suppressAuth equivalent)
86
- const { items } = await wixData
87
- .query(COLLECTIONS.MEMBERS_DATA)
88
- .eq('contactId', member._id)
89
- .find();
90
-
91
- console.log('items', items[0]);
92
- console.log('member._id', member._id);
93
-
94
- if (!items[0]?._id) {
95
- 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(
96
- { memberIdInput, currentMemberId: member._id }
97
- )}`;
98
- console.error(errorMessage);
99
- throw new Error('CORRUPTED_MEMBER_DATA');
100
- }
101
-
102
- console.log(`Id found in DB for memberIdInput :${memberIdInput} is ${items[0]?._id}`);
103
-
104
- const memberData = items[0];
105
-
106
- // Format membership dates
107
- memberData.memberships = memberData.memberships.map(membership => ({
108
- ...membership,
109
- membersince: formatDateToMonthYear(membership.membersince),
110
- }));
111
-
112
- const savedMemberId = memberData?._id;
113
- const isValid = savedMemberId === memberIdInput;
114
-
115
- if (!savedMemberId || !isValid) {
116
- return invalidTokenResponse;
117
- }
118
-
119
- // Check if member is dropped
120
- if (memberData.action === MEMBER_ACTIONS.DROP) {
121
- return invalidTokenResponse;
122
- }
123
-
124
- // Add computed properties
125
- memberData.addressDisplayOption = getAddressDisplayOptions(memberData);
126
- console.log('memberData', memberData);
127
- memberData.isStudent = isStudent(memberData);
128
-
129
- return { memberData, isValid };
130
- } catch (error) {
131
- console.error('Error in validateMemberToken:', error);
132
- throw error;
133
- }
134
- }
135
-
136
61
  /** Performs bulk save operation for member data
137
62
  * @param { Array } memberDataList - Array of member data objects to save
138
63
  * @returns { Promise < Object >} - Bulk save operation result
@@ -144,7 +69,7 @@ async function bulkSaveMembers(memberDataList) {
144
69
 
145
70
  try {
146
71
  // bulkSave all with batches of 1000 items as this is the Velo limit for bulkSave
147
- const batches = createBatches(memberDataList, 1000);
72
+ const batches = chunkArray(memberDataList, 1000);
148
73
  return await Promise.all(
149
74
  batches.map(batch => wixData.bulkSave(COLLECTIONS.MEMBERS_DATA, batch))
150
75
  );
@@ -240,6 +165,59 @@ async function getMemberBySlug({
240
165
  }
241
166
  }
242
167
 
168
+ async function getMemberByContactId(contactId) {
169
+ if (!contactId) {
170
+ throw new Error('Contact ID is required');
171
+ }
172
+ try {
173
+ const members = await wixData
174
+ .query(COLLECTIONS.MEMBERS_DATA)
175
+ .eq('contactId', contactId)
176
+ .limit(2)
177
+ .find()
178
+ .then(res => res.items);
179
+ if (members.length > 1) {
180
+ throw new Error(
181
+ `[getMemberByContactId] Multiple members found with contactId ${contactId} membersIds are : [${members.map(member => member.memberId).join(', ')}]`
182
+ );
183
+ }
184
+ return members[0] || null;
185
+ } catch (error) {
186
+ throw new Error(
187
+ `[getMemberByContactId] Failed to retrieve member by contactId ${contactId} data: ${error.message}`
188
+ );
189
+ }
190
+ }
191
+ /**
192
+ * Gets all members with aboutyoustatus as null
193
+ * @returns {Promise<import('wix-data').WixDataQueryResult>} - WixDataQueryResult of member data
194
+ */
195
+ const getAllEmptyAboutYouMembers = async () => {
196
+ try {
197
+ const membersQuery = wixData
198
+ .query(COLLECTIONS.MEMBERS_DATA)
199
+ .isEmpty('aboutYourSelf')
200
+ .isNotEmpty('aboutYouHtml');
201
+ return await queryAllItems(membersQuery);
202
+ } catch (error) {
203
+ console.error('Error getting empty about you members:', error);
204
+ throw new Error(`Failed to get empty about you members: ${error.message}`);
205
+ }
206
+ };
207
+
208
+ /**
209
+ * updates member data
210
+ * @param {Object} memberToUpdate - The member data to update
211
+ * @returns {Promise<Object|null>} - Member data or null if not found
212
+ */
213
+ async function updateMember(memberToUpdate) {
214
+ try {
215
+ const updatedMember = await wixData.update(COLLECTIONS.MEMBERS_DATA, memberToUpdate);
216
+ return updatedMember;
217
+ } catch (error) {
218
+ throw new Error(`Failed to update member data: ${error.message}`);
219
+ }
220
+ }
243
221
  /**
244
222
  * Saves member registration data
245
223
  * @param {Object} data - Member data to save
@@ -271,7 +249,7 @@ async function saveRegistrationData(data, id) {
271
249
 
272
250
  await updateMemberContactInfo(data, existingMemberData);
273
251
 
274
- const saveData = await wixData.update(COLLECTIONS.MEMBERS_DATA, data);
252
+ const saveData = await updateMember(data);
275
253
  return {
276
254
  type: 'success',
277
255
  saveData,
@@ -318,12 +296,182 @@ async function urlExists(url, excludeMemberId) {
318
296
  }
319
297
  }
320
298
 
299
+ /**
300
+ * Checks URL uniqueness for a member
301
+ * @param {string} url - The URL to check
302
+ * @param {string} memberId - The member ID to exclude from the check
303
+ * @returns {Promise<Object>} Result object with isUnique boolean
304
+ */
305
+ async function checkUrlUniqueness(url, memberId) {
306
+ if (!url || !memberId) {
307
+ throw new Error('Missing required parameters: url and memberId are required');
308
+ }
309
+
310
+ try {
311
+ const trimmedUrl = url.trim();
312
+ const exists = await urlExists(trimmedUrl, memberId);
313
+
314
+ return { isUnique: !exists };
315
+ } catch (error) {
316
+ console.error('Error checking URL uniqueness:', error);
317
+ throw new Error(`Failed to check URL uniqueness: ${error.message}`);
318
+ }
319
+ }
320
+ /**
321
+ * Get all members with external profile images
322
+ * @returns {Promise<Array>} - Array of member IDs
323
+ */
324
+ async function getAllMembersWithExternalImages() {
325
+ try {
326
+ const membersQuery = await wixData
327
+ .query(COLLECTIONS.MEMBERS_DATA)
328
+ .isNotEmpty('profileImage')
329
+ .ne('profileImage', null);
330
+
331
+ const allItems = await queryAllItems(membersQuery);
332
+
333
+ // Filter for external images (not starting with 'wix:')
334
+ const membersWithExternalImages = allItems.filter(
335
+ member => member.profileImage && !member.profileImage.startsWith('wix:')
336
+ );
337
+
338
+ return membersWithExternalImages;
339
+ } catch (error) {
340
+ console.error('Error getting members with external images:', error);
341
+ return [];
342
+ }
343
+ }
344
+
345
+ async function getMembersWithWixUrl() {
346
+ const membersQuery = wixData
347
+ .query(COLLECTIONS.MEMBERS_DATA)
348
+ .eq('isVisible', true)
349
+ .eq('showWixUrl', true)
350
+ .ne('action', MEMBER_ACTIONS.DROP)
351
+ .ne('memberships.membertype', MEMBERSHIPS_TYPES.PAC_STAFF)
352
+ .isNotEmpty('url')
353
+ .limit(1000);
354
+ let currentResults = await membersQuery.find();
355
+ let i = 0;
356
+ const allItems = currentResults.items;
357
+ while (currentResults.hasNext()) {
358
+ if (i % 50 === 0) console.log(`page ${i}`);
359
+ currentResults = await currentResults.next();
360
+ allItems.push(...currentResults.items);
361
+ i++;
362
+ }
363
+ console.log('i is ', i);
364
+ const filtered = allItems.filter(item => typeof item.url === 'string' && !item.url.includes('/'));
365
+ console.log('filtered is ', filtered.length);
366
+ return filtered;
367
+ }
368
+
369
+ /**
370
+ * Gets all members who need contactFormEmail migration (missing contactFormEmail field)
371
+ * @returns {Promise<Array>} - Array of member data
372
+ */
373
+ const getAllMembersWithoutContactFormEmail = async () => {
374
+ try {
375
+ const membersQuery = wixData
376
+ .query(COLLECTIONS.MEMBERS_DATA)
377
+ .isEmpty('contactFormEmail')
378
+ .isNotEmpty('email')
379
+ .limit(1000);
380
+
381
+ const allItems = await queryAllItems(membersQuery);
382
+ return allItems;
383
+ } catch (error) {
384
+ console.error('Error getting members without contactFormEmail:', error);
385
+ throw new Error(`Failed to get members without contactFormEmail: ${error.message}`);
386
+ }
387
+ };
388
+
389
+ /* Gets all updated login emails from the updated emails database
390
+ * @returns {Promise<Array>} - Array of updated email data
391
+ */
392
+ const getAllUpdatedLoginEmails = async () => {
393
+ try {
394
+ const updatedEmailsQuery = await wixData
395
+ .query(COLLECTIONS.UPDATED_LOGIN_EMAILS)
396
+ .isNotEmpty('memberId')
397
+ .isNotEmpty('loginEmail')
398
+ .limit(1000);
399
+ return await queryAllItems(updatedEmailsQuery);
400
+ } catch (error) {
401
+ console.error('Error getting updated login emails:', error);
402
+ throw new Error(`Failed to get updated login emails: ${error.message}`);
403
+ }
404
+ };
405
+ /**
406
+ * Gets members by their member IDs for email sync
407
+ * @param {Array} memberIds - Array of member IDs to fetch
408
+ * @returns {Promise<Array>} - Array of member data
409
+ */
410
+ const getMembersByIds = async memberIds => {
411
+ try {
412
+ const membersQuery = wixData
413
+ .query(COLLECTIONS.MEMBERS_DATA)
414
+ .hasSome('memberId', memberIds)
415
+ .limit(1000);
416
+
417
+ return await queryAllItems(membersQuery);
418
+ } catch (error) {
419
+ console.error('Error getting members by IDs:', error);
420
+ throw new Error(`Failed to get members by IDs: ${error.message}`);
421
+ }
422
+ };
423
+
424
+ async function getSiteMemberId(data) {
425
+ try {
426
+ console.log('data', data);
427
+ const memberId = data?.pac?.cst_recno;
428
+ if (!memberId) {
429
+ const errorMessage = `Member ID is missing in passed data ${JSON.stringify(data)}`;
430
+ console.error(errorMessage);
431
+ throw new Error(errorMessage);
432
+ }
433
+ const queryMemberResult = await wixData
434
+ .query(COLLECTIONS.MEMBERS_DATA)
435
+ .eq('memberId', Number(memberId))
436
+ .find()
437
+ .then(res => res.items);
438
+ if (!queryMemberResult.length || queryMemberResult.length > 1) {
439
+ throw new Error(
440
+ `Invalid Members count found in DB for email ${data.email} members count is : [${
441
+ queryMemberResult.length
442
+ }] membersIds are : [${queryMemberResult.map(member => member.memberId).join(', ')}]`
443
+ );
444
+ }
445
+ let memberData = queryMemberResult[0];
446
+ console.log('memberData', memberData);
447
+ const isNewUser = !memberData.contactId;
448
+ if (isNewUser) {
449
+ const memberDataWithContactId = await createContactAndMemberIfNew(memberData);
450
+ console.log('memberDataWithContactId', memberDataWithContactId);
451
+ memberData = memberDataWithContactId;
452
+ }
453
+ return memberData;
454
+ } catch (error) {
455
+ console.error('Error in getSiteMemberId', error.message);
456
+ throw error;
457
+ }
458
+ }
459
+
321
460
  module.exports = {
322
461
  findMemberByWixDataId,
323
462
  createContactAndMemberIfNew,
324
- validateMemberToken,
325
463
  saveRegistrationData,
326
464
  bulkSaveMembers,
327
465
  findMemberById,
328
466
  getMemberBySlug,
467
+ getMemberByContactId,
468
+ getAllEmptyAboutYouMembers,
469
+ updateMember,
470
+ getAllMembersWithExternalImages,
471
+ getMembersWithWixUrl,
472
+ getAllMembersWithoutContactFormEmail,
473
+ getAllUpdatedLoginEmails,
474
+ getMembersByIds,
475
+ getSiteMemberId,
476
+ checkUrlUniqueness,
329
477
  };
@@ -1,9 +1,8 @@
1
- const { secrets } = require('@wix/secrets');
2
-
3
- const { PAC_API_URL } = require('./daily-pull/consts');
1
+ const { PAC_API_URL } = require('./consts');
2
+ const { getSecret } = require('./utils');
4
3
 
5
4
  const getHeaders = async () => {
6
- const AUTH_TOKEN = await secrets.getSecretValue('members-data-api-key');
5
+ const AUTH_TOKEN = await getSecret('members-data-api-key');
7
6
  const headers = {
8
7
  Authorization: `Bearer ${AUTH_TOKEN}`,
9
8
  };
@@ -118,4 +118,7 @@ module.exports = {
118
118
  getCompiledFiltersOptions,
119
119
  getNonCompiledFiltersOptions,
120
120
  filterProfiles,
121
+ getCompleteStateList,
122
+ getAreasOfPracticeList,
123
+ getStateCityMap,
121
124
  };