abmp-npm 2.0.77 → 2.0.78

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.
Files changed (99) hide show
  1. package/package.json +8 -1
  2. package/.claude/skills/wix-data-query/SKILL.md +0 -167
  3. package/.claude/skills/wix-data-query/references/backup-archive.md +0 -136
  4. package/.claude/skills/wix-data-query/references/members-data-latest.md +0 -125
  5. package/.claude/skills/wix-data-query/references/recipes.md +0 -264
  6. package/.claude/worktrees/fix-save-button-disable/.husky/pre-commit +0 -19
  7. package/.claude/worktrees/fix-save-button-disable/.prettierignore +0 -7
  8. package/.claude/worktrees/fix-save-button-disable/.prettierrc.json +0 -16
  9. package/.claude/worktrees/fix-save-button-disable/README.md +0 -1
  10. package/.claude/worktrees/fix-save-button-disable/backend/README-member-contact-flows.md +0 -136
  11. package/.claude/worktrees/fix-save-button-disable/backend/__tests__/daily-pull-execution-check.test.js +0 -124
  12. package/.claude/worktrees/fix-save-button-disable/backend/__tests__/ensure-unique-urls-in-batch.test.js +0 -129
  13. package/.claude/worktrees/fix-save-button-disable/backend/__tests__/login-email-sync.test.js +0 -49
  14. package/.claude/worktrees/fix-save-button-disable/backend/__tests__/transient-retry-and-bulk-lookup.test.js +0 -129
  15. package/.claude/worktrees/fix-save-button-disable/backend/__tests__/url-uniqueness.test.js +0 -194
  16. package/.claude/worktrees/fix-save-button-disable/backend/automations-methods.js +0 -13
  17. package/.claude/worktrees/fix-save-button-disable/backend/cms-data-methods.js +0 -251
  18. package/.claude/worktrees/fix-save-button-disable/backend/consts.js +0 -58
  19. package/.claude/worktrees/fix-save-button-disable/backend/contacts-methods.js +0 -67
  20. package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/bulk-process-methods.js +0 -222
  21. package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/consts.js +0 -39
  22. package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/index.js +0 -5
  23. package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/process-member-methods.js +0 -213
  24. package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/schedule-methods.js +0 -41
  25. package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/sync-to-cms-methods.js +0 -161
  26. package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/utils.js +0 -151
  27. package/.claude/worktrees/fix-save-button-disable/backend/data-hooks.js +0 -29
  28. package/.claude/worktrees/fix-save-button-disable/backend/dev-only-methods.js +0 -58
  29. package/.claude/worktrees/fix-save-button-disable/backend/elevated-modules.js +0 -18
  30. package/.claude/worktrees/fix-save-button-disable/backend/forms-methods.js +0 -52
  31. package/.claude/worktrees/fix-save-button-disable/backend/http-functions/httpFunctions.js +0 -86
  32. package/.claude/worktrees/fix-save-button-disable/backend/http-functions/index.js +0 -3
  33. package/.claude/worktrees/fix-save-button-disable/backend/http-functions/interests.js +0 -35
  34. package/.claude/worktrees/fix-save-button-disable/backend/index.js +0 -19
  35. package/.claude/worktrees/fix-save-button-disable/backend/jobs.js +0 -158
  36. package/.claude/worktrees/fix-save-button-disable/backend/login/generate-member-session-token.js +0 -27
  37. package/.claude/worktrees/fix-save-button-disable/backend/login/index.js +0 -8
  38. package/.claude/worktrees/fix-save-button-disable/backend/login/qa-login-methods.js +0 -54
  39. package/.claude/worktrees/fix-save-button-disable/backend/login/sso-methods.js +0 -159
  40. package/.claude/worktrees/fix-save-button-disable/backend/member-contact-orchestration.js +0 -111
  41. package/.claude/worktrees/fix-save-button-disable/backend/members-area-methods.js +0 -88
  42. package/.claude/worktrees/fix-save-button-disable/backend/members-data-methods.js +0 -789
  43. package/.claude/worktrees/fix-save-button-disable/backend/pac-api-methods.js +0 -54
  44. package/.claude/worktrees/fix-save-button-disable/backend/routers/index.js +0 -3
  45. package/.claude/worktrees/fix-save-button-disable/backend/routers/methods.js +0 -191
  46. package/.claude/worktrees/fix-save-button-disable/backend/routers/utils.js +0 -128
  47. package/.claude/worktrees/fix-save-button-disable/backend/search-filters-methods.js +0 -124
  48. package/.claude/worktrees/fix-save-button-disable/backend/tasks/address-primary-methods.js +0 -256
  49. package/.claude/worktrees/fix-save-button-disable/backend/tasks/address-visibility-methods.js +0 -160
  50. package/.claude/worktrees/fix-save-button-disable/backend/tasks/consts.js +0 -34
  51. package/.claude/worktrees/fix-save-button-disable/backend/tasks/daily-pull-check-methods.js +0 -78
  52. package/.claude/worktrees/fix-save-button-disable/backend/tasks/email-normalize-methods.js +0 -134
  53. package/.claude/worktrees/fix-save-button-disable/backend/tasks/index.js +0 -10
  54. package/.claude/worktrees/fix-save-button-disable/backend/tasks/migration-methods.js +0 -46
  55. package/.claude/worktrees/fix-save-button-disable/backend/tasks/tasks-configs.js +0 -251
  56. package/.claude/worktrees/fix-save-button-disable/backend/tasks/tasks-helpers-methods.js +0 -433
  57. package/.claude/worktrees/fix-save-button-disable/backend/tasks/tasks-process-methods.js +0 -606
  58. package/.claude/worktrees/fix-save-button-disable/backend/tasks/url-migration-methods.js +0 -378
  59. package/.claude/worktrees/fix-save-button-disable/backend/tasks/url-space-fix-methods.js +0 -174
  60. package/.claude/worktrees/fix-save-button-disable/backend/utils.js +0 -277
  61. package/.claude/worktrees/fix-save-button-disable/dev-only-scripts/extract-duplicate-url-groups.js +0 -201
  62. package/.claude/worktrees/fix-save-button-disable/dev-only-scripts/find-duplicate-ids.js +0 -159
  63. package/.claude/worktrees/fix-save-button-disable/dev-only-scripts/find-duplicate-urls.js +0 -201
  64. package/.claude/worktrees/fix-save-button-disable/eslint.config.js +0 -120
  65. package/.claude/worktrees/fix-save-button-disable/index.js +0 -5
  66. package/.claude/worktrees/fix-save-button-disable/package-lock.json +0 -12160
  67. package/.claude/worktrees/fix-save-button-disable/package.json +0 -60
  68. package/.claude/worktrees/fix-save-button-disable/pages/ContactUs.js +0 -129
  69. package/.claude/worktrees/fix-save-button-disable/pages/Home.js +0 -779
  70. package/.claude/worktrees/fix-save-button-disable/pages/LearnMore.js +0 -27
  71. package/.claude/worktrees/fix-save-button-disable/pages/LoadingPage.js +0 -29
  72. package/.claude/worktrees/fix-save-button-disable/pages/Profile.js +0 -354
  73. package/.claude/worktrees/fix-save-button-disable/pages/QAPage.js +0 -39
  74. package/.claude/worktrees/fix-save-button-disable/pages/SaveAlerts.js +0 -13
  75. package/.claude/worktrees/fix-save-button-disable/pages/SelectBannerImages.js +0 -46
  76. package/.claude/worktrees/fix-save-button-disable/pages/deleteConfirm.js +0 -19
  77. package/.claude/worktrees/fix-save-button-disable/pages/index.js +0 -12
  78. package/.claude/worktrees/fix-save-button-disable/pages/personalDetails.js +0 -2486
  79. package/.claude/worktrees/fix-save-button-disable/public/Utils/homePage.js +0 -798
  80. package/.claude/worktrees/fix-save-button-disable/public/Utils/personalDetailsUtils.js +0 -25
  81. package/.claude/worktrees/fix-save-button-disable/public/Utils/sharedUtils.js +0 -235
  82. package/.claude/worktrees/fix-save-button-disable/public/consts.js +0 -113
  83. package/.claude/worktrees/fix-save-button-disable/public/index.js +0 -5
  84. package/.claude/worktrees/fix-save-button-disable/public/messages.js +0 -16
  85. package/.claude/worktrees/fix-save-button-disable/public/sso-auth-methods.js +0 -43
  86. package/.husky/pre-commit +0 -19
  87. package/.prettierignore +0 -7
  88. package/.prettierrc.json +0 -16
  89. package/backend/__tests__/daily-pull-execution-check.test.js +0 -124
  90. package/backend/__tests__/ensure-unique-urls-in-batch.test.js +0 -129
  91. package/backend/__tests__/login-email-sync.test.js +0 -49
  92. package/backend/__tests__/map-link.test.js +0 -115
  93. package/backend/__tests__/transient-retry-and-bulk-lookup.test.js +0 -129
  94. package/backend/__tests__/url-uniqueness.test.js +0 -194
  95. package/backend/__tests__/url-validation.test.js +0 -69
  96. package/dev-only-scripts/extract-duplicate-url-groups.js +0 -201
  97. package/dev-only-scripts/find-duplicate-ids.js +0 -159
  98. package/dev-only-scripts/find-duplicate-urls.js +0 -201
  99. package/eslint.config.js +0 -120
