abmp-npm 10.3.7 → 10.3.8

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.
@@ -1,3 +1,5 @@
1
+ const axios = require('axios');
2
+
1
3
  const { COLLECTIONS } = require('../../public/consts');
2
4
  const { clearCollection } = require('../cms-data-methods');
3
5
  const { CONFIG_KEYS } = require('../consts');
@@ -10,13 +12,9 @@ const getInterests = async () => {
10
12
  getSiteConfigs(CONFIG_KEYS.INTERESTS_API_URL),
11
13
  getHeaders(),
12
14
  ]);
13
- const fetchOptions = {
14
- method: 'get',
15
- headers: headers,
16
- };
17
15
  try {
18
- const response = await fetch(url, fetchOptions);
19
- return await response.json();
16
+ const response = await axios.get(url, { headers });
17
+ return response.data;
20
18
  } catch (e) {
21
19
  console.error('Error getting interests:', e);
22
20
  throw e;
@@ -0,0 +1,27 @@
1
+ const { auth } = require('@wix/essentials');
2
+ const { authentication } = require('@wix/identity');
3
+
4
+ const elevatedSignOn = auth.elevate(authentication.signOn);
5
+
6
+ /**
7
+ * Creates a Wix member session token for SSO / QA login using @wix/identity signOn (elevated).
8
+ * @param {string} email - Member login email
9
+ * @returns {Promise<string>} Session token for authentication.applySessionToken on the client
10
+ */
11
+ async function generateMemberSessionToken(email) {
12
+ const trimmedEmail = (email || '').trim();
13
+ if (!trimmedEmail) {
14
+ throw new Error('Email is required to generate a session token');
15
+ }
16
+
17
+ const response = await elevatedSignOn({ email: trimmedEmail });
18
+ const sessionToken = response?.sessionToken;
19
+ if (!sessionToken) {
20
+ throw new Error('Failed to generate session token: empty response from signOn');
21
+ }
22
+ return sessionToken;
23
+ }
24
+
25
+ module.exports = {
26
+ generateMemberSessionToken,
27
+ };
@@ -1,7 +1,8 @@
1
- const { createLoginMethods } = require('./login-methods-factory');
2
- const { validateMemberToken } = require('./sso-methods');
1
+ const { loginQAMember } = require('./qa-login-methods');
2
+ const { validateMemberToken, authenticateSSOToken } = require('./sso-methods');
3
3
 
4
4
  module.exports = {
5
- createLoginMethods,
5
+ loginQAMember,
6
6
  validateMemberToken,
7
+ authenticateSSOToken,
7
8
  };
@@ -2,6 +2,8 @@ const { CONFIG_KEYS } = require('../consts');
2
2
  const { prepareMemberForQALogin, getQAUsers } = require('../members-data-methods');
3
3
  const { getSecret, getSiteConfigs } = require('../utils');
4
4
 
5
+ const { generateMemberSessionToken } = require('./generate-member-session-token');
6
+
5
7
  const validateQAUser = async userEmail => {
6
8
  const qaUsers = await getQAUsers();
7
9
  const matchingUserEmail = qaUsers.find(user => user.email === userEmail)?.email;
@@ -16,10 +18,9 @@ const validateQAUser = async userEmail => {
16
18
  * @param {Object} params - The parameters for the login
17
19
  * @param {string} params.userEmail - The email of the user to login
18
20
  * @param {string} params.secret - The secret of the user to login
19
- * @param {Function} generateSessionToken - a dependency of the method, injected by the createLoginMethods function
20
21
  * @returns {Promise<Object>} The result of the login
21
22
  */
22
- const loginQAMember = async ({ userEmail, secret }, generateSessionToken) => {
23
+ const loginQAMember = async ({ userEmail, secret }) => {
23
24
  try {
24
25
  const [qaSecret, allowAnyMember] = await Promise.all([
25
26
  getSecret('ABMP_QA_SECRET'),
@@ -36,7 +37,7 @@ const loginQAMember = async ({ userEmail, secret }, generateSessionToken) => {
36
37
  }
37
38
 
38
39
  const memberData = await prepareMemberForQALogin(userEmail);
39
- const token = await generateSessionToken(memberData.email, qaSecret);
40
+ const token = await generateMemberSessionToken(memberData.email);
40
41
  return {
41
42
  success: true,
42
43
  token,
@@ -1,5 +1,6 @@
1
1
  const { createHmac } = require('crypto');
2
2
 
3
+ const axios = require('axios');
3
4
  const { decode } = require('jwt-js-decode');
4
5
 
5
6
  const { CONFIG_KEYS, SSO_TOKEN_AUTH_API_URL } = require('../consts');
@@ -14,6 +15,8 @@ const {
14
15
  getSecret,
15
16
  } = require('../utils');
16
17
 
18
+ const { generateMemberSessionToken } = require('./generate-member-session-token');
19
+
17
20
  /**
18
21
  * Validates member token and retrieves member data
19
22
  * @param {string} memberIdInput - The member ID to validate
@@ -91,17 +94,16 @@ async function checkAndFetchSSO(token) {
91
94
  const SSO_TOKEN_AUTH_API_KEY = await getSecret('SSO_TOKEN_AUTH_API_KEY');
92
95
  const signature = createHmac('sha256', SSO_TOKEN_AUTH_API_KEY).update(token).digest('hex');
93
96
  const professionalassistcorpUrl = `${SSO_TOKEN_AUTH_API_URL}/eweb/SSOToken.ashx?token=${token}&Partner=Wix&Signature=${signature}`;
94
- const options = {
95
- method: 'get',
96
- };
97
97
  try {
98
- const httpResponse = await fetch(professionalassistcorpUrl, options);
98
+ const httpResponse = await axios.get(professionalassistcorpUrl, {
99
+ transformResponse: [d => d],
100
+ validateStatus: () => true,
101
+ });
99
102
  console.log('httpResponse status', httpResponse.status);
100
- if (!httpResponse.ok) {
103
+ if (httpResponse.status < 200 || httpResponse.status >= 300) {
101
104
  throw new Error('Fetch did not succeed with status: ' + httpResponse.status);
102
105
  }
103
- const responseToken = await httpResponse.text();
104
- return responseToken;
106
+ return httpResponse.data;
105
107
  } catch (error) {
106
108
  console.error('Error in checkAndFetchSSO', error);
107
109
  return null;
@@ -112,10 +114,9 @@ async function checkAndFetchSSO(token) {
112
114
  * Authenticate an SSO token
113
115
  * @param {Object} params - The parameters for the authentication
114
116
  * @param {string} params.token - The token to authenticate
115
- * @param {Function} generateSessionToken - a dependency of the method, injected by the createLoginMethods function
116
117
  * @returns {Promise<Object>} The result of the authentication
117
118
  */
118
- const authenticateSSOToken = async ({ token }, generateSessionToken) => {
119
+ const authenticateSSOToken = async ({ token }) => {
119
120
  const responseToken = await checkAndFetchSSO(token);
120
121
  const isValidToken = Boolean(
121
122
  responseToken && typeof responseToken === 'string' && responseToken?.trim()
@@ -135,7 +136,7 @@ const authenticateSSOToken = async ({ token }, generateSessionToken) => {
135
136
  const payload = jwt.payload;
136
137
  const memberData = await prepareMemberForSSOLogin(payload);
137
138
  console.log('memberDataCollectionId', memberData._id);
138
- const sessionToken = await generateSessionToken(memberData.email);
139
+ const sessionToken = await generateMemberSessionToken(memberData.email);
139
140
  const authObj = {
140
141
  type: 'success',
141
142
  memberId: memberData._id,
@@ -1,3 +1,5 @@
1
+ const axios = require('axios');
2
+
1
3
  const { PAC_API_URL, TEST_PAC_API_URL, BACKUP_API_URL } = require('./consts');
2
4
  const { getSecret } = require('./utils');
3
5
 
@@ -31,24 +33,22 @@ const fetchPACMembers = async ({ page, action, backupDate, isTestEnvironment })
31
33
  const url = `${baseUrl}/Members?${new URLSearchParams(queryParams).toString()}`;
32
34
  console.log(`Fetching PAC members from: ${url}`);
33
35
  const headers = await getHeaders();
34
- const fetchOptions = {
35
- method: 'get',
36
- headers: headers,
37
- };
38
- const response = await fetch(url, fetchOptions);
39
- const responseType = response.headers.get('content-type');
36
+ const response = await axios.get(url, {
37
+ headers,
38
+ validateStatus: () => true,
39
+ });
40
+ const responseType = response.headers['content-type'] || '';
40
41
  if (!responseType.includes('application/json')) {
41
42
  const errorMessage = `[fetchPACMembers] got invalid responseType: ${responseType} for page ${page} and actionFilter ${action}`;
42
43
  console.error(errorMessage);
43
44
  throw new Error(errorMessage);
44
45
  }
45
- if (response.ok) {
46
- return response.json();
47
- } else {
48
- const errorMessage = `[fetchPACMembers] failed with status ${response.status} for page ${page} and actionFilter ${action}`;
49
- console.error(errorMessage);
50
- throw new Error(errorMessage);
46
+ if (response.status >= 200 && response.status < 300) {
47
+ return response.data;
51
48
  }
49
+ const errorMessage = `[fetchPACMembers] failed with status ${response.status} for page ${page} and actionFilter ${action}`;
50
+ console.error(errorMessage);
51
+ throw new Error(errorMessage);
52
52
  };
53
53
 
54
54
  module.exports = { fetchPACMembers, getHeaders }; //TODO: remove getHeaders from exported methods once npm movement finishes
@@ -103,23 +103,23 @@ async function updateMemberRichContent(memberId) {
103
103
  content: htmlString,
104
104
  });
105
105
 
106
- const requestOptions = {
107
- method: 'post',
108
- headers: {
109
- 'Content-Type': 'application/json',
110
- Cookie: 'XSRF-TOKEN=1753949844|p--a7HsuVjR4',
111
- Authorization: 'Bearer ' + (await getServerlessAuth()),
112
- },
113
- body: raw,
106
+ const requestHeaders = {
107
+ 'Content-Type': 'application/json',
108
+ Cookie: 'XSRF-TOKEN=1753949844|p--a7HsuVjR4',
109
+ Authorization: 'Bearer ' + (await getServerlessAuth()),
114
110
  };
115
111
 
116
112
  try {
117
- const response = await fetch(
113
+ const response = await axios.post(
118
114
  'https://www.wixapis.com/data-sync/v1/abmp-content-converter',
119
- requestOptions
115
+ raw,
116
+ {
117
+ headers: requestHeaders,
118
+ validateStatus: () => true,
119
+ }
120
120
  );
121
- if (response.ok) {
122
- const data = await response.json();
121
+ if (response.status >= 200 && response.status < 300) {
122
+ const data = response.data;
123
123
  const updatedMember = {
124
124
  ...member,
125
125
  aboutYourSelf: data.richContent.richContent,
@@ -358,9 +358,13 @@ async function uploadMembersSitemap({ members, tokens, destinationFileName, site
358
358
 
359
359
  const url = `https://${host}${pathName}`;
360
360
  console.log('url', url);
361
- const res = await fetch(url, { method, headers: reqOpts.headers, body });
362
- if (!res.ok) {
363
- const respText = await res.text();
361
+ const res = await axios.put(url, body, {
362
+ headers: reqOpts.headers,
363
+ transformResponse: [d => d],
364
+ validateStatus: () => true,
365
+ });
366
+ if (res.status < 200 || res.status >= 300) {
367
+ const respText = res.data;
364
368
  console.log('Response body', respText);
365
369
  throw new Error(`S3 PUT failed ${res.status} ${res.statusText}: ${respText}`);
366
370
  }
@@ -391,13 +395,13 @@ async function stsPost(body, baseAccessKeyId, baseSecretAccessKey) {
391
395
  accessKeyId: baseAccessKeyId,
392
396
  secretAccessKey: baseSecretAccessKey,
393
397
  });
394
- const res = await fetch(`https://${host}${path}`, {
395
- method,
398
+ const res = await axios.post(`https://${host}${path}`, body, {
396
399
  headers: reqOpts.headers,
397
- body,
400
+ transformResponse: [d => d],
401
+ validateStatus: () => true,
398
402
  });
399
- const text = await res.text();
400
- if (!res.ok) throw new Error(`STS ${res.status}: ${text}`);
403
+ const text = res.data;
404
+ if (res.status < 200 || res.status >= 300) throw new Error(`STS ${res.status}: ${text}`);
401
405
 
402
406
  const accessKeyId = parseXmlVal(text, 'AccessKeyId');
403
407
  const secretAccessKey = parseXmlVal(text, 'SecretAccessKey');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "abmp-npm",
3
- "version": "10.3.7",
3
+ "version": "10.3.8",
4
4
  "main": "index.js",
5
5
  "scripts": {
6
6
  "check-cycles": "madge --circular .",
@@ -35,8 +35,8 @@
35
35
  "@wix/automations": "^1.0.261",
36
36
  "@wix/crm": "^1.0.1061",
37
37
  "@wix/data": "^1.0.349",
38
- "@wix/essentials": "^0.1.28",
39
- "@wix/identity": "^1.0.178",
38
+ "@wix/essentials": "^1.0.7",
39
+ "@wix/identity": "^1.0.195",
40
40
  "@wix/media": "^1.0.213",
41
41
  "@wix/members": "^1.0.365",
42
42
  "@wix/secrets": "^1.0.62",
package/pages/Home.js CHANGED
@@ -5,7 +5,6 @@ const { withWarmUpData } = require('psdev-utils/frontend');
5
5
 
6
6
  const { ADDRESS_STATUS_TYPES, DEFAULT_FILTER, DROPDOWN_OPTIONS } = require('../public/consts.js');
7
7
  const { createHomepageUtils } = require('../public/Utils/homePage.js');
8
- const { logHomePageLoadPhase } = require('../public/Utils/homePageLoadTrace.js');
9
8
  const {
10
9
  getMainAddress,
11
10
  formatPracticeAreasForDisplay,
@@ -14,8 +13,6 @@ const {
14
13
  normalizeExternalUrl,
15
14
  } = require('../public/Utils/sharedUtils.js');
16
15
 
17
- logHomePageLoadPhase('home_js_module_evaluated');
18
-
19
16
  let filter = JSON.parse(JSON.stringify(DEFAULT_FILTER));
20
17
  let dropDownOptions = JSON.parse(JSON.stringify(DROPDOWN_OPTIONS));
21
18
  let stateCityMap;
@@ -39,7 +36,6 @@ const homePageOnReady = async ({
39
36
  getNonCompiledFiltersOptions,
40
37
  filterProfiles,
41
38
  }) => {
42
- logHomePageLoadPhase('wix_onready_handler_entered');
43
39
  const {
44
40
  getParamsMapping,
45
41
  handlePagination,
@@ -62,9 +58,7 @@ const homePageOnReady = async ({
62
58
  detectMobile();
63
59
  initPageUI();
64
60
  attachEventListeners();
65
- logHomePageLoadPhase('before_handleUrlParams');
66
61
  await handleUrlParams();
67
- logHomePageLoadPhase('after_handleUrlParams');
68
62
 
69
63
  async function detectMobile() {
70
64
  try {
@@ -294,9 +288,7 @@ const homePageOnReady = async ({
294
288
  }
295
289
 
296
290
  async function applyFilterToUI(isDefaultStateParams) {
297
- logHomePageLoadPhase('applyFilterToUI_start', { isDefaultStateParams });
298
291
  const renderingEnv = await rendering.env();
299
- logHomePageLoadPhase('applyFilterToUI_rendering_env', { env: renderingEnv });
300
292
  const setFilterFromParams = async (isInitializeValue = true) => {
301
293
  const params = await wixLocation.query();
302
294
  console.log('params inside setFilterFromParams ', params);
@@ -330,9 +322,7 @@ const homePageOnReady = async ({
330
322
  await setFilterFromParams(true);
331
323
  if (isDefaultStateParams) {
332
324
  console.log('default state set for nearby');
333
- logHomePageLoadPhase('applyFilterToUI_default_path_fetch_and_nearby_start');
334
325
  await Promise.all([fetchFilterData(), nearByHandler(true)]);
335
- logHomePageLoadPhase('applyFilterToUI_default_path_complete');
336
326
  return;
337
327
  }
338
328
  console.log('not default state');
@@ -351,15 +341,12 @@ const homePageOnReady = async ({
351
341
  : () => updateResults('filterTimeout', true);
352
342
  console.log('filter ..', filter);
353
343
  try {
354
- logHomePageLoadPhase('applyFilterToUI_non_default_path_start');
355
344
  await Promise.all([
356
345
  fetchFilterData().then(() => setFilterFromParams(false)),
357
346
  //TODO: remove this workaround to fix issue with SSR showing invalid results
358
347
  renderingEnv === 'backend' ? Promise.resolve() : searchPromise(),
359
348
  ]);
360
- logHomePageLoadPhase('applyFilterToUI_non_default_path_complete');
361
349
  } catch (error) {
362
- logHomePageLoadPhase('applyFilterToUI_error', { message: String(error && error.message) });
363
350
  console.error('[applyFilterToUI] failed with error:', error);
364
351
  multiStateBoxSelector.changeState('errorState');
365
352
  }
@@ -438,7 +425,6 @@ const homePageOnReady = async ({
438
425
  }
439
426
  // NEAR BY FILTER
440
427
  async function nearByHandler(preservePagination = false) {
441
- logHomePageLoadPhase('nearByHandler_start', { preservePagination });
442
428
  const isSearchingNearby = _$w('#nearBy').checked;
443
429
  const renderingEnv = await rendering.env();
444
430
  // 1. Disable nearby input while processing
@@ -452,7 +438,6 @@ const homePageOnReady = async ({
452
438
  filter = newFilter;
453
439
  console.log('filter inside nearByHandler', filter);
454
440
  if (!success) {
455
- logHomePageLoadPhase('nearByHandler_geolocation_failed');
456
441
  if (renderingEnv !== 'backend') {
457
442
  //on Backend environment, geolocation API don't work, so makes no sense to change state for near by
458
443
  multiStateBoxSelector.changeState('nearByState');
@@ -467,7 +452,6 @@ const homePageOnReady = async ({
467
452
  // If location is not selected, change state to "resultsState"
468
453
  if (!isSearchingNearby) {
469
454
  if (await noSearchCriteria()) {
470
- logHomePageLoadPhase('nearByHandler_no_search_criteria');
471
455
  multiStateBoxSelector.changeState('noSearchCriteria');
472
456
  // 4. Re-enable nearby input
473
457
  _$w('#nearBy').enable();
@@ -479,7 +463,6 @@ const homePageOnReady = async ({
479
463
 
480
464
  // 4. Re-enable nearby input when done
481
465
  _$w('#nearBy').enable();
482
- logHomePageLoadPhase('nearByHandler_complete', { success: true });
483
466
  return true;
484
467
  }
485
468
 
@@ -487,7 +470,6 @@ const homePageOnReady = async ({
487
470
  // FETCH STATE/CITY/AREAS OF PRACTICE FROM BACKEND ONCE AND STORE IT
488
471
 
489
472
  async function fetchFilterData() {
490
- logHomePageLoadPhase('fetchFilterData_start');
491
473
  let completeStateList, areasOfPracticesList, stateCityMapList;
492
474
  try {
493
475
  const { COMPILED_STATE_LIST, COMPILED_AREAS_OF_PRACTICES, COMPILED_STATE_CITY_MAP } =
@@ -528,7 +510,6 @@ const homePageOnReady = async ({
528
510
 
529
511
  // Update filter states after data is loaded
530
512
  updateFiltersState();
531
- logHomePageLoadPhase('fetchFilterData_complete');
532
513
  }
533
514
 
534
515
  // CONSTRUCT DROPDOWN OPTIONS FOR STATE, CITY, AREA OF PRACTICES
@@ -3,7 +3,6 @@ const { window: wixWindow, rendering } = require('@wix/site-window');
3
3
 
4
4
  const { DEFAULT_FILTER } = require('../consts.js');
5
5
 
6
- const { logHomePageLoadPhase } = require('./homePageLoadTrace.js');
7
6
  const { debouncedFunction } = require('./sharedUtils.js');
8
7
 
9
8
  function isValidGeolocation(lat, lng) {
@@ -400,8 +399,6 @@ const createHomepageUtils = (_$w, filterProfiles) => {
400
399
  });
401
400
  }
402
401
  async function getAndSetUserLocation(isSearchingNearby, filter) {
403
- logHomePageLoadPhase('getAndSetUserLocation_start', { isSearchingNearby });
404
-
405
402
  const { latitude: existingLat, longitude: existingLng } = filter;
406
403
  if (isValidGeolocation(existingLat, existingLng)) {
407
404
  return {
@@ -411,23 +408,16 @@ const createHomepageUtils = (_$w, filterProfiles) => {
411
408
  }
412
409
 
413
410
  try {
414
- logHomePageLoadPhase('getAndSetUserLocation_before_getCurrentGeolocation');
415
411
  const location = await getCurrentGeolocationWithTimeout();
412
+
416
413
  console.log('location inside getAndSetUserLocation', location);
417
414
  const userLat = location.coords?.latitude ?? 0;
418
415
  const userLong = location.coords?.longitude ?? 0;
419
- logHomePageLoadPhase('getAndSetUserLocation_success', {
420
- lat: userLat,
421
- lng: userLong,
422
- });
423
416
  return {
424
417
  success: true,
425
418
  filter: applyGeolocationToFilter(filter, userLat, userLong, isSearchingNearby),
426
419
  };
427
420
  } catch (error) {
428
- logHomePageLoadPhase('getAndSetUserLocation_error', {
429
- message: String(error && error.message),
430
- });
431
421
  console.warn('Failed to get user location in getAndSetUserLocation', error);
432
422
  return { success: false, filter };
433
423
  }
@@ -546,7 +536,6 @@ const createHomepageUtils = (_$w, filterProfiles) => {
546
536
  );
547
537
  }
548
538
  async function parseAndValidateQueryParams(filter, pagination) {
549
- logHomePageLoadPhase('parseAndValidateQueryParams_start');
550
539
  const params = await wixLocation.query();
551
540
  const paramsMapping = getParamsMapping(filter, pagination);
552
541
  const {
@@ -558,11 +547,6 @@ const createHomepageUtils = (_$w, filterProfiles) => {
558
547
  const isSearchingNearby = params.nearby === 'true';
559
548
  const isNoParams = !withoutPreviewParams || Object.keys(withoutPreviewParams).length === 0;
560
549
  const { success, filter: newFilter } = await getAndSetUserLocation(isSearchingNearby, filter);
561
- logHomePageLoadPhase('parseAndValidateQueryParams_after_geolocation', {
562
- isNoParams,
563
- isSearchingNearby,
564
- success,
565
- });
566
550
 
567
551
  // Auto-enable nearby if GPS permission granted on fresh page load
568
552
  if (
@@ -573,7 +557,6 @@ const createHomepageUtils = (_$w, filterProfiles) => {
573
557
  !isSearchingNearby
574
558
  ) {
575
559
  await wixQueryParams.add({ nearby: 'true', page: '1' });
576
- logHomePageLoadPhase('parseAndValidateQueryParams_return', { branch: 'auto_nearby_url' });
577
560
  return { isDefaultStateParams: true, filter: newFilter };
578
561
  }
579
562
 
@@ -587,7 +570,6 @@ const createHomepageUtils = (_$w, filterProfiles) => {
587
570
  // });
588
571
  // Don't search yet - let the caller decide what to do
589
572
  // The search will be handled in applyFilterToUI
590
- logHomePageLoadPhase('parseAndValidateQueryParams_return', { branch: 'default_no_params' });
591
573
  return { isDefaultStateParams: true, filter: newFilter };
592
574
  }
593
575
  let autoAdjustFilters = false;
@@ -627,10 +609,6 @@ const createHomepageUtils = (_$w, filterProfiles) => {
627
609
  withoutPreviewParams.page) ||
628
610
  (Object.keys(withoutPreviewParams).length === 1 && withoutPreviewParams.nearby);
629
611
  const isDefaultStateParams = isNoParams || isNearbyFilter;
630
- logHomePageLoadPhase('parseAndValidateQueryParams_return', {
631
- branch: 'with_query_params',
632
- isDefaultStateParams,
633
- });
634
612
  return { isDefaultStateParams, filter: newFilter };
635
613
  }
636
614
 
@@ -714,7 +692,6 @@ const createHomepageUtils = (_$w, filterProfiles) => {
714
692
  isSearchingNearby,
715
693
  preservePagination = false,
716
694
  }) {
717
- logHomePageLoadPhase('search_start', { timeoutType, isSearchingNearby });
718
695
  const multiStateBoxSelector = _$w('#resultsStateBox');
719
696
  const renderingEnv = await rendering.env();
720
697
  const initSearchResultsUI = () => {
@@ -736,7 +713,6 @@ const createHomepageUtils = (_$w, filterProfiles) => {
736
713
  longitude: 0,
737
714
  }) === JSON.stringify(DEFAULT_FILTER)
738
715
  ) {
739
- logHomePageLoadPhase('search_short_circuit_no_criteria');
740
716
  multiStateBoxSelector.changeState('noSearchCriteria');
741
717
  return [];
742
718
  }
@@ -760,19 +736,14 @@ const createHomepageUtils = (_$w, filterProfiles) => {
760
736
  timeoutType,
761
737
  args: { filter, isSearchingNearby },
762
738
  });
763
- logHomePageLoadPhase('search_before_filterProfiles', { renderingEnv });
764
739
  const { success, response, error } = await funcPromise();
765
740
  if (!success) {
766
741
  _$w('#numberOfResults').text = '';
767
742
  console.error('[search] failed with error:', error);
768
- logHomePageLoadPhase('search_filterProfiles_failed', {
769
- message: String(error && error.message),
770
- });
771
743
  multiStateBoxSelector.changeState('errorState');
772
744
  return [];
773
745
  }
774
746
  const totalCount = response.items.length;
775
- logHomePageLoadPhase('search_filterProfiles_success', { totalCount });
776
747
  if (!totalCount) {
777
748
  _$w('#numberOfResults').text = 'Showing 0 results';
778
749
  _$w('#noResultsMessage').text = `${
@@ -1,24 +0,0 @@
1
- const { loginQAMember } = require('./qa-login-methods');
2
- const { authenticateSSOToken } = require('./sso-methods');
3
-
4
- /**
5
- * Creates login methods with injected generateSessionToken dependency
6
- * @param {Function} generateSessionToken - The Velo generateSessionToken function to inject
7
- * @returns {Object} Object containing loginQAMember and authenticateSSOToken methods
8
- */
9
- const createLoginMethods = generateSessionToken => {
10
- //There is no generateSessionToken SDK version, and the signOn of @wix/identity returns 403 error regardless that the permissions are valid
11
- //Therefore, as a workaround we need to inject the Velo version of generateSessionToken to the login methods.
12
- const injectGenerateSessionTokenToMethod =
13
- method =>
14
- async (...args) =>
15
- await method(...args, generateSessionToken);
16
- return {
17
- loginQAMember: injectGenerateSessionTokenToMethod(loginQAMember),
18
- authenticateSSOToken: injectGenerateSessionTokenToMethod(authenticateSSOToken),
19
- };
20
- };
21
-
22
- module.exports = {
23
- createLoginMethods,
24
- };
@@ -1,58 +0,0 @@
1
- /**
2
- * One session per full page load. First log call creates `loadId` (send this to support for GCL search).
3
- * Logs a plain object so DevTools shows an expandable tree; `loadId` is still easy to copy for GCL.
4
- */
5
-
6
- function randomSegment() {
7
- return Math.random().toString(36).slice(2, 10);
8
- }
9
-
10
- function nowMs() {
11
- if (typeof performance !== 'undefined' && typeof performance.now === 'function') {
12
- return performance.now();
13
- }
14
- return Date.now();
15
- }
16
-
17
- let session = null;
18
-
19
- function ensureSession() {
20
- if (session) {
21
- return session;
22
- }
23
- const t0 = nowMs();
24
- session = {
25
- loadId: `hpl_${Date.now()}_${randomSegment()}_${randomSegment()}`,
26
- t0,
27
- };
28
- return session;
29
- }
30
-
31
- /**
32
- * @param {string} phase
33
- * @param {Record<string, unknown>} [detail]
34
- */
35
- function logHomePageLoadPhase(phase, detail) {
36
- const s = ensureSession();
37
- const elapsed = Math.round(nowMs() - s.t0);
38
- const payload = {
39
- type: 'HomePageLoad',
40
- loadId: s.loadId,
41
- phase,
42
- elapsedSinceStartMs: elapsed,
43
- wallTimeIso: new Date().toISOString(),
44
- };
45
- if (detail && typeof detail === 'object') {
46
- payload.detail = detail;
47
- }
48
- console.log('[HomePageLoad]', payload);
49
- }
50
-
51
- function getHomePageLoadId() {
52
- return ensureSession().loadId;
53
- }
54
-
55
- module.exports = {
56
- logHomePageLoadPhase,
57
- getHomePageLoadId,
58
- };