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.
- package/package.json +8 -1
- package/.claude/skills/wix-data-query/SKILL.md +0 -167
- package/.claude/skills/wix-data-query/references/backup-archive.md +0 -136
- package/.claude/skills/wix-data-query/references/members-data-latest.md +0 -125
- package/.claude/skills/wix-data-query/references/recipes.md +0 -264
- package/.claude/worktrees/fix-save-button-disable/.husky/pre-commit +0 -19
- package/.claude/worktrees/fix-save-button-disable/.prettierignore +0 -7
- package/.claude/worktrees/fix-save-button-disable/.prettierrc.json +0 -16
- package/.claude/worktrees/fix-save-button-disable/README.md +0 -1
- package/.claude/worktrees/fix-save-button-disable/backend/README-member-contact-flows.md +0 -136
- package/.claude/worktrees/fix-save-button-disable/backend/__tests__/daily-pull-execution-check.test.js +0 -124
- package/.claude/worktrees/fix-save-button-disable/backend/__tests__/ensure-unique-urls-in-batch.test.js +0 -129
- package/.claude/worktrees/fix-save-button-disable/backend/__tests__/login-email-sync.test.js +0 -49
- package/.claude/worktrees/fix-save-button-disable/backend/__tests__/transient-retry-and-bulk-lookup.test.js +0 -129
- package/.claude/worktrees/fix-save-button-disable/backend/__tests__/url-uniqueness.test.js +0 -194
- package/.claude/worktrees/fix-save-button-disable/backend/automations-methods.js +0 -13
- package/.claude/worktrees/fix-save-button-disable/backend/cms-data-methods.js +0 -251
- package/.claude/worktrees/fix-save-button-disable/backend/consts.js +0 -58
- package/.claude/worktrees/fix-save-button-disable/backend/contacts-methods.js +0 -67
- package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/bulk-process-methods.js +0 -222
- package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/consts.js +0 -39
- package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/index.js +0 -5
- package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/process-member-methods.js +0 -213
- package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/schedule-methods.js +0 -41
- package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/sync-to-cms-methods.js +0 -161
- package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/utils.js +0 -151
- package/.claude/worktrees/fix-save-button-disable/backend/data-hooks.js +0 -29
- package/.claude/worktrees/fix-save-button-disable/backend/dev-only-methods.js +0 -58
- package/.claude/worktrees/fix-save-button-disable/backend/elevated-modules.js +0 -18
- package/.claude/worktrees/fix-save-button-disable/backend/forms-methods.js +0 -52
- package/.claude/worktrees/fix-save-button-disable/backend/http-functions/httpFunctions.js +0 -86
- package/.claude/worktrees/fix-save-button-disable/backend/http-functions/index.js +0 -3
- package/.claude/worktrees/fix-save-button-disable/backend/http-functions/interests.js +0 -35
- package/.claude/worktrees/fix-save-button-disable/backend/index.js +0 -19
- package/.claude/worktrees/fix-save-button-disable/backend/jobs.js +0 -158
- package/.claude/worktrees/fix-save-button-disable/backend/login/generate-member-session-token.js +0 -27
- package/.claude/worktrees/fix-save-button-disable/backend/login/index.js +0 -8
- package/.claude/worktrees/fix-save-button-disable/backend/login/qa-login-methods.js +0 -54
- package/.claude/worktrees/fix-save-button-disable/backend/login/sso-methods.js +0 -159
- package/.claude/worktrees/fix-save-button-disable/backend/member-contact-orchestration.js +0 -111
- package/.claude/worktrees/fix-save-button-disable/backend/members-area-methods.js +0 -88
- package/.claude/worktrees/fix-save-button-disable/backend/members-data-methods.js +0 -789
- package/.claude/worktrees/fix-save-button-disable/backend/pac-api-methods.js +0 -54
- package/.claude/worktrees/fix-save-button-disable/backend/routers/index.js +0 -3
- package/.claude/worktrees/fix-save-button-disable/backend/routers/methods.js +0 -191
- package/.claude/worktrees/fix-save-button-disable/backend/routers/utils.js +0 -128
- package/.claude/worktrees/fix-save-button-disable/backend/search-filters-methods.js +0 -124
- package/.claude/worktrees/fix-save-button-disable/backend/tasks/address-primary-methods.js +0 -256
- package/.claude/worktrees/fix-save-button-disable/backend/tasks/address-visibility-methods.js +0 -160
- package/.claude/worktrees/fix-save-button-disable/backend/tasks/consts.js +0 -34
- package/.claude/worktrees/fix-save-button-disable/backend/tasks/daily-pull-check-methods.js +0 -78
- package/.claude/worktrees/fix-save-button-disable/backend/tasks/email-normalize-methods.js +0 -134
- package/.claude/worktrees/fix-save-button-disable/backend/tasks/index.js +0 -10
- package/.claude/worktrees/fix-save-button-disable/backend/tasks/migration-methods.js +0 -46
- package/.claude/worktrees/fix-save-button-disable/backend/tasks/tasks-configs.js +0 -251
- package/.claude/worktrees/fix-save-button-disable/backend/tasks/tasks-helpers-methods.js +0 -433
- package/.claude/worktrees/fix-save-button-disable/backend/tasks/tasks-process-methods.js +0 -606
- package/.claude/worktrees/fix-save-button-disable/backend/tasks/url-migration-methods.js +0 -378
- package/.claude/worktrees/fix-save-button-disable/backend/tasks/url-space-fix-methods.js +0 -174
- package/.claude/worktrees/fix-save-button-disable/backend/utils.js +0 -277
- package/.claude/worktrees/fix-save-button-disable/dev-only-scripts/extract-duplicate-url-groups.js +0 -201
- package/.claude/worktrees/fix-save-button-disable/dev-only-scripts/find-duplicate-ids.js +0 -159
- package/.claude/worktrees/fix-save-button-disable/dev-only-scripts/find-duplicate-urls.js +0 -201
- package/.claude/worktrees/fix-save-button-disable/eslint.config.js +0 -120
- package/.claude/worktrees/fix-save-button-disable/index.js +0 -5
- package/.claude/worktrees/fix-save-button-disable/package-lock.json +0 -12160
- package/.claude/worktrees/fix-save-button-disable/package.json +0 -60
- package/.claude/worktrees/fix-save-button-disable/pages/ContactUs.js +0 -129
- package/.claude/worktrees/fix-save-button-disable/pages/Home.js +0 -779
- package/.claude/worktrees/fix-save-button-disable/pages/LearnMore.js +0 -27
- package/.claude/worktrees/fix-save-button-disable/pages/LoadingPage.js +0 -29
- package/.claude/worktrees/fix-save-button-disable/pages/Profile.js +0 -354
- package/.claude/worktrees/fix-save-button-disable/pages/QAPage.js +0 -39
- package/.claude/worktrees/fix-save-button-disable/pages/SaveAlerts.js +0 -13
- package/.claude/worktrees/fix-save-button-disable/pages/SelectBannerImages.js +0 -46
- package/.claude/worktrees/fix-save-button-disable/pages/deleteConfirm.js +0 -19
- package/.claude/worktrees/fix-save-button-disable/pages/index.js +0 -12
- package/.claude/worktrees/fix-save-button-disable/pages/personalDetails.js +0 -2486
- package/.claude/worktrees/fix-save-button-disable/public/Utils/homePage.js +0 -798
- package/.claude/worktrees/fix-save-button-disable/public/Utils/personalDetailsUtils.js +0 -25
- package/.claude/worktrees/fix-save-button-disable/public/Utils/sharedUtils.js +0 -235
- package/.claude/worktrees/fix-save-button-disable/public/consts.js +0 -113
- package/.claude/worktrees/fix-save-button-disable/public/index.js +0 -5
- package/.claude/worktrees/fix-save-button-disable/public/messages.js +0 -16
- package/.claude/worktrees/fix-save-button-disable/public/sso-auth-methods.js +0 -43
- package/.husky/pre-commit +0 -19
- package/.prettierignore +0 -7
- package/.prettierrc.json +0 -16
- package/backend/__tests__/daily-pull-execution-check.test.js +0 -124
- package/backend/__tests__/ensure-unique-urls-in-batch.test.js +0 -129
- package/backend/__tests__/login-email-sync.test.js +0 -49
- package/backend/__tests__/map-link.test.js +0 -115
- package/backend/__tests__/transient-retry-and-bulk-lookup.test.js +0 -129
- package/backend/__tests__/url-uniqueness.test.js +0 -194
- package/backend/__tests__/url-validation.test.js +0 -69
- package/dev-only-scripts/extract-duplicate-url-groups.js +0 -201
- package/dev-only-scripts/find-duplicate-ids.js +0 -159
- package/dev-only-scripts/find-duplicate-urls.js +0 -201
- 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
|
-
};
|