@@ -1,111 +0,0 @@
1
- /**
2
- * Orchestrates syncing between Wix Members and CRM Contacts.
3
- * Returns member data to save; caller does a single updateMember to avoid double-write.
4
- */
5
- const { emailsMatch } = require('../public/Utils/sharedUtils');
6
-
7
- const { createSiteContact, updateContactInfo, deleteSiteContact } = require('./contacts-methods');
8
-
9
- /**
10
- * Updates contact email in CRM. Returns member patch { wixContactId } when member record
11
- * must change; otherwise null. Caller merges and saves once.
12
- */
13
- async function updateContactEmail(newContactEmail, existingMemberData) {
14
- if (!newContactEmail) {
15
- throw new Error('New email is required');
16
- }
17
- if (!existingMemberData || existingMemberData.wixContactId == null) {
18
- throw new Error('Existing member data with wixContactId is required');
19
- }
20
-
21
- const { wixContactId, wixMemberId, email: loginEmail } = existingMemberData;
22
- const isSingleEntity = wixContactId === wixMemberId;
23
- // Compare case-insensitively: Wix CRM enforces email uniqueness without regard to case,
24
- // so a contact email that equals the login email (e.g. different casing) must collapse to
25
- // a single entity rather than attempt a duplicate contact write.
26
- const contactEmailDiffersFromLogin = !emailsMatch(loginEmail, newContactEmail);
27
-
28
- if (!contactEmailDiffersFromLogin) {
29
- if (isSingleEntity) {
30
- return null;
31
- }
32
- await deleteSiteContact(wixContactId);
33
- return { wixContactId: wixMemberId };
34
- }
35
-
36
- if (isSingleEntity) {
37
- const newWixContactId = await createSiteContact({
38
- firstName: existingMemberData.firstName,
39
- lastName: existingMemberData.lastName,
40
- contactFormEmail: newContactEmail,
41
- });
42
- return { wixContactId: newWixContactId };
43
- }
44
-
45
- await updateContactInfo(
46
- wixContactId,
47
- currentInfo => ({
48
- ...currentInfo,
49
- emails: {
50
- items: [{ email: newContactEmail, primary: true }],
51
- },
52
- }),
53
- 'update contact email'
54
- );
55
- return null;
56
- }
57
-
58
- async function updateContactNames({ wixContactId, firstName, lastName }) {
59
- if (!firstName && !lastName) {
60
- throw new Error('First name or last name is required');
61
- }
62
- const createNameUpdate = currentInfo => ({
63
- ...currentInfo,
64
- name: {
65
- first: firstName || currentInfo?.name?.first || '',
66
- last: lastName || currentInfo?.name?.last || '',
67
- },
68
- });
69
- return await updateContactInfo(wixContactId, createNameUpdate, 'update contact names');
70
- }
71
-
72
- /**
73
- * Syncs contact with member (email, names). Contact CRUD only; returns member data to save.
74
- * Caller must call updateMember once with the result.
75
- */
76
- async function updateMemberContactInfo(data, existingMemberData) {
77
- const { wixContactId } = existingMemberData;
78
- if (!wixContactId) {
79
- throw new Error('Wix Contact ID is required');
80
- }
81
- const updateConfig = [
82
- {
83
- fields: ['contactFormEmail'],
84
- updater: updateContactEmail,
85
- args: ([email]) => [email, existingMemberData],
86
- returnsMemberPatch: true,
87
- },
88
- {
89
- fields: ['firstName', 'lastName'],
90
- updater: updateContactNames,
91
- args: ([firstName, lastName]) => [{ firstName, lastName, wixContactId }],
92
- returnsMemberPatch: false,
93
- },
94
- ];
95
-
96
- const results = await Promise.all(
97
- updateConfig.map(async ({ fields, updater, args, returnsMemberPatch }) => {
98
- const existingValues = fields.map(field => existingMemberData[field]);
99
- const newValues = fields.map(field => data[field]);
100
- const hasChanged = existingValues.some((val, idx) => val !== newValues[idx]);
101
- if (!hasChanged) return null;
102
- const result = await updater(...args(newValues));
103
- return returnsMemberPatch ? result : null;
104
- })
105
- );
106
-
107
- const memberPatch = results.reduce((acc, patch) => (patch ? { ...acc, ...patch } : acc), {});
108
- return { ...data, ...memberPatch };
109
- }
110
-
111
- module.exports = { updateMemberContactInfo };
@@ -1,88 +0,0 @@
1
- const { auth } = require('@wix/essentials');
2
- const { members, authentication } = require('@wix/members');
3
-
4
- const { LOGIN_EMAIL_SYNC_STATUS } = require('./consts');
5
-
6
- const elevatedCreateMember = auth.elevate(members.createMember);
7
- const elevatedChangeLoginEmail = auth.elevate(authentication.changeLoginEmail);
8
-
9
- const LOG = '[loginEmailSync]';
10
-
11
- function prepareMemberData(partner) {
12
- const options = {
13
- member: {
14
- loginEmail: partner.email,
15
- contact: {
16
- firstName: partner.firstName,
17
- lastName: partner.lastName,
18
- },
19
- },
20
- };
21
- return options;
22
- }
23
- async function createMemberFunction(member) {
24
- const newMember = await elevatedCreateMember(member);
25
- console.log('[createMemberFunction]newMember', JSON.stringify(newMember, null, 2));
26
- return newMember._id;
27
- }
28
- const createSiteMember = async memberDetails => {
29
- console.log('createSiteMember memberDetails', memberDetails);
30
- try {
31
- const options = prepareMemberData(memberDetails);
32
- return await createMemberFunction(options);
33
- } catch (error) {
34
- console.error(`Error in createSiteMember ${error.message}`);
35
- throw error;
36
- }
37
- };
38
-
39
- const getCurrentMember = async () => {
40
- const member = await members.getCurrentMember();
41
- return member.member;
42
- };
43
-
44
- /**
45
- * Attempts to change a Wix member's login email to `member.email` and reports a structured
46
- * outcome instead of swallowing failures. Never throws.
47
- *
48
- * Outcomes:
49
- * - SKIPPED: member has no wixMemberId, nothing to change.
50
- * - UPDATED: Wix login email changed successfully.
51
- * - FAILED: change failed. The caller keeps the CMS login email unchanged (so it stays
52
- * consistent with Wix) and reports the member in the task result for manual handling.
53
- *
54
- * @param {Object} member - Member with { memberId, wixMemberId, email }
55
- * @returns {Promise<Object>} outcome
56
- */
57
- async function updateWixMemberLoginEmail(member) {
58
- const desiredEmail = member.email;
59
- const base = { memberId: member.memberId, wixMemberId: member.wixMemberId, desiredEmail };
60
-
61
- if (!member.wixMemberId) {
62
- console.log(`${LOG} member ${member.memberId} has no wixMemberId - skipping`);
63
- return { ...base, status: LOGIN_EMAIL_SYNC_STATUS.SKIPPED };
64
- }
65
-
66
- console.log(
67
- `${LOG} attempting login-email change for member ${member.memberId} (wixMemberId: ${member.wixMemberId}) -> ${desiredEmail}`
68
- );
69
-
70
- try {
71
- const updatedWixMember = await elevatedChangeLoginEmail(member.wixMemberId, desiredEmail);
72
- console.log(
73
- `${LOG} ✅ updated member ${member.memberId} (wixMemberId: ${member.wixMemberId}) -> ${updatedWixMember.loginEmail}`
74
- );
75
- return { ...base, status: LOGIN_EMAIL_SYNC_STATUS.UPDATED };
76
- } catch (error) {
77
- console.error(
78
- `${LOG} ❌ login-email change failed for member ${member.memberId} (wixMemberId: ${member.wixMemberId}) -> ${desiredEmail}: ${error.message}`
79
- );
80
- return { ...base, status: LOGIN_EMAIL_SYNC_STATUS.FAILED, error: error.message };
81
- }
82
- }
83
-
84
- module.exports = {
85
- createSiteMember,
86
- getCurrentMember,
87
- updateWixMemberLoginEmail,
88
- };